window.onload=ready;

function ready() {
    assignValidate();
}

function assignValidate() {
    forms = document.getElementsByTagName('form');
    for (i=0;i<forms.length;i++) {
        addEvent(forms[i], 'submit', validate);
    }    
}

function validate(e) {
    if (!e) var e = window.event;
    var targ = getTarg(e);
    var error = '';
    if (targ.required.value.length == 0 || targ.required.value==null) alert('nothing required');
    else {
        var req = targ.required.value.split(',');
        var radio = new Array();
        for (i=0;i<targ.elements.length;i++) {
            var elem = targ.elements[i];
            //error += elem.name+' = '+elem.value+'\n';
            if (elem.getAttribute('type') == 'radio') {
                if (in_array(elem.name, req)) {
                    if (radio[elem.title] == 'good') {
                    } else {
                        radio[elem.title] = 'bad'
                        if (elem.checked) {
                            radio[elem.title] = 'good';
                        }
                    }
                }
            } else {
                if ((in_array(elem.name, req)) && (elem.value == elem.getAttribute('title') || elem.value == '' || elem.value == null)) {
                    error += 'The content of '+elem.getAttribute('title')+' has been left empty.\n';
                }
            }
        }
        for (j in radio) {
            if (radio[j] == 'bad') {
                error += 'The content of '+j+' has been left empty.\n';
            }
        }

    }
    if (error != '') {
        alert(error);
        stopDef(e);
    }
}

/* http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html */
function addEvent(obj, evType, fn) {
    if (obj.addEventListener){
        obj.addEventListener(evType, fn, false);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}
/* Stolen from David Scoville at Onlywebsites.com*/
function stopDef(e) {
    e = e||event;
    if(e.preventDefault) e.preventDefault();
    else e.returnValue = false;
}
/* http://stackoverflow.com/questions/890782/javascript-function-inarray */ 
function in_array(needle, haystack) {
    for(var key in haystack) {
        if(needle === haystack[key]) {
            return true;
        }
    }
    return false;
}
function getTarg(jsEvent) {
    var targ;
    if (jsEvent.target) targ = jsEvent.target;
    else if (jsEvent.srcElement) targ = jsEvent.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
    return targ;
}
