/* FORM FIELDS SUMBIT CHECKER
© 2006 Analytic Soft, www.analytic.com.ua
--------------------------------------------------------------------------------------
Description

STEP1. First form fileds should be registered.
registerFieldChecking([field_name], [check_type], [message], [param1], [param2])
!!!One field CAN be registered twice or more with different value of [check_type]

STEP2. When user submits form we call testFormBeforeSubmit()
--------------------------------------------------------------------------------------
FUNCTION registerFieldChecking([field_name], [check_type], [message], [param1], [param2])
PARAMETERS:
1. [field_name]: input, textarea, checkbox, radiobutton tag attribute NAME
2. [check_type]:
'NOT_EMPTY'  - checks field for not empty.
'MIN_LENGTH' - checks field for minimal length. [param1] is the minimal allowed length.
'MAX_LENGTH' - checks field for minimal length. [param1] is the maximal allowed length.
'EMAIL'      - checks field to be email.
'REGEXP'     - checks field with regexp.
3. [message] - message for alert.
4. [param2]  - reserved.

EXAMPLES:
      registerFieldChecking('NameTxt', 'NOT_EMPTY','??? ??? ?? ?????? ?????','','');
	  registerFieldChecking('NameTxt', 'MIN_LENGTH','??? ???? ?? ???????? ???????? ??? ???????? ??????','3','');
*/
var checkedFormFields= new Array();
function registerFieldChecking(field_name, check_type, message, param1, param2)
{ 
	if (checkedFormFields[field_name]==null) {checkedFormFields[field_name] = new Array();}
	checkedFormFields[field_name][check_type] = new Array(); 
	checkedFormFields[field_name][check_type]["field_name"]	=field_name;
	checkedFormFields[field_name][check_type]["message"]	=message;
	checkedFormFields[field_name][check_type]["param1"]		=param1;
	checkedFormFields[field_name][check_type]["param2"]		=param2;
	checkedFormFields[field_name][check_type]["object"]		=fieldByName(field_name);
	checkedFormFields[field_name][check_type]["param2"]		=param2;

}
	 
var cookiesFields= new Array();
function registerCookieField(field_name, expire)
{ 
	var field	= fieldByName(field_name);
	if (cookiesFields[field_name]==null) {cookiesFields[field_name] = new Array();}
	cookiesFields[field_name]['object']	= field;
	if (expire) cookiesFields[field_name]['expire']	= expire;
	if (field.value) return true; //Already filled
	
	//Read from cookie
	var cookie	= getCookie(field_name);
	if (cookie)	field.value	= cookie;
}

function saveAllCookies()
{
	for (field_name in cookiesFields)
	{
		var field	= cookiesFields[field_name]['object'];
		var expire	= (cookiesFields[field_name]['expire'])? cookiesFields[field_name]['expire'] : false;
		var value	= field.value;
		setCookie(field_name, value, expire); 
	}
}

function fieldByName(field_name)
 {
	return document.getElementsByName(field_name)[0]; 
 }
/*
--------------------------------------------------------------------------------------
FUNCTION testFormBeforeSubmit()
Checks all registered fields

*/ 
	 function testFormBeforeSubmit()
	 { 
	  var field; 
	  for (field in checkedFormFields)
	  {
	    if (!checkField(field)) 
		{ 
			try {event.returnValue	= false;} catch(e) {}
			return false;
		}
	  }
	  saveAllCookies();
	  return true;
	 }
/*
--------------------------------------------------------------------------------------
FUNCTION checkField([field_name])
Checks one field for field with tag attribute NAME=[field_name].
Fuction sets focus to tested field

*/ 

	 function checkField(field_name)
	 {  
	  var check_type;
	  for (check_type in checkedFormFields[field_name])
	  {
	    if (checkedFormFields[field_name][check_type]["object"]) checkedFormFields[field_name][check_type]["object"].focus();
		switch (check_type)
		{
		 case "NOT_EMPTY":
			if (checkedFormFields[field_name][check_type]["object"].value=='') 
			{
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 event.returnValue	= false;
			 return false;
			}
		  break;

		 case "MIN_LENGTH":
			if (checkedFormFields[field_name][check_type]["object"].value.length<checkedFormFields[field_name][check_type]["param1"]) 
			{
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 return false;
			}
		  break;
		 case "MAX_LENGTH":
			if (checkedFormFields[field_name][check_type]["object"].value.length>checkedFormFields[field_name][check_type]["param1"]) 
			{
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 return false;
			}
		  break;
		 case "EMAIL":
			var email_exp=new RegExp("^[a-z0-9_-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$"); 
			if (!checkedFormFields[field_name][check_type]["object"].value.match(email_exp)) 
			{
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 return false;
			}
		  break;
		 case "REGEXP":
			var reg_exp=new RegExp(checkedFormFields[field_name][check_type]["param1"]); 
			if (!checkedFormFields[field_name][check_type]["object"].value.match(reg_exp)) 
			{
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 return false;
			}
		  break;
		 case "GROUP_NOT_EMPTY":
			var field_in_group, field_name_in_group; 
			for(field_name_in_group in checkedFormFields[field_name][check_type]["param1"])
			{ 
				field_in_group = document.getElementsByName(checkedFormFields[field_name][check_type]["param1"][field_name_in_group])[0];

				if (!field_in_group) break;
				if ((field_in_group.type.toLowerCase() == 'checkbox') && field_in_group.checked) return true; //Checked
				if ((field_in_group.type.toLowerCase() != 'checkbox') && (field_in_group.value != '')) return true; //Filled
			}
			 alert(checkedFormFields[field_name][check_type]["message"]);
			 return false;

		  break;
		}
       }
		return true;
	 }
	



//-------------------------------------
// Gets cookie.
function getCookie(name)
{
//	if (document.cookie.length <= 0) return null;	//No cookies found
	var cookie_expr		= new RegExp (name+'=([^;]*)', 'i');
	var cookie_parsed	= document.cookie.match(cookie_expr);
	var cookie_value	= (cookie_parsed)? unescape(cookie_parsed[1]) : null;
	return cookie_value;
}

//-------------------------------------
// Sets cookie.
function setCookie(name, value, expire)
{
	var expire_date		= new Date();
    var cookie_expire	= expire_date.getTime() + Math.round(expire*24*60*60*1000); 
    expire_date.setTime(cookie_expire);
	value				= escape(value);
    document.cookie		= name + "="+value+"; path=/; expires="+expire_date.toGMTString()+";";
		
	return true;
}
