var returnedVariable = true;
var val1;
var val2;
var val3;

//var errorColor = '#C9DD0A';
var errorClass = 'input_error';
//var successColor = '#FFFFFF';
var successClass = 'input_success';

function validate(frm, formArrayRefer) {
   var msg = "";
   var prevElement = "";
   if (typeof(formArrayRefer)!='undefined')
   {
   		formArray = formArrayRefer;
   }
   for(i=0;i<formArray.length;i++) {
	  if(formArray[i].length>=4){
         //val1 = formArray[i][3];
         val1=eval("frm.elements['"+formArray[i][3]+"'].value");
	  }
      if(formArray[i].length>=5)
         val2=eval("frm."+formArray[i][4]+".value");
      if(formArray[i].length>=6)
         val3=formArray[i][5];
	/* Define how to get element:
	    1. As single element
	    2. As array element
	*/
      var result = formArray[i][2].match(/\[\]\[([0-9]+)\]$/i);
      if(result == null)
      {
	      var element = "frm.elements['"+formArray[i][2]+"']";
      }
      else
      {
	      var value = formArray[i][2];
	      var element = "frm.elements['" +value.substr(0,result.index + 2)+ "']" + value.substr(result.index+2,value.length - result.index + 2);
      }
      var val=eval(element+".value");
      eval(""+formArray[i][0]+";");
      var fld = $0(eval(element));
      if(!returnedVariable)
      {
         msg = msg + formArray[i][1]+"\n";
 		 fld.removeClass(successClass).addClass(errorClass);

 		 /*if (fld.get(0).select != undefined)
		 {
		 	fld.get(0).select();
		 }*/

		 if (fld.get(0).tagName.toLowerCase() == 'select'
		 		&& fld.css('display') == 'none'
		 		&& $0('#' + fld.attr('id') + '_input').size() > 0)
		 {
		 	//for customized selects
		 	$0('#' + fld.attr('id') + '_input').removeClass(successClass).addClass(errorClass);
		 }

		 if (fld.get(0).focus != undefined && fld.css('display') != 'none')
		 {
		 	fld.get(0).focus();
		 }
	  } else {
         if (prevElement != formArray[i][2])
         {
            fld.removeClass(errorClass).addClass(successClass);
            if (fld.get(0).tagName.toLowerCase() == 'select'
		 		&& fld.css('display') == 'none'
		 		&& $0('#' + fld.attr('id') + '_input').size() > 0)
			 {
			 	//for customized selects
			 	$0('#' + fld.attr('id') + '_input').removeClass(errorClass).addClass(successClass);
			 }
         }

	  }

	  prevElement = formArray[i][2];
      returnedVariable = true;
   }
   if(msg=="")
      return true;

   alert("The form can not be submitted because it is not properly filled.\n"+msg);
   return false;
}

function isNotEmpty(val)
{
   if (trim(val) == "")
   {
      returnedVariable = false;
      return false;
   }
   return true;
}

function isEmail(val)
{
   var vcTempMsg = true;
   var regExpress = val.match(/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/);
   if (trim(val)!="")
   {
      if (regExpress == null)
      {
         returnedVariable = false;
         vcTempMsg = false;
      }
   }
   return vcTempMsg;
}

function isCCEmail (val) {
   var vcTempMsg = true;
   if (trim(val)!="") {
      aEmails = val.split(",");
      for (var iCountEmails = 0; iCountEmails<aEmails.length; iCountEmails++) {
         if (aEmails[iCountEmails] == "" || !isEmail(aEmails[iCountEmails])) {
            returnedVariable = false;
            vcTempMsg = false;
         }
      }
   }
   return vcTempMsg;
}

function isPhone(val)
{
	var vcTempMsg = true;
	if (trim(val) != '')
	{
		val = val.replace(/\D+/g, '');
		if(!val.match(/\d{5,}/))
		{
			returnedVariable = false;
			vcTempMsg = false;
		}
	}
   	return vcTempMsg;
}

function isZip(val)
{
   var regExpress1 = val.match(/^\d{9}$/);
   var regExpress2 = val.match(/^\d{5,6}$/);
   var regExpress3 = val.match(/^\d{5}-\d{4}$/);
   var regExpress4 = val.match(/^[A-Za-z]\d[A-Za-z] ?\d[A-Za-z]\d$/i); // canadian
   if(trim(val)!="")
   {
      if (regExpress1 == null && regExpress2 == null && regExpress3 == null && regExpress4 == null)
      {
         returnedVariable = false;
         return false;
      }
   }
   return true;
}

function isSSN(val) {
   var regExpress1 = val.match(/^\d{9}$/);
   var regExpress2 = val.match(/^\d{3}-\d{2}-\d{4}$/);
   var vcTempMsg = true;
   if(trim(val)!="")
      if (regExpress1 == null && regExpress2 == null) {
         returnedVariable = false;
         vcTempMsg = false;
      }
   return vcTempMsg;
}

function isCardNumber(val) {
   var regExpress0 = val.match(/^\d{13}$/);
   var regExpress1 = val.match(/^\d{15}$/);
   var regExpress2 = val.match(/^\d{16}$/);
   var vcTempMsg = true;
   if(trim(val)!="")
      if (regExpress0 == null && regExpress1 == null && regExpress2 == null) {
         returnedVariable = false;
         vcTempMsg = false;
      }
   return vcTempMsg;
}

function isCardID(val) {
   var regExpress1 = val.match(/^\d{3}$/);
   var regExpress2 = val.match(/^\d{4}$/);
   var vcTempMsg = true;
   if(trim(val)!="")
      if (regExpress1 == null && regExpress2 == null) {
         returnedVariable = false;
         vcTempMsg = false;
      }
   return vcTempMsg;
}

function isEIN(val) {
   var regExpress1 = val.match(/^\d{9}$/);
   var regExpress2 = val.match(/^\d{2}-\d{7}$/);
   if(trim(val)!="")
      if (regExpress1 == null && regExpress2 == null)
         returnedVariable = false;
}

function isConfirmPassword(val,val1) {
   if(trim(val)!=trim(val1))
      returnedVariable = false;
}

function isConfirmEmail(val,val1) {
   if(trim(val)!=trim(val1))
      returnedVariable = false;
}

//this function requires one date parameter in format mm/dd/yyy
function isValidDate(val) {
   if(trim(val)!="") {
      var valArray = new Array();
      valArray = val.split("/");
      if (valArray.length != 3)
         returnedVariable = false;


      val1 = valArray[0];
      val = valArray[1];
      val2 = valArray[2];
      if (isNaN(val) || val.length > 2 || val.length < 1 || val < 1)
         returnedVariable = false;
      if (isNaN(val1) || val1.length > 2 || val1.length < 1 || val1 < 1 || val1 > 12)
         returnedVariable = false;
      if (isNaN(val2) || val2.length != 4 || val2 < 1)
         returnedVariable = false;


      error = 0;
      day = parseInt(val);
      mnth = parseInt(val1);
      yr = parseInt(val2);

      // mnthArray[0] is january, mnthArray[11] is december
      if (yr % 4 == 0)
         mnthArray = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
      else
         mnthArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

      // netscape/IE number months starting with january = 0
      mnth = mnth-1;
      if(day > parseInt(mnthArray[parseInt(mnth)]))
         returnedVariable = false;
   }
}
function isPercent(val)
{
	if(trim(val).length>0)
	{
		allowed = "0123456789()-,.% ";
		digits = "0123456789";
		numCount=0;
		for(j=0;j<val.length;j++)
		{
			if(allowed.indexOf(val.charAt(j))<0)
				returnedVariable=false;

			if(digits.indexOf(val.charAt(j))>-1)
				numCount++;
		}
		if(returnedVariable && numCount==0)
			returnedVariable=false;
	}
}

function isMoney(val)
{
	if(trim(val).length>0)
	{
		if (!val.match(/^[0-9]+((\.|,)[0-9]{1,2})?$/)) returnedVariable=false;
	}
}

function isNumber(val)
{
	if(trim(val) != '')
	{
		if(isNaN(Number(val)))
			returnedVariable = false;
	}

}


function isPhone3(val,val1,val2)
{
	if(trim(val+val1+val2)!="")
	{
		if(isNaN(val+val1+val2))
			returnedVariable = false;

		if((trim(val+val1+val2)).length<10)
			returnedVariable = false;
	}
}

function isDate(val,val1,val2,require)
{
	if(trim(val+val1+val2) != "")
	{
		if((trim(val+val1+val2)).length!=8 || !trim(val+val1+val2).match(/^[\d]{8}$/))
			returnedVariable = false;
	}
	else
	{
		if(require==1)
			returnedVariable = false;
	}
}

function isBigerNumber(val, val1)
{
	if(trim(val)!="" && trim(val1)!="")
	{
		if(val>val1)
			returnedVariable = false;
	}
	else
	{
		if(trim(val+val1)!="")
			returnedVariable = false;
	}
}

function isLessNumber(val, val1)
{
	if(trim(val)!="" && trim(val1)!="")
	{
		val = Number(val);
		val1 = Number(val1);
		if(val<val1)
			returnedVariable = false;
	}
	else
	{
		if(trim(val+val1)!="")
			returnedVariable = false;
	}
}

function isSelected(val)
{
	if (val == "")
		returnedVariable = false;
}

function isPassword(val) {
   if(val != '' && val.length < 6)
      returnedVariable = false;
}


function isAges(val,val1)
{
	if(!isNaN(val) && val>0)
	{
		var ages = val1.split(",");
		if(ages.length!=val)
			returnedVariable = false;
	}
}

function isCode (val){
   if (val.match(/^[a-z0-9-]+$/) == null)
      returnedVariable = false;
   else
      returnedVariable = true;
}

function isHTTP(val)
{
	if(trim(val).length>0)
	{
		var matchArr = val.match(/^(((http)|(https)|(ftp)):\/\/)?(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)*(\.[A-Z]{2,5}))(:(\d{1,6}))?((\/|\?|#).*)?$/i);
		matchArr = matchArr || val.match(/^(((http)|(https)|(ftp)):\/\/)?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:\d{0,5})?$/i);
		if(matchArr == null)
		{
			returnedVariable = false;
			return false;
		}
	}
	return true;
}

function isDomain(val)
{
	if(trim(val).length>0)
	{
		var matchArr = val.match(/^http:\/\/([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/i);
		if(matchArr == null)
		{
			returnedVariable = false;
			return false;
		}
	}
	return true;
}


function isRelativeUrl(val) {
	if(trim(val).length > 0) {
		returnedVariable = val.substr(0,1)=='/';
	}
}

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