  // ------------------------------------------------------------------------------------------------------------------------------------------------------
  var modCode="formasst",modName="Form Assistant",modVers="1.70",modDCRN="©1999-2006 Oakley Graphic Productions, Inc. All rights reserved."
  // ------------------------------------------------------------------------------------------------------------------------------------------------------
  if(top.modx==null){top.modx=new Array()}if(top.modn==null){top.modn=new Array()}if(top.modc==null){top.modc=new Array()}top.modx[top.modx.length]=modCode+modVers;top.modn[top.modn.length]=modName+" r"+modVers;top.modc[top.modc.length]=modDCRN
  function ckMod(mod,ver){if(mod!=null&&top.modx!=null){if(ver==null){var ver=0,loc=0,ck1=0,ck2=0;for(var i=mod.length-1;i>0;i--){if(!isNaN(mod.charAt(i))&&mod.charAt(i)!=" "&&!ck2){loc=i;ck1=1}else if(ck1&&!ck2){loc--;ck2=1}}ver=mod.substring(loc-1,mod.length);mod=mod.substring(0,loc-1)}for(var i=0;i<top.modx.length;i++){if(mod==top.modx[i].substring(0,loc-1)){if(Math.floor(parseFloat(ver))==Math.floor(parseFloat(top.modx[i].substring(loc-1,top.modx[i].length)))&&parseFloat(ver)<=parseFloat(top.modx[i].substring(loc-1,top.modx[i].length))){return i}}}}return -1}


  // convert to standard letters in str -------------------------
  function fmtStandard(str){
    if(str==null){var str=""}else{str=str.toString()}if(str!=""){
      str=str.replace(/[ÀÁÂÃÄÅ]/g,"A").replace(/[àáâãäåª]/g,"a").replace(/[Æ]/g,"AE").replace(/[æ]/g,"ae").replace(/[ß]/g,"B")
      str=str.replace(/[Ç]/g,"C").replace(/[ç]/g,"c").replace(/[Ð]/g,"D").replace(/[ð]/g,"d").replace(/[ÈÉÊË€]/g,"E").replace(/[èéêë]/g,"e")
      str=str.replace(/[ƒ]/g,"f").replace(/[ÌÍÎÏ]/g,"I").replace(/[ìíîï]/g,"i").replace(/[Ñ]/g,"N").replace(/[ñ]/g,"n")
      str=str.replace(/[ÒÓÔÕÖØ]/g,"O").replace(/[òóôõöø]/g,"o").replace(/[Œ]/g,"OE").replace(/[œ]/g,"oe").replace(/[Š§]/g,"S").replace(/[š]/g,"s")
      str=str.replace(/[ÙÚÛÜ]/g,"U").replace(/[ùúûüµ]/g,"u").replace(/[ÝŸ]/g,"Y").replace(/[ýÿ]/g,"y").replace(/[Ž]/g,"Z").replace(/[ž]/g,"z")
      str=str.replace(/[\–\—]+/g,"-").replace(/\./g,". ").replace(/\s+/g," ")
    }
    return str
  }

  // convert to sentence case in str ----------------------------
  // make each sentance start with a capital & end with puncuation.
  // #word = #Word

  function fmtSentenceCase(str){
    if(str==null){var str=""}else{str=fmtStandard(str).substring(0,1).toUpperCase()+str.substring(1,str.length)}
    return str
  }

  // convert to title case in str -------------------------------
  function fmtTitleCase(str){ 
    if(str==null){var str=""}else{str=fmtStandard(str)}if(str!=""){
      var exStr="a%an%and%at%by%else%for%from%if%in%of%off%on%out%over%the%then%to%up%when",ckStr=(exStr).split("%"),wrd=str.toLowerCase().split(/\s/);str=""
      for(var i=0;i<wrd.length;i++){var exw=0;for(var e=1;e<ckStr.length;e++){if(wrd[i]==ckStr[e]){exw=1}}if(isRoman(wrd[i])){str+=wrd[i].toUpperCase()}else if(wrd[i]==wrd[i].toLowerCase()&&(i==0||exw==0)){str+=wrd[i].substring(0,1).toUpperCase()+wrd[i].substring(1,wrd[i].length)}else{str+=wrd[i]}if(i<wrd.length-1){str+=" "}}
    }
    return str
  }


  // convert to proper name in str ------------------------------
  // remove .  setup titles ie Dr Sr Jr...






  // Trim leading/trailing spaces in str ------------------------
  function trim(str){ 
    if(str==null){var str=""}else{str=str.toString().replace(/^\s+/,"").replace(/\s+$/,"")}
    return str
  } 

  // Strip str2/spaces from str1 --------------------------------
  function strip(str1,str2){
    if(str1==null){var str1=""}else{str1=str1.toString()}if(str1!=""){
      if(str2==null){var str2="\\s"}else{str2=str2.toString();for(var i=0;i<str2.length;i++){if((/[^\w\\]/).test(str2.charAt(i))){str2=str2.substring(0,i)+"\\"+str2.substring(i,str2.length);i++}}}
      str2=eval("/"+str2.toString()+"/g");str1=str1.replace(str2,"")
    }
    return str1
  }


  // ------------------------------------------------------------


  // Int'l Phone format -----------------------------------------
  // +Ctry (NDD)Area-Prefix-Number
  // +???# (??#)???#-????##-??###

  // US Sample:
  // +1 (1)732-892-8948

  // Australia Sample:
  // +61 (0)2-9602-6966


  // Local Phone format -----------------------------------------
  // need to strip last idc used.

  // Area-Prefix-Number
  // ???#-????##-??###

  // US Sample:
  // 732-892-8948

  // Australia Sample:
  // 02-9602-6966



  function fmtPhone(str,ctry,fmt){var diso="us",idc="",idx="",ndd="",ndx="",cac="",cax="" // deflt iso ctry code | intl dialing code |X| natl direct dialing |X| city area code |X|
    if(str==null){var str=""}else{str=fmtStandard(str).replace(/[abc]/gi,2).replace(/[def]/gi,3).replace(/[ghi]/gi,4).replace(/[jkl]/gi,5).replace(/[mno]/gi,6).replace(/[pqrs]/gi,7).replace(/[tuv]/gi,8).replace(/[wxyz]/gi,9).replace(/[\]\]\)\>\.\s]+/g,"-").replace(/[^\+\d\-]/g,"")}if(str!=""){
      if(ctry==null){var ctry=diso}else{ctry=ctry.toLowerCase()}if(fmt==null){var fmt=(str.charAt(0)=="+"||ctry!=diso)?2:0}else{fmt=(isNaN(parseInt(fmt)))?((str.charAt(0)=="+"||ctry!=diso)?1:0):((parseInt(fmt)<0)?0:((parseInt(fmt)>3)?3:parseInt(fmt)))}str=str.replace(/\+/g,"")

      if(ctry=="ad"){idc="376";ndd="";cac=""}if(ctry=="ae"){idc="971";ndd="";cac=""}if(ctry=="af"){idc="93";ndd="0";cac=""}if(ctry=="ag"){idc="1";ndd="1";cac="268"}if(ctry=="ai"){idc="1";ndd="1";cac="264"}if(ctry=="al"){idc="355";ndd="0";cac=""}if(ctry=="am"){idc="374";ndd="8";cac=""}
      if(ctry=="an"){idc="599";ndd="0";cac=""}if(ctry=="ao"){idc="244";ndd="0";cac=""}if(ctry=="aq"){idc="672";ndd="";cac=""}if(ctry=="ar"){idc="54";ndd="0";cac=""}if(ctry=="as"){idc="1";ndd="";cac="684"}if(ctry=="at"){idc="43";ndd="0";cac=""}if(ctry=="au"){idc="61";ndd="0";cac=""}
      if(ctry=="aw"){idc="297";ndd="";cac=""}if(ctry=="az"){idc="994";ndd="8";cac=""}if(ctry=="ba"){idc="387";ndd="0";cac=""}if(ctry=="bb"){idc="1";ndd="1";cac="246"}if(ctry=="bd"){idc="880";ndd="0";cac=""}if(ctry=="be"){idc="32";ndd="0";cac=""}if(ctry=="bf"){idc="226";ndd="";cac=""}
      if(ctry=="bg"){idc="359";ndd="0";cac=""}if(ctry=="bh"){idc="973";ndd="";cac=""}if(ctry=="bi"){idc="257";ndd="";cac=""}if(ctry=="bj"){idc="229";ndd="";cac=""}if(ctry=="bm"){idc="1";ndd="1";cac="441"}if(ctry=="bn"){idc="673";ndd="0";cac=""}if(ctry=="bo"){idc="591";ndd="10,011,012,013";cac=""}
      if(ctry=="br"){idc="55";ndd="014,015,021,023,031,0";cac=""}if(ctry=="bs"){idc="1";ndd="1";cac="242"}if(ctry=="bt"){idc="975";ndd="";cac=""}if(ctry=="bw"){idc="267";ndd="";cac=""}if(ctry=="by"){idc="375";ndd="8";cac=""}if(ctry=="bz"){idc="501";ndd="0";cac=""}
      if(ctry=="ca"){idc="1";ndd="1";cac=""}if(ctry=="cc"){idc="61";ndd="0";cac=""}if(ctry=="cf"){idc="236";ndd="";cac=""}if(ctry=="cg"){idc="242";ndd="";cac=""}if(ctry=="ch"){idc="41";ndd="0";cac=""}if(ctry=="ci"){idc="225";ndd="0";cac=""}if(ctry=="ck"){idc="682";ndd="0";cac=""}
      if(ctry=="cl"){idc="56";ndd="0";cac=""}if(ctry=="cm"){idc="237";ndd="";cac=""}if(ctry=="cn"){idc="86";ndd="0";cac=""}if(ctry=="co"){idc="57";ndd="09,07,05";cac=""}if(ctry=="cr"){idc="506";ndd="";cac=""}if(ctry=="cs"){idc="381";ndd="0";cac=""}if(ctry=="cu"){idc="53";ndd="0";cac=""}
      if(ctry=="cv"){idc="238";ndd="";cac=""}if(ctry=="cx"){idc="61";ndd="0";cac=""}if(ctry=="cy"){idc="357";ndd="";cac=""}if(ctry=="cz"){idc="420";ndd="0";cac=""}if(ctry=="de"){idc="49";ndd="0";cac=""}if(ctry=="dj"){idc="253";ndd="";cac=""}if(ctry=="dk"){idc="45";ndd="";cac=""}
      if(ctry=="dm"){idc="1";ndd="1";cac="767"}if(ctry=="do"){idc="1";ndd="1";cac="809"}if(ctry=="dz"){idc="213";ndd="7";cac=""}if(ctry=="ec"){idc="593";ndd="0";cac=""}if(ctry=="ee"){idc="372";ndd="0";cac=""}if(ctry=="eg"){idc="20";ndd="0";cac=""}if(ctry=="eh"){idc="685";ndd="";cac=""}
      if(ctry=="er"){idc="291";ndd="0";cac=""}if(ctry=="es"){idc="34";ndd="";cac=""}if(ctry=="et"){idc="251";ndd="0";cac=""}if(ctry=="fi"){idc="358";ndd="0";cac=""}if(ctry=="fj"){idc="679";ndd="";cac=""}if(ctry=="fk"){idc="500";ndd="";cac=""}if(ctry=="fm"){idc="1";ndd="1";cac="691"}
      if(ctry=="fo"){idc="298";ndd="";cac=""}if(ctry=="fr"){idc="33";ndd="0";cac=""}if(ctry=="ga"){idc="241";ndd="";cac=""}if(ctry=="gb"){idc="44";ndd="0";cac=""}if(ctry=="gd"){idc="1";ndd="1";cac="473"}if(ctry=="ge"){idc="995";ndd="8";cac=""}if(ctry=="gf"){idc="594";ndd="";cac=""}
      if(ctry=="gh"){idc="233";ndd="";cac=""}if(ctry=="gi"){idc="350";ndd="";cac=""}if(ctry=="gl"){idc="299";ndd="";cac=""}if(ctry=="gm"){idc="220";ndd="";cac=""}if(ctry=="gn"){idc="224";ndd="0";cac=""}if(ctry=="gp"){idc="590";ndd="";cac=""}if(ctry=="gq"){idc="240";ndd="";cac=""}
      if(ctry=="gr"){idc="30";ndd="";cac=""}if(ctry=="gt"){idc="502";ndd="0";cac=""}if(ctry=="gu"){idc="1";ndd="1";cac="671"}if(ctry=="gw"){idc="245";ndd="";cac=""}if(ctry=="gy"){idc="592";ndd="0";cac=""}if(ctry=="hk"){idc="852";ndd="";cac=""}if(ctry=="hn"){idc="504";ndd="0";cac=""}
      if(ctry=="hr"){idc="385";ndd="0";cac=""}if(ctry=="ht"){idc="509";ndd="0";cac=""}if(ctry=="hu"){idc="36";ndd="6";cac=""}if(ctry=="id"){idc="62";ndd="0";cac=""}if(ctry=="ie"){idc="353";ndd="0";cac=""}if(ctry=="il"){idc="972";ndd="0";cac=""}if(ctry=="in"){idc="91";ndd="0";cac=""}
      if(ctry=="io"){idc="246";ndd="";cac=""}if(ctry=="iq"){idc="964";ndd="0";cac=""}if(ctry=="ir"){idc="98";ndd="0";cac=""}if(ctry=="is"){idc="354";ndd="0";cac=""}if(ctry=="it"){idc="39";ndd="";cac=""}if(ctry=="jm"){idc="1";ndd="1";cac="876"}if(ctry=="jo"){idc="962";ndd="0";cac=""}
      if(ctry=="jp"){idc="81";ndd="0";cac=""}if(ctry=="ke"){idc="254";ndd="0";cac=""}if(ctry=="kg"){idc="996";ndd="0";cac=""}if(ctry=="kh"){idc="855";ndd="0";cac=""}if(ctry=="ki"){idc="686";ndd="0";cac=""}if(ctry=="km"){idc="269";ndd="";cac=""}if(ctry=="kn"){idc="1";ndd="1";cac="869"}
      if(ctry=="kp"){idc="850";ndd="0";cac=""}if(ctry=="kr"){idc="82";ndd="0, 082";cac=""}if(ctry=="kw"){idc="965";ndd="0";cac=""}if(ctry=="ky"){idc="1";ndd="1";cac="345"}if(ctry=="kz"){idc="7";ndd="8";cac=""}if(ctry=="la"){idc="856";ndd="0";cac=""}if(ctry=="lb"){idc="961";ndd="0";cac=""}
      if(ctry=="lc"){idc="1";ndd="1";cac="758"}if(ctry=="li"){idc="423";ndd="";cac=""}if(ctry=="lk"){idc="94";ndd="0";cac=""}if(ctry=="lr"){idc="231";ndd="22";cac=""}if(ctry=="ls"){idc="266";ndd="0";cac=""}if(ctry=="lt"){idc="370";ndd="8";cac=""}if(ctry=="lu"){idc="352";ndd="";cac=""}
      if(ctry=="lv"){idc="371";ndd="8";cac=""}if(ctry=="ly"){idc="218";ndd="0";cac=""}if(ctry=="ma"){idc="212";ndd="";cac=""}if(ctry=="mc"){idc="377";ndd="0";cac=""}if(ctry=="md"){idc="373";ndd="8";cac=""}if(ctry=="mg"){idc="261";ndd="0";cac=""}if(ctry=="mi"){idc="1";ndd="1";cac="808"}
      if(ctry=="mk"){idc="389";ndd="0";cac=""}if(ctry=="ml"){idc="223";ndd="0";cac=""}if(ctry=="mm"){idc="95";ndd="";cac=""}if(ctry=="mn"){idc="976";ndd="0";cac=""}if(ctry=="mo"){idc="853";ndd="0";cac=""}if(ctry=="mp"){idc="1";ndd="1";cac="670"}if(ctry=="mq"){idc="596";ndd="0";cac=""}
      if(ctry=="mr"){idc="222";ndd="0";cac=""}if(ctry=="ms"){idc="1";ndd="1";cac="664"}if(ctry=="mt"){idc="356";ndd="0";cac=""}if(ctry=="mu"){idc="230";ndd="0";cac=""}if(ctry=="mv"){idc="960";ndd="0";cac=""}if(ctry=="mw"){idc="265";ndd="";cac=""}if(ctry=="mx"){idc="52";ndd="1";cac=""}
      if(ctry=="my"){idc="60";ndd="0";cac=""}if(ctry=="mz"){idc="258";ndd="0";cac=""}if(ctry=="na"){idc="264";ndd="0";cac=""}if(ctry=="nc"){idc="687";ndd="1";cac=""}if(ctry=="ne"){idc="227";ndd="0";cac=""}if(ctry=="nf"){idc="672";ndd="0";cac=""}if(ctry=="ng"){idc="234";ndd="0";cac=""}
      if(ctry=="ni"){idc="505";ndd="0";cac=""}if(ctry=="nl"){idc="31";ndd="0";cac=""}if(ctry=="no"){idc="47";ndd="";cac=""}if(ctry=="np"){idc="977";ndd="0";cac=""}if(ctry=="nr"){idc="674";ndd="0";cac=""}if(ctry=="nu"){idc="683";ndd="0";cac=""}if(ctry=="nz"){idc="64";ndd="0";cac=""}
      if(ctry=="om"){idc="968";ndd="0";cac=""}if(ctry=="pa"){idc="507";ndd="0";cac=""}if(ctry=="pe"){idc="51";ndd="0";cac=""}if(ctry=="pf"){idc="689";ndd="";cac=""}if(ctry=="pg"){idc="675";ndd="";cac=""}if(ctry=="ph"){idc="63";ndd="0";cac=""}if(ctry=="pk"){idc="92";ndd="0";cac=""}
      if(ctry=="pl"){idc="48";ndd="0";cac=""}if(ctry=="pm"){idc="508";ndd="0";cac=""}if(ctry=="pr"){idc="1";ndd="1";cac="787, 939"}if(ctry=="ps"){idc="970";ndd="0";cac=""}if(ctry=="pt"){idc="351";ndd="";cac=""}if(ctry=="pt"){idc="351";ndd="";cac=""}if(ctry=="pw"){idc="1";ndd="";cac="680"}
      if(ctry=="py"){idc="595";ndd="0";cac=""}if(ctry=="qa"){idc="974";ndd="0";cac=""}if(ctry=="re"){idc="262";ndd="0";cac=""}if(ctry=="ro"){idc="40";ndd="0";cac=""}if(ctry=="ru"){idc="7";ndd="8,0";cac=""}if(ctry=="rw"){idc="250";ndd="0";cac=""}if(ctry=="sa"){idc="966";ndd="0";cac=""}
      if(ctry=="sb"){idc="677";ndd="";cac=""}if(ctry=="sc"){idc="248";ndd="0";cac=""}if(ctry=="sd"){idc="249";ndd="0";cac=""}if(ctry=="se"){idc="46";ndd="0";cac=""}if(ctry=="sg"){idc="65";ndd="";cac=""}if(ctry=="sh"){idc="290";ndd="";cac=""}if(ctry=="si"){idc="386";ndd="0";cac=""}
      if(ctry=="sk"){idc="421";ndd="0";cac=""}if(ctry=="sl"){idc="232";ndd="0";cac=""}if(ctry=="sm"){idc="378";ndd="0";cac=""}if(ctry=="sn"){idc="221";ndd="0";cac=""}if(ctry=="so"){idc="252";ndd="";cac=""}if(ctry=="sr"){idc="597";ndd="";cac=""}if(ctry=="st"){idc="239";ndd="0";cac=""}
      if(ctry=="sv"){idc="503";ndd="";cac=""}if(ctry=="sy"){idc="963";ndd="0";cac=""}if(ctry=="sz"){idc="268";ndd="";cac=""}if(ctry=="tc"){idc="1";ndd="1";cac="649"}if(ctry=="td"){idc="235";ndd="";cac=""}if(ctry=="tg"){idc="228";ndd="";cac=""}if(ctry=="th"){idc="66";ndd="0";cac=""}
      if(ctry=="tj"){idc="992";ndd="8";cac=""}if(ctry=="tk"){idc="690";ndd="";cac=""}if(ctry=="tl"){idc="670";ndd="";cac=""}if(ctry=="tm"){idc="993";ndd="8";cac=""}if(ctry=="tn"){idc="216";ndd="0";cac=""}if(ctry=="to"){idc="676";ndd="";cac=""}if(ctry=="tr"){idc="90";ndd="0";cac=""}
      if(ctry=="tt"){idc="1";ndd="1";cac="868"}if(ctry=="tv"){idc="688";ndd="";cac=""}if(ctry=="tw"){idc="886";ndd="";cac=""}if(ctry=="tz"){idc="255";ndd="0";cac=""}if(ctry=="ua"){idc="380";ndd="8";cac=""}if(ctry=="ug"){idc="256";ndd="0";cac=""}if(ctry=="us"){idc="1";ndd="1";cac=""}
      if(ctry=="uy"){idc="598";ndd="0";cac=""}if(ctry=="uz"){idc="998";ndd="8";cac=""}if(ctry=="va"){idc="39";ndd="";cac=""}if(ctry=="vc"){idc="1";ndd="1";cac="784"}if(ctry=="ve"){idc="58";ndd="01,0";cac="02,07,10,11,14,19,23,33,50,99"}if(ctry=="vg"){idc="1";ndd="";cac="284"}
      if(ctry=="vg"){idc="1";ndd="";cac="284"}if(ctry=="vi"){idc="1";ndd="1";cac="340"}if(ctry=="vn"){idc="84";ndd="0";cac=""}if(ctry=="vu"){idc="678";ndd="";cac=""}if(ctry=="wf"){idc="808";ndd="";cac=""}if(ctry=="ye"){idc="967";ndd="0";cac=""}if(ctry=="yt"){idc="269";ndd="";cac=""}
      if(ctry=="za"){idc="27";ndd="0";cac=""}if(ctry=="zm"){idc="260";ndd="0";cac=""}if(ctry=="zr"){idc="243";ndd="";cac=""}if(ctry=="zw"){idc="263";ndd="0";cac=""}

      idc=idc.split(",");ndd=ndd.split(",");cac=cac.split(",")

      for(var i=0;i<ndd.length;i++){if(idc[i]==str.substring(0,idc[i].length)){str=str.substring(idc[i].length,str.length).replace(/^\-+/,"")}if(idc[i]!=""){idx="+"+idc[i]+" "}}
      for(var i=0;i<ndd.length;i++){if(ndd[i]==str.substring(0,ndd[i].length)){str=str.substring(ndd[i].length,str.length).replace(/^\-+/,"")}if(ndd[i]!=""){ndx="("+ndd[i]+")"}}
      for(var i=0;i<ndd.length;i++){if(cac[i]==str.substring(0,cac[i].length)){str=str.substring(cac[i].length,str.length).replace(/^\-+/,"")}if(cac[i]!=""){cax="" +cac[i]+"-"}}
    }
    return ((fmt==3)?idx+ndx:((fmt==2)?idx:((fmt==1)?ndx:"")))+cax+str
  }

  // Check if valid Phone Number --------------------------------
  function isValidPhone(str){ //  -- returns true/false
    var val=false;
    if(str==null){var str=""}if(str!=""){
      if((/^(\+\d{1,4} )?(\(\d{1,4}\))?(\d{1,5})-(\d{2,7})-(\d{3,7})$/).test(str.substring(0,str.length))){val=true}
    }
    return val
  }


  // ------------------------------------------------------------


  // format CreditCard Number -----------------------------------
  function fmtCCNum(str){
    if(str==null){return ""}else{str=str.toString()}var tmp=""
    for(var i=0;i<str.length;i++){if(isNaN(str.charAt(i))||str.charAt(i)==" "){str=str.substring(0,i)+str.substring(i+1,str.length);i--}}
    if(str.length>0){tmp+=str.substring(0,4)}if(str.length>4){tmp+="-"+str.substring(4,8)}if(str.length>8){tmp+="-"+str.substring(8,12)}if(str.length>12){tmp+="-"+str.substring(12,20)}return tmp
  }



  // Check if valid CreditCard Number ---------------------------
  var tstCC=0
  function isValidCC(typ,num){ // -- returns true/false
    var val=false;
    if(typ==null){var typ=""}
    if(num==null){var num=""}
    if(typ!=""&&num!=""){
      typ=typ.toString().toLowerCase()

      if(typ=="ae"||typ.indexOf("amer")>-1){if(isCCAE(num)){val=true}}
      if(typ=="dc"||typ.indexOf("disc")>-1){if(isCCDC(num)){val=true}}
      if(typ=="nc"||typ.indexOf("novu")>-1){if(isCCNC(num)){val=true}}
      if(typ=="mc"||typ.indexOf("mast")>-1){if(isCCMC(num)){val=true}}
      if(typ=="vc"||typ.indexOf("visa")>-1){if(isCCVC(num)){val=true}}
    }
    return val
  }

  // Check if is AmericanExpress Creditcard ---------------------
  function isCCAE(num){
    var val=false;if(num==null){var num=""}num=((/^\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,4}$/).test(num.toString()))?num.toString().replace(/[\s\-]/g,""):"";
    if((tstCC||num!="340000000000009")&&num.length==15&&parseFloat(num.charAt(0))==3&&(parseFloat(num.charAt(1))==4||parseFloat(num.charAt(1))==7)){val=doLMT(num)}return val
  }

  // Check if is Discover/NOVUS Creditcard ----------------------
  function isCCDC(num){
    var val=false;if(num==null){var num=""}num=((/^\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,4}$/).test(num.toString()))?num.toString().replace(/[\s\-]/g,""):"";
    if((tstCC||num!="6011000000000004")&&num.length==16&&parseFloat(num.substring(0,4))==6011){val=doLMT(num)}return val
  }

  // Check if is MasterCard Creditcard --------------------------
  function isCCMC(num){
    var val=false;if(num==null){var num=""}num=((/^\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,4}$/).test(num.toString()))?num.toString().replace(/[\s\-]/g,""):"";
    if((tstCC||num!="5500000000000004")&&num.length==16&&parseFloat(num.charAt(0))==5&&parseFloat(num.charAt(1))>0&&parseFloat(num.charAt(1))<6){val=doLMT(num)}return val
  }

  // Check if is VISA Creditcard --------------------------------
  function isCCVC(num){
    var val=false;if(num==null){var num=""}num=((/^\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,4}$/).test(num.toString()))?num.toString().replace(/[\s\-]/g,""):"";
    if((tstCC||num!="4111111111111111")&&(num.length==16||num.length==13)&&parseFloat(num.charAt(0))==4){val=doLMT(num)}return val
  }

  // Luhn Mod-10 test -------------------------------------------
  function doLMT(num){
    var val=false;if(num==null){var num=""}num=((/^\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{2,4}$/).test(num.toString()))?num.toString().replace(/[\s\-]/g,""):"";
    if(num.length>12&&num.length<17&&(tstCC||num!="")){var dgt=0,tmp=0,sum=0,mlt=1;for(var i=0; i<num.length;i++){dgt=num.substring(num.length-i-1,num.length-i);tmp=parseInt(dgt,10)*mlt;if(tmp>=10){sum+=(tmp%10)+1}else{sum+=tmp}if(mlt==1){mlt++}else{mlt--}}if((sum%10)==0){val=true}}return val
  }


  // ------------------------------------------------------------


  // format US Zipcode ------------------------------------------
  function fmtUSZip(str){
    if(str==null){var str=""}str=str.toString().replace(/\D/g,"");
    if(str.length==9){str=str.substring(0,5)+"-"+str.substring(5,10)}else{str=str.substring(0,5)}
    return str
  }

  // Check if is valid US Zipcode -------------------------------
  function isUSZip(sta,str){ // -- [3 dig zip test] returns true/false
    var val=false;if(sta==null){var sta=""}if(str==null){var str=""}
    sta=sta.toString().toLowerCase();str=str.toString().replace(/\D/g,"");

    if(str.length==5||str.length==9){
      var num=parseInt(str.substring(0,3),10)

      if(sta=="ny"&&(num==4||(num>=100&&num<=149))){val=true}
      if(sta=="pr"&&((num>=6&&num<=7)||num==9)){val=true}
      if(sta=="ma"&&((num>=10&&num<=26)||num==55)){val=true}
      if(sta=="ri"&&((num>=27&&num<=29))){val=true}
      if(sta=="nh"&&((num>=30&&num<=34)||num==38||num==39)){val=true}
      if(sta=="vt"&&((num>=35&&num<=37)||(num>=50&&num<=54)||(num>=57&&num<=59))){val=true}
      if(sta=="me"&&((num>=40&&num<=49))){val=true}
      if(sta=="ct"&&((num>=60&&num<=69))){val=true}
      if(sta=="nj"&&((num>=70&&num<=89))){val=true}
      if(sta=="ae"&&((num>=90&&num<=98))){val=true}
      if(sta=="pa"&&((num>=150&&num<=196))){val=true}
      if(sta=="de"&&((num>=197&&num<=199))){val=true}
      if(sta=="dc"&&(num==200||(num>=202&&num<=205))){val=true}
      if(sta=="va"&&(num==201||(num>=220&&num<=245))){val=true}
      if(sta=="md"&&((num>=206&&num<=219)||num==267)){val=true}
      if(sta=="wv"&&((num>=246&&num<=266)||num==268)){val=true}
      if(sta=="nc"&&((num>=270&&num<=289)||num==297)){val=true}
      if(sta=="sc"&&((num>=290&&num<=296))){val=true}
      if(sta=="ga"&&((num>=298&&num<=306)||(num>=308&&num<=319)||num==4)){val=true}
      if(sta=="tn"&&(num==307||(num>=370&&num<=386)||num==723)){val=true}
      if(sta=="fl"&&((num>=320&&num<=399)||(num>=341&&num<=342)||num==344||(num>=346&&num<=347)||num==349)){val=true}
      if(sta=="aa"&&(num==33407)){val=true}
      if(sta=="al"&&((num>=350&&num<=368))){val=true}
      if(sta=="ms"&&(num==369||(num>=387&&num<=397))){val=true}
      if(sta=="ky"&&((num>=400&&num<=409)||(num>=411&&num<=423)||(num>=425&&num<=427)||num==471)){val=true}
      if(sta=="oh"&&(num==410||(num>=430&&num<=459)||num==470)){val=true}
      if(sta=="in"&&(num==424||(num>=460&&num<=469)||(num>=472&&num<=479))){val=true}
      if(sta=="mi"&&((num>=480&&num<=499))){val=true}
      if(sta=="ia"&&((num>=500&&num<=514)||(num>=520&&num<=526)||num==528)){val=true}
      if(sta=="ne"&&((num>=515&&num<=516)||(num>=680&&num<=693))){val=true}
      if(sta=="il"&&(num==527||(num>=600&&num<=519)||(num>=623&&num<=629)||(num>=634&&num<=635))){val=true}
      if(sta=="wi"&&((num>=530&&num<=549))){val=true}
      if(sta=="mn"&&((num>=550&&num<=567))){val=true}
      if(sta=="sd"&&((num>=570&&num<=577))){val=true}
      if(sta=="nd"&&((num>=580&&num<=588))){val=true}
      if(sta=="mt"&&((num>=590&&num<=599))){val=true}
      if(sta=="mo"&&(num==620||num==622||(num>=630&&num<=631)||num==633||(num>=636&&num<=693))){val=true}
      if(sta=="ks"&&((num>=660&&num<=679)||num==739)){val=true}
      if(sta=="la"&&((num>=700&&num<=714))){val=true}
      if(sta=="ar"&&((num>=716&&num<=717)||(num>=719&&num<=722)||(num>=724&&num<=729))){val=true}
      if(sta=="tx"&&(num==718||num==733||(num>=750&&num<=799)||num==885)){val=true}
      if(sta=="ok"&&(num==730||num==731||(num>=734&&num<=738)||(num>=740&&num<=749))){val=true}
      if(sta=="co"&&((num>=800&&num<=816))){val=true}
      if(sta=="wy"&&((num>=820&&num<=831))){val=true}
      if(sta=="id"&&((num>=832&&num<=837)||num==979||num==994)){val=true}
      if(sta=="wa"&&(num==838||(num>=980&&num<=985)||(num>=988&&num<=993))){val=true}
      if(sta=="ut"&&((num>=840&&num<=847))){val=true}
      if(sta=="az"&&((num>=850&&num<=864))){val=true}
      if(sta=="nm"&&(num==865||(num>=870&&num<=884))){val=true}
      if(sta=="nv"&&((num>=889&&num<=898)||num==961)){val=true}
      if(sta=="ca"&&((num>=900&&num<=960))){val=true}
      if(sta=="ap"&&((num>=962&&num<=966))){val=true}
      if(sta=="as"&&(num==967)){val=true}
      if(sta=="hi"&&((num>=967&&num<=968))){val=true}
      if((sta=="gu"||sta=="fm"||sta=="mh"||sta=="mp"||sta=="pw")&&(num==969)){val=true}
      if(sta=="or"&&((num>=970&&num<=978)||num==986)){val=true}
      if(sta=="ak"&&((num>=995&&num<=999))){val=true}

    }
    return val
  }

  // format CA Postal Code --------------------------------------
  function fmtCAPostal(str){
    if(str==null){var str=""}
    str=str.toString().toUpperCase().replace(/[\W_]/g,"");
    str=str.substring(0,3)+" "+str.substring(3,6)
    return str
  }

  // Check if is valid CA Postal Code ---------------------------
  function isCAPostal(prv,cty,str){ // -- returns true/false
    var val=false;if(prv==null){var prv=""}if(cty==null){var cty=""}if(str==null){var str=""}
    prv=prv.toString().toLowerCase();cty=cty.toString().toLowerCase();str=str.toString().toLowerCase().replace(/[^a-z\d]/g,"");

    if((/^[abceghjklmnprstvxy]\d[a-z]\d[a-z]\d$/i).test(str)){
      if(prv=="ab"&&str.charAt(0)=="t"){val=true}
      if(prv=="bc"&&str.charAt(0)=="v"){val=true}
      if(prv=="mb"&&str.charAt(0)=="r"){val=true}
      if(prv=="nb"&&str.charAt(0)=="e"){val=true}
      if((prv=="lb"||prv=="nf"||prv=="nl")&&str.charAt(0)=="a"){val=true}
      if((prv=="nt"||prv=="nu")&&str.charAt(0)=="x"){val=true}
      if(prv=="ns"&&str.charAt(0)=="b"){val=true}
      if(prv=="on"&&(str.charAt(0)=="k"||str.charAt(0)=="l"||(cty=="toronto"&&str.charAt(0)=="m")||str.charAt(0)=="n"||str.charAt(0)=="p")){val=true}
      if(prv=="pe"&&str.charAt(0)=="c"){val=true}
      if(prv=="qc"&&(str.charAt(0)=="g"||(cty=="montreal"&&str.charAt(0)=="h")||str.charAt(0)=="j")){val=true}
      if(prv=="sk"&&str.charAt(0)=="s"){val=true}
      if(prv=="yt"&&str.charAt(0)=="y"){val=true}
    }
    return val
  }


  // ------------------------------------------------------------


  // convert to street abreviations in str ----------------------
  function fmtStreetAbbr(str){
    if(str==null){var str=""}if(str!=""){
      str=fmtTitleCase(str);wrd=str.split(/\s/);str=""

      for(var i=0;i<wrd.length;i++){
        tmp=((/[\W\d]+$/).test(wrd[i]))?wrd[i].substring(wrd[i].replace(/[\W\d]+$/,"").length,wrd[i].length):""
        wrd[i]=((/[\W\d]+$/).test(wrd[i]))?wrd[i].replace(/[\W\d]+$/,""):wrd[i]

        wrd[i]=wrd[i].replace(/^(Avenue)|(Ave)$/,"AVE");
        wrd[i]=wrd[i].replace(/^(Boulevard)|(Blvd)$/,"BLVD");
        wrd[i]=wrd[i].replace(/^(Center)|(Ctr)$/,"CTR");
        wrd[i]=wrd[i].replace(/^(Circle)|(Cir)$/,"CIR");
        wrd[i]=wrd[i].replace(/^(Court)|(Ct)$/,"CT");
        wrd[i]=wrd[i].replace(/^(Drive)|(Dr)$/,"DR");
        wrd[i]=wrd[i].replace(/^(Expressway)|(Expy)$/,"EXPY");
        wrd[i]=wrd[i].replace(/^(Heights)|(Hts)$/,"HTS");
        wrd[i]=wrd[i].replace(/^(Highway)|(Hwy)$/,"HWY");
        wrd[i]=wrd[i].replace(/^(Island)|(Is)$/,"IS");
        wrd[i]=wrd[i].replace(/^(Junction)|(Jct)$/,"JCT");
        wrd[i]=wrd[i].replace(/^(Lake)|(Lk)$/,"LK");
        wrd[i]=wrd[i].replace(/^(Lane)|(Ln)$/,"LN");
        wrd[i]=wrd[i].replace(/^(Mountain)|(Mtn)$/,"MTN");
        wrd[i]=wrd[i].replace(/^(Parkway)|(Pkwy)$/,"PKWY");
        wrd[i]=wrd[i].replace(/^(Place)|(Pl)$/,"PL");
        wrd[i]=wrd[i].replace(/^(Plaza)|(Plz)$/,"PLZ");
        wrd[i]=wrd[i].replace(/^(Ridge)|(Rdg)$/,"RDG");
        wrd[i]=wrd[i].replace(/^(Road)|(Rd)$/,"RD");
        wrd[i]=wrd[i].replace(/^(Square)|(Sq)$/,"SQ");
        wrd[i]=wrd[i].replace(/^(Street)|(St)$/,"ST");
        wrd[i]=wrd[i].replace(/^(Station)|(Sta)$/,"STA");
        wrd[i]=wrd[i].replace(/^(Terrace)|(Ter)$/,"TER");
        wrd[i]=wrd[i].replace(/^(Trail)|(Trl)$/,"TRL");
        wrd[i]=wrd[i].replace(/^(Turnpike)|(Tpke)$/,"TPKE");
        wrd[i]=wrd[i].replace(/^(Valley)|(Vly)$/,"VLY");
        wrd[i]=wrd[i].replace(/^(Apartment)|(Apt)$/,"APT");
        wrd[i]=wrd[i].replace(/^(Building)|(Bldg)$/,"BLDG");
        wrd[i]=wrd[i].replace(/^(Room)|(Rm)$/,"RM");
        wrd[i]=wrd[i].replace(/^(Suite)|(Ste)$/,"STE");
        wrd[i]=wrd[i].replace(/^(North)|(N)$/,"N");
        wrd[i]=wrd[i].replace(/^(East)|(E)$/,"E");
        wrd[i]=wrd[i].replace(/^(South)|(S)$/,"S");
        wrd[i]=wrd[i].replace(/^(West)|(W)$/,"W");
        wrd[i]=wrd[i].replace(/^(Northeast)|(N\.E\.)|(Ne)$/,"NE");
        wrd[i]=wrd[i].replace(/^(Northwest)|(N\.W\.)|(Nw)$/,"NW");
        wrd[i]=wrd[i].replace(/^(Southeast)|(S\.E\.)|(Se)$/,"SE");
        wrd[i]=wrd[i].replace(/^(Southwest)|(S\.W\.)|(Sw)$/,"SW");

        str+=wrd[i]+tmp+" "
      }
    }
    return str
  }


  // convert from street abreviations in str --------------------
  function fmtStreetFull(str){
    if(str==null){var str=""}else{str=fmtTitleCase(str)}if(str!=""){
      var wrd=str.split(/\s/),tmp="";str=""

      for(var i=0;i<wrd.length;i++){
        tmp=((/[\W\d]+$/).test(wrd[i]))?wrd[i].substring(wrd[i].replace(/[\W\d]+$/,"").length,wrd[i].length):""
        wrd[i]=((/[\W\d]+$/).test(wrd[i]))?wrd[i].replace(/[\W\d]+$/,""):""

        wrd[i]=wrd[i].replace(/^(AVE)|(Ave)$/,"Avenue");
        wrd[i]=wrd[i].replace(/^(BLVD)|(Blvd)$/,"Boulevard");
        wrd[i]=wrd[i].replace(/^(CTR)|(Ctr)$/,"Center");
        wrd[i]=wrd[i].replace(/^(CIR)|(Cir)$/,"Circle");
        wrd[i]=wrd[i].replace(/^(CT)|(Ct)$/,"Court");
        wrd[i]=wrd[i].replace(/^(DR)|(Dr)$/,"Drive");
        wrd[i]=wrd[i].replace(/^(EXPY)|(Expy)$/,"Expressway");
        wrd[i]=wrd[i].replace(/^(HTS)|(Hts)$/,"Heights");
        wrd[i]=wrd[i].replace(/^(HWY)|(Hwy)$/,"Highway");
        wrd[i]=wrd[i].replace(/^(IS)|(Is)$/,"Island");
        wrd[i]=wrd[i].replace(/^(JCT)|(Jct)$/,"Junction");
        wrd[i]=wrd[i].replace(/^(LK)|(Lk)$/,"Lake");
        wrd[i]=wrd[i].replace(/^(LN)|(Ln)$/,"Lane");
        wrd[i]=wrd[i].replace(/^(MTN)|(Mtn)$/,"Mountain");
        wrd[i]=wrd[i].replace(/^(PKWY)|(Pkwy)$/,"Parkway");
        wrd[i]=wrd[i].replace(/^(PL)|(Pl)$/,"Place");
        wrd[i]=wrd[i].replace(/^(PLZ)|(Plz)$/,"Plaza");
        wrd[i]=wrd[i].replace(/^(RDG)|(Rdg)$/,"Ridge");
        wrd[i]=wrd[i].replace(/^(RD)|(Rd)$/,"Road");
        wrd[i]=wrd[i].replace(/^(SQ)|(Sq)$/,"Square");
        wrd[i]=wrd[i].replace(/^(ST)|(St)$/,"Street");
        wrd[i]=wrd[i].replace(/^(STA)|(Sta)$/,"Station");
        wrd[i]=wrd[i].replace(/^(TER)|(Ter)$/,"Terrace");
        wrd[i]=wrd[i].replace(/^(TRL)|(Trl)$/,"Trail");
        wrd[i]=wrd[i].replace(/^(TPKE)|(Tpke)$/,"Turnpike");
        wrd[i]=wrd[i].replace(/^(VLY)|(Vly)$/,"Valley");
        wrd[i]=wrd[i].replace(/^(APT)|(Apt)$/,"Apartment");
        wrd[i]=wrd[i].replace(/^(BLDG)|(Bldg)$/,"Building");
        wrd[i]=wrd[i].replace(/^(RM)|(Rm)$/,"Room");
        wrd[i]=wrd[i].replace(/^(STE)|(Ste)$/,"Suite");
        wrd[i]=wrd[i].replace(/^N$/,"North");
        wrd[i]=wrd[i].replace(/^E$/,"East");
        wrd[i]=wrd[i].replace(/^S$/,"South");
        wrd[i]=wrd[i].replace(/^W$/,"West");
        wrd[i]=wrd[i].replace(/^(NE)|(N\.E\.)|(Ne)$/,"Northeast");
        wrd[i]=wrd[i].replace(/^(NW)|(N\.W\.)|(Nw)$/,"Northwest");
        wrd[i]=wrd[i].replace(/^(SE)|(S\.E\.)|(Se)$/,"Southeast");
        wrd[i]=wrd[i].replace(/^(SW)|(S\.W\.)|(Sw)$/,"Southwest");

        str+=wrd[i]+tmp+" "
      }
    }
    return str
  }

  // convert to/from street abreviations in str -----------------
  function fmtAddress(str,abr){ // -- converts to/from street abreviations in str
    if(str==null){var str=""}else{str=fmtTitleCase(str)}if(str!=""){
      if(abr==null){var abr=0}else{abr=(isNaN(parseInt(abr)))?0:parseInt(abr)}
      if(abr==0){str=fmtStreetFull(str)}if(abr==1){str=fmtStreetAbbr(str)}
    }
    return str
  }


  // ------------------------------------------------------------


  // Check for Invalid eMail Address
  function isValidEmail(str){ // -- returns true/false
    var val=false;if(str==null){var str=""}else{str=str.replace(/\s/g,"#");str=fmtStandard(str).replace(/\.\s/g,".")}if(str!=""){
      var ddStr ="ac%ad%ae%aero%af%ag%ai%al%am%an%ao%aq%ar%arpa%as%at%au%aw%az%ba%bb%bd%be%bf%bg%bh%bi%biz%bj%bm%bn%bo%b"
          ddStr+="r%bs%bt%bv%bw%by%bz%ca%cc%cd%cf%cg%ch%ci%ck%cl%cm%cn%co%com%coop%cr%cs%cu%cv%cx%cy%cz%de%dj%dk%dm%do%d"
          ddStr+="z%ec%edu%ee%eg%eh%er%es%et%fi%firm%fj%fk%fm%fo%fr%fx%ga%gb%gd%ge%gf%gg%gh%gi%gl%gm%gn%gov%gp%gq%gr%gs%"
          ddStr+="gt%gu%gw%gy%hk%hm%hn%hr%ht%hu%id%ie%il%im%in%info%int%io%iq%ir%is%it%je%jm%jo%jp%ke%kg%kh%ki%km%kn%kp%"
          ddStr+="kr%kw%ky%kz%la%lb%lc%li%lk%lr%ls%lt%lu%lv%ly%ma%mc%md%mg%mh%mil%mk%ml%mm%mn%mo%mp%mq%mr%ms%mt%mu%museu"
          ddStr+="m%mv%mw%mx%my%mz%na%name%nato%nc%ne%net%nf%ng%ni%nl%no%nom%np%nr%nt%nu%nz%om%org%pa%pe%pf%pg%ph%pk%pl%"
          ddStr+="pm%pn%pr%ps%pt%pw%py%qa%re%ro%ru%rw%sa%sb%sc%sd%se%sg%sh%si%sj%sk%sl%sm%sn%so%sr%st%store%su%sv%sy%sz%"
          ddStr+="tc%td%tf%tg%th%tj%tk%tm%tn%to%tp%tr%tt%tv%tw%tz%ua%ug%uk%um%us%uy%uz%va%vc%ve%vg%vi%vn%vu%web%wf%ws%ye"
          ddStr+="%yt%yu%za%zm%zr%zw";var ckStr=(ddStr).split("%")

      if(str.length>5){													// check length
        if((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w+)+$/i).test(str)){							// regExp email validation
          for(var i=1;i<ckStr.length;i++){if(str.substring(str.lastIndexOf(".")+1,str.length)==ckStr[i]){val=true}}	// check the domain suffix
        }
      }

    }
    return val
  }


  // Check for vulgar words (req: encrypto6.js r6.78) ------------
  var vwStr ="111x1QQu2Lx1111xLx1111xn1VnS2LLx1111xn1sopR2L1OuS2Lx1111x1Uu2Lx1111x1sorP2Lx21111x1p1V2Lx1111x1pVuWq2Lx111"
      vwStr+="11xLx1111xnx1111x1Puq2nx1111111x1PnpR2Lx1111x1ponQ2Lx1111x1qUnO2Lx1111x1WpsonV2Lx1111x1soYQ2nx111111111x1q"
      vwStr+="UrRoXTpQ2nx1111xLx111111xn1ps1P2Lnx111x1pRoYuP2n1sWuP2L1pT1Xw2Lx11111x1pT1Xw2Lx111x1uPTrP2nx21111x1pTqUrP2"
      vwStr+="nx21111111111x1wwpTsorP2nx11111111x1PnpR2Lx1111xLx1111xn1wuqnP2L1XUYo2n1tYo2LLx1111xnx1111x1pTuRUWuo2n1sou"
      vwStr+="o2L1XrTo2n1sUrRo2L1sWpS2Lx111111x1PnZ2Lx1111xLx1111xnx11111111xLx21111xn1WpUuO2L1wTTnO2Lx1111x1OuSZuTO2nx1"
      vwStr+="11x1ZuTO2nx111111x1pt2Lx1111xLx11111xnx1111x1PpPWnpO2nx11111111x1WpXwYO2Lx1111x1WpsnpWO2Lx1111x1pVrZ2Lx111"
      vwStr+="x1pVrZwwn2nx11111x1wwn2nx11111111x1RoUYt2Lx111x1RoUYtwwn2nx1111x1wwn2nx1111111xLx111x1Lx1111xn1nXpUYV2LLx1"
      vwStr+="11xn1uSpPUpV2LLx111111xn1nPTprt2LLx1111xn1UuorWnt2LLx11111xn1WpPuS2LLx111x1uTYo2LLx1111xn1norWo2LLx1111111"
      vwStr+="xn1WnRorRo2LLx111111xn1Wnqno2LLx11111xn1uRorO2L1pWuRZ2n1prUppZ2L1tnpWP2Lx111x1qUYR2Lx1111xLx1111111xn1PnZ2"
      vwStr+="L1nUrqny2nx1111xLx1111xnx11111x1WpwYuWX2n1VtnWX2LLx1111xn1XrX2L1pTorXwpX2nx111111xLx11111121111xnx111x1soY"
      vwStr+="w2nx111111x1pt2Lx1111xLx111111xnx1111x11PPYV2Lx11111111x1qUuTRow2nx1111x1qnO2Lx1111xLx1111xnx1111111xLx111"
      vwStr+="11xnx111x1trW2n1sopUPpW2LLx11111xnx11111x1WpsonZ2Lx111x1WpsonZPYV2nx21111xLx11111xn1souTuV2LLx111111xnx111"
      vwStr+="1xnx111111x1sUrV2n1VtrV2L1wrUpV2L1sorP2Lx111111xLx111111xnx111111xnx1111x1pTPppU2nx1111x1QQYt2n1QQYt2L1pTX"
      vwStr+="wrRZ2Lx1111x1pTowYt2Lx1111x1ptsorT2nx11x1sorT2n1psrs2L1twrS2nx1111pS2nx111x1sWpS2n1sWpS2LLx111xn1TTpR2LLx1"
      vwStr+="111xnx111x1PnpR2nx11x1PWnR2nx1111x11WrnR2nx121x1WrnR2nx11111x1VYuWq2n1suuq2L1UtnP2Lx111x1UtnPPuq2nx1111x1p"
      vwStr+="yrq2nx1111x1pyrq2nx1111x1qUnq2nx111111x1pqYQ2nx1111x1qUrWpqUrQ2nx111111111x1XWnQ2n1XuqqnQ2LLx1121xL1qnO2Lx"
      vwStr+="111111xLx1111xnx11211x1prquP2nx11211x1quP2nx11111x11WWpO2Lx111111x11WWpOpTqUrP2nx11111111x1PnpRsorP2nx1111"
      vwStr+="x1sorP2n1UtnP2LLx11111xnx1111xLx111xn1PYWo2L1VnWo2nx11111111xLx1111xnx1111xLx11111xnx1111x1pToWro2nx111x1X"
      vwStr+="XYO2n1XXYO2L1pTuRqUYO2n11XuuO2LLx11111xnx11111x1pYTO2nx1111111x1OuS2Lx1111x1ptpXrO2nx11x1pXrO2n1RoXrO2L1tn"
      vwStr+="To2Lx1111111x1PpWpXwnO2nx111111x1TTnO2nx1111111x1TTnO2nx1111x1wwn2nx1111111x1QQrUw2Lx111x1QQrUwwwn2nx11111"
      vwStr+="x1wwn2nx11111111x1pTuR2Lx111x1pTuRwwn2n1wwn2Lx1nXYV2LLx111111xn1upV2LLx1111111xn1nPWprt2LLx111111xn1Wnpt2L"
      vwStr+="Lx1111111xn1wnPuS2LLx11111xn1wwn2Lx1111xn1uUuo2LLx11111xn1WnqUrRo2LLx1111111xn1uSnWno2LLx11111xn1nqUrV2LLx"
      vwStr+="11111xnx11111xLx111111xnx11111x1XpZ2nx1111x1TTpZ2n1qUrsUnZ2LLx111xnx111111x1XnZX2n1PWYX2L1psnUw2Lx1111111x"
      vwStr+="Lx11111xn1wXrX2LLx111xnx11111111x1wpXwpX2n1WpsonZ1TTnX2L1QQu2Lx1111x1ptsoYw2nx11x1soYw2n1RoXnUw2L1XYTw2nx2"
      vwStr+="1111x1qUrXuuRw2nx1111111x1XrRw2nx111x1tYow2n1tYow2L1tYXuWow2n1ZpWow2L1OuS2Lx111xLx1111111xn1WppYv2L1QppYv2"
      vwStr+="nx111111x1PYV2nx111111111x11wwYV2n1sorWV2LLx111111xn1sonTuV2L1wwrV2L1TroUpV2Lx1111xLx1111xnx11111xnx1111x1"
      vwStr+="TroUpV2n1WpsopV2L1WpqqrU2L1sorP2Lx111111x1pyrP2Lx1111xLx1111xnx1111111x1Xnpt2nx111111x1pyuT2nx111111x1pt2L"
      vwStr+="x1111xLx1111xnx1111x1QQusW";vwStr=decrypt(vwStr)

  function isVulgar(str){ // -- returns true/false
    var xck=(ckMod("encrypto6.78")>-1)?1:0,val=false;
    if(str==null){var str=""}else{str=(" "+fmtStandard(str)+" ").toLowerCase()}if(xck&&str!=""){
      var ckStr=vwStr.split("%");for(var i=0;i<ckStr.length;i++){if(str.indexOf(ckStr[i])>-1){val=true}}
    }
    return val
  }


  // Check if Roman Number ---------------------------------------
  function isRoman(str,idx){ //  -- returns true/false
    var val=false;if(str==null){var str=""}else{str=fmtStandard(str)}if(str!=""){
      if(idx==null){var idx=0}else{idx=(isNaN(parseInt(idx)))?0:parseInt(idx)}
      if((/^(m{1,4})?(c{1,3}|c?d|dc{1,3}|cm)?(x{1,3}|x?l|lx{1,3}|xc)?(i{1,3}|i?v|vi{1,3}|ix)?$/i).test(str.substring(idx,str.length))&&str.length>0){val=true}
    }
    return val
  }

  // convert roman to arabic number -----------------------------
  function getArabic(str){ // -- returns arabic number from roman
    if(str==null){var str=0}else{str=fmtStandard(str).toUpperCase()}if(isRoman(str)){
      var i=0,arbTho=0,arbHnd=0,arbTen=0,arbOne=0

      var rmnTho=new Array("","M","MM","MMM","MMMM")
      var rmnHnd=new Array("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM")
      var rmnTen=new Array("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC")
      var rmnOne=new Array("","I","II","III","IV","V","VI","VII","VIII","IX")

      for(var ii=1;ii<rmnTho.length;ii++){if(str.substring(i,rmnTho[ii].length+i)==rmnTho[ii]){arbTho=ii}}
      i=(rmnTho[arbTho].length>0)?rmnTho[arbTho].length:0

      for(var ii=1;ii<rmnHnd.length;ii++){if(str.substring(i,rmnHnd[ii].length+i)==rmnHnd[ii]){arbHnd=ii}}
      i=(rmnHnd[arbHnd].length>0)?rmnHnd[arbHnd].length:0

      for(var ii=1;ii<rmnTen.length;ii++){if(str.substring(i,rmnTen[ii].length+i)==rmnTen[ii]){arbTen=ii}}
      i=(rmnTen[arbTen].length>0)?rmnTen[arbTen].length:0

      for(var ii=1;ii<rmnOne.length;ii++){if(str.substring(i,rmnOne[ii].length+i)==rmnOne[ii]){arbOne=ii}}
      i=(rmnOne[arbOne].length>0)?rmnOne[arbOne].length:0

      str=Math.ceil(parseFloat(""+arbTho+arbHnd+arbTen+arbOne,10))
    }
    return str
  }










  // **********************************************************************
  // check for functions (to be Obsoletee)
  // **********************************************************************

  // Check for Duplicate String ---------------------------------
  function cfDup(str1,str2,idx){ // -- returns duplicate location of srt1 in str2 or returns -1
    var val=-1;
    if(str1==null){var str1=""}if(str2==null){var str2=""}
    if(idx==null){var idx=0}else{idx=(isNaN(parseInt(idx)))?0:parseInt(idx)}
    if(str1!=""&&str2.length>idx){
      str1=str1.toString();str2=str2.toString()
      val=str2.indexOf(str1,str2.indexOf(str1)+str1.length)
    }
    return val
  }

  // Check for Number -------------------------------------------
  function cfNum(str,idx){ // -- returns first location of num in str or returns -1
    var val=-1;
    if(str==null){var str=""}if(str!=""){
      if(idx==null){var idx=0}else{idx=(isNaN(parseInt(idx)))?0:parseInt(idx)}

      for(var i=idx;i<str.length;i++){
        if(!isNaN(str.toString().charAt(i))&&str.toString().charAt(i)!=" "){val=i;break}
      }
    }
    return val
  }

  // Check for Not a Number -------------------------------------
  function cfNaN(str,idx){ // -- returns location of chr in str or returns -1
    var val=-1;
    if(str==null){var str=""}if(str!=""){
      if(idx==null){var idx=0}else{idx=(isNaN(parseInt(idx)))?0:parseInt(idx)}

      if((/[^\d\+\-\.]/).test(str)){
        for(var i=idx;i<str.length;i++){if((/[^\d\+\-\.]/).test(str.charAt(i))){val=i;break}}
      }
      else{
        if(str.indexOf("..")>-1){val=str.indexOf("..")}if(str.indexOf("-",1)>-1){return str.indexOf("-",1)}
        if(str.indexOf("--")>-1){return str.indexOf("--")}if(str.indexOf("-",1)>-1){return str.indexOf("-",1)}
        if(str.indexOf("++")>-1){return str.indexOf("++")}if(str.indexOf("+",1)>-1){return str.indexOf("+",1)}
      }
    }
    return val
  }

  // Check for Character ----------------------------------------
  function cfChr(str,idx){ // -- returns location of chr in str or returns -1
    var val=-1;if(str==null){var str=""}else{str=str.toString()}if(str!=""){
      if(idx==null){var idx=0}else{idx=(isNaN(parseInt(idx)))?0:parseInt(idx)}
      for(var i=idx;i<str.length;i++){if(isNaN(str.charAt(i))){val=i}}
    }
    return val
  }

  // Check for Invalid Character --------------------------------
  function cfIvC(str,idx){ // -- returns location of chr in str or returns -1
    if(str==null){var str=""}else{str=str.toString()}if(idx==null){var idx=0}else{idx=(idx<1)?0:idx-1}
    var ckStr="0123456789 abcdefghijklmnopqrstuvwxyz'.,/#&";
    if(str.length>0){
      for(var i=idx;i<str.length;i++){
        if(ckStr.indexOf(str.toLowerCase().charAt(i))<0){return i+1}
      }
    }
    return -1
  }

  // Check for Not a Phone Number -------------------------------
  function cfNaP(str,idx){ // -- returns location of chr in str or returns -1
    if(str==null){var str=""}else{str=str.toString()}if(idx==null){var idx=0}else{idx=(idx<1)?0:idx-1}
    if(str.length>0){
      var ckStr="0123456789+-()"
      for(var i=idx;i<str.length;i++){if(ckStr.indexOf(str.charAt(i))<0){return i+1}}
      if(str.indexOf("()")>-1){return str.indexOf("()")+1}
      if(str.indexOf("(")>-1&&str.indexOf(")",str.indexOf("("))<0){return str.indexOf("(")+1}
      if(str.indexOf(")")>-1&&str.indexOf(")",str.indexOf("("))<0){return str.indexOf(")")+1}
      if(str.indexOf("--")>-1){return str.indexOf("--")+1}if(str.charAt(0)=="-"){return 1}
      if(str.indexOf("++")>-1){return str.indexOf("++")+1}if(str.indexOf("+",1)>-1){return str.indexOf("+",1)+1}
    }
    return -1
  }

  // Check for Invalid Character --------------------------------
  function cfIvC(str,idx){ // -- returns location of chr in str or returns -1
    if(str==null){var str=""}else{str=str.toString()}if(idx==null){var idx=0}else{idx=(idx<1)?0:idx-1}
    var ckStr="0123456789 abcdefghijklmnopqrstuvwxyz'.,/#&";
    if(str.length>0){
      for(var i=idx;i<str.length;i++){
        if(ckStr.indexOf(str.toLowerCase().charAt(i))<0){return i+1}
      }
    }
    return -1
  }
