{"version":3,"sources":["jquery.payment.js"],"names":["$","cardFromNumber","cardFromType","cards","defaultFormat","formatBackCardNumber","formatBackExpiry","formatCardNumber","formatExpiry","formatForwardExpiry","formatForwardSlashAndSpace","hasTextSelected","luhnCheck","reFormatCVC","reFormatCardNumber","reFormatExpiry","reFormatNumeric","replaceFullWidthChars","restrictCVC","restrictCardNumber","restrictExpiry","restrictNumeric","safeVal","setCardType","__slice","slice","__indexOf","indexOf","item","i","l","this","length","window","jQuery","Zepto","payment","fn","args","method","arguments","call","apply","type","patterns","format","cvcLength","luhn","num","card","p","_i","_j","_len","_len1","_ref","replace","substr","digit","digits","odd","sum","split","reverse","parseInt","$target","prop","document","selection","createRange","text","value","currPair","cursor","last","prevPair","_error","val","is","test","str","chars","chr","idx","e","currentTarget","setTimeout","re","upperLength","String","fromCharCode","which","preventDefault","m1","m2","input","metaKey","ctrlKey","allTypes","cardType","hasClass","_results","push","removeClass","join","addClass","toggleClass","trigger","formatCardCVC","on","formatCardExpiry","cardExpiryVal","month","year","Date","getFullYear","toString","validateCardNumber","validateCardExpiry","currentTime","expiry","trim","setMonth","getMonth","validateCardCVC","cvc","groups","global","match","exec","shift","grep","n","mon","parts","sep","substring"],"mappings":"CACA,WACE,IAAIA,EAAGC,EAAgBC,EAAcC,EAAOC,EAAeC,EAAsBC,EAAkBC,EAAkBC,EAAcC,EAAqBC,EAA4BC,EAAiBC,EAAWC,EAAaC,EAAoBC,EAAgBC,EAAiBC,EAAuBC,EAAaC,EAAoBC,EAAgBC,EAAiBC,EAASC,EAClXC,EAAU,GAAGC,MACbC,EAAY,GAAGC,SAAW,SAASC,GAAQ,IAAK,IAAIC,EAAI,EAAGC,EAAIC,KAAKC,OAAQH,EAAIC,EAAGD,IAAO,GAAIA,KAAKE,MAAQA,KAAKF,KAAOD,EAAM,OAAOC,EAAK,OAAQ,IAEnJ7B,EAAIiC,OAAOC,QAAUD,OAAOE,OAASF,OAAOjC,GAE1CoC,QAAU,GAEZpC,EAAEoC,QAAQC,GAAK,GAEfrC,EAAEqC,GAAGD,QAAU,WACb,IAAIE,EAAMC,EAEV,OADAA,EAASC,UAAU,GAAIF,EAAO,GAAKE,UAAUR,OAASR,EAAQiB,KAAKD,UAAW,GAAK,GAC5ExC,EAAEoC,QAAQC,GAAGE,GAAQG,MAAMX,KAAMO,IAG1ClC,EAAgB,aAEhBJ,EAAEoC,QAAQjC,MAAQA,EAAQ,CACxB,CACEwC,KAAM,UACNC,SAAU,CAAC,KAAM,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,KAAM,IACnDC,OAAQzC,EACR4B,OAAQ,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACrCc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,qBACNC,SAAU,CAAC,KACXC,OAAQzC,EACR4B,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,UACNC,SAAU,CAAC,MACXC,OAAQzC,EACR4B,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,OACNC,SAAU,CAAC,GACXC,OAAQzC,EACR4B,OAAQ,CAAC,GAAI,IACbc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,aACNC,SAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACnDC,OAAQzC,EACR4B,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,OACNC,SAAU,CAAC,GAAI,IACfC,OAAQ,gCACRb,OAAQ,CAAC,IACTc,UAAW,CAAC,EAAG,GACfC,MAAM,GACL,CACDJ,KAAM,aACNC,SAAU,CAAC,GAAI,GAAI,GAAI,IACvBC,OAAQ,gCACRb,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,WACNC,SAAU,CAAC,GAAI,GAAI,GAAI,KACvBC,OAAQzC,EACR4B,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,WACNC,SAAU,CAAC,GAAI,IACfC,OAAQzC,EACR4B,OAAQ,CAAC,GAAI,GAAI,GAAI,IACrBc,UAAW,CAAC,GACZC,MAAM,GACL,CACDJ,KAAM,MACNC,SAAU,CAAC,IACXC,OAAQzC,EACR4B,OAAQ,CAAC,IACTc,UAAW,CAAC,GACZC,MAAM,IAIV9C,EAAiB,SAAS+C,GACxB,IAAIC,EAAMC,EAAYC,EAAIC,EAAIC,EAAMC,EAAOC,EAE3C,IADAP,GAAOA,EAAM,IAAIQ,QAAQ,MAAO,IAC3BL,EAAK,EAAGE,EAAOlD,EAAM6B,OAAQmB,EAAKE,EAAMF,IAG3C,IAAKC,EAAK,EAAGE,GADbC,GADAN,EAAO9C,EAAMgD,IACDP,UACcZ,OAAQoB,EAAKE,EAAOF,IAG5C,GADAF,EADUK,EAAKH,GACD,GACVJ,EAAIS,OAAO,EAAGP,EAAElB,UAAYkB,EAC9B,OAAOD,GAMf/C,EAAe,SAASyC,GACtB,IAAIM,EAAME,EAAIE,EACd,IAAKF,EAAK,EAAGE,EAAOlD,EAAM6B,OAAQmB,EAAKE,EAAMF,IAE3C,IADAF,EAAO9C,EAAMgD,IACJR,OAASA,EAChB,OAAOM,GAKbrC,EAAY,SAASoC,GACnB,IAAIU,EAAOC,EAAQC,EAAKC,EAAKV,EAAIE,EAIjC,IAHAO,GAAM,EACNC,EAAM,EAEDV,EAAK,EAAGE,GADbM,GAAUX,EAAM,IAAIc,MAAM,IAAIC,WACH/B,OAAQmB,EAAKE,EAAMF,IAC5CO,EAAQC,EAAOR,GACfO,EAAQM,SAASN,EAAO,KACnBE,GAAOA,KACVF,GAAS,GAEPA,EAAQ,IACVA,GAAS,GAEXG,GAAOH,EAET,OAAOG,EAAM,IAAO,GAGtBlD,EAAkB,SAASsD,GACzB,IAAIV,EACJ,OAAuC,MAAlCU,EAAQC,KAAK,mBAA8BD,EAAQC,KAAK,oBAAsBD,EAAQC,KAAK,mBAGyC,OAAhH,oBAAbC,UAAyC,OAAbA,UAAmD,OAA9BZ,EAAOY,SAASC,WAAqBb,EAAKc,iBAAuB,KACxHF,SAASC,UAAUC,cAAcC,OAOzChD,EAAU,SAASiD,EAAON,GACxB,IAAIO,EAAUC,EAAQf,EAAcgB,EAAMC,EAC1C,IACEF,EAASR,EAAQC,KAAK,kBACtB,MAAOU,GACCA,EACRH,EAAS,KAIX,GAFAC,EAAOT,EAAQY,MACfZ,EAAQY,IAAIN,GACG,OAAXE,GAAmBR,EAAQa,GAAG,UAahC,OAZIL,IAAWC,EAAK1C,SAClByC,EAASF,EAAMvC,QAEb0C,IAASH,IACXI,EAAWD,EAAKjD,MAAMgD,EAAS,GAAIA,EAAS,GAAK,KACjDD,EAAWD,EAAM9C,MAAMgD,EAAS,GAAIA,EAAS,GAAK,KAClDf,EAAQa,EAAME,GACV,KAAKM,KAAKrB,IAAUiB,IAAmBjB,EAAQ,KAAQc,IAAc,IAAMd,IAC7Ee,GAAkB,IAGtBR,EAAQC,KAAK,iBAAkBO,GACxBR,EAAQC,KAAK,eAAgBO,IAIxCxD,EAAwB,SAAS+D,GAC/B,IAAIC,EAAOC,EAA2BC,EAAKZ,EAAOpB,EAAIE,EAQtD,IAPW,MAAP2B,IACFA,EAAM,IAEI,aACA,aACZT,EAAQ,GAEHpB,EAAK,EAAGE,GADb4B,EAAQD,EAAIlB,MAAM,KACQ9B,OAAQmB,EAAKE,EAAMF,IAC3C+B,EAAMD,EAAM9B,IACZgC,EANU,aAMMxD,QAAQuD,KACb,IACTA,EAPQ,aAOQC,IAElBZ,GAASW,EAEX,OAAOX,GAGTvD,EAAkB,SAASoE,GACzB,IAAInB,EAEJ,OADAA,EAAUjE,EAAEoF,EAAEC,eACPC,YAAW,WAChB,IAAIf,EAIJ,OAHAA,EAAQN,EAAQY,MAEhBN,GADAA,EAAQtD,EAAsBsD,IAChBf,QAAQ,MAAO,IACtBlC,EAAQiD,EAAON,OAI1BnD,EAAqB,SAASsE,GAC5B,IAAInB,EAEJ,OADAA,EAAUjE,EAAEoF,EAAEC,eACPC,YAAW,WAChB,IAAIf,EAIJ,OAHAA,EAAQN,EAAQY,MAChBN,EAAQtD,EAAsBsD,GAC9BA,EAAQvE,EAAEoC,QAAQ7B,iBAAiBgE,GAC5BjD,EAAQiD,EAAON,OAI1B1D,EAAmB,SAAS6E,GAC1B,IAAInB,EAAShB,EAAMS,EAAO1B,EAAQuD,EAAIC,EAAajB,EAEnD,GADAb,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,KAGlBO,EAAUjE,EAAEoF,EAAEC,eACdd,EAAQN,EAAQY,MAChB5B,EAAOhD,EAAesE,EAAQb,GAC9B1B,GAAUuC,EAAMf,QAAQ,MAAO,IAAME,GAAO1B,OAC5CwD,EAAc,GACVvC,IACFuC,EAAcvC,EAAKjB,OAAOiB,EAAKjB,OAAOA,OAAS,MAE7CA,GAAUwD,GAGyB,MAAlCvB,EAAQC,KAAK,mBAA8BD,EAAQC,KAAK,oBAAsBK,EAAMvC,SAQzF,OAJEuD,EADEtC,GAAsB,SAAdA,EAAKN,KACV,yBAEA,oBAEAoC,KAAKR,IACVa,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAIN,EAAQ,IAAMb,OAE1B6B,EAAGR,KAAKR,EAAQb,IACzB0B,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAIN,EAAQb,EAAQ,cAHhC,GAQTrD,EAAuB,SAAS+E,GAC9B,IAAInB,EAASM,EAGb,GAFAN,EAAUjE,EAAEoF,EAAEC,eACdd,EAAQN,EAAQY,MACA,IAAZO,EAAEO,QAGiC,MAAlC1B,EAAQC,KAAK,mBAA8BD,EAAQC,KAAK,oBAAsBK,EAAMvC,QAGzF,MAAI,QAAQ+C,KAAKR,IACfa,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAIN,EAAMf,QAAQ,QAAS,SAEnC,SAASuB,KAAKR,IACvBa,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAIN,EAAMf,QAAQ,MAAO,cAHrC,GAQTzC,EAAiB,SAASqE,GACxB,IAAInB,EAEJ,OADAA,EAAUjE,EAAEoF,EAAEC,eACPC,YAAW,WAChB,IAAIf,EAIJ,OAHAA,EAAQN,EAAQY,MAChBN,EAAQtD,EAAsBsD,GAC9BA,EAAQvE,EAAEoC,QAAQ5B,aAAa+D,GACxBjD,EAAQiD,EAAON,OAI1BzD,EAAe,SAAS4E,GACtB,IAAInB,EAASP,EAAOmB,EAEpB,GADAnB,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,GAKlB,OAFAO,EAAUjE,EAAEoF,EAAEC,eACdR,EAAMZ,EAAQY,MAAQnB,EAClB,OAAOqB,KAAKF,IAAiB,MAARA,GAAuB,MAARA,GACtCO,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAI,IAAMA,EAAM,WAExB,SAASE,KAAKF,IACvBO,EAAEQ,iBACKN,YAAW,WAChB,IAAIO,EAAIC,EAGR,OAFAD,EAAK7B,SAASa,EAAI,GAAI,KACtBiB,EAAK9B,SAASa,EAAI,GAAI,KACb,GAAY,IAAPgB,EACL5B,EAAQY,IAAI,IAAMgB,EAAK,MAAQC,GAE/B7B,EAAQY,IAASA,EAAM,gBAT7B,GAeTpE,EAAsB,SAAS2E,GAC7B,IAAInB,EAASP,EAAOmB,EAEpB,GADAnB,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,GAKlB,OADAmB,GADAZ,EAAUjE,EAAEoF,EAAEC,gBACAR,MACV,SAASE,KAAKF,GACTZ,EAAQY,IAASA,EAAM,YADhC,GAKFnE,EAA6B,SAAS0E,GACpC,IAAInB,EAASY,EAAKc,EAElB,GAAgB,OADhBA,EAAQF,OAAOC,aAAaN,EAAEO,SACG,MAAVA,EAKvB,OADAd,GADAZ,EAAUjE,EAAEoF,EAAEC,gBACAR,MACV,OAAOE,KAAKF,IAAgB,MAARA,EACfZ,EAAQY,IAAI,IAAMA,EAAM,YADjC,GAKFvE,EAAmB,SAAS8E,GAC1B,IAAInB,EAASM,EAGb,GAFAN,EAAUjE,EAAEoF,EAAEC,eACdd,EAAQN,EAAQY,MACA,IAAZO,EAAEO,QAGiC,MAAlC1B,EAAQC,KAAK,mBAA8BD,EAAQC,KAAK,oBAAsBK,EAAMvC,QAGzF,MAAI,YAAY+C,KAAKR,IACnBa,EAAEQ,iBACKN,YAAW,WAChB,OAAOrB,EAAQY,IAAIN,EAAMf,QAAQ,YAAa,cAHlD,GAQF3C,EAAc,SAASuE,GACrB,IAAInB,EAEJ,OADAA,EAAUjE,EAAEoF,EAAEC,eACPC,YAAW,WAChB,IAAIf,EAIJ,OAHAA,EAAQN,EAAQY,MAEhBN,GADAA,EAAQtD,EAAsBsD,IAChBf,QAAQ,MAAO,IAAI/B,MAAM,EAAG,GACnCH,EAAQiD,EAAON,OAI1B5C,EAAkB,SAAS+D,GACzB,IAAIW,EACJ,SAAIX,EAAEY,UAAWZ,EAAEa,UAGH,KAAZb,EAAEO,QAGU,IAAZP,EAAEO,QAGFP,EAAEO,MAAQ,KAGdI,EAAQN,OAAOC,aAAaN,EAAEO,SACrB,SAASZ,KAAKgB,OAGzB5E,EAAqB,SAASiE,GAC5B,IAAInB,EAAShB,EAAMS,EAAOa,EAG1B,GAFAN,EAAUjE,EAAEoF,EAAEC,eACd3B,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,KAGd/C,EAAgBsD,GAKpB,OAFAM,GAASN,EAAQY,MAAQnB,GAAOF,QAAQ,MAAO,KAC/CP,EAAOhD,EAAesE,IAEbA,EAAMvC,QAAUiB,EAAKjB,OAAOiB,EAAKjB,OAAOA,OAAS,GAEjDuC,EAAMvC,QAAU,IAI3BZ,EAAiB,SAASgE,GACxB,IAAInB,EAASP,EAGb,GAFAO,EAAUjE,EAAEoF,EAAEC,eACd3B,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,KAGd/C,EAAgBsD,GAKpB,SAFQA,EAAQY,MAAQnB,GACVF,QAAQ,MAAO,IACnBxB,OAAS,SAAnB,GAKFd,EAAc,SAASkE,GACrB,IAAInB,EAASP,EAGb,GAFAO,EAAUjE,EAAEoF,EAAEC,eACd3B,EAAQ+B,OAAOC,aAAaN,EAAEO,OACzB,QAAQZ,KAAKrB,KAGd/C,EAAgBsD,GAIpB,OADMA,EAAQY,MAAQnB,GACX1B,QAAU,GAGvBT,EAAc,SAAS6D,GACrB,IAAInB,EAASiC,EAAUjD,EAAMkD,EAAUtB,EAIvC,GAFAA,GADAZ,EAAUjE,EAAEoF,EAAEC,gBACAR,MACdsB,EAAWnG,EAAEoC,QAAQ+D,SAAStB,IAAQ,WACjCZ,EAAQmC,SAASD,GAcpB,OAbAD,EAAW,WACT,IAAI/C,EAAIE,EAAMgD,EAEd,IADAA,EAAW,GACNlD,EAAK,EAAGE,EAAOlD,EAAM6B,OAAQmB,EAAKE,EAAMF,IAC3CF,EAAO9C,EAAMgD,GACbkD,EAASC,KAAKrD,EAAKN,MAErB,OAAO0D,EAPE,GASXpC,EAAQsC,YAAY,WACpBtC,EAAQsC,YAAYL,EAASM,KAAK,MAClCvC,EAAQwC,SAASN,GACjBlC,EAAQyC,YAAY,aAA2B,YAAbP,GAC3BlC,EAAQ0C,QAAQ,mBAAoBR,IAI/CnG,EAAEoC,QAAQC,GAAGuE,cAAgB,WAM3B,OALA7E,KAAK8E,GAAG,WAAYxF,GACpBU,KAAK8E,GAAG,WAAY3F,GACpBa,KAAK8E,GAAG,QAAShG,GACjBkB,KAAK8E,GAAG,SAAUhG,GAClBkB,KAAK8E,GAAG,QAAShG,GACVkB,MAGT/B,EAAEoC,QAAQC,GAAGyE,iBAAmB,WAS9B,OARA/E,KAAK8E,GAAG,WAAYxF,GACpBU,KAAK8E,GAAG,WAAYzF,GACpBW,KAAK8E,GAAG,WAAYrG,GACpBuB,KAAK8E,GAAG,WAAYnG,GACpBqB,KAAK8E,GAAG,WAAYpG,GACpBsB,KAAK8E,GAAG,UAAWvG,GACnByB,KAAK8E,GAAG,SAAU9F,GAClBgB,KAAK8E,GAAG,QAAS9F,GACVgB,MAGT/B,EAAEoC,QAAQC,GAAG9B,iBAAmB,WAU9B,OATAwB,KAAK8E,GAAG,WAAYxF,GACpBU,KAAK8E,GAAG,WAAY1F,GACpBY,KAAK8E,GAAG,WAAYtG,GACpBwB,KAAK8E,GAAG,UAAWxG,GACnB0B,KAAK8E,GAAG,QAAStF,GACjBQ,KAAK8E,GAAG,QAAS/F,GACjBiB,KAAK8E,GAAG,SAAU/F,GAClBiB,KAAK8E,GAAG,QAAS/F,GACjBiB,KAAK8E,GAAG,QAAStF,GACVQ,MAGT/B,EAAEoC,QAAQC,GAAGhB,gBAAkB,WAK7B,OAJAU,KAAK8E,GAAG,WAAYxF,GACpBU,KAAK8E,GAAG,QAAS7F,GACjBe,KAAK8E,GAAG,SAAU7F,GAClBe,KAAK8E,GAAG,QAAS7F,GACVe,MAGT/B,EAAEoC,QAAQC,GAAG0E,cAAgB,WAC3B,OAAO/G,EAAEoC,QAAQ2E,cAAc/G,EAAE+B,MAAM8C,QAGzC7E,EAAEoC,QAAQ2E,cAAgB,SAASxC,GACjC,IAAIyC,EAAeC,EAAM1D,EASzB,OARkCyD,GAAlCzD,EAAOgB,EAAMT,MAAM,UAAW,IAAiB,GACD,KAAjC,OADsCmD,EAAO1D,EAAK,IAC3C0D,EAAKjF,YAAS,IAAiB,QAAQ+C,KAAKkC,KAG9DA,GAFS,IAAKC,MAAMC,cACJC,WAAW3F,MAAM,EAAG,GACpBwF,GAIX,CACLD,MAHFA,EAAQhD,SAASgD,EAAO,IAItBC,KAHFA,EAAOjD,SAASiD,EAAM,MAOxBjH,EAAEoC,QAAQiF,mBAAqB,SAASrE,GACtC,IAAIC,EAAMM,EAEV,OADAP,GAAOA,EAAM,IAAIQ,QAAQ,SAAU,MAC9B,QAAQuB,KAAK/B,QAGlBC,EAAOhD,EAAe+C,MAIdO,EAAOP,EAAIhB,OAAQN,EAAUe,KAAKQ,EAAKjB,OAAQuB,IAAS,KAAqB,IAAdN,EAAKF,MAAkBnC,EAAUoC,OAG1GhD,EAAEoC,QAAQkF,mBAAqB,SAASN,EAAOC,GAC7C,IAAIM,EAAaC,EAAQjE,EAIzB,MAHqB,iBAAVyD,GAAsB,UAAWA,IAC5BA,GAAdzD,EAAOyD,GAAoBA,MAAOC,EAAO1D,EAAK0D,SAE1CD,IAASC,KAGfD,EAAQhH,EAAEyH,KAAKT,GACfC,EAAOjH,EAAEyH,KAAKR,KACT,QAAQlC,KAAKiC,OAGb,QAAQjC,KAAKkC,KAGX,GAAKD,GAASA,GAAS,KAGV,IAAhBC,EAAKjF,SAELiF,EADEA,EAAO,GACF,KAAOA,EAEP,KAAOA,GAGE,IAAhBA,EAAKjF,SAGTwF,EAAS,IAAIN,KAAKD,EAAMD,GACxBO,EAAc,IAAIL,KAClBM,EAAOE,SAASF,EAAOG,WAAa,GACpCH,EAAOE,SAASF,EAAOG,WAAa,EAAG,GAChCH,EAASD,QAGlBvH,EAAEoC,QAAQwF,gBAAkB,SAASC,EAAKlF,GACxC,IAAIM,EAAMM,EAEV,OADAsE,EAAM7H,EAAEyH,KAAKI,KACR,QAAQ9C,KAAK8C,KAIN,OADZ5E,EAAO/C,EAAayC,KAEXY,EAAOsE,EAAI7F,OAAQN,EAAUe,KAAKQ,EAAKH,UAAWS,IAAS,GAE3DsE,EAAI7F,QAAU,GAAK6F,EAAI7F,QAAU,IAI5ChC,EAAEoC,QAAQ+D,SAAW,SAASnD,GAC5B,IAAIO,EACJ,OAAKP,IAGmC,OAA/BO,EAAOtD,EAAe+C,IAAgBO,EAAKZ,UAAO,IAFlD,MAKX3C,EAAEoC,QAAQ7B,iBAAmB,SAASyC,GACpC,IAAIC,EAAM6E,EAAQtC,EAAajC,EAG/B,OAFAP,EAAMA,EAAIQ,QAAQ,MAAO,KACzBP,EAAOhD,EAAe+C,KAItBwC,EAAcvC,EAAKjB,OAAOiB,EAAKjB,OAAOA,OAAS,GAC/CgB,EAAMA,EAAIvB,MAAM,EAAG+D,GACfvC,EAAKJ,OAAOkF,OAC4B,OAAlCxE,EAAOP,EAAIgF,MAAM/E,EAAKJ,SAAmBU,EAAKiD,KAAK,UAAO,EAGpD,OADdsB,EAAS7E,EAAKJ,OAAOoF,KAAKjF,KAI1B8E,EAAOI,SACPJ,EAAS9H,EAAEmI,KAAKL,GAAQ,SAASM,GAC/B,OAAOA,MAEK5B,KAAK,WAPnB,GAROxD,GAmBXhD,EAAEoC,QAAQ5B,aAAe,SAASgH,GAChC,IAAIa,EAAKC,EAAOC,EAAKtB,EAErB,OADAqB,EAAQd,EAAOQ,MAAM,mCAIrBK,EAAMC,EAAM,IAAM,GAClBC,EAAMD,EAAM,IAAM,IAClBrB,EAAOqB,EAAM,IAAM,IACVtG,OAAS,EAChBuG,EAAM,MACW,OAARA,GACTF,EAAMA,EAAIG,UAAU,EAAG,GACvBD,EAAM,IACkB,IAAfF,EAAIrG,QAAgBuG,EAAIvG,OAAS,EAC1CuG,EAAM,MACkB,IAAfF,EAAIrG,QAAyB,MAARqG,GAAuB,MAARA,IAC7CA,EAAM,IAAMA,EACZE,EAAM,OAEDF,EAAME,EAAMtB,GAhBV,MAmBVxE,KAAKV","file":"jquery.payment.js","sourcesContent":["// Generated by CoffeeScript 1.7.1\n(function() {\n  var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, reFormatCVC, reFormatCardNumber, reFormatExpiry, reFormatNumeric, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, safeVal, setCardType,\n    __slice = [].slice,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n  $ = window.jQuery || window.Zepto || window.$;\n\n  $.payment = {};\n\n  $.payment.fn = {};\n\n  $.fn.payment = function() {\n    var args, method;\n    method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    return $.payment.fn[method].apply(this, args);\n  };\n\n  defaultFormat = /(\\d{1,4})/g;\n\n  $.payment.cards = cards = [\n    {\n      type: 'maestro',\n      patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n      format: defaultFormat,\n      length: [12, 13, 14, 15, 16, 17, 18, 19],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'forbrugsforeningen',\n      patterns: [600],\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'dankort',\n      patterns: [5019],\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'visa',\n      patterns: [4],\n      format: defaultFormat,\n      length: [13, 16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'mastercard',\n      patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'amex',\n      patterns: [34, 37],\n      format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n      length: [15],\n      cvcLength: [3, 4],\n      luhn: true\n    }, {\n      type: 'dinersclub',\n      patterns: [30, 36, 38, 39],\n      format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n      length: [14],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'discover',\n      patterns: [60, 64, 65, 622],\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'unionpay',\n      patterns: [62, 88],\n      format: defaultFormat,\n      length: [16, 17, 18, 19],\n      cvcLength: [3],\n      luhn: false\n    }, {\n      type: 'jcb',\n      patterns: [35],\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }\n  ];\n\n  cardFromNumber = function(num) {\n    var card, p, pattern, _i, _j, _len, _len1, _ref;\n    num = (num + '').replace(/\\D/g, '');\n    for (_i = 0, _len = cards.length; _i < _len; _i++) {\n      card = cards[_i];\n      _ref = card.patterns;\n      for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n        pattern = _ref[_j];\n        p = pattern + '';\n        if (num.substr(0, p.length) === p) {\n          return card;\n        }\n      }\n    }\n  };\n\n  cardFromType = function(type) {\n    var card, _i, _len;\n    for (_i = 0, _len = cards.length; _i < _len; _i++) {\n      card = cards[_i];\n      if (card.type === type) {\n        return card;\n      }\n    }\n  };\n\n  luhnCheck = function(num) {\n    var digit, digits, odd, sum, _i, _len;\n    odd = true;\n    sum = 0;\n    digits = (num + '').split('').reverse();\n    for (_i = 0, _len = digits.length; _i < _len; _i++) {\n      digit = digits[_i];\n      digit = parseInt(digit, 10);\n      if ((odd = !odd)) {\n        digit *= 2;\n      }\n      if (digit > 9) {\n        digit -= 9;\n      }\n      sum += digit;\n    }\n    return sum % 10 === 0;\n  };\n\n  hasTextSelected = function($target) {\n    var _ref;\n    if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {\n      return true;\n    }\n    if ((typeof document !== \"undefined\" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {\n      if (document.selection.createRange().text) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  safeVal = function(value, $target) {\n    var currPair, cursor, digit, error, last, prevPair;\n    try {\n      cursor = $target.prop('selectionStart');\n    } catch (_error) {\n      error = _error;\n      cursor = null;\n    }\n    last = $target.val();\n    $target.val(value);\n    if (cursor !== null && $target.is(\":focus\")) {\n      if (cursor === last.length) {\n        cursor = value.length;\n      }\n      if (last !== value) {\n        prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n        currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n        digit = value[cursor];\n        if (/\\d/.test(digit) && prevPair === (\"\" + digit + \" \") && currPair === (\" \" + digit)) {\n          cursor = cursor + 1;\n        }\n      }\n      $target.prop('selectionStart', cursor);\n      return $target.prop('selectionEnd', cursor);\n    }\n  };\n\n  replaceFullWidthChars = function(str) {\n    var chars, chr, fullWidth, halfWidth, idx, value, _i, _len;\n    if (str == null) {\n      str = '';\n    }\n    fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n    halfWidth = '0123456789';\n    value = '';\n    chars = str.split('');\n    for (_i = 0, _len = chars.length; _i < _len; _i++) {\n      chr = chars[_i];\n      idx = fullWidth.indexOf(chr);\n      if (idx > -1) {\n        chr = halfWidth[idx];\n      }\n      value += chr;\n    }\n    return value;\n  };\n\n  reFormatNumeric = function(e) {\n    var $target;\n    $target = $(e.currentTarget);\n    return setTimeout(function() {\n      var value;\n      value = $target.val();\n      value = replaceFullWidthChars(value);\n      value = value.replace(/\\D/g, '');\n      return safeVal(value, $target);\n    });\n  };\n\n  reFormatCardNumber = function(e) {\n    var $target;\n    $target = $(e.currentTarget);\n    return setTimeout(function() {\n      var value;\n      value = $target.val();\n      value = replaceFullWidthChars(value);\n      value = $.payment.formatCardNumber(value);\n      return safeVal(value, $target);\n    });\n  };\n\n  formatCardNumber = function(e) {\n    var $target, card, digit, length, re, upperLength, value;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    $target = $(e.currentTarget);\n    value = $target.val();\n    card = cardFromNumber(value + digit);\n    length = (value.replace(/\\D/g, '') + digit).length;\n    upperLength = 16;\n    if (card) {\n      upperLength = card.length[card.length.length - 1];\n    }\n    if (length >= upperLength) {\n      return;\n    }\n    if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n      return;\n    }\n    if (card && card.type === 'amex') {\n      re = /^(\\d{4}|\\d{4}\\s\\d{6})$/;\n    } else {\n      re = /(?:^|\\s)(\\d{4})$/;\n    }\n    if (re.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(value + ' ' + digit);\n      });\n    } else if (re.test(value + digit)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(value + digit + ' ');\n      });\n    }\n  };\n\n  formatBackCardNumber = function(e) {\n    var $target, value;\n    $target = $(e.currentTarget);\n    value = $target.val();\n    if (e.which !== 8) {\n      return;\n    }\n    if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n      return;\n    }\n    if (/\\d\\s$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(value.replace(/\\d\\s$/, ''));\n      });\n    } else if (/\\s\\d?$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(value.replace(/\\d$/, ''));\n      });\n    }\n  };\n\n  reFormatExpiry = function(e) {\n    var $target;\n    $target = $(e.currentTarget);\n    return setTimeout(function() {\n      var value;\n      value = $target.val();\n      value = replaceFullWidthChars(value);\n      value = $.payment.formatExpiry(value);\n      return safeVal(value, $target);\n    });\n  };\n\n  formatExpiry = function(e) {\n    var $target, digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    $target = $(e.currentTarget);\n    val = $target.val() + digit;\n    if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(\"0\" + val + \" / \");\n      });\n    } else if (/^\\d\\d$/.test(val)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        var m1, m2;\n        m1 = parseInt(val[0], 10);\n        m2 = parseInt(val[1], 10);\n        if (m2 > 2 && m1 !== 0) {\n          return $target.val(\"0\" + m1 + \" / \" + m2);\n        } else {\n          return $target.val(\"\" + val + \" / \");\n        }\n      });\n    }\n  };\n\n  formatForwardExpiry = function(e) {\n    var $target, digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    $target = $(e.currentTarget);\n    val = $target.val();\n    if (/^\\d\\d$/.test(val)) {\n      return $target.val(\"\" + val + \" / \");\n    }\n  };\n\n  formatForwardSlashAndSpace = function(e) {\n    var $target, val, which;\n    which = String.fromCharCode(e.which);\n    if (!(which === '/' || which === ' ')) {\n      return;\n    }\n    $target = $(e.currentTarget);\n    val = $target.val();\n    if (/^\\d$/.test(val) && val !== '0') {\n      return $target.val(\"0\" + val + \" / \");\n    }\n  };\n\n  formatBackExpiry = function(e) {\n    var $target, value;\n    $target = $(e.currentTarget);\n    value = $target.val();\n    if (e.which !== 8) {\n      return;\n    }\n    if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n      return;\n    }\n    if (/\\d\\s\\/\\s$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return $target.val(value.replace(/\\d\\s\\/\\s$/, ''));\n      });\n    }\n  };\n\n  reFormatCVC = function(e) {\n    var $target;\n    $target = $(e.currentTarget);\n    return setTimeout(function() {\n      var value;\n      value = $target.val();\n      value = replaceFullWidthChars(value);\n      value = value.replace(/\\D/g, '').slice(0, 4);\n      return safeVal(value, $target);\n    });\n  };\n\n  restrictNumeric = function(e) {\n    var input;\n    if (e.metaKey || e.ctrlKey) {\n      return true;\n    }\n    if (e.which === 32) {\n      return false;\n    }\n    if (e.which === 0) {\n      return true;\n    }\n    if (e.which < 33) {\n      return true;\n    }\n    input = String.fromCharCode(e.which);\n    return !!/[\\d\\s]/.test(input);\n  };\n\n  restrictCardNumber = function(e) {\n    var $target, card, digit, value;\n    $target = $(e.currentTarget);\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected($target)) {\n      return;\n    }\n    value = ($target.val() + digit).replace(/\\D/g, '');\n    card = cardFromNumber(value);\n    if (card) {\n      return value.length <= card.length[card.length.length - 1];\n    } else {\n      return value.length <= 16;\n    }\n  };\n\n  restrictExpiry = function(e) {\n    var $target, digit, value;\n    $target = $(e.currentTarget);\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected($target)) {\n      return;\n    }\n    value = $target.val() + digit;\n    value = value.replace(/\\D/g, '');\n    if (value.length > 6) {\n      return false;\n    }\n  };\n\n  restrictCVC = function(e) {\n    var $target, digit, val;\n    $target = $(e.currentTarget);\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected($target)) {\n      return;\n    }\n    val = $target.val() + digit;\n    return val.length <= 4;\n  };\n\n  setCardType = function(e) {\n    var $target, allTypes, card, cardType, val;\n    $target = $(e.currentTarget);\n    val = $target.val();\n    cardType = $.payment.cardType(val) || 'unknown';\n    if (!$target.hasClass(cardType)) {\n      allTypes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = cards.length; _i < _len; _i++) {\n          card = cards[_i];\n          _results.push(card.type);\n        }\n        return _results;\n      })();\n      $target.removeClass('unknown');\n      $target.removeClass(allTypes.join(' '));\n      $target.addClass(cardType);\n      $target.toggleClass('identified', cardType !== 'unknown');\n      return $target.trigger('payment.cardType', cardType);\n    }\n  };\n\n  $.payment.fn.formatCardCVC = function() {\n    this.on('keypress', restrictNumeric);\n    this.on('keypress', restrictCVC);\n    this.on('paste', reFormatCVC);\n    this.on('change', reFormatCVC);\n    this.on('input', reFormatCVC);\n    return this;\n  };\n\n  $.payment.fn.formatCardExpiry = function() {\n    this.on('keypress', restrictNumeric);\n    this.on('keypress', restrictExpiry);\n    this.on('keypress', formatExpiry);\n    this.on('keypress', formatForwardSlashAndSpace);\n    this.on('keypress', formatForwardExpiry);\n    this.on('keydown', formatBackExpiry);\n    this.on('change', reFormatExpiry);\n    this.on('input', reFormatExpiry);\n    return this;\n  };\n\n  $.payment.fn.formatCardNumber = function() {\n    this.on('keypress', restrictNumeric);\n    this.on('keypress', restrictCardNumber);\n    this.on('keypress', formatCardNumber);\n    this.on('keydown', formatBackCardNumber);\n    this.on('keyup', setCardType);\n    this.on('paste', reFormatCardNumber);\n    this.on('change', reFormatCardNumber);\n    this.on('input', reFormatCardNumber);\n    this.on('input', setCardType);\n    return this;\n  };\n\n  $.payment.fn.restrictNumeric = function() {\n    this.on('keypress', restrictNumeric);\n    this.on('paste', reFormatNumeric);\n    this.on('change', reFormatNumeric);\n    this.on('input', reFormatNumeric);\n    return this;\n  };\n\n  $.payment.fn.cardExpiryVal = function() {\n    return $.payment.cardExpiryVal($(this).val());\n  };\n\n  $.payment.cardExpiryVal = function(value) {\n    var month, prefix, year, _ref;\n    _ref = value.split(/[\\s\\/]+/, 2), month = _ref[0], year = _ref[1];\n    if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n      prefix = (new Date).getFullYear();\n      prefix = prefix.toString().slice(0, 2);\n      year = prefix + year;\n    }\n    month = parseInt(month, 10);\n    year = parseInt(year, 10);\n    return {\n      month: month,\n      year: year\n    };\n  };\n\n  $.payment.validateCardNumber = function(num) {\n    var card, _ref;\n    num = (num + '').replace(/\\s+|-/g, '');\n    if (!/^\\d+$/.test(num)) {\n      return false;\n    }\n    card = cardFromNumber(num);\n    if (!card) {\n      return false;\n    }\n    return (_ref = num.length, __indexOf.call(card.length, _ref) >= 0) && (card.luhn === false || luhnCheck(num));\n  };\n\n  $.payment.validateCardExpiry = function(month, year) {\n    var currentTime, expiry, _ref;\n    if (typeof month === 'object' && 'month' in month) {\n      _ref = month, month = _ref.month, year = _ref.year;\n    }\n    if (!(month && year)) {\n      return false;\n    }\n    month = $.trim(month);\n    year = $.trim(year);\n    if (!/^\\d+$/.test(month)) {\n      return false;\n    }\n    if (!/^\\d+$/.test(year)) {\n      return false;\n    }\n    if (!((1 <= month && month <= 12))) {\n      return false;\n    }\n    if (year.length === 2) {\n      if (year < 70) {\n        year = \"20\" + year;\n      } else {\n        year = \"19\" + year;\n      }\n    }\n    if (year.length !== 4) {\n      return false;\n    }\n    expiry = new Date(year, month);\n    currentTime = new Date;\n    expiry.setMonth(expiry.getMonth() - 1);\n    expiry.setMonth(expiry.getMonth() + 1, 1);\n    return expiry > currentTime;\n  };\n\n  $.payment.validateCardCVC = function(cvc, type) {\n    var card, _ref;\n    cvc = $.trim(cvc);\n    if (!/^\\d+$/.test(cvc)) {\n      return false;\n    }\n    card = cardFromType(type);\n    if (card != null) {\n      return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;\n    } else {\n      return cvc.length >= 3 && cvc.length <= 4;\n    }\n  };\n\n  $.payment.cardType = function(num) {\n    var _ref;\n    if (!num) {\n      return null;\n    }\n    return ((_ref = cardFromNumber(num)) != null ? _ref.type : void 0) || null;\n  };\n\n  $.payment.formatCardNumber = function(num) {\n    var card, groups, upperLength, _ref;\n    num = num.replace(/\\D/g, '');\n    card = cardFromNumber(num);\n    if (!card) {\n      return num;\n    }\n    upperLength = card.length[card.length.length - 1];\n    num = num.slice(0, upperLength);\n    if (card.format.global) {\n      return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;\n    } else {\n      groups = card.format.exec(num);\n      if (groups == null) {\n        return;\n      }\n      groups.shift();\n      groups = $.grep(groups, function(n) {\n        return n;\n      });\n      return groups.join(' ');\n    }\n  };\n\n  $.payment.formatExpiry = function(expiry) {\n    var mon, parts, sep, year;\n    parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n    if (!parts) {\n      return '';\n    }\n    mon = parts[1] || '';\n    sep = parts[2] || '';\n    year = parts[3] || '';\n    if (year.length > 0) {\n      sep = ' / ';\n    } else if (sep === ' /') {\n      mon = mon.substring(0, 1);\n      sep = '';\n    } else if (mon.length === 2 || sep.length > 0) {\n      sep = ' / ';\n    } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n      mon = \"0\" + mon;\n      sep = ' / ';\n    }\n    return mon + sep + year;\n  };\n\n}).call(this);\n"]}