function validDate(fld) {    var testMo, testDay, testYr, inpMo, inpDay, inpYr, msg    var inp = fld.value    status = ""    // attempt to create date object from input data    var testDate = new Date(inp)    // extract pieces from date object    testMo = testDate.getMonth() + 1    testDay = testDate.getDate()    testYr = testDate.getFullYear()    // extract components of input data    inpMo = parseInt(inp.substring(0, inp.indexOf("/")), 10)    inpDay = parseInt(inp.substring((inp.indexOf("/") + 1), inp.lastIndexOf("/")), 10)    inpYr = parseInt(inp.substring((inp.lastIndexOf("/") + 1), inp.length), 10)    // make sure parseInt() succeeded on input components            if (isNaN(inpMo) || isNaN(inpDay) || isNaN(inpYr)) {        msg = "There is some problem with your date entry."          }    // make sure conversion to date object succeeded    if (isNaN(testMo) || isNaN(testDay) || isNaN(testYr)) {        msg = "Couldn't convert your entry to a valid date. Try again."            }    // make sure values match    if (testMo != inpMo || testDay != inpDay || testYr != inpYr) {        msg = "Check the range of your date value."          }            // convert the text year to a number    var numYear = 0;var inpYrS= new String(inpYr);    for (var x=0; x < inpYrS.length; x++) {        digit = inpYrS.substring(x, x+1);        numYear *= 10;        numYear += parseInt(digit);     }                 // Year must be a 2-digit year or a 4-digit year    if ( (inpYrS.length != 2) && (inpYrS.length != 4) ) {msg = "You have entered an invalid year."   }    // if 2-digit year, use 50 as a pivot date    if ( (numYear < 50) && (inpYrS.length == 2) ) { numYear += 2000; }    if ( (numYear < 100) && (inpYrS.length == 2) ) { numYear += 1900; }    if ((numYear <= 0) || (numYear > 9999)) { msg = "You have entered an invalid year."   }    // check for leap year if the month and day is Feb 29    if ((inpMo== 2) && (inpDay == 29)) {        var div4 = numYear % 4;        var div100 = numYear % 100;        var div400 = numYear % 400;        // if not divisible by 4, then not a leap year so Feb 29 is invalid        if (div4 != 0) {    msg = "You have entered an invalid Date." }        // at this point, year is divisible by 4. So if year is divisible by        // 100 and not 400, then it's not a leap year so Feb 29 is invalid        if ((div100 == 0) && (div400 != 0)) {    msg = "You have entered an invalid Date."   }            }        if (msg) {        // there's a message, so something failed        alert(msg)        // work around IE timing problem with alert by        // invoking a focus/select function through setTimeout();        // must pass along reference of fld (as string)        setTimeout("doSelection(document.forms['" +         fld.form.name + "'].elements['" + fld.name + "'])", 0)        return false    } else {        // everything's OK; if browser supports new date method,        // show just date string in status bar      status = (testDate.toLocaleDateString) ? testDate.toLocaleDateString() :             "Date OK"        return true    }}// separate function to accommodate IE timing problemfunction doSelection(fld) {    fld.focus()    fld.select()}