function checkRule(element,rule)
{var rule=rule.split('|');var rulename=rule[0];switch(rulename)
{case'blank':return element.value.length>0;break;case'length':if(rule[1]>0&&rule[2]>0)
{return element.value.length>=rule[1]&&element.value.length<=rule[2];}
else if(rule[1]>0)
{return element.value.length>=rule[1];}
else return false;break;case'email':var level=(rule[1]==undefined)?2:rule[1];var emailpatterns=[/.+@.+\..+$/i,/^\w.+@\w.+\.[a-z]+$/i,/^\w[-_a-zA-Z0-9~.]+@\w[-_a-zA-Z0-9~.]+\.[a-zA-Z]{2}[a-zA-Z]*$/i,/^\w[\w\d]+(\.[\w\d]+)*@\w[\w\d]+(\.[\w\d]+)*\.[a-z]{2,7}$/i];return emailpatterns[level].test(element.value);break;case'equalto':var otherElem=eval('document.'+formname+'.'+rule[1]);return element.value==otherElem.value;break;case'number':var type=rule[1]==undefined?0:rule[1];var num=(type==0)?parseInt(element.value,10):parseFloat(element.value);var fail=Boolean(isNaN(num)||num!=element.value);if(!fail)
{switch(true)
{case rule[2]!=undefined&&rule[2].length>0&&rule[3]!=undefined&&rule[3].length>0:fail=!Boolean(rule[2]<=num&&num<=rule[3]);break;case rule[2]!=undefined&&rule[2].length>0:fail=Boolean(num<rule[2]);break;case rule[3]!=undefined&&rule[3].length>0:fail=Boolean(num>rule[3]);break;}}
if(fail)return false;else return true;break;case'numeric':var len=rule[1]==undefined?'*':rule[1];var regex=new RegExp((len=='*')?"^[0-9]+$":"^[0-9]{"+parseInt(len,10)+"}[0-9]*$");return regex.test(element.value);break;case'alnum':var len=rule[1]==undefined?'*':rule[1];var elmtcase=rule[2]==undefined?'A':rule[2];var numbers=rule[3]==undefined?0:rule[3];var spaces=rule[4]==undefined?0:rule[4];var accents=rule[5]==undefined?0:rule[5];var puncs=rule[6]==undefined?'*':rule[6];var okChars='';switch(elmtcase.toUpperCase())
{case'U':if(accents==true)okChars+='A-ZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜÅÆÇÐØß';else okChars+='A-Z';break;case'L':if(accents==true)okChars+='a-zàèìòùáéíóúýâêîôûãñõäëïöüÿåæçðøß';else okChars+='a-z';break;case'C':if(accents==true)okChars+='A-ZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜÅÆÇÐØß][a-zàèìòùáéíóúýâêîôûãñõäëïöüÿåæçðøßA-ZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜÅÆÇÐØ';else okChars+='A-Z][a-z';len--;break;default:if(accents==true)okChars+='a-zàèìòùáéíóúýâêîôûãñõäëïöüÿåæçðøßA-ZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜÅÆÇÐØß';else okChars+='a-zA-Z';break;}
if(numbers==true)okChars+="0-9";if(spaces==true)okChars+=" ";var length=(len!="*")?"{"+len+",}":"+";if(puncs=='*')okChars+="!\"#$%&\'*+,-./:;=?@\\^_`|~()";else if(puncs!=false)
{puncs=puncs.replace("pipe","|");okChars+=puncs;}
var regex=new RegExp("^["+okChars+"]"+length+"$");return regex.test(element.value);break;case'decimal':var llen=rule[1]==undefined?'*':rule[1];var rlen=rule[2]==undefined?'*':rule[2];var regex='';if(llen=='0'&&rlen!='*')regex="^\\.[0-9]{"+parseInt(rlen,10)+"}$";else if(llen=='*'&&rlen=='*')regex="^[0-9]+\\.[0-9]+$";else if(llen=='*')regex="^[0-9]*\\.[0-9]{"+parseInt(rlen,10)+"}$";else if(rlen=='*')regex="^[0-9]{"+parseInt(llen,10)+"}\\.[0-9]+$";else regex="^[0-9]{"+parseInt(llen,10)+"}\\.[0-9]{"+parseInt(rlen,10)+"}$";regex=new RegExp(regex);return regex.test(element.value);break;case'url':regex=new RegExp("^http[s]*:\/\/([a-zA-z0-9\/\._-]+)$");return regex.test(element.value);break;case'dynamicurl':regex=new RegExp("^http[s]*:\/\/([a-zA-z0-9\/\._?&=+%-]+)$");return regex.test(element.value);break;case'phone':var digits="0123456789";var phoneNumberDelimiters="()- ";var validWorldPhoneChars=phoneNumberDelimiters+"+";var minDigitsInIPhoneNumber=10;s=phoneTestItemStripCharsInBag(element.value,validWorldPhoneChars);return(phoneTestItemIsInteger(s)&&s.length>=minDigitsInIPhoneNumber);break;case'regex':regex=new RegExp(rule[1]);return regex.test(element.value);break;case'contain':var test=false;for(var i=1;i<rule.length;i++){if(element.value.indexOf(rule[i])!=-1){test=true;}}
return test;break;default:return false;}}
function phoneTestItemIsInteger(s)
{var i;for(i=0;i<s.length;i++)
{var c=s.charAt(i);if(((c<"0")||(c>"9")))return false;}
return true;}
function phoneTestItemStripCharsInBag(s,bag)
{var i;var returnString="";for(i=0;i<s.length;i++)
{var c=s.charAt(i);if(bag.indexOf(c)==-1)returnString+=c;}
return returnString;}
