/***************************************************************
 The functions in this file use the following trimming functions 
 contained in the javascript file CommonFunctions.js.
 
 1) fnTrimMiddleAll(obj)
 2) fnTrimMiddleToSingle(obj)

 Be sure to include the file CommonFunctions.js in the jsp.


****************************************************************/



/* This function to be used for textbox and hidden date objects */


function checkdate(objName) {
var datefield = objName;
if (chkdate(objName) == false) {
datefield.select();
alert("The given date is invalid.  Please try again.\r\rValid Date Formats : dd-mm-yyyy\t dd-mon-yyyy\r\t\t dd/mm/yyyy\t dd/mon/yyyy\r\t\t dd.mm.yyyy\t dd.mon.yyyy\r\t\t dd mm yyyy\t dd mon yyyy");
datefield.focus();
return false;
}
else {
return true;
   }
}


/* This function to be used for textbox and hidden date objects 
	in SA screens(Maintain User and Maintain Role)	*/
function checkdateYYYY(objName) {
var datefield = objName;
if (chkdateYYYY(objName) == false) {
datefield.select();
alert("The given date is invalid.  Please try again.\r\rValid Date Formats : yyyy-mm-dd\r\t\t yyyy/mm/dd\r\t\t yyyy.mm.dd\r\t\t yyyy mm dd");
datefield.focus();
return false;
}
else {
return true;
   }
}

/* This function to be used for validating date given in textboxes 
in the format dd-mon-yyyy. 
This is needed for batch operation.*/

function checkDateBatch(objName) {
var datefield = objName;
if (chkDateBatch(objName) == false) {
datefield.select();
alert("The given date is invalid.  Please try again.\r\rValid Date Formats : dd-mm-yyyy\t dd-mon-yyyy\r\t\t dd/mm/yyyy\t dd/mon/yyyy\r\t\t dd.mm.yyyy\t dd.mon.yyyy\r\t\t dd mm yyyy\t dd mon yyyy");
datefield.focus();
return false;
}
else {
return true;
   }
}


function chkdate(objName) {
//var strDatestyle = "US"; //United States date style
var strDatestyle = "EU";  //European date style
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";

/* Ensure that the Date is not an EMPTY field */
strDate = datefield;
if (strDate.indexOf("/") != -1 || strDate.indexOf(".") != -1 || strDate.indexOf("-") != -1) {
	strDate = fnTrimMiddleAll(strDate);
} else {
	strDate = fnTrimMiddleToSingle(strDate);
}

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.substring(0, 2);
		strMonth = strDate.substring(2, 2);
		strYear = strDate.substring(4);
   	}
}
if (!validateNumber(strYear) || !validateNumber(strDay)) {
	return (false);
}
if (strYear.length != 4 ) {
	return(false);
}

var parsedYear  = parseInt(strYear,10);
if(parsedYear<100)
{
	parsedYear += 2000;
	strYear = new String(parsedYear);
}

// 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)) {
	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 (LeapYear(intYear) == true) {
		if (intday > 29) {
			err = 9;
			return false;
		}
	} else {
		if (intday > 28) {
		err = 10;
		return false;
	}

}

}

if (strDatestyle == "US") {
	datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
} else {
	datefield.value = intday + "/" + intMonth + "/" + strYear;
}

return true;

} //end of chkdate

//Function no Longer used
function chkDateBatch(objName) {
//var strDatestyle = "US"; //United States date style
var strDatestyle = "EU";  //European date style
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";

/* Ensure that the Date is not an EMPTY field */
strDate = datefield.value;
if (strDate.indexOf("/") != -1 || strDate.indexOf(".") != -1 || strDate.indexOf("-") != -1) {
	strDate = fnTrimMiddleAll(strDate);
} else {
	strDate = fnTrimMiddleToSingle(strDate);
}

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.substring(0, 2);
		strMonth = strDate.substring(2, 2);
		strYear = strDate.substring(4);
   	}
}
if (!validateNumber(strYear) || !validateNumber(strDay)) {
	return (false);
}
if (strYear.length > 4) {
	return(false);
}
if (strYear.length == 2) {
	strYear = '20' + strYear;
}
// 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)) {
	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 (LeapYear(intYear) == true) {
		if (intday > 29) {
			err = 9;
			return false;
		}
	} else {
		if (intday > 28) {
		err = 10;
		return false;
	}

}

}

if (strDatestyle == "US") {
	datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
} else {
	datefield.value = intday + "-" + strMonthArray[intMonth-1] + "-" + strYear;
}

return true;

}  //end of chkDateBatch




/* This function to be used for textbox and hidden date objects 
	in SA screens (Maintain User and Maintain Role)	*/

//Function no Longer used
function chkdateYYYY(objName) {
//var strDatestyle = "US"; //United States date style
var strDatestyle = "EU";  //European date style
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";

/* Ensure that the Date is not an EMPTY field */
strDate = datefield.value;
if (strDate.indexOf("/") != -1 || strDate.indexOf(".") != -1 || strDate.indexOf("-") != -1) {
	strDate = fnTrimMiddleAll(strDate);
} else {
	strDate = fnTrimMiddleToSingle(strDate);
}

if (strDate.length < 1) {
	datefield.value = strDate;
	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 {
			strYear = strDateArray[0];
			strMonth = strDateArray[1];
			strDay = strDateArray[2];
		}
		booFound = true;
	}
}
if (booFound == false) {

	if (strDate.length>5) {
		strDay = strDate.substring(0, 2);
		strMonth = strDate.substring(2, 2);
		strYear = strDate.substring(4);
   	}
}
if (!validateNumber(strYear) || !validateNumber(strDay)) {
	return (false);
}

if (strYear.length == 2) {
	strYear = '20' + strYear;
}
// 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)) {
	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 (LeapYear(intYear) == true) {
		if (intday > 29) {
			err = 9;
			return false;
		}
	} else {
		if (intday > 28) {
		err = 10;
		return false;
	}

}

}

if (strDatestyle == "US") {
	datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
} else {
	datefield.value = strYear+ "-" + intMonth + "-" + intday ;
}

return true;

}



function LeapYear(intYear) {

	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	} else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

/* This function to be used for comparing dates in textbox and 
hidden date objects */

function doDateCheck(fromObj, toObj) {

	var fromDate = ""
	var toDate = "";
	fromDate = fromObj.value;
	toDate = toObj.value;
	fromDateArray = fromDate.split("/");
	toDateArray = toDate.split("/");
	var day1  =fromDateArray[0];
	var mon1  =fromDateArray[1];
	var year1 =fromDateArray[2];
	var day2  =toDateArray[0];
	var mon2  =toDateArray[1];
	var year2 =toDateArray[2];
	var intFromDate = 0;
	var intToDate = 0;
	if (day1.length == 1) {
		day1 = "0" + day1;
	}
	if (mon1.length == 1) {
		mon1 = "0" + mon1;
	}
	if (day2.length == 1) {
		day2 = "0" + day2;
	}
	if (mon2.length == 1) {
		mon2 = "0" + mon2;
	}

	intFromDate = parseInt(year1+mon1+day1,10);
	intToDate = parseInt(year2+mon2+day2,10);

	if (intFromDate > intToDate) {
		return(false);
	} else {
		return(true);
	}

} 


function checkMinor(fromDate, toDate){

	var fromDateArray = fromDate.split("/");
	var day1  =parseInt(fromDateArray[0],10);
	var mon1  =parseInt(fromDateArray[1],10);
	var year1 =parseInt(fromDateArray[2],10)-18;
	fromDate = day1+"/"+mon1+"/"+year1;
	dateDiff = getDateDiff(fromDate,toDate);
	if (dateDiff < -13148) 	{
		return(false);
	}
	
	return(true);

}


function checkAge(fromDate, toDate) {

	var fromDateArray = fromDate.split("/");
	var day1  =parseInt(fromDateArray[0],10);
	var mon1  =parseInt(fromDateArray[1],10);
	var year1 =parseInt(fromDateArray[2],10)-18;
	fromDate = day1+"/"+mon1+"/"+year1;
	
	if (getDateDiff(fromDate,toDate) < 0) 	{
		return(false);
	}
	
	return(true);

}

function checkAgeFuture(fromDate, toDate) {

	var fromDateArray = fromDate.split("/");
	var day1  =parseInt(fromDateArray[0],10);
	var mon1  =parseInt(fromDateArray[1],10);
	var year1 =parseInt(fromDateArray[2],10);
	fromDate = day1+"/"+mon1+"/"+year1;
	
	if (getDateDiff(fromDate,toDate) < 0) 	{
		return(false);
	}
	
	return(true);

}
function doDateCheckYYYY(fromObj, toObj) {

	var fromDate = ""
	var toDate = "";
	fromDate = fromObj.value;
	toDate = toObj.value;
	fromDateArray = fromDate.split("-");
	toDateArray = toDate.split("-");
	var year1  =fromDateArray[0];
	var mon1  =fromDateArray[1];
	var day1 =fromDateArray[2];
	var year2  =toDateArray[0];
	var mon2  =toDateArray[1];
	var day2 =toDateArray[2];
	var intFromDate = 0;
	var intToDate = 0;
	if (day1.length == 1) {
		day1 = "0" + day1;
	}
	if (mon1.length == 1) {
		mon1 = "0" + mon1;
	}
	if (day2.length == 1) {
		day2 = "0" + day2;
	}
	if (mon2.length == 1) {
		mon2 = "0" + mon2;
	}

	intFromDate = parseInt(year1+mon1+day1,10);
	intToDate = parseInt(year2+mon2+day2,10);

	if (intFromDate > intToDate) {
		return(false);
	} else {
		return(true);
	}

} 





/* This function to be used for getting date differences.*/

function getDateDiff(firstDate, secondDate) {
	fromDateArray = firstDate.split("/");
	toDateArray = secondDate.split("/");

	var day1  =parseInt(fromDateArray[0],10);
	var mon1  =parseInt(fromDateArray[1],10);
	var year1 =parseInt(fromDateArray[2],10);
	var day2  =parseInt(toDateArray[0],10);
	var mon2  =parseInt(toDateArray[1],10);
	var year2 =parseInt(toDateArray[2],10);
	var date1;
	var date2;

	date1 = new Date(year1, mon1, day1);
	date2 = new Date(year2, mon2, day2);

	var dateDiff;
	var msPerDay;

	msPerDay = 24 * 60 * 60 * 1000; //milliseconds per day

 	dateDiff = (date1.getTime() - date2.getTime()) / msPerDay;
 	
 	return (dateDiff);
}




/* This function to be used for date obtained by concatenating values
from select and textbox objects */

/*Here, dateOfBirth is a date VALUE (not an object) and yearObj is the 
TextField object containing the year. If an error is encountered, the 
focus shifts to this yearObj textfield.
*/

function checkdateConcat(dateOfBirth,yearObj) {
	
	if (chkdateConcat(dateOfBirth,yearObj) == false) {
		
		return (false);
	}
	else {
		return (true);
	}
}


function chkdateConcat(dateParam,yearObj) {

//var strDatestyle = "US"; //United States date style
var strDatestyle = "EU";  //European date style
var strDate = "";
var strDateArray= "";
var strDay= "";
var strMonth= "";
var strYear= "";
var intday= "";
var intMonth= "";
var intYear= "";
var booFound = false;

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 = dateParam;
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);
	}
}
if (!validateNumber(strYear) || !validateNumber(strDay)) {
	return (false);
}

var parsedYear  = parseInt(strYear,10);
if(parsedYear<100)
{
	parsedYear += 2000;
	strYear = new String(parsedYear);
}


// 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)) {
	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 (LeapYear(intYear) == true) {
		if (intday > 29) {
			err = 9;
			return false;
		}
	}
	else {
		if (intday > 28) {
			err = 10;
			return false;
		}
	}
}

yearObj.value = intYear;

return true;

} //end of chkdateConcat

//Function to check the equality of two date strings.

function isEqual(strDate1 , strDate2)
{
	if(getDateDiff(strDate1,strDate2)==0)
	{
		
		return true;
	}
	return false;
	
}

/* This function to be used for date obtained by concatenating values
from select and textbox objects.
Here, fromDate and toDate are date VALUES*/

function doDateCheckConcat(fromDate, toDate) {

	if (getDateDiff(fromDate,toDate) > 0) 	{
	
		return(false);
	}
	return(true);
} // End of doDateCheckConcat
