  
     function formatDate(someDate) {
            
            if (someDate.length <  6) return false;
            if (someDate.length > 10) return false;

            
            if (someDate.indexOf('/') >= 0) {
                    
                    var chunks = someDate.split('/');
                    if (chunks.length != 3) return false; 
                    if (chunks[0].length == 0 || chunks[1].length == 0 || chunks[2].length == 0) return false; 
                    var day   = parseInt(chunks[1], 10);
                    var month = parseInt(chunks[0], 10);
                    var year  = parseInt(chunks[2], 10);
            } else if (someDate.indexOf('-') >= 0) {
                    
                    var chunks = someDate.split('-');
                    if (chunks.length != 3) return false; 
                    if (chunks[0].length == 0 || chunks[1].length == 0 || chunks[2].length == 0) return false; 
                    var day   = parseInt(chunks[2], 10);
                    var month = parseInt(chunks[1], 10);
                    var year  = parseInt(chunks[0], 10);
            } else if (someDate.indexOf('.') >= 0) {
                    
                    var chunks = someDate.split('.');
                    if (chunks.length != 3) return false; 
                    if (chunks[0].length == 0 || chunks[1].length == 0 || chunks[2].length == 0) return false; 
                    var day   = parseInt(chunks[0], 10);
                    var month = parseInt(chunks[1], 10);
                    var year  = parseInt(chunks[2], 10);
            } else {
                    
                    return false;
            }

            
            if (year < 100) {
                    if (year < 30) {
                            year += 2000;
                    } else {
                            year += 1900;
                    }
            }

            
            if (! isValidDate(year, month, day)) return false;

            
            var ret = '';

            if (month < 10) ret += '0';
            ret += month + '/';
            if (day < 10) ret += '0';
            ret += day + '/';
            ret += year;
            return ret;
    }

    
    function fixYear(year) {
            if (year < 100) {
                    year = parseInt('19' + year, 10);
            } else if ((year >= 100) && (year < 110)) {
                    year = parseInt(200 + '' + year.toString().substr(2, 1), 10);
            }
            return year;
    }
	
    
    function isValidDate(year, month, day)
    {
            
            if (year >= 1970) {
                    
                    var tDate = new Date(year, month -1, day);
                    if (day   != tDate.getDate())               return false;
                    if (month != (tDate.getMonth() +1))         return false;
                    if (year  != fixYear(tDate.getYear())) return false;
            } else {
                    
                    if ((day   < 1)    || (day   > 31))   return false;
                    if ((month < 1)    || (month > 12))   return false;
                    if ((year  < 1000) || (year  > 3000)) return false;
            }
            
            
            if (day > 28) {
                    if (getNumberOfDays(year, month) < day) return false;
            }
            return true;
    }

    
    function getNumberOfDays(year, month) {
            switch (month) {
                    case 2:
                            if (isLeapYear(year)) return 29;
                            return 28;
                            break;
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                            return 31;
                            break;
                    default:
                            return 30;
            }
    }

    
    function isLeapYear(year) {
            return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
    }

    
    function validDate(dateInput)
    {
        
        if (dateInput.value.length == 0) return true;

        if (! formatDate(dateInput.value)) {
            alert('Please enter a valid date. (MM/DD/YYYY format)');
            dateInput.focus();
            dateInput.select();
            return false;
        }
        var dateStr = formatDate(dateInput.value);

        
        dateInput.value = dateStr;
        return true;
    }

    
    function parseDate(date_string)
    {
        var parts = date_string.split("/");
        var month = parseInt(zeroUnpad(parts[0]));
        var date  = parseInt(zeroUnpad(parts[1]));
        var year  = parseInt(zeroUnpad(parts[2]));
        var dateobj = new Date(year, month-1, date);
        return dateobj;
    }

    function zeroPad(numstring)
    {
        if (numstring.length == 1) {
            return "0" + numstring;
        }
        return numstring;
    }

    function zeroUnpad(numstring)
    {
        numstring = '' + numstring;
        if (numstring.match(/^0/)) {
            return numstring.substring(1);
        }
        return numstring;
    }

    function addDays(dateobj, days)
    {
        dateobj.setDate(dateobj.getDate() + days);
        var month = dateobj.getMonth()+1;
        var date  = dateobj.getDate();
        var year  = dateobj.getYear();
        if (year < 1900) year += 1900;
        return zeroPad(month) + "/" + zeroPad(date) + "/" + year;
    }
