/*
 * Module Name		: maskDate
 * Program Name		: maskDateInput.js
 * Author			: Simbulan, NT
 * Date Created		: 7 March 2004
 * Description		: Filters and Automatically Formats Input as Date (MM/DD/YYYY)
 *					  Improved version of dateMask function found in dateMask.js
 *
 * Date Modified	: December 2005
 */ 

function checkDate(FieldId)
{
	var obj = document.getElementById(FieldId);
	if( obj.value.length == 0 ) {
		alert('Error! Date fields must not be empty.   ');
		return false;
	}
	else if( (obj.value.length < 10) || (obj.value.length > 0 && obj.value.length < 10) ) {
		alert('Error! Invalid search date format or value.   \nUse MM/DD/YYYY format.   ');
		document.getElementById(FieldId).focus();
		return false;
	}
	else {
		var arrDate = document.getElementById(FieldId).value.split("/");
		if( (parseInt(arrDate[0]) == 2) && (parseInt(arrDate[1]) == 28 || parseInt(arrDate[1]) == 29) ) {
			rVal = yearInFebruary(parseInt(arrDate[1]),parseInt(arrDate[2]));
			if( !rVal ) {
				alert('Error! Invalid search date format or value.   \nUse MM/DD/YYYY format.   ');
				document.getElementById(FieldId).focus();
			}
			return rVal;
		}
		else return true;
	}
}

function daysInFebruary(nYear) {
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((nYear % 4 == 0) && ( (!(nYear % 100 == 0)) || (nYear % 400 == 0))) ? 29 : 28 );
}

function yearInFebruary(nDay, nYear) {
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    nMaxDays = ((nYear % 4 == 0) && (!(nYear % 100 == 0) || (nYear % 400 == 0))) ? 29 : 28;
	if( nMaxDays == nDay )
		return true;
	else return false;
}


//***********************************
//Tests if there was a Leap Year Today
//According to the Gregorian calendar,
//which is the civil calendar in use today, 
//years evenly divisible by 4 are leap years, 
//with the exception of centurial years that are not evenly divisible by 400. 
//Therefore, the years 1700, 1800, 1900 
//and 2100 are not leap years, but 1600, 2000,
//and 2400 are leap years.
//*************************************
function isLeapYear(yr)
{
	var temp = parseInt(yr);
	var isCentury = yr.substr(2,2);

	
	if( (temp % 4 == 0) )
	 {
	// Checks if the year entered complies with the Leap Year Rules
		if(isCentury == '00'){
			if(temp % 400 == 0)
				return true;}
		return true;
	 }
		return false;
}

//*****************************************
//Tests if the month ends in 30 days or 31
//*****************************************
function isItThirty(mnth)
{

	if( (mnth == 1) || (mnth == 3) || (mnth == 5) || (mnth == 7) || (mnth == 8) || (mnth == 10) || (mnth == 12) )
	//Checks if The Month Entered has Thirty-One (31) Days
		return true;
	else
		return false;
}
function maskDate(field, e)
{
	//var field = document.getElementById(frmId);
	var d = new Date();
	var nYear = d.getFullYear();
	
	if(e.keyCode)
		var key = e.keyCode;
	else
		var key = e.which;
		
		
		
	if( (key == 9) || (key == 46) ) 
		// if Tab, Backspace & Delete
		return true;
	else if (key == 8)
		{
				if(field.value.substr(field.value.length - 1, 1) == '/')
					{
						field.value = field.value.substr(0, field.value.length - 1);
						return false;
					}
				else
					return true;
		}
	else if( ( key >= 48 && key <= 57 ) || ( (key >= 96) && (key <= 105) ) )
		{
			switch(key)
				{
						case 96  : key = 48; break;
						case 97  : key = 49; break;
						case 98  : key = 50; break;
						case 99  : key = 51; break;
						case 100 : key = 52; break;
						case 101 : key = 53; break;
						case 102 : key = 54; break;
						case 103 : key = 55; break;
						case 104 : key = 56; break;
						case 105 : key = 57; break;
				}
			
			if(field.value.length == 0)
				{
						if(key < 50)
							return true;
						else
							return false;
				}
			else if(field.value.length == 1)
				{
						if(parseInt(field.value) == 0 && key ==48)
							return false;
						else if(parseInt(field.value) == 0 && (key > 48 && key < 58))
							{
								field.value = field.value + String.fromCharCode(key) + "/";
								return false;
							}
						else if(key < 51)
							{
								field.value = field.value + String.fromCharCode(key) + "/";
								return false;
							}
						else
							return false;
				}					
			else if(field.value.length == 3)
				{
						if(parseInt(field.value) == 2 && key == 51)
							return false;
						else if(key < 52)
							return true;
						else
							return false;
				}
			else if(field.value.length == 4)
				{
						if(parseInt(field.value.substr(3,1)) == 0 && key == 48)
							return false;
						else if(parseInt(field.value.substr(0,2)) == 2 && key <= 57)
							{
								field.value = field.value + String.fromCharCode(key) + "/";
								return false;
							}
						else if(parseInt(field.value.substr(3,1)) == 3 && key == 49)
							{
								if(isItThirty(parseInt(field.value.substr(0,2))))
									{
										field.value = field.value + String.fromCharCode(key) + "/";
										return false;
									}
								else return false;
							}
						else
							{
								field.value = field.value + String.fromCharCode(key) + "/";
								return false;
							}
				}
			else if(field.value.length == 6)
				{
					if(key == 48)
						return false;
					return true;
				}
			else if(field.value.length == 7)
			{
					return true;
			}
			else if(field.value.length == 8)
			{
					return true;
			}
			else if(field.value.length == 9)
			{
					var temp = field.value + String.fromCharCode(key);
					var Month = parseInt(temp.substr(0,2));
					var Day = parseInt(temp.substr(3,2));
					var Year = parseInt(temp.substr(6,4));
					
					if( Month == 2 && Day == 29 ){
						if(!isLeapYear(temp.substr(6,4))){
								field.value = "02/28/" + Year;									
								return false;}
					}
					return true;
			}
			else if(field.value.length >= 10)
			{
					return false;
			}
			else if(field.value.length == 2 || field.value.length == 5)
			{
					field.value = field.value + "/" + String.fromCharCode(key);
					return false;
			}
			else
				return false;
			
				
				
		}
	else if( (key == 189) && ( (field.value.length == 2) || (field.value.length == 5) ) )
		return true;
	else
		return false;
}

/*
Original maskdate()

function maskDate(field)
{
	if( (event.keyCode == 8) || (event.keyCode == 9) || (event.keyCode == 46) || (event.keyCode == 37) || (event.keyCode == 39)) 
		// if Tab, Backspace, Delete, Left & Right Arrows
		event.returnValue = true;
	else if( (event.keyCode > 47) && (event.keyCode < 58) )
	// if 0..9 from the Character Pad of the Keyboard
	{
		if( field.value.length == 0 )
		{
			if( event.keyCode < 50 )
				// if 0 or 1
				event.returnValue = true;
			else
			{
				// automatically adds a / after the newly added digit
				field.value = "0" + field.value + String.fromCharCode(event.keyCode) + "/";
				event.returnValue = false;
			}
		}
		else if( field.value.length == 1 )
		{
			if( event.keyCode < 51 )
			{
				// if 0, 1 or 2
				// automatically adds a / after the newly added digit
				field.value = field.value + String.fromCharCode(event.keyCode) + "/";
				event.returnValue = false;
			}
			else
			{
				c1stChar = field.value.substr(0,1);
				if( parseInt(c1stChar) < 1 )
				{
					// if the first digit of the Month is ZERO
					field.value = field.value + String.fromCharCode(event.keyCode) + "/";
					event.returnValue = false;
				}
				else
					// if the first digit of the Month is 3..9
					event.returnValue = false;
			}
		}
		else if( field.value.length == 3 )
		{
			var nMM = parseInt(field.value.substr(0,2));
			if( (nMM < 2) || (nMM > 2) ) {
				if( event.keyCode < 52 ) // if 0, 1, 2 or 3
					event.returnValue = true;
				else // if more than 3
					event.returnValue = false;
			}
			else {
				if( event.keyCode < 51 ) // if 0, 1, 2
					event.returnValue = true;
				else // if more than 2
					event.returnValue = false;
			}
		}
		else if( field.value.length == 4 )
		{
			var nMM = parseInt(field.value.substr(0,2));
			c4thChar = field.value.substr(3,1);
			if( parseInt(c4thChar) < 3 )
			{
				// if the first digit of the DAY is less than 3
				field.value = field.value + String.fromCharCode(event.keyCode) + "/";
				event.returnValue = false;
			}
			else
			{
				// if Month is Jan, Mar, May, Jul, Aug, Oct, or Dec
				if( (nMM == 1 || nMM == 3 || nMM == 5 || nMM == 7 || nMM == 8 || nMM == 10 || nMM == 12) && (event.keyCode < 50) ) {
					// if the Month may have more than 30 days, allow only 0 and 1
					field.value = field.value + String.fromCharCode(event.keyCode) + "/";
					event.returnValue = false;
				}
				else if( event.keyCode == 48 ) {
					// if the Month may not have than 30 days, allow only 0
					field.value = field.value + String.fromCharCode(event.keyCode) + "/";
					event.returnValue = false;
				}
				else event.returnValue = false;
			}
		}
		else if( field.value.length == 9 ) {
			var nMM = parseInt(field.value.substr(0,2));
			var nDD = parseInt(field.value.substr(3,2));
			var nYYYY = parseInt( field.value.substr(6,3) + String.fromCharCode(event.keyCode) );
			if( nDD == 28 || nDD == 29 )
				event.returnValue = yearInFebruary(nDD,nYYYY);
		}
		else if( field.value.length > 4 )
			event.returnValue = true;
		else
			event.returnValue = false;
	}
	// if 0..9 from the Number Pad of the Keyboard
	else if( (event.keyCode > 95) && (event.keyCode < 106) ) 
	{
		if( field.value.length == 0 )
		{
			if( event.keyCode < 98 )
				// if 0 or 1
				event.returnValue = true;
			else
			{
				// automatically adds a / after the newly added digit
				field.value = "0" + field.value + String.fromCharCode(event.keyCode - 48) + "/";
				event.returnValue = false;
			}
		}
		else if( field.value.length == 1 )
		{
			if( event.keyCode < 99 )
			{
				// if 0, 1 or 2
				// automatically adds a / after the newly added digit
				field.value = field.value + String.fromCharCode(event.keyCode - 48) + "/";
				event.returnValue = false;
			}
			else
			{
				c1stChar = field.value.substr(0,1);
				if( parseInt(c1stChar) < 1 )
				{
					// if the first digit of the Month is ZERO
					field.value = field.value + String.fromCharCode(event.keyCode - 48) + "/";
					event.returnValue = false;
				}
				else
					// if the first digit of the Month is 3..9
					event.returnValue = false;
			}
		}
		else if( field.value.length == 3 )
		{
			var nMM = parseInt(field.value.substr(0,2));
			if( (nMM < 2) || (nMM > 2) ) {
				if( event.keyCode < 100 ) // if 0, 1, 2 or 3
					event.returnValue = true;
				else // if more than 3
					event.returnValue = false;
			}
			else {
				if( event.keyCode < 99 ) // if 0, 1, 2
					event.returnValue = true;
				else // if more than 2
					event.returnValue = false;
			}
		}
		else if( field.value.length == 4 )
		{
			var nMM = parseInt(field.value.substr(0,2));
			c4thChar = field.value.substr(3,1);
			if( parseInt(c4thChar) < 3 )
			{
				// if the first digit of the DAY is less than 3
				field.value = field.value + String.fromCharCode(event.keyCode - 48) + "/";
				event.returnValue = false;
			}
			else
			{
				// if Month is Jan, Mar, May, Jul, Aug, Oct, or Dec
				if( (nMM == 1 || nMM == 3 || nMM == 5 || nMM == 7 || nMM == 8 || nMM == 10 || nMM == 12) && (event.keyCode < 98) ) {
					// if the Month may have more than 30 days, allow only 0 and 1
					field.value = field.value + String.fromCharCode(event.keyCode - 48) + "/";
					event.returnValue = false;
				}
				else if( event.keyCode == 96 ) {
					// if the Month may not have than 30 days, allow only 0
					field.value = field.value + String.fromCharCode(event.keyCode - 48) + "/";
					event.returnValue = false;
				}
				else event.returnValue = false;
			}
		}
		else if( field.value.length == 9 ) {
			var nMM = parseInt(field.value.substr(0,2));
			var nDD = parseInt(field.value.substr(3,2));
			var nYYYY = parseInt( field.value.substr(6,3) + String.fromCharCode(event.keyCode - 48) );
			if( nDD == 28 || nDD == 29 )
				event.returnValue = yearInFebruary(nDD,nYYYY);
		}
		else if( field.value.length > 4 )
			event.returnValue = true;
		else
			event.returnValue = false;
	}
	
	else if( event.keyCode == 191 )
	// if Slash (/)
	{
		if( field.value.length > 0 && field.value.length < 3 )
		{
			if( field.value.length == 1 )
				field.value = "0" + field.value;
			event.returnValue = true;
		}
		else if( field.value.length > 3 && field.value.length < 6 )
		{
			if( field.value.length == 4 )
				field.value = field.value.substr(0,3) + "0" + field.value.substr(3,1);
			event.returnValue = true;
		}
		else
			event.returnValue = false;
	}
	else
		event.returnValue = false;
	
}
*/