/* supporting javascript for lib/form.class.php */

// hacks for JS 5.0
 if (!Array.prototype.push) Array.prototype.push = function(val) { this[this.length] = val; }

/**
*
* FormHandler Object
*
**/
function FormHandler(oForm) {
    this.form = oForm;
    this.toValidate = new Array();
}

/* instance methods */
FormHandler.prototype.validate = function() {
    this.errors = new Array();
    for (i=0;i<this.form.elements.length;i++) {
        var sInput = this.form.elements[i].name;
//      if (sInput in this.toValidate) {
//          alert(sInput + " : " + this.toValidate[sInput].type);
//          this.isValid(this.form.elements[i],this.toValidate[sInput]);
//      }
    }
    if (this.errors.length > 0) {
//      alert("FORM ERRORS:\n" + this.errors.join("\n"));
        return false;
    }
    return true;
}

FormHandler.prototype.addValid = function(oInput) {
    this.toValidate[oInput.name] = oInput;
}

FormHandler.prototype.isValid = function(oInput,oData) {

    // check for optional displayName parameter
    var name = ((typeof(oData.displayName) == "string") && (oData.displayName != '')) ? oData.displayName : oData.name;

// check if it's empty
    if ((oData.isNull == false) && (oInput.value == '')) {
        if ((typeof(oData.errorMsg) == "string") && (oData.errorMsg != '')) {
            this.errors.push(oData.errorMsg);
        } else {
            this.errors.push(name + ' cannot be empty');
        }
        return;
    }

// string
    if (oData.type == 'string') {
        if ((typeof(oData.match) == "string") && (oData.match != '')) {
            var r = new RegExp("^"+oData.match+"$");
            if (oInput.value.search(r) < 0) {
                if (typeof(oData.errorMsg) == "string") {
                    this.errors.push(oData.errorMsg);
                } else {
                    this.errors.push(name + '\'s value of "' + oInput.value + '" does not match allowed pattern');
                }
                return;
            }
        }

// number
    } else if (oData.type == 'number') {
        if (typeof(oData.min) == "number") {
            if (parseFloat(oInput.value) < oData.min) {
                if (typeof(oData.errorMsg) == "string") {
                    this.errors.push(oData.errorMsg);
                } else {
                    this.errors.push(name + ' must be equal or bigger than ' + oData.min);
                }
                return;
            }
        }
        if (typeof(oData.max) == "number") {
            if (parseFloat(oInput.value) > oData.max) {
                if (typeof(oData.errorMsg) == "string") {
                    this.errors.push(oData.errorMsg);
                } else {
                    this.errors.push(name + ' must be equal or smaller than ' + oData.max);
                }
                return;
            }
        }

// textarea
    } else if (oData.type == 'textarea') {

// select
    } else if (oData.type == 'select') {

// checkbox
    } else if (oData.type == 'checkbox') {

// radio
    } else if (oData.type == 'radio') {

// password
    } else if (oData.type == 'password') {

// file
    } else if (oData.type == 'file') {
    }
}

/* class methods */

FormHandler.DaySelect = function(item, type, minutes, showNone) {
    var aDays = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
    var sName = item.name.substring (0, item.name.lastIndexOf ('['));
    var oDayField = item.form[sName + '[day]'];
    var oMonthField = (type == 'month') ? item : item.form[sName + '[month]'];
    var oYearField = (type == 'year') ? item : item.form[sName + '[year]'];
    var nSelected = oDayField.selectedIndex;
    var nMonth = oMonthField.options[oMonthField.selectedIndex].value.toString();
    var nYear = oYearField.options[oYearField.selectedIndex].value.toString();
    var nMonth = eval (nMonth);
    var nYear = eval (nYear);
    var oHourField = (minutes == 1) ? item.form[sName + '[hour]'] : item ;
    var oMinField = (minutes == 1) ? item.form[sName + '[minute]'] : item ;

    if (item.selectedIndex == 0) {
        oDayField.selectedIndex = 0;
        oMonthField.selectedIndex = 0;
        oYearField.selectedIndex = 0; // oYearField.options.length - 1;
        if (minutes == 1) {
            oHourField.selectedIndex = 24;
            oMinField.selectedIndex = 60;
        }
    }
    // print out the day select field
    if (nMonth > 0) {
        oDayField.options.length = 0;
        if (showNone == 1) oDayField.options[oDayField.options.length] = new Option ('day', 0);
        for (i = 1; i <= aDays[nMonth - 1]; i ++) {
            var sValue = (i.toString().length < 2) ? ('0' + i.toString ()): i;
            oDayField.options[oDayField.options.length] = new Option (i, sValue);
        }
        if ((nYear > 0 && nYear % 4 == 0) && nMonth == 2) oDayField.options[oDayField.options.length] = new Option ('29', 29);
        if (nSelected >= oDayField.options.length) oDayField.options[0].selected = true;
        else oDayField.options[nSelected].selected = true;
    } else oDayField.options[0].selected = true;
}

FormHandler.clearNullFlag = function(field, name) {
    var sName = field.name.substring (0, field.name.lastIndexOf ('['));
    var oCheckbox = field.form[sName + '[' + name + '_null]'];
    if ((field.value != "" ) && ( oCheckbox.checked )) {
        oCheckbox.checked = false;
    }
}

FormHandler.clearField = function(field, name,type) {
    var sName = field.name.substring (0, field.name.lastIndexOf ('['));
    var oField = field.form[sName+'['+name+']'];
    if (
        (type == "string") ||
        (type == "int") ||
        (type == "real") ||
        (type == "blob") ||
        (type == "timestamp") ||
        (type == "time") ||
        (type == "year")
    ) {
        oField.value = '';
    }
}