/*
----------------------------------------------------------
Author  	    	:Khalique Manyar (m_khalique@hotmail.com)
Module          	:SCM
Description     	:Generic javascript validation file 
Date of Written 	:11/01/2001
Date of Last Modified : 19/01/2001
----------------------------------------------------------*/

function validateMe(Arr)
{
	var count=0;
	var passcount=0;
	var gotErr="N";
	var message="Please correct following errors...   \n\n";
	var PassArray = new Array(2);
	
	for (k = 0; k < Arr.length; k++)
	{
		var myElement=Arr[k][0];
		var whatToDo=Arr[k][1];
		var myMessage=Arr[k][2];
		var elementType=Arr[k][3];

		if(elementType=="date")
		{
			if(myElement.value.length !=0)
			{	
				if(!checktxtDate(myElement,whatToDo))
				{
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";			
				}
			}
		}
		else if(elementType=="date/Empty")
		{
			if(myElement.value == "" || myElement.value.charAt(0)==" ")
			{	
				message = message + (++count) + ". " + myMessage + "\n";
				gotErr="Y";
			}
			else if(!checktxtDate(myElement,whatToDo))
			{
				message = message + (++count) + ". " + myMessage + "\n";
				gotErr="Y";			
			}
		}
		else if(elementType=="password")
		{
			PassArray[passcount]=myElement.value;							
			if(passcount==1 && !checkPassword(PassArray))
			{
				message = message + (++count) + ". " + myMessage + "\n";
				gotErr="Y";	
			}
			++passcount;
		}
		else if(elementType=="text") //Validations if form element type is text box
		{
			var myValue=myElement.value;
			var myLength=myValue.length;
			
			if(whatToDo=="Alpha")
			{
				var invalidchars="0123456789";
				for(x=0;x<invalidchars.length;x++)
				{
					if(myValue.indexOf(invalidchars.charAt(x))>-1)
					{
						message = message + (++count) + ". " + myMessage + "\n";
						gotErr="Y";		
					}				
				}
			}

			if(whatToDo=="Alpha/Empty")
			{
				if(myValue == "" || myValue.charAt(0)==" ")
				{ 
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";
				}
				else 
				{
					var invalidchars="0123456789";
					for(x=0;x<invalidchars.length;x++)
					{
						if(myValue.indexOf(invalidchars.charAt(x))>-1)
						{
							message = message + (++count) + ". " + myMessage + "\n";
							gotErr="Y";	
							break;	
						}				
					}
				}
			}

			if(whatToDo=="URL")
			{
				if(myLength!=0)
				{
					var substr=myValue.substring(0,4);
					var myPos=myValue.indexOf("..");
					var myLastPos=myValue.lastIndexOf(".");
					if(substr!="www." || myPos>1 || myLastPos >=myLength-1)
					{
						message = message + (++count) + ". " + myMessage + "\n";
						gotErr="Y";		
					}
				}			        
			}

			if(whatToDo == "Empty") // validates to disallow empty input
			{
				if(myValue == "" || myValue.charAt(0)==" ")
				{ 
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";
				}
			}
	
			if(whatToDo == "NumericOnly") // validates to disallow characters
			{
/*				if(isNaN(myValue))
				{ 
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";
				}
*/
				var invalidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\{\}\/\'\:\)\(\,\-\=\+\_\~\`\!\@\#\$\%\^\&\*\;\>\<\]\[";

				for (l=0; l < invalidChars.length; l++)
				{
					if(myValue.indexOf(invalidChars.charAt(l)) > -1)
					{
						message = message + (++count) + ". " + myMessage + "\n";	
						gotErr="Y";
						break;
					}
				}	

			}

			if(whatToDo == "NumericOnly/Empty") // validates to disallow characters
			{									// as well as empty
				if (myValue.length != 0)
				{
					var invalidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\{\}\/\'\:\)\(\,\=\+\_\~\`\!\@\#\$\%\^\&\*\;\>\<\.\]\[";
					for (l=0; l < invalidChars.length; l++)
					{
						if(myValue.indexOf(invalidChars.charAt(l)) > -1)
						{
							message = message + (++count) + ". " + myMessage + "\n";	
							gotErr="Y";
							break;
						}
					}
				}
				else
				{
					message = message + (++count) + ". " + myMessage + "\n";	
					gotErr="Y";		
				}	
			}
	
			if(whatToDo == "Email")
			{
				if (myValue.length != 0)
				{
					if(!isvalidEmail(myValue))
					{
						message = message + (++count) + ". " + myMessage + "\n";
						gotErr="Y";
					}
				}
				else
				{
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";
				}
			}
	
			if(whatToDo == "NoSpace") // validates to disallow spaces in between
			{						  // input by the user
				if(myValue == "")
				{
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";
				}	
				else
				{
					for(j=0; j < myLength; j++)
					{
						if(myValue.charAt(j) == " ")	
						{
							message = message + (++count) + ". " + myMessage + "\n";
							gotErr="Y";
						}
					}
				}		
			}
	
			if(whatToDo == "AlphaNumeric")
			{
				var invalidChars = "\{\}\/\'\:\)\(\,\-\=\+\_\~\`\!\@\#\$\%\^\&\*\;\>\<\.\]\[";
				for (l=0; l < invalidChars.length; l++)
				{
					if(myValue.indexOf(invalidChars.charAt(l)) > -1)
					{
						message = message + (++count) + ". " + myMessage + "\n";	
						gotErr="Y";
						break;
					}
				}			
			}

			if(whatToDo == "AlphaNumeric/Empty") // validates to disallow extra characters 
			{							   // other than 0-9 and a-z	
				if(myValue == "" || myValue.charAt(0)==" ")
				{
					message = message + (++count) + ". " + myMessage + "\n";
					gotErr="Y";		
				}
				else
				{
					var invalidChars = "\{\}\/\'\:\)\(\,\-\=\+\_\~\`\!\@\#\$\%\^\&\*\;\>\<\.\]\[";
					for (l=0; l < invalidChars.length; l++)
					{
						if(myValue.indexOf(invalidChars.charAt(l)) > -1)
						{
							message = message + (++count) + ". " + myMessage + "\n";	
							gotErr="Y";
							break;
						}
					}
				}	
			}
		}
		else if (elementType="select") //Validations if form element type is List box
		{
			if(!checkSelectBox(myElement,whatToDo))	
			{
				message = message + (++count) + ". " + myMessage + "\n";
				gotErr="Y";
			}			
		}		
	}

	if(gotErr == "Y")
	{
		alert(message);
		Arr[0][0].focus();
		return false;
	}
	return true;
}

function isvalidEmail(email) // function to validate email address
{			
	invalidchrs	 = ";:/, ";
	for (i=0; i<invalidchrs.length; i++) 
		if (email.indexOf(invalidchrs.charAt(i)) > -1) 
			return false; 	// there is some invalid characters

	atpos= email.indexOf("@",0);
	if (atpos <1 || email.indexOf("..", atpos)!=-1) 
	        return false; 	// "@" symbol is must, 
							// should not be a first chr 
							// email should not contain ".." continously

	if (email.indexOf("@",atpos+1) != -1) 
	        return false;	// should be only one '@' symbol

	dotpos = email.indexOf(".",atpos);
	if (dotpos == -1) 		        
	        return false;	// at least one "." after the "@"

	if(dotpos-atpos==1)
		return false;		// atlease a chr between '@' and '.' 

	do
	{
		if (dotpos+3 > email.length) 
	        return false; 	// at least 2 chrs after "." is must
	}while((dotpos=email.indexOf(".",dotpos+2))!=-1); // seek next '.'

	return true;
}

function checkSelectBox(boxName,valueToCheck) // function to validate list box
{
	var idx=boxName.selectedIndex;
	var val=boxName[idx].value;
	if (val == valueToCheck) return false;
	else return true;
}

function checkPassword(elements) // function to check password with confirm password
{
	if(elements[0]==elements[1]) return true;
	else return false;	
}

/******FUNCTION TO CHECK DATE*********/

function checkDate(datearr) //to validate the date
{
	for (a = 0; a < datearr.length; a++)
	{
		var myday=datearr[a][0];
		var mymonth=datearr[a][1];
		var myyear=datearr[a][2];

		var i=myday.selectedIndex;
		var intday=myday[i].value;
		
		var j=mymonth.selectedIndex;
		var intMonth=mymonth[j].value;
	
		var k=myyear.selectedIndex;
		var intyear=myyear[k].value;

		if(intday !="0" && intMonth !="0" && eval(intyear)!="0")
		{
			if(intday > 31 || intMonth > 12 || intday < 1 || intMonth < 1 || intyear < 1)
			{
				alert("invalid date");
				return false;
			}
			else if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31)) 
			{
					alert("invalid day according to month");	
					return false;		
			}
			else if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30)) 
			{
				alert("invalid day according to month");		
				return false;		
			}
			else if(intMonth == 2)
			{
				if(LeapYear(intyear)==true)
				{
					if(intday>29)
					{
						alert("invalid day");
						return false;
					}
				}
				else
				{
					if(intday>28)
					{
						alert("invalid day");
						return false;
					}		
				}
			}
		}		
		else //code added on 30/12/2002
		{
			alert("Please select Proper date");
			return false;
		}
	}
	return true;
}

function LeapYear(intyear) // to check if it is leap year or not
{
	if (intyear % 100 == 0) 
	{
		if (intyear % 400 == 0) { return true; }
	}
	else 
	{
		if ((intyear % 4) == 0) { return true; }
	}
	return false;
}

function checktxtDate(myDate,pattern) //to validate the date from text field
{
		var monthArr= new Array(13);
		monthArr[0]=" ";
		monthArr[1]="JAN";
		monthArr[2]="FEB";
		monthArr[3]="MAR";
		monthArr[4]="APR";
		monthArr[5]="MAY";
		monthArr[6]="JUN";
		monthArr[7]="JUL";
		monthArr[8]="AUG";
		monthArr[9]="SEP";
		monthArr[10]="OCT";
		monthArr[11]="NOV";
		monthArr[12]="DEC";
		var validSeparators = new Array("-"," ","/",".");
		var patternArr  = "notMatching";
		for(vs=0;vs<validSeparators.length;vs++)
		{
			if(myDate.value.indexOf(validSeparators[vs])!=-1)
			{
				patternArr=myDate.value.split(validSeparators[vs]);
				break;
			}	
		}
		if(patternArr=="notMatching" || patternArr.length !=3)
		{
			return false;
		}
		else if(pattern=="dd/mm/yy" || pattern=="dd/mm/yyyy" || pattern=="dd-mm-yyyy" || pattern=="dd-mm-yy" || pattern=="dd.mm.yy" || pattern=="dd.mm.yyyy")
		{
			intday=patternArr[0];
			intMonth=patternArr[1];
			intyear=patternArr[2];
			if(isNaN(intMonth))
			{
				for(month=1;month<monthArr.length;month++)				
				{
					if(monthArr[month]==intMonth.toUpperCase())
					{
						intMonth=month;
						break;
					}	
				}
			}
		}
		else if(pattern=="mm/dd/yy" || pattern=="mm/dd/yyyy" || pattern=="mm-dd-yy" || pattern=="mm-dd-yyyy" || pattern=="mm.dd.yy" || pattern=="mm.dd.yyyy")
		{
			intday=patternArr[1];
			intMonth=patternArr[0];
			intyear=patternArr[2];
			if(isNaN(intMonth))
			{
				for(month=1;month<monthArr.length;month++)				
				{
					if(monthArr[month]==intMonth.toUpperCase())
					{
						intMonth=month;
						break;
					}	
				}
			}
		}
		else if(pattern=="yy/mm/dd" || pattern=="yyyy/mm/dd" || pattern=="yy-mm-dd" || pattern=="yyyy-mm-dd" || pattern=="yy.mm.dd" || pattern=="yyyy.mm.dd")
		{
			intday=patternArr[2];
			intMonth=patternArr[1];
			intyear=patternArr[0];
			if(isNaN(intMonth))
			{
				for(month=1;month<monthArr.length;month++)				
				{
					if(monthArr[month]==intMonth.toUpperCase())
					{
						intMonth=month;
						break;
					}	
				}
			}
		}

		if(eval(intday) !=0 || eval(intMonth) !=0 || eval(intyear)!=0)
		{
			if(intday > 31 || intMonth > 12 || intday < 1 || intMonth < 1 || intyear < 1)
			{
				return false;
			}
			else if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31)) 
			{
				return false;		
			}	
			else if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30)) 
			{
				return false;		
			}
			else if(intMonth == 2)
			{
				if(LeapYear(intyear))
				{
					if(intday>29)
					{
						return false;
					}
				}
				else
				{
					if(intday>28)
					{
						return false;
					}		
				}
			}
		}
		else
		{
			return false;
		}		
	return true;
}

