/* Included JavaScript functions */
var aFields = new Array();		// Array to contain all of the field names for validation
var aErr = new Array();		//array to contain all of the errors

	function resetDaysInMonth(frmName, fieldName)
	{
		var dfYear	= eval('document.' + frmName + '.' + fieldName + 'year');
		var dfMonth	= eval('document.' + frmName + '.' + fieldName + 'month');
		var dfDay	= eval('document.' + frmName + '.' + fieldName + 'day');
		var nYear  = dfYear[dfYear.selectedIndex].value;
		var nMonth = dfMonth[dfMonth.selectedIndex].value;
		var nDay   = dfDay[dfDay.selectedIndex].value;
		
		//First determine if leap year
		var bLeapYear = false;
		if (nYear % 4 == 0)
			if (nYear % 100 == 0)
			{
				if (nYear % 400 == 0)
					bLeapYear = true;
			}
			else
				bLeapYear = true;
				
		aMonthDays = new Array();
		aMonthDays[0] = 0;
		aMonthDays[1] = 31;
		aMonthDays[2] = bLeapYear?29:28;
		aMonthDays[3] = 31;
		aMonthDays[4] = 30;
		aMonthDays[5] = 31;
		aMonthDays[6] = 30;
		aMonthDays[7] = 31;
		aMonthDays[8] = 31;
		aMonthDays[9] = 30;
		aMonthDays[10] = 31;
		aMonthDays[11] = 30;
		aMonthDays[12] = 31;
		
		//remove the existing options
		for (dCount=dfDay.options.length; dCount>0; dCount--)
			dfDay.options[dCount] = null;
			
		//repopulate the options
		for (dCount=0; dCount < aMonthDays[nMonth]; dCount++)
		{
			dfDay.options[dCount] = new Option(dCount+1, dCount+1);
			if ((dCount + 1) == nDay)
				dfDay.options[dCount].selected = true;
		}
		
		//reselect the day if shorter month than previous selection
		if (dfDay.options.length < nDay)
			dfDay.options[dfDay.options.length - 1].selected = true; 

	}
	

 
/*function dateCompare(frmName, StartDay, StartMonth, StartYear, EndDay, EndMonth, EndYear)
{	
  	var df = eval('document.' + frmName);
  	var StartDay = eval('df.' + StartDay + '.value');
  	var StartMonth = eval('df.' + StartMonth + '.value');
  	var StartYear = eval('df.' + StartYear + '.value');
  	var StartDate = new Date(StartYear, StartMonth, StartDay);
  	var EndDay = eval('df.' + EndDay + '.value');
  	var EndMonth = eval('df.' + EndMonth + '.value');
  	var EndYear = eval('df.' + EndYear + '.value');
  	var EndDate = new Date(EndYear, EndMonth, EndDay);
  	
	if (StartDate > EndDate)
		return 1
	else
		return 0
}*/
function setStatusType(frmName, Status)
{
	var df = eval('document.' + frmName);
	if (df.statusType)
		{
			df.statusType.value = Status;
			errorCheck(frmName);
		}
}

function dateCompare(frmName, fieldName)
{	
   	var df = eval('document.' + frmName);
	var StartMonth = fieldName.toLowerCase();
	var EndMonth = fieldName.replace("start", "end");
	var StartDay = StartMonth.replace("month", "day");
	var EndDay = EndMonth.replace("month", "day");
	var StartYear = StartDay.replace("day", "year");
	var EndYear = EndDay.replace("day", "year");
	StartDay = eval('df.' + StartDay + '.value');
  	StartMonth = eval('df.' + StartMonth + '.value');
	StartYear = eval('df.' + StartYear + '.value');
	var StartDate = new Date(StartYear, StartMonth-1, StartDay);
	EndDay2 = eval('df.' + EndDay + '.value');
	EndMonth2 = eval('df.' + EndMonth + '.value');
	EndYear2 = eval('df.' + EndYear + '.value');
  	var EndDate = new Date(EndYear2, EndMonth2-1, EndDay2);

	if (StartDate > EndDate)
		return 1
	else
		return 0
}

function afterToday(frmName, fieldName)
{	
	var df = eval('document.' + frmName);
	var StartMonth = fieldName.toLowerCase();
	var StartDay = StartMonth.replace("month", "day");
	var StartYear = StartDay.replace("day", "year");
	StartDay = eval('df.' + StartDay + '.value');
  	StartMonth = eval('df.' + StartMonth + '.value');
	StartYear = eval('df.' + StartYear + '.value');
	var StartDate = new Date(StartYear, StartMonth-1, StartDay);
  	var curDate = new Date();
	var curDay = curDate.getDay();
	var curMonth = curDate.getMonth();
	var curYear = curDate.getYear();
	var EndDate = new Date(curYear, curMonth, curDay+3);
	
	if (StartDate < EndDate)
		return 1
	else
		return 0
}

function errorCheck(frmName)
{
	var df = eval('document.' + frmName);
	//loop over the list of fields and validate each
	for (nFieldCount=0; nFieldCount<df.elements.length; nFieldCount++)
	{
		/*if (df.elements[nFieldCount].type == "submit")
		{
			if (df.submitType)
			{
				df.submitType.value = df.elements[nFieldCount].value;
			}
		}*/
		if ((df.elements[nFieldCount].type != "hidden") && (df.elements[nFieldCount].type != "button") && (df.elements[nFieldCount].type != "reset") && (df.elements[nFieldCount].type != "submit") && (df.elements[nFieldCount].type != "radio") && (df.elements[nFieldCount].type != "checkbox"))
		{
			aFields[nFieldCount] = df.elements[nFieldCount].name;
			oOuterObject = aFields[nFieldCount];
		if( (oOuterObject != 'StartDate') && (oOuterObject != 'EndDate') ) 
		{
				oCurObject = eval('df.' + oOuterObject);
				
				//check REQUIRED
				if (oCurObject.getAttribute('Required') != null 
					&& !oCurObject.value)
					logError('Missing "' + oCurObject.title + '"',
						'Required field');

				//check REQUIREDSELECT
				if (oCurObject.getAttribute('RequiredSelect') != null 
					&& !oCurObject[oCurObject.selectedIndex].value)
					{
					logError('Missing "' + oCurObject.title + '"',
						'Required field');
					if (!goBack) var goBack = oCurObject;
					}
				// check DATECOMPARE
				if (oCurObject.getAttribute('DateCompare') != null
					&& dateCompare(frmName, oCurObject.name))
					logError('Date "' + oCurObject.title + '"',
							'Start date comes after End date');
				
				// check AFTERTODAY
				if (oCurObject.getAttribute('AfterToday') != null
					&& afterToday(frmName, oCurObject.name))
					logError('Date "' + oCurObject.title + '"',
							'Has to be later than today');
				
				// check CONFIRM
				if (oCurObject.getAttribute('Confirm') != null)
				{ 
					if (oCurObject == oOuterObject)
						oCompareObject = eval('df.Confirm' + aFields[nFieldCount].FieldName);
					else
						oCompareObject = eval('df.Confirm' + aFields[nFieldCount].FieldName + '[' + nInstanceCount + ']');
					if (oCurObject.value != oCompareObject.value)
						logError('Confirmed value not matched in "' + oCurObject.title + '"',
							'Confirmed value must match');
				}
				
				//check INTEGER
				if (oCurObject.getAttribute('Integer') != null 
					&& oCurObject.value
					&& !/^\-?\d+$/.test(oCurObject.value))
					logError('Illegal character(s) in "' + oCurObject.title + '"',
						'Integer value only');
					
				//check FLOAT
				if (oCurObject.getAttribute('Float') != null 
					&& oCurObject.value
					&& !/^\-?\d*\.?\d*$/.test(oCurObject.value))
					logError('Illegal character(s) in "' + oCurObject.title + '"',
						'Floating point value only');
				
				//check POSITIVE
				if (oCurObject.getAttribute('Positive') != null
					&& oCurObject.value
					&& (isNaN(oCurObject.value)
						|| oCurObject.value <= 0))
					logError('Value not positive in "' + oCurObject.title + '"',
						'Positive value only');
					
				//check NEGATIVE
				if (oCurObject.getAttribute('Negative') != null 
					&& oCurObject.value
					&& (isNaN(oCurObject.value)
						|| oCurObject.value >= 0))
					logError('Value not negative in "' + oCurObject.title + '"',
						'Negative value only');
		
				//check NONPOSITIVE
				if (oCurObject.getAttribute('NonPositive') != null 
					&& oCurObject.value
					&& (isNaN(oCurObject.value)
						|| oCurObject.value > 0))
					logError('Value positive in "' + oCurObject.title + '"',
						'Non-Positive value only');
		
				//check NONNEGATIVE
				if (oCurObject.getAttribute('NonNegative') != null 
					&& oCurObject.value
					&& (isNaN(oCurObject.value)
						|| oCurObject.value < 0))
					logError('Value negative in "' + oCurObject.title + '"',
						'Non-Positive value only');
		
				//make LOWERCASE
				if (oCurObject.getAttribute('LowerCase') != null 
					&& oCurObject.value)
					oCurObject.value = oCurObject.value.toLowerCase();
					
				//make UPPERCASE
				if (oCurObject.getAttribute('UpperCase') != null 
					&& oCurObject.value)
					oCurObject.value = oCurObject.value.toUpperCase();
					
				//check EMAIL
				if (oCurObject.getAttribute('Email') != null 
					&& oCurObject.value
					&& !/^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/.test(oCurObject.value))
					logError('Invalid EMail format "' + oCurObject.title + '"',
						'Format = account@domain.xxx');
							
				//check USDOLLAR
				if (oCurObject.getAttribute('USDollar') != null 
					&& oCurObject.value
					&& !/^\-?\d*\.?\d{0,2}$/.test(oCurObject.value))
					logError('Invalid US Currency format "' + oCurObject.title + '"',
						'Two decimal places for US Currency');
		
				//check USSSN
				if (oCurObject.getAttribute('USSSN') != null 
					&& oCurObject.value
					&& !/^\d{3}\-\d{2}\-\d{4}$/.test(oCurObject.value))
					logError('Invalid US Social Security "' + oCurObject.title + '"',
						'Format = 999-99-9999');
		
				//check USZIP
				if (oCurObject.getAttribute('USZIP') != null 
					&& oCurObject.value
					&& !/^\d{5}(\-\d{4})?$/.test(oCurObject.value))
					logError('Invalid US ZIP code "' + oCurObject.title + '"',
						'Format = 99999  OR 99999-9999');
		
				//check GREATERTHANZERO
				if (oCurObject.getAttribute('GREATERTHANZERO') != null 
					&& oCurObject.value
					&& ((oCurObject.value-0)<0))
					logError('Please enter correct values "' + oCurObject.title + '"',
						'Must be higher than zero');
						
				//check MAXINT
				//check MININT
			}		
		}
	/*	else {
			// check DATE
			if (dateCompare(frmName) && (oOuterObject == 'EndDate'))
				logError('Date "' + oCurObject.title + '"','End date is greater than the start date.')
				}*/
	}
	
	//submit form when there are no errors
	if (!aErr.length)
		df.submit();
	else
		genErrorAlert();
		if (goBack) eval(df.name + "." + goBack.name + ".focus()");
		return false;
}

function ErrEntry(errorText, reasonText)
{
	this.errorText = errorText;
	this.reasonText = reasonText;
}

function logError(errorText, reasonText)
{
	aErr[aErr.length] = new ErrEntry(errorText, reasonText);
}

function genErrorAlert()
{
	var szMessage = 'The page submission contains ' + aErr.length + ' error' + (aErr.length>1 ? 's.' : '.');
	szMessage += "\n ";
	//szMessage += "\n| - - - - - - - - - - Error - - - - - - - - - - - | | - - - - - - - - - - Reason - - - - - - - - - -|";
	szMessage += "\n ";
	for (aCount=0; aCount<aErr.length; aCount++)
	{
		szMessage += ("\n" + aErr[aCount].errorText) + " - ";
		sLen = (35 - aErr[aCount].errorText.length) * 1.75
		for (iLen=0; iLen < sLen; iLen++)
			szMessage += " ";
		szMessage += aErr[aCount].reasonText;
	}
	szMessage += "\n ";
	alert(szMessage);
	
	//Purge the error array
	aErr.length = 0;
}

// Date Validation scripts
// Declaring valid date character, minimum year and maximum year
	var dtCh= "/";
	var minYear=1899;
	var maxYear=2100;
	
function isInteger(s){
		var i;
	    for (i = 0; i < s.length; i++){   
	        // Check that current character is number.
	        var c = s.charAt(i);
	        if (((c < "0") || (c > "9"))) return false;
	    }
	    // All characters are numbers.
	    return true;
	}
	
function stripCharsInBag(s, bag){
		var i;
	    var returnString = "";
	    // Search through string's characters one by one.
	    // If character is not in bag, append to returnString.
	    for (i = 0; i < s.length; i++){   
	        var c = s.charAt(i);
	        if (bag.indexOf(c) == -1) returnString += c;
	    }
	    return returnString;
	}
function daysInFebruary (year){
		// February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}
function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
	   } 
	   return this
	}
function isDate(dtStr)
	{
		var daysInMonth = DaysArray(12)
		var pos1=dtStr.indexOf(dtCh)
		var pos2=dtStr.indexOf(dtCh,pos1+1)
		var strMonth=dtStr.substring(0,pos1)
		var strDay=dtStr.substring(pos1+1,pos2)
		var strYear=dtStr.substring(pos2+1)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) 
			{
				if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
			}
		month=parseInt(strMonth)
		day=parseInt(strDay)
		year=parseInt(strYr)
		if (pos1==-1 || pos2==-1){
			return false
			}
		if (strMonth.length<1 || month<1 || month>12){
			return false
			}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
			return false
			}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			return false
			}
		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
			return false
			}
		return true
	}
