{"version":3,"file":"../../javascript/builder.js","names":["Builder","sel","this","$elem","$","canvas","find","hide","context","getContext","variant","applyToBand","length","parseInt","val","stoneHover","stoneHoverId","activeStone","setupMask","that","click","e","preventDefault","$stone","target","each","className","id","changeOption","data","stripe","Biiju","changeStripeColour","on","addClass","setTimeout","removeClass","$checkbox","toggleClass","hasClass","css","inTransaction","prototype","type","numId","price","urlname","preload","$active","$new","attr","is","calculatePrice","updateUrl","first","last","changeVariant","builder","$controller","group","repaint","isEngraver","getOldSideClass","switchData","filter","name","match","index","substr","value","a","$option","callback","NProgress","start","img","Image","onload","done","$img","replaceWith","src","drawImage","isSafari5","test","navigator","userAgent","crossOrigin","off","offset","stonePositions","pos","split","push","x","parseFloat","y","w","h","variants","$variantOptions","detectStone","offsetX","pageX","left","offsetY","pageY","top","ret","getImageData","r","g","b","hover","i","indexOf","showStoneOptions","mousemove","mStones","modal","origActive","showBubble","$bubble","appendTo","remove","$inputs","html","toLocaleString","url","baseUrl","p","stoneCounts","stoneCount","$stoneSummary","empty","stoneText","next","text","append","join","history","replaceState","title","current","replace","encodeURIComponent","location","hostname","handleControllers","$variantGroups","aClass","show","eq","$options","$current","$next","children","$prev","add","inClass","outClass","variantSel","currentIndex","prevAll","window","open","href","FB","ui","method"],"sources":["builder.js"],"mappings":"AAAA,SAASA,QAAQC,GACbC,KAAKC,MAAQC,EAAEH,GACfC,KAAKG,OAASH,KAAKC,MAAMG,KAAK,UAAUC,OAAO,GAE3CL,KAAKG,SACLH,KAAKM,QAAUN,KAAKG,OAAOI,WAAW,OAG1CP,KAAKQ,QAAU,EACfR,KAAKS,aAAc,EAEfP,EAAE,mBAAmBQ,SACrBV,KAAKQ,QAAUG,SAAST,EAAE,mBAAmBU,QAGjDZ,KAAKa,YAAa,EAClBb,KAAKc,aAAe,EACpBd,KAAKe,YAAc,EAEff,KAAKG,QACLH,KAAKgB,YAGT,IAAIC,EAAOjB,KAEXE,EAAE,oBAAoBgB,OAAM,SAASC,GAGjC,GAFAA,EAAEC,iBAEEH,EAAKR,YAAa,CAClB,IAAIY,EAASnB,EAAEF,MACXsB,EAASpB,EAAE,SAAWe,EAAKF,aAE/Bb,EAAE,mBAAmBqB,MAAK,WAClBvB,KAAKwB,WAAaF,EAAO,GAAGE,WAAaxB,KAAKyB,IAAMH,EAAO,GAAGG,IAC9DR,EAAKS,aAAa1B,KAAKyB,GAAIJ,EAAOM,KAAK,MAAON,EAAOM,KAAK,SAAUN,EAAOM,KAAK,WAExF,GACJ,CAEAV,EAAKS,aAAa,QAAUT,EAAKF,YAAab,EAAEF,MAAM2B,KAAK,MAAOzB,EAAEF,MAAM2B,KAAK,SAAUzB,EAAEF,MAAM2B,KAAK,YACtG,IAAIC,EAAS1B,EAAEF,MAAM2B,KAAK,WAE1BE,MAAMC,mBAAmBF,EAC7B,IAAGG,GAAG,cAAc,WAChB7B,EAAEF,MAAMgC,SAAS,YACrB,IAAGD,GAAG,YAAY,WACd,IAAId,EAAOjB,KACXiC,YAAW,WACP/B,EAAEe,GAAMiB,YAAY,YACxB,GAAG,IACP,IAEAhC,EAAE,kBAAkBgB,OAAM,SAASC,GAC/BjB,EAAE,WAAWgC,YAAY,gBACzBhC,EAAE,aAAagC,YAAY,gBAC/B,IAEAhC,EAAE,mBAAmBgB,OAAM,WACvB,IAAIiB,EAAYjC,EAAEF,MAAMI,KAAK,kBAC7B+B,EAAUC,YAAY,UACtBnB,EAAKR,YAAc0B,EAAUE,SAAS,SAC1C,IAAGC,IAAI,SAAU,WAEjBtC,KAAKuC,eAAgB,CACzB,CAEAzC,QAAQ0C,UAAUd,aAAe,SAASe,EAAMC,EAAOC,EAAOC,GAC1D,IAAInB,EAAKgB,EAAO,IAAMC,EAAO,SACzBzC,EAAQD,KAAKC,MACbgB,EAAQjB,KAEZA,KAAK6C,QAAQpB,GAAI,WACb,IAAIqB,EAAU7C,EAAMG,KAAK,IAAIqC,EAAK,WAC9BM,EAAU9C,EAAMG,KAAK,IAAIqB,GAC7BvB,EAAE,WAAWuC,GAAM7B,IAAI8B,GAAOM,KAAK,aAAcL,GAAOK,KAAK,eAAgBJ,GAExEE,EAAQG,GAAGF,IAIZA,EAAKf,SAAS,iBACdC,YAAW,WACPc,EAAKb,YAAY,gBACrB,GAAG,OANHY,EAAQZ,YAAY,UAAUF,SAAS,YACvCe,EAAKb,YAAY,YAAYF,SAAS,WAQ1Cf,EAAKiC,iBACLjC,EAAKkC,YACDjD,EAAE,4BAA4B+C,GAAG,SACjC/C,EAAE,sBAAsBkD,QAAQlB,YAAY,YAAYF,SAAS,UACjE9B,EAAE,sBAAsBmD,OAAOnB,YAAY,UAAUF,SAAS,YAEtE,GACJ,EAEAlC,QAAQ0C,UAAUc,cAAgB,SAAS9C,EAASoC,GAChD,IAAIW,EAAUvD,KACdA,KAAKQ,QAAUA,EACfR,KAAKuC,eAAgB,EAErBrC,EAAE,gCAAgCqB,MAAK,WACnC,IAAIiC,EAActD,EAAEF,MAChB8C,EAAU5C,EAAEF,MAAMI,KAAK,WAE3B,GAAI0C,EAAQE,KAAK,iBAAmBF,EAAQE,KAAK,iBAAmBxC,EAAS,CACzE,IAAIiD,EAAQX,EAAQE,KAAK,cAErBD,EAAO7C,EAAEF,MAAMI,KAAK,sBAAwBI,EAAU,kBAAoBiD,EAAQ,MAEjFV,EAAKrC,SACNqC,EAAO7C,EAAEF,MAAMI,KAAK,sBAAwBI,EAAU,aAG1DgD,EAAYtB,YAAY,YAExBL,MAAM6B,QAAQX,EAAM,QAEpBD,EAAQZ,YAAY,UAAUF,SAAS,YAAYE,YAAY,sBAC/Da,EAAKb,YAAY,YAAYF,SAAS,UAAUE,YAAY,sBAE5DsB,EAAYxB,SAAS,YAErBuB,EAAQ7B,aAAcqB,EAAKpB,KAAK,QAASoB,EAAKpB,KAAK,MAAOoB,EAAKpB,KAAK,SAAUoB,EAAKpB,KAAK,YAEpF4B,EAAQI,cAAqC,gBAArBC,mBACxBC,WAAW,gBAEnB,CACJ,IAEc3D,EAAE,kBAAkB8B,SAAS,oBACnC8B,OAAO,YAActD,GAAS0B,YAAY,oBAElDhC,EAAE,iBAAiBqB,MAAK,WACpB,GAAiC,OAA7BvB,KAAK+D,KAAKC,MAAM,SAAmB,CACnC,IAAIC,EAAQjE,KAAK+D,KAAKG,OAAO,GAAIlE,KAAK+D,KAAKrD,OAAS,IAChDe,EAAKzB,KAAKmE,MAGVV,EADWvD,EAAE,6BAA+BuB,EAAK,MAC7BuB,KAAK,cACzBD,KAAW7C,EAAE,kCAAoCM,EAAU,kBAAoBiD,EAAQ,MAEtFV,KAAKrC,SACNqC,KAAO7C,EAAE,uDAAyDuD,EAAQ,OAGzEV,KAAKrC,SACNqC,KAAO7C,EAAE,kDAGbqD,EAAQ7B,aAAa,QAAUuC,EAAOlB,KAAKpB,KAAK,MAAOoB,KAAKpB,KAAK,SAAUoB,KAAKpB,KAAK,YAErF,IAAIC,EAASmB,KAAKpB,KAAK,WACvBE,MAAMC,mBAAmBF,EAC7B,CACJ,IAEI1B,EAAE,0BAA4BM,GAASE,SACvCR,EAAE,mBAAmB8B,SAAS,YAC9B9B,EAAE,0BAA4BM,GAAS0B,YAAY,YAEnDhC,EAAE,mBAAmBqB,MAAK,WACtB,IAAI6C,EAAIlE,EAAEF,MAAMqC,SAAS,YACrBgC,EAAUnE,EAAE,WAAaF,KAAKyB,IAElC4C,EAASD,EAAI,WAAa,eAAgB,YAC1CC,EAASD,EAAI,cAAgB,YAAalE,EAAE,qBAChD,KAGJA,EAAE,mBAAmBU,IAAIJ,GAASwC,KAAK,eAAgBJ,GAEvD5C,KAAKuC,eAAgB,EACrBvC,KAAKkD,iBACLlD,KAAKmD,WACT,EAEArD,QAAQ0C,UAAUK,QAAU,SAASpB,EAAI6C,GACrC,IAAIrE,EAAQD,KAAKC,MAAMG,KAAK,IAAMqB,GAElC,IAAIxB,EAAMgD,GAAG,QAAWhD,EAAMS,OAA9B,CAKA6D,UAAUC,QACV,IAAIC,EAAM,IAAIC,MACdD,EAAIE,OAAS,WACTJ,UAAUK,OAEV,IAAIC,EAAO3E,EAAEuE,GACbI,EAAK7B,KAAK,QAAS/C,EAAM+C,KAAK,UAAUd,YAAY,oBAEpDjC,EAAM6E,YAAYD,GAElBhD,MAAM6B,QAAQmB,EAAM,WACpBP,GACJ,EACAG,EAAIM,IAAM9E,EAAM0B,KAAK,MAfrB,MAFI2C,GAkBR,EAEAxE,QAAQ0C,UAAUxB,UAAY,WAC1B,IACIyD,EADAxD,EAAOjB,MAGXyE,EAAM,IAAIC,OACNC,OAAS,WACT1D,EAAKX,QAAQ0E,UAAUP,EAAK,EAAG,EACnC,EAGA,IAAIQ,EAAY,SAASC,KAAKC,UAAUC,YAAc,aAAaF,KAAKC,UAAUC,WAE9ElF,EAAE,QAAQmC,SAAS,UAAY4C,GAC/BR,EAAIY,YAAc,GAClBZ,EAAIM,IAAM7E,EAAEF,KAAKG,QAAQwB,KAAK,SAE9B8C,EAAIM,IAAM7E,EAAEF,KAAKG,QAAQwB,KAAK,eAGlC,IAAI2D,EAAMtF,KAAKC,MAAMsF,SAEjBC,EAAiB,GACrBtF,EAAE,mBAAmBqB,MAAK,WACtB,IAAIE,EAAMzB,KAAKyB,GAAGyC,OAAO,GACrBuB,EAAMvF,EAAEF,MAAMgD,KAAK,YAAY0C,MAAM,KAEzCF,EAAeG,KAAK,CAChBlE,GAAIA,EACJmE,EAAGC,WAAWJ,EAAI,IAClBK,EAAGD,WAAWJ,EAAI,IAClBM,EAAGF,WAAWJ,EAAI,IAClBO,EAAGH,WAAWJ,EAAI,IAClBQ,SAAU/F,EAAEF,MAAMgD,KAAK,SAASgB,MAAM,qBAE9C,IAEAhE,KAAKwF,eAAiBA,EAEtB,IAAIU,EAAkBhG,EAAE,6EAEnBgG,EAAgBxF,SACjBwF,EAAkBhG,EAAE,oEAGxB,IAAIiG,EAAc,SAAShF,GAClBA,EAAEiF,UAEHjF,EAAEiF,QAAUjF,EAAEkF,MAAQf,EAAIgB,KAC1BnF,EAAEoF,QAAUpF,EAAEqF,MAAQlB,EAAImB,KAG9B,IAAIC,EAAMzF,EAAKX,QAAQqG,aAAcxF,EAAEiF,QAASjF,EAAEoF,QAAS,EAAG,GAE1DK,EAAIF,EAAI/E,KAAK,GACbkF,EAAIH,EAAI/E,KAAK,GACbmF,EAAIJ,EAAI/E,KAAK,GACbyC,EAAIsC,EAAI/E,KAAK,GAEboF,GAAQ,EACRlG,EAAa,EACjB,GAAK+F,GAAMC,GAAMC,IAAK1C,EAIf,CAEH,IAAIH,EAAQ,EACZiC,EAAgB3E,MAAK,SAASyF,GACtB/F,EAAKT,SAAWN,EAAEF,MAAM2B,KAAK,QAC7BsC,EAAQ+C,EAEhB,IAEIN,EAAI/E,KAAKsC,KACT8C,GAAQ,EAEhB,MAbIA,GAAQ,EAeZ7G,EAAEqB,KAAKiE,GAAgB,WAEfrE,EAAEiF,QAAUpG,KAAK4F,GACjBzE,EAAEiF,QAAWpG,KAAK4F,EAAI5F,KAAK+F,GAC3B5E,EAAEoF,QAAUvG,KAAK8F,GACjB3E,EAAEoF,QAAWvG,KAAK8F,EAAI9F,KAAKgG,GAGF,MAAjBhG,KAAKiG,UACLjG,KAAKiG,SAASvF,SAEVV,KAAKiG,SAASgB,QAAQ,UAAYhG,EAAKT,UAAY,EACnDK,EAAab,KAAKyB,GAElBsF,GAAQ,EAI5B,IAEIA,IACA9F,EAAKJ,YAAa,EAClBI,EAAKH,aAAeD,EACpBI,EAAKhB,MAAM+B,SAAS,WAGnBf,EAAKJ,YAAckG,GACpB9F,EAAKJ,YAAa,EAClBI,EAAKH,aAAeD,EACpBI,EAAKhB,MAAM+B,SAAS,UACbf,EAAKJ,aAAekG,IAC3B9F,EAAKJ,YAAa,EAClBI,EAAKhB,MAAMiC,YAAY,SAE/B,EAEAlC,KAAKC,MAAMiB,OAAM,SAASC,GACtBA,EAAEC,iBACF+E,EAAYhF,GACZF,EAAKiG,iBAAiB/F,EAC1B,IAAGY,GAAG,aAAa,WACf,OAAO,CACX,IAEA/B,KAAKC,MAAMkH,WAAU,SAAShG,GAC1BgF,EAAYhF,EAChB,IAEAjB,EAAE,iBAAiBgB,OAAM,SAASC,GAC9B,IAAIiG,EAAUlH,EAAEF,MAAM2B,KAAK,UACZ,GAAXyF,GACAnG,EAAKJ,YAAa,EAClBI,EAAKH,aAAe,EACpBG,EAAKiG,oBACEE,EAAU,GACjBlH,EAAE,kNAAkNmH,OAE5N,IAAG/E,IAAI,SAAU,UACrB,EAEAxC,QAAQ0C,UAAU0E,iBAAmB,SAAS/F,GAC1C,GAAInB,KAAKa,WAAY,CACjB,IAAIyG,EAAatH,KAAKe,YACtBf,KAAKe,YAAcf,KAAKc,aAExB,IAAIG,EAAOjB,KACPuH,EAAa,WACb,GAAKpG,GAAMA,EAAEiF,SAAYjF,EAAEoF,QAA3B,CAGA,IAAIiB,EAAUtH,EAAE,sCAChBsH,EAAQlF,IAAI,CACRgE,KAAMnF,EAAEiF,QAAU,GAClBK,IAAKtF,EAAEoF,QAAU,KAErBiB,EAAQC,SAAUxG,EAAKhB,OAEvB4B,MAAM6B,QAAQ8D,EAAS,UAEvBA,EAAQxF,SAAS,0BACjBC,YAAW,WACPuF,EAAQE,QACZ,GAAG,IAbH,CAcJ,EAEIxH,EAAE,WAAWmC,SAAS,gBAClBiF,IAAetH,KAAKe,aACpBb,EAAE,WAAWkC,YAAY,gBACzBlC,EAAE,aAAakC,YAAY,kBAG3BmF,KAGJA,IAEArH,EAAE,WAAWkC,YAAY,gBACzBlC,EAAE,aAAakC,YAAY,iBAEnC,CACJ,EAEAtC,QAAQ0C,UAAUU,eAAiB,WAC/B,IAAIyE,EAAUzH,EAAE,+BACZyC,EAAU,EAEdgF,EAAQpG,MAAK,WACJrB,EAAEF,MAAMqC,SAAS,cAClBM,GAASkD,WAAW3F,EAAEF,MAAMgD,KAAK,cAAe,IAExD,IAEA9C,EAAE,UAAU0H,KAAK,IAAMjF,EAAMkF,iBACjC,EAEA/H,QAAQ0C,UAAUW,UAAY,WAC1B,IAAInD,KAAKuC,gBAILrC,EAAE,iBAAiBmC,SAAS,eAAhC,CAIA,IAAIyF,EAAMC,QAAU7H,EAAE,iBAAiB8C,KAAK,gBAU5C,GARI9C,EAAE,mBAAmBQ,SACrBoH,GAAO,IAAM5H,EAAE,mBAAmB8C,KAAK,iBAGvC9C,EAAE,iBAAiBQ,SACnBoH,GAAO,IAAM5H,EAAE,iBAAiB8C,KAAK,iBAGrC9C,EAAE,kBAAkBQ,OAAQ,CAC5B,IAAIsH,EAAI,GACJC,EAAc,CAAC,EAEfC,EAAahI,EAAE,gCAAgCqB,MAAK,WACpD,IAAKrB,EAAEF,MAAMqC,SAAS,YAAa,CAC/B,IAAIO,EAAU1C,EAAEF,MAAMgD,KAAK,gBAEtBiF,EAAYrF,KACbqF,EAAYrF,GAAW,GAE3BqF,EAAYrF,KAEZoF,EAAErC,KAAK/C,EACX,CACJ,IAAGlC,OAECyH,EAAgBjI,EAAE,kBACtBiI,EAAcC,QACdlI,EAAEqB,KAAK0G,GAAa,SAAS7D,EAAG0C,GAC5B,IAAIuB,EAAYnI,EAAE,kCAAoCkE,EAAI,YAAYkE,OAAOC,OACzEL,GAAc,IAAKpB,EAAI,IAC3BqB,EAAcK,OAAO,OAAS1B,EAAI,IAAMuB,EAAY,QACxD,IAEAP,GAAO,IAAME,EAAES,KAAK,IACxB,CAEI,iBAAkBC,SAClBA,QAAQC,aAAa,CAAC,EAAG,GAAIb,GAGjC,IAAIc,EAAQ1I,EAAE,eAAe8C,KAAK,cAElC9C,EAAE,mBAAmBqB,MAAK,WACtB,IAAIsH,EAAU3I,EAAEF,MAAMgD,KAAK,QAC3B6F,EAAUA,EAAQC,QAAQ,SAAU,SACpCD,GAAWE,mBAAmBH,EAAQ,WAAaI,SAASC,SAAWnB,GACvE5H,EAAEF,MAAMgD,KAAK,OAAQ6F,EACzB,IAEA3I,EAAE,qBAAqBqB,MAAK,WACvBrB,EAAEF,MAAMgD,KAAK,OAAQ8E,EAAIgB,QAAQf,QAASA,QAAU,cACzD,IAEI7H,EAAE,mBAAmBQ,QACrBR,EAAE,6CAA6CqB,MAAK,WAChDrB,EAAEF,MAAMgD,KAAK,OAAQ8E,EAAIgB,QAAQf,QAASA,QAAU,mBACxD,IAGJ7H,EAAE,oBAAoB8C,KAAK,OAAQ8E,EA/DnC,CAgEJ,EAEAhI,QAAQ0C,UAAU0G,kBAAoB,SAASnJ,GAC3C,IAAIwD,EAAUvD,KAEVmJ,EAAiBjJ,EAAE,wCAAwCgB,OAAM,SAASC,GAC1EA,EAAEC,iBAEF,IAAIgI,EAAS,mCAEb,IAAIlJ,EAAEF,MAAMqC,SAAS+G,GAArB,CAIAD,EAAejH,YAAYkH,GAC3BlJ,EAAEF,MAAMgC,SAASoH,GACjBlJ,EAAE,yCAAyCG,OAE3C,IAAIoD,EAAQvD,EAAEF,MAAMgD,KAAK,cACzB,GAAIS,EAAO,CACP,IACIV,EADS7C,EAAE,sDAAwDuD,GAAO4F,OAC5DjJ,KAAK,mCAAmC4B,SAAS,YAAYE,YAAY,6BAA6BoH,GAAG,GAAGpH,YAAY,YAAYF,SAAS,UAC/JuB,EAAQD,cAAcP,EAAKpB,KAAK,MAAOoB,EAAKpB,KAAK,WACrD,KAAO,CACCoB,EAAO7C,EAAEF,MACbuD,EAAQD,cAAcP,EAAKpB,KAAK,MAAOoB,EAAKpB,KAAK,WACrD,CAdA,CAeJ,IAEAzB,EAAEH,GAAKwB,MAAK,WACR,IAAIiC,EAActD,EAAEF,MAEhBuJ,EAAWrJ,EAAEF,MAAMI,KAAK,mCACxBoJ,EAAWtJ,EAAEF,MAAMI,KAAK,WAExBqJ,EAAQvJ,EAAEF,MAAM0J,WAAW5F,OAAO,0BAClC6F,EAAQzJ,EAAEF,MAAM0J,WAAW5F,OAAO,8BAEtC2F,EAAMG,IAAID,GAAOzI,OAAM,SAASC,GACxBoC,EAAQI,cAAqC,gBAArBC,mBACxBC,WAAW,iBAEf1C,EAAEC,iBAEFoI,EAAWhG,EAAYpD,KAAK,WAE5B,IAAIyJ,EAAU,WACVC,EAAW,YAEV5J,EAAEF,MAAMiD,GAAG0G,KACZE,EAAU,YACVC,EAAW,YAGf,IACIC,EAAa,kBADHP,EAASxG,KAAK,gBACmB,KAElB,WAAzBwG,EAAS7H,KAAK,UACdoI,EAAa,IAGjB,IAAIC,EAAeR,EAASS,QAAQ,OAASF,GAAYrJ,OAGzDsJ,GAAgB9J,EAAEF,MAAMiD,GAAGwG,GAAS,GAAI,EACxCO,GAA8BT,EAASzF,OAAO,OAASiG,GAAYrJ,OAEnE,IAAIqC,EAAOwG,EAASzF,OAAO,OAASiG,GAAYT,GAAGU,GAEnDxG,EAAYtB,YAAY,YAExBa,EAAKb,YAAY,sBAAsBF,SAAS6H,GAChDL,EAAStH,YAAY,sBAErBL,MAAM6B,QAAQX,EAAM,QAEpBS,EAAYxB,SAAS,YAErBe,EAAKb,YAAY,YAAYF,SAAS,UAAUE,YAAY2H,GAC5DL,EAAStH,YAAY,UAAUF,SAAS,YAAYA,SAAS8H,GAE7DN,EAAWzG,EAEc,WAArBA,EAAKpB,KAAK,QACV4B,EAAQD,cAAcP,EAAKpB,KAAK,MAAOoB,EAAKpB,KAAK,YAEjD4B,EAAQ7B,aAAcqB,EAAKpB,KAAK,QAASoB,EAAKpB,KAAK,MAAOoB,EAAKpB,KAAK,SAAUoB,EAAKpB,KAAK,WAEhG,GACJ,GACJ,EAIAzB,GAAE,WACOA,EAAE,oBAAoBQ,SAGb,IAAIZ,QAAQ,oBAClBoJ,kBAAkB,gCAE1BhJ,EAAE,qBAAqBgB,OAAM,SAASC,GAClCA,EAAEC,iBACF8I,OAAOC,KAAKnK,KAAKoK,KAAM,kBAAmB,qBAC9C,IAEAlK,EAAE,oBAAoBgB,OAAM,SAASC,GACjCA,EAAEC,iBACFiJ,GAAGC,GAAG,CACFC,OAAQ,QACRH,KAAMpK,KAAKoK,MAEnB,IACJ,IAGAtK,QAAQ0C,UAAUmB,WAAa,WAC3B,OAAOzD,EAAE,4BAA4B+C,GAAG,MAC5C","ignoreList":[],"sourcesContent":["function Builder(sel) {\n    this.$elem = $(sel);\n    this.canvas = this.$elem.find('canvas').hide()[0];\n\n    if (this.canvas) {\n        this.context = this.canvas.getContext('2d');\n    }\n\n    this.variant = 1;\n    this.applyToBand = false;\n\n    if ($('#option-variant').length) {\n        this.variant = parseInt($('#option-variant').val());\n    }\n\n    this.stoneHover = false;\n    this.stoneHoverId = 0;\n    this.activeStone = 0;\n\n    if (this.canvas) {\n        this.setupMask();\n    }\n\n    var that = this;\n\n    $('.stones__stone a').click(function(e) {\n        e.preventDefault();\n\n        if (that.applyToBand) {\n            var $stone = $(this);\n            var target = $('#stone' + that.activeStone);\n\n            $('.stone-position').each(function() {\n                if (this.className == target[0].className && this.id != target[0].id) {\n                    that.changeOption(this.id, $stone.data('id'), $stone.data('price'), $stone.data('urlname'));\n                }\n            });\n        }\n\n        that.changeOption('stone' + that.activeStone, $(this).data('id'), $(this).data('price'), $(this).data('urlname'));\n        var stripe = $(this).data('urlname');\n\n        Biiju.changeStripeColour(stripe);\n    }).on('touchstart', function() {\n        $(this).addClass('touchdown');\n    }).on('touchend', function() {\n        var that = this;\n        setTimeout(function() {\n            $(that).removeClass('touchdown');\n        }, 1000);\n    });\n\n    $('.stones__close').click(function(e) {\n        $('.stones').removeClass('stones--open');\n        $('.peek-nav').removeClass('peek-nav--off');\n    });\n\n    $('.stones__option').click(function() {\n        var $checkbox = $(this).find('.fake-checkbox');\n        $checkbox.toggleClass('active');\n        that.applyToBand = $checkbox.hasClass('active');\n    }).css('cursor', 'pointer');\n\n    this.inTransaction = false;\n};\n\nBuilder.prototype.changeOption = function(type, numId, price, urlname) {\n    var id = type + '-' + numId +\":first\",\n        $elem = this.$elem,\n        that  = this;\n\n    this.preload(id, function() {\n        var $active = $elem.find('.'+type+'.active'),\n            $new    = $elem.find('.'+id);\n        $('#option-'+type).val(numId).attr('data-price', price).attr('data-urlname', urlname);\n\n        if (!$active.is($new)) {\n            $active.removeClass('active').addClass('inactive');\n            $new.removeClass('inactive').addClass('active');\n        } else {\n            $new.addClass('inactive-blip');\n            setTimeout(function() {\n                $new.removeClass('inactive-blip');\n            }, 200);\n        }\n\n        that.calculatePrice();\n        that.updateUrl();\n        if ($('.product-engraving__wrap').is('div')) {\n            $('.product-engraving').first().removeClass('inactive').addClass('active');\n            $('.product-engraving').last().removeClass('active').addClass('inactive');\n        }\n    });\n};\n\nBuilder.prototype.changeVariant = function(variant, urlname) {\n    var builder = this;\n    this.variant = variant;\n    this.inTransaction = true;\n\n    $('.product-options__controller').each(function() {\n        var $controller = $(this);\n        var $active = $(this).find('.active');\n\n        if ($active.attr('data-variant') && $active.attr('data-variant') != variant) {\n            var group = $active.attr('data-group');\n\n            var $new = $(this).find('span[data-variant=\"' + variant + '\"][data-group=\"' + group + '\"]');\n\n            if (!$new.length) {\n                $new = $(this).find('span[data-variant=\"' + variant + '\"]:first');\n            }\n\n            $controller.removeClass('animated');\n\n            Biiju.repaint($new, 'left');\n\n            $active.removeClass('active').addClass('inactive').removeClass('off-left off-right');\n            $new.removeClass('inactive').addClass('active').removeClass('off-left off-right');\n\n            $controller.addClass('animated');\n\n            builder.changeOption( $new.data('type'), $new.data('id'), $new.data('price'), $new.data('urlname') );\n\n            if (builder.isEngraver() && getOldSideClass() == \"engrave-back\") {\n                switchData(\"engrave-front\");\n            }\n        }\n    });\n\n    var $stones = $('.stones__stone').addClass('inactive-variant');\n    $stones.filter('.variant_' + variant).removeClass('inactive-variant');\n\n    $('.price-option').each(function() {\n        if (this.name.match('stone') !== null) {\n            var index = this.name.substr(14, this.name.length - 15),\n                id = this.value;\n\n            var $current = $('.stones__stone a[data-id=\"' + id + '\"]'),\n                group    = $current.attr('data-group');\n                $new     = $('.stones__stone a[data-variant=\"' + variant + '\"][data-group=\"' + group + '\"]');\n\n            if (!$new.length) {\n                $new = $('.stones__stone:not(.inactive-variant) a[data-group=\"' + group + '\"]');\n            }\n\n            if (!$new.length) {\n                $new = $('.stones__stone:not(.inactive-variant) a:first');\n            }\n\n            builder.changeOption('stone' + index, $new.data('id'), $new.data('price'), $new.data('urlname'));\n\n            var stripe = $new.data('urlname');\n            Biiju.changeStripeColour(stripe);\n        }\n    });\n\n    if ($('.stone-position.variant' + variant).length) {\n        $('.stone-position').addClass('inactive');\n        $('.stone-position.variant' + variant).removeClass('inactive');\n\n        $('.stone-position').each(function() {\n            var a = $(this).hasClass('inactive'),\n                $option = $('#option-' + this.id);\n\n            $option[ a ? 'addClass' : 'removeClass' ]('inactive');\n            $option[ a ? 'insertAfter' : 'appendTo']( $('.product-purchase') );\n        });\n    }\n\n    $('#option-variant').val(variant).attr('data-urlname', urlname);\n\n    this.inTransaction = false;\n    this.calculatePrice();\n    this.updateUrl();\n};\n\nBuilder.prototype.preload = function(id, callback) {\n    var $elem = this.$elem.find('.' + id);\n\n    if ($elem.is('img') || !$elem.length) {\n        callback();\n        return;\n    }\n\n    NProgress.start();\n    var img = new Image();\n    img.onload = function() {\n        NProgress.done();\n\n        var $img = $(img);\n        $img.attr('class', $elem.attr('class')).removeClass('lazy-replacement');\n\n        $elem.replaceWith($img);\n\n        Biiju.repaint($img, 'opacity');\n        callback();\n    };\n    img.src = $elem.data('src');\n};\n\nBuilder.prototype.setupMask = function() {\n    var that = this,\n        img;\n\n    img = new Image();\n    img.onload = function() {\n        that.context.drawImage(img, 0, 0);\n    };\n\n    // Safari 5 is a liar, it kind of supports CORS but not with canvas\n    var isSafari5 = /Safari/.test(navigator.userAgent) && /Version\\/5/.test(navigator.userAgent);\n\n    if ($('html').hasClass('cors') && !isSafari5) {\n        img.crossOrigin = '';\n        img.src = $(this.canvas).data('mask');\n    } else {\n        img.src = $(this.canvas).data('nocors-mask');\n    }\n\n    var off = this.$elem.offset();\n\n    var stonePositions = [];\n    $('.stone-position').each(function() {\n        var id  = this.id.substr(5),\n            pos = $(this).attr('data-pos').split(' ');\n\n        stonePositions.push({\n            id: id,\n            x: parseFloat(pos[0]),\n            y: parseFloat(pos[1]),\n            w: parseFloat(pos[2]),\n            h: parseFloat(pos[3]),\n            variants: $(this).attr('class').match(/variant([0-9]+)/g)\n        });\n    });\n\n    this.stonePositions = stonePositions;\n\n    var $variantOptions = $('.product-options__controller--variant span.product-options__control-label');\n\n    if (!$variantOptions.length) {\n        $variantOptions = $('.product-options__variants .product-options__variant--clickable');\n    }\n\n    var detectStone = function(e) {\n        if (!e.offsetX) {\n            // FF + MSIE\n            e.offsetX = e.pageX - off.left;\n            e.offsetY = e.pageY - off.top;\n        }\n\n        var ret = that.context.getImageData( e.offsetX, e.offsetY, 1, 1);\n\n        var r = ret.data[0],\n            g = ret.data[1],\n            b = ret.data[2],\n            a = ret.data[3];\n\n        var hover = false,\n            stoneHover = 0;\n        if (!r && !g && !b && a) {\n            // No red, green, blue but has alpha,\n            // means  it's a global mask\n            hover = true;\n        } else {\n\n            var index = 0;\n            $variantOptions.each(function(i) {\n                if (that.variant == $(this).data('id')) {\n                    index = i;\n                }\n            });\n\n            if (ret.data[index]) {\n                hover = true;\n            }\n        }\n\n        $.each(stonePositions, function() {\n            if (\n                e.offsetX > this.x &&\n                e.offsetX < (this.x + this.w) &&\n                e.offsetY > this.y &&\n                e.offsetY < (this.y + this.h)\n                ) {\n                    if (\n                        this.variants != null &&\n                        this.variants.length\n                       ) {\n                        if (this.variants.indexOf('variant' + that.variant) > -1) {\n                            stoneHover = this.id;\n                        } else {\n                            hover = false;\n                        }\n                    }\n            }\n        });\n\n        if (hover) {\n            that.stoneHover = true;\n            that.stoneHoverId = stoneHover;\n            that.$elem.addClass('hover');\n        }\n\n        if (!that.stoneHover && hover) {\n            that.stoneHover = true;\n            that.stoneHoverId = stoneHover;\n            that.$elem.addClass('hover');\n        } else if (that.stoneHover && !hover) {\n            that.stoneHover = false;\n            that.$elem.removeClass('hover');\n        }\n    };\n\n    this.$elem.click(function(e) {\n        e.preventDefault();\n        detectStone(e);\n        that.showStoneOptions(e);\n    }).on('dragstart', function() {\n        return false;\n    });\n\n    this.$elem.mousemove(function(e) {\n        detectStone(e);\n    });\n\n    $('#change-stone').click(function(e) {\n        var mStones = $(this).data('stones');\n        if (mStones == 1) {\n            that.stoneHover = true;\n            that.stoneHoverId = 0;\n            that.showStoneOptions();\n        } else if (mStones > 1) {\n            $('<div><p>Click each stone on the ring to make or change your selection, or click the \"Apply to band\" option in the stone wheel to change all the stones.</p><p><img src=\"/images/stones-howto.gif\" /></p></div>').modal();\n        }\n    }).css('cursor', 'pointer');\n};\n\nBuilder.prototype.showStoneOptions = function(e) {\n    if (this.stoneHover) {\n        var origActive = this.activeStone;\n        this.activeStone = this.stoneHoverId;\n\n        var that = this;\n        var showBubble = function() {\n            if (!e || !e.offsetX || !e.offsetY) {\n                return;\n            }\n            var $bubble = $('<div class=\"preview-bubble\"></div>');\n            $bubble.css({\n                left: e.offsetX - 35,\n                top: e.offsetY - 35\n            });\n            $bubble.appendTo( that.$elem );\n\n            Biiju.repaint($bubble, 'height');\n\n            $bubble.addClass('preview-bubble--active');\n            setTimeout(function() {\n                $bubble.remove();\n            }, 500);\n        };\n\n        if ($('.stones').hasClass('stones--open')) {\n            if (origActive === this.activeStone) {\n                $('.stones').toggleClass('stones--open');\n                $('.peek-nav').toggleClass('peek-nav--off');\n                // $('#change-stone').text( $('#change-stone').data('change') );\n            } else {\n                showBubble();\n            }\n        } else {\n            showBubble();\n            // $('#change-stone').text( $('#change-stone').data('changing') );\n            $('.stones').toggleClass('stones--open');\n            $('.peek-nav').toggleClass('peek-nav--off');\n        }\n    }\n};\n\nBuilder.prototype.calculatePrice = function() {\n    var $inputs = $('.product-page .price-option'),\n        price   = 0;\n\n    $inputs.each(function() {\n        if (!$(this).hasClass('inactive')) {\n            price += parseFloat($(this).attr('data-price'), 10);\n        }\n    });\n\n    $('#price').html('£' + price.toLocaleString());\n};\n\nBuilder.prototype.updateUrl = function() {\n    if (this.inTransaction) {\n        return;\n    }\n\n    if ($('.product-page').hasClass('product-box')) {\n        return;\n    }\n\n    var url = baseUrl = $('.product-page').attr('data-baseurl');\n\n    if ($('#option-variant').length) {\n        url += '/' + $('#option-variant').attr('data-urlname');\n    }\n\n    if ($('#option-metal').length) {\n        url += '/' + $('#option-metal').attr('data-urlname');\n    }\n\n    if ($('#option-stone0').length) {\n        var p = [],\n            stoneCounts = {};\n\n        var stoneCount = $('input[name^=\"option[stone]\"]').each(function() {\n            if (!$(this).hasClass('inactive')) {\n                var urlname = $(this).attr('data-urlname');\n\n                if (!stoneCounts[urlname]) {\n                    stoneCounts[urlname] = 0;\n                }\n                stoneCounts[urlname]++;\n\n                p.push(urlname);\n            }\n        }).length;\n\n        var $stoneSummary = $('#stone-summary');\n        $stoneSummary.empty();\n        $.each(stoneCounts, function(a, b) {\n            var stoneText = $('.stones__stone a[data-urlname=\"' + a + '\"]:first').next().text();\n            if (stoneCount <= 1) { b = ''; }\n            $stoneSummary.append('<li>' + b + ' ' + stoneText + '</li>');\n        });\n\n        url += '/' + p.join('+');\n    }\n\n    if ('replaceState' in history) {\n        history.replaceState({}, '', url);\n    }\n\n    var title = $('.share-wrap').attr('data-title');\n\n    $('.share--twitter').each(function() {\n        var current = $(this).attr('href');\n        current = current.replace(/text.*/, 'text=');\n        current += encodeURIComponent(title + ' http://' + location.hostname + url);\n        $(this).attr('href', current);\n    });\n\n    $('.share--pinterest').each(function() {\n         $(this).attr('href', url.replace(baseUrl, baseUrl + '/pinterest'));\n    });\n\n    if ($('#admin-bar-menu').length) {\n        $('#admin-bar-menu a[href*=\"add-to-inspire\"]').each(function() {\n            $(this).attr('href', url.replace(baseUrl, baseUrl + '/add-to-inspire'));\n        });\n    }\n\n    $('.share--facebook').attr('href', url);\n};\n\nBuilder.prototype.handleControllers = function(sel) {\n    var builder = this;\n\n    var $variantGroups = $('.product-options__variant--clickable').click(function(e) {\n        e.preventDefault();\n\n        var aClass = 'product-options__variant--active';\n\n        if ($(this).hasClass(aClass)) {\n            return;\n        }\n\n        $variantGroups.removeClass(aClass);\n        $(this).addClass(aClass);\n        $('.product-options__controller--variant').hide();\n\n        var group = $(this).attr('data-group');\n        if (group) {\n            var $group = $('.product-options__controller--variant.variant-type-' + group).show();\n            var $new = $group.find('.product-options__control-label').addClass('inactive').removeClass('active off-left off-right').eq(0).removeClass('inactive').addClass('active');\n            builder.changeVariant($new.data('id'), $new.data('urlname'));\n        } else {\n            var $new = $(this);\n            builder.changeVariant($new.data('id'), $new.data('urlname'));\n        }\n    });\n\n    $(sel).each(function() {\n        var $controller = $(this);\n\n        var $options = $(this).find('.product-options__control-label'),\n            $current = $(this).find('.active');\n\n        var $next = $(this).children().filter('.product-options__next'),\n            $prev = $(this).children().filter('.product-options__previous');\n\n        $next.add($prev).click(function(e) {\n            if (builder.isEngraver() && getOldSideClass() == \"engrave-back\") {\n                switchData(\"engrave-front\");\n            }\n            e.preventDefault();\n\n            $current = $controller.find('.active');\n\n            var inClass = 'off-left',\n                outClass = 'off-right';\n\n            if (!$(this).is($prev)) {\n                inClass = 'off-right';\n                outClass = 'off-left';\n            }\n\n            var variant = $current.attr('data-variant'),\n                variantSel = '[data-variant=\"' + variant + '\"]';\n\n            if ($current.data('type') == 'variant') {\n                variantSel = '';\n            }\n\n            var currentIndex = $current.prevAll('span' + variantSel).length,\n                $old = $current;\n\n            currentIndex += $(this).is($next) ? 1: -1;\n            currentIndex = currentIndex % $options.filter('span' + variantSel).length;\n\n            var $new = $options.filter('span' + variantSel).eq(currentIndex);\n\n            $controller.removeClass('animated');\n\n            $new.removeClass('off-left off-right').addClass(inClass);\n            $current.removeClass('off-left off-right');\n\n            Biiju.repaint($new, 'left');\n\n            $controller.addClass('animated');\n\n            $new.removeClass('inactive').addClass('active').removeClass(inClass);\n            $current.removeClass('active').addClass('inactive').addClass(outClass);\n\n            $current = $new;\n\n            if ($new.data('type') == 'variant') {\n                builder.changeVariant($new.data('id'), $new.data('urlname'));\n            } else {\n                builder.changeOption( $new.data('type'), $new.data('id'), $new.data('price'), $new.data('urlname') );\n            }\n        });\n    });\n};\n\n\n\n$(function() {\n    if (!$('#product-preview').length) {\n        return;\n    }\n    var builder = new Builder('#product-preview');\n    builder.handleControllers('.product-options__controller');\n\n    $('.share--pinterest').click(function(e) {\n        e.preventDefault();\n        window.open(this.href, \"biiju_pinterest\", \"width=10,height=10\");\n    });\n\n    $('.share--facebook').click(function(e) {\n        e.preventDefault();\n        FB.ui({\n            method: 'share',\n            href: this.href\n        });\n    });\n});\n\n\nBuilder.prototype.isEngraver = function() {\n    return $('.product-engraving__wrap').is('div');\n}\n"]}