//checkers['email']=Array(Array('^.+$','^[a-z0-9\\_\\-\\.]+\@([a-z0-9\\_\\-]+\.)+[a-z]{2,3}$'),Array('E-mail Address is required','Email is invalid'),Array());
//checkers['displayname']=Array(Array('^.+$'),Array('Display Name is required'),Array());

function check_form_fields(form,arr,efield/*optional*/,setloc/*optional*/)
{
	var str=new String();
	var isChecked;
	var re;
	var o=new Object();

	for (k in arr)
	{
		if(k=='name' || k=='caller') continue;
		if(!form.elements[k]) continue;
		
			isChecked=false;
			for(j=0;j<arr[k][0].length;j++)
			{
				re=new RegExp(arr[k][0][j],'m');
				if(!form.elements[k].value.match(re))
				{
					str+='<li>'+arr[k][1][j]+'</li>';
					if(arr.caller) arr.caller(form.elements[k],false);
					isChecked=true;
					break;
				}
			}
			if(!isChecked)
			{
				for(j=0;j<arr[k][2].length;j++)
				{
					if((ret=arr[k][2][j](form.elements[k])))
					{
						str+='<li>'+ret+'</li>';
						if(arr.caller) arr.caller(form.elements[k],false);
						break;
					}
				}
			}
	}
	if(str.length>0 && efield)
	{
		efield.style.display='';
		efield.innerHTML=str;
		if(setloc) location.href=setloc;
	}
	return str;
}

function get_function_body(str)
{
	str=new String(str);
	return str.substring(str.indexOf("{")+1,str.lastIndexOf("}"));
}

function form_check_field(obj,check)
{
	if(obj && check[obj.id])
	{
		var chk=check[obj.id];
		var re;
		var val=new String();
		switch(obj.type)
		{
			case 'select-one':
				if(obj.selectedIndex>=0)
				val=obj.options[obj.selectedIndex].value;
			break;
			default:
				val=obj.value;
			break;
		}
		for(j=0;j<chk[0].length;j++)
		{
			re=new RegExp(chk[0][j]);
			if(!val.match(re))
			{
				check.caller(obj,false);
				return;
			}
		}
		for(j=0;j<chk[2].length;j++)
		{
			if(chk[2][j](obj))
			{
				check.caller(obj,false);
				return;
			}
		}
		check.caller(obj,true);
	}
}

function call_all_checkers(checkers,form)
{
	for (k in checkers)
	{
		if(form.elements[k]) 
		{
			form_check_field(form.elements[k],checkers);
		}
	}
}

function set_form_checkers(checkers,form)
{
	var obj;
	for (k in checkers)
	{
		if(form.elements[k])
		{
			obj=form.elements[k];
			switch(obj.type)
			{
				case 'select-one':
					if(obj.onchange)
   						obj.onchange=new Function(get_function_body(obj.onchange.valueOf())+'form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
   				else 
   						obj.onchange=new Function('form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
					break;
				default:
					
					if(obj.onkeyup)
   					obj.onkeyup=new Function(get_function_body(obj.onkeyup.valueOf())+'form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
   				else 
   					obj.onkeyup=new Function('form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
   		
   				if(obj.onblur)
   						obj.onblur=new Function(get_function_body(obj.onblur.valueOf())+'form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
   				else 
   						obj.onblur=new Function('form_check_field(this,'+checkers.name+','+checkers.caller.name+');');
					break;
			}
		}
	}
}