/*
**********************************************************************************
Name				: Validations.js
Description			: Validations for Date, Currency, Email, Phone, Fax, Zip and etc.,
Developer			: Ch. Kishore
Creation Date		: 27/05/2001
Last revised		: 27/05/2001
Revision history
Modified by		Date Modified		Reason for modification
-----------		-------------		-----------------------
xxxxx			xx/xx/xxxx			xxxxx
Yyyy			yy/yy/yyyy			yyyyyyyy
***********************************************************************************
*/


// ***********				Declaration of Functions				***********    


//	function isValidDate(formName,day,mon,year)
//	function isValidCurrency(formName, fieldName)
//	function isValidEmail(formName, fieldName)
//	function isValidZip(formName,fieldName)
//	function isValidFax(formName, fieldName)
//	function isValidName(formName, fieldName)



// ***********    Function to  the find Index of specified Form		***********    

function findFormIndex(formName)
{
	var frmLen = document.forms.length ;
	var frmIndex;
	var formFlag = false;
		
	for (var i=0; i<frmLen; i++)
	{	
		if(document.forms[i].name == formName )
		{
			frmIndex = i;
			formFlag = true;
		}
	}
	
	if (formFlag==true)
		return frmIndex;
	else
	{
	    alert('Invalid Form Name');
	    return false;
	}
	    
}		// end of Function  findFormIndex(formName)





// ***********    Function to  the find Index of specified Element		***********    


function findElementIndex(frmIndex, fieldName)
{
	var elemLen = document.forms[frmIndex].elements.length;
	var fieldIndex;
	var fieldFlag = false;
	
	for (var i=0; i<elemLen; i++)
	{	
		if(document.forms[frmIndex].elements[i].type == 'text'  || 
			document.forms[frmIndex].elements[i].type == 'select-one')
		{	
			if (document.forms[frmIndex].elements[i].name == fieldName)
			{
				fieldIndex = i;
				fieldFlag = true;
			}	
		}
	}
	if (fieldFlag == true)
		return fieldIndex;
	else
	{
	    alert('Invalid Field Name');
	    return false;
	}
	
}		// end of Function findElementIndex(frmIndex, fieldName) 




// ***********    Function to Validate the Given Date		***********    

function isValidDate(formName,day,mon,year)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var dayIndex	= findElementIndex(frmIndex, day);
	var monIndex	= findElementIndex(frmIndex, mon);
	var yearIndex	= findElementIndex(frmIndex, year);
	
	// getting the values of Date
		
	var ddInd=document.forms[frmIndex].elements[dayIndex].selectedIndex;
	var mmInd=document.forms[frmIndex].elements[monIndex].selectedIndex;
	var yyInd=document.forms[frmIndex].elements[yearIndex].selectedIndex;
		
	var dd=document.forms[frmIndex].elements[dayIndex][ddInd].value;
	var mm=document.forms[frmIndex].elements[monIndex][mmInd].value;
	var yy=document.forms[frmIndex].elements[yearIndex][yyInd].value;
	
	
	
	if (dd==0)
	{
	 alert('Please Select the Day');
	 document.forms[frmIndex].elements[dayIndex].focus();
	 }
	else if(mm==0)
	{
	 alert('Please Select the Month');
	 document.forms[frmIndex].elements[monIndex].focus();
	 }
	else if(yy==0)
	{
	 alert('Please Select the Year');
	 document.forms[frmIndex].elements[yearIndex].focus();
	 }
	else		// Month Validation
	{

		if(mm==1 || mm==3 || mm==5 || mm==7 || mm==8 || mm==10 || mm==12)
		 	totDays=31;				//	if the month is Jan,Mar,May,July,Aug,Oct and Dec
		else if(mm==4 || mm==6 || mm==9 || mm==11)
		    totDays=30;				//	if the month is Apr,Jun,Sep and Nov
			else if(yy%4==0 && yy%100!=0 || yy%400==0)
				totDays=29;			//	if the year is Leap Year
				else  
				    totDays=28;		//	if the year is not a Leap Year
					   
		if (dd > totDays)
		 {
		 	alert("Invalid date entered");
		 	document.forms[frmIndex].elements[dayIndex].focus();
		 	returnFlag=false;
		 	return false; 
		 }
		 
		if (mm<1 || mm>12)			//	if the month is not a valid Month
		 {
		 	alert("Invalid month entered");
		 	document.forms[frmIndex].elements[monIndex].focus();
		 	returnFlag=false;
		 	return false; 
		 }
	
	}		// end of else for Month Validation
	
	if(returnFlag==true)
	{
		return true;
	}

}			// end of Function  isValidDate(formName,day,mon,year) 




// ***********    Function to Validate the Given Currency		***********    


function isValidCurrency(formName, fieldName)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var fieldIndex	= findElementIndex(frmIndex, fieldName);
	
	var currVal = document.forms[frmIndex].elements[fieldIndex].value;	
	
	currVal = currVal.toString().replace(/\$|\,/g,'');

	if ( isNaN(currVal) )
	{
		alert("Invalid Currency Format");
		document.forms[frmIndex].elements[fieldIndex].value='';
		document.forms[frmIndex].elements[fieldIndex].focus();
		returnFlag = false;
		return false ;
	}
	else if( currVal.charAt(0)=='-')
	{
		alert("Negative Numbers not Allowed");
		document.forms[frmIndex].elements[fieldIndex].focus();
		returnFlag = false;
		return false ;
	}

	sign = (currVal == (currVal = Math.abs(currVal)));
	currVal = Math.floor(currVal * 100 + 0.50000000001);
	var cents = currVal % 100;
	currVal = Math.floor(currVal / 100).toString();
	if(cents < 10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((currVal.length-(1+i))/3); i++)
		currVal = currVal.substring(0,currVal.length-(4*i+3))+','+
			currVal.substring(currVal.length-(4*i+3));
	document.forms[frmIndex].elements[fieldIndex].value = (((sign)?'':'-') + currVal + '.' + cents);

	if(returnFlag==true)
	{
		return true;
	}

}			// end of Function isValidCurrency(formName,fieldName)




// ***********    Function to Validate the Given Email		***********    


function isValidEmail(formName, fieldName)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var fieldIndex	= findElementIndex(frmIndex, fieldName);
	 	var emailVal=document.forms[frmIndex].elements[fieldIndex].value; 
 	if (emailVal != 0)	{		if ( isValidChar(emailVal, frmIndex, fieldIndex) )  		 {			 
		   i=0;		   while((i<emailVal.length) && (emailVal.charAt(i) != '@'))			 i++;		   if(i==emailVal.length)			{				alert("'@'  is required in the email address");	 				document.forms[frmIndex].elements[fieldIndex].focus();	
				returnFlag = false;				    return false;	      	 			}		   else	if(emailVal.charAt(0) == '.')	 			{				alert("' . ' can not be the first character of email address.");					document.forms[frmIndex].elements[fieldIndex].focus();	     
				returnFlag = false;				return false;				 }		   
		 
		   i=0;       	 		   while((i<emailVal.length)&&(emailVal.charAt(i) != '.'))  			    i++;		   if(i==emailVal.length)	 		    {	 				alert("' . '  is required in the email address");						document.forms[frmIndex].elements[fieldIndex].focus();	
				returnFlag = false;   				return false;	      		    }		   else	if(emailVal.charAt(i-1) == '@')		     {					alert("Character(s) are needed between  ' @ ' and  ' . '");						document.forms[frmIndex].elements[fieldIndex].focus();	
				returnFlag = false;				return false;			     }		     else if(i==emailVal.length-1)	 			  {				   alert("' . '  can't be the last character of email address");					   document.forms[frmIndex].elements[fieldIndex].focus();  	
				   returnFlag = false; 				   return false;	  		  		}					  				i=0;	count=0;			while((i<emailVal.length) && (count<2))			{			  if(emailVal.charAt(i)=='@')			     count++; i++;			 }
			if(count > 1)			{					alert("'@'  can't be entered more than once");					document.forms[frmIndex].elements[fieldIndex].focus();
				returnFlag=false;					return false;			}			i=0;			while(i<emailVal.length-1)				{				if((emailVal.charAt(i)=='.')&&(emailVal.charAt(i+1)=='.'))				{						alert("Character(s) are needed between  ' . ' and  ' . '");					document.forms[frmIndex].elements[fieldIndex].focus();
					returnFlag=false;					return false;				}				else 
					i++;				}
						if(emailVal.charAt(emailVal.length-1)=='.')			{			    alert("' . '  can't be the last character of email address");			 	document.forms[frmIndex].elements[fieldIndex].focus();  
			 	returnFlag=false;		        return false;				}		}
	   else 
		{
			returnFlag=false;		    return false;	
		}		}
 	if(returnFlag==true)
	{
		return true;
	}

}			// end of Function ****** isValidEmail(formName, fieldName)  *******



// ***********    Function to allow Valid Chars in Email		***********    

function isValidChar(emailVal, frmIndex,fieldIndex){ 
	var returnFlag	= true;
	var entry = "Email address";	if( emailVal == 0 ) 	{			alert("Please enter the "+entry);		document.forms[frmIndex].elements[fieldIndex].focus();
		returnFlag	= false;	   return false;	 }		else 	{  	  i=0;	  while(i < emailVal.length)	   {  		  if((emailVal.charAt(i) < 'a') || (emailVal.charAt(i) > 'z'))		      if((emailVal.charAt(i)!='_') && (emailVal.charAt(i)!='.') && (emailVal.charAt(i)!='-') && (emailVal.charAt(i)!='@') && ((emailVal.charAt(i)<'A') || (emailVal.charAt(i)>'Z'))) 		      { 	   			  if((emailVal.charAt(i) < '0') || (emailVal.charAt(i) > '9'))				  {					     if(emailVal.charAt(i) == ' ')				     {   				     	  alert("Space is not allowed in "+entry);				          document.forms[frmIndex].elements[fieldIndex].focus();
				          returnFlag	= false;				          return false;					      }				     else if(fieldIndex != 1)				      {				        alert("' "+emailVal.charAt(i)+" '"+"  is not allowed in "+entry);				        document.forms[frmIndex].elements[fieldIndex].focus();	
				        returnFlag	= false;				        return false; 				      }	   				  else if((emailVal.charAt(i) != '@')&&(emailVal.charAt(i) != '.'))	   					{	   			 			alert("' "+emailVal.charAt(i)+" '"+"  is not allowed in "+entry);				     		document.forms[frmIndex].elements[fieldIndex].focus();
				     		returnFlag	= false;				     		return false;						}				  }			 }			i++;	   }		// end of While	 }
  
  if(returnFlag==true)
	{
		return true;
	}
  }

// ***********    Function to Validate the Given Zip		***********    


function isValidZip(formName,fieldName)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var fieldIndex	= findElementIndex(frmIndex, fieldName);
	 	var zipVal=document.forms[frmIndex].elements[fieldIndex].value; 
		if (zipVal!=0)		{		if((zipVal.substring(5,6)) != "-")		{			if(isNaN(zipVal))			{				alert("Enter only Numbers");				document.forms[frmIndex].elements[fieldIndex].focus();				document.forms[frmIndex].elements[fieldIndex].value='';
				returnFlag = false;
				return false ;			}	 			else			{				if(zipVal.length < 5)				{					alert("Zip should be at least 5 Digits");					document.forms[frmIndex].elements[fieldIndex].focus();					returnFlag = false;
					return false ;				}				else if(zipVal.length > 5)						document.forms[frmIndex].elements[fieldIndex].value=
							zipVal.substring(0,5)+"-"+zipVal.substring(5,9);			}		}	}	
  
	if (returnFlag==true)
	{
		 return true;
	}

}		// end of Function



// ***********    Function to Validate the Given Phone Number		***********    

// ***********    Function to Validate the Given Fax Number		***********    


function isValidFax(formName, fieldName)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var fieldIndex	= findElementIndex(frmIndex, fieldName);
	 	var faxVal=document.forms[frmIndex].elements[fieldIndex].value; 
		if(faxVal!=0)	{		if( (faxVal.substring(0,1)) != "(" )		{			if(isNaN(faxVal))			{				alert("Enter only Numbers");				document.forms[frmIndex].elements[fieldIndex].value='';
				document.forms[frmIndex].elements[fieldIndex].focus();
				returnFlag = false;
				return false ;			}				else			{				if(faxVal.length < 10)				{					alert("Fax Number should be atleast 10 Digits");					document.forms[frmIndex].elements[fieldIndex].focus();
					returnFlag = false;
					return false ;				}					else				{					document.forms[frmIndex].elements[fieldIndex].value = 
						"(" +faxVal.substring(0,3) +") " +faxVal.substring(3,6)+ "-" +faxVal.substring(6,10);
				}			}		}		}	  
	if (returnFlag==true)
	{
		 return true;
	}

}		// end of Function



// ***********    Function to Validate the Given Name		***********    


function isValidName(formName, fieldName)
{
	var returnFlag	= true;
	var frmIndex	= findFormIndex(formName);
	var fieldIndex	= findElementIndex(frmIndex, fieldName);
	
	var nam = document.forms[frmIndex].elements[fieldIndex].value;	
	
	if (nam != 0)
	{		for (var i=0; i<nam.length; i++)
		{	
			if( (nam.charAt(i)>='a' && nam.charAt(i)<='z') || 
				(nam.charAt(i)>='A' && nam.charAt(i)<='Z') ||
				(nam.charAt(i)=='.') || nam.charAt(i)==' ')
			{
				
			}
			else
			 {
				alert('Invalid Characters Found');					document.forms[frmIndex].elements[fieldIndex].focus();  	
				returnFlag = false; 				return false;	
			 }
		}
	
	}
	if(returnFlag==true)
	{
		return true;
	}
}
