// Check date to Correct
function isDate(value)
{
	var inputStr = value;
	
	var re = new RegExp("[.-]","g");
	inputStr = inputStr.replace(re,"/");
	var delim1 = inputStr.indexOf("/");
	var delim2 = inputStr.lastIndexOf("/");
	
	if (delim1 != -1 && delim1 == delim2) 
	{
		return '';
	}
	
	// date format is U.S. standart 'mm/dd/yyyy'
	if (delim1 != -1)
	{
		var mm = parseInt(inputStr.substring(0,delim1),10);
		var dd = parseInt(inputStr.substring(delim1 + 1,delim2),10);
		var yyyy = parseInt(inputStr.substring(delim2 + 1,inputStr.length),10);
	}
	else
	{
		var mm = parseInt(inputStr.substring(0,2),10);
		var dd = parseInt(inputStr.substring(2,4),10);
		var yyyy = parseInt(inputStr.substring(4,inputStr.length),10);
	}
	
	if (isNaN(mm) || isNaN(dd) || isNaN(yyyy))
	{
		return '';
	}
	
	if (mm < 1 || mm > 12)
	{
		return '';
	}
	
	if (dd < 1 || dd > 31)
	{
		return '';
	}
	
	if (yyyy < 100)
	{
			yyyy += 2000;
	}
	
	if (!checkMonthLength(mm,dd))
	{
		return '';
	}
	if (mm == 2)
	{
		if (!checkLeapMonth(dd,yyyy))
		{
			return '';
		}
	}
	return (mm<10?"0":"")+mm.toString(10)+'/' +(dd<10?"0":"")+dd.toString(10)+'/'+yyyy.toString(10);
}

function checkMonthLength(mm,dd)
{
	if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30)
	{
		return false;
	}
	else if (dd > 31)
	{
		return false;
	}
	return true;
}


function checkLeapMonth(dd,yyyy)
{
	var leap = (yyyy % 400 == 0) || ((yyyy % 100 > 0) && (yyyy % 4 == 0));
	if (!leap && dd > 28)
	{
		return false;
	}
	else if (dd > 29)
	{
		return false;
	}
	return true;
}

function AddDay(control, days)
{ 
    var daycount = parseInt(days)*86400000;
    var date = new Date(Date.parse(control.value)+ daycount);                        
    
    // Need to FireFox
    Year = date.getYear() % 100;
    Year = ((Year < 50) ? (2000 + Year) : (1900 + Year));
    
    control.value =  isDate(parseInt(date.getMonth()+1)+"/"+date.getDate()+"/"+Year); 
    control.focus();
    return false;
}          

function setCorrectedDate(field) {
    field.value = getCorrectedDate(field.value);
}

function getCorrectedDate(rawValue) {

    var parts = rawValue.split('/');
    
    var day;
    var month;
    var year;
    
    var currentDate = new Date()
    
    // year
    if (parts.length < 3 || parts[2] == '') {
        year = currentDate.getFullYear();
    }
    else {
        year = Number(parts[2]);
        if (year < 100) {
            year = year + 2000;
        }
        if (year < 1000) {
            year = year + 1000;
        }
    }
    
    // month
    if (parts.length < 2 || parts[0] == '') {
        month = currentDate.getMonth() + 1;
    }
    else {
        month = Number(parts[0]);
        if (month == 0 || month > 12) {
            month = currentDate.getMonth() + 1;
        }
    }
    month = String(month);
    if (month.length == 1) {
        month = '0' + month;
    }
    
    // day
    var partNumber = (parts.length == 1)? 0 : 1;
    day = Number(parts[partNumber]);
    if (day == 0) {
        day = currentDate.getDate();
    }
    else if (day > getMaxDayValue(month, year)) {
        day = getMaxDayValue(month, year);
    }
    day = String(day);
    if (day.length == 1) {
        day = '0' + day;
    }    
    return month + '/' + day + '/' + year;
}

function getMaxDayValue(month, year) {
    switch(month) {
        case '01':
        case '03':
        case '05':
        case '07':
        case '08':
        case '10':
        case '12':
            return 31;
        case '04':
        case '06':
        case '09':
        case '11':
            return 30;
        case '02':
            year = Number(year);
            var isLeapYear = (year % 4 == 0);
            return (isLeapYear ? 29 : 28);
    }
}

function validateDate(evt, field) {
    evt = (evt) ? evt : ((window.event) ? event : null);
    var valCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
    var fVal = field.value;
    var vLength = fVal.length;
    var parts = fVal.split('/');
    var charIsNumber = (valCode >= 48 && valCode <= 57);
    var charIsSlash = (valCode == 47);
    var charIsNumberOrSlash = (charIsNumber || charIsSlash);
    var charIsNotLetter = !(valCode >= 97 && valCode <= 122) && !(valCode >= 65 && valCode <= 90);
    
    var res;
    if (vLength == 0 || fVal.substr(vLength-1, 1) == '/') {
        res = charIsNumber;
    }
    else if (parts.length == 1) {
        var month = parts[0];
        res = (month.length <= 2 && charIsNumberOrSlash);
    }
    else if (parts.length == 2) {
        var month = parts[0];
        var day = parts[1];
        res = (month.length <= 2 && day.length <= 2 && charIsNumberOrSlash);
    }
    else if (parts.length >= 3) {
        var year = parts[2];
        res = (charIsNumber && year.length <= 4);
    }
    else {
        res = (charIsSlash || charIsNumber);
    }
    return (charIsNotLetter || res);
}

function correctDateValue(evt, field) {
    evt = (evt) ? evt : ((window.event) ? event : null);
    var valCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
    var charIsNumber = (valCode >= 48 && valCode <= 57);
    var charIsSlash = (valCode == 47);
    var charIsNumberOrSlash = (charIsNumber || charIsSlash);
    
    if (!charIsNumberOrSlash) {
        return;
    }

    var fVal = field.value;
    var parts = fVal.split('/');
    var res = '';
    if (parts.length >= 1) {
        res += parts[0].substr(0,2);
    }
    if (parts.length >= 2) {
        res += '/' + parts[1].substr(0,2);
    }
    if (parts.length >= 3) {
        res += '/' + parts[2].substr(0,4);
    }
    field.value = res;
}
