/* ##############################################################################################

 #	FUNCTION			| PURPOSE | AUTHOR : Tamilvanan S | DATE : 27th Jan 2003				#
 
	--------------------------------------------------------------------------------------------#
 # 1.  isEmpty			| Checks for empty value
 -----------------------------------------------------------------------------------------------#
 # 2.  isNumber			| Checks for a valid number
 -----------------------------------------------------------------------------------------------#
 # 3.  isValidDigit		| Checks for a valid digit
 -----------------------------------------------------------------------------------------------#
 # 4.  doCheckFormat		| Checks for a digit in a given format
 -----------------------------------------------------------------------------------------------#
 # 5.  compareStrings		| Compares two strings for equality
 -----------------------------------------------------------------------------------------------#
 # 6.  isValidDate		| Checks for a valid date
 -----------------------------------------------------------------------------------------------#
 # 7.  isLeapYear		| Checks for leap year
 -----------------------------------------------------------------------------------------------#
 # 8.  compareDates		| Compares two date values for equality
 -----------------------------------------------------------------------------------------------#
 # 9.  isValidTime		| Checks for a valid time
 -----------------------------------------------------------------------------------------------#
 # 10. isAlphanumeric		| Checks for alphanumeric characters
 -----------------------------------------------------------------------------------------------#
 # 11. trimString		| Trims leading/trailing spaces from the given string
 -----------------------------------------------------------------------------------------------#
 # 12. replaceChars		| Replace the string charcters with the specified characters
 -----------------------------------------------------------------------------------------------#
 # 13. padZeros		| Pads zero before month and date in a given date if it is less than 1
 -----------------------------------------------------------------------------------------------#
 # 14. isValidEmail		| Checks for a valid e-mail Id
 -----------------------------------------------------------------------------------------------#
 # 15. checkSSN			| Checks for a valid social security number
 -----------------------------------------------------------------------------------------------#
 # 16. isBetween		| Checks whether the given number lies within the given range.
  ----------------------------------------------------------------------------------------------#
 # 17. isValidMonthYear		| Checks whether the given value is in a mmyyyy date format.
  ----------------------------------------------------------------------------------------------#  
 # 18. isValidPhone 		| Checks for a valid phone number 999-999-9999 xxxxx.
  ----------------------------------------------------------------------------------------------#    
 # 19. isValidSSN	 	| Checks for a proper social security number format. 999-99-9999
  ----------------------------------------------------------------------------------------------#
 # 20. isValidPassword 		| Checks for a valid EMSOPS password string
  ----------------------------------------------------------------------------------------------#        
 # 21. makeDaysOfMonth 		| To store No of Days for each Month
  ----------------------------------------------------------------------------------------------# 
 # 22. calculateAge 		| Calculates the age , given the DOB
  ----------------------------------------------------------------------------------------------#  
 # 23. getYearsMonthsDays 	| To get the years, months and week between two given dates
  ----------------------------------------------------------------------------------------------# 
 # 24. isAlpha 			| To validate alpha chars
  ----------------------------------------------------------------------------------------------#   
 # 25. isDecimalValue		| To validate numeric values with decimal point
  ----------------------------------------------------------------------------------------------#   
 # 26. dateValid	| To validate dates in controls where year is without century is entered
  ----------------------------------------------------------------------------------------------#   
 # 27. ControlKey		| To validate Special Characters
 -----------------------------------------------------------------------------------------------#   
 # 28. isValidZipCode 		| To validate ZipCodes
 -----------------------------------------------------------------------------------------------#   
 # 29. isValidURL 		| To validate URLs
 -----------------------------------------------------------------------------------------------#   
 #
 ################################################################################################*/

/*************************************************************
 @ Function Name 	: isEmpty
 @ Author        	: Tamilvanan S
 @ Param       		: strInput
 @ Purpose			: To check for a empty string
**************************************************************/
function isEmpty(strInput) {
	if (trimString(strInput) == "") {
		return true;
	}

	if (strInput.charAt(0) == "") return true;
	else return false;
}

/*************************************************************
 @ Function Name 	: isNumber
 @ Author        	: Tamilvanan S
 @ Param       		: strInput
 @ Purpose			: To check for a valid numeric value
**************************************************************/
function isNumber(strInput) {
	if (isNaN(strInput)) return false;
	else return true;
}

/**************************************************************
@ Function name : isValidDigit
@ Author        : Tamilvanan S
@ Param			: strInput
@ Param			: strMid
@ Param			: strSize
@ Purpose       : To check for a valid number
**************************************************************/
function isValidDigit(strInput, strMid, strSize) {
	//var digitExp = /^(\d{sizeW}).(\d{sizeDec})$/;
	var whole = "";
	var dec = "";
	
	if (strInput.charAt(0) == "0" || strInput.length < strSize || strInput.charAt(strMid-1) != ".") 
		return false;
	
	for(var i=0;i<strSize;i++) {
		if (i == strMid-1 ) continue;
		if (isNaN(strInput.charAt(i)) == true) return false;
	}
	
	return true;
}

/**************************************************************
@ Function name : doCheckFormat
@ Param			: value
@ Param			: format
@ Author        : Tamilvanan S
@ Purpose       : Checks for regular expression
**************************************************************/
function doCheckFormat(value, format) {

	var exp1 =   /^[0-9][0-9]\.[0-9]$/;
	var exp2 =   /^[0-9]\.[0-9]$/;
	var exp3 =   /^[0-9]$/;
	var exp4 =   /^[0-9][0-9]$/;
	var exp5 =   /^[0-9][0-9][0-9]\.[0-9][0-9]$/;
	var exp6 =   /^[0-9][0-9][0-9]\.[0-9]$/;
	var exp7 =   /^[0-9][0-9][0-9]$/;

	if (format == "xx") {
		if (value.match(exp4) || value.match(exp3)) return true;
		else return false;
	} else if (format == "xxx") {
		if (value.match(exp4) || value.match(exp3) || value.match(exp7)) return true;
		else return false;
	} else if (format == "xxx.xx") {
		if (value.match(exp5) || value.match(exp6) || value.match(exp7)) return true;
		else return false;
	} else if (format == "xx.x") {
		if (value.match(exp1) || value.match(exp2) || value.match(exp3) || value.match(exp4)) return true;
		else return false;
	}

	return false;
}

/**************************************************************
@ Function name : compareStrings
@ Author        : Tamilvanan S
@ Param			: str1
@ Param			: str2
@ Purpose       : Comapres two strings and return true 
		  		  if both are equal		  
**************************************************************/
function compareStrings(str1, str2) {
	if (str1.length != str2.length) return false;
	
	for (var i=0;i<str1.length;i++) {
		if (str1.charAt(i) != str2.charAt(i))
			return false;
	}
	
	return true;
}

/**************************************************************
@ Function name : isValidDate
@ Author        : Tamilvanan S
@ Param			: objName
@ Param			: strDateStyle (US - MM//DD/YYYY, EN - DD/MM/YYYY)
@ Purpose       : Checks for a valid date
**************************************************************/
function isValidDate(objName, strDatestyle) {	
	
	//var strDatestyle = "US"; //United States date style
	
	strDatestyle = strDatestyle.toUpperCase();
	
	if (strDatestyle == "MM/DD/YYYY") {
		strDatestyle="US";
	} else if (strDatestyle == "DD/MM/YYYY") {
		strDatestyle="EN";
	}
	
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("/");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "01";
	strMonthArray[1] = "02";
	strMonthArray[2] = "03";
	strMonthArray[3] = "04";
	strMonthArray[4] = "05";
	strMonthArray[5] = "06";
	strMonthArray[6] = "07";
	strMonthArray[7] = "08";
	strMonthArray[8] = "09";
	strMonthArray[9] = "10";
	strMonthArray[10] = "11";
	strMonthArray[11] = "12";
	strDate = padZeros(trimString(datefield.value), "/");
	if (strDate.length != 10) {
		return false;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			}
			else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		 }
	}
	if (strYear.length != 4) {
		return false;
	}
	
	if (isNaN(strDay) || isNaN(strMonth) || isNaN(strYear)) return false;
	
	// US style
	if (strDatestyle == "US") {
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		err=17;
		return false;
	}

	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}
	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || 	intday < 1)) {
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (isLeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
			}
		}
		else {
			if (intday > 28) {
				err = 10;
				return false;
			}
		}
	}
	
	datefield.value = strDate;
	
	return true;
}

/**************************************************************
@ Function name : isLeapYear
@ Author        : Tamilvanan S
@ Param			: intYear
@ Purpose       : Checks the year for leap year
**************************************************************/
function isLeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

/**************************************************************
@ Function name : compareDates
@ Author        : Tamilvanan S
@ Param			: strFirstDate
@ Param			: strSecondDate
@ Param			: format
@ Purpose       : Compares two given dates and return true
				  if the second date is lesser than first date
**************************************************************/
function compareDates(strFirstDate, strSecondDate, format) {
	
	format = format.toUpperCase();
	
	if (format == "DD/MM/YYYY") {
		strFirstDate = strFirstDate.substring(3,5) + "/" + strFirstDate.substring(0,2) + "/" + strFirstDate.substring(6);
		strSecondDate = strSecondDate.substring(3,5) + "/" + strSecondDate.substring(0,2) + "/" + strSecondDate.substring(6);
	}
	
	strDate1 = new Date(strFirstDate);
	strDate2 = new Date(strSecondDate);
	
	return (strDate2 < strDate1)?false:true;
}

/**************************************************************
@ Function name : isValidTime
@ Author        : Tamilvanan S
@ Param			: objName
@ Purpose       : Checks for a valid time
**************************************************************/
function isValidTime(objName) {
	var timeField = objName;
	var textTime = timeField.value;
	var timeExpression = /^(\d{2}):(\d{2})$/;
	var valresult = textTime.match(timeExpression);
	var strTime;
	var strTimeArray;
	var strHour;
	var strMinutes;
	var intHour;
	var intMinutes;
	var booFound = false;
	var strSeparatorArray = new Array(":");
	var intElementNr;
	var err = 0;
	strTime = timeField.value;
	if (strTime.length < 1) {
			return false;
	}
	if (strTime.charAt(2) != ":") {
		err=13;
		return false;
	}
	
	for (var intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strTime.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strTimeArray = strTime.split(strSeparatorArray[intElementNr]);
			if (strTimeArray.length != 2) {
				err = 1;
				return false;
			}
			else {
				strHour = strTimeArray[0];
				strMinutes = strTimeArray[1];
			}
			booFound = true;
		}
	}
	if (booFound == false) {
		if (strTime.length>3) {
			strHour = strTime.substr(0, 2);
			strMinutes = strTime.substr(2, 2);
		 }
	}
	intHour = parseInt(strHour, 10);
	if (isNaN(intHour)) {
		err = 2;
		return false;
	}
	intMinutes = parseInt(strMinutes, 10);
	if (isNaN(intMinutes)) {
		err=11;
		return false;
	}
	else
	{
		if (intMinutes > 59 || intMinutes < 0) {
			err = 3;
			return false;
		}
	}
	if (intHour > 23 || intHour < 0) {
		err = 7;
		return false;
	}
	return true;
}

/**************************************************************
@ Function name : IsAlphanumeric
@ Param			: Expression
@ Author        : Tamilvanan S
@ Purpose       : Check for a valid alphanumeric character
**************************************************************/
function IsAlphanumeric(Expression) {
	Expression = Expression.toLowerCase();
	RefString = "abcdefghijklmnopqrstuvwxyz0123456789 ";

	if (Expression.length < 1) 
		return (false);

	for (var i = 0; i < Expression.length; i++) 
	{
		var ch = Expression.substr(i, 1)
		var a = RefString.indexOf(ch, 0)
		if (a == -1)
			return (false);
	}
	return(true);
}

/**************************************************************
@ Function name : trimString
@ Param			: strValue
@ Author        : Tamilvanan S
@ Purpose       : Trims leading and trailing spaces
**************************************************************/
function trimString(strValue) {

        var ichar, icount;
        
        ichar = strValue.length - 1;
        icount = -1;
        while (strValue.charAt(ichar)==' ' && ichar > icount)
            --ichar;
        if (ichar!=(strValue.length-1))
            strValue = strValue.slice(0,ichar+1);
        ichar = 0;
        icount = strValue.length - 1;
        while (strValue.charAt(ichar)==' ' && ichar < icount)
            ++ichar;
        if (ichar!=0)
            strValue = strValue.slice(ichar,strValue.length);
        return strValue;
}

/**************************************************************
@ Function name : replaceChars
@ Param			: str
@ Param			: fromChar
@ Param			: toChar
@ Author        : Tamilvanan S
@ Purpose       : Replaces the string with the given char
**************************************************************/
function replaceChars(str, fromChar, toChar) {
	var formattedStr = "";
	var strSub = "";
	for(var i=0;i<str.length;i++) {
		strSub = str.charAt(i);
		if (strSub == fromChar) strSub = toChar
		formattedStr = formattedStr + strSub;
	}
	return formattedStr;
}

/**************************************************************
@ Function name : padZeros
@ Param			: str
@ Param			: delimiter
@ Author        : Tamilvanan S
@ Purpose       : Pads zeros before month/day values
**************************************************************/
function padZeros(str, delimiter) {
	var i=0;
	var str1 = "";
	var str2 = "";
	
	for(i=0;i<str.length;i++) {
		if (str.charAt(i) == delimiter) break;
		else str1 = str1 + str.charAt(i);
	}
	
	for(i=str1.length+1;i<str.length;i++) {
		if (str.charAt(i) == delimiter) break;
		else str2 = str2 + str.charAt(i);
	}
	
	if (!isNaN(str1) && !isNaN(str2)) {
		if (str1.length == 1) str1 = "0" + str1;
		if (str2.length == 1) str2 = "0" + str2;
	}
	
	str = str1 + delimiter + str2 + delimiter + str.substr(i+1);	
	return str;
}

/**************************************************************
@ Function name : isValidEmail
@ Param			: str
@ Author        : Tamilvanan S
@ Purpose       : Checks for a valid e-mail Id
**************************************************************/
function isValidEmail(str) {
	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
    var filter=/^.+@.+\..{2,3}$/;

	if (str.indexOf(at)==-1){
		return false;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		return false;
	}

	if (str.indexOf(at,(lat+1))!=-1){
		return false;
	}

	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		return false;
	}

	if (str.indexOf(dot,(lat+2))==-1){
		return false;
	}

	if (str.indexOf(" ")!=-1){
		return false;
	}		
	
	if (!filter.test(str)){
		return false;
	}		
	return true;
}

/**************************************************************
@ Function name : checkSSN
@ Param			: objSSN
@ Author        : Tamilvanan S
@ Purpose       : Checks for a valid SSN number
**************************************************************/
function isValidSSN(objSSN) {

	var ssn = objSSN.value;

	if (ssn.length != 9) {
		return false;
	} else	{
		var num1 = ssn.charAt(0);
		var num2 = ssn.charAt(1);
		var num3 = ssn.charAt(2);
		var num4 = ssn.charAt(3);
		var num5 = ssn.charAt(4);
		var num6 = ssn.charAt(5);
		var num7 = ssn.charAt(6);
		var num8 = ssn.charAt(7);
		var num9 = ssn.charAt(8);

		var step1 = 2 * (num2 + num4 + num6 + num8);
		var step2 = 0;
		var tempNum = Math.floor(step1 / 10000);
		step2 += tempNum;
		step1 -= (tempNum * 10000);
		tempNum = Math.floor(step1 / 1000);
		step2 += tempNum;
		step1 -= (tempNum * 1000);
		tempNum = Math.floor(step1 / 100);
		step2 += tempNum;
		step1 -= (tempNum * 100);
		tempNum = Math.floor(step1 / 10);
		step2 += tempNum;
		step1 -= (tempNum * 10);
		tempNum = Math.floor(step1 / 1)
		step2 += tempNum;
		var step3 = num1 + num3 + num5 + num7;
		tempNum = Math.floor(step3 / 1000);
		step2 += tempNum;
		step3 -= (tempNum * 1000);
		tempNum = Math.floor(step3 / 100);
		step2 += tempNum;
		step3 -= (tempNum * 100);
		tempNum = Math.floor(step3 / 10);
		step2 += tempNum;
		step3 -= (tempNum * 10);
		tempNum = Math.floor(step3 / 1)
		step2 += tempNum;

		tempNum = Math.floor(step2 / 10);
		valid = 10 - (step2 - (tempNum * 10));
		var num = num1 + num2 + num3 + "-" + num4 + num5 + "-" + num6 + num7 + num8 + num9;
		if (valid == 10)
		valid -= 10;

		objSSN.value = num;

		if (valid == num9) return true;
		else return false;
	}
}

/**************************************************************
@ Function name : isBetween
@ Param			: strNum
@ Param			: fromRange
@ Param			: toRange
@ Author        : Tamilvanan S
@ Purpose       : Checks for the given number lies between 
                  the given range.
**************************************************************/
function isBetween(strNum, fromRange, toRange) {

	if (isNaN(strNum) || isNaN(fromRange) || isNaN(toRange)) return false;

	var num = parseInt(strNum);
	var range1 = parseInt(fromRange);
	var range2 = parseInt(toRange);

	if (range1 > range2) return false;

	if (num >= range1 && num <= range2) return true;
	else return false;
}

/**************************************************************
@ Function name : isValidMonthYear
@ Param			: value
@ Author        : Tamilvanan S
@ Purpose       : Checks for the given date value in mmyyyy format
**************************************************************/
function isValidMonthYear(value) {
	var month = value.substring(0,2);
	var year = value.substring(3);

	if (year.length != 4 || month.length != 2) return false;
	
	if (isNaN(month) || isNaN(year)) return false;
	
	if (month > 12 || month < 1) return false;
	
	if (parseInt(year) == 0 ) return false;
	
	return true;
}

/**************************************************************
@ Function name : isValidPhone
@ Param			: object
@ Author        : Tamilvanan S
@ Purpose       : Checks for a valid phone number.
**************************************************************/
function isValidPhone(object) {
	var str = object.value;
		
	var exp1 =   /^[0-9][0-9][0-9]\-[0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]/;
	var exp2 =  /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/;
	
	if (str.match(exp1)) {
		return true;
	} else if (str.match(exp2)) {
		object.value = 	str.substring(0,3) + "-" + str.substring(3,6) + "-" + str.substring(6,10) + " " + str.substring(10);
		return true;
	} else {
		return false;
	}
}

/**************************************************************
@ Function name : isValidSSN
@ Param			: object
@ Author        : Tamilvanan S
@ Purpose       : Checks for a valid social security number.
**************************************************************/
function isValidSSN(object) {
	var str = object.value;		
	var exp1 =   /^[0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9][0-9][0-9]$/;
	var exp2 =   /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/;
	
	if (str.match(exp1)) {
		return true;
	} else if (str.match(exp2)) {
		object.value = str.substring(0,3) + "-" + str.substring(3,5) + "-" + str.substr(5);
		return true;
	} else {
		return false;
	}
}

/**************************************************************
@ Function name : isValidPassword
@ Param			: str
@ Author        : Tamilvanan S
@ Purpose       : Checks for a valid EMSOPS password.
**************************************************************/
function isValidPassword(str) {

	if (str.length < 6 ) return false;

	var substr = "";
	var alpha = false;
	var num = false;
	var spl = false;

	for(var i=0;i<str.length;i++) {
		substr = str.charAt(i);
		if ((substr >= 'A' && substr <= 'Z') || (substr >= 'a' && substr <= 'z'))
			alpha = true;
		if (substr >= '0' && substr <= '9')
			num = true;

		if (!(
				(substr >= 'A' && substr <= 'Z') ||
				(substr >= 'a' && substr <= 'z') ||
				(substr >= '0' && substr <= '9')
			)) spl = true;

	}

	if (alpha && num && spl) return true;
	else return false;
}

/**************************************************************
@ Function name : makeDaysOfMonth
@ Author        : Tamilvanan S
@ Param  : None
@ Purpose       : Helper method to calculate Age
**************************************************************/
function makeDaysOfMonth(){
  var i = 0;
  this[i++] = 0; // dummy
  this[i++] = 31;
  this[i++] = 29;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 30;
  this[i  ] = 31;
  this.length = i;
}

/**************************************************************
@ Function name : calculateAge
@ Author        : Tamilvanan S
@ Param  : objName
@ Param  : strDateStyle (US - MM//DD/YYYY, EN - DD/MM/YYYY)
@ Purpose       : Calculate Age from a given date
**************************************************************/
function calculateAge(objName, strDatestyle ){

	  var strDate;
	 var strDateArray;
	 var strDay;
	 var strMonth;
	 var strYear;
	 var intday;
	 var intMonth;
	 var intYear;
	 var booFound = false;
	 var datefield = objName;
	 var strSeparatorArray = new Array("/");
	 var intElementNr;
	 var err = 0;
	 var currentDate;
	 var currentMonth;
	 var currentDay;
	 var currentYear;
	 var age;
	 var DaysOfMOnth = new makeDaysOfMonth();

	 strDatestyle = strDatestyle.toUpperCase();

	 if (strDatestyle == "MM/DD/YYYY") {
	  strDatestyle="US";
	 } else if (strDatestyle == "DD/MM/YYYY") {
	  strDatestyle="EN";
	 }

	 strDate = padZeros(datefield.value, "/");

	 if (strDate.length != 10) {
	  return false;
	 }

	 for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
	  if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
	   strDateArray = strDate.split(strSeparatorArray[intElementNr]);
	   if (strDateArray.length != 3) {
	    err = 1;
	    return false;
	   }
	   else {
	    strDay = strDateArray[0];
	    strMonth = strDateArray[1];
	    strYear = strDateArray[2];
	   }
	   booFound = true;
	  }
	 }
	 if (booFound == false) {
	  if (strDate.length>5) {
	   strDay = strDate.substr(0, 2);
	   strMonth = strDate.substr(2, 2);
	   strYear = strDate.substr(4);
	   }
	 }
	 if (strYear.length != 4) {
	  return false;
	 }

	 if (isNaN(strDay) || isNaN(strMonth) || isNaN(strYear)) return false;

	 // US style
	 if (strDatestyle == "US") {
	  strTemp = strDay;
	  strDay = strMonth;
	  strMonth = strTemp;
	 }

	 intday = parseInt(strDay, 10);
	 if (isNaN(intday)) {
	  err = 2;
	  return false;
	 }
	 intMonth = parseInt(strMonth, 10);
	 if (isNaN(intMonth)) {
	  err=17;
	  return false;
	 }

	 intYear = parseInt(strYear, 10);
	 if (isNaN(intYear)) {
	  err = 4;
	  return false;
	 }
	 if (intMonth>12 || intMonth<1) {
	  err = 5;
	  return false;
	 }
	 if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth 

	== 12) && (intday > 31 ||  intday < 1)) {
	  err = 6;
	  return false;
	 }
	 if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
	  err = 7;
	  return false;
	 }
	 if (intMonth == 2) {
	  if (intday < 1) {
	   err = 8;
	   return false;
	  }
	  if (isLeapYear(intYear) == true) {
	   if (intday > 29) {
	    err = 9;
	    return false;
	   }
	  }
	  else {
	   if (intday > 28) {
	    err = 10;
	    return false;
	   }
	  }
	 }

	 if (DaysOfMOnth[intMonth] < intday || intday < 1) return false;

	 currentDate     = new Date();  // get current date
	 currentYear  = currentDate.getFullYear(); // get year of current
	 currentMonth   = currentDate.getMonth() + 1; // get month of current
	 currentDay   = currentDate.getDate();  // get date of current

	 if (intMonth == 2 && intday == 29){  // check leap year
	  if (!(((intYear % 4 == 0) && (intYear % 100 != 0)) || (intYear % 400 == 0))){
	  return false;
	  }
	 }

	 age = currentYear - intYear;
	 if ((intMonth > currentMonth) || (intMonth == currentMonth && currentDay < intday)) age --;
	 
	 if (age < 0 ) return false;

	 return age;
}
 
/**************************************************************
@ Function name : getYearsMonthsWeeks
@ Author        : Tamilvanan S
@ Param  : dateFrom
@ Param  : dateTo
@ Purpose       : To calculate number of years, months, days between two dates
**************************************************************/
 
function getYearsMonthsWeeks(dateFrom, dateTo) {
 
	var date1;
	var date2;
	var diff;
	var date1temp;
	var date2temp;
	var timediff;
	var years;
	var months;
	var days;
	var weeks;
	var returnValue;

	date1 = new Date();
	date2 = new Date();
	diff  = new Date();

	if (isValidDate(dateFrom,"US")) { // Validates first date 
	date1temp = new Date(dateFrom.value + " " + "00:00:00AM");
	date1.setTime(date1temp.getTime());
	}
	else return false; // otherwise exit

	if (isValidDate(dateTo,"US")) { // Validates second date 
	date2temp = new Date(dateTo.value + " " + "00:00:00AM");
	date2.setTime(date2temp.getTime());
	}

	else return false; // otherwise exits

	// sets difference date to difference of first date and second date

	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	timediff = diff.getTime();

	//Get Years
	years = Math.floor(timediff / (1000 * 60 * 60 * 24 * 365));
	timediff -= years * (1000 * 60 * 60 * 24 * 365);

	//Get MOnths
	months = Math.round(timediff / (1000 * 60 * 60 * 24 * 31)); 
	timediff -= months * (1000 * 60 * 60 * 24 * 31);

	//Get weeks
	weeks= Math.floor(timediff / (1000 * 60 * 60 * 24 * 7)); 

	returnValue = years + "," + months + "," +weeks;

	return returnValue;
}

/**************************************************************
@ Function name : isAlpha
@ Param			: str
@ Author        : Tamilvanan S
@ Purpose       : Checks for alphabetic chars
**************************************************************/
function isAlpha(str) {
	var substr = "";

	for(var i=0;i<str.length;i++) {
		substr = str.charAt(i);
		if (!(substr >= 'A' && substr <= 'Z') || !(substr >= 'a' && substr <= 'z'))
			return false;	
	}

	return true;
}

/**************************************************************
@ Function name : isDecimalValue
@ Param			: strValue
@ Author        : Tamilvanan S
@ Purpose       : Checks for numericvalue with decimal point
@ Return value	: True if valid, otherwise false.
**************************************************************/
function  isDecimalValue( strValue ) {
  var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;

  //check for numeric characters
  return objRegExp.test(strValue);
}


/****************************************************************
@ Function name : dateValid
@ Author        : S.Sampath, TRS
@ Param			: objName - object name
@ Purpose       : used for validating dates in controls
@				  where year without century is entered 
*****************************************************************/

function dateValid(objName) {
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;

var strMonthArray = new Array(12);
strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
//strDate = datefield.value;
strDate = objName;
if (strDate.length < 1) {
return true;
}
for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
strDateArray = strDate.split(strSeparatorArray[intElementNr]);
if (strDateArray.length != 3) {
err = 1;
return false;
}
else {
strDay = strDateArray[0];
strMonth = strDateArray[1];
strYear = strDateArray[2];
}
booFound = true;
   }
}
if (booFound == false) {
if (strDate.length>5) {
strDay = strDate.substr(0, 2);
strMonth = strDate.substr(2, 2);
strYear = strDate.substr(4);
   }
}
//Adjustment for short years entered
if (strYear.length == 2) {
strYear = '20' + strYear;
}
if (strYear < 1800) {
err = 4;
return false;
}
strTemp = strDay;
strDay = strMonth;
strMonth = strTemp;
intday = parseInt(strDay, 10);
if (isNaN(intday)) {
err = 2;
return false;
}
intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
for (i = 0;i<12;i++) {
if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
intMonth = i+1;
strMonth = strMonthArray[i];
i = 12;
   }
}
if (isNaN(intMonth)) {
err = 3;
return false;
   }
}
intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
err = 4;
return false;
}
if (intMonth>12 || intMonth<1) {
err = 5;
return false;
}
if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
err = 6;
return false;
}
if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
err = 7;
return false;
}
if (intMonth == 2) {
if (intday < 1) {
err = 8;
return false;
}
if (isLeapYear(intYear) == true) {
if (intday > 29) {
err = 9;
return false;
   }
}
else {
if (intday > 28) {
err = 10;
return false;
      }
   }
}
return true;
}

/****************************************************************
@ Function name : DateFormat
@ Author        : Sampath, TRS
@ Param			: vDateName - object name
@ Param			: vDateValue - value in the field being checked
@ Param			: e - event
@ Param			: dateCheck
@				  True  = Verify that vDateValue is a valid date
@				  False = Format values being entered
@ Purpose       : Validate user entered date - mm/dd/[yy]yy
*****************************************************************/
function DateFormat(vDateName, vDateValue, e, dateCheck) {

//Declare Local variables
var strSeperator = "/";
var vDateType = 1; 	// date format // 1 = mm/dd/yyyy
var vYearType = 4; 	// Set to 2 or 4 for number of digits in the year
var vYearLength = 2;
vDateType = 1; // 1 = mm/dd/yyyy

//User entered Key code
var whichCode = (window.Event) ? e.which : e.keyCode;

if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
	return false;
else {
	//Create numeric string values for 0123456789/
	//The codes provided include both keyboard and keypad values
	var strCheck = '8,16,17,18,19,20,37,38,39,40,144,110,46,47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105,144,145,32,33,34,35,36,44,45,91,92,93,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,160,161,162,163,164,165';
	if (strCheck.indexOf(whichCode) != -1) {
		if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {

		var i=0, iCount=0;
		for (i=0;i<vDateValue.length;i++)
		{
			if (vDateValue.charAt(i) == '/' ){
					iCount++;
					if ((i != 2) && (i != 5) )
					{
					alert("Invalid Date\nPlease Re-Enter");
					vDateName.focus();
					return false;
				}
			}
		}

		if (iCount >2) {
			alert("Invalid Date\nPlease Re-Enter");
			vDateName.focus();
			return false;
		}

		alert ("Invalid Date\nPlease Re-Enter");
		vDateName.focus();
		return true;
	}
	// Reformat date to format that can be validated. mm/dd/yyyy
	if (vDateValue.length >= 8 && dateCheck) {


		if (vDateValue.length == 8) {
			var i=0, iCount=0;
			for (i=0;i<vDateValue.length;i++)
			{
				if (vDateValue.charAt(i) == '/' ){
					iCount++;
					if ((i != 2) && (i != 5))
					{
						alert("Invalid Date\nPlease Re-Enter");
						vDateName.focus();
						return false;
					}
				}
			}

			if ((iCount >2) || (iCount==1))  {
				alert("Invalid Date\nPlease Re-Enter");
				vDateName.focus();
				return false;
			}
		}

		if (vDateType == 1) // mm/dd/yyyy
		{
		var mMonth = vDateName.value.substr(0,2);
		var mDay = vDateName.value.substr(3,2);
		var mYear = vDateName.value.substr(6,4)
		}

		if ((mMonth.indexOf(strSeperator) != -1) || (mDay.indexOf(strSeperator) != -1) ||(mYear.indexOf(strSeperator) != -1)) {
			alert("Invalid Month\nPlease Re-Enter");
			vDateName.focus();
			return true;
		}

		if (mMonth >12) {
		alert("Invalid Month\nPlease Re-Enter");
		vDateName.focus();
		return true;
		}

		if (mDay >31) {
		alert("Invalid Date\nPlease Re-Enter");
		vDateName.focus();
		return true;
		}

		if (vYearLength == 4) {
			if (mYear.length < 4) {
			alert("Invalid Date\nPlease Re-Enter");

			//vDateName.value = "";
			vDateName.focus();
			return true;
			}
		}
		// Create temp. variable for storing the current vDateType
		var vDateTypeTemp = vDateType;

		// Change vDateType to a 1 for standard date format for validation
		// Type will be changed back when validation is completed.
		vDateType = 1;

		// Store reformatted date to new variable for validation.
		var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;

		if (mYear.length == 2 && vYearType == 4 && dateCheck) {
			//Turn a two digit year into a 4 digit year
			var mToday = new Date();
			//If the year is greater than 30 years from now use 19, otherwise use 20
			var checkYear = mToday.getFullYear() + 30;
			var mCheckYear = '20' + mYear;
			if (mCheckYear >= checkYear)
				mYear = '19' + mYear;
			else
				mYear = '20' + mYear;
			vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
			// Store the new value back to the field.  This function will
			// not work with date type of 2 since the year is entered first.
			if (vDateTypeTemp == 1) // mm/dd/yyyy
			vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
		}

		if (!dateValid(vDateValueCheck)) {
			alert("Invalid Date\nPlease Re-Enter");
			vDateType = vDateTypeTemp;
			vDateName.focus();
			return true;
		}

		vDateType = vDateTypeTemp;
		return true;
	}
	else {

		if (vDateType == 1) {
			if (vDateValue.length == 2) {
				vDateName.value = vDateValue+strSeperator;
				}
			if (vDateValue.length == 5) {
				vDateName.value = vDateValue+strSeperator;
			   	}
			}
		return true;
		}

		if (vDateValue.length == 10&& dateCheck) {
			if (!dateValid(vDateName)) {
				alert("Invalid Date\nPlease Re-Enter");
				vDateName.focus();
			   }
			}
			return false;
		}
		else {
				vDateName.focus();
				return false;
		}
   	}
}

/*************************************************************
 @ Function Name 	: ControlKey
 @ Author        	: Subramanian G
 @ Param       		: 
 @ Purpose		: Not to Allow Special Characters.
**************************************************************/
function ControlKey() {
	if (window.event.keyCode > 126) window.event.keyCode=0;
}

/*************************************************************
 @ Function Name 	: isValidZipCode
 @ Author        	: TRS
 @ Param       		: stateCode, Zip5, plus4
 @ Purpose		: To Allow numerics only for US states
**************************************************************/
function isValidZipCode(stateCode, zip5) {
//**UAT-330 TRS 09/14/2003 added to validate US zip codes	
	if ( stateCode.length <= 0 || stateCode.value == "" ) return true;
	if (stateCode.length <2 ) return false;
	var returnValue=true;
	stateCode=stateCode.substring(0,2);
	if ((stateCode=="AB") || (stateCode=="BC") || (stateCode=="MB") ||
	 	(stateCode=="NB") || (stateCode=="NL") || (stateCode=="NT") ||
	 	(stateCode=="NS") || (stateCode=="ON") || (stateCode=="PE") || 
	 	(stateCode=="QC") || (stateCode=="SK") || (stateCode=="YK") || 
	 	(stateCode=="NU")) {
	} else {
		if (isNaN(zip5)) returnValue=false;
		
	}
	return returnValue;
}

/*************************************************************
 @ Function Name 	: isValidURL
 @ Author        	: TRS
 @ Param       		: 
 @ Purpose			: To validate URLs.
**************************************************************/
function isValidURL(field){

	var reExpression;
	var flag=false;

	try {
		reExpression = new RegExp("^[A-Za-z]+://[A-Za-z0-9-]+\.[A-Za-z0-9]+" , "i");
		var result = reExpression.exec(field);
		if (result !=null) flag=true;
	 } catch (error) {
		flag=true;
	}
	
	return flag;
}

/*************************************************************
 @ Function Name 	: jm_phonemask
 @ Author        	: TRS
 @ Param       		: control
 @ Purpose			: To format phone numbers.
**************************************************************/
function jm_phonemask(t)
{var patt1 = /(\d{3}).*(\d{3}).*(\d{4})/;
var patt2 = /^\((\d{3})\).(\d{3})-(\d{4})$/;
var str = t.value;
var result;
if (!str.match(patt2))
{result = str.match(patt1);
if (result!= null)
{t.value = t.value.replace(/[^\d]/gi,'');
str = '(' + result[1] + ') ' + result[2] + '-' + result[3];
t.value = str;
}else{
if (t.value.match(/[^\d]/gi))
t.value = t.value.replace(/[^\d]/gi,'');
}}}

/*************************************************************
 @ Function Name 	: jm_ssnmask
 @ Author        	: TRS
 @ Param       		: control
 @ Purpose			: To format ssn.
**************************************************************/
function jm_ssnmask(t)
{var patt = /(\d{3}).*(\d{2}).*(\d{4})/;
var donepatt = /^(\d{3})-(\d{2})-(\d{4})$/;
var str = t.value;
var result;
if (!str.match(donepatt))
{result = str.match(patt);
if (result!= null)
{t.value = t.value.replace(/[^\d]/gi,'');
str = result[1] + '-' + result[2] + '-' + result[3];
t.value = str;
}else{
if (t.value.match(/[^\d]/gi))
t.value = t.value.replace(/[^\d]/gi,'');}
}}

/*************************************************************
 @ Function Name 	: jm_zipmask
 @ Author        	: TRS
 @ Param       		: control
 @ Purpose			: To format zip codes.
**************************************************************/
function jm_zipmask(t)
{var patt = /(\d{5}).*(\d{4})/;
var donepatt = /^(\d{5})-(\d{4})$/;
var str = t.value;
var result;
if (!str.match(donepatt))
{result = str.match(patt);
if (result!= null)
{t.value = t.value.replace(/[^\d]/gi,'');
str = result[1] + '-' + result[2];
t.value = str;
}else{
if (t.value.match(/[^\d]/gi))
t.value = t.value.replace(/[^\d]/gi,'');}
}}


/*************************************************************
 @ Function Name 	: checkTime
 @ Author        	: TRS
 @ Param       		: control
 @ Purpose			: To format zip codes.
**************************************************************/
function checkTime(sTime)
{
	var reExpression;
	var flag=false;	
	var timeVal = sTime.value;
	try {
		if (timeVal.length == 0) return true;
		var reExpression = new RegExp('^([0-1][0-9]|[2][0-3]):([0-5][0-9])$' , 'i');
		var result = reExpression.exec(timeVal);
		if (result==null) {
				alert("Invalid Time\nPlease Re-Enter");
				sTime.focus();
				return true;
		}
		flag=true;
	 } catch (error) {
		flag=true;
	}	
	
	return flag;
}	


function jm_timemask(t)
{var patt = /(\d{2}).*(\d{2})/;
var donepatt = /^(\d{2}):(\d{2})$/;
var str = t.value;
var result;
if (!str.match(donepatt))
{result = str.match(patt);
if (result!= null)
{t.value = t.value.replace(/[^\d]/gi,'');
str = result[1] + ':' + result[2] ;
t.value = str;
}else{
if (t.value.match(/[^\d]/gi))
t.value = t.value.replace(/[^\d]/gi,'');}
}}

function jm_currencymask(t)
{var patt = /(\d*)\.{1}(\d{0,2})/;
var donepatt = /^(\d*)\.{1}(\d{2})$/;
var str = t.value;
var result;
if (!str.match(donepatt))
{result = str.match(patt);
if (result!= null)
{t.value = t.value.replace(/[^\d]/gi,'');
str = result[1] + '.' + result[2] ;
t.value = str;
}else{
if (t.value.match(/[^\d]/gi))
t.value = t.value.replace(/[^\d]/gi,'');}
}}

function isValidPhone(ctl) {

	if (ctl.value.length <10) {
		alert ('Invalid Phone No\nPlease Re-Enter');
		try {ctl.select(); ctl.focus(); } catch (e){}
		return false;
	}
	return true;
}

function FormatCurrency(amountCtl)
{
	amount = removeComma(amountCtl.value);
	var delimiter = ","; 
	var a = amount.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if (d!=null) {
		if(d.length < 1) { amount = n; }
		else { amount = n + '.' + d; }
	} else { amount = n; }
	amount = minus + amount;
	amountCtl.value=amount;
}

function removeComma(currValue) {
	var field = currValue;
	var len = field.length;
	var i = 0;
	while(i < len) {
		if(field.charAt(i) == ",") {
			field= field.substr(0,i) + field.substr(i+1);
			len --;
			i = 0;
		} else {
			i++;
		}
	}
	return field;
}
/**************************************************************
@ Function name : maxlen
@ Author        : Tamilvanan S
@ Param			: object
@ Param			: size
@ Purpose       : Checks for maximum length and restrict
				  user input accordingly.
**************************************************************/

function maxlen(object,size) {
	if (object.value.length >= size) {
		object.value = object.value.substring(0,size);
		return false;
	}
	/*ev = e || window.event;
	whKey = ev? ev.which:ev.keyCode; // check for which is supported
	if ((whKey!=8&&whKey!=0)) {
		if (object.value.length >= size) return false;//window.event.keyCode = 0;
	}*/
	return true;
}


/**************************************************************
** Function name : checkdate
** Author        : Tamilvanan S
** Purpose       : Checks the date
**************************************************************/

function checkdate(objName, D, M , Y) {
	var datefield = objName;
	return chkdate(objName, D, M, Y);
}

/**************************************************************
** Function name : chkdate
** Author        : Tamilvanan S
** Purpose       : Checks the date given the date as param
**************************************************************/

function chkdate(objName, D, M, Y) {
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("/");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "01";
	strMonthArray[1] = "02";
	strMonthArray[2] = "03";
	strMonthArray[3] = "04";
	strMonthArray[4] = "05";
	strMonthArray[5] = "06";
	strMonthArray[6] = "07";
	strMonthArray[7] = "08";
	strMonthArray[8] = "09";
	strMonthArray[9] = "10";
	strMonthArray[10] = "11";
	strMonthArray[11] = "12";
	strDate = datefield.value;
	/*if (strDate.length != 10) {
		err = 2;
		return err;
	}*/
	var arr = strDate.split(/\//);
	var exp4 =   /^[0-9][0-9]$/;
	if (strDate.charAt(4) != '/') {
		err = 2;
		return err;
	}
	
	
	if (arr[0] == undefined ) {
		err = 2;
		return err;
	}
	if (strDate.charAt(7) != '/') {
			err = 1;
			return err;
	}
	if (arr[1] == undefined ) {
		err = 1;
		return err;
	}
	
	if (arr[2] == undefined ) {
		err = 3;
		return err;
	}
	
	strYear = strDate.substr(0, 4);
	strMonth = strDate.substr(5, 2);
	strDay = strDate.substr(8, 2);
	
	intday = parseInt(strDay, 10);
	var exp4 =   /^[0-9][0-9]$/;
	
		
	if (strMonth.match(exp4) == null)  {
		return 2;
	}
	if (strDay.match(exp4) == null) {
		return 1;
	}
	if (strYear.match(/^[0-9][0-9][0-9][0-9]$/) == null) {
		return 3;
	}
	
	if (isNaN(intday)) {
		err = 1;
		return err;
	}
	if (intday < 1 || intday > 31) {
		err = 1;
		return err;
	}
	intMonth = parseInt(strMonth, 10);
		if (isNaN(intMonth)) {
			err=1;
			return err;
	}
	
	if (strYear.length != 4) {
		return 3;
	}
	intYear = parseInt(strYear, 10);
	
	if (intMonth>12 || intMonth<1) {
		err = 2;
		return err;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || 	intday < 1)) {
		err = 2;
		return err;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 2;
		return err;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 1;
			return err;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 1;
				return err;
			}
		}
		else {
			if (intday > 28) {
				err = 1;
				return err;
			}
		}
	}
	if (isNaN(intYear)) {
		err = 3;
		return err;
	}
	if (intYear < 1800) {
		
		return 3;
	}
	//added by KJR
	
	if (intYear > Y ) {
		err = 3;
		return err;
	}
	if (intYear == Y && intMonth > M) {
		err = 1;
		return err;
	}
	if (intYear == Y && intMonth == M && intday > D) {
		err = 2;
		return err;
	}
	if (intday < 10) {
		intday = '0' + intday;
	}
	
	return 0;
}
/**************************************************************
** Function name : LeapYear
** Author        : Tamilvanan S
** Purpose       : Checks the year for leap year
**************************************************************/

function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

	
	function doRankValidate() {
		var rank_1 = document.forms[0].tbRank.value;
		if (typeof(document.forms[0].tbRank.value)=='string') {
			if (!isEmpty(rank_1)&&!isNumber(rank_1)) 
				return false;
			else
				return true;
		} else {
			for (var i=0;i<document.forms[0].tbRank.length;i++) {
				var rank = document.forms[0].tbRank[i].value;
				if (!isEmpty(rank)&&!isNumber(rank)) 
					return false;
			}
			return true;
		}
	}
	
	function doRankUpdate() {
		document.forms[0].userAction.value= "RANK_UPDATE";
		if(doRankValidate()) {
			document.forms[0].submit();
        } else {
        	alert("The format of the number value you entered is not correct. Please enter a numeric value.");
        }
	}