/* initialisation */
/* onscriptload */
modfrm=new Object();
modfrm.ver=2.2;
modfrm.check=function(frm){}/* quick onsubmit check */
/* module version check */
if(modfrm.ver!=ver)	error('incorect module version:'+modfrm.ver+' should be:'+ver,'forms.0.8.js','modfrm','Version');
/* buttons disabling */
//css('.button','visibility','hidden');
/* scheduling page load initialisation */
load.push('make("FORM","dynfrm")');
/* onpageload */
function dynfrm(id)
{	this.id=id;
/* creates form object */
	this.frm=obj(this.id);
/* init fields */
	fldinit(this.frm);
	this.submit=function(qry){dynsubmit(this,qry)};
	this.reset=function(){dynreset(this)};
log.push('+form obj ['+this.id+'] created');
}
/* forms checking */
function dynsubmit(frm,qry)
{	if(frm.frm) frm=frm.frm;/* js object is called */
	frm.qry=qry||'';
	evoke(frm,'oncheck');
	fldinit(frm)
	evoke(frm,'onsend');
	for(var j in frm.dynstatus){frm.dynerror+=parseInt(frm.dynstatus[j])||0;}
	if(frm.dynerror) evoke(frm,'onerror');
	else	
	{	evoke(frm,'dosend');
		if(frm.qry) frm.action=frm.action.replace(/^([^\?]+).*$/,'$1'+'?'+qry);
		frm.submit()
	}
}
/* form reset handling */
function dynreset(frm)
{	if(frm.frm) frm=frm.frm;/* js object is called */
	evoke(frm,'onreset');
	frm.reset();
	for(var i=frm.elements.length-1;i>=0;i--)
	{	var fld=frm.elements[i];
		if(fld.name) fldcheck(fld,frm);
	}
}
/* fields initialisation */
function fldinit(frm)
{	frm.dynstatus=[], frm.dynerror=0;
	for(var i=frm.elements.length-1;i>=0;i--)
	{	var fld=frm.elements[i];
		fldevt(fld);
		if(fld.name) fldcheck(fld,frm);
	}
}
/* events capturing */
function fldevt(fld)
{	evt(fld,'focus',fldevoke);
	evt(fld,'blur',fldevoke);
	//evt(fld,'keyup',fldevoke);
	evt(fld,'change',fldevoke);
}
/* events handling */
function fldevoke(e)
{	var el=(ns6)?e.target:event.srcElement;
	var evt=(ns6)?e.type:event.type;
	(ns6)?e.preventBubble():event.cancelBubble=true;
	if(!(el.type=='textarea'&&evt=='keyup'))
	{	if(evt=='focus')	el.className=el.className.replace(/(active|error)?$/,' active');
		else fldcheck(el);
	}
	//if(el.obj[event.type]) el.obj[event.type](); 
}/* fileds checking */
function fldcheck(fld,frm)
{	var req=attr(fld,'dynreq');
	if((!req||req=='no')&&fld.value=='') err=0;
	else
	{	switch(attr(fld,'dynvld'))
		{	case 'txt' : err=(/.+[\n\r]?/.test(fld.value))? 0:1;break;//any text
			case 'chr' : err=(/^\w+$/.test(fld.value))? 0:2; break;//alpahbetical character+number
			case 'tel' : err=(/.+[\n\r]?/.test(fld.value))? 0:1;break;//phone number- to be fixed 
			case 'eml' : err=(/^\S+@\w\S+\.\w\w+$/.test(fld.value))? 0:3; break;//email (x@xx.xx)
			case 'num' : err=(/^\d+$/.test(fld.value))? 0:4; break;//number
			case 'sel' : err=(fld.options[fld.options.selectedIndex].value)? 0:5; break;//selectbox
			case 'chk' : err=(fld.checked)? 0:6;break;//checkbox
			case 'eur' : err=(/^\d[\d\.]*(,\d\d?)?$/.test(fld.value) && !/\d\d\d\d/.test(fld.value) && !/\.\d{1,2}(\.|\,|$)/.test(fld.value))? 0:7;  break;//euro
			case 'bgn' : err=(/^\d+(.\d\d?)?$/.test(fld.value))? 0:7;  break;//bgn
			case 'dat' : err=(/^(\d{1,2})\.(\d{1,2})\.(\d{2}|\d{4})$/.test(fld.value))? 0:8;break;//dd.mm.yyyy - d.m.yy;
			case 'cod' : err=(/^[0-9a-zA-Z]{16}$/.test(fld.value))? 0:9; break;//italian fiscal code
		default : err=0;
		}
	}
	if(frm) frm.dynstatus[fld.name]=err;
	fld.className=fld.className.replace(/(active|error)?$/,((err)?' error':''));
}
/* enabling buttons */
//load.push('css(".button","visibility","inherit")');
