{"version":3,"sources":["ecom-checkout.js","jQuery.validity.js"],"names":["setCheckoutScript","root","$","data","fbPixelEnabled","click","e","preventDefault","modal","userLoggedIn","val","SetBillingAddressAuto","SetBillingAddressSaved","SetDeliveryAddressAuto","SetDeliveryAddressSaved","getAddress","api_key","input_class","button_class","dropdown_class","output_fields","line_1","line_2","post_town","county","postcode","onLookupSuccess","onLookupError","onAddressSelected","elem","index","GetDeliveryOptions","SetBillingAddressManual","change","SetDeliveryAddressManual","document","on","deliveryOptionId","SetUseBilling","validateInput","text","fbq_ProcessPayment","submit","fadeIn","blur","fadeOut","$useBillingCbx","slideDown","show","length","prop","hide","slideUp","ValidNotes","giftWrappingOption","this","addressId","value","post","response","result","address","Address1","Address2","Town","County","Postcode","Country","alert","error","InitUseBilling","InitPaymentMethods","is","AddVoucherDone","location","reload","err","msg","find","parseFloat","amount","toFixed","validity","setup","outputMode","start","emailCheckRegex","billEmail","billCounty","billCountry","delEmail","delCounty","delCountry","require","test","addClass","end","valid","ShowAllBillingAddressFields","ShowAllDeliveryAddressFields","requireTerms","html","countryCode","useBilling","giftWrappingOptionId","deliveryOptionsExist","$checkoutForm","enableUnsaved","CheckMinimumOrder","get","$makePaymentArea","reachedMinimumOrder","CheckItemsCount","hasItems","undefined","validate","$obj","regimen","message","$reduction","reduction","filter","settings","elementSupport","elements","each","push","raiseError","format","field","infer","addToReport","isValidating","report","errors","obj","out","raise","raiseAggregateError","raiseAggregate","numericSum","accumulator","n","isNaN","str","p","hasOwnProperty","replace","RegExp","capitalize","$f","id","ret","defaultFieldName","arr","split","i","join","trim","sz","substring","toUpperCase","__private","defaults","scrollTo","modalErrorsClickable","argToString","getDate","getMonth","getFullYear","debugPrivates","extend","patterns","integer","date","email","usd","url","number","zip","phone","guid","time12","time24","nonHtml","messages","match","lessThan","lessThanOrEqualTo","greaterThan","greaterThanOrEqualTo","range","tooLong","tooShort","alphabet","minCharClass","maxCharClass","equal","distinct","sum","sumMax","sumMin","radioChecked","generic","defer","results","name","v","o","outputs","apply","Array","prototype","slice","call","arguments","charClasses","alphabetical","numeric","alphanumeric","symbol","options","clear","fn","arg","tagName","toLowerCase","f","isFunction","bind","res","rule","global","lastIndex","min","max","getTime","d","Date","Big","maxLength","minLength","alpha","chars","idx","indexOf","charAt","charClass","arg0","arg1","transform","map","first","subMap","i1","i2","radioNotChecked","checkboxChecked","assert","expression","fail","jQuery","tooltip","tooltipClass","remove","pos","offset","left","width","top","focus","css","appendTo","getIdentifier","attr","label","cssClass","hash","labelSelector","select","insertAfter","errorClass","container","off","errorStyle","parseInt","erroneous","wrapper","buffer","summary","removeClass","write","Platform","Deferred","execute","event"],"mappings":"AAKA,QAAAA,qBACAC,KAAAC,EAAA,QAAAC,KAAA,OAEA,IAAAC,GAAAF,EAAA,kBAAAC,KAAA,WAEAD,GAAA,kBAAAG,MAAA,SAAAC,GACAA,EAAAC,iBACAL,EAAA,mBAAAM,MAAA,SA6EA,IAAAC,GAAAP,EAAA,kBAAAC,KAAA,YACA,UAAAM,IACA,OAAAP,EAAA,sBAAAQ,MACAC,wBAEAC,yBAEA,OAAAV,EAAA,qBAAAQ,MACAG,yBAEAC,2BAGAZ,EAAA,uBAAAa,YACAC,QAAA,6BACAC,YAAA,2DACAC,aAAA,kEACAC,eAAA,iDAIAC,eACAC,OAAA,aACAC,OAAA,aAEAC,UAAA,YACAC,OAAA,cACAC,SAAA,iBAEAC,gBAAA,SAAAvB,KACAwB,cAAA,aACAC,kBAAA,SAAAC,EAAAC,GACAC,wBAQA7B,EAAA,sBAAAa,YACAC,QAAA,6BACAC,YAAA,0DACAC,aAAA,kEACAC,eAAA,iDAIAC,eACAC,OAAA,YACAC,OAAA,YAEAC,UAAA,WACAC,OAAA,aACAC,SAAA,gBAEAC,gBAAA,SAAAvB,KACAwB,cAAA,aACAC,kBAAA,SAAAC,EAAAC,GACAC,wBAQA7B,EAAA,+BAAAG,MAAA,WACA2B,4BAGA9B,EAAA,6BAAAG,MAAA,WACAM,0BAGAT,EAAA,gBAAA+B,OAAA,SAAA3B,GASA,MARAA,GAAAC,iBACA,MAAAL,EAAA,gBAAAQ,MACAsB,0BAGArB,wBAEAoB,sBACA,IAGA7B,EAAA,eAAA+B,OAAA,SAAA3B,GASA,MARAA,GAAAC,iBACA,MAAAL,EAAA,eAAAQ,MACAwB,2BAGArB,yBAEAkB,sBACA,IAGA7B,EAAA,gCAAAG,MAAA,WACA6B,6BAGAhC,EAAA,8BAAAG,MAAA,WACAQ,2BAGAX,EAAA,iBAAA+B,OAAA,WACAF,uBAEA7B,EAAA,gBAAA+B,OAAA,WACAF,uBAGA7B,EAAAiC,UAAAC,GAAA,QAAA,qBAAA,SAAA9B,GACA,GAAA+B,GAAAnC,EAAA,4CAAAQ,KAEA,OADAqB,oBAAAM,IACA,IAIAnC,EAAA,oBAAAG,MAAA,WACAiC,gBAKAP,uBAGA7B,EAAA,mBAAAG,MAAA,WAaA,MAZAkC,kBACArC,EAAA,mBAAAsC,KAAA,uBAGA,QAAApC,GACAqC,qBAEAvC,EAAA,kBAAAwC,UAGAxC,EAAA,oBAAAyC,UAEA,IAGAzC,EAAA,uBAAA0C,KAAA,WACA1C,EAAA,sBAAA2C,YAGA3C,EAAA,eAAAG,MAAA,WACA,GAAAyC,GAAA5C,EAAA,mBACAA,GAAA,4CAAAsC,KAAA,gBAGAtC,EAAA,YAAA6C,YACA7C,EAAA,kBAAA8C,OACAF,EAAAG,OAAA,GAAAH,EAAAI,KAAA,WAAA,GAEAhD,EAAA,4BAAAsC,KAAA,OACAF,gBACAP,uBAEA7B,EAAA,kBAAAG,MAAA,WACA,GAAAyC,GAAA5C,EAAA,mBACAA,GAAA,4CAAAsC,KAAA,gBAGAtC,EAAA,YAAA6C,YACA7C,EAAA,kBAAA8C,OACAF,EAAAG,OAAA,GAAAH,EAAAI,KAAA,WAAA,GAEAhD,EAAA,4BAAAsC,KAAA,OACAF,gBACAP,uBAEA7B,EAAA,cAAAG,MAAA,WACA,GAAAyC,GAAA5C,EAAA,mBACAA,GAAA,4CAAAsC,KAAA,gBAGAM,EAAAG,OAAA,GAAAH,EAAAI,KAAA,WAAA,GACAhD,EAAA,kBAAAiD,OACAjD,EAAA,YAAAkD,UAEAlD,EAAA,4BAAAsC,KAAA,OACAF,gBACAP,uBAEA7B,EAAA,oBAAAG,MAAA,WACA,GAAAyC,GAAA5C,EAAA,mBACAA,GAAA,4CAAAsC,KAAA,eAGAtC,EAAA,YAAA6C,YACA7C,EAAA,kBAAA8C,OACAF,EAAAG,OAAA,GAAAH,EAAAI,KAAA,WAAA,GAEAhD,EAAA,4BAAAsC,KAAA,OACAF,gBACAP,uBAEA7B,EAAA,uBAAAG,MAAA,WACA,GAAAyC,GAAA5C,EAAA,mBACAA,GAAA,4CAAAsC,KAAA,eAGAtC,EAAA,YAAA6C,YACA7C,EAAA,kBAAA8C,OACAF,EAAAG,OAAA,GAAAH,EAAAI,KAAA,WAAA,GAEAhD,EAAA,4BAAAsC,KAAA,OACAF,gBACAP,uBASA7B,EAAA,cAAAG,MAAA,WACAH,EAAA,cAAAgD,KAAA,YACAG,WAAA,IAAA,KAaAnD,EAAA,sBAAA+B,OAAA,WACAqB,mBAAApD,EAAAqD,MAAA7C,MACAqB,uBAGA7B,EAAA,sBAAAkC,GAAA,SAAA,WACA,GAAAoB,GAAAD,KAAAE,KACA,QAAAD,GACAtD,EAAA,cAAAQ,IAAA,IACAR,EAAA,cAAAQ,IAAA,IACAR,EAAA,aAAAQ,IAAA,IACAR,EAAA,eAAAQ,IAAA,IACAR,EAAA,iBAAAQ,IAAA,IACAR,EAAA,gBAAAQ,IAAA,MACAR,EAAA,8BAAAQ,IAAA,QACAC,wBACAoB,sBAEA7B,EAAAwD,KAAAzD,KAAA,0BACAuD,UAAAA,GACA,SAAAG,GACA,OAAAA,EAAAC,QACA1D,EAAA,cAAAQ,IAAAiD,EAAAE,QAAAC,UACA5D,EAAA,cAAAQ,IAAAiD,EAAAE,QAAAE,UACA7D,EAAA,aAAAQ,IAAAiD,EAAAE,QAAAG,MACA9D,EAAA,eAAAQ,IAAAiD,EAAAE,QAAAI,QACA/D,EAAA,iBAAAQ,IAAAiD,EAAAE,QAAAK,UACAhE,EAAA,gBAAAQ,IAAAiD,EAAAE,QAAAM,SACAvD,yBACAmB,sBAEAqC,MAAA,0BAAAT,EAAAU,WAMAnE,EAAA,qBAAAkC,GAAA,SAAA,WACA,GAAAoB,GAAAD,KAAAE,KACA,QAAAD,GACAtD,EAAA,aAAAQ,IAAA,IACAR,EAAA,aAAAQ,IAAA,IACAR,EAAA,YAAAQ,IAAA,IACAR,EAAA,cAAAQ,IAAA,IACAR,EAAA,gBAAAQ,IAAA,IACAR,EAAA,eAAAQ,IAAA,MACAR,EAAA,6BAAAQ,IAAA,QACAG,yBACAkB,sBAEA7B,EAAAwD,KAAAzD,KAAA,0BACAuD,UAAAA,GACA,SAAAG,GACA,OAAAA,EAAAC,QACA1D,EAAA,aAAAQ,IAAAiD,EAAAE,QAAAC,UACA5D,EAAA,aAAAQ,IAAAiD,EAAAE,QAAAE,UACA7D,EAAA,YAAAQ,IAAAiD,EAAAE,QAAAG,MACA9D,EAAA,cAAAQ,IAAAiD,EAAAE,QAAAI,QACA/D,EAAA,gBAAAQ,IAAAiD,EAAAE,QAAAK,UACAhE,EAAA,eAAAQ,IAAAiD,EAAAE,QAAAM,SACArD,0BACAiB,sBAEAqC,MAAA,0BAAAT,EAAAU,WAOAtC,qBACAuC,iBACAC,qBAGA,QAAAD,kBACApE,EAAA,oBAAAsE,GAAA,aACAtE,EAAA,qBAAAiD,OACAjD,EAAA,0BAAAiD,SAEAjD,EAAA,qBAAA8C,OACA9C,EAAA,0BAAA8C,QAIA,QAAAV,iBACApC,EAAA,oBAAAsE,GAAA,aACAtE,EAAA,qBAAAkD,UACAlD,EAAA,0BAAAiD,SAEAjD,EAAA,0BAAA8C,OACA9C,EAAA,qBAAA6C,aAsCA,QAAA0B,gBAAAtE,GACA,MAAAA,EAAAyD,OACAc,SAAAC,SAEA,QAAAxE,EAAAyD,OAEAQ,MAAA,UAAAjE,EAAAyE,KAEA,2BAAAzE,EAAA0E,KACA3E,EAAA,sBAAA4E,KAAA,iBAAAtC,KAAA,yCAAAuC,WAAA5E,EAAA6E,QAAAC,QAAA,IACA/E,EAAA,sBAAAyC,WAGAzC,EAAA,sBAAA4E,KAAA,iBAAAtC,KAAA,yBACAtC,EAAA,sBAAAyC,UAIA,QAAAJ,iBACArC,EAAAgF,SAAAC,OAAAC,WAAA,YAGAlF,EAAAgF,SAAAG,OAEA,IAAAC,GAAA,eACAxC,EAAA5C,EAAA,oBAEAqF,EAAArF,EAAA,cAAAQ,MAGA8E,GAFAtF,EAAA,cAAAQ,MACAR,EAAA,aAAAQ,MACAR,EAAA,eAAAQ,OAEA+E,GADAvF,EAAA,iBAAAQ,MACAR,EAAA,gBAAAQ,OACAgF,EAAAxF,EAAA,aAAAQ,MAGAiF,GAFAzF,EAAA,aAAAQ,MACAR,EAAA,YAAAQ,MACAR,EAAA,cAAAQ,OAEAkF,GADA1F,EAAA,gBAAAQ,MACAR,EAAA,eAAAQ,MAGA,IAAAR,EAAA,cAAAsE,GAAA,cACAtE,EAAA,4BAAA2F,WACA/C,EAAA0B,GAAA,cACAc,EAAAQ,KAAAJ,IAGA,MAFArC,YAAA,8DAAA,GACAnD,EAAA,aAAA6F,SAAA,uBACA,GAMA7F,EAAA,eAAAsE,GAAA,aAAAtE,EAAA,kBAAAsE,GAAA,eACAtE,EAAA,mBAAA2F,UACA/C,EAAA0B,GAAA,aACAtE,EAAA,4BAAA2F,YAKA3F,EAAA,oBAAAsE,GAAA,aAAAtE,EAAA,uBAAAsE,GAAA,eACAtE,EAAA,oCAAA2F,UACA/C,EAAA0B,GAAA,aACAtE,EAAA,4CAAA2F,UAMA,IAAAjC,GAAA1D,EAAAgF,SAAAc,KAQA,IANApC,EAAAqC,QACAC,8BACAC,gCAIAjG,EAAA,cAAAsE,GAAA,YACA,GAAAZ,EAAAqC,OACA,GAAA,OAAAL,GAAA,IAAAD,EAAA1C,OAGA,MAFAI,YAAA,4EAAA,GACAnD,EAAA,cAAA6F,SAAA,uBACA,MAGA1C,YAAA,wEAAA,EAKA,IAAAnD,EAAA,eAAAsE,GAAA,aAAAtE,EAAA,kBAAAsE,GAAA,aAAAtE,EAAA,oBAAAsE,GAAA,aAAAtE,EAAA,uBAAAsE,GAAA,YACA,GAAAZ,EAAAqC,MAAA,CAEA,IAAAX,EAAAQ,KAAAP,GAGA,MAFAlC,YAAA,8DAAA,GACAnD,EAAA,cAAA6F,SAAA,uBACA,CAEA,KAAAjD,EAAA0B,GAAA,cACAc,EAAAQ,KAAAJ,GAGA,MAFArC,YAAA,8DAAA,GACAnD,EAAA,aAAA6F,SAAA,uBACA,CAKA,IAAA,OAAAN,GAAA,IAAAD,EAAAvC,OAGA,MAFAI,YAAA,4EAAA,GACAnD,EAAA,eAAA6F,SAAA,uBACA,CAEA,IAAA,OAAAH,GAAA,IAAAD,EAAA1C,OAGA,MAFAI,YAAA,4EAAA,GACAnD,EAAA,cAAA6F,SAAA,uBACA,MAGA1C,YAAA,wEAAA,EAIA,IAAA+C,GAAAlG,EAAA,kBAAAC,KAAA,gBACA,OAAA,mBAAAiG,IAAA,SAAAA,IACAxC,EAAAqC,OACA/F,EAAA,cAAAsE,GAAA,YASAZ,EAAAqC,OARA5C,WAAA,uEAAA,GACAnD,EAAA,aAAA6F,SAAA,uBACA,GASA,QAAA1C,YAAAb,EAAAQ,GACAA,GACA9C,EAAA,eAAAmG,KAAA7D,GACAtC,EAAA,eAAAyC,UAEAzC,EAAA,eAAA2C,UAKA,QAAAd,oBAAAM,GACA,GACAiE,GACA7E,EAFA8E,EAAArG,EAAA,oBAAAsE,GAAA,WAGA+B,IACAD,EAAApG,EAAA,gBAAAQ,MACAe,EAAAvB,EAAA,iBAAAQ,QAEA4F,EAAApG,EAAA,eAAAQ,MACAe,EAAAvB,EAAA,gBAAAQ,OAGAR,EAAAwD,KAAAzD,KAAA,wCACAqG,YAAAA,EACA7E,SAAAA,EACAY,iBAAAA,EACAmE,qBAAAlD,oBACA,SAAAnD,GACAD,EAAA,2BAAAmG,KAAAlG,EACA,IAAAsG,GAAAvG,EAAA,8BAAA+C,OAAA,CACAwD,GACAvG,EAAA,mBAAA8C,OAEA9C,EAAA,mBAAAiD,SAIA,QAAAoB,sBACArE,EAAA,qCAAAgD,KAAA,WAAA,GAAA7C,QAKA,QAAAM,yBACA,GAAA+F,GAAAxG,EAAA,iBACA,IAAA,SAAAwG,EAAAvG,KAAA,gCAAA,CACA,GAAAwG,GAAA,SAAAD,EAAAvG,KAAA,iCACAD,GAAA,oBAAAgD,KAAA,YAAAyD,GAEAzG,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,iBAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,6BAAA8C,OACA9C,EAAA,2BAAAkD,UACAlD,EAAA,yBAAA8C,OAGA,QAAApC,0BACA,GAAA8F,GAAAxG,EAAA,iBACA,UAAAwG,EAAAvG,KAAA,iCACAD,EAAA,oBAAAgD,KAAA,WAAA,GAAAA,KAAA,YAAA,GAEAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,iBAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,6BAAAiD,OACAjD,EAAA,2BAAA6C,YACA7C,EAAA,yBAAAiD,OAGA,QAAAnB,2BACA,GAAA0E,GAAAxG,EAAA,iBACA,IAAA,SAAAwG,EAAAvG,KAAA,gCAAA,CACA,GAAAwG,GAAA,SAAAD,EAAAvG,KAAA,iCACAD,GAAA,oBAAAgD,KAAA,YAAAyD,GAEAzG,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,iBAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,6BAAA8C,OACA9C,EAAA,2BAAA6C,YACA7C,EAAA,yBAAAiD,OAGA,QAAA+C,+BACA,UAAAhG,EAAA,kBAAAC,KAAA,cAAA,OAAAD,EAAA,sBAAAQ,OACAR,EAAA,6BAAA8C,OAEA9C,EAAA,2BAAA6C,YACA7C,EAAA,yBAAAiD,OAIA,QAAAtC,0BACA,GAAA6F,GAAAxG,EAAA,iBACA,IAAA,SAAAwG,EAAAvG,KAAA,iCAAA,CACA,GAAAwG,GAAA,SAAAD,EAAAvG,KAAA,kCACAD,GAAA,mBAAAgD,KAAA,YAAAyD,GAEAzG,EAAA,mBAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,YAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,8BAAA8C,OACA9C,EAAA,4BAAAkD,UACAlD,EAAA,0BAAA8C,OAGA,QAAAlC,2BACA,GAAA4F,GAAAxG,EAAA,iBACA,UAAAwG,EAAAvG,KAAA,kCACAD,EAAA,mBAAAgD,KAAA,WAAA,GAAAA,KAAA,YAAA,GAEAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,YAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,8BAAAiD,OACAjD,EAAA,4BAAA6C,YACA7C,EAAA,0BAAAiD,OAGA,QAAAjB,4BACA,GAAAwE,GAAAxG,EAAA,iBACA,IAAA,SAAAwG,EAAAvG,KAAA,iCAAA,CACA,GAAAwG,GAAA,SAAAD,EAAAvG,KAAA,kCACAD,GAAA,mBAAAgD,KAAA,YAAAyD,GAEAzG,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,aAAAgD,KAAA,YAAA,GACAhD,EAAA,YAAAgD,KAAA,YAAA,GACAhD,EAAA,cAAAgD,KAAA,YAAA,GACAhD,EAAA,gBAAAgD,KAAA,YAAA,GACAhD,EAAA,eAAAgD,KAAA,YAAA,GACAhD,EAAA,8BAAA8C,OACA9C,EAAA,4BAAA6C,YACA7C,EAAA,0BAAAiD,OAGA,QAAAgD,gCACA,UAAAjG,EAAA,kBAAAC,KAAA,cAAA,OAAAD,EAAA,qBAAAQ,OACAR,EAAA,8BAAA8C,OAEA9C,EAAA,4BAAA6C,YACA7C,EAAA,0BAAAiD,OA0BA,QAAAyD,qBACA1G,EAAA2G,IAAA5G,KAAA,+BAAA,SAAA0D,GACA,GAAAmD,GAAA5G,EAAA,uBACAyD,GAAAoD,oBACAD,EAAA9D,OAEA8D,EAAA3D,SAIA,QAAA6D,mBACA9G,EAAA2G,IAAA5G,KAAA,2BAAA,SAAA0D,GACA,GAAAmD,GAAA5G,EAAA,uBACAyD,GAAAsD,SACAH,EAAA9D,OAEA8D,EAAA3D,UChxBA,SAAAjD,EAAAgH,GAi5BA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAGAC,IAAAH,EAAAI,WAAAJ,GAAAK,OAAAvH,EAAAgF,SAAAwC,SAAAC,gBAGAC,IA0BA,OAvBAL,GAAAM,KACA,WAEAR,EAAA9D,MACAqE,EAAAE,KAAAvE,MAKAwE,EACAxE,KACAyE,EAAAV,GACAW,MAAAC,EAAA3E,WAQA6D,EAAAI,UAAAtH,EAAA0H,GAGAR,EAIA,QAAAe,KACAjI,EAAAgF,SAAAkD,iBACAlI,EAAAgF,SAAAmD,OAAAC,SACApI,EAAAgF,SAAAmD,OAAApC,OAAA,GAMA,QAAA8B,GAAAQ,EAAA1D,GACAsD,IAEAjI,EAAAgF,SAAAsD,IAAAC,MAAAvI,EAAAqI,GAAA1D,GAKA,QAAA6D,GAAAtB,EAAAvC,GACAsD,IAEAjI,EAAAgF,SAAAsD,IAAAG,eAAAvB,EAAAvC,GAIA,QAAA+D,GAAAL,GACA,GAAAM,GAAA,CAQA,OAPAN,GAAAV,KACA,WACA,GAAAiB,GAAA/D,WAAAxB,KAAAE,MAEAoF,IAAAE,MAAAD,GAAA,EAAAA,IAGAD,EAMA,QAAAb,GAAAgB,EAAAT,GACA,IAAA,GAAAU,KAAAV,GACAA,EAAAW,eAAAD,KACAD,EAAAA,EAAAG,QACA,GAAAC,QAAA,OAAAH,EAAA,MAAA,KACAV,EAAAU,IAIA,OAAAI,GAAAL,GAOA,QAAAd,GAAAD,GACA,GACAqB,GAAApJ,EAAA+H,GACAsB,EAAAD,EAAApG,KAAA,MACAsG,EAAAtJ,EAAAgF,SAAAwC,SAAA+B,gBAGA,IAAAH,EAAApG,KAAA,SAAAD,OACAuG,EAAAF,EAAApG,KAAA,aAIA,IAAA,sBAAA4C,KAAAyD,GACAC,EAAAD,EAAAJ,QAAA,oBAAA,WAIA,IAAA,2BAAArD,KAAAyD,GAAA,CAGA,IAAA,GAFAG,GAAAH,EAAAI,MAAA,KAEAC,EAAA,EAAAA,EAAAF,EAAAzG,SAAA2G,EACAF,EAAAE,GAAAP,EAAAK,EAAAE,GAGAJ,GAAAE,EAAAG,KAAA,KAGA,MAAA3J,GAAA4J,KAAAN,GAIA,QAAAH,GAAAU,GACA,MAAAA,GAAAC,UACAD,EAAAC,UAAA,EAAA,GAAAC,cAAAF,EAAAC,UAAA,EAAAD,EAAA9G,QACA8G,EA1gCA,GA6BAG,GA5BAC,GAEA/E,WAAA,UAIAgF,UAAA,EAGAC,sBAAA,EAGAZ,iBAAA,aAGA9B,eAAA,wDAIA2C,YAAA,SAAA5J,GACA,MAAAA,GAAA6J,QACA7J,EAAA8J,WAAA,EAAA,IAAA9J,EAAA6J,UAAA,IAAA7J,EAAA+J,cACA/J,GAGAgK,eAAA,EAQAxK,GAAAgF,UAGAwC,SAAAxH,EAAAyK,OAAAR,MAIAS,UACAC,QAAA,QAOAC,KAAA,iDAEAC,MAAA,64BACAC,IAAA,6CACAC,IAAA,sqCAMAC,OAAA,yCAEAC,IAAA,mBACAC,MAAA,2BACAC,KAAA,qEACAC,OAAA,iDAEAC,OAAA,+CAEAC,QAAA,YAIAC,UAEA5F,QAAA,wBAEA6F,MAAA,oCACAb,QAAA,6CACAC,KAAA,qDACAC,MAAA,0CACAC,IAAA,oDACAC,IAAA,uCACAC,OAAA,0CACAC,IAAA,+DACAC,MAAA,6DACAC,KAAA,oFACAE,OAAA,uDACAD,OAAA,4DAGAK,SAAA,qCACAC,kBAAA,iDACAC,YAAA,wCACAC,qBAAA,oDACAC,MAAA,8CAGAC,QAAA,oDACAC,SAAA,qDAGAT,QAAA,2CACAU,SAAA,2CAEAC,aAAA,iEACAC,aAAA,iEAGAC,MAAA,sBACAC,SAAA,wBACAC,IAAA,8BACAC,OAAA,kDACAC,OAAA,qDAGAC,aAAA,mCAEAC,QAAA,YAIAnE,KACAnD,MAAA,WACA9B,KAAAqJ,MAAA,UAEA5G,IAAA,SAAA6G,GACAtJ,KAAAqJ,MAAA,MAAAC,IAEApE,MAAA,SAAArB,EAAAvC,GACAtB,KAAAqJ,MAAA,QAAAxF,EAAAvC,IAEA8D,eAAA,SAAAvB,EAAAvC,GACAtB,KAAAqJ,MAAA,iBAAAxF,EAAAvC,IAEA+H,MAAA,SAAAE,GACA,GACAC,GAAA7M,EAAAgF,SACA8H,EAAAD,EAAAE,QAAAF,EAAArF,SAAAtC,WAEA4H,GAAAF,GAAAI,MACAF,EACAG,MAAAC,UAAAC,MAAAC,KAAAC,UAAA,MAOAC,aACAC,aAAA,MACAC,QAAA,MACAC,aAAA,eACAC,OAAA,iBAKAX,WAGA/C,UAAAhD,EAGA/B,MAAA,SAAA0I,GACAtK,KAAAmE,SAAAxH,EAAAyK,OAAApH,KAAAmE,SAAAmG,GAEAtK,KAAAmE,SAAAgD,cACAnH,KAAA2G,UAAAA,EAGA3G,KAAA2G,UAAAhD,GASAmB,OAAA,KAGAD,aAAA,WACA,QAAA7E,KAAA8E,QAIAhD,MAAA,WAIA9B,KAAAiF,IAAAnD,QAGA9B,KAAA8E,QAAAC,OAAA,EAAArC,OAAA,IAIAD,IAAA,WAEA,GAAA6G,GAAAtJ,KAAA8E,SAAAC,OAAA,EAAArC,OAAA,EAOA,OALA1C,MAAA8E,OAAA,KAGA9E,KAAAiF,IAAAxC,IAAA6G,GAEAA,GAIAiB,MAAA,WACAvK,KAAA8B,QACA9B,KAAAyC,QAOA9F,EAAA6N,GAAApD,QAMAzF,SAAA,SAAA8I,GAEA,MAAAzK,MAAAsE,KAEA,WAGA,GAAA,QAAAtE,KAAA0K,QAAAC,cAAA,CACA,GAAAC,GAAA,IAIA,iBAAA,GACAA,EAAA,WACAjO,EAAA8N,GAAAnI,WAMA3F,EAAAkO,WAAAJ,KACAG,EAAAH,GAGAA,GACA9N,EAAAqD,MAAA8K,KACA,SACA,WAGA,MAFAnO,GAAAgF,SAAAG,QACA8I,IACAjO,EAAAgF,SAAAc,MAAAC,YAiBAJ,QAAA,SAAAhB,GACA,MAAAsC,GACA5D,KACA,SAAAgF,GACA,GAAA7H,GAAAR,EAAAqI,GAAA7H,MAEA4N,EAAA5N,EAAAuC,MAEA,OAAAqL,IAEAzJ,GAAA3E,EAAAgF,SAAAuG,SAAA5F,UAMA6F,MAAA,SAAA6C,EAAA1J,GAkBA,MAfAA,KAEAA,EAAA3E,EAAAgF,SAAAuG,SAAAC,MAGA,gBAAA,IAAAxL,EAAAgF,SAAAuG,SAAA8C,KACA1J,EAAA3E,EAAAgF,SAAAuG,SAAA8C,KAKA,gBAAA,KACAA,EAAArO,EAAAgF,SAAA0F,SAAA2D,IAGApH,EACA5D,KAKArD,EAAAkO,WAAAG,GAEA,SAAAhG,GACA,OAAAA,EAAA9E,MAAAR,QAAAsL,EAAAhG,EAAA9E,QAGA,SAAA8E,GAOA,MAJAgG,GAAAC,SACAD,EAAAE,UAAA,IAGAlG,EAAA9E,MAAAR,QAAAsL,EAAAzI,KAAAyC,EAAA9E,QAGAoB,IAKAkH,MAAA,SAAA2C,EAAAC,EAAA9J,GACA,MAAAsC,GACA5D,KAEAmL,EAAAE,SAAAD,EAAAC,QAGA,SAAArG,GACA,GAAAsG,GAAA,GAAAC,MAAAvG,EAAA9E,MACA,OAAAoL,IAAA,GAAAC,MAAAJ,IAAAG,GAAA,GAAAC,MAAAH,IAGAD,EAAA1E,WAAA2E,EAAA3E,WAAA+E,IAIA,SAAAxG,GACA,GAAAO,GAAA,GAAAiG,KAAAxG,EAAA9E,MACA,OACAqF,GAAAgD,qBAAA,GAAAiD,KAAAL,KACA5F,EAAA8C,kBAAA,GAAAmD,KAAAJ,KAKA,SAAApG,GACA,GAAA4F,GAAApJ,WAAAwD,EAAA9E,MACA,OAAA0K,IAAAO,GAAAP,GAAAQ,GAGA9J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAM,OACA2C,IAAAxO,EAAAgF,SAAAwC,SAAA4C,YAAAoE,GACAC,IAAAzO,EAAAgF,SAAAwC,SAAA4C,YAAAqE,OAOA9C,YAAA,SAAA6C,EAAA7J,GACA,MAAAsC,GACA5D,KAEAmL,EAAAE,QACA,SAAArG,GACA,MAAA,IAAAuG,MAAAvG,EAAA9E,OAAAiL,GAGAA,EAAA1E,WAAA+E,IAEA,SAAAxG,GACA,MAAA,IAAAwG,KAAAxG,EAAA9E,OAAAoI,YAAA,GAAAkD,KAAAL,KAGA,SAAAnG,GACA,MAAAxD,YAAAwD,EAAA9E,OAAAiL,GAGA7J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAI,aACA6C,IAAAxO,EAAAgF,SAAAwC,SAAA4C,YAAAoE,OAOA5C,qBAAA,SAAA4C,EAAA7J,GACA,MAAAsC,GACA5D,KAEAmL,EAAAE,QACA,SAAArG,GACA,MAAA,IAAAuG,MAAAvG,EAAA9E,QAAAiL,GAGAA,EAAA1E,WAAA+E,IAEA,SAAAxG,GACA,MAAA,IAAAwG,KAAAxG,EAAA9E,OAAAqI,qBAAA,GAAAiD,KAAAL,KAGA,SAAAnG,GACA,MAAAxD,YAAAwD,EAAA9E,QAAAiL,GAGA7J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAK,sBACA4C,IAAAxO,EAAAgF,SAAAwC,SAAA4C,YAAAoE,OAOA/C,SAAA,SAAAgD,EAAA9J,GACA,MAAAsC,GACA5D,KAEAoL,EAAAC,QACA,SAAArG,GACA,MAAA,IAAAuG,MAAAvG,EAAA9E,OAAAkL,GAGAA,EAAA3E,WAAA+E,IAEA,SAAAxG,GACA,MAAA,IAAAwG,KAAAxG,EAAA9E,OAAAkI,SAAA,GAAAoD,KAAAJ,KAGA,SAAApG,GACA,MAAAxD,YAAAwD,EAAA9E,OAAAkL,GAGA9J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAE,UACAgD,IAAAzO,EAAAgF,SAAAwC,SAAA4C,YAAAqE,OAOA/C,kBAAA,SAAA+C,EAAA9J,GACA,MAAAsC,GACA5D,KAEAoL,EAAAC,QACA,SAAArG,GACA,MAAA,IAAAuG,MAAAvG,EAAA9E,QAAAkL,GAGAA,EAAA3E,WAAA+E,IAEA,SAAAxG,GACA,MAAA,IAAAwG,KAAAxG,EAAA9E,OAAAmI,kBAAA,GAAAmD,KAAAJ,KAGA,SAAApG,GACA,MAAAxD,YAAAwD,EAAA9E,QAAAkL,GAGA9J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAG,mBACA+C,IAAAzO,EAAAgF,SAAAwC,SAAA4C,YAAAqE,OAOAK,UAAA,SAAAL,EAAA9J,GACA,MAAAsC,GACA5D,KACA,SAAAgF,GACA,MAAAA,GAAA9E,MAAAR,QAAA0L,GAEA9J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAO,SACA2C,IAAAA,MAOAM,UAAA,SAAAP,EAAA7J,GACA,MAAAsC,GACA5D,KACA,SAAAgF,GACA,MAAAA,GAAA9E,MAAAR,QAAAyL,GAEA7J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAQ,UACAyC,IAAAA,MAOAxC,SAAA,SAAAgD,EAAArK,GACA,GAAAsK,KAEA,OAAAhI,GACA5D,KACA,SAAAgF,GAIA,IAAA,GAAA6G,GAAA,EAAAA,EAAA7G,EAAA9E,MAAAR,SAAAmM,EACA,GAAAF,EAAAG,QAAA9G,EAAA9E,MAAA6L,OAAAF,MAAA,EAEA,MADAD,GAAArH,KAAAS,EAAA9E,MAAA6L,OAAAF,KACA,CAIA,QAAA,GAEAvK,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAS,UACAiD,MAAAA,EAAAtF,KAAA,UAOAsC,aAAA,SAAAoD,EAAAb,EAAA7J,GASA,MARA,gBAAA,KACA0K,EAAAA,EAAArB,cAEAhO,EAAAgF,SAAAsI,YAAA+B,KACAA,EAAArP,EAAAgF,SAAAsI,YAAA+B,KAIApI,EACA5D,KACA,SAAAgF,GACA,OAAAA,EAAA9E,MAAAiI,MAAA6D,QAAAtM,QAAAyL,GAEA7J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAU,cACAuC,IAAAA,EACAa,UAAAA,MAOAnD,aAAA,SAAAmD,EAAAZ,EAAA9J,GASA,MARA,gBAAA,KACA0K,EAAAA,EAAArB,cAEAhO,EAAAgF,SAAAsI,YAAA+B,KACAA,EAAArP,EAAAgF,SAAAsI,YAAA+B,KAIApI,EACA5D,KACA,SAAAgF,GACA,OAAAA,EAAA9E,MAAAiI,MAAA6D,QAAAtM,QAAA0L,GAEA9J,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAW,cACAuC,IAAAA,EACAY,UAAAA,MAQA/D,QAAA,SAAA3G,GACA,MAAAsC,GACA5D,KAEA,SAAAgF,GACA,MAAArI,GAAAgF,SAAA0F,SAAAY,QAAA1F,KAAAyC,EAAA9E,QAGAoB,GAAA3E,EAAAgF,SAAAuG,SAAAD,UAUAa,MAAA,SAAAmD,EAAAC,GACA,GAGAlI,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,gBAEA+H,EAAA,SAAAhP,GACA,MAAAA,IAGAmE,EAAA3E,EAAAgF,SAAAuG,SAAAY,KAEA,IAAA9E,EAAAtE,OAAA,CAGA/C,EAAAkO,WAAAoB,IACAE,EAAAF,EAEA,gBAAA,KACA3K,EAAA4K,IAIA,gBAAA,KACA5K,EAAA2K,EAGA,IACAG,GAAAzP,EAAAyP,IACApI,EACA,SAAAgB,GACA,MAAAmH,GAAAnH,EAAA9E,SAKAmM,EAAAD,EAAA,GACA1J,GAAA,CAIA,KAAA,GAAA2D,KAAA+F,GACAA,EAAA/F,IAAAgG,IACA3J,GAAA,EAIAA,KACAyC,EAAAnB,EAAA1C,GAGAtB,KAAAiE,UAAAtH,OAIA,MAAAqD,OAMA+I,SAAA,SAAAkD,EAAAC,GACA,GAGAlI,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,gBAEA+H,EAAA,SAAAhP,GACA,MAAAA,IAGAmE,EAAA3E,EAAAgF,SAAAuG,SAAAa,SAGAuD,KAEA5J,GAAA,CAEA,IAAAsB,EAAAtE,OAAA,CAGA/C,EAAAkO,WAAAoB,IACAE,EAAAF,EAEA,gBAAA,KACA3K,EAAA4K,IAIA,gBAAA,KACA5K,EAAA2K,EAYA,KAAA,GARAG,GAAAzP,EAAAyP,IACApI,EACA,SAAAgB,GACA,MAAAmH,GAAAnH,EAAA9E,SAKAqM,EAAA,EAAAA,EAAAH,EAAA1M,SAAA6M,EAEA,GAAAH,EAAAG,GAAA7M,OAAA,CAEA,IAAA,GAAA8M,GAAA,EAAAA,EAAAF,EAAA5M,SAAA8M,EAEAF,EAAAE,IAAAJ,EAAAG,KACA7J,GAAA,EAKA4J,GAAA/H,KAAA6H,EAAAG,IAIA7J,IACAyC,EAAAnB,EAAA1C,GAGAtB,KAAAiE,UAAAtH,OAIA,MAAAqD,OAKAgJ,IAAA,SAAAA,EAAA1H,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAeA,OAbAJ,GAAAtE,QAAAsJ,GAAA3D,EAAArB,KACAmB,EACAnB,EACA1C,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAc,KACAA,IAAAA,KAKAhJ,KAAAiE,UAAAtH,OAGAqD,MAKAiJ,OAAA,SAAAmC,EAAA9J,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAeA,OAbAJ,GAAAtE,QAAA0L,EAAA/F,EAAArB,KACAmB,EACAnB,EACA1C,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAe,QACAmC,IAAAA,KAKApL,KAAAiE,UAAAtH,OAGAqD,MAKAkJ,OAAA,SAAAiC,EAAA7J,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAeA,OAbAJ,GAAAtE,QAAAyL,EAAA9F,EAAArB,KACAmB,EACAnB,EACA1C,GAAAmD,EACA9H,EAAAgF,SAAAuG,SAAAgB,QACAiC,IAAAA,KAKAnL,KAAAiE,UAAAtH,OAGAqD,MAOAmJ,aAAA,SAAAhM,EAAAmE,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAEAJ,GAAA/C,GAAA,WAAA+C,EAAAzC,KAAA,YAAApE,OAAAA,GACAgI,EACAnB,EACA1C,GAAA3E,EAAAgF,SAAAuG,SAAAiB,eAMAsD,gBAAA,SAAAtP,EAAAmE,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAEAJ,GAAA/C,GAAA,WAAA+C,EAAAE,OAAA,YAAA/G,OAAAA,GACAgI,EACAnB,EACA1C,GAAA3E,EAAAgF,SAAAuG,SAAAiB,eASAuD,gBAAA,SAAApL,GAGA,GAAA0C,IAAAhE,KAAAiE,WAAAjE,MAAAkE,OAAAvH,EAAAgF,SAAAwC,SAAAC,eAEAJ,GAAA/C,GAAA,eAAA+C,EAAA/C,GAAA,aACAkE,EACAnB,EACA1C,GAAA3E,EAAAgF,SAAAuG,SAAAiB,eAYAwD,OAAA,SAAAC,EAAAtL,GAGA,GAAA0C,GAAAhE,KAAAiE,WAAAjE,IAEA,IAAAgE,EAAAtE,OAAA,CAIA,GAAA/C,EAAAkO,WAAA+B,GACA,MAAAhJ,GACA5D,KACA4M,EACAtL,GAAA3E,EAAAgF,SAAAuG,SAAAkB,QAKAwD,KAEAzH,EACAnB,EACA1C,GAAA3E,EAAAgF,SAAAuG,SAAAkB,SAIApJ,KAAAiE,UAAAtH,OAIA,MAAAqD,OAGA6M,KAAA,SAAAvL,GACA,MAAAtB,MAAA2M,QAAA,EAAArL,MA4IAqF,GACA/C,SAAAA,EACAgB,YAAAA,EACAJ,WAAAA,EACAW,oBAAAA,EACAE,WAAAA,EACAZ,OAAAA,EACAE,MAAAA,EACAmB,WAAAA,IAGAgH,QAOA,SAAAnQ,GACAA,EAAAgF,SAAA+H,QAAAqD,SACAC,aAAA,mBAEAlL,MAAA,WACAnF,EAAA,IAAAA,EAAAgF,SAAA+H,QAAAqD,QAAAC,cACAC,UAGAxK,IAAA,SAAA6G,KAUApE,MAAA,SAAArB,EAAAvC,GACA,GAAA4L,GAAArJ,EAAAsJ,QACAD,GAAAE,MAAAvJ,EAAAwJ,QAAA,GACAH,EAAAI,KAAA,EAEA3Q,EACA,iCACA2E,EACA,8FAKAxE,MAAA,WACA+G,EAAA0J,QACA5Q,EAAAqD,MAAAV,YAEAkO,IAAAN,GACAtN,OACA6N,SAAA,QACArO,UAGAgG,eAAA,SAAAvB,EAAAvC,GAEAuC,EAAAnE,QACAM,KAAAkF,MAAArB,EAAAK,OAAA,SAAA5C,MAIAwL,QAIA,SAAAnQ,GACA,QAAA+Q,GAAA7J,GACA,MAAAA,GAAA8J,KAAA,MAAAjO,OACAmE,EAAA8J,KAAA,MACA9J,EAAA8J,KAAA,QAGAhR,EAAAgF,SAAA+H,QAAAkE,OACAC,SAAA,QAEA/L,MAAA,WAEAnF,EAAA,IAAAA,EAAAgF,SAAAwC,SAAA0J,UACAZ,UAGAxK,IAAA,SAAA6G,IAEAA,EAAA5G,OAAA/F,EAAAgF,SAAAwC,SAAA0C,WACA1F,SAAA2M,KAAAnR,EAAA,IAAAA,EAAAgF,SAAA+H,QAAAkE,MAAAC,SAAA,UAAAF,KAAA,SAIAzI,MAAA,SAAArB,EAAAvC,GACA,GACAyM,GAAA,IAAApR,EAAAgF,SAAA+H,QAAAkE,MAAAC,SAAA,SAAAH,EAAA7J,GAAA,IAGAlH,GAAAoR,GAAArO,OACA/C,EAAAoR,GAAA9O,KAAAqC,GAKA3E,EAAA,YACAgR,KAAA,MAAAD,EAAA7J,IACArB,SAAA7F,EAAAgF,SAAA+H,QAAAkE,MAAAC,UACA5O,KAAAqC,GAMAxE,MAAA,WACA+G,EAAAnE,QACAmE,EAAA,GAAAmK,WAIAC,YAAApK,IAIAuB,eAAA,SAAAvB,EAAAvC,GAEAuC,EAAAnE,QACAM,KAAAkF,MAAAvI,EAAAkH,EAAAP,IAAAO,EAAAnE,OAAA,IAAA4B,MAIAwL,QAGA,SAAAnQ,GACA,GAEAuR,GAAA,qBAGAC,EAAA,MAEAxR,GAAAgF,SAAA+H,QAAAzM,OACA6E,MAAA,WAEAnF,EAAA,IAAAuR,GAAAjB,UAGAxK,IAAA,SAAA6G,IAEAA,EAAA5G,OAAA/F,EAAAgF,SAAAwC,SAAA0C,WACA1F,SAAA2M,KAAAnR,EAAA,IAAAuR,EAAA,UAAAP,KAAA,QAIAzI,MAAA,SAAArB,EAAAvC,GACA,GAAAuC,EAAAnE,OAAA,CACA,GACA0O,GAAAvK,EAAAsJ,SAIAkB,GAHAxK,EAAAP,IAAA,IAIA8J,KAAAkB,SAAAF,EAAAhB,KAAAvJ,EAAAwJ,QAAA,EAAA,IAAA,KACAC,IAAAgB,SAAAF,EAAAd,IAAA,GAAA,IAAA,MAIA3Q,GAAA,UACA6F,SAAA0L,GACAV,IAAAa,GACApP,KAAAqC,GACAxE,MAAAH,EAAAgF,SAAAwC,SAAA2C,qBACA,WAAAnK,EAAAqD,MAAAiN,UAAA,MAEAQ,SAAAU,KAIA/I,eAAA,SAAAvB,EAAAvC,GAEAuC,EAAAnE,QACAM,KAAAkF,MAAAvI,EAAAkH,EAAAP,IAAAO,EAAAnE,OAAA,IAAA4B,MAIAwL,QAGA,SAAAnQ,GACA,GAEAwR,GAAA,8BAIAI,EAAA,qBAGAxJ,EAAA,IAAAwJ,EAGAC,EAAA,QAKAC,IAEA9R,GAAAgF,SAAA+H,QAAAgF,SACA5M,MAAA,WACAnF,EAAAoI,GAAA4J,YAAAJ,GACAE,MAGAhM,IAAA,SAAA6G,GASA,GAPA3M,EAAAwR,GACAvO,OACA2B,KAAA,MACAuB,KAAA,IAIA2L,EAAA/O,OAAA,CAEA,IAAA,GAAA2G,GAAA,EAAAA,EAAAoI,EAAA/O,SAAA2G,EACA1J,EAAA6R,GACAvP,KAAAwP,EAAApI,IACAoH,SAAAU,EAAA,MAGAxR,GAAAwR,GAAA1O,OAGA9C,EAAAgF,SAAAwC,SAAA0C,WACA1F,SAAA2M,KAAAnR,EAAAoI,EAAA,UAAA4I,KAAA,SAKAzI,MAAA,SAAArB,EAAAvC,GACAmN,EAAAlK,KAAAjD,GACAuC,EAAArB,SAAA+L,IAGAnJ,eAAA,SAAAvB,EAAAvC,GACAtB,KAAAkF,MAAArB,EAAAvC,IAGA6M,UAAA,WACAvP,SAAAgQ,MACA,kHAOA9B,QD9xCA+B,SAAAC,SAAAC,QAAAtS,kBAEA,IAAAsD,qBAAA,EACArD,IA2xBAC,GAAAiC,UAAAC,GAAA,4BAAA,SAAAmQ,EAAApS,GACA4B,qBACA6E,oBACAI,oBAGA9G,EAAAiC,UAAAC,GAAA,4BAAA,SAAAmQ,EAAApS,GACA4B,qBACA6E,oBACAI,oBAGA9G,EAAAiC,UAAAC,GAAA,gCAAA,SAAAmQ,EAAApS,GACA4B,qBACA6E,oBACAI","file":"ecom-checkout.min.js","sourcesContent":["Platform.Deferred.execute(setCheckoutScript);\r\n\r\nvar giftWrappingOption = -1;\r\nvar root;\r\n\r\nfunction setCheckoutScript() {\r\n root = $('body').data('root');\r\n\r\n var fbPixelEnabled = $('#checkout-form').data(\"fb-pixel\");\r\n\r\n $('#checkout-info').click(function (e) {\r\n e.preventDefault();\r\n $('#checkout-modal').modal(\"show\");\r\n });\r\n\r\n //// hide delivery address\r\n //if ($('#use-billing-cbx').prop('checked')) {\r\n // $('#delivery-wrapper').hide();\r\n // $('#delPickAddressWrapper').hide();\r\n //} else {\r\n // $('#delivery-wrapper').show();\r\n // $('#delPickAddressWrapper').show();\r\n //}\r\n //init calendar\r\n //$('.delivery-calendar-wrapper').on('focusin', '.delivery-calendar-picke', function(e) {\r\n // $(this).datepicker(options);\r\n //});\r\n //$('.delivery-calendar-picker').datetimepicker({\r\n // format: 'DD/MM/YYYY h:mm a',\r\n // formatTime: 'h:mm a',\r\n // formatDate: 'DD/MM/YYYY',\r\n //});\r\n\r\n //$(document).on('click', '#checkout-cart a.cart-remove', function () {\r\n // var cartItemId = $(this).closest('tr').data('id');\r\n // $.post(root + 'Cart/RemoveItem', { id: cartItemId }, ItemUpdated, 'json');\r\n // return false;\r\n //});\r\n\r\n //$(document).on('change', '#checkout-cart select.cart-qty', function () {\r\n // var cartItemId = $(this).closest('tr').data('id');\r\n // var quantity = $(this).val();\r\n // $.post(root + 'Cart/UpdateItemQuantity', {\r\n // id: cartItemId,\r\n // quantity: quantity\r\n // }, ItemUpdated, 'json');\r\n //});\r\n\r\n //$(document).on(\"click\", \"#discount-btn\", function (e) {\r\n // AddDiscountCode();\r\n // return false;\r\n //});\r\n\r\n //$(document).on('click', '.pf-checkout-cart-table .pf-qty-btn-minus', function (e) {\r\n // e.preventDefault();\r\n // var cartItemId = $(this).closest('tr').data('id');\r\n // var wrapper = $(this).closest('.pf-qty-wrapper');\r\n // var qtyTbx = wrapper.find('.pf-qty-select');\r\n // var qty = Number(qtyTbx.val());\r\n // if (qty > 1) {\r\n // qty--;\r\n // qtyTbx.val(qty);\r\n // //UpdateTopCartQty(cartItemId, qty);\r\n // UpdateItemCartQty(cartItemId, qty);\r\n // }\r\n //});\r\n\r\n //$(document).on('click', '.pf-checkout-cart-table .pf-qty-btn-plus', function (e) {\r\n // e.preventDefault();\r\n // var cartItemId = $(this).closest('tr').data('id');\r\n // var wrapper = $(this).closest('.pf-qty-wrapper');\r\n // var qtyTbx = wrapper.find('.pf-qty-select');\r\n // var qty = Number(qtyTbx.val());\r\n // qty++;\r\n // qtyTbx.val(qty);\r\n // //UpdateTopCartQty(cartItemId, qty);\r\n // UpdateItemCartQty(cartItemId, qty);\r\n //});\r\n\r\n //// Add handlers for top cart events, as when top cart changed need to refresh checkout cart\r\n //$(document).on('itemRemoved.topCart.platform', function (e, data) {\r\n // if (data.result === 'ok')\r\n // location.reload();\r\n //});\r\n //$(document).on('itemUpdated.topCart.platform', function (e, data) {\r\n // if (data.result.substring(0, 2) === 'ok')\r\n // location.reload();\r\n //});\r\n\r\n var userLoggedIn = $('#checkout-form').data(\"logged-in\");\r\n if (userLoggedIn === 'True') {\r\n if ($('#billAddressPicker').val() === '-1')\r\n SetBillingAddressAuto();\r\n else\r\n SetBillingAddressSaved();\r\n\r\n if ($('#delAddressPicker').val() === '-1')\r\n SetDeliveryAddressAuto();\r\n else\r\n SetDeliveryAddressSaved();\r\n }\r\n\r\n $('#billPostcodeLookup').getAddress({\r\n api_key: '-twn5bV0e0KPK5YlULSMLA5097',\r\n input_class: 'w-input input m-input postcode-lookup-input billPostcode',\r\n button_class: 'site-button postcode-lookup-btn pf-btn pf-btn-md pf-btn-primary',\r\n dropdown_class: 'w-input input m-input postcode-lookup-dropdown',\r\n //input: '#postcode-lookup-input',\r\n //button: '#postcode-lookup-btn',\r\n //dropdown_container: '#postcode-lookup-dropdown',\r\n output_fields: {\r\n line_1: '#billAddr1',\r\n line_2: '#billAddr2',\r\n //line_3: '#line3',\r\n post_town: '#billTown',\r\n county: '#billCounty',\r\n postcode: '#billPostcode'\r\n },\r\n onLookupSuccess: function (data) { },\r\n onLookupError: function () {/* Your custom code */ },\r\n onAddressSelected: function (elem, index) {\r\n GetDeliveryOptions();\r\n //var addressTxt = $('#billAddr1').val() + \"\\n\" + $('#billAddr2').val();\r\n //$('#billing-auto-address-tbx').val(addressTxt);\r\n //$('#address-manually-btn').hide();\r\n //$('#address-wrapper').slideDown();\r\n }\r\n });\r\n\r\n $('#delPostcodeLookup').getAddress({\r\n api_key: '-twn5bV0e0KPK5YlULSMLA5097',\r\n input_class: 'w-input input m-input postcode-lookup-input delPostcode',\r\n button_class: 'site-button postcode-lookup-btn pf-btn pf-btn-md pf-btn-primary',\r\n dropdown_class: 'w-input input m-input postcode-lookup-dropdown',\r\n //input: '#postcode-lookup-input',\r\n //button: '#postcode-lookup-btn',\r\n //dropdown_container: '#postcode-lookup-dropdown',\r\n output_fields: {\r\n line_1: '#delAddr1',\r\n line_2: '#delAddr2',\r\n //line_3: '#line3',\r\n post_town: '#delTown',\r\n county: '#delCounty',\r\n postcode: '#delPostcode'\r\n },\r\n onLookupSuccess: function (data) { },\r\n onLookupError: function () {/* Your custom code */ },\r\n onAddressSelected: function (elem, index) {\r\n GetDeliveryOptions();\r\n //var addressTxt = $('#billAddr1').val() + \"\\n\" + $('#billAddr2').val();\r\n //$('#billing-auto-address-tbx').val(addressTxt);\r\n //$('#address-manually-btn').hide();\r\n //$('#address-wrapper').slideDown();\r\n }\r\n });\r\n\r\n $('#billing-address-manual-btn').click(function () {\r\n SetBillingAddressManual();\r\n });\r\n\r\n $('#billing-address-auto-btn').click(function () {\r\n SetBillingAddressAuto();\r\n });\r\n\r\n $('#billCountry').change(function (e) {\r\n e.preventDefault();\r\n if ($('#billCountry').val() != \"GB\") { // can only use lookup for UK addresses at the moment\r\n SetBillingAddressManual();\r\n }\r\n else {\r\n SetBillingAddressAuto();\r\n }\r\n GetDeliveryOptions();\r\n return false;\r\n });\r\n\r\n $('#delCountry').change(function (e) {\r\n e.preventDefault();\r\n if ($('#delCountry').val() != \"GB\") { // can only use lookup for UK addresses at the moment\r\n SetDeliveryAddressManual();\r\n }\r\n else {\r\n SetDeliveryAddressAuto();\r\n }\r\n GetDeliveryOptions();\r\n return false;\r\n });\r\n\r\n $('#delivery-address-manual-btn').click(function () {\r\n SetDeliveryAddressManual();\r\n });\r\n\r\n $('#delivery-address-auto-btn').click(function () {\r\n SetDeliveryAddressAuto();\r\n });\r\n\r\n $('#billPostcode').change(function () {\r\n GetDeliveryOptions();\r\n });\r\n $('#delPostcode').change(function () {\r\n GetDeliveryOptions();\r\n });\r\n\r\n $(document).on(\"click\", \".deliveryOptionRbn\", function (e) {\r\n var deliveryOptionId = $('input[name=deliveryOption]:radio:checked').val();\r\n GetDeliveryOptions(deliveryOptionId);\r\n return false;\r\n });\r\n\r\n\r\n $('#use-billing-cbx').click(function () {\r\n SetUseBilling();\r\n //var useBilling = $('#use-billing-cbx').is(':checked');\r\n //var billCountry = $('#billCountry').val();\r\n //var delCountry = $('#delCountry').val();\r\n //$.post(\"@Url.Action(\"ChangeDelivery\", \"Cart\")\", {useBilling: useBilling, billCountry: billCountry, delCountry: delCountry}, CountryChanged, \"json\");\r\n GetDeliveryOptions();\r\n });\r\n\r\n $(\"#makePaymentBtn\").click(function () {\r\n if (validateInput()) {\r\n $(\"#makePaymentBtn\").text(\"Processing Order...\");\r\n //$(\"#makePaymentBtn\").css(\"color\", \"#000\");\r\n // check stock\r\n if (fbPixelEnabled == \"True\") {\r\n fbq_ProcessPayment();\r\n }\r\n $('#checkout-form').submit();\r\n }\r\n else {\r\n $('#validate-errors').fadeIn();\r\n }\r\n return false;\r\n });\r\n\r\n $('#discount-input-tbx').blur(function () {\r\n $('#voucher-not-found').fadeOut();\r\n });\r\n\r\n $('#sagepayBtn').click(function () {\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n $('#makePaymentBtn .pf-place-order-btn-text').text('Make Payment');\r\n //$('#customer-details').slideDown();\r\n //$('#delivery-note').show();\r\n $('#billing').slideDown();\r\n $('#useBillingBtn').show();\r\n if ($useBillingCbx.length > 0) $useBillingCbx.prop('checked', true);\r\n //$('#delivery-wrapper').hide();\r\n $('#delivery .checkout-step').text(\"4) \");\r\n SetUseBilling();\r\n GetDeliveryOptions();\r\n });\r\n $('#worldpayBGBtn').click(function () {\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n $('#makePaymentBtn .pf-place-order-btn-text').text('Make Payment');\r\n //$('#customer-details').slideDown();\r\n //$('#delivery-note').show();\r\n $('#billing').slideDown();\r\n $('#useBillingBtn').show();\r\n if ($useBillingCbx.length > 0) $useBillingCbx.prop('checked', true);\r\n //$('#delivery-wrapper').hide();\r\n $('#delivery .checkout-step').text(\"4) \");\r\n SetUseBilling();\r\n GetDeliveryOptions();\r\n });\r\n $('#paypalBtn').click(function () {\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n $('#makePaymentBtn .pf-place-order-btn-text').text('Make Payment');\r\n //$('#customer-details').slideUp();\r\n //$('#delivery-note').hide();\r\n if ($useBillingCbx.length > 0) $useBillingCbx.prop('checked', false);\r\n $('#useBillingBtn').hide();\r\n $('#billing').slideUp();\r\n //$('#delivery-wrapper').show();\r\n $('#delivery .checkout-step').text(\"3) \");\r\n SetUseBilling();\r\n GetDeliveryOptions();\r\n });\r\n $('#payOnAccountBtn').click(function () {\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n $('#makePaymentBtn .pf-place-order-btn-text').text('Place Order');\r\n //$('#customer-details').slideDown();\r\n //$('#delivery-note').show();\r\n $('#billing').slideDown();\r\n $('#useBillingBtn').show();\r\n if ($useBillingCbx.length > 0) $useBillingCbx.prop('checked', true);\r\n //$('#delivery-wrapper').hide();\r\n $('#delivery .checkout-step').text(\"4) \");\r\n SetUseBilling();\r\n GetDeliveryOptions();\r\n });\r\n $('#proformaInvoiceBtn').click(function () {\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n $('#makePaymentBtn .pf-place-order-btn-text').text('Place Order');\r\n //$('#customer-details').slideDown();\r\n //$('#delivery-note').show();\r\n $('#billing').slideDown();\r\n $('#useBillingBtn').show();\r\n if ($useBillingCbx.length > 0) $useBillingCbx.prop('checked', true);\r\n //$('#delivery-wrapper').hide();\r\n $('#delivery .checkout-step').text(\"4) \");\r\n SetUseBilling();\r\n GetDeliveryOptions();\r\n });\r\n\r\n //var sagepay = $('#checkout-form').data('sagepay');\r\n //var paypal = $('#checkout-form').data('paypal');\r\n //if(sagepay == \"True\" && paypal == \"True\")\r\n //{\r\n // $('#paypalBtn').trigger(\"click\");\r\n //}\r\n $('#terms-cbx').click(function () {\r\n if ($('#terms-cbx').prop('checked')) {\r\n ValidNotes(\"\", false);\r\n }\r\n });\r\n\r\n //$(document).on(\"click\", \".editMessageBtn\", function (e) {\r\n // var id = $(this).closest('tr').attr('id');\r\n // id = id.replace(\"prod-\", \"\");\r\n // var txt = $(this).prev('.personalMessageTxt').val();\r\n // $(this).hide();\r\n // $.post(\"@Url.Action(\"UpdatePersonalMessage\", \"Cart\")\", { pID: id, pMessageText: txt }, PersonalMessageUpdated, \"json\");\r\n // return false;\r\n //});\r\n\r\n $('.gift-option-radio').change(function () {\r\n giftWrappingOption = $(this).val();\r\n GetDeliveryOptions();\r\n });\r\n\r\n $('#billAddressPicker').on('change', function () {\r\n var addressId = this.value;\r\n if (addressId === '-1') {\r\n $('#billAddr1').val('');\r\n $('#billAddr2').val('');\r\n $('#billTown').val('');\r\n $('#billCounty').val('');\r\n $('#billPostcode').val('');\r\n $('#billCountry').val('GB');\r\n $('#billPostcodeLookup select').val('open');\r\n SetBillingAddressAuto();\r\n GetDeliveryOptions();\r\n } else {\r\n $.post(root + 'UserAccount/GetAddress', {\r\n addressId: addressId\r\n }, function (response) {\r\n if (response.result === 'ok') {\r\n $('#billAddr1').val(response.address.Address1);\r\n $('#billAddr2').val(response.address.Address2);\r\n $('#billTown').val(response.address.Town);\r\n $('#billCounty').val(response.address.County);\r\n $('#billPostcode').val(response.address.Postcode);\r\n $('#billCountry').val(response.address.Country);\r\n SetBillingAddressSaved();\r\n GetDeliveryOptions();\r\n } else {\r\n alert('Error getting address: ' + response.error);\r\n }\r\n });\r\n }\r\n });\r\n\r\n $('#delAddressPicker').on('change', function () {\r\n var addressId = this.value;\r\n if (addressId === '-1') {\r\n $('#delAddr1').val('');\r\n $('#delAddr2').val('');\r\n $('#delTown').val('');\r\n $('#delCounty').val('');\r\n $('#delPostcode').val('');\r\n $('#delCountry').val('GB');\r\n $('#delPostcodeLookup select').val('open');\r\n SetDeliveryAddressAuto();\r\n GetDeliveryOptions();\r\n } else {\r\n $.post(root + 'UserAccount/GetAddress', {\r\n addressId: addressId\r\n }, function (response) {\r\n if (response.result === 'ok') {\r\n $('#delAddr1').val(response.address.Address1);\r\n $('#delAddr2').val(response.address.Address2);\r\n $('#delTown').val(response.address.Town);\r\n $('#delCounty').val(response.address.County);\r\n $('#delPostcode').val(response.address.Postcode);\r\n $('#delCountry').val(response.address.Country);\r\n SetDeliveryAddressSaved();\r\n GetDeliveryOptions();\r\n } else {\r\n alert('Error getting address: ' + response.error);\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Init after events registered\r\n GetDeliveryOptions();\r\n InitUseBilling();\r\n InitPaymentMethods();\r\n}\r\n\r\nfunction InitUseBilling() {\r\n if ($('#use-billing-cbx').is(':checked')) {\r\n $('#delivery-wrapper').hide();\r\n $('#delPickAddressWrapper').hide();\r\n } else {\r\n $('#delivery-wrapper').show();\r\n $('#delPickAddressWrapper').show();\r\n }\r\n}\r\n\r\nfunction SetUseBilling() {\r\n if ($('#use-billing-cbx').is(':checked')) {\r\n $('#delivery-wrapper').slideUp();\r\n $('#delPickAddressWrapper').hide();\r\n } else {\r\n $('#delPickAddressWrapper').show();\r\n $('#delivery-wrapper').slideDown();\r\n }\r\n}\r\n\r\n//function ItemUpdated(data) {\r\n// if (data.result == \"ok\") {\r\n// location.reload();\r\n// } else if (data.result == \"ok-stock-limited\") {\r\n// //$('#site-msg-modal-header').html(\"Information\");\r\n// //$('#site-msg-modal-msg').html(\"Sorry there are only \" + data.qty + \" of these items available in stock.\");\r\n// //$('#site-msg-modal').modal('show');\r\n// alert(\"Sorry there are only \" + data.qty + \" of these items available in stock.\");\r\n// location.reload();\r\n// } else if (data.result == \"ok-out-of-stock\") {\r\n// //$('#site-msg-modal-header').html(\"Information\");\r\n// //$('#site-msg-modal-msg').html(\"Sorry this item is no longer in stock.\");\r\n// //$('#site-msg-modal').modal('show');\r\n// alert(\"Sorry this item is no longer in stock.\");\r\n// location.reload();\r\n// }\r\n//}\r\n\r\n//function PersonalMessageUpdated(data) {\r\n// if (data.result == \"ok\") {\r\n// var id = data.id;\r\n// var tr = $('#prod-' + id);\r\n// var span = $(tr).find('.ajaxResult');\r\n// var btn = $(tr).find('.editMessageBtn');\r\n// span.text(\"Your personal message has been updated\");\r\n// $(btn).fadeIn();\r\n// $(span).fadeIn();\r\n// setTimeout(function () {\r\n// $(span).fadeOut(\"slow\", function () {\r\n// });\r\n// }, 3000);\r\n// }\r\n//}\r\n\r\nfunction AddVoucherDone(data) {\r\n if (data.result == \"ok\") {\r\n location.reload();\r\n }\r\n else if (data.result == \"fail\") {\r\n // error\r\n alert(\"Error: \" + data.err);\r\n }\r\n else if (data.msg == \"order-total-not-reached\") {\r\n $('#voucher-not-found').find('.pf-alert-msg').text(\"Discount only applies to orders over £\" + parseFloat(data.amount).toFixed(2));\r\n $('#voucher-not-found').fadeIn();\r\n }\r\n else {\r\n $('#voucher-not-found').find('.pf-alert-msg').text(\"Invalid Discount Code\");\r\n $('#voucher-not-found').fadeIn();\r\n }\r\n}\r\n\r\nfunction validateInput() {\r\n $.validity.setup({ outputMode: \"summary\" });\r\n\r\n // Start validation:\r\n $.validity.start();\r\n\r\n var emailCheckRegex = /\\S+@\\S+\\.\\S+/;\r\n var $useBillingCbx = $('#use-billing-cbx');\r\n\r\n var billEmail = $('#billEmail').val();\r\n var billAddr1 = $('#billAddr1').val();\r\n var billTown = $('#billTown').val();\r\n var billCounty = $('#billCounty').val();\r\n var billPostcode = $('#billPostcode').val();\r\n var billCountry = $('#billCountry').val();\r\n var delEmail = $('#delEmail').val();\r\n var delAddr1 = $('#delAddr1').val();\r\n var delTown = $('#delTown').val();\r\n var delCounty = $('#delCounty').val();\r\n var delPostcode = $('#delPostcode').val();\r\n var delCountry = $('#delCountry').val();\r\n\r\n // PAYPAL\r\n if ($('#paypalBtn').is(':checked')) {\r\n $('.required-input-delivery').require();\r\n if (!$useBillingCbx.is(':checked')) {\r\n if (!emailCheckRegex.test(delEmail)) {\r\n ValidNotes('Please check that your email address is entered correctly.', true);\r\n $('#delEmail').addClass('validity-erroneous');\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // SAGEPAY / WORLDPAY\r\n if ($('#sagepayBtn').is(':checked') || $('#worldpayBGBtn').is(':checked')) {\r\n $('.required-input').require();\r\n if (!$useBillingCbx.is(':checked')) {\r\n $('.required-input-delivery').require();\r\n }\r\n }\r\n\r\n // ACCOUNT / PROFORMA INVOICE\r\n if ($('#payOnAccountBtn').is(':checked') || $('#proformaInvoiceBtn').is(':checked')) {\r\n $('.required-input:not(#billCounty)').require();\r\n if (!$useBillingCbx.is(':checked')) {\r\n $('.required-input-delivery:not(#delCounty)').require();\r\n }\r\n }\r\n\r\n // All of the validator methods have been called:\r\n // End the validation session:\r\n var result = $.validity.end();\r\n\r\n if (!result.valid) {\r\n ShowAllBillingAddressFields();\r\n ShowAllDeliveryAddressFields();\r\n }\r\n\r\n // PAYPAL 2nd check\r\n if ($('#paypalBtn').is(':checked')) {\r\n if (result.valid) {\r\n if (delCountry === 'US' && delCounty.length !== 2) {\r\n ValidNotes('Please use only 2 characters for U.S. States, i.e. for Florida put \"FL\".', true);\r\n $('#delCounty').addClass('validity-erroneous');\r\n return false;\r\n }\r\n } else {\r\n ValidNotes('Please complete all the highlighted fields marked above to continue.', true);\r\n }\r\n }\r\n\r\n // SAGEPAY 2nd check\r\n if ($('#sagepayBtn').is(':checked') || $('#worldpayBGBtn').is(':checked') || $('#payOnAccountBtn').is(':checked') || $('#proformaInvoiceBtn').is(':checked')) {\r\n if (result.valid) {\r\n // check email\r\n if (!emailCheckRegex.test(billEmail)) {\r\n ValidNotes('Please check that your email address is entered correctly.', true);\r\n $('#billEmail').addClass('validity-erroneous');\r\n return false;\r\n }\r\n if (!$useBillingCbx.is(':checked')) {\r\n if (!emailCheckRegex.test(delEmail)) {\r\n ValidNotes('Please check that your email address is entered correctly.', true);\r\n $('#delEmail').addClass('validity-erroneous');\r\n return false;\r\n }\r\n }\r\n\r\n // for US make sure only 2 characters\r\n if (billCountry === 'US' && billCounty.length !== 2) {\r\n ValidNotes('Please use only 2 characters for U.S. States, i.e. for Florida put \"FL\".', true);\r\n $('#billCounty').addClass('validity-erroneous');\r\n return false;\r\n }\r\n if (delCountry === 'US' && delCounty.length !== 2) {\r\n ValidNotes('Please use only 2 characters for U.S. States, i.e. for Florida put \"FL\".', true);\r\n $('#delCounty').addClass('validity-erroneous');\r\n return false;\r\n }\r\n } else {\r\n ValidNotes('Please complete all the highlighted fields marked above to continue.', true);\r\n }\r\n }\r\n\r\n var requireTerms = $('#checkout-form').data('require-terms');\r\n if (typeof requireTerms === 'undefined' || requireTerms === 'True') {\r\n if (result.valid) {\r\n if (!$('#terms-cbx').is(':checked')) {\r\n ValidNotes('Please confirm you agree to the website terms and conditions above.', true);\r\n $('.pf-terms').addClass('validity-erroneous');\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // Return whether it's okay to proceed with the Ajax:\r\n return result.valid;\r\n}\r\n\r\nfunction ValidNotes(text, show) {\r\n if (show) {\r\n $('#validNotes').html(text);\r\n $('#validNotes').fadeIn();\r\n } else {\r\n $('#validNotes').fadeOut();\r\n }\r\n}\r\n\r\n// loads delivery options view\r\nfunction GetDeliveryOptions(deliveryOptionId) {\r\n var useBilling = $('#use-billing-cbx').is(':checked');\r\n var countryCode;\r\n var postcode;\r\n if (useBilling) {\r\n countryCode = $('#billCountry').val();\r\n postcode = $('#billPostcode').val();\r\n } else {\r\n countryCode = $('#delCountry').val();\r\n postcode = $('#delPostcode').val();\r\n }\r\n\r\n $.post(root + \"Checkout/GetDeliveryOptionsAndTotals\", {\r\n countryCode: countryCode,\r\n postcode: postcode,\r\n deliveryOptionId: deliveryOptionId,\r\n giftWrappingOptionId: giftWrappingOption\r\n }, function (data) {\r\n $('#delivery-options-frame').html(data);\r\n var deliveryOptionsExist = $('input[name=deliveryOption]').length > 0;\r\n if (deliveryOptionsExist)\r\n $('#makePaymentBtn').show();\r\n else\r\n $('#makePaymentBtn').hide();\r\n });\r\n}\r\n\r\nfunction InitPaymentMethods() {\r\n $(\"#paymentMethods input:radio:first\").prop('checked', true).click();\r\n}\r\n\r\n\r\n// address lookup \r\nfunction SetBillingAddressAuto() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('billing-enable-saved-address') === 'True') {\r\n var enableUnsaved = $checkoutForm.data('billing-enable-unsaved-address') === 'True';\r\n $('#billSaveAddress').prop('disabled', !enableUnsaved);\r\n }\r\n $('#billAddr1').prop('disabled', false);\r\n $('#billAddr2').prop('disabled', false);\r\n $('#billTown').prop('disabled', false);\r\n $('#billCounty').prop('disabled', false);\r\n $('#billPostcode').prop('disabled', false);\r\n $('#billCountry').prop('disabled', false);\r\n $('#billing-address-auto-btn').show();\r\n $('#billing-manual-wrapper').slideUp();\r\n $('#billing-auto-wrapper').show();\r\n}\r\n\r\nfunction SetBillingAddressSaved() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('billing-enable-saved-address') === 'True') {\r\n $('#billSaveAddress').prop('checked', true).prop('disabled', true);\r\n }\r\n $('#billAddr1').prop('disabled', true);\r\n $('#billAddr2').prop('disabled', true);\r\n $('#billTown').prop('disabled', true);\r\n $('#billCounty').prop('disabled', true);\r\n $('#billPostcode').prop('disabled', true);\r\n $('#billCountry').prop('disabled', true);\r\n $('#billing-address-auto-btn').hide();\r\n $('#billing-manual-wrapper').slideDown();\r\n $('#billing-auto-wrapper').hide();\r\n}\r\n\r\nfunction SetBillingAddressManual() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('billing-enable-saved-address') === 'True') {\r\n var enableUnsaved = $checkoutForm.data('billing-enable-unsaved-address') === 'True';\r\n $('#billSaveAddress').prop('disabled', !enableUnsaved);\r\n }\r\n $('#billAddr1').prop('disabled', false);\r\n $('#billAddr2').prop('disabled', false);\r\n $('#billTown').prop('disabled', false);\r\n $('#billCounty').prop('disabled', false);\r\n $('#billPostcode').prop('disabled', false);\r\n $('#billCountry').prop('disabled', false);\r\n $('#billing-address-auto-btn').show();\r\n $('#billing-manual-wrapper').slideDown();\r\n $('#billing-auto-wrapper').hide();\r\n}\r\n\r\nfunction ShowAllBillingAddressFields() {\r\n if ($('#checkout-form').data('logged-in') === 'False' || $('#billAddressPicker').val() === '-1')\r\n $('#billing-address-auto-btn').show();\r\n\r\n $('#billing-manual-wrapper').slideDown();\r\n $('#billing-auto-wrapper').hide();\r\n}\r\n\r\n// delivery\r\nfunction SetDeliveryAddressAuto() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('delivery-enable-saved-address') === 'True') {\r\n var enableUnsaved = $checkoutForm.data('delivery-enable-unsaved-address') === 'True';\r\n $('#delSaveAddress').prop('disabled', !enableUnsaved);\r\n }\r\n $('#delSaveAddress').prop('disabled', false);\r\n $('#delAddr1').prop('disabled', false);\r\n $('#delAddr2').prop('disabled', false);\r\n $('#delTown').prop('disabled', false);\r\n $('#delCounty').prop('disabled', false);\r\n $('#delPostcode').prop('disabled', false);\r\n $('#delCountry').prop('disabled', false);\r\n $('#delivery-address-auto-btn').show();\r\n $('#delivery-manual-wrapper').slideUp();\r\n $('#delivery-auto-wrapper').show();\r\n}\r\n\r\nfunction SetDeliveryAddressSaved() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('delivery-enable-saved-address') === 'True') {\r\n $('#delSaveAddress').prop('checked', true).prop('disabled', true);\r\n }\r\n $('#delAddr1').prop('disabled', true);\r\n $('#delAddr2').prop('disabled', true);\r\n $('#delTown').prop('disabled', true);\r\n $('#delCounty').prop('disabled', true);\r\n $('#delPostcode').prop('disabled', true);\r\n $('#delCountry').prop('disabled', true);\r\n $('#delivery-address-auto-btn').hide();\r\n $('#delivery-manual-wrapper').slideDown();\r\n $('#delivery-auto-wrapper').hide();\r\n}\r\n\r\nfunction SetDeliveryAddressManual() {\r\n var $checkoutForm = $('#checkout-form');\r\n if ($checkoutForm.data('delivery-enable-saved-address') === 'True') {\r\n var enableUnsaved = $checkoutForm.data('delivery-enable-unsaved-address') === 'True';\r\n $('#delSaveAddress').prop('disabled', !enableUnsaved);\r\n }\r\n $('#delAddr1').prop('disabled', false);\r\n $('#delAddr2').prop('disabled', false);\r\n $('#delTown').prop('disabled', false);\r\n $('#delCounty').prop('disabled', false);\r\n $('#delPostcode').prop('disabled', false);\r\n $('#delCountry').prop('disabled', false);\r\n $('#delivery-address-auto-btn').show();\r\n $('#delivery-manual-wrapper').slideDown();\r\n $('#delivery-auto-wrapper').hide();\r\n}\r\n\r\nfunction ShowAllDeliveryAddressFields() {\r\n if ($('#checkout-form').data('logged-in') === 'False' || $('#delAddressPicker').val() === '-1')\r\n $('#delivery-address-auto-btn').show();\r\n\r\n $('#delivery-manual-wrapper').slideDown();\r\n $('#delivery-auto-wrapper').hide();\r\n}\r\n\r\n//function UpdateItemCartQty(cartId, qty) {\r\n// $.post(root + \"Cart/UpdateItemQuantity\", {\r\n// id: cartId,\r\n// quantity: qty\r\n// }, function (data) {\r\n// // Display warnings if relevant\r\n// if (data.result === 'ok-stock-limited')\r\n// alert('Sorry, there are only ' + data.qty + ' of these items available in stock.');\r\n// else if (data.result === 'ok-out-of-stock')\r\n// alert('Sorry, this item is no longer in stock.');\r\n\r\n// // Fire event\r\n// //$(document).trigger('itemUpdated.mainCart.platform', data);\r\n\r\n// // Refresh page if response OK\r\n// if (data.result.substring(0, 2) === 'ok') {\r\n// location.reload();\r\n// //GetTopCart();\r\n// //SetCartQty();\r\n// }\r\n// }, 'json');\r\n//}\r\n\r\nfunction CheckMinimumOrder() {\r\n $.get(root + 'Checkout/ReachedMinimumOrder', function (response) {\r\n var $makePaymentArea = $('.pf-checkout-actions');\r\n if (response.reachedMinimumOrder)\r\n $makePaymentArea.show();\r\n else\r\n $makePaymentArea.hide();\r\n });\r\n}\r\n\r\nfunction CheckItemsCount() {\r\n $.get(root + 'Checkout/CheckItemsCount', function (response) {\r\n var $makePaymentArea = $('.pf-checkout-actions');\r\n if (response.hasItems)\r\n $makePaymentArea.show();\r\n else\r\n $makePaymentArea.hide();\r\n });\r\n}\r\n\r\n// Register handlers for cart actions\r\n$(document).on('itemUpdated.cart.platform', function (event, data) {\r\n GetDeliveryOptions();\r\n CheckMinimumOrder();\r\n CheckItemsCount();\r\n});\r\n\r\n$(document).on('itemRemoved.cart.platform', function (event, data) {\r\n GetDeliveryOptions();\r\n CheckMinimumOrder();\r\n CheckItemsCount();\r\n});\r\n\r\n$(document).on('discountUpdated.cart.platform', function (event, data) {\r\n GetDeliveryOptions();\r\n CheckMinimumOrder();\r\n CheckItemsCount();\r\n});","/*\r\n * jQuery.validity v1.2.0\r\n * http://validity.thatscaptaintoyou.com/\r\n * https://github.com/whatgoodisaroad/validity\r\n * \r\n * Dual licensed under MIT and GPL\r\n *\r\n * Date: 2011-09-16 (Friday, 16 September 2011)\r\n */\r\n(function($, undefined) {\r\n \r\n // Default settings:\r\n ////////////////////////////////////////////////////////////////\r\n \r\n var \r\n defaults = {\r\n // The default output mode is tooltip because it requires no dependencies:\r\n outputMode:\"tooltip\",\r\n \r\n // The this property is set to true, validity will scroll the browser viewport\r\n // so that the first error is visible when validation fails:\r\n scrollTo:false,\r\n\r\n // If this setting is true, modal errors will disappear when they are clicked on:\r\n modalErrorsClickable:true,\r\n\r\n // If a field name cannot be otherwise inferred, this will be used:\r\n defaultFieldName:\"This field\",\r\n \r\n // jQuery selector to filter down to validation-supported elements:\r\n elementSupport:\":text, :password, textarea, select, :radio, :checkbox\",\r\n \r\n // Function to stringify argments for use when generating error messages.\r\n // Primarily, it just generates pretty date strings:\r\n argToString:function(val) {\r\n return val.getDate ?\r\n (val.getMonth() + 1) + \"/\" + val.getDate() + \"/\" + val.getFullYear() :\r\n val;\r\n },\r\n \r\n debugPrivates:false\r\n },\r\n \r\n __private;\r\n \r\n // Static functions and properties:\r\n ////////////////////////////////////////////////////////////////\r\n \r\n $.validity = {\r\n\r\n // Clone the defaults. They can be overridden with the setup function:\r\n settings:$.extend(defaults, {}),\r\n\r\n // Built-in library of format-checking tools for use with the \r\n // match validator as well as the nonHtml validator:\r\n patterns:{\r\n integer:/^\\d+$/,\r\n \r\n // Used to use Date.parse(), which was the cause of Issue 9, \r\n // where the function would accept 09/80/2009 as parseable.\r\n // The fix is to use a RegExp that will only accept American Middle-Endian form.\r\n // See the Internationalization section in the documentation for how to\r\n // cause it to support other date formats:\r\n date:/^((0?\\d)|(1[012]))\\/([012]?\\d|30|31)\\/\\d{1,4}$/, \r\n \r\n email:/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i,\r\n usd:/^\\$?((\\d{1,3}(,\\d{3})*)|\\d+)(\\.(\\d{2})?)?$/, \r\n url:/^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\r\n \r\n // Number should accept floats or integers, be they positive or negative.\r\n // It should also support scientific-notation, written as a lower or capital 'E' followed by the radix.\r\n // Number assumes base 10. \r\n // Unlike the native parseFloat or parseInt functions, this should not accept trailing Latin characters.\r\n number:/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee]-?\\d+)?$/,\r\n \r\n zip:/^\\d{5}(-\\d{4})?$/,\r\n phone:/^[2-9]\\d{2}-\\d{3}-\\d{4}$/,\r\n guid:/^(\\{?([0-9a-fA-F]){8}-(([0-9a-fA-F]){4}-){3}([0-9a-fA-F]){12}\\}?)$/,\r\n time12:/^((0?\\d)|(1[12])):[0-5]\\d?\\s?[aApP]\\.?[mM]\\.?$/,\r\n \r\n time24:/^(20|21|22|23|[01]\\d|\\d)(([:][0-5]\\d){1,2})$/,\r\n\r\n nonHtml:/^[^<>]*$/\r\n },\r\n\r\n // Built-in set of default error messages (for use when a message isn't specified):\r\n messages:{\r\n\r\n require:\"#{field} is required.\",\r\n // Format validators:\r\n match:\"#{field} is in an invalid format.\",\r\n integer:\"#{field} must be a positive, whole number.\",\r\n date:\"#{field} must be formatted as a date. (mm/dd/yyyy)\",\r\n email:\"#{field} must be formatted as an email.\",\r\n usd:\"#{field} must be formatted as a US Dollar amount.\",\r\n url:\"#{field} must be formatted as a URL.\",\r\n number:\"#{field} must be formatted as a number.\",\r\n zip:\"#{field} must be formatted as a zipcode ##### or #####-####.\",\r\n phone:\"#{field} must be formatted as a phone number ###-###-####.\",\r\n guid:\"#{field} must be formatted as a guid like {3F2504E0-4F89-11D3-9A0C-0305E82C3301}.\",\r\n time24:\"#{field} must be formatted as a 24 hour time: 23:00.\",\r\n time12:\"#{field} must be formatted as a 12 hour time: 12:00 AM/PM\",\r\n\r\n // Value range messages:\r\n lessThan:\"#{field} must be less than #{max}.\",\r\n lessThanOrEqualTo:\"#{field} must be less than or equal to #{max}.\",\r\n greaterThan:\"#{field} must be greater than #{min}.\",\r\n greaterThanOrEqualTo:\"#{field} must be greater than or equal to #{min}.\",\r\n range:\"#{field} must be between #{min} and #{max}.\",\r\n\r\n // Value length messages:\r\n tooLong:\"#{field} cannot be longer than #{max} characters.\",\r\n tooShort:\"#{field} cannot be shorter than #{min} characters.\",\r\n\r\n // Composition validators:\r\n nonHtml:\"#{field} cannot contain HTML characters.\",\r\n alphabet:\"#{field} contains disallowed characters.\",\r\n\r\n minCharClass:\"#{field} cannot have more than #{min} #{charClass} characters.\",\r\n maxCharClass:\"#{field} cannot have less than #{min} #{charClass} characters.\",\r\n \r\n // Aggregate validator messages:\r\n equal:\"Values don't match.\",\r\n distinct:\"A value was repeated.\",\r\n sum:\"Values don't add to #{sum}.\",\r\n sumMax:\"The sum of the values must be less than #{max}.\",\r\n sumMin:\"The sum of the values must be greater than #{min}.\",\r\n\r\n // Radio validator messages:\r\n radioChecked:\"The selected value is not valid.\",\r\n \r\n generic:\"Invalid.\"\r\n },\r\n \r\n // Abstract output:\r\n out:{\r\n start:function() {\r\n this.defer(\"start\");\r\n },\r\n end:function(results) {\r\n this.defer(\"end\", results);\r\n },\r\n raise:function($obj, msg) {\r\n this.defer(\"raise\", $obj, msg);\r\n },\r\n raiseAggregate:function($obj, msg) {\r\n this.defer(\"raiseAggregate\", $obj, msg);\r\n },\r\n defer:function(name) {\r\n var \r\n v = $.validity,\r\n o = v.outputs[v.settings.outputMode];\r\n \r\n o[name].apply(\r\n o,\r\n Array.prototype.slice.call(arguments, 1)\r\n );\r\n }\r\n },\r\n \r\n // Character classes can be used to determine the quantity\r\n // of a given type of character in a string:\r\n charClasses:{\r\n alphabetical:/\\w/g,\r\n numeric:/\\d/g,\r\n alphanumeric:/[A-Za-z0-9]/g,\r\n symbol:/[^A-Za-z0-9]/g\r\n },\r\n\r\n // Object to contain the output modes. The three built-in output modes are installed\r\n // later on in this script.\r\n outputs:{},\r\n \r\n // By default, private members are not exposed.\r\n __private:undefined,\r\n\r\n // Override the default settings with user-specified ones.\r\n setup:function(options) {\r\n this.settings = $.extend(this.settings, options);\r\n \r\n if (this.settings.debugPrivates) {\r\n this.__private = __private;\r\n }\r\n else {\r\n this.__private = undefined;\r\n }\r\n },\r\n\r\n // Object to store information about ongoing validation.\r\n // When validation starts, this will be set to a report object.\r\n // When validators fail, they will inform this object.\r\n // When validation is completed, this object will contain the \r\n // information of whether it succeeded:\r\n report:null,\r\n\r\n // Determine whether validity is in the middle of validation:\r\n isValidating:function() {\r\n return !!this.report;\r\n },\r\n\r\n // Function to prepare validity to start validating:\r\n start:function() {\r\n // The output mode should be notified that validation is starting.\r\n // This usually means that the output mode will erase errors from the \r\n // document in whatever way the mode needs to:\r\n this.out.start();\r\n \r\n // Initialize the report object:\r\n this.report = { errors:0, valid:true };\r\n },\r\n\r\n // Function called when validation is over to examine the results and clean-up:\r\n end:function() {\r\n // Null coalescence: fix for Issue 5:\r\n var results = this.report || { errors: 0, valid: true };\r\n\r\n this.report = null;\r\n \r\n // Notify the current output mode that validation is over:\r\n this.out.end(results);\r\n \r\n return results;\r\n },\r\n\r\n // Remove validiation errors:\r\n clear:function() {\r\n this.start();\r\n this.end();\r\n }\r\n };\r\n \r\n // jQuery instance methods:\r\n ////////////////////////////////////////////////////////////////\r\n\r\n $.fn.extend({\r\n\r\n // The validity function is how validation can be bound to forms.\r\n // The user may pass in a validation function or, as a shortcut, \r\n // pass in a string of a CSS selector that grabs all the inputs to \r\n // require:\r\n validity:function(arg) {\r\n \r\n return this.each(\r\n \r\n function() {\r\n \r\n // Only operate on forms:\r\n if (this.tagName.toLowerCase() == \"form\") {\r\n var f = null;\r\n\r\n // If the user entered a string to select the inputs to require,\r\n // then make the validation logic ad hoc:\r\n if (typeof (arg) == \"string\") {\r\n f = function() {\r\n $(arg).require();\r\n };\r\n }\r\n\r\n // If the user entered a validation function then just call\r\n // that at the appropriate time:\r\n else if ($.isFunction(arg)) {\r\n f = arg;\r\n }\r\n\r\n if (arg) {\r\n $(this).bind(\r\n \"submit\",\r\n function() {\r\n $.validity.start();\r\n f();\r\n return $.validity.end().valid;\r\n }\r\n );\r\n }\r\n }\r\n }\r\n );\r\n },\r\n\r\n // Validators:\r\n ////////////////////////////////////////////////\r\n\r\n // Common validators:\r\n ////////////////////////////////\r\n \r\n // Validate whether the field has a value.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Require\r\n require:function(msg) {\r\n return validate(\r\n this,\r\n function(obj) {\r\n var val = $(obj).val();\r\n \r\n var res = val.length;\r\n \r\n return res;\r\n },\r\n msg || $.validity.messages.require\r\n );\r\n },\r\n\r\n // Validate whether the field matches a regex.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Match\r\n match:function(rule, msg) {\r\n\r\n // If a default message is to be used:\r\n if (!msg) {\r\n // First grab the generic one:\r\n msg = $.validity.messages.match;\r\n\r\n // If there's a more specific one, use that.\r\n if (typeof (rule) === \"string\" && $.validity.messages[rule]) {\r\n msg = $.validity.messages[rule];\r\n }\r\n }\r\n\r\n // If the rule is named, rather than specified:\r\n if (typeof (rule) == \"string\") {\r\n rule = $.validity.patterns[rule];\r\n }\r\n\r\n return validate(\r\n this,\r\n\r\n // Some of the named rules can be functions, such as 'date'.\r\n // If the discovered rule is a function use it as such.\r\n // Otherwise, assume it's a RegExp.\r\n $.isFunction(rule) ?\r\n\r\n function(obj) {\r\n return !obj.value.length || rule(obj.value);\r\n } :\r\n\r\n function(obj) {\r\n // Fix for regexes where the global flag is set.\r\n // Make sure to test from the start of the string.\r\n if (rule.global) {\r\n rule.lastIndex = 0;\r\n }\r\n \r\n return !obj.value.length || rule.test(obj.value);\r\n },\r\n\r\n msg\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Range\r\n range:function(min, max, msg) {\r\n return validate(\r\n this,\r\n\r\n min.getTime && max.getTime ?\r\n\r\n // If both arguments are dates then use them that way.\r\n function(obj) {\r\n var d = new Date(obj.value);\r\n return d >= new Date(min) && d <= new Date(max);\r\n } :\r\n\r\n min.substring && max.substring && Big ?\r\n\r\n // If both arguments are strings then parse them \r\n // using the Arbitrary-Precision library.\r\n function(obj) {\r\n var n = new Big(obj.value);\r\n return (\r\n n.greaterThanOrEqualTo(new Big(min)) && \r\n n.lessThanOrEqualTo(new Big(max))\r\n );\r\n } :\r\n\r\n // Otherwise treat them like floats.\r\n function(obj) {\r\n var f = parseFloat(obj.value);\r\n return f >= min && f <= max;\r\n },\r\n\r\n msg || format(\r\n $.validity.messages.range, {\r\n min:$.validity.settings.argToString(min),\r\n max:$.validity.settings.argToString(max)\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#GreaterThan\r\n greaterThan:function(min, msg) {\r\n return validate(\r\n this,\r\n\r\n min.getTime ?\r\n function(obj) {\r\n return new Date(obj.value) > min;\r\n } :\r\n\r\n min.substring && Big ?\r\n\r\n function(obj) {\r\n return new Big(obj.value).greaterThan(new Big(min)); \r\n } :\r\n\r\n function(obj) {\r\n return parseFloat(obj.value) > min;\r\n },\r\n\r\n msg || format(\r\n $.validity.messages.greaterThan, {\r\n min:$.validity.settings.argToString(min)\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#GreaterThan\r\n greaterThanOrEqualTo:function(min, msg) {\r\n return validate(\r\n this,\r\n\r\n min.getTime ?\r\n function(obj) {\r\n return new Date(obj.value) >= min;\r\n } :\r\n\r\n min.substring && Big ?\r\n\r\n function(obj) {\r\n return new Big(obj.value).greaterThanOrEqualTo(new Big(min));\r\n } :\r\n\r\n function(obj) {\r\n return parseFloat(obj.value) >= min;\r\n },\r\n\r\n msg || format(\r\n $.validity.messages.greaterThanOrEqualTo, {\r\n min:$.validity.settings.argToString(min)\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://code.google.com/p/validity/wiki/Validators#LessThan\r\n lessThan:function(max, msg) {\r\n return validate(\r\n this,\r\n\r\n max.getTime ?\r\n function(obj) {\r\n return new Date(obj.value) < max;\r\n } :\r\n\r\n max.substring && Big ?\r\n\r\n function(obj) {\r\n return new Big(obj.value).lessThan(new Big(max));\r\n } :\r\n\r\n function(obj) {\r\n return parseFloat(obj.value) < max;\r\n },\r\n\r\n msg || format(\r\n $.validity.messages.lessThan, {\r\n max:$.validity.settings.argToString(max)\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#LessThan\r\n lessThanOrEqualTo:function(max, msg) {\r\n return validate(\r\n this,\r\n\r\n max.getTime ?\r\n function(obj) {\r\n return new Date(obj.value) <= max;\r\n } :\r\n\r\n max.substring && Big ?\r\n\r\n function(obj) {\r\n return new Big(obj.value).lessThanOrEqualTo(new Big(max));\r\n } :\r\n\r\n function(obj) {\r\n return parseFloat(obj.value) <= max;\r\n },\r\n\r\n msg || format(\r\n $.validity.messages.lessThanOrEqualTo, {\r\n max:$.validity.settings.argToString(max)\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#LessThan\r\n maxLength:function(max, msg) {\r\n return validate(\r\n this,\r\n function(obj) {\r\n return obj.value.length <= max;\r\n },\r\n msg || format(\r\n $.validity.messages.tooLong, {\r\n max:max\r\n }\r\n )\r\n );\r\n },\r\n\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Length\r\n minLength:function(min, msg) {\r\n return validate(\r\n this,\r\n function(obj) {\r\n return obj.value.length >= min;\r\n },\r\n msg || format(\r\n $.validity.messages.tooShort, {\r\n min:min\r\n }\r\n )\r\n );\r\n },\r\n \r\n // TODO: Document\r\n alphabet:function(alpha, msg) {\r\n var chars = [];\r\n \r\n return validate(\r\n this,\r\n function(obj) {\r\n \r\n // For each character in the string, ensure that \r\n // it's in the alphabet definition:\r\n for (var idx = 0; idx < obj.value.length; ++idx) {\r\n if (alpha.indexOf(obj.value.charAt(idx)) == -1) {\r\n chars.push(obj.value.charAt(idx));\r\n return false;\r\n }\r\n }\r\n \r\n return true;\r\n },\r\n msg || format(\r\n $.validity.messages.alphabet, {\r\n chars:chars.join(\", \")\r\n }\r\n )\r\n );\r\n },\r\n \r\n // TODO: Document\r\n minCharClass:function(charClass, min, msg) {\r\n if (typeof(charClass) == \"string\") {\r\n charClass = charClass.toLowerCase();\r\n \r\n if ($.validity.charClasses[charClass]) {\r\n charClass = $.validity.charClasses[charClass];\r\n }\r\n }\r\n \r\n return validate(\r\n this,\r\n function(obj) {\r\n return (obj.value.match(charClass) || []).length >= min;\r\n },\r\n msg || format(\r\n $.validity.messages.minCharClass, {\r\n min:min,\r\n charClass:charClass\r\n }\r\n )\r\n );\r\n },\r\n \r\n // TODO: Document\r\n maxCharClass:function(charClass, max, msg) {\r\n if (typeof(charClass) == \"string\") {\r\n charClass = charClass.toLowerCase();\r\n \r\n if ($.validity.charClasses[charClass]) {\r\n charClass = $.validity.charClasses[charClass];\r\n }\r\n }\r\n \r\n return validate(\r\n this,\r\n function(obj) {\r\n return (obj.value.match(charClass) || []).length <= max;\r\n },\r\n msg || format(\r\n $.validity.messages.maxCharClass, {\r\n max:max,\r\n charClass:charClass\r\n }\r\n )\r\n );\r\n },\r\n \r\n // Validate that the input does not contain potentially dangerous strings.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#NonHtml\r\n nonHtml:function(msg) {\r\n return validate(\r\n this,\r\n\r\n function(obj) {\r\n return $.validity.patterns.nonHtml.test(obj.value);\r\n },\r\n\r\n msg || $.validity.messages.nonHtml\r\n );\r\n },\r\n \r\n // Aggregate validators:\r\n ////////////////////////////////\r\n \r\n // Validate that all matched elements bear the same values.\r\n // Accepts a function to transform the values for testing.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Equal\r\n equal:function(arg0, arg1) {\r\n var \r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n $reduction = (this.reduction || this).filter($.validity.settings.elementSupport),\r\n\r\n transform = function(val) {\r\n return val;\r\n },\r\n\r\n msg = $.validity.messages.equal;\r\n\r\n if ($reduction.length) {\r\n\r\n // Figure out what arguments were specified.\r\n if ($.isFunction(arg0)) {\r\n transform = arg0;\r\n\r\n if (typeof (arg1) == \"string\") {\r\n msg = arg1;\r\n }\r\n }\r\n\r\n else if (typeof (arg0) == \"string\") {\r\n msg = arg0;\r\n }\r\n\r\n var \r\n map = $.map(\r\n $reduction,\r\n function(obj) {\r\n return transform(obj.value);\r\n }\r\n ),\r\n\r\n // Get the first value.\r\n first = map[0],\r\n valid = true;\r\n\r\n // If any value is not equal to the first value,\r\n // then they aren't all equal, and it's not valid.\r\n for (var i in map) {\r\n if (map[i] != first) {\r\n valid = false;\r\n }\r\n }\r\n\r\n if (!valid) {\r\n raiseAggregateError($reduction, msg);\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n // Validate that all matched elements bear distinct values.\r\n // Accepts an optional function to transform the values for testing.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Distinct\r\n distinct:function(arg0, arg1) {\r\n var \r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n $reduction = (this.reduction || this).filter($.validity.settings.elementSupport),\r\n\r\n transform = function(val) {\r\n return val;\r\n },\r\n\r\n msg = $.validity.messages.distinct,\r\n\r\n // An empty array to store already-examined values\r\n subMap = [],\r\n\r\n valid = true;\r\n\r\n if ($reduction.length) {\r\n\r\n // Figure out what arguments were specified.\r\n if ($.isFunction(arg0)) {\r\n transform = arg0;\r\n\r\n if (typeof (arg1) == \"string\") {\r\n msg = arg1;\r\n }\r\n }\r\n\r\n else if (typeof (arg0) == \"string\") {\r\n msg = arg0;\r\n }\r\n\r\n // Map all the matched values into an array. \r\n var map = $.map(\r\n $reduction,\r\n function(obj) {\r\n return transform(obj.value);\r\n }\r\n );\r\n\r\n // For each transformed value:\r\n for (var i1 = 0; i1 < map.length; ++i1) {\r\n // Unless it's an empty string:\r\n if (map[i1].length) {\r\n // For each value we've already looked at:\r\n for (var i2 = 0; i2 < subMap.length; ++i2) {\r\n // If we've already seen the transformed value:\r\n if (subMap[i2] == map[i1]) {\r\n valid = false;\r\n }\r\n }\r\n\r\n // We looked at the value.\r\n subMap.push(map[i1]);\r\n }\r\n }\r\n\r\n if (!valid) {\r\n raiseAggregateError($reduction, msg);\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n // Validate that the numeric sum of all values is equal to a given value.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum\r\n sum:function(sum, msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n\r\n if ($reduction.length && sum != numericSum($reduction)) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || format(\r\n $.validity.messages.sum,\r\n { sum:sum }\r\n )\r\n );\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n // Validates an inclusive upper-bound on the numeric sum of the values of all matched elements.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum\r\n sumMax:function(max, msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n\r\n if ($reduction.length && max < numericSum($reduction)) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || format(\r\n $.validity.messages.sumMax,\r\n { max:max }\r\n )\r\n );\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n // Validates an inclusive lower-bound on the numeric sum of the values of all matched elements.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum\r\n sumMin:function(min, msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n\r\n if ($reduction.length && min < numericSum($reduction)) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || format(\r\n $.validity.messages.sumMin,\r\n { min:min }\r\n )\r\n );\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n\r\n return this;\r\n },\r\n \r\n // Radio group validators:\r\n ////////////////////////////////\r\n \r\n // TODO: Document\r\n radioChecked:function(val, msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n \r\n if ($reduction.is(\":radio\") && $reduction.find(\":checked\").val() != val) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || $.validity.messages.radioChecked\r\n );\r\n }\r\n },\r\n \r\n // TODO: Document\r\n radioNotChecked:function(val, msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n \r\n if ($reduction.is(\":radio\") && $reduction.filter(\":checked\").val() == val) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || $.validity.messages.radioChecked\r\n );\r\n }\r\n },\r\n \r\n // Checkbox validators:\r\n ////////////////////////////////\r\n \r\n // TODO: Document\r\n checkboxChecked:function(msg) {\r\n // If a reduced set is attached, use it.\r\n // Also, remove unsupported elements.\r\n var $reduction = (this.reduction || this).filter($.validity.settings.elementSupport);\r\n \r\n if ($reduction.is(\":checkbox\") && !$reduction.is(\":checked\")) {\r\n raiseAggregateError(\r\n $reduction,\r\n msg || $.validity.messages.radioChecked\r\n );\r\n }\r\n },\r\n \r\n // Specialized validators:\r\n ////////////////////////////////\r\n\r\n // If expression is a function, it will be called on each matched element.\r\n // Otherwise, it is treated as a boolean, and the determines the validity \r\n // of elements in an aggregate fashion.\r\n // http://validity.thatscaptaintoyou.com/Demos/index.htm#Assert\r\n assert:function(expression, msg) {\r\n // If a reduced set is attached, use it.\r\n // Do not reduce to supported elements.\r\n var $reduction = this.reduction || this;\r\n\r\n if ($reduction.length) {\r\n\r\n // In the case that 'expression' is a function, \r\n // use it as a regimen on each matched element individually:\r\n if ($.isFunction(expression)) {\r\n return validate(\r\n this,\r\n expression,\r\n msg || $.validity.messages.generic\r\n );\r\n }\r\n\r\n // Otherwise map it to a boolean and consider this as an aggregate validation:\r\n else if (!expression) {\r\n\r\n raiseAggregateError(\r\n $reduction,\r\n msg || $.validity.messages.generic\r\n );\r\n\r\n // The set reduces to zero valid elements.\r\n this.reduction = $([]);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n \r\n fail:function(msg) {\r\n return this.assert(false, msg);\r\n }\r\n });\r\n\r\n // Private utilities:\r\n ////////////////////////////////////////////////////////////////\r\n\r\n // Do non-aggregate validation.\r\n // Subject each element in $obj to the regimen.\r\n // Raise the specified error on failures.\r\n // This function is the heart of validity:\r\n function validate($obj, regimen, message) {\r\n var \r\n // If a reduced set is attached, use it\r\n // Also, remove any unsupported elements.\r\n $reduction = ($obj.reduction || $obj).filter($.validity.settings.elementSupport),\r\n\r\n // Array to store only elements that pass the regimen.\r\n elements = [];\r\n\r\n // For each in the reduction.\r\n $reduction.each(\r\n function() {\r\n // If the element passes the regimen, include it in the reduction.\r\n if (regimen(this)) {\r\n elements.push(this);\r\n }\r\n\r\n // Else give the element an error message.\r\n else {\r\n raiseError(\r\n this,\r\n format(message, {\r\n field:infer(this)\r\n })\r\n );\r\n }\r\n }\r\n );\r\n\r\n // Attach a (potentially) reduced set of only elements that passed.\r\n $obj.reduction = $(elements);\r\n\r\n // Return the full set with attached reduction.\r\n return $obj;\r\n }\r\n\r\n // Inform the report object that there was a failure.\r\n function addToReport() {\r\n if ($.validity.isValidating()) {\r\n $.validity.report.errors++;\r\n $.validity.report.valid = false;\r\n }\r\n }\r\n\r\n // Inform the report of a failure and display an error according to the \r\n // idiom of the current ouutput mode.\r\n function raiseError(obj, msg) {\r\n addToReport();\r\n\r\n $.validity.out.raise($(obj), msg);\r\n }\r\n\r\n // Inform the report of a failure and display an aggregate error according to the \r\n // idiom of the current output mode.\r\n function raiseAggregateError($obj, msg) {\r\n addToReport();\r\n\r\n $.validity.out.raiseAggregate($obj, msg);\r\n }\r\n\r\n // Yield the sum of the values of all fields matched in obj that can be parsed.\r\n function numericSum(obj) {\r\n var accumulator = 0;\r\n obj.each(\r\n function() {\r\n var n = parseFloat(this.value);\r\n\r\n accumulator += isNaN(n) ? 0 : n;\r\n }\r\n );\r\n return accumulator;\r\n }\r\n\r\n // Using the associative array supplied as the 'obj' argument,\r\n // replace tokens of the format #{} in the 'str' argument with\r\n // that key's value.\r\n function format(str, obj) {\r\n for (var p in obj) {\r\n if (obj.hasOwnProperty(p)) {\r\n str = str.replace(\r\n new RegExp(\"#\\\\{\" + p + \"\\\\}\", \"g\"), \r\n obj[p]\r\n );\r\n }\r\n }\r\n return capitalize(str);\r\n }\r\n\r\n // Infer the field name of the passed DOM element.\r\n // If a title is specified, its value is returned.\r\n // Otherwise, attempt to parse a field name out of the id attribute.\r\n // If that doesn't work, return the default field name in the configuration.\r\n function infer(field) {\r\n var \r\n $f = $(field),\r\n id = $f.prop(\"id\"),\r\n ret = $.validity.settings.defaultFieldName;\r\n\r\n // Check for title.\r\n if ($f.prop(\"title\").length) {\r\n ret = $f.prop(\"title\");\r\n }\r\n\r\n // Check for UpperCamelCase.\r\n else if (/^([A-Z0-9][a-z]*)+$/.test(id)) {\r\n ret = id.replace(/([A-Z0-9])[a-z]*/g, \" $&\");\r\n }\r\n\r\n // Check for lowercase_separated_by_underscores\r\n else if (/^[a-z0-9]+(_[a-z0-9]+)*$/.test(id)) {\r\n var arr = id.split(\"_\");\r\n\r\n for (var i = 0; i < arr.length; ++i) {\r\n arr[i] = capitalize(arr[i]);\r\n }\r\n\r\n ret = arr.join(\" \");\r\n }\r\n\r\n return $.trim(ret);\r\n }\r\n\r\n // Capitolize the first character of the string argument.\r\n function capitalize(sz) {\r\n return sz.substring ?\r\n sz.substring(0, 1).toUpperCase() + sz.substring(1, sz.length) :\r\n sz;\r\n }\r\n \r\n __private = { \r\n validate:validate,\r\n addToReport:addToReport,\r\n raiseError:raiseError,\r\n raiseAggregateError:raiseAggregateError,\r\n numericSum:numericSum,\r\n format:format,\r\n infer:infer,\r\n capitalize:capitalize\r\n };\r\n\r\n})(jQuery);// Output modes:\r\n////////////////////////////////////////////////////////////////\r\n\r\n// Each output mode gets its own closure, \r\n// distinct from the validity closure.\r\n\r\n// Install the tooltip output.\r\n(function($) {\r\n $.validity.outputs.tooltip = {\r\n tooltipClass:\"validity-tooltip\",\r\n \r\n start:function() {\r\n $(\".\" + $.validity.outputs.tooltip.tooltipClass)\r\n .remove();\r\n },\r\n \r\n end:function(results) {\r\n /*// If not valid and scrollTo is enabled, scroll the page to the first error.\r\n if (!results.valid && $.validity.settings.scrollTo) {\r\n return;\r\n document.body.scrollTop = $(\".\" + $.validity.outputs.tooltip.tooltipClass)\r\n .offset()\r\n .top;\r\n }*/\r\n },\r\n\r\n raise:function($obj, msg) {\r\n var pos = $obj.offset();\r\n pos.left += $obj.width() + 18;\r\n pos.top += 8;\r\n \r\n $(\r\n \"
\" + \r\n msg +\r\n \"
\" +\r\n \"
\" + \r\n \"
\" +\r\n \"
\"\r\n )\r\n .click(function() {\r\n $obj.focus();\r\n $(this).fadeOut();\r\n })\r\n .css(pos)\r\n .hide()\r\n .appendTo(\"body\")\r\n .fadeIn();\r\n },\r\n\r\n raiseAggregate:function($obj, msg) {\r\n // Just raise the error on the last input.\r\n if ($obj.length) {\r\n this.raise($obj.filter(\":last\"), msg);\r\n }\r\n }\r\n };\r\n})(jQuery);\r\n\r\n\r\n// Install the label output.\r\n(function($) {\r\n function getIdentifier($obj) {\r\n return $obj.attr('id').length ?\r\n $obj.attr('id') :\r\n $obj.attr('name');\r\n }\r\n\r\n $.validity.outputs.label = {\r\n cssClass:\"error\",\r\n \r\n start:function() {\r\n // Remove all the existing error labels.\r\n $(\".\" + $.validity.settings.cssClass)\r\n .remove();\r\n },\r\n \r\n end:function(results) {\r\n // If not valid and scrollTo is enabled, scroll the page to the first error.\r\n if (!results.valid && $.validity.settings.scrollTo) {\r\n location.hash = $(\".\" + $.validity.outputs.label.cssClass + \":eq(0)\").attr('for');\r\n }\r\n },\r\n\r\n raise:function($obj, msg) {\r\n var \r\n labelSelector = \".\" + $.validity.outputs.label.cssClass + \"[for='\" + getIdentifier($obj) + \"']\";\r\n\r\n // If an error label already exists for the bad input just update its text:\r\n if ($(labelSelector).length) {\r\n $(labelSelector).text(msg);\r\n }\r\n\r\n // Otherwize create a new one and stick it after the input:\r\n else {\r\n $(\"