/* 	dynlite forms module
 *	AIP Solutions Ltd'2005
 *	www.aip-solutions.com
 *	mod version : 0.9.0.2
 *	mod date	: 2006-01-17
 */
 
/* onload initialisation */
load.push('_fldinit()');
/* library functions */
evt=function(elm,evt,obj)
{	(ns6)? elm.addEventListener(evt,obj,false):elm.attachEvent('on'+evt,obj);
log.push('- event ['+evt+'] of element ['+(elm.id? elm.id:elm.name)+'] captured.');
} 
/* forms submitting */
function submit(frm,par)
{	this.frm=(frm)?((typeof(frm)=='string')? obj(frm):frm):document.forms[0];
	this.msg=[this.frm.getAttribute('onerror')];
	this.err=0;
	for(var i=this.frm.elements.length-1;i>=0;i--)
	{	this.el=this.frm.elements[i];
		if(_fldcheck(this.el))
		{	this.err++;
			if(this.el.getAttribute('onerror')) this.msg.push(this.el.getAttribute('onerror'));
		}
	}	
	if(this.err) (document.getElementById('error'))? obj('error').innerHTML=this.msg.join("<br>") : alert(this.msg.join("\n"));
	else
	{ 	if(par) (this.frm.action.indexOf('?')!=-1)? this.frm.action+='&'+par:this.frm.action+='?'+par;
		this.frm.submit();
	}
}
/* fields processing */
_fldinit=function()
{	var frmArr=document.getElementsByTagName('FORM');
	for(var i=frmArr.length-1;i>=0;i--)
	{	var arr=frmArr[i].elements;
		for(var i=arr.length-1;i>=0;i--)
			if(arr[i].tagName!='FIELDSET'&&arr[i].className.indexOf('inactive')==-1) _fldevt(arr[i]);
	}
}
_fldevt=function(fld)
{	evt(fld,'focus',_fldevoke);
	evt(fld,'blur',_fldevoke);
//	evt(fld,'keyup',_fldevoke);
	evt(fld,'change',_fldevoke);
}
_fldevoke=function(e)
{	var el=(ns6)?e.target:event.srcElement;
	var evt=(ns6)?e.type:event.type;
	if(evt=='keyup'&&e.keyCode==13&&el.form.getAttribute('keysubmit')=='1'){submit(el.form)}
	if(evt=='focus')	el.className=el.className.replace(/(active|error)?$/,' active');
	else _fldcheck(el);
}
_fldcheck=function(el)
{	var req=el.getAttribute('req');
	var err=0;
	if((!req||req=='no')&&el.value=='') err=0;
	else
	{	switch(el.getAttribute('vld'))
		{	case 'txt' : err=(/.+[\n\r]?/.test(el.value))? 0:1;break;//any text
			case 'eml' : err=(/^\S+@\w\S+\.\w\w+$/.test(el.value))? 0:3; break;//email (x@xx.xx)
			case 'num' : err=(/^\d+$/.test(el.value))? 0:4; break;//number
			case 'chk' : err=(el.checked)? 0:6;break;//checkbox
		default : err=0;
		}
	}
	el.className=el.className.replace(/(active|error)?$/,((err)?' error':' '));
return err;
}
/* end of forms module */


