/* Forms.js 
   Version: 1.1
   Copyright (c) 2008 Dalibor Horinek 
   Alishia Project :: http://alishia.horinek.net 
   -------------------------------------------------------

   This code allows adding checks for forms.

*/

function Form(form) {
	var name 	= form;
	var dFields 	= new Array();
	var fields 	= new Array();

	var frm = document.forms[form];

	if ( !frm ) {
		window.alert("SYSTEM ERROR: Form "+ form +" doesn't exist");
		return 0; 
	}

	/* private functions */
	function _field(field, match, rVal, onError, alrt) {
		this.field = frm.elements[field];
		this.rVal = rVal;
		this.onError = onError;
		this.match = match;
		this.alrt = alrt;
		this.type = 1;
	}

	function _test(func, onError, alrt) {
		this.func = func;
		this.onError = onError;
		this.alrt = alrt;
		this.type = 2;
	}

	this.addField = function(field, match, rVal, onError, alrt) {
		fields.push(new _field(field, match, rVal, onError, alrt));
	}

	this.addTest = function(func, onError, alrt) {
		fields.push(new _test(func, onError, alrt));
	}
		
	this.check = function() {
		for ( var i = 0; i != fields.length; i++ ) {
			if ( fields[i].type == 1 ) {
				var result = true;
				if ( fields[i].match == true ) {
					if ( ! fields[i].rVal.test(fields[i].field.value) ) {
						result = false;
					} 
				} else {
					if ( fields[i].rVal.test(fields[i].field.value) ) {
						result = false;
					}
				}

				if ( !result ) {
					this.error(fields[i].onError);
					this.fieldHilight(fields[i].field);

					if ( fields[i].alrt ) 
						window.alert(fields[i].onError);

					return false;
				}
			} 

			if ( fields[i].type == 2 ) {
				if ( ! fields[i].func() ) {
					this.error(fields[i].onError);

					if ( fields[i].alrt ) 
						window.alert(fields[i].onError);
					
					return false;
				}
			}
		}

		return true;
	}
	
	this.removeValue = function(field) {
		if ( dFields[field.name] != 1 ) {
			field.value = "";
			dFields[field.name] = 1;
		}
	}

	this.confirmed = function() {
		var conf_el = "form["+name+"]_confirmed";
		var subm_el = "form["+name+"]_submit";
		var c_el = document.getElementById(conf_el);
		var s_el = document.getElementById(subm_el);

		if ( c_el ) 
			eShow(conf_el);

		if ( s_el )
			eHide(subm_el);
		
	}

	this.error = function(error) {
		var error_el = "form["+name+"]_error";

		var el = document.getElementById(error_el);

		if ( el ) {
			el.innerHTML = error;
			eShow(error_el);
			return false;
		}
	}

	this.fieldHilight = function(field) {
		field.style.background = "#ff8282";
	}
}


function formSubmit(form) {
	if ( form.check() ) {
		form.confirmed();
		return true;
	}

	return false;
}


	
