/* reset doesn't work properly */

function mcForm(form) {
    this.formName = form.formName;
    this.fieldsNames = form.fieldsNames;
    this.fieldsVFnc = form.fieldsVFnc;


    this.init = function() {    
        if(this.fieldsNames!=null) {
            for(i = 0; i<this.fieldsNames.length; i++) {
                eval('field = document.' + this.formName + '.' + this.fieldsNames[i]);
                if(field!=null) {
                    field.name = this.fieldsNames[i];
                    field.index = i;
                    field.formObj = this;
                    field.resetValue = field.value;
                    field.enabledChecking = false;
                    field.style.border = "2px solid #CCC";
                    if(field.className.indexOf("disabled")!=-1){

                        field.isdisabled=true;

                    }
                    addEvent(field, "keyup", this.checkFieldEvent);
                    addEvent(field, "blur", this.blurField);
                    addEvent(field, "focus", this.focusField);
                    addEvent(field, "change", this.checkFieldEvent);
                }
            }
            labels = document.getElementsByTagName("LABEL");
            for(i = 0; i < labels.length; i++) {
                addEvent(labels[i], "click", this.focusToField);
            }
            this.checkForm();
        }

        eval('form = document.' + this.formName);
        form.formObj = this;

        //check form on reset
        addEvent(form, "reset", this.checkForm);

        //check form on load
//        this.checkForm(null);
    };

    this.focusToField = function(e) {
        e = fixE(e);
        field = gE(e.target.htmlFor);
//        field.focus();
    };

    this.checkForm = function(e) {
        if(e!=null) {
            e=fixE(e);
            form=e.target.formObj;
        } else {
            form=this;
        }

        for(i = 0; i<form.fieldsNames.length; i++) {
            eval('field = document.' + form.formName + '.' + form.fieldsNames[i]);
            if(field!=null) {
                field.value = field.resetValue;
                form.checkFieldEvent(null, field);
            }
        }

        return (e!=null);
    }

    this.checkFieldEvent = function(e, obj) {
        if(e!=null) {
            e=fixE(e);
            field=e.target;
        } else {
            field=obj;
        }
        if(field.isdisabled){
            field.value=field.resetValue

        }



        if(field.enabledChecking) {
            result = field.formObj.fieldsVFnc[field.index](field.value);

            if(result) {
                field.className = field.className.replace('fieldValueError','fieldValueOK');
            } else {
                field.className = field.className.replace('fieldValueOK','fieldValueError');
            }
        }
        field.enabledChecking=true;
        return true;
    };

    this.focusField = function(e) {
        e = fixE(e);
        e.target.style.border = "2px solid #000";
    }

    this.blurField = function(e) {
        e = fixE(e);
        e.target.style.border = "2px solid #CCC";
    }
}

function ereg(value, res) {
    var re = new RegExp(res);
    return (value.search(re) != -1)
}
