var fields;

function labelFor(id) {
    var labels = document.getElementsByTagName('label');
    for (var i=0; i<labels.length; i++) {
        if (labels[i].getAttributeNode('for').nodeValue == id) {
            return labels[i];
        }
    }
    return false;
}

function Validate() {
    var reIsNumber = /^[0-9]*$/;
    var reIsNotEmpty = /\S+/;
    var reIsEmail = /^([^@]+@.+\.[^.]+)$/;
    
    var result = true;
    for (var i=0; i<fields.length; i++) {
        var _result = true;

        if (fields[i].tagName.toLowerCase() == 'input' || fields[i].tagName.toLowerCase() == 'textarea') {
            _result = (fields[i].id.toLowerCase() == 'email') ? reIsEmail.test(fields[i].value) : reIsNotEmpty.test(fields[i].value);
        }

        var label = labelFor(fields[i].id);
        label.style.color = (_result==true) ? '#000000' : '#ff0000';
       
        result = result && _result;
    }
    
    var submit = document.getElementById('submit');
    submit.disabled = result ? false : true;
    
    return result;
}

function addEvent(elm, evType, fn) {
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, false);
            return true;
        } else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        } else {
            elm['on' + evType] = fn;
        }
}

function initValidator() {
    fields = new Array();
    for (var i=0; i<arguments.length; i++) {
        var field = document.getElementById(arguments[i]);
        fields.push(field);
    }

    for (var i=0; i<fields.length; i++) {
        addEvent(fields[i], 'click', Validate);
        addEvent(fields[i], 'keyup', Validate);
        addEvent(fields[i], 'blur', Validate);
    }
    Validate();
}
