   <!-- Begin

    var DATE_SEPERATOR_LIST = new Array("-", " ", "/", ".");



    /**
     * check if the input date user inputs is valid format and a valid date.
     */
    function chkdate(objName) {
        var strDate;
        var strDateArray;
        var strDay;
        var strMonth;

        var strYear;
        var intday;
        var intMonth;
        var intYear;
        var booFound = false;
        var datefield = objName;
      
        var intElementNr;
        var err = 0;
        var strMonthArray = new Array(12);

        strMonthArray[0] = "01";
        strMonthArray[1] = "02";
        strMonthArray[2] = "03";
        strMonthArray[3] = "04";
        strMonthArray[4] = "05";
        strMonthArray[5] = "06";
        strMonthArray[6] = "07";
        strMonthArray[7] = "08";
        strMonthArray[8] = "09";
        strMonthArray[9] = "10";
        strMonthArray[10] = "11";
        strMonthArray[11] = "12";
        strDate = trim(datefield.value);

        if (strDate.length < 1) {
            return true;
        }


        //check for valid characters
        var strValidChars = "0123456789.-/ ";
        for (iValid = 0; iValid < strDate.length; iValid++) {
            var strChar = strDate.charAt(iValid);
            if (strValidChars.indexOf(strChar) == -1) {
                return false;
            }
        }

        //alert(strDate);
        for (intElementNr = 0; intElementNr < DATE_SEPERATOR_LIST.length; intElementNr++) {
            if (strDate.indexOf(DATE_SEPERATOR_LIST[intElementNr]) != -1) {
                strDateArray = strDate.split(DATE_SEPERATOR_LIST[intElementNr]);
                if (strDateArray.length != 3) {
                    err = 1;
                    return false;

                } else {
                    //INPUT_DATE_FORMAT is a global variable
                    var dayIdx = getDayIndex(INPUT_DATE_FORMAT);
                    var monIdx = getMonIndex(INPUT_DATE_FORMAT);
                    var yearIdx = getYearIndex(INPUT_DATE_FORMAT);
                    strDay = strDateArray[dayIdx];
                    strMonth = strDateArray[monIdx];
                    strYear = strDateArray[yearIdx];
                }
                booFound = true;
            }
        }

        //alert(" strDay: " + strDay + " strMonth: " + strMonth + " strYear: " + strYear );
        if (booFound == false) {
            return false;
        }

        if (strYear.length < 2) {
            return false;
        }

        if (strYear.length == 2) {
            strYear = "20" + strYear;
        }

        intday = parseInt(strDay, 10);
        if (isNaN(intday)) {
            err = 2;
            //alert("wrong day");
            return false;
        }
        intMonth = parseInt(strMonth, 10);
        //alert("intMonth: " + intMonth);
        if (isNaN(intMonth)) {
            for (i = 0; i < 12; i++) {
                if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
                    intMonth = i + 1;
                    strMonth = strMonthArray[i];
                    i = 12;
                }

            }
            if (isNaN(intMonth)) {
                err = 3;
                return false;

            }

        }
        intYear = parseInt(strYear, 10);
        //alert("intYear: " + intYear);
        if (isNaN(intYear)) {
            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;
                }
            }
        }

        datefield.value = getFormattedDateStr(strYear, strMonth, strDay);

        return true;
    }

    function LeapYear(intYear) {
        if (intYear % 100 == 0) {
            if (intYear % 400 == 0) {
                return true;
            }
        } else {
            if ((intYear % 4) == 0) {
                return true;
            }
        }
        return false;
    }


    /**
     * get the first index of "Y" that defines the format of the year in the given date format.
     */
    function getYearIndex(dateFormat) {
        dateFormat = dateFormat.toUpperCase();
        var yearIdx = dateFormat.indexOf("Y");
        var monIdx = dateFormat.indexOf("M");
        var dayIdx = dateFormat.indexOf("D");

        if (yearIdx < monIdx && yearIdx < dayIdx) {
            return 0;
        }else if (yearIdx > monIdx && yearIdx > dayIdx) {
            return 2;
        }else {
            return 1;
        }
    }


    /**
     * get the first index of "M" that defines the format of the month in the given date format.
     */
    function getMonIndex(dateFormat) {
        dateFormat = dateFormat.toUpperCase();
        var yearIdx = dateFormat.indexOf("Y");
        var monIdx = dateFormat.indexOf("M");
        var dayIdx = dateFormat.indexOf("D");

        if (monIdx < yearIdx && monIdx < dayIdx) {
            return 0;
        }else if (monIdx > yearIdx && monIdx > dayIdx) {
            return 2;
        }else {
            return 1;
        }
    }


    /**
     * get the first index of "D" that defines the format of the day in the given date format.
     */
    function getDayIndex(dateFormat) {
        dateFormat = dateFormat.toUpperCase();
        var yearIdx = dateFormat.indexOf("Y");
        var monIdx = dateFormat.indexOf("M");
        var dayIdx = dateFormat.indexOf("D");

        if (dayIdx < yearIdx && dayIdx < monIdx) {
            return 0;
        }else if (dayIdx > yearIdx && dayIdx > monIdx) {
            return 2;
        }else {
            return 1;
        }
    }


    /**
     *  change the date str in the formatted defined by INPUT_DATE_FORMAT for the given date information.
     */
    function getFormattedDateStr(strYear, strMon, strDay) {
        var dateStr = INPUT_DATE_FORMAT;
        if (INPUT_DATE_FORMAT.indexOf("YYYY") >= 0) {
            dateStr = dateStr.replace("YYYY", strYear);
        }else if (INPUT_DATE_FORMAT.indexOf("YY") >= 0) {
            dateStr = dateStr.replace("YY", strYear);
        }

        if (INPUT_DATE_FORMAT.indexOf("MM") >= 0) {
            dateStr = dateStr.replace("MM", strMon);
        }else if (INPUT_DATE_FORMAT.indexOf("M") >= 0) {
            dateStr = dateStr.replace("M", strMon);
        }

        if (INPUT_DATE_FORMAT.indexOf("DD") >= 0) {
            dateStr = dateStr.replace("DD", strDay);
        }else if (INPUT_DATE_FORMAT.indexOf("M") >= 0) {
            dateStr = dateStr.replace("D", strDay);
        }

        return dateStr;
    }


   /* get the date string in the format that new Date() will accept. Right now only
    * use "/" as the date separator for new Date(). Replace any other separator with "/".
    * for Instance "2008-2-8" will become "2008/2/8" after the replacement.
    */
    function getDateStr(inputStr) {
        if (inputStr == null) return;
        var separatorChar = getDateSeparator();
        var newDateSeparator = "/";

        switch (separatorChar) {
            case "/":
                return inputStr;
            case "-":
                return inputStr.replace(/-/g, newDateSeparator);
            case " ":
                return inputStr.replace(/ /g, newDateSeparator);
            case ".":
                return inputStr.replace(/./g, newDateSeparator);
        }


        return inputStr;
    }


    /**
     * get the date separator of INPUT_DATE_FORMAT.
     */
    function getDateSeparator() {
        for (index = 0; index < DATE_SEPERATOR_LIST.length; index ++) {
            var strChar = DATE_SEPERATOR_LIST[index];
            if (INPUT_DATE_FORMAT.indexOf(strChar) >= 0) {
                return strChar;
            }
        }

        //this should never happen
        return "/";
    }

//  End -->