
var formcheck_Form = null;

var formcheck_REGEXP_Email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
var formcheck_REGEXP_Postcode = /^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/;
var formcheck_REGEXP_Integer = /^\d+$/;
var formcheck_REGEXP_Currency = /^\£?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$/;
var formcheck_REGEXP_Date = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;

function formcheck_Setup() {
	formcheck_Form = document.forms[0];
	formcheck_Form.onsubmit = formcheck_Submit;


	if(formcheck_Form.getAttribute('Warning')) {
		formcheck_Form.Error = formcheck_Form.getAttribute('Warning');
	}

	Items = getElementsByTagNames('input,textarea,select', formcheck_Form);
	for(i=0; i<Items.length; i++) {
		Item = Items[i];

		if(Item.getAttribute('mandatory')!=null) Item.required = true;
		else Item.required = false;

		if(Item.getAttribute('field')) Item.field = Item.getAttribute('field').toLowerCase();
		else Item.field = ''

		if(Item.getAttribute('errorclass')) Item.errorclass = Item.getAttribute('errorclass').toLowerCase();
		else Item.errorclass = ''
		
		Item.OriginalClass = Item.className;
		switch(Item.type.toLowerCase()) {
			case 'text':
				Item.validate = formcheck_CheckTextIsValid;
				break;

			case 'textarea':
				Item.validate = formcheck_CheckTextIsValid;
				break;

			case 'select-one':
				Item.validate = function() {
					Valid = true;
					if(this.selectedIndex < 1 && this.required) Valid = false;
					return Valid;
				}
				break;

			default:
				Item.validate = function() { return true; }
				break;
		}
	}
}

function formcheck_CheckTextIsValid() {
	Valid = true;
	if(this.value=='' && this.required) Valid = false;
	if(Valid) {
		if (this.value != '') {
			switch(this.field.toLowerCase()) {
				case 'email':	 
					Valid = formcheck_REGEXP_Email.test(this.value); break;
				case 'postcode': 
					Valid = formcheck_REGEXP_Postcode.test(this.value); break;
				case 'number':	 
					Valid = formcheck_REGEXP_Integer.test(this.value); break;
				case 'currency': 
					Valid = formcheck_REGEXP_Currency.test(this.value); break;
				case 'date':	 
					Valid = formcheck_REGEXP_Date.test(this.value); break;
			}
		}
	}
	return Valid;
}

function formcheck_Submit() {
	var Valid = true, Error = '';
	
	var Items = new Array();
	Items = getElementsByTagNames('input,textarea,select', formcheck_Form);

	for(i=0; i<Items.length; i++) {
		Item = Items[i];
		
		Item.className = Item.OriginalClass;
		
		if(!Item.validate()) {
			Valid = false;
			if(Item.getAttribute('warning')) {
				Error = Error + Item.getAttribute('Warning') + '\n';
			}
			if(Item.errorclass != '') Item.className += ' ' + Item.errorclass;
		}
	}
	if(!Valid) {
		if(typeof formcheck_Form.Error != 'undefined') Error = formcheck_Form.Error + '\n\n' + Error;
		if(Error != '') alert(Error);
	}
	
	return Valid;
}

function getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) {
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) {
			resultArray.push(tags[j]);
		}
	}
	return resultArray;
}


function formcheck_AddEvent(object, eventName, fn) {
	if (document.addEventListener) object.addEventListener(eventName, fn, false);
	else object.attachEvent('on' + eventName, fn); 
}
formcheck_AddEvent(window, 'load', formcheck_Setup);


