function daysInFebruary (year){
    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
}

var dtCh= "/";
var minYear=1900;
var maxYear=9999; 


function afterToday(dayField, monthField, yearField, msg)
{
    var bReturn = afterTodayNoMsg(dayField, monthField, yearField);

    if (!bReturn)
    {
        alert(msg);
        dayField.focus();
    }

    return bReturn;
}

function afterTodayNoMsg(dayField, monthField, yearField)

{
    var bReturn = true;
    var today = new Date();
    var date = new Date(yearField.value, monthField.value-1, dayField.value);
    if (date > today)
    {
        bReturn = false;
    }
    return bReturn;
}

function isValidDateAndBeforeToday(sDate)
{
 var bValid = false;
 var sDateValue = sDate.value;

 if (isValidDateFormat(sDateValue))
 {
     sDay = sDateValue.substring(0, 2);
     sMonth = sDateValue.substring(3, 5);
     sYear = sDateValue.substr(6);

     var formDate = new Date(sYear, sMonth - 1, sDay)
     var todaysDate = new Date()

     if (todaysDate > formDate)
     {
         bValid = true;
     }
 }

return bValid;
} 

function isValidDateAndAfterToday(sDate, bEqual)
{
 var bValid = false;
 var sDateValue = sDate.value;

 if (isValidDateFormat(sDateValue))
 {
     // Read in a date with a DD/MM/YYYY format.
     sDay = sDateValue.substring(0, 2);
     sMonth = sDateValue.substring(3, 5);
     sYear = sDateValue.substr(6);

     var formDate = new Date(sYear, sMonth - 1, sDay)
     var todaysDate = new Date()

     todaysDate.setHours(0)
     todaysDate.setMinutes(0)
     todaysDate.setSeconds(0)
     todaysDate.setMilliseconds(0)


     if ((bEqual && (formDate >= todaysDate)) || (!bEqual && (formDate > todaysDate)))
     {
         bValid = true;
     }
 }

 return bValid;
} 

function dhaIsValidDateAfterToday(sDate)
{
	var bValid = false;
	var sDateValue = sDate.value;
	
	if(isValidDate(sDateValue))
	{
		var todaysDate = new Date()
		
		todaysDate.setHours(0)
		todaysDate.setMinutes(0)
		todaysDate.setSeconds(0)
		todaysDate.setMilliseconds(0)
		
		var sTodaysDate = todaysDate.getDate() 
					+ "/" + (todaysDate.getMonth() + 1)
					+ "/" + todaysDate.getFullYear();
					
		// alert("sTodaysDate = " + sTodaysDate);
		
		// Check entered date vs todays
		bValid = dateCompare(sTodaysDate, sDateValue);
	}
	
	return bValid;
}

function isValidDateFormat(sDate)
{
    var objRegExp = /^\d{1,2}(\/)\d{1,2}\1\d{4}$/;

    return objRegExp.test(sDate);
} 

function isValidDate(dtStr)
{
    bReturn = true;

    var daysInMonth = DaysArray(12);
    var pos1=dtStr.indexOf(dtCh);
    var pos2=dtStr.indexOf(dtCh,pos1+1);
    var strDay=dtStr.substring(0,pos1);
    var strMonth=dtStr.substring(pos1+1,pos2);
    var strYear=dtStr.substring(pos2+1);
    strYr=strYear;
    var today = new Date();
    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){
        bReturn =  false;
    }
    else if (strMonth.length<1 || month<1 || month>12){
        bReturn =  false;
    }
    else if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
        bReturn =  false;
    }
    else if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
        bReturn =  false;
    }
    else if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInt(stripCharsInBag(dtStr, dtCh))==false){

        bReturn =  false;
    }

    return bReturn;
}

function dateCompare(sDate1, sDate2)
{
    var daysInMonth = DaysArray(12);
    bReturn = true;

    var pos1=sDate1.indexOf(dtCh);
    var pos2=sDate1.indexOf(dtCh,pos1+1);
    var strDay1=sDate1.substring(0,pos1);
    var strMonth1=sDate1.substring(pos1+1,pos2);
    var strYear1=sDate1.substring(pos2+1);
    strYr1=strYear1;

    if (strDay1.charAt(0)=="0" && strDay1.length>1) strDay1=strDay1.substring(1)
    if (strMonth1.charAt(0)=="0" && strMonth1.length>1) strMonth1=strMonth1.substring(1)
    for (var i = 1; i <= 3; i++) {
        if (strYr1.charAt(0)=="0" && strYr1.length>1) strYr1=strYr1.substring(1);
    }
    month1=parseInt(strMonth1);
    day1=parseInt(strDay1);
    year1=parseInt(strYr1);

    pos1=sDate2.indexOf(dtCh);
    pos2=sDate2.indexOf(dtCh,pos1+1);
    var strDay2=sDate2.substring(0,pos1);
    var strMonth2=sDate2.substring(pos1+1,pos2);
    var strYear2=sDate2.substring(pos2+1);
    strYr2=strYear2;

    if (strDay2.charAt(0)=="0" && strDay2.length>1) strDay2=strDay2.substring(1)
    if (strMonth2.charAt(0)=="0" && strMonth2.length>1) strMonth2=strMonth2.substring(1)
    for (var i = 1; i <= 3; i++) {
        if (strYr2.charAt(0)=="0" && strYr2.length>1) strYr2=strYr2.substring(1);
    }
    month2=parseInt(strMonth2);
    day2=parseInt(strDay2);
    year2=parseInt(strYr2);

    var dteDate1 = new Date(year1, month1-1, day1);
    var dteDate2 = new Date(year2, month2-1, day2);

    if(dteDate1 > dteDate2)
    {
        //alert("dateCompare: DATE1 > DATE2");
        bReturn = false;
    }

    return bReturn;
}


