//=============================================================================================
//==                                                                                        ===  
//==           --1.How to call function from any page?//                                    ===
//==           Answer:Add this script to your page where you want to use these functions.   ===
//==           <script type="text/javascript" src="ValidateForm.js"></script>--//           ===
//==           Way to call function in page//                                               ===
//==            if (!Function name('alert message',argument 1,argument 2))//                ===
//==            e.g. if (!TestUserLength('alert message',document.Frm.txt02.value))//       ===
//==																						===
//==    Functions written by Parag V Deolasee												===
//==    Date:07/01/2004																		===
//==    Version 1.1																			===			
//=============================================================================================



//Function which would be useful to test whether the given text field is blank or not
function TestBlank(msg,val,obj)
{
	var flag=-1;
	for (i=0;i<val.length;i++)
	{
		var c=val.charAt(i);
		if (val.indexOf(c)==" ")
			flag=-1;
		else
		{
			flag=0;
			break;
		}	
	}
	if (flag==-1)
	{
		alert(msg);
		obj.select();
		obj.focus();
		return false;
	}
	else
		return true;
}

function TestBlank_No_Focus(msg,val)
{
	var flag=-1;
	for (i=0;i<val.length;i++)
	{
		var c=val.charAt(i);
		if (val.indexOf(c)==" ")
			flag=-1;
		else
		{
			flag=0;
			break;
		}	
	}
	if (flag==-1)
	{
		alert(msg);
		return false;
	}
	else
		return true;
}
//--Function starts here-----
////---UserId must be more than three charcters and less than 30--//
//msg=alert message to be displayed
//val=text-box value

function TestUserLength(msg,val)
{
	
	var flag=0;
	if ((val.length<3) ||(val.length>30))
		flag=-1;
	
	if (flag==-1)
	{
		alert(msg);
		return false;
	}
	else
		return true;	
}
//---------Function ends here---------////

//Function would be useful to test whether userId/password is blank, or contains whitespaces and illegal charcters
//msg=alert message,fld=1 for userid and 2 for password

function TestUserBlank(msg,val,fld,obj)
{
	var flag=0;
	if (fld==1)
	{
		var FLetter=val.charAt(0);
		var r2=new RegExp("[^A-Za-z]");
		if (r2.test(FLetter))
		{
			flag=-1;
		}
	}
	if (fld==1)
		var r1=new RegExp("[^A-Za-z0-9$@_.-]");
	else if (fld==2)
		var r1=new RegExp("[^A-Za-z0-9$@_%*#!^*().-]");	
		
	if (r1.test(val))
		flag=-1;
	
	if (flag==-1)
	{
		alert(msg);
		obj.select();
		obj.focus();
		return false;
	}
	else
		return true;
}
//------------------------Function ends here---------------------------------------------------------//


//Function would be useful to test email, whether email is entered in correct format or not//
//msg=alert message, val=email value
function TestEmail(msg,val)
{
	if (!isEmail(val))
	{
		alert(msg);
		return false;
	}
	else
		return true;
}

function isEmail(email)
{
	
	var isNullEmail = isWhiteSpaces(email)
	var emailLength = email.length
	var isSPACEexists = email.indexOf(" ") + 1
	var isATexistsFirst = email.indexOf("@")
	var isATexistsLast = email.lastIndexOf("@")
	var isDOTexistsFirst = email.indexOf(".",isATexistsFirst+1)
	var isDOTexistsNext1 = email.indexOf(".",isATexistsFirst+1)
	var isDOTexistsNext2 
	var isDOTexistsLast = email.lastIndexOf(".")

	if ((emailLength < 8 ) || (isDOTexistsFirst < isATexistsFirst+3) || (isATexistsFirst < 2) ||
   	 	(isDOTexistsLast == emailLength-1) || (isATexistsLast == emailLength-1) ||
    	(isDOTexistsFirst == 0) || (isATexistsFirst == 0) || (isATexistsFirst == isDOTexistsFirst) ||
    	(isATexistsFirst != isATexistsLast) || isSPACEexists || isNullEmail)
	{
		
		return false;
	}

	while (isDOTexistsNext1 < isDOTexistsLast)
	{
		isDOTexistsNext2 = email.indexOf(".",isDOTexistsNext1+1)
		if (isDOTexistsNext1+1 == isDOTexistsNext2)
		{
			return false;
		}
		isDOTexistsNext1 = isDOTexistsNext2
	}


	return true;
}

function isWhiteSpaces(S)
{
	var isNull
	if (S.length == 0 ) 
		isNull = true;
	else
	{
		for (I=0;I < S.length; I++ )
		{
			isNull = S.substring(I,I+1)==" "?true:false
			if (!isNull) break;
		}
	}
	return isNull;
}
//---------------------------------------Email validation ends here------------------------------


//---Function would be useful to find out whether date entered into textbox is valid or not--------

function TestDate(msg,thisdate)
{
	if (!isValidDate(thisdate,"MDY"))
	{
		alert(msg);
		return false;
	}
	else
		return true;
}
/* this is the function for y-m-d format of the date*/

function checkDate(thisdate)
{	
    var thisdate1;
	datebits=thisdate.split("-");
	Dates=Array(31,28,31,30,31,30,31,31,30,31,30,31)
	thisdate1=datebits[0]+'-'+datebits[1]+'-'+datebits[2];
	
	var val;
	var datebits;
	var thisdate;
    var mn=datebits[1];
	var r1=new RegExp("[^0-9]");
	if (r1.test(datebits[0]) || r1.test(datebits[1]) || r1.test(datebits[2])){
		return false;
	}
	if (thisdate=="")
	  	return false;
	if (datebits.length!=3)
		return false;	  
	else if (datebits[2]>Dates[mn-1] || datebits[1]>12 || datebits[0].length!=4 || datebits[2].length!=2 )
		return false;
	else
		return true;	
		
}

//------------------------Function ends here---------------------

//--------------Function to compare two dates-----------------
//Date1=Date which must be a smaller one
//Date2=Date which must be a greater one
//msg= alert message to be displayed
function CompareDate(msg,Date1,Date2)
{
	var flag=0;
	if (Date1.length!=10){
		flag=1;
	}
	if (Date2.length!=10){
		flag=1;
	}
	
	datebits1=Date1.split("-");
	datebits2=Date2.split("-");
	Dates=Array(31,28,31,30,31,30,31,31,30,31,30,31)
	var r1=new RegExp("[^0-9]");

	if (datebits1[2]>datebits2[2]){
		flag=1;
	}
	if ((datebits1[2]==datebits2[2]) && (datebits1[0]>datebits2[0])){
		flag=1;
	}
	if ((datebits1[2]==datebits2[2]) && (datebits1[0]==datebits2[0])&&(datebits1[1]>=datebits2[1])){
		flag=1;
	}
	if (flag==1)
	{
		alert(msg);
		return false;
	}
	else
		return true;	
}
//----------------Date comparision Function ends here-----------------


//Assumption:Phone number will contain only numbers, Provision to add "Ext." but it will contain only
//numeric values.
//msg=alert message to be displayed
//e.g. format which will be accepted by this function, +91-20-3456 Ext. 12445
function CheckPhone(msg,val)
{
	var flag=0;
	var r1=new RegExp("[^0-9-Ext.ext+ ]")
	Phone=val.split("-")	
	if (r1.test(val))
	{
		flag=1
	}
	if (flag==1)
	{
		alert (msg)
		return false;
	}
	else
		return true;
}
//--------------------Function ends here--------------------------------//

//-----Function which will expect only numbres-----------
//msg=alert message to be displayed
//val=text-box value
//IsCompulsory=0 if value in text-box is not compulsory
//IsCompulsory=1 if value in text-box is compulsory

function IsNumeric(msg,val,obj,IsCompulsory)
{
	var r1=new RegExp("[^0-9.$]");
	var flag=0;
	if ((IsCompulsory==1) &&(val.length==0))
		flag=1;
	if (r1.test(val))
		flag=1;
	
	if (flag==1)
	{
		alert (msg);
		obj.select();
		obj.focus();
		return false;
	}
	else
		return true;
	
}

//----Function ends here------------

//----Function which will accept only numbers and charcters, no special charcter will be accepted
function IsAlphaNumeric(msg,val)
{
	var r1=new RegExp("[^0-9a-zA-Z]");
	var flag=0;
	if (r1.test(val))
		flag=1;
	
	if (flag==1)
	{
		alert (msg);
		return false;
	}
	else
		return true;
}

function return_total_number(msg,val,obj,limit){
	var str1=obj.value;
	
	if (str1.length > limit){
		alert(msg);
		obj.select();
		obj.focus();
		return false;
	}
	else
		return true;
}	


/**************************************************
* This function will validate the date format
* against a string
* Input Parameters
* @Param date in string format
* @Param format in string format
* format is in which format date is to be validated
* Lke MDY, DMY, YMD, etc.
***************************************************/
function isValidDate(dateStr, format) {
	format = format.toUpperCase();
   if (format == null) { format = "MDY"; }
   if (format.length != 3) { format = "MDY"; }
   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; }
   if (format.substring(0, 1) == "Y") { // If the year is first
      var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
      var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
   } else if (format.substring(1, 2) == "Y") { // If the year is second
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
   } else { // The year must be third
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
   }
   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
   // Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") { var mm = parts[0]; } else 
      if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
   if (format.substring(0, 1) == "D") { var dd = parts[0]; } else 
      if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else 
      if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
   if (parseFloat(dd) != dt.getDate()) { return false; }
   if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
   return true;
}

function checkPHP(val, obj)
{
if ((val.indexOf('<'+'?')>=0) || (val.indexOf('?'+'>')>=0) || (val.indexOf('<'+'%')>=0) || (val.indexOf('%'+'>')>=0)){
			//alert("ALert" + val.indexOf('<'+'?'))
			alert('PHP tags are not allowed.');
			obj.focus();
			return false;
		}
		return true;
}

/* checkinh for valid file extension */

function isValidFile(strFile, filetype){
	
	var strExtensions;			
	var arrExtensions;
	var strExtension;
	var intLength;
	var intLastDOT;
	var intFirstDOT;
	if(filetype == 'csv')
	strExtensions = "csv";
	else
	strExtensions = "pdf,doc,xls,jpeg,jpg";
	arrExtensions = strExtensions.split(",");
	intLength = strFile.length
	intFirstDOT = strFile.indexOf(".")
	intLastDOT = strFile.lastIndexOf(".")
	// IF THERE IS MOTE THAN TWO DOTS
	//if(intFirstDOT!=intLastDOT)
//		return false;
		
	strExtension = strFile.substring(intLastDOT+1,intLength);
	strExtension=strExtension.toLowerCase();
/*	var re = new RegExp("[^a-zA-Z0-9. _-]"); // FIND ALL CHARACTER OTHER THAN a-zA-Z0-9. _-
	var strFileName;
	strFileName=strFile.split('\\');
	strFileName=strFileName[strFileName.length-1];
	// IF FOUND
	if (strFileName.match(re)) { 
		return false;
	}*/
	for(I=0; I<arrExtensions.length; I++){
		if (strExtension == arrExtensions[I])
		return true;
	}
	return false;
}
//function to  validate zip code 
function TestZip(msg,field) {
var valid = "0123456789";
var hyphencount = 0;

/*if (field.length!=5 && field.length!=10) {
alert("Please enter your 5 digit or 5 digit+4 zip code.");
return false;
}*/
	for (var i=0; i < field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (temp == "-") hyphencount++;
		if (valid.indexOf(temp) == "-1") {
		alert(msg);
		return false;
		}
	}
	return true;
}

