function FormValidator()

{

	this.strAlert = "";

	this.valid = true;

	this.headAlert = "The form can not be submitted because it is not properly filled.\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 "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 "IsASTPhone"		:	{	cond = IsASTPhone(val); break;	}

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

			case "IsPostCode"		:	{	cond = IsPostCode(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 "IsValidImage"		:	{	cond = IsValidImage(val); break;	}

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

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

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

		}

		if(!cond) break;

	}

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

}



//Validation Rules Functions

function IsValidImage(val) //Checkes whether the image that is about to be uploaded is JPG, JPEG, GIF OR PNG

{

	var image_ext;

	if(val!='')

	{

		if(val.lastIndexOf('.')==-1)

			return false

		

		image_ext=val.substring(val.lastIndexOf('.')+1,val.length).toLowerCase();

		if(image_ext!='jpg' && image_ext!='jpeg' && image_ext!='png' && image_ext!='gif')

			return false;

		else

			return true;

	}

	else

		return true;

}



function IsColor(val)

{

	var validChar = '0123456789ABCDEF';

	var status = true;

	var i; 

	color = val.toUpperCase();

	

	if(color!="")

	{	

		if(color.charAt(0)=="#")

		{

			if(color.length==7)

			{

				// Check for legal characters in string

				for (i = 1; i < 7; i++ )

				{

					if(validChar.indexOf(color.charAt(i)) < 0)

						status = false;

				}

			}

			else

				status = false;

		}

	}

	else

		status = false;

	

	return status;	

}



function IsSelected(val) 

{

	return (val != "0");

}



function IsNotEmpty(val) 

{

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

}



function IsEmail(val) 

{

	return (!IsNotEmpty(val) || !(val.indexOf('@')<0 || val.indexOf('.')<0))

}

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 IsAreaCode(val) 

{	

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

	var status = true;

	

	if(matchArr == null && IsNotEmpty(val))

		status = false;

	

	return status;

}



function IsASTPhone(val) 

{	

	var matchArr = val.match(/^\d{8}$/);

	var status = true;

	

	if(matchArr == null && IsNotEmpty(val))

		status = false;

	

	return status;

}



function IsPostCode(val) 

{	

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

	var status = true;

	

	if(matchArr == null && IsNotEmpty(val))

		status = false;

	

	return status;

}



function IsNumber(val) 

{

	return (!(isNaN(val)));

}



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 && trim(val)!="http://")

	{

		var matchArr = val.match(/^(http|https|ftp):\/\/[\w\W]+$/); 

		if(matchArr == 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))>0)

				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;

}



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

// 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)

{

	fv = new FormValidator();

	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";

}