var gErrors = 0; //number of errors is set to none to begin with

function validate(myform)
{
	//alert(myform);
	var appenddiv=myform.getAttribute('appenddiv');
	var appendmessage=myform.getAttribute('appendmessage');
	var error;
	var elementArray=myform.elements;
	sFeedbackall="";
	error=0;
	for(var i=0;i<elementArray.length;i++)
	{
		var element=elementArray[i];
		sVal = element.value; //sVal is the value of the input field being validated
   		var sFeedBackall; //feedback message sent back to the user
		var sFeedbackLoc = element.getAttribute('message');
		var required=element.getAttribute('required');
		var unique=element.getAttribute('unique');
		var uniqueaccross=element.getAttribute('uniqueaccross');
		var inputmask=element.getAttribute('inputmask');
		var minlength=element.getAttribute('minlength');
		var validate=element.getAttribute("validate");
		
		var minval=element.getAttribute('minval');
		var maxval=element.getAttribute('maxval');
		
		var appendMessage=element.getAttribute('appendmessage');
		var exception=element.getAttribute('exception');
		var appendlabel=element.getAttribute('appendlabel');
		
		var res;
		//alert(sVal);
		//alert(required);
		//alert(validate);
		
		///////////////////////
		
		var res;
		var flag=0;
		
		 if(inputmask)
			{
		var actual_mask=inputmask;
		for(var icount=0;icount<inputmask.length;icount++)
		{
		actual_mask=actual_mask.replace("#","_")
		}
	//	alert(actual_mask);
		if(sVal==actual_mask)
		sVal="";
			}
		
		if (required == "true")
		{
				//alert('aaaa');
			if(isEmpty(sVal))
				sFeedbackall = sFeedbackall+"<br>"+appendlabel+" : "+REQUIRED;
				
			if(!isEmpty(sVal))
			{
				//sFeedback = "Thank you";
				//element.className=normalclass;
				sFeedback='';
			}
			else
			{
				flag=1;error=1;
				//element.className=errorclass;
				sFeedback = REQUIRED;
			}
			//sFeedback = validateRequired(sVal); //validateRequired() checks if it is invalid and sends back feedback
		}
		
		//alert('submit:');
		if(exception)
		for(ia=0;ia<exception.length;ia++)
		{
			var stra;
		 	var ca=exception.charAt(ia);
		 	stra=sVal.replace(ca,'');
			
		 	sVal=stra;
			
		 	
		}
				
		//alert(sVal);
		
		if (sVal != "") //if the value is blank we don't need to validate.  If it is required, the word
			//"required"  will already be the feedback message from the validateRequired() function
		{
		// check the different validation cases (ie: email, phone, etc.)
			switch (element.getAttribute('validate'))
			{
				case "int" :        if(!isInteger(sVal))
									{
									   sFeedback=INVALID_INTEGER;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" :"+INVALID_INTEGER;
									   flag=1;error=1;
									}
									break;
				case "signedint" :  if(!isSignedInteger(sVal))
									{	
									   sFeedback=INVALID_SIGNED_INTEGER;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_SIGNED_INTEGER;
									   flag=1;error=1;
									}
									break;
				case "positiveint": if(!isPositiveInteger(sVal))
									{
									   sFeedback=INVALID_POSITIVE_INTEGER;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_POSITIVE_INTEGER;
									   flag=1;error=1;
									}
									break;
				case "letter" :     if(!isLetter(sVal))
									{
									   sFeedback=INVALID_LETTER;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_LETTER;
									   flag=1;error=1;
									}
									break;
				case "digit":       if(!isDigit(sVal))
									{
									   sFeedback=INVALID_DIGIT; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_DIGIT;  
									   flag=1;error=1;
									}
									break;
				case "letterordigit":if(!isLetterOrDigit(sVal))
									{
									    sFeedback=INVALID_LETTER_OR_DIGIT;  
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_LETTER_OR_DIGIT;  
									   flag=1;error=1;
									}
									break;
				case "nonnegativeint":if(!isNonnegativeInteger(sVal))
									{
										 sFeedback=INVALID_NON_NEGATIVE_INTEGER;  
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_NON_NEGATIVE_INTEGER;  
									   flag=1;error=1;
									}
									break;
				case "negativeint": if(!isNegativeInteger(sVal))
									{
										sFeedback=INVALID_NEGATIVE_INTEGER; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_NEGATIVE_INTEGER;  
									   flag=1;error=1;
									}
									break;
				case "nonpositiveint":if(!isNonpositiveInteger(sVal))
									{
									   sFeedback=INVALID_NONPOSITIVE_INTEGER; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_NONPOSITIVE_INTEGER; 
									   flag=1;error=1;
									}
									break;
				case "float":		if(!isFloat (sVal))
									{
									   sFeedback=INVALID_FLOAT; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_FLOAT; 
									   flag=1;error=1;
									}
									break;
				case "signedfloat": if(!isSignedFloat(sVal))
									{
									   sFeedback=INVALID_SIGNED_FLOAT; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_SIGNED_FLOAT; 
									   flag=1;error=1;
									}
									break;
				case "whitespace":/*if(!isWhitespace(sVal))
									{
									   sFeedback=INVALID_ALPHANUMERIC; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_ALPHANUMERIC; 
									   flag=1;error=1;
									}*/
									break;
				case "ssn":			if(!isSSN(sVal))
									{
									   sFeedback=INVALID_SSN;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_SSN; 
									   flag=1;error=1;
									}
									break;
				case "usphone":		if(!isUSPhoneNumber(sVal))
									{
									   sFeedback=INVALID_US_PHONE_NUMBER; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_US_PHONE_NUMBER; 
									   flag=1;error=1;
									}
									break;
				case "intphone":	if(!isInternationalPhoneNumber(sVal))
									{
									   sFeedback=INVALID_INTERNATIONAL_PHONE_NUMBER; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_INTERNATIONAL_PHONE_NUMBER; 
									   flag=1;error=1;
									}
									break;
				case "zip":         if(!isZIPCode(sVal))
									{
									   sFeedback=INVALID_ZIP_CODE;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_ZIP_CODE;
									   flag=1;error=1;
									}
									break;
				case "state":		if(!isStateCode(sVal))
									{ 
									   sFeedback=INVALID_STATE_CODE;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_STATE_CODE;
									   flag=1;error=1;
									}
									break;
				case "email":       if(!isEmail(sVal))
									{
									   sFeedback=INVALID_EMAIL_ADDRESS;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_EMAIL_ADDRESS;
									   flag=1;error=1;
									}
									break;
				case "year":		if(!isYear(sVal))
									{
									   sFeedback=INVALID_YEAR;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_YEAR;
									   flag=1;error=1;
									}
									break;
				case "range":		if(!isIntegerInRange (sVal,minval,maxval))
									{
									   sFeedback=INTEGER_NOT_IN_RANGE; 
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INTEGER_NOT_IN_RANGE; 
									   flag=1;error=1;
									}
									break;
				case "month": 		if(!isMonth(sVal))
									{
									   sFeedback=INVALID_MONTH;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_MONTH;
									   flag=1;error=1;
									}
									break;
				case "day":			if(!isDay(sVal))
									{
									   sFeedback=INVALID_DAY;
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_DAY;
									   flag=1;error=1;
									}
									break;
									
				case "date":		/*if(!isDate(sVal))
									{
									   sFeedback=INVALID_DATE;			
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_DATE;			 	 
									   flag=1;error=1;
									}*/
								
									
									break;
				case "currency":
					 break;
				
				case "phone":
					 break;
				case "text":      if(!isText(sVal))
								  {
				  				     sFeedback=INVALID_TEXT;			 	 
								     sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_TEXT;			 	 									
									   flag=1;error=1;
								   }
								   break;
				case "textandnum": if(!isTextandNum(sVal))
								   {
				  				      sFeedback=INVALID_TEXTANDNUM;			 	 
								        sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_TEXTANDNUM;			 	 
									   flag=1;error=1;
								   }
								   break;
				case "website":		if(!isWebsite(sVal))
									{ 
									   sFeedback=INVALID_WEBSITE_ADDRESS;			
									   sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_WEBSITE_ADDRESS;			 	 
									   flag=1;error=1;
									}
									break;
				case "datetime":
					 break;
				case "name":       if(!isName(sVal))
								   {
				  				      sFeedback=INVALID_NAME;			 	 
								      sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+INVALID_NAME;			 	 								
								      flag=1;error=1;
								   }
								   break;
				case "password": if(!checkpass(myform,sVal))
							   	 {
			   					    sFeedback=PASSWORDS_DONT_MATCH;
								    sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+PASSWORDS_DONT_MATCH;			 	 
									
								    flag=1;error=1;
							   	}
			 				    break;
					
				case "confirm":  if(!checkconfirm(myform,sVal))
							   	 {
			   					    sFeedback=PASSWORDS_DONT_MATCH;
								    sFeedbackall=sFeedbackall+"<br>"+appendlabel+" : "+PASSWORDS_DONT_MATCH;			 	 
									
								    flag=1;error=1;
							   	 }
			 	 			     break;
			}
		}
		///////////////////////////other part////////////
			
		if(!isEmpty(sVal))
		{
			
			if(flag==1)
			{
				//element.className=errorclass;
				
				if(element.getAttribute('validate')=="confirm")
				{
					 
					 passelement=getConfirmField(myform);
					 //passelement.className=errorclass;
					 sFeedbackPass=passelement.getAttribute('message');
				}
				
				if(element.getAttribute('validate')=="password")
				{
					 
					 passelement=getPassField(myform);
					 //passelement.className=errorclass;
					 sFeedbackPass=passelement.getAttribute('message');
				}
			}
			else
			{
				//element.className=okclass;
				if(element.getAttribute('validate')=="confirm")
				{
					passelement=getConfirmField(myform);
					//passelement.className=okclass;
					sFeedbackPass=passelement.getAttribute('message');
				}
				
				if(element.getAttribute('validate')=="password")
				{
					 
					 passelement=getPassField(myform);
					 //passelement.className=okclass;
					 sFeedbackPass=passelement.getAttribute('message');
				}
				
			}
		}
		
		if(showtick==1)
		{
			if(flag==1)
			{
				sFeedback='<img src=\"validation/error.png\"> '+sFeedback;
			}
			else
			{
				if(!isEmpty(sVal))
				sFeedback='<img src=\"validation/ok.png\"> ';
			}
		}
		
		
				// after validation is complete return the feedback 
		if(document.getElementById(sFeedbackLoc))
		{
			if(appendmessage!="true")
				document.getElementById(sFeedbackLoc).innerHTML = sFeedback;	
		}
		
		sFeedback="";
			
		/*if(document.getElementById(sFeedbackPass))
			document.getElementById(sFeedbackPass).innerHTML = sFeedback;	*/
		///////////////////////////other part//////////// 
		
		///////////////////////
		
	}
	if(appendmessage=="true")
		document.getElementById(appenddiv).innerHTML = '<font color=\"red\">'+sFeedbackall+'</font>';	
	//alert(sFeedbackall);
	if(error==1)
		return false;
	else
		return true;
}