function FormValidator(language)

{

	this.strAlert = "";

	this.valid = true;

	if(typeof (language)== 'string' && language =='spanish')

		this.headAlert = "Los datos no pueden ser ahorrados porque el formulario no fue completada correctamente.\n"

	else

		this.headAlert = "The form can not be submitted because it is not properly filled out.\n"		

	this.Check=Check;

	this.Set=Set;

}



function Set(msg)

{

	this.strAlert += "- " + msg+"\n";

	this.valid = false;

}



function Check(val,rule,msg)

{

	var cond = true;

	aRule = rule.split(",");



	for(var i=0; i<aRule.length; i++) {

		switch(aRule[i])

		{

		    case "IsConCheck"	:	{	cond = IsConCheck(); break;		}

		    case "IsConSelect"	:	{	cond = IsConSelect(val); break;		}

				case "IsEmail"		:	{	cond = IsEmail(val); break;		}

				case "IsNotEmpty"	:	{	cond = IsNotEmpty(val);	break;	}

				case "IsNumber"		:	{	cond = IsNumber(val);break;		}

				case "IsWeekdayNumber"	:	{	cond = IsWeekdayNumber(val);break;		}

				case "IsSSN"		:	{	cond = IsSSN(val); break;		}

				case "IsTime"		:	{	cond = IsTime(val); break;		}

				case "IsDate"		:	{	cond = IsDate(val); break;		}

				case "IsUSPhone"	:	{	cond = IsUSPhone(val); break;	}

				case "IsHTTP"		:	{	cond = IsHTTP(val); break;	}

				case "IsMoney"		:	{	cond = IsMoney(val); break;	}

				case "IsIP"			:	{	cond = IsIP(val); break;	}

				case "IsPercent"	:	{	cond = IsPercent(val); break;	}

				case "IsSelected"	:	{	cond = IsSelected(val); break;	}

				case "IsLen3"		:	{	cond = IsLen3(val); break;	}

				case "IsLen4"		:	{	cond = IsLen4(val); break;	}

				case "IsLen5"		:	{	cond = IsLen5(val); break;	}

				case "IsHttpFree"	:	{	cond = IsHttpFree(val); break;	}
				
				case "IsOneHundred"	:	{	cond = IsOneHundred(val); break;	}

				default				:	{	cond = eval(aRule[i]); break; }

		}

		if(!cond) break;

	}

	if(!cond) this.Set(msg);

}



//Validation Rules Functions

function IsConCheck()

{	

	var status = true;

	if((document.forms[0].years_registered.value!=0)&&(!document.forms[0].domain_registered.checked)){   

	    status = false;

	 }

	return status;	

}



function IsConSelect(val)

{	

	var status = true;

	if((val==0)&&(document.forms[0].domain_registered.checked)){   

	    status = false;

	 }

	return status;	

}



function IsNotEmpty(val) 

{

	return (trim(val) != "");

}

function IsOneHundred(val) 

{ 

	if (val != "100")
		return false;
	else
		return true;

}

function IsSelected(val) 

{ 

	return (val != "0");

}


function IsSelected2(val) 

{ 

	return (val != "");

}



function IsEmail(val) 

{

	if (trim(val) != "")

	{

		var matchArr1 = val.match(/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/);

		var matchArr2 = val.match(/^[a-zA-Z0-9._%-]+@{1}(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/);

	

		return (!matchArr1 && matchArr2);

	}

	return true;	

}

function IsUSPhone(val) 

{

		var matchArr2 = val.match(/^\d{10}$/);

		var matchArr3 = val.match(/^(\d{3})\-\d{3}-\d{4}$/);

		var status = true;

	

	if (matchArr2 == null && matchArr3 == null && IsNotEmpty(val)) 

		status = false;

		return status;

	

}



function IsNumber(val) 

{

	return (!(isNaN(val)));

}



function IsChecked(val) 

{

	if(val.checked)

	{

		return true;

	}

	else

	{alert('You must confirm that this loan is for the borrower');return false; }

}



function IsCO_Checked(val) 

{

	if(val.checked)

	{

		return true;

	}

	else

	{alert('Please make sure to enter the Co-Borrower\'s SSN');return false; }

}



function IsLen2(val) 

{

	if(val!="")

		if(val.length<2)

			return false;

	return true;	

}



function IsLen3(val) 

{

	if(val!="")

		if(val.length<3)

			return false;

	return true;	

}



function IsLen4(val) 

{

	if(val!="")

		if(val.length<4)

			return false;

	return true;	

}



function IsLen5(val) 

{

	if(val!="")

		if(val.length<5)

			return false;

	return true;	

}





function IsWeekdayNumber(val)

{

	return (!(isNaN(val)) && (val==1 || val==2 || val==3 || val==4 || val==5 || val==6 || val==7));

}



function IsHTTP(val)

{	

	var status = true;

	if(trim(val).length>0)

	{

		if (val.substr(val.length-1) != "/") val = val + "/";

		var matchAddr = val.match(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\//i)

		if (matchAddr == null)

			status = false;

	}

	return status;	

}

function IsIP(val)

{	

	var status = true;

	var matchArr = val.match(/[^0-9\.]$/gi); 

	if(matchArr != null)

		status = false;

	return status;	

}



function IsMoney(val)

{

	valid = true;

	if(trim(val).length>0)

	{

		allowed = "0123456789()-,.$ ";

		digits = "0123456789";

		numCount=0;

		for(i=0;i<val.length;i++)

		{

			if(allowed.indexOf(val.charAt(i))<0)

				valid=false;

			if(digits.indexOf(val.charAt(i))>-1)

				numCount++;	

		}

		if(valid && numCount==0)

			valid=false;

	}		

	return valid;

}



function IsPercent(val)

{

	valid = true;

	if(trim(val).length>0)

	{

		allowed = "0123456789()-,.% ";

		digits = "0123456789";

		numCount=0;

		for(i=0;i<val.length;i++)

		{

			if(allowed.indexOf(val.charAt(i))<0)

				valid=false;

			if(digits.indexOf(val.charAt(i))>-1)

				numCount++;	

		}

		if(valid && numCount==0)

			valid=false;

	}		

	return valid;

}



function IsDate(val)

{	//SMENI za proverka na tochen datum

	var status = true;

	if(trim(val).length>0)

	{

	var matchArr = val.match(/^\d{1,2}\s\w{3}\s\d{4}$/); //local settings neutral format (dd Mon yyyy h:m)

	if(matchArr == null)

		status = false;

	}

	return status;	

}



function IsTime(val)

{

	var status = true;

	if(val.indexOf(':')<0)

		status = false;

	else

	{

		 digits = new Array();

		 digits = val.split(":");

		 if(!(digits[0]>=0 && digits[0]<=23))

		 	status = false;

		if(!(digits[1]>=0 && digits[1]<=59))		

		 	status = false;

	}	 

	return status;

}



function IsSSN(val) 

{		

	var status = true;

	if(trim(val).length>0)

	{

		var matchArr = val.match(/^(\d{3})-?\d{2}-?\d{4}$/);

		var numDashes = val.split('-').length - 1;

		if (matchArr == null || numDashes == 1) 

		{

			status = false;

		}

		else 

			if (parseInt(matchArr[1],10)==0) 

			{

				status = false;

			}

	}

	return status;

}



function IsHttpFree(val)

{

	if(trim(val).length>0)

	{	

		val = val.replace(/\n/g, '');

		var matchArr = val.match(/^(.*)(http:\/\/|HTTP:\/\/|href|HREF|<img|<IMG|<a|<A|&lt;img|&lt;IMG|&lt;a|&lt;A)(.*)$/);

		if(matchArr != null)

			return false;	

	}	

	return true;

}

// ******************************************************************

// TASK: Validates the Form fields which definitions are entered in the vArray field

// PARAMETERS:

// frm - form object pointer

// vArray (external Validation array) - contains one array element per form field in the following format: fName, vRule, vMsg

function validate(frm,language)

{

	fv = new FormValidator(language);

	for(var i=0;i<vArray.length;i++)

	{

		strEval = "frm." + vArray[i][0] + ".value";

		fv.Check(eval(strEval), vArray[i][1],vArray[i][2]);  

	}

	if(!fv.valid)

		alert(fv.headAlert + fv.strAlert);

	return fv.valid;

}

// ******************************************************************

//Formatting input Functions

function trim(str)

{

		 return str.replace(/^\s+/g, '').replace(/\s+$/g, '');

}





// ******************************************************************

// TASK: create local settings neutral format (dd Mon yyyy h:m)

// PARAMETERS:

// strType - create Date only="d"; create Time only="t"; create All=""

function setDate(frmElement,strType,m,d,h,n)

{ 

	nameElement = frmElement.name;

	dayElement = "d"+nameElement;

	monElement = "m"+nameElement;

	yrElement = "y"+nameElement;

	hrElement = "h"+nameElement;

	minElement = "n"+nameElement;

	frm = frmElement.form;

	frmElement.value = "";



	if (strType!="t")

	{	

		dayEval = "strDay=frm."+dayElement+".options[frm."+dayElement+".selectedIndex].value;"

		monEval = "strMon=frm."+monElement+".options[frm."+monElement+".selectedIndex].value;"

		yrEval = "strYr=frm."+yrElement+".options[frm."+yrElement+".selectedIndex].value;"

		eval(dayEval);

		eval(monEval);

		eval(yrEval);

		var monthAbrv = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

		frmElement.value = strDay+" "+monthAbrv[strMon-1]+" "+strYr;

		

	}

	if (strType!="d")

	{

		hrEval = "strHr=frm."+hrElement+".options[frm."+hrElement+".selectedIndex].value;"

		minEval = "strMin=frm."+minElement+".options[frm."+minElement+".selectedIndex].value;"

		eval(hrEval);

		eval(minEval);

		frmElement.value = frmElement.value+" "+strHr+":"+strMin;

	}

	else frmElement.value = frmElement.value+" 0:0";

}