// JavaScript Document
//***********************************************************************
//This file contains all the Javascript functions used throughout the website
//***********************************************************************/
//***********************************************************************
//Here First parameter is the object and second paraeter is the Name or Caption for that object
//***********************************************************************/
//***********************************************************************
//To check the null and space entered in text control
//Here ctrl is the object and ctrlname is Name or Caption for that object
//***********************************************************************/

function checkSpace(ctrl,ctrlname)
{
	if(ctrl == "undefined" || ctrl == null) 
	{
		alert(ctrlname + " Object Not Defined");
		return false;
	}
	var content;
	content = ctrl.value;
	
	//for space entered 		
	if(content.length > 0)
	{
		for(var i=0;i<content.length;i++)
		{
			if(content.charAt(i)!=String.fromCharCode(32))
			{
				return true;
			}
		}
		alert("Please Enter '" + ctrlname +"'");
		ctrl.value=""
		ctrl.focus();	
		return false;
	}
	else
	{
		//for null 
		alert("Please Enter " + ctrlname);
		ctrl.focus();	
		return false;
	}
	return true;
}

//***************************************************************************
// Check if the Date is Valid US Date. [mm/dd/yyyy]
// return date if valid, false otherwise
//***************************************************************************
function validUSDate(srcObj,objNamePassed) 
{
	if(srcObj == "undefined" || srcObj == null ) 
	{
		alert(objNamePassed + " Object Not Defined")
		return false;
	}
	var formatMessage = "\n\nPlease Enter the date in MM/DD/YYYY Format";
	var val = srcObj.value;
	var objName = objNamePassed;
	if(objName == "" || objName == null) {
		objName = srcObj.name;
	}
	val = trim(val);
	var re = new RegExp("^\([0-9]{1,2}\).\([0-9]{1,2}\).\([0-9][0-9][0-9]{0,2}\)$");
	var daysOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
	var monthNames = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	if(val.match(re)) {
		var tmpDate = re.exec(val);
		if(tmpDate[1] > 12 || tmpDate[1] < 1) {
			alert("Invalid Month : " + tmpDate[1] + " in Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		tmpDate[1]--;
		if(tmpDate[3] <49 && tmpDate[3] > 0) {
			tmpDate[3] = "20" + tmpDate[3];
		}
		if(tmpDate[3] == "00" ||tmpDate[3] == "0") {
			tmpDate[3] = "2000";
		}
		if(tmpDate[3] <100 && tmpDate[3] > 49) {
			tmpDate[3] = "19" + tmpDate[3];
		}
		if(tmpDate[3] > 9999 || tmpDate[3] < 1900) {
			alert("Invalid Year : " + tmpDate[3] + ". Valid Values are between 1900 and 9999 Only." + " for Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		if(tmpDate[3]%4 == 0) {
			daysOfMonth[1]++;
		}
		if(tmpDate[3]%400 != 0 && tmpDate[3]%100 == 0) {
			daysOfMonth[1]--;
		}
		if(tmpDate[2] <= 0) {
			alert("Invalid Day : " + tmpDate[2] + " in Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		if(tmpDate[2] > daysOfMonth[tmpDate[1]]) {
			alert(monthNames[tmpDate[1]]  + " in Field " + objName + " can have only " + daysOfMonth[tmpDate[1]] + " Days.");
			srcObj.focus();
			return false;
		}
		//var newDate = new Date(tmpDate[3],tmpDate[1],tmpDate[2]);
		var newDate = tmpDate[2]  + " " + monthNames[tmpDate[1]] + ", " + tmpDate[3];
		return newDate;
	}
	alert("Invalid Date : " + val + " in Field " + objName + formatMessage);
	srcObj.focus();
	return false;
}

//***************************************************************************
//Check if the Date is Valid Indian Date. [dd/mm/yyyy]
// return date if valid,
// false otherwise
//***************************************************************************
function validIndianDate(srcObj,objNamePassed) {
	if(srcObj == "undefined" || srcObj == null ) {
		alert(objNamePassed + " Object Not Defined")
		return false;
	}
	var formatMessage = "\n\nPlease Enter the date in DD/MM/YYYY Format";
	var val = srcObj.value;
	var objName = objNamePassed;
	if(objName == "" || objName == null) {
		objName = srcObj.name;
	}
	val = trim(val);
	var re = new RegExp("^\([0-9]{1,2}\).\([0-9]{1,2}\).\([0-9][0-9][0-9]{0,2}\)$");
	var daysOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
	var monthNames = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	if(val.match(re)) {
		var tmpDate = re.exec(val);
		if(tmpDate[2] > 12 || tmpDate[2] < 1) {
			alert("Invalid Month : " + tmpDate[2] + " in Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		tmpDate[2]--;
		if(tmpDate[3] <49 && tmpDate[3] > 0) {
			tmpDate[3] = "20" + tmpDate[3];
		}
		if(tmpDate[3] == "00" ||tmpDate[3] == "0") {
			tmpDate[3] = "2000";
		}
		if(tmpDate[3] <100 && tmpDate[3] > 49) {
			tmpDate[3] = "19" + tmpDate[3];
		}
		if(tmpDate[3] > 9999 || tmpDate[3] < 1900) {
			alert("Invalid Year : " + tmpDate[3] + ". Valid Values are between 1900 and 9999 Only." + " for Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		if(tmpDate[3]%4 == 0) {
			daysOfMonth[1]++;
		}
		if(tmpDate[3]%400 != 0 && tmpDate[3]%100 == 0) {
			daysOfMonth[1]--;
		}
		if(tmpDate[1] <= 0) {
			alert("Invalid Day : " + tmpDate[1] + " in Field " + objName + formatMessage);
			srcObj.focus();
			return false;
		}
		if(tmpDate[1] > daysOfMonth[tmpDate[2]]) {
			alert(monthNames[tmpDate[2]]  + " in Field " + objName + " can have only " + daysOfMonth[tmpDate[2]] + " Days.");
			srcObj.focus();
			return false;
		}
		//var newDate = new Date(tmpDate[3],tmpDate[1],tmpDate[2]);
		var newDate = tmpDate[1]  + " " + monthNames[tmpDate[2]] + ", " + tmpDate[3];
		return newDate;
	}
	alert("Invalid Date : " + val + " in Field " + objName + formatMessage);
	srcObj.focus();
	return false;
}

//***************************************************************************
// Removes Leading and Trailing White Spaces
//***************************************************************************
function trim(txt) {
	if(txt == null || txt == "" || txt == "undefined") {
		return "";
	}
        var re = "\\s*";
        var re1 = new RegExp("^" + re);
        var re2 = new RegExp(re + "$");
        txt = txt.replace(re1,"");
        txt = txt.replace(re2,"");
        return txt;
}

//***************************************************************************
//Check if the Email is Valid.
// return email if valid,\
// false otherwise
//***************************************************************************
function validEmail(srcObj,objNamePassed) {
	if(srcObj == "undefined" || srcObj == null) {
		alert(objNamePassed + " Object Not Defined");
		return false;
	}
	var email = srcObj.value;
	var objName = objNamePassed;
	if(objName == "" || objName == null) {
		objName = "Email ID " + srcObj.name;
	}
	email = trim(email);
	srcObj.value = email;
	var re = new RegExp("^\([\\w_\\-\\.]+\)\@\([\\w_\\-]\+\\.\)+\([\\w_]\+\)$");
	if(email.match(re)) {
		return email;
	}
	//alert("'" + email + "' is not a Valid Value for " + objName);
	
	return false;
}

//***************************************************************************
//Check if the Decimal Value is Valid
//***************************************************************************
function validDecimal(srcObj,objNamePassed) {
	if(srcObj == "undefined" || srcObj == null) {
		alert(objNamePassed + " Object Not Defined");
		return false;
	}
        var decimalVal = srcObj.value;
        var objName = objNamePassed;
        if(objName == "" || objName == null) {
                objName = "Decimal Value : " + srcObj.name;
        }
        decimalVal = trim(decimalVal);
        srcObj.value = decimalVal;
        var tmpVal = null;
        var re = new RegExp("^\(\[0-9\]\*\)\\\.\(\[0-9\]{0,2}\)$");
        if(decimalVal.match(re)) {
                return true;
        }

        re = new RegExp("^\(\[0-9\]\*\)$");
        if(decimalVal.match(re)) {
                return true;
        }

        alert("" + decimalVal + " Not a Valid Value for " + objName);
        srcObj.focus();
        return false;
}

//***************************************************************************
//Comparing two US Dates in the format mm/dd/yyyy
//***************************************************************************
function compareUSDates(fromdate,fromname,todate,toname)
{
	//check whether the entered dates are [from date, to date] valid
	if (validUSDate(fromdate,fromname) == false)
	{
		return false;
	} 
	if (validUSDate(todate,toname) == false)
	{
		return false;
	} 
		
	//obtain month,day and year of date1
	var mdate = fromdate.value;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var mval1= mdate.substr(0,pos1);
	var dval1 = newdate.substr(0,pos2);
	var yval1 = newdate.substr(pos2+1);
	//obtain month,day and year of date2
	var mdate = todate.value;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var mval2= mdate.substr(0,pos1);
	var dval2 = newdate.substr(0,pos2);
	var yval2 = newdate.substr(pos2+1);
	
	var date1=mval1 + "/" + dval1 + "/" + yval1;
	var date2=mval2 + "/" + dval2 + "/" + yval2;

	
	date1=new Date(date1);
	date2=new Date(date2);

	
		
	if(date1 > date2) 
	{ 
		alert(fromname + " should be less than " + toname);
		return false; 
	} 
	return true;
}

//**************************************************************************
//Comparing two Indian Dates in the format dd/mm/yyyy
//**************************************************************************

function compareIndianDates(fromdate,fromname,todate,toname)
{
	
	//check whether the entered dates are [from date, to date] valid
	if (validIndianDate(fromdate,fromname) == false)
	{
		return false;
	} 
	if (validIndianDate(todate,toname) == false)
	{
		return false;
	} 
	
	//obtain month,day and year of date1
	var mdate = fromdate.value;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var dval1= mdate.substr(0,pos1);
	var mval1 = newdate.substr(0,pos2);
	var yval1 = newdate.substr(pos2+1);
	
	//obtain month,day and year of date2
	var mdate = todate.value;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var dval2= mdate.substr(0,pos1);
	var mval2 = newdate.substr(0,pos2);
	var yval2 = newdate.substr(pos2+1);
		
	var date1=mval1 + "/" + dval1 + "/" + yval1;
	var date2=mval2 + "/" + dval2 + "/" + yval2;

	
	date1=new Date(date1);
	date2=new Date(date2);
	
	if(date1 > date2) 
	{ 
		alert(fromname + " should be less than " + toname);
		fromdate.focus();
		return false; 
	} 
	return true;
}


//***************************************************************************
// Function for Checking Mandatory Fields are Entered
// INPUTS : Control Name and Field Name
// Here ctrl is the object and ctrlname is Name or Caption for that object
//***************************************************************************
function mandatory(ctrl,ctrlname)
{
	if(ctrl == "undefined" || ctrl == null) 
	{
		alert(ctrl + " Object Not Defined");
		return false;
	}
	if(ctrl.value=="")
	{
		alert("Please enter " + ctrlname);
		ctrl.focus();
		return false;
	}
	else if(checkSpace(ctrl,ctrlname)==false)
	{
		return false;
	}
}

//***************************************************************************
// Function for Calling Validation Funcions on Enter Key of Control
// INPUTS : Event Name
// Here evnt is the Event Name
//***************************************************************************
function OnEnterKey(evnt)
{
	var charCode=evnt.keyCode ? event.keyCode : event.which;
	if(charCode==13) 	//13 is the CharCode for Enter Key
	{
		return false;
	}
}

//***************************************************************************
// Function for Checking the Password and Confirm Password are Same
// INPUTS : Password Field and Confirm Password Field
// Here ctrlPasswd is the Password Field Object and ctrlconfirm is the Confirm Password Field
//***************************************************************************
function passwordConfirm(ctrlPasswd,ctrlconfirm)
{
	if(ctrlPasswd == "undefined" || ctrlPasswd == null) 
	{
		alert(ctrlPasswd + " Object Not Defined");
		return false;
	}
	
	if(ctrlconfirm == "undefined" || ctrlconfirm == null) 
	{
		alert(ctrlconfirm + " Object Not Defined");
		return false;
	}
	
	if(ctrlPasswd.value!=ctrlconfirm.value)	
	{
		alert("Password and Confirm Password are not matching");
		ctrlconfirm.focus();
		return false;
	}
}

//***************************************************************************
// Function for Checking the Password and Confirm Password are Same
// INPUTS : Password Field and Confirm Password Field
// Here ctrlPasswd is the Password Field Object and ctrlconfirm is the Confirm Password Field
//***************************************************************************
function emailConfirm(ctrlEmail,ctrlconfirm)
{
	if(ctrlEmail == "undefined" || ctrlEmail == null) 
	{
		alert(ctrlEmail + " Object Not Defined");
		return false;
	}
	
	if(ctrlconfirm == "undefined" || ctrlconfirm == null) 
	{
		alert(ctrlconfirm + " Object Not Defined");
		return false;
	}
	
	if(ctrlEmail.value!=ctrlconfirm.value)	
	{
		alert("E-mail and Confirm E-mail are not matching");
		ctrlconfirm.focus();
		return false;
	}
}

//***************************************************************************
// Function for Checking the Password format containing one letter and one number
//***************************************************************************
function passwordFormat(ctrlPasswd,ctrlName)
{
	if(checkSpace(ctrlPasswd,ctrlName)==false)
	{
		ctrlPasswd.focus();
		return false;
	}
	else
	{
		var userpass=ctrlPasswd.value;
		//checking if inly space entered by calling checkSpace function
		if(userpass!="")
		{
			//alert(txtvalue.length)
			var num=0;
			var chr=0;
			var z=1;
			var j=1;
			for(var i=0;i<=userpass.length-1;i++)
			{						
				if(userpass.charAt(i)>=0 || userpass.charAt(i)<=9)
				{															
					num=z;
					z=z+1;
				}
				else
				{							
					chr=j;
					j=j+1;
				}
			}			
			
		}					
		if(num==0 || chr==0)
		{
			alert(ctrlName +" must contain minimum one number and one letter");
			ctrlPasswd.focus();
			return false;
		}
	}
	return true;
}

//***************************************************************************
// Function for Checking the Selection on Menu/ListBox
// INPUTS : Control Name and Field Name
// Here ctrl is the object and ctrlname is Name or Caption for that object
//***************************************************************************
function selectMenu(ctrl,ctrlname)
{
	if(ctrl == "undefined" || ctrl == null) 
	{
		alert(ctrl + " Object Not Defined");
		return false;
	}
	
	if(ctrl.value=="0")		//If Menu Value is "SELECT" - If value of the SELECT option is other than 0 then change 0 to value of the SELECT option
	{
		alert("Please Select " + ctrlname);
		return false;
	}
}

//***************************************************************************
// Function for Checking the Maximum Length for Text Area Control
// INPUTS : Control Name, Field Name and No.of Characters
// Here ctrl is the object and ctrlname is Name or Caption for that object and ctrlCharacter is the No.of Characters
//***************************************************************************
function maxLength(ctrl,ctrlname,ctrlCharacter)
{
	if(ctrl == "undefined" || ctrl == null) 
	{
		alert(ctrl + " Object Not Defined");
		return false;
	}
	
	var ctrllength=ctrl.value;
	if(ctrllength.length>ctrlCharacter)
	{
		alert("Please Enter Only " + ctrlCharacter + " Characters for " + ctrlname);
		ctrl.focus();
		return false;
	}
}


//**************************************************************************
//Comparing Indian Date with Current Date
//**************************************************************************
function compareWithCurrentDate(today,todate,toname)
{

	if (validIndianDate(todate,toname) == false)
	{
		return false;
	} 
	//obtain month,day and year of date2
	var mdate = todate.value;	
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var dval2= mdate.substr(0,pos1);
	var mval2 = newdate.substr(0,pos2);
	var yval2 = newdate.substr(pos2+1);
		
	//obtain month,day and year of current date
	var mdate = today;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var dval3= mdate.substr(0,pos1);
	var mval3= newdate.substr(0,pos2);
	var yval3= newdate.substr(pos2+1);
	var date1=mval2 + "/" + dval2 + "/" + yval2;
	var today1=mval3 + "/" + dval3 + "/" + yval3;

	
	date1=new Date(date1);
	today1=new Date(today1);
	

	if(date1 >today1) 
	{ 
		alert(toname + " should be lesser than or equal to current date");
		todate.focus();
		return false; 
			
	} 
	return true;
}

//**************************************************************************
// Check if the Time is Valid
//**************************************************************************

function IsValidTime(timeStr) 
{
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
	alert("Time is not in a valid format.");
	return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
	alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
	return false;
	}
	if (hour <= 12 && ampm == null) {
		if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
		alert("You must specify AM or PM.");
		return false;
		}
	}
	if  (hour > 12 && ampm != null) {
	alert("You can't specify AM or PM for military time.");
	return false;
	}
	if (minute<0 || minute > 59) {
	alert ("Minute must be between 0 and 59.");
	return false;
	}
	if (second != null && (second < 0 || second > 59)) {
	alert ("Second must be between 0 and 59.");
	return false;
	}
return false;
}

//**************************************************************************
// Check if the value is Integer or not
//**************************************************************************
function IsPositiveNumber(obj,objName,objlen)
{
	if (checkSpace(obj,objName)==false)
	{
		return false;	
	}
	if(obj.value==0)
	{
		alert("Please enter '" + objName +"'");
		obj.focus();
		return false;
	}
	if (isNaN(obj.value))
	{
		alert("You must enter an integer value in the '"+ objName +"' field.");
		obj.focus();
		return false;
	}
	if(obj.value.length < objlen)
	{
		alert("Please enter "+ objlen +" digit valid '"+ objName +"'.");
		obj.focus();
		return false;
	}
	return true;
}

//***************************************************************
// Check string contains only letters
//****************************************************************
function isAlphabet(obj, objName)
{
	var alphaExp = /^[a-zA-Z]+$/;
	if(obj.value.match(alphaExp)){
		return true;
	}else{
		alert("You must enter Letters in "+ objName + " field");
		obj.focus();
		return false;
	}
}

//***************************************************************
// Check string contain numbers and letters only
//****************************************************************
function isAlphanumeric(obj, objName)
{
	var alphaExp = /^[0-9a-zA-Z]+$/;
	if(obj.value.match(alphaExp)){
		return true;
	}else{
		alert("You must enter Letters or numbers in "+ objName +" field");
		obj.focus();
		return false;
	}
}

//***************************************************************
// Not allow to move back
//****************************************************************
function noBack()
{
	window.history.forward();
}

//***************************************************************
// Checking whether the given value between 0 - 100 for percentage
//****************************************************************
function IsPercentage(obj,objname)
{
	if (checkSpace(obj,objname)==false)
	{
		return false;
	}
	if (isNaN(obj.value))
	{
		alert("You must enter an integer value in the "+ objname +" field.");
		obj.focus();
		return false;
	}
	if(obj.value < 0 || obj.value > 100)
	{
		alert("You must enter an interger value between 0 - 100");
		obj.focus();
		return false;	
	}
}
//**************************************************************************
//Comparing Indian Date with Current Date
//**************************************************************************
function compareUSWithCurrentDate(today,todate,toname)
{
	if (validUSDate(todate,toname) == false)
	{
		return false;
	} 
	//obtain month,day and year of date2
	var mdate = todate.value;	
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var mval2= mdate.substr(0,pos1);
	var dval2 = newdate.substr(0,pos2);
	var yval2 = newdate.substr(pos2+1);
		
	//obtain month,day and year of current date
	var mdate = today;
	var pos1 = mdate.indexOf("/");
	var newdate = mdate.substr(pos1+1);
	var pos2 = newdate.indexOf("/");
	var mval3= mdate.substr(0,pos1);
	var dval3= newdate.substr(0,pos2);
	var yval3= newdate.substr(pos2+1);
	
	var date1=mval2 + "/" + dval2 + "/" + yval2;
	var today1=mval3 + "/" + dval3 + "/" + yval3;

	
	date1=new Date(date1);
	today1=new Date(today1);

	if(today1 >= date1) 
	{ 
		alert(toname + " should be greater than current date");
		todate.focus();
		return false; 
			
	} 
	return true;
}

/*****************************************************************************/
/* Validating the WEB URL */
/****************************************************************************/
function validUrl(srcObj,objName) 
{
	var urlRegxp = /^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([\w]+)(.[\w]+){1,2}$/;
	if (urlRegxp.test(srcObj.value) != true)
	{
		alert("Please enter the URL of your website");
		srcObj.focus();
		return false; 
	}
	return true;
}


