// -----------------------------------------------------------------------------------
//	Form Validator v1.1
//	by MrkEw NET
// -----------------------------------------------------------------------------------
var FormValidation = {
    rClass:"",
    vClassPrefix:"",
    errorsMsg:"",
    rc:null,
    setup:function(rClass, vClassPrefix, errorsMsg) {
        this.rClass=rClass;
        this.vClassPrefix=vClassPrefix;
        this.errorsMsg=errorsMsg;
        this.rc=new RegExp(rClass, "g");
    },
    validate:function(formId){
        var form = document.getElementById(formId);
        if (form==null)
            return;

        var validEl = new Array();
        var validType = new Array();
        var req = new Array();
        var elName = new Array(), label = new Array();
        var elType = new Array("input", "textarea");
        var t = new String();

        for (var j=0; j<elType.length; j++) {

            var col = form.getElementsByTagName(elType[j]);
            for (var i=0; i<col.length; i++) {

                var rv=new RegExp(this.vClassPrefix+"_([a-z_]+)", "g");

                if (col[i].className.match(rv)!=null) {
                    validEl[ validEl.length ] = col[i];
                    var t = new String(col[i].className.match(rv));
                    validType [ validType.length ] = t.substr(t.indexOf("_")+1);
                    req[ req.length] = col[i].className.match(this.rc)!=null;
                }
            }

        }

        col = form.getElementsByTagName("label");
        for (var i=0; i<col.length; i++) {
            for (var j=0; j<validEl.length; j++) {
                if (col[i].htmlFor==validEl[j].id) {
                    elName[j] = col[i].innerHTML.replace(/:/g, "");
                    label[j] = col[i];
                }
            }
        }

        var error = new Array();
        var elArr = new Array();
        var elChecked = new Object();
        for (var i=0; i<validEl.length; i++) {

            if (validEl[i].disabled)
                continue;

            var v = validEl[i].value;

            if (validType[i]=="empty" && v=="")
                error[ error.length ] = this.makeError("empty", elName[i],validEl[i],label[i]);

            else if (validType[i]=="numeric" && this.vNumeric(v,i,req[i]))
                error[ error.length ] = this.makeError("numeric", elName[i],validEl[i],label[i]);

            else if (validType[i]=="date" && this.vDate(v,i,req[i]))
                error[ error.length ] = this.makeError("date", elName[i],validEl[i],label[i]);

            else if (validType[i]=="email" && this.vEmail(v,i,req[i]))
                error[ error.length ] = this.makeError("email", elName[i],validEl[i],label[i]);

            else if (validType[i]=="telephone" && this.vTelephone(v,i,req[i]))
                error[ error.length ] = this.makeError("telephone", elName[i],validEl[i],label[i]);

            else if (validType[i]=="empty_array") {
                elArr[elArr.length]=validEl[i];
            }
            else if (validType[i]=="checked") {
                if (elChecked[validEl[i].name]==null) {
                    elChecked[validEl[i].name] = new Array();
                    elChecked[validEl[i].name+"_label"] = new Array();
                }
                elChecked[validEl[i].name].push(validEl[i]);
                elChecked[validEl[i].name+"_label"].push(elName[i]);


            }

        }

        if (elArr.length>0) {
            var er=false;
            for (var i=0;i<elArr.length;i++) {
                if (elArr[i].checked) {
                    er=true;
                    break;
                }
            }
            if (!er)
                error[ error.length ] = this.makeError("empty_array","",null,null);

        }

        for (var key in elChecked) {
            if (key.indexOf("label")==-1) {
                var er=false;
                for (var i=0; i<elChecked[key].length; i++) {
                    if (elChecked[key][i].checked) {
                        er=true;
                        break;
                    }
                }

                if (!er)
                    error[ error.length ] = this.makeError("checked","",null,null,elChecked[key+"_label"].toString(", "));
            }
        }

        if (error.length>0) {
            var col=form.getElementsByTagName("button");
            for (var i=0; i<col.length;i++)
                col[i].blur();
        }

        return error;
    },
    vNumeric:function(v, i, req) {
        return ((req && v=="") || (v!="" && v.match(/^[\-]*\d+(\.\d+)*$/)==null));
    },
    vEmail:function(v, i, req) {
        return ((req || v!="") && !v.match(/^[-_\.a-zA-Z0-9]+@[-a-zA-Z0-9.]+\.[a-zA-Z]{2,4}$/g));
    },
    vDate:function(v, i, req) {
        return ((req || v!="") && Calendar.encode(v)==null);
    },
    vTelephone:function(v, i, req) {
        return ((req && v=="") || !v.match(/^\d{9}$/));
    },
    makeError:function(key, field, el, lbl, suffixText) {
        return {item:field,error:this.errorsMsg[key],elem:el,label:lbl,suffix:suffixText};
    }
};

