/* dynlite forms module 
 * based on dynlite dhtml dom api  
 * peter assenov- AIP Solutions Ltd.' 2003
 * @core:	2.1
 * @version:0.7.0.3/29.01.2004
 */
/* module initialisation and version checkup */
modforms=new Object();
modforms.core=2.1; 
if(window.version!=modforms.core)	alert('Warning!\n------------------------------------------------\nmodule forms has encountered compatability problem: \n\ncore version is: '+modforms.version+'; should be: '+modforms.core);

/* form object */
function dynfrm(name)
{	this.name=name;
	this.status=[];
	this.convert=[];
page.add(this.name+'.init()');
}
dynfrm.prototype.init=function()
{	this.frm=document.forms[this.name+'Frm'];
	if(this.frm)
	{	this.els=this.frm.elements;
	window[this.name]=this;
		this.frm.obj = this;
		for(var i=this.els.length-1;i>=0;i--)
		{	el=new dynfld(this.els[i],this);
			el.ref=el.el.name;
			el.vld=el.el.getAttribute('vld');
			el.req=(el.el.getAttribute('req')=='yes')?1:0;
			el.name=this.name+el.ref;
		window[el.name]=el;	
			el.init();
			el.check();
			el.el.className=el.el.className.replace(/(Error|Focus)?$/,el.check('blur'));
			if(el.vld=='dat')this.convert[el.ref]=this.els[i];
		}
	}
log.add((this.frm)?'- form: '+this.name+' created.':'! could not create form: '+this.name);	
}
dynfrm.prototype.submit=function(query)
{	
	if(!this.frm) return;
	this.query = (query)? '?'+query : '';
	this.error = 0;
	evt.evoke(this.name,'onbeforesubmit');
	for(var i in this.status)
	{	if(this.status[i]) this.error = this.status[i];  
	}
	evt.evoke(this.name,'onsubmit');
	if(this.error)	evt.evoke(this.name,'onsubmiterror');
	else
	{	if(this.query) this.frm.action = this.frm.action.replace(/^([^\?]+).*$/,'$1'+this.query);
		evt.evoke(this.name,'dosubmit');
		//debug.info(this.frm,1);
		this.frm.submit();
	}
}

dynfrm.prototype.reset=function(query)
{	this.frm.reset();
}

dynfrm.prototype.focus=function(fldname)
{	var el=this.els[fldname];
	el.focus();
	el.className=el.className.replace(/(Error|Focus)?$/,'Focus');
}
/* field object */
function dynfld(el,frm)
{	this.el = el;
	this.frm = frm;
	this.el.obj = this;
}
dynfld.prototype.events=function(e)
{	var el=(ns6)?e.target:event.srcElement;
	var type=(ns6)?e.type:event.type;
	(ns6)?e.preventBubble():event.cancelBubble=true;
	var suff=(type=='focus')?'Focus':el.obj.check(type);
	el.className=el.className.replace(/(Error|Focus)?$/,suff);
	if(el.obj[type]) el.obj[type](); 
}
dynfld.prototype.init=function()
{	evt.add(this.name,'onfocus',this.name,'events');
	evt.add(this.name,'onblur',this.name,'events');
	evt.add(this.name,'onkeyup',this.name,'events');
	evt.add(this.name,'onchange',this.name,'events');
}
dynfld.prototype.check = function(type)
{	if(!this.req&&this.el.value=='') this.error = 0;
	else
	{	switch(this.vld)
		{	case 'txt' : this.error=(/.+[\n\r]?/.test(this.el.value))? 0:1;break;//any text
			case 'chr' : this.error=(/^\w+$/.test(this.el.value))? 0:2; break;//alpahbetical character+number
			case 'tel' : this.error=(/.+[\n\r]?/.test(this.el.value))? 0:1;break;//phone number- to be fixed 
			case 'piva': this.error=(!this.el.value || /^\d{11}$/.test(this.el.value))?0:10;break;
			case 'eml' : this.error=(/^\S+@\w\S+\.\w\w+$/.test(this.el.value))? 0:3; break;//email (x@xx.xx)
			case 'num' : this.error=(/^\d+$/.test(this.el.value))? 0:4; break;//number
			case 'sel' : this.error=(this.el.options[this.el.options.selectedIndex].value)? 0:5; break;//selectbox
			case 'chk' : this.error=(this.el.checked)? 0:6;break;//checkbox
			case 'eur' : this.error=(/^\d[\d\.]*(,\d\d?)?$/.test(this.el.value) && !/\d\d\d\d/.test(this.el.value) && !/\.\d{1,2}(\.|\,|$)/.test(this.el.value))? 0:7;  break;//euro
			case 'dat' : this.error=(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/.test(this.el.value))? 0:8;break;//dd.mm.yyyy - d.m.yy;
			case 'cod' : this.error=(/^[0-9a-zA-Z]{16}$/.test(this.el.value))? 0:9; break;//italian fiscal code
		default : this.error = 0;
		}
	}
	this.frm.status[this.ref] = this.error;
	if(this.error&&type=='blur') evt.evoke(this.frm.name,'onerror',this.ref);
	return (this.error)?'Error':(type=='blur')?'':'Focus';
}

log.add((window.version=modforms.core)?"# forms module initialisation completed":"! incorect version of forms module");
//that's all, enjoy...
