//This Library contains many functions for validation of a form. 

function isEmail(field, errorMsg)
{
	if (field.value==""){return true;}
	hasLength = false;
	var hasAt = false;
	var hasDot = false;
	if(field.value.length>5){hasLength = true;}
	if(field.value.lastIndexOf(".")>(field.value.length-3))
	{
		alert(errorMsg);
		field.focus();
		return false;
	}
	if(field.value.lastIndexOf("@")==(field.value.length-1))
	{
		alert(errorMsg);
		field.focus();
		return false;
	}
	if(((field.value.indexOf("@")<field.value.lastIndexOf("."))&& field.value.indexOf("@")>0)&&(field.value.indexOf(".")!=-1))
	{
		return true;
	}
	
	alert(errorMsg);
	field.focus();
	return false;
}


function isEmpty(field, msg)
{
	str=field.value;
	// Check whether string is empty.
	for (var intLoop = 0; intLoop < str.length; intLoop++)
	   if (" " != str.charAt(intLoop)){return false;}
		  
	alert (msg);
	field.focus();
	return true;
}

function isDate(day, month, year, errorMsg)
{
	//parameters should be passed in dd, mm & yyyy format or in dd, Mon, yyyy format to this Function
	if (day.value=="" && month.value=="" && year.value == ""){return true;}
	var enteredDate = new Date(year.value+"/"+month.value+"/"+day.value);	
	if (enteredDate.getDate()==day.value){return true;}
	alert(errorMsg);
	day.focus();
	return false;
}

function isInteger(field, msg)
{
	if(field.value ==""){return true;}
	var enteredString = field.value;
	var str = enteredString.toString();
	var int1 = parseInt(str);
	if (!( int1.toString()== str))
	{
		alert (msg);
		field.focus();
		return false;
	}
	return true;	
	
}

function isPositiveInteger(field, msg)
{
	if(!isInteger(field, msg)){return false;}
	if(field.value<1)
	{
	alert(msg);
	field.focus();
	return false;
	}
	return true;
}
	
function isNumeric(field, msg)
{	
	var enteredString = field.value;
	var num = new Number(enteredString.toString());
	if (isNaN(num))
	{
		alert (msg);
		field.focus();
		return false;
	}
	return true;
}

//Function For A Positive Numeric
function isPositiveNumeric(field, msg)
{	
	
	var enteredString = field.value;
	var num = new Number(enteredString.toString());
	if (isNaN(num) || num < 0)
	{
		alert (msg);
		field.focus();
		return false;
	}
	return true;
}

//Use Below Functions to validate DropDownCombo(Select)----------

function DropDownCombo(ObjectName,fieldName)  {
ObjectName=eval(ObjectName)
var myindex=ObjectName.selectedIndex;
if (myindex==0) {
alert("\nYou must make a selection from " + fieldName);
ObjectName.focus();
return false;
}
return true;
}


//-------------DateValidateCombo function uses this function-----------------------
function getMonthNum(mmm)
{		
	mmm=mmm.toUpperCase()
	switch (mmm)
	{
		case "JAN" : mm="1";
					 break;
		case "FEB" : mm="2";
					break;
		case "MAR" : mm="3";
					 break;
		case "APR" : mm="4";
					 break;
		case "MAY" : mm="5";
					 break;
		case "JUN" : mm="6";
					 break;
		case "JUL" : mm="7";
					break;
		case "AUG" : mm="8";
					break;
		case "SEP" : mm="9";
					break;
		case "OCT" : mm="10";
					break;
		case "NOV" : mm="11";
					break;
		case "DEC" : mm="12";
					break;	
		default : mm="";
				  break;
	}
	return mm;				  
}

//----Function To Validate Date entered in 3 Combos - Day as "1,2,3....31" , Month as "Jan,Feb....Dec" & Year as "1900..." -------------
function DateValidateCombo(day,month,year,msg)
{
	if (day.value=="" && month.value=="" && year.value=="")
		return true;
	var enteredString= getMonthNum(month.value).toString() + "/" + day.value + "/" + year.value;
	str=enteredString.toString();
	var enteredDate=new Date(str);
	var cDay=enteredDate.getDate();
	var csDay=cDay.toString()
	var eDay=day.value
	
	if(getMonthNum(month.value)=="2" && day.value=="29")		//  Leap Year check
	{	     
		var leap = false;
		var lyear = year.value
		if (lyear%4==0)leap = true;
		if(lyear%100==0)leap=false;
		if(lyear%400==0)leap=true;
		if(!leap)							//  if!leap check
		{ 
			alert(lyear + " is not a leap year, so February has only 28 days");
		} 
	}  
	
	if (csDay!=eDay)
	{
		alert( msg + " is not a valid date");
		day.focus();
		return false;
	}
	return true; 
}

//-----Use this function to Validate all special characters --Except the characters passed in the validStr string ---------
function hasSpecialCharacters(field,validStr, errorMsg)
{   	
	var SpecialCharacters="`~!@#$%^&*><{}[]/()_+|-=?'\"\\:;,. ";
	var validChr,ch;
	if (field.value.length > 0) 
	{
		for(i=0; i<SpecialCharacters.length; i++)
		{	
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0) 
			{ 
				validChr=false;
				ch=SpecialCharacters.substr(i, 1)
				if(validStr.indexOf(ch)>= 0)
					validChr=true;
					
				if (!validChr)
				{
					alert (errorMsg);
					field.focus();
					return true;
				}
			}
		}
	}	
	return false;
}

//-----Use this function to Validate the fields for which Alphabets are not allowed-----
function hasAlphabets(field,errorMsg)
{
	var alphabetFound=false;
	l=field.value.length
	for(i=0;i<l;i++)
	{
		ascVal=field.value.charCodeAt(i)
		if ((ascVal>=65 && ascVal<=90)||(ascVal>=97 && ascVal<=122))
		{
			alphabetFound=true;
			break;
		}	
	}
	if (alphabetFound)
	{
		alert(errorMsg);
		field.focus();
		return true;
	}
	return false;
}

//--------Validations For Phone Numbers-----------
function PhoneValidate(ObjectName,msg)
{
    ObjectName=eval(ObjectName)
    l=ObjectName.value.length;
    for (var i = 0;i<l;++i)
	{
	   if ((ObjectName.value.charAt(i) >= '0' && ObjectName.value.charAt(i) <= '9') || ObjectName.value.charAt(i) == '+' || ObjectName.value.charAt(i) == '-'|| ObjectName.value.charAt(i) == '(' || ObjectName.value.charAt(i) == ')')
          {                     }
       else                  
	      {
	        alert(msg + " contains invalid character")
		    ObjectName.focus();
		    ObjectName.select();
		    return false;
		  }  
	}
	return true;
}

//---------
function restrictLength(obj,len)
{
	x=obj.value.length
	if (x>len-1)
		obj.value=obj.value.substring(obj.value,x-1);
}


//--------------Get Month values in Jan,Feb etc (Pass integers from 0 to 11)--------------
function getMonthStr(mm)
{	
	mm=parseInt(mm);
	switch (mm)
	{
		case 1 : mmm="Jan";
				 break;
		case 2 : mmm="Feb"
				 break;
		case 3 : mmm="Mar"
				 break;
		case 4 : mmm="Apr"
				 break;
		case 5 : mmm="May"
				 break;
		case 6 : mmm="Jun"
				 break;
		case 7 : mmm="Jul"
				 break;
		case 8 : mmm="Aug"
				 break;
		case 9 : mmm="Sep"
				 break;
		case 10 : mmm="Oct"
				 break;
		case 11 : mmm="Nov"
				 break;
		case 12 : mmm="Dec"
				 break;	
		default : mmm="";
				  break;
	}
	return mmm;		  
}

//--------------------------Compare 2 Dates by passing respective Day,Month & Year fields By passing Objects------
function compareDates(smallday,smallmonth,smallyear,bigday,bigmonth,bigyear,msg)
{
	var str1= getMonthNum(smallmonth.value).toString() + "/" + smallday.value + "/" + smallyear.value;
	var str2= getMonthNum(bigmonth.value).toString() + "/" + bigday.value + "/" + bigyear.value;
	str1=new Date(str1.toString());
	str2=new Date(str2.toString());
	if (str1>str2)
	{
		alert(msg);
		smallday.focus();
		return false;
	}
	else
		return true;
	
}

//--------------------------Compare 2 Dates by passing respective Day,Month & Year fields By passing String values------
function compareDates1(smallday,smallmonth,smallyear,bigday,bigmonth,bigyear,msg)
{
	var str1= getMonthNum(smallmonth).toString() + "/" + smallday + "/" + smallyear;
	var str2= getMonthNum(bigmonth).toString() + "/" + bigday + "/" + bigyear;
	str1=new Date(str1.toString());
	str2=new Date(str2.toString());
	if (str1>str2)
	{
		alert(msg);
		//smallday.focus();
		return false;
	}
	else
		return true;
	
}

//--------------------------Compare 2 Dates by passing respective Day,Month & Year fields:: Compare if the passed date is greater than today's date-Report error------
function compareWithCurrentDate(day1,month1,year1,fieldName)
{
	var str1= getMonthNum(month1.value).toString() + "/" + day1.value + "/" + year1.value;
	currentDt=new Date();
	str1=new Date(str1.toString());
	if (str1>currentDt)
	{
		alert(fieldName + " cannot be greater than today's date");		
		day1.focus();
		return false;
	}
	else
		return true;
	
}

//--------------------------Compare 2 Dates by passing respective Day,Month & Year fields:: Compare if the passed date is smaller than today's date-Report error------
function compareWithCurrentDate1(day1,month1,year1,fieldName)
{
	var str1= getMonthNum(month1.value).toString() + "/" + day1.value + "/" + year1.value;
	currentDt=new Date();
	str1=new Date(str1.toString());
	if (str1<currentDt)
	{
		alert(fieldName + " cannot be less than today's date");
		day1.focus();
		return false;
	}
	else
		return true;
	
}

//--------------------------Compare 2 DateTimes by passing respective Day,Month,Year,Hour,Minute fields------
function compareDateTimes(smallday,smallmonth,smallyear,smallhour,smallminute,bigday,bigmonth,bigyear,bighour,bigminute,msg)
{
	var str1= getMonthNum(smallmonth.value).toString() + "/" + smallday.value + "/" + smallyear.value + " " + smallhour.value + ":" + smallminute.value;
	var str2= getMonthNum(bigmonth.value).toString() + "/" + bigday.value + "/" + bigyear.value + " " + bighour.value + ":" + bigminute.value;
	str1=new Date(str1.toString());
	str2=new Date(str2.toString());
	if (str1>str2)
	{
		alert(msg);
		smallday.focus();
		return false;
	}
	else
		return true;	
}

//--------------------------Compare 2 DateTimes by passing respective Day,Month,Year,Hour,Minute fields------:: Compare if the passed date-time is greater than today's date-Report error------
function compareCurrentDateTime(day1,month1,year1,hour1,minute1,fieldName)
{
	var str1= getMonthNum(month1.value).toString() + "/" + day1.value + "/" + year1.value + " " + hour1.value + ":" + minute1.value;
	currentDt=new Date();
	str1=new Date(str1.toString());
	if (str1>currentDt)
	{
		alert(fieldName + " cannot be greater than today's date");		
		day1.focus();
		return false;
	}
	else
		return true;
	
}

//----Function that returns difference of two dates in days--------
function dateDifferenceinDays(smallday,smallmonth,smallyear,bigday,bigmonth,bigyear)
{
	var str1= getMonthNum(smallmonth).toString() + "/" + smallday + "/" + smallyear;
	var str2= getMonthNum(bigmonth).toString() + "/" + bigday + "/" + bigyear;
	dateOne=new Date(str1.toString());
	dateTwo=new Date(str2.toString());
		
	if (dateTwo > dateOne)
	    deltaSeconds = (dateTwo.getTime() - dateOne.getTime() );
	else
	  deltaSeconds = (dateOne.getTime() - dateTwo.getTime() );
	      
	aDay = 1000 * 60 * 60 * 24;
	deltaDays = parseInt(deltaSeconds / aDay );
	return deltaDays;
}




