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

function validate(frm, formArrayRefer, fromRefer) {	
   var msg = "";
   var prevElement = "";
   var prevArray = [];
   
   try {
	   document.getElementById( '__SSM_FORM_INVALID' ).value = 0;
   }
   catch ( e ){}   
   
   if (typeof(formArray)=='undefined' && typeof(formArrayRefer)!='undefined')
   {
   		formArray = formArrayRefer;
   }
	if(fromRefer && typeof(formArrayRefer)!='undefined')
	{
		//remeber array
		prevArray = formArray; 
		formArray = formArrayRefer;
	}
   
   for(i=0;i<formArray.length;i++)
   {
	   /* 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 = eval("frm.elements['"+formArray[i][2]+"']");
	   }
	   else
	   {
		   var value = formArray[i][2];
		   var element = eval("frm.elements['" +value.substr(0,result.index + 2)+ "']" + value.substr(result.index+2,value.length - result.index + 2));
	   }
	   $0(element).removeClass("fieldOK fieldError");
   }
   for(i=0;i<formArray.length;i++)
   {
	  if(formArray[i].length>=4)
	  {
         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]+";");
      if(!returnedVariable) {
         msg = msg + formArray[i][1]+"\n";
		 eval('$0('+element+').removeClass("fieldOK").addClass("fieldError")');
		 eval("if ("+element+".select != undefined) "+element+".select()");
		 eval(element+".focus()");
	  } else {
		 if (prevElement != formArray[i][2])
         {
        	  eval('if (!$0('+element+').hasClass("fieldError")) $0('+element+').addClass("fieldOK")');
         }
	  }

	  prevElement = formArray[i][2];
      returnedVariable = true;
   }
	if(fromRefer && typeof(formArrayRefer)!='undefined')
	{
		//restore array
		formArray = prevArray; 
	}
   if(msg=="")
      return true;

   alert("The form can not be submitted because it is not properly filled.\n"+msg);
   
   try {
	   var hidden = document.getElementById( '__SSM_FORM_INVALID' );
	   hidden.value = 1;
   }
   catch ( e ){
	   var hidden = document.createElement('INPUT');
	   hidden.id = '__SSM_FORM_INVALID';
	   hidden.value = 1;
	   $0( hidden ).attr( 'type', 'hidden' );
	   frm.appendChild( hidden );  
   }
   
   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)
{
	//the phone is correct if it contains at least 5 digits in it
	returnedVariable = true;
	if(trim(val)!="")
	{
		if (!trim(val).match(/(\d[^\d]*){5,}/g))  
		{
			returnedVariable = false;
		}
	}
	return returnedVariable;
}

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

/**
	expects date in yyyy-mm-dd
*/
function isValidMySQLDate(val)
{
	returnedVariable = true;
	if (val !='')
	{
		if (val.match(/^[\d]{4}\-[\d]{2}\-[\d]{2}$/))
		{
			var arr = val.split("-");
			isValidDate(arr[1] + "/" + arr[2] + '/' + arr[0]);
		}
		else
		{
			returnedVariable = false;
		}
	}
}

//this function requires one date parameter in format mm/dd/yyy
function isValidDate(val) {
   returnedVariable = true;
   if(trim(val)!="") {
      var valArray = new Array();
      valArray = val.split("/");
      if (valArray.length != 3)
         returnedVariable = false;
      
      val1 = valArray[0];//m
      val = valArray[1];//d
      val2 = valArray[2];//y
            
      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,10);
      mnth = parseInt(val1,10);
      yr = parseInt(val2,10);

      var febdays = (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0) ? 29 : 28;
      // mnthArray[0] is january, mnthArray[11] is december
         mnthArray = new Array(31,febdays,31,30,31,30,31,31,30,31,30,31);
      // netscape/IE number months starting with january = 0
      mnth = mnth-1;
      if((parseInt(mnth, 10) > 11) || (day > parseInt(mnthArray[parseInt(mnth, 10)], 10)))
      {
    	  returnedVariable = false;
      }
   }
   
   return returnedVariable;
}

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) != "")
	{
		var m = parseInt(val1, 10);
		var d = parseInt(val, 10);
		var y = parseInt(val2, 10);

		var febdays = (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) ? 29 : 28;
		var arr = [31,febdays,31,30,31,30,31,31,30,31,30,31];

		if((trim(val+val1+val2)).length!=8 || !trim(val+val1+val2).match(/^[\d]{8}$/)
		|| d > arr[m-1])
		{
			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, '');
}

