/**
* The html_form-base-class
*/
function html_form(formID)
{
	function html_form__addEvent()
	{

	}
	this.addEvent = html_form__addEvent;

	/**
	* Show a page
	*
	* @var s Page-ID to show
	*/
	function html_form__showPage(s)
	{
		if (!s) s = 1;

		var i = 1;
		var p, n;

		while((p = document.getElementById(this.form.id+':page'+i)) && (n = document.getElementById(this.form.id+':navi'+i)))
		{
			n.className = n.className.replace(/(^| )active( |$)/, '$1');
			n.style.display = 'block';

			if (i == s)
			{
				n.className += ' active';
				p.style.display = 'block';
			}

			else
			{
				p.style.display = 'none';
			}

			++i;
		}

		return true;
	}
	this.showPage = html_form__showPage;


	/**
	* Store validators
	*/
	this.v = new Array();


	/**
	*
	*/
	function html_form__addValidator(type, error, obj, target)
	{
		var f = this.form.html_form;
		
		if (obj.length)
		{
			obj = document.getElementById(f.form.id+':'+obj);
		}

		f.v[f.v.length] = new Array(type, error, obj, target);
	}
	this.addValidator = html_form__addValidator;


	/**
	*
	*
	*/
	function html_form__validate()
	{
		var f = this.form.html_form;
		var i, j, e;
		var v = true;

		// Reset error-messages for each element
	    for (i=0; i<f.form.elements.length; i++)
	    {
			if (f.form.elements[i].type && (e = document.getElementById(f.form.elements[i].id+':error')))
	    	{
				document.getElementById(f.form.elements[i].id+':container').className = f.form.elements[i].className.replace(/(^|\s)error($|\s)/, ' ');

				for (j=e.childNodes.length; j>0; --j)
		    	{
    				e.removeChild(e.childNodes[j-1]);
	    		}
			}
	    }

	    // Reset error-messages for global form
	    if (e = document.getElementById(f.form.id+':error'))
    	{
			for (j=e.childNodes.length; j>0; --j)
	    	{
				e.removeChild(e.childNodes[j-1]);
    		}
		}

		// Validate
		for (i=0; i<f.v.length; i++)
		{
			if (f.v[i][0] == 'regex')
			{
				if (!f.v[i][2].value.match(f.v[i][3]))
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}

			else if (f.v[i][0] == 'equal')
			{
				if (f.v[i][3].length)
				{
					f.v[i][3] = document.getElementById(f.form.id+':'+f.v[i][3]);
				}
				
				if (f.v[i][2].value != f.v[i][3].value)
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}

			else if (f.v[i][0] == 'differ')
			{
				if (f.v[i][3].length)
				{
					f.v[i][3] = document.getElementById(f.form.id+':'+f.v[i][3]);
				}
				
				if (f.v[i][2].value == f.v[i][3].value)
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}

			else if (f.v[i][0] == 'int')
			{
				var ts = f.thousands_sep.replace(/(\.|\[|\]|\(|\)|-)/g, '\\$1');

				if (!f.v[i][2].value.match(new RegExp('^-?[0-9]{0,3}(('+ts+'[0-9]{3})*|[0-9]*)$')))
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}

			else if ((f.v[i][0] == 'float') || (f.v[i][0] == 'number'))
			{
				var ts = f.thousands_sep.replace(/(\.|\[|\]|\(|\)|-)/g, '\\$1');
				var dp = f.decimal_point.replace(/(\.|\[|\]|\(|\)|-)/g, '\\$1');

				if (!f.v[i][2].value.match(new RegExp('^-?[0-9]{0,3}(('+ts+'[0-9]{3})*|[0-9]*)('+dp+'([0-9]+|-+))?$')))
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}

			else if (f.v[i][0] == 'currency')
			{
				var ts = f.thousands_sep.replace(/(\.|\[|\]|\(|\)|-)/g, '\\$1');
				var dp = f.decimal_point.replace(/(\.|\[|\]|\(|\)|-)/g, '\\$1');

				if (!f.v[i][2].value.match(new RegExp('^-?[0-9]{0,3}(('+ts+'[0-9]{3})*|[0-9]*)('+dp+'[0-9]{1,2})?$')))
				{
					f.error(f.v[i][1], f.v[i][2]);
					v = false;
				}
			}
		}

		return v;
	}
	this.validate = html_form__validate;


	/**
	*
	*/
	function html_form__error(msg, obj)
	{
		var f = this.form.html_form;
		var e = document.getElementById(obj.id+':error');
		if (!e) { e = document.getElementById(f.form.id+':error'); }
		e.innerHTML += msg+'<br />';
		if (!document.getElementById(obj.id+':container').className.match(/(^|\s)error($|\s)/))
		{
			document.getElementById(obj.id+':container').className += ' error';
		}
	}
	this.error = html_form__error;

	// Recurse
	this.html_form = this;
	this.form = document.getElementById('html_form:'+formID);
	this.form.html_form = this;
	this.form.form = this.form;

	// Some settings
	this.decimal_point = ',';
	this.thousands_sep = '\.';
}

/*
function formtool2(ownerform_id)
{
 	function FormTool_CheckSubmit()
	{
		if (!confirm('Form submit?'))
		{
				 return false;
		}
	}
	this.checksubmit = FormTool_CheckSubmit;

	function FormTool_OnChange()
	{
		alert('Changed: '+this+'//'+this.value+'//'+this.checked);
		onchangelist[0]();
	}
	this.onchange = FormTool_OnChange;

	function FormTool_OnChange2()
	{
		alert('Changed2: '+this+'//'+this.value+'//'+this.checked);
	}
	this.onchange2 = FormTool_OnChange2;
	*/

	/*
	* 	END method-declarations
	*
	* 	BEGIN class-implementation
	*/
	  /*
	// Recurse
	this.formtool = this;

	// Get Formular
	this.form = document.getElementById(ownerform_id);

	// Add new attributes to formular
	this.form.formtool = this;

	// Add new methods to formular
	this.form.onsubmit = this.checksubmit;

	for (var i=0; i<this.form.elements.length; i++)
	{
		this.form.elements[i].onchangelist = new Array();
		this.form.elements[i].onchange = this.onchange;
		this.form.elements[i].onchangelist[0] = this.onchange2;
	}
}     */