{"version":3,"sources":["scripts.js"],"names":["Nav","selector","$","init","compile","layout","listen","source","html","template","Handlebars","nav","data_nav","append","find","each","$cols","this","cols_height","col_height","outerHeight","css","on","e","$section","$parent","parent","$cat","siblings","$sections","$cats","nav_class_active","hasClass","removeClass","addClass","off","Search","input","$container","keyword","url","val","focusin","focusout","parameter","decodeURIComponent","RegExp","exec","window","location","search","replace","MiniCart","trigger","table","content","hidden","status","toggle","visible","toggleClass","Overlay","rows","count","length","empty","$badge","children","show","ProductVariant","check","variantExists","remove","$select","Category","height","description","$paragraphs","height_collapsed","index","$this","click","preventDefault","Grid","prepare","hover","buy","setTimeout","isotope","itemSelector","layoutMode","getSortData","name","price","item","data","parseInt","discount","sortBy","sortAscending","render","$divs","unwrap","hover_class","$watch","$form","closest","submit","$items","common_height","parameters","isoInstance","laidOutItems","text","GridImages","GridItems","vendors","types","element","loop","$data","data_parameters","data_sku","data_new","data_stock","data_vendor","data_link","sku","details","JSON","parse","new","stock","indexOf","vendor","toString","link","attr","image","setIndex","setName","setSku","setVendor","setLink","setStock","setImage","setParameters","setNew","setPrice","push","$button","$img","$actions","_","forIn","value","key","obj","contains","data_sortables","v","isArray","stringify","id","type","badge","$price","$price_before","$price_now","$price_special","$price_currency","price_before","trim","price_now","price_special","class_special","saving","Math","round","GridFilter","uniq","loopParameters","loopFilters","sort","sliders","select","reset","keys","pluck","intersection","forEach","test","where","withinThreshold","findKey","label","values","filter","isNumber","slider","a","b","min","max","collection","filters","prepend","$sliders","$element","interval","noUiSlider","start","connect","step","range","change","current_min","current_max","slide","i","$item","item_filters","item_show","isEmpty","k","inbetween","intersect","$filter_element","$filter_placeholder","$filter_body","$filter_reset","top","width","outerWidth","hide","stopPropagation","filter_id","filter_value","filter_state","splice","$reset","GridSorting","order","ascending","echo","offset","throttle","callback","op","load","ProductData","json","instock","get","property","inParameters","hasOwnProperty","ProductDelivery","ProductStock","ProductBuy","ProductAmount","isNaN","ProductCountdown","hours","minutes","and","now","moment","day","hour","weekend","afterhours","limit","seconds","millisecond","diff","countdown","format","event","update","stop","strftime","ProductTabs","$nav","tab","fadeIn","ProductBrand","toLowerCase","done","def","Deferred","path","ajax","error","resolve","success","promise","ProductDetails","make","data_groups","group","detail","param","params","param_value","l","explanation","ProductPrice","before","ProductRelated","container","alignHeight","this_height","$slider","flexslider","animation","slideshow","keyboard","controlNav","smoothHeight","animationLoop","controlsContainer","itemWidth","itemMargin","minItems","prevText","nextText","$controls","$product","BuyRelatedProductCustom","ProductBanner","hasBanner","product_id","ProductVariantMasterID","ProductThumbnails","ProductImage","popup","image_id","replaceWith","placeholder","fancybox","open","padding","margin","helpers","overlay","closeClick","speedOut","showEarly","locked","beforeLoad","showLoading","afterLoad","hideLoading","amount","insert","makePath","version","first","title","href","video_url","imagesLoaded","namespace","fadeOut","$images","$videos","currentTarget","media","ShopCart","isCart","modifyDom","hideDiscount","replaceButtons","message","$discount","$text","$increase","$decrease","$remove","$order","SubCategory","grid","watch","ShopCheckout","isCheckout","clean","$payment_shipping","wrapAll","prependTo","$countries","button","$summary","$information","container_pos","position","summary_pos","original_position","scroll","clearTimeout","pageYOffset","document","documentElement","scrollTop","difference","$checkout"],"mappings":"AAAA,YAEA,IAAAA,MAEAC,SAAAC,EAAA,QAEAC,KAAA,WAEAH,IAAAI,UAEAJ,IAAAK,SAEAL,IAAAM,UAIAF,QAAA,WAEA,GAAAG,QAAAL,EAAA,iBAAAM,OACAC,SAAAC,WAAAN,QAAAG,QACAC,KAAAC,UAAAE,IAAAC,UAEAZ,KAAAC,SAAAY,OAAAL,OAIAH,OAAA,WAEAL,IAAAC,SAAAa,KAAA,SAAAC,KAAA,WAEA,GAAAC,OAAAd,EAAA,aAAAe,MACAC,YAAA,CAEAF,OAAAD,KAAA,WAEA,GAAAI,YAAAjB,EAAAe,MAAAG,aAEAF,aAAAC,WAAAD,YAAAC,WAAAD,cAIAF,MAAAK,IAAA,SAAAH,gBAMAZ,OAAA,WAEAN,IAAAC,SAAAqB,GAAA,aAAA,gBAAA,SAAAC,GAEA,GAAAC,UAAAtB,EAAAe,MACAQ,QAAAD,SAAAE,SACAC,KAAAH,SAAAI,SAAA,cACAC,UAAA7B,IAAAC,SAAAa,KAAA,iBACAgB,MAAA9B,IAAAC,SAAAa,KAAA,cACAiB,iBAAA,iBAEAP,UAAAQ,SAAAD,oBAEAF,UAAAI,YAAAF,kBACAD,MAAAG,YAAAF,kBAEAP,SAAAU,SAAAH,kBACAJ,KAAAO,SAAAH,mBAIAN,QAAAH,GAAA,aAAA,SAAAC,GAEAE,QAAAU,MAEAX,SAAAS,YAAAF,kBACAJ,KAAAM,YAAAF,wBAUAK,QAEAnC,SAAAC,EAAA,eAEAmC,MAAAnC,EAAA,YAEAC,KAAA,WAEA,GAAAmC,YAAAF,OAAAnC,SAAAa,KAAA,UACAyB,QAAAH,OAAAI,IAAA,UAEAD,UAEAH,OAAAC,MAAAI,IAAAF,SAIAH,OAAAC,MAAAK,QAAA,WAEAJ,WAAAJ,SAAA,mBAIAE,OAAAC,MAAAM,SAAA,WAEAL,WAAAL,YAAA,oBAMAO,IAAA,SAAAI,WAEA,MAAAC,qBAAA,GAAAC,QAAA,QAAAF,UAAA,uBAAAG,KAAAC,OAAAC,SAAAC,UAAA,CAAA,KAAA,GAAAC,QAAA,MAAA,SAAA,OAMAC,UAEAC,QAAAnD,EAAA,qBAEAoD,MAAApD,EAAA,mBAEAqD,QAAArD,EAAA,qBAEAC,KAAA,WAEAiD,SAAAI,SAEAJ,SAAAK,UAIAD,OAAA,WAEAJ,SAAAC,QAAA/B,GAAA,aAAA,WAEA8B,SAAAC,QAAAlB,MAEAiB,SAAAM,SAEAN,SAAAO,aAMAA,QAAA,WAEAP,SAAAE,MAAAhC,GAAA,aAAA,WAEA8B,SAAAE,MAAAnB,MAEAiB,SAAAM,SAEAN,SAAAI,YAMAE,OAAA,WAEAN,SAAAC,QAAAO,YAAA,UAEAR,SAAAE,MAAAM,YAAA,UAEAC,QAAAH,QAAA,IAIAD,OAAA,WAEA,GAAAK,MAAAV,SAAAG,QAAAzC,KAAA,2BACAiD,MAAAD,KAAAE,MAEA,IAAA,IAAAD,MAAA,CAEA,GAAAE,OAAA,2GAEAb,UAAAG,QAAA/C,KAAAyD,WAEA,CAEA,GAAAC,QAAAd,SAAAC,QAAAc,SAAA,SAEAD,QAAAE,UAQAC,gBAEApE,SAAAC,EAAA,gBAEAC,KAAA,WAEAkE,eAAAC,SAIAA,MAAA,WAEA,GAAAC,eAAAF,eAAApE,SAAAa,KAAA,SAEAyD,eAAAP,OAEAK,eAAA/D,SAIA+D,eAAApE,SAAAuE,UAMAlE,OAAA,WAEA,GAAAmE,SAAAJ,eAAApE,SAAAa,KAAA,SAEA2D,SAAAnD,GAAA,SAAA,cAMA+C,eAAApE,SAAAmE,SAMAM,UAEAzE,SAAAC,EAAA,yBAEAyE,OAAA,KAEAxE,KAAA,WAEAuE,SAAAzE,SAAA+D,SAEAU,SAAAE,cAEAF,SAAAhB,WAMAkB,YAAA,WAEA,GAAAC,aAAAH,SAAAzE,SAAAa,KAAA,KACAgE,iBAAA,CAGAD,aAAA9D,KAAA,SAAAgE,OAEA,GAAAC,OAAA9E,EAAAe,KAEA,IAAA8D,QAEAD,kBAAAE,MAAA5D,aAAA,IAIAsD,SAAAC,OAAAD,SAAAC,OAAAK,MAAA5D,aAAA,KAIAsD,SAAAzE,SAAAoB,IAAA,SAAAyD,mBAIApB,OAAA,WAEAxD,EAAA,gCAAA+E,MAAA,SAAA1D,GAEAA,EAAA2D,iBAEAhF,EAAAe,MAAAuD,SAEAE,SAAAzE,SAAAoB,IAAA,SAAAqD,SAAAC,YAQAQ,MAEAlF,SAAAC,EAAA,SAEAC,KAAA,WAEAgF,KAAAC,UAEAD,KAAAE,QAEAF,KAAAG,MAEAH,KAAA9E,SAEAkF,WAAA,WAEAJ,KAAAK,SACAC,aAAA,sBACAC,WAAA,UACAC,aACAZ,MAAA,eACAa,KAAA,cACAC,MAAA,SAAAC,MAEA,GAAAd,OAAA9E,EAAA4F,MACAD,MAAAb,MAAAe,KAAA,SAAAC,SAAAhB,MAAAe,KAAA,SAAA,KAAA,CAEA,OAAAF,QAGAI,SAAA,SAAAH,MAEA,GAAAd,OAAA9E,EAAA4F,MACAG,SAAAjB,MAAAe,KAAA,YAAAC,SAAAhB,MAAAe,KAAA,YAAA,KAAA,CAEA,OAAAE,YAIAC,OAAA,QACAC,eAAA,IAGAhB,KAAAiB,UAEA,MAIAhB,QAAA,WAEA,GAAAiB,MAEAA,OAAAlB,KAAAlF,SAAAa,KAAA,iCACAuF,MAAAC,SAEAD,MAAAlB,KAAAlF,SAAAa,KAAA,SACAuF,MAAApE,YAAA,6DAAAC,SAAA,uBAIAmD,MAAA,SAAA/C,YAEA,GAAAiE,aAAA,iBACAC,OAAAlE,WAAAA,WAAA6C,KAAAlF,QAEAuG,QAAA1F,KAAA,uBAAAuE,MAAA,WAEA,GAAAL,OAAA9E,EAAAe,KAEA+D,OAAA9C,SAAAqE,cAEA,WAEA,GAAAvB,OAAA9E,EAAAe,KAEA+D,OAAA/C,YAAAsE,gBA0BAjB,IAAA,WAEAH,KAAAlF,SAAAqB,GAAA,QAAA,UAAA,SAAAC,GAEA4D,KAAAlF,SAAAkC,MAEAZ,EAAA2D,gBAEA,IAAAuB,OAAAvG,EAAAe,MAAAyF,QAAA,OAEAD,OAAAE,YAMAtG,OAAA,WAEA,GAAAuG,QAAAzB,KAAAlF,SAAAa,KAAA,+BACA+F,cAAA,CAEAD,QAAA7F,KAAA,SAAAgE,OAEA,GAAAC,OAAA9E,EAAAe,MACA0D,OAAAK,MAAA5D,aAEAyF,eAAAlC,OAAAkC,cAAAlC,OAAAkC,gBAIAD,OAAAvF,IAAA,SAAAwF,cAAA,OAIArB,QAAA,SAAAsB,YAEA3B,KAAAlF,SAAAuF,QAAAsB,aAIAV,OAAA,WAEAjB,KAAAlF,SAAAuF,QAAA,KAAA,iBAAA,SAAAuB,YAAAC,cAEA9G,EAAA,UAAA+G,KAAAD,aAAAhD,QAEAkD,WAAAd,aAQAe,WAEAlH,SAAA,SAAAqC,YAEA,MAAAA,YAAAxB,KAAA,wBAIAsG,WACAC,SACAP,cAEAQ,QAAA,KACAvB,KAAA,KAEA5F,KAAA,WAEAD,EAAA,UAAA+G,KAAAE,UAAAlH,SAAAkF,KAAAlF,UAAA+D,QACA9D,EAAA,UAAA+G,KAAAE,UAAAlH,SAAAkF,KAAAlF,UAAA+D,QAEAmD,UAAAI,KAAApC,KAAAlF,WAIA8D,MAAA,SAAAzB,YAEA,MAAA6E,WAAAlH,SAAAqC,YAAA0B,QAIAuD,KAAA,SAAAjF,YAEA6E,UAAAlH,SAAAqC,WAEA6E,WAAAlH,SAAAqC,YAAAvB,KAAA,SAAAgE,OAEA,GAAAC,OAAA9E,EAAAe,MACAuG,MAAAxC,MAAAlE,KAAA,QAEAqG,WAAAG,QAAAtC,KAEA,IAAAyC,iBAAAD,MAAArD,SAAA,oBAAA8C,OACAS,SAAAF,MAAArD,SAAA,aAAA8C,OACAU,SAAAH,MAAArD,SAAA,aAAA3D,OACAoH,WAAAJ,MAAArD,SAAA,eAAA8C,OACAY,YAAAL,MAAArD,SAAA,gBAAA8C,OACAa,UAAA9C,MAAAlE,KAAA,UAEAqG,WAAApB,MACAH,KAAAkC,UAAAb,OACAc,IAAAL,SACAM,QAAA,IAAAP,gBAAAQ,KAAAC,MAAAT,kBAAA,EACAU,MAAAR,UAAA,GAAA,EACAS,MAAAR,WAAAS,QAAA,OAAA,IAAA,GAAA,EACAC,OAAA,IAAAT,YAAAA,YAAAU,YAAA,EACAC,KAAAV,UAAAA,UAAAW,KAAA,SAAA,EACAC,MAAA,WAAAhB,SAAA,YAGAF,MAAAhD,SAEA2C,UAAAwB,SAAA5D,OAEAoC,UAAAyB,UAEAzB,UAAA0B,SAEA1B,UAAA2B,YAEA3B,UAAA4B,UAEA5B,UAAA6B,WAEA7B,UAAA8B,WAEA9B,UAAA+B,gBAEA/B,UAAAgC,SAEAhC,UAAAiC,cAMAT,SAAA,SAAA5D,OAEAoC,UAAAG,QAAAmB,KAAA,aAAA1D,QAIA6D,QAAA,WAEAzB,UAAAG,QAAAmB,KAAA,YAAAtB,UAAApB,KAAAH,OAIAiD,OAAA,WAEA1B,UAAAG,QAAAmB,KAAA,WAAAtB,UAAApB,KAAAgC,MAIAe,UAAA,WAEA3B,UAAApB,KAAAuC,QAEAnB,UAAAC,QAAAiC,KAAAlC,UAAApB,KAAAuC,SAMAS,QAAA,WAEA,GAAAO,SAAAnC,UAAAG,QAAAxG,KAAA,WAEAwI,SAAAb,KAAA,OAAAtB,UAAApB,KAAAyC,OAIAS,SAAA,WAEA,GAAAM,MAAApC,UAAAG,QAAAxG,KAAA,OAEAyI,MAAAd,KAAA,YAAAtB,UAAApB,KAAA2C,QAIAM,SAAA,WAEA,GAAAQ,UAAArC,UAAAG,QAAAxG,KAAA,WACAN,KAAA,EAIAA,OAFA2G,UAAApB,KAAAqC,MAEA,8GAIA,2GAIA5H,KAAAN,EAAAM,MAEAgJ,SAAA3I,OAAAL,OAIA0I,cAAA,WAEA/B,UAAApB,KAAAiC,UAEAb,UAAApB,KAAAuC,SAEAnB,UAAApB,KAAAiC,QAAAlB,WAAAwB,OAAAnB,UAAApB,KAAAuC,QAIAmB,EAAAC,MAAAvC,UAAApB,KAAAiC,QAAAlB,WAAA,SAAA6C,MAAAC,IAAAC,KAEA,GAAAJ,EAAAK,SAAAC,eAAAH,KAAA,CAEA,GAAAI,GAAAL,KAEAF,GAAAQ,QAAAD,KAEAA,EAAA/B,KAAAiC,UAAAF,IAIA7C,UAAAG,QAAAmB,KAAA,QAAAmB,IAAAI,GAEA7C,UAAAL,WAAAuC,MAEAc,GAAAP,IACAD,MAAAA,WAQAxC,UAAAE,MAAAgC,KAAAlC,UAAApB,KAAAiC,QAAAoC,QAMAjB,OAAA,WAEA,GAAAhC,UAAApB,KAAAoB,OAAA,CAEA,GAAAkD,OAAA,2CAEAlD,WAAAG,QAAAxG,KAAA,UAAAD,OAAAwJ,SAMAjB,SAAA,WAEA,GAAAkB,QAAAnD,UAAAG,QAAAxG,KAAA,4BACAyJ,cAAAD,OAAAnG,SAAA,iBACAqG,WAAAF,OAAAnG,SAAA,cACAsG,eAAAH,OAAAnG,SAAA,kBACAuG,gBAAAJ,OAAAnG,SAAA,mBACAwG,aAAAJ,cAAAtD,OAAA2D,OACAC,UAAAL,WAAAvD,OAAA2D,OACAE,cAAAL,eAAAxD,OAAA2D,OAAAH,eAAAxD,OAAA2D,QAAA,CAEAE,iBAEAP,cAAAtD,KAAA4D,WAEAF,aAAAE,UAEAL,WAAAvD,KAAA6D,eAEAD,UAAAC,cAEAL,eAAAjG,SAIA,IAAAmG,cAAAA,aAAAxH,QAAA,QAAA,IACAwH,aAAAA,aAAAxH,QAAA,QAAA,IACA0H,UAAAA,UAAA1H,QAAA,QAAA,IACA0H,UAAAA,UAAA1H,QAAA,QAAA,IACA4H,cAAA,eAEA,IAAAJ,aAAA,CAEA,GAAAK,QAAAC,KAAAC,MAAA,KAAA,EAAAL,UAAAF,eACAN,MAAA,wCAAAW,OAAA,SAEAR,YAAAtI,SAAA6I,eACAL,gBAAAxI,SAAA6I,eAEA5D,UAAAG,QAAAxG,KAAA,UAAAD,OAAAwJ,OAEAlD,UAAAG,QAAAmB,KAAA,gBAAAuC,YAIAT,eAAA/F,QAMA,IAFA2C,UAAAG,QAAAmB,KAAA,aAAAoC,WAEA1D,UAAApB,KAAAoB,OAAA,CAEA,GAAAjD,QAAAiD,UAAAG,QAAAxG,KAAA,gBAEAoD,QAAA7C,IAAA,OAAA,QAAAA,IAAA,QAAA,WAQA8J,YAEAlL,SAAAC,EAAA,YAEAoI,OAAAmB,EAAA2B,KAAAjE,UAAAC,SAEAC,MAAAoC,EAAA2B,KAAAjE,UAAAE,OAEAP,cAEAtB,WAEArF,KAAA,WAEAgL,WAAAE,iBAEAF,WAAAG,cAEAH,WAAAI,OAEAJ,WAAA/K,UAEA+K,WAAAK,UAEAL,WAAA7K,SAEA6K,WAAAM,SAEAN,WAAAO,SAIAL,eAAA,WAEA,GAAAM,MAAAlC,EAAA2B,KAAA3B,EAAAmC,MAAAzE,UAAAL,WAAA,OACA/C,MAAAoD,UAAApD,MAAAoB,KAAAlF,UACA4L,eAIApC,GAAAqC,QAAAH,KAAA,SAAA/B,KAEA,GAAAmC,MAAAtC,EAAAuC,MAAA7E,UAAAL,YAAAqD,GAAAP,MAAA5F,OACAiI,gBAAAF,KAAAhI,MAAA,EAEAkI,kBAEAJ,aAAAxC,KAAAO,OAQAH,EAAAqC,QAAA3E,UAAAL,WAAA,SAAAlE,WAEA,GAAAuH,IAAAvH,UAAAuH,GACAR,MAAA/G,UAAA+G,MAEAC,IAAAH,EAAAyC,QAAAf,WAAArE,WAAA,SAAA+C,KAAA,MAAAA,KAAAM,IAAAA,IAEA,KAAAP,KAAAH,EAAAK,SAAA+B,aAAA1B,IAEAgB,WAAArE,WAAAuC,MACAc,GAAAA,GACAgC,MAAA,KACAC,OAAA3C,EAAAQ,QAAAN,OAAAA,OAAAA,aAGA,IAAAF,EAAAK,SAAA+B,aAAA1B,KAEAR,MAAA,CAEA,GAAAyC,QAAAjB,WAAArE,WAAA8C,KAAAwC,MAEA3C,GAAAQ,QAAAN,OAEAF,EAAAqC,QAAAnC,MAAA,SAAAK,GAEAP,EAAAK,SAAAsC,OAAApC,IAEAmB,WAAArE,WAAA8C,KAAAwC,OAAA/C,KAAAW,KAQAP,EAAAK,SAAAsC,OAAAzC,QAEAwB,WAAArE,WAAA8C,KAAAwC,OAAA/C,KAAAM,WAcA2B,YAAA,WAEA7B,EAAAqC,QAAAX,WAAArE,WAAA,SAAAuF,OAAAtH,OAEA,GAAAqH,QAAAC,OAAAD,MAEA,IAAA3C,EAAA6C,SAAAD,OAAAD,OAAA,IAEA,GACAG,SADAH,OAAAb,KAAA,SAAAiB,EAAAC,GAAA,MAAAD,GAAAC,KAEAC,IAAAjD,EAAAiD,IAAAN,QACAO,IAAAlD,EAAAkD,IAAAP,cAMA,IAiBAG,SAjBAH,OAAAb,KAAA,SAAAiB,EAAAC,GAEA,MAAAD,GAAAC,EAEA,EAIAA,EAAAD,EAEA,GAIA,KAGA,EAIArB,YAAArE,WAAA/B,OAAAoH,MAAA1E,gBAAA4E,OAAAlC,IAAAgC,MACAhB,WAAArE,WAAA/B,OAAAqH,OAAAC,OAAAD,OACAjB,WAAArE,WAAA/B,OAAAwH,OAAAA,UAMAhB,KAAA,WAEAJ,WAAAyB,WAAAnD,EAAAvD,OAAAiF,WAAArE,WAAA,UAIA1G,QAAA,WAEA,GAAAG,QAAAL,EAAA,qBAAAM,OACAC,SAAAC,WAAAN,QAAAG,QACAC,KAAAC,UAEAoM,QAAA1B,WAAAyB,YAIAzB,YAAAlL,SAAA6M,QAAAtM,OAIAgL,QAAA,WAEA,GAAAuB,UAAA5B,WAAAlL,SAAAa,KAAA,cAEAiM,UAAAhM,KAAA,WAEA,GAAAiE,OAAA9E,EAAAe,MACA+L,SAAAhI,MAAA0B,QAAA,oBACAyD,GAAAnF,MAAAe,KAAA,MACAoG,MAAAnH,MAAAe,KAAA,SACA2G,IAAA1H,MAAAe,KAAA,OACA4G,IAAA3H,MAAAe,KAAA,OACAkH,UAAAN,IAAAD,KAAA,EAEA1H,OAAAkI,YACAC,OAAAT,IAAAC,KACAS,SAAA,EACAC,KAAAJ,SACAK,OACAZ,IAAAA,IACAC,IAAAA,OAIA3H,MAAA1D,IAEAiM,OAAA,SAAA1D,IAAAuC,QAEA,GAAAxC,KAAAH,EAAAyC,QAAAf,WAAA3F,SAAA2E,GAAAA,KACAqD,YAAAxH,SAAAoG,OAAA,IACAqB,YAAAzH,SAAAoG,OAAA,GAEAxC,KAWAuB,WAAA3F,QAAAoE,KAAAwC,QAAAoB,YAAAC,aATAtC,WAAA3F,QAAA6D,MACAc,GAAAA,GACAgC,MAAAA,MACAI,QAAA,EACAH,QAAAoB,YAAAC,eASAtI,KAAAK,SAEA6G,OAAA,WAEA,MAAAlB,YAAAkB,OAAApL,UAOAyM,MAAA,SAAA7D,IAAAuC,QAEA,GAAAoB,aAAApB,OAAA,GACAqB,YAAArB,OAAA,EAEAlM,GAAA,IAAAiK,GAAA,QAAAlD,KAAAuG,aACAtN,EAAA,IAAAiK,GAAA,QAAAlD,KAAAwG,aAEAD,aAAAd,KAAAe,aAAAd,IAEAK,SAAAtG,QAAA,oBAAAzE,YAAA,UAIA+K,SAAAtG,QAAA,oBAAAxE,SAAA,gBAYAmK,OAAA,SAAAvG,MAEA,GAGA6H,GAHAC,MAAA1N,EAAA4F,MACA+H,gBACAC,WAAA,CAGA,IAAArE,EAAAsE,QAAA5C,WAAA3F,SA0EAsI,WAAA,MA1EA,CAEA,IAAAH,EAAA,EAAAA,EAAAxC,WAAA3F,QAAAxB,OAAA2J,IAAA,CAEA,GAAAtB,QAAAlB,WAAA3F,QAAAmI,GAAAxD,GACAiC,OAAAjB,WAAA3F,QAAAmI,GAAAvB,OACAG,OAAApB,WAAA3F,QAAAmI,GAAApB,OACA5C,MAAAiE,MAAA7H,KAAAsG,OAEA,IAAA1C,OAAA4C,QAAA9C,EAAAQ,QAAAmC,QAAA,CAEA,GAGA4B,GAHAtB,IAAAN,OAAA,GACAO,IAAAP,OAAA,GACA6B,WAAA,CAGA,KAAAD,EAAA,EAAAA,EAAArE,MAAA3F,OAAAgK,IAEArE,MAAAqE,IAAAtB,KAAA/C,MAAAqE,IAAArB,MAEAsB,WAAA,EAMAA,WAEAJ,aAAAxE,KAAA,GAIAwE,aAAAxE,KAAA,OAIA,IAAAM,OAAAF,EAAAQ,QAAAN,OAAA,CAEA,GAAAuE,WAAAzE,EAAAoC,aAAAO,OAAAzC,MAEAF,GAAAsE,QAAAG,WAMAL,aAAAxE,KAAA,GAJAwE,aAAAxE,KAAA,OAQAM,QAAAF,EAAAK,SAAAsC,OAAAzC,OAEAkE,aAAAxE,KAAA,GAIAwE,aAAAxE,KAAA,GAQAyE,UAFArE,EAAAK,SAAA+D,aAAA,IAEA,GAIA,EAUA,MAAAC,YAIA1J,KAAA,SAAA+J,gBAAAC,oBAAAC,cAEA,GAAAC,eAAAnD,WAAAlL,SAAAa,KAAA,kBAEAyN,IAAAJ,gBAAA/M,cACAoN,MAAAL,gBAAAM,aAAA,CAEAJ,cACAhN,IAAA,MAAAkN,KACAlN,IAAA,QAAAmN,OAEA3K,QAAAO,MAAA,GAEA+J,gBAAAjM,SAAA,QAEAiM,gBAAA7M,GAAA,aAAA,WAEA6M,gBAAAlM,YAAA,QACAmM,oBAAAjM,MACAkM,aAAAlM,QAIAmM,cAAApM,SAAA,SAIAwM,KAAA,WAEA7K,QAAA6K,MAAA,GAEAvD,WAAAlL,SAAAa,KAAA,oBAAAmB,YAAA,QACAkJ,WAAAlL,SAAAa,KAAA,kBAAAmB,YAAA,SAIA3B,OAAA,WAIA6K,WAAAlL,SAAAqB,GAAA,aAAA,mBAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAiJ,iBAAAjO,EAAAe,MACAmN,oBAAAD,gBAAAhK,SAAA,wBACAkK,aAAAF,gBAAAhK,SAAA,gBAEAgH,YAAA/G,KAAA+J,gBAAAC,oBAAAC,gBAIAlD,WAAAlL,SAAAqB,GAAA,aAAA,SAAAC,GAEAA,EAAA2D,iBAEAiG,WAAAuD,SAIAvD,WAAAlL,SAAAqB,GAAA,QAAA,uBAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAkJ,qBAAAlO,EAAAe,MACAkN,gBAAAC,oBAAA1M,SACA2M,aAAAF,gBAAAhK,SAAA,gBAEAgK,iBAAAnM,SAAA,QAMAmJ,WAAAuD,OAJAvD,WAAA/G,KAAA+J,gBAAAC,oBAAAC,gBAUAxK,QAAA5D,UAAA,GAAAqB,GAAA,QAAA,SAAAC,GAEAA,EAAAoN,kBACApN,EAAA2D,iBAEAiG,WAAAuD,UAMAjD,OAAA,WAEAN,WAAAlL,SAAAqB,GAAA,QAAA,gBAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAF,OAAA9E,EAAAe,MACA+L,SAAAhI,MAAA0B,QAAA,oBACAkI,UAAA5J,MAAAe,KAAA,MACA8I,aAAA7J,MAAAe,KAAA,SACA+I,aAAA9J,MAAAhD,SAAA,YACA4H,IAAAH,EAAAyC,QAAAf,WAAA3F,SAAA2E,GAAAyE,WAIAE,eAyBA9J,MAAA/C,YAAA,YAIAwH,EAAAjF,OAAA2G,WAAA3F,QAAAoE,KAAAwC,OAAA,SAAAzC,OAEA,MAAAA,QAAAkF,iBA7BA7J,MAAA9C,SAAA,YAEA0H,IAIAuB,WAAA3F,QAAAoE,KAAAwC,OAAA/C,KAAAwF,eAMA1D,WAAA3F,QAAA6D,MACAc,GAAAyE,UACAxC,QAAAyC,gBAGAjF,IAAAH,EAAAyC,QAAAf,WAAA3F,SAAA2E,GAAAyE,cAoBAnF,EAAAsE,QAAA5C,WAAA3F,QAAAoE,KAAAwC,SAEAjB,WAAA3F,QAAAuJ,OAAAnF,IAAA,GAEAoD,SAAA/K,YAAA,YAIA/B,EAAA,IAAA0O,UAAA,UAAA3H,KAAAkE,WAAA3F,QAAAoE,KAAAwC,OAAApI,QAEAgJ,SAAA9K,SAAA,WAIAiD,KAAAK,SAEA6G,OAAA,WAEA,MAAAlB,YAAAkB,OAAApL,YAUAyK,MAAA,WAEA,GAAAsD,QAAA7D,WAAAlL,SAAAa,KAAA,kBACA6D,OAAAwG,WAAAlL,SAAAmB,cAAA,IAEA4N,QAAA3N,IAAA,cAAAsD,QAAAtD,IAAA,SAAAsD,QAEAqK,OAAA1N,GAAA,QAAA,SAAAC,GAEAA,EAAA2D,iBAEAiG,WAAA3F,WAEA2F,WAAAlL,SAAAa,KAAA,oBAAAmB,YAAA,UACAkJ,WAAAlL,SAAAa,KAAA,iBAAAmB,YAAA,YAEAkJ,WAAAlL,SAAAa,KAAA,eAAAC,KAAA,WAEA,GAAAiE,OAAA9E,EAAAe,MACAyL,IAAA1H,MAAAe,KAAA,OACA4G,IAAA3H,MAAAe,KAAA,MAEAf,OAAAvC,KAAAiK,IAAAC,QAIAsC,YAAAhP,SAAAa,KAAA,4BAAAmB,YAAA,UAEAgN,YAAAhP,SAAAa,KAAA,0DAAAoB,SAAA,UAEAiD,KAAAK,SAEA6G,OAAA,WAEA,MAAAlB,YAAAkB,OAAApL,OAGAiF,OAAA,OACAC,eAAA,IAIAtC,QAAA6K,MAAA,OAQAO,aAEAhP,SAAAC,EAAA,YAEAC,KAAA,WAEA8O,YAAArM,YAEAqM,YAAAC,SAIAtM,UAAA,WAEAqM,YAAAhP,SAAAqB,GAAA,QAAA,gBAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAF,OAAA9E,EAAAe,MACA2B,UAAAoC,MAAAe,KAAA,SAEAZ,MAAAK,SAEAU,OAAAtD,YAIAqM,YAAAhP,SAAAa,KAAA,iBAAAmB,YAAA,UAEA+C,MAAA9C,SAAA,UAEAgF,WAAAd,YAMA8I,MAAA,WAEAD,YAAAhP,SAAAqB,GAAA,QAAA,YAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAF,OAAA9E,EAAAe,MACA2B,UAAAoC,MAAAe,KAAA,aACAoJ,UAAA,OAAAvM,WAAA,GAAA,CAEAuC,MAAAK,SAEAW,cAAAgJ,YAIAF,YAAAhP,SAAAa,KAAA,aAAAmB,YAAA,UAEA+C,MAAA9C,SAAA,UAEAgF,WAAAd,aAQAc,YAEA/G,KAAA,WAEAiP,KAAAjP,MACAkP,OAAA,IACAC,SAAA,IACAC,SAAA,SAAAjI,QAAAkI,IAEA,GAAAxK,OAAA9E,EAAAoH,QAEAtC,OAAAyK,KAAA,WAEAzK,MAAA3D,IAAA,UAAA,SASA+E,OAAA,WAEAgJ,KAAAhJ,WAMAsJ,aAEAzP,SAAAC,EAAA,SAEAyP,KAAA,KAEAxP,KAAA,WAIA,GAAAwP,MAAAD,YAAAzP,SAAAa,KAAA,cAAAmG,OACA0I,KAAA1H,KAAAC,MAAAyH,KAIAA,MAAA,OAAAD,YAAAzP,SAAAa,KAAA,gBAAAmG,OAIA0I,KAAA,IAAAD,YAAAzP,SAAAa,KAAA,aAAAmG,OAIA0I,KAAA,KAAAD,YAAAzP,SAAAa,KAAA,cAAAmG,MAIA,IAAAmB,OAAAsH,YAAAzP,SAAAa,KAAA,eAAAmG,OACA2I,QAAAxH,MAAAC,QAAA,OAAA,IAAA,GAAA,CAEAsH,MAAA,MAAAC,QAIAF,YAAAC,KAAAA,KAIAD,YAAAzP,SAAAuE,UAIAqL,IAAA,SAAAC,SAAAC,cAEA,MAAAL,aAAAC,KAEAI,aAEAL,YAAAC,KAAAK,eAAA,eAAAN,YAAAC,KAAA7I,WAAAkJ,eAAAF,UAAAJ,YAAAC,KAAA7I,WAAAgJ,WAAA,EAIAJ,YAAAC,KAAAK,eAAAF,UAAAJ,YAAAC,KAAAG,WAAA,GARA,IAgBAG,iBAEAhQ,SAAAC,EAAA,gBAEAC,KAAA,WAEA,GAAA+P,aAAAzM,OAAA,CAEA,GAAAjD,MAAA,yDAEAyP,iBAAAhQ,SAAAY,OAAAL,UAIAyP,iBAAAhQ,SAAAO,KAAA,qDAQA2P,YAEAlQ,SAAAC,EAAA,WAEAC,KAAA,SAAAF,UAEA,GAAAqJ,SAAA,SAAApJ,EAAAD,UAAAC,EAAA,aAIAoJ,SAAArE,MAAA,SAAA1D,GAEAA,EAAA2D,iBAEAhF,EAAAe,MAAAyF,QAAA,QAAAC,WAIAwJ,WAAA7P,UAMAA,OAAA,WAEA6P,WAAAlQ,SAAAqB,GAAA,aAAA,WAEA8O,cAAAnQ,SAAAiC,SAAA,0CAIAiO,WAAAlQ,SAAAqB,GAAA,aAAA,WAEA,GAAAmB,KAAA2N,cAAAnQ,SAAAwC,KAEA,IAAAA,IAEA2N,cAAAnQ,SAAAiC,SAAA,wCAIAkO,cAAAnQ,SAAAgC,YAAA,4CAUAiO,cAEAjQ,SAAAC,EAAA,aAEAuD,OAAA,KAEAtD,KAAA,SAAAF,UAEAiQ,aAAAzM,OAAAiM,YAAAG,IAAA,QAEA,IAAArP,KAEA0P,cAAAzM,QAEAyM,aAAAjQ,SAAAiC,SAAA,WAEA1B,KAAA,qFAIAA,KAAA,yFAIA0P,aAAAjQ,SAAAO,KAAAA,QAMA4P,eAEAnQ,SAAAC,EAAA,cAEAC,KAAA,SAAAF,UAIAmQ,cAAA9P,UAUAA,OAAA,WAEA8P,cAAAnQ,SAAAqB,GAAA,SAAA,WAEA,GAAAmB,KAAAuD,SAAAoK,cAAAnQ,SAAAwC,MAEAgH,GAAA4G,MAAA5N,MAEA2N,cAAAnQ,SAAAwC,IAAA,GAEAvC,EAAA,WAAAuC,IAAA,KAIA2N,cAAAnQ,SAAAwC,IAAAA,KAEAvC,EAAA,WAAAuC,IAAAA,UAUA6N,kBAEArQ,SAAAC,EAAA,iBAEAoH,SAEAiJ,MAAA,KACAC,QAAA,KACAC,IAAA,MAIAtQ,KAAA,SAAAF,UAEA,GAAAiQ,aAAAzM,OAAA,CAEA,GAAAiN,KAAAC,SACAC,IAAAF,IAAAE,MACAC,KAAAH,IAAAG,OAEAC,QAAA,IAAAF,KAAA,IAAAA,KAAA,GAAA,EACAG,WAAA,EAAAF,MAAAA,KAAA,IAAA,GAAA,CAEAC,UAAAC,aAEAT,iBAAArQ,SAAAmE,OAEAkM,iBAAAnD,WAQAA,MAAA,WAEA,GAAAuD,KAAAC,SACAK,MAAAL,SAAAJ,MAAA,IAAAC,QAAA,GAAAS,QAAA,GAAAC,YAAA,EACAF,OAAAG,KAAAT,IAEAJ,kBAAAhJ,QAAAiJ,MAAAD,iBAAArQ,SAAAa,KAAA,aACAwP,iBAAAhJ,QAAAkJ,QAAAF,iBAAArQ,SAAAa,KAAA,eACAwP,iBAAAhJ,QAAAmJ,IAAAH,iBAAArQ,SAAAa,KAAA,WAEAwP,iBAAArQ,SAAAmR,UAAAJ,MAAAK,OAAA,wBAAA/P,GAAA,mBAAA,SAAAgQ,OAEAhB,iBAAAiB,OAAAD,SAEAhQ,GAAA,mBAAA,SAAAgQ,OAEAhB,iBAAAkB,KAAAF,UAMAC,OAAA,SAAAD,OAEA,GAAAf,OAAAe,MAAAG,SAAA,MAEAlB,OAAA,EAEAD,iBAAAhJ,QAAAiJ,MAAAtJ,KAAAqK,MAAAG,SAAA,oBAIAnB,iBAAAhJ,QAAAiJ,MAAA/L,SAEA8L,iBAAAhJ,QAAAmJ,IAAAjM,UAIA8L,iBAAAhJ,QAAAkJ,QAAAvJ,KAAAqK,MAAAG,SAAA,uBAIAD,KAAA,SAAAF,OAEAhB,iBAAArQ,SAAAuE,WAMAkN,aAEAzR,SAAAC,EAAA,YAEAC,KAAA,WAEA,GAAAwR,MAAAD,YAAAzR,SAAAa,KAAA,aAEA6Q,MAAArQ,GAAA,QAAA,IAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAF,OAAA9E,EAAAe,MACAkJ,GAAAnF,MAAAe,KAAA,MAEA2L,aAAAzR,SAAAa,KAAA,gBAAAmB,YAAA,UAEA+C,MAAA9C,SAAA,UAEAwP,YAAAtN,KAAA+F,OAMA/F,KAAA,SAAAwN,KAEA,GAAAzH,IAAA,IAAAyH,GAEAF,aAAAzR,SAAAa,KAAA,kBAAA4N,OAEAgD,YAAAzR,SAAAa,KAAAqJ,IAAA0H,OAAA,UAMAC,cAEA3R,KAAA,WAEA,GAAAyF,MAAA8J,YAAAG,IAAA,SAEAjK,QAEAA,KAAAA,KAAA2C,WAAAwJ,cAEAD,aAAAxN,MAAAsB,MAAAoM,KAAA,SAAAtJ,OAEAA,OAEAxI,EAAA,eAAA4M,QAAAgF,aAAAtR,KAAAkI,MAAA9C,WAUAtB,MAAA,SAAAsB,MAEA,GAAAqM,KAAA/R,EAAAgS,WAEAC,KAAA,kBAAAvM,KAAA,MAmBA,OAjBA1F,GAAAkS,MAEA5P,IAAA2P,KACA/H,KAAA,OACAiI,MAAA,WAEAJ,IAAAK,SAAA,IAGAC,QAAA,WAEAN,IAAAK,QAAAH,SAMAF,IAAAO,WAIAhS,KAAA,SAAAkI,MAAA9C,MAEA,MAAA,0EAAA8C,MAAA,UAAA9C,KAAA,eAMA6M,gBAEAxS,SAAAC,EAAA,eACA0M,cAEAzM,KAAA,WAEAsS,eAAAC,OAEAD,eAAArS,WAIAsS,KAAA,WAEAjJ,EAAAqC,QAAA6G,YAAAjD,YAAAG,IAAA,SAAA,SAAA+C,MAAAhJ,KAEA,GAAAiJ,SACA1G,MAAAyG,MAAAzG,MACArF,cAGA2C,GAAAqC,QAAA8G,MAAA9L,WAAA,SAAAgM,MAAAlJ,KAEA,GAAAmJ,QAAArD,YAAAG,IAAA,cACAmD,YAAAD,OAAAD,MAEA,IAAA,WAAAA,OAAA,QAAAA,MAAA,CAEA,GAAAG,GAAA,WAAAH,MAAA,YAAA,aACA9I,EAAA0F,YAAAG,IAAAiD,MAEA9I,IAEA6I,OAAA/L,WAAAuC,MAEA8C,MAAA8G,EACAC,YAAA,GACA9G,OAAApC,QAMA,iBAAA8I,OAAAE,aAEAH,OAAA/L,WAAAuC,MAEA8C,MAAA1E,gBAAAqL,OAAA3G,MACA+G,YAAAzL,gBAAAqL,OAAAI,YACA9G,OAAA4G,gBAQAH,OAAA/L,WAAA9C,QAEAyO,eAAA7F,WAAAvD,KAAAwJ,WAQAzS,QAAA,WAEA,GAAAG,QAAAL,EAAA,qBAAAM,OACAC,SAAAC,WAAAN,QAAAG,QACAC,KAAAC,UAAAuH,QAAAyK,eAAA7F,YAEA6F,gBAAAxS,SAAAY,OAAAL,QAMA2S,cAEAlT,SAAAC,EAAA,aAEAC,KAAA,WAEA,GAAAmK,QAAA6I,aAAAlT,SAAAa,KAAA,4BACAyJ,cAAAD,OAAAnG,SAAA,iBACAqG,WAAAF,OAAAnG,SAAA,cACAuG,gBAAAJ,OAAAnG,SAAA,mBACAwG,aAAAJ,cAAAtD,OAAA2D,OACAC,UAAAL,WAAAvD,OAAA2D,OACAD,aAAAA,aAAAxH,QAAA,QAAA,IACAwH,aAAAA,aAAAxH,QAAA,QAAA,IACA0H,UAAAA,UAAA1H,QAAA,QAAA,IACA0H,UAAAA,UAAA1H,QAAA,QAAA,IACA4H,cAAA,eAEA,IAAAJ,aAAA,CAEA,GAAAK,QAAAC,KAAAC,MAAA,KAAA,EAAAL,UAAAF,eACAN,MAAA8I,aAAA9I,MAAAW,OAEAT,eAAAtD,KAAAsD,cAAAtD,OAAA2D,QAEAJ,WAAAtI,SAAA6I,eACAL,gBAAAxI,SAAA6I,eAEAoI,aAAAlT,SAAAmT,OAAA/I,WAIAE,eAAA/F,QAIAgG,YAAAvD,KAAAuD,WAAAvD,OAAA2D,SAIAP,MAAA,SAAAW,QAEA,MAAA,wFAAAA,OAAA,yBAMAqI,gBAEApT,SAAA,SAAAqT,WAEA,MAAAA,WAAApT,EAAAoT,WAAApT,EAAA,gBAIAC,KAAA,SAAAmT,WAEAD,eAAAjO,QAAAkO,YAIAlO,QAAA,SAAAkO,WAEA,GAAAjN,MAMAA,OAFA,gBAAAiN,UAEAD,eAAApT,SAAAqT,WAAAxS,KAAA,6BAEA,mBAAAwS,UAEAD,eAAApT,SAAAqT,WAAAxS,KAAA,4CAQAuF,MAAArC,SAEAqC,MAAAC,SAIAD,MAAAgN,eAAApT,SAAAqT,WAAAxS,KAAA,mBACAuF,MAAAnE,SAAA,sBAIAiF,UAAAI,KAAA8L,eAAApT,SAAAqT,YAEApM,WAAA/G,OAEAgF,KAAAE,MAAAgO,eAAApT,SAAAqT,YAEAD,eAAA/N,IAAAgO,WAEAD,eAAA9G,OAAA+G,WAEAD,eAAApT,SAAAqT,WAAApR,SAAA,4BAMAqR,YAAA,SAAAD,WAEA,GAAAjN,OAAAgN,eAAApT,SAAAqT,WAAAxS,KAAA,mCACA6D,OAAA,CAEA0B,OAAAtF,KAAA,SAAAgE,OAEA,GAAAyO,aAAAtT,EAAAe,MAAAG,aAAA,EAEAuD,QAAA6O,YAAA7O,OAAA6O,YAAA7O,SAIA0B,MAAAhF,IAAA,SAAAsD,OAAA,OAIA4H,OAAA,SAAA+G,WAEA,GAAAG,SAAAJ,eAAApT,SAAAqT,WAAAxS,KAAA,UAEA2S,SAAAC,YAEAzT,SAAA,kCACA0T,UAAA,QACAC,WAAA,EACAC,UAAA,EACAC,YAAA,EACAC,cAAA,EACAC,eAAA,EACAC,kBAAAZ,eAAApT,SAAAqT,WAAAxS,KAAA,oBACAoT,UAAA,IACAC,WAAA,EACAC,SAAA,EACAC,SAAA,4CACAC,SAAA,6CACAnH,MAAA,SAAAZ,QAIA,GAFA8G,eAAAE,YAAAD,WAEA/G,OAAAxI,MAAA,EAAA,CAEA,GAAAwQ,WAAAlB,eAAApT,SAAAqT,WAAAxS,KAAA,mBAEAyT,WAAA/P,cAUAc,IAAA,SAAAgO,WAEAD,eAAApT,SAAAqT,WAAAhS,GAAA,QAAA,UAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAF,OAAA9E,EAAAe,MACAuT,SAAAxP,MAAA0B,QAAA,uBACAqB,IAAAyM,SAAAzO,KAAA,MAEA0O,yBAAA1M,IAAA,IAAA,SAQA2M,eAEAzU,SAAAC,EAAA,0BAEAyU,UAAA,KAEAxC,KAAA,WAEAhS,KAAA,WAEA,GAAAyU,YAAAC,uBAAAA,uBAAAnF,YAAAG,IAAA,OACAsC,KAAA2C,kBAAA3C,KAAAyC,WAAA,aAEA1U,GAAAkS,MACA5P,IAAA2P,KACA/H,KAAA,OACAiI,MAAA,WAEAnS,EAAA,QAAAgC,SAAA,mBAGAqQ,QAAA,WAEAmC,cAAAC,WAAA,EAEAD,cAAAjF,KAAA0C,UAOA1C,KAAA,SAAA0C,MAIA,GAAA5I,MAAArJ,EAAA,iCAAAuI,KAAA,MAAA0J,KAEA5I,MAAAkG,KAAA,WAEAiF,cAAAzU,SAAAoB,IAAA,mBAAA,OAAA8Q,KAAA,KAEAjS,EAAA,QAAAgC,SAAA,iBAIAmQ,MAAA,gBAUA0C,cAEA9U,SAAAC,EAAA,aAEAiS,KAAA,WAEAS,SAEAzS,KAAA,WAEA4U,aAAAtF,KAAA,GAEAsF,aAAA9U,SAAAqB,GAAA,QAAA,IAAA,SAAAC,GAEAA,EAAA2D,gBAEA,IAAAiF,IAAAjK,EAAAe,MAAAkD,SAAA,OAAA4B,KAAA,KAEAgP,cAAAC,MAAA7K,OAMAsF,KAAA,SAAAwF,UAEA,GAAAL,YAAAC,uBAAAA,uBAAAnF,YAAAG,IAAA,OACAsC,KAAA4C,aAAA5C,KAAAyC,WAAA,IAAAK,SAAA,OACA1L,KAAArJ,EAAA,uCAAA+U,SAAA,QAAAxM,KAAA,MAAA0J,KAEA5I,MAAAkG,KAAA,WAEAsF,aAAA9U,SAAAa,KAAA,OAAAoU,YAAA3L,MAEAA,KAAAsI,OAAA,UAEAQ,MAAA,WAEA,GAAA8C,aAAA,mFAEAJ,cAAA9U,SAAAO,KAAA2U,gBAMAH,MAAA,SAAA7K,IAEA,GAAAA,IAAA,GAAAA,GAAA,CAEAjK,GAAAkV,SAAAC,KAAAN,aAAAnC,OAEA7N,MAAAoF,GAAA,EACAmL,QAAA,GACAC,OAAA,GACAC,SACAC,SACAC,YAAA,EACAC,SAAA,IACAC,WAAA,EACAC,QAAA,IAGAC,WAAA,WAEA5V,EAAAkV,SAAAW,eAGAC,UAAA,WAEA9V,EAAAkV,SAAAa,mBAUAnB,mBAEA7C,IAAA/R,EAAAgS,WAEAjS,SAAAC,EAAA,kBAEAiS,KAAA,WAEApO,MAAA,EAEAiN,MAAA,IAEAkF,OAAA,EAEA1V,KAAA,GAEAL,KAAA,WAEA2U,kBAAAxQ,QAEAwQ,kBAAA7C,IAAAO,UAAAR,KAAA,WAEA8C,kBAAAqB,YAMA7R,MAAA,WAEA,GAAAwQ,kBAAA/Q,MAAA+Q,kBAAA9D,MAAA,CAEA,GAAAoF,UAAA,SAAAC,SAEA,GAAAzB,YAAAC,uBAAAA,uBAAAnF,YAAAG,IAAA,OACAsC,KAAA2C,kBAAA3C,KAAAyC,WAAA,IAAAE,kBAAA/Q,MAAA,IAAAsS,QAAA,MAEA,OAAAlE,MAIAjS,GAAAkS,MAEA5P,IAAA4T,SAAA,KACAhM,KAAA,OACAiI,MAAA,WAEAyC,kBAAA9D,MAAA8D,kBAAA/Q,MAEA+Q,kBAAAoB,OAAApB,kBAAA/Q,MAAA,EAEA+Q,kBAAA7C,IAAAK,WAGAC,QAAA,WAEA,GAAA+D,OAAA,GAAAxB,kBAAA/Q,MAAA,UAAA,EAEA+Q,mBAAAtU,MAAA,6BAAA8V,MAAA,uBAAAxB,kBAAA/Q,MAAA,4BAAAqS,SAAA,KAAA,gBAEArB,aAAAnC,MAAAvJ,MAEAkN,MAAA7G,YAAAG,IAAA,QAAA,IAAAiF,kBAAA/Q,MACAyS,KAAAJ,SAAA,OAIAtB,kBAAA/Q,QAEA+Q,kBAAAxQ,aAUA6R,OAAA,WAIA,GAAAM,WAAA/G,YAAAG,IAAA,gBAAA,EAEA4G,aAEA3B,kBAAAtU,KAAA,gBAAAiW,UAAA,2FAAA3B,kBAAAtU,KAEAsU,kBAAAoB,UAMApB,kBAAAoB,OAAA,GAEApB,kBAAAtU,KAAA,2CAAAsU,kBAAAtU,KAAA,QAEAsU,kBAAA7U,SAAA6M,QAAAgI,kBAAAtU,MAEAsU,kBAAA7U,SAAAyW,eAAA1E,KAAA,WAEA8C,kBAAAvI,SAEAuI,kBAAAxU,YAMAwU,kBAAA7U,SAAAuE,UAMA+H,OAAA,WAEAuI,kBAAA7U,SAAAyT,YAEAiD,UAAA,eACA1W,SAAA,oCACA0T,UAAA,QACAC,WAAA,EACAC,UAAA,EACAC,YAAA,EACAC,cAAA,EACAC,eAAA,EACAE,UAAA,GACAC,WAAA,EACAC,SAAA,EACAC,SAAA,GACAC,SAAA,GACAnH,MAAA,SAAAZ,QAEAA,OAAAxI,MAAA,IAAA2Q,cAAAC,WAEApI,OAAArK,SAAA,uBAIA4S,kBAAA7U,SAAAa,KAAA,+BAAA8V,QAAA,cAQAtW,OAAA,WAEA,GAAAuW,SAAA/B,kBAAA7U,SAAAa,KAAA,iBACAgW,QAAAhC,kBAAA7U,SAAAa,KAAA,sBAEA+V,SAAA7S,QAEA6S,QAAAvV,GAAA,QAAA,SAAAC,GAEAA,EAAA2D,iBAEAwP,cAAAC,UAEAI,aAAAC,MAAA9U,EAAAqB,EAAAwV,eAAAhR,KAAA,QAIAgP,aAAAtF,KAAAvP,EAAAqB,EAAAwV,eAAAhR,KAAA,OAEA+O,kBAAA7U,SAAAa,KAAA,iBAAAmB,YAAA,UAEA/B,EAAAe,MAAAiB,SAAA,aAQA4U,QAAA9S,QAEA8S,QAAA1B,UACAI,SACAwB,OAAA,EACAvB,SACAC,YAAA,EACAC,SAAA,IACAC,WAAA,EACAC,QAAA,QAWAoB,UAEAhX,SAAAC,EAAA,mBAEAC,KAAA,WAEA,GAAA+W,QAAAD,SAAAhX,QAEAiX,QAAAlT,SAEAiT,SAAAE,YAEAF,SAAAG,eAEAH,SAAAI,mBAMAF,UAAA,WAEA,GAAA9Q,OAAA4Q,SAAAhX,SAAAa,KAAA,+BAEA,IAAAuF,MAAArC,OAEAiT,SAAAhX,SAAAa,KAAA,gCAAAwF,SAEA2Q,SAAAhX,SAAAa,KAAA,wBAAAwF,aAEA,CAEApG,EAAA,oBAAAsE,SACAtE,EAAA,iBAAAsE,QAEA,IAAA8S,SAAA,qCAEApX,GAAA,cAAAgV,YAAAoC,WAMAF,aAAA,WAEA,GAAAG,WAAArX,EAAA,aACAsX,MAAAD,UAAAzW,KAAA,uBAEA0W,OAAAvQ,QAEAsQ,UAAA/S,UAMA6S,eAAA,WAIA,GAAAI,WAAAR,SAAAhX,SAAAa,KAAA,+BAEA2W,WAAAvC,YAAA,uCAIA,IAAAwC,WAAAT,SAAAhX,SAAAa,KAAA,+BAEA4W,WAAAxC,YAAA,wCAIA,IAAAyC,SAAAV,SAAAhX,SAAAa,KAAA,6BAEA6W,SAAAzC,YAAA,yCAIA,IAAA0C,QAAAX,SAAAhX,SAAAa,KAAA,iBACAyI,KAAA0N,SAAAhX,SAAAa,KAAA,oBAEA8W,QAAA1V,SAAA,kCAEAqH,KAAA2L,YAAA,0CAOA2C,aAEA5X,SAAAC,EAAA,0BAAA,cAEAiE,SAAAjE,EAAA,gCAAA,cAEAC,KAAA,WAEA0X,YAAA5X,SAAA+D,SAEA6T,YAAAV,YAEAU,YAAAC,OAEAD,YAAAlT,SAEAkT,YAAAE,UAMAZ,UAAA,WAEAU,YAAA1T,SAAAjC,SAAA,gBAIA4V,KAAA,WAEA,GAAAnK,GAAA,CAEAkK,aAAA1T,SAAApD,KAAA,SAAAgE,OAEA4I,EAAA,GAAA,GAEAzN,EAAAe,MAAAiB,SAAA,QAIAyL,GAAAkK,YAAA1T,SAAAH,QAEA9D,EAAAe,MAAAuD,SAIAmJ,OAMAhJ,OAAA,WAEA,GAAAA,QAAA,CAEAkT,aAAA5X,SAAAyW,aAAA,WAEAmB,YAAA1T,SAAApD,KAAA,SAAAgE,OAEA,GAAAyO,aAAAtT,EAAAe,MAAAG,aAAA,EAEAuD,QAAA6O,YAAA7O,OAAA6O,YAAA7O,SAIAkT,YAAA1T,SAAA9C,IAAA,SAAAsD,WAMAoT,MAAA,WAEAF,YAAA1T,SAAAkB,MAAA,WAEAnF,EAAAe,MAAAiB,SAAA,uBAEA,WAEAhC,EAAAe,MAAAgB,YAAA;KAQA+V,cAEA/X,SAAAC,EAAA,uBAEAC,KAAA,WAEA,GAAA8X,YAAAD,aAAA/X,QAEAgY,YAAAjU,SAEAgU,aAAAb,YAEAa,aAAAE,QAEAF,aAAAD,QAEAC,aAAAX,mBAMAF,UAAA,WAEA,GAAAgB,mBAAAH,aAAA/X,SAAAa,KAAA,2BAMAqX,mBAAAjW,SAAA,gBAEAiW,kBAAArX,KAAA,6DAAAsX,QAAA,+CAEAD,kBAAArX,KAAA,iCAAAsX,QAAA,8CAEAJ,aAAA/X,SAAAa,KAAA,qBAAAuX,UAAA,kBAEAL,aAAA/X,SAAAa,KAAA,0CAAAsX,QAAA,4CAIA,IAAAE,YAAApY,EAAA,qEAAAwB,QAEA4W,YAAAjX,IAAA,WAAA,YAAAA,IAAA,OAAA,WAIA6W,MAAA,WAIAlY,IAAAC,SAAAO,KAAA,mBAIA4B,OAAAnC,SAAAuE,SAIApB,SAAAC,QAAAmB,QAIA,IAAA+T,QAAA,8IAEArY,GAAA,qBAAAM,KAAA+X,SAIAR,MAAA,WAEA,GAAAzV,YAAApC,EAAA,uBACAsY,SAAAtY,EAAA,yBACAuY,aAAAvY,EAAA,6BACAwY,cAAApW,WAAAqW,WAAApK,IACAqK,YAAAJ,SAAAG,WAAApK,IACAsK,kBAAAH,cAAAE,YACArD,OAAA,CAGArV,GAAA8C,QAAA8V,OAAA,WAEAC,aAAA7Y,EAAA6F,KAAA9E,KAAA,gBAEAf,EAAA6F,KAAA9E,KAAA,cAAAsE,WAAA,WAEA,GAAAgJ,KAAAvL,OAAAgW,aAAAC,SAAAC,gBAAAC,SAEA,IAAA5K,KAAAsK,kBAAA,CAEA,GAAAO,YAAAZ,SAAApX,aAAA,GAAAqX,aAAArX,aAAA,EAIAmU,QAFA,EAAA6D,YAAA7D,OAEAhH,IAAAsK,kBAIAtK,IAAAsK,kBAAAL,SAAApX,cAAAqX,aAAArX,aAAA,GAEAqX,aAAArX,aAAA,GAAAoX,SAAApX,cAIAmN,IAAAsK,sBAQAtD,QAAA,CAIAiD,UAAAnX,IAAA,aAAAkU,SAEA,SAMA8B,eAAA,WAIA,GAAAgC,WAAArB,aAAA/X,SAAAa,KAAA,qBACAwI,QAAA,yJAEA+P,WAAA7Y,KAAA8I,WAMAzF,SAEA5D,SAAA,SAAA6X,MAEA,MAAAA,MAAA5X,EAAA,iBAAAA,EAAA,aAIAkE,KAAA,SAAA0T,MAEAjU,QAAA5D,SAAA6X,MAAA5V,SAAA,kBAIAwM,KAAA,SAAAoJ,MAEAjU,QAAA5D,SAAA6X,MAAA7V,YAAA,kBAIAyB,OAAA,SAAAoU,MAEAjU,QAAA5D,SAAA6X,MAAAlU,YAAA","file":"shop.js","sourcesContent":["\"use strict\";\n\nvar Nav = {\n\n selector: $('#nav'),\n\n init: function() {\n\n Nav.compile();\n\n Nav.layout();\n\n Nav.listen();\n\n },\n\n compile: function() {\n\n var source = $('#template-nav').html(),\n template = Handlebars.compile(source),\n html = template({ nav: data_nav });\n\n Nav.selector.append(html);\n\n },\n\n layout: function() {\n\n Nav.selector.find('.cols').each(function() {\n\n var $cols = $('.cols__col', this),\n cols_height = 0;\n\n $cols.each(function() {\n\n var col_height = $(this).outerHeight();\n\n col_height > cols_height ? cols_height = col_height : cols_height = cols_height;\n\n });\n\n $cols.css('height', cols_height);\n\n });\n\n },\n\n listen: function() {\n\n Nav.selector.on('mouseenter', '.nav__section', function(e) {\n\n var $section = $(this),\n $parent = $section.parent(),\n $cat = $section.siblings('.nav__cats'),\n $sections = Nav.selector.find('.nav__section'),\n $cats = Nav.selector.find('.nav__cats'),\n nav_class_active = 'nav__cats--show';\n\n if (!$section.hasClass(nav_class_active)) {\n\n $sections.removeClass(nav_class_active);\n $cats.removeClass(nav_class_active);\n\n $section.addClass(nav_class_active);\n $cat.addClass(nav_class_active);\n\n }\n\n $parent.on('mouseleave', function(e) {\n\n $parent.off();\n\n $section.removeClass(nav_class_active);\n $cat.removeClass(nav_class_active);\n\n });\n\n });\n\n }\n\n};\n\nvar Search = {\n\n selector: $('#minisearch'),\n\n input: $('#keyword'),\n\n init: function() {\n\n var $container = Search.selector.find('.input'),\n keyword = Search.url('keyword');\n\n if (keyword) {\n\n Search.input.val(keyword);\n\n }\n\n Search.input.focusin(function() {\n\n $container.addClass('input--active');\n\n });\n\n Search.input.focusout(function() {\n\n $container.removeClass('input--active');\n\n });\n\n },\n\n url: function(parameter) {\n\n return decodeURIComponent((new RegExp('[?|&]' + parameter + '=' + '([^&;]+?)(&|#|;|$)').exec(window.location.search)||[,\"\"])[1].replace(/\\+/g, '%20')) || null;\n\n }\n\n};\n\nvar MiniCart = {\n\n trigger: $('#minicart-trigger'),\n\n table: $('#minicart-table'),\n\n content: $('#minicart-content'),\n\n init: function() {\n\n MiniCart.hidden();\n\n MiniCart.status();\n\n },\n\n hidden: function() {\n\n MiniCart.trigger.on('mouseenter', function() {\n\n MiniCart.trigger.off();\n\n MiniCart.toggle();\n\n MiniCart.visible();\n\n });\n\n },\n\n visible: function() {\n\n MiniCart.table.on('mouseleave', function() {\n\n MiniCart.table.off();\n\n MiniCart.toggle();\n\n MiniCart.hidden();\n\n });\n\n },\n\n toggle: function() {\n\n MiniCart.trigger.toggleClass('active');\n\n MiniCart.table.toggleClass('active');\n\n Overlay.toggle(false);\n\n },\n\n status: function() {\n\n var rows = MiniCart.content.find('.Products_Basket_TBL tr'),\n count = rows.length;\n\n if (count === 0) {\n\n var empty = '

Der er ingen varer i kurven.

';\n\n MiniCart.content.html(empty);\n\n } else {\n\n var $badge = MiniCart.trigger.children('.badge');\n\n $badge.show();\n\n }\n\n }\n\n};\n\nvar ProductVariant = {\n\n selector: $('#js-variants'),\n\n init: function() {\n\n ProductVariant.check();\n\n },\n\n check: function() {\n\n var variantExists = ProductVariant.selector.find('select');\n\n if (variantExists.length) {\n\n ProductVariant.listen();\n\n } else {\n\n ProductVariant.selector.remove();\n\n }\n\n },\n\n listen: function() {\n\n var $select = ProductVariant.selector.find('select');\n\n $select.on('change', function() {\n\n //console.log('New variant chosen');\n\n });\n\n ProductVariant.selector.show();\n\n }\n\n};\n\nvar Category = {\n\n selector: $('#category-description'),\n\n height: null,\n\n init: function() {\n\n if (Category.selector.length) {\n\n Category.description();\n\n Category.toggle();\n\n }\n\n },\n\n description: function() {\n\n var $paragraphs = Category.selector.find('p'),\n height_collapsed = 0,\n height_expanded = 0;\n\n $paragraphs.each(function(index) {\n\n var $this = $(this);\n\n if (index == 0) {\n\n height_collapsed = height_collapsed + $this.outerHeight(true);\n\n }\n\n Category.height = Category.height + $this.outerHeight(true);\n\n });\n\n Category.selector.css('height', height_collapsed);\n\n },\n\n toggle: function() {\n\n $('#category-description-expand').click(function(e) {\n\n e.preventDefault();\n\n $(this).remove();\n\n Category.selector.css('height', Category.height);\n\n });\n\n }\n\n};\n\nvar Grid = {\n\n selector: $('#grid'),\n\n init: function() {\n\n Grid.prepare();\n\n Grid.hover();\n\n Grid.buy();\n\n Grid.layout();\n\n setTimeout(function(){\n\n Grid.isotope({\n itemSelector: '.product__container',\n layoutMode: 'fitRows',\n getSortData: {\n index: '[data-index]',\n name: '[data-name]',\n price: function(item) {\n\n var $this = $(item),\n price = $this.data('price') ? parseInt($this.data('price'), 10) : false;\n\n return price;\n\n },\n discount: function(item) {\n\n var $this = $(item),\n discount = $this.data('discount') ? parseInt($this.data('discount'), 10) : false;\n\n return discount;\n\n }\n },\n sortBy: 'index',\n sortAscending: true\n });\n\n Grid.render();\n\n }, 250);\n\n },\n\n prepare: function() {\n\n var $divs;\n\n $divs = Grid.selector.find('.ProductList_Custom_DIV > div');\n $divs.unwrap()\n\n $divs = Grid.selector.find('> div');\n $divs.removeClass('BackgroundColor1_Productlist BackgroundColor2_Productlist').addClass('product__container');\n\n },\n\n hover: function($container) {\n\n var hover_class = 'product--hover',\n $watch = $container ? $container : Grid.selector;\n\n $watch.find('.product__container').hover(function(){\n\n var $this = $(this);\n\n $this.addClass(hover_class);\n\n }, function(){\n\n var $this = $(this);\n\n $this.removeClass(hover_class);\n \n });\n\n // Replaced with the above due to errors/wierd behavior on mouseenter/mouseleave\n // Especially on products where third party scripts was injecting variants/sizes\n\n // $watch.on('mouseenter mouseleave', '.product__container', function() {\n\n // var $this = $(this),\n // state_hover = $this.hasClass(hover_class);\n \n // if (state_hover) {\n\n // $this.removeClass(hover_class);\n\n // } else {\n\n // $this.addClass(hover_class);\n\n // }\n\n // });\n\n },\n\n buy: function() {\n\n Grid.selector.on('click', '.js-buy', function(e) {\n\n Grid.selector.off();\n\n e.preventDefault();\n\n var $form = $(this).closest('form');\n\n $form.submit();\n\n });\n\n },\n\n layout: function() {\n\n var $items = Grid.selector.find('.product__container:visible'),\n common_height = 0;\n\n $items.each(function(index) {\n\n var $this = $(this),\n height = $this.outerHeight();\n\n height > common_height ? common_height = height : common_height = common_height;\n\n });\n\n $items.css('height', common_height + 'px');\n\n },\n\n isotope: function(parameters) {\n\n Grid.selector.isotope(parameters);\n\n },\n\n render: function() {\n\n Grid.selector.isotope('on', 'layoutComplete', function(isoInstance, laidOutItems) {\n\n $('#count').text(laidOutItems.length);\n\n GridImages.render();\n\n });\n\n }\n\n};\n\nvar GridItems = {\n\n selector: function($container) {\n\n return $container.find('.product__container');\n\n },\n\n vendors: [],\n types: [],\n parameters: [],\n\n element: null,\n data: null,\n\n init: function() {\n\n $('#count').text(GridItems.selector(Grid.selector).length);\n $('#total').text(GridItems.selector(Grid.selector).length);\n\n GridItems.loop(Grid.selector);\n\n },\n\n count: function($container) {\n\n return GridItems.selector($container).length;\n\n },\n\n loop: function($container) {\n\n var $items = GridItems.selector($container);\n\n GridItems.selector($container).each(function(index) {\n\n var $this = $(this),\n $data = $this.find('.data');\n\n GridItems.element = $this;\n\n var data_parameters = $data.children('.data-parameters').text(),\n data_sku = $data.children('.data-sku').text(),\n data_new = $data.children('.data-new').html(),\n data_stock = $data.children('.data-stock').text(),\n data_vendor = $data.children('.data-vendor').text(),\n data_link = $this.find('.name a');\n\n GridItems.data = {\n name: data_link.text(),\n sku: data_sku,\n details: (data_parameters != '') ? JSON.parse(data_parameters) : false,\n new: data_new ? true : false,\n stock: (data_stock.indexOf('kke') > -1) ? false : true,\n vendor: (data_vendor != '') ? data_vendor.toString() : false,\n link: data_link ? data_link.attr('href') : false,\n image: '/images/' + data_sku + '-1-t.jpg'\n };\n\n $data.remove();\n\n GridItems.setIndex(index);\n\n GridItems.setName();\n\n GridItems.setSku();\n\n GridItems.setVendor();\n\n GridItems.setLink();\n\n GridItems.setStock();\n\n GridItems.setImage();\n\n GridItems.setParameters();\n\n GridItems.setNew();\n\n GridItems.setPrice();\n\n });\n\n },\n\n setIndex: function(index) {\n\n GridItems.element.attr('data-index', index);\n\n },\n\n setName: function() {\n\n GridItems.element.attr('data-name', GridItems.data.name);\n\n },\n\n setSku: function() {\n\n GridItems.element.attr('data-sku', GridItems.data.sku);\n\n },\n\n setVendor: function() {\n\n if (GridItems.data.vendor) {\n\n GridItems.vendors.push(GridItems.data.vendor);\n\n }\n\n },\n\n setLink: function() {\n\n var $button = GridItems.element.find('.js-info');\n\n $button.attr('href', GridItems.data.link);\n\n },\n\n setImage: function() {\n\n var $img = GridItems.element.find('.img');\n\n $img.attr('data-echo', GridItems.data.image);\n\n },\n\n setStock: function() {\n\n var $actions = GridItems.element.find('.action'),\n html = '';\n\n if (GridItems.data.stock) {\n\n html += 'På lager';\n\n } else {\n\n html += 'Ikke på lager';\n\n }\n\n html = $(html);\n\n $actions.append(html);\n\n },\n\n setParameters: function() {\n\n if (GridItems.data.details) {\n\n if (GridItems.data.vendor) {\n\n GridItems.data.details.parameters.vendor = GridItems.data.vendor;\n\n }\n\n _.forIn(GridItems.data.details.parameters, function(value, key, obj) {\n\n if (_.contains(data_sortables, key)) {\n\n var v = value;\n\n if (_.isArray(v)) {\n\n v = JSON.stringify(v);\n\n }\n\n GridItems.element.attr('data-' + key, v);\n\n GridItems.parameters.push({\n\n id: key,\n value: value\n\n });\n\n }\n\n });\n\n GridItems.types.push(GridItems.data.details.type);\n\n }\n\n },\n\n setNew: function() {\n\n if (GridItems.data.new) {\n\n var badge = '
Nyhed
';\n\n GridItems.element.find('.image').append(badge);\n\n }\n\n },\n\n setPrice: function() {\n\n var $price = GridItems.element.find('.Prices_Custom_DIV > div'),\n $price_before = $price.children('.price-before'),\n $price_now = $price.children('.price-now'),\n $price_special = $price.children('.price-special'),\n $price_currency = $price.children('.price-currency'),\n price_before = $price_before.text().trim(),\n price_now = $price_now.text().trim(),\n price_special = $price_special.text().trim() ? $price_special.text().trim() : false;\n\n if (price_special) {\n\n $price_before.text(price_now);\n\n price_before = price_now;\n\n $price_now.text(price_special);\n\n price_now = price_special;\n\n $price_special.remove();\n\n } \n\n var price_before = price_before.replace(/(\\.)/g,''),\n price_before = price_before.replace(/(\\,)/g,''),\n price_now = price_now.replace(/(\\.)/g,''),\n price_now = price_now.replace(/(\\,)/g,''),\n class_special = 'price-special';\n\n if (price_before) {\n\n var saving = Math.round((1 - (price_now / price_before)) * 100),\n badge = '
Spar ' + saving + '%
';\n\n $price_now.addClass(class_special);\n $price_currency.addClass(class_special);\n\n GridItems.element.find('.image').append(badge);\n\n GridItems.element.attr('data-discount', saving);\n\n } else {\n\n $price_before.remove();\n\n }\n\n GridItems.element.attr('data-price', price_now);\n\n if (GridItems.data.new) {\n\n var $badge = GridItems.element.find('.badge--offer');\n\n $badge.css('left', 'auto').css('right', '10px');\n\n }\n\n }\n\n};\n\nvar GridFilter = {\n\n selector: $('#filters'),\n\n vendor: _.uniq(GridItems.vendors),\n\n types: _.uniq(GridItems.types),\n\n parameters: [],\n\n isotope: [],\n\n init: function() {\n\n GridFilter.loopParameters();\n\n GridFilter.loopFilters();\n\n GridFilter.sort();\n\n GridFilter.compile();\n\n GridFilter.sliders();\n\n GridFilter.listen();\n\n GridFilter.select();\n\n GridFilter.reset();\n\n },\n\n loopParameters: function() {\n\n var keys = _.uniq(_.pluck(GridItems.parameters, 'id')),\n count = GridItems.count(Grid.selector),\n intersection = [];\n\n // Only show filters that 80% of all visible products have\n\n _.forEach(keys, function(key) {\n\n var test = _.where(GridItems.parameters, { id: key }).length,\n withinThreshold = ((test / count) > 0.8);\n\n if (withinThreshold) {\n\n intersection.push(key);\n\n }\n\n });\n\n // Create filters based on intersection\n\n _.forEach(GridItems.parameters, function(parameter) {\n\n var id = parameter.id,\n value = parameter.value;\n\n var key = _.findKey(GridFilter.parameters, function(obj) { return obj.id == id; });\n\n if (!key && _.contains(intersection, id)) {\n\n GridFilter.parameters.push({\n id: id,\n label: null,\n values: _.isArray(value) ? value : [ value ]\n });\n\n } else if ( _.contains(intersection, id)) {\n\n if (value) {\n\n var values = GridFilter.parameters[ key ].values;\n\n if (_.isArray(value)) {\n\n _.forEach(value, function(v) {\n\n if (!_.contains(values, v)) {\n\n GridFilter.parameters[ key ].values.push(v);\n\n }\n\n })\n\n } else {\n\n if (!_.contains(values, value)) {\n\n GridFilter.parameters[ key ].values.push(value);\n\n }\n\n }\n\n }\n\n }\n\n });\n\n },\n\n loopFilters: function() {\n\n _.forEach(GridFilter.parameters, function(filter, index) {\n\n var values = filter.values;\n\n if (_.isNumber(filter.values[0])) {\n\n var sorted = values.sort(function(a, b) { return a - b; }),\n slider = {\n min: _.min(values),\n max: _.max(values)\n };\n\n\n } else {\n\n var sorted = values.sort(function (a, b) {\n\n if (a > b) {\n\n return 1;\n\n }\n\n if (a < b) {\n \n return -1;\n\n }\n\n return 0;\n\n }),\n slider = false;\n\n }\n\n GridFilter.parameters[ index ].label = data_parameters[ filter.id ].label;\n GridFilter.parameters[ index ].values = filter.values;\n GridFilter.parameters[ index ].slider = slider;\n\n });\n\n },\n\n sort: function() {\n\n GridFilter.collection = _.sortBy(GridFilter.parameters, 'label');\n\n },\n\n compile: function() {\n\n var source = $('#template-filters').html(),\n template = Handlebars.compile(source),\n html = template({\n\n filters: GridFilter.collection\n\n });\n\n GridFilter.selector.prepend(html);\n\n },\n\n sliders: function() {\n\n var $sliders = GridFilter.selector.find('.nouislider');\n\n $sliders.each(function() {\n\n var $this = $(this),\n $element = $this.closest('.filter__element'),\n id = $this.data('id'),\n label = $this.data('label'),\n min = $this.data('min'),\n max = $this.data('max'),\n interval = (max - min) / 10;\n\n $this.noUiSlider({\n start: [ min, max ],\n connect: true,\n step: interval,\n range: {\n 'min': min,\n 'max': max\n }\n });\n\n $this.on({\n\n change: function(obj, values) {\n\n var key = _.findKey(GridFilter.isotope, { id: id }),\n current_min = parseInt(values[0]),\n current_max = parseInt(values[1]);\n\n if (!key) {\n\n GridFilter.isotope.push({\n id: id,\n label: label,\n slider: true,\n values: [ current_min, current_max ]\n });\n\n } else {\n\n GridFilter.isotope[ key ].values = [ current_min, current_max ];\n\n }\n\n Grid.isotope({\n\n filter: function() {\n\n return GridFilter.filter(this);\n\n }\n\n });\n\n },\n slide: function(obj, values) {\n\n var current_min = values[0],\n current_max = values[1];\n\n $('#' + id + '-min').text(current_min);\n $('#' + id + '-max').text(current_max);\n\n if (current_min == min && current_max == max) {\n\n $element.closest('.filter__element').removeClass('active');\n\n } else {\n\n $element.closest('.filter__element').addClass('active');\n\n }\n\n }\n\n });\n\n });\n\n },\n\n filter: function(item) {\n\n var $item = $(item),\n item_filters = [],\n item_show = false,\n i;\n\n if (!_.isEmpty(GridFilter.isotope)) {\n\n for(i = 0; i < GridFilter.isotope.length; i++) {\n\n var filter = GridFilter.isotope[ i ].id,\n values = GridFilter.isotope[ i ].values,\n slider = GridFilter.isotope[ i ].slider,\n value = $item.data(filter);\n\n if (value && slider && _.isArray(values)) {\n\n var min = values[0],\n max = values[1],\n inbetween = false,\n k;\n\n for(k = 0; k < value.length; k++) {\n\n if (value[ k ] >= min && value[ k ] <= max) {\n\n inbetween = true;\n\n }\n\n }\n\n if (inbetween) {\n\n item_filters.push(1);\n\n } else {\n\n item_filters.push(0);\n\n }\n\n } else if (value && _.isArray(value)) {\n\n var intersect = _.intersection(values, value);\n\n if (!_.isEmpty(intersect)) {\n\n item_filters.push(1);\n\n } else {\n\n item_filters.push(0);\n\n }\n\n } else if (value && _.contains(values, value)) {\n\n item_filters.push(1);\n\n } else {\n\n item_filters.push(0);\n\n }\n\n }\n\n if (_.contains(item_filters, 0)) {\n\n item_show = false;\n\n } else {\n\n item_show = true;\n\n }\n\n } else {\n\n item_show = true;\n\n }\n\n return item_show;\n\n },\n\n show: function($filter_element, $filter_placeholder, $filter_body) {\n\n var $filter_reset = GridFilter.selector.find('.filter__reset');\n\n var top = $filter_element.outerHeight(),\n width = $filter_element.outerWidth() + 1;\n\n $filter_body\n .css('top', top)\n .css('width', width);\n\n Overlay.show(true);\n\n $filter_element.addClass('show');\n\n $filter_element.on('mouseleave', function() {\n\n $filter_element.removeClass('show');\n $filter_placeholder.off();\n $filter_body.off();\n\n });\n\n $filter_reset.addClass('show');\n\n },\n\n hide: function() {\n\n Overlay.hide(true);\n\n GridFilter.selector.find('.filter__element').removeClass('show');\n GridFilter.selector.find('.filter__reset').removeClass('show');\n\n },\n\n listen: function() {\n\n // Show/hide filter on mousenter and click\n\n GridFilter.selector.on('mouseenter', '.filter__element', function(e) {\n\n e.preventDefault();\n\n var $filter_element = $(this),\n $filter_placeholder = $filter_element.children('.filter__placeholder'),\n $filter_body = $filter_element.children('.filter__body');\n\n GridFilter.show($filter_element, $filter_placeholder, $filter_body);\n\n });\n\n GridFilter.selector.on('mouseleave', function(e) {\n\n e.preventDefault();\n\n GridFilter.hide();\n\n });\n\n GridFilter.selector.on('click', '.filter__placeholder', function(e) {\n\n e.preventDefault();\n\n var $filter_placeholder = $(this),\n $filter_element = $filter_placeholder.parent(),\n $filter_body = $filter_element.children('.filter__body');\n\n if (!$filter_element.hasClass('show')) {\n\n GridFilter.show($filter_element, $filter_placeholder, $filter_body);\n\n } else {\n\n GridFilter.hide();\n\n }\n\n });\n\n Overlay.selector(true).on('click', function(e) {\n\n e.stopPropagation();\n e.preventDefault();\n\n GridFilter.hide();\n\n });\n\n },\n\n select: function() {\n\n GridFilter.selector.on('click', '.filter__link', function(e) {\n\n e.preventDefault();\n\n var $this = $(this),\n $element = $this.closest('.filter__element'),\n filter_id = $this.data('id'),\n filter_value = $this.data('value'),\n filter_state = $this.hasClass('selected'),\n key = _.findKey(GridFilter.isotope, { id: filter_id });\n\n // Are we pushing or pulling a filter?\n\n if (!filter_state) {\n\n $this.addClass('selected');\n\n if (key) {\n\n // If the obj exists, push a new value to it\n\n GridFilter.isotope[ key ].values.push(filter_value);\n\n } else {\n\n // Else, create the object, and push a new value to it\n\n GridFilter.isotope.push({\n id: filter_id,\n values: [ filter_value ]\n });\n\n key = _.findKey(GridFilter.isotope, { id: filter_id });\n\n }\n\n } else {\n\n $this.removeClass('selected');\n\n // Remove value from the object\n\n _.remove(GridFilter.isotope[ key ].values, function(value) {\n\n return value == filter_value;\n\n });\n\n }\n\n // Remove the object if there are no values\n\n if (_.isEmpty(GridFilter.isotope[ key ].values)) {\n\n GridFilter.isotope.splice(key, 1);\n\n $element.removeClass('active');\n\n } else {\n\n $('#' + filter_id + '-count').text(GridFilter.isotope[ key ].values.length);\n\n $element.addClass('active');\n\n }\n\n Grid.isotope({\n\n filter: function() {\n\n return GridFilter.filter(this);\n\n }\n\n });\n\n });\n\n },\n\n reset: function() {\n\n var $reset = GridFilter.selector.find('.filter__reset'),\n height = GridFilter.selector.outerHeight() + 'px';\n\n $reset.css('line-height', height).css('height', height);\n\n $reset.on('click', function(e) {\n\n e.preventDefault();\n\n GridFilter.isotope = [];\n\n GridFilter.selector.find('.filter__element').removeClass('active');\n GridFilter.selector.find('.filter__link').removeClass('selected');\n\n GridFilter.selector.find('.nouislider').each(function() {\n\n var $this = $(this),\n min = $this.data('min'),\n max = $this.data('max');\n\n $this.val([ min, max ]);\n\n });\n\n GridSorting.selector.find('.js-parameter, .js-order').removeClass('active');\n\n GridSorting.selector.find('li:first-child .js-parameter, li:first-child .js-order').addClass('active');\n\n Grid.isotope({\n\n filter: function() {\n\n return GridFilter.filter(this);\n\n },\n sortBy: 'name',\n sortAscending: true\n\n });\n\n Overlay.hide(true);\n\n });\n\n }\n\n};\n\nvar GridSorting = {\n\n selector: $('#sorting'),\n\n init: function() {\n\n GridSorting.parameter();\n\n GridSorting.order();\n\n },\n\n parameter: function() {\n\n GridSorting.selector.on('click', '.js-parameter', function(e) {\n\n e.preventDefault();\n\n var $this = $(this),\n parameter = $this.data('sortby');\n\n Grid.isotope({\n\n sortBy: parameter\n\n });\n\n GridSorting.selector.find('.js-parameter').removeClass('active');\n\n $this.addClass('active');\n\n GridImages.render();\n\n });\n\n },\n\n order: function() {\n\n GridSorting.selector.on('click', '.js-order', function(e) {\n\n e.preventDefault();\n\n var $this = $(this),\n parameter = $this.data('sortorder'),\n ascending = (parameter == 'asc') ? true : false;\n\n Grid.isotope({\n\n sortAscending: ascending\n\n });\n\n GridSorting.selector.find('.js-order').removeClass('active');\n\n $this.addClass('active');\n\n GridImages.render();\n\n });\n\n }\n\n};\n\nvar GridImages = {\n\n init: function() {\n\n echo.init({\n offset: 250,\n throttle: 250,\n callback: function (element, op) {\n\n var $this = $(element);\n\n $this.load(function() {\n\n $this.css('opacity', 1);\n\n });\n\n }\n });\n\n },\n\n render: function() {\n\n echo.render();\n\n }\n\n};\n\nvar ProductData = {\n\n selector: $('#data'),\n\n json: null,\n\n init: function() {\n\n // Parse JSON string from HTML\n\n var json = ProductData.selector.find('.data-json').text(),\n json = JSON.parse(json);\n\n // Add the vendor\n\n json[ 'vendor' ] = ProductData.selector.find('.data-vendor').text();\n\n // Add the SKU\n\n json[ 'sku' ] = ProductData.selector.find('.data-sku').text();\n\n // Add the name\n\n json[ 'name' ] = ProductData.selector.find('.data-name').text();\n\n // Add stock\n\n var stock = ProductData.selector.find('.data-stock').text(),\n instock = (stock.indexOf('kke') > -1) ? false : true;\n\n json[ 'stock' ] = instock;\n\n // Save\n\n ProductData.json = json;\n\n // Delete data\n\n ProductData.selector.remove();\n\n },\n\n get: function(property, inParameters) {\n\n if (!ProductData.json) return false;\n\n if (inParameters) {\n\n return ProductData.json.hasOwnProperty('parameters') && ProductData.json.parameters.hasOwnProperty(property) ? ProductData.json.parameters[property] : false;\n\n } else {\n\n return ProductData.json.hasOwnProperty(property) ? ProductData.json[property] : false;\n\n }\n\n }\n\n};\n\nvar ProductDelivery = {\n\n selector: $('#js-delivery'),\n\n init: function() {\n\n if (ProductStock.status) {\n\n var html = '';\n\n ProductDelivery.selector.append(html);\n\n } else {\n\n ProductDelivery.selector.html('Forvent længere leveringstid end normalt.');\n\n }\n\n }\n\n};\n\nvar ProductBuy = {\n\n selector: $('#js-buy'),\n\n init: function(selector) {\n\n var $button = (selector) ? $(selector) : $('#js-button');\n\n //if (ProductStock.status) {\n\n $button.click(function(e) {\n\n e.preventDefault();\n\n $(this).closest('form').submit();\n\n });\n\n ProductBuy.listen();\n\n //}\n\n },\n\n listen: function() {\n\n ProductBuy.selector.on('mouseenter', function() {\n\n ProductAmount.selector.addClass('product__price__button__amount--show');\n\n });\n\n ProductBuy.selector.on('mouseleave', function() {\n\n var val = ProductAmount.selector.val();\n\n if (val != 1) {\n\n ProductAmount.selector.addClass('product__price__button__amount--show');\n\n } else {\n\n ProductAmount.selector.removeClass('product__price__button__amount--show');\n\n }\n\n });\n\n }\n\n};\n\nvar ProductStock = {\n\n selector: $('#js-stock'),\n\n status: null,\n\n init: function(selector) {\n\n ProductStock.status = ProductData.get('stock');\n\n var html;\n\n if (ProductStock.status) {\n\n ProductStock.selector.addClass('instock');\n\n html = 'Varen er på lager';\n\n } else {\n\n html = 'Varen er ikke på lager';\n\n }\n\n ProductStock.selector.html(html);\n\n }\n\n};\n\nvar ProductAmount = {\n\n selector: $('#js-amount'),\n\n init: function(selector) {\n\n //f (ProductStock.status) {\n\n ProductAmount.listen();\n\n //} else {\n\n //ProductAmount.selector.hide();\n\n //}\n\n },\n\n listen: function() {\n\n ProductAmount.selector.on('change', function() {\n\n var val = parseInt(ProductAmount.selector.val());\n\n if (_.isNaN(val)) {\n\n ProductAmount.selector.val(1);\n\n $('#amount').val(1);\n\n } else {\n\n ProductAmount.selector.val(val);\n\n $('#amount').val(val);\n\n }\n\n });\n\n }\n\n};\n\nvar ProductCountdown = {\n\n selector: $('#js-countdown'),\n\n element: {\n\n hours: null,\n minutes: null,\n and: null\n\n },\n\n init: function(selector) {\n\n if (ProductStock.status) {\n\n var now = moment(),\n day = now.day(),\n hour = now.hour();\n\n var weekend = (day === 0 || day === 6) ? true : false,\n afterhours = (hour < 8 || hour > 16) ? true : false;\n\n if (!weekend && !afterhours) {\n\n ProductCountdown.selector.show();\n\n ProductCountdown.start();\n\n }\n\n }\n\n },\n\n start: function() {\n\n var now = moment(),\n limit = moment().hours(16).minutes(0).seconds(0).millisecond(0),\n timeframe = limit.diff(now);\n\n ProductCountdown.element.hours = ProductCountdown.selector.find('.js-hours'),\n ProductCountdown.element.minutes = ProductCountdown.selector.find('.js-minutes'),\n ProductCountdown.element.and = ProductCountdown.selector.find('.js-and');\n\n ProductCountdown.selector.countdown(limit.format('YYYY/MM/DD HH:mm:ss')).on('update.countdown', function(event) {\n\n ProductCountdown.update(event);\n\n }).on('finish.countdown', function(event) {\n\n ProductCountdown.stop(event);\n\n });\n\n },\n\n update: function(event) {\n\n var hours = event.strftime('%-H');\n\n if (hours > 0) {\n\n ProductCountdown.element.hours.text(event.strftime('%-H time%!H:r;'));\n\n } else {\n\n ProductCountdown.element.hours.remove();\n\n ProductCountdown.element.and.remove();\n\n }\n\n ProductCountdown.element.minutes.text(event.strftime('%-M minut%!M:ter;'));\n\n },\n\n stop: function(event) {\n\n ProductCountdown.selector.remove();\n\n }\n\n};\n\nvar ProductTabs = {\n\n selector: $('#js-tabs'),\n\n init: function() {\n\n var $nav = ProductTabs.selector.find('.tabs__nav');\n\n $nav.on('click', 'a', function(e) {\n\n e.preventDefault();\n\n var $this = $(this),\n id = $this.data('tab');\n\n ProductTabs.selector.find('.tabs__nav a').removeClass('active');\n\n $this.addClass('active');\n\n ProductTabs.show(id);\n\n });\n\n },\n\n show: function(tab) {\n\n var id = '#' + tab;\n \n ProductTabs.selector.find('.tabs__content').hide();\n\n ProductTabs.selector.find(id).fadeIn('fast');\n\n }\n\n};\n\nvar ProductBrand = {\n\n init: function() {\n\n var name = ProductData.get('vendor');\n\n if (name) {\n\n name = name.toString().toLowerCase();\n\n ProductBrand.check(name).done(function(image) {\n\n if (image) {\n\n $('#js-content').prepend(ProductBrand.html(image, name));\n\n }\n\n });\n\n }\n\n },\n\n check: function(name) {\n\n var def = $.Deferred();\n\n var path = '/images/brands/' + name + '.jpg';\n\n $.ajax({\n\n url: path,\n type: 'HEAD',\n error: function() {\n\n def.resolve(false);\n\n },\n success: function() {\n\n def.resolve(path);\n\n }\n\n }); \n\n return def.promise();\n\n },\n\n html: function(image, name) {\n\n return '
\"'
';\n\n }\n\n};\n\nvar ProductDetails = {\n\n selector: $('#js-details'),\n collection: [],\n\n init: function() {\n\n ProductDetails.make();\n\n ProductDetails.compile();\n\n },\n\n make: function() {\n\n _.forEach(data_groups[ ProductData.get('type') ], function(group, key) {\n\n var detail = {\n label: group.label,\n parameters: []\n };\n\n _.forEach(group.parameters, function(param, key) {\n\n var params = ProductData.get('parameters'),\n param_value = params[ param ];\n\n if (param === 'vendor' || param === 'sku') {\n\n var l = (param === 'vendor') ? 'Producent' : 'Varenummer',\n v = ProductData.get(param);\n\n if (v) {\n\n detail.parameters.push({\n\n label: l,\n explanation: '',\n values: v\n\n });\n\n }\n\n } else if (param !== 'youtubevideo' && param_value) {\n\n detail.parameters.push({\n\n label: data_parameters[ param ].label,\n explanation: data_parameters[ param ].explanation,\n values: param_value\n\n });\n\n }\n\n });\n\n if (detail.parameters.length) {\n\n ProductDetails.collection.push(detail);\n\n }\n\n });\n\n },\n\n compile: function() {\n\n var source = $('#template-details').html(),\n template = Handlebars.compile(source),\n html = template({ details: ProductDetails.collection });\n\n ProductDetails.selector.append(html);\n\n }\n\n};\n\nvar ProductPrice = {\n\n selector: $('#js-price'),\n\n init: function() {\n\n var $price = ProductPrice.selector.find('.Prices_Custom_DIV > div'),\n $price_before = $price.children('.price-before'),\n $price_now = $price.children('.price-now'),\n $price_currency = $price.children('.price-currency'),\n price_before = $price_before.text().trim(),\n price_now = $price_now.text().trim(),\n price_before = price_before.replace(/(\\.)/g,''),\n price_before = price_before.replace(/(\\,)/g,''),\n price_now = price_now.replace(/(\\.)/g,''),\n price_now = price_now.replace(/(\\,)/g,''),\n class_special = 'price-special';\n\n if (price_before) {\n\n var saving = Math.round((1 - (price_now / price_before)) * 100),\n badge = ProductPrice.badge(saving);\n \n $price_before.text($price_before.text().trim());\n\n $price_now.addClass(class_special);\n $price_currency.addClass(class_special);\n\n ProductPrice.selector.before(badge);\n\n } else {\n\n $price_before.remove();\n\n }\n\n $price_now.text($price_now.text().trim());\n\n },\n\n badge: function(saving) {\n\n return '
Du sparer ' + saving + '%
';\n\n }\n\n};\n\nvar ProductRelated = {\n\n selector: function(container) {\n\n return container ? $(container) : $('#js-related');\n\n },\n\n init: function(container) {\n\n ProductRelated.prepare(container);\n\n },\n\n prepare: function(container) {\n\n var $divs;\n\n // Remove DanDomain code <3\n\n if (container === '#js-related') {\n\n $divs = ProductRelated.selector(container).find('.Related_Custom_DIV > div');\n\n } else if (container === '#js-alsobought') {\n\n $divs = ProductRelated.selector(container).find('.CustomersAlsoBought_Custom_DIV > div');\n\n } else {\n\n \t$divs = [];\n\n }\n\n if ($divs.length) {\n\n\t $divs.unwrap()\n\n\t // Add class for data extraction\n\n\t $divs = ProductRelated.selector(container).find('.products > div');\n\t $divs.addClass('product__container');\n\n\t // Display items if they exist\n\n GridItems.loop(ProductRelated.selector(container));\n\n GridImages.init();\n\n Grid.hover(ProductRelated.selector(container));\n\n ProductRelated.buy(container);\n \n ProductRelated.slider(container);\n\n ProductRelated.selector(container).addClass('product__related--show');\n\n }\n\n },\n\n alignHeight: function(container) {\n\n var $divs = ProductRelated.selector(container).find('.products > .product__container'),\n height = 0;\n\n $divs.each(function(index) {\n\n var this_height = $(this).outerHeight(true);\n\n height = this_height > height ? this_height : height;\n\n });\n\n $divs.css('height', height + 'px');\n\n },\n\n slider: function(container) {\n\n var $slider = ProductRelated.selector(container).find('.slider');\n\n $slider.flexslider({\n\n selector: '.products > .product__container',\n animation: 'slide',\n slideshow: false,\n keyboard: false,\n controlNav: false,\n smoothHeight: false,\n animationLoop: false,\n controlsContainer: ProductRelated.selector(container).find('.slider-controls'),\n itemWidth: 275,\n itemMargin: 0,\n minItems: 4,\n prevText: '',\n nextText: '',\n start: function(slider) {\n\n ProductRelated.alignHeight(container);\n\n if (slider.count < 5) {\n\n var $controls = ProductRelated.selector(container).find('.slider-controls');\n\n $controls.remove();\n\n }\n\n }\n\n });\n\n },\n\n buy: function(container) {\n\n ProductRelated.selector(container).on('click', '.js-buy', function(e) {\n\n e.preventDefault();\n\n var $this = $(this),\n $product = $this.closest('.product__container'),\n sku = $product.data('sku');\n\n BuyRelatedProductCustom(sku, '1', '0');\n\n });\n\n }\n\n};\n\nvar ProductBanner = {\n\n selector: $('#js-product-background'),\n\n hasBanner: null,\n\n path: '/images/',\n\n init: function() {\n\n var product_id = ProductVariantMasterID ? ProductVariantMasterID : ProductData.get('sku'),\n path = ProductThumbnails.path + product_id + '-banner.jpg';\n\n $.ajax({\n url: path,\n type: 'HEAD',\n error: function() {\n\n $('body').addClass('without-banner');\n\n },\n success: function() {\n\n ProductBanner.hasBanner = true;\n\n ProductBanner.load(path);\n\n }\n });\n\n },\n\n load: function(path) {\n\n // TODO: Start loading overlay\n\n var $img = $('').attr('src', path);\n\n $img.load(function() {\n\n ProductBanner.selector.css('background-image', 'url(' + path + ')');\n\n $('body').addClass('with-banner');\n\n // TODO: Stop loading overlay\n\n }).error(function() {\n\n // TODO: Stop loading overlay\n\n });\n\n }\n\n};\n\nvar ProductImage = {\n\n selector: $('#js-image'),\n\n path: '/images/',\n\n group: [],\n\n init: function() {\n\n ProductImage.load(1);\n\n ProductImage.selector.on('click', 'a', function(e) {\n\n e.preventDefault();\n\n var id = $(this).children('img').data('id');\n\n ProductImage.popup(id);\n\n });\n\n },\n\n load: function(image_id) {\n\n var product_id = ProductVariantMasterID ? ProductVariantMasterID : ProductData.get('sku'),\n path = ProductImage.path + product_id + '-' + image_id + '.jpg',\n $img = $('').attr('src', path);\n\n $img.load(function() {\n\n ProductImage.selector.find('img').replaceWith($img);\n\n $img.fadeIn('fast');\n\n }).error(function() {\n\n var placeholder = '
';\n\n ProductImage.selector.html(placeholder);\n\n });\n\n },\n\n popup: function(id) {\n\n var id = (id) ? id : 1;\n\n $.fancybox.open(ProductImage.group, {\n\n index: id - 1,\n padding: 40,\n margin: 40,\n helpers: {\n overlay : {\n closeClick : true,\n speedOut : 200,\n showEarly : true,\n locked : false\n }\n },\n beforeLoad: function() {\n\n $.fancybox.showLoading();\n\n },\n afterLoad: function() {\n\n $.fancybox.hideLoading();\n\n }\n\n });\n\n }\n\n};\n\nvar ProductThumbnails = {\n\n def: $.Deferred(),\n\n selector: $('#js-thumbnails'),\n\n path: '/images/',\n\n count: 1,\n\n limit: 1000,\n\n amount: 0,\n\n html: '',\n\n init: function() {\n\n ProductThumbnails.check();\n\n ProductThumbnails.def.promise().done(function() {\n\n ProductThumbnails.insert();\n\n });\n\n },\n\n check: function() {\n\n if (ProductThumbnails.count < ProductThumbnails.limit) {\n\n var makePath = function(version) {\n\n var product_id = ProductVariantMasterID ? ProductVariantMasterID : ProductData.get('sku'),\n path = ProductThumbnails.path + product_id + '-' + ProductThumbnails.count + '-' + version + '.jpg';\n\n return path;\n\n };\n\n $.ajax({\n\n url: makePath('r'),\n type: 'HEAD',\n error: function() {\n\n ProductThumbnails.limit = ProductThumbnails.count;\n\n ProductThumbnails.amount = ProductThumbnails.count - 1;\n\n ProductThumbnails.def.resolve();\n\n },\n success: function() {\n\n var first = (ProductThumbnails.count == 1) ? ' active' : '';\n\n ProductThumbnails.html += '
  • ';\n\n ProductImage.group.push({\n\n title: ProductData.get('name') + ' ' + ProductThumbnails.count,\n href: makePath('p')\n\n });\n\n ProductThumbnails.count++;\n\n ProductThumbnails.check();\n\n }\n\n });\n\n }\n\n },\n\n insert: function() {\n\n // Check if a video should be included in thumbnails\n\n var video_url = ProductData.get('youtubevideo', true);\n\n if (video_url) {\n\n ProductThumbnails.html = '
  • ' + ProductThumbnails.html;\n\n ProductThumbnails.amount++;\n\n }\n\n // If we have enough thumbnails, load their images, show them and enable slider.\n\n if (ProductThumbnails.amount > 1) {\n\n ProductThumbnails.html = '';\n\n ProductThumbnails.selector.prepend(ProductThumbnails.html);\n\n ProductThumbnails.selector.imagesLoaded().done(function() {\n\n ProductThumbnails.slider();\n\n ProductThumbnails.listen();\n\n });\n\n } else {\n\n ProductThumbnails.selector.remove();\n\n }\n\n },\n\n slider: function() {\n\n ProductThumbnails.selector.flexslider({\n\n namespace: 'flex-thumbs-',\n selector: '.product__thumbnails__slides > li',\n animation: 'slide',\n slideshow: false,\n keyboard: false,\n controlNav: false,\n smoothHeight: true,\n animationLoop: false,\n itemWidth: 90,\n itemMargin: 5,\n minItems: 4,\n prevText: '',\n nextText: '',\n start: function(slider) {\n\n if (slider.count < 4 && !ProductBanner.hasBanner) {\n\n slider.addClass('flexslider-centered');\n\n };\n\n ProductThumbnails.selector.find('.product__thumbnails__cover').fadeOut('normal');\n\n }\n\n });\n\n },\n\n listen: function() {\n\n var $images = ProductThumbnails.selector.find('.js-thumbnail'),\n $videos = ProductThumbnails.selector.find('.js-thumbnail-video');\n\n if ($images.length) {\n\n $images.on('click', function(e) {\n\n e.preventDefault();\n\n if (ProductBanner.hasBanner) {\n\n ProductImage.popup($(e.currentTarget).data('id'));\n\n } else {\n\n ProductImage.load($(e.currentTarget).data('id'));\n\n ProductThumbnails.selector.find('.js-thumbnail').removeClass('active');\n\n $(this).addClass('active');\n\n }\n\n });\n\n }\n\n if ($videos.length) {\n\n $videos.fancybox({\n helpers: {\n media: true,\n overlay : {\n closeClick : true,\n speedOut : 200,\n showEarly : true,\n locked : false\n }\n }\n });\n\n }\n\n }\n\n};\n\nvar ShopCart = {\n\n selector: $('#cart-container'),\n\n init: function() {\n\n var isCart = ShopCart.selector;\n\n if (isCart.length) {\n\n ShopCart.modifyDom();\n\n ShopCart.hideDiscount();\n\n ShopCart.replaceButtons();\n\n }\n\n },\n\n modifyDom: function() {\n\n var $divs = ShopCart.selector.find('.ShowBasket_Custom_DIV > div');\n\n if ($divs.length) {\n\n ShopCart.selector.find('.ShowBasket_Custom_DIV > div').unwrap();\n\n ShopCart.selector.find('.cart__list__element').unwrap();\n\n } else {\n\n $('#cart-additional').remove();\n $('#cart-summary').remove();\n\n var message = '

    Der er ingen varer i kurven.

    ';\n\n $('#cart-list').replaceWith(message);\n\n }\n\n },\n\n hideDiscount: function() {\n\n var $discount = $('#discount'),\n $text = $discount.find('.cart__summary__text');\n\n if (!$text.text()) {\n\n $discount.remove();\n\n }\n\n },\n\n replaceButtons: function() {\n\n // Increase\n\n var $increase = ShopCart.selector.find('.cart__product__increase img');\n\n $increase.replaceWith('');\n\n // Decrease\n\n var $decrease = ShopCart.selector.find('.cart__product__decrease img');\n\n $decrease.replaceWith('');\n\n // Remove\n\n var $remove = ShopCart.selector.find('.cart__product__remove img');\n\n $remove.replaceWith('');\n\n // Order\n\n var $order = ShopCart.selector.find('.Basket_Order'),\n $img = ShopCart.selector.find('.Basket_Order img');\n\n $order.addClass('btn btn--gigantisch btn--green');\n\n $img.replaceWith('Til kassen');\n\n }\n\n\n};\n\nvar SubCategory = {\n\n selector: $('.SubCats_Categories_DIV', '#container'),\n\n children: $('.SubCats_Categories_DIV > div', '#container'),\n\n init: function() {\n\n if (SubCategory.selector.length) {\n\n SubCategory.modifyDom();\n\n SubCategory.grid();\n\n SubCategory.height();\n\n SubCategory.watch();\n\n }\n\n },\n\n modifyDom: function() {\n\n SubCategory.children.addClass('subcategory');\n\n },\n\n grid: function() {\n\n var i = 1;\n\n SubCategory.children.each(function(index) {\n\n if (i % 5 == 0) {\n\n $(this).addClass('last');\n\n }\n\n if (i == SubCategory.children.length) {\n\n $(this).remove();\n\n }\n\n i++;\n\n });\n\n },\n\n height: function() {\n\n var height = 0;\n\n SubCategory.selector.imagesLoaded(function() {\n\n SubCategory.children.each(function(index) {\n\n var this_height = $(this).outerHeight(true);\n\n height = this_height > height ? this_height : height;\n\n });\n\n SubCategory.children.css('height', height);\n\n });\n\n },\n\n watch: function() {\n\n SubCategory.children.hover(function() {\n\n $(this).addClass('subcategory--hover');\n\n }, function() {\n\n $(this).removeClass('subcategory--hover');\n\n });\n\n }\n\n};\n\nvar ShopCheckout = {\n\n selector: $('#checkout-container'),\n\n init: function() {\n\n var isCheckout = ShopCheckout.selector;\n\n if (isCheckout.length) {\n\n ShopCheckout.modifyDom();\n\n ShopCheckout.clean();\n\n ShopCheckout.watch();\n\n ShopCheckout.replaceButtons();\n\n }\n\n },\n\n modifyDom: function() {\n\n var $payment_shipping = ShopCheckout.selector.find('#column-shipping-payment'),\n frame = '';\n\n // Modify DOM so we're able to style as needed.\n // Needs to be modified when (if) DanDomain allows one to modify the checkout template.\n\n $payment_shipping.addClass('cols cols--2');\n\n $payment_shipping.find('> h2:first, #payment-methods, #payment-methods-sencondary').wrapAll('
    ');\n\n $payment_shipping.find('> h2:first, #shipping-methods').wrapAll('
    ');\n\n ShopCheckout.selector.find('#column-data > h3').prependTo('#customer-data');\n\n ShopCheckout.selector.find('#column-data, #column-shipping-payment').wrapAll('
    ');\n\n // Hide country selection\n\n var $countries = $('#checkout_customer_country,#checkout_customer_altdelivery_country').parent();\n\n $countries.css('position','absolute').css('left','-999em');\n\n },\n\n clean: function() {\n\n // Remove navigation\n\n Nav.selector.html('
  •  
  • ');\n\n // remove search\n\n Search.selector.remove();\n\n // Remove cart/trigger\n\n MiniCart.trigger.remove();\n\n // Replace confirm button\n\n var button = '';\n\n $('#confirm-checkout').html(button);\n\n },\n\n watch: function() {\n\n var $container = $('#checkout-container'),\n $summary = $('#column-order-summary'),\n $information = $('#column-order-information'),\n container_pos = $container.position().top,\n summary_pos = $summary.position().top,\n original_position = container_pos + summary_pos,\n margin = 0,\n current = 0;\n\n $(window).scroll(function() {\n\n clearTimeout($.data(this, 'scrollCheck'));\n\n $.data(this, 'scrollCheck', setTimeout(function() {\n\n var top = window.pageYOffset || document.documentElement.scrollTop;\n\n if (top >= original_position) {\n\n var difference = $summary.outerHeight(true) - $information.outerHeight(true);\n\n if (difference < 0 && margin) {\n\n margin = (top - original_position);\n\n } else {\n\n if (((top - original_position) + $summary.outerHeight()) > $information.outerHeight(true)) {\n\n margin = $information.outerHeight(true) - $summary.outerHeight();\n\n } else {\n\n margin = (top - original_position);\n\n }\n\n }\n\n } else {\n\n margin = 0;\n\n }\n\n $summary.css('margin-top', margin);\n\n }, 250));\n\n });\n\n },\n\n replaceButtons: function() {\n\n // Order\n\n var $checkout = ShopCheckout.selector.find('#confirm-checkout'),\n $button = 'til betaling';\n\n $checkout.html($button);\n\n }\n\n};\n\nvar Overlay = {\n\n selector: function(grid) {\n\n return grid ? $('#overlay-grid') : $('#overlay');\n\n },\n\n show: function(grid) {\n\n Overlay.selector(grid).addClass('overlay--show');\n\n },\n\n hide: function(grid) {\n\n Overlay.selector(grid).removeClass('overlay--show');\n\n },\n\n toggle: function(grid) {\n\n Overlay.selector(grid).toggleClass('overlay--show');\n\n }\n\n};"],"sourceRoot":"/source/"}