//======= EForm.EForm() ====================================================
function EForm()
	{
		this.code = new Array();		
		this.valid_objs = new Array();		
		this.RequireMsg = "Field `[TITLE]` is required !";
		this.FormatMsg  = "Field `[TITLE]` has wrong format !";
		this.OnSubmit	= "after";
		this.errMsg		= "";
	}

//======= EForm.setNotification() ===================================================	
EForm.prototype.setNotification = function(id)
	{
		var obj = document.getElementById(id);
		if (typeof(obj) != 'undefined')
			this.NotificationDiv = id;
	}
	
	
//======= EForm.getObj() ===================================================	
EForm.prototype.getObj = function(id)
	{
		var obj = document.getElementById(id);
		if (typeof(obj) != 'undefined')
			return obj;
		else
			return null;
	}
//======= EForm.registerValidation() ===================================================
EForm.prototype.registerValidation = function(id, mask, title, cssclass, errclass, require, OBJ, radio_group)
	{	
		var cur = this.valid_objs.length;
		var remember_on_submit = 1;
		
		for(var j=0;j<this.valid_objs.length;j++)
		{
			var obj = this.valid_objs[j];
			if (obj.id == id)
				return;
		}

		this.valid_objs[cur] 			= new Object();
		this.valid_objs[cur].id  		= id;
		this.valid_objs[cur].mask 		= mask;
		this.valid_objs[cur].title 		= title;
		this.valid_objs[cur].cssclass 	= cssclass;
		this.valid_objs[cur].errclass 	= errclass;
		this.valid_objs[cur].require 	= require;
		this.valid_objs[cur].radio_group 	= radio_group;
	
		var inpt = document.getElementById(id);
		
		if (inpt.name =="name")
			alert("EFORM : Please, do not use `name` as name for field `"+title+"`!");
		
		var frm  = inpt.form;
		
		if (!frm.name.length)
			frm.name = 'eform_for_'+id;

//		alert(inpt.id+" in "+frm.name);			
			
		this.valid_objs[cur].form 	= frm.name;		

		if (this.code.length)
		{
//			alert(cur+"] "+this.code.length);
			for(var j=0;j<this.code.length;j++)
			{
//				alert(cur+"."+j+" of "+this.code.length+")\n\ncform ="+this.code[j].form+"\nform="+frm.name);
				if (this.code[j].form == frm.name)
				{
					remember_on_submit = 0;
					break;
				}
			}
		}
		else
			remember_on_submit = 1;
		
//		alert(cur+") "+frm.onsubmit+" - "+remember_on_submit);
//		alert(cur+") "+remember_on_submit+" ID="+id);
		
		if (remember_on_submit && frm.onsubmit)
		{
//			alert(cur+') parsing ');
			var onsubmit_code = frm.onsubmit;
			var code = String(onsubmit_code);
//			alert('code1 = '+code);			
			code = code.replace(/function [a-z]*\(+\)+/g, "");
			code = code.replace(/.*\{/g, "");
			code = code.replace(/\}.*/g, "");
			code = code.replace(/return/g, "");
//			alert('code2 = '+code);
		}
		
		var cl = this.code.length;		
		this.code[cl] = new Object();
		this.code[cl].code 	= (code)?code:"";		
		this.code[cl].form 	= frm.name;		
		
		frm.onsubmit = function()
		{
		var ret = true;
		var s1 = 1;		
		
		if (OBJ.OnSubmit=='after')
		{
			for (var k=0;k<OBJ.code.length;k++)
			{
	//			alert(k+') '+OBJ.code[k].form+'\n\n'+OBJ.code[k].code);
				if (OBJ.code[k].form == this.name && OBJ.code[k].code && OBJ.code[k].code.length)
				{
					s1 = eval(OBJ.code[k].code);
					break;
				}
			}
		}
		
		if (OBJ.OnSubmit!='none')		
		{
			if (OBJ.OnSubmit=='after' && !s1)							
				return s1;
			
			if (OBJ.NotificationDiv)
				OBJ.getObj(OBJ.NotificationDiv).innerHTML = '';
			
			OBJ.errMsg = '';
			for (var i=0;i<OBJ.valid_objs.length;i++)
			{
//				alert(this.name+" = "+OBJ.valid_objs[i].form);
				if (OBJ.valid_objs[i].form == this.name)
				{
				r = OBJ.validateField(i);
				ret = ret && r;
				}
			}
			
			if (!(OBJ.NotificationDiv) && OBJ.errMsg.length)
				alert(OBJ.errMsg);
				
			
			if (OBJ.OnSubmit=='before' && !ret)
				return ret;
		}
		
		if (OBJ.OnSubmit=='before')
		{
			for (var k=0;k<OBJ.code.length;k++)
			{
				//alert(k+') '+OBJ.code[k].form+'\n\n'+OBJ.code[k].code);
				if (OBJ.code[k].form == this.name && OBJ.code[k].code && OBJ.code[k].code.length)
				{
					//alert(OBJ.code[k].code);					
					s1 = eval(OBJ.code[k].code);
					break;
				}
			}
		}
		
		return (s1 && ret);
	}
}

//======= EForm.clearForm() =======================================================
EForm.prototype.clearForm = function(btn)
{
	var frm = btn.form;
	for(var i=0;i<frm.elements.length;i++)
	{
		var elm = frm.elements[i];
		
		if (elm.type == 'select-one')
			elm.selectedIndex = 0;
		if (elm.type == 'text' && (!elm.readOnly && !elm.disabled))
			elm.value = '';
	}
}

//======= EForm.validateField() ===================================================	
EForm.prototype.validateField = function(poz)	
	{
		var id 			= this.valid_objs[poz].id;
		var mask 		= this.valid_objs[poz].mask;
		var title 		= this.valid_objs[poz].title;
		var cssclass 	= this.valid_objs[poz].cssclass;
		var errcssclass = this.valid_objs[poz].errclass;
		var require 	= this.valid_objs[poz].require;
		var radio_group = this.valid_objs[poz].radio_group;
		
		
		var validate = 0;
		var fld = this.getObj(id);
		
//		var form = fld.form;
//		if (!form.name)
//			form.name='eform1';
//			
//		alert("document.forms['"+form.name+"'].elements['"+fld.name+"']");
		
		if (require && (fld.type=='checkbox' || fld.type=='radio') && !fld.checked)
			validate = 1;
		else
		 if (require && !fld.value.length)
			validate = 1;
		
		if (validate)
		{
			if (this.NotificationDiv)
				this.getObj(this.NotificationDiv).innerHTML += this.RequireMsg.replace('[TITLE]',title)+'<br>';
			else
				this.errMsg += this.RequireMsg.replace('[TITLE]',title)+"\n";
				//alert(this.RequireMsg.replace('[TITLE]',title));			
				
			if (errcssclass)
				fld.className=errcssclass;
			//fld.focus();
			return false;
		}
		
		if (mask && fld.value.length)
		{
				var re = new RegExp(mask);				
//				alert(fld.title +':'+fld.value+' = '+re+' = '+ re.test(fld.value));
//				return false;
				if (fld.value.search(re)==-1)
				{
					if (this.NotificationDiv)
						this.getObj(this.NotificationDiv).innerHTML += this.FormatMsg.replace('[TITLE]',title)+"<br>";
					else
						this.errMsg += this.FormatMsg.replace('[TITLE]',title)+"\n";
						//alert(this.FormatMsg.replace('[TITLE]',title));
						
					if (errcssclass)
						fld.className=errcssclass;
					fld.focus();
					return false;
				}
				else
				if (cssclass)
					fld.className=cssclass;
		}
		if(fld.className==errcssclass)
			fld.className='';
		return true;
	}