/* 
 * Scriptname: form_validation.js
 * Copyright 2006 by Florian Schoeppe
 * florian@schoeppe.info 
 */
document.writeln('<p id="form_validation_error" style="visibility: hidden;"></p>');
var sheet = document.createElement('style');
sheet.innerHTML = '.invalid { border-color: red; } td.invalid + td { color: red }';
document.body.appendChild(sheet);
function validateForm(_form) {
    var validated = true;
    var validation_error_text = '<strong style="color: red;">Attention!!! The following input fields are required:</strong><br>';
    var validation_error_class = 'invalid';
    var _elements = _form.elements;
    for (var i = 0; i < _elements.length; i++) {
        element = _elements[i];
        if (element.className && element.className.search('obligatory') != -1) {
            switch (element.tagName) {
                case 'input':
                case 'INPUT':
                    switch (element.type) {
                        case 'text':
                        case 'TEXT':
                            if (element.name.search(/email/i) != -1 || element.name.search(/e-mail/i) != -1) {
                                // E-Mail validation
                                reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
                                   '(\\@)([a-zA-Z0-9\\-\\.]+)'+
                                   '(\\.)([a-zA-Z]{2,4})$');
                                if (reg.test(element.value) == false) {
                                    validated = false;
                                    validation_error_text += element.name + ', ';
                                    addClass(element, validation_error_class);
                                } else {
                                	removeClass(element, validation_error_class);
                                }
                            } else {
                                // Normal validation
                                if (element.value == '') {
                                    validated = false;
                                    validation_error_text += element.name + ', ';
                                    addClass(element, validation_error_class);
                                } else {
                                	removeClass(element, validation_error_class);
                                }
                            }
                            break;
                        case 'checkbox':
                        case 'CHECKBOX':
                        	if (element.checked == false) {
                                validated = false;
                                validation_error_text += element.name.split('_').join(' ') + ', ';
                                addClass(element, validation_error_class);
                                addClass(element.parentNode, validation_error_class);
                            } else {
                            	removeClass(element, validation_error_class);
                            	removeClass(element.parentNode, validation_error_class);
                            }
                        	break;
                        case 'radio':
                        case 'RADIO':
                        	if (radiosChecked(document.getElementsByName(element.name)) == false) {
                        		validated = false;
                                validation_error_text += element.name.split('_').join(' ') + ', ';
                                addClass(element, validation_error_class);
                                addClass(element.parentNode, validation_error_class);
                        	} else {
                        		removeClass(element, validation_error_class);
                        		removeClass(element.parentNode, validation_error_class);
                        	}
                    }
            }
        }
    }
    if (validated == false) {
        if (validation_error_text.substr(-2) == ', ') {
            validation_error_text = validation_error_text.substr(0, validation_error_text.length - 2);
        }
        document.getElementById('form_validation_error').innerHTML = validation_error_text;
        document.getElementById('form_validation_error').style.visibility = 'visible';
    } else {
        document.getElementById('form_validation_error').style.visibility = 'hidden';
    }
    return validated;
}
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}
function radiosChecked(radios) {
	for(var i=0; i<radios.length; i++) if(radios[i].checked) return true;
    return false;
}
