﻿
//Original:  Mike Welagen (welagenm@hotmail.com)
//This script and many more are available free online at
//The JavaScript Source!! http://javascript.internet.com
//Begin
function chkdate(FormatType,objName) {
    var strDatestyle;
    if (FormatType == 'd/M/yy' || FormatType == 'dd/MM/yy') {
        strDatestyle = "EU";
    }else{
        strDatestyle = "US";
    }
	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 strDatestyle = "US"; //United States date style
	//var strDatestyle = "EU";  //European date style

    //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";
    //02.15.2007 - CDN - Don't find it necessary to allow users to enter text for the months
    //strDate = datefield.value;
    //02.15.2007 - CDN - Changed so we can call any dotnet element by passing the ClientID
    strDate = document.getElementById(datefield).value;
    if (strDate.length < 1) {
        //no date entered
        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);
//       }
         //02.15.2007 - CDN - They are assuming the date is separated by a space.  I don't believe we want to allow that
         //err = 1;
         return false;
    }
    if (strYear.length == 2) {
        //strYear = '20' + strYear;
        //02.15.2007 - CDN - Want to use year 1900 values greater than 40
        if (strYear >=40) {
            strYear = '19' + strYear;
        }else{
            strYear = '20' + strYear;
        }
    }
    // US style
    if (strDatestyle == "US") {
        strTemp = strDay;
        strDay = strMonth;
        strMonth = strTemp;
    }
    intday = parseInt(strDay, 10);
    if (isNaN(intday) || isNaN(strDay)) {
        //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;
//       }
//    }
    //02.15.2007 - CDN - Don't find it necessary to allow users to enter text for the months
    if (isNaN(intMonth) || isNaN(strMonth)) {
        //err = 3;
        return false;
    }
    //}
    intYear = parseInt(strYear, 10);
    if (isNaN(intYear) || isNaN(strYear)) {
        //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;
//    }
    //02.15.2007 - CDN - Don't need to reset the value
    return true;
}
function LeapYear(intYear) {
    if (intYear % 100 == 0) {
        if (intYear % 400 == 0) {
            return true;
        }
    }else{
        if ((intYear % 4) == 0) {
            return true;
        }
    }
    return false;
}
function ModDate(FormatType,strDate) {
    //converts a two digit year to a four digit year date
    //also flips the day and month if dealing with non-US locations
    var ModifiedDate;
    var strDay='';
	var strMonth='';
	var strYear='';
    var strSeparatorArray = new Array("-"," ","/",".");
    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 strDate;
            }else{
            if (FormatType == 'd/M/yy' || FormatType == 'dd/MM/yy') {
                    strDay = strDateArray[0];
                    strMonth = strDateArray[1];
                }else{
                    strDay = strDateArray[1];
                    strMonth = strDateArray[0];
                }
                strYear = strDateArray[2];
            }
       }
    }
     if (strYear.length == 2) {
        if (strYear >=50) {
            strYear = '19' + strYear;
        }else{
            strYear = '20' + strYear;
        }
    }
    ModifiedDate = strMonth + '/' + strDay + '/' + strYear;
    return ModifiedDate;
}
function CheckDateRange(FormatType,MinDate,MaxDate,DateObject) {
    if (chkdate(FormatType,DateObject)) {
        if (Date.parse(ModDate(FormatType,document.getElementById(DateObject).value)) < Date.parse(MinDate)) {
            return false;
        }else if (Date.parse(ModDate(FormatType,document.getElementById(DateObject).value)) > Date.parse(MaxDate)) {
            return false;
        }else{
            return true;
        }
    }else{
        return false;
    }
}
//  End