var currentYear=new Date().getFullYear();
var min_year = currentYear - 5; // defines lowest year in year menu
var max_year = currentYear + 5; // defines highest year in the year menu

// make this false to prevent the weekday element from being displayed
var weekday_showing = false;

// make this true to make dayofweek return a number (0-6)
var dayofweek_returned_as_number = false;

// make this true to make month return a number (0-11)
var month_returned_as_number = true;

if (min_year <= 400)
    alert("The year must be greater then 1800");

// The following code adds three methods to the built-in Date object
function _strMonth() {
    var months = new Array("January", "February", "March", "April",
       "May", "June", "July", "August", "September", "October",
       "November", "December");
    return months[this.getMonth()];
}

function _strDay() {
    var days= new Array("Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday");
return days[this.getDay()];
}

function _weekOf() {
    sunday = ((arguments[0]==null) || (!arguments[0])); // Check for optional argument
return (new Date(this - ((this.getDay() - ((sunday) ? 0 : 1)) *24*60*60*1000)));
}

// Add these methods to all dates
Date.prototype.weekOf = _weekOf;
Date.prototype.strMonth = _strMonth;
Date.prototype.strDay = _strDay;

function getDate(dateField,includeTime){

    var dateString ="";
    var timeString = "";
    var dateTime=dateField.value;
    var timeExists=dateTime.indexOf(" ")
    if(timeExists != -1){
        dateString=dateTime.substring(0,dateTime.indexOf(" "));
    } else {
        dateString=dateTime;
    }

    var month=dateString.substring(0,dateString.indexOf("/")) - 1;
    var newDateString=dateString.substring(dateString.indexOf("/") + 1);
    var day=newDateString.substring(0,newDateString.indexOf("/"));
    var year=newDateString.substring(newDateString.indexOf("/") + 1);

    var hours=0;
    var minutes=0;
    
    if(includeTime != 0 && timeExists != -1){
        timeString=dateTime.substring(dateTime.indexOf(" ")+1); 
        hours=timeString.substring(0,timeString.indexOf(":"));
        minutes=timeString.substring(timeString.indexOf(":")+1);
    }
    
    var date=new Date(year,month,day,hours,minutes,0);
    
    //alert(date);
    return date;
}

function dateCompare(date1,date2,includeTime){

    var firstDate=getDate(date1,includeTime);
    var secondDate=getDate(date2,includeTime);
        
    //alert(firstDate - secondDate);
    return (firstDate - secondDate);    

}

function dateValidate(date_form,aname,showTime,toBeEntered) {

    MonthCtrl = eval("date_form." + aname +"month");
    DayCtrl = eval("date_form." + aname +"day");
    YearCtrl = eval("date_form." + aname +"year");

    // ***** BO Added by Rohit *****

    if(showTime == 1){
        timeCtrl=eval("date_form." + aname +"time");
    }

    mth = eval(MonthCtrl.selectedIndex);

    yr = eval(YearCtrl.options[YearCtrl.selectedIndex].text);
    day=eval(DayCtrl.options[DayCtrl.selectedIndex].text);

    if(toBeEntered){

        if(!day){
            alert("Please select a day");
            DayCtrl.focus();
            return -1;
        } else if(!mth){
            alert("Please select a month");
            MonthCtrl.focus();
            return -1;
        } else if(!yr){
            alert("Please select a year");
            YearCtrl.focus();
            return -1;
        }

        if(showTime){

            if(!timeCtrl.value) {
                return;
            }
        }
    }

    return;
}

// ******* Added by Jinto ********
function dateValidate2(date_form,aname) {

    MonthCtrl = eval("date_form." + aname +"month");
    DayCtrl = eval("date_form." + aname +"day");
    YearCtrl = eval("date_form." + aname +"year");

    mth = eval(MonthCtrl.selectedIndex);
    yr = eval(YearCtrl.options[YearCtrl.selectedIndex].text);
    day = eval(DayCtrl.options[DayCtrl.selectedIndex].text);

    if (!day || !mth || !yr)
        return -1;
    else
        return 0;
}


function changeDays(numb,date_form,aname,showTime) {

    MonthCtrl = eval("date_form." + aname +"month");
    DayCtrl = eval("date_form." + aname +"day");
    YearCtrl = eval("date_form." + aname +"year");

    // ***** BO Added by Rohit *****

    if(showTime == 1){
        timeCtrl=eval("date_form." + aname +"time");

        if(timeCtrl.value.length > 0 && timeCtrl.value.length < 4){
            alert("Please enter the time in 'HHMM' format");
            timeCtrl.focus();
            return;
        }
    }

    // ***** EO Added by Rohit *****

    mth = eval(MonthCtrl.selectedIndex);
    sel = eval(YearCtrl.selectedIndex);
    yr = eval(YearCtrl.options[sel].text);
    day=eval(DayCtrl.options[DayCtrl.selectedIndex].text);

    if (numb != 1) {
        numDays = numDaysIn(mth-1,yr);
        eval("date_form." + aname +"day.options.length="+(numDays+1)) ;
        for (i=1;i<=numDays;i++) {
            j=i;
            eval("date_form." + aname +"day.options["+i+"].text = "+j);
        }
    }


    // ***** BO Added by Rohit *****

        hdnCtrl=eval("date_form." + aname);

        dateSelected=true;
        if(!day || !mth || !yr) dateSelected=false;


        if (!dateSelected) {
            hdnCtrl.value="";
        } else if(showTime == 1) {

            timeSelected=true;
            if(!timeCtrl.value) timeSelected=false;

            if(timeSelected){
                hours=(timeCtrl.value?timeCtrl.value.substring(0,2):"");
                //alert("Hours = " + hours);

                minutes=(timeCtrl.value?timeCtrl.value.substring(2,4):"");
                //alert("Minutes = " + minutes);

                if(hours < 0 || hours > 23){
                    alert("The hours entered should be between 0 and 23");
                    timeCtrl.focus();
                    return;
                }


                if(minutes < 0 || minutes > 59){
                    alert("The minutes entered should be between 00 and 59");
                    timeCtrl.focus();
                    return;
                }

                hdnCtrl.value=mth + "/" + DayCtrl.selectedIndex + "/" + yr + " " + hours + ":" + minutes;
            } else {
                hdnCtrl.value=mth + "/" + DayCtrl.selectedIndex + "/" + yr + " 00:00";
            }

        } else {
            hdnCtrl.value=mth + "/" + DayCtrl.selectedIndex + "/" + yr;
        }

        // alert("Value = " + hdnCtrl.value);
        //alert(eval("date_form." + aname + ".value"));

    // ***** EO Added by Rohit *****
}

function numDaysIn(mth,yr) {
    if ((mth==3 || mth==5 || mth==8 || mth==10)) return 30;
    else if ((mth==1) && leapYear(yr)) return 29;
    else if (mth==1) return 28;
    else return 31;
}

function leapYear(yr) {

    div4=yr % 4;
    div100=yr % 100;
    div400=yr % 400;

    // alert("year = " + yr + "and Div4 = " + div4);

    if ( ((!div4) && (div100)) || !div400 ){
        //alert("Leap Year!");
        return true;
    } else {
        //alert("Not Leap Year!");
        return false;
    }
}

function arr() {
    this.length=arr.arguments.length;
    for (n=0;n<arr.arguments.length;n++) {
        this[n] = arr.arguments[n];
    }
}

weekdays = new arr("Sun","Mon","Tue","Wed", "Thu","Fri","Sat");

months = new arr("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

var cur = new Date();

function getWeekDay(mth,day,yr) {
    first_day = firstDayOfYear(yr);
    for (num=0;num<mth;num++) {
        first_day += numDaysIn(num,yr);
    }
    first_day += day-1;
return first_day%7;
}

function firstDayOfYear(yr) {
    diff = yr - 401;
    return parseInt((1 + diff + (diff / 4) - (diff / 100) + (diff / 400)) % 7);
}

// fixes a Netscape 2 and 3 bug
function getFullYear(d) { // d is a date object
    yr = d.getYear();
    if (yr < 1000)
        yr+=1900;
    return yr;
}

function initialize(startYear,endYear){
    if(startYear == 0 && endYear == 0){
        // Use Defaults
    } else if(startYear !=0 && endYear != 0){
        min_year=startYear;
        max_year=endYear;
    } else if(startYear == 0) {
        min_year=currentYear;
        max_year=endYear;
    } else if(endYear == 0) {
        min_year=startYear;
        max_year=currentYear;
    }
}


function datedrop(myname,feeddate,showTime){

    blank=" ";
    hours="";
    minutes="";

    //alert(feeddate);

    if(!feeddate)
    {
//      d=new Date();
//      edmonth=d.getMonth();
//      edday=d.getDate();
//      edyear=d.getFullYear();

        edmonth=-1; // Dont put " " as it is equal to 0 int!!!
        edday=blank;
        edyear=-1;
        edtime="";
    }
    else
    {
        dateTime=feeddate;
        //alert("DateTime = " + dateTime);

        if(showTime == 1){
            specifiedDate=feeddate.substring(0,feeddate.indexOf(" "));
            timeOnly=feeddate.substring(feeddate.indexOf(" ")+1);
            //alert("Time Only = " + timeOnly);
            hours=timeOnly.substring(0,timeOnly.indexOf(":"));
            if(hours < 10 && hours.length == 1) hours = "0" + hours;
            //alert("Hours = " + hours);

            //alert("Hours = " + hours);

            minutes=timeOnly.substring(timeOnly.indexOf(":")+1);

            edtime=hours+""+minutes;

            //alert("Minutes = " + minutes);
        }else{
            specifiedDate=feeddate;
        }

        d=new Date(specifiedDate)
        edmonth=d.getMonth();
        edday=d.getDate();
        edyear=d.getFullYear();

    }

    // write day element
    document.write("<select name="+myname+"day size=1 onChange='changeDays(0,this.form,"+'"'+myname+'",'+ showTime + ")'>\n");

    // ***** BO Added by Rohit *****

    document.write("<option"+(edday==blank?" selected":"")+"> \n");

    // ***** EO Added by Rohit *****

    for (i=1;i<=numDaysIn(edmonth,edyear);i++)
     document.write("<option"+(edday==i?" selected":"")+">"+i+"\n");

    // write month element

    document.write("</select>&nbsp;<select name="+myname+"month size=1 onChange='changeDays(0,this.form,"+'"'+myname+'",'+ showTime + ")'>\n");

    // ***** BO Added by Rohit *****

    document.write("<option"+(edmonth==-1?" selected":"")+">\n");

    // ***** EO Added by Rohit *****

    // alert("edmonth    = " + edmonth);

    for (i=1;i<13;i++)
     document.write("<option" + (month_returned_as_number?" value="+i:"") + (edmonth==(i-1)?" selected":"")+">"+months[i-1]+"\n");

    // ***** BO commented and copied by Rohit *****
    //  +(edmonth==i-1?" selected":"")+">"+months[i-1]+"\n");
    // ***** EO commented and copied by Rohit *****

    // write year element
    document.write("</select>&nbsp;<select name="+myname+"year size=1 onChange='changeDays(0,this.form,"+'"'+myname+'",'+ showTime + ")'>\n");

    // ***** BO Added by Rohit *****

    document.write("<option"+(edyear==-1?" selected":"")+"> \n");

    // ***** EO Added by Rohit *****

    if(min_year < max_year){
        for (i=min_year;i<=max_year;i++)
         document.write("<option"+(edyear==i?" selected":"")+">"+i+"\n");
    } else {
        for (i=min_year;i>=max_year;i--)
         document.write("<option"+(edyear==i?" selected":"")+">"+i+"\n");
    }
    
    document.write("</select>&nbsp;");

    // ***** BO Added by Rohit *****

    if(showTime == 1){
        document.write("<input type=text name=" + myname + "time value='" + edtime + "' size='4' maxlength='4' class='formfld' onBlur='changeDays(0,this.form,"+'"'+myname+'",'+ showTime + ")'>&nbsp;<font size=1>hhmm</font>\n");
    }

    // Determine initial value of hidden field

    if(feeddate){
        if(showTime == 1){
            value=(edmonth+1) + "/" + edday + "/" + edyear + " " + hours + ":" + minutes;
        } else {
            value=(edmonth+1) + "/" + edday + "/" + edyear;
        }
    } else {
        value="";
    }

    document.write("\n<input type=hidden name=" + myname + " value='" + value + "'>\n");

    // alert("Initial Value = " + value);

    // ***** EO Added by Rohit *****

}
