/*
  
 ,    ,
     GN_CheckFields
: GN_CheckFields[_]=[_,_,  ,0|1];
    1 - ,    ,    -  
 :
not_empty -    ( )
nums_only -  
phone -     (, , , )
email -   e-mail
*/

var GN_ErrorTemplateEmpty=" \"%err_title%\"    !";
var GN_ErrorTemplateNums="  \"%err_title%\"    !";
var GN_ErrorTemplateEmail="  \"%err_title%\"   e-mail!";
var GN_ErrorTemplatePhone="  \"%err_title%\"    , ,   !";
var GN_ErrorTemplateAtLeastOneField="     \"%err_title%\"   !";

var GN_ShowErrors=true;
/* ******************************** */

Function.prototype.isFunction=true;

function GN_Error(obj,err_title,err_template)
{
	//if(!err_template) err_template=GN_ErrorTemplateEmpty;
	if(GN_ShowErrors)
	{
		alert(err_template.replace("%err_title%",err_title));
		if (obj) obj.focus();
	}
}

function GN_Check_not_empty(obj,err_title)
{
	if(obj.value.length==0)
	{
		GN_Error(obj,err_title,GN_ErrorTemplateEmpty);
		return false;
	}
	return true;
}

function GN_Check_email(obj,err_title)
{
	if(GN_Check_not_empty(obj,err_title))
	{
		var re=new RegExp("^[\\w\\.\\-]+\\@[\\w\\.]+\\.[A-Za-z]{2,4}$");
		var re2=new RegExp("\\.{2,}");
		if(re.test(obj.value) && !re2.test(obj.value)){return true;}
		else{GN_Error(obj,err_title,GN_ErrorTemplateEmail);}
	}
	return false;
}

function GN_Check_nums_only(obj,err_title)
{
	if(GN_Check_not_empty(obj,err_title))
	{
		var re=new RegExp("[^0-9]+");
		if(!re.test(obj.value)){return true;}
		else{GN_Error(obj,err_title,GN_ErrorTemplateNums);}
	}
	return false;
}

function GN_Check_phone(obj,err_title)
{
	if(GN_Check_not_empty(obj,err_title))
	{
		var re=new RegExp("[^0-9\\s\\,\\-]+");
		if(!re.test(obj.value)){return true;}
		else{GN_Error(obj,err_title,GN_ErrorTemplatePhone);}
	}
	return false;
}

function GN_Check_length_exact(obj,err_title,ln)
{
	if(GN_Check_not_empty(obj,err_title))
	{
		if(obj.value.length==ln){return true;}
		GN_Error(obj,err_title,"  \"%err_title%\"   "+ln+" !");
	}
	return false;
}

function GN_Check_length(obj,err_title,ln)
{
	ln=Math.abs(ln);
	if(GN_Check_not_empty(obj,err_title))
	{
		if(obj.value.length>=ln){return true;}
		GN_Error(obj,err_title,"  \"%err_title%\"     "+ln+" !");
	}
	return false;
}

function GN_CheckForm()
{
	
	var GN_Obj;
	var GN_Err=0;
	var GN_FieldRef;
	var GN_Func;
	var GN_FieldName;
	
	//   
	for(var GN_Field in GN_CheckFields)
	{
		if(!GN_CheckUnit(GN_Field,GN_CheckFields[GN_Field])) return false;
	}	
	
	
	//    
	GN_ShowErrors=false; //   
	var GN_CheckMe=[];
	
	//  ,    
	for(var GN_One in GN_OneInList)
	{
		for(GN_Field in GN_OneInList[GN_One])
		{
			if(GN_Check_not_empty(GN_FormReference[GN_Field]))
			{
				GN_CheckMe[GN_CheckMe.length]=GN_Field;
				//alert(GN_Field+" filled");
			}
		}
		
		GN_ShowErrors=true;
		
		if(GN_CheckMe.length) //   
		{
			for(var i=0;i<GN_CheckMe.length;i++)
			{
				if(!GN_CheckUnit(GN_CheckMe[i],GN_OneInList[GN_One][GN_CheckMe[i]]))
				{
					return false;
				}
			}
		}
		else //    
		{
			var GN_TextFields=[];
			for(GN_Field in GN_OneInList[GN_One])
			{
				GN_TextFields[GN_TextFields.length]=GN_OneInList[GN_One][GN_Field][0];
			}
			
			alert("     - "+GN_TextFields.join(", ")+" -   ");
			return false;
		}
		
	}
	
	return true;
}

function GN_CheckUnit(GN_Field,GN_FieldRef)
{
	//var GN_FieldRef=GN_CheckFields[GN_Field];
	if(GN_FormReference[GN_Field]!=null)
	{
		var GN_Obj=GN_FormReference[GN_Field];
		if((GN_FieldRef[3]==1 && GN_Obj.value.length>0) || !GN_FieldRef[3])
		{
			//check length
			if(GN_FieldRef[2] && (GN_FieldRef[2]>0 && !GN_Check_length_exact(GN_Obj,GN_FieldRef[0],GN_FieldRef[2])) || (GN_FieldRef[2]<0 && !GN_Check_length(GN_Obj,GN_FieldRef[0],GN_FieldRef[2]))) return false;
			
			//perform check
			if(!GN_FieldRef[1]) GN_FieldRef[1]="not_empty";
			var GN_Func=eval("GN_Check_"+GN_FieldRef[1]);
			if(GN_Func.isFunction && !GN_Func(GN_Obj,GN_FieldRef[0])) return false;
		}
	}
	
	return true;
}

