{"version":3,"sources":["nmchat.util.js","nmchat.template.js","jquery.elephant.js","jquery.validate.js"],"names":["star","score","containerID","i","s","images","document","getElementById","getElementsByTagName","length","className","NM","rating","setRatingValue","window","$","undefined","defaults","key","params","elephFns","form","formData","save","localStorage","setItem","JSON","stringify","load","parse","getItem","each","Object","keys","defaultValues","storeData","box","this","label","attr","is","values","push","val","siblings","value","find","filter","prop","fn","elephant","extend","on","jQuery","factory","define","amd","validate","options","debug","console","warn","validator","data","settings","onsubmit","event","submitHandler","submitButton","target","hasClass","cancelSubmit","handle","hidden","result","name","appendTo","currentForm","call","remove","preventDefault","pendingRequest","formSubmitted","focusInvalid","valid","errorList","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","normalizeRule","messages","split","index","method","removeAttr","normalizeRules","classRules","attributeRules","dataRules","required","remote","expr","blank","a","trim","filled","unchecked","init","format","source","arguments","args","makeArray","unshift","apply","constructor","Array","slice","n","replace","RegExp","groups","errorClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","excludedKeys","which","elementValue","inArray","keyCode","lastElement","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","email","url","date","dateISO","number","digits","creditcard","equalTo","maxlength","minlength","rangelength","range","max","min","autoCreateRanges","prototype","delegate","eventType","labelContainer","errorContext","containers","add","valueCache","pending","invalid","reset","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","check","cleanElement","clean","checkElement","validationTargetFor","prepareElement","numberOfInvalids","toHide","errors","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","objectLength","obj","count","not","text","addWrapper","hide","size","findLastActive","focus","trigger","e","rulesCache","error","selector","join","toShow","$element","validity","badInput","rule","rulesCount","map","dependencyMismatch","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","toLowerCase","customMessage","m","String","findDefined","defaultMessage","title","theregex","test","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","group","errorID","elementID","idOrName","describedBy","html","wrap","append","errorPlacement","insertAfter","parents","match","testgroup","describer","getLength","nodeName","depend","dependTypes","boolean","string","function","startRequest","stopRequest","submit","previousValue","old","destroy","off","classRuleSettings","addClassRules","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","isFunction","parts","isArray","transformed","addMethod","Date","toString","cDigit","nCheck","nDigit","bEven","parseInt","previous","originalMessage","ajax","mode","port","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","templates","pCompanyName","pChatName","pMailAddress","pPhoneNumber","pPhoneTel","pBusinessHours","pCustomerSupport","pMessagePlaceholder","pCommentPlaceholder","pPrivacy","mArticleOpen","mArticleClose","mFooterOpen","mFooterClose","btnStart","btnSubmit","btnRemove","btnHistory","btnSendMail","btnSend","btnRating","btnRate","btnLeave","btnClose","btnPrint","btnEmail","btnCall","btnRequirements","theStatusbox","userJoin","userLine","userEndLine","authenticationLine","agentJoin","agentLine","agentLeave","agentEndLine","agentEndErrorLine","pushlinkLine","forwardLine","rerouteLine","fileRefLine","iq_userLine","iq_agentLine","firstMessage_code","initial_code","initial","available","unavailable","wait","chat","afterchat","reloaded_code","reloaded","blocked_code","blocked","cobrowseRequest","cobrowseAnswerAccepted","cobrowseAnswerRejected","afterrating","sendmail","aftersendmail","colorpicker","onload","addEvent","queueData","animations","setProgressbar","isTyping","showTyping","vars","queueLength","getTimeLeft","qTime","tLeft","percentage","pgb","pgbText","position","style","width","innerHTML","time","line","dispose","inject","o","history","display","scrollToEnd","ready","$urlParam","results","exec","location","href"],"mappings":"AACA,QAAAA,MAAAC,EAAAC,GACA,GAAAC,GAAAC,EAAA,EAAAC,GAAAH,GAAAI,SAAAC,eAAA,WAAAC,qBAAA,KAIA,KAFAP,EAAA,EAAAA,EAAA,EAAAA,EAAA,GAAA,GAAAA,EAEAE,EAAA,EAAAA,EAAAE,EAAAI,OAAAN,IACAF,EAAAG,GACAC,EAAAF,GAAAO,UAAA,WACAN,KAEAC,EAAAF,GAAAO,UAAA,EAGAC,IAAAC,OAAAC,eAAA,EAAAZ,GCTA,GCGA,SAAAa,EAAAC,EAAAC,GACA,GAAAC,IACAC,IAAA,mBAEAC,KAEAC,GACAC,KAAA,KACAC,YACAC,KAAA,WACAC,aAAAC,QAAAN,EAAAD,IAAAQ,KAAAC,UAAAP,EAAAE,YAEAM,KAAA,WACAR,EAAAE,SAAAI,KAAAG,MAAAL,aAAAM,QAAAX,EAAAD,MACAE,EAAAE,SACAP,EAAAgB,KAAAC,OAAAC,KAAAb,EAAAE,UAAAF,EAAAc,eAEAd,EAAAE,aAGAa,UAAA,WACA,GAAAC,GAAArB,EAAAsB,MACAC,EAAAF,EAAAG,KAAA,OAEA,IAAAH,EAAAI,GAAA,cAAAJ,EAAAI,GAAA,UAAA,CACA,GAAAC,KAEAA,GAAAC,KAAAN,EAAAO,OACAP,EAAAQ,SAAA,YAAAb,KAAA,WACAU,EAAAC,KAAA3B,EAAAsB,MAAAM,SAGAvB,EAAAE,SAAAgB,GAAAG,MAEArB,GAAAE,SAAAgB,GAAAF,EAAAO,KAGAvB,GAAAG,QAEAW,cAAA,SAAAhB,EAAA2B,GACA,GAAAT,GAAAhB,EAAAC,KAAAyB,KAAA,UAAAD,EAAA,MACAA,EAAAzB,EAAAE,SAAAuB,EAEA,gBAAAT,GACAA,EAAAW,OAAA,WAAAF,EAAA,MAAAG,KAAA,WAAA,GAEAZ,EAAAI,GAAA,YACAJ,EAAAO,IAAAE,IAMA9B,GAAAkC,GAAAC,SAAA,SAAAP,GASA,MARAA,GAAAA,MACAxB,EAAAJ,EAAAoC,OAAAlC,EAAA0B,GAEAvB,EAAAC,KAAAN,EAAAsB,MACAjB,EAAAQ,OAEAR,EAAAC,KAAAyB,KAAA,2BAAAM,GAAA,SAAAhC,EAAAe,WAEApB,EAAAsB,QAEAvB,OAAAuC,QChEA,SAAAC,GACA,kBAAAC,SAAAA,OAAAC,IACAD,QAAA,UAAAD,GAEAA,EAAAD,SAEA,SAAAtC,GAEAA,EAAAoC,OAAApC,EAAAkC,IAEAQ,SAAA,SAAAC,GAGA,IAAArB,KAAA5B,OAIA,YAHAiD,GAAAA,EAAAC,OAAA7C,OAAA8C,SACAA,QAAAC,KAAA,wDAMA,IAAAC,GAAA/C,EAAAgD,KAAA1B,KAAA,GAAA,YACA,OAAAyB,GACAA,GAIAzB,KAAAE,KAAA,aAAA,cAEAuB,EAAA,GAAA/C,GAAA+C,UAAAJ,EAAArB,KAAA,IACAtB,EAAAgD,KAAA1B,KAAA,GAAA,YAAAyB,GAEAA,EAAAE,SAAAC,WAEA5B,KAAAe,GAAA,iBAAA,UAAA,SAAAc,GACAJ,EAAAE,SAAAG,gBACAL,EAAAM,aAAAF,EAAAG,QAIAtD,EAAAsB,MAAAiC,SAAA,YACAR,EAAAS,cAAA,GAIAvD,SAAAD,EAAAsB,MAAAE,KAAA,oBACAuB,EAAAS,cAAA,KAKAlC,KAAAe,GAAA,kBAAA,SAAAc,GAKA,QAAAM,KACA,GAAAC,GAAAC,CACA,OAAAZ,GAAAE,SAAAG,eACAL,EAAAM,eAEAK,EAAA1D,EAAA,0BACAwB,KAAA,OAAAuB,EAAAM,aAAAO,MACAhC,IAAA5B,EAAA+C,EAAAM,cAAAzB,OACAiC,SAAAd,EAAAe,cAEAH,EAAAZ,EAAAE,SAAAG,cAAAW,KAAAhB,EAAAA,EAAAe,YAAAX,GACAJ,EAAAM,cAEAK,EAAAM,SAEA/D,SAAA0D,EACAA,GAEA,IAEA,EAIA,MA5BAZ,GAAAE,SAAAL,OAEAO,EAAAc,iBA0BAlB,EAAAS,cACAT,EAAAS,cAAA,EACAC,KAEAV,EAAAzC,OACAyC,EAAAmB,gBACAnB,EAAAoB,eAAA,GACA,GAEAV,KAEAV,EAAAqB,gBACA,MAKArB,IAGAsB,MAAA,WACA,GAAAA,GAAAtB,EAAAuB,CAcA,OAZAtE,GAAAsB,KAAA,IAAAG,GAAA,QACA4C,EAAA/C,KAAAoB,WAAApC,QAEAgE,KACAD,GAAA,EACAtB,EAAA/C,EAAAsB,KAAA,GAAAhB,MAAAoC,WACApB,KAAAN,KAAA,WACAqD,EAAAtB,EAAAwB,QAAAjD,OAAA+C,EACAC,EAAAA,EAAAE,OAAAzB,EAAAuB,aAEAvB,EAAAuB,UAAAA,GAEAD,GAIAI,MAAA,SAAAC,EAAAC,GACA,GACA1B,GAAA2B,EAAAC,EAAA7B,EAAA8B,EAAAC,EADAR,EAAAjD,KAAA,EAGA,IAAAoD,EAIA,OAHAzB,EAAAjD,EAAAgD,KAAAuB,EAAAjE,KAAA,aAAA2C,SACA2B,EAAA3B,EAAAwB,MACAI,EAAA7E,EAAA+C,UAAA6B,YAAAL,GACAG,GACA,IAAA,MACA1E,EAAAoC,OAAAyC,EAAA7E,EAAA+C,UAAAiC,cAAAL,UAEAE,GAAAI,SACAL,EAAAL,EAAAX,MAAAiB,EACAF,EAAAM,WACAhC,EAAAgC,SAAAV,EAAAX,MAAA5D,EAAAoC,OAAAa,EAAAgC,SAAAV,EAAAX,MAAAe,EAAAM,UAEA,MACA,KAAA,SACA,MAAAN,IAIAI,KACA/E,EAAAgB,KAAA2D,EAAAO,MAAA,MAAA,SAAAC,EAAAC,GACAL,EAAAK,GAAAP,EAAAO,SACAP,GAAAO,GACA,aAAAA,GACApF,EAAAuE,GAAAc,WAAA,mBAGAN,UAXAH,GAAAL,EAAAX,MACAiB,GAsCA,MAxBA7B,GAAAhD,EAAA+C,UAAAuC,eACAtF,EAAAoC,UAEApC,EAAA+C,UAAAwC,WAAAhB,GACAvE,EAAA+C,UAAAyC,eAAAjB,GACAvE,EAAA+C,UAAA0C,UAAAlB,GACAvE,EAAA+C,UAAA6B,YAAAL,IACAA,GAGAvB,EAAA0C,WACAZ,EAAA9B,EAAA0C,eACA1C,GAAA0C,SACA1C,EAAAhD,EAAAoC,QAAAsD,SAAAZ,GAAA9B,GACAhD,EAAAuE,GAAA/C,KAAA,gBAAA,SAIAwB,EAAA2C,SACAb,EAAA9B,EAAA2C,aACA3C,GAAA2C,OACA3C,EAAAhD,EAAAoC,OAAAY,GAAA2C,OAAAb,KAGA9B,KAKAhD,EAAAoC,OAAApC,EAAA4F,KAAA,MAEAC,MAAA,SAAAC,GACA,OAAA9F,EAAA+F,KAAA,GAAA/F,EAAA8F,GAAAlE,QAGAoE,OAAA,SAAAF,GACA,QAAA9F,EAAA+F,KAAA,GAAA/F,EAAA8F,GAAAlE,QAGAqE,UAAA,SAAAH,GACA,OAAA9F,EAAA8F,GAAA7D,KAAA,cAKAjC,EAAA+C,UAAA,SAAAJ,EAAArC,GACAgB,KAAA2B,SAAAjD,EAAAoC,QAAA,KAAApC,EAAA+C,UAAA7C,SAAAyC,GACArB,KAAAwC,YAAAxD,EACAgB,KAAA4E,QAIAlG,EAAA+C,UAAAoD,OAAA,SAAAC,EAAAhG,GACA,MAAA,KAAAiG,UAAA3G,OACA,WACA,GAAA4G,GAAAtG,EAAAuG,UAAAF,UAEA,OADAC,GAAAE,QAAAJ,GACApG,EAAA+C,UAAAoD,OAAAM,MAAAnF,KAAAgF,KAGAD,UAAA3G,OAAA,GAAAU,EAAAsG,cAAAC,QACAvG,EAAAJ,EAAAuG,UAAAF,WAAAO,MAAA,IAEAxG,EAAAsG,cAAAC,QACAvG,GAAAA,IAEAJ,EAAAgB,KAAAZ,EAAA,SAAAhB,EAAAyH,GACAT,EAAAA,EAAAU,QAAA,GAAAC,QAAA,MAAA3H,EAAA,MAAA,KAAA,WACA,MAAAyH,OAGAT,IAGApG,EAAAoC,OAAApC,EAAA+C,WAEA7C,UACA+E,YACA+B,UACAvC,SACAwC,WAAA,QACAC,WAAA,QACAC,aAAA,QACAC,cAAA,EACAhD,cAAA,EACAiD,eAAArH,MACAsH,oBAAAtH,MACAkD,UAAA,EACAqE,OAAA,UACAC,aAAA,EACAC,UAAA,SAAAlD,GACAjD,KAAAoG,WAAAnD,EAGAjD,KAAA2B,SAAAmE,eACA9F,KAAA2B,SAAA0E,aACArG,KAAA2B,SAAA0E,YAAA5D,KAAAzC,KAAAiD,EAAAjD,KAAA2B,SAAAgE,WAAA3F,KAAA2B,SAAAiE,YAEA5F,KAAAsG,UAAAtG,KAAAuG,UAAAtD,MAGAuD,WAAA,SAAAvD,GACAjD,KAAAyG,UAAAxD,MAAAA,EAAAX,OAAAtC,MAAA0G,YAAA1G,KAAA2G,SAAA1D,IACAjD,KAAAiD,QAAAA,IAGA2D,QAAA,SAAA3D,EAAApB,GAeA,GAAAgF,IACA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACA,GAAA,GAAA,GAAA,GAAA,IAAA,IAGA,KAAAhF,EAAAiF,OAAA,KAAA9G,KAAA+G,aAAA9D,IAAA,KAAAvE,EAAAsI,QAAAnF,EAAAoF,QAAAJ,KAEA5D,EAAAX,OAAAtC,MAAA0G,WAAAzD,IAAAjD,KAAAkH,cACAlH,KAAAiD,QAAAA,IAGAkE,QAAA,SAAAlE,GAEAA,EAAAX,OAAAtC,MAAA0G,UACA1G,KAAAiD,QAAAA,GAGAA,EAAAmE,WAAA9E,OAAAtC,MAAA0G,WACA1G,KAAAiD,QAAAA,EAAAmE,aAGAC,UAAA,SAAApE,EAAA0C,EAAAC,GACA,UAAA3C,EAAAqE,KACAtH,KAAAuH,WAAAtE,EAAAX,MAAAkF,SAAA7B,GAAA8B,YAAA7B,GAEAlH,EAAAuE,GAAAuE,SAAA7B,GAAA8B,YAAA7B,IAGAS,YAAA,SAAApD,EAAA0C,EAAAC,GACA,UAAA3C,EAAAqE,KACAtH,KAAAuH,WAAAtE,EAAAX,MAAAmF,YAAA9B,GAAA6B,SAAA5B,GAEAlH,EAAAuE,GAAAwE,YAAA9B,GAAA6B,SAAA5B,KAMA8B,YAAA,SAAA/F,GACAjD,EAAAoC,OAAApC,EAAA+C,UAAA7C,SAAA+C,IAGAgC,UACAS,SAAA,0BACAC,OAAA,yBACAsD,MAAA,sCACAC,IAAA,4BACAC,KAAA,6BACAC,QAAA,qCACAC,OAAA,+BACAC,OAAA,4BACAC,WAAA,2CACAC,QAAA,qCACAC,UAAAzJ,EAAA+C,UAAAoD,OAAA,6CACAuD,UAAA1J,EAAA+C,UAAAoD,OAAA,yCACAwD,YAAA3J,EAAA+C,UAAAoD,OAAA,6DACAyD,MAAA5J,EAAA+C,UAAAoD,OAAA,6CACA0D,IAAA7J,EAAA+C,UAAAoD,OAAA,mDACA2D,IAAA9J,EAAA+C,UAAAoD,OAAA,uDAGA4D,kBAAA,EAEAC,WAEA9D,KAAA,WA0BA,QAAA+D,GAAA9G,GACA,GAAAJ,GAAA/C,EAAAgD,KAAA1B,KAAAhB,KAAA,aACA4J,EAAA,KAAA/G,EAAAyF,KAAA9B,QAAA,YAAA,IACA7D,EAAAF,EAAAE,QACAA,GAAAiH,KAAAlK,EAAAsB,MAAAG,GAAAwB,EAAAsE,SACAtE,EAAAiH,GAAAnG,KAAAhB,EAAAzB,KAAA6B,GA9BA7B,KAAA6I,eAAAnK,EAAAsB,KAAA2B,SAAAqE,qBACAhG,KAAA8I,aAAA9I,KAAA6I,eAAAzK,QAAA4B,KAAA6I,gBAAAnK,EAAAsB,KAAAwC,aACAxC,KAAA+I,WAAArK,EAAAsB,KAAA2B,SAAAoE,gBAAAiD,IAAAhJ,KAAA2B,SAAAqE,qBACAhG,KAAA0G,aACA1G,KAAAiJ,cACAjJ,KAAA4C,eAAA,EACA5C,KAAAkJ,WACAlJ,KAAAmJ,WACAnJ,KAAAoJ,OAEA,IACAjG,GADAuC,EAAA1F,KAAA0F,SAEAhH,GAAAgB,KAAAM,KAAA2B,SAAA+D,OAAA,SAAA7G,EAAA2B,GACA,gBAAAA,KACAA,EAAAA,EAAAoD,MAAA,OAEAlF,EAAAgB,KAAAc,EAAA,SAAAqD,EAAAvB,GACAoD,EAAApD,GAAAzD,MAGAsE,EAAAnD,KAAA2B,SAAAwB,MACAzE,EAAAgB,KAAAyD,EAAA,SAAAtE,EAAA2B,GACA2C,EAAAtE,GAAAH,EAAA+C,UAAAiC,cAAAlD,KAYA9B,EAAAsB,KAAAwC,aACAzB,GAAA,oDACA,sTAGA4H,GAGA5H,GAAA,iBAAA,oDAAA4H,GAEA3I,KAAA2B,SAAA0H,gBACA3K,EAAAsB,KAAAwC,aAAAzB,GAAA,wBAAAf,KAAA2B,SAAA0H,gBAKA3K,EAAAsB,KAAAwC,aAAA/B,KAAA,+CAAAP,KAAA,gBAAA,SAIAlB,KAAA,WAQA,MAPAgB,MAAAsJ,YACA5K,EAAAoC,OAAAd,KAAA0G,UAAA1G,KAAAuJ,UACAvJ,KAAAmJ,QAAAzK,EAAAoC,UAAAd,KAAAuJ,UACAvJ,KAAA+C,SACArE,EAAAsB,KAAAwC,aAAAgH,eAAA,gBAAAxJ,OAEAA,KAAAyJ,aACAzJ,KAAA+C,SAGAuG,UAAA,WACAtJ,KAAA0J,aACA,KAAA,GAAA5L,GAAA,EAAA6L,EAAA3J,KAAA4J,gBAAA5J,KAAA2J,WAAAA,EAAA7L,GAAAA,IACAkC,KAAA6J,MAAAF,EAAA7L,GAEA,OAAAkC,MAAA+C,SAIAE,QAAA,SAAAA,GACA,GAAA6G,GAAA9J,KAAA+J,MAAA9G,GACA+G,EAAAhK,KAAAiK,oBAAAH,GACAzH,GAAA,CAyBA,OAvBArC,MAAAkH,YAAA8C,EAEArL,SAAAqL,QACAhK,MAAAmJ,QAAAW,EAAAxH,OAEAtC,KAAAkK,eAAAF,GACAhK,KAAA4J,gBAAAlL,EAAAsL,GAEA3H,EAAArC,KAAA6J,MAAAG,MAAA,EACA3H,QACArC,MAAAmJ,QAAAa,EAAA1H,MAEAtC,KAAAmJ,QAAAa,EAAA1H,OAAA,GAIA5D,EAAAuE,GAAA/C,KAAA,gBAAAmC,GAEArC,KAAAmK,qBAEAnK,KAAAoK,OAAApK,KAAAoK,OAAApB,IAAAhJ,KAAA+I,aAEA/I,KAAAyJ,aACApH,GAIAoH,WAAA,SAAAY,GACA,GAAAA,EAAA,CAEA3L,EAAAoC,OAAAd,KAAAuJ,SAAAc,GACArK,KAAAgD,YACA,KAAA,GAAAV,KAAA+H,GACArK,KAAAgD,UAAA3C,MACAiK,QAAAD,EAAA/H,GACAW,QAAAjD,KAAAuH,WAAAjF,GAAA,IAIAtC,MAAAuK,YAAA7L,EAAA8L,KAAAxK,KAAAuK,YAAA,SAAAtH,GACA,QAAAA,EAAAX,OAAA+H,MAGArK,KAAA2B,SAAA8H,WACAzJ,KAAA2B,SAAA8H,WAAAhH,KAAAzC,KAAAA,KAAAuJ,SAAAvJ,KAAAgD,WAEAhD,KAAAyK,qBAKAC,UAAA,WACAhM,EAAAkC,GAAA8J,WACAhM,EAAAsB,KAAAwC,aAAAkI,YAEA1K,KAAA0G,aACA1G,KAAAkH,YAAA,KACAlH,KAAA0J,cACA1J,KAAA2K,YACA,IAAA7M,GAAA6L,EAAA3J,KAAA2J,WACAiB,WAAA,iBACA7G,WAAA,eAEA,IAAA/D,KAAA2B,SAAA0E,YACA,IAAAvI,EAAA,EAAA6L,EAAA7L,GAAAA,IACAkC,KAAA2B,SAAA0E,YAAA5D,KAAAzC,KAAA2J,EAAA7L,GACAkC,KAAA2B,SAAAgE,WAAA,QAGAgE,GAAAlC,YAAAzH,KAAA2B,SAAAgE,aAIAwE,iBAAA,WACA,MAAAnK,MAAA6K,aAAA7K,KAAAmJ,UAGA0B,aAAA,SAAAC,GAEA,GACAhN,GADAiN,EAAA,CAEA,KAAAjN,IAAAgN,GACAC,GAEA,OAAAA,IAGAJ,WAAA,WACA3K,KAAAsG,UAAAtG,KAAAoK,SAGA9D,UAAA,SAAA+D,GACAA,EAAAW,IAAAhL,KAAA+I,YAAAkC,KAAA,IACAjL,KAAAkL,WAAAb,GAAAc,QAGApI,MAAA,WACA,MAAA,KAAA/C,KAAAoL,QAGAA,KAAA,WACA,MAAApL,MAAAgD,UAAA5E,QAGA0E,aAAA,WACA,GAAA9C,KAAA2B,SAAAmB,aACA,IACApE,EAAAsB,KAAAqL,kBAAArL,KAAAgD,UAAA5E,QAAA4B,KAAAgD,UAAA,GAAAC,aACAvC,OAAA,YACA4K,QAEAC,QAAA,WACA,MAAAC,MAMAH,eAAA,WACA,GAAAjF,GAAApG,KAAAoG,UACA,OAAAA,IAEA,IAFA1H,EAAA8L,KAAAxK,KAAAgD,UAAA,SAAAuC,GACA,MAAAA,GAAAtC,QAAAX,OAAA8D,EAAA9D,OACAlE,QAAAgI,GAGAuD,SAAA,WACA,GAAAlI,GAAAzB,KACAyL,IAGA,OAAA/M,GAAAsB,KAAAwC,aACA/B,KAAA,2BACAuK,IAAA,sCACAA,IAAAhL,KAAA2B,SAAAsE,QACAvF,OAAA,WAMA,OALAV,KAAAsC,MAAAb,EAAAE,SAAAL,OAAA7C,OAAA8C,SACAA,QAAAmK,MAAA,0BAAA1L,MAIAA,KAAAsC,OAAAmJ,KAAAhK,EAAAoJ,aAAAnM,EAAAsB,MAAAmD,UACA,GAGAsI,EAAAzL,KAAAsC,OAAA,GACA,MAIAyH,MAAA,SAAA4B,GACA,MAAAjN,GAAAiN,GAAA,IAGAtB,OAAA,WACA,GAAA1E,GAAA3F,KAAA2B,SAAAgE,WAAA/B,MAAA,KAAAgI,KAAA,IACA,OAAAlN,GAAAsB,KAAA2B,SAAAkE,aAAA,IAAAF,EAAA3F,KAAA8I,eAGAM,MAAA,WACApJ,KAAAuK,eACAvK,KAAAgD,aACAhD,KAAAuJ,YACAvJ,KAAA6L,OAAAnN,MACAsB,KAAAoK,OAAA1L,MACAsB,KAAA4J,gBAAAlL,OAGAgL,YAAA,WACA1J,KAAAoJ,QACApJ,KAAAoK,OAAApK,KAAAqK,SAAArB,IAAAhJ,KAAA+I,aAGAmB,eAAA,SAAAjH,GACAjD,KAAAoJ,QACApJ,KAAAoK,OAAApK,KAAAuG,UAAAtD,IAGA8D,aAAA,SAAA9D,GACA,GAAA3C,GACAwL,EAAApN,EAAAuE,GACAqE,EAAArE,EAAAqE,IAEA,OAAA,UAAAA,GAAA,aAAAA,EACAtH,KAAAuH,WAAAtE,EAAAX,MAAA5B,OAAA,YAAAJ,MACA,WAAAgH,GAAA,mBAAArE,GAAA8I,SACA9I,EAAA8I,SAAAC,UAAA,EAAAF,EAAAxL,OAGAA,EAAAwL,EAAAxL,MACA,gBAAAA,GACAA,EAAAkF,QAAA,MAAA,IAEAlF,IAGAuJ,MAAA,SAAA5G,GACAA,EAAAjD,KAAAiK,oBAAAjK,KAAA+J,MAAA9G,GAEA,IAMAZ,GAAAyB,EAAAmI,EANA9I,EAAAzE,EAAAuE,GAAAE,QACA+I,EAAAxN,EAAAyN,IAAAhJ,EAAA,SAAAoC,EAAAzH,GACA,MAAAA,KACAM,OACAgO,GAAA,EACA9L,EAAAN,KAAA+G,aAAA9D,EAGA,KAAAa,IAAAX,GAAA,CACA8I,GAAAnI,OAAAA,EAAAuI,WAAAlJ,EAAAW,GACA,KAMA,GAJAzB,EAAA3D,EAAA+C,UAAA6K,QAAAxI,GAAArB,KAAAzC,KAAAM,EAAA2C,EAAAgJ,EAAAI,YAIA,wBAAAhK,GAAA,IAAA6J,EAAA,CACAE,GAAA,CACA,UAIA,GAFAA,GAAA,EAEA,YAAA/J,EAEA,YADArC,KAAAoK,OAAApK,KAAAoK,OAAAY,IAAAhL,KAAAuG,UAAAtD,IAIA,KAAAZ,EAEA,MADArC,MAAAuM,aAAAtJ,EAAAgJ,IACA,EAEA,MAAAT,GAQA,KAPAxL,MAAA2B,SAAAL,OAAA7C,OAAA8C,SACAA,QAAAiL,IAAA,4CAAAvJ,EAAAwJ,GAAA,gBAAAR,EAAAnI,OAAA,YAAA0H,GAEAA,YAAAkB,aACAlB,EAAAlB,SAAA,+CAAArH,EAAAwJ,GAAA,gBAAAR,EAAAnI,OAAA,aAGA0H,GAGA,IAAAY,EAMA,MAHApM,MAAA6K,aAAA1H,IACAnD,KAAAuK,YAAAlK,KAAA4C,IAEA,GAMA0J,kBAAA,SAAA1J,EAAAa,GACA,MAAApF,GAAAuE,GAAAvB,KAAA,MAAAoC,EAAA8I,OAAA,GAAAC,cACA/I,EAAAgJ,UAAA,GAAAC,gBAAArO,EAAAuE,GAAAvB,KAAA,QAIAsL,cAAA,SAAA1K,EAAAwB,GACA,GAAAmJ,GAAAjN,KAAA2B,SAAAgC,SAAArB,EACA,OAAA2K,KAAAA,EAAA7H,cAAA8H,OAAAD,EAAAA,EAAAnJ,KAIAqJ,YAAA,WACA,IAAA,GAAArP,GAAA,EAAAA,EAAAiH,UAAA3G,OAAAN,IACA,GAAAa,SAAAoG,UAAAjH,GACA,MAAAiH,WAAAjH,IAMAsP,eAAA,SAAAnK,EAAAa,GACA,MAAA9D,MAAAmN,YACAnN,KAAAgN,cAAA/J,EAAAX,KAAAwB,GACA9D,KAAA2M,kBAAA1J,EAAAa,IAEA9D,KAAA2B,SAAAuE,aAAAjD,EAAAoK,OAAA1O,OACAD,EAAA+C,UAAAkC,SAAAG,GACA,2CAAAb,EAAAX,KAAA,cAIAiK,aAAA,SAAAtJ,EAAAgJ,GACA,GAAA3B,GAAAtK,KAAAoN,eAAAnK,EAAAgJ,EAAAnI,QACAwJ,EAAA,eACA,mBAAAhD,GACAA,EAAAA,EAAA7H,KAAAzC,KAAAiM,EAAAI,WAAApJ,GACAqK,EAAAC,KAAAjD,KACAA,EAAA5L,EAAA+C,UAAAoD,OAAAyF,EAAA9E,QAAA8H,EAAA,QAAArB,EAAAI,aAEArM,KAAAgD,UAAA3C,MACAiK,QAAAA,EACArH,QAAAA,EACAa,OAAAmI,EAAAnI,SAGA9D,KAAAuJ,SAAAtG,EAAAX,MAAAgI,EACAtK,KAAA0G,UAAAzD,EAAAX,MAAAgI,GAGAY,WAAA,SAAAsC,GAIA,MAHAxN,MAAA2B,SAAA8L,UACAD,EAAAA,EAAAxE,IAAAwE,EAAAE,OAAA1N,KAAA2B,SAAA8L,WAEAD,GAGA/C,kBAAA,WACA,GAAA3M,GAAA6L,EAAA+B,CACA,KAAA5N,EAAA,EAAAkC,KAAAgD,UAAAlF,GAAAA,IACA4N,EAAA1L,KAAAgD,UAAAlF,GACAkC,KAAA2B,SAAA0F,WACArH,KAAA2B,SAAA0F,UAAA5E,KAAAzC,KAAA0L,EAAAzI,QAAAjD,KAAA2B,SAAAgE,WAAA3F,KAAA2B,SAAAiE,YAEA5F,KAAA2N,UAAAjC,EAAAzI,QAAAyI,EAAApB,QAKA,IAHAtK,KAAAgD,UAAA5E,SACA4B,KAAA6L,OAAA7L,KAAA6L,OAAA7C,IAAAhJ,KAAA+I,aAEA/I,KAAA2B,SAAAiM,QACA,IAAA9P,EAAA,EAAAkC,KAAAuK,YAAAzM,GAAAA,IACAkC,KAAA2N,UAAA3N,KAAAuK,YAAAzM,GAGA,IAAAkC,KAAA2B,SAAA0E,YACA,IAAAvI,EAAA,EAAA6L,EAAA3J,KAAA6N,gBAAAlE,EAAA7L,GAAAA,IACAkC,KAAA2B,SAAA0E,YAAA5D,KAAAzC,KAAA2J,EAAA7L,GAAAkC,KAAA2B,SAAAgE,WAAA3F,KAAA2B,SAAAiE,WAGA5F,MAAAoK,OAAApK,KAAAoK,OAAAY,IAAAhL,KAAA6L,QACA7L,KAAA2K,aACA3K,KAAAkL,WAAAlL,KAAA6L,QAAAiC,QAGAD,cAAA,WACA,MAAA7N,MAAA4J,gBAAAoB,IAAAhL,KAAA+N,oBAGAA,gBAAA,WACA,MAAArP,GAAAsB,KAAAgD,WAAAmJ,IAAA,WACA,MAAAnM,MAAAiD,WAIA0K,UAAA,SAAA1K,EAAAqH,GACA,GAAA0D,GAAAC,EAAAC,EACAxC,EAAA1L,KAAAuG,UAAAtD,GACAkL,EAAAnO,KAAAoO,SAAAnL,GACAoL,EAAA3P,EAAAuE,GAAA/C,KAAA,mBACAwL,GAAAtN,QAEAsN,EAAAjE,YAAAzH,KAAA2B,SAAAiE,YAAA4B,SAAAxH,KAAA2B,SAAAgE,YAEA+F,EAAA4C,KAAAhE,KAGAoB,EAAAhN,EAAA,IAAAsB,KAAA2B,SAAAkE,aAAA,KACA3F,KAAA,KAAAiO,EAAA,UACA3G,SAAAxH,KAAA2B,SAAAgE,YACA2I,KAAAhE,GAAA,IAGA0D,EAAAtC,EACA1L,KAAA2B,SAAA8L,UAGAO,EAAAtC,EAAAP,OAAA2C,OAAAS,KAAA,IAAAvO,KAAA2B,SAAA8L,QAAA,MAAAC,UAEA1N,KAAA6I,eAAAzK,OACA4B,KAAA6I,eAAA2F,OAAAR,GACAhO,KAAA2B,SAAA8M,eACAzO,KAAA2B,SAAA8M,eAAAT,EAAAtP,EAAAuE,IAEA+K,EAAAU,YAAAzL,GAIAyI,EAAAvL,GAAA,SAEAuL,EAAAxL,KAAA,MAAAiO,GACA,IAAAzC,EAAAiD,QAAA,cAAAR,EAAA,MAAA/P,SAIA8P,EAAAxC,EAAAxL,KAAA,MAAAsF,QAAA,mBAAA,QAEA6I,EAEAA,EAAAO,MAAA,GAAAnJ,QAAA,MAAAyI,EAAA,UAEAG,GAAA,IAAAH,GAHAG,EAAAH,EAKAxP,EAAAuE,GAAA/C,KAAA,mBAAAmO,GAGAJ,EAAAjO,KAAA0F,OAAAzC,EAAAX,MACA2L,GACAvP,EAAAgB,KAAAM,KAAA0F,OAAA,SAAApD,EAAAuM,GACAA,IAAAZ,GACAvP,EAAA,UAAA4D,EAAA,KAAAtC,KAAAwC,aACAtC,KAAA,mBAAAwL,EAAAxL,KAAA,YAMAoK,GAAAtK,KAAA2B,SAAAiM,UACAlC,EAAAT,KAAA,IACA,gBAAAjL,MAAA2B,SAAAiM,QACAlC,EAAAlE,SAAAxH,KAAA2B,SAAAiM,SAEA5N,KAAA2B,SAAAiM,QAAAlC,EAAAzI,IAGAjD,KAAA6L,OAAA7L,KAAA6L,OAAA7C,IAAA0C,IAGAnF,UAAA,SAAAtD,GACA,GAAAX,GAAAtC,KAAAoO,SAAAnL,GACA6L,EAAApQ,EAAAuE,GAAA/C,KAAA,oBACAyL,EAAA,cAAArJ,EAAA,kBAAAA,EAAA,MAMA,OAHAwM,KACAnD,EAAAA,EAAA,MAAAmD,EAAAtJ,QAAA,OAAA,QAEAxF,KACAqK,SACA3J,OAAAiL,IAGAyC,SAAA,SAAAnL,GACA,MAAAjD,MAAA0F,OAAAzC,EAAAX,QAAAtC,KAAAyG,UAAAxD,GAAAA,EAAAX,KAAAW,EAAAwJ,IAAAxJ,EAAAX,OAGA2H,oBAAA,SAAAhH,GAQA,MALAjD,MAAAyG,UAAAxD,KACAA,EAAAjD,KAAAuH,WAAAtE,EAAAX,OAIA5D,EAAAuE,GAAA+H,IAAAhL,KAAA2B,SAAAsE,QAAA,IAGAQ,UAAA,SAAAxD,GACA,MAAA,kBAAAsK,KAAAtK,EAAAqE,OAGAC,WAAA,SAAAjF,GACA,MAAA5D,GAAAsB,KAAAwC,aAAA/B,KAAA,UAAA6B,EAAA,OAGAyM,UAAA,SAAAvO,EAAAyC,GACA,OAAAA,EAAA+L,SAAAjC,eACA,IAAA,SACA,MAAArO,GAAA,kBAAAuE,GAAA7E,MACA,KAAA,QACA,GAAA4B,KAAAyG,UAAAxD,GACA,MAAAjD,MAAAuH,WAAAtE,EAAAX,MAAA5B,OAAA,YAAAtC,OAGA,MAAAoC,GAAApC,QAGA6Q,OAAA,SAAAzL,EAAAP,GACA,MAAAjD,MAAAkP,kBAAA1L,IAAAxD,KAAAkP,kBAAA1L,IAAAA,EAAAP,IAAA,GAGAiM,aACAC,UAAA,SAAA3L,GACA,MAAAA,IAEA4L,OAAA,SAAA5L,EAAAP,GACA,QAAAvE,EAAA8E,EAAAP,EAAAjE,MAAAZ,QAEAiR,WAAA,SAAA7L,EAAAP,GACA,MAAAO,GAAAP,KAIA0D,SAAA,SAAA1D,GACA,GAAA3C,GAAAN,KAAA+G,aAAA9D,EACA,QAAAvE,EAAA+C,UAAA6K,QAAAlI,SAAA3B,KAAAzC,KAAAM,EAAA2C,IAAA,uBAGAqM,aAAA,SAAArM,GACAjD,KAAAkJ,QAAAjG,EAAAX,QACAtC,KAAA4C,iBACA5C,KAAAkJ,QAAAjG,EAAAX,OAAA,IAIAiN,YAAA,SAAAtM,EAAAF,GACA/C,KAAA4C,iBAEA5C,KAAA4C,eAAA,IACA5C,KAAA4C,eAAA,SAEA5C,MAAAkJ,QAAAjG,EAAAX,MACAS,GAAA,IAAA/C,KAAA4C,gBAAA5C,KAAA6C,eAAA7C,KAAAhB,QACAN,EAAAsB,KAAAwC,aAAAgN,SACAxP,KAAA6C,eAAA,IACAE,GAAA,IAAA/C,KAAA4C,gBAAA5C,KAAA6C,gBACAnE,EAAAsB,KAAAwC,aAAAgH,eAAA,gBAAAxJ,OACAA,KAAA6C,eAAA,IAIA4M,cAAA,SAAAxM,GACA,MAAAvE,GAAAgD,KAAAuB,EAAA,kBAAAvE,EAAAgD,KAAAuB,EAAA,iBACAyM,IAAA,KACA3M,OAAA,EACAuH,QAAAtK,KAAAoN,eAAAnK,EAAA,aAKA0M,QAAA,WACA3P,KAAA0K,YAEAhM,EAAAsB,KAAAwC,aACAoN,IAAA,aACAhF,WAAA,eAKAiF,mBACAzL,UAAAA,UAAA,GACAuD,OAAAA,OAAA,GACAC,KAAAA,KAAA,GACAC,MAAAA,MAAA,GACAC,SAAAA,SAAA,GACAC,QAAAA,QAAA,GACAC,QAAAA,QAAA,GACAC,YAAAA,YAAA,IAGA6H,cAAA,SAAAzR,EAAA8E,GACA9E,EAAA+G,cAAA8H,OACAlN,KAAA6P,kBAAAxR,GAAA8E,EAEAzE,EAAAoC,OAAAd,KAAA6P,kBAAAxR,IAIA4F,WAAA,SAAAhB,GACA,GAAAE,MACA4M,EAAArR,EAAAuE,GAAA/C,KAAA,QASA,OAPA6P,IACArR,EAAAgB,KAAAqQ,EAAAnM,MAAA,KAAA,WACA5D,OAAAtB,GAAA+C,UAAAoO,mBACAnR,EAAAoC,OAAAqC,EAAAzE,EAAA+C,UAAAoO,kBAAA7P,SAIAmD,GAGA6M,uBAAA,SAAA7M,EAAAmE,EAAAxD,EAAAtD,GAIA,UAAA+M,KAAAzJ,KAAA,OAAAwD,GAAA,oBAAAiG,KAAAjG,MACA9G,EAAAyP,OAAAzP,GAGA0P,MAAA1P,KACAA,EAAA7B,SAIA6B,GAAA,IAAAA,EACA2C,EAAAW,GAAAtD,EACA8G,IAAAxD,GAAA,UAAAwD,IAIAnE,EAAAW,IAAA,IAIAI,eAAA,SAAAjB,GACA,GAGAa,GAAAtD,EAHA2C,KACA2I,EAAApN,EAAAuE,GACAqE,EAAArE,EAAAkN,aAAA,OAGA,KAAArM,IAAApF,GAAA+C,UAAA6K,QAGA,aAAAxI,GACAtD,EAAAyC,EAAAkN,aAAArM,GAIA,KAAAtD,IACAA,GAAA,GAIAA,IAAAA,GAEAA,EAAAsL,EAAA5L,KAAA4D,GAGA9D,KAAAgQ,uBAAA7M,EAAAmE,EAAAxD,EAAAtD,EAQA,OAJA2C,GAAAgF,WAAA,uBAAAoF,KAAApK,EAAAgF,kBACAhF,GAAAgF,UAGAhF,GAGAgB,UAAA,SAAAlB,GACA,GAGAa,GAAAtD,EAHA2C,KACA2I,EAAApN,EAAAuE,GACAqE,EAAArE,EAAAkN,aAAA,OAGA,KAAArM,IAAApF,GAAA+C,UAAA6K,QACA9L,EAAAsL,EAAApK,KAAA,OAAAoC,EAAA8I,OAAA,GAAAC,cAAA/I,EAAAgJ,UAAA,GAAAC,eACA/M,KAAAgQ,uBAAA7M,EAAAmE,EAAAxD,EAAAtD,EAEA,OAAA2C,IAGAG,YAAA,SAAAL,GACA,GAAAE,MACA1B,EAAA/C,EAAAgD,KAAAuB,EAAAjE,KAAA,YAKA,OAHAyC,GAAAE,SAAAwB,QACAA,EAAAzE,EAAA+C,UAAAiC,cAAAjC,EAAAE,SAAAwB,MAAAF,EAAAX,YAEAa,GAGAa,eAAA,SAAAb,EAAAF,GA+DA,MA7DAvE,GAAAgB,KAAAyD,EAAA,SAAAxC,EAAAL,GAEA,GAAAA,KAAA,EAEA,kBADA6C,GAAAxC,EAGA,IAAAL,EAAAkD,OAAAlD,EAAA8P,QAAA,CACA,GAAAC,IAAA,CACA,cAAA/P,GAAA8P,SACA,IAAA,SACAC,IAAA3R,EAAA4B,EAAA8P,QAAAnN,EAAAjE,MAAAZ,MACA,MACA,KAAA,WACAiS,EAAA/P,EAAA8P,QAAA3N,KAAAQ,EAAAA,GAGAoN,EACAlN,EAAAxC,GAAAhC,SAAA2B,EAAAkD,MAAAlD,EAAAkD,OAAA,QAEAL,GAAAxC,MAMAjC,EAAAgB,KAAAyD,EAAA,SAAA8I,EAAAqE,GACAnN,EAAA8I,GAAAvN,EAAA6R,WAAAD,GAAAA,EAAArN,GAAAqN,IAIA5R,EAAAgB,MAAA,YAAA,aAAA,WACAyD,EAAAnD,QACAmD,EAAAnD,MAAAiQ,OAAA9M,EAAAnD,UAGAtB,EAAAgB,MAAA,cAAA,SAAA,WACA,GAAA8Q,EACArN,GAAAnD,QACAtB,EAAA+R,QAAAtN,EAAAnD,OACAmD,EAAAnD,OAAAiQ,OAAA9M,EAAAnD,MAAA,IAAAiQ,OAAA9M,EAAAnD,MAAA,KACA,gBAAAmD,GAAAnD,QACAwQ,EAAArN,EAAAnD,MAAAwF,QAAA,UAAA,IAAA5B,MAAA,UACAT,EAAAnD,OAAAiQ,OAAAO,EAAA,IAAAP,OAAAO,EAAA,SAKA9R,EAAA+C,UAAAgH,mBAEA,MAAAtF,EAAAqF,KAAA,MAAArF,EAAAoF,MACApF,EAAAmF,OAAAnF,EAAAqF,IAAArF,EAAAoF,WACApF,GAAAqF,UACArF,GAAAoF,KAEA,MAAApF,EAAAiF,WAAA,MAAAjF,EAAAgF,YACAhF,EAAAkF,aAAAlF,EAAAiF,UAAAjF,EAAAgF,iBACAhF,GAAAiF,gBACAjF,GAAAgF,YAIAhF,GAIAO,cAAA,SAAAhC,GACA,GAAA,gBAAAA,GAAA,CACA,GAAAgP,KACAhS,GAAAgB,KAAAgC,EAAAkC,MAAA,MAAA,WACA8M,EAAA1Q,OAAA,IAEA0B,EAAAgP,EAEA,MAAAhP,IAIAiP,UAAA,SAAArO,EAAAwB,EAAAwG,GACA5L,EAAA+C,UAAA6K,QAAAhK,GAAAwB,EACApF,EAAA+C,UAAAkC,SAAArB,GAAA3D,SAAA2L,EAAAA,EAAA5L,EAAA+C,UAAAkC,SAAArB,GACAwB,EAAA1F,OAAA,GACAM,EAAA+C,UAAAqO,cAAAxN,EAAA5D,EAAA+C,UAAAiC,cAAApB,KAIAgK,SAGAlI,SAAA,SAAA5D,EAAAyC,EAAAO,GAEA,IAAAxD,KAAAiP,OAAAzL,EAAAP,GACA,MAAA,qBAEA,IAAA,WAAAA,EAAA+L,SAAAjC,cAAA,CAEA,GAAAzM,GAAA5B,EAAAuE,GAAA3C,KACA,OAAAA,IAAAA,EAAAlC,OAAA,EAEA,MAAA4B,MAAAyG,UAAAxD,GACAjD,KAAA+O,UAAAvO,EAAAyC,GAAA,EAEAzC,EAAApC,OAAA,GAIAuJ,MAAA,SAAAnH,EAAAyC,GAKA,MAAAjD,MAAA2G,SAAA1D,IAAA,wIAAAsK,KAAA/M,IAIAoH,IAAA,SAAApH,EAAAyC,GAMA,MAAAjD,MAAA2G,SAAA1D,IAAA,4cAAAsK,KAAA/M,IAIAqH,KAAA,SAAArH,EAAAyC,GACA,MAAAjD,MAAA2G,SAAA1D,KAAA,cAAAsK,KAAA,GAAAqD,MAAApQ,GAAAqQ,aAIA/I,QAAA,SAAAtH,EAAAyC,GACA,MAAAjD,MAAA2G,SAAA1D,IAAA,+DAAAsK,KAAA/M,IAIAuH,OAAA,SAAAvH,EAAAyC,GACA,MAAAjD,MAAA2G,SAAA1D,IAAA,8CAAAsK,KAAA/M,IAIAwH,OAAA,SAAAxH,EAAAyC,GACA,MAAAjD,MAAA2G,SAAA1D,IAAA,QAAAsK,KAAA/M,IAKAyH,WAAA,SAAAzH,EAAAyC,GACA,GAAAjD,KAAA2G,SAAA1D,GACA,MAAA,qBAGA,IAAA,aAAAsK,KAAA/M,GACA,OAAA,CAEA,IAGA+E,GAAAuL,EAHAC,EAAA,EACAC,EAAA,EACAC,GAAA,CAOA,IAJAzQ,EAAAA,EAAAgF,QAAA,MAAA,IAIAhF,EAAApC,OAAA,IAAAoC,EAAApC,OAAA,GACA,OAAA,CAGA,KAAAmH,EAAA/E,EAAApC,OAAA,EAAAmH,GAAA,EAAAA,IACAuL,EAAAtQ,EAAAoM,OAAArH,GACAyL,EAAAE,SAAAJ,EAAA,IACAG,IACAD,GAAA,GAAA,IACAA,GAAA,GAGAD,GAAAC,EACAC,GAAAA,CAGA,OAAAF,GAAA,KAAA,GAIA3I,UAAA,SAAA5H,EAAAyC,EAAAO,GACA,GAAApF,GAAAM,EAAA+R,QAAAjQ,GAAAA,EAAApC,OAAA4B,KAAA+O,UAAAvO,EAAAyC,EACA,OAAAjD,MAAA2G,SAAA1D,IAAA7E,GAAAoF,GAIA2E,UAAA,SAAA3H,EAAAyC,EAAAO,GACA,GAAApF,GAAAM,EAAA+R,QAAAjQ,GAAAA,EAAApC,OAAA4B,KAAA+O,UAAAvO,EAAAyC,EACA,OAAAjD,MAAA2G,SAAA1D,IAAAO,GAAApF,GAIAiK,YAAA,SAAA7H,EAAAyC,EAAAO,GACA,GAAApF,GAAAM,EAAA+R,QAAAjQ,GAAAA,EAAApC,OAAA4B,KAAA+O,UAAAvO,EAAAyC,EACA,OAAAjD,MAAA2G,SAAA1D,IAAA7E,GAAAoF,EAAA,IAAApF,GAAAoF,EAAA,IAIAgF,IAAA,SAAAhI,EAAAyC,EAAAO,GACA,MAAAxD,MAAA2G,SAAA1D,IAAAzC,GAAAgD,GAIA+E,IAAA,SAAA/H,EAAAyC,EAAAO,GACA,MAAAxD,MAAA2G,SAAA1D,IAAAO,GAAAhD,GAIA8H,MAAA,SAAA9H,EAAAyC,EAAAO,GACA,MAAAxD,MAAA2G,SAAA1D,IAAAzC,GAAAgD,EAAA,IAAAhD,GAAAgD,EAAA,IAIA0E,QAAA,SAAA1H,EAAAyC,EAAAO,GAGA,GAAAxB,GAAAtD,EAAA8E,EAMA,OALAxD,MAAA2B,SAAA6E,YACAxE,EAAA4N,IAAA,qBAAA7O,GAAA,wBAAA,WACArC,EAAAuE,GAAAF,UAGAvC,IAAAwB,EAAA1B,OAIA+D,OAAA,SAAA7D,EAAAyC,EAAAO,GACA,GAAAxD,KAAA2G,SAAA1D,GACA,MAAA,qBAGA,IACAxB,GAAAC,EADAyP,EAAAnR,KAAAyP,cAAAxM,EAWA,OARAjD,MAAA2B,SAAAgC,SAAAV,EAAAX,QACAtC,KAAA2B,SAAAgC,SAAAV,EAAAX,UAEA6O,EAAAC,gBAAApR,KAAA2B,SAAAgC,SAAAV,EAAAX,MAAA+B,OACArE,KAAA2B,SAAAgC,SAAAV,EAAAX,MAAA+B,OAAA8M,EAAA7G,QAEA9G,EAAA,gBAAAA,KAAAoE,IAAApE,IAAAA,EAEA2N,EAAAzB,MAAAlP,EACA2Q,EAAApO,OAGAoO,EAAAzB,IAAAlP,EACAiB,EAAAzB,KACAA,KAAAsP,aAAArM,GACAvB,KACAA,EAAAuB,EAAAX,MAAA9B,EACA9B,EAAA2S,KAAA3S,EAAAoC,QAAA,GACAwQ,KAAA,QACAC,KAAA,WAAAtO,EAAAX,KACAkP,SAAA,OACA9P,KAAAA,EACA+P,QAAAhQ,EAAAe,YACAoL,QAAA,SAAA8D,GACA,GACArH,GAAAC,EAAA5D,EADA3D,EAAA2O,KAAA,GAAA,SAAAA,CAGAjQ,GAAAE,SAAAgC,SAAAV,EAAAX,MAAA+B,OAAA8M,EAAAC,gBACArO,GACA2D,EAAAjF,EAAAoB,cACApB,EAAAyI,eAAAjH,GACAxB,EAAAoB,cAAA6D,EACAjF,EAAA8I,YAAAlK,KAAA4C,SACAxB,GAAA0H,QAAAlG,EAAAX,MACAb,EAAAgI,eAEAY,KACAC,EAAAoH,GAAAjQ,EAAA2L,eAAAnK,EAAA,UACAoH,EAAApH,EAAAX,MAAA6O,EAAA7G,QAAA5L,EAAA6R,WAAAjG,GAAAA,EAAA9J,GAAA8J,EACA7I,EAAA0H,QAAAlG,EAAAX,OAAA,EACAb,EAAAgI,WAAAY,IAEA8G,EAAApO,MAAAA,EACAtB,EAAA8N,YAAAtM,EAAAF,KAEAS,IACA,cAUA,IACA6N,GADAM,IAGAjT,GAAAkT,cACAlT,EAAAkT,cAAA,SAAAjQ,EAAAkQ,EAAAC,GACA,GAAAP,GAAA5P,EAAA4P,IACA,WAAA5P,EAAA2P,OACAK,EAAAJ,IACAI,EAAAJ,GAAAQ,QAEAJ,EAAAJ,GAAAO,MAKAT,EAAA3S,EAAA2S,KACA3S,EAAA2S,KAAA,SAAA1P,GACA,GAAA2P,IAAA,QAAA3P,GAAAA,EAAAjD,EAAAsT,cAAAV,KACAC,GAAA,QAAA5P,GAAAA,EAAAjD,EAAAsT,cAAAT,IACA,OAAA,UAAAD,GACAK,EAAAJ,IACAI,EAAAJ,GAAAQ,QAEAJ,EAAAJ,GAAAF,EAAAlM,MAAAnF,KAAA+E,WACA4M,EAAAJ,IAEAF,EAAAlM,MAAAnF,KAAA+E,eF52CApG,SAAAF,OAAAH,GACA,GAAAA,MAIAA,IAAA2T,WAGAC,aAAA,6BACAC,UAAA,0BACAC,aAAA,6BACAC,aAAA,6BACAC,UAAA,0BACAC,eAAA,+BACAC,iBAAA,iCACAC,oBAAA,oCACAC,oBAAA,oCACAC,SAAA,wBAGAC,aAAA,yEACAC,cAAA,+BACAC,YAAA,mDACAC,aAAA,wBAGAC,SAAA,oGACAC,UAAA,oIACAC,UAAA,sFACAC,WAAA,+IACAC,YAAA,iLACAC,QAAA,uKACAC,UAAA,6KACAC,QAAA,+KACAC,SAAA,uIACAC,SAAA,8GACAC,SAAA,6FACAC,SAAA,4FACAC,QAAA,sFACAC,gBAAA,GAGAC,aAAA,mDAIAC,SAAA,8FACAC,SAAA,mFACAC,YAAA,gDACAC,mBAAA,0GAGAC,UAAA,gGACAC,UAAA,oFACAC,WAAA,kGACAC,aAAA,mGACAC,kBAAA,uGAGAC,aAAA,8IACAC,YAAA,6FACAC,YAAA,6FACAC,YAAA,iQAGAC,YAAA,mFACAC,aAAA,oFAGAC,kBAAA,KAGAC,aAAA,qBACAC,QAAA,oBACAC,UAAA,oBAEAC,YAAA,qBAEAC,KAAA,8PAEAC,KAAA,22BAGAC,UAAA,gwBAEAC,cAAA,iCACAC,SAAA,8SAEAC,aAAA,GACAC,QAAA,qBAEA/J,MAAA,qBAGAgK,gBAAA,qVACAC,uBAAA,iFACAC,uBAAA,iFAGArX,OAAA,iwBAEAsX,YAAA,uIAIAC,SAAA,iaAGAC,cAAA,yIAIAC,YAAA,yYDnGAvX,OAAAwX,OAAA,WAGA3X,GAAA8W,KAAAc,SAAA,cAAA,SAAAC,GACA7X,GAAA8X,WAAAC,eAAAF,KAIA7X,GAAA8W,KAAAc,SAAA,SAAA,SAAAI,GACAhY,GAAA8X,WAAAG,WAAAD,MAMAhY,GAAA8X,YACAI,MACAC,YAAA,GAIAC,YAAA,SAAAC,GACA,GAAAC,EAaA,OAXAA,GADA,GAAAD,EACA,aAEA,GAAAA,EACA,aAEA,GAAAA,EACA,aAGA,aAMAN,eAAA,SAAAF,GACA,GAEAU,GAFAC,EAAA7Y,SAAAC,eAAA,YACA6Y,EAAA9Y,SAAAC,eAAA,gBAEA,KAAA8B,KAAAwW,KAAAC,cACAzW,KAAAwW,KAAAC,YAAAN,EAAAa,UAEAH,GAAA,GAAA7W,KAAAwW,KAAAC,YAAAN,EAAAa,WAAAhX,KAAAwW,KAAAC,YAAA,IACA,OAAAK,GAAA,OAAAC,IACAD,EAAAG,MAAAC,MAAAhK,OAAA2J,GAAA,IACAE,EAAAI,UAAA,sBAAAhB,EAAAa,SAAA,cAAAhX,KAAA0W,YAAAP,EAAAiB;AAEAP,EAAA,KACA7W,KAAAwW,KAAAC,YAAA,IAKAF,WAAA,SAAAD,GACA,GAAAe,GAAApZ,SAAAwO,GAAA,cACA4K,KACAA,EAAAC,UACAD,EAAAE,OAAAjZ,GAAA8W,KAAAoC,EAAAC,UAEAnB,EACAe,EAAAJ,MAAAS,QAAA,QAGAL,EAAAJ,MAAAS,QAAA,OAEApZ,GAAA8W,KAAAuC,gBAKA3W,OAAA/C,UAAA2Z,MAAA,WAGAC,UAAA,SAAAvV,GACA,GAAAwV,GAAA,GAAArS,QAAA,OAAAnD,EAAA,aAAAyV,KAAAtZ,OAAAuZ,SAAAC,KACA,OAAA,OAAAH,EACA,QAGAA,EAAA,IAAA,GAKApZ,EAAA,QAAA8P,OAAA,wBAAAqJ,UAAA,QAAA,kDAAAA,UAAA,QAAA","file":"nmchat.js","sourcesContent":["// Overwrite Star-Rater from nm.rating.js\nfunction star(score, containerID) {\n var i, s = 0, images = (containerID || document.getElementById('nmchat')).getElementsByTagName('li');\n\n score = score < 0 ? 0 : score > 10 ? 10 : score;\n\n for(i = 0; i < images.length; i++) {\n if (s < score) {\n images[i].className = \"selected\";\n s++;\n } else {\n images[i].className = \"\";\n }\n }\n NM.rating.setRatingValue(score * 2);\n}\n\n// Add extra events (for animated elements)\nwindow.onload = function() {\n\n // Waiting line progress bar animation\n NM.chat.addEvent('waitingLine', function(queueData) {\n NM.animations.setProgressbar(queueData);\n });\n\n // Show if agent is typing\n NM.chat.addEvent('typing', function(isTyping) {\n NM.animations.showTyping(isTyping);\n });\n\n};\n\n// Animated elements\nNM.animations = {\n vars: {\n queueLength: 0\n },\n\n // Timer for progress bar\n getTimeLeft: function(qTime) {\n var tLeft;\n if (qTime < 15) {\n tLeft = ' < 15 Sek.';\n }\n else if (qTime < 30) {\n tLeft = ' < 30 Sek.';\n }\n else if (qTime < 60) {\n tLeft = ' < 60 Sek.';\n }\n else {\n tLeft = ' > 1 Min.';\n }\n return tLeft;\n },\n\n // Proress bar percentage\n setProgressbar: function(queueData) {\n var pgb = document.getElementById('pgb-wait'),\n pgbText = document.getElementById('pgb-wait-text'),\n percentage;\n if (this.vars.queueLength === 0) {\n this.vars.queueLength = queueData.position;\n }\n percentage = ((1 + (this.vars.queueLength - queueData.position)) / this.vars.queueLength) * 100;\n if (pgb !== null && pgbText !== null) {\n pgb.style.width = String(percentage) + '%';\n pgbText.innerHTML = 'Warteschlange Pos. ' + queueData.position + ', Wartezeit' + this.getTimeLeft(queueData.time);\n }\n if (percentage > 99) {\n this.vars.queueLength = 0;\n }\n },\n\n // Indicate agent typing\n showTyping: function(isTyping) {\n var line = document.id('line-typing');\n if (line) {\n line.dispose();\n line.inject(NM.chat.o.history);\n }\n if (isTyping) {\n line.style.display = 'block';\n }\n else {\n line.style.display = 'none';\n }\n NM.chat.scrollToEnd();\n }\n};\n\n// jQuery\njQuery(document).ready(function() {\n\n // Parameterized URL\n $urlParam = function(name){\n var results = new RegExp( '[\\?&]' + name + '=([^&#]*)' ).exec(window.location.href);\n if (results==null) {\n return 'de-de'; // Default = de-de\n }\n else{\n return results[1] || 0;\n }\n };\n\n // Insert javascript links init.js and messages.js\n $( 'body' ).append( '' );\n\n// jQuery document ready\n});\n","/*\n Default Templates for novomind iChat\n Copyright (c) novomind AG\n */\n\nif (window.NM === undefined) {\n var NM = {};\n}\n\n// Templates (language independent)\nNM.templates = {\n\n// Project (p) dependent configuration\n pCompanyName : '{msg.project_company_name}',\n pChatName : '{msg.project_chat_name}',\n pMailAddress : '{msg.project_mail_address}',\n pPhoneNumber : '{msg.project_phone_number}',\n pPhoneTel : '{msg.project_phone_tel}', // Only for href=\"tel:\n pBusinessHours : '{msg.project_business_hours}',\n pCustomerSupport : '{msg.project_customer_support}',\n pMessagePlaceholder : '{msg.project_message_placeholder}',\n pCommentPlaceholder : '{msg.project_comment_placeholder}',\n pPrivacy : '{msg.project_privacy}',\n\n// Markup\n mArticleOpen : '
', // Markup opening article (always one column)\n mArticleClose : '
', // Markup closing article\n mFooterOpen : '', // Markup closing footer\n\n // Buttons (btn)\n btnStart : '', // Validate form and start chat (@see nmchat.init.js)\n btnSubmit : '',\n btnRemove : '',\n btnHistory : \"{msg.button_history}\", // Unfortunately this has to be escaped the other way round\n btnSendMail : \"{msg.button_sendemail}\", // Unfortunately this has to be escaped the other way round\n btnSend : \"\", // Unfortunately this has to be escaped the other way round\n btnRating : \"{msg.button_rating}\", // Unfortunately this has to be escaped the other way round\n btnRate : \"{msg.button_rate}\", // Unfortunately this has to be escaped the other way round\n btnLeave : '{tpl.pChatName} {msg.button_leave}',\n btnClose : '{msg.button_close}',\n btnPrint : '{msg.button_print}',\n btnEmail : '{msg.button_email}',\n btnCall : '{msg.button_call}',\n btnRequirements : '', // {msg.button_call}\n\n// Status box\n theStatusbox : '{tpl.mArticleOpen} {message} {tpl.mArticleClose}', // Wrapper for all status messages\n\n// Chat sequence\n // User\n userJoin : '
  • {nickname} {msg.user_join}
  • ',\n userLine : '
  • {nickname} {message}
  • ',\n userEndLine : '
  • {msg.user_end_line}
  • ',\n authenticationLine : '
  • {customernickname} {message}
  • ',\n\n // Agent\n agentJoin : '
  • {nickname} {msg.agent_join}
  • ',\n agentLine : '
  • {nickname} {message}
  • ',\n agentLeave : '
  • {nickname} {msg.agent_leave}
  • ',\n agentEndLine : '
  • {nickname} {msg.agent_end_line}
  • ',\n agentEndErrorLine : '
  • {nickname} {msg.agent_error_line}
  • ',\n\n // Agent miscellaneous\n pushlinkLine : '
  • {nickname} {message}
  • ',\n forwardLine : '
  • {nickname} {msg.forward_line}
  • ',\n rerouteLine : '
  • {nickname} {msg.reroute_line}
  • ',\n fileRefLine : '
  • {nickname} {file.name}
  • ',\n\n// IQ\n iq_userLine : '
  • {nickname} {message}
  • ',\n iq_agentLine : '
  • {nickname} {message}
  • ',\n\n// Events\n firstMessage_code: null,\n\n// States\n initial_code : '{hide: [\"nmchat\"]}',\n initial : '{tpl.colorpicker}',\n available : '{tpl.myChatStart}', // (@see nmchat.init.js)\n // NM.chat.changeState('available')\n unavailable : '{tpl.theStatusbox}',\n // NM.chat.changeState('unavailable')\n wait : '{tpl.mArticleOpen}

    {msg.status_wait_headline}

     

    {msg.status_wait_paragraph}

    {tpl.mArticleClose}',\n // NM.chat.changeState('wait')\n chat : '
    {msg.status_chat}
    asd\"\"
    {tpl.mArticleOpen}{tpl.mArticleClose}',\n // NM.chat.changeState('chat')\n// afterchat : '{tpl.theStatusbox}{tpl.mFooterOpen}
    {tpl.btnClose}
    {tpl.btnRating}
    {tpl.btnHistory}
    {tpl.mFooterClose}',\n afterchat : '{tpl.mArticleOpen}{msg.rating}
    {tpl.mArticleClose} {tpl.mFooterOpen}
    {tpl.pCommentPlaceholder}
    {tpl.btnClose}
    {tpl.btnSendMail}
    {tpl.btnHistory}
    {tpl.btnRate}
    {tpl.mFooterClose}',\n // NM.chat.changeState('afterchat')\n reloaded_code : \"{empty: ['{idPrefix}history']}\",\n reloaded : '{tpl.mArticleOpen}{tpl.mArticleClose}{tpl.mFooterOpen}
    {tpl.btnClose}
    {tpl.btnSendMail}
    {tpl.btnRating}
    {tpl.btnPrint}
    {tpl.mFooterClose} ',\n // NM.chat.changeState('reloaded')\n blocked_code : '',\n blocked : \"{tpl.theStatusbox}\",\n // NM.chat.changeState('blocked')\n error : '{tpl.theStatusbox}',\n\n // Cobrowsing\n cobrowseRequest : '
  • {nickname} {msg.cobrowse_request} {msg.cobrowse_request_yes} {msg.cobrowse_request_no}
  • ',\n cobrowseAnswerAccepted : '
  • {msg.cobrowse_answer_accepted}
  • ',\n cobrowseAnswerRejected : '
  • {msg.cobrowse_answer_rejected}
  • ',\n\n // Rating\n rating : '{tpl.mArticleOpen} {msg.rating}
    {tpl.mArticleClose} {tpl.mFooterOpen}
    {tpl.pCommentPlaceholder}
    {tpl.btnClose}
    {tpl.btnSendMail}
    {tpl.btnHistory}
    {tpl.btnRate}
    {tpl.mFooterClose}',\n // NM.chat.changeState('rating')\n afterrating : '{tpl.mArticleOpen}{msg.afterrating}{tpl.mArticleClose}{tpl.mFooterOpen}
    {tpl.btnClose}
    {tpl.mFooterClose}',\n // NM.chat.changeState('afterrating')\n\n //sendmail_code : \"{replace: '{idPrefix}history'}\",\n sendmail : '{tpl.mArticleOpen}{tpl.mArticleClose}{tpl.mFooterOpen}
    {tpl.btnClose}
    {tpl.btnHistory}
    {tpl.btnRating}
    {tpl.btnSend}
    {tpl.mFooterClose}',\n // NM.chat.changeState('sendmail')\n\n aftersendmail : '{tpl.mArticleOpen}{msg.aftersendmail}{tpl.mArticleClose}{tpl.mFooterOpen}
    {tpl.btnClose}
    {tpl.mFooterClose}',\n\n // DEPRECATED\n // Colorpicker from core\n colorpicker: \"
    \" +\"\" +\"\" +\"\" +\"\" +\"\" +\"
    \"\n};\n","/*************************************\n ** jQuery Elephant - localStorage **\n ** plugin for form persistance **\n ** v1.0.4 **\n ** by: Don Burks **\n ** **\n *************************************/\n\n;(function(window, $, undefined) {\n\t\tvar defaults = {\n\t\t\t'key': 'jquery-elephant'\n\t\t},\n\t\tparams = {};\n\n var elephFns = {\n form: null,\n formData: {},\n save: function() {\n localStorage.setItem(params.key, JSON.stringify(elephFns.formData)); \n },\n load: function() {\n elephFns.formData = JSON.parse(localStorage.getItem(params.key)); \n if (elephFns.formData) {\n $.each(Object.keys(elephFns.formData), elephFns.defaultValues);\n } else {\n elephFns.formData = {};\n }\n }, \n storeData: function() {\n var box = $(this),\n label = box.attr('name');\n \n if (box.is(':checkbox') || box.is(':radio')) {\n var values = [];\n \n values.push(box.val());\n box.siblings(':checked').each(function() {\n values.push($(this).val());\n });\n\n elephFns.formData[label] = values;\n } else {\n elephFns.formData[label] = box.val();\n } \n \n elephFns.save();\n },\n defaultValues: function(key, value) {\n var box = elephFns.form.find('[name=\"'+value+'\"]'),\n value = elephFns.formData[value];\n \n\t\t\tif (typeof box == 'Array') {\n\t\t\t\tbox.filter('[value=\"' + value + '\"]').prop(\"checked\", true);\n\t\t\t} else {\n\t\t\t\tif (!box.is(':submit')) {\n\t\t\t\t\tbox.val(value);\n\t\t\t\t}\n\t\t\t}\n } \n };\n\n $.fn.elephant = function(val) {\n\t\tval = val || {};\n\t\tparams = $.extend(defaults, val);\n\n elephFns.form = $(this);\n elephFns.load();\n\n elephFns.form.find('input, select, textarea').on('change', elephFns.storeData);\n\n return $(this);\n }; \n})(window, jQuery);\n","/*!\n * jQuery Validation Plugin v1.14.0\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2015 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend($.fn, {\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t});\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\t\t\t\t// remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param });\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\treturn !!$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t});\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox']\", delegate)\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on(\"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tresult = true;\n\n\t\t\tthis.lastElement = checkElement;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\tresult = this.check( checkElement ) !== false;\n\t\t\t\tif ( result ) {\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add aria-invalid status for screen readers\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\n\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[ name ],\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar i, elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements.removeClass( this.settings.errorClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ this.name ] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar val,\n\t\t\t\t$element = $( element ),\n\t\t\t\ttype = element.type;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter(\":checked\").val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\n\t\t\t}\n\n\t\t\tval = $element.val();\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[ method ],\n\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t});\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\t\t\tif ( error.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\t\t\t\t// create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\]|\\$)/g, \"\\\\$1\");\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName( element ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// aria-describedby should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t},\n\n\t\t// cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t});\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/creditcard-method/\n\t\t// based on http://en.wikipedia.org/wiki/Luhn_algorithm\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false,\n\t\t\t\tn, cDigit;\n\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\n\n\t\t\t// Basing min and max length on\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\n\t\t\t\tcDigit = value.charAt( n );\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn ( nCheck % 10 ) === 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.off( \".validate-equalTo\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue( element ),\n\t\t\t\tvalidator, data;\n\n\t\t\tif (!this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n});\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = xhr;\n\t\t}\n\t});\n} else {\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\treturn pendingRequests[port];\n\t\t}\n\t\treturn ajax.apply(this, arguments);\n\t};\n}\n\n}));\n"],"sourceRoot":"/source/"}