var ofm_script = 'Form Validator v20051207';

/*********************************
       VALIDATION FUNCTIONS
*********************************/
function notEmpty(str) { 
	str = str.replace(/^\s+/g, '').replace(/\s+$/g, ''); //clean up string
	return (str.length != 0);
}

function checkboxChecked(checkbox) {
	return checkbox.checked;
}

function validEmail(email) {
    var emailReg = /^[\w\.-]+@[\w-]+(\.[\w-]{2,}){1,}$/;
    return emailReg.test(email.value);
}

function radioChecked(radio) {
    var group = document.getElementsByName(radio.name);
    for (i=0;i<group.length;i++) {
        if (group[i].checked) { return true; }
    }
 return false;
}

/*********************************
         VISUAL EFFECTS
*********************************/

function highlightError(element) {
	element.style.backgroundColor = '#ffa';
} 

function clearHighlight(element) {
	element.style.backgroundColor = '#fff';
} 

function display_response(id, response) {
	document.getElementById(id + '_response').style.display = 'block';
	document.getElementById(id + '_response').innerHTML = '<ul>' + response + '</ul>';
}

/*********************************
          FORM VALIDATION
*********************************/
function validateForm(formId) {
	var error = '';
	
	var collections = [];
	collections = collections.concat(document.getElementById(formId).getElementsByTagName('input'));
	collections = collections.concat(document.getElementById(formId).getElementsByTagName('textarea'));
	collections = collections.concat(document.getElementById(formId).getElementsByTagName('select'));
	collections = collections.concat(document.getElementById(formId).getElementsByTagName('radio'));

	
	var items = [];
	for(var i = 0; i < collections.length; i++) {
		for(var j = 0; j < collections[i].length; j++) {
			items.push(collections[i][j]);
		}
	}

	var highlightItems = [];
	for(var i = 0; i < items.length; i++) {
		if(items[i].className == 'required') {
			var numErrors = 0;
			clearHighlight(items[i]);

			if(items[i].getAttribute('validation')) {
				var validationFunctions = (items[i].getAttribute('validation')).split(',');								
								
				for(var j = 0; j < validationFunctions.length; j++) {
					if(eval('window.' + validationFunctions[j])) {
						 numErrors = eval(validationFunctions[j] + '(items[i])') ? numErrors : ++numErrors;
					} else {
						display_response(formId, ofm_script + '<br><br>Custom validation ' + 
							'function not found!<br><br>Function: <i>' + 
							items[i].getAttribute('validation') + '()</i><br>' + 
							'Element Name: <i>' + items[i].name + '</i>');
						items[i].style.backgroundColor = '#F00';
						return false; // Pointless to continue.
					}
				}
			} else {
				numErrors = (notEmpty(items[i].value)) ? numErrors : ++numErrors;
			}
			
			if(numErrors > 0) {
				error += (items[i].getAttribute('errormsg')) ? 
					"<li>" + items[i].getAttribute('errormsg') + "</li>" : 
					"<li>Please accurately complete all highlighted fields.</li>";
					
				highlightItems.push(items[i]);
			}
		}
	}
	
	if(error.length == 0) 
		return true; // Submit form :)
	
	for(var i = 0; i < highlightItems.length; i++) 
		highlightError(highlightItems[i]);
	display_response(formId, error);
	return false; // Shit happens :(
}

