function validateGetValueOf(o) {
    var value="";
    if(typeof(o)=="object") {
        switch(o.type) {
            case "select":
                var i=o.options.SelectedIndex;
            value=(i!=-1) ? o.options[i].value : "";
            break;
            case "chackbox":
                case "radio":
                case "input":
                case "textarea":
                case "file":
            default:
                return o.value;
        }
    }
    return value;
}

/* Quand est-ce que microsoft supportera le DOM corectement ? */
function hasAttribute(attribute) {
    var has=this.getAttribute(attribute);
    return (has==null) ? false : true;
}


function validate(hidealert) {
    var argv = validate.arguments;
    var argc = argv.length;
    var str = "";
    var min_reqs=max_reqs=null;
    if(!document.getElementsByTagName) {
        alert("Sorry! Your browser does not support the W3C HTML DOM!");
        return false;
    }
    var forms = document.getElementsByTagName('form');
    for(var f=0; f<forms.length;f++) {
        var e=forms[f].elements;
        for(var i = 0; i < e.length; i++) {
            if(!e[i].hasAttribute) e[i].hasAttribute=hasAttribute;
            if(!e[i].hasAttribute('pattern')) continue;
            var pattern = new RegExp(e[i].getAttribute('pattern'));
            var value = validateGetValueOf(e[i]);
            if (pattern != '/null/') {
                var offendingChar = value.match(pattern);
                if(offendingChar == null) {
                    str+= (e[i].hasAttribute('errorMsg')) ?
                        e[i].getAttribute('errorMsg') + "\n" :
                        "Parse error in form ! --"+e[i].name+"\n";
                    e[i].className='inputError';
                    continue;
                }
                min_reqs= (e[i].hasAttribute('min')) ? e[i].getAttribute('min') : "";
                max_reqs= (e[i].hasAttribute('max')) ? e[i].getAttribute('max') : "";
                if(typeof(e[min_reqs])=="object")
                    min_reqs=validateGetValueOf(e[min_reqs]);
                if(typeof(e[max_reqs])=="object")
                    min_reqs=validateGetValueOf(e[max_reqs]);
                if(min_reqs!="") min_reqs=parseFloat(min_reqs);
                if(max_reqs!="") max_reqs=parseFloat(max_reqs);
                //str+="["+min_reqs+"]["+value+"]["+max_reqs+"]\n";
                if ((min_reqs!="" && value < min_reqs) || (max_reqs!="" && value > max_reqs)) {
                    str+= (e[i].hasAttribute('MinMaxerrorMsg')) ?
                        e[i].getAttribute('MinMaxerrorMsg') + "\n" :
                        "Parse error in form : "+e[i].name +": "+min_reqs+"<="+value+"<="+max_reqs+"\n";
                    e[i].className='inputError';
                } else{
                    if(e[i].getAttribute('type') != 'checkbox') e[i].className='inputValid';
                }
            }
        }
    }
    if (str != "" && str!=null) {
        if (hidealert == 1) {
            return false;
        } else {
            alert(str);
            return false;
        }
    } else {
        if(argc == 3 && argv[0].toLowerCase() == 'checkpass') {
            if(checkPass(argv[1], argv[2]) == false) {
                document.getElementById(argv[1]).className = 'inputError';
                document.getElementById(argv[2]).className = 'inputError';
                //alert((document.getElementById(argv[1]).hasAttribute('errorMsg')) ?  document.getElementById(argv[1]).getAttribute('errorMsg') : "Please enter the same passwords");
                alert("Please enter the same passwords");
                return false;
            }
        }
        return true;
    }
}
