/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */

    function checkdate(objName) {

        var datefield = objName;

        if (chkdate(objName) == false) {

            datefield.select();
            alert("The date you entered is invalid. Please try again");
            datefield.focus();
            return false;

        } else {

            return true;

        }

    }

    function chkdate(objName) {

        // var strDatestyle = "US"; //United States date style
        var strDatestyle = "EU";  //European date style
        var strDate;
        var strDateArray;
        var strDay;
        var strMonth;
        var strYear;
        var intday;
        var intMonth;
        var intYear;
        var booFound = false;
        var datefield = objName;
        var strSeparatorArray = new Array("-"," ","/",".");
        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 = datefield.value;

        if (strDate.length < 1) {

            return true;

        }

        if (strDate.length < 6) {

            return false;

        }

        for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
            if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
                strDateArray = strDate.split(strSeparatorArray[intElementNr]);
                if (strDateArray.length != 3) {
                    err = 1;
                    return false;
                } else {
                    strDay = strDateArray[0];
                    strMonth = strDateArray[1];
                    strYear = strDateArray[2];
                }
                booFound = true;
            }
        }

        if (booFound == false) {
            if (strDate.length>5) {
                strDay = strDate.substr(0, 2);
                strMonth = strDate.substr(2, 2);
                strYear = strDate.substr(4);
            }
        }

        if (strYear.length == 2) {
            if (strYear < 30)
                strYear = '20' + strYear;
            else
                strYear = '19' + strYear;
        }

        // US style
        if (strDatestyle == "US") {
            strTemp = strDay;
            strDay = strMonth;
            strMonth = strTemp;
        }

        intday = parseInt(strDay, 10);
        if (isNaN(intday)) {
            err = 2;
            return false;
        }

        intMonth = parseInt(strMonth, 10);
        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);
        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;
                }
            }

        }

        if (strDatestyle == "US") {
            datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + 
                              strYear;
        } else {
            if (intday < 10) {
                intday = "0" + intday;
            }
            datefield.value = intday + "." + strMonthArray[intMonth-1] + "." + 
                              strYear;
        }

        return true;

    }

    function LeapYear(intYear) {

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

        return false;

    }

    function validate_email(field) {

        var email = field.value;

        if (email!='') {

            if ((email.charAt(0) == ".") || 
                (email.charAt(0) == "@") || 
                (email.indexOf("@") == -1) ||
                (email.indexOf(".") == -1) || 
                (email.length < 6) || 
                (email.charAt(email.indexOf("@")+1) == ".") || 
                (email.charAt(email.indexOf("@")-1) == ".")) { 

                alert('Not a valid email address');
                field.value='';
                field.focus();

            }

        }

    }

    function validate_int(field) {

        var valid = "0123456789";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid number\nOnly numbers are accepted");
            field.focus();
            field.value='';
            return false;
        }

        return true;

    }

    function validate_float(field) {

        var valid = "0123456789.";
        var ok = "yes";
        var temp;

        // Replace , with .
        field.value = field.value.replace(/,/g, ".");

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid number\nOnly numbers and decimal point " +
                  "are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_name(field) {

        var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
                    "0123456789 '.,-/ßçÇñÑáéíóúàèìòùäöüÄÖÜ";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") {
                ok = "no";
            }
        }
        if (ok == "no") {
            alert("Invalid input\nOnly letters, numbers, space, apostrophe " +
                  "and period are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_zip_code(field) {

        var valid = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid zip code\nOnly capital letters, numbers, space " +
                  "and hyphen are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_caps(field) {

        var valid = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly capital letters are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_caps_numeric_extract_dash_blank(field) {

        var valid = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        var ok = "yes";
        var temp;

        temp=field.value.replace(/(-)|( )/g,"");
        field.value=temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly capital letters, numbers, dashes " +
                  "and blanks are accepted");
            field.focus();
            field.select();

            return field;
        }

    }

    function validate_alphabetic(field) {

        var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
                    "ßçÇñÑáéíóúàèìòùäöüÄÖÜáéíóúàèìòù";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly letters are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_alphanumeric(field) {

        var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + 
                    "0123456789";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly letters and numbers are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_menu_alias(field) {

        var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly letters, underscore and dash " +
                  "are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_grade_a(field) {

        var ok = "yes";
        var temp;

        if (field.value == '') {
            return true;
        }

        if (field.value != 'A' && field.value != 'A-' && field.value != 'B+'
            && field.value != 'B' && field.value != 'B-' && field.value != 'C+'
            && field.value != 'C' && field.value != 'D' && field.value != 'F'
            && field.value != 'INC' && field.value != 'P' && field.value != 'PRO') {

            alert("Invalid input\nOnly valid grades are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_grade_n(field) {

        var valid = "1234567890";
        var ok = "yes";
        var temp;

        if (field.value == '') {
            return true;
        }

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (field.value < 0 || field.value > 100) ok = "no";
        if (ok == "no") {
            alert("Invalid input\nOnly numbers between 0 and 100 are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_grade_f(field) {

        var valid = "PF";
        var ok = "yes";
        var temp;

        if (field.value == '') {
            return true;
        }

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid input\nOnly letters P and F are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_grade_o(field, max) {

        var valid = "1234567890";
        var ok = "yes";
        var temp;

        if (field.value == '') {
            return true;
        }

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (field.value < 0 || field.value > max) ok = "no";
        if (ok == "no") {
            alert("Invalid input\nOnly numbers between 0 and the maximum " +
                  "are accepted");
            field.focus();
            field.select();
        }

    }

    function validate_username(field) {

        var valid = "0123456789abcdefghijklmnopqrstuvwxyz._-";
        var ok = "yes";
        var temp;

        if (field.value != '') {

            if (field.value.length < 2) {
                alert("Username must be at least three characters long");
                field.focus();
                field.select();
            } else {
                for (var i=0; i<field.value.length; i++) {
                    temp = "" + field.value.substring(i, i+1);
                    if (valid.indexOf(temp) == "-1") ok = "no";
                }
                if (ok == "no") {
                    alert("Invalid input\nOnly letters and numbers " +
                          "are accepted");
                    field.focus();
                    field.select();
                }

            }

        }

    }

    function validate_telephone(field) {

        var valid = "0123456789+/- ";
        var ok = "yes";
        var temp;

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }
        if (ok == "no") {
            alert("Invalid phone number.\nOnly numbers, plus, hyphen, " +
                  "space and slash are accepted.");
            field.focus();
            field.select();
        }

    }

    function validate_time(field) {

        var valid = "0123456789:";
        var ok = "yes";
        var temp;

        if (field.value.length == 0) return true;

        if (field.value.length == 4) field.value = '0' + field.value;

        if (field.value.length != 5) ok = "no";

        for (var i=0; i<field.value.length; i++) {
            temp = "" + field.value.substring(i, i+1);
            if (valid.indexOf(temp) == "-1") ok = "no";
        }

        temp = field.value.substring(2,3);
        if (temp != ":" && temp != "") ok = "no";

        inthh = parseInt(field.value.substring(0,2), 10);
        if (isNaN(inthh)) {
            ok = "no";
        } else {
            if (inthh < 0 || inthh > 23) ok = "no";
        }

        intmm = parseInt(field.value.substring(3,5), 10);
        if (isNaN(inthh)) {
            ok = "no";
        } else {
            if (intmm < 0 || intmm > 59) ok = "no";
        }

        if (ok == "no") {
            alert("Invalid time\nTime format should be HH:MM (in 24 " +
                  "hour system)");
            field.focus();
            // field.value='';
            return false;
        }

        return true;

    }

    function validate_password(field) {

        var ok = "yes";
        var temp;

        if (field.value.length < 6) ok = "no";
        if (field.value.length > 25) ok = "no";

        if (ok == "no") {
            alert("Invalid password\nPasswords should have between " +
                  "6 and 25 characters");
            field.focus();
            field.select();
        }

    }


