{"version":3,"sources":["node_modules/browser-pack/_prelude.js","novosales/assets/base/js/main.js","novosales/assets/base/js/plugin.js","novosales/assets/base/js/app.js","novosales/assets/base/libs/jquery-2.0.0.min.js","novosales/assets/base/libs/pubsub.js","novosales/assets/base/libs/enquire.min.js","novosales/assets/base/js/views/ads.js","novosales/assets/base/js/views/checkout.js","novosales/assets/base/js/views/account.js","novosales/assets/base/js/views/specialcategory.js","novosales/assets/base/js/views/product.js","novosales/assets/base/js/views/home.js","novosales/assets/base/js/views/cart.js","novosales/assets/base/js/views/navi.js","novosales/assets/base/js/views/general.js","novosales/assets/base/js/views/referToAFriend.js","novosales/assets/base/js/views/content.js","novosales/assets/base/js/utils/trackinghelper.js","novosales/assets/base/js/components/serviceTabScroll.js","novosales/assets/base/js/views/raffle.js","novosales/assets/base/js/views/shopform.js","novosales/assets/base/js/views/feedback.js","novosales/assets/base/js/utils/lazysizes.js","novosales/assets/base/js/components/action_code_engine.js","novosales/assets/base/js/utils/formValidator.js","novosales/assets/base/js/components/cookies.js","novosales/assets/base/js/views/directorder.js","novosales/assets/base/js/components/contactform.js","novosales/assets/base/js/components/newsletter_form.js","novosales/assets/base/js/components/cart_change.js","novosales/assets/base/js/components/tracking_ga.js","novosales/assets/base/js/components/shopraffle.js","novosales/assets/base/js/components/exit_intent_layer.js","novosales/assets/base/js/components/paypal_payments.js","novosales/assets/base/js/components/suggestions.js","novosales/assets/base/js/components/progressive_webapp.js","novosales/assets/base/js/components/productlist_filter_sort_by_flyout.js","novosales/assets/base/js/components/generic_frontend_model.js","novosales/assets/base/js/components/productlist_filters_reset.js","novosales/assets/base/js/components/phone.js","novosales/assets/base/js/components/address_sugesstions.js","novosales/assets/base/js/components/pdf_viewer.js","novosales/assets/base/js/components/teaser/slider_teaser.js","novosales/assets/base/js/components/teaser/service.js","novosales/assets/base/js/components/teaser/brands_teaser.js","novosales/assets/base/js/components/teaser/recommendation_swipe.js","novosales/assets/base/libs/swipe.js","novosales/assets/base/libs/bootstrap-rating-input.min.js","novosales/assets/base/libs/jquery.maskedinput.js","novosales/assets/base/libs/consolelog.min.js","novosales/assets/base/libs/bootstrap.js","novosales/assets/base/libs/jquery.autocomplete.js","novosales/assets/base/libs/jquery.slimscroll.min.js","novosales/assets/base/libs/jquery.imagemapster.js","novosales/assets/base/libs/jquery.rwdImageMaps.js","novosales/assets/base/js/config/config.js","novosales/assets/base/js/components/loading.js","novosales/assets/base/js/components/cart_input.js","novosales/assets/base/js/utils/html5validation.js","novosales/assets/base/js/utils/scrollTo.js","novosales/assets/base/js/utils/tabstocollapse.js","novosales/assets/base/js/utils/slidercontrols.js","novosales/assets/base/js/utils/zoom.js","novosales/assets/base/js/utils/sliderlazyload.js","novosales/assets/base/js/utils/numberformats.js","novosales/assets/base/js/components/coupon.js","novosales/assets/base/js/utils/forms.js","novosales/assets/base/js/views/async_checkout.js","novosales/assets/base/js/components/password.js","novosales/assets/base/js/config/language.js","novosales/assets/base/js/components/offcanvas.js","novosales/assets/base/js/components/lazyscroll.js","novosales/assets/base/js/components/pagination.js","novosales/assets/base/js/utils/lazyload.js","novosales/assets/base/js/components/productlist_filters.js","novosales/assets/base/js/utils/sliderknobs.js","novosales/assets/base/js/views/affiliate.js","novosales/assets/base/js/utils/modalfns.js","novosales/assets/base/libs/smartresize.js","novosales/assets/base/libs/owlcarousel.js","novosales/assets/base/js/utils/urls.js","novosales/assets/base/libs/jquery.skidder.js","novosales/assets/base/js/utils/form_elements/plusminus.js","novosales/assets/base/libs/jquery.base64.js","novosales/assets/base/libs/jquery.panzoom.js","novosales/assets/base/libs/jquery.history.js","novosales/assets/base/js/components/seotags.js"],"names":["_app","require","_plugin","App","initialize","_jquery","PluginLoader","env","_classCallCheck","this","resolved","_len","arguments","length","args","Array","_key","fn","pop","define","deps","_this","resolvedDeps","map","dep","resolve","Promise","all","then","_this2","load","x","loadDependency","lookup","store","prom","log","s","console","loading","catch","err","reject","$","ajax","url","dataType","success","error","_","status","jquery","loader","window","_is_plugin","q","push","enqueue","bind","forEach","plugin","apply","_toConsumableArray","_pubsub","_enquire","_ads","_product","_account","_checkout","_cart","_general","_home","_specialcategory","_navi","_content","_referToAFriend","_raffle","_trackinghelper","_lazysizes","_brands_teaser","_slider_teaser","_service","_serviceTabScroll","_formValidator","_shopform","_feedback","_directorder","_action_code_engine","_cookies","_contactform","_newsletter_form","_tracking_ga","_cart_change","_shopraffle","_exit_intent_layer","_progressive_webapp","_recommendation_swipe","_paypal_payments","_suggestions","_productlist_filters_reset","_productlist_filter_sort_by_flyout","_generic_frontend_model","_phone","_address_sugesstions","_pdf_viewer","prototype","_jquery2","default","Ads","ReferToAFriend","ServiceTabScroll","Account","Cart","Checkout","Home","Product","Content","DirectOrder","ActionCodeEngine","ContactForm","NewsletterForm","PdfViewer","CartChange","ShopRaffle","RecommendationSwipe","SpecialCategory","PayPalPayments","Suggestions","Phone","AddressSuggestions","ProductListFilterSortByFlyout","InitFilterReset","Service","AcceptCookies","BrandsTeaser","SliderTeaser","General","Navi","Trackinghelper","Raffle","Feedback","Tracking_GA","ExitIntentLayer","ProgressiveWebApp","GenericFrontendModel","token","attr","header","ajaxPrefilter","options","originalOptions","jqXHR","setRequestHeader","Pubsub","publish","document","enquire","register","match","unmatch","e","undefined","n","type","nodeType","t","A","D","each","w","Callbacks","defineProperty","F","Object","cache","get","accepts","expando","Math","random","r","replace","O","toLowerCase","getAttribute","set","H","test","JSON","parse","queue","U","Y","V","activeElement","event","parent","isFunction","grep","G","filter","g","call","nodeName","ft","firstChild","getElementsByTagName","appendChild","ownerDocument","createElement","pt","at","exec","ht","removeAttribute","dt","hasData","a","u","o","access","extend","handle","events","i","l","add","L","mt","querySelectorAll","merge","wrapAll","it","checked","defaultValue","charAt","toUpperCase","slice","jt","At","css","contains","getComputedStyle","qt","style","display","Pt","wt","Ot","max","St","Ft","Lt","offsetWidth","offsetHeight","support","yt","boxSizing","Tt","boxSizingReliable","parseFloat","kt","Rt","vt","appendTo","documentElement","contentWindow","contentDocument","write","close","detach","remove","zt","isArray","Wt","_typeof","an","unshift","un","dataTypes","rn","ln","ajaxSettings","flatOptions","cn","shift","mimeType","getResponseHeader","converters","c","responseFields","dataFilter","split","f","state","ajaxSetup","script","setTimeout","vn","En","kn","concat","Sn","Cn","Deferred","always","elem","startTime","Nn","duration","tweens","notifyWith","resolveWith","opts","props","specialEasing","easing","originalProperties","createTween","stop","Tween","run","rejectWith","start","jn","fx","timer","anim","progress","done","complete","fail","camelCase","expand","cssHooks","Dn","p","h","d","m","unqueued","_queueHooks","empty","fire","overflow","overflowX","overflowY","bn","hide","hidden","show","end","An","constructor","Ln","height","width","slideDown","slideUp","isWindow","Height","Width","defaultView","location","jQuery","indexOf","toString","y","hasOwnProperty","v","trim","init","source","T","C","k","N","E","removeEventListener","S","ready","parseHTML","isPlainObject","find","context","parentNode","selector","toArray","makeArray","pushStack","prevObject","promise","first","eq","last","sort","splice","isReady","readyWait","holdReady","trigger","off","isNumeric","isNaN","isFinite","isEmptyObject","Error","buildFragment","parseJSON","parseXML","childNodes","DOMParser","parseFromString","noop","globalEval","text","head","removeChild","j","inArray","guid","proxy","_t2","now","Date","swap","readyState","addEventListener","J","ot","cacheLength","_e","ut","Q","getElementById","id","b","qsa","getElementsByClassName","gt","setAttribute","et","X","join","isXML","I","sourceIndex","nextSibling","ct","getAttributeNode","specified","value","st","z","matches","dir","xt","bt","Ct","relative","_u","TAG","uniqueSort","compile","nt","needsContext","tt","pseudos","nth","Nt","R","M","W","B","RegExp","ID","CLASS","ATTR","PSEUDO","CHILD","boolean","P","K","Z","String","fromCharCode","rt","setDocument","createComment","attributes","className","sortDetached","compareDocumentPosition","getById","getElementsByName","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","lt","attrHandle","detectDuplicates","sortStable","getText","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","preFilter","setFilters","not","has","innerText","lang","target","root","hash","focus","enabled","hasFocus","href","tabIndex","disabled","selected","selectedIndex","input","button","even","odd","radio","checkbox","file","password","image","submit","reset","expr","unique","isXMLDoc","once","memory","stopOnFalse","disable","lock","locked","fireWith","fired","notify","pipe","when","createDocumentFragment","checkOn","optSelected","reliableMarginRight","pixelPosition","noCloneChecked","cloneNode","optDisabled","radioValue","checkClone","lastChild","focusinBubbles","backgroundClip","clearCloneStyle","cssText","zoom","top","marginRight","uid","key","defineProperties","discard","acceptData","data","removeData","_data","_removeData","name","substring","dequeue","cur","delay","speeds","clearTimeout","clearQueue","removeAttr","prop","removeProp","propFix","addClass","removeClass","toggleClass","hasClass","val","valHooks","select","attrHooks","for","class","propHooks","hasAttribute","global","handler","triggered","dispatch","special","delegateType","bindType","origType","namespace","delegateCount","setup","teardown","removeEvent","noBubble","Event","isTrigger","namespace_re","result","isPropagationStopped","parentWindow","isDefaultPrevented","_default","preventDefault","fix","handlers","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","handleObj","stopPropagation","postDispatch","index","fixHooks","keyHooks","mouseHooks","which","charCode","keyCode","pageX","clientX","body","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","blur","click","beforeunload","originalEvent","simulate","returnValue","isSimulated","defaultPrevented","getPreventDefault","timeStamp","stopImmediatePropagation","mouseleave","on","one","triggerHandler","children","contents","next","prev","is","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","sibling","reverse","thead","tr","td","optgroup","option","tbody","tfoot","colgroup","caption","col","th","append","createTextNode","domManip","prepend","insertBefore","before","after","cleanData","clone","html","replaceWith","src","_evalUrl","prependTo","insertAfter","replaceAll","async","firstElementChild","wrapInner","wrap","unwrap","BODY","position","Et","letterSpacing","fontWeight","toggle","opacity","cssNumber","lineHeight","orphans","widows","zIndex","cssProps","float","Dt","getPropertyValue","Ht","minWidth","maxWidth","filters","margin","padding","border","Mt","$t","Bt","It","serialize","serializeArray","param","traditional","mouseenter","unbind","delegate","undelegate","_t","Ut","Yt","Vt","Gt","Jt","Qt","Kt","Zt","en","tn","nn","Xt","sn","responseText","etag","isLocal","processData","contentType","*","xml","json","* text","text html","text json","text xml","ajaxTransport","ifModified","lastModified","statusText","statusCode","active","getAllResponseHeaders","overrideMimeType","abort","method","crossDomain","hasContent","headers","beforeSend","timeout","send","getJSON","getScript","text script","charset","_n","hn","jsonpCallback","jsonp","pn","xhr","XMLHttpRequest","gn","mn","0","1223","yn","ActiveXObject","cors","dn","_t3","xhrFields","open","username","onload","onerror","wn","Tn","unit","step","animate","speed","finish","timers","slideToggle","fadeIn","fadeOut","fadeToggle","old","linear","swing","cos","tick","interval","xn","setInterval","clearInterval","slow","fast","animated","offset","setOffset","getBoundingClientRect","qn","pageYOffset","left","pageXOffset","using","offsetParent","scrollTo","content","","size","andSelf","module","exports","amd","factory","PubSub","throwException","ex","callSubscriberWithDelayedExceptions","subscriber","message","callSubscriberWithImmediateExceptions","deliverMessage","originalMessage","matchedMessage","immediateExceptions","subscribers","messages","callSubscriber","func","createDeliveryFunction","topic","lastIndexOf","substr","messageHasSubscribers","found","sync","deliver","hasSubscribers","lastUid","publishSync","subscribe","unsubscribe","tokenOrFunction","isToken","succesfulReturnValue","matchMedia","deferSetup","query","isUnconditional","addListener","mql","listener","assess","queries","browserIsIncapable","initialised","destroy","equals","addHandler","removeHandler","clear","removeListener","unregister","attach","responsive","cart_input","CartInput","notepad_input","Loading","_cart_input","_config","_loading","_html5validation","_scrollTo","msg","element","html5validation","Html5Validation","addValidationHandler","validateOnSubmit","initGallery","s7jsonResponse","reqId","parseInt","thumbsCallback","URL","searchParams","_scrollTo2","modal","config","productReminderModalPath","showForm","form","errors","validateOnAjaxSubmit","submitForm","openReviews","collapse","$this","loadCount","initialCount","$reviewsToHide","markup","count","jqXhr","initPanelSliders","tab","plusminus","submitReview","post","amountChangePath","newContent","trackinghelper","TrackingHelper","$element","category","action","variationChangePath","jsonData","update","last_msg","prodId","revId","ratingid","productNo","wasHelpful","productReviewHelpfulUrl","resultJson","textStatus","errorThrown","itemId","productReminderFormPath","$form","productReminderSubmitPath","determineVariation","forwardPath","initialItemId","itemIdString","itemIdStart","indexOfAnd","catalogIndex","catalogIndexParam","jxXhr","cssShowGalleryClasses","$htmlData","markupTop","visibility","updateTitle","markupFeatures","gallery_swipe","markupBottom","possibleAlternatives","makeGallery","Swipe","callback","continuous","startSlide","activeADSImage","knobs","classes","setVoting","rating","total","mobileMarkup","modalSwipe","kill","pair","controls","lazy","errorsMarkup","obj","on_off","removeSwipes","ttcol","el","mainSwipe","addThumbsClick","transitionEnd","slide","theModal","pos","thumb_swipe","floor","_initTabSwipes","res","swipes","pinchStart","pinchEnd","reviews","coupon","Coupon","_async_checkout2","_mask","_forms","_numberformats","_coupon","_async_checkout","_password","addressSuggestions","_password2","mask","isChecked","validator","forms","Validator","validate","showError","callCarrierService","zipCode","carrierService","change","city","affix","cfg","saferpayPaymentPageInitializeUrl","shipping","newAddressPath","address_type","checkoutShippingNewAddressChangeUrl","checkoutInvoiceAddressChangeUrl","checkoutShipping","submitFormInvoice","checkoutShippingExistingAddressChangeUrl","reload","isValid","submitFormShipping","alreadyOpened","checkOptions","addressValue","paymentValue","deliveryValue","delivery_types","addressType","deliveryType","arrayIntersect","paymentType","disableInputs","payment_types","address_types","valid_array","isAddress","setInputDisabled","$input","a1","a2","verifyBirthdate","d_int","m_int","y_int","date","newDate","getDate","getMonth","getFullYear","orgDate","toDay","date18","correctSliders","hw","yesToggles","onchange","_language","showSpecialCategoryOverlay","specialCategoryUrl","specialCategoryOverlayHasShown","emptyModal","removeCountrySwitch","countryOverlay","isEmptyElement","shopCountry","isShopCountryEqualsLanguage","language","resxs","offcanvas","Offcanvas","ProductListFilters","_productlist_filters","_offcanvas","_pagination","_lazyscroll","lazyScroll","LazyScroll","toggleBtnFilter","toggleBtnSortBy","sq","s24_widget","app_id","widget_id","search_query","pagination","container","isxs","switchIt","enableRange","enable","mousedown","auto","swipe","hover","_consolelog","encodeURIComponent","requestUrl","userBasketInteractionDirectProductAddPath","response","custChoiceContent","alertMsg","inputVal","sizeName","escape","voucherFrom","formData","voucherCodeUrl","voucherRemoveFrom","voucherCodeRemoveUrl","_consolelog2","wishlistPopup","togglePopupVisibility","targetIndex","cartPopupVisibility","dataset","self","resizeHandler","hoverTimer","heightTimeout","__this","updateFlyout","showFlyout","setFlyoutImage","showFlyoutSub","hideFlyout","menu_level","goBack","$backBtn","offsetMenuEntry","leftOffsetNaviContent","naviContentWidth","mainNavRightEnd","_affiliate","verifyCountry","mcsCountry","optionCountry","country","escapeRegExChars","rwdImageMaps","fillcolor","strokecolor","wrapper","mapster","mapKey","fillColor","fillOpacity","stroke","strokeColor","strokeOpacity","strokeWidth","clickNavigate","staticState","productid","onlyRemove","popoverProductId","popover","shopLookUrl","elm","popOverContent","popoverHeight","popoverWidth","placement","productId","lastSeenRemoveProductUrl","closeSoftLogin","removeCountrySwitchOverlay","loadBasketPositionList","basketGetPath","clearBasketPositions","clearBasketPositionsPath","navigator","languages","userLanguage","basketOverlay","promoOverlay","trackingData","eventCategory","eventAction","eventLabel","genericFrontendModel","modalName","subscribeNewsletterUrl","userAgent","tels","addClasses","Affiliate","openHash","onhashchange","agbModalUrl","serviceAndShippingModalUrl","privacyModalUrl","measureScrollBar","scrollDiv","scrollbarWidth","clientWidth","clientHeight","innerHeight","gaProperty","trackingID","disableStr","cookie","autocomplete","maxHeight","minChars","serviceUrl","paramName","containerClass","transformResult","jsonResponse","suggestions","topLevelCategorySuggestions","topSearchSuggestions","categorySuggestions","productSuggestions","topArticleSuggestions","dataItem","title","categoryName","link","imageLink","brand","product","topArticle","categoryEncodedPath","onSearchComplete","ui","formatResult","suggestion","currentValue","pattern","conf","fallbackImgLink","assetsUrl","errorLink","onSelect","headline","onoff","search_form","regex","_i","setBrowserCookie","days","expires","setTime","getTime","toGMTString","_modalfns","openModal","referToAFriendModalUrl","referToAFriendFormUrl","scrollToError","referToAFriendSubmitUrl","assign","ModalFns","getTrackingCode","et_tracking_id","page","wrapperProductList","pagename","wrapPageTarget","lpage","wrapLandingPage","nm_et_eC_Wrapper_catch","et_eC_Wrapper","clickEvent","ET_Event","eventStart","et_pagename","landingPage","et_pagename_wrapper_noescape","wrapPage","et_areas_wrapper_noescape","et_ilevel_noescape","et_url_wrapper_noescape","et_target_wrapper_noescape","et_tval_noescape","et_tonr_noescape","et_tsale_noescape","et_cust_noescape","et_basket_noescape","et_lpage_noescape","et_tag_noescape","overlayName","slimScroll","raffleBaseUrl","raffleId","startRaffle","rafflePage","rebindClicks","continueRaffle","textarea","displayTermsAndConditionsPage","terms","displayStaticPagePostHandle","displayPrivacyPolicyPage","privacy","displayPrizeDescriptionPage","prize","displayRaffleDescriptionPage","description","staticpage","lastPage","returnToRaffle","submitAddress","addMoreRecipients","newRowTemplate","newRow","submitRecommendations","bindClick","initialized","showRaffle","validateForm","$errorTip","$formControl","outerHeight","$label","installValidator","hideErrorTip","formID","actuallySubmit","alert","resultRedirect","resultStatus","$resultMessage","resultMessage","feedbackModalUrl","feedbackFormUrl","feedbackSubmitUrl","lazySizes","lazysizes","lazySizesCfg","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","noSupport","docElem","supportPicture","HTMLPictureElement","_addEventListener","_getAttribute","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","ele","cls","reg","addRemoveLoadEvents","dom","evt","triggerEvent","detail","noBubbles","noCancelable","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","full","polyfill","picturefill","pf","reevaluate","elements","getCSS","getWidth","_lazysizesWidth","rAF","running","waiting","firstFns","secondFns","fns","runFns","rafBatch","_lsFlush","rAFIt","simple","that","throttle","lastTime","gDelay","rICTimeout","idleCallback","isPriority","debounce","timestamp","wait","later","preloadElems","isCompleted","resetPreloadingTimer","started","eLvW","elvH","eLtop","eLleft","eLright","eLbottom","isBodyHidden","regImg","regIframe","supportScroll","shrinkExpand","currentExpand","isLoading","lowRuns","resetPreloading","isVisible","isNestedVisible","elemExpand","outerRect","visible","right","bottom","checkElements","eLlen","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","_defEx","innerWidth","preloadAfterLoad","throttledCheckElements","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","changeIframeSrc","handleSources","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","isLoaded","naturalWidth","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","persisted","loadingElements","img","MutationObserver","observe","childList","subtree","checkElems","unveil","_aLSL","autosizesElems","sizeElement","sources","len","dataAttr","getSizeElement","updateElementsSizes","debouncedUpdateElementsSizes","uP","aC","rC","hC","gW","actionCodeUrls","editBenefits","applyBenefits","hideContainer","rejectAttainBenefit","unchooseItem","item","maxSelectionValidation","saveActionCode","saveVoucherCode","showContainer","showAuto","showSelectable","showAttainable","pageLoad","automContainer","selectContainer","attainContainer","errorContainer","selectable","attainable","addArticle","discountOnly","updatePositionList","checkZeroBasketValue","basketCheckZeroValue","basketUpdateValue","resultHtml","headerButtons","errorMsg","modify","getBenefits","selectedBenefits","notSelectedBenefits","basketBenefits","selectedBenefitsList","itemsInBasket","postData","itemType","amount","variationId","stringify","unchoose","selectedCheckboxes","FormValidator","required","min","Number","MAX_VALUE","ref","restrictions","restriction","restrictionParts","errorMessages","optional","text.empty","text.exact","text.length","choice.empty","email.at","email.domain","phone.illegalchar","phone.onlyOne","password.repeat","showErrorTip","msgKey","errorOffsetBottom","validateComboBox","validateEmail","validatePhone","validateText","validatePassword","$selected","indexOfAt","indexOfDot","validChars","accepteCookies","cookieEnabled","openSecondLayer","acceptAllCookies","rejectAllCookies","confirm","releaseSpecialCategoryPopup","field","getCookie","sessionStorage","getItem","setItem","referrer","showConsentLayer","setCookieFullConsent","closeAndTrackConsentLayer","triggerCookie","manageRejectionStatistics","reloadAfterConsent","consentLayerModalUrl","popupContent","loadConsent","setCookieDefaultConsent","setConsentOption","groupName","cookieValue","choosed","includes","isChoiceStatistics","isChoicePersonalization","isChoiceMarketing","newConsent","nameEQ","ca","setCookie","confirmedByUser","consentPart","toISOString","currentURL","theReferrer","URLSearchParams","search","delimiter","keys","alreadyFlagged","article","itemIdSelector","itemid","firstEmptyField","inputFieldSelector","personalText","lineIndex","posIndex","editArticle","qty","previousItemId","EmailSubmit","emailSubmit","hasErrors","defaultMessage","switchOffLayer","newsletterOptOutTrackingModal","newsletterOptOutTrackingInformation","newsletterOptOutTrackingFeedback","csrfToken","fetch","Content-Type","Accept","X-Requested-With","X-CSRF-TOKEN","email","trackingConsent","credentials","ok","_urls","Urls","cart_product","cart_edit","params","free","personalTextHash","make","basketEditPath","$data","amount_change","newItemId","basketEditSubmitPath","tracking_GA","product_list_click","submit_pageview","track_event","techId","promoItem","teaser_collection","tId","promo_click","tracking_group","tracking_id","isNonInteractive","eventNonInteractive","collect_teaser","submit_promotionview","position_index","list","productList","post_to_backend","listClickUrl","replaceGclidWithConnexity","pageName","cnxclidValue","path","pathname","gaParams","endTime","performance","timing","domContentLoadedEventEnd","navigationStart","loadTime","pageViewData","pageTitle","consentCookieExists","targetUrl","trackingElement","trackparams","_a","teaser_position","promoJSON","creative","promotionViewData","promotion","promoId","promoName","promoCreative","promoPosition","pubSubCall","trackingUrl","trackEventUrl","from","back","querySelector","classList","everything_correct","maxLength","info","customBtn","realFileBtn","FileReader","File","FileList","Blob","files","setLayerBlocked","tolerance","left_exit","top_exit","right_exit","bottom_exit","is_element","showExitIntentLayer","email_address","salutationcode","firstname","lastname","salutation","subscriptionSource","specialCategoryRegistration","successful","re","otherLayersHavePriority","content_general","content_themodal","isConsentCookie","isLayerBlocked","exitIntentLayerModalUrl","matchesBlockURL","blockPatterns","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","return","blockedAfterSingleOccurence","blockedByURL","getPaymentDataAndProceed","ajaxUrl","payPalPaymentDataUrl","paypal_data","payPalClientData","processPayPal","payPalErrors","payPalCheckoutInit","initPaymentAndProceedWithFunction","payPalCheckoutFunction","localPaymentInit","clientToken","braintreeClientToken","braintree","client","create","authorization","clientErr","clientInstance","dataCollector","paypal","dataCollectorInstance","deviceData","localPayment","merchantAccountId","payPalMerchantAccountId","localPaymentErr","paymentInstance","localPaymentInstance","processPaymentTypeFn","payPalInitPaymentUrl","paypalCheckout","paypalCheckoutErr","paypalCheckoutInstance","Button","render","payPalEnv","locale","payPalLocale","buttonStyle","color","shape","label","payment","createPayment","flow","totalAmount","currency","enableShippingAddress","shippingAddressEditable","shippingAddressOverride","recipientName","shippingAddress","firstName","line1","street","streetNumber","countryCode","postalCode","onAuthorize","actions","tokenizePayment","payload","savePaymentAndRedirect","nonce","onCancel","onError","savePaymentId","paymentId","paymentNonce","savePayPalDataUrl","redirectUrl","$flyout","$headerflyout","$noresultsflyout","ProgressiveWebAppLayer","debugMode","pwaAlreadyInstalled","debugMessage","browserIsPWACapable","resetPWA","pwaModeActive","standalone","trackBrowserMode","localStorage","maxAge","trackInstalledEvent","setNoPwaCookie","pwaOffer","PWAOffer","ButtonInstallPWA","ButtonNoPWA","installButton","installPrompt","pwaAppleShareDialog","pwaCloseButton","performReloadWithPWAParam","isIOS","handleIOS","reloadExecuted","prompt","userChoice","choiceResult","outcome","switchOffPWA","finally","showModal","newUrl","currentUrl","parameter","pwaActive","browserModeLabel","waitingDaysForNewOffer","cookieWaitingTime","cookies","supportsServiceWorkers","supportsBeforeInstallPrompt","supportsManifest","supportsPWA","checkForIOS","vendor","opera","platform","MSStream","maxTouchPoints","isFirefoxBrowser","control","markedTarget","targetType","istype","contact_form","contact","contactModel","cancellation_form","cancellation","cancellationModel","model","lastName","apartment","deliveryPoint","addressAddition","phone","mobilePhone","ordernumber","resetPriceFilters","triggerPriceChange","resettarget","phoneVal","newPhoneVal","submitRegister","addressSuggestion","choosenSuggest","addressForm","addressSuggestionArea","currentStreet","currentZipCode","currentCity","currentCountry","addressSuggestionsFormUrl","pdfLastFocusedElement","pdfUrl","pdf","pdfTitle","pdfDialog","pdfFrame","pdfDialogTitle","pdfFallbackLink","pdfCloseBtn","tagName","newFrame","replaceChild","pdfViewerBound","clickedInDialog","initSlider","$slideshow","skidder","slideClass","animationType","scaleSlides","paging","autoPaging","pagingWrapper","pagingElement","swiping","leftaligned","cycle","jumpback","autoplay","autoplayResume","transition","afterSliding","afterInit","smartresize","openServiceHash","$nextPanel","$firstPanel","_owlcarousel","owlCarousel","items","itemsDesktop","itemsDesktopSmall","itemsTablet","itemsMobile","navigation","slideSpeed","rewindSpeed","autoPlay","stopOnHover","scrollPerPage","recoSwipeItem","desktopNumber","mobileNumber","initializeRecoSwipe","swipePairXs","swipePairSm","swipePairDefault","recoSwipe","addSizeClasses","colNumber","colCase","__browserify_shim_require__","browserify_shim__define__module__export__","ell","saved_markup","new_slides","new_el","modified","slides","browser","transitions","twoIs","move","getIndex","_prev","_slide","_next","circle","to","natural_direction","direction","slidePos","diff","abs","offloadFn","dist","translate","webkitTransform","msTransform","MozTransform","OTransform","isActive","begin","isIE","msPointerEnabled","touch","DocumentTouch","temp","handleEvent","touches","time","delta","_start","isScrolling","isValidSlide","isPastBounds","_setup","onresize","getPos","getNumSlides","Zepto","inline","iconLib","readonly","clearable","clearableLabel","copyClasses","clearableIcon","VERSION","DEFAULTS","activeIcon","inactiveIcon","clearableRemain","setValue","$el","highlight","updateInput","Constructor","getPasteEvent","pasteEventName","caretTimeoutId","android","ua","definitions","9","dataName","placeholder","range","caret","setSelectionRange","createTextRange","moveEnd","moveStart","selection","createRange","defs","tests","settings","partialPosition","firstNonMaskPos","seekNext","seekPrev","buffer","writeBuffer","shiftR","iPhone","clearBuffer","shiftL","checkVal","focusText","keypressEvent","ctrlKey","altKey","metaKey","completed","allow","lastMatch","moveCaret","keydownEvent","Function","collapsed","namespaceURI","Image","protocol","HTMLElement","Node","history","group","groupCollapsed","lineNumber","fileName","stack","detailPrint","needsDetailPrint","groupEnd","transEndEventNames","WebkitTransition","MozTransition","emulateTransitionEnd","called","dismiss","Alert","$parent","removeElement","noConflict","$btn","Carousel","paused","pause","sliding","$active","$items","activeIndex","isCycling","fallback","$next","$indicators","$nextIndicator","getActiveIndex","carousel","$target","slideIndex","$carousel","Collapse","transitioning","dimension","startEvent","actives","scrollSize","backdrop","Dropdown","clearMenus","keydown","getParent","dropdown","Modal","$backdrop","isShown","remote","_relatedTarget","relatedTarget","enforceFocus","hideModal","keyboard","removeBackdrop","doAnimate","Tooltip","hoverState","template","triggers","eventIn","eventOut","enter","getDefaults","_options","fixTitle","defaults","leave","autoPlace","autoToken","$tip","actualWidth","actualHeight","orgPlacement","docScroll","parentHeight","parentLeft","parentWidth","calculatedOffset","getCalculatedOffset","applyPlacement","marginTop","marginLeft","replaceArrow","setContent","tip","getTitle","$e","arrow","$arrow","tooltip","Popover","getContent","process","ScrollSpy","$scrollElement","offsets","targets","activeTarget","refresh","offsetMethod","$targets","$body","$href","maxScroll","scrollHeight","activate","scrollspy","$spy","Tab","$ul","previous","Affix","affixed","checkPosition","checkPositionWithEventLoop","unpin","RESET","$window","offsetTop","offsetBottom","utils","autoSelectFirst","deferRequestBy","Autocomplete","noCache","onSearchStart","onSearchError","tabDisabled","currentRequest","lookupFilter","originalQuery","queryLowerCase","badQueries","intervalId","cachedResponse","onChangeInterval","onChange","suggestionsContainer","hintValue","createNode","div","RETURN","LEFT","UP","RIGHT","DOWN","killerFn","disableKillerFn","killSuggestions","fixPosition","fixPositionCapture","onKeyPress","onKeyUp","onBlur","setOptions","verifySuggestionsFormat","max-height","clearCache","enableKillerFn","stopKillSuggestions","isCursorAtEnd","selectionStart","valLength","ESC","hint","onHint","selectHint","TAB","moveDown","findBestHint","onValueChange","getQuery","getSuggestions","parts","getSuggestionsLocal","isBadQuery","processResponse","signalHint","suggest","classSelected","bestMatch","foundMatch","activeItem","moveUp","adjustScroll","heightDelta","lowerBound","upperBound","getValue","onSelectCallback","dataKey","inputElement","distance","alwaysVisible","disableFadeOut","railVisible","railColor","railOpacity","railDraggable","railClass","barClass","wrapperClass","allowPageScroll","wheelStep","touchScrollStep","borderRadius","railBorderRadius","wheelDelta","srcTarget","srcElement","ceil","scrollBy","WebkitBorderRadius","border-radius","background","BorderRadius","MozBorderRadius","currTop","slimscroll","attachEvent","nextValue","undef","rejected","freeze","reason","errback","promiseOrValue","defer","progback","_then","_progress","deferred","listeners","progressHandlers","resolver","isPromise","progressHandler","trustedPromise","some","promisesOrValues","howMany","checkCallbacks","rejecter","handleProgress","toResolve","results","ret","_reduce","reduceIntoArray","current","any","unwrapSingleResult","mapFunc","array","_map","reduce","reduceFunc","initialValue","reduceArray","chain","resolveValue","useResolveValue","arrayOfCallbacks","arg","alwaysback","otherwise","arr","reduced","TypeError","mapster_when","impl","version","render_defaults","isSelectable","isDeselectable","fade","fadeDuration","fill","fillColorMask","includeKeys","altImage","altImageId","altImages","wrapClass","wrapCss","onGetList","sortList","listenToList","mapValue","singleSelect","listKey","listSelectedAttribute","listSelectedClass","onClick","onMouseover","onMouseout","mouseoutDelay","onStateChange","boundList","onConfigured","configTimeout","noHrefIsMask","scaleMap","safeLoad","areas","shared_defaults","render_highlight","render_select","area_defaults","isMask","canvas_style","hasCanvas","isTouch","map_cache","hooks","addHook","callHooks","subclass","BaseClass","constr","Subclass","me","base","asArray","cb","updateProps","_target","_template","onlyProps","isElement","indexOfProp","boolOrDefault","def","isBool","isUndef","ifFunction","raw","imgWidth","naturalHeight","imgHeight","setOpacity","fader","lastKey","fade_func","op","endOp","cbIntervals","getBoundList","key_list","setBoundListProperties","getMapDataIndex","getMapData","queueCommand","map_data","command","currentAction","commands","unload","ap","capProp","jqwidth","Method","func_map","func_area","output","allowAsync","go","ar","area_list","getData","hasVml","behavior","adj","namespaces","g_vml_","getContext","merge_areas","map_areas","getDataForKey","merge_options","temp_opts","area_options","addMap","removeMap","md","getSelected","isSelected","defaultReturn","highlightId","ensureNoHighlight","addUniqueKeys","ad","keyList","getKeysForGroup","getDataForArea","deselect","setSelection","addArea","finishSetForMap","removeSelectionFinish","lastMap","preserveState","clearEvents","clearMapData","rebind","configureOptions","bindImages","buildDataset","get_options","effective","eff","effectiveOptions","set_options","graphics","snapshot","base_canvas","createVisibleCanvas","usemap","MapData","useCanvas","shapes","createStyleSheet","addRule","ontouchstart","eval","addShapeGroupImpl","areaData","nohref","addShape","hex_to_decimal","hex","css3color","canvasMethods","vmlMethods","Graphics","canvas","masks","elementName","mapArea","addto","mapData","createCanvasFor","addShapeGroup","mode","effectiveRenderOptions","areaId","overlay_canvas","renderShape","coords","moveTo","lineTo","arc","PI","addAltImage","beginPath","closePath","clip","globalAlpha","altImageOpacity","drawImage","owner","scaleInfo","maskCanvas","maskContext","hasMasks","shapeCanvas","shapeContext","clearRect","save","lineWidth","fillStyle","restore","images","strokeStyle","globalCompositeOperation","clearHighlight","refreshSelections","canvas_temp","redrawSelections","cssclass","t_fill","el_name","el_class","removeSelections","area_id","MapImages","_add","ids","imageLoaded","imageLoadError","retry","triesLeft","check","imgTimeout","initializeDefaults","mapAreas","_xref","currentAreaId","_tooltip_events","activeAreaEvent","getOptionImages","configureAltImages","mi","i2","e2","queueMouseEvent","area","cbFinal","mouseover","arData","getAllDataForArea","isNotRendered","clearEffects","showToolTip","toolTip","mouseout","newArea","toolTipClose","activeToolTip","clearToolTip","clickArea","areaOpts","canChangeState","newSelectionState","list_target","cbResult","listTarget","imgCssText","resizing","zoomed","zoomedArea","wrapId","_idFromKey","atMost","isPrimary","getPrimaryKeysForMapAreas","changeState","setHighlightId","clearSelections","setAreaOptions","drawSelections","key_arr","drawSelection","isSelectedOrStatic","imgCopy","parentId","sort_func","sorted_list","scale","processCommandQueue","addAreaData","AreaData","sel","$area","curKey","mapAreaId","group_value","default_group","configure","MapArea","areaDataXref","areasXref","_clearCanvases","clearTooltip","optsCache","partial","constuctor","allOpts","state_type","areaEl","originalCoords","areaCorners","minX","minY","maxX","maxY","bestMinX","bestMaxX","bestMinY","bestMaxY","curX","curY","nest","rootx","rooty","iCoords","radius","angle","offsetx","offsety","sin","getScaleInfo","actual","pct","scalePct","realWidth","realHeight","ratio","imageRaw","vis","resize","sizeCanvas","cleanupAndNotify","finishResize","tempOptions","resizeMapData","newsize","promises","els","round","percent","coordOffset","newCoords","createToolTip","showToolTipImpl","tooltipCss","actalOpacity","zindex","bindToolTipClose","bindOption","beforeClose","onClose","event_name","object","corners","ttopts","outerWidth","getHtmlFromOptions","toolTipContainer","toolTipFade","onShowToolTip","onHideToolTip","activeToolTipID","closeOpts","tipClosed","closeEvents","areaOptions","$img","rwdImageMap","$that","attrW","attrH","wPercent","hPercent","coordsPercent","_is_config","popoverSelector","hideCart","popEl","inXS","popoverTitle","showValidationErrorMessage","errorField","validateField","inputField","validity","inputFieldIsVisible","inputFieldName","startsWith","valueMissing","matchingElement","hasMatchingError","matchingElementValue","valid","$matchingElement","typeMismatch","patternMismatch","tooLong","tooShort","rangeUnderflow","rangeOverflow","stepMismatch","badInput","customError","noError","fieldHasNoError","scrollToElement","Ttcol","coll","active_ref","matched","Controls","slider","numSlides","checkActive","originalCallback","continous","Zoom","_jquery3","isMobile","openFullscreen","out","localPoint","current_img","bigPoint","centered_left","current_img_size","current_big_img_size","centered_top","rect_x","rect_y","current_big_img","checkBounds","inside","fill_css","pad","loadImg","imgLoaded","hoverE","zoom_rect","nr","cnt","showOrHideFullscreenArrows","panzoom","contain","minScale","maxScale","closeFullscreen","prevFullscreen","getSelection","removeAllRanges","nextFullscreen","numberOfImages","showLeft","showRight","isNotZoomed","keyup","fullscreen","Lazy","loadImageAtPos","slideWidth","slideHeight","parseMonetaryAmount","formatMonetaryAmount","ma","symbol","cent","formatPercentage","num","frac","couponPath","code","task","couponEnter","use","Methods","methods","setElements","formElements","validateElement","submitListener","checkable","getLength","dateISO","number","digits","creditcard","nCheck","nDigit","bEven","cDigit","minlength","maxlength","rangelength","findByName","noerror","_ok","keepError","agerange","jsDateString","age","getAge","str","pieces","dateString","today","birthDate","indexPickUpPoint","shippingUrls","setPickUpPoint","setAddressType","setDeliveryType","paymentUrl","showOrHidePassword","showOrHidePasswordLogin","pw","showOrHidePasswordRegister","pw1","xssidebarclass","sidebarselector","xssidebarselector","xssidebarselectorcontainer","activatePage","selectSidebar","deactivatePage","containerSelector","elementSelector","windowHeight","windowWidth","scrollPos","containerTop","loadit","swipeCallbackClosure","lazyload","pageFromScroll","scroll","pages","gridItem","$currentSwipe","$a","Pagination","$container","base64","decode","_seotags","updateSeoRelTags","updateMetaRobotsCategory","updateCanonicalUrl","contentSelector","activePage","createLoadDataOnHistoryChangeFunction","History","getState","preattach","in_ids","Adapter","resetInputs","$inputs","getPageSizeId","pageSizeId","_history","pageSizeHeader","pageSizeFooter","reloadSort","inputName","bs_events","filter_form","price_changed","reloadUrl","pushState","Knobs","knobWrapper","affiliateOn","affiliatePath","showAffiliate","scrollToTop","sr","threshold","execAsap","delayed","userOptions","loadContent","$elem","jsonSuccess","owl","logIn","jsonPath","orignalItems","wrapperWidth","checkVisible","setVars","baseClass","itemsAmount","wrapItems","$owlItems","$owlWrapper","playDirection","prevItem","prevArr","currentItem","customEvents","onStartup","calculateAll","buildControls","updateControls","moveEvents","owlStatus","transitionStyle","watchVisibility","eachMoveUpdate","lazyLoad","autoHeight","onVisibleItems","afterAction","beforeUpdate","updateItems","updatePosition","afterUpdate","autoPlayInterval","wrapperOuter","hasThemeClass","hasBaseClass","theme","singleItem","itemsTabletSmall","responsiveBaseWidth","itemsCustom","itemsScaleUp","lastWindowWidth","smallDelay","responsiveRefreshRate","updateVars","resizer","checkAp","jumpTo","appendItemsSizes","lastItem","itemWidth","appendWrapperSizes","calculateWidth","maximumItem","maximum","maximumPixels","loops","roundPageNum","elWidth","pagesInArray","positionsInArray","owlControls","buildPagination","buildButtons","buttonsWrapper","buttonPrev","buttonNext","navigationText","paginationWrapper","goTo","updatePagination","paginationButton","paginationButtonInner","counter","checkPagination","checkNavigation","rewindNav","isTransition","goToPixel","support3d","transition3d","swapSpeed","css2slide","singleItemTransition","afterGo","isCss3Finish","paginationSpeed","beforeMove","afterMove","apStatus","play","addCssSpeed","-webkit-transition","-moz-transition","-o-transition","removeTransition","doTranslate","pixels","-webkit-transform","-moz-transform","-o-transform","-ms-transform","css2move","isCssFinish","checkBrowser","tempElem","asSupport","translate3D","msMaxTouchPoints","disabledEvents","mouseDrag","touchDrag","gestures","ev_types","types","locals","dragMove","dragEnd","ev","dragBeforeAnimFinish","newPosX","relativePos","offsetX","getTouches","offsetY","swapEvents","targetElement","maxSwipe","newPosY","startDragging","dragging","newRelativeX","minSwipe","owlStopEvent","dragDirection","getNewPosition","baseElWidth","dargging","dragStart","newPosition","closestItem","goal","moveDirection","hoverStatus","$item","$lazyImg","follow","itemNumber","lazyFollow","lazyPreload","isBackgroundImg","lazyEffect","afterLazyLoad","showImage","iterations","completeImg","checkLazyImage","addHeight","$currentimg","checkImage","naturalWidthType","visibleItems","addClassActive","transitionTypes","inClass","transStyles","prevPos","$currentItem","$prevItem","origin","animEnd","-webkit-transform-origin","-moz-perspective-origin","perspective-origin","clearTransStyle","outClass","endPrev","endCurrent","classToRemove","baseElement","userItems","owlItems","unWrap","$userItems","reinit","newOptions","addItem","htmlString","targetPosition","removeItem","paginationNumbers","connector","cancelAnimationFrame","vendors","timeToCall","currTime","Skidder","touchdevice","$viewport","$wrapper","$clickwrappers","$touchwrapper","data-direction","$pager","refreshImages","$images","newMaxHeight","setSlideshowHeight","$slides","centerPosition","autoplaying","slideshowHeight","scalefactor","spaceSlides","margin-left","margin-right","scaleTo","margin-top","preservePortrait","leftPosition","currentactiveindex","preloadSlides","$activeslide","$pagerdots","slidesTotalWidth","refreshSlides","applyWrapperSlideTransition","addLeftAndRightClasses","addEventHandlers","speedstring","clickHandlerPaging","clickHandlerLeftRight","removeEventHandlers","swipeHandler","touchinterval","diffX","initialX","initialY","touchtime","removeWrapperSlideTransition","changedTouches","finalY","totaldiffY","totaldiffX","finalX","$activedot","transitionWrapper","jumpsize","$toSlide","$fromSlide","activeindex","jumpindex","scrollWrapper","dragoffset","easingfunction","fadeWrapper","touchoffset","$disengagingSlide","xoffset","callbackfunction","$slidestomove","directionClasses","reorderDOM","leftmargin","afterResize","stopAutoplay","supportsTransitions","arguments1","noScaleClass","easeOutSkidder","$minNumber","$maxNumber","add_value","current_value","new_value","minNumber","maxNumber","alpha","beta","w1","w2","bitsInBuffer","charCodeAt","tmp","b64","a256","r64","r256","UTF8","encode","strUni","strUtf","cc","Plugin","btoa","plain","utf8encode","atob","coded","utf8decode","matrixEquals","second","createResetOptions","Matrix","Vector","Panzoom","datakey","$set","$doc","isSVG","rsvg","panning","_buildTransform","_transform","transform","rupper","_buildTransition","resetDimensions","$empty","hook","PointerEvent","mouseProps","pointertouch","pointerEvents","rinline","floating","commaSpace","rmatrix","matrix","isVector","inverse","determinant","eventNamespace","cursor","disablePan","disableZoom","increment","rangeStep","_initStyle","_bind","_resetStyle","_unbind","isDisabled","dims","po","widthBorder","heightBorder","dimensions","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","getMatrix","dValue","resetPan","pan","setTransform","getTransform","transformElem","marginW","marginH","diffW","diffH","_checkDims","$zoomRange","isPanning","_transition","focal","clientV","surfaceM","parentOffset","offsetM","surfaceV","scaleBy","noSetRange","_setOptions","styles","backface-visibility","transform-origin","ns","str_start","str_click","$reset","_startMove","$zoomIn","$zoomOut","startTransform","_getDistance","touch1","touch2","sqrt","pow","_getMiddle","moveEvent","endEvent","startDistance","startScale","startMiddle","startPageX","startPageY","original","origPageX","origPageY","panOptions","middle","toJSON","quote","string","escapable","lastIndex","meta","holder","rep","gap","indent","mind","Boolean","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","\b","\t","\n","\f","\r","\"","replacer","space","reviver","walk","cx","SyntaxError","extra","onDomLoad","initHtml4","isLast","newHash","oldHash","getHashByIndex","saveHash","savedHashes","discardedStateHash","discardedState","backState","discardObject","getHashByState","forwardState","discardedStates","discardedHash","discardedHashes","discarded","State","StateHash","lastDocumentHash","checkerRunning","startedWithHash","lastIframeHash","isInternetExplorer","getHash","iframeId","iframe","checkerFunction","documentHash","iframeHash","escapeHash","setHash","intervalList","hashChangeInterval","onHashChange","currentStateHash","newURL","getLocationHref","currentStateHashExits","busy","currentHash","currentState","isLastSavedState","getFullUrl","forward","encodeURI","getHashByUrl","pushQueue","newState","oldStateHash","oldState","html4Hash","wasExpected","expectedStateId","storeState","recycleState","setTitle","newStateHash","isHashEqual","replaceState","previousState","getStateByIndex","discardState","saveState","emulated","hashChange","initCore","delayInit","clearAllIntervals","il","debug","consoleExists","Exception","cached","getInternetExplorerMajorVersion","html4Mode","hashEscape","newObj","rootUrl","hostname","host","port","baseElements","baseHref","baseUrl","getBaseHref","getBasePageUrl","getRootUrl","stateUrl","pageUrl","part","basePageUrl","firstChar","allowBaseHref","fullUrl","getPageUrl","getBaseUrl","shortUrl","isTraditionalAnchor","doc","decodeURIComponent","idToState","stateToId","friendly","getLastSavedState","createStateObject","cleanUrl","extractId","getStateString","dataNotEmpty","cloneObject","getShortUrl","getIdByState","disableSuid","hashedUrl","normalizeState","cleanedState","passedState","url_or_hash","isTraditional","extractState","getStateById","getIdByUrl","urlToId","savedStates","storedStates","hasDuplicate","newId","oldId","bugs","unescapeHash","firstState","flag","fireNext","fireQueueItem","busyDelay","scope","queues","doubleCheckClear","doubleChecker","tryAgain","stateChanged","doubleCheckInterval","safariStatePoll","urlState","doubleCheck","emptyFunction","stateId","extractEventData","normalizeStore","currentStore","currentStoreString","DOMException","QUOTA_EXCEEDED_ERR","onUnload","storeInterval","safariPollInterval","newRelPrev","newRelNext","isNewRelPrevFirstPage","currPrev","currNext","posNewPrev","canonical","url_params","hasUrlPageParams","isFirstPage"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","import App from './app';\nimport PluginLoader from './plugin';\n\nnew App().initialize();\n","import $ from 'jquery';\n\n/**\n * Every plugins javascript has to register in the system to guarantee sound\n * loading of its dependencies:\n *\n * window._is_plugin = window._is_plugin || function() { (_is_plugin.q = _is_plugin.q || []).push(arguments) };\n *\n * _is_plugin(\"jquery\", function($) { ... });\n *\n */\n\nclass PluginLoader {\n\n  constructor(env) {\n    this.resolved = env;\n  }\n\n  // A convenience function for define. The last parameter has to be a function.\n  enqueue(...args) {\n    const fn = args.pop();\n    this.define(args, fn);\n  }\n\n  /* Registers a function with its dependencies. The function will be executed\n   * when all dependencies have been resolved.\n   */\n  define(deps, fn) {\n    const resolvedDeps = deps.map(dep => this.resolve(dep));\n    Promise.all(resolvedDeps)\n      .then(args => fn(...args));\n  }\n\n  resolve(dep) {\n    // Initiate script loading\n    const load = x => this.loadDependency(x);\n\n    // Get dependency from resolver cache.\n    const lookup = x => this.resolved[x];\n\n    // Write dependency and its promise to the cache.\n    const store = (dep, prom) => this.resolved[dep] = prom;\n\n    // Logs to console.log if present.\n    const log = s => console && console.log && console.log(s);\n\n    const resolved = lookup(dep);\n    if (typeof resolved === 'undefined') {\n      /* If dependency hasn't been resolved before,\n       * initiate the script loading and store the\n       * in the cache. Hence subsequent plugins requiring\n       * the same dependency benefit from sharing.\n       */\n      const loading = load(dep)\n        .catch(err => log(\"Plugin dependency failed to load: \" + dep + \" Reason: \" + err));\n\n      store(dep, loading);\n      return loading;\n    } else {\n      return resolved;\n    }\n  }\n\n  loadDependency(dep) {\n    const prom = new Promise(function(resolve, reject) {\n      $.ajax({\n        url: dep,\n        dataType: 'script',\n        success: function() {\n          resolve();\n        },\n        error: function(_, status, err) {\n          reject(err);\n        }\n      });\n    });\n    return prom;\n  }\n\n}\n\n// An initial environment for the PluginLoader.\nconst env = {\n  'jquery': Promise.resolve($)\n};\nconst loader = new PluginLoader(env);\n\n// Make sure this _is_plugin namespace is present\nwindow._is_plugin = window._is_plugin ||\nfunction() {\n  (_is_plugin.q = _is_plugin.q || []).push(arguments);\n};\nconst q = window._is_plugin.q || [];\n\n// Replace queueing loader with real loader\nwindow._is_plugin = loader.enqueue.bind(loader);\nwindow.define = loader.define.bind(loader);\nq.forEach(plugin => loader.enqueue(...plugin));\n\nexport default loader;\n","import $ from \"jquery\";\nimport Pubsub from \"pubsub\";\nimport enquire from \"enquire\";\n\nimport Ads from './views/ads.js';\nimport Product from './views/product';\nimport Account from './views/account';\nimport Checkout from './views/checkout';\nimport Cart from './views/cart';\nimport General from './views/general';\nimport Home from './views/home';\nimport SpecialCategory from './views/specialcategory';\nimport Navi from './views/navi';\nimport Content from './views/content';\nimport ReferToAFriend from './views/referToAFriend';\nimport Raffle from './views/raffle';\nimport Trackinghelper from './utils/trackinghelper';\nimport lazysizes from './utils/lazysizes';\nimport BrandsTeaser from './components/teaser/brands_teaser';\nimport SliderTeaser from './components/teaser/slider_teaser';\nimport Service from './components/teaser/service';\nimport ServiceTabScroll from './components/serviceTabScroll';\nimport FormValidator from './utils/formValidator';\nimport ShopForm from './views/shopform';\nimport Feedback from './views/feedback';\nimport DirectOrder from './views/directorder';\nimport ActionCodeEngine from './components/action_code_engine';\nimport AcceptCookies from './components/cookies';\nimport ContactForm from './components/contactform';\nimport NewsletterForm from './components/newsletter_form';\nimport Tracking_GA from './components/tracking_ga';\nimport CartChange from './components/cart_change';\nimport ShopRaffle from './components/shopraffle';\nimport ExitIntentLayer from './components/exit_intent_layer';\nimport ProgressiveWebApp from './components/progressive_webapp';\nimport RecommendationSwipe from './components/teaser/recommendation_swipe';\nimport PayPalPayments from './components/paypal_payments';\nimport Suggestions from './components/suggestions';\nimport InitFilterReset from './components/productlist_filters_reset';\nimport ProductListFilterSortByFlyout from './components/productlist_filter_sort_by_flyout';\nimport GenericFrontendModel from './components/generic_frontend_model';\nimport Phone from './components/phone';\nimport AddressSuggestions from './components/address_sugesstions';\nimport PdfViewer from \"./components/pdf_viewer\";\n\nexport default function App() {}\n\nApp.prototype.initialize = function() {\n  //js for the pages\n  if ($(\".art-detail-page\").length != 0) {\n    new Ads();\n    new ReferToAFriend();\n    new ServiceTabScroll();\n  } else if ($(\".account\").length != 0) new Account();\n  else if ($(\".basket-layout\").length != 0) new Cart();\n  else if ($(\".checkout\").length != 0) new Checkout();\n  else if ($(\".home\").length != 0) {\n    new Home();\n  }\n  else if($(\".no-search-result\").length != 0) new Product();\n  else if ($(\".content\").length != 0) new Content();\n\n  if ($(\".page-product-list\").length != 0) new Product();\n  if ($(\".js-directorder\").length != 0) new DirectOrder();\n  if ($(\".js-action-code-engine\").length != 0) new ActionCodeEngine();\n\n  if ($(\".js-contact-form\").length != 0) new ContactForm();\n  if ($(\".js-newsletter-form\").length != 0) new NewsletterForm();\n  if ($(\".js-pdf-viewer, #pdf-dialog, .pdf-trigger\").length != 0) new PdfViewer();\n  if ($(\".cart-product\").length != 0) new CartChange();\n  if ($(\".shop-raffle\").length != 0) new ShopRaffle();\n  if ($(\".recommendation .swipe\").length != 0) new RecommendationSwipe();\n  if ($(\".js-special-category-overlay\").length != 0) new SpecialCategory();\n  if ($(\".js-paypal\").length != 0) new PayPalPayments();\n  if ($(\".js-suggestions-input\").length != 0) new Suggestions();\n  if ($(\".js-phone\").length != 0) new Phone();\n  if ($(\".js-address-suggestions\").length != 0) {\n    new AddressSuggestions();\n  }\n\n  if ($(\".js-product-filters-burger-wrapper\").length != 0 || $(\".js-product-sort-by-burger-wrapper\").length != 0) new ProductListFilterSortByFlyout();\n  if ($(\".js-product-list-filters-reset\").length != 0) new InitFilterReset();\n\n  // accordion behaviour for service teaser\n  if ($(\".accordion-teaser\").length != 0) {\n    new Service();\n  }\n\n  if ($(\".js-cookie-layer\").length != 0) {\n    new AcceptCookies();\n  }\n\n  // TODO restrict loading to pages with a brands teaser.?.\n  new BrandsTeaser();\n  new SliderTeaser();\n  new General();\n  new Navi();\n  new Trackinghelper();\n  new Raffle();\n  new Feedback();\n  new Tracking_GA();\n  new ExitIntentLayer();\n  new ProgressiveWebApp();\n  new GenericFrontendModel();\n\n  // CSRF protection\n  var token = $(\"meta[name='_csrf']\").attr(\"content\");\n  var header = $(\"meta[name='_csrf_header']\").attr(\"content\");\n  $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {\n    jqXHR.setRequestHeader(header, token);\n  });\n\n  //Do not edit below this line ;)\n  //Subscribers can attach their events to the document\n  Pubsub.publish(\"core.attach\", document);\n\n  //Register resolutions\n  enquire.register(\"screen and (max-width:768px)\", {\n    match: function() {\n      Pubsub.publish(\"res.xs\", true);\n    },\n    unmatch: function() {\n      Pubsub.publish(\"res.xs\", false);\n    }\n  });\n  enquire.register(\"screen and (min-width:769px) and (max-width:1024px)\", {\n    match: function() {\n      Pubsub.publish(\"res.sm\", true);\n    },\n    unmatch: function() {\n      Pubsub.publish(\"res.sm\", false);\n    }\n  });\n  enquire.register(\"screen and (min-width:1025px) and (max-width:1199px)\", {\n    match: function() {\n      Pubsub.publish(\"res.md\", true);\n    },\n    unmatch: function() {\n      Pubsub.publish(\"res.md\", false);\n    }\n  });\n  enquire.register(\"screen and (min-width:1200px)\", {\n    match: function() {\n      Pubsub.publish(\"res.lg\", true);\n    },\n    unmatch: function() {\n      Pubsub.publish(\"res.lg\", false);\n    }\n  });\n};\n","/*! jQuery v2.0.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/\n(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],f=\"2.0.0\",p=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=f.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,w=/\\S+/g,T=/^(?:(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,C=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,k=/^-ms-/,N=/-([\\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener(\"DOMContentLoaded\",S,!1),e.removeEventListener(\"load\",S,!1),x.ready()};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if(\"string\"==typeof e){if(r=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for(\"boolean\"==typeof s&&(l=s,s=arguments[1]||{},a=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger(\"ready\").off(\"ready\")))},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?l[m.call(e)]||\"object\":typeof e},isPlainObject:function(e){if(\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,\"text/xml\")}catch(r){t=undefined}return(!t||t.getElementsByTagName(\"parsererror\").length)&&x.error(\"Invalid XML: \"+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf(\"use strict\")?(t=o.createElement(\"script\"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,\"ms-\").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?\"\":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if(\"number\"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return p.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return\"string\"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if(\"object\"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),\"complete\"===o.readyState?setTimeout(x.ready):(o.addEventListener(\"DOMContentLoaded\",S,!1),e.addEventListener(\"load\",S,!1))),n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){l[\"[object \"+t+\"]\"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,f,p,h,d,g,m,y=\"sizzle\"+-new Date,v=e.document,b={},w=0,T=0,C=ot(),k=ot(),N=ot(),E=!1,S=function(){return 0},j=typeof undefined,D=1<<31,A=[],L=A.pop,q=A.push,H=A.push,O=A.slice,F=A.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},P=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",R=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=M.replace(\"w\",\"w#\"),$=\"\\\\[\"+R+\"*(\"+M+\")\"+R+\"*(?:([*^$|!~]?=)\"+R+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+R+\"*\\\\]\",B=\":(\"+M+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",I=RegExp(\"^\"+R+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+R+\"+$\",\"g\"),z=RegExp(\"^\"+R+\"*,\"+R+\"*\"),_=RegExp(\"^\"+R+\"*([>+~]|\"+R+\")\"+R+\"*\"),X=RegExp(R+\"*[+~]\"),U=RegExp(\"=\"+R+\"*([^\\\\]'\\\"]*)\"+R+\"*\\\\]\",\"g\"),Y=RegExp(B),V=RegExp(\"^\"+W+\"$\"),G={ID:RegExp(\"^#(\"+M+\")\"),CLASS:RegExp(\"^\\\\.(\"+M+\")\"),TAG:RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+B),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+R+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+R+\"*(?:([+-]|)\"+R+\"*(\\\\d+)|))\"+R+\"*\\\\)|)\",\"i\"),\"boolean\":RegExp(\"^(?:\"+P+\")$\",\"i\"),needsContext:RegExp(\"^\"+R+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+R+\"*((?:-\\\\d)?\\\\d*)\"+R+\"*\\\\)|)(?=[^-]|$)\",\"i\")},J=/^[^{]+\\{\\s*\\[native \\w/,Q=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,et=/'|\\\\/g,tt=/\\\\([\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|.)/g,nt=function(e,t){var n=\"0x\"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{H.apply(A=O.call(v.childNodes),v.childNodes),A[v.childNodes.length].nodeType}catch(rt){H={apply:A.length?function(e,t){q.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function it(e){return J.test(e+\"\")}function ot(){var e,t=[];return e=function(n,i){return t.push(n+=\" \")>r.cacheLength&&delete e[t.shift()],e[n]=i}}function st(e){return e[y]=!0,e}function at(e){var t=c.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t,n,r){var i,o,s,a,u,f,d,g,x,w;if((t?t.ownerDocument||t:v)!==c&&l(t),t=t||c,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(a=t.nodeType)&&9!==a)return[];if(p&&!r){if(i=Q.exec(e))if(s=i[1]){if(9===a){if(o=t.getElementById(s),!o||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&m(t,o)&&o.id===s)return n.push(o),n}else{if(i[2])return H.apply(n,t.getElementsByTagName(e)),n;if((s=i[3])&&b.getElementsByClassName&&t.getElementsByClassName)return H.apply(n,t.getElementsByClassName(s)),n}if(b.qsa&&(!h||!h.test(e))){if(g=d=y,x=t,w=9===a&&e,1===a&&\"object\"!==t.nodeName.toLowerCase()){f=gt(e),(d=t.getAttribute(\"id\"))?g=d.replace(et,\"\\\\$&\"):t.setAttribute(\"id\",g),g=\"[id='\"+g+\"'] \",u=f.length;while(u--)f[u]=g+mt(f[u]);x=X.test(e)&&t.parentNode||t,w=f.join(\",\")}if(w)try{return H.apply(n,x.querySelectorAll(w)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(I,\"$1\"),t,n,r)}o=ut.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},l=ut.setDocument=function(e){var t=e?e.ownerDocument||e:v;return t!==c&&9===t.nodeType&&t.documentElement?(c=t,f=t.documentElement,p=!o(t),b.getElementsByTagName=at(function(e){return e.appendChild(t.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),b.attributes=at(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),b.getElementsByClassName=at(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),b.sortDetached=at(function(e){return 1&e.compareDocumentPosition(c.createElement(\"div\"))}),b.getById=at(function(e){return f.appendChild(e).id=y,!t.getElementsByName||!t.getElementsByName(y).length}),b.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){return e.getAttribute(\"id\")===t}}):(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n?n.id===e||typeof n.getAttributeNode!==j&&n.getAttributeNode(\"id\").value===e?[n]:undefined:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),r.find.TAG=b.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=b.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&p?t.getElementsByClassName(e):undefined},d=[],h=[],(b.qsa=it(t.querySelectorAll))&&(at(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||h.push(\"\\\\[\"+R+\"*(?:value|\"+P+\")\"),e.querySelectorAll(\":checked\").length||h.push(\":checked\")}),at(function(e){var t=c.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&h.push(\"[*^$]=\"+R+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||h.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),h.push(\",.*:\")})),(b.matchesSelector=it(g=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){b.disconnectedMatch=g.call(e,\"div\"),g.call(e,\"[s!='']:x\"),d.push(\"!=\",B)}),h=h.length&&RegExp(h.join(\"|\")),d=d.length&&RegExp(d.join(\"|\")),m=it(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,n){if(e===n)return E=!0,0;var r=n.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(n);return r?1&r||!b.sortDetached&&n.compareDocumentPosition(e)===r?e===t||m(v,e)?-1:n===t||m(v,n)?1:u?F.call(u,e)-F.call(u,n):0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],l=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:u?F.call(u,e)-F.call(u,n):0;if(o===s)return lt(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)l.unshift(r);while(a[i]===l[i])i++;return i?lt(a[i],l[i]):a[i]===v?-1:l[i]===v?1:0},c):c},ut.matches=function(e,t){return ut(e,null,null,t)},ut.matchesSelector=function(e,t){if((e.ownerDocument||e)!==c&&l(e),t=t.replace(U,\"='$1']\"),!(!b.matchesSelector||!p||d&&d.test(t)||h&&h.test(t)))try{var n=g.call(e,t);if(n||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return ut(t,c,null,[e]).length>0},ut.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),m(e,t)},ut.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var n=r.attrHandle[t.toLowerCase()],i=n&&n(e,t,!p);return i===undefined?b.attributes||!p?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null:i},ut.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},ut.uniqueSort=function(e){var t,n=[],r=0,i=0;if(E=!b.detectDuplicates,u=!b.sortStable&&e.slice(0),e.sort(S),E){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return e};function lt(e,t){var n=t&&e,r=n&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ct(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}function ft(e,t,n){var r;return n?undefined:r=e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function ht(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function dt(e){return st(function(t){return t=+t,st(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}i=ut.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r];r++)n+=i(t);return n},r=ut.selectors={cacheLength:50,createPseudo:st,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(tt,nt),e[3]=(e[4]||e[5]||\"\").replace(tt,nt),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||ut.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&ut.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return G.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&Y.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(tt,nt).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+\" \"];return t||(t=RegExp(\"(^|\"+R+\")\"+e+\"(\"+R+\"|$)\"))&&C(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=ut.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,h,d,g=o!==s?\"nextSibling\":\"previousSibling\",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){f=t;while(f=f[g])if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;d=g=\"only\"===e&&!d&&\"nextSibling\"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[y]||(m[y]={}),l=c[e]||[],h=l[0]===w&&l[1],p=l[0]===w&&l[2],f=h&&m.childNodes[h];while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if(1===f.nodeType&&++p&&f===t){c[e]=[w,h,p];break}}else if(x&&(l=(t[y]||(t[y]={}))[e])&&l[0]===w)p=l[1];else while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if((a?f.nodeName.toLowerCase()===v:1===f.nodeType)&&++p&&(x&&((f[y]||(f[y]={}))[e]=[w,p]),f===t))break;return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ut.error(\"unsupported pseudo: \"+e);return i[y]?i(t):i.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,o=i(e,t),s=o.length;while(s--)r=F.call(e,o[s]),e[r]=!(n[r]=o[s])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=s(e.replace(I,\"$1\"));return r[y]?st(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:st(function(e){return function(t){return ut(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||\"\")||ut.error(\"unsupported lang: \"+e),e=e.replace(tt,nt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:dt(function(){return[0]}),last:dt(function(e,t){return[t-1]}),eq:dt(function(e,t,n){return[0>n?n+t:n]}),even:dt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:dt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:dt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:dt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=ht(t);function gt(e,t){var n,i,o,s,a,u,l,c=k[e+\" \"];if(c)return t?0:c.slice(0);a=e,u=[],l=r.preFilter;while(a){(!n||(i=z.exec(a)))&&(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=_.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace(I,\" \")}),a=a.slice(n.length));for(s in r.filter)!(i=G[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ut.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,r){var i=t.dir,o=r&&\"parentNode\"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,r,a){var u,l,c,f=w+\" \"+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,r,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[y]||(t[y]={}),(l=c[i])&&l[0]===f){if((u=l[1])===!0||u===n)return u===!0}else if(l=c[i]=[f],l[1]=e(t,r,a)||n,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[y]&&(r=bt(r)),i&&!i[y]&&(i=bt(i,o)),st(function(o,s,a,u){var l,c,f,p=[],h=[],d=s.length,g=o||Ct(t||\"*\",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,p,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(f=l[c])&&(y[h[c]]=!(m[h[c]]=f))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(f=y[c])&&l.push(m[c]=f);i(null,y=[],l,u)}c=y.length;while(c--)(f=y[c])&&(l=i?F.call(o,f):p[c])>-1&&(o[l]=!(s[l]=f))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):H.apply(s,y)})}function wt(e){var t,n,i,o=e.length,s=r.relative[e[0].type],u=s||r.relative[\" \"],l=s?1:0,c=yt(function(e){return e===t},u,!0),f=yt(function(e){return F.call(t,e)>-1},u,!0),p=[function(e,n,r){return!s&&(r||n!==a)||((t=n).nodeType?c(e,n,r):f(e,n,r))}];for(;o>l;l++)if(n=r.relative[e[l].type])p=[yt(vt(p),n)];else{if(n=r.filter[e[l].type].apply(null,e[l].matches),n[y]){for(i=++l;o>i;i++)if(r.relative[e[i].type])break;return bt(l>1&&vt(p),l>1&&mt(e.slice(0,l-1)).replace(I,\"$1\"),n,i>l&&wt(e.slice(l,i)),o>i&&wt(e=e.slice(i)),o>i&&mt(e))}p.push(n)}return vt(p)}function Tt(e,t){var i=0,o=t.length>0,s=e.length>0,u=function(u,l,f,p,h){var d,g,m,y=[],v=0,x=\"0\",b=u&&[],T=null!=h,C=a,k=u||s&&r.find.TAG(\"*\",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(a=l!==c&&l,n=i);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,f)){p.push(d);break}T&&(w=N,n=++i)}o&&((d=!m&&d)&&v--,u&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,f);if(u){if(v>0)while(x--)b[x]||y[x]||(y[x]=L.call(p));y=xt(y)}H.apply(p,y),T&&!u&&y.length>0&&v+t.length>1&&ut.uniqueSort(p)}return T&&(w=N,a=C),b};return o?st(u):u}s=ut.compile=function(e,t){var n,r=[],i=[],o=N[e+\" \"];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[y]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ut(e,t[r],n);return n}function kt(e,t,n,i){var o,a,u,l,c,f=gt(e);if(!i&&1===f.length){if(a=f[0]=f[0].slice(0),a.length>2&&\"ID\"===(u=a[0]).type&&9===t.nodeType&&p&&r.relative[a[1].type]){if(t=(r.find.ID(u.matches[0].replace(tt,nt),t)||[])[0],!t)return n;e=e.slice(a.shift().value.length)}o=G.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],r.relative[l=u.type])break;if((c=r.find[l])&&(i=c(u.matches[0].replace(tt,nt),X.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=i.length&&mt(a),!e)return H.apply(n,i),n;break}}}return s(e,f)(i,t,!p,n,X.test(e)),n}r.pseudos.nth=r.pseudos.eq;function Nt(){}Nt.prototype=r.filters=r.pseudos,r.setFilters=new Nt,b.sortStable=y.split(\"\").sort(S).join(\"\")===y,l(),[0,0].sort(S),b.detectDuplicates=E,at(function(e){if(e.innerHTML=\"<a href='#'></a>\",\"#\"!==e.firstChild.getAttribute(\"href\")){var t=\"type|href|height|width\".split(\"|\"),n=t.length;while(n--)r.attrHandle[t[n]]=ft}}),at(function(e){if(null!=e.getAttribute(\"disabled\")){var t=P.split(\"|\"),n=t.length;while(n--)r.attrHandle[t[n]]=ct}}),x.find=ut,x.expr=ut.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=ut.uniqueSort,x.text=ut.getText,x.isXMLDoc=ut.isXML,x.contains=ut.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(f){for(t=e.memory&&f,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(f[0],f[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&\"string\"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!a||n&&!u||(r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+\"With\"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement(\"input\"),r=o.createDocumentFragment(),i=o.createElement(\"div\"),s=o.createElement(\"select\"),a=s.appendChild(o.createElement(\"option\"));return n.type?(n.type=\"checkbox\",t.checkOn=\"\"!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement(\"input\"),n.value=\"t\",n.type=\"radio\",t.radioValue=\"t\"===n.value,n.setAttribute(\"checked\",\"t\"),n.setAttribute(\"name\",\"t\"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles=\"onfocusin\"in e,i.style.backgroundClip=\"content-box\",i.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===i.style.backgroundClip,x(function(){var n,r,s=\"padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box\",a=o.getElementsByTagName(\"body\")[0];a&&(n=o.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",a.appendChild(n).appendChild(i),i.innerHTML=\"\",i.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%\",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(i,null)||{width:\"4px\"}).width,r=i.appendChild(o.createElement(\"div\")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width=\"0\",i.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if(\"string\"==typeof t)o[t]=n;else if(x.isEmptyObject(o))this.cache[i]=t;else for(r in t)o[r]=t[r]},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){return t===undefined||t&&\"string\"==typeof t&&n===undefined?this.get(e,t):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i=this.key(e),o=this.cache[i];if(t===undefined)this.cache[i]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):t in o?r=[t]:(r=x.camelCase(t),r=r in o?[r]:r.match(w)||[]),n=r.length;while(n--)delete o[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){delete this.cache[this.key(e)]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,\"hasDataAttrs\"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf(\"data-\")&&(r=x.camelCase(r.substring(5)),P(i,r,s[r]));q.set(i,\"hasDataAttrs\",!0)}return s}return\"object\"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf(\"-\")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r=\"data-\"+t.replace(O,\"-$1\").toLowerCase(),n=e.getAttribute(r),\"string\"==typeof n){try{n=\"true\"===n?!0:\"false\"===n?!1:\"null\"===n?null:+n+\"\"===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||\"fx\")+\"queue\",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),o.cur=i,i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks(\"once memory\").add(function(){q.remove(e,[t+\"queue\",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);\nx._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=undefined),e=e||\"fx\";while(s--)n=q.get(o[s],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\\t\\r\\n]/g,$=/\\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||\"\").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(W,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||\"\").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(W,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e,i=\"boolean\"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var o,s=0,a=x(this),u=t,l=e.match(w)||[];while(o=l[s++])u=i?u:!a.hasClass(o),a[u?\"addClass\":\"removeClass\"](o)}else(n===r||\"boolean\"===n)&&(this.className&&q.set(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":q.get(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(W,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i,o=x(this);1===this.nodeType&&(i=r?e.call(this,n,o.val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":x.isArray(i)&&(i=x.map(i,function(e){return null==e?\"\":e+\"\"})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&t.set(this,i,\"value\")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&\"get\"in t&&(n=t.get(i,\"value\"))!==undefined?n:(n=i.value,\"string\"==typeof n?n.replace($,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.boolean.test(t)?M:R)),n===undefined?i&&\"get\"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&\"set\"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+\"\"),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.boolean.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&\"set\"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute(\"tabindex\")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.boolean.source.match(/\\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,f,p,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||\"\").match(w)||[\"\"],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||\"\").split(\".\").sort(),d&&(p=x.event.special[d]||{},d=(o?p.delegateType:p.bindType)||d,p=x.event.special[d]||{},f=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(\".\")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,p.setup&&p.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,f):h.push(f),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||\"\").match(w)||[\"\"],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||\"\").split(\".\").sort(),h){f=x.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,\"events\"))}},trigger:function(t,n,r,i){var s,a,u,l,c,f,p,h=[r||o],d=y.call(t,\"type\")?t.type:t,g=y.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(\".\")>=0&&(g=d.split(\".\"),d=g.shift(),g.sort()),c=0>d.indexOf(\":\")&&\"on\"+d,t=t[x.expando]?t:new x.Event(d,\"object\"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join(\".\"),t.namespace_re=t.namespace?RegExp(\"(^|\\\\.)\"+g.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),p=x.event.special[d]||{},i||!p.trigger||p.trigger.apply(r,n)!==!1)){if(!i&&!p.noBubble&&!x.isWindow(r)){for(l=p.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:p.bindType||d,f=(q.get(a,\"events\")||{})[t.type]&&q.get(a,\"handle\"),f&&f.apply(a,n),f=c&&a[c],f&&x.acceptData(a)&&f.apply&&f.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||p._default&&p._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,\"events\")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||\"click\"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+\" \",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return 3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:\"focusin\"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:\"focusout\"},click:{trigger:function(){return\"checkbox\"===this.type&&this.click&&x.nodeName(this,\"input\")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if(\"object\"==typeof e){\"string\"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&(\"string\"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||\"function\"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\\[\\.,]*$/,J=x.expr.match.needsContext,Q={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n,r,i=this.length;if(\"string\"!=typeof e)return t=this,this.pushStack(x(e).filter(function(){for(r=0;i>r;r++)if(x.contains(t[r],this))return!0}));for(n=[],r=0;i>r;r++)x.find(e,this[r],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=(this.selector?this.selector+\" \":\"\")+e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(Z(this,e||[],!0))},filter:function(e){return this.pushStack(Z(this,e||[],!1))},is:function(e){return!!e&&(\"string\"==typeof e?J.test(e)?x(e,this.context).index(this[0])>=0:x.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],s=J.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function K(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return K(e,\"nextSibling\")},prev:function(e){return K(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(Q[e]||x.unique(i),\"p\"===e[0]&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function Z(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,tt=/<([\\w:]+)/,nt=/<|&#?\\w+;/,rt=/<(?:script|style|link)/i,it=/^(?:checkbox|radio)$/i,ot=/checked\\s*(?:[^=]|=\\s*.checked.)/i,st=/^$|\\/(?:java|ecma)script/i,at=/^true\\/(.*)/,ut=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,lt={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};lt.optgroup=lt.option,lt.tbody=lt.tfoot=lt.colgroup=lt.caption=lt.col=lt.thead,lt.th=lt.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(gt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&ht(gt(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(gt(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!rt.test(e)&&!lt[(tt.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=e.replace(et,\"<$1></$2>\");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(gt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=p.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,f=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||\"string\"!=typeof d||x.support.checkClone)&&ot.test(d))return this.each(function(r){var i=f.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(gt(r,\"script\"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,gt(a,\"script\"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,pt),l=0;s>l;l++)a=o[l],st.test(a.type||\"\")&&!q.access(a,\"globalEval\")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(ut,\"\")))}return this}}),x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=gt(a),o=gt(e),r=0,i=o.length;i>r;r++)mt(o[r],s[r]);if(t)if(n)for(o=o||gt(e),s=s||gt(a),r=0,i=o.length;i>r;r++)dt(o[r],s[r]);else dt(e,a);return s=gt(a,\"script\"),s.length>0&&ht(s,!u&&gt(e,\"script\")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,f=e.length,p=t.createDocumentFragment(),h=[];for(;f>c;c++)if(i=e[c],i||0===i)if(\"object\"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(nt.test(i)){o=o||p.appendChild(t.createElement(\"div\")),s=(tt.exec(i)||[\"\",\"\"])[1].toLowerCase(),a=lt[s]||lt._default,o.innerHTML=a[1]+i.replace(et,\"<$1></$2>\")+a[2],l=a[0];while(l--)o=o.firstChild;x.merge(h,o.childNodes),o=p.firstChild,o.textContent=\"\"}else h.push(t.createTextNode(i));p.textContent=\"\",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=gt(p.appendChild(i),\"script\"),u&&ht(o),n)){l=0;while(i=o[l++])st.test(i.type||\"\")&&n.push(i)}return p},cleanData:function(e){var t,n,r,i=e.length,o=0,s=x.event.special;for(;i>o;o++){if(n=e[o],x.acceptData(n)&&(t=q.access(n)))for(r in t.events)s[r]?x.event.remove(n,r):x.removeEvent(n,r,t.handle);L.discard(n),q.discard(n)}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"text\",async:!1,global:!1,success:x.globalEval})}});function ct(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function ft(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function pt(e){var t=at.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function ht(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],\"globalEval\",!t||q.get(t[r],\"globalEval\"))}function dt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=x.extend({},o),l=o.events,q.set(t,s),l)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function gt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):e.querySelectorAll?e.querySelectorAll(t||\"*\"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function mt(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&it.test(e.type)?t.checked=e.checked:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var yt,vt,xt=/^(none|table(?!-c[ea]).+)/,bt=/^margin/,wt=RegExp(\"^(\"+b+\")(.*)$\",\"i\"),Tt=RegExp(\"^(\"+b+\")(?!px)[a-z%]+$\",\"i\"),Ct=RegExp(\"^([+-])=(\"+b+\")\",\"i\"),kt={BODY:\"block\"},Nt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Et={letterSpacing:0,fontWeight:400},St=[\"Top\",\"Right\",\"Bottom\",\"Left\"],jt=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function Dt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=jt.length;while(i--)if(t=jt[i]+n,t in e)return t;return r}function At(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function Lt(t){return e.getComputedStyle(t,null)}function qt(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,\"olddisplay\"),n=r.style.display,t?(o[s]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&At(r)&&(o[s]=q.access(r,\"olddisplay\",Pt(r.nodeName)))):o[s]||(i=At(r),(n&&\"none\"!==n||!i)&&q.set(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[s]||\"\":\"none\"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=Lt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return qt(this,!0)},hide:function(){return qt(this)},toggle:function(e){var t=\"boolean\"==typeof e;return this.each(function(){(t?e:At(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=yt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=Dt(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&\"get\"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,\"string\"===o&&(i=Ct.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o=\"number\"),null==n||\"number\"===o&&isNaN(n)||(\"number\"!==o||x.cssNumber[a]||(n+=\"px\"),x.support.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),s&&\"set\"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=Dt(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&\"get\"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=yt(e,t,r)),\"normal\"===i&&t in Et&&(i=Et[t]),\"\"===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),yt=function(e,t,n){var r,i,o,s=n||Lt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(\"\"!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Tt.test(a)&&bt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ht(e,t,n){var r=wt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function Ot(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,s=0;for(;4>o;o+=2)\"margin\"===n&&(s+=x.css(e,n+St[o],!0,i)),r?(\"content\"===n&&(s-=x.css(e,\"padding\"+St[o],!0,i)),\"margin\"!==n&&(s-=x.css(e,\"border\"+St[o]+\"Width\",!0,i))):(s+=x.css(e,\"padding\"+St[o],!0,i),\"padding\"!==n&&(s+=x.css(e,\"border\"+St[o]+\"Width\",!0,i)));return s}function Ft(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Lt(e),s=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=yt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Tt.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ot(e,t,n||(s?\"border\":\"content\"),r,o)+\"px\"}function Pt(e){var t=o,n=kt[e];return n||(n=Rt(e,t),\"none\"!==n&&n||(vt=(vt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(vt[0].contentWindow||vt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=Rt(e,t),vt.detach()),kt[e]=n),n}function Rt(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,t){x.cssHooks[t]={get:function(e,n,r){return n?0===e.offsetWidth&&xt.test(x.css(e,\"display\"))?x.swap(e,Nt,function(){return Ft(e,t,r)}):Ft(e,t,r):undefined},set:function(e,n,r){var i=r&&Lt(e);return Ht(e,n,r?Ot(e,t,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,t){return t?x.swap(e,{display:\"inline-block\"},yt,[e,\"marginRight\"]):undefined}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,t){x.cssHooks[t]={get:function(e,n){return n?(n=yt(e,t),Tt.test(n)?x(e).position()[t]+\"px\":n):undefined}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+St[r]+t]=o[r]||o[r-2]||o[0];return i}},bt.test(e)||(x.cssHooks[e+t].set=Ht)});var Mt=/%20/g,Wt=/\\[\\]$/,$t=/\\r?\\n/g,Bt=/^(?:submit|button|image|reset|file)$/i,It=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&It.test(this.nodeName)&&!Bt.test(e)&&(this.checked||!it.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace($t,\"\\r\\n\")}}):{name:t.name,value:n.replace($t,\"\\r\\n\")}}).get()}}),x.param=function(e,t){var n,r=[],i=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(t===undefined&&(t=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){i(this.name,this.value)});else for(n in e)zt(n,e[n],t,i);return r.join(\"&\").replace(Mt,\"+\")};function zt(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||Wt.test(e)?r(e,i):zt(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)zt(e+\"[\"+i+\"]\",t[i],n,r)}x.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var _t,Xt,Ut=x.now(),Yt=/\\?/,Vt=/#.*$/,Gt=/([?&])_=[^&]*/,Jt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Qt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Kt=/^(?:GET|HEAD)$/,Zt=/^\\/\\//,en=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,tn=x.fn.load,nn={},rn={},on=\"*/\".concat(\"*\");try{Xt=i.href}catch(sn){Xt=o.createElement(\"a\"),Xt.href=\"\",Xt=Xt.href}_t=en.exec(Xt.toLowerCase())||[];function an(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(w)||[];\nif(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function un(e,t,n,r){var i={},o=e===rn;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return\"string\"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i[\"*\"]&&s(\"*\")}function ln(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if(\"string\"!=typeof e&&tn)return tn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(\" \");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&\"object\"==typeof t&&(i=\"POST\"),s.length>0&&x.ajax({url:e,type:i,dataType:\"html\",data:t}).done(function(e){o=arguments,s.html(r?x(\"<div>\").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Xt,type:\"GET\",isLocal:Qt.test(_t[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":on,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ln(ln(e,x.ajaxSettings),t):ln(x.ajaxSettings,e)},ajaxPrefilter:an(nn),ajaxTransport:an(rn),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),f=c.context||c,p=c.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),d=x.Callbacks(\"once memory\"),g=c.statusCode||{},m={},y={},v=0,b=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Jt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Xt)+\"\").replace(Vt,\"\").replace(Zt,_t[1]+\"//\"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||\"*\").toLowerCase().match(w)||[\"\"],null==c.crossDomain&&(a=en.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===_t[1]&&a[2]===_t[2]&&(a[3]||(\"http:\"===a[1]?\"80\":\"443\"))===(_t[3]||(\"http:\"===_t[1]?\"80\":\"443\")))),c.data&&c.processData&&\"string\"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),un(nn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger(\"ajaxStart\"),c.type=c.type.toUpperCase(),c.hasContent=!Kt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Yt.test(r)?\"&\":\"?\")+c.data,delete c.data),c.cache===!1&&(c.url=Gt.test(r)?r.replace(Gt,\"$1_=\"+Ut++):r+(Yt.test(r)?\"&\":\"?\")+\"_=\"+Ut++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader(\"If-Modified-Since\",x.lastModified[r]),x.etag[r]&&T.setRequestHeader(\"If-None-Match\",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader(\"Content-Type\",c.contentType),T.setRequestHeader(\"Accept\",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(\"*\"!==c.dataTypes[0]?\", \"+on+\"; q=0.01\":\"\"):c.accepts[\"*\"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(f,T,c)===!1||2===v))return T.abort();b=\"abort\";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=un(rn,c,t,T)){T.readyState=1,u&&p.trigger(\"ajaxSend\",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort(\"timeout\")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,\"No Transport\");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||\"\",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=cn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader(\"Last-Modified\"),w&&(x.lastModified[r]=w),w=T.getResponseHeader(\"etag\"),w&&(x.etag[r]=w)),204===e?C=\"nocontent\":304===e?C=\"notmodified\":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C=\"error\",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+\"\",l?h.resolveWith(f,[m,C,T]):h.rejectWith(f,[T,C,y]),T.statusCode(g),g=undefined,u&&p.trigger(l?\"ajaxSuccess\":\"ajaxError\",[T,c,l?m:y]),d.fireWith(f,[T,C]),u&&(p.trigger(\"ajaxComplete\",[T,c]),--x.active||x.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,t){return x.get(e,undefined,t,\"script\")}}),x.each([\"get\",\"post\"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function cn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(s=l[u+\" \"+o]||l[\"* \"+o],!s)for(i in l)if(a=i.split(\" \"),a[1]===o&&(s=l[u+\" \"+a[0]]||l[\"* \"+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e[\"throws\"])t=s(t);else try{t=s(t)}catch(f){return{state:\"parsererror\",error:s?f:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x(\"<script>\").prop({async:!0,charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&i(\"error\"===e.type?404:200,e.type)}),o.head.appendChild(t[0])},abort:function(){n&&n()}}}});var pn=[],hn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=pn.pop()||x.expando+\"_\"+Ut++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,s,a=t.jsonp!==!1&&(hn.test(t.url)?\"url\":\"string\"==typeof t.data&&!(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&hn.test(t.data)&&\"data\");return a||\"jsonp\"===t.dataTypes[0]?(i=t.jsonpCallback=x.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(hn,\"$1\"+i):t.jsonp!==!1&&(t.url+=(Yt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return s||x.error(i+\" was not called\"),s[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){s=arguments},r.always(function(){e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,pn.push(i)),s&&x.isFunction(o)&&o(s[0]),s=o=undefined}),\"script\"):undefined}),x.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var dn=x.ajaxSettings.xhr(),gn={0:200,1223:204},mn=0,yn={};e.ActiveXObject&&x(e).on(\"unload\",function(){for(var e in yn)yn[e]();yn=undefined}),x.support.cors=!!dn&&\"withCredentials\"in dn,x.support.ajax=dn=!!dn,x.ajaxTransport(function(e){var t;return x.support.cors||dn&&!e.crossDomain?{send:function(n,r){var i,o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||n[\"X-Requested-With\"]||(n[\"X-Requested-With\"]=\"XMLHttpRequest\");for(i in n)s.setRequestHeader(i,n[i]);t=function(e){return function(){t&&(delete yn[o],t=s.onload=s.onerror=null,\"abort\"===e?s.abort():\"error\"===e?r(s.status||404,s.statusText):r(gn[s.status]||s.status,s.statusText,\"string\"==typeof s.responseText?{text:s.responseText}:undefined,s.getAllResponseHeaders()))}},s.onload=t(),s.onerror=t(\"error\"),t=yn[o=mn++]=t(\"abort\"),s.send(e.hasContent&&e.data||null)},abort:function(){t&&t()}}:undefined});var vn,xn,bn=/^(?:toggle|show|hide)$/,wn=RegExp(\"^(?:([+-])=|)(\"+b+\")([a-z%]*)$\",\"i\"),Tn=/queueHooks$/,Cn=[Dn],kn={\"*\":[function(e,t){var n,r,i=this.createTween(e,t),o=wn.exec(t),s=i.cur(),a=+s||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(x.cssNumber[e]?\"\":\"px\"),\"px\"!==r&&a){a=x.css(i.elem,e,!0)||n||1;do u=u||\".5\",a/=u,x.style(i.elem,e,a+r);while(u!==(u=i.cur()/s)&&1!==u&&--l)}i.unit=r,i.start=a,i.end=o[1]?a+(o[1]+1)*n:n}return i}]};function Nn(){return setTimeout(function(){vn=undefined}),vn=x.now()}function En(e,t){x.each(t,function(t,n){var r=(kn[t]||[]).concat(kn[\"*\"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function Sn(e,t,n){var r,i,o=0,s=Cn.length,a=x.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=vn||Nn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,s=0,u=l.tweens.length;for(;u>s;s++)l.tweens[s].run(o);return a.notifyWith(e,[l,o,n]),1>o&&u?n:(a.resolveWith(e,[l]),!1)},l=a.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:vn||Nn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?a.resolveWith(e,[l,t]):a.rejectWith(e,[l,t]),this}}),c=l.props;for(jn(c,l.opts.specialEasing);s>o;o++)if(r=Cn[o].call(l,e,c,l.opts))return r;return En(l,c),x.isFunction(l.opts.start)&&l.opts.start.call(e,l),x.fx.timer(x.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function jn(e,t){var n,r,i,o,s;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=x.cssHooks[r],s&&\"expand\"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(Sn,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],kn[n]=kn[n]||[],kn[n].unshift(t)},prefilter:function(e,t){t?Cn.unshift(e):Cn.push(e)}});function Dn(e,t,n){var r,i,o,s,a,u,l,c,f,p=this,h=e.style,d={},g=[],m=e.nodeType&&At(e);n.queue||(c=x._queueHooks(e,\"fx\"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,x.queue(e,\"fx\").length||c.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),a=q.get(e,\"fxshow\");for(r in t)if(o=t[r],bn.exec(o)){if(delete t[r],u=u||\"toggle\"===o,o===(m?\"hide\":\"show\")){if(\"show\"!==o||a===undefined||a[r]===undefined)continue;m=!0}g.push(r)}if(s=g.length){a=q.get(e,\"fxshow\")||q.access(e,\"fxshow\",{}),\"hidden\"in a&&(m=a.hidden),u&&(a.hidden=!m),m?x(e).show():p.done(function(){x(e).hide()}),p.done(function(){var t;q.remove(e,\"fxshow\");for(t in d)x.style(e,t,d[t])});for(r=0;s>r;r++)i=g[r],l=p.createTween(i,m?a[i]:0),d[i]=a[i]||x.style(e,i),i in a||(a[i]=l.start,m&&(l.end=l.start,l.start=\"width\"===i||\"height\"===i?1:0))}}function An(e,t,n,r,i){return new An.prototype.init(e,t,n,r,i)}x.Tween=An,An.prototype={constructor:An,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=An.propHooks[this.prop];return e&&e.get?e.get(this):An.propHooks._default.get(this)},run:function(e){var t,n=An.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):An.propHooks._default.set(this),this}},An.prototype.init.prototype=An.prototype,An.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},An.propHooks.scrollTop=An.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(Ln(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(At).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),s=function(){var t=Sn(this,x.extend({},e),o);s.finish=function(){t.stop(!0)},(i||q.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=undefined),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=x.timers,s=q.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&Tn.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));(t||!n)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=q.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,s=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;s>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function Ln(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=St[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:Ln(\"show\"),slideUp:Ln(\"hide\"),slideToggle:Ln(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=An.prototype.init,x.fx.tick=function(){var e,t=x.timers,n=0;for(vn=x.now();t.length>n;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||x.fx.stop(),vn=undefined},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){xn||(xn=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(xn),xn=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===undefined?this:this.each(function(t){x.offset.setOffset(this,e,t)});var t,n,i=this[0],o={top:0,left:0},s=i&&i.ownerDocument;if(s)return t=s.documentElement,x.contains(t,i)?(typeof i.getBoundingClientRect!==r&&(o=i.getBoundingClientRect()),n=qn(s),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o},x.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l,c=x.css(e,\"position\"),f=x(e),p={};\"static\"===c&&(e.style.position=\"relative\"),a=f.offset(),o=x.css(e,\"top\"),u=x.css(e,\"left\"),l=(\"absolute\"===c||\"fixed\"===c)&&(o+u).indexOf(\"auto\")>-1,l?(r=f.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),x.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(p.top=t.top-a.top+s),null!=t.left&&(p.left=t.left-a.left+i),\"using\"in t?t.using.call(e,p):f.css(p)}},x.fn.extend({position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===x.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(r=e.offset()),r.top+=x.css(e[0],\"borderTopWidth\",!0),r.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-r.top-x.css(n,\"marginTop\",!0),left:t.left-r.left-x.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,n){var r=\"pageYOffset\"===n;x.fn[t]=function(i){return x.access(this,function(t,i,o){var s=qn(t);return o===undefined?s?s[n]:t[i]:(s?s.scrollTo(r?e.pageXOffset:o,r?o:e.pageYOffset):t[i]=o,undefined)},t,i,arguments.length,null)}});function qn(e){return x.isWindow(e)?e:9===e.nodeType&&e.defaultView}x.each({Height:\"height\",Width:\"width\"},function(e,t){x.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){x.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),s=n||(r===!0||i===!0?\"margin\":\"border\");return x.access(this,function(t,n,r){var i;return x.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):r===undefined?x.css(t,n,s):x.style(t,n,r,s)},t,o?r:undefined,o,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=x:\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}),\"object\"==typeof e&&\"object\"==typeof e.document&&(e.jQuery=e.$=x)})(window);","/*\nCopyright (c) 2010,2011,2012,2013 Morgan Roderick http://roderick.dk\nLicense: MIT - http://mrgnrdrck.mit-license.org\n\nhttps://github.com/mroderick/PubSubJS\n*/\n/*jslint white:true, plusplus:true, stupid:true*/\n/*global\n\tsetTimeout,\n\tmodule,\n\texports,\n\tdefine,\n\trequire,\n\twindow\n*/\n(function(root, factory){\n\t'use strict';\n\n\t// CommonJS\n\tif (typeof exports === 'object' && module){\n\t\tmodule.exports = factory();\n\n\t// AMD\n\t} else if (typeof define === 'function' && define.amd){\n\t\tdefine(factory);\n\t// Browser\n\t} else {\n\t\troot.PubSub = factory();\n\t}\n}( ( typeof window === 'object' && window ) || this, function(){\n\n\t'use strict';\n\n\tvar PubSub = {},\n\t\tmessages = {},\n\t\tlastUid = -1;\n\n\t/**\n\t *\tReturns a function that throws the passed exception, for use as argument for setTimeout\n\t *\t@param { Object } ex An Error object\n\t */\n\tfunction throwException( ex ){\n\t\treturn function reThrowException(){\n\t\t\tthrow ex;\n\t\t};\n\t}\n\n\tfunction callSubscriberWithDelayedExceptions( subscriber, message, data ){\n\t\ttry {\n\t\t\tsubscriber( message, data );\n\t\t} catch( ex ){\n\t\t\tsetTimeout( throwException( ex ), 0);\n\t\t}\n\t}\n\n\tfunction callSubscriberWithImmediateExceptions( subscriber, message, data ){\n\t\tsubscriber( message, data );\n\t}\n\n\tfunction deliverMessage( originalMessage, matchedMessage, data, immediateExceptions ){\n\t\tvar subscribers = messages[matchedMessage],\n\t\t\tcallSubscriber = immediateExceptions ? callSubscriberWithImmediateExceptions : callSubscriberWithDelayedExceptions,\n\t\t\ti, j;\n\n\t\tif ( !messages.hasOwnProperty( matchedMessage ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// do not cache the length of the subscribers array, as it might change if there are unsubscribtions\n\t\t// by subscribers during delivery of a topic\n\t\t// see https://github.com/mroderick/PubSubJS/issues/26\n\t\tfor ( i = 0; i < subscribers.length; i++ ){\n\t\t\tcallSubscriber( subscribers[i].func, originalMessage, data );\n\t\t}\n\t}\n\n\tfunction createDeliveryFunction( message, data, immediateExceptions ){\n\t\treturn function deliverNamespaced(){\n\t\t\tvar topic = String( message ),\n\t\t\t\tposition = topic.lastIndexOf( '.' );\n\n\t\t\t// deliver the message as it is now\n\t\t\tdeliverMessage(message, message, data, immediateExceptions);\n\n\t\t\t// trim the hierarchy and deliver message to each level\n\t\t\twhile( position !== -1 ){\n\t\t\t\ttopic = topic.substr( 0, position );\n\t\t\t\tposition = topic.lastIndexOf('.');\n\t\t\t\tdeliverMessage( message, topic, data );\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction messageHasSubscribers( message ){\n\t\tvar topic = String( message ),\n\t\t\tfound = messages.hasOwnProperty( topic ),\n\t\t\tposition = topic.lastIndexOf( '.' );\n\n\t\twhile ( !found && position !== -1 ){\n\t\t\ttopic = topic.substr( 0, position );\n\t\t\tposition = topic.lastIndexOf('.');\n\t\t\tfound = messages.hasOwnProperty( topic );\n\t\t}\n\n\t\treturn found && messages[topic].length > 0;\n\t}\n\n\tfunction publish( message, data, sync, immediateExceptions ){\n\t\tvar deliver = createDeliveryFunction( message, data, immediateExceptions ),\n\t\t\thasSubscribers = messageHasSubscribers( message );\n\n\t\tif ( !hasSubscribers ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( sync === true ){\n\t\t\tdeliver();\n\t\t} else {\n\t\t\tsetTimeout( deliver, 0 );\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t *\tPubSub.publish( message[, data] ) -> Boolean\n\t *\t- message (String): The message to publish\n\t *\t- data: The data to pass to subscribers\n\t *\tPublishes the the message, passing the data to it's subscribers\n\t**/\n\tPubSub.publish = function( message, data ){\n\t\treturn publish( message, data, false, PubSub.immediateExceptions );\n\t};\n\n\t/**\n\t *\tPubSub.publishSync( message[, data] ) -> Boolean\n\t *\t- message (String): The message to publish\n\t *\t- data: The data to pass to subscribers\n\t *\tPublishes the the message synchronously, passing the data to it's subscribers\n\t**/\n\tPubSub.publishSync = function( message, data ){\n\t\treturn publish( message, data, true, PubSub.immediateExceptions );\n\t};\n\n\t/**\n\t *\tPubSub.subscribe( message, func ) -> String\n\t *\t- message (String): The message to subscribe to\n\t *\t- func (Function): The function to call when a new message is published\n\t *\tSubscribes the passed function to the passed message. Every returned token is unique and should be stored if\n\t *\tyou need to unsubscribe\n\t**/\n\tPubSub.subscribe = function( message, func ){\n\t\tif ( typeof func !== 'function'){\n\t\t\treturn false;\n\t\t}\n\n\t\t// message is not registered yet\n\t\tif ( !messages.hasOwnProperty( message ) ){\n\t\t\tmessages[message] = [];\n\t\t}\n\n\t\t// forcing token as String, to allow for future expansions without breaking usage\n\t\t// and allow for easy use as key names for the 'messages' object\n\t\tvar token = String(++lastUid);\n\t\tmessages[message].push( { token : token, func : func } );\n\n\t\t// return token for unsubscribing\n\t\treturn token;\n\t};\n\n\t/**\n\t *\tPubSub.unsubscribe( tokenOrFunction ) -> String | Boolean\n\t *  - tokenOrFunction (String|Function): The token of the function to unsubscribe or func passed in on subscribe\n\t *  Unsubscribes a specific subscriber from a specific message using the unique token\n\t *  or if using Function as argument, it will remove all subscriptions with that function\n\t**/\n\tPubSub.unsubscribe = function( tokenOrFunction ){\n\t\tvar isToken = typeof tokenOrFunction === 'string',\n\t\t\tkey = isToken ? 'token' : 'func',\n\t\t\tsuccesfulReturnValue = isToken ? tokenOrFunction : true,\n\n\t\t\tresult = false,\n\t\t\tm, i;\n\n\t\tfor ( m in messages ){\n\t\t\tif ( messages.hasOwnProperty( m ) ){\n\t\t\t\tfor ( i = messages[m].length-1 ; i >= 0; i-- ){\n\t\t\t\t\tif ( messages[m][i][key] === tokenOrFunction ){\n\t\t\t\t\t\tmessages[m].splice( i, 1 );\n\t\t\t\t\t\tresult = succesfulReturnValue;\n\n\t\t\t\t\t\t// tokens are unique, so we can just return here\n\t\t\t\t\t\tif ( isToken ){\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\treturn PubSub;\n}));\n","/*!\n * enquire.js v2.1.2 - Awesome Media Queries in JavaScript\n * Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/enquire.js\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n\n!function(a,b,c){var d=window.matchMedia;\"undefined\"!=typeof module&&module.exports?module.exports=c(d):\"function\"==typeof define&&define.amd?define(function(){return b[a]=c(d)}):b[a]=c(d)}(\"enquire\",this,function(a){\"use strict\";function b(a,b){var c,d=0,e=a.length;for(d;e>d&&(c=b(a[d],d),c!==!1);d++);}function c(a){return\"[object Array]\"===Object.prototype.toString.apply(a)}function d(a){return\"function\"==typeof a}function e(a){this.options=a,!a.deferSetup&&this.setup()}function f(b,c){this.query=b,this.isUnconditional=c,this.handlers=[],this.mql=a(b);var d=this;this.listener=function(a){d.mql=a,d.assess()},this.mql.addListener(this.listener)}function g(){if(!a)throw new Error(\"matchMedia not present, legacy browsers require a polyfill\");this.queries={},this.browserIsIncapable=!a(\"only all\").matches}return e.prototype={setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(a){return this.options===a||this.options.match===a}},f.prototype={addHandler:function(a){var b=new e(a);this.handlers.push(b),this.matches()&&b.on()},removeHandler:function(a){var c=this.handlers;b(c,function(b,d){return b.equals(a)?(b.destroy(),!c.splice(d,1)):void 0})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){b(this.handlers,function(a){a.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var a=this.matches()?\"on\":\"off\";b(this.handlers,function(b){b[a]()})}},g.prototype={register:function(a,e,g){var h=this.queries,i=g&&this.browserIsIncapable;return h[a]||(h[a]=new f(a,i)),d(e)&&(e={match:e}),c(e)||(e=[e]),b(e,function(b){d(b)&&(b={match:b}),h[a].addHandler(b)}),this},unregister:function(a,b){var c=this.queries[a];return c&&(b?c.removeHandler(b):(c.clear(),delete this.queries[a])),this}},new g});","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport CartInput from '../components/cart_input';\nimport config from '../config/config';\nimport Loading from '../components/loading';\nimport TrackingHelper from '../utils/trackinghelper';\nimport Html5Validation from '../utils/html5validation';\nimport scrollToElement from '../utils/scrollTo';\nimport '../utils/tabstocollapse';\nimport '../utils/zoom';\nimport '../utils/slidercontrols';\nimport '../utils/sliderlazyload';\nimport '../utils/form_elements/plusminus';\nimport 'swipe';\nimport 'ratings';\n\nexport default function Ads() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('reminder.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n\n  this.cart_input = new CartInput();\n  this.notepad_input = new CartInput(\".notepad-header\");\n  this.loading = new Loading();\n}\n\nAds.prototype = {\n\n  attach: function(msg, element) {\n    var _this = this;\n\n    var html5validation = new Html5Validation();\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    this.initGallery();\n\n    if (element == document || $(element).hasClass(\"art-detail-page-top\")) {\n      //Check if zoom images are big enough..\n      window.s7jsonResponse = function(data, reqId) {\n        if (parseInt(data['image.width']) <= 870 || parseInt(data['image.height']) <= 489) {\n          $(\".main-image img\").eq(parseInt(reqId)).parent().addClass(\"too-small\");\n          if (parseInt(reqId) == 0) _this.thumbsCallback(0);\n        }\n      };\n    }\n\n    $(\".nav-tabs a.eClick\").on('click', function(e) {\n      $('.nav-tabs li.active a').attr('data-cerberus','cross-sell-best-block');\n    });\n\n    $(document).ready(function() {\n      if($('#alternatives .swipe-wrap.stoped .slide[data-index=\"0\"]').length === 1){\n        $('#alternatives .swipe-wrap.stoped .slide[data-index=\"0\"] .product-grid-item').attr('data-cerberus','pdp-cross-sell-last-item-viewed');\n      }\n      if($('#lastSeen .prod-cinema-heading').length === 1){\n        $('#lastSeen .prod-cinema-heading').attr('data-cerberus','cross-sell-news-title');\n      }\n      if($('.js-info-large .swipe-wrap.stoped .slide[data-index=\"0\"]').length === 1){\n        $('.js-info-large .swipe-wrap.stoped .slide[data-index=\"0\"]').attr('data-cerberus','cross-sell-news-block');\n      }\n      if($('#alsoBought .swipe-wrap.stoped .slide[data-index=\"1\"] .product-grid-item:first-child .caption').length === 1){\n        $('#alsoBought .swipe-wrap.stoped .slide[data-index=\"1\"] .product-grid-item:first-child .caption').attr('data-cerberus','cross-sell-news-fifth-product-elements');\n      }\n      if($('#sameCategory .prod-cinema-heading').length === 1){\n        $('#sameCategory .prod-cinema-heading').attr('data-cerberus','cross-sell-best-title');\n      }\n      if($('#sameCategory .swipe-wrap.stoped .slide[data-index=\"0\"]').length === 1){\n        $('#sameCategory .swipe-wrap.stoped .slide[data-index=\"0\"]').attr('data-cerberus','cross-sell-best-block');\n      }\n      if($('.single-size input[type=radio]:checked')){\n        $('.single-size input[type=radio]:checked').parent().addClass(\"active\");\n      }\n\n      const url = new URL(window.location.href);\n      const param = url.searchParams.get(\"alternatives\");\n      if(param) {\n        scrollToElement($('.possible-alternatives'), 500);\n      }\n    });\n\n    $(\".js-reviews-text-more\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-reviews-text').css('height','100%');\n      $('.js-reviews-text').addClass('no-after');\n      $(this).parent().hide();\n      $('.js-reviews-text-less').parent().show();\n    });\n\n    $(\".js-reviews-text-less\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-reviews-text').addClass('min-height');\n      $('.js-reviews-text').css('height', '');\n      $('.js-reviews-text').removeClass('no-after');\n      $(this).parent().hide();\n      $('.js-reviews-text-more').parent().show();\n      scrollToElement($('.reviews'), 500);\n    });\n\n    $(\".js-article-info-text-more\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-article-info-text').css('height','100%');\n      $('.js-article-info-text').addClass('no-after');\n      $(this).parent().hide();\n      $('.js-article-info-text-less').parent().show();\n    });\n\n    $(\".js-article-info-text-less\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-article-info-text').css('height','200px');\n      $('.js-article-info-text').removeClass('no-after');\n      $(this).parent().hide();\n      $('.js-article-info-text-more').parent().show();\n    });\n\n    // customer review guidelines\n    $(\"#openReviewGuidelines\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('#the-modal').html($(\".js-review-guideline\").html());\n      $('#the-modal').modal('show');\n    });\n\n    $(\"#openReviewHint\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('#the-modal').html($(\".js-review-hint\").html());\n      $('#the-modal').modal('show');\n    });\n\n    // product reminder\n    $(\"#open_product_reminder\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $(\"#the-modal\").empty().modal().load(config.productReminderModalPath, function() {\n        _this.showForm(_this);\n        Pubsub.publish(\"reminder.attach\", $(\"#the-modal\"));\n      });\n    });\n\n    $(\"#submitProductReminder\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      var form = $(\"#productReminderForm\");\n      var errors = html5validation.validateOnAjaxSubmit(form);\n      if (!errors){\n        _this.submitForm(_this);\n      }\n    });\n\n    // create customer review\n    $(\"[href=#openCustomerCreateReview]\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.openReviews();\n      $('#collapseRating').collapse('show');\n    });\n\n    $(\".js-scroll-to-reviews\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      scrollToElement($('.review-scroll'), 500);\n    });\n\n    $(\".js-scroll-to-alternatives\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      scrollToElement($('.possible-alternatives'), 500);\n    });\n\n    // show customer reviews\n    $(\"#openCustomerShowReviews\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.openReviews();\n    });\n\n    //show next reviews\n    $(\".js-show-more-reviews\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      const $this = $(this);\n      const loadCount = parseInt($this.attr('data-load-count'), 10) || 5;\n      const initialCount = parseInt($this.attr('data-initial-count'), 10) || 5;\n\n      $('.js-reviews-text .js-review-item:hidden').slice(0, loadCount).fadeIn();\n\n      if ($('.js-reviews-text .js-review-item:hidden').length === 0) {\n        $this.addClass(\"hidden\");\n      }\n      if ($('.js-reviews-text .js-review-item:visible').length > initialCount) {\n        $(\".js-show-less-reviews\").removeClass(\"hidden\");\n      }\n    });\n\n    $(\".js-show-less-reviews\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      const $this = $(this);\n      const initialCount = parseInt($(\".js-show-more-reviews\").attr('data-initial-count'), 10) || 5;\n      const $reviewsToHide = $('.js-reviews-text .js-review-item:visible').slice(initialCount);\n\n      if ($reviewsToHide.length > 0) {\n        $reviewsToHide.fadeOut(400, function() {\n          if ($reviewsToHide.index($(this)) === $reviewsToHide.length - 1) {\n            $this.addClass(\"hidden\");\n            $(\".js-show-more-reviews\").removeClass(\"hidden\");\n            scrollToElement($('.reviews'), 500);\n          }\n        });\n      } else {\n        $this.addClass(\"hidden\");\n        $(\".js-show-more-reviews\").removeClass(\"hidden\");\n        scrollToElement($('.reviews'), 500);\n      }\n    });\n\n    $('#header-basket').off().on('click', '.js-close-mobile-flyout', function(e){\n      e.preventDefault();\n      $(this).parents('.js-mobile-add-to-cart').remove();\n    });\n\n    //open right tab/panel\n    $(\".links a[href=#more-infos]\").off(\"click\").on(\"click\", function() {\n      $(\".panel-heading\").not(\".panel-in\").find(\"a[href=#service-pane]:visible\").click();\n      $(\".panel-heading.panel-in\").find(\"a[href=#detail-pane]:visible\").click();\n      $(\"a[href=#service]:visible\").click();\n    });\n    $(\"a.more-infos\").off(\"click\").on(\"click\", function() {\n      $(\".panel-heading\").not(\".panel-in\").find(\"a[href=#detail-pane]:visible\").click();\n      //$(\".panel-heading.panel-in\").find(\"a[href=#service-pane]:visible\").click();\n      $(\"a[href=#detail]:visible\").click();\n    });\n\n    //put it on the notepad\n    $(\".notepad-link\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $.get($(this).attr(\"href\"), function(data) {\n        _this.notepad_input.input(data.markup, data.count);\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"Notepad input error!\", error);\n      });\n    });\n\n    $(\".reminder-link\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $.get($(this).attr(\"href\") + \"&email=\" + $(\"<div/>\").text($(\"#reminder_email\").val()).html(), function(data) {\n        $(\"#reminder_callback\").html(data.markup);\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"Reminder input error!\", error);\n      });\n    });\n\n    var initPanelSliders = $.proxy(this.initPanelSliders, this);\n    $(\".art-detail-page .nav-tabs li a\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $(this).tab('show');\n      initPanelSliders();\n    });\n    if (element == document) $(\".first-tabs .nav-tabs a:first, .second-tabs .nav-tabs a:first\").tab('show');\n\n    $(\".art-detail-page-slider-tabs .panel-collapse\").off(\"show.bs.collapse.sliders\").on(\"show.bs.collapse.sliders\", initPanelSliders);\n\n    $(\".order-count\", element).plusminus();\n\n    $(\"#article-form\", element).off(\"submit\").on(\"submit\", function() {\n      $(\"#js-add-to-cart-272837\", element).click();\n      return false;\n    });\n\n    $(\"#js-add-to-cart-272837\", element).off(\"click\").on(\"click\", $.proxy(this.submit, this));\n\n    $(\".product-review-form\").off(\"click\").on(\"click\", \".js-submit-review\", function(e){\n      e.preventDefault();\n      _this.submitReview();\n    });\n\n    $('#productQuantity').off(\"change\").on('change', function(e) {\n      e.preventDefault();\n      var data = $(\"#article-form\").serialize();\n\n      $.post(config.amountChangePath, data)\n        .done(function(result) {\n          if(result.success){\n            var newContent = $(result.markup);\n            $('.price-info').replaceWith(newContent);\n          }\n        });\n    });\n\n    //Select Boxes change\n    $(\"[data-update]\").off(\"change\").on(\"change\", function(e) {\n      _this.loading.load();\n      var trackinghelper = new TrackingHelper();\n      var $element = $(e.target);\n      var category = $element.data('category');\n      var action = $element.data('action');\n      var value = $element.data('value');\n      trackinghelper.event(category !== undefined ? category : '', action, value !== undefined ? value : '');\n\n      $.get(config.variationChangePath + \"?q=ads_top&\" + $(\"#article-form\").serialize(), function(jsonData) {\n        _this.loading.stop();\n        _this.update(jsonData);\n        location.replace(\"#itemId=\" + $(\"input[name=itemId]\").val());\n        $(\"label[for='\" + $element.attr('id') + \"']\").addClass('active');\n        if(_this.last_msg == 'res.xs'){\n          Pubsub.publish(\"res.xs\", $(\".recommendation\"));\n        } else {\n          Pubsub.publish(\"res\", $(\".recommendation\"));\n        }\n      }).fail(function(jqXhr, e) {\n        if (window.console) console.log(e);\n      });\n    });\n\n    $(\".js-helpful\").off(\"click\").on(\"click\", function(e) {\n      var _this = this;\n      var value = $(this).data('value');\n      var prodId = $(\"input[name=productId]\").val();\n      var revId = $(this).parents('.reviews').find(\"input[name=reviewId]\").val();\n      var data = {\n          \"ratingid\": revId,\n          \"productNo\": prodId,\n          \"wasHelpful\": value,\n       }\n      $.post(config.productReviewHelpfulUrl, data).done(\n         function(resultJson) {\n           if(resultJson.success) {\n             $(_this).parent().find('.js-thank-you').show();\n             $(_this).parent().find('.js-thank-you').html(resultJson.markup);\n             $(_this).parent().find('.js-helpful').hide();\n           }\n           else {\n             console.error('AJAX failed');\n           }\n         }\n         ).fail(function(jqXHR, textStatus, errorThrown) {\n           console.error('AJAX failed', jqXHR, textStatus, errorThrown);\n           });\n      });\n\n  },\n\n  showForm: function(_this) {\n    var itemId = $(\"input[name=itemId]\").val();\n    var size = $('.js-size option[selected]').val();\n    $.get(config.productReminderFormPath + \"?itemId=\" + itemId + \"&size=\" + size, function(data) {\n      $(\"#product-reminder-anchor\").empty().html(data);\n      Pubsub.publish(\"reminder.attach\", $(\"#product-reminder-anchor\"));\n    });\n  },\n\n  submitForm: function(_this) {\n    var $form = $(\"form#productReminderForm\");\n    var itemId = $(\"input[name=itemId]\").val();\n    $.post(config.productReminderSubmitPath + \"?itemId=\"+ itemId, $form.serialize(), function(data) {\n      $(\"#product-reminder-form-anchor\").empty().html(data);\n      Pubsub.publish(\"reminder.attach\", $(\"#product-reminder-form-anchor\"));\n    });\n  },\n\n  determineVariation: function(forwardPath, initialItemId) {\n    \"use strict\";\n    var _this = this;\n\n    var hash = window.location.hash,\n      itemIdString = \"itemId=\",\n      itemIdStart = hash.substring(hash.indexOf(itemIdString) + itemIdString.length),\n      indexOfAnd = itemIdStart.indexOf(\"&\"),\n      itemId = indexOfAnd > 0 ? itemIdStart.substring(0, indexOfAnd) : itemIdStart;\n    var catalogIndex = $(\"input[name=catalogIndex]\").val();\n    var catalogIndexParam  = \"\";\n    if(catalogIndex != null && catalogIndex != 'undefined') {\n      catalogIndexParam = \"&catalogIndex=\" + catalogIndex;\n    }\n\n    if (itemId !== \"undefined\" && itemId !== \"\" && itemId !== initialItemId) {\n      $.get(forwardPath + \"&itemId=\" + itemId + \"&previousId=\" + initialItemId + catalogIndexParam, function(jsonData) {\n        _this.loading.stop();\n        _this.update(jsonData);\n      }).fail(function(jxXhr, e) {\n        if (window.console) console.log(e);\n      });\n    } else {\n      $(_this.cssShowGalleryClasses).show();\n    }\n  },\n  update: function(jsonData) {\n    var $htmlData = $(jsonData.markupTop);\n    $(\".popover\").remove();\n    $(\".swipe\", $htmlData).css({\n      visibility: \"hidden\"\n    });\n\n    $(\".art-detail-page-top\").replaceWith($htmlData);\n    var updateTitle = $(\".art-detail-page-top.col-container\").data(\"update-title\");\n    $('head title').text(updateTitle);\n    $(\".markup_features_tab\").replaceWith($(jsonData.markupFeatures));\n    this.gallery_swipe = false;\n\n    $(\"#service-pane .panel-body\").empty().html(jsonData.markupBottom);\n    if (jsonData.markupBottom == \"\") {\n      //Hide Service\n      $(\"#service, [href=#service]\").css({\n        visibility: \"hidden\"\n      });\n      //Activate Detail Pane\n      $(\".panel-heading\").not(\".panel-in\").find(\"a[href=#detail-pane]:visible\").click();\n      $(\"a[href=#detail]:visible\").click();\n    }\n    else $(\"#service, [href=#service]\").css({\n        visibility: \"visible\"\n      });\n\n    $(\"#alternative\").empty().html(jsonData.possibleAlternatives);\n    if (jsonData.possibleAlternatives == \"\") {\n      //Hide Alternatives\n      $(\"#alternative, [href=#alternative]\").css({\n        visibility: \"hidden\"\n      });\n      //Activate Detail Pane\n      $(\".nav-tabs li\").not(\".active\").find(\"a[href=#from-this]:visible\").click();\n      $(\"a[href=#from-this]:visible\").click();\n    }\n    else $(\"#alternative, [href=#alternative]\").css({\n        visibility: \"visible\"\n      });\n\n    Pubsub.publish(\"core.attach\", $(\".art-detail-page-top\"));\n  },\n  initGallery: function() {\n    var _this = this;\n\n    var makeGallery = function() {\n      this.gallery_swipe = $(\".main-swipe\").Swipe({\n        callback: this.thumbsCallback,\n        continuous: false,\n        startSlide: config.activeADSImage\n      }).knobs({\n        classes: [\"hidden-md\", \"hidden-lg\"]\n      }).data(\"Swipe\");\n      this.responsive(this.last_msg, true);\n    };\n\n    if (!this.gallery_swipe) {\n      this.gallery_swipe = true; //async loading, do not call me again.\n      makeGallery.call(_this);\n    }\n  },\n\n  setVoting: function(val, e) {\n    $('#votevalue').val(val);\n    return false;\n  },\n\n  submitReview: function() {\n\n    $(\"#reviews-pane #product-review-form .btn-submit\").off(\"click\");\n\n    $(\"#reviews-pane #product-review-form .btn-submit\").addClass('loader');\n\n    $.post($(\"#product-review-form\").attr(\"action\"), $(\"#product-review-form\").serialize(), function(data) {\n      if(data.success == \"true\") {\n        $(\"#reviews-pane .review-tab\").empty().html(data.markup);\n        scrollToElement($('.review-scroll'), 500);\n      }else{\n        $(\"#reviews-pane .review-tab .js-product-review-form\").empty().html(data.errors);\n        $('input.rating').rating();\n        if($('.has-error').is(':visible')) {\n          scrollToElement($('.has-error:first'), 500);\n        }\n      }\n      Pubsub.publish(\"core.attach\", $(\"#product-review-form\"));\n    }).fail(function(jqXhr, e) {\n      if (window.console) console.log(e);\n    }, \"html\")\n    .always(function() {\n      $(\"#reviews-pane #product-review-form .btn-submit\").removeClass('loader');\n    });\n  },\n\n  submit: function(e) {\n    e.preventDefault();\n    var _this = this;\n    $.post($(\"#article-form\").attr(\"action\"), $(\"#article-form\").serialize(), function(data) {\n      if(data.success){\n        _this.cart_input.input(data.markup, data.count, data.total, null, null);\n        if(_this.last_msg=='res.xs'){\n          $('#header-basket').append(data.mobileMarkup);\n          window.setTimeout(function() {\n            $('#header-basket').find('.js-mobile-add-to-cart').remove();\n          },10000);\n        } else if(_this.last_msg=='res.sm' || _this.last_msg=='res.md') {\n          $('#basket-modal').html(data.markup);\n          $('#basket-modal').on('shown.bs.modal', function (e) {\n            var modalSwipe = $(this).find(\".swipe\");\n            if (modalSwipe.data(\"Swipe\")) modalSwipe.data(\"Swipe\").kill();\n            modalSwipe.Swipe({\n              pair: 3,\n              continuous: false\n            }).controls().lazy();\n          });\n          $('#basket-modal').modal('show').trigger('shown');\n        } else {\n          $('#basket-modal').html(data.markup);\n          $('#basket-modal').on('shown.bs.modal', function (e) {\n            var modalSwipe = $(this).find(\".swipe\");\n            if (modalSwipe.data(\"Swipe\")) modalSwipe.data(\"Swipe\").kill();\n            modalSwipe.Swipe({\n              pair: 4,\n              continuous: false\n            }).controls().lazy();\n          });\n          $('#basket-modal').modal('show').trigger('shown');\n        }\n      }else{\n        var selector = $('.js-ptext-error');\n        if ($(selector).length > 0) {\n          scrollToElement(selector, 500);\n          selector.html(data.errorsMarkup);\n          $('.js-input-ptext').each(function (i, obj) {\n            var _this = this;\n            if ($(_this).val().length > $(_this).data('maxlength')) {\n              $(_this).addClass('has-error');\n              selector.css(\"padding-bottom\", \"15px\");\n            }\n          });\n        }\n      }\n    }).fail(function(jqXhr, e) {\n      if (window.console) console.log(\"submit: \" + e);\n    });\n\n  },\n  responsive: function(msg, on_off) {\n    if (on_off) {\n      this.last_msg = msg;\n      this.removeSwipes();\n    }\n\n    switch (msg) {\n    case 'res.xs':\n\n      if (on_off) { // entered state xs\n\n        //hide all tabs\n        $(\".art-detail-page-tabs, .art-detail-page-slider-tabs\").ttcol({\n          collapse: false\n        });\n\n        //show only reviews xs\n        var el = $(\".art-detail-page-slider-tabs #reviews\");\n        el.addClass(\"ttcol-processed\");\n        el.find(\".panel-collapse\").removeClass(\"in\");\n        el.find(\".panel-collapse\").addClass(\"collapse\");\n        el.removeClass(\"tab-pane\");\n\n        $(\".thumb-swipe\").Swipe({\n          pair: 4,\n          continuous: false\n        }).knobs();\n\n\n        // Add controls to 3Pagen modern with legacy breakpoint sm\n        const mainSwipe = $('.main-swipe');\n        if(mainSwipe.closest('.x-style')){\n          mainSwipe.Swipe().controls();\n        }\n\n        $(\".last-seen-swipe\").Swipe().knobs().lazy();\n      } else { // left state xs\n\n      }\n      break;\n    case 'res.sm':\n      if (on_off) { // entered state sm\n        var _this = this;\n\n        $(\".last-seen-swipe\").Swipe({\n          pair: 4\n        }).knobs().lazy();\n\n        $(\".art-detail-page-tabs, .art-detail-page-slider-tabs\").ttcol({\n          collapse: false\n        });\n\n        $(\".thumb-swipe\").Swipe({\n          pair: 4,\n          continuous: false\n        }).knobs();\n        this.addThumbsClick();\n      } else { // left state sm\n\n      }\n      break;\n    default:\n      if (on_off) {\n\n        $(\".art-detail-page-tabs, .art-detail-page-slider-tabs\").ttcol({\n          collapse: false\n        });\n\n        $(\".thumb-swipe\").Swipe({\n          pair: 4,\n          continuous: false,\n          transitionEnd: function(index, elem) {\n            //Tracking\n            var trackinghelper = new TrackingHelper();\n            var $element = $(elem).parents('.swipe').next();\n            var category = $element.data('category');\n            var action = $element.data('action');\n            var value = $element.data('value');\n            trackinghelper.event(category !== undefined ? category : '', action, value !== undefined ? value : '');\n          }\n        }).controls();\n\n        this.addThumbsClick();\n        $(\".last-seen-swipe\").Swipe({\n          pair: 6,\n          continuous: false\n        }).controls().lazy();\n\n      }\n    }\n    if (on_off) {\n      this.initPanelSliders();\n      Pubsub.publish(\"core.attach\", $(\".last-seen-swipe\"));\n    }\n\n    this.zoom = $(\".main-image div.pda-big-img-view\").zoom().data('Zoom');\n  },\n  addThumbsClick: function() {\n    var _this = this;\n    $(\".thumbs .gallery-thumb\").off(\"click\").on(\"click\", function() {\n      _this.gallery_swipe.slide($(\".thumbs .item\").index($(this)));\n      $(\".thumbs .item\").removeClass(\"active\");\n      $(this).addClass(\"active\");\n    });\n\n    $(\".thumbs .js-openVideoModal\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      var $element = $(e.target);\n      var content = '.' + $element.parents('.js-openVideoModal').data('content');\n      const theModal = $('#the-modal');\n      theModal.html('');\n      $(content).first('.modal-dialog').clone().appendTo(theModal);\n      theModal.modal('show');\n      var target = $('#iframe_video').attr('data-src');\n      $('#iframe_video').attr('src',target);\n    });\n  },\n  thumbsCallback: function(pos) {\n    setTimeout(function() {\n      var thumb_swipe = $(\".thumb-swipe\").data(\"Swipe\");\n      if (thumb_swipe !== undefined) {\n        thumb_swipe.slide(Math.floor(pos / 4));\n      }\n    }, 0);\n    $(\".thumbs .item\").removeClass(\"active\").eq(pos).addClass(\"active\");\n  },\n  _initTabSwipes: function(res) {\n    var swipes = $(\".art-detail-page-slider-tabs .swipe\");\n    swipes.each(function() {\n      if ($(this).data(\"Swipe\")) $(this).data(\"Swipe\").kill();\n    });\n    if (res == \"res.sm\") swipes.Swipe({\n        pair: 3\n      }).knobs();\n    else swipes.Swipe({\n        pair: 4,\n        continuous: false\n      }).controls().lazy();\n  },\n  initPanelSliders: function(e) {\n    var _this = this;\n    setTimeout(function() {\n      _this._initTabSwipes(_this.last_msg);\n      Pubsub.publish(\"core.attach\", $(\".art-detail-page-slider-tabs .swipe\"));\n    },\n      0);\n  },\n  removeSwipes: function() {\n    if (this.zoom) this.zoom.kill();\n\n    $(\".thumbs .item\").off(\"click\");\n\n    $(\".swipe\").each(function() {\n      if ($(this).hasClass(\"main-swipe\")) return true;\n\n      if ($(this).data(\"Swipe\")) $(this).data(\"Swipe\").kill();\n    });\n  },\n  pinchStart: function() {\n    $(\".swipe\").css(\"-ms-touch-action\", \"none\");\n  },\n  pinchEnd: function() {\n    $(\".swipe\").css(\"-ms-touch-action\", \"pan-y\");\n  },\n  openReviews: function() {\n    var _this = this;\n    var reviews;\n    if(_this.last_msg == 'res.xs'){\n      reviews = $(\"[href=#reviews-pane]\");\n    } else {\n      reviews = $(\"[href=#reviews]\");\n    }\n    $('html,body').animate({scrollTop: reviews.offset().top});\n    if (!$(\".js-btn-review\").is(\":visible\")) {\n      reviews.click();\n    }\n  },\n};\n","import $ from 'jquery';\nimport mask from 'mask';\nimport Pubsub from 'pubsub';\nimport forms from '../utils/forms';\nimport Html5Validation from '../utils/html5validation';\nimport Loading from '../components/loading';\nimport config from '../config/config';\nimport numberformats from '../utils/numberformats';\nimport Coupon from '../components/coupon';\nimport AsyncCheckout from '../views/async_checkout';\nimport scrollToElement from \"../utils/scrollTo\";\nimport showOrHidePassword from \"../components/password\";\nimport AddressSuggestions from '../components/address_sugesstions';\n\nexport default function Checkout() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  this.loading = new Loading();\n  this.coupon = new Coupon();\n  AsyncCheckout();\n}\n\nCheckout.prototype = {\n\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    var addressSuggestions;\n    if ($(\".js-address-suggestions\").length != 0) {\n      addressSuggestions = new AddressSuggestions();\n    }\n\n    // Login: Let opportunities toggle so only one field is shown at the time\n    $(\".checkout-login article.content > .toggleButton > button\").off(\"click\").click(function() {\n      $(\".checkout-login article.content\").toggleClass(\"folded\", 200, \"swing\");\n    });\n\n    $(\"a.btn-navi-step .checkout-navi-step\").each(function() {\n      if ($(\"a.btn-navi-step .checkout-navi-step\").hasClass(\"ready\")) {\n        $(\"a.btn-navi-step .checkout-navi-step.ready span.number\").hide();\n        $(\"a.btn-navi-step .checkout-navi-step.ready span.glyphicon-3P-checked\").show();\n      }\n    });\n\n    $(\".voucher-toggle\").off(\"click\").click(function() {\n      $(this).toggleClass(\"toggled\");\n      $(this).parent().parent().find(\".voucher-input\").toggleClass(\"hidden\");\n    });\n\n    showOrHidePassword();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    $(\"[data-date]\", element).mask(\"99.99.9999\");\n\n    if ($(\".checkout-address\").length !== 0) {\n      // Addresses\n      $(\"#packstation-checkbox\").off(\"click\").click(function() {\n        var isChecked = $(this).is(':checked');\n        $(\"#address-form-packstation\").toggle(isChecked);\n        $(\"#address-form-default\").toggle(!isChecked);\n      });\n    }\n\n    if ($(\".checkout-shipping\").length == 0) return;\n    // Shipping\n    // Submit new address form\n    $(\"form#new-shipping-addr button\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      var $form = $(\"form#new-shipping-addr\");\n      var validator = new forms.Validator($form);\n      if (validator.validate(true)) {\n        _this.loading.load();\n        $.post($form.attr(\"action\") + \"?q=new_shippingaddr\", $form.serialize(), function(data) {\n          if (data.success) {\n            var radio = $(\"#deliver-radios .radio\").first().clone();\n            $(\"#deliver-radios .radio input\").prop(\"checked\", false);\n            radio.find(\"span\").html(data.name);\n            radio.find(\"input\").prop(\"checked\", true).val(data.id);\n\n            $(\"#deliver-radios\").append(radio);\n            $(\"#new_shipping_address\").collapse(\"hide\");\n\n            Pubsub.publish(\"core.attach\", $(\"#deliver-radios\"));\n          } else {\n            $(\"#new_shipping_address\").empty().append(data.markup);\n            $form = $(\"form#new-shipping-addr\");\n            validator = new forms.Validator($form);\n            validator.showError(true);\n            Pubsub.publish(\"core.attach\", $(\"#new_shipping_address\"));\n          }\n          _this.loading.stop();\n        }).fail(function(jqXhr, e) {\n          if (window.console) console.log(e);\n        });\n      }\n    });\n\n    $(\".js-alert-form\").on(\"keydown\",function(){\n      $('.js-alert').hide();\n    });\n\n    $(\"span.button-checkout-secondary.js-scroll-new-customer\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      scrollToElement($(\".new-customer-scroll\"), 500);\n    });\n\n    // call carrier service Pickup points\n    $('.js-carrier-service').off('click').on('click', function () {\n      _this.callCarrierService();\n    });\n\n    $( document ).ready(function() {\n      if( $('#js-pr-radio').prop('checked') ) {\n        _this.callCarrierService();\n        $('#at_sp').setAttribute('checked', false);\n        $('#delivery_normal').setAttribute('checked', false);\n        $('#delivery_express').setAttribute('checked', false);\n      }\n    });\n\n    // search pickup points\n    $('.js-pointrelais').off(\"click\").on(\"click\", '.js-pr-search', function(e){\n      e.preventDefault();\n      $('.js-pr-search').addClass('loader');\n      var zipCode = $('.js-pr-zipcode').val();\n      $.post(config.carrierService + \"?zipCode=\" + zipCode + \"&userPickUpPoint=false\", function(data) {\n        $('.js-pr-city').html(data.markup);\n        $('.js-pr-search').removeClass('loader');\n        $('input[name=indexOfSelectedPickUpPoint]').first().prop( \"checked\", true ).change();\n      }).fail(function(jqXhr, error) {\n        $('.js-pr-search').removeClass('loader');\n        if (window.console) console.log(\"load pickup point addresses error!\", error);\n      });\n    });\n\n    // set pickUpPoint address from selected radio button\n    $('.js-pointrelais').off('change').on('change', '.js-filter-city', function(e){\n      var city = $(this).val();\n      if( city == 0) {\n        $('.js-pup-list label').parent().show();\n      }else {\n        $('.js-pup-list label').parent().hide();\n        $('.js-pup-list input[data-city=\"'+ city +'\"]').parent().parent().parent().show();\n      }\n    });\n\n    $(\".js-pointrelais\").off('keydown').on('keydown', '.js-pr-zipcode', function(e) {\n      var keyCode = e.which;\n      if (e.type == \"keydown\" && keyCode != 13 && keyCode != 9) {\n        return;\n      }\n      e.preventDefault();\n      $('.js-pup-btn').click();\n    });\n\n    $('#error').affix({\n    });\n\n    $(\"#saferpay-button\", element).off(\"click\").on(\"click\", function(e) {\n      $.get(cfg.saferpayPaymentPageInitializeUrl, function(data) {\n        window.location.href = data.url;\n      });\n    });\n\n    // Load and attach form\n    $(\".new-shipping-btn\").off(\"click\").on(\"click\", function() {\n      var shipping = $(\"#new_shipping_address\");\n      if (shipping.hasClass(\"in\")) {\n        shipping.collapse(\"hide\");\n        return;\n      }\n      // Load edit form\n      _this.loading.load();\n      $.get(config.newAddressPath + \"?q=shipping_newadd\", function(data) {\n        shipping.empty().append(data);\n\n        shipping.bind(\"hidden.bs.collapse\", function() {\n          $(this).empty();\n        });\n        shipping.collapse().collapse(\"show\");\n\n        _this.loading.stop();\n        // Attach event handlers\n        Pubsub.publish(\"core.attach\", shipping);\n      }).fail(function(jqXhr, e) {\n        if (window.console) console.log(e);\n      });\n    });\n\n    // update addressbook id\n    $(\".address-book\").off(\"click\").on(\"click\", function() {\n      $(\"#address-id\").val($(this).attr(\"data-value\"));\n    });\n\n    // TODO: harmonize/standardize following methods regarding address changes\n\n    // Load change address form on shipping page\n    $(\".checkout-shipping .js-changeAddress\").off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n\n      var address_type = $(this).data('type');\n      var url = '';\n\n      if( address_type == 'shipping' ) {\n        url = config.checkoutShippingNewAddressChangeUrl;\n      } else if(address_type == 'invoice') {\n        url = config.checkoutInvoiceAddressChangeUrl;\n      }\n\n      $.get(url, function(data) {\n        var checkoutShipping = $(\".checkout-shipping\");\n        checkoutShipping.html(data.markup);\n        Pubsub.publish(\"core.attach\", checkoutShipping);\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"changeAddress error!\", error);\n      });\n    });\n\n    $('.checkout-shipping .js-new-invoice-address').off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n      addressSuggestions.submitFormInvoice($(\".js-address-form\"));\n    });\n\n    // Submit existing address via AJAX\n    $(\".checkout-shipping .js-submitRecentDeliveryAddressButton\").off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n      var form = $(this).parent().serialize();\n      $.post(config.checkoutShippingExistingAddressChangeUrl, form, function(data) {\n        if(data.success) {\n          window.location.reload();\n        } else {\n          var checkoutShipping = $(\".checkout-shipping\");\n          checkoutShipping.html(data.markup);\n          Pubsub.publish(\"core.attach\", checkoutShipping);\n        }\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"submitRecentDeliveryAddressButton error!\", error);\n      });\n    });\n\n    $(\".checkout-shipping .js-submitNewAddressButton\").off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n      var isValid = html5validation.validate($('#js-newAddressForm'));\n      var form;\n      if (isValid) {\n        form = $('#js-newAddressForm input,#js-newAddressForm select').filter(function(e) {\n          if ($(this).val().length > 0) {\n            return $(this).val();\n          }});\n      } else {\n        return;\n      }\n      addressSuggestions.submitFormShipping(form);\n    });\n\n    $('#collapseOne').on('shown.bs.collapse', function () {\n      $('.js-submit-check').attr(\"disabled\", false);\n    })\n    $('#collapseTwo').on('shown.bs.collapse', function () {\n      if ($('.js-country-msg').is(\":visible\")) {\n        $('.js-submit-check').attr(\"disabled\",true);\n      }else{\n        $('.js-submit-check').attr(\"disabled\", false);\n      }\n    })\n  },\n  callCarrierService: function() {\n    var zipCode = $('#js-pr-radio').data('userzipcode');\n    var index = $('#js-pr-radio').data('selectedindex');\n    var alreadyOpened = $('#collapseOne').data('was-opened');\n    if (!alreadyOpened) {\n      $('#collapseOne').data('was-opened',true);\n      if(!index){\n        $('.panel-default:first-of-type').addClass('loader');\n        $.post(config.carrierService + \"?zipCode=\" + zipCode + \"&userPickUpPoint=true\", function(data) {\n          $('.point-relais').html(data.markup);\n        }).fail(function(jqXhr, error) {\n          if (window.console) console.log(\"load pickup point addresses error!\", error);\n        }).done(function() {\n          $('input[name=indexOfSelectedPickUpPoint]').first().click();\n        }).always(function(){\n          $('.panel-default:first-of-type').removeClass('loader');\n        });\n     }\n    }\n  },\n  checkOptions: function(element) {\n    var addressValue = $(\"[name=addressType]:checked\").val();\n    var paymentValue = $(\"[name=paymentType]:checked\").val();\n    var deliveryValue = $(\"[name=deliveryType]:checked\").val();\n\n    if (addressValue != \"INVOICE\")\n      addressValue = \"DELIVERY\";\n\n    if (this.options != undefined) {\n      var delivery_types = this.options.addressType[addressValue].deliveryType;\n      delivery_types = this.arrayIntersect(delivery_types, this.options.paymentType[paymentValue].deliveryType);\n      this.disableInputs(\".delivery-panel .delivery-options input[type=radio]\", delivery_types);\n\n      var payment_types = this.options.addressType[addressValue].paymentType;\n      payment_types = this.arrayIntersect(payment_types, this.options.deliveryType[deliveryValue].paymentType);\n      this.disableInputs(\"form .panel-heading input[type=radio]\", payment_types);\n\n      var address_types = this.options.paymentType[paymentValue].addressType;\n      address_types = this.arrayIntersect(address_types, this.options.deliveryType[deliveryValue].addressType);\n      this.disableInputs(\".address-block input[type=radio]\", address_types, true);\n    }\n  },\n  disableInputs: function(selector, valid_array, isAddress) {\n    var _this = this;\n    $(selector).each(function() {\n      if ($.inArray($(this).val(), valid_array) > -1) _this.setInputDisabled($(this), false); else {\n        _this.setInputDisabled($(this), true);\n\n        // Special Case for address\n        if (isAddress && $.inArray(\"DELIVERY\", valid_array) > -1) {\n          if ($(this).val() !== \"INVOICE\") _this.setInputDisabled($(this), false);\n        }\n        // Invalid combination handling\n        if ($(this).prop(\"checked\") && $(this).prop(\"disabled\")) {\n          $(\"[name=\" + $(this).attr(\"name\") + \"]\").not(\":disabled\").first().prop(\"checked\", true).click().trigger(\"change\");\n          $(\".invalid-combination\").show();\n          $(\"body, html\").animate({\n            scrollTop: $(\".invalid-combination\").offset().top\n          }, 200);\n        }\n      }\n    });\n  },\n  setInputDisabled: function($input, disabled) {\n    if (!disabled) {\n      $input.attr(\"disabled\", null);\n      $input.parent().parent().removeClass(\"disabled\");\n    } else {\n      $input.attr(\"disabled\", \"disabled\");\n      $input.parent().parent().addClass(\"disabled\");\n    }\n  },\n  arrayIntersect: function(a1, a2) {\n    return $.map(a1, function(a) {\n      return $.inArray(a, a2) < 0 ? null : a;\n    });\n  }\n};\n\n\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\nimport Html5Validation from '../utils/html5validation';\n\nexport default function Account() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n  this.loading = new Loading();\n}\n\nAccount.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    this.correctSliders = function() { //compensate for widths with decimal fractions in sliders\n      var w = $(\".slider-container\").width();\n      var hw = Math.floor(w / 2) + (w % 2);\n      $(\".toggle.handle\").width(hw);\n      $(\".toggle.no\").width(w - hw - 2);\n      var yesToggles = $(\".toggle.yes\").width(w - hw - 2);\n      //reset toggle position as well in resize!\n      $(\".slider\").each(function(i) {\n        if ((this.style.left !== \"\") && (parseInt(this.style.left) != 0)) { //the slider is in the left position\n          this.style.left = \"-\" + yesToggles.get(i).style.width;\n        }\n      });\n    }\n\n    if($('.js-bday-msg').length > 0) {\n      document.getElementById(\"birthDay\").onchange = function() {verifyBirthdate()};\n      document.getElementById(\"birthMonth\").onchange = function() {verifyBirthdate()};\n      document.getElementById(\"birthYear\").onchange = function() {verifyBirthdate()};\n    }\n\n    function verifyBirthdate() {\n        $('.js-bday-msg').hide();\n        var d = document.getElementById(\"birthDay\");\n        var m = document.getElementById(\"birthMonth\");\n        var y = document.getElementById(\"birthYear\");\n        var error = false;\n\n        if(d.value.length === 0 || m.value.length === 0 || y.value.length === 0){\n          return;\n        }\n        var d_int = parseInt(d.value, 10),\n            m_int = parseInt(m.value, 10),\n            y_int = parseInt(y.value, 10);\n        var date = new Date(y_int, m_int - 1 , d_int);\n        var newDate = ('0' + date.getDate()).slice(-2) + '.'\n                    + ('0' + ( date.getMonth() + 1 )).slice(-2) + '.' + date.getFullYear();\n        var orgDate = ('0' + d.value).slice(-2) + '.'\n                    + ('0' + m.value).slice(-2) + '.' + y.value;\n        if(newDate !== orgDate) {error = true;}\n\n        var toDay = new Date();\n        var date18 = new Date ((toDay.getFullYear() - 18), toDay.getMonth(), toDay.getDate());\n        if(date18 <= date) {error = true;}\n\n        if(error){\n          $('.js-bday-msg').show();\n        }\n    }\n\n    $(window).off(\"resize\").on(\"resize\", function() { //corrects a bug that occurs of the overall width of the slider container is odd (one pixel line of the red slider appears if slider is in 0 position)\n      _this.correctSliders();\n    });\n    this.correctSliders(); //correct the initial slider size set by the css\n  },\n\n  responsive: function(msg, on_off) {\n    switch (msg) {\n    case 'res.xs':\n      if (on_off) { // entered state xs\n      } else { // left state xs\n\n      }\n      break;\n    case 'res.sm':\n      if (on_off) { // entered state sm\n      } else { // left state sm\n\n      }\n      break;\n    default:\n      if (on_off) {\n      }\n    }\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport language from '../config/language';\n\nexport default function SpecialCategory() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nSpecialCategory.prototype = {\n  attach: function(msg, element) {\n\n    if(element === document){\n      $(document).ready(function() {\n        var shopCountry = config.shopCountry;\n        var isShopCountryEqualsLanguage = shopCountry === language.slice(-2).toLowerCase();\n        // if language is different to shop country\n        if(isShopCountryEqualsLanguage) {\n          removeCountrySwitch();\n        }\n        if(isEmptyElement($('#the-modal'))) {\n          showSpecialCategoryOverlay();\n        }\n      });\n    }\n\n    setTimeout(function () {\n        $(\"#the-modal\").off('hidden.bs.modal').on('hidden.bs.modal', function() {\n          emptyModal();\n          showSpecialCategoryOverlay();\n        });\n      }, 10);\n\n    function showSpecialCategoryOverlay() {\n      $.get(cfg.specialCategoryUrl, function (data) {\n        if (data.markup && data.showSpecialCategoryOverlay) {\n            $('#the-modal').html(data.markup);\n            $.post(cfg.specialCategoryUrl, {\"specialCategoryOverlayHasShown\": true});\n            $('#the-modal').modal('show');\n        } else {\n          emptyModal();\n        }\n      }).fail(function (jqXhr, error) {\n        if (window.console) console.log(\"special category overlay error!\", error);\n      });\n    }\n\n    function removeCountrySwitch() {\n      var countryOverlay = $('.js-country-switch');\n      if (countryOverlay.length > 0) {\n        countryOverlay.closest($('.modal-dialog')).remove();\n      }\n    }\n\n    function emptyModal() {\n      $(\"#the-modal\").modal('hide');\n      $(\"#the-modal\").empty();\n    }\n\n    function isEmptyElement(element) {\n      return !$.trim(element.html());\n    }\n  }\n};\n","import $ from 'jquery';\nimport ProductListFilters from '../components/productlist_filters';\nimport Pubsub from 'pubsub';\nimport Offcanvas from '../components/offcanvas';\nimport Pagination from '../components/pagination';\nimport LazyScroll from '../components/lazyscroll';\nimport 'bootstrap';\n\nexport default function Product() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.resxs, this));\n  this.offcanvas = new Offcanvas();\n  this.filters = new ProductListFilters();\n}\n\nProduct.prototype = {\n  attach: function(msg, element) {\n\n    $(\"a.productlink\").off(\"mousedown\").on(\"mousedown\", function(e) {\n      //track product link click (with left and middle mouse buttons)\n      if (e.which === 1 || e.which === 2) {\n        var $this = $(this);\n        Pubsub.publishSync(\"tracking.productListClick\", $this);\n      }\n    });\n\n    if ($(element).has(\".product-list-part\")) {\n      this.lazyScroll = new LazyScroll(\".product-list\", \".product-grid-item\");\n    }\n\n    //Form Toggle\n    var toggleBtnFilter = $('.page-product-list [data-toggle=offcanvas][data-burgertype=filter]');\n    var toggleBtnSortBy = $('.page-product-list [data-toggle=offcanvas][data-burgertype=sortby]');\n    var _this = this;\n\n    toggleBtnFilter.off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      e.stopPropagation();\n\n      Pubsub.publish(\"offcanvas.showfilter\", true);\n\n      _this.offcanvas.toggle();\n      $('#product-filter-flyout').attr(\"data-burger\", \"filter\");\n    });\n\n    toggleBtnSortBy.off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      e.stopPropagation();\n\n      Pubsub.publish(\"offcanvas.showsortby\", true);\n\n      _this.offcanvas.toggle();\n      $('#product-filter-flyout').attr(\"data-burger\", \"sortby\");\n    });\n\n    if ($(\"#s24widget\")[0]) {\n      $.getScript('http://widget.s24.com/v2/media/js/s24widget.js').done(function() {\n        var sq = $(\".searchquery\").data('search-query');\n        if (window.console) {\n          console.log(sq);\n        }\n        $('#s24widget').s24_widget(\n          {\n            'app_id': '4fa76833',\n            'widget_id': 10,\n            'search_query': sq\n          }\n        );\n      });\n    }\n\n    $('input:radio').click(function() {\n      $('label[for=\"' + $(this).attr('id') + '\"]').toggleClass('list-active');\n    });\n\n    this.pagination = $(\".list-pager\", element).pagination({\n      container: $(\".product-list-part\")\n    }).data(\"Pagination\");\n\n    //Close\n    $(\".product-filter-controls .close-btn\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.offcanvas.hide();\n    });\n\n    if (_this.isxs) {\n      _this.offcanvas.switchIt(_this.isxs, true);\n    } //Double from offcanvas, but needed for speed..\n  }, //attach\n  resxs: function(message, on_off) {\n    if ((message == \"res.xs\" || message == \"res.sm\") && on_off) {\n      this.isxs = on_off;\n      this.offcanvas.switchIt(on_off);\n    }\n    else if ((message == \"res.md\" || message == \"res.lg\") && on_off) {\n      this.isxs = false;\n      this.offcanvas.switchIt(false);\n    }\n    //Re-Setup Swipes\n    if (on_off) {\n      $(\".product-grid-item .swipe\").each(function() {\n        if ($(this).data(\"Swipe\")) {\n          $(this).data(\"Swipe\").setup();\n        }\n      });\n    }\n  },\n  enableRange: function(enable) {\n    $(\"#from_price, #to_price\").prop(\"disabled\", !enable);\n  }\n};\n","import $ from 'jquery';\nimport '../utils/lazyload';\nimport '../utils/slidercontrols';\nimport '../utils/sliderknobs';\nimport '../utils/sliderlazyload';\nimport 'swipe';\nimport Pubsub from 'pubsub';\nimport TrackingHelper from '../utils/trackinghelper';\nimport config from '../config/config';\nimport language from '../config/language';\n\nexport default function Home() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n}\n\nHome.prototype = {\n  //\"methods\"\n  attach: function(msg, element) {\n    if (element === document) {\n      //page load banner toggle\n      $(\".action-push\").collapse({\n        toggle: false\n      });\n      setTimeout(function() {\n        $(\".action-push\").collapse(\"show\");\n        $(\".action-push button\").click(function(e) {\n          return false;\n        });\n        $(\".action-push button\").mousedown(function(e) {\n          e.preventDefault();\n          $(\".action-push\").collapse(\"hide\");\n          //Tracking\n          var trackinghelper = new TrackingHelper();\n          $element = $(e.target);\n          var category = $element.data('category');\n          var action = $element.data('action');\n          var value = $element.data('value');\n          trackinghelper.event(category !== undefined ? category : '', action, value !== undefined ? value : '');\n        });\n      }, 1500);\n    }\n\n    if($('.home .recommendation .swipe-wrap .slide[data-index=\"0\"] .product-grid-item:first-child .caption').length === 1){\n      $('.home .recommendation .swipe-wrap .slide[data-index=\"0\"] .product-grid-item:first-child .caption').attr('data-cerberus','hp-cross-sell-news-first-product-elements');\n    }\n    if($('.home .recommendation .swipe-wrap .slide[data-index=\"0\"] .product-grid-item:first-child').length === 1){\n      $('.home .recommendation .swipe-wrap .slide[data-index=\"0\"] .product-grid-item:first-child').attr('data-cerberus','hp-cross-sell-news-first-product-block');\n    }\n    if($('.home .recommendation .right.carousel-control').length === 1){\n      $('.home .recommendation .right.carousel-control').attr('data-cerberus','hp-cross-sell-news-slider-right-arrow');\n    }\n    if($('.home .recommendation .left.carousel-control').length === 1){\n      $('.home .recommendation .left.carousel-control').attr('data-cerberus','hp-cross-sell-news-slider-left-arrow');\n    }\n  },\n  responsive: function(msg, on_off) {\n    switch (msg) {\n    case 'res.xs':\n      if (on_off) { // entered state xs\n        this.removeSwipes();\n        $(\".action-stage .swipe\").Swipe({\n          auto: 6000,\n          speed: 600\n        }).controls().knobs();\n        $(\".teaser-carousel .swipe\").Swipe({\n          pair: 2\n        });\n\n      } else { // left state xs\n\n      }\n      break;\n    case 'res.sm':\n      if (on_off) { // entered state sm\n        this.removeSwipes();\n        var swipe = $(\".action-stage .swipe\").Swipe({\n          auto: 6000,\n          speed: 600\n        }).knobs();\n\n        // Add controls to 3Pagen modern with legacy breakpoint sm\n        if($('.action-stage').closest('.x-style')){\n          swipe.controls();\n        }\n        $(\".teaser-carousel .swipe\").Swipe({\n          pair: 2\n        });\n\n      } else { // left state sm\n\n      }\n      break;\n    default:\n      if (on_off) {\n        this.removeSwipes();\n        $(\".action-stage .swipe\").Swipe({\n          auto: 6000,\n          speed: 600,\n          transitionEnd: function(index, elem) {\n            //Tracking\n            if ($(elem).parent().hasClass('stoped')) {\n              var trackinghelper = new TrackingHelper();\n              var $element = $(elem).parents('.swipe');\n              var category = $element.data('category');\n              var action = $element.data('action');\n              var value = $element.data('value');\n              trackinghelper.event(category !== undefined ? category : '', action, value !== undefined ? value : '');\n            }\n          }\n        }).controls().knobs();\n        $(\".teaser-carousel .swipe\").Swipe({\n          pair: 2\n        });\n\n        // action-stage left right arrow\n        $(\".action-stage > div\").eq(1).hover(function() {\n          $('.carousel-control', this).addClass('hover');\n        }, function() {\n          $('.carousel-control', this).removeClass('hover');\n        });\n      }\n    }\n  },\n  removeSwipes: function() {\n    $(\".swipe\").each(function() {\n      if ($(this).data(\"Swipe\")) $(this).data(\"Swipe\").kill();\n    });\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport Loading from '../components/loading';\nimport CartInput from '../components/cart_input';\nimport log from 'consolelog';\nimport '../utils/form_elements/plusminus';\nimport 'bootstrap';\nimport Html5Validation from \"../utils/html5validation\";\n\nexport default function Cart() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n\n  this.loading = new Loading();\n  this.cart_input = new CartInput();\n  this.notepad_input = new CartInput(\".notepad-header\");\n}\n\nCart.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    $(\".btn-basket-artno\").off('click').on('click', function() {\n      $(this).addClass('loader');\n      var prodId = $(\"#input-basket-artno\").val();\n      prodId = encodeURIComponent(prodId);\n      if (prodId != 'undefined' && prodId != null) {\n        var requestUrl = config.userBasketInteractionDirectProductAddPath + \"?productId=\"+ prodId;\n        $.post(requestUrl, function (response) {\n          $(\".btn-basket-artno\").removeClass('loader');\n          $(\".js-basket-artno\").html(response.markup);\n          if($('.basket-art-no.single-article input:checked')){\n            $('.basket-art-no.single-article input:checked').parent().addClass(\"active\");\n          }\n          Pubsub.publish(\"core.attach\", $(\".js-basket-artno\"));\n          $('#productSize').on('change', function() {\n            $(\"#input-itemId\").val(this.value);\n          });\n        }).fail(function (response) {\n          $(this).removeClass('loader');\n          window.console && console.log(response);\n        })\n      }else{\n        $(this).removeClass('loader');\n      }\n    });\n\n    var custChoiceContent = $(\".checkout-basket\").find(\".customer-choice\").children();\n    $(\".checkout-basket\").find(\".js-customer-choice\").append(custChoiceContent);\n\n    $(\".js-show-art-direct\").off('click').on('click', function() {\n      $(\".js-show-art-direct\").addClass(\"hidden\");\n      $(\".js-show-art-direct-hide\").removeClass(\"hidden\");\n      $(\".js-show-art-direct-input\").show();\n    });\n\n    $(\".js-show-art-direct-hide\").off('click').on('click', function() {\n      $(\".js-show-art-direct-hide\").addClass(\"hidden\");\n      $(\".js-show-art-direct\").removeClass(\"hidden\");\n      $(\".js-show-art-direct-input\").hide();\n    });\n\n    $('#error').affix({\n    });\n\n    $(\".js-input-basket-artno\").change(function() {\n      var alertMsg = $(\".js-basket-artno\").find(\".alert\");\n      var inputVal = $(\".js-input-basket-artno\").val();\n      if (alertMsg.length && !inputVal){\n        alertMsg.remove();\n      }\n    });\n\n    $('#productQuantity').off(\"change\").on('change', function(e) {\n      e.preventDefault();\n      var data = $(\"#article-form\").serialize();\n\n      $.post(config.amountChangePath, data)\n       .done(function(result) {\n         if(result.success){\n           var newContent = $(result.markup);\n           $('.js-price-info').replaceWith(newContent);\n         }\n       });\n     });\n\n    $(\".js-input-direct\").off(\"click\").on(\"click\", function() {\n      $(this).addClass(\"loader\");\n      $.post($(\"#article-form\").attr(\"action\"), $(\"#article-form\").serialize(), function(data) {\n        if(!data.success) {\n          var selector = $('.js-ptext-error');\n          selector.html(data.errorsMarkup);\n          $('.js-input-ptext').each(function(i, obj){\n            var _this = this;\n            if($(_this).val().length > $(_this).data('maxlength')){\n              $(_this).addClass('has-error')\n              $('.js-ptext-error').css(\"padding-bottom\",\"15px\");\n            }\n          });\n        } else {\n          window.location.reload(true);\n        }\n      }).always(function(){\n        $(\".js-input-direct\").removeClass(\"loader\");\n      });\n    });\n\n    $(\"#article-form [data-update]\").off(\"click\").on(\"click\", function(e) {\n      $(\".js-basket-artno\").addClass('loader');\n      var $element = $(e.target);\n      var update = $element.serialize();\n      var itemId = $(\"#input-itemId\").serialize();\n      var prodId = $(\"#input-basket-artno\").val();\n      var size = $element.find('.js-size').val();\n      var sizeName = $element.find('.js-size').attr('name');\n      var requestUrl = config.userBasketInteractionDirectProductAddPath + \"?productId=\"+ prodId + '&' + update + '&' + itemId + '&' +escape(sizeName) +\"=\"+ size\n      $.post(requestUrl, function (response) {\n        $(\".js-basket-artno\").html(response.markup);\n        $(\"label[for='\" + $element.attr('id') + \"']\").addClass('active');\n        $(\".js-basket-artno\").removeClass('loader');\n        $(\".js-input-direct:disabled\").addClass('btn-disabled');\n        Pubsub.publish(\"core.attach\", $(\".js-basket-artno\"));\n      }).fail(function (response) {\n        $(\".js-basket-artno\").removeClass('loader');\n        window.console && console.log(response);\n      });\n    });\n\n    $(\".js-input-customers-choice\").off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n      $(this).addClass(\"loader\");\n      $.post($(\"#js-customers-choice-form\").attr(\"action\"), $(\"#js-customers-choice-form\").serialize(), function(data) {\n        window.location.reload(true);\n      }).fail(function (response) {\n        window.console && console.log(response);\n        $(\".js-input-customers-choice\").removeClass(\"loader\");\n      })\n    });\n\n    $(\".js-input-basket-artno\").off('keydown').on('keydown', function(e) {\n      var keyCode = e.which;\n      if (e.type == \"keydown\" && keyCode != 13 && keyCode != 9) {\n        return;\n      }\n      e.preventDefault();\n      $('.js-button-basket-artno').click();\n    });\n\n    // Voucher code - add\n    const voucherFrom = $('.js-voucher-code-form');\n    voucherFrom.off(\"submit\").on(\"submit\", function(e){\n      e.preventDefault();\n\n      const formData = voucherFrom.serialize();\n      $(\".js-vouchercode-message\").html(\"\");\n      $.post(config.voucherCodeUrl, formData)\n        .done(function(data) {\n          if(data.success) {\n            window.location.href = window.location.href;\n          } else {\n            $(\".js-vouchercode-message\").html(data.error);\n            $(\".js-vouchercode-message\").css(\"display\", \"block\");\n            $(\"input[name='voucherCode']\").addClass(\"has-error\");\n          }\n        }).fail(function(error) {\n          if (window.console) console.error(\"Failed to add voucher code!\", error);\n        });\n    });\n\n    // Voucher code - remove\n    const voucherRemoveFrom = $('.js-voucher-code-form.remove');\n    voucherRemoveFrom.off(\"submit\").on(\"submit\", function(e) {\n      e.preventDefault();\n      $.post(config.voucherCodeRemoveUrl)\n        .done(function(data) {\n          if(data.success) {\n            window.location.href = window.location.href;\n          }\n        }).fail(function(error) {\n        if (window.console) console.error(\"Failed to remove voucher code!\", error);\n      });\n    });\n\n    $('.js-input-ptext').off('keydown').on('keydown', function(e) {\n      var keyCode = e.which;\n      if (e.type == \"keydown\" && keyCode == 13) {\n        e.preventDefault();\n        return false;\n      }\n    });\n\n    var _this = this;\n\n    $(\".all-in-cart\").off(\"click\").on(\"click\", function(e) {\n      $.post($(\"#all-in-cart-form\").attr(\"action\"), $(\"#all-in-cart-form\").serialize(), function(data) {\n        //\n        _this.cart_input.input(data.markup, data.count, data.total, null, null);\n      }).fail(function(jqXhr, e) {\n        log(e);\n      });\n    });\n\n    $(\".actions .to-cart a\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      var $link = $(this);\n      $.get($(this).attr(\"href\"), function(data) {\n        _this.cart_input.input(data.markup, data.count, data.total, null, null);\n      }).fail(function(jqXhr, e) {\n        log(\"Add to card/notepad failed.\", e);\n      });\n    });\n\n    var wishlistPopup = $('#wishlist-popover');\n    if (wishlistPopup.length != 0) {\n      var data = JSON.parse(wishlistPopup.html());\n      _this.notepad_input.input(data.markup, data.count, data.total);\n    }\n\n    var togglePopupVisibility = function (target, targetIndex, cartPopupVisibility) {\n      if(targetIndex.toString() === cartPopupVisibility.toString()) {\n        $(target).show();\n      } else {\n        $(target).hide();\n      }\n    }\n    $(\".js-popup-close\").each(function () {\n      let visibility;\n      if (window.matchMedia(\"(max-width: 767px)\").matches) {\n        visibility = '0';\n      } else {\n        visibility = '1';\n      }\n      togglePopupVisibility($(this).closest(\".cart-popup\"), $(this).data(\"visibility\"), visibility);\n    })\n    $(\".js-popup-close\").off(\"click\").on(\"click\", function(e) {\n      $(\".js-popup-close\").each(function () {\n        togglePopupVisibility($(this).closest(\".cart-popup\"), $(this).data(\"visibility\"), e.currentTarget.dataset.self);\n      })\n    });\n  },\n  responsive: function(msg, on_off) {\n    switch (msg) {\n    case 'res.xs':\n      if (on_off) { // entered state xs\n        this.removeSwipes();\n        $(\".offers .swipe, .sellers .swipe\").Swipe({\n          pair: 2\n        }).knobs().lazy();\n      } else { // left state xs\n\n      }\n      break;\n    case 'res.sm':\n      if (on_off) { // entered state sm\n\n        this.removeSwipes();\n        $(\".offers .swipe, .sellers .swipe\").Swipe({\n          pair: 3\n        }).knobs().lazy();\n      } else { // left state sm\n\n      }\n      break;\n    default:\n      if (on_off) {\n        this.removeSwipes();\n        $(\".offers .swipe, .sellers .swipe\").Swipe({\n          pair: 4,\n          continuous: false\n        }).controls().lazy();\n      }\n    }\n  },\n  removeSwipes: function() {\n    $(\".swipe\").each(function() {\n      if ($(this).data(\"Swipe\")) $(this).data(\"Swipe\").kill();\n    });\n  }\n};\n","// Everything that should happen on every page\nimport $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Offcanvas from '../components/offcanvas';\nimport TrackingHelper from '../utils/trackinghelper';\nimport 'bootstrap';\n\nexport default function Navi() {\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n  this.offcanvas = new Offcanvas('navi-offcanvas');\n  $(window).on(\"resize\", $.proxy(this.resizeHandler, this));\n}\n\nNavi.prototype = {\n  responsive: function(msg, on) {\n    var _this = this;\n    var hoverTimer = null;\n\n    if (on) {\n      // remove arrows\n      if ($('.js-navi-mobile-header').length) {\n        $('.navi-offcanvas .glyphicon-3P-arrow-right').remove();\n      } else {\n        $('.navi-offcanvas .glyphicon-arrow-right').remove();\n      }\n\n      // remove meta menu\n      $('.meta-li').remove();\n    }\n    // desktop\n    if (on && (msg === \"res.md\" || msg === \"res.lg\" || ($('.js-navi-mobile-header').length > 0 && msg === \"res.sm\"))) {\n      this.offcanvas.switchIt(false);\n\n      // hide flyout\n      $('[data-js=navi-menu] li ul').hide();\n      // set height\n      if (this.heightTimeout) {\n        clearTimeout(this.heightTimeout);\n      }\n      $('.navi-offcanvas').height('auto');\n      // mouse over menu\n      var hoverTimer = null;\n\n      $('[data-js=navi-menu] > ul > li').off(\"mouseover.levelone\").on(\"mouseover.levelone\", function() {\n        var __this = this;\n        // for de/at\n        if ($('.js-navi-mobile-header').length > 0 ) {\n          if (msg === \"res.sm\") {\n            $('.js-navi-teaser').css('display','none');\n          } else {\n            $('.js-navi-teaser').css('display','block');\n          }\n        }\n        $('[data-js=navi-menu]').attr(\"aria-expanded\", \"true\");\n        if (hoverTimer) clearTimeout(hoverTimer);\n        hoverTimer = setTimeout(function() {\n          _this.updateFlyout(__this);\n          _this.showFlyout(__this);\n          _this.setFlyoutImage(__this);\n        }, 250);\n      });\n      // mouse over submenu\n      $('[data-js=navi-content-1]').off(\"mouseover\", \"a\").on('mouseover', 'a', function() {\n        // do not remove category teaser image in de/at\n        if ($('.js-navi-teaser').length < 1) {\n          _this.showFlyoutSub(this);\n          _this.setFlyoutImage($(this).parent());\n        }\n      });\n      // mouse over sub-submenu\n      $('[data-js=navi-content-2]').off(\"mouseover\", \"a\").on('mouseover', 'a', function() {\n        _this.setFlyoutImage($(this).parent());\n      });\n      // mouse over menu content\n      $('[data-js=navi-content]').off(\"mouseover.submenu\").on(\"mouseover.submenu\", function() {\n        var __this = this;\n\n        if (hoverTimer) clearTimeout(hoverTimer);\n        hoverTimer = setTimeout(function() {\n          _this.showFlyout(__this);\n        }, 250);\n      });\n      // mouse out menu + menu content\n      $('[data-js=navi-menu], [data-js=navi-content]').off(\"mouseout\").on(\"mouseout\", function() {\n        var __this = this;\n\n        if (hoverTimer) clearTimeout(hoverTimer);\n        hoverTimer = setTimeout(function() {\n          _this.hideFlyout(__this);\n        }, 250);\n      });\n      //Tracking\n      $('[data-js=navi-menu] a').off('click').on('click', function() {\n        //Tracking\n        var trackinghelper = new TrackingHelper();\n        trackinghelper.event('', 'Navigation_' + $(this).attr('href') + '_klick', 'Navigation');\n      });\n    // smartphone & tablet\n    } else if (on && (msg === 'res.xs' || ($('.js-navi-mobile-header').length < 0 && msg === 'res.sm'))) {\n      // toggle offcanvas\n      var _this = this;\n      _this.offcanvas.switchIt(true);\n      // add meta menu\n      $('.meta-menu .user li').each(function() {\n        $('[data-js=navi-menu-ul]').append($(this).clone().addClass('meta-li'));\n      });\n      // add arrows\n      $('.navi-offcanvas li').not('.menu-back-1, .menu-back-2').has('> ul').each(function() {\n        if ($('.js-navi-mobile-header').length) {\n          $(this).append('<span class=\"glyphicon glyphicon-3P-arrow-right pull-right\"></span>');\n        } else {\n          $(this).append('<span class=\"glyphicon glyphicon-arrow-right pull-right\"></span>');\n        }\n      });\n      // set height\n      if (this.heightTimeout) {\n        clearTimeout(this.heightTimeout);\n        this.heightTimeout = null;\n      }\n      this.heightTimeout = setTimeout(function() {\n        $('.navi-offcanvas').height($(document).height());\n      }, 2000);\n      //\n      $('.navbar-header [data-toggle=offcanvas]').off(\"click\").on(\"click\", function(e) {\n        e.preventDefault();\n        _this.offcanvas.toggle();\n        // show submenu\n        $('.navi-offcanvas li').off('click').on('click', function(e) {\n          e.stopPropagation();\n          if ($(this).children().is('ul')) {\n\n            var menu_level = $(this).parent('ul').first().hasClass('scroll-container') ? 1 : 2;\n\n            $('> ul', this).addClass('shop-navigation-content').show();\n            $('.menu-back-' + menu_level + ' a').text($('> a', this).text());\n            if ($('.js-navi-mobile-header').length) {\n              $('.js-navi-mobile-header').addClass('hidden');\n              $('.js-navi-mobile-footer').addClass('hidden');\n            }\n            $(this).parents('[data-js=navi-menu-ul]').animate({\n              left: '-=' + ($('> ul', this).width())\n            }, 'fast');\n            $(\"html, body\").animate({\n              scrollTop: 0\n            }, 200);\n\n            //Tracking\n            var trackinghelper = new TrackingHelper();\n            trackinghelper.event('', 'Navigation_' + $('a', this).attr('href') + '_klick', 'Navigation');\n\n            return false;\n          } else {\n            window.location.href = $(\"a\", this).attr(\"href\");\n\n            //Tracking\n            var trackinghelper = new TrackingHelper();\n            trackinghelper.event('', 'Navigation_' + $('a', this).attr('href') + '_klick', 'Navigation');\n          }\n        });\n\n        // back menu level\n        var goBack = function(e) {\n          e.preventDefault();\n          var $backBtn = $(this);\n          $(this).parents('[data-js=navi-menu-ul]').animate({\n            left: '+=' + ($('.navi-offcanvas ul ul:visible').first().width())\n          }, 'fast', function() {\n            if ($backBtn.hasClass('menu-back-2')) $('.navi-offcanvas ul ul ul:visible').hide();\n            else {\n              if ($('.js-navi-mobile-header').length) {\n                $('.js-navi-mobile-header').removeClass('hidden');\n                $('.js-navi-mobile-footer').removeClass('hidden');\n              }\n              $('.navi-offcanvas ul ul:visible').hide();\n            }\n          });\n          $(\"html, body\").animate({\n            scrollTop: 0\n          }, 200);\n        };\n        $('.menu-back-1, .menu-back-2').off('click').on('click', goBack);\n\n      });\n      $('.js-navi-close').off('click').on('click', function(e) {\n        e.preventDefault();\n        _this.offcanvas.hide();\n      });\n\n    }\n  },\n  resizeHandler: function(e) {\n    if (this.offcanvas.active()) {\n      $('.navbar-header [data-toggle=offcanvas]').click();\n      $('[data-js=navi-menu-ul]').removeAttr('style');\n      $('body > .navi-offcanvas ul ul').css('display','none');\n    }\n  },\n  updateFlyout: function(e) {\n    $('[data-js=navi-content] ul, [data-js=navi-title-1], [data-js=navi-title-2]').empty();\n    $('[data-js=navi-title-1]').text($('> a', e).text());\n    $('[data-js=navi-content-1]')\n      .html($('> ul', e).clone().show())\n      .show();\n\n    //Tracking\n    $('[data-js=navi-content-1] a').off('click').on('click', function() {\n      var trackinghelper = new TrackingHelper();\n      trackinghelper.event('', 'Navigation_' + $(this).attr('href') + '_klick', 'Navigation');\n    });\n  },\n  showFlyout: function(e) {\n    if ($('ul', e)[0]) {\n      // hover\n      if ($(e).is('div')) {\n        /* active auch mit hover\n         $('[data-js=navi-menu-ul] > li')\n         .eq($(e).attr('data-js-menu-hover'))\n         .addClass('hover');\n         */\n      } else {\n        $('[data-js=navi-content]').attr('data-js-menu-hover', $(e).index());\n        $('[data-js=navi-menu] .hover').removeClass('hover');\n        $(e).has('> ul').not('.active').addClass('hover');\n        $($(e).parents('header')).addClass('open');\n        var offsetMenuEntry = $( e ).position();\n        var leftOffsetNaviContent=offsetMenuEntry.left+5;\n        var naviContentWidth=$('[data-js=navi-content]').width();\n        var mainNavRightEnd=$('.js-main-nav').width();\n        //override wider offsets then the end of main navi\n        if (leftOffsetNaviContent+naviContentWidth>mainNavRightEnd){\n          leftOffsetNaviContent=mainNavRightEnd-naviContentWidth;\n        }\n        $('[data-js=navi-content]').css('left', leftOffsetNaviContent);\n      }\n      $('[data-js=navi-content]').show();\n    } else {\n      this.hideFlyout();\n    }\n  },\n  hideFlyout: function(e) {\n    $('[data-js=navi-content]').hide();\n    $('[data-js=navi-menu] .hover').removeClass('hover');\n    $('[data-js=navi-menu]').attr(\"aria-expanded\", \"false\");\n    $(e).parents('header').removeClass('open');\n  },\n  showFlyoutSub: function(e) {\n    $('[data-js=navi-content-1] .active').removeClass('active');\n    if ($(e).next('ul')[0]) {\n      $('[data-js=navi-title-2]')\n        .text($(e).text())\n        .show();\n      $('[data-js=navi-content-2]')\n        .html($(e).next('ul').clone().show())\n        .show();\n      if($('[data-js=navi-content-2]').css('display') == 'block'){\n        $('[data-js=navi-content-1]').addClass(\"has-second-level\");\n        $('[data-js=navi-content-2]').addClass(\"border-left\");\n      }\n      $(e).addClass('active');\n    } else {\n      $('[data-js=navi-title-2], [data-js=navi-content-2]').hide();\n      $('[data-js=navi-content-1]').removeClass(\"has-second-level\");\n      $('[data-js=navi-content-2]').removeClass(\".border-left\");\n    }\n\n    //Tracking\n    $('[data-js=navi-content-2] a').off('click').on('click', function() {\n      var trackinghelper = new TrackingHelper();\n      trackinghelper.event('', 'Navigation_' + $(this).attr('href') + '_klick', 'Navigation');\n    });\n  },\n  setFlyoutImage: function(e) {\n    $('.navi-content img').parent().remove();\n    $('.navi-content img').remove();\n\n    if ($(e).is('[data-navimg]')) {\n      $(\n      '<img/>', {\n          src: $(e).attr('data-navimg')\n        }\n      ).appendTo('.navi-content--teaser');\n\n      $('.navi-content img').wrap('<a href=\"' + $(e).attr('data-navurl') + '\" target=\"'+ $(e).attr('data-navtarget') + '\" width=\"'+ $(e).attr('data-navwidth') + '\" height=\"'+ $(e).attr('data-navheight') + '\" ></a>');\n    }\n  }\n};\n","// Everything that should happen on every page\nimport $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Affiliate from './affiliate';\nimport config from '../config/config';\nimport 'suggest';\nimport '../../libs/jquery.rwdImageMaps'\nimport '../../libs/jquery.imagemapster'\nimport scrollToElement from \"../utils/scrollTo\";\nimport showOrHidePassword from \"../components/password\";\nimport Html5Validation from \"../utils/html5validation\";\n\nexport default function General() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.resxs, this));\n}\n\nGeneral.prototype = {\n  attach: function(msg, element) {\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    $('.js-image-map--res').rwdImageMaps();\n\n    showOrHidePassword();\n\n    let fillcolor = 'FFFFFF';\n    let strokecolor = 'FFFFFF';\n    const wrapper = $('.js-image-map-wrapper');\n    if(wrapper.length) {\n      fillcolor = wrapper.data(\"fillcolor\");\n      strokecolor = wrapper.data(\"strokecolor\");\n    }\n\n    $('.js-image-mapster').mapster({\n      mapKey: 'reference',\n      fillColor: fillcolor,\n      fillOpacity: 0.25,\n      stroke: false,\n      strokeColor: strokecolor,\n      strokeOpacity: 0.8,\n      strokeWidth: 1.5,\n      clickNavigate: false,\n      staticState: false\n    });\n\n    $(\".js-image-map--tooltip\").off(\"click\").on(\"click\", \"area\", function(e) {\n      e.preventDefault();\n\n      if (e.which === 1) {\n        // only on left mouse down\n        var element = $(e.target);\n        var productid = element.data(\"productid\");\n        var onlyRemove = false;\n\n        if (productid) {\n          // hide and remove all opened popovers\n          $(\".popover\").each(function () {\n            var el =  $(this);\n            var popoverProductId = el.find(\".shop-look-popover-content-wrapper\").data('productid');\n            if (productid === popoverProductId) {\n              onlyRemove = true;\n            }\n            el.popover('hide');\n            el.remove();\n          });\n\n          if (!onlyRemove) {\n            $.get(config.shopLookUrl + \"?productId=\" + productid, function (data) {\n              if (data.success === true || data.success === 'true') {\n                const elm = $(\".js-image-map-wrapper\");\n                const popOverContent = data.markup;\n                const popoverHeight = -50;\n                const popoverWidth = 40;\n                let x = e.pageX - elm.offset().left + popoverWidth;\n                const y = e.pageY - elm.offset().top + popoverHeight;\n                const placement = e.pageX > ($(document).width() / 2) ? 'left' : 'right';\n\n                if (placement === 'left') {\n                  x = x - popoverWidth - 260;\n                }\n\n                element.popover({\n                  placement: placement,\n                  html: true,\n                  trigger: \"manual\",\n                  content: popOverContent\n                }).on(\"shown.bs.popover\", function() {\n                  $(this).next().css({top: y, left: x});\n                });\n                element.popover('show')\n              } else {\n                // If popover fails, navigate to pdp\n                window.location.href = element.attr(\"href\");\n              }\n            });\n          }\n        } else {\n          // if no product id is given, navigate to link\n          window.location.href = element.attr(\"href\");\n        }\n      }\n    });\n\n    //cerberus\n    $('.account-login.account-content article.content .gt-login-nxt').attr('data-cerberus','login-submit');\n    $('.account-login.account-content .row.account-content .gt-login-nxt').attr('data-cerberus','account_creation-submit');\n    $('.account-content.register .gt-login-nxt').attr('data-cerberus','account_creation-submit');\n\n    $('.js-onlyOnce-form-static').submit(function(){\n     $('.js-onlyOnce-btn-static').prop('disabled', true);\n     $('.js-onlyOnce-btn-static').addClass('disabled');\n    });\n\n\n    if ($(\".js-lastseen-products .article\").length < 1) {\n      $(\".js-lastseen-products\").remove();\n    }\n\n    $(\".js-last-seen-remove\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n\n      var productId = $(this).data('productid');\n      if (productId != 'undefined' && productId != null) {\n        var requestUrl = config.lastSeenRemoveProductUrl + \"?productId=\" + productId;\n        $.post(requestUrl, function(response) {\n          $(\".js-lastseen-products\").html(response.markup);\n          $(\".js-lastseen-products label.bottom\").click();\n          Pubsub.publish(\"core.attach\", $(\".js-lastseen-products label.bottom\"));\n        }).fail(function(response) {\n          window.console && console.log(response);\n        })\n      }\n    });\n\n\n    $(\".js-softlogin-close\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $.post(config.closeSoftLogin, function(resultJson) {\n        if (resultJson.success) {\n          $(\".js-header-softlogin\").html('');\n        }\n      });\n    });\n\n    $(\".js-need-register\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.tab-register').click();\n      $('#email').focus();\n    });\n\n    $(\"body\", element).off(\"click\").on(\"click\", \".js-priceInfoModal\", function(e) {\n      e.preventDefault();\n      var $element = $(e.target);\n      var content = '.' + $element.data('content');\n      $('#generic-modal').html('');\n      $(content).find('.x-style.x-dialog').clone().appendTo($('#generic-modal'));\n      $('#generic-modal').modal('show');\n    });\n\n    $(\".js-openGenericModal\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      var $element = $(e.target);\n      var content = '.' + $element.data('content');\n      $('#the-modal').html('');\n      $(content).find('.x-style.x-dialog').clone().appendTo($('#the-modal'));\n      $('#the-modal').modal('show');\n    });\n\n    $(\".js-openVideoModal\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n        var $element = $(e.target);\n        var content = '.' + $element.data('content');\n        const theModal = $('#the-modal');\n        theModal.html('');\n        $(content).first('.modal-dialog').clone().appendTo(theModal);\n        theModal.modal('show');\n        var target = $('#iframe_video').attr('data-src');\n        $('#iframe_video').attr('src',target);\n      });\n\n\n    $('#the-modal').on('hide.bs.modal', function (e) {\n      $('#the-modal').html('');\n    })\n\n    $(\".js-open-smallModal\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $(this).parents('.smallModalWrapper').find(\".smallModal\").show();\n    });\n\n    $(\".js-close-smallModal\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $(this).parents('.smallModalWrapper').find(\".smallModal\").hide();\n    });\n\n    $(document).ready(function() {\n      var once = $('body').data('once');\n      var test = typeof once === 'undefined';\n\n      var language;\n      if (navigator.languages) {\n          language = navigator.languages[0];\n      } else {\n          language = navigator.userLanguage || navigator.language;\n      }\n      var shopCountry = config.shopCountry;\n\n      var countryOverlay = $('.js-country-switch');\n      var basketOverlay = $('[class^=\"basket-hint-\"]');\n      var promoOverlay = $('.js-promotion-hint');\n      if ((countryOverlay.length > 0) && (!once || typeof once === 'undefined') && (shopCountry === 'de') && (language.toLowerCase() === 'de-at')) {\n        $('body').data('once','true');\n        if (basketOverlay.length > 0) {\n          basketOverlay.closest($('.modal-dialog')).remove();\n        } else if (promoOverlay.length > 0) {\n          promoOverlay.closest($('.modal-dialog')).remove();\n        } else {\n          var trackingData = {\n            'eventCategory' : \"ViewEvent\",\n            'eventAction' : \"Layer\",\n            'eventLabel' : \"CountrySwitcher\",\n          }\n          Pubsub.publish('tracking.layer.trackingEvent', trackingData);\n        }\n        $('#the-modal').modal('show');\n\n\n      } else if (promoOverlay.length > 0 && (!once || typeof once === 'undefined')) {\n        removeCountrySwitchOverlay();\n        $('#the-modal').modal('show');\n        $('body').data('once','true');\n\n      } else if (basketOverlay.length > 0 && (!once || typeof once === 'undefined')) {\n        removeCountrySwitchOverlay();\n        $('body').data('once','true');\n        loadBasketPositionList();\n        $('.js-shopcart-close').off(\"click\").on(\"click\", function(e) {\n          clearBasketPositions(e);\n        });\n      }\n\n      if (typeof genericFrontendModel !== 'undefined') {\n        Pubsub.publish('generic.model.handler', genericFrontendModel);\n      }\n\n      //remove overlay if country == language in browser\n      function removeCountrySwitchOverlay() {\n        if (countryOverlay.length > 0 && shopCountry === language.slice(-2).toLowerCase()) {\n          countryOverlay.closest($('.modal-dialog')).remove();\n        }\n      }\n\n      $('a[href=]').addClass('disabled');\n\n      $('a[href=]').on('click', function(e){\n        e.preventDefault();\n        return false;\n      });\n\n      function loadBasketPositionList() {\n        var requestUrl = config.basketGetPath;\n        $.post(requestUrl, function(response) {\n          $('.js-basket-positionlist').html(response.markup);\n        }).fail(function(response) {\n          window.console && console.log(response);\n        }).done(function() {\n          $('#the-modal').modal('show');\n        });\n      };\n\n      function clearBasketPositions(e) {\n        var requestUrl = config.clearBasketPositionsPath;\n        $.post(requestUrl).done(function() {\n            window.location.reload();\n          });\n      };\n      if ($('.js-scroll-erp-error').length > 0) {\n        scrollToElement($('.js-scroll-erp-error'), 500);\n      }\n    });\n\n    $(\".js-info-modal\").off(\"click\").on(\"click\", function(e) {\n      $('#the-modal').html($('.js-last-seen-modal-content').html());\n      $('#the-modal').modal('show');\n    });\n\n    if ($('.js-country-msg').is(\":visible\")) {\n      $('.js-submit-check').attr(\"disabled\",true);\n    }else{\n      $('.js-submit-check').attr(\"disabled\", false);\n    }\n\n    var country = document.getElementById(\"country\");\n    var mcsCountry = $('#country').data('country');\n    var optionCountry = $('#country').val();\n    if (mcsCountry !== optionCountry){\n      verifyCountry();\n      $('#zip').addClass('no-validate');\n    }else{\n      $('#zip').removeClass('no-validate');\n    }\n\n    $('#country').off('change').on('change', function(){\n      verifyCountry();\n      var mcsCountry = $('#country').data('country');\n      var optionCountry = $('#country').val();\n      if (mcsCountry !== optionCountry){\n        $('#zip').addClass('no-validate');\n      }else {\n        $('#zip').removeClass('no-validate');\n      }\n      $('#zip').trigger('blur');\n    });\n\n    $('#the-modal').on('shown.bs.modal', function (e) {\n      var modalName = $(\"#the-modal\").find(\".view-layer\").data(\"analytics-tid\");\n      if (modalName != undefined) {\n        var trackingData = {\n          'eventCategory' : \"ViewEvent\",\n          'eventAction' : \"Layer\",\n          'eventLabel' : modalName\n        }\n        Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n      }\n    });\n\n    $(\".banderole\").on(\"click\", \".js-check-newsletter\", function(e) {\n      e.preventDefault();\n\n      $.post(config.subscribeNewsletterUrl)\n        .done(function(data) {\n          if (data.success) {\n            window.location.href = window.location.href;\n          }\n        }).fail(function(error) {\n        if (window.console) console.error(\"Failed to subscribe newsletter\", error);\n      });\n    });\n\n    function verifyCountry(){\n      var mcsCountry = $('#country').data('country');\n      var optionCountry = $('#country').val();\n      $(optionCountry).attr('selected', true);\n      $('.js-country-msg').hide();\n      var country = document.getElementById(\"country\");\n      var error = false;\n      $('.js-submit-check').attr(\"disabled\", false);\n\n      if (country.value !== undefined && country.value.length === 0) {\n        $('.js-country-msg').hide();\n        return;\n      }\n      if (mcsCountry !== optionCountry){\n        error = true;\n        $('.js-submit-check').attr(\"disabled\",true);\n      }\n      if (error) {\n        $('.js-country-msg').show();\n      }\n    }\n\n    if ($('.js-bday-msg').length > 0) {\n      document.getElementById(\"birthDay\").onchange = function() {\n        verifyBirthdate()\n      };\n      document.getElementById(\"birthMonth\").onchange = function() {\n        verifyBirthdate()\n      };\n      document.getElementById(\"birthYear\").onchange = function() {\n        verifyBirthdate()\n      };\n    }\n\n    function verifyBirthdate() {\n      $('.js-bday-msg').hide();\n      var d = document.getElementById(\"birthDay\");\n      var m = document.getElementById(\"birthMonth\");\n      var y = document.getElementById(\"birthYear\");\n      var error = false;\n\n      if (d.value.length === 0 || m.value.length === 0 || y.value.length === 0) {\n        return;\n      }\n      var d_int = parseInt(d.value, 10),\n        m_int = parseInt(m.value, 10),\n        y_int = parseInt(y.value, 10);\n      var date = new Date(y_int, m_int - 1, d_int);\n      var newDate = ('0' + date.getDate()).slice(-2) + '.' +\n        ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\n      var orgDate = ('0' + d.value).slice(-2) + '.' +\n        ('0' + m.value).slice(-2) + '.' + y.value;\n      if (newDate !== orgDate) {\n        error = true;\n      }\n\n      var toDay = new Date();\n      var date18 = new Date((toDay.getFullYear() - 18), toDay.getMonth(), toDay.getDate());\n      if (date18 < date) {\n        error = true;\n      }\n\n      if (error) {\n        $('.js-bday-msg').show();\n      }\n    }\n\n    if (!navigator.userAgent.match(/mobile/i)) {\n      var tels = $(\"a[href^='tel:']\");\n      tels.each(function() {\n        var content = $(this).html();\n        $(this).parent().html(content);\n      });\n    }\n\n    $(\"body\").popover({\n      placement: \"right\",\n      html: true,\n      trigger: \"hover click\",\n      selector: '.text-tooltip'\n    }).off(\"shown.bs.popover.text\").on(\"shown.bs.popover.text\", function() {\n      var popover = $(this).next();\n      $(\"body > *\").on(\"click.popclose\", function(e) {\n        $(\"body > *\").off(\"click.popclose\");\n        popover.popover(\"hide\");\n      });\n      //Move 5px up\n      popover.css({\n        top: parseInt($(this).next().css(\"top\"), 10) - 5 + \"px\"\n      });\n    });\n\n    $('body').on('show.bs.popover','.text-tooltip', function () {\n      $('body').find('.text-tooltip').not(this).each(function(){\n        if($(this).next('.popover').length > 0){\n            $(this).popover('hide')\n        }\n      })\n    })\n\n    $('.mobile-search').on('show.bs.collapse', function() {\n      $('.searchbox-header button').remove();\n    });\n\n    $(window).off(\"scroll.gotop\").on(\"scroll.gotop\", function() {\n      if ($(this).scrollTop() > 400) {\n        $('.go-top').fadeIn(200);\n      } else {\n        $('.go-top').fadeOut(200);\n      }\n    });\n\n    //Add classes to accordions\n    var addClasses = function(e) {\n      $(this).parents(\".panel\").find(\".panel-collapse\").each(function() {\n\n      $('.footer-panels div[data-toggle=\"collapse\"]').click(function(e){\n      if ($(window).width() >= 769) {\n        e.stopPropagation();\n      }\n    });\n\n        if ($(this).hasClass(\"in\")) {\n          $(this).prev().addClass(\"panel-in\");\n        } else {\n          $(this).prev().removeClass(\"panel-in\");\n        }\n      });\n      if (e.type == \"show\") {\n        $(this).prev().addClass(\"panel-in\");\n      }\n    };\n    $('.collapse').off('show.bs.collapse.classes hidden.bs.collapse.classes').on('show.bs.collapse.classes hidden.bs.collapse.classes', addClasses);\n    $('.collapse.in').trigger('show.bs.collapse.classes');\n\n    // prepare print\n    if ($('table.printOrderTable').length > 0) {\n      $('table.printOrderTable').prependTo('body');\n      $('.table-order-result').html($('.order-conf-info').html());\n      $('div, .go-top').addClass(\"hidden-print\");\n      $('.table-order-result').removeClass(\"hidden-print\");\n    }\n\n\n    if (element == document) {\n      new Affiliate();\n\n      this.openHash();\n      window.onhashchange = this.openHash;\n      var _this = this;\n      //Special case if hash stays same\n      $(\"a[href^=#]\").click(function(e) {\n        if ($(this).attr(\"href\") == window.location.hash) {\n          _this.openHash();\n        }\n      });\n    }\n\n    // payment page terms and conditions\n    $(\".js-openPaymentTermsAndConditions\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n\n      $.get(config.agbModalUrl, function(data) {\n        $('#the-modal').html(data.markup);\n        $('#the-modal').modal('show');\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"payment page terms and conditions error!\", error);\n      });\n    });\n\n    // service and shipping overlay\n    $(\"#openServiceAndshipping, .js-openServiceAndShipping\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $.get(config.serviceAndShippingModalUrl, function(data) {\n        $('#the-modal').html(data.markup);\n        $('#the-modal').modal('show');\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"service and shipping overlay error!\", error);\n      });\n    });\n\n    // privacy overlay\n    $(\"#openPrivacy\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $.get(config.privacyModalUrl, function(data) {\n        $('#the-modal').html(data.markup);\n        $('#the-modal').modal('show');\n      }).fail(function(jqXhr, error) {\n        if (window.console) console.log(\"privacy overlay error!\", error);\n      });\n    });\n\n    //Hide alerts, not remove\n    $(\".alert .close\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $(this).parent().hide();\n    });\n\n    // Animate the scroll to top\n    $('.go-top').off(\"click\").on(\"click\", function(event) {\n      event.preventDefault();\n      $('html, body').animate({\n        scrollTop: 0\n      }, 300);\n    });\n\n    // Show/hide account flyout\n    $( \".js-header-account-flyout\" ).mouseenter(function() {\n      $('.js-header-account-flyout-link').addClass('hover');\n      $('.js-header-account-flyout-wrapper').css('display','block');\n    }).mouseleave(function() {\n      $('.js-header-account-flyout-wrapper').css('display','none');\n      $('.js-header-account-flyout-link').removeClass('hover');\n    });\n\n    //Modals, several fixes\n    $('.modal').off('show.bs.modal').on('show.bs.modal', function() {\n\n      var measureScrollBar = function() {\n        var scrollDiv = document.createElement('div');\n        scrollDiv.style.cssText = 'width: 1px;height: 1px;overflow: scroll;position: absolute;top: -9999px;';\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        return scrollbarWidth;\n      };\n\n      if (this.clientHeight <= window.innerHeight) {\n        return;\n      }\n      var scrollbarWidth = measureScrollBar();\n      if (scrollbarWidth) {\n        $(document.body).css('padding-right', scrollbarWidth);\n      }\n    }).off('hidden.bs.modal').on('hidden.bs.modal', function() {\n      $(\"#page .twerked\").removeClass('twerked').prop(\"disabled\", false);\n      $(\"html\").removeClass(\"modal-open\");\n      $(document.body).css('padding-right', 0);\n    });\n\n    $(\".js-seobox-text-more\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-seobox-text').css('height','100%');\n      $(this).parent().hide();\n      $('.js-seobox-text-less').parent().show();\n    });\n\n    $(\".js-seobox-text-less\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-seobox-text').css('height','110px');\n      $(this).parent().hide();\n      $('.js-seobox-text-more').parent().show();\n    });\n\n    // overlay buttons\n    if (($(window).height() < 474) && ($(window).width() < 1024) && ($(window).width() > 768) || ($(window).height() < 734)) {\n      $('.goto-feedback').css('top', $('header').parent().height() + 100 + 25 + 7);\n    }\n\n    //google analytics cookie\n    $( document ).ready(function() {\n      var gaProperty = config.trackingID;\n      var disableStr = 'ga-disable-' + gaProperty;\n\n      if (document.cookie.indexOf(disableStr + '=true') > -1) {\n        window[disableStr] = true;\n        $('.js-tracking-deact-success').show();\n      } else {\n        $('.js-tracking-deact').show();\n      }\n\n      $('.js-tracking-cookie').off(\"click\").on(\"click\", function(event) {\n        event.preventDefault();\n        document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';\n        window[disableStr] = true;\n        $('.js-tracking-deact').hide();\n        $('.js-tracking-deact-success').show();\n      });\n    });\n\n    $(\".js-alert-form\").on(\"keydown\",function(){\n      $('.js-alert').hide();\n    });\n\n    $(\"span.button-checkout-secondary.js-scroll-new-customer\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      scrollToElement($(\".new-customer-scroll\"), 500);\n    });\n\n    // suggest\n    function escapeRegExChars(value) {\n      return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n    }\n\n    var firstEvent =  $('.search .form-control:not(.js-suggestions-input)').autocomplete({\n      maxHeight: 600,\n      minChars: 2,\n      serviceUrl: $('.search .form-control').attr('data-js-suggest'),\n      paramName: 'q',\n      containerClass: 'well suggest',\n      transformResult: function(response) {\n        var jsonResponse = $.parseJSON(response);\n        return {\n          suggestions: $.map($.merge($.merge($.merge($.merge(\n            jsonResponse.suggestions.topLevelCategorySuggestions,\n            jsonResponse.suggestions.topSearchSuggestions),\n            jsonResponse.suggestions.categorySuggestions),\n            jsonResponse.suggestions.productSuggestions),\n            jsonResponse.suggestions.topArticleSuggestions),\n            function(dataItem) {\n              return {\n                value: dataItem.value,\n                data: dataItem.data,\n                title: dataItem.title,\n                categoryName: dataItem.categoryName,\n                link: dataItem.link,\n                imageLink: dataItem.categoryName,\n                brand: dataItem.brand,\n                product: dataItem.product,\n                category: dataItem.category,\n                topArticle: dataItem.topArticle,\n                categoryEncodedPath: dataItem.categoryEncodedPath\n              };\n            })\n        };\n      },\n      onSearchComplete: function(event, ui) {\n        if($('.well.suggest .autocomplete-suggestion').length > 1){\n          $('.well.suggest .autocomplete-suggestion[data-index=\"0\"]').attr('search_engine-suggestion-block_1');\n          $('.well.suggest .autocomplete-suggestion[data-index=\"2\"]').attr('search_engine-suggestion-block_2');\n        }\n      },\n\n      formatResult: function(suggestion, currentValue) {\n        var result = \"\";\n        var pattern = '(' + escapeRegExChars(currentValue) + ')';\n        var content = suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\\/strong>');\n        var conf = config;\n        var fallbackImgLink = conf.assetsUrl +'/../novosales/images/fallback/ads_thumb/fallback_image.png';\n        var errorLink = \"this.onerror=null;this.src='\" + fallbackImgLink + \"';\";\n        if (!suggestion.data || ($.trim(suggestion.data) === \"\")) {\n          return content;\n        }\n\n        if (suggestion.data && !suggestion.categoryName) {\n          result += content + \" \" + suggestion.data;\n\n        } else if (suggestion.topArticle == false && suggestion.categoryName) {\n          result += content + '<span class=\"brand-name\"> in ' + suggestion.categoryName + '</span>';\n        } else if (suggestion.topArticle == true && suggestion.data){\n          result += '<span class=\"search-suggest-top-article\" data-cerberus=\"search_engine-top_article-suggestion_1-name\"><img onerror=' + errorLink + ' src=\"'+ suggestion.imageLink + '\"></span><span class=\"search-suggest-top-article search-suggest-top-article-description\" data-cerberus=\"search_engine-top_article-suggestion_1-name\">'+ content +'</span><span class=\"search-suggest-top-article\" data-cerberus=\"search_engine-top_article-suggestion_1-price\"><b>'+ suggestion.data +'</b></span>';\n        }\n        return result;\n      },\n\n      onSelect: function(suggestion) {\n        if (!suggestion.link || ($.trim(suggestion.link) === \"\")) {\n          if (!suggestion.categoryEncodedPath || ($.trim(suggestion.categoryEncodedPath) === \"\")) {\n            $('input[name=\"qc\"]').remove();\n          } else {\n            $('input[name=\"qc\"]').val(suggestion.categoryEncodedPath);\n          }\n          $('#search_id_form').submit();\n        } else {\n          window.location.href = suggestion.link;\n        }\n      },\n      headline: function(suggestion) {\n        var result = \"\";\n        if ((suggestion.brand == true || suggestion.category == true || suggestion.product == true) && suggestion.topArticle == false && suggestion.title && ($.trim(suggestion.title) !== \"\")) {\n          result = '<div class=\"header-divider-title\">' + suggestion.title + '</div>';\n        } else if (suggestion.title && ($.trim(suggestion.title) !== \"\") && !suggestion.categoryName) {\n          result = '<div class=\"divider\"></div>';\n        } else if (suggestion.topArticle == true && suggestion.title && $.trim(suggestion.title) !== \"\"){\n          result = '<div class=\"header-divider-title seach-suggest-article-top-head\" data-cerberus=\"search_engine-top_article-title\">' + suggestion.title + '</div>';\n        }\n        return result;\n      }\n    });\n\n//    $.when.apply(this, firstEvent).done(function() {\n//      $('.search--inputbox').on('change keydown keyup', function(){\n//        if($('.well.suggest .autocomplete-suggestion').length > 1){\n//          $('.well.suggest .autocomplete-suggestion[data-index=\"0\"]').attr('search_engine-suggestion-block_1');\n//          $('.well.suggest .autocomplete-suggestion[data-index=\"2\"]').attr('search_engine-suggestion-block_2');\n//        }\n//      });\n//    });\n\n//    $('.search--inputbox').on('change', function(){\n//      if($('.well.suggest .autocomplete-suggestion').length > 1){\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"0\"]').attr('search_engine-suggestion-block_1');\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"2\"]').attr('search_engine-suggestion-block_2');\n//      }\n//    });\n//    $('.search--inputbox').on('keydown', function(){\n//      if($('.well.suggest .autocomplete-suggestion').length > 1){\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"0\"]').attr('search_engine-suggestion-block_1');\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"2\"]').attr('search_engine-suggestion-block_2');\n//      }\n//    });\n//    $('.search--inputbox').on('keyup', function(){\n//      if($('.well.suggest .autocomplete-suggestion').length > 1){\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"0\"]').attr('search_engine-suggestion-block_1');\n//        $('.well.suggest .autocomplete-suggestion[data-index=\"2\"]').attr('search_engine-suggestion-block_2');\n//      }\n//    });\n\n  },\n  resxs: function(msg, onoff) {\n    var _this = this;\n\n    if (msg == \"res.xs\") {\n      if (onoff) {\n        $('.footer-panels .panel .panel-collapse').removeClass('in');\n        $('.footer-panels .panel .panel-collapse').css('height','auto');\n        $('.footer-panels .panel .panel-heading').removeClass('panel-in');\n        $('.footer-panels .panel .panel-collapse').first().addClass('in');\n        $('.footer-panels .panel .panel-heading').first().addClass('panel-in');\n      }\n    } else {\n      if (onoff) {\n        $('.footer-panels .panel .panel-collapse').addClass('in');\n        $('.footer-panels .panel .panel-heading').addClass('panel-in');\n      }\n    }\n\n    if (msg == \"res.xs\") {\n\n      // Show more link on SEO content\n    if ($('.site-information').length > 0 && $('.js-seobox-text').length <= 0){\n\n      $('.js-seo-more').parent().show();\n\n      // SEO mouse reaction\n      $(\".js-seo-more\").off(\"click\").on(\"click\", function(e) {\n        e.preventDefault();\n        $('.js-seo-text').removeClass(\"mobile-single-row\");\n\n        $(this).parent().hide();\n        $('.js-seo-less').parent().show();\n      });\n\n      $(\".js-seo-less\").off(\"click\").on(\"click\", function(e) {\n        e.preventDefault();\n        $('.js-seo-text').addClass(\"mobile-single-row\");\n        $(this).parent().hide();\n        $('.js-seo-more').parent().show();\n      });\n    }\n\n      if (onoff) {\n        // preventing account flyout on mobile\n        $('.js-header-account-flyout').on(\"touchstart\", function(e) {\n          $(\".js-header-account-flyout\").unbind('mouseenter mouseleave');\n        });\n\n        var search_form = $(\"header .search-form\").html();\n        if (search_form != \"\") {\n          $(\".mobile-search .collapse-wrapper\").html(search_form);\n          $(\"header .search-form\").empty();\n          Pubsub.publish(\"core.attach\", $(\".mobile-search .collapse-wrapper\"));\n          $(\".mobile-search .glyphicon\").removeClass(\"glyphicon-search\").addClass('glyphicon-arrow-right');\n          $(\"body\").popover('destroy');\n          $(\"body\").popover({\n            placement: \"bottom\",\n            html: true,\n            trigger: \"click\",\n            selector: '.text-tooltip'\n          }).off(\"shown.bs.popover.text\").on(\"shown.bs.popover.text\", function() {\n            var popover = $(this).next();\n            $(\"body > *\").on(\"click.popclose\", function(e) {\n              $(\"body > *\").off(\"click.popclose\");\n              popover.popover(\"hide\");\n            });\n            //Move 5px up\n            popover.css({\n              top: parseInt($(this).next().css(\"top\"), 10) - 5 + \"px\"\n            });\n          });\n        }\n      } else {\n        var search_form = $(\".mobile-search .collapse-wrapper\").html();\n        if (search_form != \"\") {\n          $(\"header .search-form\").html(search_form);\n          $(\".mobile-search .collapse-wrapper\").empty();\n          Pubsub.publish(\"core.attach\", $(\"header .search-form\"));\n          $(\"header .search-form .glyphicon\").removeClass(\"glyphicon-arrow-right\").addClass('glyphicon-search');\n        }\n      }\n      $('.suggest').remove();\n    }\n  },\n  openHash: function() {\n    var regex = /(_[0-9]{0,})$/;\n    if (document.location.hash && regex.test(document.location.hash)) {\n      var matches = document.location.hash.match(regex);\n      var _i = matches[0];\n\n      $(\".panel-heading\").not(\".panel-in\").find(\"a[href=#collapse\" + _i + \"]\").click();\n    }\n  },\n  setBrowserCookie: function(name, value, days) {\n    var expires = \"\";\n    if (days) {\n      var date = new Date();\n      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n      expires = \"; expires=\" + date.toGMTString();\n      }\n    document.cookie = name+\"=\" + value+expires + \";path=/\";\n   }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport { Validator } from '../utils/forms';\nimport ModalFns from '../utils/modalfns';\n\nexport default function ReferToAFriend() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('refer-to-a-friend.attach', $.proxy(this.attach, this));\n}\n\nReferToAFriend.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n\n    $(\"[href=#openReferToAFriend]\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.openModal(_this);\n    });\n\n    $(\"#submitReferToAFriend\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.submitForm(_this);\n    });\n  },\n\n  openModal: function(_this) {\n    $(\"#the-modal\").empty().modal().load(config.referToAFriendModalUrl, function() {\n      _this.showForm(_this);\n      Pubsub.publish(\"refer-to-a-friend.attach\", $(\"#the-modal\"));\n    });\n  },\n\n  showForm: function(_this) {\n    $.get(config.referToAFriendFormUrl, function(data) {\n      $(\"#refer-to-a-friend-content-anchor\").empty().html(data);\n      Pubsub.publish(\"refer-to-a-friend.attach\", $(\"#refer-to-a-friend-content-anchor\"));\n    });\n  },\n\n  submitForm: function(_this) {\n    var $form = $(\"form#referToAFriendForm\");\n    var validator = new Validator($form);\n    validator.scrollToError = false;\n\n    if (validator.validate(true)) {\n      $.post(config.referToAFriendSubmitUrl, $form.serialize(), function(data) {\n        $(\"#refer-to-a-friend-content-anchor\").empty().html(data);\n        Pubsub.publish(\"refer-to-a-friend.attach\", $(\"#refer-to-a-friend-content-anchor\"));\n      });\n    }\n  },\n\n};\n\n// Extend Modal Functions\nReferToAFriend.prototype = Object.assign(ReferToAFriend.prototype, ModalFns.prototype);\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Html5Validation from '../utils/html5validation';\n\nexport default function Content() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nContent.prototype = {\n  attach: function(msg, element) {\n\n    var html5validation = new Html5Validation();\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function Trackinghelper() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nTrackinghelper.prototype = {\n\n  getTrackingCode: function() {\n    if (typeof et_tracking_id !== 'undefined') {\n      return et_tracking_id;\n    }\n    return null;\n  },\n\n  attach: function(msg, element) {\n    var _this = this;\n    $('.eClick, .ewProductlist, .ePageTarget, .eLandingPage', element).off(\"mousedown\");\n    $('.eChange', element).off(\"change\");\n    $('.eClick', element).on(\"mousedown\", function() {\n      var $element = $(this);\n      var category = $element.data('category');\n      var action = $element.data('action');\n      var value = $element.data('value');\n      _this.event(category !== undefined ? category : '', action !== undefined ? action : '', value !== undefined ? value : '');\n    });\n\n\n    $('.ewProductlist', element).on(\"mousedown\", function() {\n      var $element = $(this);\n      var page = $element.data('page');\n      _this.wrapperProductList(page);\n    });\n\n    $('.ePageTarget', element).on(\"mousedown\", function() {\n      var $element = $(this);\n      var pagename = $element.data('pagename');\n      var target = $element.data('target');\n      _this.wrapPageTarget(pagename, target);\n    });\n\n    $('.eLandingPage', element).on(\"mousedown\", function() {\n      var $element = $(this);\n      var lpage = $element.data('lpage');\n      _this.wrapLandingPage(lpage);\n    });\n\n    $('.eChange', element).change(function() {\n      var $element = $(this);\n      var category = $element.data('category');\n      var action = $element.data('action');\n      var value = $element.data('value');\n      _this.event(category !== undefined ? category : '', action !== undefined ? action : '', value !== undefined ? value : '');\n    });\n\n  },\n\n  nm_et_eC_Wrapper_catch: function(a, b, c, g, l, h, p, n, m, d, q, w, k, e, u, f) {\n    try {\n      et_eC_Wrapper(a, b, c, g, l, h, p, n, m, d, q, w, k, e, u, f);\n    } catch (e) {}\n  },\n\n  clickEvent: function(category, value) {\n    if (value != null && value != \"\") {\n      try {\n        ET_Event.eventStart(escape(category), escape(value), \"Klick\");\n      } catch (e) {}\n    }\n  },\n  event: function(category, action, value) {\n    if (value != null && value != \"\") {\n      try {\n        category = category !== '' ? escape(category) : et_pagename;\n        ET_Event.eventStart(category, escape(value), escape(action));\n      } catch (e) {}\n    }\n  },\n\n  wrapPageTarget: function(pagename, target) {\n    if (this.getTrackingCode() != null && typeof et_eC_Wrapper == 'function') {\n      this.nm_et_eC_Wrapper_catch(this.getTrackingCode(), pagename, \"\", \"\", \"\", target, \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\");\n    }\n  },\n\n  wrapLandingPage: function(landingPage) {\n    if (this.getTrackingCode() != null && typeof et_eC_Wrapper == 'function') {\n      this.nm_et_eC_Wrapper_catch(this.getTrackingCode(), et_pagename_wrapper_noescape, \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", landingPage, \"\", \"\", \"\");\n    }\n  },\n\n  wrapPage: function(pagename) {\n    if (this.getTrackingCode() != null && typeof et_eC_Wrapper == 'function') {\n      this.nm_et_eC_Wrapper_catch(this.getTrackingCode(), pagename, \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\");\n    }\n  },\n\n  wrapperProductList: function(page) {\n    if (this.getTrackingCode() != null && typeof et_eC_Wrapper == 'function') {\n      var pagename = et_pagename_wrapper_noescape.replace(/Seite \\d von/g, \"Seite \" + page + \" von\").replace(/ /g, \"+\");\n      this.nm_et_eC_Wrapper_catch(this.getTrackingCode(), pagename, et_areas_wrapper_noescape, et_ilevel_noescape, et_url_wrapper_noescape, et_target_wrapper_noescape, et_tval_noescape, et_tonr_noescape, et_tsale_noescape, et_cust_noescape, et_basket_noescape, et_lpage_noescape, et_tag_noescape);\n    }\n  },\n\n  wrapper: function(overlayName) {\n    if (this.getTrackingCode() != null && typeof et_eC_Wrapper == 'function') {\n      overlayName = overlayName ? overlayName : '';\n      var pagename = overlayName + '/' + et_pagename_wrapper_noescape;\n      this.nm_et_eC_Wrapper_catch(this.getTrackingCode(), pagename, et_areas_wrapper_noescape, et_ilevel_noescape, et_url_wrapper_noescape, et_target_wrapper_noescape, et_tval_noescape, et_tonr_noescape, et_tsale_noescape, et_cust_noescape, et_basket_noescape, et_lpage_noescape, et_tag_noescape);\n    }\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport 'slimScroll';\n\nexport default function ServiceTabScroll() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nServiceTabScroll.prototype = {\n  attach: function(msg, element) {\n    $(\".serviceTabScrollBar\").slimScroll({\n      height: \"auto\",\n      size: '10px'\n    });\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\n\nvar privacy = \"\",\n  terms = \"\",\n  prize = \"\",\n  description = \"\",\n  lastPage = \"\",\n  initialized = false;\n\nfunction openModal() {\n  $(\"#the-modal\").empty().modal('show').load(config.raffleBaseUrl + \"modal/?id=\" + config.raffleId, startRaffle);\n}\n\nfunction startRaffle() {\n  $.get(config.raffleBaseUrl + \"page/?page=\" + config.rafflePage, function(data) {\n    $(\"#body-content-anchor\").empty().html(data);\n    rebindClicks();\n  });\n}\n\nfunction continueRaffle() {\n  var textarea = $(\"#raffle_freeText\");\n  if (textarea.val() === \"\") {\n    textarea.css(\"border-color\", \"#ae3737\");\n    textarea.css(\"border-width\", \"3px\");\n    return;\n  }\n  $.post(config.raffleBaseUrl + \"page/\", $(\"#form\").serialize(), function(data) {\n    $(\"#body-content-anchor\").empty().html(data);\n    rebindClicks();\n  });\n}\n\nfunction displayTermsAndConditionsPage() {\n  if (terms === \"\") {\n    $.get(config.raffleBaseUrl + \"static/?id=\" + config.rafflePage + \"&page=termsAndConditions\", function(data) {\n      terms = data;\n      displayStaticPagePostHandle(terms);\n    });\n  } else {\n    displayStaticPagePostHandle(terms);\n  }\n}\n\nfunction displayPrivacyPolicyPage() {\n  if (privacy === \"\") {\n    $.get(config.raffleBaseUrl + \"static/?id=\" + config.rafflePage + \"&page=privacyPolicy\", function(data) {\n      privacy = data;\n      displayStaticPagePostHandle(privacy);\n    });\n  } else {\n    displayStaticPagePostHandle(privacy);\n  }\n}\n\nfunction displayPrizeDescriptionPage() {\n  if (prize === \"\") {\n    $.get(config.raffleBaseUrl + \"static/?id=\" + config.rafflePage + \"&page=prizeDescription\", function(data) {\n      prize = data;\n      displayStaticPagePostHandle(prize);\n    });\n  } else {\n    displayStaticPagePostHandle(prize);\n  }\n}\n\nfunction displayRaffleDescriptionPage() {\n  if (description === \"\") {\n    $.get(config.raffleBaseUrl + \"static/?id=\" + config.rafflePage + \"&page=raffleDescription\", function(data) {\n      description = data;\n      displayStaticPagePostHandle(description);\n    });\n  } else {\n    displayStaticPagePostHandle(description);\n  }\n}\n\nfunction displayStaticPagePostHandle(staticpage) {\n  lastPage = $(\"#body-content-anchor\").contents();\n  $(\"#body-content-anchor\").empty().html(staticpage);\n  rebindClicks();\n\n  $(\"#raffle_footer_btn_terms\").hide();\n  $(\"#raffle_footer_btn_prize\").hide();\n  $(\"#raffle_footer_btn_privacy\").hide();\n  $(\"#raffle_footer_btn_description\").hide();\n  $(\"#raffle_footer_btn_back\").show();\n}\n\nfunction returnToRaffle() {\n  $(\"#body-content-anchor\").empty().html(lastPage);\n  rebindClicks();\n\n  $(\"#raffle_footer_btn_terms\").show();\n  $(\"#raffle_footer_btn_prize\").show();\n  $(\"#raffle_footer_btn_privacy\").show();\n  $(\"#raffle_footer_btn_description\").show();\n  $(\"#raffle_footer_btn_back\").hide();\n}\n\nfunction submitAddress() {\n  $.post(config.raffleBaseUrl + \"address/\", $(\"#userInfo\").serialize(), function(data) {\n    $(\"#body-content-anchor\").empty().html(data);\n    rebindClicks();\n  });\n}\n\nfunction addMoreRecipients() {\n  var newRowTemplate = $('#raffle_show_more_recipients_source').html();\n  for (var i = 0; i < 3; i++) {\n    var newRow = newRowTemplate.replace(/13/g, $('#raffle-recommend .recommend-row').size());\n    $('#raffle_show_more_recipients_target').before(newRow);\n  }\n  if ($('#raffle-recommend .recommend-row').size() >= 9) {\n    $('#raffle_add_more_recipients_row').hide();\n  }\n  rebindClicks();\n}\n\nfunction submitRecommendations() {\n  $.post(config.raffleBaseUrl + \"recommend/\", $(\"#raffle-recommend\").serialize(), function(data) {\n    $(\"#body-content-anchor\").empty().html(data);\n    rebindClicks();\n  });\n}\n\nfunction bindClick(selector, action) {\n  $(selector).off('click').on('click', function(e) {\n    e.preventDefault();\n    action();\n  });\n}\n\nfunction initialize() {\n  if (!initialized) {\n    if (config.showRaffle) {\n      openModal();\n    }\n    initialized = true;\n  }\n}\n\nfunction rebindClicks() {\n  bindClick(\"#raffle_page_next_btn, .raffle-nextPageAction\", continueRaffle);\n  bindClick(\"#raffle_footer_btn_back\", returnToRaffle);\n  bindClick(\"#raffle_footer_btn_terms\", displayTermsAndConditionsPage);\n  bindClick(\"#raffle_footer_btn_prize\", displayPrizeDescriptionPage);\n  bindClick(\"#raffle_footer_btn_privacy\", displayPrivacyPolicyPage);\n  bindClick(\"#raffle_footer_btn_description\", displayRaffleDescriptionPage);\n  bindClick(\"#submit_addressform_btn\", submitAddress);\n  bindClick(\"#raffle_add_more_recipients\", addMoreRecipients);\n  bindClick(\"#raffle_recommend_btn\", submitRecommendations);\n  bindClick(\"#raffle_address_btn_terms\", displayTermsAndConditionsPage);\n  bindClick(\"#raffle_address_btn_privacy\", displayPrivacyPolicyPage);\n}\n\nexport default function Raffle() {\n  Pubsub.subscribe('core.attach', initialize);\n}\n","/**\n * This script implements a fully client side form validation. It registers a\n * focus listener to each form input element (\"input\", \"select\") that uses the\n * CSS class \"form-control\", managing the live error feedback to the user. On\n * initialization it sets a placeholder value for each input not already having\n * one with the value of its label.\n * <p>\n * Each input's validation is configured by its attribute \"data-restriction\".\n * The following comma separated validation informations can by set:\n * <ul>\n * <li>\"type\" (defaults to \"text\")\n * <ul>\n * <li>\"text\"</li>\n * <li>\"email\" input is validated to an email address</li>\n * <li>\"phone\" input is validated to a phone number</li>\n * <li>\"choice\" input is validated to a selected value from its \"option\"s list.\n * The first entry is used as the placeholder</li>\n * </ul>\n * </li>\n * <li>\"min\" (defaults to \"1\"). To declare an input as optional, specify a min\n * of value 0.</li>\n * <li>\"max\" (defaults to Number.MAX_VALUE)</li>\n * </ul>\n * </p>\n * <p>\n * The developer is responsible for keeping the client side validation at least\n * as restrictive as the corresponding server side validation. The latter one\n * results just in true or false.\n * </p>\n */\n\nimport $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Html5Validation from \"../utils/html5validation\";\n\nPubsub.subscribe('core.attach', init);\n\nfunction init() {\n  $('form.shop-form').off('submit').on('submit', function() {\n    validateForm(this.id);\n    return false;\n  });\n\n  $('form.shop-form .error-tip').each(function() {\n    var $errorTip = $(this);\n\n    var $formControl = $('#' + $errorTip.attr('id').substring(0, $errorTip.attr('id').lastIndexOf('.')));\n\n    var position = $formControl.position();\n    position.top += $formControl.outerHeight();\n    position.top += parseInt($formControl.css('marginTop'));\n    $errorTip.css(position);\n  });\n\n  $('form.shop-form .form-control[type]:not([type=select]):not([placeholder])').each(function() {\n    var $label = $('label[for=' + this.id + ']');\n    $(this).attr('placeholder', $label.text().trim());\n  });\n\n  $('form.shop-form .form-control[data-restriction]').each(function() {\n    var $formControl = $(this);\n    installValidator($formControl);\n  });\n\n  $('form.shop-form .form-control').first().focus();\n\n  var html5validation = new Html5Validation();\n\n  html5validation.addValidationHandler();\n  html5validation.validateOnSubmit();\n}\n\nfunction hideErrorTip(id) {\n  $('#' + id + '\\\\.errors').remove();\n  $('#' + id).removeClass('error');\n}\n\nfunction validateForm(formID) {\n  var $form = $('#' + formID);\n  $.ajax({\n    type: $form.attr('method'),\n    url: $form.attr('action') + 'form/',\n    data: $form.serialize(),\n    success: function(response) {\n      if (response.errors) {\n        $('form.shop-form .form-control').each(function() {\n          var $formControl = $(this);\n          $formControl.prop('validator').validate();\n        });\n        $('form.shop-form .form-control.error').first().focus();\n        return;\n      }\n\n      actuallySubmit(formID);\n    },\n    error: function(jqXhr, status, e) {\n      alert('Error: ' + e);\n    // any visual response\n    }\n  });\n}\n\nfunction actuallySubmit(formID) {\n  var $form = $('#' + formID);\n  $.ajax({\n    type: $form.attr('method'),\n    url: $form.attr('action'),\n    data: $form.serialize(),\n    success: function(response) {\n      if (response.errors) {\n        $('form.shop-form .form-control').each(function() {\n          var $formControl = $(this);\n          $formControl.prop('validator').validate();\n        });\n        $('form.shop-form .form-control.error').first().focus();\n        return false;\n      }\n\n      if (response.resultRedirect != undefined) {\n        document.location = response.resultRedirect;\n        return false;\n      }\n\n      if (response.resultStatus == 'success') {\n        $('form.shop-form').hide();\n        $('.js-remove-on-form-success').hide();\n      }\n\n      var $resultMessage = $('#shopform-alert');\n      if (!$resultMessage.length) {\n        $resultMessage = $('<div>').attr('id', 'shopform-alert').addClass('xrow alert alert-danger').insertAfter($form);\n      }\n      $resultMessage.html(response.resultMessage);\n      $resultMessage.find('.alert').removeClass('alert-warning').removeClass('alert-danger');\n      $resultMessage.find('.alert').addClass('alert-' + (response.resultStatus == 'success' ? 'warning' : 'danger'));\n\n      return false;\n    },\n    error: function(jqXhr, status, e) {\n      alert('Error: ' + e);\n    // any visual response\n    }\n  });\n}\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport ModalFns from '../utils/modalfns';\n\nexport default function Feedback() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('feedback.attach', $.proxy(this.attach, this));\n}\n\nFeedback.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n\n    $(\"#openFeedback\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.openModal(_this);\n    });\n\n    $(\"#submitFeedback\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.submitForm(_this);\n    });\n  },\n\n  openModal: function(_this) {\n    $(\"#the-modal\").empty().modal().load(config.feedbackModalUrl, function() {\n      _this.showForm(_this);\n      Pubsub.publish(\"feedback.attach\", $(\"#the-modal\"));\n    });\n  },\n\n  showForm: function(_this) {\n    $.get(config.feedbackFormUrl, function(data) {\n      $(\"#feedback-content-anchor\").empty().html(data);\n      Pubsub.publish(\"feedback.attach\", $(\"#feedback-content-anchor\"));\n    });\n  },\n\n  submitForm: function(_this) {\n      $(\"#submitFeedback\").addClass('loader');\n      var $form = $(\"form#feedbackForm\");\n      $.post(config.feedbackSubmitUrl, $form.serialize(), function(data) {\n        $(\"#feedback-content-anchor\").empty().html(data);\n        Pubsub.publish(\"feedback.attach\", $(\"#feedback-content-anchor\"));\n      }).always(function() {\n        $(\"#submitFeedback\").removeClass('loader');\n      });\n  },\n\n};\n//Extend Modal Functions\nFeedback.prototype = Object.assign(Feedback.prototype, ModalFns.prototype);\n","/*\n *\nProject-homepage: https://github.com/aFarkas/lazysizes\n\n-----\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Alexander Farkas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n\n(function(window, factory) {\n  var lazySizes = factory(window, window.document, Date);\n  window.lazySizes = lazySizes;\n  if(typeof module == 'object' && module.exports){\n    module.exports = lazySizes;\n  }\n}(typeof window != 'undefined' ?\n      window : {}, function l(window, document, Date) {\n  'use strict';\n  /*jshint eqnull:true */\n\n  var lazysizes, lazySizesCfg;\n\n  (function(){\n    var prop;\n\n    var lazySizesDefaults = {\n      lazyClass: 'lazyload',\n      loadedClass: 'lazyloaded',\n      loadingClass: 'lazyloading',\n      preloadClass: 'lazypreload',\n      errorClass: 'lazyerror',\n      //strictClass: 'lazystrict',\n      autosizesClass: 'lazyautosizes',\n      srcAttr: 'data-srclazy',\n      srcsetAttr: 'data-srcset',\n      sizesAttr: 'data-sizes',\n      //preloadAfterLoad: false,\n      minSize: 40,\n      customMedia: {},\n      init: true,\n      expFactor: 1.5,\n      hFac: 0.8,\n      loadMode: 2,\n      loadHidden: true,\n      ricTimeout: 0,\n      throttleDelay: 125,\n    };\n\n    lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n    for(prop in lazySizesDefaults){\n      if(!(prop in lazySizesCfg)){\n        lazySizesCfg[prop] = lazySizesDefaults[prop];\n      }\n    }\n  })();\n\n  if (!document || !document.getElementsByClassName) {\n    return {\n      init: function () {},\n      cfg: lazySizesCfg,\n      noSupport: true,\n    };\n  }\n\n  var docElem = document.documentElement;\n\n  var supportPicture = window.HTMLPictureElement;\n\n  var _addEventListener = 'addEventListener';\n\n  var _getAttribute = 'getAttribute';\n\n  var addEventListener = window[_addEventListener].bind(window);\n\n  var setTimeout = window.setTimeout;\n\n  var requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n  var requestIdleCallback = window.requestIdleCallback;\n\n  var regPicture = /^picture$/i;\n\n  var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n  var regClassCache = {};\n\n  var forEach = Array.prototype.forEach;\n\n  var hasClass = function(ele, cls) {\n    if(!regClassCache[cls]){\n      regClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n    }\n    return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n  };\n\n  var addClass = function(ele, cls) {\n    if (!hasClass(ele, cls)){\n      ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n    }\n  };\n\n  var removeClass = function(ele, cls) {\n    var reg;\n    if ((reg = hasClass(ele,cls))) {\n      ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n    }\n  };\n\n  var addRemoveLoadEvents = function(dom, fn, add){\n    var action = add ? _addEventListener : 'removeEventListener';\n    if(add){\n      addRemoveLoadEvents(dom, fn);\n    }\n    loadEvents.forEach(function(evt){\n      dom[action](evt, fn);\n    });\n  };\n\n  var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n    var event = document.createEvent('Event');\n\n    if(!detail){\n      detail = {};\n    }\n\n    detail.instance = lazysizes;\n\n    event.initEvent(name, !noBubbles, !noCancelable);\n\n    event.detail = detail;\n\n    elem.dispatchEvent(event);\n    return event;\n  };\n\n  var updatePolyfill = function (el, full){\n    var polyfill;\n    if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n      if(full && full.src && !el[_getAttribute]('srcset')){\n        el.setAttribute('srcset', full.src);\n      }\n      polyfill({reevaluate: true, elements: [el]});\n    } else if(full && full.src){\n      el.src = full.src;\n    }\n  };\n\n  var getCSS = function (elem, style){\n    return (getComputedStyle(elem, null) || {})[style];\n  };\n\n  var getWidth = function(elem, parent, width){\n    width = width || elem.offsetWidth;\n\n    while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n      width =  parent.offsetWidth;\n      parent = parent.parentNode;\n    }\n\n    return width;\n  };\n\n  var rAF = (function(){\n    var running, waiting;\n    var firstFns = [];\n    var secondFns = [];\n    var fns = firstFns;\n\n    var run = function(){\n      var runFns = fns;\n\n      fns = firstFns.length ? secondFns : firstFns;\n\n      running = true;\n      waiting = false;\n\n      while(runFns.length){\n        runFns.shift()();\n      }\n\n      running = false;\n    };\n\n    var rafBatch = function(fn, queue){\n      if(running && !queue){\n        fn.apply(this, arguments);\n      } else {\n        fns.push(fn);\n\n        if(!waiting){\n          waiting = true;\n          (document.hidden ? setTimeout : requestAnimationFrame)(run);\n        }\n      }\n    };\n\n    rafBatch._lsFlush = run;\n\n    return rafBatch;\n  })();\n\n  var rAFIt = function(fn, simple){\n    return simple ?\n      function() {\n        rAF(fn);\n      } :\n      function(){\n        var that = this;\n        var args = arguments;\n        rAF(function(){\n          fn.apply(that, args);\n        });\n      }\n    ;\n  };\n\n  var throttle = function(fn){\n    var running;\n    var lastTime = 0;\n    var gDelay = lazySizesCfg.throttleDelay;\n    var rICTimeout = lazySizesCfg.ricTimeout;\n    var run = function(){\n      running = false;\n      lastTime = Date.now();\n      fn();\n    };\n    var idleCallback = requestIdleCallback && rICTimeout > 49 ?\n      function(){\n        requestIdleCallback(run, {timeout: rICTimeout});\n\n        if(rICTimeout !== lazySizesCfg.ricTimeout){\n          rICTimeout = lazySizesCfg.ricTimeout;\n        }\n      } :\n      rAFIt(function(){\n        setTimeout(run);\n      }, true)\n    ;\n\n    return function(isPriority){\n      var delay;\n\n      if((isPriority = isPriority === true)){\n        rICTimeout = 33;\n      }\n\n      if(running){\n        return;\n      }\n\n      running =  true;\n\n      delay = gDelay - (Date.now() - lastTime);\n\n      if(delay < 0){\n        delay = 0;\n      }\n\n      if(isPriority || delay < 9){\n        idleCallback();\n      } else {\n        setTimeout(idleCallback, delay);\n      }\n    };\n  };\n\n  //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n  var debounce = function(func) {\n    var timeout, timestamp;\n    var wait = 99;\n    var run = function(){\n      timeout = null;\n      func();\n    };\n    var later = function() {\n      var last = Date.now() - timestamp;\n\n      if (last < wait) {\n        setTimeout(later, wait - last);\n      } else {\n        (requestIdleCallback || run)(run);\n      }\n    };\n\n    return function() {\n      timestamp = Date.now();\n\n      if (!timeout) {\n        timeout = setTimeout(later, wait);\n      }\n    };\n  };\n\n  var loader = (function(){\n    var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n    var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n    var regImg = /^img$/i;\n    var regIframe = /^iframe$/i;\n\n    var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n    var shrinkExpand = 0;\n    var currentExpand = 0;\n\n    var isLoading = 0;\n    var lowRuns = -1;\n\n    var resetPreloading = function(e){\n      isLoading--;\n      if(!e || isLoading < 0 || !e.target){\n        isLoading = 0;\n      }\n    };\n\n    var isVisible = function (elem) {\n      if (isBodyHidden == null) {\n        isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n      }\n\n      return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n    };\n\n    var isNestedVisible = function(elem, elemExpand){\n      var outerRect;\n      var parent = elem;\n      var visible = isVisible(elem);\n\n      eLtop -= elemExpand;\n      eLbottom += elemExpand;\n      eLleft -= elemExpand;\n      eLright += elemExpand;\n\n      while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n        visible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n        if(visible && getCSS(parent, 'overflow') != 'visible'){\n          outerRect = parent.getBoundingClientRect();\n          visible = eLright > outerRect.left &&\n            eLleft < outerRect.right &&\n            eLbottom > outerRect.top - 1 &&\n            eLtop < outerRect.bottom + 1\n          ;\n        }\n      }\n\n      return visible;\n    };\n\n    var checkElements = function() {\n      var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n        beforeExpandVal, defaultExpand, preloadExpand, hFac;\n      var lazyloadElems = lazysizes.elements;\n\n      if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n        i = 0;\n\n        lowRuns++;\n\n        for(; i < eLlen; i++){\n\n          if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n          if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n          if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n            elemExpand = currentExpand;\n          }\n\n          if (!defaultExpand) {\n            defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n              docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n              lazySizesCfg.expand;\n\n            lazysizes._defEx = defaultExpand;\n\n            preloadExpand = defaultExpand * lazySizesCfg.expFactor;\n            hFac = lazySizesCfg.hFac;\n            isBodyHidden = null;\n\n            if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n              currentExpand = preloadExpand;\n              lowRuns = 0;\n            } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n              currentExpand = defaultExpand;\n            } else {\n              currentExpand = shrinkExpand;\n            }\n          }\n\n          if(beforeExpandVal !== elemExpand){\n            eLvW = innerWidth + (elemExpand * hFac);\n            elvH = innerHeight + elemExpand;\n            elemNegativeExpand = elemExpand * -1;\n            beforeExpandVal = elemExpand;\n          }\n\n          rect = lazyloadElems[i].getBoundingClientRect();\n\n          if ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n            (eLtop = rect.top) <= elvH &&\n            (eLright = rect.right) >= elemNegativeExpand * hFac &&\n            (eLleft = rect.left) <= eLvW &&\n            (eLbottom || eLright || eLleft || eLtop) &&\n            (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n            ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n            unveilElement(lazyloadElems[i]);\n            loadedSomething = true;\n            if(isLoading > 9){break;}\n          } else if(!loadedSomething && isCompleted && !autoLoadElem &&\n            isLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n            (preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n            (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n            autoLoadElem = preloadElems[0] || lazyloadElems[i];\n          }\n        }\n\n        if(autoLoadElem && !loadedSomething){\n          unveilElement(autoLoadElem);\n        }\n      }\n    };\n\n    var throttledCheckElements = throttle(checkElements);\n\n    var switchLoadingClass = function(e){\n      var elem = e.target;\n\n      if (elem._lazyCache) {\n        delete elem._lazyCache;\n        return;\n      }\n\n      resetPreloading(e);\n      addClass(elem, lazySizesCfg.loadedClass);\n      removeClass(elem, lazySizesCfg.loadingClass);\n      addRemoveLoadEvents(elem, rafSwitchLoadingClass);\n      triggerEvent(elem, 'lazyloaded');\n    };\n    var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n    var rafSwitchLoadingClass = function(e){\n      rafedSwitchLoadingClass({target: e.target});\n    };\n\n    var changeIframeSrc = function(elem, src){\n      try {\n        elem.contentWindow.location.replace(src);\n      } catch(e){\n        elem.src = src;\n      }\n    };\n\n    var handleSources = function(source){\n      var customMedia;\n\n      var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n      if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n        source.setAttribute('media', customMedia);\n      }\n\n      if(sourceSrcset){\n        source.setAttribute('srcset', sourceSrcset);\n      }\n    };\n\n    var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n      var src, srcset, parent, isPicture, event, firesLoad;\n\n      if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n        if(sizes){\n          if(isAuto){\n            addClass(elem, lazySizesCfg.autosizesClass);\n          } else {\n            elem.setAttribute('sizes', sizes);\n          }\n        }\n\n        srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n        src = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n        if(isImg) {\n          parent = elem.parentNode;\n          isPicture = parent && regPicture.test(parent.nodeName || '');\n        }\n\n        firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n        event = {target: elem};\n\n        addClass(elem, lazySizesCfg.loadingClass);\n\n        if(firesLoad){\n          clearTimeout(resetPreloadingTimer);\n          resetPreloadingTimer = setTimeout(resetPreloading, 2500);\n          addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n        }\n\n        if(isPicture){\n          forEach.call(parent.getElementsByTagName('source'), handleSources);\n        }\n\n        if(srcset){\n          elem.setAttribute('srcset', srcset);\n        } else if(src && !isPicture){\n          if(regIframe.test(elem.nodeName)){\n            changeIframeSrc(elem, src);\n          } else {\n            elem.src = src;\n          }\n        }\n\n        if(isImg && (srcset || isPicture)){\n          updatePolyfill(elem, {src: src});\n        }\n      }\n\n      if(elem._lazyRace){\n        delete elem._lazyRace;\n      }\n      removeClass(elem, lazySizesCfg.lazyClass);\n\n      rAF(function(){\n        // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n        var isLoaded = elem.complete && elem.naturalWidth > 1;\n\n        if( !firesLoad || isLoaded){\n          if (isLoaded) {\n            addClass(elem, 'ls-is-cached');\n          }\n          switchLoadingClass(event);\n          elem._lazyCache = true;\n          setTimeout(function(){\n            if ('_lazyCache' in elem) {\n              delete elem._lazyCache;\n            }\n          }, 9);\n        }\n        if (elem.loading == 'lazy') {\n          isLoading--;\n        }\n      }, true);\n    });\n\n    var unveilElement = function (elem){\n      if (elem._lazyRace) {return;}\n      var detail;\n\n      var isImg = regImg.test(elem.nodeName);\n\n      //allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n      var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n      var isAuto = sizes == 'auto';\n\n      if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n      detail = triggerEvent(elem, 'lazyunveilread').detail;\n\n      if(isAuto){\n         autoSizer.updateElem(elem, true, elem.offsetWidth);\n      }\n\n      elem._lazyRace = true;\n      isLoading++;\n\n      lazyUnveil(elem, detail, isAuto, sizes, isImg);\n    };\n\n    var afterScroll = debounce(function(){\n      lazySizesCfg.loadMode = 3;\n      throttledCheckElements();\n    });\n\n    var altLoadmodeScrollListner = function(){\n      if(lazySizesCfg.loadMode == 3){\n        lazySizesCfg.loadMode = 2;\n      }\n      afterScroll();\n    };\n\n    var onload = function(){\n      if(isCompleted){return;}\n      if(Date.now() - started < 999){\n        setTimeout(onload, 999);\n        return;\n      }\n\n\n      isCompleted = true;\n\n      lazySizesCfg.loadMode = 3;\n\n      throttledCheckElements();\n\n      addEventListener('scroll', altLoadmodeScrollListner, true);\n    };\n\n    return {\n      _: function(){\n        started = Date.now();\n\n        lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n        preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n        addEventListener('scroll', throttledCheckElements, true);\n\n        addEventListener('resize', throttledCheckElements, true);\n\n        addEventListener('pageshow', function (e) {\n          if (e.persisted) {\n            var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n            if (loadingElements.length && loadingElements.forEach) {\n              requestAnimationFrame(function () {\n                loadingElements.forEach( function (img) {\n                  if (img.complete) {\n                    unveilElement(img);\n                  }\n                });\n              });\n            }\n          }\n        });\n\n        if(window.MutationObserver){\n          new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n        } else {\n          docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n          docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n          setInterval(throttledCheckElements, 999);\n        }\n\n        addEventListener('hashchange', throttledCheckElements, true);\n\n        //, 'fullscreenchange'\n        ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n          document[_addEventListener](name, throttledCheckElements, true);\n        });\n\n        if((/d$|^c/.test(document.readyState))){\n          onload();\n        } else {\n          addEventListener('load', onload);\n          document[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n          setTimeout(onload, 20000);\n        }\n\n        if(lazysizes.elements.length){\n          checkElements();\n          rAF._lsFlush();\n        } else {\n          throttledCheckElements();\n        }\n      },\n      checkElems: throttledCheckElements,\n      unveil: unveilElement,\n      _aLSL: altLoadmodeScrollListner,\n    };\n  })();\n\n\n  var autoSizer = (function(){\n    var autosizesElems;\n\n    var sizeElement = rAFIt(function(elem, parent, event, width){\n      var sources, i, len;\n      elem._lazysizesWidth = width;\n      width += 'px';\n\n      elem.setAttribute('sizes', width);\n\n      if(regPicture.test(parent.nodeName || '')){\n        sources = parent.getElementsByTagName('source');\n        for(i = 0, len = sources.length; i < len; i++){\n          sources[i].setAttribute('sizes', width);\n        }\n      }\n\n      if(!event.detail.dataAttr){\n        updatePolyfill(elem, event.detail);\n      }\n    });\n    var getSizeElement = function (elem, dataAttr, width){\n      var event;\n      var parent = elem.parentNode;\n\n      if(parent){\n        width = getWidth(elem, parent, width);\n        event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n        if(!event.defaultPrevented){\n          width = event.detail.width;\n\n          if(width && width !== elem._lazysizesWidth){\n            sizeElement(elem, parent, event, width);\n          }\n        }\n      }\n    };\n\n    var updateElementsSizes = function(){\n      var i;\n      var len = autosizesElems.length;\n      if(len){\n        i = 0;\n\n        for(; i < len; i++){\n          getSizeElement(autosizesElems[i]);\n        }\n      }\n    };\n\n    var debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n    return {\n      _: function(){\n        autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n        addEventListener('resize', debouncedUpdateElementsSizes);\n      },\n      checkElems: debouncedUpdateElementsSizes,\n      updateElem: getSizeElement\n    };\n  })();\n\n  var init = function(){\n    if(!init.i && document.getElementsByClassName){\n      init.i = true;\n      autoSizer._();\n      loader._();\n    }\n  };\n\n  setTimeout(function(){\n    if(lazySizesCfg.init){\n      init();\n    }\n  });\n\n  lazysizes = {\n    cfg: lazySizesCfg,\n    autoSizer: autoSizer,\n    loader: loader,\n    init: init,\n    uP: updatePolyfill,\n    aC: addClass,\n    rC: removeClass,\n    hC: hasClass,\n    fire: triggerEvent,\n    gW: getWidth,\n    rAF: rAF,\n  };\n\n  return lazysizes;\n}\n));","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport scrollToElement from '../utils/scrollTo';\n\nexport default function ActionCodeEngine() {\n  Pubsub.subscribe( 'core.attach', $.proxy( this.attach, this ) );\n}\n\nActionCodeEngine.prototype = {\n  attach: function( msg, element ) {\n    var _this = this;\n    var container = $( \".js-action-code-engine\" );\n\n    // check config presence\n    if(!config.actionCodeUrls){\n      return;\n    }\n    this.config = config;\n\n    if(container.data('open')) {\n      container.data('open', false);\n      _this.editBenefits(false);\n    }\n\n    $('#error').affix({\n    });\n\n    // Trigger for 'Vorteile übernhemen'\n    $(\".promotions\").off('click').on(\"click\", \".js-submitPromotionButton\", function (e) {\n      e.preventDefault();\n      _this.applyBenefits();\n    } );\n\n    // hide attainable promos\n    $(\".promotions\").on(\"click\", \".js-cancelPromotionButton\", function (e) {\n      e.preventDefault();\n\n      if($(\".js-action-code-markup-auto\").is(':empty') && $(\".js-action-code-markup-selectable\" ).is(':empty')) {\n        _this.hideContainer();\n      } else {\n        $( \".not-redeem-promotions-content\" ).toggleClass( \"hidden\" );\n      }\n      _this.rejectAttainBenefit();\n    } );\n\n    // trigger for 'Vorteile ändern'\n    $( \".js-openBenefits\" ).off( \"click\" ).on('click', function(e) {\n      e.preventDefault();\n      _this.editBenefits(true);\n    } );\n\n    // unchoose selected item\n    $( \".remove-promo\" ).off( \"click\" ).on('click', function(e) {\n      e.preventDefault();\n      var itemId = $(this).parents('[data-itemId]').data('itemid');\n      _this.unchooseItem(itemId);\n    } );\n\n    // activate/deactivate button 'Vorteile übernehmen'\n    // prevent selection of sold out variations / disabled options\n    $(\".promotions\").off('change').on(\"change\",\n      \".redeem-promotions-content input[type='checkbox'], .redeem-promotions-content select\",\n       function () {\n        var item = $(this).parents('[data-itemId]');\n        if(item.find('option:selected').prop('disabled')){\n          item.find('input[type=\"checkbox\"]').prop('checked', false);\n        }\n    });\n\n    // allow only max items on PAP selection\n    $('.promotions').on('change','[data-max-items] input[type=\"checkbox\"]', function() {\n      _this.maxSelectionValidation($(this));\n    });\n\n    $(\".js-remove-actioncode\").off(\"click\").on('click', function(e) {\n      e.preventDefault();\n      $.post(config.actionCodeUrls.remove)\n        .done(function(data) {\n          if(data.success) {\n            window.location.href = window.location.href;\n          }\n        }).fail(function(error) {\n        if (window.console) console.error(\"Failed to remove action code!\", error);\n      });\n    });\n\n    $(\".js-remove-voucher\").off(\"click\").on('click', function(e) {\n      // e.preventDefault();\n      e.preventDefault();\n      $.post(config.voucherCodeRemoveUrl)\n        .done(function(data) {\n          if(data.success) {\n            window.location.href = window.location.href;\n          }\n        }).fail(function(error) {\n        if (window.console) console.error(\"Failed to remove voucher code!\", error);\n      });\n    });\n\n    _this.saveActionCode($('.js-action-code-form'));\n    _this.saveVoucherCode($('.js-voucher-code-form'));\n\n  },\n  showContainer: function(markup) {\n    var container = $( \".js-action-code-engine\" );\n    var showAuto = container.data('show-auto');\n    var showSelectable = container.data('show-selectable');\n    var showAttainable = container.data('show-attainable');\n    var pageLoad = container.data('page-load');\n    var automContainer = $( \".js-action-code-markup-auto\" );\n    var selectContainer = $( \".js-action-code-markup-selectable\" );\n    var attainContainer = $( \".js-action-code-markup-attainable\" );\n    var errorContainer = $(\".summary-errors\");\n\n    if(markup) {\n      if (pageLoad) {\n        if(showAuto) {\n          automContainer.html(markup.auto);\n        }\n        if(showSelectable){\n          selectContainer.html(markup.selectable);\n        }\n        if(showAttainable){\n          attainContainer.html(markup.attainable);\n        }\n    } else{\n        automContainer.html(markup.auto);\n        selectContainer.html(markup.selectable);\n        attainContainer.html(markup.attainable);\n      }\n    }\n\n    var addArticle = $(\".add-article .heading\");\n\n    if(!automContainer.is(':empty') || !selectContainer.is(':empty')\n        || !attainContainer.is(':empty')) {\n      container.removeClass( \"hidden\" );\n      addArticle.addClass(\"bordered-top xs-border\");\n      //scrollToElement(container, 500);\n\n      if(errorContainer.length > 0 && !errorContainer.is(':empty')) {\n        scrollToElement(errorContainer, 500);\n      } else{\n        scrollToElement(container, 500);\n      }\n    }\n\n    container.data('page-load', false);\n\n  },\n  hideContainer: function() {\n    $( \".js-action-code-markup-auto\" ).html('');\n    $( \".js-action-code-markup-selectable\" ).html('');\n    $( \".js-action-code-markup-attainable\" ).html('');\n\n    var container = $( \".js-action-code-engine\" );\n    var addArticle = $(\".add-article .heading\");\n\n    container.addClass( \"hidden\" );\n    addArticle.removeClass(\"bordered-top xs-border\");\n    scrollToElement($('.cart-content'), 500);\n  },\n  saveActionCode: function(form) {\n    var _this = this;\n    var input = form.find('input[name=\"actionCode\"]');\n\n    form.off('submit').on('submit', function(e){\n      e.preventDefault();\n\n      var formData = form.serialize();\n\n      $.post(config.actionCodeUrls.set, formData)\n      .done(function(resultJson,jqXHR) {\n          if(resultJson.success) {\n            $( \".js-action-code-engine\" ).data('page-load', false);\n            if (resultJson.discountOnly) {\n              _this.applyBenefits();\n            }\n            _this.showContainer(resultJson.markup);\n            input.val(\"\");\n            // update basket part\n            _this.updatePositionList();\n            $('.js-action-code-error').html('');\n          } else {\n            $('.js-action-code-error').html(resultJson.markup.error);\n          }\n      });\n    });\n  },\n\n  saveVoucherCode: function(form) {\n    var _this = this;\n    var input = form.find('input[name=\"voucherCode\"]');\n\n    form.off('submit').on('submit', function(e){\n      e.preventDefault();\n\n      var formData = form.serialize();\n\n      $.post(config.voucherCodeUrl, formData)\n        .done(function(resultJson,jqXHR) {\n          if(resultJson.success) {\n            $( \".js-action-code-engine\" ).data('page-load', false);\n            _this.showContainer(resultJson.markup);\n            input.val(\"\");\n            _this.applyBenefits();\n            // update basket part\n            _this.updatePositionList();\n            $('.js-action-code-error').html('');\n          } else {\n            $(\".js-vouchercode-message\").html(resultJson.error);\n            $(\".js-vouchercode-message\").css(\"display\", \"block\");\n            $(\"input[name='voucherCode']\").addClass(\"has-error\");\n          }\n        }).fail(function(error) {\n        if (window.console) console.error(\"Failed to add voucher code!\", error);\n      });\n    });\n  },\n\n  checkZeroBasketValue: function() {\n    $('.js-basket-loader').addClass('loader');\n    $.get(config.basketCheckZeroValue, function(resultJson){\n      if(resultJson.success){\n        window.location.reload(true);\n      }\n    }).always(function(){\n      $('.js-basket-loader').removeClass('loader');\n    });\n  },\n  updatePositionList: function() {\n    var _this = this;\n    $('.js-basket-loader').addClass('loader');\n    $.get(config.basketUpdateValue, function(resultHtml){\n      var newContent = $(resultHtml).find('.cart-content');\n      $('.cart-content').replaceWith(newContent);\n\n      var headerButtons = $(resultHtml).find('.header-btns')[0];\n      $('.header-btns:not(.js-header-btns)').replaceWith(headerButtons);\n\n      var errorMsg = $(resultHtml).find('.js-basket-size-error');\n      $('.js-basket-size-error').replaceWith(errorMsg);\n\n      // apply cart.js event trigger\n      Pubsub.publish('core.attach');\n    }).always(function(){\n      $('.js-basket-loader').removeClass('loader');\n      _this.checkZeroBasketValue();\n    });\n  },\n  editBenefits: function(modify) {\n    var _this = this;\n    $.get(config.actionCodeUrls.getBenefits + \"?modify=\" + modify, function(resultJson){\n      if(resultJson.success) {\n        if(modify) {\n          var container =  $( \".js-action-code-engine\" );\n          $( \".js-action-code-markup-auto\" ).html(resultJson.markup.auto);\n          $( \".js-action-code-markup-selectable\" ).html(resultJson.markup.selectable);\n          $( \".js-action-code-markup-attainable\" ).html(resultJson.markup.attainable);\n\n          if(! $( \".js-action-code-markup-auto\" ).is(':empty') || ! $( \".js-action-code-markup-selectable\" ).is(':empty')\n              || !$( \".js-action-code-markup-attainable\" ).is(':empty')) {\n            container.removeClass( \"hidden\" );\n            scrollToElement(container, 500);\n          }\n        } else {\n          _this.showContainer(resultJson.markup);\n        }\n\n       }\n    });\n\n  },\n  applyBenefits: function() {\n    var _this = this;\n    var selectedBenefits = $('.redeem-promotions-content input[type=\"checkbox\"]:checked');\n    var notSelectedBenefits = $('.redeem-promotions-content input[type=\"checkbox\"]:not(:checked)');\n    var basketBenefits = $('.basket-promotions-content .row.product, .basket-promotions-content .xrow.product');\n    var selectedBenefitsList = [];\n    var itemsInBasket = [];\n\n    if (basketBenefits.length > 0 && notSelectedBenefits.length > 0) {\n      basketBenefits.each(function() {\n        itemsInBasket.push($(this).data('itemid'));\n      });\n\n      notSelectedBenefits.each(function() {\n        var item = $(this).parents('[data-itemId]');\n        var itemId = item.data('itemid');\n\n        if(item && jQuery.inArray(itemId, itemsInBasket) !== -1) {\n          _this.unchooseItem(itemId);\n        }\n      });\n\n    }\n\n    selectedBenefits.each(function() {\n      var item = $(this).parents('[data-itemId]');\n\n      if(item) {\n        var postData = {\n          'itemId': item.data('itemid'),\n          'itemType': item.data('type')\n        };\n\n        var amount = item.find('select[name=\"prAmount\"]').val();\n        if(!amount){\n          amount = 1;\n        }\n\n        postData['amount'] = amount;\n\n        var variationId = item.find('select[name=\"promoItemSize\"]').val();\n        if(variationId){\n          postData['itemId'] = variationId;\n        }\n\n        selectedBenefitsList.push(postData);\n      }\n    });\n\n    $.ajax({\n      type: 'POST',\n      url: config.actionCodeUrls.select,\n      data: JSON.stringify(selectedBenefitsList),\n      contentType : 'application/json'\n    }).always(function(){\n      _this.updatePositionList();\n      $( \".js-action-code-markup-selectable\" ).html('');\n      $( \".js-action-code-engine\" ).data('page-load', false);\n      window.location.reload(true);\n    });\n  },\n  unchooseItem: function(itemId) {\n    var _this = this;\n    var postData = {\n      'itemId': itemId\n    };\n\n    $.post(config.actionCodeUrls.unchoose, postData, function(resultJson) {\n      _this.updatePositionList();\n    });\n\n  },\n  maxSelectionValidation: function(elem) {\n    var parent = elem.parents('[data-max-items]');\n    var max = parent.data('max-items');\n    var selectedCheckboxes = parent.find('input[type=\"checkbox\"]:checked');\n\n    if(selectedCheckboxes.length > max) {\n      // unselect the first selected checkbox in this group (but not the clicked one)\n      parent.find('input[type=\"checkbox\"]:checked').not(elem).first().prop('checked', false);\n    }\n  },\n  rejectAttainBenefit: function() {\n    $.post(config.actionCodeUrls.rejectAttainBenefit);\n  }\n};\n","/**\n * This script implements a fully client side form validation. It registers a\n * focus listener to each form input element (\"input\", \"select\") that uses the\n * CSS class \"form-control\", managing the live error feedback to the user. On\n * initialization it sets a placeholder value for each input not already having\n * one with the value of its label.\n * <p>\n * Each input's validation is configured by its attribute \"data-restriction\".\n * The following comma separated validation informations can by set:\n * <ul>\n * <li>\"type\" (defaults to \"text\")\n * <ul>\n * <li>\"text\"</li>\n * <li>\"email\" input is validated to an email address</li>\n * <li>\"phone\" input is validated to a phone number</li>\n * <li>\"choice\" input is validated to a selected value from its \"option\"s list.\n * The first entry is used as the placeholder</li>\n * </ul>\n * </li>\n * <li>\"min\" (defaults to \"1\"). To declare an input as optional, specify a min\n * of value 0.</li>\n * <li>\"max\" (defaults to Number.MAX_VALUE)</li>\n * </ul>\n * </p>\n * <p>\n * The developer is responsible for keeping the client side validation at least\n * as restrictive as the corresponding server side validation. The latter one\n * results just in true or false.\n * </p>\n */\nimport $ from \"jquery\";\nimport Pubsub from \"pubsub\";\n\nexport default function FormValidator($formControl) {\n  this.$formControl = $formControl;\n  this.required = true;\n  this.type = 'text';\n  this.min = 1;\n  this.max = Number.MAX_VALUE;\n  this.ref = \"\";\n\n  var restrictions = this.$formControl.data('restriction');\n  var that = this;\n  $.each(restrictions.split(','), function(i, restriction) {\n    var restrictionParts = restriction.split('=');\n\n    var key = restrictionParts[0].trim();\n    var value = restrictionParts.length > 1 ? restrictionParts[1].trim() : '';\n    switch (key) {\n    case 'min':\n      that.min = parseInt(value);\n      break;\n    case 'max':\n      that.max = parseInt(value);\n      break;\n    case 'type':\n      that.type = value;\n      break;\n    case 'required':\n      that.required = !(value == \"false\"); // default is true, so required\n      // must be turned off\n      // (required=false)\n      break;\n    case 'ref':\n      that.ref = value;\n      break;\n    default:\n      break;\n    }\n  });\n}\n\nFormValidator.prototype = {\n  errorMessages: {\n    'optional': 'Sie können dieses Feld auch leer lassen.',\n    'text.empty': 'Angabe erforderlich.',\n    'text.exact': 'Geben Sie genau %1 Zeichen ein.',\n    'text.length': 'Geben Sie mindestens %1 und höchstens %2 Zeichen ein.',\n    'choice.empty': 'Bitte wählen Sie.',\n    'email.at': 'Die Eingabe enthält kein \"@\".',\n    'email.domain': 'Die Eingabe enthält keine Domäne.',\n    'phone.illegalchar': 'Die Telefonnummer enthält unerlaubte Zeichen. Erlaubt sind: Ziffern, +, / und Leerzeichen.',\n    'phone.onlyOne': 'Die Telefonnummer darf nur ein %1-Zeichen enthalten.',\n    'password.repeat': 'Geben Sie hier exakt dieselben Zeichen ein wie im Passwortfeld.',\n  },\n  showErrorTip: function(msgKey) {\n    this.$formControl.addClass('error');\n    this.$formControl.prop('validatyStatus', false);\n\n    if (!this.$formControl.is(':focus')) {\n      return;\n    }\n\n    var $errorTip = $('#' + this.$formControl.attr('id') + '\\\\.errors');\n    if (!$errorTip.length) {\n      $errorTip = $('<span>', {\n        id: this.$formControl.attr('id') + '.errors'\n      }).addClass('error-tip').insertAfter(this.$formControl);\n\n      var position = this.$formControl.position();\n      position.top += this.$formControl.outerHeight();\n      position.top += parseInt(this.$formControl.css('marginTop'));\n      $errorTip.css(position);\n    }\n\n    var message = this.errorMessages[msgKey];\n    for (var i = 1; i < arguments.length; i++) {\n      message = message.replace(new RegExp('%' + i, 'g'), arguments[i]);\n    }\n    if (!this.required) {\n      message += ' ' + this.errorMessages['optional'];\n    }\n    $errorTip.text(message);\n\n    var scrollTop = $(window).scrollTop();\n    var innerHeight = window.innerHeight;\n    var errorOffsetBottom = $errorTip.offset().top + $errorTip.outerHeight();\n    if (scrollTop + innerHeight > errorOffsetBottom) {\n      return;\n    }\n\n    var offset = $errorTip.offset().top + $errorTip.outerHeight() - window.innerHeight;\n    $('html,body').animate({\n      scrollTop: offset + 'px'\n    }, 100);\n  },\n  hideErrorTip: function() {\n    var $errorTip = $('#' + this.$formControl.attr('id') + '\\\\.errors');\n    if ($errorTip.length) {\n      $errorTip.remove();\n    }\n    if (this.$formControl.prop('validatyStatus')) {\n      this.$formControl.removeClass('error');\n    }\n    this.$formControl.removeProp('validatyStatus');\n  },\n  validate: function() {\n    if (this.type == 'choice') {\n      return this.validateComboBox();\n    }\n    if (this.type == 'email') {\n      return this.validateEmail();\n    }\n\n    if (this.type == 'phone') {\n      return this.validatePhone();\n    }\n\n    if (this.type == 'text') {\n      return this.validateText();\n    }\n\n    if (this.type == 'password') {\n      return this.validatePassword();\n    }\n  },\n  validateComboBox: function() {\n    var $selected = $('#' + this.$formControl.attr('id') + ' option:selected');\n    if ($selected.index() > 0) {\n      this.$formControl.prop('validatyStatus', true);\n      this.hideErrorTip();\n      return;\n    }\n\n    this.showErrorTip('choice.empty');\n    return;\n  },\n  validateEmail: function() {\n    var val = this.$formControl.val();\n\n    if (!this.required && val.length == 0) {\n      this.$formControl.prop('validatyStatus', true);\n      this.hideErrorTip();\n      return;\n    }\n\n    if (val.length < this.min || val.length > this.max) {\n      this.showErrorTip('text.length', this.min, this.max);\n      return;\n    }\n\n    var indexOfAt = val.indexOf('@');\n    if (indexOfAt == -1) {\n      this.showErrorTip('email.at');\n      return;\n    }\n\n    var indexOfDot = val.indexOf('.', indexOfAt);\n    if (indexOfDot == -1) {\n      this.showErrorTip('email.domain');\n      return;\n    }\n\n    this.$formControl.prop('validatyStatus', true);\n    this.hideErrorTip();\n    return;\n  },\n  validatePhone: function() {\n    var val = this.$formControl.val();\n\n    if (!this.required && val.length == 0) {\n      this.$formControl.prop('validatyStatus', true);\n      this.hideErrorTip();\n      return;\n    }\n\n    if (val.length < this.min || val.length > this.max) {\n      this.showErrorTip('text.length', this.min, this.max);\n      return;\n    }\n\n    for (var i = 0; i < val.length; i++) {\n      var validChars = '0123456789 +/';\n      if (validChars.indexOf(val[i]) == -1) {\n        this.showErrorTip('phone.illegalchar');\n        return;\n      }\n    }\n\n    if ((val.match(/\\+/g) || []).length > 1) {\n      this.showErrorTip('phone.onlyOne', '+');\n      return;\n    }\n\n    if ((val.match(/\\//g) || []).length > 1) {\n      this.showErrorTip('phone.onlyOne', '/');\n      return;\n    }\n\n    this.$formControl.prop('validatyStatus', true);\n    this.hideErrorTip();\n    return;\n  },\n  validateText: function() {\n    var val = this.$formControl.val();\n\n    if (!this.required && val.length == 0) {\n      this.$formControl.prop('validatyStatus', true);\n      this.hideErrorTip();\n      return;\n    }\n\n    if (val.length >= this.min && val.length <= this.max) {\n      this.$formControl.prop('validatyStatus', true);\n      this.hideErrorTip();\n      return;\n    }\n\n    if (this.min == this.max) {\n      this.showErrorTip('text.exact', this.min);\n      return;\n    }\n\n    this.showErrorTip('text.length', this.min, this.max);\n  },\n  validatePassword: function() {\n    this.validateText();\n  // change when using password quality check\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function AcceptCookies() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nAcceptCookies.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var accepteCookies = (navigator.cookieEnabled) ? true : false;\n\n\n    if (accepteCookies) {\n      $(document).off(\"click\", \"#js-open-cookie-layer-1\").on(\"click\", \"#js-open-cookie-layer-1\", (function (e) {\n        _this.openSecondLayer(\"js-open-cookie-layer-1\");\n      }));\n      $(document).off(\"click\", \"#js-open-cookie-layer-2\").on(\"click\", \"#js-open-cookie-layer-2\", (function (e) {\n        _this.openSecondLayer(\"js-open-cookie-layer-2\");\n      }));\n\n      $(document).off(\"click\", \"#js-accept-cookies-1\").on(\"click\", \"#js-accept-cookies-1\", (function (e) {\n        _this.acceptAllCookies(\"ConsentLayer-1-accept-all-cookies\");\n      }));\n      $(document).off(\"click\", \"#js-accept-cookies-2\").on(\"click\", \"#js-accept-cookies-2\", (function (e) {\n        _this.acceptAllCookies(\"ConsentLayer-2-accept-all-cookies\");\n      }));\n\n      $(document).off(\"click\", \"#reject-all-cookies-1\").on(\"click\", \"#reject-all-cookies-1\", (function (e) {\n        _this.rejectAllCookies(\"ConsentLayer-reject-all-cookies\");\n      }));\n      $(document).off(\"click\", \"#reject-all-cookies-2\").on(\"click\", \"#reject-all-cookies-2\", (function (e) {\n        _this.rejectAllCookies(\"ConsentLayer-reject-all-cookies\");\n      }));\n\n      $(document).off(\"click\", \"#consent_confirm\").on(\"click\", \"#consent_confirm\", (function (e) {\n        _this.confirm();\n        $(\".cookie-layer\").hide();\n        $(\"#the-modal\").empty();\n        _this.releaseSpecialCategoryPopup();\n      }));\n    }\n\n    $(document).off(\"click\",\".js-toggle-consentdescription\").on(\"click\",\".js-toggle-consentdescription\", (function (e) {\n      var field = $(this).attr(\"data-field\");\n      var target = \"#\"+field;\n      if ($(target).is(\":visible\")) {\n        $(target).hide();\n      }  else {\n        $(target).show();\n      }\n      return false;\n    }));\n\n    if (_this.getCookie(\"ConsentCookie\") != null) {\n      $(\".cookie-layer\").hide();\n    } else {\n      var trackingData = {\n        'eventCategory' : \"ViewEvent\",\n        'eventAction' : \"Layer\",\n        'eventLabel' : \"ConsentLayer-1\"\n      }\n      $(\".cookie-layer\").show();\n      Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n    }\n\n    if (sessionStorage.getItem('first_referrer') == null) {\n      sessionStorage.setItem('first_referrer', document.referrer);\n    }\n  },\n  openSecondLayer : function (target) {\n    var _this = this;\n    $(\".cookie-layer\").fadeOut('fast');\n    var trackingData = {\n      'eventCategory' : \"ClickEvent\",\n      'eventAction' : \"Layer\",\n      'eventLabel' : target\n    }\n    Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n    _this.showConsentLayer();\n    return false;\n  },\n  acceptAllCookies : function (target) {\n    var _this = this;\n    _this.setCookieFullConsent();\n    _this.closeAndTrackConsentLayer(target);\n    return false;\n  },\n  rejectAllCookies : function (target) {\n    var _this = this;\n    _this.triggerCookie(\"opt_marketing=0|opt_personalization=0|opt_statistics=0\",true);\n    _this.closeAndTrackConsentLayer(target);\n    _this.manageRejectionStatistics();\n    _this.reloadAfterConsent();\n    return false;\n  },\n  closeAndTrackConsentLayer : function (target) {\n    var _this = this;\n    $(\".cookie-layer\").fadeOut('fast');\n    $('#the-modal').modal('hide');\n    $(\"#the-modal\").empty();\n    _this.releaseSpecialCategoryPopup();\n    var trackingData = {\n      'eventCategory' : \"ClickEvent\",\n      'eventAction' : \"Layer\",\n      'eventLabel' : target\n    }\n    Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n    return false;\n  },\n  releaseSpecialCategoryPopup : function () {\n    $('#the-modal').modal('hide');\n    $(\"#the-modal\").empty();\n    if (!sessionStorage.getItem('showSpecialPopupAfterConsent')) {\n      sessionStorage.setItem('showSpecialPopupAfterConsent', 'true');\n      $.get(\"/specialCategory/modal/release/\");\n    }\n  },\n  run: function () {\n    var _this = this;\n    _this.showConsentLayer();\n  },\n  showConsentLayer: function () {\n    var _this = this;\n    $.get(cfg.consentLayerModalUrl, function(data) {\n      $('#the-modal').html(data.markup);\n      var popupContent = JSON.stringify(data);\n      if (popupContent.indexOf(\"layer_popup\") > -1) {\n        _this.loadConsent();\n        $('#the-modal').modal('show');\n      }\n    }).fail(function(jqXhr, error) {\n      if (window.console) console.log(\"consent overlay error!\", error);\n    });\n  },\n  loadConsent: function () {\n    var _this = this;\n    if (_this.getCookie(\"ConsentCookie\") == null) {\n      _this.setCookieDefaultConsent(false);\n    }\n    _this.setConsentOption(\"opt_personalization\");\n    _this.setConsentOption(\"opt_marketing\");\n    _this.setConsentOption(\"opt_statistics\");\n  },\n  setConsentOption: function( groupName ) {\n    var _this = this;\n    var cookieValue = _this.getCookie(\"ConsentCookie\");\n    var choosed = (cookieValue.includes(groupName+\"=1\")) ? true : false;\n    $(\"input#\"+groupName).attr(\"checked\",choosed);\n  },\n  confirm: function() {\n    var _this = this;\n\n    const isChoiceStatistics = $(\"#opt_statistics\").is(\":checked\") ? \"1\" : \"0\";\n    const isChoicePersonalization = $(\"#opt_personalization\").is(\":checked\") ? \"1\" : \"0\";\n    const isChoiceMarketing  = $(\"#opt_marketing\").is(\":checked\") ? \"1\" : \"0\";\n    var newConsent= \"opt_marketing=\" + isChoiceMarketing+ \"|opt_personalization=\" + isChoicePersonalization\n      +  \"|opt_statistics=\" + isChoiceStatistics;\n    _this.triggerCookie(newConsent,true);\n    if (!isChoiceStatistics) {\n      _this.manageRejectionStatistics();\n    }\n    _this.reloadAfterConsent();\n  },\n  getCookie: function(name) {\n    var nameEQ = name + \"=\";\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n    }\n    return null;\n  },\n  setCookie: function(name, value, days) {\n    if (days) {\n      var date = new Date();\n      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n      var expires = \"; expires=\" + date.toGMTString();\n    }\n    else var expires = \"\";\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n  },\n  setCookieFullConsent: function() {\n    var _this = this;\n    _this.triggerCookie(\"opt_marketing=1|opt_personalization=1|opt_statistics=1\",true);\n    _this.reloadAfterConsent();\n  },\n  setCookieDefaultConsent: function(confirmedByUser) {\n    var _this = this;\n    _this.triggerCookie( \"opt_marketing=0|opt_personalization=0|opt_statistics=0\",confirmedByUser);\n  },\n  triggerCookie: function(consentPart,confirmedByUser) {\n    var _this = this;\n    _this.setCookie(\"ConsentCookie\" ,\n      consentPart + ((confirmedByUser) ? \"|confirmedAt=\" + (new Date()).toISOString() : \"\"), 730);\n  },\n  reloadAfterConsent: function() {\n    var currentURL = window.location.href;\n    var theReferrer = sessionStorage.getItem('first_referrer');\n    if (theReferrer.length > 0) {\n      const searchParams = new URLSearchParams(window.location.search);\n      const delimiter = ((searchParams.keys().length > 0) || (currentURL.includes(\"?\"))) ? \"&\" : \"?\";\n      currentURL = currentURL + delimiter + \"refURL=\" + encodeURIComponent(theReferrer);\n    }\n    window.location.href = currentURL;\n  },\n  manageRejectionStatistics: function() {\n    var alreadyFlagged = sessionStorage.getItem('no_consent_statistics');\n    if (alreadyFlagged) {\n      return;\n    }\n    sessionStorage.setItem('no_consent_statistics',true);\n    var trackingData = {\n      'eventCategory' : \"ClickEvent\",\n      'eventAction' : \"opt_statistics\",\n      'eventLabel' : \"rejected\"\n    }\n    Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\nimport Html5Validation from '../utils/html5validation';\n\n\nexport default function DirectOrder() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n  this.loading = new Loading();\n}\n\nDirectOrder.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    if($('.js-search-artno .single-size input:disabled')){\n      $('.js-search-artno .single-size input:disabled').parent().addClass(\"disabled\");\n    }\n    if($('.js-search-artno .single-size input[type=radio]:checked')){\n      $('.js-search-artno .single-size input[type=radio]:checked').parent().addClass(\"active\");\n    }\n\n    // show more fields\n    $(\".js-more-fields\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      $('.js-hidden-fields').show();\n      $(this).hide();\n    });\n\n    // prevent submit form on enter and tab\n    $(\".js-input-artno\").off('keydown').on('keydown', function(e) {\n      var keyCode = e.which;\n      if (e.type == \"keydown\" && keyCode != 13 && keyCode != 9) {\n        return;\n      }\n      e.preventDefault();\n      $(this).parents('.article').find('.btn-search-artno').click();\n    });\n\n    // search article\n    $(\".btn-search-artno\").off(\"click\").on(\"click\", function() {\n      $(this).addClass('loader');\n      var _this = this;\n      var id = $(this).data('id');\n      var itemId = $('#search-artno-'+ id).attr('value') ? $('#search-artno-'+ id).prop('value') : $('#search-artno-'+ id).val();\n      if (itemId != 'undefined' && itemId != null) {\n        var requestUrl = $('.js-directorder').data('add') + \"?itemId=\"+ itemId + \"&id=\"+ id;\n        $.post(requestUrl, function (response) {\n          $(\".btn-search-artno\").removeClass('loader');\n          if(response.success) {\n            $(_this).parent().next(\".js-error\").html('');\n            $(_this).parents('.article').find(\".js-search-artno\").html(response.markup);\n            if(id == 6){\n              $('.js-hidden-fields').show();\n              $('.js-more-fields').hide();\n            }\n            Pubsub.publish(\"core.attach\", $(_this).parent().next(\".js-search-artno\"));\n          } else {\n            $(_this).parents('.article').find(\".js-search-artno\").html('');\n            $(_this).parent().next(\".js-error\").html(response.markup);\n          }\n        }).fail(function (response) {\n          $(this).removeClass('loader');\n          window.console && console.log(response);\n        })\n      }else{\n        $(this).removeClass('loader');\n      }\n    });\n\n    // remove article\n    $(\".js-remove-article\").off(\"click\").on(\"click\", function() {\n      var _this = this;\n      var article = $(_this).parents('.js-search-artno');\n      var id = $(this).data('id');\n      var itemIdSelector = $(this).parents('.article').find('.js-input-artno');\n      var itemId = itemIdSelector.val();\n\n      if (itemId != 'undefined' && itemId != null) {\n        var requestUrl = $('.js-directorder').data('remove') + \"?itemId=\"+ itemId + \"&id=\"+ id;\n        $.post(requestUrl, function (response) {\n          $(itemIdSelector).val(\"\");\n          $(article).html(\"\");\n        }).fail(function (response) {\n          window.console && console.log(response);\n        })\n      }\n    });\n\n    // add article from customer choice to direct order form\n    $(\".js-input-customers-choice\").off(\"click\").on(\"click\", function(e){\n      e.preventDefault();\n      var itemid = $('#js-customers-choice-form').find('input[name=itemId]').val();\n      var firstEmptyField = $('.js-directorder input.js-input-artno').filter(function(){return ($(this).val().length == 0) }).first();\n      $('html,body').animate({scrollTop: firstEmptyField.offset().top});\n      firstEmptyField.prop('value', itemid);\n      firstEmptyField.parent().next().find('.btn-search-artno').click();\n    });\n\n\n    // send personal text to validate in backend\n    $(\".js-input-ptext\").off('change').on('change', function(e) {\n      var inputFieldSelector = this;\n      var personalText = $(this).val();\n      var lineIndex = $(this).data('lineindex');\n      var posIndex = $(this).data('posindex');\n      var requestUrl = $('.js-personaltext').data('add') + \"?personalText=\"+ personalText + \"&lineIndex=\" + lineIndex + \"&posIndex=\" + posIndex;\n      $.post(requestUrl, function (response) {\n        if(!response.success) {\n          $(inputFieldSelector).parents('.js-personaltext').find('.js-ptext-error').html(response.errorsMarkup);\n          $(inputFieldSelector).addClass('has-error')\n        }\n      }).fail(function (response) {\n        window.console && console.log(response);\n      })\n    });\n\n    $('.js-search-artno select').off('change').on('change', function(e) {\n      _this.editArticle(e, \"isQty\");\n    });\n\n    $('.article-form [data-update]').off('click').on('click', function(e) {\n      _this.editArticle(e, \"isSize\");\n    });\n\n  },\n\n  editArticle: function(e, type) {\n    e.preventDefault();\n    var $element = $(e.target);\n    var size;\n    var sizeName;\n    var qty;\n    if (type === \"isQty\") {\n      size = $element.parents('.article-form').find('input.js-size:checked').val();\n      sizeName = $element.parents('.article-form').find('input.js-size:checked').attr('name');\n      qty = $element.val();\n    } else {\n      size = $element.find('.js-size').val();\n      sizeName = $element.find('.js-size').attr('name');\n      qty = $element.parents('.js-search-artno').find('.js-qty').val();\n    }\n    var id = $element.parents('.article-form').data('id');\n    var previousItemId = $element.parents('.article-form').find('#input-itemId').serialize();\n    var requestUrl = $('.js-directorder').data('change') + \"?\" + escape(sizeName) +\"=\"+ size + \"&qty=\"+ qty + \"&id=\"+ id + '&' + previousItemId;\n    $.post(requestUrl, function (response) {\n      if(response.success) {\n        $element.parents('.single-article').html(response.markup);\n        if($('.js-search-artno.single-article input:checked')){\n          $('.js-search-artno.single-article input:checked').parent().addClass(\"active\");\n        }\n        Pubsub.publish(\"core.attach\", $element.parent().next(\".js-search-artno\"));\n      }else{\n        $element.parents('.article').find('.js-error').html(response.markup);\n      }\n    }).fail(function (response) {\n      window.console && console.log(response);\n    })\n  },\n\n  responsive: function(msg, on_off) {\n    switch (msg) {\n    case 'res.xs':\n      if (on_off) { // entered state xs\n      } else { // left state xs\n\n      }\n      break;\n    case 'res.sm':\n      if (on_off) { // entered state sm\n      } else { // left state sm\n\n      }\n      break;\n    default:\n      if (on_off) {\n      }\n    }\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Html5Validation from '../utils/html5validation';\nimport scrollToElement from '../utils/scrollTo';\n\nexport default function EmailSubmit() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nEmailSubmit.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n\n    $(\".js-contact-form\").off(\"submit\").on(\"submit\", function(e) {\n      e.preventDefault();\n      var errors = html5validation.validateOnAjaxSubmit($(this));\n      if (!errors){\n        _this.emailSubmit();\n      }\n      else {\n        scrollToElement($('.has-error:first'), 500);\n      }\n    });\n\n  },\n  emailSubmit: function() {\n    var form = $(\".js-contact-form\");\n\n    $.post(form.attr('action'), form.serialize())\n    .done(function(data){\n      if(data.resultStatus == \"success\") {\n        $(\"html, body\").animate({\n          scrollTop: 0\n        }, 500);\n        form.slideUp('slow').fadeOut(1000, function(){\n          $(\".js-success-message\").html(data.resultMessage).show().fadeIn(1000, function(){\n            form.find('input[type=text], input[type=email], textarea, select').val('').removeAttr('selected');\n            form.hide();\n            if($(\".js-error-message\").is(\":visible\")) {\n              $(\".js-error-message\").addClass(\"hidden\");\n            }\n           })\n        });\n      } else {\n        $(\"html, body\").animate({\n          scrollTop: 0\n        }, 500);\n        $(\".js-error-message\").html(data.resultMessage).show().fadeIn(1000);\n      }\n      if(data.hasErrors){\n        $.each(data.errors, function(i, value){\n          $(\".js-error-message\").html(value.defaultMessage).show().fadeIn(1000);\n        });\n      }\n    })\n    .fail(function(data){\n      if(data.hasErrors) {\n        $('.js-contact-error').show();\n        $.each(data.errors, function(i, value){\n          $('.js-contact-error').append('<div class=\"msg\">' + value.defaultMessage +'</div>');\n        });\n      }\n    });\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Html5Validation from '../utils/html5validation';\n\nexport default function NewsletterForm() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nNewsletterForm.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    // -- Parts newsletter-form\n    if($(\".js-newsletter-form input[name='_csrf']\").length === 0){\n      var form = $(\".js-newsletter-form\");\n\n      var token = $(\"meta[name='_csrf']\").attr(\"content\");\n      var csrfToken = $(\"<input>\", {'type': 'hidden', 'name': '_csrf', 'value': token});\n      form.append(csrfToken);\n    }\n\n    // --- part newsletter-tracking-opt-out\n\n    var newsletterOptOutTrackingModal = document.getElementById(\"newsletterOptOutTrackingModal\");\n    var newsletterOptOutTrackingInformation = document.getElementById(\"newsletterOptOutTrackingInformation\");\n    var newsletterOptOutTrackingFeedback = document.getElementById(\"newsletterOptOutTrackingFeedback\");\n\n    $(document).off(\"click\", \"#newsletterOptOutTrackingInformation\").on(\"click\", \"#newsletterOptOutTrackingInformation\", (function (e) {\n      e.preventDefault();\n      newsletterOptOutTrackingModal.style.display = \"block\";\n      newsletterOptOutTrackingInformation.style.display = \"none\";\n    }));\n\n    $(document).off(\"click\", \"#closeNewsletterTrackingOptOutButton\").on(\"click\", \"#closeNewsletterTrackingOptOutButton\", (function (e) {\n      e.preventDefault();\n      switchOffLayer();\n    }));\n\n\n    function switchOffLayer() {\n      newsletterOptOutTrackingModal.style.display = \"none\";\n      newsletterOptOutTrackingInformation.style.display = \"block\";\n      newsletterOptOutTrackingFeedback.innerHTML = \"\";\n    }\n\n\n    $(document).off(\"click\", \"#nlTrackingOptOutButton\").on(\"click\", \"#nlTrackingOptOutButton\", (function (e) {\n      e.preventDefault();\n\n      fetch('/account/newsletter/tracking-optout/', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'text/plain',\n          'X-Requested-With': 'XMLHttpRequest',\n          'X-CSRF-TOKEN': window.csrfToken\n        },\n        body: JSON.stringify({\n          email: document.getElementById(\"nlOptOutTrackingEmail\").value,\n          trackingConsent: false\n        }),\n        credentials: 'same-origin'\n      })\n        .then(function(response) {\n          if (!response.ok) {\n            throw new Error('Request failed with status ' + response.status);\n          }\n          return response.text();\n        })\n        .then(function(result) {\n          if (result === \"OK\") {\n            newsletterOptOutTrackingFeedback.innerHTML = newsletterOptOutTrackingFeedback.getAttribute(\"data-optout-tracking-answer-ok\");\n          } else {\n            newsletterOptOutTrackingFeedback.innerHTML = newsletterOptOutTrackingFeedback.getAttribute(\"data-optout-tracking-answer-error\");\n          }\n        })\n        .catch(function(error) {\n          newsletterOptOutTrackingFeedback.innerHTML = newsletterOptOutTrackingFeedback.getAttribute(\"data-optout-tracking-answer-error\");\n        });\n    }));\n\n\n\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Html5Validation from '../utils/html5validation';\nimport {Validator} from '../utils/forms';\nimport config from '../config/config';\nimport Loading from '../components/loading';\nimport * as Urls from '../utils/urls';\nimport '../utils/form_elements/plusminus';\nimport 'bootstrap';\n\nexport default function CartChange() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n\n  this.loading = new Loading();\n}\n\nCartChange.prototype = {\n\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    $(\".count-element\", element).plusminus();\n\n    // click edit button\n    $(\".actions .edit a, .js-edit a\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n\n      var $this = $(this);\n\n      if ($this.hasClass(\"loading\")) return;\n\n      var cart_product = $this.closest(\".cart-product\");\n\n      var cart_edit = cart_product.find(\".cart-edit\");\n      if (cart_edit.length > 0) {\n        cart_edit.collapse(\"hide\");\n        return;\n      }\n\n      $(\".cart-edit\").not(cart_edit).collapse(\"hide\");\n\n      var params = {\n        itemId: $(this).attr(\"data-itemId\"),\n        catalogIndex: $(this).attr(\"data-catalogIndex\"),\n        index: $(this).attr(\"data-index\"),\n        free: $(this).attr(\"data-free\"),\n        personalTextHash: $(this).attr(\"data-phash\")\n      }\n      var query = $.param(params);\n\n      _this.loading.load();\n\n      // load edit form\n      $.get(Urls.make(config.basketEditPath, query), function(data) {\n        var cart_edit = $(data);\n        cart_product.find(\"div.clearboth\").after(cart_edit);\n\n        if($('.cart-product .lastPos .edit, .cart-product .js-edit.lastPos').length === 1){\n          $('.cart-edit .input-group-btn.minus a').attr('data-cerberus','basket-modification-button-minus');\n          $('.cart-edit .input-group-btn.plus a').attr('data-cerberus','basket-modification-button-plus');\n          $('.cart-edit .input-group input[id=\"order-count\"]').attr('data-cerberus','basket-order-count-field');\n          $('.cart-edit .action-btn.edit').attr('data-cerberus','basket-modification-validation-button');\n        }\n\n        _this.loading.stop();\n\n        if($('.cart-edit .single-size input:checked')){\n          $('.cart-edit .single-size input:checked').parent().addClass(\"active\");\n        }\n\n        if($('.cart-edit .single-size input:disabled')){\n          $('.cart-edit .single-size input:disabled').parent().addClass(\"disabled\");\n        }\n\n        //Attach event handlers\n        Pubsub.publish(\"core.attach\", cart_edit);\n\n        cart_edit.collapse('show').on(\"shown.bs.collapse\", function() {\n        });\n      }).fail(function(jqXhr, e) {\n        log(e);\n      });\n    });\n\n    //\n    if ($(element).is(\".cart-edit\")) {\n      var cart_edit = element;\n\n      cart_edit.bind(\"hidden.bs.collapse\", function() {\n        $(this).remove();\n      });\n      cart_edit.collapse({\n        toggle: false\n      });\n\n      $(\"[data-update]\", cart_edit).off(\"change\").on(\"change\", function(e) {\n        _this.loading.load();\n        var $element = $(e.target);\n        $.get(Urls.make(config.basketEditPath, $(\"form\", cart_edit).serialize()), function(data) {\n          var $data = $(data);\n          cart_edit.replaceWith($data);\n          $(\"label[for='\" + $element.attr('id') + \"']\").addClass('active');\n          if($('.cart-edit .single-size input:disabled')){\n            $('.cart-edit .single-size input:disabled').parent().addClass(\"disabled\");\n          }\n          _this.loading.stop();\n\n          //Attach event handlers\n          Pubsub.publish(\"core.attach\", $data);\n          $data.addClass(\"in\");\n        }).fail(function(jqXhr, e) {\n          log(e);\n        });\n      });\n\n\n      //Submit edit form\n      $(\"button.edit\", element).off(\"click\").on(\"click\", function(e) {\n        var form = $(this).closest(\"form\");\n        var validator = new Validator(form);\n        e.preventDefault();\n\n        if (!validator.validate()) {\n          return;\n        }\n        $('.js-basket-loader').addClass('loader');\n        var _this = $(this);\n        $.post(form.attr(\"action\"), form.serialize(), function(data) {\n          if (data.success) {\n            $(\".cart-edit\").collapse(\"hide\");\n            var product = $(\".cart-edit\").closest(\".cart-product\");\n            window.location.reload(true);\n          }else{\n            $(_this).parents('form').find('.js-ptext-error').show();\n            $('.js-input-ptext').each(function(i, obj){\n              var _this = this;\n              if($(_this).val().length > $(_this).data('maxlength')){\n                $(_this).addClass('has-error');\n                $(_this).parents('form').find('.js-ptext-error').css(\"padding-bottom\",\"15px\");\n              }\n            });\n          }\n        }).fail(function(jqXhr, e) {\n          log(e);\n        }).always(function(){\n          $('.js-basket-loader').removeClass('loader');\n        });\n      });\n    }\n\n    // submit edit position amount\n    $('.js-change-amount select').off('change').on('change', function(e) {\n      e.preventDefault();\n      var _this = $(this);\n      var amount_change = _this.closest(\".js-change-amount\");\n\n      var params = {\n        itemId: amount_change.attr(\"data-itemId\"),\n        newItemId: amount_change.attr(\"data-itemId\"),\n        catalogIndex: amount_change.attr(\"data-catalogIndex\"),\n        amount: _this.val(),\n        index: amount_change.attr(\"data-index\"),\n        free: amount_change.attr(\"data-free\"),\n        personalTextHash: amount_change.attr(\"data-phash\"),\n        size: amount_change.attr(\"data-size\")\n      }\n      var query = $.param(params);\n      $('.js-basket-loader').addClass('loader');\n\n      $.post(Urls.make(config.basketEditSubmitPath, query), function (response) {\n        if(response.success) {\n          window.location.reload();\n        }\n      }).fail(function (response) {\n        window.console && console.log(response);\n      })\n    });\n\n    $(\".js-close-variation\").off('click').on('click', function() {\n      var $this = $(this);\n      var cart_product = $this.closest(\".cart-product\");\n      var cart_edit = cart_product.find(\".cart-edit\");\n\n      if (cart_edit.length > 0) {\n        cart_edit.collapse(\"hide\");\n        cart_product.find(\".js-edit\").removeClass(\"hidden\");\n        return;\n      }\n    });\n\n  }\n\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\n\nexport default function tracking_GA() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('tracking.productListClick', $.proxy(this.product_list_click, this));\n  Pubsub.subscribe('tracking.pageViewAjaxEvent', $.proxy(this.submit_pageview, this));\n  Pubsub.subscribe('tracking.layer.trackingEvent', $.proxy(this.track_event, this));\n}\n\ntracking_GA.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    if (element === document) {\n      $(document).ready(function() {\n        _this.submit_pageview();\n\n        // on promo click\n        $(\".promo-data\").on(\"mousedown\", \"a.promolink\", function(e) {\n          var $this = $(this);\n\n          var techId = $this.closest(\".promo-data\").data(\"analytics-tid\");\n          var promoItem = $.grep(_this.teaser_collection, function(e){ return e.tId === techId; });\n\n          if(typeof promoItem !== 'undefined' && promoItem.length > 0) _this.promo_click(promoItem);\n        });\n\n        $(document).on(\"click\",\".click-event-area\", function(e) {\n          var $this = $(this);\n          var tracking_group = $this.data(\"analytics-group\");\n          var tracking_id = $this.data(\"analytics-tid\");\n          var target = $this.data(\"target\");\n          var isNonInteractive = ($this.data(\"analytics-interactive\") !== 'undefined') ? \"0\" : \"1\";\n          var trackingData = { \"eventCategory\" : \"ClickEvent\", \"eventAction\" : tracking_group,\n            \"eventLabel\" : tracking_id, \"eventNonInteractive\" : isNonInteractive};\n\n          location.href=target;\n          _this.track_event(\"tracking.layer.trackingEvent\",trackingData);\n        });\n        // collect all teaser\n        _this.collect_teaser();\n        _this.submit_promotionview();\n      });\n    }\n  },\n  product_list_click: function(msg, element) {\n    var itemId = element.data(\"tritem\");\n    var position_index = element.data(\"trpos\");\n    var list = element.data(\"trlist\");\n\n    var postData = {\n        'productList': list,\n        'itemId': itemId,\n        'position': position_index\n      };\n\n    this.post_to_backend(config.listClickUrl, postData);\n  },\n  replaceGclidWithConnexity: function(pageName) {\n    try {\n      const searchParams = new URLSearchParams(location.search);\n      const cnxclidValue = searchParams.get('cnxclid');\n      if (!cnxclidValue) {\n        return pageName;\n      }\n\n      if (searchParams.has('gclid')) {\n        pageName = pageName.replace(/(gclid=)([^&]*)/g, \"$1\"+cnxclidValue);\n      } else {\n        var delimiter = pageName.includes(\"?\") ? \"&\" : \"?\";\n        pageName = pageName + delimiter + \"gclid=\"+cnxclidValue;\n      }\n      return pageName;\n    }\n    catch (error) {\n      return pageName;\n    }\n  },\n  submit_pageview: function() {\n    var _this = this;\n    var pageName = 'undefined';\n    if(typeof trackingData !== 'undefined'){\n      for (var key in trackingData) {\n        if (trackingData.hasOwnProperty(key)) {\n          var prop = trackingData[key];\n          for (var element in prop) {\n            if (prop.hasOwnProperty(element)) {\n              if (element === 'pagename') {\n                pageName = prop[element];\n              }\n            }\n          }\n        }\n      }\n    }\n\n    pageName = _this.replaceGclidWithConnexity(pageName);\n    if(pageName === 'undefined'){\n      var path = window.location.pathname;\n      path = path.replace(\"/3pagen\", \"\");\n      if (path.indexOf(\"/p/\") === -1) path = path.replace(/^\\/|\\/$/g, '');\n\n      var gaParams = location.search.replace(\"?\",\"\").split(\"&\").filter(\n        function(i){if(i.indexOf('utm_') === 0 || i.indexOf('gclid=') === 0 || i.indexOf('dclid=') === 0)\n        {return i}}).join('&');\n      gaParams = gaParams.length > 0 ? '?' + gaParams : '';\n      pageName = path + gaParams;\n    }\n\n    var endTime = window.performance.timing.domContentLoadedEventEnd;\n    var startTime = window.performance.timing.navigationStart;\n    if (endTime <= 0) {\n      endTime = Date.now();\n    }\n    var loadTime =  endTime - window.performance.timing.navigationStart;\n\n    var pageViewData = {\n        'pageName': pageName,\n        'pageTitle': document.title,\n        'referrer': document.referrer,\n        'loadTime': loadTime\n      };\n    this.post_to_backend('/ajax/tracking/page-view/', pageViewData);\n  },\n  consentCookieExists: function() {\n    return document.cookie.includes(\"ConsentCookie=\");\n  },\n  post_to_backend: function(targetUrl, postData) {\n     $.ajax({\n       type: 'POST',\n       url: targetUrl,\n       data: JSON.stringify(postData),\n       contentType: 'application/json'\n     });\n  },\n  collect_teaser: function() {\n    var _this = this;\n    _this.teaser_collection = [];\n    $('[data-analytics-promotion]:visible').each(function(i,e){\n      var trackingElement = $(e);\n\n      if (trackingElement.data(\"analytics-promotion\")) {\n        var trackparams = {}, params = trackingElement.data(\"analytics-promotion\").split(\"&\");\n        for (var param in params) {\n          if (params.hasOwnProperty(param)) {\n            var _a = params[param].match(\"([^=]+)=([^&]+)\");\n            if (_a[0] && _a[1] && _a[2])\n              trackparams[_a[1]] = _a[2];\n          }\n        }\n\n        var s = trackingElement.closest(\".promo-data\").data(\"analytics-position\");\n        var n = s.indexOf('_');\n        var teaser_position = s.substring(0, n !== -1 ? n : s.length);\n        var techId = trackingElement.closest(\".promo-data\").data(\"analytics-tid\");\n\n        var promoJSON = {\n            id: trackparams[\"id\"],\n            name: trackparams[\"name\"],\n            creative: trackparams[\"creative\"],\n            position: teaser_position,\n            tId : techId\n        };\n\n        // 2 stage teaser tabs result in 4 elements, the following ensures unique elements in collection array\n        if($.grep(_this.teaser_collection, function(e){ return e.tId === techId; }).length === 0){\n          // register impression/teaser\n          _this.teaser_collection.push(promoJSON);\n        }\n      }\n    });\n  },\n  submit_promotionview: function() {\n    var _this = this;\n    var promotionViewData = [];\n    _this.teaser_collection.forEach(function (item) {\n      var promotion = {\n          promoId: item[\"id\"],\n          promoName: item[\"name\"],\n          promoCreative: item[\"creative\"],\n          promoPosition: item[\"position\"]\n      };\n      promotionViewData.push(promotion);\n    });\n\n    if (promotionViewData.length > 0) {\n      this.post_to_backend('/ajax/tracking/promotion-view/', promotionViewData);\n    }\n  },\n  track_event: function(pubSubCall,trackingData) {\n    var _this = this;\n\n    if (trackingData != null) {\n      var postData = {\n        'eventCategory' : trackingData.eventCategory,\n        'eventAction' : trackingData.eventAction,\n        'eventLabel' : trackingData.eventLabel,\n        'eventNonInteractive' : trackingData.eventNonInteractive\n      }\n      var trackingUrl = (config.trackEventUrl == undefined) ? \"/ajax/tracking/tracking-event/\" : config.trackEventUrl;\n      \n      _this.post_to_backend(trackingUrl, postData);\n    }\n  },\n  promo_click: function(promoItem) {\n    var promotionViewData = [];\n\n    if(typeof promoItem !== 'undefined'){\n      for (var key in promoItem) {\n        if (promoItem.hasOwnProperty(key)) {\n          var prop = promoItem[key];\n          var promotion = {\n              promoId: prop[\"id\"],\n              promoName: prop[\"name\"],\n              promoCreative: prop[\"creative\"],\n              promoPosition: prop[\"position\"]\n          };\n          promotionViewData.push(promotion);\n        }\n      }\n    }\n\n    if (promotionViewData.length > 0) {\n      this.post_to_backend('/ajax/tracking/promotion-click/', promotionViewData);\n    }\n  },\n  teaser_collection: []\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Forms from '../utils/forms';\nimport config from '../config/config';\nimport Loading from '../components/loading';\nimport Html5Validation from '../utils/html5validation';\n\n\nexport default function ShopRaffle() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n  this.loading = new Loading();\n}\n\nShopRaffle.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n\n    html5validation.addValidationHandler();\n    html5validation.validateOnSubmit();\n\n    const next = Array.from(document.querySelectorAll('.js-raffle-next'));\n    const back = Array.from(document.querySelectorAll('.js-raffle-back'));\n\n    next.forEach((elem, index) => {\n      elem.addEventListener(\"click\", (e) => {\n      if ( document.querySelector('.raffle-imageupload input') !== null ) {\n        $('.layer.active .js-raffle-freetext-error').hide();\n        if (document.querySelector('.raffle-imageupload input').value === ''){\n          $('.js-raffle-image-error').show();\n          return;\n        }\n      }\n      if ( document.querySelector('.layer.active .raffle-freetext textarea') !== null ) {\n        $('.layer.active .js-raffle-freetext-error').hide();\n        if (document.querySelector('.layer.active .raffle-freetext textarea').value.trim() === ''){\n          $('.layer.active .js-raffle-freetext-error').show();\n          return;\n        }\n      }\n      if (Array.from(document.querySelectorAll('.layer.active  .js-raffle-question input')).length > 0 ) {\n        $('.layer.active .js-raffle-question-error').hide();\n        var checked = false;\n        Array.from(document.querySelectorAll('.layer.active .js-raffle-question input')).forEach(e => {\n          if (e.checked) {\n            checked = true;\n          }\n        });\n        if ( !checked ){\n          $('.layer.active .js-raffle-question-error').show();\n          return;\n        }\n      }\n      $(e.target).closest('.layer').removeClass('active');\n      if (index === (next.length)) {\n        document.querySelector('.layer.js-raffle-address').classList.add('active');\n      } else{\n        $(e.target).closest('.layer').next().addClass('active');\n      }\n      });\n    });\n\n    back.forEach((elem, index) => {\n      elem.addEventListener(\"click\", (e) => {\n        $(e.target).closest('.layer').removeClass('active');\n      if (index === (back.length)) {\n        document.querySelector('.js-raffle-last-elem').classList.add('active');\n      } else{\n        $(e.target).closest('.layer').prev().addClass('active')\n      }\n      });\n    });\n\n    // check raffle type errors before submit\n    $('.shop-raffle form').on('submit',function(e){\n      var everything_correct = true;\n      Array.from(document.querySelectorAll('.layer')).forEach((e) => {\n        // check freetext\n        var maxLength = $('textarea[name=freetextList]').data('maxlength');\n        if(e.querySelector('.raffle-freetext') !== null){\n          if (e.querySelector('.raffle-freetext textarea').value.trim() === '' || e.querySelector('.raffle-freetext textarea').value.length > maxLength){\n            everything_correct = false;\n            $('.js-raffle-freetext-error').show();\n          }\n        }\n        // check image\n        if(e.querySelector('.raffle-imageupload') !== null){\n          if (e.querySelector('.raffle-imageupload input').value === ''){\n            everything_correct = false;\n            $('.js-raffle-image-error').show();\n          }\n        }\n        //check questions\n        if(e.querySelector('.js-raffle-question') !== null){\n          var checked = false;\n          Array.from(e.querySelectorAll('.js-raffle-question input')).forEach(e => {\n            if (e.checked) {\n              checked = true;\n            }\n          });\n          if (!checked) {\n            everything_correct = false;\n            $('.layer.active .js-raffle-question-error').show();\n          }\n        }\n      });\n      if (everything_correct) {\n        Array.from(document.querySelectorAll('.shop-raffle textarea')).forEach(e => {e.value=(e.value.split(',').join('##'))});\n      } else {\n        console.info('error');\n        e.preventDefault();\n      }\n    });\n\n    var customBtn = $('#js-custom-button');\n    var realFileBtn = $('#js-image-upload');\n\n    customBtn.off(\"click\").on(\"click\", function(e) {\n      $(realFileBtn).click();\n    });\n\n    realFileBtn.on(\"change\", function(e) {\n      console.log(realFileBtn);\n      if(realFileBtn[0].value) {\n        $('#custom-text').text(realFileBtn[0].value);\n      }\n    });\n\n    if ( window.FileReader && window.File && window.FileList && window.Blob ){\n      $('#js-image-upload').bind('change', function() {\n        $('.js-raffle-image-error').hide();\n        if (this.files[0].size > 10485760 || !['image/png','image/gif','image/jpeg'].includes(this.files[0].type) || this.files[0].name.length > 60) {\n          $('.js-raffle-image-error').show();\n          document.querySelector('#js-image-upload').value = null;\n        }\n      });\n    }\n\n  },\n\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function ExitIntentLayer() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n\n  ExitIntentLayer.prototype = {\n\n    run: function () {\n      var _this = this;\n      if (document.location.search.indexOf(\"utm_source=newsletter\") > 0) {\n        _this.setLayerBlocked();\n        return;\n      }\n\n      $(\"#page\").on(\"mouseleave\", function (event) {\n        var tolerance = 5;\n        var left_exit = (event.clientX <= 0);\n        var top_exit = (event.clientY <= 0);\n        var right_exit = (window.innerWidth - event.clientX < tolerance);\n        var bottom_exit = (window.innerHeight - event.clientY < tolerance);\n        var is_element = (event.target.className !== undefined);\n        if ( (left_exit || top_exit || right_exit || bottom_exit ) && is_element) {\n          _this.showExitIntentLayer();\n        }\n      });\n\n      $(document).off(\"click\", \"#js-exitintent-subscribe\").on(\"click\", \"#js-exitintent-subscribe\", (function (e) {\n        const email_address = $('#emailnewsletter').val();\n        var salutationcode = $(\"input[name='salutationcode']:checked\").val();\n        var firstname = $('#firstname').val();\n        var lastname = $('#lastname').val();\n\n        var target = \"/ajax/account/newsletter/layer/\";\n\n        var data = {\n          email: email_address,\n          firstname: firstname,\n          lastname: lastname,\n          salutation: salutationcode,\n          subscriptionSource: \"ExitIntentLayer\",\n          subscribe: true,\n          specialCategoryRegistration: false\n        };\n        if (lastname.length < 2) {\n          data.salutationcode = \"5\";\n        }\n        if (_this.validateEmail(email_address)) {\n          var successful = 0;\n\n          $.ajax({\n            type: 'POST',\n            url: target,\n            data: JSON.stringify(data),\n            contentType : 'application/json',\n            success: function () {\n              successful=1;\n              $('#first_dialog').hide();\n              $('#registration_done').show();\n              var trackingData = {\n                'eventCategory' : \"ClickEvent\",\n                'eventAction' : \"Layer\",\n                'eventLabel' : \"Exit-Intent-Layer-Submit\"\n              }\n              Pubsub.publish('tracking.layer.trackingEvent',trackingData);\n            },\n            fail: function (error) {\n              console.error(error);\n            }\n          });\n        } else {\n          $(\"#errormsg_exitintent\").show();\n        }\n      }));\n    },\n    validateEmail: function(email) {\n      const re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n      return re.test(email);\n    },\n    otherLayersHavePriority() {\n      var _this = this;\n      var content_general = $(\"#generic-modal\").html();\n      var content_themodal = $(\"#the-modal\").html();\n      var isConsentCookie =  document.cookie.match(new RegExp('ConsentCookie'));\n      if ( (isConsentCookie == null) || (content_general.length > 10) || (content_themodal.length > 10)) {\n        return true;\n      }\n      return false;\n    },\n    showExitIntentLayer:  function() {\n      var _this = this;\n\n      if (!_this.isLayerBlocked()) {\n        if (_this.otherLayersHavePriority()) {\n          return;\n        }\n\n        $.get(cfg.exitIntentLayerModalUrl, function (data) {\n          if (data != null && (data.markup != null) && (data.markup.length > 16)) {\n            $('#generic-modal').html(data.markup);\n            $('#generic-modal').modal('show');\n            var trackingData = {\n              'eventCategory': \"ViewEvent\",\n              'eventAction': \"Layer\",\n              'eventLabel': \"Exit-Intent-Layer\"\n            }\n            Pubsub.publish('tracking.layer.trackingEvent', trackingData);\n          }\n          _this.setLayerBlocked();\n\n        }).fail(function (jqXhr, error) {\n          if (window.console) console.log(\"exitintent-layer error!\", error);\n        });\n      }\n    },\n    matchesBlockURL: function() {\n      const url = window.location.pathname;\n      const blockPatterns = [\n        /\\/checkout\\//,\n        /\\/login\\//,\n        /\\/basket\\//,\n        /\\/register\\//,\n        /\\/account\\/newsletter\\//,\n        /^\\/$/  // Homepage\n      ];\n      for (const regex of blockPatterns) {\n        if (regex.test(url)) {\n          return true;\n        }\n      }\n      return false;\n    },\n    isLayerBlocked: function() {\n      var blockedAfterSingleOccurence = (sessionStorage.getItem(\"OnlyOneExitIntentLayerPerSession\") != null);\n      var blockedByURL = this.matchesBlockURL();\n\n      return blockedByURL || blockedAfterSingleOccurence;\n    },\n    setLayerBlocked: function() {\n      sessionStorage.setItem(\"OnlyOneExitIntentLayerPerSession\",1);\n      $(\"#page\").off(\"mouseleave\");\n    }\n  }\n  ExitIntentLayer.prototype.run();\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\n\nexport default function PayPalPayments() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('payment.paypal', $.proxy(this.attach, this));\n}\n\nPayPalPayments.prototype = {\n\n  attach: function (msg, element) {\n    var _this = this;\n    if (element === document) {\n      _this.getPaymentDataAndProceed();\n    }\n  },\n\n  getPaymentDataAndProceed: function () {\n    var _this = this;\n\n    var ajaxUrl = config.payPalPaymentDataUrl;\n    $.ajax({\n      url: ajaxUrl,\n      success: function (data) {\n        _this.paypal_data = data.payPalClientData;\n        _this.processPayPal();\n        $(\".paypal-button\").children().remove();\n      },\n      fail: function (error) {\n        _this.payPalErrors(\"err\", \"technical\");\n        console.error(error);\n      }\n    });\n  },\n\n  processPayPal: function() {\n    var _this = this;\n\n    if (_this.paypal_data.paymentType === 'PAYPAL') {\n      _this.payPalCheckoutInit();\n    }\n\n  },\n\n  payPalCheckoutInit: function () {\n    var _this = this;\n    _this.initPaymentAndProceedWithFunction(_this.payPalCheckoutFunction);\n  },\n\n  localPaymentInit: function () {\n    var _this = this;\n    const clientToken = _this.paypal_data.braintreeClientToken;\n    // Create a client.\n    braintree.client.create({authorization: clientToken}, function (clientErr, clientInstance) {\n      if (clientErr) {\n        _this.payPalErrors(\"paynow-err\", \"technical\");\n        console.error('Error creating client:', clientErr);\n        return;\n      }\n\n      braintree.dataCollector.create({\n        client: clientInstance,\n        paypal: true\n      }, function (err, dataCollectorInstance) {\n        if (err) {\n          // Handle error in creation of data collector\n          // Intentionally left blank since fraud protection is optional\n          console.error(\"Error in data collector: \" + err)\n        }\n        _this.deviceData = dataCollectorInstance.deviceData;\n      });\n\n      // Create a local payment component.\n      braintree.localPayment.create({\n        client: clientInstance,\n        merchantAccountId: config.payPalMerchantAccountId\n      }, function (localPaymentErr, paymentInstance) {\n        if (localPaymentErr) {\n          _this.payPalErrors(\"paynow-err\", \"technical\");\n          console.error('Error creating local payment:', localPaymentErr);\n          return;\n        }\n\n        _this.localPaymentInstance = paymentInstance;\n      });\n    });\n  },\n\n  initPaymentAndProceedWithFunction: function (processPaymentTypeFn) {\n    var _this = this;\n    var ajaxUrl = config.payPalInitPaymentUrl;\n    $.ajax({\n      url: ajaxUrl,\n      method: 'GET',\n      success: function () {\n        // process dedicated payment type logic\n        processPaymentTypeFn(_this);\n      },\n      fail: function (error) {\n        _this.payPalErrors(\"err\", \"technical\");\n        console.error(error);\n      }\n    });\n  },\n\n  payPalCheckoutFunction: function(that) {\n    var _this = that;\n    const clientToken = _this.paypal_data.braintreeClientToken;\n    braintree.client.create({authorization: clientToken}, function (clientErr, clientInstance) {\n      if (clientErr) {\n        _this.payPalErrors(\"err\", \"technical\");\n        console.error('Error creating client:', clientErr);\n        return;\n      }\n\n      braintree.dataCollector.create({\n        client: clientInstance,\n        paypal: true\n      }, function (err, dataCollectorInstance) {\n        if (err) {\n          // Handle error in creation of data collector\n          // Intentionally left blank since fraud protection is optional\n          console.error(\"Error in data collector: \" + err)\n        }\n        _this.deviceData = dataCollectorInstance.deviceData;\n\n        braintree.paypalCheckout.create({client: clientInstance}, function (paypalCheckoutErr, paypalCheckoutInstance) {\n          if (paypalCheckoutErr) {\n            _this.payPalErrors(\"err\", \"technical\");\n            console.error('Error creating PayPal Checkout: ', paypalCheckoutErr);\n            return;\n          }\n\n          paypal.Button.render({\n            env: config.payPalEnv,\n            locale: config.payPalLocale,\n            buttonStyle: {\n              color: 'gold',\n              shape: 'rect',\n              size: 'responsive',\n              label: 'pay',\n              locale: 'fr_FR'\n            },\n\n            payment: function () {\n              return paypalCheckoutInstance.createPayment({\n                // http://braintree.github.io/braintree-web/current/PayPalCheckout.html#createPayment\n                flow: 'checkout',\n                amount: _this.paypal_data.totalAmount,\n                currency: 'EUR',\n                enableShippingAddress: true,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                  recipientName: _this.paypal_data.shippingAddress.firstName + \" \" + _this.paypal_data.shippingAddress.lastname,\n                  line1: _this.paypal_data.shippingAddress.street + \" \" + _this.paypal_data.shippingAddress.streetNumber,\n                  city: _this.paypal_data.shippingAddress.city,\n                  countryCode: _this.paypal_data.shippingAddress.country,\n                  postalCode: _this.paypal_data.shippingAddress.zipCode\n                }\n              });\n            },\n\n            onAuthorize: function (data, actions) {\n              // PayPal Checkout backdrop\n              $('.js-backdrop-loader').removeClass('hidden');\n              try {\n                return paypalCheckoutInstance.tokenizePayment(data, function (error, payload) {\n                  if (error !== null) {\n                    console.error(\"PayPal checkout responses with error \" + error);\n                  }\n                  _this.savePaymentAndRedirect(payload.nonce, _this.deviceData);\n                });\n              } catch (e) {\n                console.error(\"Failed to execute on Authorize for PayPal checkout with error \" + e);\n              }\n              $('.js-backdrop-loader').addClass('hidden');\n            },\n\n            onCancel: function (data) {\n              _this.payPalErrors(\"err\", \"technical\");\n            },\n\n            onError: function (err) {\n              _this.payPalErrors(\"err\", \"technical\");\n              console.error('checkout.js error', err);\n            }\n          }, '#paypal-button').then(function () {\n            // The PayPal button will be rendered in an html element with the id\n            // `paypal-button`. This function will be called when the PayPal button\n            // is set up and ready to be used.\n          });\n        })\n      });\n    });\n  },\n\n  savePaymentId: function (paymentId, start) {\n    var _this = this;\n    var postData = {\n      'paymentId': paymentId,\n      'paymentNonce': null,\n      'deviceData': null\n    };\n\n    var ajaxUrl = config.savePayPalDataUrl;\n    $.ajax({\n      type: 'POST',\n      url: ajaxUrl,\n      data: JSON.stringify(postData),\n      contentType : 'application/json',\n      success: function () {\n        start();\n      },\n      fail: function (error) {\n        _this.payPalErrors(\"err\", \"technical\");\n        console.error(error);\n      }\n    });\n  },\n\n  savePaymentAndRedirect: function (paymentNonce, deviceData) {\n    var _this = this;\n    var postData = {\n      'paymentId': null,\n      'paymentNonce': paymentNonce,\n      'deviceData': deviceData\n    };\n\n    var ajaxUrl = config.savePayPalDataUrl;\n    $.ajax({\n      type: 'POST',\n      url: ajaxUrl,\n      data: JSON.stringify(postData),\n      contentType : 'application/json',\n      success: function (data) {\n        if (data.success) {\n          document.getElementById(\"stepModel\").submit();\n        } else {\n          console.error(\"Failed to save payment data and redirect to confirmation page! \" +\n            \"Technical error or order has been placed already (paynow). \" + data.redirectUrl);\n          if (data.redirectUrl) {\n            window.location = data.redirectUrl;\n          }\n          _this.payPalErrors(\"err\", \"technical\");\n        }\n      },\n      fail: function (error) {\n        _this.payPalErrors(\"err\", \"technical\");\n        console.error(error);\n      }\n    });\n  },\n\n  payPalErrors: function (err, type) {\n    $(\".paypal-js-error-\" + type).show();\n    $(\".panel-default.paypal-\" + err).addClass('has-error');\n    $(\".checkout-content\").find(\":button\").attr(\"disabled\",true);\n  },\n\n  paypal_data: {},\n  localPaymentInstance: {},\n  deviceData: {}\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from \"../config/config\";\n\nexport default function Suggestions() {\n    Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nSuggestions.prototype = {\n    attach: function (msg, element) {\n        let $flyout = $('.js-search-flyout, .js-search-flyout-no-results');\n        let $headerflyout = $('.js-search-flyout');\n        let $noresultsflyout = $('.js-search-flyout-no-results');\n\n        $(document).click(function (e) {\n            if (!$flyout.is(e.target) && $flyout.has(e.target).length === 0) {\n                $flyout.html('');\n            }\n        });\n\n        $flyout.on(\"click\", \".js-show-all-search-results\", function (e) {\n            e.preventDefault();\n            if ($(this).closest('.js-search-flyout').length > 0) {\n                $('header #search_id_form').submit();\n            } else {\n                $('.no-search-result #search_id_form').submit();\n            }\n        });\n\n        $flyout.on(\"click\", \".js-close-search-results\", function (e) {\n            e.preventDefault();\n            $flyout.html('');\n        });\n\n        $flyout.on(\"click\", \".js-suggestion-value\", function (e) {\n            e.preventDefault();\n            if (!$(this).data(\"link\") || $(this).data(\"link\") === \"\") {\n                if (!$(this).data(\"categoryencodedpath\") || $(this).data(\"categoryencodedpath\") === \"\") {\n                    $('input[name=\"qc\"]').remove();\n                } else {\n                    $('input[name=\"qc\"]').val($(this).data(\"categoryencodedpath\"));\n                }\n                $('input[name=\"q\"]').val($(this).data(\"searchvalue\"))\n                $('#search_id_form').submit();\n            } else {\n                window.location.href = $(this).data(\"link\");\n            }\n        });\n\n        $('.js-suggestions-input').off(\"keyup\").on('keyup', function (e) {\n            e.preventDefault();\n            if (!e.target.value || e.target.value.length < 2) {\n                $flyout.html('');\n                return;\n            }\n            let _this = $(this);\n            $.post(config.suggestions + e.target.value)\n                .done(function (result) {\n                    if (result.success) {\n                        var newContent = $(result.result);\n                        if (_this.is('.js-suggestions-no-results')) {\n                            $noresultsflyout.html(newContent);\n                            $noresultsflyout.show();\n                        } else {\n                            $headerflyout.html(newContent);\n                            $headerflyout.show();\n                        }\n                    }\n                });\n        });\n\n\n    }\n};","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function ProgressiveWebAppLayer() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n\n  $.proxy(ProgressiveWebAppLayer.prototype.attach, this);\n\n}\n\n\nlet debugMode = false;\nlet pwaAlreadyInstalled = \"pwaAlreadyInstalled\";\nProgressiveWebAppLayer.prototype = {\n\n    attach: function () {\n      var _this = this;\n      _this.debugMessage(\"Running PWA : version 37\");\n\n      if (!_this.browserIsPWACapable()) {\n        return;\n      }\n\n      if (window.location.pathname.includes(\"/getpwa/\")) {\n        _this.resetPWA();\n        return;\n      }\n      // Check Android and iOS Safari\n      const pwaModeActive = (window.matchMedia('(display-mode: standalone)').matches)\n        || ('standalone' in navigator && navigator.standalone);\n      _this.trackBrowserMode(pwaModeActive);\n      if (pwaModeActive) {\n        _this.debugMessage(\"PWA mode already active! Bye\");\n\n        if (!localStorage.getItem(pwaAlreadyInstalled)) {\n          localStorage.setItem(pwaAlreadyInstalled,true);\n          var maxAge = 48*60*60;\n          document.cookie = `pwaWantsBanderole=true; path=/; Max-Age=${maxAge}; Secure; SameSite=Lax`;\n          _this.trackInstalledEvent();\n          _this.debugMessage(\"Set cookie pwaWantsBanderole\");\n        }\n        _this.setNoPwaCookie();\n        return;\n      }\n\n      var pwaOffer = _this.PWAOffer();\n      if (pwaOffer) {\n        $('#pwa-dialog').removeClass('pwa-hidden-mobile');\n        _this.debugMessage(\"PWA Offer\");\n      }\n\n      var ButtonInstallPWA = \"#installpwa\", ButtonNoPWA = \"#no-pwa\";\n      var installButton = document.querySelector(ButtonInstallPWA);\n      if (installButton == null) {\n        _this.debugMessage(\"PWA: install-button not found\");\n        return;\n      }\n\n      var installPrompt = null;\n      window.addEventListener(\"beforeinstallprompt\", (event) => {\n        installPrompt = event;\n        _this.debugMessage(\"INSTALLPROMPT in beforeinstallprompt: \" + installPrompt + \"\");\n        try {\n          installButton.removeAttribute(\"hidden\");\n        } catch (e) {\n          _this.debugMessage(\"PWA \" + ButtonInstallPWA + \" not found\");\n        }\n      });\n\n\n      var pwaAppleShareDialog = document.getElementById(\"pwa-apple-dialog-id\");\n      var pwaCloseButton = document.getElementById(\"pwa-apple-share-dialog-close-id\");\n      if (pwaCloseButton != null) {\n        pwaCloseButton.addEventListener(\"touchstart\", () => {\n          pwaAppleShareDialog.close();\n          _this.performReloadWithPWAParam();\n        });\n        pwaCloseButton.addEventListener(\"click\", () => {\n          if (typeof pwaAppleShareDialog.close === 'function') {\n            pwaAppleShareDialog.close();\n          } else {\n            pwaAppleShareDialog.style.display = \"none\";\n            pwaAppleShareDialog.setAttribute(\"hidden\", \"\");\n          }\n          _this.performReloadWithPWAParam();\n        });\n\n      }\n\n\n      installButton.addEventListener(\"click\", function () {\n        _this.debugMessage(\"PWA \" + ButtonInstallPWA + \" clicked\");\n\n        if (_this.isIOS()) {\n         _this.handleIOS(pwaAppleShareDialog);\n         return;\n        }\n\n        _this.debugMessage(\"PWA \" + ButtonInstallPWA + \" clicked > fortsetzen\");\n        // Flag for reload-control\n        var reloadExecuted = false;\n\n        if (installPrompt == null) {\n          _this.debugMessage(\"PWA \" + ButtonInstallPWA + \" clicked > installPrompt is null\");\n          return;\n        }\n\n        if (typeof installPrompt.prompt === 'function') {\n          // 1. Call the prompt() method\n          installPrompt.prompt();\n\n          // 2. Wait for the user to make a choice using the 'userChoice' Promise\n          installPrompt.userChoice.then(function(choiceResult) {\n            _this.debugMessage('User choice outcome: ' + choiceResult.outcome);\n\n            // 3. Check the outcome inside the Promise handler\n            if (choiceResult.outcome === 'accepted') {\n              _this.debugMessage('User accepted the PWA installation.');\n              _this.switchOffPWA();\n            } else {\n              _this.debugMessage('User dismissed the PWA installation.');\n            }\n\n          }).finally(() => {\n            // Fallback: This logic should ideally be inside the .then() block\n            // if it relies on the choice, or use the appinstalled event.\n            // For a general fallback, it might stay here:\n            setTimeout(function() {\n              if (!reloadExecuted) {\n                _this.debugMessage(\"Fallback Reload nach Timeout\");\n                reloadExecuted = true;\n                _this.performReloadWithPWAParam();\n              }\n            }, 3000);\n          });\n        } else {\n          _this.debugMessage(\"PWA \" + ButtonInstallPWA + \" clicked > installPrompt.prompt() is not a function\");\n        }\n      });\n\n\n      window.addEventListener('appinstalled', function () {\n       _this.switchOffPWA();\n        _this.debugMessage('App installed event => set cookie');\n        _this.performReloadWithPWAParam();\n      });\n\n      $(document).off(\"click\", ButtonNoPWA).on(\"click\", ButtonNoPWA, (function (e) {\n        _this.switchOffPWA();\n      }));\n\n    },\n    resetPWA: function() {\n      var _this = this;\n      _this.debugMessage(\"Reset PWA\");\n      document.cookie = \"noPWA=; Max-Age=0; path=/; Secure; SameSite=Lax\";\n      document.cookie = \"pwaWantsBanderole=; Max-Age=0; path=/; Secure; SameSite=Lax\";\n      localStorage.setItem(pwaAlreadyInstalled,null);\n      _this.performReloadWithPWAParam();\n    },\n    handleIOS: function (pwaAppleShareDialog) {\n      var _this = this;\n      _this.debugMessage(\"IOS found. Replace content with Apple-Content\");\n      _this.switchOffPWA();\n      _this.debugMessage(pwaAppleShareDialog != null ? \"Dialog gefunden\" : \"Dialog nicht gefunden\");\n\n      // NEU: Prüfe den aktuellen Zustand\n      if (pwaAppleShareDialog) {\n        _this.debugMessage(\"1 Dialog Display: \" + window.getComputedStyle(pwaAppleShareDialog).display);\n        _this.debugMessage(\"1 Dialog Visibility: \" + window.getComputedStyle(pwaAppleShareDialog).visibility);\n        _this.debugMessage(\"1 Dialog Hidden Attr: \" + pwaAppleShareDialog.hasAttribute(\"hidden\"));\n      }\n\n      if (typeof pwaAppleShareDialog.showModal === 'function') {\n        try {\n          if (pwaAppleShareDialog.hasAttribute(\"hidden\")) {\n            pwaAppleShareDialog.removeAttribute(\"hidden\");\n          }\n          pwaAppleShareDialog.style.display = 'block';\n          pwaAppleShareDialog.style.visibility = 'visible';\n          pwaAppleShareDialog.style.opacity = '1';\n\n          pwaAppleShareDialog.showModal();\n          _this.debugMessage(\"Dialog mit showModal() geöffnet\");\n\n          if (pwaAppleShareDialog) {\n            _this.debugMessage(\"2 Dialog Display: \" + window.getComputedStyle(pwaAppleShareDialog).display);\n            _this.debugMessage(\"2 Dialog Visibility: \" + window.getComputedStyle(pwaAppleShareDialog).visibility);\n            _this.debugMessage(\"2 Dialog Hidden Attr: \" + pwaAppleShareDialog.hasAttribute(\"hidden\"));\n          }\n\n\n        } catch (e) {\n          _this.debugMessage(\"showModal() fehlgeschlagen: \" + e.message);\n          // Fallback zu Methode 2\n          pwaAppleShareDialog.removeAttribute(\"hidden\");\n          // pwaAppleShareDialog.style.display = 'block';\n        }\n      }\n      else {\n        // Methode 2: Fallback für ältere Safari-Versionen\n        _this.debugMessage(\"showModal() nicht verfügbar, verwende Fallback\");\n        pwaAppleShareDialog.removeAttribute(\"hidden\");\n        pwaAppleShareDialog.style.display = 'block';\n      }\n    },\n    performReloadWithPWAParam: function () {\n      // Realizes touchpoint for segmentation\n      var currentUrl = window.location.href;\n      var parameter = 'pwa=installed';\n      var newUrl;\n\n      if (currentUrl.includes(parameter)) {\n        return;\n      }\n      newUrl = currentUrl + (currentUrl.indexOf('?') > -1 ? '&' : '?') + parameter;\n      window.location.href = newUrl;\n    },\n    setNoPwaCookie: function () {\n      var maxAge = 14*24*60*60*1000;\n      document.cookie = \"noPWA=true; Max-Age=\" + maxAge + \"; Path=/; Secure; SameSite=Lax\";\n    },\n    trackBrowserMode: function (pwaActive) {\n      var _this = this;\n      var browserModeLabel = \"PwaBrowserModeTrackingOnce\";\n      if (sessionStorage.getItem(browserModeLabel) == null) {\n        sessionStorage.setItem(browserModeLabel, true);\n        var trackingData = {\n          'eventCategory': \"PWAEvent\",\n          'eventAction': \"SessionBrowserMode\",\n          'eventLabel': (pwaActive) ? \"PWA-standalone\" : \"noPWA-browser\"\n        }\n        Pubsub.publish('tracking.layer.trackingEvent', trackingData);\n        _this.debugMessage(\"PWA Browser Mode: \" + (pwaActive) ? \"PWA-standalone\" : \"noPWA-browser\" );\n      }\n    },\n    trackInstalledEvent: function (pwaActive) {\n      var trackingData = {\n        'eventCategory': \"PWAEvent\",\n        'eventAction': \"Installer\",\n        'eventLabel': \"installed\"\n      }\n      Pubsub.publish('tracking.layer.trackingEvent', trackingData);\n    },\n    switchOffPWA: function () {\n      var _this = this;\n      const waitingDaysForNewOffer = 14;\n      const cookieWaitingTime = (waitingDaysForNewOffer * 24 * 60 * 60 * 1000);\n      const date = new Date();\n      date.setTime(date.getTime() + cookieWaitingTime);\n      $(\"#pwa-dialog\").hide();\n\n      _this.setNoPwaCookie();\n    },\n    PWAOffer: function () {\n      var _this = this;\n      var cookies = document.cookie.includes(\"noPWA=\");\n      if (cookies) {\n        _this.debugMessage(\"PWAOffer Banner-Offer: no, cookie noPWA=true\");\n        return false;\n      }\n\n      // Check browser's capabilty for PWAs\n      if (!_this.browserIsPWACapable()) {\n        _this.debugMessage(\"PWAOffer Banner-Offer: no\");\n        return false;\n      }\n      _this.debugMessage(\"PWAOffer Banner-Offer: yes\");\n      return true;\n    },\n    browserIsPWACapable: function () {\n      var _this = this;\n\n      const supportsServiceWorkers = 'serviceWorker' in navigator;\n\n      // Check if the browser supports the 'beforeinstallprompt' event\n      const supportsBeforeInstallPrompt = 'onbeforeinstallprompt' in window;\n\n      // Check if the browser supports the 'manifest' link relation\n      const supportsManifest = document.querySelector('link[rel=\"manifest\"]') !== null;\n\n\n      // A browser can launch a PWA if it supports service workers, the beforeinstallprompt event, and has a manifest\n\n      _this.debugMessage(\"Browser supports Service Workers: \" + supportsServiceWorkers);\n      _this.debugMessage(\"Browser supports Service InstallPrompt: \" + supportsBeforeInstallPrompt);\n      _this.debugMessage(\"Browser supports Manifest: \" + supportsManifest);\n      var supportsPWA = (supportsServiceWorkers && (supportsBeforeInstallPrompt || _this.isIOS()) && supportsManifest);\n      if (supportsPWA) {\n        _this.debugMessage(\"Browser supports PWA: yes\");\n      } else {\n        _this.debugMessage(\"Browser supports PWA: no\");\n      }\n      return supportsPWA;\n\n    },\n    isIOS: function () {\n      var _this = this;\n      if (_this.checkForIOS()) {\n        _this.debugMessage(\"Device is running iOS/iPadOS.\");\n        return true;\n      } else {\n        _this.debugMessage(\"Device is NOT runningIOS/iPadOS.\");\n        return false;\n      }\n    },\n    checkForIOS: function () {\n      const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n      const platform = navigator.platform;\n\n      // Check für die meisten mobilen iOS-Geräte\n      if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n        return true;\n      }\n\n      // Check für iPads mit iOS/iPadOS 13 und neuer (die sich als Mac tarnen)\n      if (platform === 'MacIntel' && typeof navigator.maxTouchPoints === 'number' && navigator.maxTouchPoints > 0) {\n        return true;\n      }\n      return false;\n\n    },\n    isFirefoxBrowser: function () {\n      // Derzeit noch unzureichende Umsetzung von PWAs in Firefox\n      return navigator.userAgent.toLowerCase().includes('firefox');\n    },\n    debugMessage: function (msg) {\n      if (debugMode || document.cookie.includes(\"debugPWA=true\")) {\n        console.log(\"Debugging PWA: \" + msg);\n      }\n    }\n\n}\n\n\n","// Everything that should happen on every page\nimport $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport 'bootstrap';\nimport Offcanvas from '../components/offcanvas';\n\nexport default function ProductListFilterSortByFlyout() {\n  this.offcanvas = new Offcanvas('filter-offcanvas');\n  Pubsub.subscribe('offcanvas', $.proxy(this.control, this));\n  Pubsub.subscribe('datafilter', $.proxy(this.dataFilter, this));\n}\n\nProductListFilterSortByFlyout.prototype = {\n  control: function(msg, on) {\n    const _this = this;\n    if (on) {\n      $('.js-navi-close').off('click').on('click', function(e) {\n        e.preventDefault();\n        $(\"body\").removeClass(\"offcanvas\");\n        _this.offcanvas.hide();\n      });\n    }\n\n    if (on && (msg === \"offcanvas.showsortby\")){\n      $('.js-product-list-controls li, .js-product-list-controls li span').off('click').on('click', function(e) {\n        e.preventDefault();\n\n        const markedTarget = $(\"[data-marker='\"+ e.target.dataset.target +\"']\")\n        if(markedTarget.prop(\"checked\") === false) {\n          markedTarget.prop(\"checked\", true);\n          markedTarget.first().trigger(\"change\");\n          $(\"body\").removeClass(\"offcanvas\");\n        }\n      });\n    }\n\n    if (on && (msg === 'offcanvas.showfilter')) {\n\n      // show submenu\n      $('.js-product-list-filters-main-category').off('click').on('click', function(e) {\n        e.stopPropagation();\n        $('.product-filters-burger-offcanvas .menu-back-1').show();\n        if ($(this).siblings().is('ul')) {\n          $(this).next().addClass('shop-navigation-content').show();\n\n          const targetType = $(e.target).data(\"categorietype\");\n          $('.menu-back-1 a span.js-description-' + targetType).removeClass(\"hidden\");\n\n          $('.js-product-filters-burger-mobile-header').addClass('hidden');\n          $(this).closest('[data-js=product-filters-burger-menu-ul]').animate({\n            left: '-=' + ($(this).next().width())\n          }, 'fast');\n          $(\"html, body\").animate({\n            scrollTop: 0\n          }, 200);\n          return false;\n        }\n      });\n\n      // submenu click function\n      $('.product-filter-button-list-submenu li, .product-filter-button-list-submenu li span').off('click').on('click', function(e) {\n        e.preventDefault();\n\n\n        const markedTarget = $(\"[data-marker='\"+ e.target.dataset.target +\"']\")\n        if(e.target.dataset.istype === 'radio' && markedTarget.prop(\"checked\") === false) {\n          $(\".js-single-checked\").each(function () {\n            if ($(this).prop(\"checked\")) {\n              $(this).prop(\"checked\", false);\n            }\n          });\n        }\n        if (markedTarget.prop(\"checked\")) {\n          markedTarget.prop(\"checked\", false);\n        } else {\n          markedTarget.prop(\"checked\", true);\n        }\n        markedTarget.first().trigger(\"change\");\n\n        // $(\"body\").removeClass(\"offcanvas\");\n      });\n\n      // back menu level\n      const goBack = function(e) {\n        e.preventDefault();\n        const $backBtn = $(this);\n        $('.product-filters-burger-offcanvas .menu-back-1').hide();\n        $('.js-description-farbe, .js-description-PRICE, .js-description-SALE').addClass(\"hidden\");\n\n        $(this).parents('[data-js=product-filters-burger-menu-ul]').animate({\n          left: '+=' + ($('.product-filters-burger-offcanvas ul ul:visible').first().width())\n        }, 'fast', function() {\n          if ($backBtn.hasClass('menu-back-2')) $('.product-filters-burger-offcanvas ul ul ul:visible').hide();\n          else {\n            $('.js-product-filters-burger-mobile-header').removeClass('hidden');\n            $('.product-filters-burger-offcanvas ul ul:visible').hide();\n          }\n        });\n        $(\"html, body\").animate({\n          scrollTop: 0\n        }, 200);\n      };\n      $('.menu-back-1, .menu-back-2').off('click').on('click', goBack);\n    }\n  },\n  dataFilter: function(msg, on) {\n    if (on) {\n      $('#product-filter-flyout').attr(\"data-burger\", \"filter\");\n    }\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function GenericFrontendModel() {\n  Pubsub.subscribe('generic.model.handler', $.proxy(this.handler, this));\n}\n\nGenericFrontendModel.prototype = {\n\n  handler: function(msg, genericFrontendModel) {\n    var _this = this;\n\n    var data = genericFrontendModel.data;\n    if (data.hasOwnProperty('contact')) {\n      _this.contact_form(data.contact.contactModel);\n    }\n\n    if (data.hasOwnProperty('cancellation')) {\n      _this.cancellation_form(data.cancellation.cancellationModel);\n    }\n  },\n\n  contact_form: function(model) {\n    $('#contactForm').find('#salutation').val(model.salutation);\n    $('#contactForm').find('#firstName').val(model.firstName);\n    $('#contactForm').find('#lastName').val(model.lastName);\n    $('#contactForm').find('#apartment').val(model.apartment);\n    $('#contactForm').find('#deliveryPoint').val(model.deliveryPoint);\n    $('#contactForm').find('#street').val(model.street);\n    $('#contactForm').find('#addressAddition').val(model.addressAddition);\n    $('#contactForm').find('#zipCode').val(model.zipCode);\n    $('#contactForm').find('#city').val(model.city);\n    $('#contactForm').find('#phone').val(model.phone);\n    $('#contactForm').find('#mobilePhone').val(model.mobilePhone);\n    $('#contactForm').find('#email').val(model.email);\n  },\n\n  cancellation_form: function(model) {\n    $('#cancellationForm').find('#salutation').val(model.salutation);\n    $('#cancellationForm').find('#firstName').val(model.firstName);\n    $('#cancellationForm').find('#lastName').val(model.lastName);\n    $('#cancellationForm').find('#ordernumber').val(model.ordernumber);\n    $('#cancellationForm').find('#email').val(model.email);\n  },\n\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\n\nexport default function InitFilterReset() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  this.loading = new Loading();\n}\n\nfunction resetPriceFilters() {\n  $(\".js-single-checked\").each(function () {\n    if ($(this).prop(\"checked\")) {\n      $(this).prop(\"checked\", false);\n    }\n  });\n}\n\nfunction triggerPriceChange() {\n  $(\".js-single-checked\").first().trigger(\"change\");\n}\n\nInitFilterReset.prototype = {\n  attach: function (msg, element) {\n    $(\".js-product-list-filters-reset [data-resettarget]\").off(\"click\").on(\"click\", function(event) {\n      event.stopPropagation();\n      $(\"#\"+ event.target.dataset.resettarget).click();\n    });\n\n    $(\".js-product-list-filters-reset [data-resetprice]\").off(\"click\").on(\"click\", function() {\n      resetPriceFilters();\n      triggerPriceChange();\n    });\n\n    $(\".js-single-checked\").off(\"click\").on(\"click\", function(event) {\n      event.preventDefault();\n      if ($(this).prop(\"checked\")) {\n        resetPriceFilters();\n        $(\"#\" + event.target.id).prop(\"checked\", true);\n      } else {\n        resetPriceFilters();\n      }\n      triggerPriceChange();\n    });\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\n\nexport default function Phone() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n}\n\nPhone.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n\n    $(\".js-phone\").off('keydown').on('keydown', function(e) {\n      if (e.which === 32) {\n        e.preventDefault();\n        return;\n      }\n    });\n\n    $(\".js-phone\").off('blur').on('blur', function(e) {\n      e.preventDefault();\n      const phone = $(e.target);\n      const phoneVal = phone.val();\n      if (phoneVal.charAt(0) == 0) {\n        const newPhoneVal = phoneVal.substring(1, phoneVal.length);\n        $(phone).val(newPhoneVal);\n        return;\n      }\n    });\n\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from \"../config/config\";\nimport Html5Validation from \"../utils/html5validation\";\n\nexport default function AddressSuggestions() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n}\n\nAddressSuggestions.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    var html5validation = new Html5Validation();\n    html5validation.addValidationHandler();\n\n    $('.js-check-address-suggestions').off('click').on('click', function(e){\n      e.preventDefault()\n      _this.submitRegister(_this, html5validation);\n    });\n\n    $(\".js-submit-address-sugesstion\").off('click').on('click', function(e) {\n      e.preventDefault();\n      var addressSuggestion = $(\"#js-address-suggestions-form\");\n      var choosenSuggest = addressSuggestion.find(\"input[type=radio]:checked\");\n\n      var addressForm = $(\".js-address-form\");\n      addressForm.find(\"#street\").val(choosenSuggest.attr(\"data-street\"));\n      addressForm.find(\"#zip\").val(choosenSuggest.attr(\"data-zipCode\"));\n      addressForm.find(\"#city\").val(choosenSuggest.attr(\"data-city\"));\n\n      var addressSuggestionArea = addressForm.find('input[name=\"addressSuggestionArea\"]').val();\n      if (addressSuggestionArea === 'shipping') {\n        _this.submitFormShipping(addressForm);\n      }\n      else if (addressSuggestionArea === 'invoice') {\n        _this.submitFormInvoice(addressForm);\n      } else {\n        addressForm.submit();\n        $('#the-modal').modal('hide');\n      }\n    });\n\n    if($('.js-single-suggestion input[type=radio]:checked')){\n      $('.js-single-suggestion input[type=radio]:checked').closest('.form-group.radio').addClass(\"active\");\n    }\n\n    $(\".js-single-suggestion\").off('click').on('click', function(e) {\n      $('.js-single-suggestion input[type=radio]:checked').closest('.form-group.radio').toggleClass(\"active\");\n    });\n\n    $(\".js-close-address-suggestion\").off('click').on('click', function(e) {\n      e.preventDefault();\n      $('#the-modal').modal('hide');\n      $('.js-onlyOnce-btn-static').prop('disabled', false);\n      $('.js-onlyOnce-btn-static').removeClass('disabled');\n    });\n\n  },\n\n  submitRegister: function(_this, html5validation) {\n    var addressForm = $('.js-address-form');\n    var isValid = html5validation.validate(addressForm);\n    if (isValid) {\n      $('.js-onlyOnce-btn-static').prop('disabled', true);\n      $('.js-onlyOnce-btn-static').addClass('disabled');\n      var currentStreet = addressForm.find(\".js-current-street\").text().trim();\n      var currentZipCode = addressForm.find(\".js-current-zipCode\").text().trim();\n      var currentCity = addressForm.find(\".js-current-city\").text().trim();\n      var currentCountry = addressForm.find(\".js-current-country\").text().trim();\n      var street = addressForm.find('#street').val().trim();\n      var zipCode = addressForm.find('#zip').val().trim();\n      var city = addressForm.find('#city').val().trim();\n\n      var country;\n      var addressSuggestionArea = addressForm.find('input[name=\"addressSuggestionArea\"]').val();\n      if (addressSuggestionArea === 'catalog') {\n        if (currentCountry !== '') {\n          country = currentCountry;\n        } else {\n          country = addressForm.find('#country').val().trim();\n        }\n      } else {\n        country = addressForm.find('#country option:selected').val().trim();\n      }\n\n      if ((currentStreet === street) && (currentZipCode === zipCode) && (currentCity === city) && (currentCountry === country)) {\n        var addressSuggestionArea = addressForm.find('input[name=\"addressSuggestionArea\"]').val();\n        if (addressSuggestionArea === 'shipping') {\n          _this.submitFormShipping(addressForm);\n        }\n        else if (addressSuggestionArea === 'invoice') {\n          _this.submitFormInvoice(addressForm);\n        } else {\n          addressForm.submit();\n          $('#the-modal').modal('hide');\n        }\n      } else {\n        var params = {\n          street: street,\n          zipCode: zipCode,\n          city: city,\n          country: country\n        }\n        _this.showForm(params, _this);\n      }\n    } else {\n      return;\n    }\n  },\n\n  showForm: function(params, _this) {\n    var query = $.param(params);\n    $.get(config.addressSuggestionsFormUrl, params, function(data) {\n      if (data.success){\n        $('#the-modal').empty().html(data.markup);\n        $('#the-modal').modal('show');\n        Pubsub.publish(\"core.attach\", $(\"#js-address-suggestions-form\"));\n      } else {\n        var addressForm = $(\".js-address-form\");\n        var addressSuggestionArea = addressForm.find('input[name=\"addressSuggestionArea\"]').val();\n        if (addressSuggestionArea === 'shipping') {\n          _this.submitFormShipping(addressForm);\n        }\n        else if (addressSuggestionArea === 'invoice') {\n          _this.submitFormInvoice(addressForm);\n        } else {\n          addressForm.submit();\n        }\n      }\n    }).fail(function(jqXhr, error) {\n      if (window.console) console.log(\"address suggestion overlay error!\", error);\n    });\n  },\n\n  submitFormShipping: function(addressForm) {\n    $.post(config.checkoutShippingNewAddressChangeUrl, addressForm.serialize(), function(data) {\n      if(data.success){\n        window.location.href = window.location.href;\n      } else {\n        $('#the-modal').modal('hide');\n        var checkoutShipping = $(\".checkout-shipping\");\n        checkoutShipping.html(data.markup);\n        Pubsub.publish(\"core.attach\", checkoutShipping);\n      }\n    }).fail(function(jqXhr, error) {\n      if (window.console) console.log(\"submitNewAddressButton error!\", error);\n    });\n  },\n\n  submitFormInvoice: function(addressForm) {\n    $.post(config.checkoutInvoiceAddressChangeUrl, addressForm.serialize(), function (data) {\n      if(data.success){\n        window.location.href = window.location.href;\n      } else {\n        $('#the-modal').modal('hide');\n        var checkoutShipping = $(\".checkout-shipping\");\n        checkoutShipping.html(data.markup);\n        Pubsub.publish(\"core.attach\", checkoutShipping);\n      }\n    }).fail(function (jqXhr, error) {\n      if (window.console) console.log(\"post error checkout invoice address\", error);\n    });\n  },\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\n\nexport default function PdfViewer() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nPdfViewer.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n\n    let pdfLastFocusedElement = null; // Fokus-Rückgabe nach dem Schließen (WCAG 2.4.3)\n\n    $(document).off(\"click\", \".pdf-trigger, #pdf-trigger\").on(\"click\", \".pdf-trigger, #pdf-trigger\", function (e) {\n      const trigger = e.currentTarget;\n      const pdfUrl = trigger.dataset ? trigger.dataset.pdf : $(trigger).attr('data-pdf');\n      const pdfTitle = (trigger.dataset ? trigger.dataset.pdfTitle : $(trigger).attr('data-pdf-title')) || 'PDF';\n\n      if (!pdfUrl) return;\n\n      pdfLastFocusedElement = trigger;\n\n      const pdfDialog = document.getElementById('pdf-dialog');\n      let pdfFrame = document.getElementById('pdf-frame');\n      const pdfDialogTitle = document.getElementById('pdf-dialog-title');\n      const pdfFallbackLink = document.getElementById('pdf-fallback-link');\n      const pdfCloseBtn = document.getElementById('pdf-close-btn') || (pdfDialog ? pdfDialog.querySelector('.pdf-close-btn') : null);\n\n      if (pdfDialogTitle) {\n        pdfDialogTitle.innerText = pdfTitle;\n      }\n      if (pdfFallbackLink) {\n        pdfFallbackLink.href = pdfUrl;\n      }\n      if (pdfFrame) {\n        pdfFrame.title = pdfTitle;\n        if (pdfFrame.tagName.toLowerCase() === 'embed') {\n          const newFrame = pdfFrame.cloneNode(true);\n          newFrame.title = pdfTitle;\n          newFrame.src = pdfUrl;\n          newFrame.setAttribute('src', pdfUrl);\n          pdfFrame.parentNode.replaceChild(newFrame, pdfFrame);\n        } else if (pdfFrame.tagName.toLowerCase() === 'object') {\n          const newFrame = pdfFrame.cloneNode(true);\n          newFrame.title = pdfTitle;\n          newFrame.data = pdfUrl;\n          newFrame.setAttribute('data', pdfUrl);\n          pdfFrame.parentNode.replaceChild(newFrame, pdfFrame);\n        } else {\n          pdfFrame.src = pdfUrl;\n          pdfFrame.setAttribute('src', pdfUrl);\n        }\n      }\n\n      if (pdfDialog && typeof pdfDialog.showModal === 'function') {\n        pdfDialog.showModal();\n      }\n      if (pdfCloseBtn) {\n        pdfCloseBtn.focus();\n      }\n    });\n\n    $(document).off(\"click\", \".pdf-close-btn, #pdf-close-btn\").on(\"click\", \".pdf-close-btn, #pdf-close-btn\", function (e) {\n      const pdfDialog = document.getElementById('pdf-dialog');\n      if (pdfDialog && typeof pdfDialog.close === 'function') {\n        pdfDialog.close();\n      }\n    });\n\n    const pdfDialog = document.getElementById('pdf-dialog');\n    if (pdfDialog && !pdfDialog.dataset.pdfViewerBound) {\n      pdfDialog.dataset.pdfViewerBound = \"true\";\n\n      // Klick auf Backdrop schließt den Dialog\n      pdfDialog.addEventListener('click', (e) => {\n        const rect = pdfDialog.getBoundingClientRect();\n        const clickedInDialog =\n          e.clientX >= rect.left && e.clientX <= rect.right &&\n          e.clientY >= rect.top && e.clientY <= rect.bottom;\n\n        if (!clickedInDialog) {\n          pdfDialog.close();\n        }\n      });\n\n      pdfDialog.addEventListener('close', () => {\n        const pdfFrame = document.getElementById('pdf-frame');\n        if (pdfFrame) {\n          if (pdfFrame.tagName.toLowerCase() === 'object') {\n            pdfFrame.data = '';\n            pdfFrame.setAttribute('data', '');\n          } else {\n            pdfFrame.src = '';\n            pdfFrame.setAttribute('src', '');\n          }\n        }\n        if (pdfLastFocusedElement) {\n          pdfLastFocusedElement.focus();\n        }\n      });\n    }\n  }\n};","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport 'smartresize';\nimport 'skidder';\n\nexport default class SliderTeaser {\n  constructor() {\n    Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n\n    this.init = false;\n  }\n\n  attach(msg, element) {\n    if (!this.init) {\n      this.init = true;\n\n      this.initSlider();\n    }\n  }\n\n  initSlider() {\n    $('.slideshow').each(function() {\n      var $slideshow = $(this);\n\n      $slideshow.skidder({\n        slideClass: '.slide',\n        animationType: 'css',\n        scaleSlides: true,\n        maxWidth: 1300,\n        maxHeight: 500,\n        paging: true,\n        autoPaging: true,\n        pagingWrapper: \".skidder-pager\",\n        pagingElement: \".skidder-pager-dot\",\n        swiping: true,\n        leftaligned: false,\n        cycle: true,\n        jumpback: false,\n        speed: 400,\n        autoplay: false,\n        autoplayResume: false,\n        interval: 4000,\n        transition: \"slide\",\n        afterSliding: function() {},\n        afterInit: function() {}\n      });\n\n    });\n\n    $(window).smartresize(function() {\n      $('.slideshow').skidder('resize');\n    });\n  }\n}\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../loading';\nimport config from '../../config/config';\n\nexport default function Service() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  this.loading = new Loading();\n}\n\nService.prototype = {\n  attach: function(msg, element) {\n    if (element == document) {\n      var _this = this;\n      _this.openServiceHash();\n      $(window).on('hashchange', function() {\n        _this.openServiceHash();\n      });\n    }\n  },\n\n  openServiceHash: function() {\n    if (document.location.hash) {\n      var hash = document.location.hash;\n      if ($(hash).length > 0) {\n        var $nextPanel = $(hash).next('.panel-default');\n        var $firstPanel = $(hash).parent().find('.panel-group .panel-heading:first').not('.panel-in');\n        if ($nextPanel.length > 0) {\n          $nextPanel.find('.panel-heading').not('.panel-in').click();\n        } else if ($firstPanel.length > 0) {\n          $firstPanel.click();\n        }\n      }\n    }\n  }\n};","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport owl from 'owlcarousel';\n\nexport default function BrandsTeaser() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n}\n\nBrandsTeaser.prototype = {\n  attach: function(msg, element) {\n    $(\".owl-carousel\").owlCarousel({\n      items: 6, // 10 items above 1000px browser width\n      itemsDesktop: [1200, 5], // 5 items between 1000px and 901px\n      itemsDesktopSmall: [1025, 4], // betweem 900px and 601px\n      itemsTablet: [768, 3], // 2 items between 600 and 0\n      itemsMobile: [480, 2], // itemsMobile disabled - inherit from\n      // itemsTablet option\n      navigation: false,\n      slideSpeed: 2000,\n      rewindSpeed: 500,\n      autoPlay: 2000,\n      stopOnHover: true,\n      scrollPerPage: true\n    });\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport 'swipe';\nimport config from '../../config/config';\nimport '../../utils/slidercontrols';\nimport '../../utils/sliderknobs';\nimport '../../utils/sliderlazyload';\n\nexport default function RecommendationSwipe() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  Pubsub.subscribe('res', $.proxy(this.responsive, this));\n}\n\nRecommendationSwipe.prototype = {\n  attach: function(msg, element) {},\n\n  responsive: function(msg, on_off) {\n\n    var recoSwipeItem = $(\".recommendation .swipe .product-grid-item\");\n    var desktopNumber = $(\"[data-custom-switch-number-desktop]\").data(\"custom-switch-number-desktop\");\n    var mobileNumber = $(\"[data-custom-switch-number-mobile]\").data(\"custom-switch-number-mobile\");\n    var type = msg === 'res.xs' ? \"mobile\" : \"desktop\";\n\n    if(type === 'mobile') {\n      recoSwipeItem.removeClass(\"xcol-2-mobile xcol-3-mobile xcol-4-mobile xcol-6-mobile xcol-12-mobile\");\n    } else {\n      recoSwipeItem.removeClass(\"xcol-2-desktop xcol-3-desktop xcol-4-desktop xcol-6-desktop xcol-12-desktop\");\n    }\n\n    if(mobileNumber !== undefined && msg === 'res.xs') {\n      if (on_off) { // entered state xs\n        this.initializeRecoSwipe(mobileNumber, type);\n      }\n    } else if(desktopNumber !== undefined && msg !== 'res.xs') {\n      if (on_off) {\n        this.initializeRecoSwipe(desktopNumber, type);\n      }\n    } else {\n      switch (msg) {\n      case 'res.xs':\n        if (on_off) { // entered state xs\n          this.initializeRecoSwipe(config.swipePairXs, type);\n        }\n        break;\n      case 'res.sm':\n        if (on_off) { // entered state sm\n          this.initializeRecoSwipe(config.swipePairSm, type);\n        }\n        break;\n      default:\n        if (on_off) {\n          this.initializeRecoSwipe(config.swipePairDefault, type);\n        }\n      }\n    }\n  },\n  initializeRecoSwipe: function(pair, type) {\n    var recoSwipe = $(\".recommendation .swipe\");\n    this.removeSwipes();\n    recoSwipe.Swipe({\n      pair: pair,\n      continuous: false\n    }).controls().lazy();\n    this.addSizeClasses(pair, type);\n  },\n  addSizeClasses: function(colNumber, type){\n    const colCase = colNumber.toString();\n    const recoSwipeItem = $(\".recommendation .swipe .product-grid-item\");\n    switch (colCase) {\n      case \"1\":\n        recoSwipeItem.addClass(\"xcol-12-\" + type);\n        break;\n      case \"2\":\n        recoSwipeItem.addClass(\"xcol-6-\" + type);\n        break;\n      case \"3\":\n        recoSwipeItem.addClass(\"xcol-4-\" + type);\n        break;\n      case \"4\":\n        recoSwipeItem.addClass(\"xcol-3-\" + type);\n        break;\n      case \"6\":\n        recoSwipeItem.addClass(\"xcol-2-\" + type);\n        break;\n      default:\n        recoSwipeItem.addClass(\"xcol-3-\" + type);\n    }\n    Pubsub.publish(\"core.attach\", $(\".recommendation\"));\n  },\n  removeSwipes: function() {\n    $(\".recommendation .swipe\").each(function() {\n      if ($(this).data(\"Swipe\")) $(this).data(\"Swipe\").kill();\n    });\n  }\n};\n","/*\n * Swipe 2.0\n *\n * Brad Birdsall\n * Copyright 2013, MIT License\n *\n * @krisdigital\n * Added the possibility to pair slides to groups\n * Added options to the public API\n * Added Windows 8 Touch Event Support\n *\n*/\n\nfunction Swipe(container, options) {\n\n  \"use strict\";\n\n  // utilities\n  var noop = function() {}; // simple no operation function\n  var offloadFn = function(fn) { setTimeout(fn || noop, 0) }; // offload a functions execution\n  var isIE = window.navigator.msPointerEnabled;\n\n  // check browser capabilities\n  var browser = {\n    addEventListener: !!window.addEventListener,\n    touch: ('ontouchstart' in window) || isIE || window.DocumentTouch && document instanceof DocumentTouch,\n    transitions: (function(temp) {\n      var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];\n      for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true;\n      return false;\n    })(document.createElement('swipe'))\n  };\n\n\n  // quit if no root element\n  if (!container) return;\n  var element = container.children[0];\n  var saved_markup = \"\";\n  var modified = false;\n  var twoIs = false;\n  var slides, slidePos, width, length;\n  options = options || {};\n  var index = parseInt(options.startSlide, 10) || 0;\n  var speed = options.speed || 300;\n  options.continuous = options.continuous !== undefined ? options.continuous : true;\n\n  var isActive = false;\n\n  function setup() {\n    //Wrap pairs of elements for each slide\n    if(options.pair && !modified) {\n      var elements = element.children;\n      saved_markup = (saved_markup == \"\") ? element.innerHTML : saved_markup;\n\n      var ell = elements.length;\n      var new_slides = new Array();\n\n      for (var i = 0; i < ell; i++) {\n\n        var j = -1;\n        //get starting point for extra div insert\n        if(i + 1 == ell && ell % options.pair != 0) { // last elements wrapper\n          j = ell - ell % options.pair;\n        }\n        else if(i > 0 && (i + 1) % options.pair == 0) {\n          j = i + 1 - options.pair;\n        }\n\n        if(j > -1) {\n          var new_el = document.createElement('div');\n          new_el.className = \"slide\";\n          new_el.classList.add(\"xrow\");\n          new_el.classList.add(\"offset\");\n          element.appendChild(new_el);\n\n          while (j <= i) {\n           new_el.appendChild(elements[j].cloneNode(true));\n           j++;\n          }\n          new_slides.push(new_el.cloneNode(true)); //IE 8 needs cloneNode for some reason..\n        }\n      }\n\n      element.innerHTML = \"\";\n      for (var k = 0; k < new_slides.length; k++) {\n        element.appendChild(new_slides[k].cloneNode(true));\n      }\n\n      modified = true;\n    }\n\n\n\n    // cache slides\n    slides = element.children;\n    length = slides.length;\n\n\n    // set continuous to false if only one slide\n    if (slides.length < 2) options.continuous = false;\n\n    //special case if two slides\n    if (browser.transitions && options.continuous && slides.length < 3) {\n      element.appendChild(slides[0].cloneNode(true));\n      element.appendChild(element.children[1].cloneNode(true));\n      slides = element.children;\n      twoIs = true;\n    }\n\n    // create an array to store current positions of each slide\n    slidePos = new Array(slides.length);\n\n    // determine width of each slide\n    width = container.getBoundingClientRect().width || container.offsetWidth;\n\n    width = Math.ceil(width); //@bm 1px fix\n\n    element.style.width = (slides.length * width) + 'px';\n\n    // stack elements\n    var pos = slides.length;\n    while(pos--) {\n\n      var slide = slides[pos];\n\n      slide.style.width = width + 'px';\n      slide.setAttribute('data-index', pos);\n\n      if (browser.transitions) {\n        slide.style.left = (pos * -width) + 'px';\n        move(pos, index > pos ? -width : (index < pos ? width : 0), 0);\n      }\n\n    }\n\n    // reposition elements before and after index\n    if (options.continuous && browser.transitions) {\n      move(circle(index-1), -width, 0);\n      move(circle(index+1), width, 0);\n    }\n\n    if (!browser.transitions) element.style.left = (index * -width) + 'px';\n\n\n    container.style.visibility = 'visible';\n\n    if(options.callback) options.callback.call(null, getIndex());\n  }\n\n  function prev() {\n\n    if (options.continuous) slide(index-1);\n    else if (index) slide(index-1);\n\n  }\n\n  function next() {\n\n    if (options.continuous) slide(index+1);\n    else if (index < slides.length - 1) slide(index+1);\n\n  }\n\n  function circle(index) {\n\n    // a simple positive modulo using slides.length\n    return (slides.length + (index % slides.length)) % slides.length;\n\n  }\n\n  function slide(to, slideSpeed) {\n\n    // do nothing if already on requested slide\n    if (index == to) return;\n\n    if (browser.transitions) {\n\n      var direction = Math.abs(index-to) / (index-to); // 1: backward, -1: forward\n\n      // get the actual position of the slide\n      if (options.continuous) {\n        var natural_direction = direction;\n        direction = -slidePos[circle(to)] / width;\n\n        // if going forward but to < index, use to = slides.length + to\n        // if going backward but to > index, use to = -slides.length + to\n        if (direction !== natural_direction) to =  -direction * slides.length + to;\n\n      }\n\n      var diff = Math.abs(index-to) - 1;\n\n      // move all the slides between index and to in the right direction\n      while (diff--) move( circle((to > index ? to : index) - diff - 1), width * direction, 0);\n\n      to = circle(to);\n\n      move(index, width * direction, slideSpeed || speed);\n      move(to, 0, slideSpeed || speed);\n\n      if (options.continuous) move(circle(to - direction), -(width * direction), 0); // we need to get the next in place\n\n    } else {\n\n      to = circle(to);\n      animate(index * -width, to * -width, slideSpeed || speed);\n      //no fallback for a circular continuous if the browser does not accept transitions\n    }\n\n    index = to;\n\n\n    offloadFn(options.callback && options.callback(getIndex(), slides[index]));\n  }\n\n\n  function getIndex() {\n    if(twoIs) {\n     if(index > 1) return index - 2;\n    }\n    return index;\n  }\n\n  function move(index, dist, speed) {\n    translate(index, dist, speed);\n    slidePos[index] = dist;\n  }\n\n  function translate(index, dist, speed) {\n\n    var slide = slides[index];\n    var style = slide && slide.style;\n\n    if (!style) return;\n\n    style.webkitTransitionDuration =\n    style.MozTransitionDuration =\n    style.msTransitionDuration =\n    style.OTransitionDuration =\n    style.transitionDuration = speed + 'ms';\n\n    style.webkitTransform =\n    style.msTransform =\n    style.MozTransform =\n    style.OTransform = 'translateX(' + dist + 'px)';\n\n    if(isActive) style.webkitTransform += ' translateZ(0)';\n\n  }\n\n  function animate(from, to, speed) {\n\n    // if not an animation, just reposition\n    if (!speed) {\n\n      element.style.left = to + 'px';\n      return;\n\n    }\n\n    var start = +new Date;\n\n    var timer = setInterval(function() {\n\n      var timeElap = +new Date - start;\n\n      if (timeElap > speed) {\n\n        element.style.left = to + 'px';\n\n        if (delay) begin();\n\n        options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n        clearInterval(timer);\n        return;\n\n      }\n\n      element.style.left = (( (to - from) * (Math.floor((timeElap / speed) * 100) / 100) ) + from) + 'px';\n\n    }, 4);\n\n  }\n\n  // setup auto slideshow\n  var delay = options.auto || 0;\n  var interval;\n\n  function begin() {\n\n    interval = setTimeout(next, delay);\n\n  }\n\n  function stop() {\n\n    delay = 0;\n    try {\n      clearTimeout(interval);\n      if(window.jQuery) {\n        window.jQuery(element).addClass('stoped'); //@bm tracking\n      }\n    } catch(e) {\n      console.error(e);\n    }\n  }\n\n  // setup initial vars\n  var start = {};\n  var delta = {};\n  var isScrolling;\n\n  var preventDefault = function(event) {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  // setup event capturing\n  var events = {\n\n    handleEvent: function(event) {\n      switch (event.type) {\n        case 'MSPointerDown':\n        case 'touchstart': this.start(event); break;\n        case 'MSPointerMove':\n        case 'touchmove': this.move(event); break;\n        case 'MSPointerUp':\n        case 'touchend': offloadFn(this.end(event)); break;\n        case 'webkitTransitionEnd':\n        case 'msTransitionEnd':\n        case 'oTransitionEnd':\n        case 'otransitionend':\n        case 'transitionend': offloadFn(this.transitionEnd(event)); break;\n        case 'resize': offloadFn(setup.call()); break;\n      }\n\n      if (options.stopPropagation) event.stopPropagation();\n\n    },\n    start: function(event) {\n\n      var touches;\n\n      if(!isIE) touches = event.touches[0];\n      else touches = event;\n\n      // measure start values\n      start = {\n\n        // get initial touch coords\n        x: touches.pageX,\n        y: touches.pageY,\n\n        // store time to determine touch duration\n        time: +new Date\n\n      };\n\n      // used for testing first move event\n      isScrolling = undefined;\n\n      // reset delta and end measurements\n      delta = {};\n\n      if(!isIE) {\n        // attach touchmove and touchend listeners\n        element.addEventListener('touchmove', this, false);\n        element.addEventListener('touchend', this, false);\n      }\n      else {\n        element.removeEventListener(\"click\", preventDefault);\n\n        element.addEventListener('MSPointerMove', this, false);\n        element.addEventListener('MSPointerUp', this, false);\n      }\n      isActive = true;\n    },\n    move: function(event) {\n      // ensure swiping with one touch and not pinching\n      if (event.touches && event.touches.length > 1 || event.scale && event.scale !== 1) return\n\n      if (options.disableScroll) event.preventDefault();\n\n      var touches = event.touches ? event.touches[0] : event;\n\n      // measure change in x and y\n      delta = {\n        x: touches.pageX - start.x,\n        y: touches.pageY - start.y\n      }\n\n      // determine if scrolling test has run - one time test\n      if ( typeof isScrolling == 'undefined') {\n        isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) );\n      }\n\n      // if user is not trying to scroll vertically\n      if (!isScrolling) {\n        // prevent native scrolling\n        event.preventDefault();\n\n        if(isIE && delta.x != 0) {\n          element.removeEventListener(\"click\", preventDefault);\n          element.addEventListener(\"click\", preventDefault);\n        }\n\n        // stop slideshow\n        stop();\n\n        // increase resistance if first or last slide\n        if (options.continuous) { // we don't add resistance at the end\n\n          translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0);\n          translate(index, delta.x + slidePos[index], 0);\n          translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0);\n\n        } else {\n\n          delta.x =\n            delta.x /\n              ( (!index && delta.x > 0               // if first slide and sliding left\n                || index == slides.length - 1        // or if last slide and sliding right\n                && delta.x < 0                       // and if sliding at all\n              ) ?\n              ( Math.abs(delta.x) / width + 1 )      // determine resistance level\n              : 1 );                                 // no resistance if false\n\n          // translate 1:1\n          translate(index-1, delta.x + slidePos[index-1], 0);\n          translate(index, delta.x + slidePos[index], 0);\n          translate(index+1, delta.x + slidePos[index+1], 0);\n        }\n\n      }\n\n    },\n    end: function(event) {\n\n      // measure duration\n      var duration = +new Date - start.time;\n\n      // determine if slide attempt triggers next/prev slide\n      var isValidSlide =\n            Number(duration) < 250               // if slide duration is less than 250ms\n            && Math.abs(delta.x) > 20            // and if slide amt is greater than 20px\n            || Math.abs(delta.x) > width/2;      // or if slide amt is greater than half the width\n\n      // determine if slide attempt is past start and end\n      var isPastBounds =\n            !index && delta.x > 0                            // if first slide and slide amt is greater than 0\n            || index == slides.length - 1 && delta.x < 0;    // or if last slide and slide amt is less than 0\n\n      if (options.continuous) isPastBounds = false;\n\n      // determine direction of swipe (true:right, false:left)\n      var direction = delta.x < 0;\n\n      // if not scrolling vertically\n      if (!isScrolling) {\n\n        if (isValidSlide && !isPastBounds) {\n\n          if (direction) {\n\n            if (options.continuous) { // we need to get the next in this direction in place\n\n              move(circle(index-1), -width, 0);\n              move(circle(index+2), width, 0);\n\n            } else {\n              move(index-1, -width, 0);\n            }\n\n            move(index, slidePos[index]-width, speed);\n            move(circle(index+1), slidePos[circle(index+1)]-width, speed);\n            index = circle(index+1);\n\n          } else {\n            if (options.continuous) { // we need to get the next in this direction in place\n\n              move(circle(index+1), width, 0);\n              move(circle(index-2), -width, 0);\n\n            } else {\n              move(index+1, width, 0);\n            }\n\n            move(index, slidePos[index]+width, speed);\n            move(circle(index-1), slidePos[circle(index-1)]+width, speed);\n            index = circle(index-1);\n\n          }\n\n          options.callback && options.callback(getIndex(), slides[index]);\n\n        } else {\n\n          if (options.continuous) {\n\n            move(circle(index-1), -width, speed);\n            move(index, 0, speed);\n            move(circle(index+1), width, speed);\n\n          } else {\n\n            move(index-1, -width, speed);\n            move(index, 0, speed);\n            move(index+1, width, speed);\n          }\n\n        }\n        isActive = false;\n      }\n\n      // kill touchmove and touchend event listeners until touchstart called again\n      element.removeEventListener('touchmove', events, false);\n      element.removeEventListener('touchend', events, false);\n      // Also remove IE Events\n      element.removeEventListener('MSPointerMove', events, false)\n      element.removeEventListener('MSPointerUp', events, false)\n\n    },\n    transitionEnd: function(event) {\n      isActive = false;\n\n      if (parseInt(event.target.getAttribute('data-index'), 10) == index) {\n\n        if (delay) begin();\n\n        options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n      }\n\n    }\n\n  }\n\n  // trigger setup\n  setup();\n\n  // start auto slideshow if applicable\n  if (delay) begin();\n\n\n  // add event listeners\n  if (browser.addEventListener) {\n\n    // set touchstart event on element\n    if (browser.touch) {\n      if(isIE) element.addEventListener('MSPointerDown', events, false);\n      else element.addEventListener('touchstart', events, false);\n    }\n\n    if (browser.transitions) {\n      element.addEventListener('webkitTransitionEnd', events, false);\n      element.addEventListener('msTransitionEnd', events, false);\n      element.addEventListener('oTransitionEnd', events, false);\n      element.addEventListener('otransitionend', events, false);\n      element.addEventListener('transitionend', events, false);\n    }\n\n    // set resize event on window\n    window.addEventListener('resize', events, false);\n\n  } else {\n\n    window.onresize = function () { setup() }; // to play nice with old IE\n\n  }\n\n  // expose the Swipe API\n  return {\n    setup: function() {\n\n      setup();\n\n    },\n    slide: function(to, speed) {\n\n      // cancel slideshow\n      stop();\n\n      slide(to, speed);\n\n    },\n    prev: function() {\n\n      // cancel slideshow\n      stop();\n\n      prev();\n\n    },\n    next: function() {\n\n      // cancel slideshow\n      stop();\n\n      next();\n\n    },\n    getPos: function() {\n\n      // return current index position\n      return getIndex();\n\n    },\n    getNumSlides: function() {\n\n      // return total number of slides\n      return length;\n    },\n    options: options, //make options public to plugins,\n    kill: function() {\n\n      // cancel slideshow\n      stop();\n\n      // reset element\n      element.style.width = 'auto';\n      element.style.left = 0;\n\n\n      // reset slides\n      var pos = slides.length;\n      var length = slides.length;\n      while(pos--) {\n\n        var slide = slides[pos];\n        slide.style.width = '';\n        slide.style.left = 0;\n\n        if(twoIs && length == 4 && pos > length - 3) {\n          slide.parentNode.removeChild(slide);\n        }\n\n        if (browser.transitions) translate(pos, 0, 0);\n\n      }\n\n\n      // removed event listeners\n      if (browser.addEventListener) {\n        // remove current event listeners\n        element.removeEventListener('touchstart', events, false);\n        element.removeEventListener('MSPointerDown', events, false);\n\n        element.removeEventListener('webkitTransitionEnd', events, false);\n        element.removeEventListener('msTransitionEnd', events, false);\n        element.removeEventListener('oTransitionEnd', events, false);\n        element.removeEventListener('otransitionend', events, false);\n        element.removeEventListener('transitionend', events, false);\n        window.removeEventListener('resize', events, false);\n\n      }\n      else {\n\n        window.onresize = null;\n\n      }\n\n      if(modified) {\n        element.innerHTML = saved_markup;\n        saved_markup = \"\";\n        modified = false;\n      }\n\n       if ( window.jQuery ) {\n         window.jQuery(element).trigger(\"swipe.kill\");\n       }\n    }\n  }\n\n}\n\nif ( window.jQuery) {\n  (function($) {\n    $.fn.Swipe = function(params) {\n      return this.each(function() {\n        $(this).data('Swipe', new Swipe($(this)[0], params));\n      });\n    }\n  })( window.jQuery || window.Zepto )\n}\n","!function(a){\"use strict\";function b(a){return\"[data-value\"+(a?\"=\"+a:\"\")+\"]\"}function c(a,b,c){var d=c.activeIcon,e=c.inactiveIcon;a.removeClass(b?e:d).addClass(b?d:e)}function d(b,c){var d=a.extend({},i,b.data(),c);return d.inline=\"\"===d.inline||d.inline,d.readonly=\"\"===d.readonly||d.readonly,d.clearable===!1?d.clearableLabel=\"\":d.clearableLabel=d.clearable,d.clearable=\"\"===d.clearable||d.clearable,d}function e(b,c){if(c.inline)var d=a('<span class=\"rating-input\"></span>');else var d=a('<div class=\"rating-input\"></div>');c.copyClasses&&(d.addClass(b.attr(\"class\")),d.removeClass(\"rating\"));for(var e=c.min;e<=c.max;e++)d.append('<i class=\"'+c.iconLib+'\" data-value=\"'+e+'\"></i>');return c.clearable&&!c.readonly&&d.append(\"&nbsp;\").append('<a class=\"'+f+'\"><i class=\"'+c.iconLib+\" \"+c.clearableIcon+'\"/>'+c.clearableLabel+\"</a>\"),d}var f=\"rating-clear\",g=\".\"+f,h=\"hidden\",i={min:1,max:5,\"empty-value\":0,iconLib:\"glyphicon\",activeIcon:\"glyphicon-star\",inactiveIcon:\"glyphicon-star-empty\",clearable:!1,clearableIcon:\"glyphicon-remove\",clearableRemain:!1,inline:!1,readonly:!1,copyClasses:!0},j=function(a,b){var c=this.$input=a;this.options=d(c,b);var f=this.$el=e(c,this.options);c.addClass(h).before(f),c.attr(\"type\",\"hidden\"),this.highlight(c.val())};j.VERSION=\"0.4.0\",j.DEFAULTS=i,j.prototype={clear:function(){this.setValue(this.options[\"empty-value\"])},setValue:function(a){this.highlight(a),this.updateInput(a)},highlight:function(a,d){var e=this.options,f=this.$el;if(a>=this.options.min&&a<=this.options.max){var i=f.find(b(a));c(i.prevAll(\"i\").addBack(),!0,e),c(i.nextAll(\"i\"),!1,e)}else c(f.find(b()),!1,e);d||(this.options.clearableRemain?f.find(g).removeClass(h):a&&a!=this.options[\"empty-value\"]?f.find(g).removeClass(h):f.find(g).addClass(h))},updateInput:function(a){var b=this.$input;b.val()!=a&&b.val(a).change()}};var k=a.fn.rating=function(c){return this.filter(\"input[type=number]\").each(function(){var d=a(this),e=\"object\"==typeof c&&c||{},f=new j(d,e);f.options.readonly||f.$el.on(\"mouseenter\",b(),function(){f.highlight(a(this).data(\"value\"),!0)}).on(\"mouseleave\",b(),function(){f.highlight(d.val(),!0)}).on(\"click\",b(),function(){f.setValue(a(this).data(\"value\"))}).on(\"click\",g,function(){f.clear()})})};k.Constructor=j,a(function(){a(\"input.rating[type=number]\").each(function(){a(this).rating()})})}(jQuery);\n","/*\n\tMasked Input plugin for jQuery\n\tCopyright (c) 2007-2013 Josh Bush (digitalbush.com)\n\tLicensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)\n\tVersion: 1.3.1\n*/\n(function($) {\n\tfunction getPasteEvent() {\n    var el = document.createElement('input'),\n        name = 'onpaste';\n    el.setAttribute(name, '');\n    return (typeof el[name] === 'function')?'paste':'input';             \n}\n\nvar pasteEventName = getPasteEvent() + \".mask\",\n\tua = navigator.userAgent,\n\tiPhone = /iphone/i.test(ua),\n\tandroid=/android/i.test(ua),\n\tcaretTimeoutId;\n\n$.mask = {\n\t//Predefined character definitions\n\tdefinitions: {\n\t\t'9': \"[0-9]\",\n\t\t'a': \"[A-Za-z]\",\n\t\t'*': \"[A-Za-z0-9]\"\n\t},\n\tdataName: \"rawMaskFn\",\n\tplaceholder: '_',\n};\n\n$.extend($.fn, {\n\t//Helper Function for Caret positioning\n\tcaret: function(begin, end) {\n\t\tvar range;\n\n\t\tif (this.length === 0 || this.is(\":hidden\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof begin == 'number') {\n\t\t\tend = (typeof end === 'number') ? end : begin;\n\t\t\treturn this.each(function() {\n\t\t\t\tif (this.setSelectionRange) {\n\t\t\t\t\tthis.setSelectionRange(begin, end);\n\t\t\t\t} else if (this.createTextRange) {\n\t\t\t\t\trange = this.createTextRange();\n\t\t\t\t\trange.collapse(true);\n\t\t\t\t\trange.moveEnd('character', end);\n\t\t\t\t\trange.moveStart('character', begin);\n\t\t\t\t\trange.select();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this[0].setSelectionRange) {\n\t\t\t\tbegin = this[0].selectionStart;\n\t\t\t\tend = this[0].selectionEnd;\n\t\t\t} else if (document.selection && document.selection.createRange) {\n\t\t\t\trange = document.selection.createRange();\n\t\t\t\tbegin = 0 - range.duplicate().moveStart('character', -100000);\n\t\t\t\tend = begin + range.text.length;\n\t\t\t}\n\t\t\treturn { begin: begin, end: end };\n\t\t}\n\t},\n\tunmask: function() {\n\t\treturn this.trigger(\"unmask\");\n\t},\n\tmask: function(mask, settings) {\n\t\tvar input,\n\t\t\tdefs,\n\t\t\ttests,\n\t\t\tpartialPosition,\n\t\t\tfirstNonMaskPos,\n\t\t\tlen;\n\n\t\tif (!mask && this.length > 0) {\n\t\t\tinput = $(this[0]);\n\t\t\treturn input.data($.mask.dataName)();\n\t\t}\n\t\tsettings = $.extend({\n\t\t\tplaceholder: $.mask.placeholder, // Load default placeholder\n\t\t\tcompleted: null\n\t\t}, settings);\n\n\n\t\tdefs = $.mask.definitions;\n\t\ttests = [];\n\t\tpartialPosition = len = mask.length;\n\t\tfirstNonMaskPos = null;\n\n\t\t$.each(mask.split(\"\"), function(i, c) {\n\t\t\tif (c == '?') {\n\t\t\t\tlen--;\n\t\t\t\tpartialPosition = i;\n\t\t\t} else if (defs[c]) {\n\t\t\t\ttests.push(new RegExp(defs[c]));\n\t\t\t\tif (firstNonMaskPos === null) {\n\t\t\t\t\tfirstNonMaskPos = tests.length - 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttests.push(null);\n\t\t\t}\n\t\t});\n\n\t\treturn this.trigger(\"unmask\").each(function() {\n\t\t\tvar input = $(this),\n\t\t\t\tbuffer = $.map(\n\t\t\t\tmask.split(\"\"),\n\t\t\t\tfunction(c, i) {\n\t\t\t\t\tif (c != '?') {\n\t\t\t\t\t\treturn defs[c] ? settings.placeholder : c;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfocusText = input.val();\n\n\t\t\tfunction seekNext(pos) {\n\t\t\t\twhile (++pos < len && !tests[pos]);\n\t\t\t\treturn pos;\n\t\t\t}\n\n\t\t\tfunction seekPrev(pos) {\n\t\t\t\twhile (--pos >= 0 && !tests[pos]);\n\t\t\t\treturn pos;\n\t\t\t}\n\n\t\t\tfunction shiftL(begin,end) {\n\t\t\t\tvar i,\n\t\t\t\t\tj;\n\n\t\t\t\tif (begin<0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (i = begin, j = seekNext(end); i < len; i++) {\n\t\t\t\t\tif (tests[i]) {\n\t\t\t\t\t\tif (j < len && tests[i].test(buffer[j])) {\n\t\t\t\t\t\t\tbuffer[i] = buffer[j];\n\t\t\t\t\t\t\tbuffer[j] = settings.placeholder;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tj = seekNext(j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twriteBuffer();\n\t\t\t\tinput.caret(Math.max(firstNonMaskPos, begin));\n\t\t\t}\n\n\t\t\tfunction shiftR(pos) {\n\t\t\t\tvar i,\n\t\t\t\t\tc,\n\t\t\t\t\tj,\n\t\t\t\t\tt;\n\n\t\t\t\tfor (i = pos, c = settings.placeholder; i < len; i++) {\n\t\t\t\t\tif (tests[i]) {\n\t\t\t\t\t\tj = seekNext(i);\n\t\t\t\t\t\tt = buffer[i];\n\t\t\t\t\t\tbuffer[i] = c;\n\t\t\t\t\t\tif (j < len && tests[j].test(t)) {\n\t\t\t\t\t\t\tc = t;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction keydownEvent(e) {\n\t\t\t\tvar k = e.which,\n\t\t\t\t\tpos,\n\t\t\t\t\tbegin,\n\t\t\t\t\tend;\n\n\t\t\t\t//backspace, delete, and escape get special treatment\n\t\t\t\tif (k === 8 || k === 46 || (iPhone && k === 127)) {\n\t\t\t\t\tpos = input.caret();\n\t\t\t\t\tbegin = pos.begin;\n\t\t\t\t\tend = pos.end;\n\n\t\t\t\t\tif (end - begin === 0) {\n\t\t\t\t\t\tbegin=k!==46?seekPrev(begin):(end=seekNext(begin-1));\n\t\t\t\t\t\tend=k===46?seekNext(end):end;\n\t\t\t\t\t}\n\t\t\t\t\tclearBuffer(begin, end);\n\t\t\t\t\tshiftL(begin, end - 1);\n\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else if (k == 27) {//escape\n\t\t\t\t\tinput.val(focusText);\n\t\t\t\t\tinput.caret(0, checkVal());\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction keypressEvent(e) {\n\t\t\t\tvar k = e.which,\n\t\t\t\t\tpos = input.caret(),\n\t\t\t\t\tp,\n\t\t\t\t\tc,\n\t\t\t\t\tnext;\n\n\t\t\t\tif (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore\n\t\t\t\t\treturn;\n\t\t\t\t} else if (k) {\n\t\t\t\t\tif (pos.end - pos.begin !== 0){\n\t\t\t\t\t\tclearBuffer(pos.begin, pos.end);\n\t\t\t\t\t\tshiftL(pos.begin, pos.end-1);\n\t\t\t\t\t}\n\n\t\t\t\t\tp = seekNext(pos.begin - 1);\n\t\t\t\t\tif (p < len) {\n\t\t\t\t\t\tc = String.fromCharCode(k);\n\t\t\t\t\t\tif (tests[p].test(c)) {\n\t\t\t\t\t\t\tshiftR(p);\n\n\t\t\t\t\t\t\tbuffer[p] = c;\n\t\t\t\t\t\t\twriteBuffer();\n\t\t\t\t\t\t\tnext = seekNext(p);\n\n\t\t\t\t\t\t\tif(android){\n\t\t\t\t\t\t\t\tsetTimeout($.proxy($.fn.caret,input,next),0);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tinput.caret(next);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (settings.completed && next >= len) {\n\t\t\t\t\t\t\t\tsettings.completed.call(input);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction clearBuffer(start, end) {\n\t\t\t\tvar i;\n\t\t\t\tfor (i = start; i < end && i < len; i++) {\n\t\t\t\t\tif (tests[i]) {\n\t\t\t\t\t\tbuffer[i] = settings.placeholder;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction writeBuffer() { input.val(buffer.join('')); }\n\n\t\t\tfunction checkVal(allow) {\n\t\t\t\t//try to place characters where they belong\n\t\t\t\tvar test = input.val(),\n\t\t\t\t\tlastMatch = -1,\n\t\t\t\t\ti,\n\t\t\t\t\tc;\n\n\t\t\t\tfor (i = 0, pos = 0; i < len; i++) {\n\t\t\t\t\tif (tests[i]) {\n\t\t\t\t\t\tbuffer[i] = settings.placeholder;\n\t\t\t\t\t\twhile (pos++ < test.length) {\n\t\t\t\t\t\t\tc = test.charAt(pos - 1);\n\t\t\t\t\t\t\tif (tests[i].test(c)) {\n\t\t\t\t\t\t\t\tbuffer[i] = c;\n\t\t\t\t\t\t\t\tlastMatch = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pos > test.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (buffer[i] === test.charAt(pos) && i !== partialPosition) {\n\t\t\t\t\t\tpos++;\n\t\t\t\t\t\tlastMatch = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (allow) {\n\t\t\t\t\twriteBuffer();\n\t\t\t\t} else if (lastMatch + 1 < partialPosition) {\n\t\t\t\t\tinput.val(\"\");\n\t\t\t\t\tclearBuffer(0, len);\n\t\t\t\t} else {\n\t\t\t\t\twriteBuffer();\n\t\t\t\t\tinput.val(input.val().substring(0, lastMatch + 1));\n\t\t\t\t}\n\t\t\t\treturn (partialPosition ? i : firstNonMaskPos);\n\t\t\t}\n\n\t\t\tinput.data($.mask.dataName,function(){\n\t\t\t\treturn $.map(buffer, function(c, i) {\n\t\t\t\t\treturn tests[i]&&c!=settings.placeholder ? c : null;\n\t\t\t\t}).join('');\n\t\t\t});\n\n\t\t\tif (!input.attr(\"readonly\"))\n\t\t\t\tinput\n\t\t\t\t.one(\"unmask\", function() {\n\t\t\t\t\tinput\n\t\t\t\t\t\t.unbind(\".mask\")\n\t\t\t\t\t\t.removeData($.mask.dataName);\n\t\t\t\t})\n\t\t\t\t.bind(\"focus.mask\", function() {\n\t\t\t\t\tclearTimeout(caretTimeoutId);\n\t\t\t\t\tvar pos,\n\t\t\t\t\t\tmoveCaret;\n\n\t\t\t\t\tfocusText = input.val();\n\t\t\t\t\tpos = checkVal();\n\t\t\t\t\t\n\t\t\t\t\tcaretTimeoutId = setTimeout(function(){\n\t\t\t\t\t\twriteBuffer();\n\t\t\t\t\t\tif (pos == mask.length) {\n\t\t\t\t\t\t\tinput.caret(0, pos);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinput.caret(pos);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 10);\n\t\t\t\t})\n\t\t\t\t.bind(\"blur.mask\", function() {\n\t\t\t\t\tcheckVal();\n\t\t\t\t\tif (input.val() != focusText)\n\t\t\t\t\t\tinput.change();\n\t\t\t\t})\n\t\t\t\t.bind(\"keydown.mask\", keydownEvent)\n\t\t\t\t.bind(\"keypress.mask\", keypressEvent)\n\t\t\t\t.bind(pasteEventName, function() {\n\t\t\t\t\tsetTimeout(function() { \n\t\t\t\t\t\tvar pos=checkVal(true);\n\t\t\t\t\t\tinput.caret(pos); \n\t\t\t\t\t\tif (settings.completed && pos == input.val().length)\n\t\t\t\t\t\t\tsettings.completed.call(input);\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\tcheckVal(); //Perform initial check for existing values\n\t\t});\n\t}\n});\n\n\n})(jQuery);","/*! @description Cross-Browser console.log() Wrapper\n * @version 2.1.3\n * @date 2015-03-05\n * @copyright 2015\n * https://github.com/patik/console.log-wrapper\n */\nFunction.prototype.bind&&/^object$|^function$/.test(typeof console)&&\"object\"==typeof console.log&&\"function\"==typeof window.addEventListener&&([\"assert\",\"clear\",\"dir\",\"error\",\"info\",\"log\",\"profile\",\"profileEnd\",\"warn\"].forEach(function(a){console[a]=this.call(console[a],console)},Function.prototype.bind),[\"_exception\",\"count\",\"debug\",\"dirxml\",\"group\",\"groupCollapsed\",\"groupEnd\",\"table\",\"time\",\"timeEnd\",\"timeline\",\"timelineEnd\",\"timeStamp\",\"trace\"].forEach(function(a){console[a]=console.log})),function(a,b){\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):window[a]=b()}(\"log\",function(){var a,b=navigator.userAgent,c=function(){var a=/Windows\\sNT\\s(\\d+\\.\\d+)/;return\"undefined\"!=typeof console&&console.log&&/MSIE\\s(\\d+)/.test(b)&&a.test(b)&&parseFloat(a.exec(b)[1])>=6.1?!0:!1}(),d=function(){var a=Function.prototype.bind;return(!a||a&&\"undefined\"==typeof window.addEventListener)&&\"object\"==typeof console&&\"object\"==typeof console.log}(),e=!c&&!d&&/Trident\\//.test(b),f=c||window.console&&\"function\"==typeof console.log,g=0,h={label:\"Log:\",collapsed:!0},i=function(){!function(a,b,c,d,e,f,g,h,i,j,k){a.getElementById(e)||(k=a[b+\"NS\"]&&a.documentElement.namespaceURI,k=k?a[b+\"NS\"](k,\"script\"):a[b](\"script\"),k[c](\"id\",e),k[c](\"src\",i+g+j),k[c](e,f),(a[d](\"head\")[0]||a[d](\"body\")[0]).appendChild(k),k=new Image,k[c](\"src\",i+h))}(document,\"createElement\",\"setAttribute\",\"getElementsByTagName\",\"FirebugLite\",\"4\",\"firebug-lite.js\",\"releases/lite/latest/skin/xp/sprite.png\",\"https://getfirebug.com/\",\"#startOpened\")},j=function(a){var b=a.split(\"\\n\").pop(),c=document.location.pathname.substr(0,document.location.pathname.lastIndexOf(\"/\")+1);return b.indexOf(c)>-1&&(b=b.replace(c,\"\").replace(document.location.protocol+\"//\",\"\")),/[^\\(\\@]+\\:\\d+\\:\\d+\\)?$/.test(b)?b=\"@\"+/([^\\(\\@]+\\:\\d+\\:\\d+)\\)?$/.exec(b)[1]:(b.indexOf(\" (\")>-1?b=b.split(\" (\")[1].substring(0,b.length-1):b.indexOf(\"at \")>-1?b=b.split(\"at \")[1]:/([^\\/]+\\:\\d+\\:\\d+)/.test(b)&&(b=/([^\\/]+\\:\\d+\\:\\d+)/.exec(b)[1]),b=\"@\"+b.substring(b.lastIndexOf(\"/\")+1)),b},k=function(a){var b,c,d;if(null===a)return\"null\";if(/function|undefined|string|boolean|number/.test(typeof a))return typeof a;if(\"object\"==typeof a)for(b=Object.prototype.toString.call(a),c=[\"Math\",\"ErrorEvent\",\"Error\",\"Date\",\"RegExp\",\"Event\",\"Array\"],d=c.length;d--;)return b===\"[object \"+c[d]+\"]\"?c[d].toLowerCase():\"object\"==typeof HTMLElement&&a instanceof HTMLElement?\"element\":\"string\"==typeof a.nodeName&&1===a.nodeType?\"element\":\"object\"==typeof Node&&a instanceof Node?\"node\":\"number\"==typeof a.nodeType&&\"string\"==typeof a.nodeName?\"node\":/^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(b)&&\"number\"==typeof a.length&&\"undefined\"!=typeof a.item&&(0===a.length||\"object\"==typeof a[0]&&a[0].nodeType>0)?\"nodelist\":\"object\";return\"unknown\"};return a=function(){var b,f,h=arguments,l=Array.prototype.slice.call(h),m=c||window.console&&\"function\"==typeof console.log;if(a.history.push(arguments),m){if(a.options.group&&(a.options.group.collapsed?console.groupCollapsed(a.options.group.label):console.group(a.options.group.label)),a.options.lineNumber&&(b=new Error,b.fileName&&b.lineNumber?l.push(\"@\"+b.fileName.substr(b.fileName.lastIndexOf(\"/\")+1)+\":\"+b.lineNumber+\":1\"):b.stack&&l.push(j(b.stack))),a.detailPrint&&a.needsDetailPrint)for(console.log(\"-----------------\"),h=a.detailPrint(h),f=0;f<h.length;)console.log(h[f]),f++;else if(1===l.length&&\"string\"==typeof l[0])console.log(l.toString());else if(e)for(f=0;f<h.length;)e&&\"object\"===k(h[f])?console.dir(h[f]):console.log(h[f]),f++;else console.log(l);a.options.group&&console.groupEnd()}else if(d)if(a.detailPrint)for(h=a.detailPrint(h),h.unshift(\"-----------------\"),f=0;f<h.length;)Function.prototype.call.call(console.log,console,Array.prototype.slice.call([h[f]])),f++;else Function.prototype.call.call(console.log,console,Array.prototype.slice.call(h));else document.getElementById(\"FirebugLite\")?20>g?(setTimeout(function(){window.log.apply(window,h)},500),g++):g=0:(i(),setTimeout(function(){window.log.apply(window,h)},3e3),a.needsDetailPrint=!1)},a.history=[],a.options={lineNumber:!0,group:!1},e&&!a.options.group&&(a.options.group=h),a.settings=function(b){b&&\"object\"===k(b)&&(f&&console.group&&(\"boolean\"==typeof b.group?a.options.group=b.group?h:!1:\"object\"===k(b.group)&&(a.options.group=h,\"undefined\"!=typeof b.group.collapsed&&(a.options.group.collapsed=!!b.group.collapsed),\"string\"==typeof b.group.label&&(a.options.group.label=b.group.label))),\"undefined\"!=typeof b.lineNumber&&(a.options.lineNumber=!!b.lineNumber))},a});\n","/**\n* bootstrap.js v3.0.0 by @fat and @mdo\n* Copyright 2013 Twitter Inc.\n* http://www.apache.org/licenses/LICENSE-2.0\n*/\nif (!jQuery) { throw new Error(\"Bootstrap requires jQuery\") }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      'WebkitTransition' : 'webkitTransitionEnd'\n    , 'MozTransition'    : 'transitionend'\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\n    , 'transition'       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false, $el = this\n    $(this).one($.support.transition.end, function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      $parent.trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one($.support.transition.end, removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.alert\n\n  $.fn.alert = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element = $(element)\n    this.options  = $.extend({}, Button.DEFAULTS, options)\n  }\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (!data.resetText) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] || this.options[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout(function () {\n      state == 'loadingText' ?\n        $el.addClass(d).attr(d, d) :\n        $el.removeClass(d).removeAttr(d);\n    }, 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n        .prop('checked', !this.$element.hasClass('active'))\n        .trigger('change')\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n    }\n\n    this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  var old = $.fn.button\n\n  $.fn.button = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    $btn.button('toggle')\n    e.preventDefault()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#carousel\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter', $.proxy(this.pause, this))\n      .on('mouseleave', $.proxy(this.cycle, this))\n  }\n\n  Carousel.DEFAULTS = {\n    interval: 5000\n  , pause: 'hover'\n  , wrap: true\n  }\n\n  Carousel.prototype.cycle =  function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getActiveIndex = function () {\n    this.$active = this.$element.find('.item.active')\n    this.$items  = this.$active.parent().children()\n\n    return this.$items.index(this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getActiveIndex()\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n    if ($next.hasClass('active')) return\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid', function () {\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n        $nextIndicator && $nextIndicator.addClass('active')\n      })\n    }\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one($.support.transition.end, function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\n        })\n        .emulateTransitionEnd(600)\n    } else {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid')\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.carousel\n\n  $.fn.carousel = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var $this   = $(this), href\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    $target.carousel(options)\n\n    if (slideIndex = $this.attr('data-slide-to')) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      $carousel.carousel($carousel.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#collapse\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      actives.collapse('hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')\n      [dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('in')\n        [dimension]('auto')\n      this.transitioning = 0\n      this.$element.trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n      [dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element\n      [dimension](this.$element[dimension]())\n      [0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.collapse\n\n  $.fn.collapse = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n    var $this   = $(this), href\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    $target.collapse(option)\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#dropdowns\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=dropdown]'\n  var Dropdown = function (element) {\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown')\n\n      $this.focus()\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).focus()\n      return $this.click()\n    }\n\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index=0\n\n    $items.eq(index).focus()\n  }\n\n  function clearMenus() {\n    $(backdrop).remove()\n    $(toggle).each(function (e) {\n      var $parent = getParent($(this))\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('dropdown')\n\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#modals\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options   = options\n    this.$element  = $(element)\n    this.$backdrop =\n    this.isShown   = null\n\n    if (this.options.remote) this.$element.load(this.options.remote)\n  }\n\n  Modal.DEFAULTS = {\n      backdrop: true\n    , keyboard: true\n    , show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.escape()\n\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(document.body) // don't move modals dom position\n      }\n\n      that.$element.show()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one($.support.transition.end, function () {\n            that.$element.focus().trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.focus().trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.focus()\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.removeBackdrop()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that    = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(document.body)\n\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      $.support.transition && this.$element.hasClass('fade')?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.modal\n\n  $.fn.modal = function (option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    e.preventDefault()\n\n    $target\n      .modal(option, this)\n      .one('hide', function () {\n        $this.is(':visible') && $this.focus()\n      })\n  })\n\n  $(document)\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.DEFAULTS = {\n    animation: true\n  , placement: 'top'\n  , selector: false\n  , template: '<div class=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>'\n  , trigger: 'hover focus'\n  , title: ''\n  , delay: 0\n  , html: false\n  , container: false\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled  = true\n    this.type     = type\n    this.$element = $(element)\n    this.options  = this.getOptions(options)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay\n      , hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.'+ this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      var $tip = this.tip()\n\n      this.setContent()\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var $parent = this.$element.parent()\n\n        var orgPlacement = placement\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\n\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n      this.$element.trigger('shown.bs.' + this.type)\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\n    var replace\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    $tip\n      .offset(offset)\n      .addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      replace = true\n      offset.top = offset.top + height - actualHeight\n    }\n    if(/bottom-right/.test(placement)) {\n          $tip.css({left: \"auto\", right: 0})\n          this.arrow().css({left: \"auto\", right: this.$element.width() / 2})\n    }\n    else if (/bottom|top/.test(placement)) {\n      var delta = 0\n\n      if (offset.left < 0) {\n        delta       = offset.left * -2\n        offset.left = 0\n\n        $tip.offset(offset)\n\n        actualWidth  = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n      }\n\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n    } \n    else {\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\n    }\n\n    if (replace) $tip.offset(offset)\n  }\n\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one($.support.transition.end, complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.$element.trigger('hidden.bs.' + this.type)\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function () {\n    var el = this.$element[0]\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n      width: el.offsetWidth\n    , height: el.offsetHeight\n    }, this.$element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'bottom-right' ? { top: pos.top + pos.height, right:0, left: \"auto\"  } :    \n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.tip = function () {\n    return this.$tip = this.$tip || $(this.options.template)\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#popovers\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right'\n  , trigger: 'click'\n  , content: ''\n  , template: '<div class=\"popover\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.popover\n\n  $.fn.popover = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#scrollspy\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var href\n    var process  = $.proxy(this.process, this)\n\n    this.$element       = $(element).is('body') ? $(window) : $(element)\n    this.$body          = $('body')\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n      || '') + ' .nav li > a'\n    this.offsets        = $([])\n    this.targets        = $([])\n    this.activeTarget   = null\n\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n    this.offsets = $([])\n    this.targets = $([])\n\n    var self     = this\n    var $targets = this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#\\w/.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate( targets[i] )\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parents('.active')\n      .removeClass('active')\n\n    var selector = this.selector\n      + '[data-target=\"' + target + '\"],'\n      + this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length)  {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      $spy.scrollspy($spy.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#tabs\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.parent('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab'\n      , relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one($.support.transition.end, next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  var old = $.fn.tab\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    $(this).tab('show')\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.0.0\n * http://twbs.github.com/bootstrap/javascript.html#affix\n * ========================================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n    this.$window = $(window)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element = $(element)\n    this.affixed  =\n    this.unpin    = null\n\n    this.checkPosition()\n  }\n\n  Affix.RESET = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$window.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin) this.$element.css('top', '')\n\n    this.affixed = affix\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.affix\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      $spy.affix(data)\n    })\n  })\n\n}(window.jQuery);\n","/**\n*  Ajax Autocomplete for jQuery, version 1.2.7\n*  (c) 2013 Tomas Kirda\n*\n*  Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.\n*  For details, see the web site: http://www.devbridge.com/projects/autocomplete/jquery/\n*\n*/\n\n/*jslint  browser: true, white: true, plusplus: true */\n/*global define, window, document, jQuery */\n\n// Expose plugin as an AMD module if AMD loader is present:\n(function (factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    var\n        utils = (function () {\n            return {\n                escapeRegExChars: function (value) {\n                    return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n                },\n                createNode: function (html) {\n                    var div = document.createElement('div');\n                    div.innerHTML = html;\n                    return div.firstChild;\n                }\n            };\n        }()),\n\n        keys = {\n            ESC: 27,\n            TAB: 9,\n            RETURN: 13,\n            LEFT: 37,\n            UP: 38,\n            RIGHT: 39,\n            DOWN: 40\n        };\n\n    function Autocomplete(el, options) {\n        var noop = function () { },\n            that = this,\n            defaults = {\n                autoSelectFirst: false,\n                appendTo: 'body',\n                serviceUrl: null,\n                lookup: null,\n                onSelect: null,\n                width: 'auto',\n                minChars: 1,\n                maxHeight: 300,\n                deferRequestBy: 0,\n                params: {},\n                headline: Autocomplete.headline,\n                formatResult: Autocomplete.formatResult,\n                activate: Autocomplete.activate,\n                delimiter: null,\n                zIndex: 9999,\n                type: 'GET',\n                noCache: false,\n                onSearchStart: noop,\n                onSearchComplete: noop,\n                onSearchError: noop,\n                containerClass: 'autocomplete-suggestions',\n                tabDisabled: false,\n                dataType: 'text',\n                currentRequest: null,\n                lookupFilter: function (suggestion, originalQuery, queryLowerCase) {\n                    return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1;\n                },\n                paramName: 'query',\n                transformResult: function (response) {\n                    return typeof response === 'string' ? $.parseJSON(response) : response;\n                }\n            };\n\n        // Shared variables:\n        that.element = el;\n        that.el = $(el);\n        that.suggestions = [];\n        that.badQueries = [];\n        that.selectedIndex = -1;\n        that.currentValue = that.element.value;\n        that.intervalId = 0;\n        that.cachedResponse = [];\n        that.onChangeInterval = null;\n        that.onChange = null;\n        that.isLocal = false;\n        that.suggestionsContainer = null;\n        that.options = $.extend({}, defaults, options);\n        that.classes = {\n            selected: 'autocomplete-selected',\n            suggestion: 'autocomplete-suggestion'\n        };\n        that.hint = null;\n        that.hintValue = '';\n        that.selection = null;\n\n        // Initialize and set options:\n        that.initialize();\n        that.setOptions(options);\n    }\n\n    Autocomplete.utils = utils;\n\n    $.Autocomplete = Autocomplete;\n\n    Autocomplete.formatResult = function (suggestion, currentValue) {\n        var pattern = '(' + utils.escapeRegExChars(currentValue) + ')';\n\n        return suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\\/strong>');\n    };\n\n    Autocomplete.headline = function (suggestion) {\n        return \"\";\n    };\n\n    Autocomplete.prototype = {\n\n        killerFn: null,\n\n        initialize: function () {\n            var that = this,\n                suggestionSelector = '.' + that.classes.suggestion,\n                selected = that.classes.selected,\n                options = that.options,\n                container;\n\n            // Remove autocomplete attribute to prevent native suggestions:\n            that.element.setAttribute('autocomplete', 'off');\n\n            that.killerFn = function (e) {\n                if ($(e.target).closest('.' + that.options.containerClass).length === 0) {\n                    that.killSuggestions();\n                    that.disableKillerFn();\n                }\n            };\n\n            that.suggestionsContainer = Autocomplete.utils.createNode('<div class=\"' + options.containerClass + '\" style=\"position: absolute; display: none;\"></div>');\n\n            container = $(that.suggestionsContainer);\n\n            container.appendTo(options.appendTo);\n\n            // Only set width if it was provided:\n            if (options.width !== 'auto') {\n                container.width(options.width);\n            }\n\n            // Listen for mouse over event on suggestions list:\n            container.on('mouseover.autocomplete', suggestionSelector, function () {\n                that.activate($(this).data('index'));\n            });\n\n            // Deselect active element when mouse leaves suggestions container:\n            container.on('mouseout.autocomplete', function () {\n                that.selectedIndex = -1;\n                container.children('.' + selected).removeClass(selected);\n            });\n\n            // Listen for click event on suggestions list:\n            container.on('click.autocomplete', suggestionSelector, function () {\n                that.select($(this).data('index'));\n            });\n\n            that.fixPosition();\n\n            that.fixPositionCapture = function () {\n                if (that.visible) {\n                    that.fixPosition();\n                }\n            };\n\n            $(window).on('resize', that.fixPositionCapture);\n\n            that.el.on('keydown.autocomplete', function (e) { that.onKeyPress(e); });\n            that.el.on('keyup.autocomplete', function (e) { that.onKeyUp(e); });\n            that.el.on('blur.autocomplete', function () { that.onBlur(); });\n            that.el.on('focus.autocomplete', function () { that.fixPosition(); });\n            that.el.on('change.autocomplete', function (e) { that.onKeyUp(e); });\n        },\n\n        onBlur: function () {\n            this.enableKillerFn();\n        },\n\n        setOptions: function (suppliedOptions) {\n            var that = this,\n                options = that.options;\n\n            $.extend(options, suppliedOptions);\n\n            that.isLocal = $.isArray(options.lookup);\n\n            if (that.isLocal) {\n                options.lookup = that.verifySuggestionsFormat(options.lookup);\n            }\n\n            // Adjust height, width and z-index:\n            $(that.suggestionsContainer).css({\n                'max-height': options.maxHeight + 'px',\n                'width': options.width + 'px',\n                'z-index': options.zIndex\n            });\n        },\n\n        clearCache: function () {\n            this.cachedResponse = [];\n            this.badQueries = [];\n        },\n\n        clear: function () {\n            this.clearCache();\n            this.currentValue = '';\n            this.suggestions = [];\n        },\n\n        disable: function () {\n            this.disabled = true;\n        },\n\n        enable: function () {\n            this.disabled = false;\n        },\n\n        fixPosition: function () {\n            var that = this,\n                offset;\n\n            // Don't adjsut position if custom container has been specified:\n            if (that.options.appendTo !== 'body') {\n                return;\n            }\n\n            offset = that.el.offset();\n\n            $(that.suggestionsContainer).css({\n                top: (offset.top + that.el.outerHeight()) + 'px',\n                left: offset.left + 'px'\n            });\n        },\n\n        enableKillerFn: function () {\n            var that = this;\n            $(document).on('click.autocomplete', that.killerFn);\n        },\n\n        disableKillerFn: function () {\n            var that = this;\n            $(document).off('click.autocomplete', that.killerFn);\n        },\n\n        killSuggestions: function () {\n            var that = this;\n            that.stopKillSuggestions();\n            that.intervalId = window.setInterval(function () {\n                that.hide();\n                that.stopKillSuggestions();\n            }, 300);\n        },\n\n        stopKillSuggestions: function () {\n            window.clearInterval(this.intervalId);\n        },\n\n        isCursorAtEnd: function () {\n            var that = this,\n                valLength = that.el.val().length,\n                selectionStart = that.element.selectionStart,\n                range;\n\n            if (typeof selectionStart === 'number') {\n                return selectionStart === valLength;\n            }\n            if (document.selection) {\n                range = document.selection.createRange();\n                range.moveStart('character', -valLength);\n                return valLength === range.text.length;\n            }\n            return true;\n        },\n\n        onKeyPress: function (e) {\n            var that = this;\n\n            // If suggestions are hidden and user presses arrow down, display suggestions:\n            if (!that.disabled && !that.visible && e.which === keys.DOWN && that.currentValue) {\n                that.suggest();\n                return;\n            }\n\n            if (that.disabled || !that.visible) {\n                return;\n            }\n\n            switch (e.which) {\n                case keys.ESC:\n                    that.el.val(that.currentValue);\n                    that.hide();\n                    break;\n                case keys.RIGHT:\n                    if (that.hint && that.options.onHint && that.isCursorAtEnd()) {\n                        that.selectHint();\n                        break;\n                    }\n                    return;\n                case keys.TAB:\n                    if (that.hint && that.options.onHint) {\n                        that.selectHint();\n                        return;\n                    }\n                    // Fall through to RETURN\n                case keys.RETURN:\n                    if (that.selectedIndex === -1) {\n                        that.hide();\n                        return;\n                    }\n                    that.select(that.selectedIndex);\n                    if (e.which === keys.TAB && that.options.tabDisabled === false) {\n                        return;\n                    }\n                    break;\n                case keys.UP:\n                    that.moveUp();\n                    break;\n                case keys.DOWN:\n                    that.moveDown();\n                    break;\n                default:\n                    return;\n            }\n\n            // Cancel event if function did not return:\n            e.stopImmediatePropagation();\n            e.preventDefault();\n        },\n\n        onKeyUp: function (e) {\n            var that = this;\n\n            if (that.disabled) {\n                return;\n            }\n\n            switch (e.which) {\n                case keys.UP:\n                case keys.DOWN:\n                    return;\n            }\n\n            clearInterval(that.onChangeInterval);\n\n            if (that.currentValue !== that.el.val()) {\n                that.findBestHint();\n                if (that.options.deferRequestBy > 0) {\n                    // Defer lookup in case when value changes very quickly:\n                    that.onChangeInterval = setInterval(function () {\n                        that.onValueChange();\n                    }, that.options.deferRequestBy);\n                } else {\n                    that.onValueChange();\n                }\n            }\n        },\n\n        onValueChange: function () {\n            var that = this,\n                q;\n\n            if (that.selection) {\n                that.selection = null;\n                (that.options.onInvalidateSelection || $.noop)();\n            }\n\n            clearInterval(that.onChangeInterval);\n            that.currentValue = that.el.val();\n\n            q = that.getQuery(that.currentValue);\n            that.selectedIndex = -1;\n\n            if (q.length < that.options.minChars) {\n                that.hide();\n            } else {\n                that.getSuggestions(q);\n            }\n        },\n\n        getQuery: function (value) {\n            var delimiter = this.options.delimiter,\n                parts;\n\n            if (!delimiter) {\n                return $.trim(value);\n            }\n            parts = value.split(delimiter);\n            return $.trim(parts[parts.length - 1]);\n        },\n\n        getSuggestionsLocal: function (query) {\n            var that = this,\n                queryLowerCase = query.toLowerCase(),\n                filter = that.options.lookupFilter;\n\n            return {\n                suggestions: $.grep(that.options.lookup, function (suggestion) {\n                    return filter(suggestion, query, queryLowerCase);\n                })\n            };\n        },\n\n        getSuggestions: function (q) {\n            var response,\n                that = this,\n                options = that.options,\n                serviceUrl = options.serviceUrl;\n\n            response = that.isLocal ? that.getSuggestionsLocal(q) : that.cachedResponse[q];\n\n            if (response && $.isArray(response.suggestions)) {\n                that.suggestions = response.suggestions;\n                that.suggest();\n            } else if (!that.isBadQuery(q)) {\n                options.params[options.paramName] = q;\n                if (options.onSearchStart.call(that.element, options.params) === false) {\n                    return;\n                }\n                if ($.isFunction(options.serviceUrl)) {\n                    serviceUrl = options.serviceUrl.call(that.element, q);\n                }\n                if(this.currentRequest != null) {\n                    this.currentRequest.abort();\n                }\n                this.currentRequest = $.ajax({\n                    url: serviceUrl,\n                    data: options.ignoreParams ? null : options.params,\n                    type: options.type,\n                    dataType: options.dataType\n                }).done(function (data) {\n                    that.processResponse(data, q);\n                    options.onSearchComplete.call(that.element, q);\n                }).fail(function (jqXHR, textStatus, errorThrown) {\n                    options.onSearchError.call(that.element, q, jqXHR, textStatus, errorThrown);\n                });\n            }\n        },\n\n        isBadQuery: function (q) {\n            var badQueries = this.badQueries,\n                i = badQueries.length;\n\n            while (i--) {\n                if (q.indexOf(badQueries[i]) === 0) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        hide: function () {\n            var that = this;\n            that.visible = false;\n            that.selectedIndex = -1;\n            $(that.suggestionsContainer).hide();\n            that.signalHint(null);\n        },\n\n        suggest: function () {\n            if (this.suggestions.length === 0) {\n                this.hide();\n                return;\n            }\n\n            var that = this,\n                formatResult = that.options.formatResult,\n                headline = that.options.headline,\n                value = that.getQuery(that.currentValue),\n                className = that.classes.suggestion,\n                classSelected = that.classes.selected,\n                container = $(that.suggestionsContainer),\n                html = '',\n                width;\n\n            // Build suggestions inner HTML:\n            $.each(that.suggestions, function (i, suggestion) {\n                html += headline(suggestion);\n                html += '<div class=\"' + className + '\" data-index=\"' + i + '\">' + formatResult(suggestion, value) + '</div>';\n            });\n\n            // If width is auto, adjust width before displaying suggestions,\n            // because if instance was created before input had width, it will be zero.\n            // Also it adjusts if input width has changed.\n            // -2px to account for suggestions border.\n            if (that.options.width === 'auto') {\n                width = that.el.outerWidth() - 2;\n                container.width(width > 0 ? width : 300);\n            }\n\n            container.html(html).show();\n            that.visible = true;\n\n            // Select first value by default:\n            if (that.options.autoSelectFirst) {\n                that.selectedIndex = 0;\n                container.children().first().addClass(classSelected);\n            }\n\n            that.findBestHint();\n        },\n\n        findBestHint: function () {\n            var that = this,\n                value = that.el.val().toLowerCase(),\n                bestMatch = null;\n\n            if (!value) {\n                return;\n            }\n\n            $.each(that.suggestions, function (i, suggestion) {\n                var foundMatch = suggestion.value.toLowerCase().indexOf(value) === 0;\n                if (foundMatch) {\n                    bestMatch = suggestion;\n                }\n                return !foundMatch;\n            });\n\n            that.signalHint(bestMatch);\n        },\n\n        signalHint: function (suggestion) {\n            var hintValue = '',\n                that = this;\n            if (suggestion) {\n                hintValue = that.currentValue + suggestion.value.substr(that.currentValue.length);\n            }\n            if (that.hintValue !== hintValue) {\n                that.hintValue = hintValue;\n                that.hint = suggestion;\n                (this.options.onHint || $.noop)(hintValue);\n            }\n        },\n\n        verifySuggestionsFormat: function (suggestions) {\n            // If suggestions is string array, convert them to supported format:\n            if (suggestions.length && typeof suggestions[0] === 'string') {\n                return $.map(suggestions, function (value) {\n                    return { value: value, data: null };\n                });\n            }\n\n            return suggestions;\n        },\n\n        processResponse: function (response, originalQuery) {\n            var that = this,\n                options = that.options,\n                result = options.transformResult(response, originalQuery);\n\n            result.suggestions = that.verifySuggestionsFormat(result.suggestions);\n\n            // Cache results if cache is not disabled:\n            if (!options.noCache) {\n                that.cachedResponse[result[options.paramName]] = result;\n                if (result.suggestions.length === 0) {\n                    that.badQueries.push(result[options.paramName]);\n                }\n            }\n\n            // Display suggestions only if returned query matches current value:\n            if (originalQuery === that.getQuery(that.currentValue)) {\n                that.suggestions = result.suggestions;\n                that.suggest();\n            }\n        },\n\n        activate: function (index) {\n            var that = this,\n                activeItem,\n                selected = that.classes.selected,\n                container = $(that.suggestionsContainer),\n                children = container.children(\".autocomplete-suggestion\");\n\n            container.children('.' + selected).removeClass(selected);\n\n            that.selectedIndex = index;\n\n            if (that.selectedIndex !== -1 && children.length > that.selectedIndex) {\n                activeItem = children.get(that.selectedIndex);\n                $(activeItem).addClass(selected);\n                return activeItem;\n            }\n\n            return null;\n        },\n\n        selectHint: function () {\n            var that = this,\n                i = $.inArray(that.hint, that.suggestions);\n\n            that.select(i);\n        },\n\n        select: function (i) {\n            var that = this;\n            that.hide();\n            that.onSelect(i);\n        },\n\n        moveUp: function () {\n            var that = this;\n\n            if (that.selectedIndex === -1) {\n                return;\n            }\n\n            if (that.selectedIndex === 0) {\n                $(that.suggestionsContainer).children().first().removeClass(that.classes.selected);\n                that.selectedIndex = -1;\n                that.el.val(that.currentValue);\n                that.findBestHint();\n                return;\n            }\n\n            that.adjustScroll(that.selectedIndex - 1);\n        },\n\n        moveDown: function () {\n            var that = this;\n\n            if (that.selectedIndex === (that.suggestions.length - 1)) {\n                return;\n            }\n\n            that.adjustScroll(that.selectedIndex + 1);\n        },\n\n        adjustScroll: function (index) {\n            var that = this,\n                activeItem = that.activate(index),\n                offsetTop,\n                upperBound,\n                lowerBound,\n                heightDelta = 25;\n\n            if (!activeItem) {\n                return;\n            }\n\n            offsetTop = activeItem.offsetTop;\n            upperBound = $(that.suggestionsContainer).scrollTop();\n            lowerBound = upperBound + that.options.maxHeight - heightDelta;\n\n            if (offsetTop < upperBound) {\n                $(that.suggestionsContainer).scrollTop(offsetTop);\n            } else if (offsetTop > lowerBound) {\n                $(that.suggestionsContainer).scrollTop(offsetTop - that.options.maxHeight + heightDelta);\n            }\n\n            that.el.val(that.getValue(that.suggestions[index].value));\n            that.signalHint(null);\n        },\n\n        onSelect: function (index) {\n            var that = this,\n                onSelectCallback = that.options.onSelect,\n                suggestion = that.suggestions[index];\n\n            that.currentValue = that.getValue(suggestion.value);\n            that.el.val(that.currentValue);\n            that.signalHint(null);\n            that.suggestions = [];\n            that.selection = suggestion;\n\n            if ($.isFunction(onSelectCallback)) {\n                onSelectCallback.call(that.element, suggestion);\n            }\n        },\n\n        getValue: function (value) {\n            var that = this,\n                delimiter = that.options.delimiter,\n                currentValue,\n                parts;\n\n            if (!delimiter) {\n                return value;\n            }\n\n            currentValue = that.currentValue;\n            parts = currentValue.split(delimiter);\n\n            if (parts.length === 1) {\n                return value;\n            }\n\n            return currentValue.substr(0, currentValue.length - parts[parts.length - 1].length) + value;\n        },\n\n        dispose: function () {\n            var that = this;\n            that.el.off('.autocomplete').removeData('autocomplete');\n            that.disableKillerFn();\n            $(window).off('resize', that.fixPositionCapture);\n            $(that.suggestionsContainer).remove();\n        }\n    };\n\n    // Create chainable jQuery plugin:\n    $.fn.autocomplete = function (options, args) {\n        var dataKey = 'autocomplete';\n        // If function invoked without argument return\n        // instance of the first matched element:\n        if (arguments.length === 0) {\n            return this.first().data(dataKey);\n        }\n\n        return this.each(function () {\n            var inputElement = $(this),\n                instance = inputElement.data(dataKey);\n\n            if (typeof options === 'string') {\n                if (instance && typeof instance[options] === 'function') {\n                    instance[options](args);\n                }\n            } else {\n                // If instance already exists, destroy it:\n                if (instance && instance.dispose) {\n                    instance.dispose();\n                }\n                instance = new Autocomplete(this, options);\n                inputElement.data(dataKey, instance);\n            }\n        });\n    };\n}));\n","/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.7\n *\n */\n(function(e){e.fn.extend({slimScroll:function(f){var a=e.extend({width:\"auto\",height:\"250px\",size:\"7px\",color:\"#000\",position:\"right\",distance:\"1px\",start:\"top\",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:\"#333\",railOpacity:.2,railDraggable:!0,railClass:\"slimScrollRail\",barClass:\"slimScrollBar\",wrapperClass:\"slimScrollDiv\",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:\"7px\",railBorderRadius:\"7px\"},f);this.each(function(){function v(d){if(r){d=d||window.event;\nvar c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest(\".\"+a.wrapperClass).is(b.parent())&&n(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function n(d,e,f){k=!1;var g=d,h=b.outerHeight()-c.outerHeight();e&&(g=parseInt(c.css(\"top\"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),g=Math.min(Math.max(g,0),h),g=0<d?Math.ceil(g):Math.floor(g),c.css({top:g+\"px\"}));l=parseInt(c.css(\"top\"))/(b.outerHeight()-c.outerHeight());\ng=l*(b[0].scrollHeight-b.outerHeight());f&&(g=d,d=g/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),h),c.css({top:d+\"px\"}));b.scrollTop(g);b.trigger(\"slimscrolling\",~~g);w();q()}function x(){u=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:u+\"px\"});var a=u==b.outerHeight()?\"none\":\"block\";c.css({display:a})}function w(){x();clearTimeout(B);l==~~l?(k=a.allowPageScroll,C!=l&&b.trigger(\"slimscroll\",0==~~l?\"top\":\"bottom\")):k=!1;C=l;u>=b.outerHeight()?k=!0:(c.stop(!0,\n!0).fadeIn(\"fast\"),a.railVisible&&m.stop(!0,!0).fadeIn(\"fast\"))}function q(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut(\"slow\"),m.fadeOut(\"slow\"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var p=b.scrollTop(),c=b.siblings(\".\"+a.barClass),m=b.siblings(\".\"+a.railClass);x();if(e.isPlainObject(f)){if(\"height\"in f&&\"auto\"==f.height){b.parent().css(\"height\",\"auto\");b.css(\"height\",\"auto\");var h=b.parent().parent().height();b.parent().css(\"height\",\nh);b.css(\"height\",h)}else\"height\"in f&&(h=f.height,b.parent().css(\"height\",h),b.css(\"height\",h));if(\"scrollTo\"in f)p=parseInt(a.scrollTo);else if(\"scrollBy\"in f)p+=parseInt(a.scrollBy);else if(\"destroy\"in f){c.remove();m.remove();b.unwrap();return}n(p,!1,!0)}}else if(!(e.isPlainObject(f)&&\"destroy\"in f)){a.height=\"auto\"==a.height?b.parent().height():a.height;p=e(\"<div></div>\").addClass(a.wrapperClass).css({position:\"relative\",overflow:\"hidden\",width:a.width,height:a.height});b.css({overflow:\"hidden\",\nwidth:a.width,height:a.height});var m=e(\"<div></div>\").addClass(a.railClass).css({width:a.size,height:\"100%\",position:\"absolute\",top:0,display:a.alwaysVisible&&a.railVisible?\"block\":\"none\",\"border-radius\":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e(\"<div></div>\").addClass(a.barClass).css({background:a.color,width:a.size,position:\"absolute\",top:0,opacity:a.opacity,display:a.alwaysVisible?\"block\":\"none\",\"border-radius\":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,\nWebkitBorderRadius:a.borderRadius,zIndex:99}),h=\"right\"==a.position?{right:a.distance}:{left:a.distance};m.css(h);c.css(h);b.wrap(p);b.parent().append(c);b.parent().append(m);a.railDraggable&&c.bind(\"mousedown\",function(a){var b=e(document);z=!0;t=parseFloat(c.css(\"top\"));pageY=a.pageY;b.bind(\"mousemove.slimscroll\",function(a){currTop=t+a.pageY-pageY;c.css(\"top\",currTop);n(0,c.position().top,!1)});b.bind(\"mouseup.slimscroll\",function(a){z=!1;q();b.unbind(\".slimscroll\")});return!1}).bind(\"selectstart.slimscroll\",\nfunction(a){a.stopPropagation();a.preventDefault();return!1});m.hover(function(){w()},function(){q()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();q()},function(){r=!1;q()});b.bind(\"touchstart\",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind(\"touchmove\",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(n((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});\nx();\"bottom\"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),n(0,!0)):\"top\"!==a.start&&(n(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener(\"DOMMouseScroll\",v,!1),this.addEventListener(\"mousewheel\",v,!1)):document.attachEvent(\"onmousewheel\",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery);","/* ImageMapster\n   Version: 1.2.10 (2/25/2013)\n\nCopyright 2011-2012 James Treworgy\n\nhttp://www.outsharked.com/imagemapster\nhttps://github.com/jamietre/ImageMapster\n\nA jQuery plugin to enhance image maps.\n\n*/\n\n;\n\n/// LICENSE (MIT License)\n///\n/// Permission is hereby granted, free of charge, to any person obtaining\n/// a copy of this software and associated documentation files (the\n/// \"Software\"), to deal in the Software without restriction, including\n/// without limitation the rights to use, copy, modify, merge, publish,\n/// distribute, sublicense, and/or sell copies of the Software, and to\n/// permit persons to whom the Software is furnished to do so, subject to\n/// the following conditions:\n///\n/// The above copyright notice and this permission notice shall be\n/// included in all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n/// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n/// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n/// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n/// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n///\n/// January 19, 2011\n\n/** @license MIT License (c) copyright B Cavalier & J Hann */\n\n/**\n* when\n* A lightweight CommonJS Promises/A and when() implementation\n*\n* when is part of the cujo.js family of libraries (http://cujojs.com/)\n*\n* Licensed under the MIT License at:\n* http://www.opensource.org/licenses/mit-license.php\n*\n* @version 1.2.0\n*/\n\n/*lint-ignore-start*/\n\n(function (define) {\n    define(function () {\n        var freeze, reduceArray, slice, undef;\n\n        //\n        // Public API\n        //\n\n        when.defer = defer;\n        when.reject = reject;\n        when.isPromise = isPromise;\n\n        when.all = all;\n        when.some = some;\n        when.any = any;\n\n        when.map = map;\n        when.reduce = reduce;\n\n        when.chain = chain;\n\n        /** Object.freeze */\n        freeze = Object.freeze || function (o) { return o; };\n\n        /**\n        * Trusted Promise constructor.  A Promise created from this constructor is\n        * a trusted when.js promise.  Any other duck-typed promise is considered\n        * untrusted.\n        *\n        * @constructor\n        */\n        function Promise() { }\n\n        Promise.prototype = freeze({\n            always: function (alwaysback, progback) {\n                return this.then(alwaysback, alwaysback, progback);\n            },\n\n            otherwise: function (errback) {\n                return this.then(undef, errback);\n            }\n        });\n\n        /**\n        * Create an already-resolved promise for the supplied value\n        * @private\n        *\n        * @param value anything\n        * @return {Promise}\n        */\n        function resolved(value) {\n\n            var p = new Promise();\n\n            p.then = function (callback) {\n                var nextValue;\n                try {\n                    if (callback) nextValue = callback(value);\n                    return promise(nextValue === undef ? value : nextValue);\n                } catch (e) {\n                    return rejected(e);\n                }\n            };\n\n            return freeze(p);\n        }\n\n        /**\n        * Create an already-rejected {@link Promise} with the supplied\n        * rejection reason.\n        * @private\n        *\n        * @param reason rejection reason\n        * @return {Promise}\n        */\n        function rejected(reason) {\n\n            var p = new Promise();\n\n            p.then = function (callback, errback) {\n                var nextValue;\n                try {\n                    if (errback) {\n                        nextValue = errback(reason);\n                        return promise(nextValue === undef ? reason : nextValue)\n                    }\n\n                    return rejected(reason);\n\n                } catch (e) {\n                    return rejected(e);\n                }\n            };\n\n            return freeze(p);\n        }\n\n        /**\n        * Returns a rejected promise for the supplied promiseOrValue. If\n        * promiseOrValue is a value, it will be the rejection value of the\n        * returned promise.  If promiseOrValue is a promise, its\n        * completion value will be the rejected value of the returned promise\n        *\n        * @param promiseOrValue {*} the rejected value of the returned {@link Promise}\n        *\n        * @return {Promise} rejected {@link Promise}\n        */\n        function reject(promiseOrValue) {\n            return when(promiseOrValue, function (value) {\n                return rejected(value);\n            });\n        }\n\n        /**\n        * Creates a new, CommonJS compliant, Deferred with fully isolated\n        * resolver and promise parts, either or both of which may be given out\n        * safely to consumers.\n        * The Deferred itself has the full API: resolve, reject, progress, and\n        * then. The resolver has resolve, reject, and progress.  The promise\n        * only has then.\n        *\n        * @memberOf when\n        * @function\n        *\n        * @returns {Deferred}\n        */\n        function defer() {\n            var deferred, promise, listeners, progressHandlers, _then, _progress, complete;\n\n            listeners = [];\n            progressHandlers = [];\n\n            /**\n            * Pre-resolution then() that adds the supplied callback, errback, and progback\n            * functions to the registered listeners\n            *\n            * @private\n            *\n            * @param [callback] {Function} resolution handler\n            * @param [errback] {Function} rejection handler\n            * @param [progback] {Function} progress handler\n            *\n            * @throws {Error} if any argument is not null, undefined, or a Function\n            */\n            _then = function unresolvedThen(callback, errback, progback) {\n                var deferred = defer();\n\n                listeners.push(function (promise) {\n                    promise.then(callback, errback)\n\t\t\t\t\t.then(deferred.resolve, deferred.reject, deferred.progress);\n                });\n\n                progback && progressHandlers.push(progback);\n\n                return deferred.promise;\n            };\n\n            /**\n            * Registers a handler for this {@link Deferred}'s {@link Promise}.  Even though all arguments\n            * are optional, each argument that *is* supplied must be null, undefined, or a Function.\n            * Any other value will cause an Error to be thrown.\n            *\n            * @memberOf Promise\n            *\n            * @param [callback] {Function} resolution handler\n            * @param [errback] {Function} rejection handler\n            * @param [progback] {Function} progress handler\n            *\n            * @throws {Error} if any argument is not null, undefined, or a Function\n            */\n            function then(callback, errback, progback) {\n                return _then(callback, errback, progback);\n            }\n\n            /**\n            * Resolves this {@link Deferred}'s {@link Promise} with val as the\n            * resolution value.\n            *\n            * @memberOf Resolver\n            *\n            * @param val anything\n            */\n            function resolve(val) {\n                complete(resolved(val));\n            }\n\n            /**\n            * Rejects this {@link Deferred}'s {@link Promise} with err as the\n            * reason.\n            *\n            * @memberOf Resolver\n            *\n            * @param err anything\n            */\n            function reject(err) {\n                complete(rejected(err));\n            }\n\n            /**\n            * @private\n            * @param update\n            */\n            _progress = function (update) {\n                var progress, i = 0;\n                while (progress = progressHandlers[i++]) progress(update);\n            };\n\n            /**\n            * Emits a progress update to all progress observers registered with\n            * this {@link Deferred}'s {@link Promise}\n            *\n            * @memberOf Resolver\n            *\n            * @param update anything\n            */\n            function progress(update) {\n                _progress(update);\n            }\n\n            /**\n            * Transition from pre-resolution state to post-resolution state, notifying\n            * all listeners of the resolution or rejection\n            *\n            * @private\n            *\n            * @param completed {Promise} the completed value of this deferred\n            */\n            complete = function (completed) {\n                var listener, i = 0;\n\n                // Replace _then with one that directly notifies with the result.\n                _then = completed.then;\n\n                // Replace complete so that this Deferred can only be completed\n                // once. Also Replace _progress, so that subsequent attempts to issue\n                // progress throw.\n                complete = _progress = function alreadyCompleted() {\n                    // TODO: Consider silently returning here so that parties who\n                    // have a reference to the resolver cannot tell that the promise\n                    // has been resolved using try/catch\n                    throw new Error(\"already completed\");\n                };\n\n                // Free progressHandlers array since we'll never issue progress events\n                // for this promise again now that it's completed\n                progressHandlers = undef;\n\n                // Notify listeners\n                // Traverse all listeners registered directly with this Deferred\n\n                while (listener = listeners[i++]) {\n                    listener(completed);\n                }\n\n                listeners = [];\n            };\n\n            /**\n            * The full Deferred object, with both {@link Promise} and {@link Resolver}\n            * parts\n            * @class Deferred\n            * @name Deferred\n            */\n            deferred = {};\n\n            // Promise and Resolver parts\n            // Freeze Promise and Resolver APIs\n\n            promise = new Promise();\n            promise.then = deferred.then = then;\n\n            /**\n            * The {@link Promise} for this {@link Deferred}\n            * @memberOf Deferred\n            * @name promise\n            * @type {Promise}\n            */\n            deferred.promise = freeze(promise);\n\n            /**\n            * The {@link Resolver} for this {@link Deferred}\n            * @memberOf Deferred\n            * @name resolver\n            * @class Resolver\n            */\n            deferred.resolver = freeze({\n                resolve: (deferred.resolve = resolve),\n                reject: (deferred.reject = reject),\n                progress: (deferred.progress = progress)\n            });\n\n            return deferred;\n        }\n\n        /**\n        * Determines if promiseOrValue is a promise or not.  Uses the feature\n        * test from http://wiki.commonjs.org/wiki/Promises/A to determine if\n        * promiseOrValue is a promise.\n        *\n        * @param promiseOrValue anything\n        *\n        * @returns {Boolean} true if promiseOrValue is a {@link Promise}\n        */\n        function isPromise(promiseOrValue) {\n            return promiseOrValue && typeof promiseOrValue.then === 'function';\n        }\n\n        /**\n        * Register an observer for a promise or immediate value.\n        *\n        * @function\n        * @name when\n        * @namespace\n        *\n        * @param promiseOrValue anything\n        * @param {Function} [callback] callback to be called when promiseOrValue is\n        *   successfully resolved.  If promiseOrValue is an immediate value, callback\n        *   will be invoked immediately.\n        * @param {Function} [errback] callback to be called when promiseOrValue is\n        *   rejected.\n        * @param {Function} [progressHandler] callback to be called when progress updates\n        *   are issued for promiseOrValue.\n        *\n        * @returns {Promise} a new {@link Promise} that will complete with the return\n        *   value of callback or errback or the completion value of promiseOrValue if\n        *   callback and/or errback is not supplied.\n        */\n        function when(promiseOrValue, callback, errback, progressHandler) {\n            // Get a promise for the input promiseOrValue\n            // See promise()\n            var trustedPromise = promise(promiseOrValue);\n\n            // Register promise handlers\n            return trustedPromise.then(callback, errback, progressHandler);\n        }\n\n        /**\n        * Returns promiseOrValue if promiseOrValue is a {@link Promise}, a new Promise if\n        * promiseOrValue is a foreign promise, or a new, already-resolved {@link Promise}\n        * whose resolution value is promiseOrValue if promiseOrValue is an immediate value.\n        *\n        * Note that this function is not safe to export since it will return its\n        * input when promiseOrValue is a {@link Promise}\n        *\n        * @private\n        *\n        * @param promiseOrValue anything\n        *\n        * @returns Guaranteed to return a trusted Promise.  If promiseOrValue is a when.js {@link Promise}\n        *   returns promiseOrValue, otherwise, returns a new, already-resolved, when.js {@link Promise}\n        *   whose resolution value is:\n        *   * the resolution value of promiseOrValue if it's a foreign promise, or\n        *   * promiseOrValue if it's a value\n        */\n        function promise(promiseOrValue) {\n            var promise, deferred;\n\n            if (promiseOrValue instanceof Promise) {\n                // It's a when.js promise, so we trust it\n                promise = promiseOrValue;\n\n            } else {\n                // It's not a when.js promise.  Check to see if it's a foreign promise\n                // or a value.\n\n                deferred = defer();\n                if (isPromise(promiseOrValue)) {\n                    // It's a compliant promise, but we don't know where it came from,\n                    // so we don't trust its implementation entirely.  Introduce a trusted\n                    // middleman when.js promise\n\n                    // IMPORTANT: This is the only place when.js should ever call .then() on\n                    // an untrusted promise.\n                    promiseOrValue.then(deferred.resolve, deferred.reject, deferred.progress);\n                    promise = deferred.promise;\n\n                } else {\n                    // It's a value, not a promise.  Create an already-resolved promise\n                    // for it.\n                    deferred.resolve(promiseOrValue);\n                    promise = deferred.promise;\n                }\n            }\n\n            return promise;\n        }\n\n        /**\n        * Return a promise that will resolve when howMany of the supplied promisesOrValues\n        * have resolved. The resolution value of the returned promise will be an array of\n        * length howMany containing the resolutions values of the triggering promisesOrValues.\n        *\n        * @memberOf when\n        *\n        * @param promisesOrValues {Array} array of anything, may contain a mix\n        *      of {@link Promise}s and values\n        * @param howMany\n        * @param [callback]\n        * @param [errback]\n        * @param [progressHandler]\n        *\n        * @returns {Promise}\n        */\n        function some(promisesOrValues, howMany, callback, errback, progressHandler) {\n\n            checkCallbacks(2, arguments);\n\n            return when(promisesOrValues, function (promisesOrValues) {\n\n                var toResolve, results, ret, deferred, resolver, rejecter, handleProgress, len, i;\n\n                len = promisesOrValues.length >>> 0;\n\n                toResolve = Math.max(0, Math.min(howMany, len));\n                results = [];\n                deferred = defer();\n                ret = when(deferred, callback, errback, progressHandler);\n\n                // Wrapper so that resolver can be replaced\n                function resolve(val) {\n                    resolver(val);\n                }\n\n                // Wrapper so that rejecter can be replaced\n                function reject(err) {\n                    rejecter(err);\n                }\n\n                // Wrapper so that progress can be replaced\n                function progress(update) {\n                    handleProgress(update);\n                }\n\n                function complete() {\n                    resolver = rejecter = handleProgress = noop;\n                }\n\n                // No items in the input, resolve immediately\n                if (!toResolve) {\n                    deferred.resolve(results);\n\n                } else {\n                    // Resolver for promises.  Captures the value and resolves\n                    // the returned promise when toResolve reaches zero.\n                    // Overwrites resolver var with a noop once promise has\n                    // be resolved to cover case where n < promises.length\n                    resolver = function (val) {\n                        // This orders the values based on promise resolution order\n                        // Another strategy would be to use the original position of\n                        // the corresponding promise.\n                        results.push(val);\n\n                        if (! --toResolve) {\n                            complete();\n                            deferred.resolve(results);\n                        }\n                    };\n\n                    // Rejecter for promises.  Rejects returned promise\n                    // immediately, and overwrites rejecter var with a noop\n                    // once promise to cover case where n < promises.length.\n                    // TODO: Consider rejecting only when N (or promises.length - N?)\n                    // promises have been rejected instead of only one?\n                    rejecter = function (err) {\n                        complete();\n                        deferred.reject(err);\n                    };\n\n                    handleProgress = deferred.progress;\n\n                    // TODO: Replace while with forEach\n                    for (i = 0; i < len; ++i) {\n                        if (i in promisesOrValues) {\n                            when(promisesOrValues[i], resolve, reject, progress);\n                        }\n                    }\n                }\n\n                return ret;\n            });\n        }\n\n        /**\n        * Return a promise that will resolve only once all the supplied promisesOrValues\n        * have resolved. The resolution value of the returned promise will be an array\n        * containing the resolution values of each of the promisesOrValues.\n        *\n        * @memberOf when\n        *\n        * @param promisesOrValues {Array|Promise} array of anything, may contain a mix\n        *      of {@link Promise}s and values\n        * @param [callback] {Function}\n        * @param [errback] {Function}\n        * @param [progressHandler] {Function}\n        *\n        * @returns {Promise}\n        */\n        function all(promisesOrValues, callback, errback, progressHandler) {\n\n            checkCallbacks(1, arguments);\n\n            return when(promisesOrValues, function (promisesOrValues) {\n                return _reduce(promisesOrValues, reduceIntoArray, []);\n            }).then(callback, errback, progressHandler);\n        }\n\n        function reduceIntoArray(current, val, i) {\n            current[i] = val;\n            return current;\n        }\n\n        /**\n        * Return a promise that will resolve when any one of the supplied promisesOrValues\n        * has resolved. The resolution value of the returned promise will be the resolution\n        * value of the triggering promiseOrValue.\n        *\n        * @memberOf when\n        *\n        * @param promisesOrValues {Array|Promise} array of anything, may contain a mix\n        *      of {@link Promise}s and values\n        * @param [callback] {Function}\n        * @param [errback] {Function}\n        * @param [progressHandler] {Function}\n        *\n        * @returns {Promise}\n        */\n        function any(promisesOrValues, callback, errback, progressHandler) {\n\n            function unwrapSingleResult(val) {\n                return callback ? callback(val[0]) : val[0];\n            }\n\n            return some(promisesOrValues, 1, unwrapSingleResult, errback, progressHandler);\n        }\n\n        /**\n        * Traditional map function, similar to `Array.prototype.map()`, but allows\n        * input to contain {@link Promise}s and/or values, and mapFunc may return\n        * either a value or a {@link Promise}\n        *\n        * @memberOf when\n        *\n        * @param promise {Array|Promise} array of anything, may contain a mix\n        *      of {@link Promise}s and values\n        * @param mapFunc {Function} mapping function mapFunc(value) which may return\n        *      either a {@link Promise} or value\n        *\n        * @returns {Promise} a {@link Promise} that will resolve to an array containing\n        *      the mapped output values.\n        */\n        function map(promise, mapFunc) {\n            return when(promise, function (array) {\n                return _map(array, mapFunc);\n            });\n        }\n\n        /**\n        * Private map helper to map an array of promises\n        * @private\n        *\n        * @param promisesOrValues {Array}\n        * @param mapFunc {Function}\n        * @return {Promise}\n        */\n        function _map(promisesOrValues, mapFunc) {\n\n            var results, len, i;\n\n            // Since we know the resulting length, we can preallocate the results\n            // array to avoid array expansions.\n            len = promisesOrValues.length >>> 0;\n            results = new Array(len);\n\n            // Since mapFunc may be async, get all invocations of it into flight\n            // asap, and then use reduce() to collect all the results\n            for (i = 0; i < len; i++) {\n                if (i in promisesOrValues)\n                    results[i] = when(promisesOrValues[i], mapFunc);\n            }\n\n            // Could use all() here, but that would result in another array\n            // being allocated, i.e. map() would end up allocating 2 arrays\n            // of size len instead of just 1.  Since all() uses reduce()\n            // anyway, avoid the additional allocation by calling reduce\n            // directly.\n            return _reduce(results, reduceIntoArray, results);\n        }\n\n        /**\n        * Traditional reduce function, similar to `Array.prototype.reduce()`, but\n        * input may contain {@link Promise}s and/or values, and reduceFunc\n        * may return either a value or a {@link Promise}, *and* initialValue may\n        * be a {@link Promise} for the starting value.\n        *\n        * @memberOf when\n        *\n        * @param promise {Array|Promise} array of anything, may contain a mix\n        *      of {@link Promise}s and values.  May also be a {@link Promise} for\n        *      an array.\n        * @param reduceFunc {Function} reduce function reduce(currentValue, nextValue, index, total),\n        *      where total is the total number of items being reduced, and will be the same\n        *      in each call to reduceFunc.\n        * @param initialValue starting value, or a {@link Promise} for the starting value\n        *\n        * @returns {Promise} that will resolve to the final reduced value\n        */\n        function reduce(promise, reduceFunc, initialValue) {\n            var args = slice.call(arguments, 1);\n            return when(promise, function (array) {\n                return _reduce.apply(undef, [array].concat(args));\n            });\n        }\n\n        /**\n        * Private reduce to reduce an array of promises\n        * @private\n        *\n        * @param promisesOrValues {Array}\n        * @param reduceFunc {Function}\n        * @param initialValue {*}\n        * @return {Promise}\n        */\n        function _reduce(promisesOrValues, reduceFunc, initialValue) {\n\n            var total, args;\n\n            total = promisesOrValues.length;\n\n            // Skip promisesOrValues, since it will be used as 'this' in the call\n            // to the actual reduce engine below.\n\n            // Wrap the supplied reduceFunc with one that handles promises and then\n            // delegates to the supplied.\n\n            args = [\n\t\t\tfunction (current, val, i) {\n\t\t\t    return when(current, function (c) {\n\t\t\t        return when(val, function (value) {\n\t\t\t            return reduceFunc(c, value, i, total);\n\t\t\t        });\n\t\t\t    });\n\t\t\t}\n\t\t];\n\n            if (arguments.length > 2) args.push(initialValue);\n\n            return reduceArray.apply(promisesOrValues, args);\n        }\n\n        /**\n        * Ensure that resolution of promiseOrValue will complete resolver with the completion\n        * value of promiseOrValue, or instead with resolveValue if it is provided.\n        *\n        * @memberOf when\n        *\n        * @param promiseOrValue\n        * @param resolver {Resolver}\n        * @param [resolveValue] anything\n        *\n        * @returns {Promise}\n        */\n        function chain(promiseOrValue, resolver, resolveValue) {\n            var useResolveValue = arguments.length > 2;\n\n            return when(promiseOrValue,\n\t\t\tfunction (val) {\n\t\t\t    if (useResolveValue) val = resolveValue;\n\t\t\t    resolver.resolve(val);\n\t\t\t    return val;\n\t\t\t},\n\t\t\tfunction (e) {\n\t\t\t    resolver.reject(e);\n\t\t\t    return rejected(e);\n\t\t\t},\n\t\t\tresolver.progress\n\t\t);\n        }\n\n        //\n        // Utility functions\n        //\n\n        /**\n        * Helper that checks arrayOfCallbacks to ensure that each element is either\n        * a function, or null or undefined.\n        *\n        * @private\n        *\n        * @param arrayOfCallbacks {Array} array to check\n        * @throws {Error} if any element of arrayOfCallbacks is something other than\n        * a Functions, null, or undefined.\n        */\n        function checkCallbacks(start, arrayOfCallbacks) {\n            var arg, i = arrayOfCallbacks.length;\n            while (i > start) {\n                arg = arrayOfCallbacks[--i];\n                if (arg != null && typeof arg != 'function') throw new Error('callback is not a function');\n            }\n        }\n\n        /**\n        * No-Op function used in method replacement\n        * @private\n        */\n        function noop() { }\n\n        slice = [].slice;\n\n        // ES5 reduce implementation if native not available\n        // See: http://es5.github.com/#x15.4.4.21 as there are many\n        // specifics and edge cases.\n        reduceArray = [].reduce ||\n\t\tfunction (reduceFunc /*, initialValue */) {\n\t\t    // ES5 dictates that reduce.length === 1\n\n\t\t    // This implementation deviates from ES5 spec in the following ways:\n\t\t    // 1. It does not check if reduceFunc is a Callable\n\n\t\t    var arr, args, reduced, len, i;\n\n\t\t    i = 0;\n\t\t    arr = Object(this);\n\t\t    len = arr.length >>> 0;\n\t\t    args = arguments;\n\n\t\t    // If no initialValue, use first item of array (we know length !== 0 here)\n\t\t    // and adjust i to start at second item\n\t\t    if (args.length <= 1) {\n\t\t        // Skip to the first real element in the array\n\t\t        for (; ; ) {\n\t\t            if (i in arr) {\n\t\t                reduced = arr[i++];\n\t\t                break;\n\t\t            }\n\n\t\t            // If we reached the end of the array without finding any real\n\t\t            // elements, it's a TypeError\n\t\t            if (++i >= len) {\n\t\t                throw new TypeError();\n\t\t            }\n\t\t        }\n\t\t    } else {\n\t\t        // If initialValue provided, use it\n\t\t        reduced = args[1];\n\t\t    }\n\n\t\t    // Do the actual reduce\n\t\t    for (; i < len; ++i) {\n\t\t        // Skip holes\n\t\t        if (i in arr)\n\t\t            reduced = reduceFunc(reduced, arr[i], i, arr);\n\t\t    }\n\n\t\t    return reduced;\n\t\t};\n\n        return when;\n    });\n})(function (factory) {\n  jQuery.mapster_when = factory();\n});\n/*lint-ignore-end*/\n/* ImageMapster core */\n\n/*jslint laxbreak: true, evil: true, unparam: true */\n\n/*global jQuery: true, Zepto: true */\n\n\n(function ($) {\n    // all public functions in $.mapster.impl are methods\n    $.fn.mapster = function (method) {\n        var m = $.mapster.impl;\n        if ($.isFunction(m[method])) {\n            return m[method].apply(this, Array.prototype.slice.call(arguments, 1));\n        } else if (typeof method === 'object' || !method) {\n            return m.bind.apply(this, arguments);\n        } else {\n            $.error('Method ' + method + ' does not exist on jQuery.mapster');\n        }\n    };\n\n    $.mapster = {\n        version: \"1.2.10\",\n        render_defaults: {\n            isSelectable: true,\n            isDeselectable: true,\n            fade: false,\n            fadeDuration: 150,\n            fill: true,\n            fillColor: '000000',\n            fillColorMask: 'FFFFFF',\n            fillOpacity: 0.7,\n            highlight: true,\n            stroke: false,\n            strokeColor: 'ff0000',\n            strokeOpacity: 1,\n            strokeWidth: 1,\n            includeKeys: '',\n            altImage: null,\n            altImageId: null, // used internally\n            altImages: {}\n        },\n        defaults: {\n            clickNavigate: false,\n            wrapClass: null,\n            wrapCss: null,\n            onGetList: null,\n            sortList: false,\n            listenToList: false,\n            mapKey: '',\n            mapValue: '',\n            singleSelect: false,\n            listKey: 'value',\n            listSelectedAttribute: 'selected',\n            listSelectedClass: null,\n            onClick: null,\n            onMouseover: null,\n            onMouseout: null,\n            mouseoutDelay: 0,\n            onStateChange: null,\n            boundList: null,\n            onConfigured: null,\n            configTimeout: 30000,\n            noHrefIsMask: true,\n            scaleMap: true,\n            safeLoad: false,\n            areas: []\n        },\n        shared_defaults: {\n            render_highlight: { fade: true },\n            render_select: { fade: false },\n            staticState: null,\n            selected: null\n        },\n        area_defaults:\n        {\n            includeKeys: '',\n            isMask: false\n        },\n        canvas_style: {\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            padding: 0,\n            border: 0\n        },\n        hasCanvas: null,\n        isTouch: null,\n        map_cache: [],\n        hooks: {},\n        addHook: function(name,callback) {\n            this.hooks[name]=(this.hooks[name]||[]).push(callback);\n        },\n        callHooks: function(name,context) {\n            $.each(this.hooks[name]||[],function(i,e) {\n                e.apply(context);\n            });\n        },\n        utils: {\n            when: $.mapster_when,\n            defer: $.mapster_when.defer,\n\n            // extends the constructor, returns a new object prototype. Does not refer to the\n            // original constructor so is protected if the original object is altered. This way you\n            // can \"extend\" an object by replacing it with its subclass.\n            subclass: function(BaseClass, constr) {\n                var Subclass=function() {\n                    var me=this,\n                        args=Array.prototype.slice.call(arguments,0);\n                    me.base = BaseClass.prototype;\n                    me.base.init = function() {\n                        BaseClass.prototype.constructor.apply(me,args);\n                    };\n                    constr.apply(me,args);\n                };\n                Subclass.prototype = new BaseClass();\n                Subclass.prototype.constructor=Subclass;\n                return Subclass;\n            },\n            asArray: function (obj) {\n                return obj.constructor === Array ?\n                    obj : this.split(obj);\n            },\n            // clean split: no padding or empty elements\n            split: function (text,cb) {\n                var i,el, arr = text.split(',');\n                for (i = 0; i < arr.length; i++) {\n                    el = $.trim(arr[i]);\n                    if (el==='') {\n                        arr.splice(i,1);\n                    } else {\n                        arr[i] = cb ? cb(el):el;\n                    }\n                }\n                return arr;\n            },\n            // similar to $.extend but does not add properties (only updates), unless the\n            // first argument is an empty object, then all properties will be copied\n            updateProps: function (_target, _template) {\n                var onlyProps,\n                    target = _target || {},\n                    template = $.isEmptyObject(target) ? _template : _target;\n\n                //if (template) {\n                onlyProps = [];\n                $.each(template, function (prop) {\n                    onlyProps.push(prop);\n                });\n                //}\n\n                $.each(Array.prototype.slice.call(arguments, 1), function (i, src) {\n                    $.each(src || {}, function (prop) {\n                        if (!onlyProps || $.inArray(prop, onlyProps) >= 0) {\n                            var p = src[prop];\n\n                            if ($.isPlainObject(p)) {\n                                // not recursive - only copies 1 level of subobjects, and always merges\n                                target[prop] = $.extend(target[prop] || {}, p);\n                            } else if (p && p.constructor === Array) {\n                                target[prop] = p.slice(0);\n                            } else if (typeof p !== 'undefined') {\n                                target[prop] = src[prop];\n                            }\n\n                        }\n                    });\n                });\n                return target;\n            },\n            isElement: function (o) {\n                return (typeof HTMLElement === \"object\" ? o instanceof HTMLElement :\n                        o && typeof o === \"object\" && o.nodeType === 1 && typeof o.nodeName === \"string\");\n            },\n            // finds element of array or object with a property \"prop\" having value \"val\"\n            // if prop is not defined, then just looks for property with value \"val\"\n            indexOfProp: function (obj, prop, val) {\n                var result = obj.constructor === Array ? -1 : null;\n                $.each(obj, function (i, e) {\n                    if (e && (prop ? e[prop] : e) === val) {\n                        result = i;\n                        return false;\n                    }\n                });\n                return result;\n            },\n            // returns \"obj\" if true or false, or \"def\" if not true/false\n            boolOrDefault: function (obj, def) {\n                return this.isBool(obj) ?\n                        obj : def || false;\n            },\n            isBool: function (obj) {\n                return typeof obj === \"boolean\";\n            },\n            isUndef: function(obj) {\n                return typeof obj === \"undefined\";\n            },\n            // evaluates \"obj\", if function, calls it with args\n            // (todo - update this to handle variable lenght/more than one arg)\n            ifFunction: function (obj, that, args) {\n                if ($.isFunction(obj)) {\n                    obj.call(that, args);\n                }\n            },\n            size: function(image, raw) {\n                var u=$.mapster.utils;\n                return {\n                    width: raw ? (image.width || image.naturalWidth) : u.imgWidth(image,true) ,\n                    height: raw ? (image.height || image.naturalHeight) : u.imgHeight(image,true),\n                    complete: function() { return !!this.height && !!this.width;}\n                };\n            },\n\n\n            /**\n             * Set the opacity of the element. This is an IE<8 specific function for handling VML.\n             * When using VML we must override the \"setOpacity\" utility function (monkey patch ourselves).\n             * jQuery does not deal with opacity correctly for VML elements. This deals with that.\n             *\n             * @param {Element} el The DOM element\n             * @param {double} opacity A value between 0 and 1 inclusive.\n             */\n\n            setOpacity: function (el, opacity) {\n                if ($.mapster.hasCanvas()) {\n                    el.style.opacity = opacity;\n                } else {\n                    $(el).each(function(i,e) {\n                        if (typeof e.opacity !=='undefined') {\n                           e.opacity=opacity;\n                        } else {\n                            $(e).css(\"opacity\",opacity);\n                        }\n                    });\n                }\n            },\n\n\n            // fade \"el\" from opacity \"op\" to \"endOp\" over a period of time \"duration\"\n\n            fader: (function () {\n                var elements = {},\n                        lastKey = 0,\n                        fade_func = function (el, op, endOp, duration) {\n                            var index,\n                                cbIntervals = duration/15,\n                                obj, u = $.mapster.utils;\n\n                            if (typeof el === 'number') {\n                                obj = elements[el];\n                                if (!obj) {\n                                    return;\n                                }\n                            } else {\n                                index = u.indexOfProp(elements, null, el);\n                                if (index) {\n                                    delete elements[index];\n                                }\n                                elements[++lastKey] = obj = el;\n                                el = lastKey;\n                            }\n\n                            endOp = endOp || 1;\n\n                            op = (op + (endOp / cbIntervals) > endOp - 0.01) ? endOp : op + (endOp / cbIntervals);\n\n                            u.setOpacity(obj, op);\n                            if (op < endOp) {\n                                setTimeout(function () {\n                                    fade_func(el, op, endOp, duration);\n                                }, 15);\n                            }\n                        };\n                return fade_func;\n            } ())\n        },\n        getBoundList: function (opts, key_list) {\n            if (!opts.boundList) {\n                return null;\n            }\n            var index, key, result = $(), list = $.mapster.utils.split(key_list);\n            opts.boundList.each(function (i,e) {\n                for (index = 0; index < list.length; index++) {\n                    key = list[index];\n                    if ($(e).is('[' + opts.listKey + '=\"' + key + '\"]')) {\n                        result = result.add(e);\n                    }\n                }\n            });\n            return result;\n        },\n        // Causes changes to the bound list based on the user action (select or deselect)\n        // area: the jQuery area object\n        // returns the matching elements from the bound list for the first area passed (normally only one should be passed, but\n        // a list can be passed\n        setBoundListProperties: function (opts, target, selected) {\n            target.each(function (i,e) {\n                if (opts.listSelectedClass) {\n                    if (selected) {\n                        $(e).addClass(opts.listSelectedClass);\n                    } else {\n                        $(e).removeClass(opts.listSelectedClass);\n                    }\n                }\n                if (opts.listSelectedAttribute) {\n                    $(e).attr(opts.listSelectedAttribute, selected);\n                }\n            });\n        },\n        getMapDataIndex: function (obj) {\n            var img, id;\n            switch (obj.tagName && obj.tagName.toLowerCase()) {\n                case 'area':\n                    id = $(obj).parent().attr('name');\n                    img = $(\"img[usemap='#\" + id + \"']\")[0];\n                    break;\n                case 'img':\n                    img = obj;\n                    break;\n            }\n            return img ?\n                this.utils.indexOfProp(this.map_cache, 'image', img) : -1;\n        },\n        getMapData: function (obj) {\n            var index = this.getMapDataIndex(obj.length ? obj[0]:obj);\n            if (index >= 0) {\n                return index >= 0 ? this.map_cache[index] : null;\n            }\n        },\n        /**\n         * Queue a command to be run after the active async operation has finished\n         * @param  {MapData}  map_data    The target MapData object\n         * @param  {jQuery}   that        jQuery object on which the command was invoked\n         * @param  {string}   command     the ImageMapster method name\n         * @param  {object[]} args        arguments passed to the method\n         * @return {bool}                 true if the command was queued, false if not (e.g. there was no need to)\n         */\n        queueCommand: function (map_data, that, command, args) {\n            if (!map_data) {\n                return false;\n            }\n            if (!map_data.complete || map_data.currentAction) {\n                map_data.commands.push(\n                {\n                    that: that,\n                    command: command,\n                    args: args\n                });\n                return true;\n            }\n            return false;\n        },\n        unload: function () {\n            this.impl.unload();\n            this.utils = null;\n            this.impl = null;\n            $.fn.mapster = null;\n            $.mapster = null;\n            $('*').unbind();\n        }\n    };\n\n    // Config for object prototypes\n    // first: use only first object (for things that should not apply to lists)\n    /// calls back one of two fuinctions, depending on whether an area was obtained.\n    // opts: {\n    //    name: 'method name',\n    //    key: 'key,\n    //    args: 'args'\n    //\n    //}\n    // name: name of method (required)\n    // args: arguments to re-call with\n    // Iterates through all the objects passed, and determines whether it's an area or an image, and calls the appropriate\n    // callback for each. If anything is returned from that callback, the process is stopped and that data return. Otherwise,\n    // the object itself is returned.\n\n    var m = $.mapster,\n        u = m.utils,\n        ap = Array.prototype;\n\n\n    // jQuery's width() and height() are broken on IE9 in some situations. This tries everything.\n    $.each([\"width\",\"height\"],function(i,e) {\n        var capProp = e.substr(0,1).toUpperCase() + e.substr(1);\n        // when jqwidth parm is passed, it also checks the jQuery width()/height() property\n        // the issue is that jQUery width() can report a valid size before the image is loaded in some browsers\n        // without it, we can read zero even when image is loaded in other browsers if its not visible\n        // we must still check because stuff like adblock can temporarily block it\n        // what a goddamn headache\n        u[\"img\"+capProp]=function(img,jqwidth) {\n                return (jqwidth ? $(img)[e]() : 0) ||\n                    img[e] || img[\"natural\"+capProp] || img[\"client\"+capProp] || img[\"offset\"+capProp];\n        };\n\n    });\n\n    /**\n     * The Method object encapsulates the process of testing an ImageMapster method to see if it's being\n     * invoked on an image, or an area; then queues the command if the MapData is in an active state.\n     *\n     * @param {[jQuery]}    that        The target of the invocation\n     * @param {[function]}  func_map    The callback if the target is an imagemap\n     * @param {[function]}  func_area   The callback if the target is an area\n     * @param {[object]}    opt         Options: { key: a map key if passed explicitly\n     *                                             name: the command name, if it can be queued,\n     *                                             args: arguments to the method\n     *                                            }\n     */\n\n    m.Method = function (that, func_map, func_area, opts) {\n        var me = this;\n        me.name = opts.name;\n        me.output = that;\n        me.input = that;\n        me.first = opts.first || false;\n        me.args = opts.args ? ap.slice.call(opts.args, 0) : [];\n        me.key = opts.key;\n        me.func_map = func_map;\n        me.func_area = func_area;\n        //$.extend(me, opts);\n        me.name = opts.name;\n        me.allowAsync = opts.allowAsync || false;\n    };\n    m.Method.prototype = {\n        constructor: m.Method,\n        go: function () {\n            var i,  data, ar, len, result, src = this.input,\n                    area_list = [],\n                    me = this;\n\n            len = src.length;\n            for (i = 0; i < len; i++) {\n                data = $.mapster.getMapData(src[i]);\n                if (data) {\n                    if (!me.allowAsync && m.queueCommand(data, me.input, me.name, me.args)) {\n                        if (this.first) {\n                            result = '';\n                        }\n                        continue;\n                    }\n\n                    ar = data.getData(src[i].nodeName === 'AREA' ? src[i] : this.key);\n                    if (ar) {\n                        if ($.inArray(ar, area_list) < 0) {\n                            area_list.push(ar);\n                        }\n                    } else {\n                        result = this.func_map.apply(data, me.args);\n                    }\n                    if (this.first || typeof result !== 'undefined') {\n                        break;\n                    }\n                }\n            }\n            // if there were areas, call the area function for each unique group\n            $(area_list).each(function (i,e) {\n                result = me.func_area.apply(e, me.args);\n            });\n\n            if (typeof result !== 'undefined') {\n                return result;\n            } else {\n                return this.output;\n            }\n        }\n    };\n\n    $.mapster.impl = (function () {\n        var me = {},\n        addMap= function (map_data) {\n            return m.map_cache.push(map_data) - 1;\n        },\n        removeMap = function (map_data) {\n            m.map_cache.splice(map_data.index, 1);\n            for (var i = m.map_cache.length - 1; i >= this.index; i--) {\n                m.map_cache[i].index--;\n            }\n        };\n\n\n        /**\n         * Test whether the browser supports VML. Credit: google.\n         * http://stackoverflow.com/questions/654112/how-do-you-detect-support-for-vml-or-svg-in-a-browser\n         *\n         * @return {bool} true if vml is supported, false if not\n         */\n\n        function hasVml() {\n            var a = $('<div />').appendTo('body');\n            a.html('<v:shape id=\"vml_flag1\" adj=\"1\" />');\n\n            var b = a[0].firstChild;\n            b.style.behavior = \"url(#default#VML)\";\n            var has = b ? typeof b.adj === \"object\" : true;\n            a.remove();\n            return has;\n        }\n\n        /**\n         * Return a reference to the IE namespaces object, if available, or an empty object otherwise\n         * @return {obkect} The document.namespaces object.\n         */\n        function namespaces() {\n            return typeof(document.namespaces)==='object' ?\n                document.namespaces :\n                null;\n        }\n\n        /**\n         * Test for the presence of HTML5 Canvas support. This also checks to see if excanvas.js has been\n         * loaded and is faking it; if so, we assume that canvas is not supported.\n         *\n         * @return {bool} true if HTML5 canvas support, false if not\n         */\n\n        function hasCanvas() {\n            var d = namespaces();\n            // when g_vml_ is present, then we can be sure excanvas is active, meaning there's not a real canvas.\n\n             return d && d.g_vml_ ?\n                false :\n                $('<canvas />')[0].getContext ?\n                    true :\n                    false;\n        }\n\n        /**\n         * Merge new area data into existing area options on a MapData object. Used for rebinding.\n         *\n         * @param  {[MapData]} map_data     The MapData object\n         * @param  {[object[]]} areas       areas array to merge\n         */\n\n        function merge_areas(map_data, areas) {\n            var ar, index,\n                map_areas = map_data.options.areas;\n\n            if (areas) {\n                $.each(areas, function (i, e) {\n\n                    // Issue #68 - ignore invalid data in areas array\n\n                    if (!e || !e.key) {\n                        return;\n                    }\n\n                    index = u.indexOfProp(map_areas, \"key\", e.key);\n\n                    if (index >= 0) {\n                        $.extend(map_areas[index], e);\n                    }\n                    else {\n                        map_areas.push(e);\n                    }\n                    ar = map_data.getDataForKey(e.key);\n                    if (ar) {\n                        $.extend(ar.options, e);\n                    }\n                });\n            }\n        }\n        function merge_options(map_data, options) {\n            var temp_opts = u.updateProps({}, options);\n            delete temp_opts.areas;\n\n            u.updateProps(map_data.options, temp_opts);\n\n            merge_areas(map_data, options.areas);\n            // refresh the area_option template\n            u.updateProps(map_data.area_options, map_data.options);\n        }\n\n        // Most methods use the \"Method\" object which handles figuring out whether it's an image or area called and\n        // parsing key parameters. The constructor wants:\n        // this, the jQuery object\n        // a function that is called when an image was passed (with a this context of the MapData)\n        // a function that is called when an area was passed (with a this context of the AreaData)\n        // options: first = true means only the first member of a jQuery object is handled\n        //          key = the key parameters passed\n        //          defaultReturn: a value to return other than the jQuery object (if its not chainable)\n        //          args: the arguments\n        // Returns a comma-separated list of user-selected areas. \"staticState\" areas are not considered selected for the purposes of this method.\n\n        me.get = function (key) {\n            var md = m.getMapData(this);\n            if (!(md && md.complete)) {\n                throw(\"Can't access data until binding complete.\");\n            }\n\n            return (new m.Method(this,\n                function () {\n                    // map_data return\n                    return this.getSelected();\n                },\n                function () {\n                    return this.isSelected();\n                },\n                { name: 'get',\n                    args: arguments,\n                    key: key,\n                    first: true,\n                    allowAsync: true,\n                    defaultReturn: ''\n                }\n            )).go();\n        };\n        me.data = function (key) {\n            return (new m.Method(this,\n                null,\n                function () {\n                    return this;\n                },\n                { name: 'data',\n                    args: arguments,\n                    key: key\n                }\n            )).go();\n        };\n\n\n        // Set or return highlight state.\n        //  $(img).mapster('highlight') -- return highlighted area key, or null if none\n        //  $(area).mapster('highlight') -- highlight an area\n        //  $(img).mapster('highlight','area_key') -- highlight an area\n        //  $(img).mapster('highlight',false) -- remove highlight\n        me.highlight = function (key) {\n            return (new m.Method(this,\n                function () {\n                    if (key === false) {\n                        this.ensureNoHighlight();\n                    } else {\n                        var id = this.highlightId;\n                        return id >= 0 ? this.data[id].key : null;\n                    }\n                },\n                function () {\n                    this.highlight();\n                },\n                { name: 'highlight',\n                    args: arguments,\n                    key: key,\n                    first: true\n                }\n            )).go();\n        };\n        // Return the primary keys for an area or group key.\n        // $(area).mapster('key')\n        // includes all keys (not just primary keys)\n        // $(area).mapster('key',true)\n        // $(img).mapster('key','group-key')\n\n        // $(img).mapster('key','group-key', true)\n        me.keys = function(key,all) {\n            var keyList=[],\n                md = m.getMapData(this);\n\n            if (!(md && md.complete)) {\n                throw(\"Can't access data until binding complete.\");\n            }\n\n\n            function addUniqueKeys(ad) {\n                var areas,keys=[];\n                if (!all) {\n                    keys.push(ad.key);\n                } else {\n                    areas=ad.areas();\n                    $.each(areas,function(i,e) {\n                        keys=keys.concat(e.keys);\n                    });\n                }\n                $.each(keys,function(i,e) {\n                    if ($.inArray(e,keyList)<0) {\n                        keyList.push(e);\n                    }\n                });\n            }\n\n            if (!(md  && md.complete)) {\n                return '';\n            }\n            if (typeof key === 'string') {\n                if (all) {\n                    addUniqueKeys(md.getDataForKey(key));\n                } else {\n                    keyList=[md.getKeysForGroup(key)];\n                }\n            } else {\n                all = key;\n                this.each(function(i,e) {\n                    if (e.nodeName==='AREA') {\n                        addUniqueKeys(md.getDataForArea(e));\n                    }\n                });\n            }\n            return keyList.join(',');\n\n\n        };\n        me.select = function () {\n            me.set.call(this, true);\n        };\n        me.deselect = function () {\n            me.set.call(this, false);\n        };\n\n        /**\n         * Select or unselect areas. Areas can be identified by a single string key, a comma-separated list of keys,\n         * or an array of strings.\n         *\n         *\n         * @param {boolean} selected Determines whether areas are selected or deselected\n         * @param {string|string[]} key A string, comma-separated string, or array of strings indicating\n         *                              the areas to select or deselect\n         * @param {object} options Rendering options to apply when selecting an area\n         */\n\n        me.set = function (selected, key, options) {\n            var lastMap, map_data, opts=options,\n                key_list, area_list; // array of unique areas passed\n\n            function setSelection(ar) {\n                if (ar) {\n                    switch (selected) {\n                        case true:\n                            ar.select(opts); break;\n                        case false:\n                            ar.deselect(true); break;\n                        default:\n                            ar.toggle(opts); break;\n                    }\n                }\n            }\n            function addArea(ar) {\n               if (ar && $.inArray(ar, area_list) < 0) {\n                    area_list.push(ar);\n                    key_list+=(key_list===''?'':',')+ar.key;\n                }\n            }\n            // Clean up after a group that applied to the same map\n            function finishSetForMap(map_data) {\n                $.each(area_list, function (i, el) {\n                    setSelection(el);\n                });\n                if (!selected) {\n                    map_data.removeSelectionFinish();\n                }\n                if (map_data.options.boundList) {\n                    m.setBoundListProperties(map_data.options, m.getBoundList(map_data.options, key_list), selected);\n                }\n            }\n\n            this.filter('img,area').each(function (i,e) {\n                var keys;\n                map_data = m.getMapData(e);\n\n                if (map_data !== lastMap) {\n                    if (lastMap) {\n                       finishSetForMap(lastMap);\n                    }\n\n                    area_list = [];\n                    key_list='';\n                }\n\n               if (map_data) {\n\n                    keys = '';\n                    if (e.nodeName.toUpperCase()==='IMG') {\n                        if (!m.queueCommand(map_data, $(e), 'set', [selected, key, opts])) {\n                            if (key instanceof Array) {\n                                if (key.length) {\n                                    keys = key.join(\",\");\n                                }\n                            }\n                            else {\n                                keys = key;\n                            }\n\n                            if (keys) {\n                                $.each(u.split(keys), function (i,key) {\n                                    addArea(map_data.getDataForKey(key.toString()));\n                                    lastMap = map_data;\n                                });\n                            }\n                        }\n                    } else {\n                        opts=key;\n                        if (!m.queueCommand(map_data, $(e), 'set', [selected, opts])) {\n                            addArea(map_data.getDataForArea(e));\n                            lastMap = map_data;\n                        }\n\n                    }\n                }\n            });\n\n            if (map_data) {\n               finishSetForMap(map_data);\n            }\n\n\n            return this;\n        };\n        me.unbind = function (preserveState) {\n            return (new m.Method(this,\n                function () {\n                    this.clearEvents();\n                    this.clearMapData(preserveState);\n                    removeMap(this);\n                },\n                null,\n                { name: 'unbind',\n                    args: arguments\n                }\n            )).go();\n        };\n\n\n        // refresh options and update selection information.\n        me.rebind = function (options) {\n            return (new m.Method(this,\n                function () {\n                    var me=this;\n\n                    me.complete=false;\n                    me.configureOptions(options);\n                    me.bindImages().then(function() {\n                        me.buildDataset(true);\n                        me.complete=true;\n                    });\n                    //this.redrawSelections();\n                },\n                null,\n                {\n                    name: 'rebind',\n                    args: arguments\n                }\n            )).go();\n        };\n        // get options. nothing or false to get, or \"true\" to get effective options (versus passed options)\n        me.get_options = function (key, effective) {\n            var eff = u.isBool(key) ? key : effective; // allow 2nd parm as \"effective\" when no key\n            return (new m.Method(this,\n                function () {\n                    var opts = $.extend({}, this.options);\n                    if (eff) {\n                        opts.render_select = u.updateProps(\n                            {},\n                            m.render_defaults,\n                            opts,\n                            opts.render_select);\n\n                        opts.render_highlight = u.updateProps(\n                            {},\n                            m.render_defaults,\n                            opts,\n                            opts.render_highlight);\n                    }\n                    return opts;\n                },\n                function () {\n                    return eff ? this.effectiveOptions() : this.options;\n                },\n                {\n                    name: 'get_options',\n                    args: arguments,\n                    first: true,\n                    allowAsync: true,\n                    key: key\n                }\n            )).go();\n        };\n\n        // set options - pass an object with options to set,\n        me.set_options = function (options) {\n            return (new m.Method(this,\n                function () {\n                    merge_options(this, options);\n                },\n                null,\n                {\n                    name: 'set_options',\n                    args: arguments\n                }\n            )).go();\n        };\n        me.unload = function () {\n            var i;\n            for (i = m.map_cache.length - 1; i >= 0; i--) {\n                if (m.map_cache[i]) {\n                    me.unbind.call($(m.map_cache[i].image));\n                }\n            }\n            me.graphics = null;\n        };\n\n        me.snapshot = function () {\n            return (new m.Method(this,\n                function () {\n                    $.each(this.data, function (i, e) {\n                        e.selected = false;\n                    });\n\n                    this.base_canvas = this.graphics.createVisibleCanvas(this);\n                    $(this.image).before(this.base_canvas);\n                },\n                null,\n                { name: 'snapshot' }\n            )).go();\n        };\n\n        // do not queue this function\n\n        me.state = function () {\n            var md, result = null;\n            $(this).each(function (i,e) {\n                if (e.nodeName === 'IMG') {\n                    md = m.getMapData(e);\n                    if (md) {\n                        result = md.state();\n                    }\n                    return false;\n                }\n            });\n            return result;\n        };\n\n        me.bind = function (options) {\n\n            return this.each(function (i,e) {\n                var img, map, usemap, md;\n\n                // save ref to this image even if we can't access it yet. commands will be queued\n                img = $(e);\n\n                md = m.getMapData(e);\n\n                // if already bound completely, do a total rebind\n\n                if (md) {\n                    me.unbind.apply(img);\n                    if (!md.complete) {\n                        // will be queued\n                        img.bind();\n                        return true;\n                    }\n                    md = null;\n                }\n\n                // ensure it's a valid image\n                // jQuery bug with Opera, results in full-url#usemap being returned from jQuery's attr.\n                // So use raw getAttribute instead.\n\n                usemap = this.getAttribute('usemap');\n                map = usemap && $('map[name=\"' + usemap.substr(1) + '\"]');\n                if (!(img.is('img') && usemap && map.size() > 0)) {\n                    return true;\n                }\n\n                // sorry - your image must have border:0, things are too unpredictable otherwise.\n                img.css('border', 0);\n\n                if (!md) {\n                    md = new m.MapData(this, options);\n\n                    md.index = addMap(md);\n                    md.map = map;\n                    md.bindImages().then(function() {\n                        md.initialize();\n                    });\n                }\n            });\n        };\n\n        me.init = function (useCanvas) {\n            var style, shapes;\n\n            // for testing/debugging, use of canvas can be forced by initializing\n            // manually with \"true\" or \"false\". But generally we test for it.\n\n            m.hasCanvas = function() {\n                if (!u.isBool(m.hasCanvas.value)) {\n                    m.hasCanvas.value = u.isBool(useCanvas) ?\n                        useCanvas :\n                        hasCanvas();\n                }\n                return m.hasCanvas.value;\n            };\n            m.hasVml = function() {\n                if (!u.isBool(m.hasVml.value)) {\n                    // initialize VML the first time we detect its presence.\n                    var d = namespaces();\n\n                    if (d && !d.v) {\n                        d.add(\"v\", \"urn:schemas-microsoft-com:vml\");\n                        style = document.createStyleSheet();\n                        shapes = ['shape', 'rect', 'oval', 'circ', 'fill', 'stroke', 'imagedata', 'group', 'textbox'];\n                        $.each(shapes,\n                        function (i, el) {\n                            style.addRule('v\\\\:' + el, \"behavior: url(#default#VML); antialias:true\");\n                        });\n                    }\n                    m.hasVml.value = hasVml();\n                }\n\n                return m.hasVml.value;\n            };\n\n            m.isTouch = !!document.documentElement.ontouchstart;\n\n            $.extend(m.defaults, m.render_defaults,m.shared_defaults);\n            $.extend(m.area_defaults, m.render_defaults,m.shared_defaults);\n\n        };\n        me.test = function (obj) {\n            return eval(obj);\n        };\n        return me;\n    } ());\n\n    $.mapster.impl.init();\n\n\n} (jQuery));\n/* graphics.js\n   Graphics object handles all rendering.\n*/\n(function ($) {\n    var p, m=$.mapster,\n        u=m.utils,\n        canvasMethods,\n        vmlMethods;\n\n    /**\n     * Implemenation to add each area in an AreaData object to the canvas\n     * @param {Graphics} graphics The target graphics object\n     * @param {AreaData} areaData The AreaData object (a collection of area elements and metadata)\n     * @param {object} options Rendering options to apply when rendering this group of areas\n     */\n    function addShapeGroupImpl(graphics, areaData, options) {\n        var me = graphics,\n            md = me.map_data,\n            isMask = options.isMask;\n\n        // first get area options. Then override fade for selecting, and finally merge in the\n        // \"select\" effect options.\n\n        $.each(areaData.areas(), function (i,e) {\n            options.isMask = isMask || (e.nohref && md.options.noHrefIsMask);\n            me.addShape(e, options);\n        });\n\n        // it's faster just to manipulate the passed options isMask property and restore it, than to\n        // copy the object each time\n\n        options.isMask=isMask;\n\n    }\n\n     /**\n     * Convert a hex value to decimal\n     * @param  {string} hex A hexadecimal toString\n     * @return {int} Integer represenation of the hex string\n     */\n\n    function hex_to_decimal(hex) {\n        return Math.max(0, Math.min(parseInt(hex, 16), 255));\n    }\n    function css3color(color, opacity) {\n        return 'rgba(' + hex_to_decimal(color.substr(0, 2)) + ','\n                + hex_to_decimal(color.substr(2, 2)) + ','\n                + hex_to_decimal(color.substr(4, 2)) + ',' + opacity + ')';\n    }\n    /**\n     * An object associated with a particular map_data instance to manage renderin.\n     * @param {MapData} map_data The MapData object bound to this instance\n     */\n\n    m.Graphics = function (map_data) {\n        //$(window).unload($.mapster.unload);\n        // create graphics functions for canvas and vml browsers. usage:\n        // 1) init with map_data, 2) call begin with canvas to be used (these are separate b/c may not require canvas to be specified\n        // 3) call add_shape_to for each shape or mask, 4) call render() to finish\n\n        var me = this;\n        me.active = false;\n        me.canvas = null;\n        me.width = 0;\n        me.height = 0;\n        me.shapes = [];\n        me.masks = [];\n        me.map_data = map_data;\n    };\n\n    p = m.Graphics.prototype= {\n        constructor: m.Graphics,\n\n        /**\n         * Initiate a graphics request for a canvas\n         * @param  {Element} canvas The canvas element that is the target of this operation\n         * @param  {string} [elementName] The name to assign to the element (VML only)\n         */\n\n        begin: function(canvas, elementName) {\n            var c = $(canvas);\n\n            this.elementName = elementName;\n            this.canvas = canvas;\n\n            this.width = c.width();\n            this.height = c.height();\n            this.shapes = [];\n            this.masks = [];\n            this.active = true;\n\n        },\n\n        /**\n         * Add an area to be rendered to this canvas.\n         * @param {MapArea} mapArea The MapArea object to render\n         * @param {object} options An object containing any rendering options that should override the\n         *                         defaults for the area\n         */\n\n        addShape: function(mapArea, options) {\n            var addto = options.isMask ? this.masks : this.shapes;\n            addto.push({ mapArea: mapArea, options: options });\n        },\n\n        /**\n         * Create a canvas that is sized and styled for the MapData object\n         * @param  {MapData} mapData The MapData object that will receive this new canvas\n         * @return {Element} A canvas element\n         */\n\n        createVisibleCanvas: function (mapData) {\n            return $(this.createCanvasFor(mapData))\n                .addClass('mapster_el')\n                .css(m.canvas_style)[0];\n        },\n\n        /**\n         * Add a group of shapes from an AreaData object to the canvas\n         *\n         * @param {AreaData} areaData An AreaData object (a set of area elements)\n         * @param {string} mode     The rendering mode, \"select\" or \"highlight\". This determines the target\n         *                          canvas and which default options to use.\n         * @param {striong} options  Rendering options\n         */\n\n        addShapeGroup: function (areaData, mode,options) {\n            // render includeKeys first - because they could be masks\n            var me = this,\n                list, name, canvas,\n                map_data = this.map_data,\n                opts = areaData.effectiveRenderOptions(mode);\n\n            if (options) {\n                 $.extend(opts,options);\n            }\n\n            if (mode === 'select') {\n                name = \"static_\" + areaData.areaId.toString();\n                canvas = map_data.base_canvas;\n            } else {\n                canvas = map_data.overlay_canvas;\n            }\n\n            me.begin(canvas, name);\n\n            if (opts.includeKeys) {\n                list = u.split(opts.includeKeys);\n                $.each(list, function (i,e) {\n                    var areaData = map_data.getDataForKey(e.toString());\n                    addShapeGroupImpl(me,areaData, areaData.effectiveRenderOptions(mode));\n                });\n            }\n\n            addShapeGroupImpl(me,areaData, opts);\n            me.render();\n            if (opts.fade) {\n\n                // fading requires special handling for IE. We must access the fill elements directly. The fader also has to deal with\n                // the \"opacity\" attribute (not css)\n\n                u.fader(m.hasCanvas() ?\n                    canvas :\n                    $(canvas).find('._fill').not('.mapster_mask'),\n                0,\n                m.hasCanvas() ?\n                    1 :\n                    opts.fillOpacity,\n                opts.fadeDuration);\n\n            }\n\n        }\n\n        // These prototype methods are implementation dependent\n    };\n\n    function noop() {}\n\n\n    // configure remaining prototype methods for ie or canvas-supporting browser\n\n    canvasMethods = {\n        renderShape: function (context, mapArea, offset) {\n            var i,\n                c = mapArea.coords(null,offset);\n\n            switch (mapArea.shape) {\n                case 'rect':\n                    context.rect(c[0], c[1], c[2] - c[0], c[3] - c[1]);\n                    break;\n                case 'poly':\n                    context.moveTo(c[0], c[1]);\n\n                    for (i = 2; i < mapArea.length; i += 2) {\n                        context.lineTo(c[i], c[i + 1]);\n                    }\n                    context.lineTo(c[0], c[1]);\n                    break;\n                case 'circ':\n                case 'circle':\n                    context.arc(c[0], c[1], c[2], 0, Math.PI * 2, false);\n                    break;\n            }\n        },\n        addAltImage: function (context, image, mapArea, options) {\n            context.beginPath();\n\n            this.renderShape(context, mapArea);\n            context.closePath();\n            context.clip();\n\n            context.globalAlpha = options.altImageOpacity || options.fillOpacity;\n\n            context.drawImage(image, 0, 0, mapArea.owner.scaleInfo.width, mapArea.owner.scaleInfo.height);\n        },\n        render: function () {\n            // firefox 6.0 context.save() seems to be broken. to work around,  we have to draw the contents on one temp canvas,\n            // the mask on another, and merge everything. ugh. fixed in 1.2.2. unfortunately this is a lot more code for masks,\n            // but no other way around it that i can see.\n\n            var maskCanvas, maskContext,\n                        me = this,\n                        md = me.map_data,\n                        hasMasks = me.masks.length,\n                        shapeCanvas = me.createCanvasFor(md),\n                        shapeContext = shapeCanvas.getContext('2d'),\n                        context = me.canvas.getContext('2d');\n\n            if (hasMasks) {\n                maskCanvas = me.createCanvasFor(md);\n                maskContext = maskCanvas.getContext('2d');\n                maskContext.clearRect(0, 0, maskCanvas.width, maskCanvas.height);\n\n                $.each(me.masks, function (i,e) {\n                    maskContext.save();\n                    maskContext.beginPath();\n                    me.renderShape(maskContext, e.mapArea);\n                    maskContext.closePath();\n                    maskContext.clip();\n                    maskContext.lineWidth = 0;\n                    maskContext.fillStyle = '#000';\n                    maskContext.fill();\n                    maskContext.restore();\n                });\n\n            }\n\n            $.each(me.shapes, function (i,s) {\n                shapeContext.save();\n                if (s.options.fill) {\n                    if (s.options.altImageId) {\n                        me.addAltImage(shapeContext, md.images[s.options.altImageId], s.mapArea, s.options);\n                    } else {\n                        shapeContext.beginPath();\n                        me.renderShape(shapeContext, s.mapArea);\n                        shapeContext.closePath();\n                        //shapeContext.clip();\n                        shapeContext.fillStyle = css3color(s.options.fillColor, s.options.fillOpacity);\n                        shapeContext.fill();\n                    }\n                }\n                shapeContext.restore();\n            });\n\n\n            // render strokes at end since masks get stroked too\n\n            $.each(me.shapes.concat(me.masks), function (i,s) {\n                var offset = s.options.strokeWidth === 1 ? 0.5 : 0;\n                // offset applies only when stroke width is 1 and stroke would render between pixels.\n\n                if (s.options.stroke) {\n                    shapeContext.save();\n                    shapeContext.strokeStyle = css3color(s.options.strokeColor, s.options.strokeOpacity);\n                    shapeContext.lineWidth = s.options.strokeWidth;\n\n                    shapeContext.beginPath();\n\n                    me.renderShape(shapeContext, s.mapArea, offset);\n                    shapeContext.closePath();\n                    shapeContext.stroke();\n                    shapeContext.restore();\n                }\n            });\n\n            if (hasMasks) {\n                // render the new shapes against the mask\n\n                maskContext.globalCompositeOperation = \"source-out\";\n                maskContext.drawImage(shapeCanvas, 0, 0);\n\n                // flatten into the main canvas\n                context.drawImage(maskCanvas, 0, 0);\n            } else {\n                context.drawImage(shapeCanvas, 0, 0);\n            }\n\n            me.active = false;\n            return me.canvas;\n        },\n\n        // create a canvas mimicing dimensions of an existing element\n        createCanvasFor: function (md) {\n            return $('<canvas width=\"' + md.scaleInfo.width + '\" height=\"' +md.scaleInfo.height + '\"></canvas>')[0];\n        },\n        clearHighlight: function () {\n            var c = this.map_data.overlay_canvas;\n            c.getContext('2d').clearRect(0, 0, c.width, c.height);\n        },\n        // Draw all items from selected_list to a new canvas, then swap with the old one. This is used to delete items when using canvases.\n        refreshSelections: function () {\n            var canvas_temp, map_data = this.map_data;\n            // draw new base canvas, then swap with the old one to avoid flickering\n            canvas_temp = map_data.base_canvas;\n\n            map_data.base_canvas = this.createVisibleCanvas(map_data);\n            $(map_data.base_canvas).hide();\n            $(canvas_temp).before(map_data.base_canvas);\n\n            map_data.redrawSelections();\n\n            $(map_data.base_canvas).show();\n            $(canvas_temp).remove();\n        }\n    };\n\n    vmlMethods = {\n\n        renderShape: function (mapArea, options, cssclass) {\n            var me = this, fill,stroke, e, t_fill, el_name, el_class, template, c = mapArea.coords();\n            el_name = me.elementName ? 'name=\"' + me.elementName + '\" ' : '';\n            el_class = cssclass ? 'class=\"' + cssclass + '\" ' : '';\n\n            t_fill = '<v:fill color=\"#' + options.fillColor + '\" class=\"_fill\" opacity=\"' +\n                (options.fill ?\n                    options.fillOpacity :\n                    0) +\n                '\" /><v:stroke class=\"_fill\" opacity=\"' +\n                options.strokeOpacity + '\"/>';\n\n\n            stroke = options.stroke ?\n                ' strokeweight=' + options.strokeWidth + ' stroked=\"t\" strokecolor=\"#' +\n                    options.strokeColor + '\"' :\n                ' stroked=\"f\"';\n\n            fill = options.fill ?\n                ' filled=\"t\"' :\n                ' filled=\"f\"';\n\n            switch (mapArea.shape) {\n                case 'rect':\n                    template = '<v:rect ' + el_class + el_name + fill + stroke +\n                        ' style=\"zoom:1;margin:0;padding:0;display:block;position:absolute;left:' +\n                          c[0] + 'px;top:' + c[1]  + 'px;width:' + (c[2] - c[0]) +\n                          'px;height:' + (c[3] - c[1]) + 'px;\">' + t_fill + '</v:rect>';\n                    break;\n                case 'poly':\n                    template = '<v:shape ' + el_class + el_name + fill + stroke + ' coordorigin=\"0,0\" coordsize=\"' + me.width + ',' + me.height\n                                + '\" path=\"m ' + c[0] + ',' + c[1] + ' l ' + c.slice(2).join(',')\n                                + ' x e\" style=\"zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:' + me.width + 'px;height:' + me.height + 'px;\">' + t_fill + '</v:shape>';\n                    break;\n                case 'circ':\n                case 'circle':\n                    template = '<v:oval ' + el_class + el_name + fill + stroke\n                                + ' style=\"zoom:1;margin:0;padding:0;display:block;position:absolute;left:' + (c[0] - c[2]) + 'px;top:' + (c[1] - c[2])\n                                + 'px;width:' + (c[2] * 2) + 'px;height:' + (c[2] * 2) + 'px;\">' + t_fill + '</v:oval>';\n                    break;\n            }\n            e = $(template);\n            $(me.canvas).append(e);\n\n            return e;\n        },\n        render: function () {\n            var opts, me = this;\n\n            $.each(this.shapes, function (i,e) {\n                me.renderShape(e.mapArea, e.options);\n            });\n\n            if (this.masks.length) {\n                $.each(this.masks, function (i,e) {\n                    opts = u.updateProps({},\n                        e.options, {\n                            fillOpacity: 1,\n                            fillColor: e.options.fillColorMask\n                        });\n                    me.renderShape(e.mapArea, opts, 'mapster_mask');\n                });\n            }\n\n            this.active = false;\n            return this.canvas;\n        },\n\n        createCanvasFor: function (md) {\n            var w = md.scaleInfo.width,\n                h = md.scaleInfo.height;\n            return $('<var width=\"' + w + '\" height=\"' + h\n                + '\" style=\"zoom:1;overflow:hidden;display:block;width:'\n                + w + 'px;height:' + h + 'px;\"></var>')[0];\n        },\n\n        clearHighlight: function () {\n            $(this.map_data.overlay_canvas).children().remove();\n        },\n        // remove single or all selections\n        removeSelections: function (area_id) {\n            if (area_id >= 0) {\n                $(this.map_data.base_canvas).find('[name=\"static_' + area_id.toString() + '\"]').remove();\n            }\n            else {\n                $(this.map_data.base_canvas).children().remove();\n            }\n        }\n\n    };\n\n    // for all methods with two implemenatations, add a function that will automatically replace itself with the correct\n    // method on first invocation\n\n    $.each(['renderShape',\n           'addAltImage',\n           'render',\n           'createCanvasFor',\n           'clearHighlight',\n           'removeSelections',\n           'refreshSelections'],\n        function(i,e) {\n            p[e]=(function(method) {\n                return function() {\n                    p[method] = (m.hasCanvas() ?\n                        canvasMethods[method] :\n                        vmlMethods[method]) || noop;\n\n                    return p[method].apply(this,arguments);\n                };\n            }(e));\n    });\n\n\n} (jQuery));\n/* mapimage.js\n   the MapImage object, repesents an instance of a single bound imagemap\n*/\n\n(function ($) {\n\n    var m = $.mapster,\n        u = m.utils,\n        ap=[];\n    /**\n     * An object encapsulating all the images used by a MapData.\n     */\n\n    m.MapImages = function(owner) {\n        this.owner = owner;\n        this.clear();\n    };\n\n\n    m.MapImages.prototype = {\n        constructor: m.MapImages,\n\n        /* interface to make this array-like */\n\n        slice: function() {\n            return ap.slice.apply(this,arguments);\n        },\n        splice: function() {\n            ap.slice.apply(this.status,arguments);\n            var result= ap.slice.apply(this,arguments);\n            return result;\n        },\n\n        /**\n         * a boolean value indicates whether all images are done loading\n         * @return {bool} true when all are done\n         */\n        complete: function() {\n            return $.inArray(false, this.status) < 0;\n        },\n\n        /**\n         * Save an image in the images array and return its index\n         * @param  {Image} image An Image object\n         * @return {int} the index of the image\n         */\n\n        _add: function(image) {\n            var index = ap.push.call(this,image)-1;\n            this.status[index] = false;\n            return index;\n        },\n\n        /**\n         * Return the index of an Image within the images array\n         * @param  {Image} img An Image\n         * @return {int} the index within the array, or -1 if it was not found\n         */\n\n        indexOf: function(image) {\n            return $.inArray(image, this);\n        },\n\n        /**\n         * Clear this object and reset it to its initial state after binding.\n         */\n\n        clear: function() {\n            var me=this;\n\n            if (me.ids && me.ids.length>0) {\n                $.each(me.ids,function(i,e) {\n                    delete me[e];\n                });\n            }\n\n            /**\n             * A list of the cross-reference IDs bound to this object\n             * @type {string[]}\n             */\n\n            me.ids=[];\n\n            /**\n             * Length property for array-like behavior, set to zero when initializing. Array prototype\n             * methods will update it after that.\n             *\n             * @type {int}\n             */\n\n            me.length=0;\n\n            /**\n             * the loaded status of the corresponding image\n             * @type {boolean[]}\n             */\n\n            me.status=[];\n\n\n            // actually erase the images\n\n            me.splice(0);\n\n        },\n\n        /**\n         * Bind an image to the map and add it to the queue to be loaded; return an ID that\n         * can be used to reference the\n         *\n         * @param {Image|string} image An Image object or a URL to an image\n         * @param {string} [id] An id to refer to this image\n         * @returns {int} an ID referencing the index of the image object in\n         *                map_data.images\n         */\n\n        add: function(image,id) {\n            var index,src,me = this;\n\n            if (!image) { return; }\n\n            if (typeof image === 'string') {\n                src = image;\n                image = me[src];\n                if (typeof image==='object') {\n                    return me.indexOf(image);\n                }\n\n                image = $('<img />')\n                    .addClass('mapster_el')\n                    .hide();\n\n                index=me._add(image[0]);\n\n                image\n                    .bind('load',function(e) {\n                        me.imageLoaded.call(me,e);\n                    })\n                    .bind('error',function(e) {\n                        me.imageLoadError.call(me,e);\n                    });\n\n                image.attr('src', src);\n            } else {\n\n                // use attr because we want the actual source, not the resolved path the browser will return directly calling image.src\n\n                index=me._add($(image)[0]);\n            }\n            if (id) {\n                if (this[id]) {\n                    throw(id+\" is already used or is not available as an altImage alias.\");\n                }\n                me.ids.push(id);\n                me[id]=me[index];\n            }\n            return index;\n        },\n\n        /**\n         * Bind the images in this object,\n         * @param  {boolean} retry when true, indicates that the function is calling itself after failure\n         * @return {Promise} a promise that resolves when the images have finished loading\n         */\n\n        bind: function(retry) {\n            var me = this,\n                promise,\n                triesLeft = me.owner.options.configTimeout / 200,\n\n            /* A recursive function to continue checking that the images have been\n               loaded until a timeout has elapsed */\n\n            check=function() {\n                var i;\n\n                // refresh status of images\n\n                i=me.length;\n\n                while (i-->0) {\n                    if (!me.isLoaded(i)) {\n                        break;\n                    }\n                }\n\n                // check to see if every image has already been loaded\n\n                if (me.complete()) {\n                    me.resolve();\n                } else {\n                    // to account for failure of onLoad to fire in rare situations\n                    if (triesLeft-- > 0) {\n                        me.imgTimeout=window.setTimeout(function() {\n                            check.call(me,true);\n                        }, 50);\n                    } else {\n                        me.imageLoadError.call(me);\n                    }\n                }\n\n            };\n\n            promise = me.deferred=u.defer();\n\n            check();\n            return promise;\n        },\n\n        resolve: function() {\n            var me=this,\n                resolver=me.deferred;\n\n            if (resolver) {\n                // Make a copy of the resolver before calling & removing it to ensure\n                // it is not called twice\n                me.deferred=null;\n                resolver.resolve();\n            }\n        },\n\n        /**\n         * Event handler for image onload\n         * @param  {object} e jQuery event data\n         */\n\n        imageLoaded: function(e) {\n            var me=this,\n                index = me.indexOf(e.target);\n\n            if (index>=0) {\n\n                me.status[index] = true;\n                if ($.inArray(false, me.status) < 0) {\n                    me.resolve();\n                }\n            }\n        },\n\n        /**\n         * Event handler for onload error\n         * @param  {object} e jQuery event data\n         */\n\n        imageLoadError: function(e) {\n            clearTimeout(this.imgTimeout);\n            this.triesLeft=0;\n            var err = e ? 'The image ' + e.target.src + ' failed to load.' :\n                'The images never seemed to finish loading. You may just need to increase the configTimeout if images could take a long time to load.';\n            throw err;\n        },\n        /**\n         * Test if the image at specificed index has finished loading\n         * @param  {int}  index The image index\n         * @return {boolean} true if loaded, false if not\n         */\n\n        isLoaded: function(index) {\n            var img,\n                me=this,\n                status=me.status;\n\n            if (status[index]) { return true; }\n            img = me[index];\n\n            if (typeof img.complete !== 'undefined') {\n                status[index]=img.complete;\n            } else {\n                status[index]=!!u.imgWidth(img);\n            }\n            // if complete passes, the image is loaded, but may STILL not be available because of stuff like adblock.\n            // make sure it is.\n\n            return status[index];\n        }\n    };\n    } (jQuery));\n/* mapdata.js\n   the MapData object, repesents an instance of a single bound imagemap\n*/\n\n\n(function ($) {\n\n    var m = $.mapster,\n        u = m.utils;\n\n    /**\n     * Set default values for MapData object properties\n     * @param  {MapData} me The MapData object\n     */\n\n    function initializeDefaults(me) {\n        $.extend(me,{\n            complete: false,         // (bool)    when configuration is complete\n            map: null,                // ($)      the image map\n            base_canvas: null,       // (canvas|var)  where selections are rendered\n            overlay_canvas: null,    // (canvas|var)  where highlights are rendered\n            commands: [],            // {}        commands that were run before configuration was completed (b/c images weren't loaded)\n            data: [],                // MapData[] area groups\n            mapAreas: [],            // MapArea[] list. AreaData entities contain refs to this array, so options are stored with each.\n            _xref: {},               // (int)      xref of mapKeys to data[]\n            highlightId: -1,        // (int)      the currently highlighted element.\n            currentAreaId: -1,\n            _tooltip_events: [],     // {}         info on events we bound to a tooltip container, so we can properly unbind them\n            scaleInfo: null,         // {}         info about the image size, scaling, defaults\n            index: -1,                 // index of this in map_cache - so we have an ID to use for wraper div\n            activeAreaEvent: null\n        });\n    }\n\n    /**\n     * Return an array of all image-containing options from an options object;\n     * that is, containers that may have an \"altImage\" property\n     *\n     * @param  {object} obj     An options object\n     * @return {object[]}       An array of objects\n     */\n    function getOptionImages(obj) {\n        return [obj, obj.render_highlight, obj.render_select];\n    }\n\n    /**\n     * Parse all the altImage references, adding them to the library so they can be preloaded\n     * and aliased.\n     *\n     * @param  {MapData} me The MapData object on which to operate\n     */\n    function configureAltImages(me)\n    {\n        var opts = me.options,\n            mi = me.images;\n\n        // add alt images\n\n        if (m.hasCanvas()) {\n            // map altImage library first\n\n            $.each(opts.altImages || {}, function(i,e) {\n                mi.add(e,i);\n            });\n\n            // now find everything else\n\n            $.each([opts].concat(opts.areas),function(i,e) {\n                $.each(getOptionImages(e),function(i2,e2) {\n                    if (e2 && e2.altImage) {\n                        e2.altImageId=mi.add(e2.altImage);\n                    }\n                });\n            });\n        }\n\n        // set area_options\n        me.area_options = u.updateProps({}, // default options for any MapArea\n            m.area_defaults,\n            opts);\n    }\n\n    /**\n     * Queue a mouse move action based on current delay settings\n     * (helper for mouseover/mouseout handlers)\n     *\n     * @param  {MapData}    me       The MapData context\n     * @param  {number}     delay    The number of milliseconds to delay the action\n     * @param  {AreaData}   area     AreaData affected\n     * @param  {Deferred}   deferred A deferred object to return (instead of a new one)\n     * @return {Promise}    A promise that resolves when the action is completed\n     */\n    function queueMouseEvent(me,delay,area, deferred) {\n\n        deferred = deferred || u.when.defer();\n\n        function cbFinal(areaId) {\n            if (me.currentAreaId!==areaId && me.highlightId>=0) {\n                deferred.resolve();\n            }\n        }\n        if (me.activeAreaEvent) {\n            window.clearTimeout(me.activeAreaEvent);\n            me.activeAreaEvent=0;\n        }\n        if (delay<0) {\n            return;\n        }\n\n        if (area.owner.currentAction || delay) {\n            me.activeAreaEvent = window.setTimeout((function() {\n                    return function() {\n                        queueMouseEvent(me,0,area,deferred);\n                    };\n                }(area)),\n                delay || 100);\n        } else {\n             cbFinal(area.areaId);\n        }\n        return deferred;\n    }\n\n     /**\n     * Mousedown event. This is captured only to prevent browser from drawing an outline around an\n     * area when it's clicked.\n     *\n     * @param  {EventData} e jQuery event data\n     */\n\n    function mousedown(e) {\n        if (!m.hasCanvas()) {\n            this.blur();\n        }\n        e.preventDefault();\n    }\n\n    /**\n     * Mouseover event. Handle highlight rendering and client callback on mouseover\n     *\n     * @param  {MapData} me The MapData context\n     * @param  {EventData} e jQuery event data\n     * @return {[type]}   [description]\n     */\n\n    function mouseover(me,e) {\n        var arData = me.getAllDataForArea(this),\n            ar=arData.length ? arData[0] : null;\n\n        // mouseover events are ignored entirely while resizing, though we do care about mouseout events\n        // and must queue the action to keep things clean.\n\n        if (!ar || ar.isNotRendered() || ar.owner.currentAction) {\n            return;\n        }\n\n        if (me.currentAreaId === ar.areaId) {\n            return;\n        }\n        if (me.highlightId !== ar.areaId) {\n            me.clearEffects();\n\n            ar.highlight();\n\n            if (me.options.showToolTip) {\n                $.each(arData,function(i,e) {\n                    if (e.effectiveOptions().toolTip) {\n                        e.showToolTip();\n                    }\n                });\n            }\n        }\n\n        me.currentAreaId = ar.areaId;\n\n        if ($.isFunction(me.options.onMouseover)) {\n            me.options.onMouseover.call(this,\n            {\n                e: e,\n                options:ar.effectiveOptions(),\n                key: ar.key,\n                selected: ar.isSelected()\n            });\n        }\n    }\n\n    /**\n     * Mouseout event.\n     *\n     * @param  {MapData} me The MapData context\n     * @param  {EventData} e jQuery event data\n     * @return {[type]}   [description]\n     */\n\n    function mouseout(me,e) {\n        var newArea,\n            ar = me.getDataForArea(this),\n            opts = me.options;\n\n\n        if (me.currentAreaId<0 || !ar) {\n            return;\n        }\n\n        newArea=me.getDataForArea(e.relatedTarget);\n\n        if (newArea === ar) {\n            return;\n        }\n\n        me.currentAreaId = -1;\n        ar.area=null;\n\n        queueMouseEvent(me,opts.mouseoutDelay,ar)\n            .then(me.clearEffects);\n\n        if ($.isFunction(opts.onMouseout)) {\n            opts.onMouseout.call(this,\n            {\n                e: e,\n                options: opts,\n                key: ar.key,\n                selected: ar.isSelected()\n            });\n        }\n\n    }\n\n    /**\n     * Clear any active tooltip or highlight\n     *\n     * @param  {MapData} me The MapData context\n     * @param  {EventData} e jQuery event data\n     * @return {[type]}   [description]\n     */\n\n    function clearEffects(me) {\n        var opts = me.options;\n\n        me.ensureNoHighlight();\n\n        if (opts.toolTipClose\n            && $.inArray('area-mouseout', opts.toolTipClose) >= 0\n            && me.activeToolTip)\n        {\n            me.clearToolTip();\n        }\n    }\n\n    /**\n     * Mouse click event handler\n     *\n     * @param  {MapData} me The MapData context\n     * @param  {EventData} e jQuery event data\n     * @return {[type]}   [description]\n     */\n\n    function click(me,e) {\n        var selected, list, list_target, newSelectionState, canChangeState, cbResult,\n            that = this,\n            ar = me.getDataForArea(this),\n            opts = me.options;\n\n        function clickArea(ar) {\n            var areaOpts,target;\n            canChangeState = (ar.isSelectable() &&\n                (ar.isDeselectable() || !ar.isSelected()));\n\n            if (canChangeState) {\n                newSelectionState = !ar.isSelected();\n            } else {\n                newSelectionState = ar.isSelected();\n            }\n\n            list_target = m.getBoundList(opts, ar.key);\n\n            if ($.isFunction(opts.onClick))\n            {\n                cbResult= opts.onClick.call(that,\n                {\n                    e: e,\n                    listTarget: list_target,\n                    key: ar.key,\n                    selected: newSelectionState\n                });\n\n                if (u.isBool(cbResult)) {\n                    if (!cbResult) {\n                        return false;\n                    }\n                    target = $(ar.area).attr('href');\n                    if (target!=='#') {\n                        window.location.href=target;\n                        return false;\n                    }\n                }\n            }\n\n            if (canChangeState) {\n                selected = ar.toggle();\n            }\n\n            if (opts.boundList && opts.boundList.length > 0) {\n                m.setBoundListProperties(opts, list_target, ar.isSelected());\n            }\n\n            areaOpts = ar.effectiveOptions();\n            if (areaOpts.includeKeys) {\n                list = u.split(areaOpts.includeKeys);\n                $.each(list, function (i, e) {\n                    var ar = me.getDataForKey(e.toString());\n                    if (!ar.options.isMask) {\n                        clickArea(ar);\n                    }\n                });\n            }\n        }\n\n        mousedown.call(this,e);\n\n        if (opts.clickNavigate && ar.href) {\n            window.location.href=ar.href;\n            return;\n        }\n\n        if (ar && !ar.owner.currentAction) {\n            opts = me.options;\n            clickArea(ar);\n        }\n    }\n\n    /**\n     * Prototype for a MapData object, representing an ImageMapster bound object\n     * @param {Element} image   an IMG element\n     * @param {object} options  ImageMapster binding options\n     */\n    m.MapData = function (image, options)\n    {\n        var me = this;\n\n        // (Image)  main map image\n\n        me.image = image;\n\n        me.images = new m.MapImages(me);\n        me.graphics = new m.Graphics(me);\n\n        // save the initial style of the image for unbinding. This is problematic, chrome\n        // duplicates styles when assigning, and cssText is apparently not universally supported.\n        // Need to do something more robust to make unbinding work universally.\n\n        me.imgCssText = image.style.cssText || null;\n\n        initializeDefaults(me);\n\n        me.configureOptions(options);\n\n        // create context-bound event handlers from our private functions\n\n        me.mouseover = function(e) { mouseover.call(this,me,e); };\n        me.mouseout = function(e) { mouseout.call(this,me,e); };\n        me.click = function(e) { click.call(this,me,e); };\n        me.clearEffects = function(e) { clearEffects.call(this,me,e); };\n    };\n\n    m.MapData.prototype = {\n        constructor: m.MapData,\n\n         /**\n         * Set target.options from defaults + options\n         * @param  {[type]} target      The target\n         * @param  {[type]} options     The options to merge\n         */\n\n        configureOptions: function(options) {\n            this.options= u.updateProps({}, m.defaults, options);\n        },\n\n        /**\n         * Ensure all images are loaded\n         * @return {Promise} A promise that resolves when the images have finished loading (or fail)\n         */\n\n        bindImages: function() {\n            var me=this,\n                mi = me.images;\n\n            // reset the images if this is a rebind\n\n            if (mi.length>2) {\n                mi.splice(2);\n            } else if (mi.length===0) {\n\n                // add the actual main image\n                mi.add(me.image);\n                // will create a duplicate of the main image, we need this to get raw size info\n                mi.add(me.image.src);\n            }\n\n            configureAltImages(me);\n\n            return me.images.bind();\n        },\n\n        /**\n         * Test whether an async action is currently in progress\n         * @return {Boolean} true or false indicating state\n         */\n\n        isActive: function() {\n            return !this.complete || this.currentAction;\n        },\n\n        /**\n         * Return an object indicating the various states. This isn't really used by\n         * production code.\n         *\n         * @return {object} An object with properties for various states\n         */\n\n        state: function () {\n            return {\n                complete: this.complete,\n                resizing: this.currentAction==='resizing',\n                zoomed: this.zoomed,\n                zoomedArea: this.zoomedArea,\n                scaleInfo: this.scaleInfo\n            };\n        },\n\n        /**\n         * Get a unique ID for the wrapper of this imagemapster\n         * @return {string} A string that is unique to this image\n         */\n\n        wrapId: function () {\n            return 'mapster_wrap_' + this.index;\n        },\n        _idFromKey: function (key) {\n            return typeof key === \"string\" && this._xref.hasOwnProperty(key) ?\n                        this._xref[key] : -1;\n        },\n\n        /**\n         * Return a comma-separated string of all selected keys\n         * @return {string} CSV of all keys that are currently selected\n         */\n\n        getSelected: function () {\n            var result = '';\n            $.each(this.data, function (i,e) {\n                if (e.isSelected()) {\n                    result += (result ? ',' : '') + this.key;\n                }\n            });\n            return result;\n        },\n\n        /**\n         * Get an array of MapAreas associated with a specific AREA based on the keys for that area\n         * @param  {Element} area   An HTML AREA\n         * @param  {number} atMost  A number limiting the number of areas to be returned (typically 1 or 0 for no limit)\n         * @return {MapArea[]}      Array of MapArea objects\n         */\n\n        getAllDataForArea:function (area,atMost) {\n            var i,ar, result,\n                me=this,\n                key = $(area).filter('area').attr(me.options.mapKey);\n\n            if (key) {\n                result=[];\n                key = u.split(key);\n\n                for (i=0;i<(atMost || key.length);i++) {\n                    ar = me.data[me._idFromKey(key[i])];\n                    ar.area=area.length ? area[0]:area;\n                    // set the actual area moused over/selected\n                    // TODO: this is a brittle model for capturing which specific area - if this method was not used,\n                    // ar.area could have old data. fix this.\n                    result.push(ar);\n                }\n            }\n\n            return result;\n        },\n        getDataForArea: function(area) {\n            var ar=this.getAllDataForArea(area,1);\n            return ar ? ar[0] || null : null;\n        },\n        getDataForKey: function (key) {\n            return this.data[this._idFromKey(key)];\n        },\n\n        /**\n         * Get the primary keys associated with an area group.\n         * If this is a primary key, it will be returned.\n         *\n         * @param  {string key An area key\n         * @return {string} A CSV of area keys\n         */\n\n        getKeysForGroup: function(key) {\n            var ar=this.getDataForKey(key);\n\n            return !ar ? '':\n                ar.isPrimary ?\n                    ar.key :\n                    this.getPrimaryKeysForMapAreas(ar.areas()).join(',');\n        },\n\n        /**\n         * given an array of MapArea object, return an array of its unique primary keys\n         * @param  {MapArea[]} areas The areas to analyze\n         * @return {string[]} An array of unique primary keys\n         */\n\n        getPrimaryKeysForMapAreas: function(areas)\n        {\n            var keys=[];\n            $.each(areas,function(i,e) {\n                if ($.inArray(e.keys[0],keys)<0) {\n                    keys.push(e.keys[0]);\n                }\n            });\n            return keys;\n        },\n        getData: function (obj) {\n            if (typeof obj === 'string') {\n                return this.getDataForKey(obj);\n            } else if (obj && obj.mapster || u.isElement(obj)) {\n                return this.getDataForArea(obj);\n            } else {\n                return null;\n            }\n        },\n        // remove highlight if present, raise event\n        ensureNoHighlight: function () {\n            var ar;\n            if (this.highlightId >= 0) {\n                this.graphics.clearHighlight();\n                ar = this.data[this.highlightId];\n                ar.changeState('highlight', false);\n                this.setHighlightId(-1);\n            }\n        },\n        setHighlightId: function(id) {\n            this.highlightId = id;\n        },\n\n        /**\n         * Clear all active selections on this map\n         */\n\n        clearSelections: function () {\n            $.each(this.data, function (i,e) {\n                if (e.selected) {\n                    e.deselect(true);\n                 }\n            });\n            this.removeSelectionFinish();\n\n        },\n\n        /**\n         * Set area options from an array of option data.\n         *\n         * @param {object[]} areas An array of objects containing area-specific options\n         */\n\n        setAreaOptions: function (areas) {\n            var i, area_options, ar;\n            areas = areas || [];\n\n            // refer by: map_data.options[map_data.data[x].area_option_id]\n\n            for (i = areas.length - 1; i >= 0; i--) {\n                area_options = areas[i];\n                if (area_options) {\n                    ar = this.getDataForKey(area_options.key);\n                    if (ar) {\n                        u.updateProps(ar.options, area_options);\n\n                        // TODO: will not deselect areas that were previously selected, so this only works\n                        // for an initial bind.\n\n                        if (u.isBool(area_options.selected)) {\n                            ar.selected = area_options.selected;\n                        }\n                    }\n                }\n            }\n        },\n        // keys: a comma-separated list\n        drawSelections: function (keys) {\n            var i, key_arr = u.asArray(keys);\n\n            for (i = key_arr.length - 1; i >= 0; i--) {\n                this.data[key_arr[i]].drawSelection();\n            }\n        },\n        redrawSelections: function () {\n            $.each(this.data, function (i, e) {\n                if (e.isSelectedOrStatic()) {\n                    e.drawSelection();\n                }\n            });\n\n        },\n        ///called when images are done loading\n        initialize: function () {\n            var imgCopy, base_canvas, overlay_canvas, wrap, parentId, css, i,size,\n                img,sort_func, sorted_list,  scale,\n                        me = this,\n                        opts = me.options;\n\n            if (me.complete) {\n                return;\n            }\n\n            img = $(me.image);\n\n            parentId = img.parent().attr('id');\n\n            // create a div wrapper only if there's not already a wrapper, otherwise, own it\n\n            if (parentId && parentId.length >= 12 && parentId.substring(0, 12) === \"mapster_wrap\") {\n                wrap = img.parent();\n                wrap.attr('id', me.wrapId());\n            } else {\n                wrap = $('<div id=\"' + me.wrapId() + '\"></div>');\n\n                if (opts.wrapClass) {\n                    if (opts.wrapClass === true) {\n                        wrap.addClass(img[0].className);\n                    }\n                    else {\n                        wrap.addClass(opts.wrapClass);\n                    }\n                }\n            }\n            me.wrapper = wrap;\n\n            // me.images[1] is the copy of the original image. It should be loaded & at its native size now so we can obtain the true\n            // width & height. This is needed to scale the imagemap if not being shown at its native size. It is also needed purely\n            // to finish binding in case the original image was not visible. It can be impossible in some browsers to obtain the\n            // native size of a hidden image.\n\n            me.scaleInfo = scale = u.scaleMap(me.images[0],me.images[1], opts.scaleMap);\n\n            me.base_canvas = base_canvas = me.graphics.createVisibleCanvas(me);\n            me.overlay_canvas = overlay_canvas = me.graphics.createVisibleCanvas(me);\n\n            // Now we got what we needed from the copy -clone from the original image again to make sure any other attributes are copied\n            imgCopy = $(me.images[1])\n                .addClass('mapster_el '+ me.images[0].className)\n                .attr({id:null, usemap: null});\n\n            size=u.size(me.images[0]);\n\n            if (size.complete) {\n                imgCopy.css({\n                    width: size.width,\n                    height: size.height\n                });\n            }\n\n            me.buildDataset();\n\n            // now that we have processed all the areas, set css for wrapper, scale map if needed\n\n            css = {\n                display: 'block',\n                position: 'relative',\n                padding: 0,\n                width: scale.width,\n                height: scale.height\n            };\n\n            if (opts.wrapCss) {\n                $.extend(css, opts.wrapCss);\n            }\n            // if we were rebinding with an existing wrapper, the image will aready be in it\n            if (img.parent()[0] !== me.wrapper[0]) {\n\n                img.before(me.wrapper);\n            }\n\n            wrap.css(css);\n\n            // move all generated images into the wrapper for easy removal later\n\n            $(me.images.slice(2)).hide();\n            for (i = 1; i < me.images.length; i++) {\n                wrap.append(me.images[i]);\n            }\n\n            //me.images[1].style.cssText = me.image.style.cssText;\n\n            wrap.append(base_canvas)\n                        .append(overlay_canvas)\n                        .append(img.css(m.canvas_style));\n\n            // images[0] is the original image with map, images[1] is the copy/background that is visible\n\n            u.setOpacity(me.images[0], 0);\n            $(me.images[1]).show();\n\n            u.setOpacity(me.images[1],1);\n\n            if (opts.isSelectable && opts.onGetList) {\n                sorted_list = me.data.slice(0);\n                if (opts.sortList) {\n                    if (opts.sortList === \"desc\") {\n                        sort_func = function (a, b) {\n                            return a === b ? 0 : (a > b ? -1 : 1);\n                        };\n                    }\n                    else {\n                        sort_func = function (a, b) {\n                            return a === b ? 0 : (a < b ? -1 : 1);\n                        };\n                    }\n\n                    sorted_list.sort(function (a, b) {\n                        a = a.value;\n                        b = b.value;\n                        return sort_func(a, b);\n                    });\n                }\n\n                me.options.boundList = opts.onGetList.call(me.image, sorted_list);\n            }\n\n            me.complete=true;\n            me.processCommandQueue();\n\n            if (opts.onConfigured && typeof opts.onConfigured === 'function') {\n                opts.onConfigured.call(img, true);\n            }\n        },\n\n        // when rebind is true, the MapArea data will not be rebuilt.\n        buildDataset: function(rebind) {\n            var sel,areas,j,area_id,$area,area,curKey,mapArea,key,keys,mapAreaId,group_value,dataItem,href,\n                me=this,\n                opts=me.options,\n                default_group;\n\n            function addAreaData(key, value) {\n                var dataItem = new m.AreaData(me, key, value);\n                dataItem.areaId = me._xref[key] = me.data.push(dataItem) - 1;\n                return dataItem.areaId;\n            }\n\n            me._xref = {};\n            me.data = [];\n            if (!rebind) {\n                me.mapAreas=[];\n            }\n\n            default_group = !opts.mapKey;\n            if (default_group) {\n                opts.mapKey = 'data-mapster-key';\n            }\n\n            // the [attribute] selector is broken on old IE with jQuery. hasVml() is a quick and dirty\n            // way to test for that\n\n            sel = m.hasVml() ? 'area' :\n                        (default_group ?\n                            'area[coords]' :\n                            'area[' + opts.mapKey + ']');\n\n            areas = $(me.map).find(sel).unbind('.mapster');\n\n            for (mapAreaId = 0;mapAreaId<areas.length; mapAreaId++) {\n                area_id = 0;\n                area = areas[mapAreaId];\n                $area = $(area);\n\n                // skip areas with no coords - selector broken for older ie\n                if (!area.coords) {\n                    continue;\n                }\n                // Create a key if none was assigned by the user\n\n                if (default_group) {\n                     curKey=String(mapAreaId);\n                    $area.attr('data-mapster-key', curKey);\n\n                } else {\n                    curKey = area.getAttribute(opts.mapKey);\n                }\n\n                // conditions for which the area will be bound to mouse events\n                // only bind to areas that don't have nohref. ie 6&7 cannot detect the presence of nohref, so we have to also not bind if href is missing.\n\n                if (rebind) {\n                    mapArea = me.mapAreas[$area.data('mapster')-1];\n                    mapArea.configure(curKey);\n                } else {\n                    mapArea = new m.MapArea(me, area,curKey);\n                    me.mapAreas.push(mapArea);\n                }\n\n                keys = mapArea.keys; // converted to an array by mapArea\n\n\n                // Iterate through each mapKey assigned to this area\n                for (j = keys.length - 1; j >= 0; j--) {\n                    key = keys[j];\n\n                    if (opts.mapValue) {\n                        group_value = $area.attr(opts.mapValue);\n                    }\n                    if (default_group) {\n                        // set an attribute so we can refer to the area by index from the DOM object if no key\n                        area_id = addAreaData(me.data.length, group_value);\n                        dataItem = me.data[area_id];\n                        dataItem.key = key = area_id.toString();\n                    }\n                    else {\n                        area_id = me._xref[key];\n                        if (area_id >= 0) {\n                            dataItem = me.data[area_id];\n                            if (group_value && !me.data[area_id].value) {\n                                dataItem.value = group_value;\n                            }\n                        }\n                        else {\n                            area_id = addAreaData(key, group_value);\n                            dataItem = me.data[area_id];\n                            dataItem.isPrimary=j===0;\n                        }\n                    }\n                    mapArea.areaDataXref.push(area_id);\n                    dataItem.areasXref.push(mapAreaId);\n                }\n\n                href=$area.attr('href');\n                if (href && href!=='#' && !dataItem.href)\n                {\n                    dataItem.href=href;\n                }\n\n                if (!mapArea.nohref) {\n                    $area.bind('click.mapster', me.click);\n\n                    if (!m.isTouch) {\n                        $area.bind('mouseover.mapster', me.mouseover)\n                            .bind('mouseout.mapster', me.mouseout)\n                            .bind('mousedown.mapster', me.mousedown);\n\n                    }\n\n                }\n\n                // store an ID with each area.\n                $area.data(\"mapster\", mapAreaId+1);\n            }\n\n            // TODO listenToList\n            //            if (opts.listenToList && opts.nitG) {\n            //                opts.nitG.bind('click.mapster', event_hooks[map_data.hooks_index].listclick_hook);\n            //            }\n\n            // populate areas from config options\n            me.setAreaOptions(opts.areas);\n            me.redrawSelections();\n\n        },\n        processCommandQueue: function() {\n\n            var cur,me=this;\n            while (!me.currentAction && me.commands.length) {\n                cur = me.commands[0];\n                me.commands.splice(0,1);\n                m.impl[cur.command].apply(cur.that, cur.args);\n            }\n        },\n        clearEvents: function () {\n            $(this.map).find('area')\n                        .unbind('.mapster');\n            $(this.images)\n                        .unbind('.mapster');\n        },\n        _clearCanvases: function (preserveState) {\n            // remove the canvas elements created\n            if (!preserveState) {\n                $(this.base_canvas).remove();\n            }\n            $(this.overlay_canvas).remove();\n        },\n        clearMapData: function (preserveState) {\n            var me = this;\n            this._clearCanvases(preserveState);\n\n            // release refs to DOM elements\n            $.each(this.data, function (i, e) {\n                e.reset();\n            });\n            this.data = null;\n            if (!preserveState) {\n                // get rid of everything except the original image\n                this.image.style.cssText = this.imgCssText;\n                $(this.wrapper).before(this.image).remove();\n            }\n\n            me.images.clear();\n\n            this.image = null;\n            u.ifFunction(this.clearTooltip, this);\n        },\n\n        // Compelete cleanup process for deslecting items. Called after a batch operation, or by AreaData for single\n        // operations not flagged as \"partial\"\n\n        removeSelectionFinish: function () {\n            var g = this.graphics;\n\n            g.refreshSelections();\n            // do not call ensure_no_highlight- we don't really want to unhilight it, just remove the effect\n            g.clearHighlight();\n        }\n    };\n} (jQuery));\n/* areadata.js\n   AreaData and MapArea protoypes\n*/\n\n(function ($) {\n    var m = $.mapster, u = m.utils;\n\n    /**\n     * Select this area\n     *\n     * @param {AreaData} me  AreaData context\n     * @param {object} options Options for rendering the selection\n     */\n    function select(options) {\n        // need to add the new one first so that the double-opacity effect leaves the current one highlighted for singleSelect\n\n        var me=this, o = me.owner;\n        if (o.options.singleSelect) {\n            o.clearSelections();\n        }\n\n        // because areas can overlap - we can't depend on the selection state to tell us anything about the inner areas.\n        // don't check if it's already selected\n        if (!me.isSelected()) {\n            if (options) {\n\n                // cache the current options, and map the altImageId if an altimage\n                // was passed\n\n                me.optsCache = $.extend(me.effectiveRenderOptions('select'),\n                    options,\n                    {\n                        altImageId: o.images.add(options.altImage)\n                    });\n            }\n\n            me.drawSelection();\n\n            me.selected = true;\n            me.changeState('select', true);\n        }\n\n        if (o.options.singleSelect) {\n            o.graphics.refreshSelections();\n        }\n    }\n\n    /**\n     * Deselect this area, optionally deferring finalization so additional areas can be deselected\n     * in a single operation\n     *\n     * @param  {boolean} partial when true, the caller must invoke \"finishRemoveSelection\" to render\n     */\n\n    function deselect(partial) {\n        var me=this;\n        me.selected = false;\n        me.changeState('select', false);\n\n        // release information about last area options when deselecting.\n\n        me.optsCache=null;\n        me.owner.graphics.removeSelections(me.areaId);\n\n        // Complete selection removal process. This is separated because it's very inefficient to perform the whole\n        // process for multiple removals, as the canvas must be totally redrawn at the end of the process.ar.remove\n\n        if (!partial) {\n            me.owner.removeSelectionFinish();\n        }\n    }\n\n    /**\n     * Toggle the selection state of this area\n     * @param  {object} options Rendering options, if toggling on\n     * @return {bool} The new selection state\n     */\n    function toggle(options) {\n        var me=this;\n        if (!me.isSelected()) {\n            me.select(options);\n        }\n        else {\n            me.deselect();\n        }\n        return me.isSelected();\n    }\n\n    /**\n     * An AreaData object; represents a conceptual area that can be composed of\n     * one or more MapArea objects\n     *\n     * @param {MapData} owner The MapData object to which this belongs\n     * @param {string} key   The key for this area\n     * @param {string} value The mapValue string for this area\n     */\n\n    m.AreaData = function (owner, key, value) {\n        $.extend(this,{\n            owner: owner,\n            key: key || '',\n            // means this represents the first key in a list of keys (it's the area group that gets highlighted on mouseover)\n            isPrimary: true,\n            areaId: -1,\n            href: '',\n            value: value || '',\n            options:{},\n            // \"null\" means unchanged. Use \"isSelected\" method to just test true/false\n            selected: null,\n            // xref to MapArea objects\n            areasXref: [],\n            // (temporary storage) - the actual area moused over\n            area: null,\n            // the last options used to render this. Cache so when re-drawing after a remove, changes in options won't\n            // break already selected things.\n            optsCache: null\n         });\n    };\n\n    /**\n     * The public API for AreaData object\n     */\n\n    m.AreaData.prototype = {\n        constuctor: m.AreaData,\n        select: select,\n        deselect: deselect,\n        toggle: toggle,\n        areas: function() {\n            var i,result=[];\n            for (i=0;i<this.areasXref.length;i++) {\n                result.push(this.owner.mapAreas[this.areasXref[i]]);\n            }\n            return result;\n        },\n        // return all coordinates for all areas\n        coords: function(offset) {\n            var coords = [];\n            $.each(this.areas(), function (i, el) {\n                coords = coords.concat(el.coords(offset));\n            });\n            return coords;\n        },\n        reset: function () {\n            $.each(this.areas(), function (i, e) {\n                e.reset();\n            });\n            this.areasXref = [];\n            this.options = null;\n        },\n        // Return the effective selected state of an area, incorporating staticState\n        isSelectedOrStatic: function () {\n\n            var o = this.effectiveOptions();\n            return u.isBool(o.staticState) ? o.staticState :\n                        this.isSelected();\n        },\n        isSelected: function () {\n            return u.isBool(this.selected) ? this.selected :\n                u.isBool(this.owner.area_options.selected) ? this.owner.area_options.selected : false;\n        },\n        isSelectable: function () {\n            return u.isBool(this.effectiveOptions().staticState) ? false :\n                        (u.isBool(this.owner.options.staticState) ? false : u.boolOrDefault(this.effectiveOptions().isSelectable,true));\n        },\n        isDeselectable: function () {\n            return u.isBool(this.effectiveOptions().staticState) ? false :\n                        (u.isBool(this.owner.options.staticState) ? false : u.boolOrDefault(this.effectiveOptions().isDeselectable,true));\n        },\n        isNotRendered: function() {\n            var area = $(this.area);\n            return area.attr('nohref') ||\n                !area.attr('href') ||\n                this.effectiveOptions().isMask;\n\n        },\n\n\n         /**\n         * Return the overall options effective for this area.\n         * This should get the default options, and merge in area-specific options, finally\n         * overlaying options passed by parameter\n         *\n         * @param  {[type]} options  options which will supercede all other options for this area\n         * @return {[type]}          the combined options\n         */\n\n        effectiveOptions: function (options) {\n\n            var opts = u.updateProps({},\n                    this.owner.area_options,\n                    this.options,\n                    options || {},\n                    {\n                        id: this.areaId\n                    }\n                );\n\n            opts.selected = this.isSelected();\n\n            return opts;\n        },\n\n        /**\n         * Return the options effective for this area for a \"render\" or \"highlight\" mode.\n         * This should get the default options, merge in the areas-specific options,\n         * and then the mode-specific options.\n         * @param  {string} mode    'render' or 'highlight'\n         * @param  {[type]} options  options which will supercede all other options for this area\n         * @return {[type]}          the combined options\n         */\n\n        effectiveRenderOptions: function (mode, options) {\n            var allOpts,opts=this.optsCache;\n\n            if (!opts || mode==='highlight') {\n                allOpts = this.effectiveOptions(options);\n                opts = u.updateProps({},\n                    allOpts,\n                    allOpts[\"render_\" + mode]\n                );\n\n                if (mode!=='highlight') {\n                    this.optsCache=opts;\n                }\n            }\n            return $.extend({},opts);\n        },\n\n        // Fire callback on area state change\n        changeState: function (state_type, state) {\n            if ($.isFunction(this.owner.options.onStateChange)) {\n                this.owner.options.onStateChange.call(this.owner.image,\n                    {\n                        key: this.key,\n                        state: state_type,\n                        selected: state\n                    }\n                );\n            }\n        },\n\n        // highlight this area\n\n        highlight: function (options) {\n            var o = this.owner;\n            if (this.effectiveOptions().highlight) {\n                o.graphics.addShapeGroup(this, \"highlight\",options);\n            }\n            o.setHighlightId(this.areaId);\n            this.changeState('highlight', true);\n        },\n\n        // select this area. if \"callEvent\" is true then the state change event will be called. (This method can be used\n        // during config operations, in which case no event is indicated)\n\n        drawSelection: function () {\n\n\n            this.owner.graphics.addShapeGroup(this, \"select\");\n\n        }\n\n\n    };\n    // represents an HTML area\n    m.MapArea = function (owner,areaEl,keys) {\n        if (!owner) {\n            return;\n        }\n        var me = this;\n        me.owner = owner;   // a MapData object\n        me.area = areaEl;\n        me.areaDataXref=[]; // a list of map_data.data[] id's for each areaData object containing this\n        me.originalCoords = [];\n        $.each(u.split(areaEl.coords), function (i, el) {\n            me.originalCoords.push(parseFloat(el));\n        });\n        me.length = me.originalCoords.length;\n        me.shape = areaEl.shape.toLowerCase();\n        me.nohref = areaEl.nohref || !areaEl.href;\n        me.configure(keys);\n    };\n    m.MapArea.prototype= {\n        constructor: m.MapArea,\n        configure: function(keys) {\n            this.keys = u.split(keys);\n        },\n        reset: function() {\n            this.area=null;\n        },\n        coords: function (offset) {\n            return $.map(this.originalCoords,function(e) {\n                return offset ? e : e+offset;\n            });\n        }\n    };\n} (jQuery));\n/* areacorners.js\n   determine the best place to put a box of dimensions (width,height) given a circle, rect or poly\n*/\n\n(function ($) {\n    var u=$.mapster.utils;\n\n\n    /**\n     * Compute positions that will place a target with dimensions [width,height] outside\n     * but near the boundaries of the elements \"elements\". When an imagemap is passed, the\n     *\n     * @param  {Element|Element[]} elements An element or an array of elements (such as a jQuery object)\n     * @param  {Element} image The image to which area elements are bound, if this is an image map.\n     * @param  {Element} container The contianer in which the target must be constrained (or document, if missing)\n     * @param  {int} width The width of the target object\n     * @return {object} a structure with the x and y positions\n     */\n    u.areaCorners = function (elements, image, container, width, height) {\n        var pos,found, minX, minY, maxX, maxY, bestMinX, bestMaxX, bestMinY, bestMaxY, curX, curY, nest, j,\n           offsetx=0,\n           offsety=0,\n           rootx,\n           rooty,\n           iCoords,radius,angle,el,\n           coords=[];\n\n        // if a single element was passed, map it to an array\n\n        elements = elements.length ?\n            elements:\n            [elements];\n\n        container = container ?\n            $(container):\n            $(document.body);\n\n        // get the relative root of calculation\n\n        pos = container.offset();\n        rootx = pos.left;\n        rooty = pos.top;\n\n        // with areas, all we know about is relative to the top-left corner of the image. We need to add an offset compared to\n        // the actual container. After this calculation, offsetx/offsety can be added to either the area coords, or the target's\n        // absolute position to get the correct top/left boundaries of the container.\n\n        if (image) {\n            pos = $(image).offset();\n            offsetx = pos.left;\n            offsety = pos.top;\n        }\n\n        // map the coordinates of any type of shape to a poly and use the logic. simpler than using three different\n        // calculation methods. Circles use a 20 degree increment for this estimation.\n\n        for (j=0;j<elements.length;j++)\n        {\n            el=elements[j];\n            if (el.nodeName==='AREA') {\n                iCoords = u.split(el.coords,parseInt);\n\n                switch(el.shape) {\n                    case 'circle':\n                        curX=iCoords[0];\n                        curY=iCoords[1];\n                        radius=iCoords[2];\n                        coords=[];\n                        for (j=0;j<360;j+=20) {\n                             angle=j*Math.PI/180;\n                             coords.push(curX+radius*Math.cos(angle),curY+radius*Math.sin(angle));\n                        }\n                        break;\n                      case 'rect':\n                          coords.push(iCoords[0],iCoords[1],iCoords[2],iCoords[1],iCoords[2],iCoords[3],iCoords[0],iCoords[3]);\n                          break;\n                      default:\n                          coords=coords.concat(iCoords);\n                         break;\n                }\n\n                // map area positions to it's real position in the container\n\n                for (j=0;j<coords.length;j+=2)\n                {\n                    coords[j]=parseInt(coords[j],10)+offsetx;\n                    coords[j+1]=parseInt(coords[j+1],10)+offsety;\n                }\n            } else {\n                el=$(el);\n                pos = el.position();\n                coords.push(pos.left,pos.top,\n                            pos.left+el.width(),pos.top,\n                            pos.left+el.width(),pos.top+el.height(),\n                            pos.left,pos.top+el.height());\n\n            }\n        }\n\n        minX = minY = bestMinX = bestMinY = 999999;\n        maxX = maxY = bestMaxX = bestMaxY = -1;\n\n        for (j = coords.length - 2; j >= 0; j -= 2) {\n            curX = coords[j];\n            curY = coords[j + 1];\n\n            if (curX < minX) {\n                minX = curX;\n                bestMaxY = curY;\n            }\n            if (curX > maxX) {\n                maxX = curX;\n                bestMinY = curY;\n            }\n            if (curY < minY) {\n                minY = curY;\n                bestMaxX = curX;\n            }\n            if (curY > maxY) {\n                maxY = curY;\n                bestMinX = curX;\n            }\n\n        }\n\n        // try to figure out the best place for the tooltip\n\n        if (width && height) {\n            found=false;\n            $.each([[bestMaxX - width, minY - height], [bestMinX, minY - height],\n                             [minX - width, bestMaxY - height], [minX - width, bestMinY],\n                             [maxX,bestMaxY - height], [ maxX,bestMinY],\n                             [bestMaxX - width, maxY], [bestMinX, maxY]\n                      ],function (i, e) {\n                          if (!found && (e[0] > rootx && e[1] > rooty)) {\n                              nest = e;\n                              found=true;\n                              return false;\n                  }\n             });\n\n             // default to lower-right corner if nothing fit inside the boundaries of the image\n\n             if (!found) {\n                 nest=[maxX,maxY];\n             }\n        }\n        return nest;\n    };\n} (jQuery));\n/* scale.js: resize and zoom functionality\n   requires areacorners.js, when.js\n*/\n\n\n(function ($) {\n    var m = $.mapster, u = m.utils, p = m.MapArea.prototype;\n\n    m.utils.getScaleInfo = function (eff, actual) {\n        var pct;\n        if (!actual) {\n            pct = 1;\n            actual=eff;\n        } else {\n            pct = eff.width / actual.width || eff.height / actual.height;\n            // make sure a float error doesn't muck us up\n            if (pct > 0.98 && pct < 1.02) { pct = 1; }\n        }\n        return {\n            scale: (pct !== 1),\n            scalePct: pct,\n            realWidth: actual.width,\n            realHeight: actual.height,\n            width: eff.width,\n            height: eff.height,\n            ratio: eff.width / eff.height\n        };\n    };\n    // Scale a set of AREAs, return old data as an array of objects\n    m.utils.scaleMap = function (image, imageRaw, scale) {\n\n        // stunningly, jQuery width can return zero even as width does not, seems to happen only\n        // with adBlock or maybe other plugins. These must interfere with onload events somehow.\n\n\n        var vis=u.size(image),\n            raw=u.size(imageRaw,true);\n\n        if (!raw.complete()) {\n            throw(\"Another script, such as an extension, appears to be interfering with image loading. Please let us know about this.\");\n        }\n        if (!vis.complete()) {\n            vis=raw;\n        }\n        return this.getScaleInfo(vis, scale ? raw : null);\n    };\n\n    /**\n     * Resize the image map. Only one of newWidth and newHeight should be passed to preserve scale\n     *\n     * @param  {int}   width       The new width OR an object containing named parameters matching this function sig\n     * @param  {int}   height      The new height\n     * @param  {int}   effectDuration Time in ms for the resize animation, or zero for no animation\n     * @param  {function} callback    A function to invoke when the operation finishes\n     * @return {promise}              NOT YET IMPLEMENTED\n     */\n\n    m.MapData.prototype.resize = function (width, height, duration, callback) {\n        var p,promises,newsize,els, highlightId, ratio,\n            me = this;\n\n        // allow omitting duration\n        callback = callback || duration;\n\n        function sizeCanvas(canvas, w, h) {\n            if (m.hasCanvas()) {\n                canvas.width = w;\n                canvas.height = h;\n            } else {\n                $(canvas).width(w);\n                $(canvas).height(h);\n            }\n        }\n\n        // Finalize resize action, do callback, pass control to command queue\n\n        function cleanupAndNotify() {\n\n            me.currentAction = '';\n\n            if ($.isFunction(callback)) {\n                callback();\n            }\n\n            me.processCommandQueue();\n        }\n\n        // handle cleanup after the inner elements are resized\n\n        function finishResize() {\n            sizeCanvas(me.overlay_canvas, width, height);\n\n            // restore highlight state if it was highlighted before\n            if (highlightId >= 0) {\n                var areaData = me.data[highlightId];\n                areaData.tempOptions = { fade: false };\n                me.getDataForKey(areaData.key).highlight();\n                areaData.tempOptions = null;\n            }\n            sizeCanvas(me.base_canvas, width, height);\n            me.redrawSelections();\n            cleanupAndNotify();\n        }\n\n        function resizeMapData() {\n            $(me.image).css(newsize);\n            // start calculation at the same time as effect\n            me.scaleInfo = u.getScaleInfo({\n                    width: width,\n                    height: height\n                },\n                {\n                    width: me.scaleInfo.realWidth,\n                    height: me.scaleInfo.realHeight\n                });\n            $.each(me.data, function (i, e) {\n                $.each(e.areas(), function (i, e) {\n                    e.resize();\n                });\n            });\n        }\n\n        if (me.scaleInfo.width === width && me.scaleInfo.height === height) {\n            return;\n        }\n\n        highlightId = me.highlightId;\n\n\n        if (!width) {\n            ratio = height / me.scaleInfo.realHeight;\n            width = Math.round(me.scaleInfo.realWidth * ratio);\n        }\n        if (!height) {\n            ratio = width / me.scaleInfo.realWidth;\n            height = Math.round(me.scaleInfo.realHeight * ratio);\n        }\n\n        newsize = { 'width': String(width) + 'px', 'height': String(height) + 'px' };\n        if (!m.hasCanvas()) {\n            $(me.base_canvas).children().remove();\n        }\n\n        // resize all the elements that are part of the map except the image itself (which is not visible)\n        // but including the div wrapper\n        els = $(me.wrapper).find('.mapster_el').add(me.wrapper);\n\n        if (duration) {\n            promises = [];\n            me.currentAction = 'resizing';\n            els.each(function (i, e) {\n                p = u.defer();\n                promises.push(p);\n\n                $(e).animate(newsize, {\n                    duration: duration,\n                    complete: p.resolve,\n                    easing: \"linear\"\n                });\n            });\n\n            p = u.defer();\n            promises.push(p);\n\n            // though resizeMapData is not async, it needs to be finished just the same as the animations,\n            // so add it to the \"to do\" list.\n\n            u.when.all(promises).then(finishResize);\n            resizeMapData();\n            p.resolve();\n        } else {\n            els.css(newsize);\n            resizeMapData();\n            finishResize();\n\n        }\n    };\n\n\n    m.MapArea = u.subclass(m.MapArea, function () {\n        //change the area tag data if needed\n        this.base.init();\n        if (this.owner.scaleInfo.scale) {\n            this.resize();\n        }\n    });\n\n    p.coords = function (percent, coordOffset) {\n        var j, newCoords = [],\n                    pct = percent || this.owner.scaleInfo.scalePct,\n                    offset = coordOffset || 0;\n\n        if (pct === 1 && coordOffset === 0) {\n            return this.originalCoords;\n        }\n\n        for (j = 0; j < this.length; j++) {\n            //amount = j % 2 === 0 ? xPct : yPct;\n            newCoords.push(Math.round(this.originalCoords[j] * pct) + offset);\n        }\n        return newCoords;\n    };\n    p.resize = function () {\n        this.area.coords = this.coords().join(',');\n    };\n\n    p.reset = function () {\n        this.area.coords = this.coords(1).join(',');\n    };\n\n    m.impl.resize = function (width, height, duration, callback) {\n        if (!width && !height) {\n            return false;\n        }\n        var x= (new m.Method(this,\n                function () {\n                    this.resize(width, height, duration, callback);\n                },\n                null,\n                {\n                    name: 'resize',\n                    args: arguments\n                }\n            )).go();\n        return x;\n    };\n\n/*\n    m.impl.zoom = function (key, opts) {\n        var options = opts || {};\n\n        function zoom(areaData) {\n            // this will be MapData object returned by Method\n\n            var scroll, corners, height, width, ratio,\n                    diffX, diffY, ratioX, ratioY, offsetX, offsetY, newWidth, newHeight, scrollLeft, scrollTop,\n                    padding = options.padding || 0,\n                    scrollBarSize = areaData ? 20 : 0,\n                    me = this,\n                    zoomOut = false;\n\n            if (areaData) {\n                // save original state on first zoom operation\n                if (!me.zoomed) {\n                    me.zoomed = true;\n                    me.preZoomWidth = me.scaleInfo.width;\n                    me.preZoomHeight = me.scaleInfo.height;\n                    me.zoomedArea = areaData;\n                    if (options.scroll) {\n                        me.wrapper.css({ overflow: 'auto' });\n                    }\n                }\n                corners = $.mapster.utils.areaCorners(areaData.coords(1, 0));\n                width = me.wrapper.innerWidth() - scrollBarSize - padding * 2;\n                height = me.wrapper.innerHeight() - scrollBarSize - padding * 2;\n                diffX = corners.maxX - corners.minX;\n                diffY = corners.maxY - corners.minY;\n                ratioX = width / diffX;\n                ratioY = height / diffY;\n                ratio = Math.min(ratioX, ratioY);\n                offsetX = (width - diffX * ratio) / 2;\n                offsetY = (height - diffY * ratio) / 2;\n\n                newWidth = me.scaleInfo.realWidth * ratio;\n                newHeight = me.scaleInfo.realHeight * ratio;\n                scrollLeft = (corners.minX) * ratio - padding - offsetX;\n                scrollTop = (corners.minY) * ratio - padding - offsetY;\n            } else {\n                if (!me.zoomed) {\n                    return;\n                }\n                zoomOut = true;\n                newWidth = me.preZoomWidth;\n                newHeight = me.preZoomHeight;\n                scrollLeft = null;\n                scrollTop = null;\n            }\n\n            this.resize({\n                width: newWidth,\n                height: newHeight,\n                duration: options.duration,\n                scroll: scroll,\n                scrollLeft: scrollLeft,\n                scrollTop: scrollTop,\n                // closure so we can be sure values are correct\n                callback: (function () {\n                    var isZoomOut = zoomOut,\n                            scroll = options.scroll,\n                            areaD = areaData;\n                    return function () {\n                        if (isZoomOut) {\n                            me.preZoomWidth = null;\n                            me.preZoomHeight = null;\n                            me.zoomed = false;\n                            me.zoomedArea = false;\n                            if (scroll) {\n                                me.wrapper.css({ overflow: 'inherit' });\n                            }\n                        } else {\n                            // just to be sure it wasn't canceled & restarted\n                            me.zoomedArea = areaD;\n                        }\n                    };\n                } ())\n            });\n        }\n        return (new m.Method(this,\n                function (opts) {\n                    zoom.call(this);\n                },\n                function () {\n                    zoom.call(this.owner, this);\n                },\n                {\n                    name: 'zoom',\n                    args: arguments,\n                    first: true,\n                    key: key\n                }\n                )).go();\n\n\n    };\n    */\n} (jQuery));\n/* tooltip.js - tooltip functionality\n   requires areacorners.js\n*/\n\n(function ($) {\n\n    var m = $.mapster, u = m.utils;\n\n    $.extend(m.defaults, {\n        toolTipContainer: '<div style=\"border: 2px solid black; background: #EEEEEE; width:160px; padding:4px; margin: 4px; -moz-box-shadow: 3px 3px 5px #535353; ' +\n        '-webkit-box-shadow: 3px 3px 5px #535353; box-shadow: 3px 3px 5px #535353; -moz-border-radius: 6px 6px 6px 6px; -webkit-border-radius: 6px; ' +\n        'border-radius: 6px 6px 6px 6px; opacity: 0.9;\"></dteniv>',\n        showToolTip: false,\n        toolTipFade: true,\n        toolTipClose: ['area-mouseout','image-mouseout'],\n        onShowToolTip: null,\n        onHideToolTip: null\n    });\n\n    $.extend(m.area_defaults, {\n        toolTip: null,\n        toolTipClose: null\n    });\n\n\n    /**\n     * Show a tooltip positioned near this area.\n     *\n     * @param {string|jquery} html A string of html or a jQuery object containing the tooltip content.\n     * @param {string|jquery} [template] The html template in which to wrap the content\n     * @param {string|object} [css] CSS to apply to the outermost element of the tooltip\n     * @return {jquery} The tooltip that was created\n     */\n\n    function createToolTip(html, template, css) {\n        var tooltip;\n\n        // wrap the template in a jQuery object, or clone the template if it's already one.\n        // This assumes that anything other than a string is a jQuery object; if it's not jQuery will\n        // probably throw an error.\n\n        if (template) {\n            tooltip = typeof template === 'string' ?\n                $(template) :\n                $(template).clone();\n\n            tooltip.append(html);\n        } else {\n            tooltip=$(html);\n        }\n\n        // always set display to block, or the positioning css won't work if the end user happened to\n        // use a non-block type element.\n\n        tooltip.css($.extend((css || {}),{\n                display:\"block\",\n                position:\"absolute\"\n            })).hide();\n\n        $('body').append(tooltip);\n\n        // we must actually add the tooltip to the DOM and \"show\" it in order to figure out how much space it\n        // consumes, and then reposition it with that knowledge.\n        // We also cache the actual opacity setting to restore finally.\n\n        tooltip.attr(\"data-opacity\",tooltip.css(\"opacity\"))\n            .css(\"opacity\",0);\n\n        // doesn't really show it because opacity=0\n\n        return tooltip.show();\n    }\n\n\n    /**\n     * Show a tooltip positioned near this area.\n     *\n     * @param {jquery} tooltip The tooltip\n     * @param {object} [options] options for displaying the tooltip.\n     *  @config {int} [left] The 0-based absolute x position for the tooltip\n     *  @config {int} [top] The 0-based absolute y position for the tooltip\n     *  @config {string|object} [css] CSS to apply to the outermost element of the tooltip\n     *  @config {bool} [fadeDuration] When non-zero, the duration in milliseconds of a fade-in effect for the tooltip.\n     */\n\n    function showToolTipImpl(tooltip,options)\n    {\n        var tooltipCss = {\n                \"left\":  options.left + \"px\",\n                \"top\": options.top + \"px\"\n            },\n            actalOpacity=tooltip.attr(\"data-opacity\") || 0,\n            zindex = tooltip.css(\"z-index\");\n\n        if (parseInt(zindex,10)===0\n            || zindex === \"auto\") {\n            tooltipCss[\"z-index\"] = 9999;\n        }\n\n        tooltip.css(tooltipCss)\n            .addClass('mapster_tooltip');\n\n\n        if (options.fadeDuration && options.fadeDuration>0) {\n            u.fader(tooltip[0], 0, actalOpacity, options.fadeDuration);\n        } else {\n            u.setOpacity(tooltip[0], actalOpacity);\n        }\n    }\n\n    /**\n     * Hide and remove active tooltips\n     *\n     * @param  {MapData} this The mapdata object to which the tooltips belong\n     */\n\n    m.MapData.prototype.clearToolTip = function() {\n        if (this.activeToolTip) {\n            this.activeToolTip.stop().remove();\n            this.activeToolTip = null;\n            this.activeToolTipID = null;\n            u.ifFunction(this.options.onHideToolTip, this);\n        }\n    };\n\n    /**\n     * Configure the binding between a named tooltip closing option, and a mouse event.\n     *\n     * If a callback is passed, it will be called when the activating event occurs, and the tooltip will\n     * only closed if it returns true.\n     *\n     * @param  {MapData}  [this]     The MapData object to which this tooltip belongs.\n     * @param  {String}   option     The name of the tooltip closing option\n     * @param  {String}   event      UI event to bind to this option\n     * @param  {Element}  target     The DOM element that is the target of the event\n     * @param  {Function} [beforeClose] Callback when the tooltip is closed\n     * @param  {Function} [onClose]  Callback when the tooltip is closed\n     */\n    function bindToolTipClose(options, bindOption, event, target, beforeClose, onClose) {\n        var event_name = event + '.mapster-tooltip';\n\n        if ($.inArray(bindOption, options) >= 0) {\n            target.unbind(event_name)\n                .bind(event_name, function (e) {\n                    if (!beforeClose || beforeClose.call(this,e)) {\n                        target.unbind('.mapster-tooltip');\n                        if (onClose) {\n                            onClose.call(this);\n                        }\n                    }\n                });\n\n            return {\n                object: target,\n                event: event_name\n            };\n        }\n    }\n\n    /**\n     * Show a tooltip.\n     *\n     * @param {string|jquery}   [tooltip]       A string of html or a jQuery object containing the tooltip content.\n     *\n     * @param {string|jquery}   [target]        The target of the tooltip, to be used to determine positioning. If null,\n     *                                          absolute position values must be passed with left and top.\n     *\n     * @param {string|jquery}   [image]         If target is an [area] the image that owns it\n     *\n     * @param {string|jquery}   [container]     An element within which the tooltip must be bounded\n     *\n     *\n     *\n     * @param {object|string|jQuery} [options]  options to apply when creating this tooltip - OR -\n     *                                          The markup, or a jquery object, containing the data for the tooltip\n     *\n     *  @config {string}        [closeEvents]   A string with one or more comma-separated values that determine when the tooltip\n     *                                          closes: 'area-click','tooltip-click','image-mouseout' are valid values\n     *                                          then no template will be used.\n     *  @config {int}           [offsetx]       the horizontal amount to offset the tooltip\n     *  @config {int}           [offsety]       the vertical amount to offset the tooltip\n     *  @config {string|object} [css]           CSS to apply to the outermost element of the tooltip\n     */\n\n    function showToolTip(tooltip,target,image,container,options) {\n        var corners,\n            ttopts = {};\n\n        options = options || {};\n\n\n        if (target) {\n\n            corners = u.areaCorners(target,image,container,\n                                    tooltip.outerWidth(true),\n                                    tooltip.outerHeight(true));\n\n            // Try to upper-left align it first, if that doesn't work, change the parameters\n\n            ttopts.left = corners[0];\n            ttopts.top = corners[1];\n\n        } else {\n\n            ttopts.left = options.left;\n            ttopts.top = options.top;\n        }\n\n        ttopts.left += (options.offsetx || 0);\n        ttopts.top +=(options.offsety || 0);\n\n        ttopts.css= options.css;\n        ttopts.fadeDuration = options.fadeDuration;\n\n        showToolTipImpl(tooltip,ttopts);\n\n        return tooltip;\n    }\n\n    /**\n     * Show a tooltip positioned near this area.\n      *\n     * @param {string|jquery}   [content]       A string of html or a jQuery object containing the tooltip content.\n\n     * @param {object|string|jQuery} [options]  options to apply when creating this tooltip - OR -\n     *                                          The markup, or a jquery object, containing the data for the tooltip\n     *  @config {string|jquery}   [container]     An element within which the tooltip must be bounded\n     *  @config {bool}          [template]      a template to use instead of the default. If this property exists and is null,\n     *                                          then no template will be used.\n     *  @config {string}        [closeEvents]   A string with one or more comma-separated values that determine when the tooltip\n     *                                          closes: 'area-click','tooltip-click','image-mouseout' are valid values\n     *                                          then no template will be used.\n     *  @config {int}           [offsetx]       the horizontal amount to offset the tooltip\n     *  @config {int}           [offsety]       the vertical amount to offset the tooltip\n     *  @config {string|object} [css]           CSS to apply to the outermost element of the tooltip\n     */\n    m.AreaData.prototype.showToolTip= function(content,options) {\n        var tooltip, closeOpts, target, tipClosed, template,\n            ttopts = {},\n            ad=this,\n            md=ad.owner,\n            areaOpts = ad.effectiveOptions();\n\n        // copy the options object so we can update it\n        options = options ? $.extend({},options) : {};\n\n        content = content || areaOpts.toolTip;\n        closeOpts = options.closeEvents || areaOpts.toolTipClose || md.options.toolTipClose || 'tooltip-click';\n\n        template = typeof options.template !== 'undefined' ?\n                options.template :\n                md.options.toolTipContainer;\n\n        options.closeEvents = typeof closeOpts === 'string' ?\n            closeOpts = u.split(closeOpts) :\n            closeOpts;\n\n        options.fadeDuration = options.fadeDuration ||\n                 (md.options.toolTipFade ?\n                    (md.options.fadeDuration || areaOpts.fadeDuration) : 0);\n\n        target = ad.area ?\n            ad.area :\n            $.map(ad.areas(),\n                function(e) {\n                    return e.area;\n                });\n\n        if (md.activeToolTipID===ad.areaId) {\n            return;\n        }\n\n        md.clearToolTip();\n\n        md.activeToolTip = tooltip = createToolTip(content,\n            template,\n            options.css);\n\n        md.activeToolTipID = ad.areaId;\n\n        tipClosed = function() {\n            md.clearToolTip();\n        };\n\n        bindToolTipClose(closeOpts,'area-click', 'click', $(md.map), null, tipClosed);\n        bindToolTipClose(closeOpts,'tooltip-click', 'click', tooltip,null, tipClosed);\n        bindToolTipClose(closeOpts,'image-mouseout', 'mouseout', $(md.image), function(e) {\n            return (e.relatedTarget && e.relatedTarget.nodeName!=='AREA' && e.relatedTarget!==ad.area);\n        }, tipClosed);\n\n\n        showToolTip(tooltip,\n                    target,\n                    md.image,\n                    options.container,\n                    template,\n                    options);\n\n        u.ifFunction(md.options.onShowToolTip, ad.area,\n        {\n            toolTip: tooltip,\n            options: ttopts,\n            areaOptions: areaOpts,\n            key: ad.key,\n            selected: ad.isSelected()\n        });\n\n        return tooltip;\n    };\n\n\n    /**\n     * Parse an object that could be a string, a jquery object, or an object with a \"contents\" property\n     * containing html or a jQuery object.\n     *\n     * @param  {object|string|jQuery} options The parameter to parse\n     * @return {string|jquery} A string or jquery object\n     */\n    function getHtmlFromOptions(options) {\n\n            // see if any html was passed as either the options object itself, or the content property\n\n            return (options ?\n                ((typeof options === 'string' || options.jquery) ?\n                    options :\n                    options.content) :\n                null);\n    }\n\n    /**\n     * Activate or remove a tooltip for an area. When this method is called on an area, the\n     * key parameter doesn't apply and \"options\" is the first parameter.\n     *\n     * When called with no parameters, or \"key\" is a falsy value, any active tooltip is cleared.\n     *\n     * When only a key is provided, the default tooltip for the area is used.\n     *\n     * When html is provided, this is used instead of the default tooltip.\n     *\n     * When \"noTemplate\" is true, the default tooltip template will not be used either, meaning only\n     * the actual html passed will be used.\n     *\n     * @param  {string|AreaElement} key The area for which to activate a tooltip, or a DOM element.\n     *\n     * @param {object|string|jquery} [options] options to apply when creating this tooltip - OR -\n     *                                         The markup, or a jquery object, containing the data for the tooltip\n     *  @config {string|jQuery} [content]   the inner content of the tooltip; the tooltip text or HTML\n     *  @config {Element|jQuery} [container]   the inner content of the tooltip; the tooltip text or HTML\n     *  @config {bool}          [template]  a template to use instead of the default. If this property exists and is null,\n     *                                      then no template will be used.\n     *  @config {int}           [offsetx]   the horizontal amount to offset the tooltip.\n     *  @config {int}           [offsety]   the vertical amount to offset the tooltip.\n     *  @config {string|object} [css]       CSS to apply to the outermost element of the tooltip\n     *  @config {string|object} [css] CSS to apply to the outermost element of the tooltip\n     *  @config {bool}          [fadeDuration] When non-zero, the duration in milliseconds of a fade-in effect for the tooltip.\n     * @return {jQuery} The jQuery object\n     */\n\n    m.impl.tooltip = function (key,options) {\n        return (new m.Method(this,\n        function mapData() {\n            var tooltip, target, md=this;\n            if (!key) {\n                md.clearToolTip();\n            } else {\n                target=$(key);\n                if (md.activeToolTipID ===target[0]) {\n                    return;\n                }\n                md.clearToolTip();\n\n                md.activeToolTip = tooltip = createToolTip(getHtmlFromOptions(options),\n                            options.template || md.options.toolTipContainer,\n                            options.css);\n                md.activeToolTipID = target[0];\n\n                bindToolTipClose(['tooltip-click'],'tooltip-click', 'click', tooltip, null, function() {\n                    md.clearToolTip();\n                });\n\n                md.activeToolTip = tooltip = showToolTip(tooltip,\n                    target,\n                    md.image,\n                    options.container,\n                    options);\n            }\n        },\n        function areaData() {\n            if ($.isPlainObject(key) && !options) {\n                options = key;\n            }\n\n            this.showToolTip(getHtmlFromOptions(options),options);\n        },\n        {\n            name: 'tooltip',\n            args: arguments,\n            key: key\n        }\n    )).go();\n    };\n} (jQuery));\n","/*\n* rwdImageMaps jQuery plugin v1.6\n*\n* Allows image maps to be used in a responsive design by recalculating the area coordinates to match the actual image size on load and window.resize\n*\n* Copyright (c) 2016 Matt Stow\n* https://github.com/stowball/jQuery-rwdImageMaps\n* http://mattstow.com\n* Licensed under the MIT license\n*/\n;(function($) {\n\t$.fn.rwdImageMaps = function() {\n\t\tvar $img = this;\n\n\t\tvar rwdImageMap = function() {\n\t\t\t$img.each(function() {\n\t\t\t\tif (typeof($(this).attr('usemap')) == 'undefined')\n\t\t\t\t\treturn;\n\n\t\t\t\tvar that = this,\n\t\t\t\t\t$that = $(that);\n\n\t\t\t\t// Since WebKit doesn't know the height until after the image has loaded, perform everything in an onload copy\n\t\t\t\t$('<img />').on('load', function() {\n\t\t\t\t\tvar attrW = 'width',\n\t\t\t\t\t\tattrH = 'height',\n\t\t\t\t\t\tw = $that.attr(attrW),\n\t\t\t\t\t\th = $that.attr(attrH);\n\n\t\t\t\t\tif (!w || !h) {\n\t\t\t\t\t\tvar temp = new Image();\n\t\t\t\t\t\ttemp.src = $that.attr('src');\n\t\t\t\t\t\tif (!w)\n\t\t\t\t\t\t\tw = temp.width;\n\t\t\t\t\t\tif (!h)\n\t\t\t\t\t\t\th = temp.height;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar wPercent = $that.width()/100,\n\t\t\t\t\t\thPercent = $that.height()/100,\n\t\t\t\t\t\tmap = $that.attr('usemap').replace('#', ''),\n\t\t\t\t\t\tc = 'coords';\n\n\t\t\t\t\t$('map[name=\"' + map + '\"]').find('area').each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tif (!$this.data(c))\n\t\t\t\t\t\t\t$this.data(c, $this.attr(c));\n\n\t\t\t\t\t\tvar coords = $this.data(c).split(','),\n\t\t\t\t\t\t\tcoordsPercent = new Array(coords.length);\n\n\t\t\t\t\t\tfor (var i = 0; i < coordsPercent.length; ++i) {\n\t\t\t\t\t\t\tif (i % 2 === 0)\n\t\t\t\t\t\t\t\tcoordsPercent[i] = parseInt(((coords[i]/w)*100)*wPercent);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcoordsPercent[i] = parseInt(((coords[i]/h)*100)*hPercent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$this.attr(c, coordsPercent.toString());\n\t\t\t\t\t});\n\t\t\t\t}).attr('src', $that.attr('src'));\n\t\t\t});\n\t\t};\n\t\t$(window).resize(rwdImageMap).trigger('resize');\n\n\t\treturn this;\n\t};\n})(jQuery);\n","export default (window._is_config || {});\n\nif (typeof window._is_config === 'undefined') {\n  console.log('window._is_config not found');\n}\n","import $ from \"jquery\";\nimport PubSub from \"pubsub\";\n\nexport default class Loading {\n\n  constructor(options = {}) {\n    var defaults = {\n      el: \"body\"\n    };\n    this.options = Object.assign(defaults, options);\n  }\n\n  load() {\n    if ($(this.options.el + \" > .loading\").length == 0) {\n      $(this.options.el)\n        .prepend('<div class=\"loading\"><div class=\"content loader\"><div class=\"inner\">&nbsp;</div></div></div>');\n    }\n  }\n\n  stop() {\n    $(this.options.el + \"> .loading\").remove();\n  }\n}\n","import $ from 'jquery';\n\nexport default function CartInput(popoverSelector) {\n  this.popoverSelector = popoverSelector ? popoverSelector : \".cart-header\";\n}\n\nCartInput.prototype = {\n\n  hideCart: function() {\n    $(this.popoverSelector).popover(\"hide\").popover(\"destroy\");\n    $('.popover').remove();\n  },\n\n  input: function(data, count, total, time, title) {\n    this.hideCart();\n\n    var _this = this;\n    var time = time ? time : 6000;\n    var options = {\n      content: data\n    };\n\n    if (title) {\n      options.title = title;\n    }\n\n    clearTimeout(_this.timeout);\n\n    if (this.popoverSelector.match(/^\\.notepad/)) {\n      $(\".notepad-count\").html(count).show();\n    } else {\n      $(\".js-cart-count\").html(count).show();\n      $(\".js-cart-sum\").html(total);\n    }\n    $(\"html, body\").animate({\n      scrollTop: 0\n    }, 500);\n\n    var popoverSelector = this.popoverSelector;\n    $(this.popoverSelector).on(\"shown.bs.popover\", function() {\n\n      if (popoverSelector.match(/notepad/)) {\n        //the following cannot be set via css, because apparently bootstrap dynamically overwrites the coordinates upon opening the tooltip\n        $(\".popover .arrow\").css(\"right\", \"0px\"); //aligns the nose of the popover to the right, so that the tip points exactly to the notepad-icon\n\n        var popEl = $(\".popover\").get(0);\n        popEl.parentNode.removeChild(popEl);\n\n        var inXS = $(\".notepad-element\").width() === 0; //width is set to 0 via css if in xs, thus, if width == 0, we are in a smartphone\n        $(inXS ? \"#page\" : \".notepad-header-wrapper\").get(0).appendChild(popEl); //attach the popover to page Div, if in smartphone, to notepad-element otherwise\n        if (inXS) {\n          popEl.style.left = \"0\"; //apparently the left from the css definition in header.less gets overwritten upon opening the tooltip\n        }\n      }\n      var close = $('<button type=\"button\" class=\"close\">&times;</button>').on(\"click\", function() {\n        _this.hideCart();\n        clearTimeout(_this.timeout);\n      });\n\n      var popoverTitle = $(this).next().find(\".popover-title\");\n      if (popoverTitle.find(\"button\").length == 0) popoverTitle.append(close);\n    });\n\n    $(this.popoverSelector).popover(options).popover(\"show\");\n    //$(\".cart-header\").popover(options).popover(\"show\");\n\n    _this.timeout = setTimeout(function() {\n      _this.hideCart();\n    }, time);\n\n  }\n};\n","import $ from 'jquery';\n\nexport default function Html5Validation() {\n  // body...\n}\n\nHtml5Validation.prototype = {\n  showValidationErrorMessage: function(element, message) {\n    var errorField = $(element).closest('.validation-group').find('.form-error');\n    if (message) {\n      errorField.show();\n      errorField.find('.msg').html(message);\n    }\n  },\n  validateField: function(element) {\n    var _this = this;\n    var inputField = element.validity;\n    var inputFieldIsVisible = $(element).is(\":visible\");\n    var inputFieldName = $(element).attr(\"name\");\n\n    if ( !inputFieldIsVisible && inputFieldName.startsWith('_') ) {\n      return true;\n    }\n\n    if(!inputField.valueMissing && $(element).hasClass('no-validate')){\n      $(element).removeClass('has-error');\n      $(element).closest('.validation-group').find('.form-error').hide();\n      return true;\n    }\n\n    var matchingElement = $(element).data(\"validation-matching-field\");\n    var hasMatchingError = false;\n    if (matchingElement !== undefined) {\n      var matchingElementValue = $(\"#\" + matchingElement).val();\n      hasMatchingError = !(matchingElementValue === $(element).val());\n    }\n    if ((!inputField.valid || hasMatchingError) && inputFieldIsVisible) {\n      if (hasMatchingError) {\n        var $matchingElement = $(\"#\" + matchingElement);\n        _this.showValidationErrorMessage(element, $(element).data(\"error-nomatch\"));\n        _this.showValidationErrorMessage($matchingElement[0], $matchingElement.data(\"error-nomatch\"));\n      } else if (inputField.valueMissing) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-valuemissing\"));\n      } else if (inputField.typeMismatch) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-typemismatch\"));\n      } else if (inputField.patternMismatch) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-patternmismatch\"));\n      } else if (inputField.tooLong) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-toolong\"));\n      } else if (inputField.tooShort) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-tooshort\"));\n      } else if (inputField.rangeUnderflow) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-rangeunderflow\"));\n      } else if (inputField.rangeOverflow) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-rangeoverflow\"));\n      } else if (inputField.stepMismatch) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-stepmismatch\"));\n      } else if (inputField.badInput) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-badinput\"));\n      } else if (inputField.customError) {\n        _this.showValidationErrorMessage(element, $(element).data(\"error-customerror\"));\n      }\n    } else {\n      $(element).removeClass('has-error');\n      $(element).closest('.validation-group').find('.form-error').hide();\n      if (matchingElement !== undefined) {\n        $(\"#\" + matchingElement).closest('.validation-group').find('.form-error').hide();\n      }\n      return true;\n    }\n\n    $(element).addClass('has-error');\n    return false;\n  },\n  addValidationHandler: function() {\n    var _this = this;\n    $(\"form.validate-form input, form.validate-form select, form.validate-form textarea\").each(function() {\n      var __this = this;\n      $(this).blur(function() {\n        _this.validateField(__this);\n      });\n    });\n    $(\"form.validate-form input[type=checkbox]\").each(function() {\n      var __this = this;\n      $(this).click(function() {\n        _this.validateField(__this);\n      });\n    });\n  },\n\n\n\n  validateOnSubmit: function() {\n    var _this = this;\n    $(\"form.validate-form\").submit(function(e) {\n      if (!_this.validate($(this))) {\n        $('html,body').animate({scrollTop: $('.has-error:first').offset().top});\n        e.preventDefault();\n      }\n    });\n  },\n\n  validateOnAjaxSubmit: function(that) {\n    var _this = this;\n    if (!_this.validate(that)) {\n      return true;\n    } else {\n      return false;\n    }\n  },\n\n  validate: function(form) {\n    var _this = this;\n    var noError = true;\n\n    form.find(\"input, select, textarea\").each(function() {\n      var fieldHasNoError = _this.validateField(this);\n      noError = noError && fieldHasNoError;\n    });\n\n    return noError;\n  }\n\n};\n","import $ from 'jquery';\n\nexport default function scrollToElement($element, duration) {\n  if ($element === null || typeof $element === 'undefined') return;\n  if ($element.offset === null || typeof $element.offset === 'undefined') return;\n  $('html, body').animate({\n    scrollTop: $element.offset().top\n  }, duration);\n}\n","//Transform Tabs to collapsible elements and vice versa\nimport $ from 'jquery';\nimport 'bootstrap';\n\nvar defaults = {\n  collapse: true\n};\n\nclass Ttcol {\n\n  constructor(el, options) {\n    var coll = options.collapse;\n    this.el = el;\n\n    if (coll && el.hasClass('ttcol-processed')) {\n      this.expand();\n    }\n\n    if (coll) {\n      this.collapse();\n    } else {\n      this.expand();\n    }\n  }\n\n  collapse() {\n    var el = this.el;\n\n    el.addClass(\"ttcol-processed\");\n    el.find(\".panel-collapse\").removeClass(\"in\");\n    el.find('.tab-pane.active').removeClass(\"active\").first().find(\".panel-collapse\").addClass(\"in\");\n    el.find('.tab-pane').removeClass(\"tab-pane\").find(\".panel-collapse\").addClass(\"collapse\");\n  }\n\n  expand() {\n    var el = this.el;\n\n    el.removeClass(\"ttcol-processed\");\n    var id = $(\".in\", el).attr(\"id\");\n    el.find('.panel-collapse').removeClass(\"in, collapse\").attr(\"style\", \"\").closest(\".panel\").addClass(\"tab-pane\");\n\n    var active_ref;\n    if (id)\n      active_ref = \"#\" + id.replace(\"-pane\", \"\");\n    else\n      active_ref = \"\";\n\n    $('a[href=\"' + active_ref + '\"]').tab(\"show\");\n    el.find('.tab-pane').removeClass(\"active\");\n    $(active_ref).addClass(\"active\");\n  }\n}\n\n$.fn.ttcol = function(options) {\n  options = Object.assign(defaults, options);\n  var matched = $(this);\n  matched.each(function() {\n    new Ttcol($(this), options);\n  });\n  return matched;\n};\n","/**\n* jQuery Plugin for adding events to bootstrap prev and next controls using swipejs\n**/\nimport $ from 'jquery';\n\nfunction Controls($el, options) {\n  this.slider = $el.data(\"Swipe\");\n  this.$el = $el;\n  this.options = options;\n  this.init();\n  this.$el.bind(\"swipe.kill\", $.proxy(this.kill, this));\n}\n\nControls.prototype = {\n  init: function() {\n    if (!this.slider) return;\n\n    this.numSlides = this.slider.getNumSlides();\n\n    if (this.options.selector) {\n      this.controls = $(this.options.selector);\n    }\n    else\n      this.controls = $(\".carousel-control\", this.$el);\n\n    if (this.controls.length == 0)\n      this.controls = $(\".carousel-control\", this.$el.parent());\n    if (this.controls.length == 0) {\n      return;\n    }\n\n\n    if (this.numSlides == 1) {\n      this.controls.addClass(\"inactive\").hide();\n    } else {\n      this.controls.show();\n      this.checkActive();\n    }\n\n    this.originalCallback = this.slider.options.callback;\n    this.slider.options.callback = $.proxy(this.callback, this);\n\n    var _this = this;\n    this.controls.on(\"click\", function(e) {\n      e.preventDefault();\n\n      if ($(this).attr(\"data-slide\") == \"prev\") {\n        _this.slider.prev();\n        _this.checkActive();\n      } else {\n        _this.slider.next();\n        _this.checkActive();\n      }\n    });\n  },\n  checkActive: function() {\n    if (this.slider.options.continuous) return;\n\n    this.controls.removeClass(\"inactive\");\n\n    if (!this.slider.options.continous && this.slider.getPos() == 0) {\n      this.controls.filter('[data-slide=\"prev\"]').addClass(\"inactive\");\n    }\n    if (!this.slider.options.continous && this.slider.getPos() == this.numSlides - 1) {\n      this.controls.filter('[data-slide=\"next\"]').addClass(\"inactive\");\n    }\n  },\n  kill: function() {\n    this.controls.unbind(\"click\");\n    this.controls.hide();\n    this.$el.unbind(\"swipe.kill\");\n  },\n  callback: function(pos) {\n    if (this.originalCallback) this.originalCallback.call(null, pos);\n    this.checkActive();\n  }\n};\n\n$.fn.controls = function(options) {\n  var defaults = {\n    selector: null\n  };\n  options = $.extend(defaults, options);\n\n  var matched = $(this);\n\n  matched.each(function() {\n    new Controls($(this), options);\n  });\n\n  return matched;\n};\n","/**\n * Responsive Zoom Plugin\n */\nimport $ from 'jquery';\nimport panzoom from '../../libs/jquery.panzoom';\n\nvar defaults = {\n};\n\nfunction Zoom(el, options) {\n  this.$el = el;\n  this.options = options;\n  this.container = null;\n  this.init();\n}\n\nZoom.prototype = {\n  init: function() {\n    if (!this.isMobile()) {\n      $(\"img\", this.$el).off(\"mouseover\").on(\"mouseover\", $.proxy(this.hover, this));\n    }\n    this.$el.off(\"click\").on(\"click\", $.proxy(this.openFullscreen, this));\n  },\n  kill: function() {\n    this.out({\n      pageX: -1,\n      pageY: -1\n    });\n    $(\"img\", this.$el).off(\"mouseover\");\n  },\n  move: function(e) {\n    var localPoint = [e.pageX - this.current_img.offset().left, e.pageY - this.current_img.offset().top];\n    var bigPoint = [localPoint[0] * this.ratio, localPoint[1] * this.ratio];\n    var centered_left = -bigPoint[0] + this.current_img_size.width / 2;\n\n    if (centered_left > 0)\n      centered_left = 0;\n    else if (centered_left < this.current_img_size.width - this.current_big_img_size.width)\n      centered_left = this.current_img_size.width - this.current_big_img_size.width;\n\n    var centered_top = -bigPoint[1] + this.current_img_size.height / 2;\n    if (centered_top > 0)\n      centered_top = 0;\n    else if (centered_top < this.current_img_size.height - this.current_big_img_size.height)\n      centered_top = this.current_img_size.height - this.current_big_img_size.height;\n\n    var rect = $(\".zoom-rect\", this.$el);\n    var rect_x = localPoint[0] - rect.width() / 2;\n    var rect_y = localPoint[1] - rect.height() / 2;\n    rect_x = Math.max(rect_x, 0);\n    rect_x = Math.min(rect_x, this.current_img_size.width - rect.outerWidth());\n    rect_y = Math.max(rect_y, 0);\n    rect_y = Math.min(rect_y, this.current_img_size.height - rect.outerHeight());\n\n    rect.css({\n      left: rect_x,\n      top: rect_y\n    });\n\n    this.current_big_img.css({\n      left: centered_left + \"px\",\n      top: centered_top + \"px\"\n    });\n  },\n  out: function(e) {\n    if (!this.container) return;\n\n    if (!this.checkBounds(e.pageX, e.pageY)) {\n      this.container.find(\"img\").remove();\n\n      $(\".zoom-rect, .pad, .zoom-container\", this.$el).remove();\n\n      $(\".pad\", this.$el).unbind(\"mousemove\");\n      $(\".pad\", this.$el).unbind(\"mouseout\");\n\n      this.$el.trigger(\"zoom.remove\");\n      this.inside = false;\n    }\n  },\n  hover: function(e) {\n    if (this.inside || this.$el.hasClass(\"too-small\")) return;\n\n    this.inside = true;\n    this.current_img = $(e.target);\n    this.current_img_size = {\n      width: this.current_img.width(),\n      height: this.current_img.height()\n    }\n\n    var fill_css = {\n      position: \"absolute\",\n      top: 0,\n      left: 0,\n      width: this.current_img_size.width,\n      height: this.current_img_size.height,\n      zIndex: 199\n    };\n    var pad = $('<div class=\"pad\">').css(fill_css);\n    this.$el.append(pad);\n\n    fill_css.zIndex = 197;\n    this.container = $('<div class=\"zoom-container\">').css(fill_css);\n    this.$el.append(this.container);\n\n\n    this.$el.trigger(\"zoom.add\");\n\n    this.loadImg(this.current_img.attr(\"data-bigimage\"), this.imgLoaded);\n\n    this.hoverE = e;\n    var _this = this;\n    $(\".pad\", this.$el).bind(\"mouseout\", $.proxy(this.out, this)).bind(\"mousemove\", function(e) {\n      _this.hoverE = e;\n    });\n  },\n  loadImg: function(url, callback) {\n    this.container.addClass(\"loading\");\n\n    var img = document.createElement(\"img\");\n    var _this = this;\n    $(img).load(function() {\n      callback.call(_this, $(img));\n    });\n    img.src = url;\n  },\n  imgLoaded: function($img) {\n    this.container.removeClass(\"loading\");\n    if (!this.inside) return;\n\n    this.container.find(\"img\").remove();\n    $img.css(\"position\", \"absolute\");\n    $img.css(\"max-width\", \"none\");\n\n    this.current_big_img = $img;\n    this.container.append($img);\n\n    this.current_big_img_size = {\n      width: $img.width(),\n      height: $img.height()\n    };\n    this.ratio = this.current_big_img_size.width / this.current_img_size.width;\n\n    var zoom_rect = $('<div class=\"zoom-rect\">').css({\n      width: this.container.width() * this.current_img_size.width / this.current_big_img_size.width,\n      height: this.container.height() * this.current_img_size.height / this.current_big_img_size.height,\n      position: \"absolute\",\n      zIndex: 198\n    });\n\n    if (this.$el.find(\".zoom-rect\").length == 0) this.$el.append(zoom_rect);\n\n    $(\".pad\", this.$el).unbind(\"mousemove\").bind(\"mousemove\", $.proxy(this.move, this));\n    this.move(this.hoverE);\n  },\n  // check if point is inside the zoomed image\n  checkBounds: function(x, y) {\n    if (!this.current_img) return false;\n    return (x > this.current_img.offset().left && x < this.current_img.offset().left + this.current_img.width() && y > this.current_img.offset().top && y < this.current_img.offset().top + this.current_img.height());\n  },\n\n  isMobile: function() {\n    return Function.prototype.bind && (('ontouchstart' in window) || window.navigator.msPointerEnabled || window.DocumentTouch && document instanceof DocumentTouch);\n  },\n\n  openFullscreen: function() {\n    var _this = this;\n    var val = this.$el.data(\"fullscreen-image\");\n    var nr = this.$el.data(\"fullscreen-id\");\n    $('#pda-image-fullscreen-bullets div').removeClass('pda-image-fullscreen-bulletActive');\n\n    // Daten sammeln\n    var arr = $('.imageFullscreen').map(function() {\n      return $(this).data('pda-image-fullscreen');\n    });\n\n    $(\"#pda-image-fullscreen-bullets .glyphicon-circle:not(#bullet_1)\").remove();\n    // Bullets erzeugen und Klickevent hinzufügen\n    var cnt = 0;\n    for (var i = 1; i < arr.length; i++) {\n      cnt = i + 1;\n      $(\"#bullet_\" + i).clone().attr('id', 'bullet_' + cnt).attr('data-index', cnt).insertAfter(\"#bullet_\" + i);\n    }\n\n    $('#pda-image-fullscreen-bullets div').on('click', function() {\n      $('#pda-image-fullscreen-bullets div').removeClass('pda-image-fullscreen-bulletActive');\n      $(this).addClass('pda-image-fullscreen-bulletActive');\n      $('#pda-image-fullscreen').attr('src', $('body').find('div.' + $(this).attr('id')).data('pda-image-fullscreen'));\n\n      // show hide arrows on thumbs length\n      _this.showOrHideFullscreenArrows($(this).data('index'), arr.length);\n      $('#pda-image-fullscreen-wrapper').panzoom('reset');\n    });\n\n    $('#pda-image-fullscreen-bullets').find('#bullet_' + nr).addClass('pda-image-fullscreen-bulletActive');\n    $('#pda-image-fullscreen-container').show();\n    $('body').addClass('bodyFullscreenWhite');\n    $('body').attr('data-cerberus','pdp-zoom-overlay');\n    $('.row.art-detail-page').hide();\n    var image = $('#pda-image-fullscreen').attr('src', val).get(0);\n\n    if (this.isMobile()) {\n\n      $('#pda-image-fullscreen-wrapper').panzoom({\n        contain: 'invert',\n        minScale: 1,\n        maxScale: image.naturalWidth / image.clientWidth\n      });\n    }\n\n    // show hide arrows on thumbs length\n    this.showOrHideFullscreenArrows(nr, arr.length);\n  },\n\n  closeFullscreen: function() {\n    $('#pda-image-fullscreen-container').hide();\n    $('body').removeClass('bodyFullscreenWhite');\n    $('.row.art-detail-page').show();\n    $('#pda-image-fullscreen').removeAttr('src');\n    $(\"#pda-image-fullscreen-bullets .glyphicon-circle:not(#bullet_1)\").remove();\n    $(\".pad\").first().trigger(\"mouseout\");\n  },\n\n  prevFullscreen: function() {\n    // Daten sammeln\n    var arr = $('.imageFullscreen').map(function() {\n      return $(this).data('pda-image-fullscreen');\n    });\n\n    for (var i = arr.length; i > 0; i--) {\n      if ($('#pda-image-fullscreen').attr('src') === arr[i]) {\n        $('#pda-image-fullscreen').attr('src', arr[--i]);\n        var current = i;\n        if (i >= 0) {\n          current = i + 1;\n        }\n\n        // show hide arrows on thumbs length\n        Zoom.prototype.showOrHideFullscreenArrows(current, arr.length);\n\n        $('#pda-image-fullscreen-bullets div').removeClass('pda-image-fullscreen-bulletActive');\n        $('#pda-image-fullscreen-bullets').find('#bullet_' + current).addClass('pda-image-fullscreen-bulletActive');\n      }\n    }\n    $('#pda-image-fullscreen-wrapper').panzoom('reset');\n    window.getSelection().removeAllRanges();\n  },\n\n  nextFullscreen: function() {\n    // Daten sammeln\n    var arr = $('.imageFullscreen').map(function() {\n      return $(this).data('pda-image-fullscreen');\n    });\n\n    for (var i = 0; i < arr.length; i++) {\n      if ($('#pda-image-fullscreen').attr('src') === arr[i]) {\n        $('#pda-image-fullscreen').attr('src', arr[++i]);\n        var current = i;\n        if (i < arr.length) {\n          current = i + 1;\n        }\n\n        // show hide arrows on thumbs length\n        Zoom.prototype.showOrHideFullscreenArrows(current, arr.length);\n\n        $('#pda-image-fullscreen-bullets div').removeClass('pda-image-fullscreen-bulletActive');\n        $('#pda-image-fullscreen-bullets').find('#bullet_' + current).addClass('pda-image-fullscreen-bulletActive');\n      }\n    }\n    $('#pda-image-fullscreen-wrapper').panzoom('reset');\n    window.getSelection().removeAllRanges();\n  },\n\n  showOrHideFullscreenArrows: function(index, numberOfImages) {\n    var showLeft = numberOfImages > 1 && index !== 1;\n    var showRight = numberOfImages > 1 && index < numberOfImages;\n    $('#pda-image-fullscreen-right').toggle(showRight);\n    $('#pda-image-fullscreen-left').toggle(showLeft);\n  }\n};\n\n$.fn.zoom = function(options) {\n  options = Object.assign(defaults, options);\n\n  var matched = $(this);\n\n  matched.each(function() {\n    var zoom = new Zoom($(this), options);\n    $(this).data(\"Zoom\", zoom);\n  });\n\n  $(\"#pda-image-fullscreen-close\").off(\"click\").click(Zoom.prototype.closeFullscreen);\n  $(\"#pda-image-fullscreen-left\").off(\"click\").click(Zoom.prototype.prevFullscreen);\n  $(\"#pda-image-fullscreen-right\").off(\"click\").click(Zoom.prototype.nextFullscreen);\n\n  // jQuery Mobile Swipe funktioniert mit ES6 nicht, deswegen wurde bei den IIFE das 'this' auf 'this || window' geändert\n  // Vergleiche: http://richardsumilang.com/programming/javascript/jquery/using-jquery-mobile-in-a-ecmascript-6-project/\n  //$.event.special.swipe.horizontalDistanceThreshold = 100;\n  $(\"#pda-image-fullscreen-wrapper\").off(\"swiperight\").on(\"swiperight\", function() {\n    if (isNotZoomed()) {\n      Zoom.prototype.prevFullscreen();\n    }\n  });\n  $(\"#pda-image-fullscreen-wrapper\").off(\"swipeleft\").on(\"swipeleft\", function() {\n    if (isNotZoomed()) {\n      Zoom.prototype.nextFullscreen();\n    }\n  });\n\n  $(document).off(\"keyup\").keyup(function(e) {\n    var fullscreen = $(\"#pda-image-fullscreen-container\");\n    if (fullscreen.is(\":visible\")) {\n      switch(e.keyCode) {\n        case 27: // escape\n          Zoom.prototype.closeFullscreen();\n          break;\n        case 37: // left\n          Zoom.prototype.prevFullscreen();\n          break;\n        case 39: // right\n          Zoom.prototype.nextFullscreen();\n          break;\n      }\n    }\n  });\n\n  return matched;\n};\n\nvar isNotZoomed = function() {\n  return $('#pda-image-fullscreen-wrapper').css('transform') === 'matrix(1, 0, 0, 1, 0, 0)';\n};\n","/**\n* jQuery Plugin for swipejs, adding lazy load to images having the data-src attribute\n**/\nimport $ from 'jquery';\n\nfunction Lazy($el) {\n  this.slider = $el.data(\"Swipe\");\n  this.$el = $el;\n  this.init();\n  this.$el.bind(\"swipe.kill\", $.proxy(this.kill, this));\n}\n\nLazy.prototype = {\n  init: function() {\n    if (!this.slider) return;\n\n    this.numSlides = this.slider.getNumSlides();\n    this.pos = this.slider.getPos();\n\n    this.originalCallback = this.slider.options.callback;\n    this.slider.options.callback = $.proxy(this.callback, this);\n\n    this.callback(this.pos);\n  },\n  kill: function() {\n    this.$el.unbind(\"swipe.kill\");\n  },\n  callback: function(pos) {\n    if (this.originalCallback) this.originalCallback(pos);\n\n    if (this.numSlides == 2) {\n      this.loadImageAtPos(pos);\n      this.loadImageAtPos(pos + 2);\n    }\n    else this.loadImageAtPos(pos);\n  },\n  loadImageAtPos: function(pos) {\n    var _this = this;\n    $(\".swipe-wrap > div\", this.$el).eq(pos).find(\"img[data-src]\").each(function() {\n      $(this).off(\"load\").on(\"load\", function() {\n        _this.slideWidth = $(this).width();\n        _this.slideHeight = $(this).height();\n        $(this).css({\n          height: \"auto\",\n          width: \"auto\"\n        }).addClass(\"loaded\");\n\n        $(\".swipe-wrap > div img\", _this.$el).not(\".loaded\").css({\n          width: _this.slideWidth + \"px\",\n          height: _this.slideHeight + \"px\"\n        });\n      });\n\n\n      $(this).attr(\"src\", $(this).attr(\"data-src\"));\n    });\n  }\n};\n\n$.fn.lazy = function() {\n  var matched = $(this);\n\n  matched.each(function() {\n    new Lazy($(this));\n  });\n  return matched;\n};\n","export function parseMonetaryAmount(s) {\n  var result = Number(s.replace(/\\./, \"\").replace(/,/, \".\").replace(/\\s+€/, \"\"));\n  result = Math.round(result * 100);\n  return result;\n}\n\nexport function formatMonetaryAmount(ma, symbol) {\n  if (!symbol)\n    symbol = \"€\";\n  if (ma < 0) return \"-\" + formatMonetaryAmount(-ma);\n\n  var result = \"\" + Math.floor(ma / 100.0) + \",\";\n  var cent = ma % 100;\n  if (cent < 10)\n    result += \"0\";\n  result += cent;\n  result += \"\\xA0\" + symbol;\n  return result;\n}\n\nexport function formatPercentage(num) {\n  var result = \"\" + Math.floor(num) + \",\";\n  var frac = Math.floor(num * 100);\n  if (frac < 10)\n    result += \"0\";\n  result += frac;\n  result += \"\\xA0%\";\n  return result;\n}\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\nimport config from '../config/config';\n\nexport default function Coupon() {\n  Pubsub.subscribe(\"core.attach\", $.proxy(this.attach, this));\n  this.loading = new Loading();\n}\n\nCoupon.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n\n    $(\".coupon-used .remove\", element).off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.loading.load();\n      $.post(config.couponPath, {\n        code: $(\"#used_coupon_code\").val(),\n        q: \"coupon_input\",\n        task: \"remove\"\n      }, function(data) {\n        _this.loading.stop();\n        $(\".coupon-wrapper\").replaceWith(data.markup);\n        Pubsub.publish(\"core.attach\", $(\".coupon-wrapper\"));\n      }).fail(function(error) {\n        if (window.console) console.log(error);\n      });\n    });\n\n    var couponEnter = function(e) {\n      if (e.keyCode && e.keyCode != 13) return;\n      e.preventDefault();\n\n      if ($(\".coupon-input\").val() == \"\") {\n        $(\".coupon-input\").parent().addClass(\"has-error\");\n        return;\n      }\n      _this.loading.load();\n      $.post(config.couponPath, {\n        code: $(\".coupon-input\").val(),\n        q: \"coupon_input\",\n        task: \"input\"\n      }, function(data) {\n        _this.loading.stop();\n\n        $(\".coupon-wrapper\").replaceWith(data.markup);\n\n        if (!data.success) {\n          $(\".coupon-wrapper .form-error\").show();\n          $(\".coupon-input\").parent().addClass(\"has-error\");\n        }\n        Pubsub.publish(\"core.attach\", $(\".coupon-wrapper\"));\n      }).fail(function(error) {\n        if (window.console) console.log(error);\n      });\n    };\n\n    $(\".coupon-input\", element).off(\"keydown\").on(\"keydown\", function(e) {\n      if (e.keyCode && e.keyCode == 13) {\n        couponEnter(e);\n      }\n\n    });\n    $(\".coupon-btn\", element).off(\"click\").on(\"click\", couponEnter);\n  },\n  use: function(code) {}\n};\n","/**\n * Form Validation\n * Regex taken from https://github.com/jzaefferer/jquery-validation/\n * validation rules are taken from input types and data-attributes\n **/\nimport $ from 'jquery';\n\nexport function Methods() {\n  // body...\n}\n\nMethods.prototype = {\n  // http://docs.jquery.com/Plugins/Validation/Methods/required\n  required: function(value, element) {\n    if (element.nodeName.toLowerCase() === \"select\") {\n      // could be an array for select-multiple or a string, both are fine this way\n      var val = $(element).val();\n      return val && val.length > 0;\n    }\n\n    if (this.checkable(element)) {\n      return this.getLength(value, element) > 0;\n    }\n    return $.trim(value).length > 0;\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/email\n  email: function(value) {\n    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n    return /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/url\n  url: function(value) {\n    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n    return /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/date\n  date: function(value) {\n    return !/Invalid|NaN/.test(new Date(value).toString());\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n  dateISO: function(value) {\n    return /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/number\n  number: function(value) {\n    return /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/digits\n  digits: function(value) {\n    return /^\\d+$/.test(value);\n  },\n\n  // http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n  // based on http://en.wikipedia.org/wiki/Luhn\n  creditcard: function(value) {\n    // accept only spaces, digits and dashes\n    if (/[^0-9 \\-]+/.test(value)) {\n      return false;\n    }\n    var nCheck = 0,\n      nDigit = 0,\n      bEven = false;\n\n    value = value.replace(/\\D/g, \"\");\n\n    for (var n = value.length - 1; n >= 0; n--) {\n      var cDigit = value.charAt(n);\n      nDigit = parseInt(cDigit, 10);\n      if (bEven) {\n        if ((nDigit *= 2) > 9) {\n          nDigit -= 9;\n        }\n      }\n      nCheck += nDigit;\n      bEven = !bEven;\n    }\n\n    return (nCheck % 10) === 0;\n  },\n\n  minlength: function(value, param) {\n    var length = value.length;\n    return length >= param;\n  },\n\n  maxlength: function(value, param) {\n    var length = value.length;\n    return length <= param;\n  },\n\n  rangelength: function(value, param) {\n    var length = value.length;\n    return (length >= param[0] && length <= param[1]);\n  },\n\n  min: function(value, param) {\n    return value >= param;\n  },\n\n  max: function(value, param) {\n    return value <= param;\n  },\n\n  range: function(value, min, max) {\n    return (this.min(min) && this.max(max));\n  },\n  checkable: function(element) {\n    return (/radio|checkbox/i).test(element.type);\n  },\n  getLength: function(value, element) {\n    switch (element.nodeName.toLowerCase()) {\n    case \"select\":\n      return $(\"option:selected\", element).length;\n    case \"input\":\n      if (this.checkable(element)) {\n        return this.findByName(element.name).filter(\":checked\").length;\n      }\n    }\n    return value.length;\n  },\n  findByName: function(name) {\n    return this.$el.find(\"[name='\" + name + \"']\");\n  }\n}\n\nexport function Validator($el, options) {\n  this.$el = $el;\n  this.methods = new Methods();\n  this.scrollToError = true;\n\n  var _this = this;\n\n  this.setElements();\n  this.formElements.off(\"change.formvalidation\").on(\"change.formvalidation\", function(e) {\n    _this.validateElement($(this), true);\n  });\n\n  if (options && options.plugin) {\n\n    var submitListener = function(e) {\n      if (!_this.validate(true)) {\n        e.preventDefault();\n        e.stopPropagation();\n        return;\n      }\n    };\n    if (this.$el.is('form')) {\n      if (!this.$el.is(\"[data-ajax]\")) {\n        this.$el.submit(submitListener);\n      }\n    }\n    else this.validate(true);\n  }\n}\n\nValidator.prototype = {\n  //classes argument determines, if error css classes are set or not\n  validate: function(classes, noerror) {\n    this.setElements();\n\n    var _this = this;\n\n\n    var ok = true;\n    this.formElements.each(function() {\n      var _ok = _this.validateElement($(this), classes);\n      if (!_ok) {\n        ok = _ok;\n        _this.showError($(this));\n      }\n    //return ok;\n    });\n\n    _this.$el.data(\"FormValid\", ok);\n    if (!ok && !noerror) {\n      this.showError(this.$el);\n    }\n    return ok;\n  },\n  showError: function($element, keepError) {\n    $(\".form-error\", $element).first().show();\n    var msg = $(\".form-error\", $element).first().attr(\"data-orig-error\");\n    if (msg && !keepError) {\n      $(\".form-error .msg\", $element).first().html(msg);\n    }\n    if (this.scrollToError) {\n      var offset = ($(\".form-error\", $element).length > 0) ? $(\".form-error\", $element).first().offset().top : $element.offset().top;\n      $(\"html, body\").animate({\n        scrollTop: offset\n      }, 200);\n    }\n  },\n  validateElement: function($el, classes) {\n    var val = $el.val();\n    var ok = true;\n\n    if ($el.attr(\"required\") != null || val != \"\") {\n      if ($el.attr(\"required\") && !this.methods.required(val, $el[0]))\n        ok = false;\n      //else if($el.attr(\"type\") == \"email\" && !this.methods.email(val)) ok = false;\n      else if ($el.attr(\"type\") == \"url\" && !this.methods.url(val))\n        ok = false;\n      else if ($el.attr(\"data-min\") && (!this.methods.digits(val) || !this.methods.min(val, $el.attr(\"data-min\"))))\n        ok = false;\n      else if ($el.attr(\"data-date\") != null && $el.attr(\"data-agerange\")) {\n        var agerange = $el.attr(\"data-agerange\").split(\";\");\n        var min = agerange[0];\n        var max = agerange[1];\n        val = this.jsDateString(val);\n\n        if (this.methods.date(val)) {\n          var age = this.getAge(val);\n          if (age < min || age > max)\n            ok = false;\n        }\n        else\n          ok = false;\n      }\n      else if ($el.attr(\"data-date\") && !this.methods.date(this.jsDateString(val)))\n        ok = false;\n      else if ($el.attr(\"data-match\") && $($el.attr(\"data-match\")).val() != val)\n        ok = false;\n      if ($el.is(\"[type=radio]:checked\") && $el.prop(\"disabled\"))\n        ok = false;\n    }\n\n    if (!ok && classes) {\n      $el.parent().addClass(\"has-error\");\n    }\n    else if (classes) {\n      $el.parent().removeClass(\"has-error\");\n    }\n    return ok;\n  },\n  setElements: function() {\n    this.formElements = this.$el.find(\"input, select, textarea\")\n      .not(\":submit, :reset, :image\");\n  },\n  jsDateString: function(str) {\n    var pieces = str.split(\".\");\n    return pieces[1] + \"/\" + pieces[0] + \"/\" + pieces[2];\n  },\n  getAge: function(dateString) {\n    var today = new Date();\n    var birthDate = new Date(dateString);\n    var age = today.getFullYear() - birthDate.getFullYear();\n    var m = today.getMonth() - birthDate.getMonth();\n    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\n      age--;\n    }\n    return age;\n  }\n}\n\n$.fn.validator = function(options) {\n  var matched = $(this);\n\n  matched.each(function() {\n    options = $.extend(options, {\n      plugin: true\n    });\n    new Validator($(this), options);\n  });\n  return matched;\n};\n","import $ from 'jquery';\nimport config from '../config/config';\nimport Pubsub from 'pubsub';\n\nexport default function init() {\n  var _this = this;\n\n  // set pickUpPoint address from selected radio button\n  $('#shippingForm').off('change').on('change', 'input[name=\"indexOfSelectedPickUpPoint\"]', function(e){\n    $('input[name=\"pickUpPoint.id\"]').val($(this).data('id'));\n    $('input[name=\"pickUpPoint.shopName\"]').val($(this).data('shopname'));\n    $('input[name=\"pickUpPoint.street\"]').val($(this).data('street'));\n    $('input[name=\"pickUpPoint.streetNumber\"]').val($(this).data('streetNumber'));\n    $('input[name=\"pickUpPoint.city\"]').val($(this).data('city'));\n    $('input[name=\"pickUpPoint.zipCode\"]').val($(this).data('zipcode'));\n    $('input[name=\"pickUpPoint.country\"]').val($(this).data('country'));\n    var postData = {\n        'indexPickUpPoint': $(this).data('id')\n    };\n    var url = config.shippingUrls.setPickUpPoint;\n    $.post(url, postData);\n  });\n\n\n  // set address type on click\n  $('input[name=addressType]').off('change').on('change', function(e){\n    e.preventDefault();\n    var postData = {\n        'addressType': $(this).val()\n    };\n    var url = config.shippingUrls.setAddressType;\n    $.post(url, postData);\n    //close error message if showed\n    if($(\"#shippingForm .form-error\").is(\":visible\")) {\n      $(\"#shippingForm .form-error\").remove();\n      $(\"#shippingForm .panel-group\").removeClass(\"has-error\");\n    }\n  });\n\n  // set delivery type on click\n  $('input[name=deliveryType]').off('change').on('change', function(e){\n    e.preventDefault();\n    var postData = {\n        'deliveryType': $(this).val()\n    };\n    var url = config.shippingUrls.setDeliveryType;\n    $.post(url, postData);\n  });\n\n  // set payment type on click\n  $('input[name=paymentType]').off('change').on('change', function(e){\n    e.preventDefault();\n    var postData = {\n        'paymentType': $(this).val()\n    };\n\n    var url = config.paymentUrl;\n    $.ajax({\n      type: 'POST',\n      url: url,\n      data: postData,\n      dataType: 'json',\n      async: false,\n      success: function(data) {\n        $('.js-payment-top-btn').html(data.markupTop);\n        $('.js-payment-bottom-btn').html(data.markupBottom);\n        Pubsub.publish(\"payment.paypal\", document);\n        $(\".paypal-js-error-technical\").hide();\n        $(\".paypal-js-error-general\").show();\n        $(\".panel-default\").removeClass('has-error');\n        $(\".panel-group\").removeClass('has-error');\n        $(\".form-error\").first().hide();\n        $(\".checkout-content\").find(\":button\").attr(\"disabled\",false);\n        $(\"#saferpay-button\").off(\"click\").on(\"click\", function(e) {\n          $.get(cfg.saferpayPaymentPageInitializeUrl, function(data) {\n            window.location.href = data.url;\n          });\n        });\n      },\n      fail: function (error) {\n        if (window.console) {\n          console.error(\"set payment type failed. \", error);\n        }\n      }\n    });\n\n    //close error message if showed\n    if($(\"div.payment .form-error\").is(\":visible\")) {\n      $(\"div.payment .form-error\").remove();\n      $(\"div.payment .panel-group\").removeClass(\"has-error\");\n    }\n  });\n}\n\n\n","import $ from 'jquery';\n\nexport default function showOrHidePassword(){\n\n  // login 3P\n  $(\"span.js-show-password-login\").off(\"click\").on(\"click\", function(e) {\n    showOrHidePasswordLogin (\"#inputPassword-desktop\", \"text\", \"span.js-show-password-login\", \"span.js-hide-password-login\");\n    showOrHidePasswordLogin (\"#inputPassword-mobile\", \"text\", \"span.js-show-password-login\", \"span.js-hide-password-login\");\n  });\n\n  $(\"span.js-hide-password-login\").off(\"click\").on(\"click\", function(e) {\n    showOrHidePasswordLogin (\"#inputPassword-desktop\", \"password\", \"span.js-hide-password-login\", \"span.js-show-password-login\");\n    showOrHidePasswordLogin (\"#inputPassword-mobile\", \"password\", \"span.js-hide-password-login\", \"span.js-show-password-login\");\n  });\n\n  function showOrHidePasswordLogin (pw, type, hide, show){\n    $(pw).attr(\"type\", type);\n    $(hide).hide();\n    $(show).show();\n  }\n\n  $(\"span.js-account-show-password-login\").off(\"click\").on(\"click\", function(e) {\n    $(\"#oldPassword\").attr(\"type\", \"text\");\n    $(\"#newPassword\").attr(\"type\", \"text\");\n    $(\"#old-password-show\").hide();\n    $(\"#new-password-show\").hide();\n    $(\"#old-password-hidden\").show();\n    $(\"#new-password-hidden\").show();\n  });\n\n  $(\"span.js-account-hide-password-login\").off(\"click\").on(\"click\", function(e) {\n    $(\"#oldPassword\").attr(\"type\", \"password\");\n    $(\"#newPassword\").attr(\"type\", \"password\");\n    $(\"#new-password-hidden\").hide();\n    $(\"#old-password-hidden\").hide();\n    $(\"#new-password-show\").show();\n    $(\"#old-password-show\").show();\n  })\n\n  // register\n  $(\"span.js-show-password-register\").off(\"click\").on(\"click\", function(e) {\n    showOrHidePasswordRegister (\"#password1\", \"text\", \"span.js-show-password-register\", \"span.js-hide-password-register\");\n  });\n  $(\"span.js-hide-password-register\").off(\"click\").on(\"click\", function(e) {\n    showOrHidePasswordRegister (\"#password1\", \"password\", \"span.js-hide-password-register\", \"span.js-show-password-register\");\n  });\n\n  function showOrHidePasswordRegister (pw1,type, hide, show){\n    $(pw1).attr(\"type\", type);\n    $(hide).hide();\n    $(show).show();\n  }\n\n}\n","var language;\nif (navigator.languages) {\n  language = navigator.languages[0];\n} else {\n  language = navigator.userLanguage || navigator.language;\n}\n\nexport default (language || \"de-DE\");","import $ from \"jquery\";\nimport Pubsub from \"pubsub\";\n\nexport default function Offcanvas(xssidebarclass) {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  var xssidebarclass = xssidebarclass ? xssidebarclass : \"product-filter-list\";\n\n  this.sidebarselector = \".sidebar-offcanvas.\" + xssidebarclass;\n  this.xssidebarclass = xssidebarclass + \" xs-sidebar-offcanvas\";\n  this.xssidebarselector = \".xs-sidebar-offcanvas.\" + xssidebarclass;\n  this.xssidebarselectorcontainer = this.xssidebarselector + \" .xcontainer\";\n}\n\nOffcanvas.prototype = {\n  attach: function(msg, element) {\n    if (this.isxs && !$(this.sidebarselector).is(':empty')) this.switchIt(this.isxs);\n  },\n  active: function() {\n    return $(\"body\").hasClass(\"offcanvas\");\n  },\n  activatePage: function() {\n    var _this = this;\n    $(\"#page\").off(\"click\").on(\"click\", function(e) {\n      e.preventDefault();\n      _this.hide();\n      $(this).off(\"click\");\n    });\n  },\n  selectSidebar: function() {\n    $(\".xs-sidebar-offcanvas\").hide();\n    $(this.xssidebarselector).show();\n  },\n  show: function() {\n    var _this = this;\n    this.selectSidebar();\n\n    $(\"body\").addClass(\"offcanvas\");\n    setTimeout(function() {\n      $(\"html, body\").animate({\n        scrollTop: 0\n      }, 200);\n      _this.activatePage();\n    }, 10);\n\n  },\n  deactivatePage: function() {\n    $(\"#page\").off(\"click\");\n  },\n  hide: function() {\n    $(\"body\").removeClass(\"offcanvas\");\n    this.deactivatePage();\n  },\n  toggle: function() {\n    if ($(\"body\").hasClass(\"offcanvas\")) {\n      this.hide();\n    }\n    else this.show();\n  },\n  switchIt: function(on_off, replace) {\n    if (!replace && on_off == this.isxs) return;\n\n    this.isxs = on_off;\n\n    if (on_off) { // enter sidebar\n      if ($(this.xssidebarselector).length == 0) {\n        $(\"body\").prepend('<div class=\"x-style ' + this.xssidebarclass + '\"><div class=\"xcontainer no-spacing shop-navigation\"></div></div>');\n      }\n      var markup = $(this.sidebarselector).html();\n      if (markup) {\n        $(this.xssidebarselectorcontainer).html(markup);\n        $(this.sidebarselector).empty();\n        Pubsub.publish(\"core.attach\", $(this.xssidebarselector));\n      }\n    } else { // exit sidebar\n      var markup = $(this.xssidebarselectorcontainer).html();\n      if (markup) {\n        $(this.sidebarselector).html(markup);\n        $(this.xssidebarselector).remove();\n        Pubsub.publish(\"core.attach\", $(this.sidebarselector));\n        this.hide();\n      }\n    }\n  }\n};\n","import $ from 'jquery';\nimport '../utils/lazyload';\nimport '../utils/sliderlazyload';\n\nexport default function LazyScroll(containerSelector, elementSelector, options) {\n  var defaults = {\n    count: 25,\n    padding: 300,\n    controls: true\n  };\n\n  this.options = $.extend(defaults, options);\n  this.containerSelector = containerSelector;\n  this.elementSelector = elementSelector;\n  this.controls = this.options.controls;\n\n  this.kill();\n  this.setup();\n}\n\nLazyScroll.prototype = {\n  kill: function() {\n    $(document).off(\"scroll\");\n    $(window).off(\"resize\");\n    $(this.elementSelector, this.container).find(\".loaded\").each(function() {\n      var swipe = $(this).data(\"Swipe\");\n      if (swipe) swipe.kill();\n    })\n  },\n  setup: function() {\n    var _this = this;\n    this.container = $(this.containerSelector);\n\n    $(window).on(\"resize\", function() {\n      _this.windowHeight = $(window).height();\n      _this.windowWidth = $(window).width();\n    });\n    $(window).on(\"scroll\", function(e) {\n      if (_this.container.length == 0) {\n        _this.kill();\n        return;\n      }\n      _this.scrollPos = $(document).scrollTop();\n      _this.containerTop = _this.container.offset().top - _this.scrollPos;\n\n      var loadit = false;\n      var count = 0;\n\n      if (_this.windowHeight > _this.containerTop) {\n        $(_this.elementSelector, _this.container).not(\".loaded\").each(function() {\n          if ($(this).offset().top - _this.scrollPos - _this.options.padding < _this.windowHeight) {\n            loadit = true;\n          }\n\n          if (loadit) {\n            if ($(this).find(\".swipe\").length > 0) {\n              $(this).addClass(\"loaded\").find(\".swipe\").Swipe({\n                callback: _this.swipeCallbackClosure(this)\n              }).lazy().controls().knobs({\n                classes: [\"hidden-md\", \"hidden-lg\"]\n              });\n            }\n            else $(this).addClass(\"loaded\").lazyload();\n            count++;\n          }\n          if (count >= _this.options.count) {\n            return false;\n          }\n        });\n      }\n\n    });\n\n    $(window).trigger(\"resize\");\n    $(window).trigger(\"scroll\");\n  },\n  pageFromScroll: function(scroll) {\n    var index = 0;\n    $.each(this.pages, function() {\n      if (this >= scroll) return false;\n      index++;\n    });\n    return index;\n  },\n  swipeCallbackClosure: function(gridItem) {\n    return function(pos) {\n      var $currentSwipe = $(\".swipe-wrap > div\", gridItem).eq(pos);\n      var $a = $(gridItem).find(\"a\");\n      var href = $currentSwipe.attr(\"data-href\");\n      if (href !== undefined) $a.attr(\"href\", href);\n    }\n  }\n};\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\nimport 'jquerybase64';\nimport {updateCanonicalUrl, updateMetaRobotsCategory, updateSeoRelTags} from '../components/seotags';\n\nvar defaults = {\n  container: 'body',\n  contentSelector: ''\n};\n\n$.fn.pagination = function(options) {\n  var options = Object.assign(defaults, options);\n  var matched = $(this);\n\n  matched.each(function() {\n    $(this).data(\"Pagination\", new Pagination($(this), options.container, matched));\n  });\n\n  return matched;\n};\n\nexport default function Pagination($el, $container, matched) {\n  this.loading = new Loading();\n  this.$el = $el;\n  var _this = this;\n\n\n  $el.find(\"a\").off(\"click\").on(\"click\", function(e) {\n    e.preventDefault();\n\n    _this.loading.load();\n\n    $.get($.base64.decode($(this).data(\"ajax-href\")), function(data) {\n\n      $('html').animate({\n        scrollTop: $container.offset().top}, 400, function() {\n        var $data = $(data);\n        Pubsub.publish(\"core.preattach\", $data);\n        $container.replaceWith($data);\n        updateSeoRelTags();\n        updateMetaRobotsCategory();\n        updateCanonicalUrl();\n        Pubsub.publish(\"tracking.pageViewAjaxEvent\", null);\n        Pubsub.publish(\"core.attach\", $data);\n        _this.loading.stop();\n      });\n    }).fail(function(error) {\n      if (window.console) console.log(error);\n    });\n  });\n}\n\nPagination.prototype = {\n  activePage: function() {\n    return this.$el.find(\".active a\").attr(\"data-page\");\n  }\n};\n","import $ from 'jquery';\n\n$.fn.lazyload = function() {\n  var matched = $(this);\n  matched.each(function() {\n    $(\"img[data-src]\", $(this)).each(function() {\n      $(this).attr(\"src\", $(this).attr(\"data-src\"));\n    });\n  });\n  return matched;\n};\n","/**\n * Kümmert sich um die Behandlung der Filter und Sortierung auf der Produktliste. Dazu gehört auch das Neuladen der Daten.\n */\n//noinspection JSHint\nimport $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport Loading from '../components/loading';\nimport History from 'history';\nimport {updateSeoRelTags} from '../components/seotags';\n\n/**\n * Erzeugt eine Funktion die die Daten neu lädt wenn sich die History ändert. Die History ändert sich bspw. wenn man\n * einen Filter auswählt oder wenn man von einer IE Url einspringt, welche eine # enthält.\n */\nfunction createLoadDataOnHistoryChangeFunction(_this) {\n  return function() {\n    // Log the State\n    var state = History.getState(); // Note: We are using History.getState() instead of event.state\n    var url = state.url;\n    var ajaxUrl = url + \"&ajax=\"; // marker Parameter hinzufügen, dass wir nur den AJAX Content austauschen wollen\n\n    $.get(ajaxUrl, function(data) {\n      _this.loading.stop();\n      var $data = $(data);\n\n      Pubsub.publish(\"core.preattach\", $data); // restore accordion positions\n\n      setTimeout(function() {\n        $(\".product-list-part\").replaceWith($data);\n        updateSeoRelTags();\n\n        Pubsub.publish(\"core.attach\", $data);\n        Pubsub.publish(\"tracking.pageViewAjaxEvent\", null);\n\n        Pubsub.publish(\"offcanvas.showfilter\", true);\n        Pubsub.publish(\"datafilter\", true);\n\n      }, 1); //Trick accordion animation\n\n    }).fail(function(error) {\n      _this.loading.stop();\n      if (window.console) {\n        //noinspection JSHint\n        console.log(error);\n      }\n    });\n  };\n}\n\nexport default function ProductListFilters() {\n  Pubsub.subscribe('core.preattach', $.proxy(this.preattach, this));\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  this.in_ids = [];\n  this.loading = new Loading();\n\n  // Bind to State Change,  Note: We are using statechange instead of popstate\n  History.Adapter.bind(window, 'statechange', createLoadDataOnHistoryChangeFunction(this));\n}\n\n\nProductListFilters.prototype.preattach = function(msg, element) {\n  $.each(this.in_ids, function() { //restore open accordion tabs\n    element.find(\".product-filter-list #\" + this).removeClass(\"collapse\").addClass(\"in\");\n  });\n};\n\nfunction resetInputs($inputs) {\n  var refresh = false;\n  $inputs.each(function() {\n    if ($(this).prop(\"checked\")) {\n      $(this).prop(\"checked\", false);\n      refresh = true;\n    }\n    if ($(this).is(\":text\") && $(this).val() !== $(this).attr(\"data-original\")) {\n      $(this).val($(this).attr(\"data-original\"));\n      refresh = true;\n    }\n  });\n  if (refresh) {\n    $inputs.first().trigger(\"change\");\n  }\n}\n\nProductListFilters.prototype.attach = function(msg, element) {\n  var _this = this;\n\n  $(\"#from_price, #to_price\").on(\"click\", function() {\n    $(\"input[value=range]\").attr(\"checked\", \"checked\");\n  });\n\n  $(\".colorThumb\").tooltip();\n\n  //Filter changes\n  var pageSizeHeader = '#'+ $(\".filter-header select[name='pageSize']\").attr('id');\n  var pageSizeFooter = '#'+ $(\".footer-pagination select[name='pageSize']\").attr('id');\n  $(\"form#filter-form input, #item-count\", element).off(\"change\").on(\"change\", $.proxy(this.reload, this));\n\n  $(\"input[type=radio][name=sortBy]\", element).off(\"change\").on(\"change\", $.proxy(this.reloadSort, this));\n\n  $(pageSizeHeader, element).off(\"change\").on(\"change\", $.proxy(this.reloadSort, this));\n  $(pageSizeFooter, element).off(\"change\").on(\"change\", $.proxy(this.reloadSort, this));\n\n  //Reset all filters\n  $(\"form#filter-form .filter-reset, .js-reset-all-filters\", element).off(\"click\").on(\"click\", function() {\n    resetInputs($(\"form#filter-form input\", element));\n  });\n\n  // Reset single filter\n  $(\"form#filter-form .current-filter-reset\", element).off(\"click\").on(\"click\", function() {\n    var inputName = $(this).attr('data-input-name');\n    if (typeof inputName !== \"undefined\") {\n      resetInputs($(\"form#filter-form input[name='\" + inputName + \"']\", element));\n    }\n  });\n\n  var bs_events = \"shown.bs.collapse hidden.bs.collapse\";\n  $(\".product-filter-controls\").off(bs_events).on(bs_events, function() {\n    _this.in_ids = []; //save open accordion tabs\n    $(\".product-filter-list .in\").each(function() {\n      _this.in_ids.push($(this).attr(\"id\"));\n    });\n  });\n\n  $(document).on('click', '.js-button-sticky', function() {\n    $(this).closest('li.category').find('.js-dropdown-toggle').removeClass('panel-in').addClass('collapsed');\n    $(this).closest('li.category').find('.js-dropdown-menu').removeClass('in').addClass('collapse');\n  });\n\n};\n\nfunction getPageSizeId() {\n  var pageSizeId;\n  if ($(window).width() <= 768) {\n    pageSizeId = '#'+ $(\".footer-pagination select[name='pageSize']\").attr('id');\n  }else{\n    pageSizeId = '#'+ $(\".filter-header select[name='pageSize']\").attr('id');\n  }\n  return pageSizeId;\n};\n\n// todo recreater sort\nProductListFilters.prototype.reloadSort = function(e) {\n  var $element = $(e.target);\n  var category = $element.data('category');\n  var action = $element.data('action');\n  // action = action !== undefined ? action.replace('~~PLACEHOLDER~~', $element.text()) : '';\n  var value = $element.data('value');\n  this.reload(e);\n};\n\nProductListFilters.prototype.reload = function(e) {\n  var filter_form = $(\"form#filter-form\");\n  var _this = this;\n  var pageSizeId = getPageSizeId();\n\n  var price_changed = false;\n\n  if ($(e.target).is(\"[value=range]\")) {\n    this.enableRange(true);\n    return;\n  }\n\n  if ($(e.target).is('#from_price') || $(e.target).is('#to_price')) {\n    price_changed = true;\n  }\n\n  var url = filter_form.attr(\"action\") + \"&\" + filter_form.serialize() + \"&price_range_changed=\" + price_changed + \"&\" + $(\"#item-count, input[type=radio][name=sortBy]:checked\").serialize() + \"&\" + $(pageSizeId).serialize();\n  _this.reloadUrl(url);\n};\n\nProductListFilters.prototype.reloadUrl = function(url) {\n  var _this = this;\n  _this.loading.load();\n  History.pushState({}, document.title, url);\n};\n","/**\n* jQuery Plugin for adding knobs to swipejs sliders\n**/\nimport $ from 'jquery';\n\nvar defaults = {\n  classes: [\"\"]\n};\n\nfunction Knobs($el, options) {\n  this.options = Object.assign(defaults, options);\n  this.slider = $el.data(\"Swipe\");\n  this.$el = $el;\n  if (this.options.knobWrapper)\n    this.container = this.options.knobWrapper;\n  else\n    this.container = this.$el;\n\n  this.init();\n  this.$el.bind(\"swipe.kill\", $.proxy(this.kill, this));\n}\n\nKnobs.prototype = {\n  init: function() {\n    if (!this.slider) return;\n\n    var _this = this;\n    this.numSlides = this.slider.getNumSlides();\n\n    if (this.numSlides == 1) {\n      this.kill();\n      return;\n    }\n\n    this.pos = this.slider.getPos();\n\n    this.originalCallback = this.slider.options.callback;\n    this.slider.options.callback = function(pos, elem){\n      var parent = $(elem).parents('.swipe');\n      parent.find(\".carousel-indicators li\").removeClass(\"active\").eq(pos).addClass(\"active\");\n    }\n\n    this.markup = $('<ol class=\"carousel-indicators ' + this.options.classes.join(\" \") + '\">');\n\n    for (var i = 0; i < this.numSlides; i++) {\n      this.markup.append($('<li class=\"' + ((this.pos == i) ? \"active\" : \"\") + '\">'));\n    }\n\n    if (this.container.find(\".carousel-indicators\").length == 0) {\n      this.container.append(this.markup);\n      this.$el.data(\"Knobs\", this);\n\n      this.container.find(\".carousel-indicators li\").on('click', function(e) {\n        e.preventDefault();\n\n        _this.slider.slide(_this.container.find(\".carousel-indicators li\").index(this));\n      });\n    }\n  },\n  kill: function() {\n    this.container.find(\".carousel-indicators li\").off('click')\n    this.container.find(\".carousel-indicators\").remove();\n    this.$el.unbind(\"swipe.kill\");\n  }\n};\n\n$.fn.knobs = function(options) {\n  var matched = $(this);\n\n  matched.each(function() {\n    new Knobs($(this), options)\n  });\n  return matched;\n}\n","import $ from 'jquery';\nimport Pubsub from 'pubsub';\nimport config from '../config/config';\nimport CartInput from '../components/cart_input';\n\nexport default function Affiliate() {\n  Pubsub.subscribe('core.attach', $.proxy(this.attach, this));\n  this.cart_input = new CartInput();\n}\n\nAffiliate.prototype = {\n  attach: function(msg, element) {\n    var _this = this;\n    if (element == document) {\n      if (config.affiliateOn) {\n        $(\"#the-modal\").empty().modal().load(config.affiliatePath, function() {\n          $(\"#the-modal a.coupon-btn\").on(\"click\", function(e) {\n            e.preventDefault();\n            _this.showAffiliate(this, _this);\n          });\n        });\n      }\n      $(\".basket-element .affiliate-icon\").on(\"click\", function(e) {\n        e.preventDefault();\n        _this.showAffiliate(this, _this);\n      });\n    }\n  },\n  showAffiliate: function(e, _this) {\n    $.get($(e).attr(\"href\"), function(data) {\n      _this.cart_input.input(data.markup, data.count, data.total, data.time, data.title);\n      $(\".basket-element\").addClass(\"coupon-inside\");\n    }).fail(function(jqXhr, error) {\n      if (window.console)\n        console.log(\"Coupon input failed..\", error);\n    });\n  }\n};\n","import $ from 'jquery';\n\nexport default function ModalFns() {\n}\n;\n\nModalFns.prototype = {\n  scrollToTop: function() {\n    if (this.modal.css(\"position\") == \"absolute\") {\n      $(\"html, body\").animate({\n        scrollTop: this.modal.offset().top\n      }, 300);\n    } else {\n      this.modal.animate({\n        scrollTop: 0\n      }, 300);\n    }\n  }\n};\n","(function($,sr){\n\n  // from: http://www.paulirish.com/2009/throttled-smartresize-jquery-event-handler/\n  // debouncing function from John Hann\n  // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/\n  var debounce = function (func, threshold, execAsap) {\n      var timeout;\n\n      return function debounced () {\n          var obj = this, args = arguments;\n          function delayed () {\n              if (!execAsap)\n                  func.apply(obj, args);\n              timeout = null;\n          };\n\n          if (timeout)\n              clearTimeout(timeout);\n          else if (execAsap)\n              func.apply(obj, args);\n\n          timeout = setTimeout(delayed, threshold || 100);\n      };\n  }\n  // smartresize \n  jQuery.fn[sr] = function(fn){  return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };\n\n})(jQuery,'smartresize');\n","/*\n *  jQuery OwlCarousel v1.3.3\n *\n *  Copyright (c) 2013 Bartosz Wojciechowski\n *  http://www.owlgraphic.com/owlcarousel/\n *\n *  Licensed under MIT\n *\n */\n\n/*JS Lint helpers: */\n/*global dragMove: false, dragEnd: false, $, jQuery, alert, window, document */\n/*jslint nomen: true, continue:true */\n\nif (typeof Object.create !== \"function\") {\n    Object.create = function (obj) {\n        function F() {}\n        F.prototype = obj;\n        return new F();\n    };\n}\n(function ($, window, document) {\n\n    var Carousel = {\n        init : function (options, el) {\n            var base = this;\n\n            base.$elem = $(el);\n            base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options);\n\n            base.userOptions = options;\n            base.loadContent();\n        },\n\n        loadContent : function () {\n            var base = this, url;\n\n            function getData(data) {\n                var i, content = \"\";\n                if (typeof base.options.jsonSuccess === \"function\") {\n                    base.options.jsonSuccess.apply(this, [data]);\n                } else {\n                    for (i in data.owl) {\n                        if (data.owl.hasOwnProperty(i)) {\n                            content += data.owl[i].item;\n                        }\n                    }\n                    base.$elem.html(content);\n                }\n                base.logIn();\n            }\n\n            if (typeof base.options.beforeInit === \"function\") {\n                base.options.beforeInit.apply(this, [base.$elem]);\n            }\n\n            if (typeof base.options.jsonPath === \"string\") {\n                url = base.options.jsonPath;\n                $.getJSON(url, getData);\n            } else {\n                base.logIn();\n            }\n        },\n\n        logIn : function () {\n            var base = this;\n\n            base.$elem.data(\"owl-originalStyles\", base.$elem.attr(\"style\"));\n            base.$elem.data(\"owl-originalClasses\", base.$elem.attr(\"class\"));\n\n            base.$elem.css({opacity: 0});\n            base.orignalItems = base.options.items;\n            base.checkBrowser();\n            base.wrapperWidth = 0;\n            base.checkVisible = null;\n            base.setVars();\n        },\n\n        setVars : function () {\n            var base = this;\n            if (base.$elem.children().length === 0) {return false; }\n            base.baseClass();\n            base.eventTypes();\n            base.$userItems = base.$elem.children();\n            base.itemsAmount = base.$userItems.length;\n            base.wrapItems();\n            base.$owlItems = base.$elem.find(\".owl-item\");\n            base.$owlWrapper = base.$elem.find(\".owl-wrapper\");\n            base.playDirection = \"next\";\n            base.prevItem = 0;\n            base.prevArr = [0];\n            base.currentItem = 0;\n            base.customEvents();\n            base.onStartup();\n        },\n\n        onStartup : function () {\n            var base = this;\n            base.updateItems();\n            base.calculateAll();\n            base.buildControls();\n            base.updateControls();\n            base.response();\n            base.moveEvents();\n            base.stopOnHover();\n            base.owlStatus();\n\n            if (base.options.transitionStyle !== false) {\n                base.transitionTypes(base.options.transitionStyle);\n            }\n            if (base.options.autoPlay === true) {\n                base.options.autoPlay = 5000;\n            }\n            base.play();\n\n            base.$elem.find(\".owl-wrapper\").css(\"display\", \"block\");\n\n            if (!base.$elem.is(\":visible\")) {\n                base.watchVisibility();\n            } else {\n                base.$elem.css(\"opacity\", 1);\n            }\n            base.onstartup = false;\n            base.eachMoveUpdate();\n            if (typeof base.options.afterInit === \"function\") {\n                base.options.afterInit.apply(this, [base.$elem]);\n            }\n        },\n\n        eachMoveUpdate : function () {\n            var base = this;\n\n            if (base.options.lazyLoad === true) {\n                base.lazyLoad();\n            }\n            if (base.options.autoHeight === true) {\n                base.autoHeight();\n            }\n            base.onVisibleItems();\n\n            if (typeof base.options.afterAction === \"function\") {\n                base.options.afterAction.apply(this, [base.$elem]);\n            }\n        },\n\n        updateVars : function () {\n            var base = this;\n            if (typeof base.options.beforeUpdate === \"function\") {\n                base.options.beforeUpdate.apply(this, [base.$elem]);\n            }\n            base.watchVisibility();\n            base.updateItems();\n            base.calculateAll();\n            base.updatePosition();\n            base.updateControls();\n            base.eachMoveUpdate();\n            if (typeof base.options.afterUpdate === \"function\") {\n                base.options.afterUpdate.apply(this, [base.$elem]);\n            }\n        },\n\n        reload : function () {\n            var base = this;\n            window.setTimeout(function () {\n                base.updateVars();\n            }, 0);\n        },\n\n        watchVisibility : function () {\n            var base = this;\n\n            if (base.$elem.is(\":visible\") === false) {\n                base.$elem.css({opacity: 0});\n                window.clearInterval(base.autoPlayInterval);\n                window.clearInterval(base.checkVisible);\n            } else {\n                return false;\n            }\n            base.checkVisible = window.setInterval(function () {\n                if (base.$elem.is(\":visible\")) {\n                    base.reload();\n                    base.$elem.animate({opacity: 1}, 200);\n                    window.clearInterval(base.checkVisible);\n                }\n            }, 500);\n        },\n\n        wrapItems : function () {\n            var base = this;\n            base.$userItems.wrapAll(\"<div class=\\\"owl-wrapper\\\">\").wrap(\"<div class=\\\"owl-item\\\"></div>\");\n            base.$elem.find(\".owl-wrapper\").wrap(\"<div class=\\\"owl-wrapper-outer\\\">\");\n            base.wrapperOuter = base.$elem.find(\".owl-wrapper-outer\");\n            base.$elem.css(\"display\", \"block\");\n        },\n\n        baseClass : function () {\n            var base = this,\n                hasBaseClass = base.$elem.hasClass(base.options.baseClass),\n                hasThemeClass = base.$elem.hasClass(base.options.theme);\n\n            if (!hasBaseClass) {\n                base.$elem.addClass(base.options.baseClass);\n            }\n\n            if (!hasThemeClass) {\n                base.$elem.addClass(base.options.theme);\n            }\n        },\n\n        updateItems : function () {\n            var base = this, width, i;\n\n            if (base.options.responsive === false) {\n                return false;\n            }\n            if (base.options.singleItem === true) {\n                base.options.items = base.orignalItems = 1;\n                base.options.itemsCustom = false;\n                base.options.itemsDesktop = false;\n                base.options.itemsDesktopSmall = false;\n                base.options.itemsTablet = false;\n                base.options.itemsTabletSmall = false;\n                base.options.itemsMobile = false;\n                return false;\n            }\n\n            width = $(base.options.responsiveBaseWidth).width();\n\n            if (width > (base.options.itemsDesktop[0] || base.orignalItems)) {\n                base.options.items = base.orignalItems;\n            }\n            if (base.options.itemsCustom !== false) {\n                //Reorder array by screen size\n                base.options.itemsCustom.sort(function (a, b) {return a[0] - b[0]; });\n\n                for (i = 0; i < base.options.itemsCustom.length; i += 1) {\n                    if (base.options.itemsCustom[i][0] <= width) {\n                        base.options.items = base.options.itemsCustom[i][1];\n                    }\n                }\n\n            } else {\n\n                if (width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false) {\n                    base.options.items = base.options.itemsDesktop[1];\n                }\n\n                if (width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false) {\n                    base.options.items = base.options.itemsDesktopSmall[1];\n                }\n\n                if (width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false) {\n                    base.options.items = base.options.itemsTablet[1];\n                }\n\n                if (width <= base.options.itemsTabletSmall[0] && base.options.itemsTabletSmall !== false) {\n                    base.options.items = base.options.itemsTabletSmall[1];\n                }\n\n                if (width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false) {\n                    base.options.items = base.options.itemsMobile[1];\n                }\n            }\n\n            //if number of items is less than declared\n            if (base.options.items > base.itemsAmount && base.options.itemsScaleUp === true) {\n                base.options.items = base.itemsAmount;\n            }\n        },\n\n        response : function () {\n            var base = this,\n                smallDelay,\n                lastWindowWidth;\n\n            if (base.options.responsive !== true) {\n                return false;\n            }\n            lastWindowWidth = $(window).width();\n\n            base.resizer = function () {\n                if ($(window).width() !== lastWindowWidth) {\n                    if (base.options.autoPlay !== false) {\n                        window.clearInterval(base.autoPlayInterval);\n                    }\n                    window.clearTimeout(smallDelay);\n                    smallDelay = window.setTimeout(function () {\n                        lastWindowWidth = $(window).width();\n                        base.updateVars();\n                    }, base.options.responsiveRefreshRate);\n                }\n            };\n            $(window).resize(base.resizer);\n        },\n\n        updatePosition : function () {\n            var base = this;\n            base.jumpTo(base.currentItem);\n            if (base.options.autoPlay !== false) {\n                base.checkAp();\n            }\n        },\n\n        appendItemsSizes : function () {\n            var base = this,\n                roundPages = 0,\n                lastItem = base.itemsAmount - base.options.items;\n\n            base.$owlItems.each(function (index) {\n                var $this = $(this);\n                $this\n                    .css({\"width\": base.itemWidth})\n                    .data(\"owl-item\", Number(index));\n\n                if (index % base.options.items === 0 || index === lastItem) {\n                    if (!(index > lastItem)) {\n                        roundPages += 1;\n                    }\n                }\n                $this.data(\"owl-roundPages\", roundPages);\n            });\n        },\n\n        appendWrapperSizes : function () {\n            var base = this,\n                width = base.$owlItems.length * base.itemWidth;\n\n            base.$owlWrapper.css({\n                \"width\": width * 2,\n                \"left\": 0\n            });\n            base.appendItemsSizes();\n        },\n\n        calculateAll : function () {\n            var base = this;\n            base.calculateWidth();\n            base.appendWrapperSizes();\n            base.loops();\n            base.max();\n        },\n\n        calculateWidth : function () {\n            var base = this;\n            base.itemWidth = Math.round(base.$elem.width() / base.options.items);\n        },\n\n        max : function () {\n            var base = this,\n                maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1;\n            if (base.options.items > base.itemsAmount) {\n                base.maximumItem = 0;\n                maximum = 0;\n                base.maximumPixels = 0;\n            } else {\n                base.maximumItem = base.itemsAmount - base.options.items;\n                base.maximumPixels = maximum;\n            }\n            return maximum;\n        },\n\n        min : function () {\n            return 0;\n        },\n\n        loops : function () {\n            var base = this,\n                prev = 0,\n                elWidth = 0,\n                i,\n                item,\n                roundPageNum;\n\n            base.positionsInArray = [0];\n            base.pagesInArray = [];\n\n            for (i = 0; i < base.itemsAmount; i += 1) {\n                elWidth += base.itemWidth;\n                base.positionsInArray.push(-elWidth);\n\n                if (base.options.scrollPerPage === true) {\n                    item = $(base.$owlItems[i]);\n                    roundPageNum = item.data(\"owl-roundPages\");\n                    if (roundPageNum !== prev) {\n                        base.pagesInArray[prev] = base.positionsInArray[i];\n                        prev = roundPageNum;\n                    }\n                }\n            }\n        },\n\n        buildControls : function () {\n            var base = this;\n            if (base.options.navigation === true || base.options.pagination === true) {\n                base.owlControls = $(\"<div class=\\\"owl-controls\\\"/>\").toggleClass(\"clickable\", !base.browser.isTouch).appendTo(base.$elem);\n            }\n            if (base.options.pagination === true) {\n                base.buildPagination();\n            }\n            if (base.options.navigation === true) {\n                base.buildButtons();\n            }\n        },\n\n        buildButtons : function () {\n            var base = this,\n                buttonsWrapper = $(\"<div class=\\\"owl-buttons\\\"/>\");\n            base.owlControls.append(buttonsWrapper);\n\n            base.buttonPrev = $(\"<div/>\", {\n                \"class\" : \"owl-prev\",\n                \"html\" : base.options.navigationText[0] || \"\"\n            });\n\n            base.buttonNext = $(\"<div/>\", {\n                \"class\" : \"owl-next\",\n                \"html\" : base.options.navigationText[1] || \"\"\n            });\n\n            buttonsWrapper\n                .append(base.buttonPrev)\n                .append(base.buttonNext);\n\n            buttonsWrapper.on(\"touchstart.owlControls mousedown.owlControls\", \"div[class^=\\\"owl\\\"]\", function (event) {\n                event.preventDefault();\n            });\n\n            buttonsWrapper.on(\"touchend.owlControls mouseup.owlControls\", \"div[class^=\\\"owl\\\"]\", function (event) {\n                event.preventDefault();\n                if ($(this).hasClass(\"owl-next\")) {\n                    base.next();\n                } else {\n                    base.prev();\n                }\n            });\n        },\n\n        buildPagination : function () {\n            var base = this;\n\n            base.paginationWrapper = $(\"<div class=\\\"owl-pagination\\\"/>\");\n            base.owlControls.append(base.paginationWrapper);\n\n            base.paginationWrapper.on(\"touchend.owlControls mouseup.owlControls\", \".owl-page\", function (event) {\n                event.preventDefault();\n                if (Number($(this).data(\"owl-page\")) !== base.currentItem) {\n                    base.goTo(Number($(this).data(\"owl-page\")), true);\n                }\n            });\n        },\n\n        updatePagination : function () {\n            var base = this,\n                counter,\n                lastPage,\n                lastItem,\n                i,\n                paginationButton,\n                paginationButtonInner;\n\n            if (base.options.pagination === false) {\n                return false;\n            }\n\n            base.paginationWrapper.html(\"\");\n\n            counter = 0;\n            lastPage = base.itemsAmount - base.itemsAmount % base.options.items;\n\n            for (i = 0; i < base.itemsAmount; i += 1) {\n                if (i % base.options.items === 0) {\n                    counter += 1;\n                    if (lastPage === i) {\n                        lastItem = base.itemsAmount - base.options.items;\n                    }\n                    paginationButton = $(\"<div/>\", {\n                        \"class\" : \"owl-page\"\n                    });\n                    paginationButtonInner = $(\"<span></span>\", {\n                        \"text\": base.options.paginationNumbers === true ? counter : \"\",\n                        \"class\": base.options.paginationNumbers === true ? \"owl-numbers\" : \"\"\n                    });\n                    paginationButton.append(paginationButtonInner);\n\n                    paginationButton.data(\"owl-page\", lastPage === i ? lastItem : i);\n                    paginationButton.data(\"owl-roundPages\", counter);\n\n                    base.paginationWrapper.append(paginationButton);\n                }\n            }\n            base.checkPagination();\n        },\n        checkPagination : function () {\n            var base = this;\n            if (base.options.pagination === false) {\n                return false;\n            }\n            base.paginationWrapper.find(\".owl-page\").each(function () {\n                if ($(this).data(\"owl-roundPages\") === $(base.$owlItems[base.currentItem]).data(\"owl-roundPages\")) {\n                    base.paginationWrapper\n                        .find(\".owl-page\")\n                        .removeClass(\"active\");\n                    $(this).addClass(\"active\");\n                }\n            });\n        },\n\n        checkNavigation : function () {\n            var base = this;\n\n            if (base.options.navigation === false) {\n                return false;\n            }\n            if (base.options.rewindNav === false) {\n                if (base.currentItem === 0 && base.maximumItem === 0) {\n                    base.buttonPrev.addClass(\"disabled\");\n                    base.buttonNext.addClass(\"disabled\");\n                } else if (base.currentItem === 0 && base.maximumItem !== 0) {\n                    base.buttonPrev.addClass(\"disabled\");\n                    base.buttonNext.removeClass(\"disabled\");\n                } else if (base.currentItem === base.maximumItem) {\n                    base.buttonPrev.removeClass(\"disabled\");\n                    base.buttonNext.addClass(\"disabled\");\n                } else if (base.currentItem !== 0 && base.currentItem !== base.maximumItem) {\n                    base.buttonPrev.removeClass(\"disabled\");\n                    base.buttonNext.removeClass(\"disabled\");\n                }\n            }\n        },\n\n        updateControls : function () {\n            var base = this;\n            base.updatePagination();\n            base.checkNavigation();\n            if (base.owlControls) {\n                if (base.options.items >= base.itemsAmount) {\n                    base.owlControls.hide();\n                } else {\n                    base.owlControls.show();\n                }\n            }\n        },\n\n        destroyControls : function () {\n            var base = this;\n            if (base.owlControls) {\n                base.owlControls.remove();\n            }\n        },\n\n        next : function (speed) {\n            var base = this;\n\n            if (base.isTransition) {\n                return false;\n            }\n\n            base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1;\n            if (base.currentItem > base.maximumItem + (base.options.scrollPerPage === true ? (base.options.items - 1) : 0)) {\n                if (base.options.rewindNav === true) {\n                    base.currentItem = 0;\n                    speed = \"rewind\";\n                } else {\n                    base.currentItem = base.maximumItem;\n                    return false;\n                }\n            }\n            base.goTo(base.currentItem, speed);\n        },\n\n        prev : function (speed) {\n            var base = this;\n\n            if (base.isTransition) {\n                return false;\n            }\n\n            if (base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items) {\n                base.currentItem = 0;\n            } else {\n                base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1;\n            }\n            if (base.currentItem < 0) {\n                if (base.options.rewindNav === true) {\n                    base.currentItem = base.maximumItem;\n                    speed = \"rewind\";\n                } else {\n                    base.currentItem = 0;\n                    return false;\n                }\n            }\n            base.goTo(base.currentItem, speed);\n        },\n\n        goTo : function (position, speed, drag) {\n            var base = this,\n                goToPixel;\n\n            if (base.isTransition) {\n                return false;\n            }\n            if (typeof base.options.beforeMove === \"function\") {\n                base.options.beforeMove.apply(this, [base.$elem]);\n            }\n            if (position >= base.maximumItem) {\n                position = base.maximumItem;\n            } else if (position <= 0) {\n                position = 0;\n            }\n\n            base.currentItem = base.owl.currentItem = position;\n            if (base.options.transitionStyle !== false && drag !== \"drag\" && base.options.items === 1 && base.browser.support3d === true) {\n                base.swapSpeed(0);\n                if (base.browser.support3d === true) {\n                    base.transition3d(base.positionsInArray[position]);\n                } else {\n                    base.css2slide(base.positionsInArray[position], 1);\n                }\n                base.afterGo();\n                base.singleItemTransition();\n                return false;\n            }\n            goToPixel = base.positionsInArray[position];\n\n            if (base.browser.support3d === true) {\n                base.isCss3Finish = false;\n\n                if (speed === true) {\n                    base.swapSpeed(\"paginationSpeed\");\n                    window.setTimeout(function () {\n                        base.isCss3Finish = true;\n                    }, base.options.paginationSpeed);\n\n                } else if (speed === \"rewind\") {\n                    base.swapSpeed(base.options.rewindSpeed);\n                    window.setTimeout(function () {\n                        base.isCss3Finish = true;\n                    }, base.options.rewindSpeed);\n\n                } else {\n                    base.swapSpeed(\"slideSpeed\");\n                    window.setTimeout(function () {\n                        base.isCss3Finish = true;\n                    }, base.options.slideSpeed);\n                }\n                base.transition3d(goToPixel);\n            } else {\n                if (speed === true) {\n                    base.css2slide(goToPixel, base.options.paginationSpeed);\n                } else if (speed === \"rewind\") {\n                    base.css2slide(goToPixel, base.options.rewindSpeed);\n                } else {\n                    base.css2slide(goToPixel, base.options.slideSpeed);\n                }\n            }\n            base.afterGo();\n        },\n\n        jumpTo : function (position) {\n            var base = this;\n            if (typeof base.options.beforeMove === \"function\") {\n                base.options.beforeMove.apply(this, [base.$elem]);\n            }\n            if (position >= base.maximumItem || position === -1) {\n                position = base.maximumItem;\n            } else if (position <= 0) {\n                position = 0;\n            }\n            base.swapSpeed(0);\n            if (base.browser.support3d === true) {\n                base.transition3d(base.positionsInArray[position]);\n            } else {\n                base.css2slide(base.positionsInArray[position], 1);\n            }\n            base.currentItem = base.owl.currentItem = position;\n            base.afterGo();\n        },\n\n        afterGo : function () {\n            var base = this;\n\n            base.prevArr.push(base.currentItem);\n            base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length - 2];\n            base.prevArr.shift(0);\n\n            if (base.prevItem !== base.currentItem) {\n                base.checkPagination();\n                base.checkNavigation();\n                base.eachMoveUpdate();\n\n                if (base.options.autoPlay !== false) {\n                    base.checkAp();\n                }\n            }\n            if (typeof base.options.afterMove === \"function\" && base.prevItem !== base.currentItem) {\n                base.options.afterMove.apply(this, [base.$elem]);\n            }\n        },\n\n        stop : function () {\n            var base = this;\n            base.apStatus = \"stop\";\n            window.clearInterval(base.autoPlayInterval);\n        },\n\n        checkAp : function () {\n            var base = this;\n            if (base.apStatus !== \"stop\") {\n                base.play();\n            }\n        },\n\n        play : function () {\n            var base = this;\n            base.apStatus = \"play\";\n            if (base.options.autoPlay === false) {\n                return false;\n            }\n            window.clearInterval(base.autoPlayInterval);\n            base.autoPlayInterval = window.setInterval(function () {\n                base.next(true);\n            }, base.options.autoPlay);\n        },\n\n        swapSpeed : function (action) {\n            var base = this;\n            if (action === \"slideSpeed\") {\n                base.$owlWrapper.css(base.addCssSpeed(base.options.slideSpeed));\n            } else if (action === \"paginationSpeed\") {\n                base.$owlWrapper.css(base.addCssSpeed(base.options.paginationSpeed));\n            } else if (typeof action !== \"string\") {\n                base.$owlWrapper.css(base.addCssSpeed(action));\n            }\n        },\n\n        addCssSpeed : function (speed) {\n            return {\n                \"-webkit-transition\": \"all \" + speed + \"ms ease\",\n                \"-moz-transition\": \"all \" + speed + \"ms ease\",\n                \"-o-transition\": \"all \" + speed + \"ms ease\",\n                \"transition\": \"all \" + speed + \"ms ease\"\n            };\n        },\n\n        removeTransition : function () {\n            return {\n                \"-webkit-transition\": \"\",\n                \"-moz-transition\": \"\",\n                \"-o-transition\": \"\",\n                \"transition\": \"\"\n            };\n        },\n\n        doTranslate : function (pixels) {\n            return {\n                \"-webkit-transform\": \"translate3d(\" + pixels + \"px, 0px, 0px)\",\n                \"-moz-transform\": \"translate3d(\" + pixels + \"px, 0px, 0px)\",\n                \"-o-transform\": \"translate3d(\" + pixels + \"px, 0px, 0px)\",\n                \"-ms-transform\": \"translate3d(\" + pixels + \"px, 0px, 0px)\",\n                \"transform\": \"translate3d(\" + pixels + \"px, 0px,0px)\"\n            };\n        },\n\n        transition3d : function (value) {\n            var base = this;\n            base.$owlWrapper.css(base.doTranslate(value));\n        },\n\n        css2move : function (value) {\n            var base = this;\n            base.$owlWrapper.css({\"left\" : value});\n        },\n\n        css2slide : function (value, speed) {\n            var base = this;\n\n            base.isCssFinish = false;\n            base.$owlWrapper.stop(true, true).animate({\n                \"left\" : value\n            }, {\n                duration : speed || base.options.slideSpeed,\n                complete : function () {\n                    base.isCssFinish = true;\n                }\n            });\n        },\n\n        checkBrowser : function () {\n            var base = this,\n                translate3D = \"translate3d(0px, 0px, 0px)\",\n                tempElem = document.createElement(\"div\"),\n                regex,\n                asSupport,\n                support3d,\n                isTouch;\n\n            tempElem.style.cssText = \"  -moz-transform:\" + translate3D +\n                                  \"; -ms-transform:\"     + translate3D +\n                                  \"; -o-transform:\"      + translate3D +\n                                  \"; -webkit-transform:\" + translate3D +\n                                  \"; transform:\"         + translate3D;\n            regex = /translate3d\\(0px, 0px, 0px\\)/g;\n            asSupport = tempElem.style.cssText.match(regex);\n            support3d = (asSupport !== null && asSupport.length === 1);\n\n            isTouch = \"ontouchstart\" in window || window.navigator.msMaxTouchPoints;\n\n            base.browser = {\n                \"support3d\" : support3d,\n                \"isTouch\" : isTouch\n            };\n        },\n\n        moveEvents : function () {\n            var base = this;\n            if (base.options.mouseDrag !== false || base.options.touchDrag !== false) {\n                base.gestures();\n                base.disabledEvents();\n            }\n        },\n\n        eventTypes : function () {\n            var base = this,\n                types = [\"s\", \"e\", \"x\"];\n\n            base.ev_types = {};\n\n            if (base.options.mouseDrag === true && base.options.touchDrag === true) {\n                types = [\n                    \"touchstart.owl mousedown.owl\",\n                    \"touchmove.owl mousemove.owl\",\n                    \"touchend.owl touchcancel.owl mouseup.owl\"\n                ];\n            } else if (base.options.mouseDrag === false && base.options.touchDrag === true) {\n                types = [\n                    \"touchstart.owl\",\n                    \"touchmove.owl\",\n                    \"touchend.owl touchcancel.owl\"\n                ];\n            } else if (base.options.mouseDrag === true && base.options.touchDrag === false) {\n                types = [\n                    \"mousedown.owl\",\n                    \"mousemove.owl\",\n                    \"mouseup.owl\"\n                ];\n            }\n\n            base.ev_types.start = types[0];\n            base.ev_types.move = types[1];\n            base.ev_types.end = types[2];\n        },\n\n        disabledEvents :  function () {\n            var base = this;\n            base.$elem.on(\"dragstart.owl\", function (event) { event.preventDefault(); });\n            base.$elem.on(\"mousedown.disableTextSelect\", function (e) {\n                return $(e.target).is('input, textarea, select, option');\n            });\n        },\n\n        gestures : function () {\n            /*jslint unparam: true*/\n            var base = this,\n                locals = {\n                    offsetX : 0,\n                    offsetY : 0,\n                    baseElWidth : 0,\n                    relativePos : 0,\n                    position: null,\n                    minSwipe : null,\n                    maxSwipe: null,\n                    sliding : null,\n                    dargging: null,\n                    targetElement : null\n                };\n\n            base.isCssFinish = true;\n\n            function getTouches(event) {\n                if (event.touches !== undefined) {\n                    return {\n                        x : event.touches[0].pageX,\n                        y : event.touches[0].pageY\n                    };\n                }\n\n                if (event.touches === undefined) {\n                    if (event.pageX !== undefined) {\n                        return {\n                            x : event.pageX,\n                            y : event.pageY\n                        };\n                    }\n                    if (event.pageX === undefined) {\n                        return {\n                            x : event.clientX,\n                            y : event.clientY\n                        };\n                    }\n                }\n            }\n\n            function swapEvents(type) {\n                if (type === \"on\") {\n                    $(document).on(base.ev_types.move, dragMove);\n                    $(document).on(base.ev_types.end, dragEnd);\n                } else if (type === \"off\") {\n                    $(document).off(base.ev_types.move);\n                    $(document).off(base.ev_types.end);\n                }\n            }\n\n            function dragStart(event) {\n                var ev = event.originalEvent || event || window.event,\n                    position;\n\n                if (ev.which === 3) {\n                    return false;\n                }\n                if (base.itemsAmount <= base.options.items) {\n                    return;\n                }\n                if (base.isCssFinish === false && !base.options.dragBeforeAnimFinish) {\n                    return false;\n                }\n                if (base.isCss3Finish === false && !base.options.dragBeforeAnimFinish) {\n                    return false;\n                }\n\n                if (base.options.autoPlay !== false) {\n                    window.clearInterval(base.autoPlayInterval);\n                }\n\n                if (base.browser.isTouch !== true && !base.$owlWrapper.hasClass(\"grabbing\")) {\n                    base.$owlWrapper.addClass(\"grabbing\");\n                }\n\n                base.newPosX = 0;\n                base.newRelativeX = 0;\n\n                $(this).css(base.removeTransition());\n\n                position = $(this).position();\n                locals.relativePos = position.left;\n\n                locals.offsetX = getTouches(ev).x - position.left;\n                locals.offsetY = getTouches(ev).y - position.top;\n\n                swapEvents(\"on\");\n\n                locals.sliding = false;\n                locals.targetElement = ev.target || ev.srcElement;\n            }\n\n            function dragMove(event) {\n                var ev = event.originalEvent || event || window.event,\n                    minSwipe,\n                    maxSwipe;\n\n                base.newPosX = getTouches(ev).x - locals.offsetX;\n                base.newPosY = getTouches(ev).y - locals.offsetY;\n                base.newRelativeX = base.newPosX - locals.relativePos;\n\n                if (typeof base.options.startDragging === \"function\" && locals.dragging !== true && base.newRelativeX !== 0) {\n                    locals.dragging = true;\n                    base.options.startDragging.apply(base, [base.$elem]);\n                }\n\n                if ((base.newRelativeX > 8 || base.newRelativeX < -8) && (base.browser.isTouch === true)) {\n                    if (ev.preventDefault !== undefined) {\n                        ev.preventDefault();\n                    } else {\n                        ev.returnValue = false;\n                    }\n                    locals.sliding = true;\n                }\n\n                if ((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false) {\n                    $(document).off(\"touchmove.owl\");\n                }\n\n                minSwipe = function () {\n                    return base.newRelativeX / 5;\n                };\n\n                maxSwipe = function () {\n                    return base.maximumPixels + base.newRelativeX / 5;\n                };\n\n                base.newPosX = Math.max(Math.min(base.newPosX, minSwipe()), maxSwipe());\n                if (base.browser.support3d === true) {\n                    base.transition3d(base.newPosX);\n                } else {\n                    base.css2move(base.newPosX);\n                }\n            }\n\n            function dragEnd(event) {\n                var ev = event.originalEvent || event || window.event,\n                    newPosition,\n                    handlers,\n                    owlStopEvent;\n\n                ev.target = ev.target || ev.srcElement;\n\n                locals.dragging = false;\n\n                if (base.browser.isTouch !== true) {\n                    base.$owlWrapper.removeClass(\"grabbing\");\n                }\n\n                if (base.newRelativeX < 0) {\n                    base.dragDirection = base.owl.dragDirection = \"left\";\n                } else {\n                    base.dragDirection = base.owl.dragDirection = \"right\";\n                }\n\n                if (base.newRelativeX !== 0) {\n                    newPosition = base.getNewPosition();\n                    base.goTo(newPosition, false, \"drag\");\n                    if (locals.targetElement === ev.target && base.browser.isTouch !== true) {\n                        $(ev.target).on(\"click.disable\", function (ev) {\n                            ev.stopImmediatePropagation();\n                            ev.stopPropagation();\n                            ev.preventDefault();\n                            $(ev.target).off(\"click.disable\");\n                        });\n                        handlers = $._data(ev.target, \"events\").click;\n                        owlStopEvent = handlers.pop();\n                        handlers.splice(0, 0, owlStopEvent);\n                    }\n                }\n                swapEvents(\"off\");\n            }\n            base.$elem.on(base.ev_types.start, \".owl-wrapper\", dragStart);\n        },\n\n        getNewPosition : function () {\n            var base = this,\n                newPosition = base.closestItem();\n\n            if (newPosition > base.maximumItem) {\n                base.currentItem = base.maximumItem;\n                newPosition  = base.maximumItem;\n            } else if (base.newPosX >= 0) {\n                newPosition = 0;\n                base.currentItem = 0;\n            }\n            return newPosition;\n        },\n        closestItem : function () {\n            var base = this,\n                array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray,\n                goal = base.newPosX,\n                closest = null;\n\n            $.each(array, function (i, v) {\n                if (goal - (base.itemWidth / 20) > array[i + 1] && goal - (base.itemWidth / 20) < v && base.moveDirection() === \"left\") {\n                    closest = v;\n                    if (base.options.scrollPerPage === true) {\n                        base.currentItem = $.inArray(closest, base.positionsInArray);\n                    } else {\n                        base.currentItem = i;\n                    }\n                } else if (goal + (base.itemWidth / 20) < v && goal + (base.itemWidth / 20) > (array[i + 1] || array[i] - base.itemWidth) && base.moveDirection() === \"right\") {\n                    if (base.options.scrollPerPage === true) {\n                        closest = array[i + 1] || array[array.length - 1];\n                        base.currentItem = $.inArray(closest, base.positionsInArray);\n                    } else {\n                        closest = array[i + 1];\n                        base.currentItem = i + 1;\n                    }\n                }\n            });\n            return base.currentItem;\n        },\n\n        moveDirection : function () {\n            var base = this,\n                direction;\n            if (base.newRelativeX < 0) {\n                direction = \"right\";\n                base.playDirection = \"next\";\n            } else {\n                direction = \"left\";\n                base.playDirection = \"prev\";\n            }\n            return direction;\n        },\n\n        customEvents : function () {\n            /*jslint unparam: true*/\n            var base = this;\n            base.$elem.on(\"owl.next\", function () {\n                base.next();\n            });\n            base.$elem.on(\"owl.prev\", function () {\n                base.prev();\n            });\n            base.$elem.on(\"owl.play\", function (event, speed) {\n                base.options.autoPlay = speed;\n                base.play();\n                base.hoverStatus = \"play\";\n            });\n            base.$elem.on(\"owl.stop\", function () {\n                base.stop();\n                base.hoverStatus = \"stop\";\n            });\n            base.$elem.on(\"owl.goTo\", function (event, item) {\n                base.goTo(item);\n            });\n            base.$elem.on(\"owl.jumpTo\", function (event, item) {\n                base.jumpTo(item);\n            });\n        },\n\n        stopOnHover : function () {\n            var base = this;\n            if (base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false) {\n                base.$elem.on(\"mouseover\", function () {\n                    base.stop();\n                });\n                base.$elem.on(\"mouseout\", function () {\n                    if (base.hoverStatus !== \"stop\") {\n                        base.play();\n                    }\n                });\n            }\n        },\n\n        lazyLoad : function () {\n            var base = this,\n                i,\n                $item,\n                itemNumber,\n                $lazyImg,\n                follow;\n\n            if (base.options.lazyLoad === false) {\n                return false;\n            }\n            for (i = 0; i < base.itemsAmount; i += 1) {\n                $item = $(base.$owlItems[i]);\n\n                if ($item.data(\"owl-loaded\") === \"loaded\") {\n                    continue;\n                }\n\n                itemNumber = $item.data(\"owl-item\");\n                $lazyImg = $item.find(\".lazyOwl\");\n\n                if (typeof $lazyImg.data(\"src\") !== \"string\") {\n                    $item.data(\"owl-loaded\", \"loaded\");\n                    continue;\n                }\n                if ($item.data(\"owl-loaded\") === undefined) {\n                    $lazyImg.hide();\n                    $item.addClass(\"loading\").data(\"owl-loaded\", \"checked\");\n                }\n                if (base.options.lazyFollow === true) {\n                    follow = itemNumber >= base.currentItem;\n                } else {\n                    follow = true;\n                }\n                if (follow && itemNumber < base.currentItem + base.options.items && $lazyImg.length) {\n                    base.lazyPreload($item, $lazyImg);\n                }\n            }\n        },\n\n        lazyPreload : function ($item, $lazyImg) {\n            var base = this,\n                iterations = 0,\n                isBackgroundImg;\n\n            if ($lazyImg.prop(\"tagName\") === \"DIV\") {\n                $lazyImg.css(\"background-image\", \"url(\" + $lazyImg.data(\"src\") + \")\");\n                isBackgroundImg = true;\n            } else {\n                $lazyImg[0].src = $lazyImg.data(\"src\");\n            }\n\n            function showImage() {\n                $item.data(\"owl-loaded\", \"loaded\").removeClass(\"loading\");\n                $lazyImg.removeAttr(\"data-src\");\n                if (base.options.lazyEffect === \"fade\") {\n                    $lazyImg.fadeIn(400);\n                } else {\n                    $lazyImg.show();\n                }\n                if (typeof base.options.afterLazyLoad === \"function\") {\n                    base.options.afterLazyLoad.apply(this, [base.$elem]);\n                }\n            }\n\n            function checkLazyImage() {\n                iterations += 1;\n                if (base.completeImg($lazyImg.get(0)) || isBackgroundImg === true) {\n                    showImage();\n                } else if (iterations <= 100) {//if image loads in less than 10 seconds \n                    window.setTimeout(checkLazyImage, 100);\n                } else {\n                    showImage();\n                }\n            }\n\n            checkLazyImage();\n        },\n\n        autoHeight : function () {\n            var base = this,\n                $currentimg = $(base.$owlItems[base.currentItem]).find(\"img\"),\n                iterations;\n\n            function addHeight() {\n                var $currentItem = $(base.$owlItems[base.currentItem]).height();\n                base.wrapperOuter.css(\"height\", $currentItem + \"px\");\n                if (!base.wrapperOuter.hasClass(\"autoHeight\")) {\n                    window.setTimeout(function () {\n                        base.wrapperOuter.addClass(\"autoHeight\");\n                    }, 0);\n                }\n            }\n\n            function checkImage() {\n                iterations += 1;\n                if (base.completeImg($currentimg.get(0))) {\n                    addHeight();\n                } else if (iterations <= 100) { //if image loads in less than 10 seconds \n                    window.setTimeout(checkImage, 100);\n                } else {\n                    base.wrapperOuter.css(\"height\", \"\"); //Else remove height attribute\n                }\n            }\n\n            if ($currentimg.get(0) !== undefined) {\n                iterations = 0;\n                checkImage();\n            } else {\n                addHeight();\n            }\n        },\n\n        completeImg : function (img) {\n            var naturalWidthType;\n\n            if (!img.complete) {\n                return false;\n            }\n            naturalWidthType = typeof img.naturalWidth;\n            if (naturalWidthType !== \"undefined\" && img.naturalWidth === 0) {\n                return false;\n            }\n            return true;\n        },\n\n        onVisibleItems : function () {\n            var base = this,\n                i;\n\n            if (base.options.addClassActive === true) {\n                base.$owlItems.removeClass(\"active\");\n            }\n            base.visibleItems = [];\n            for (i = base.currentItem; i < base.currentItem + base.options.items; i += 1) {\n                base.visibleItems.push(i);\n\n                if (base.options.addClassActive === true) {\n                    $(base.$owlItems[i]).addClass(\"active\");\n                }\n            }\n            base.owl.visibleItems = base.visibleItems;\n        },\n\n        transitionTypes : function (className) {\n            var base = this;\n            //Currently available: \"fade\", \"backSlide\", \"goDown\", \"fadeUp\"\n            base.outClass = \"owl-\" + className + \"-out\";\n            base.inClass = \"owl-\" + className + \"-in\";\n        },\n\n        singleItemTransition : function () {\n            var base = this,\n                outClass = base.outClass,\n                inClass = base.inClass,\n                $currentItem = base.$owlItems.eq(base.currentItem),\n                $prevItem = base.$owlItems.eq(base.prevItem),\n                prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem],\n                origin = Math.abs(base.positionsInArray[base.currentItem]) + base.itemWidth / 2,\n                animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend';\n\n            base.isTransition = true;\n\n            base.$owlWrapper\n                .addClass('owl-origin')\n                .css({\n                    \"-webkit-transform-origin\" : origin + \"px\",\n                    \"-moz-perspective-origin\" : origin + \"px\",\n                    \"perspective-origin\" : origin + \"px\"\n                });\n            function transStyles(prevPos) {\n                return {\n                    \"position\" : \"relative\",\n                    \"left\" : prevPos + \"px\"\n                };\n            }\n\n            $prevItem\n                .css(transStyles(prevPos, 10))\n                .addClass(outClass)\n                .on(animEnd, function () {\n                    base.endPrev = true;\n                    $prevItem.off(animEnd);\n                    base.clearTransStyle($prevItem, outClass);\n                });\n\n            $currentItem\n                .addClass(inClass)\n                .on(animEnd, function () {\n                    base.endCurrent = true;\n                    $currentItem.off(animEnd);\n                    base.clearTransStyle($currentItem, inClass);\n                });\n        },\n\n        clearTransStyle : function (item, classToRemove) {\n            var base = this;\n            item.css({\n                \"position\" : \"\",\n                \"left\" : \"\"\n            }).removeClass(classToRemove);\n\n            if (base.endPrev && base.endCurrent) {\n                base.$owlWrapper.removeClass('owl-origin');\n                base.endPrev = false;\n                base.endCurrent = false;\n                base.isTransition = false;\n            }\n        },\n\n        owlStatus : function () {\n            var base = this;\n            base.owl = {\n                \"userOptions\"   : base.userOptions,\n                \"baseElement\"   : base.$elem,\n                \"userItems\"     : base.$userItems,\n                \"owlItems\"      : base.$owlItems,\n                \"currentItem\"   : base.currentItem,\n                \"prevItem\"      : base.prevItem,\n                \"visibleItems\"  : base.visibleItems,\n                \"isTouch\"       : base.browser.isTouch,\n                \"browser\"       : base.browser,\n                \"dragDirection\" : base.dragDirection\n            };\n        },\n\n        clearEvents : function () {\n            var base = this;\n            base.$elem.off(\".owl owl mousedown.disableTextSelect\");\n            $(document).off(\".owl owl\");\n            $(window).off(\"resize\", base.resizer);\n        },\n\n        unWrap : function () {\n            var base = this;\n            if (base.$elem.children().length !== 0) {\n                base.$owlWrapper.unwrap();\n                base.$userItems.unwrap().unwrap();\n                if (base.owlControls) {\n                    base.owlControls.remove();\n                }\n            }\n            base.clearEvents();\n            base.$elem\n                .attr(\"style\", base.$elem.data(\"owl-originalStyles\") || \"\")\n                .attr(\"class\", base.$elem.data(\"owl-originalClasses\"));\n        },\n\n        destroy : function () {\n            var base = this;\n            base.stop();\n            window.clearInterval(base.checkVisible);\n            base.unWrap();\n            base.$elem.removeData();\n        },\n\n        reinit : function (newOptions) {\n            var base = this,\n                options = $.extend({}, base.userOptions, newOptions);\n            base.unWrap();\n            base.init(options, base.$elem);\n        },\n\n        addItem : function (htmlString, targetPosition) {\n            var base = this,\n                position;\n\n            if (!htmlString) {return false; }\n\n            if (base.$elem.children().length === 0) {\n                base.$elem.append(htmlString);\n                base.setVars();\n                return false;\n            }\n            base.unWrap();\n            if (targetPosition === undefined || targetPosition === -1) {\n                position = -1;\n            } else {\n                position = targetPosition;\n            }\n            if (position >= base.$userItems.length || position === -1) {\n                base.$userItems.eq(-1).after(htmlString);\n            } else {\n                base.$userItems.eq(position).before(htmlString);\n            }\n\n            base.setVars();\n        },\n\n        removeItem : function (targetPosition) {\n            var base = this,\n                position;\n\n            if (base.$elem.children().length === 0) {\n                return false;\n            }\n            if (targetPosition === undefined || targetPosition === -1) {\n                position = -1;\n            } else {\n                position = targetPosition;\n            }\n\n            base.unWrap();\n            base.$userItems.eq(position).remove();\n            base.setVars();\n        }\n\n    };\n\n    $.fn.owlCarousel = function (options) {\n        return this.each(function () {\n            if ($(this).data(\"owl-init\") === true) {\n                return false;\n            }\n            $(this).data(\"owl-init\", true);\n            var carousel = Object.create(Carousel);\n            carousel.init(options, this);\n            $.data(this, \"owlCarousel\", carousel);\n        });\n    };\n\n    $.fn.owlCarousel.options = {\n\n        items : 5,\n        itemsCustom : false,\n        itemsDesktop : [1199, 4],\n        itemsDesktopSmall : [979, 3],\n        itemsTablet : [768, 2],\n        itemsTabletSmall : false,\n        itemsMobile : [479, 1],\n        singleItem : false,\n        itemsScaleUp : false,\n\n        slideSpeed : 200,\n        paginationSpeed : 800,\n        rewindSpeed : 1000,\n\n        autoPlay : false,\n        stopOnHover : false,\n\n        navigation : false,\n        navigationText : [\"prev\", \"next\"],\n        rewindNav : true,\n        scrollPerPage : false,\n\n        pagination : true,\n        paginationNumbers : false,\n\n        responsive : true,\n        responsiveRefreshRate : 200,\n        responsiveBaseWidth : window,\n\n        baseClass : \"owl-carousel\",\n        theme : \"owl-theme\",\n\n        lazyLoad : false,\n        lazyFollow : true,\n        lazyEffect : \"fade\",\n\n        autoHeight : false,\n\n        jsonPath : false,\n        jsonSuccess : false,\n\n        dragBeforeAnimFinish : true,\n        mouseDrag : true,\n        touchDrag : true,\n\n        addClassActive : false,\n        transitionStyle : false,\n\n        beforeUpdate : false,\n        afterUpdate : false,\n        beforeInit : false,\n        afterInit : false,\n        beforeMove : false,\n        afterMove : false,\n        afterAction : false,\n        startDragging : false,\n        afterLazyLoad: false\n    };\n}(jQuery, window, document));","export function make(base, params) {\n  let connector = base.indexOf(\"?\") == -1 ? \"?\" : \"&\";\n  return base + connector + params;\n}\n","/* Skidder 0.2.8 - a jQuery slideshow plugin\n * Georg Lauteren for null2.net\n * twitter.com/_gl03\n * Contributor: Maja Komel\n * Thanks: Andi Pieper\n * 0.2.3 added directionClasses option\n * 0.2.4 added css based transitions - untested for mobile\n * 0.2.5 afterResize callback\n * 0.2.6 fixed swiping\n * 0.2.7 added scaleTo and preservePortrait options, renamed maxWidth and maxheight options, support for non-image slides\n * 0.2.8 rewrite of CSS timing using transitionend and rAF\n */\n\nif ( typeof Object.create != 'function') {\n  Object.create = function(obj) {\n    function F() {};\n    F.prototype = obj;\n    return new F();\n  }\n}\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n(function() {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n  for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) {\n    window.requestAnimationFrame = function(callback, element) {\n      var currTime = new Date().getTime();\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    }\n  }\n\n  if (!window.cancelAnimationFrame) {\n    window.cancelAnimationFrame = function(id) {\n      clearTimeout(id);\n    };\n  }\n}());\n\n\n(function($, window, document, undefined) {\n\n  function img(url) {\n    var i = new Image;\n    i.src = url;\n    return i;\n  }\n\n  if ('naturalWidth' in (new Image)) {\n    $.fn.naturalWidth  = function() { return this[0].naturalWidth; };\n    $.fn.naturalHeight = function() { return this[0].naturalHeight; };\n  } else {\n    $.fn.naturalWidth  = function() { return img(this[0].src).width; };\n    $.fn.naturalHeight = function() { return img(this[0].src).height; };\n  }\n\n  var Skidder = {\n\n    init: function(options, elem) {\n      var self = this; // instance\n      window.skidder = self;\n      self.elem = elem;\n      self.$elem = $(elem);\n\n      // merge options\n      self.options = $.extend( {},  $.fn.skidder.options, options);\n\n      if(!self.supportsTransitions()) {\n        self.options.animationType = 'animate';\n      }\n\n\n      // // suport deprecated options\n      // if (self.options.maxWidth) self.options.maxWidth ||= self.options.maxWidth;\n      // if (self.options.maxHeight) self.options.maxHeight ||= self.options.maxHeight;\n\n      // attach instance to jquery object\n      self.$elem.data('skidder', self);\n\n      // determine touch support\n      if (('ontouchstart' in window) ||\n        (navigator.maxTouchPoints > 0) ||\n        (navigator.msMaxTouchPoints > 0)) {\n        self.touchdevice = true;\n      }\n\n      // store elements + create wrappers\n      self.$slides = self.$elem.find(self.options.slideClass);\n      self.$slides.wrapAll('<div class=\"skidder-wrapper\"></div>').addClass('skidder-slide');\n      self.$elem.wrapInner('<div class=\"skidder-viewport\"></div>');\n      self.$viewport = self.$elem.find('.skidder-viewport');\n      self.$wrapper = self.$viewport.find('.skidder-wrapper');\n\n      if (self.$slides.length > 1) {\n        self.$viewport.append('<div class=\"skidder-prevwrapper skidder-clickwrapper\"><div class=\"skidder-prev skidder-clickelement\"></div></div><div class=\"skidder-nextwrapper skidder-clickwrapper\"><div class=\"skidder-next skidder-clickelement\"></div></div>');\n        self.$clickwrappers = self.$viewport.find('.skidder-clickwrapper');\n        if (self.touchdevice) {\n          if (self.options.swiping) {\n            // if touch support, append touchwrapper\n            self.$viewport.append('<div class=\"skidder-touchwrapper\"></div>');\n            self.$touchwrapper = self.$viewport.find('.skidder-touchwrapper');\n          } else { // no touch support, show click controls\n            self.$clickwrappers.find('.skidder-clickelement').css('opacity', 1);\n          }\n        }\n        self.$clickwrappers.attr({\n          'data-direction' : function() {\n            return $(this).hasClass('skidder-prevwrapper') ? 'prev' : 'next'; // TODO: remove direction\n          },\n        });\n        if ((self.touchdevice || self.options.paging)) {\n          self.$pager = self.$viewport.find(self.options.pagingWrapper);\n          if (self.$pager.length < 1) {\n            self.$viewport.append('<div class=\"' + self.options.pagingWrapper.replace('.', '') +  '\"></div>');\n            self.$pager = self.$viewport.find(self.options.pagingWrapper);\n          }\n        }\n      }\n\n      self.leftPosition = 0;\n\n      // establish initial dimensions\n\n      self.refreshImages(); // select images\n\n      if (self.$images && self.$images.length && self.options.scaleSlides) { // scaling\n\n        self.scaleSlides();\n\n      } else if (self.$images && self.$images.length) { // no scaling, slideshowheight = highest image height\n\n        var newMaxHeight = 0;\n        self.$images.each(function() { // TODO: for no-image slideshows\n          newMaxHeight = Math.max($(this).innerHeight(), newMaxHeight);\n          // console.log(newMaxHeight);\n        });\n        self.setSlideshowHeight(newMaxHeight);\n      }\n\n      if (self.$images && self.$slides.length > 1) {\n\n        self.preloadSlides();\n        self.centerPosition();\n\n        if (self.options.autoplay) {\n          self.autoplaying = self.autoplay();\n        }\n      } else if (self.$images && self.$slides.length == 1) {\n        // call init here for 1 slide shows, as no preload happens\n        setTimeout( function() {\n          self.$slides.addClass('active');\n        }, 0);\n\n        // self.$wrapper.css('opacity', 1);\n        self.options.afterInit.call(this);\n      } else {\n        console.log('No slides found');\n      }\n\n    },\n\n    scaleSlides: function() {\n\n      var self = this;\n\n      var maxWidth;\n      var maxHeight;\n      var slideshowHeight;\n\n      if (self.options.maxWidth > 0) {\n        // set width to viewportwidth or maxWidth (if smaller)\n        maxWidth = Math.min(self.$viewport.innerWidth(), self.options.maxWidth);\n      } else {\n        maxWidth = self.$viewport.innerWidth();\n      }\n\n      // smallest scaling mode: slideshow height and slide height are defined by smallest image height (or maxHeight if smaller)\n      if (self.options.scaleTo === \"smallest\") {\n\n        if (self.options.maxHeight > 0) {\n          maxHeight = self.options.maxHeight;\n        } else {\n          maxHeight = 10000000; // a.k.a infinity\n        }\n\n        var scalefactor = 1.0;\n\n        self.$images.each(function() {\n          if (!$(this).is('img')) {\n            // test: only div slides\n          } else {\n            scalefactor = Math.min(1.0, maxWidth / $(this).naturalWidth()); // if image wider than viewport or maxWidth...\n            maxHeight = Math.min( maxHeight, Math.ceil($(this).naturalHeight() * scalefactor));\n          }\n\n        });\n\n        slideshowHeight = maxHeight;\n\n        self.setSlideshowHeight(slideshowHeight);\n\n        // scale images ---- TODO: possibly refactor with ratio --- validate condition calls for smaller images\n\n        self.$images.each(function() {\n          if ($(this).naturalHeight() > maxHeight) {\n            // console.log('1');\n            $(this).css({\n              'width'   : Math.ceil($(this).naturalWidth() * (maxHeight / $(this).naturalHeight() )) + 2, // + 2 is lazy correction for rounding problem\n              'height'  : maxHeight\n            });\n            $(this).closest('.skidder-slide').css({\n              'width'   : (self.options.spaceSlides ? maxWidth : 'auto'),\n            });\n\n          } else if ($(this).naturalWidth() > maxWidth) {\n            // console.log('2');\n            $(this).css({\n              'width'   : maxWidth,\n              'height'  : Math.ceil($(this).naturalHeight() * (maxWidth / $(this).naturalWidth() )) + 2 // + 2 is lazy correction for rounding problem\n            });\n\n          } else {\n            // console.log('3');\n            $(this).css({\n              'width'   : ($(this).is('img') ?  'auto' : maxWidth ),\n              'height'  : maxHeight,\n              'margin-left'  : 'auto',\n              'margin-right'  : 'auto',\n              'display' : 'block',\n            });\n          }\n        });\n\n\n      // ratio scaling mode: slideshow height defined by given ratio (or maxheight if smaller)\n      } else if (self.options.scaleTo.constructor === Array) {\n\n        maxHeight = maxWidth / self.options.scaleTo[0] * self.options.scaleTo[1];\n\n        if (self.options.maxHeight > 0) {\n          // with scaleTo ratio maxheight crops images (unless preservePortrait)\n          slideshowHeight = Math.min(maxHeight, self.options.maxHeight);\n        } else {\n          slideshowHeight = maxHeight\n        }\n\n        self.setSlideshowHeight(slideshowHeight);\n\n        // scale images\n        self.$images.each(function() {\n          if (!$(this).is('img')) {\n            // element is imageless slide\n            $(this).css({\n              'width'   : maxWidth,\n              'height'  : '100%',\n              'margin-top': (slideshowHeight - (maxWidth / $(this).naturalWidth() * $(this).naturalHeight())) / 2\n            });\n          } else if (($(this).naturalWidth() / $(this).naturalHeight()) >= self.options.scaleTo[0] / self.options.scaleTo[1]) {\n            // wider than ratio: size to maxHeight, will be cropped left + right\n            $(this).css({\n              'width'   : 'auto',\n              'height'  : maxHeight,\n              'margin-top': (slideshowHeight - (maxWidth / $(this).naturalWidth() * $(this).naturalHeight())) / 2\n            });\n          } else {\n            // less wide than ratio\n            if (self.options.preservePortrait) {\n              // fit\n              $(this).css({\n                'width'   : 'auto',\n                'height'  : slideshowHeight,\n                'margin-left'  : 'auto',\n                'margin-right'  : 'auto',\n                'display' : 'block',\n              });\n              $(this).closest('.skidder-slide').css({\n                'width'   : (self.options.spaceSlides ? maxWidth : 'auto'),\n              });\n            } else {\n              // cover\n              $(this).css({\n                'width'   : maxWidth,\n                'height'  : 'auto',\n                'margin-top': (maxHeight - (maxWidth / $(this).naturalWidth() * $(this).naturalHeight())) / 2\n              });\n            }\n          }\n        });\n      }\n\n      // set new leftPosition executed in scrollWrapper // TODO: does not work on load as active slide is not set yet! do we need this to work?\n      // self.refreshSlides();\n      var currentactiveindex = self.$elem.find('.skidder-slide').index(self.$elem.find('.skidder-slide').filter('.active'));\n      // console.log(currentactiveindex);\n      // console.log(self.leftPosition);\n      self.leftPosition = 0;\n      for (var i = 0; i < currentactiveindex; i++ ) {\n        self.leftPosition -= self.$slides.eq(i).innerWidth();\n      }\n      // console.log(self.leftPosition);\n      if (self.options.transition == \"slide\") {\n        self.$wrapper.css('left', self.leftPosition);\n      }\n\n    },\n\n    preloadSlides: function() {\n\n      var self = this;\n      var $activeslide = self.$slides.eq(0);\n      var slidesTotalWidth = 0;\n\n      if (self.$pager && self.$pager.length) {\n        self.$pagerdots = self.$pager.find(self.options.pagingElement);\n      }\n\n\n      for (var i = 0; i < self.$slides.length; i++ ) {\n        // establish total width of wrapper\n        slidesTotalWidth += self.$slides.eq(i).innerWidth();\n        // append pager\n        if ((self.touchdevice || self.options.paging) && self.$slides.length > 1 && (self.$pagerdots.length < self.$slides.length)) {\n          self.$pager.append('<div class=\"' + self.options.pagingElement.replace('.', '') +  '\"></div>');\n        }\n      }\n\n      if (self.touchdevice || self.options.paging) {\n        // if mobile, show paging\n        self.$pager.find(self.options.pagingElement).css('opacity', 1);\n      }\n\n      if (self.options.transition == \"slide\" || ( self.options.swiping && self.touchdevice)) {\n        if (self.options.cycle && self.$slides.length > 1) {\n          // clone two sets of slides\n          self.$slides.clone(true).addClass('skidder-clone skidder-clone-pre').prependTo(self.$wrapper);\n          self.$slides.clone(true).addClass('skidder-clone skidder-clone-post').appendTo(self.$wrapper);\n\n          // set initial left position\n          self.leftPosition = -slidesTotalWidth;\n          self.$wrapper.css({\n            'left': self.leftPosition,\n          });\n\n          if (!self.touchdevice && self.options.animationType == 'css') { // for touch, css transitions are only active for actual scrolling\n            window.requestAnimationFrame(self.applyWrapperSlideTransition());\n          }\n\n          self.refreshSlides();\n          self.refreshImages();\n        } else if ( self.$slides.length > 1 ){\n          self.$clickwrappers.find('.skidder-prev').hide(0);\n        }\n      } else if (self.options.transition == \"fade\") {\n        self.$viewport.addClass('skidder-fade');\n        if (self.options.cycle && self.$slides.length > 1) {\n          $(\".skidder-wrapper, .skidder-slide\").css(\"position\", \"absolute\");\n        } else if ( self.$slides.length > 1 ){\n          self.$clickwrappers.find('.skidder-prev').hide(0);\n        }\n      }\n\n      $activeslide.addClass('active');\n\n      if (self.options.directionClasses) {\n        self.addLeftAndRightClasses();\n      };\n\n      // add clickhandlers\n      if (self.$slides.length > 1) {\n        if (self.touchdevice || self.options.paging) {\n\n          self.$pagerdots = self.$pager.find(self.options.pagingElement);\n          self.$pagerdots.eq(0).addClass('active');\n        }\n        self.addEventHandlers();\n      }\n\n      // self.$wrapper.css('opacity', 1);\n\n      if ( $.isFunction( self.options.afterInit ) ) {\n        self.options.afterInit.call(this);\n      }\n\n    },\n\n    applyWrapperSlideTransition: function() {\n      var self = this;\n      return function() {\n        var speedstring = \"\" + (self.options.speed/1000) + \"s\";\n        self.$wrapper.css({\n          '-webkit-transition': 'left ' + speedstring + ' ease-out',\n          'transition': 'left ' + speedstring + ' ease-out'\n        });\n      }\n    },\n\n    removeWrapperSlideTransition: function() {\n      var self = this;\n      return function() {\n        self.$wrapper.css({\n          '-webkit-transition': 'none',\n          'transition': 'none'\n        });\n      }\n    },\n\n    addEventHandlers: function() {\n      var self = this;\n      if (self.$slides.length > 1) {\n        if (self.touchdevice || self.options.paging) {\n          self.$pagerdots.on('click touchend', function(e){self.clickHandlerPaging(e)});\n        }\n        if (self.options.swiping && self.touchdevice) {\n          self.$touchwrapper.on('touchstart touchmove touchend', function(e){self.swipeHandler(e)});\n        } else {\n          self.$clickwrappers.on('click', function(e){self.clickHandlerLeftRight(e)});\n        }\n      }\n    },\n\n    removeEventHandlers: function() {\n      var self = this;\n      if (self.$slides.length > 1) {\n        if (self.touchdevice || self.options.paging) {\n          self.$pagerdots.off('click touchend');\n        }\n        if (self.options.swiping && self.touchdevice) {\n          self.$touchwrapper.off('touchstart touchmove touchend');\n        } else {\n          self.$clickwrappers.off('click');\n        }\n      }\n    },\n\n    swipeHandler: function(e) {\n      var self = this;\n      var diffX = 0;\n      var diffY = 0;\n      var touchinterval;\n      // var velocity;\n      var $activeslide = self.$slides.filter('.active');\n      if (self.touchdevice || self.options.paging) {\n        var $activedot = self.$pagerdots.filter('.active');\n      }\n\n\n      if (e.type == \"touchstart\") {\n        window.clearTimeout(self.autoplaying);\n        self.windowY = window.pageYOffset;\n        self.initialX = e.originalEvent.changedTouches[0].clientX;\n        self.initialY = e.originalEvent.changedTouches[0].clientY;\n        self.touchtime = new Date().getTime();\n\n        self.removeWrapperSlideTransition()();\n\n      } else if (e.type == \"touchmove\") {\n\n        diffX = e.originalEvent.changedTouches[0].clientX - self.initialX;\n        diffY = e.originalEvent.changedTouches[0].clientY - self.initialY;\n\n        // console.log([diffX,diffY]);\n\n        if (Math.abs(diffX) > Math.abs(diffY)) {\n          e.stopPropagation();\n          e.preventDefault();\n          self.$wrapper.css('left', self.leftPosition + diffX);\n        }\n\n      } else if (e.type == \"touchend\") {\n\n        self.finalX = e.originalEvent.changedTouches[0].clientX;\n        self.finalY = e.originalEvent.changedTouches[0].clientY;\n        self.totaldiffX = self.finalX - self.initialX;\n        self.totaldiffY = self.finalY - self.initialY;\n        touchinterval = new Date().getTime() - self.touchtime;\n        // console.log('totaldiffX: ' + self.totaldiffX + ' totaldiffY: ' + self.totaldiffY);\n        // console.log('touchinterval: ' + touchinterval);\n\n        // TODO: DRY left<>right sliding\n\n        if (self.totaldiffX > $activeslide.innerWidth()/2 || self.totaldiffX > 0 && touchinterval < 350) { // replace interval by velocity for long fast swipes?\n\n          self.removeEventHandlers();\n          $activeslide.prev().addClass('active');\n          $activeslide.removeClass('active').addClass('disengage');\n          if (self.touchdevice || self.options.paging) {\n            self.$pagerdots.removeClass('active');\n            $activedot.is(':first-child') ? self.$pagerdots.eq(-1).addClass('active') : $activedot.prev().addClass('active');\n          }\n          if (self.options.animationType == 'css') { // for touch, css transitions are only active for actual scrolling\n            self.applyWrapperSlideTransition()();\n          }\n          self.transitionWrapper('prev', -1, self.totaldiffX, 'easeOutSkidder');\n          if ( $.isFunction( self.options.afterSliding ) ) {\n           self.options.afterSliding.call(this);\n          }\n\n        } else if (self.totaldiffX < -($activeslide.innerWidth()/2) || self.totaldiffX < 0 && touchinterval < 350) { // replace interval by velocity for long fast swipes?\n\n          self.removeEventHandlers();\n          $activeslide.next().addClass('active');\n          $activeslide.removeClass('active').addClass('disengage');\n          if (self.touchdevice || self.options.paging) {\n            self.$pagerdots.removeClass('active');\n            $activedot.is(':last-child') ? self.$pagerdots.eq(0).addClass('active') : $activedot.next().addClass('active');\n          }\n          if (self.options.animationType == 'css') { // for touch, css transitions are only active for actual scrolling\n            self.applyWrapperSlideTransition()();\n          }\n          self.transitionWrapper('next', 1, self.totaldiffX, 'easeOutSkidder');\n          if ( $.isFunction( self.options.afterSliding ) ) {\n           self.options.afterSliding.call(this);\n          }\n\n        } else if (self.totaldiffX < 5 && self.totaldiffY < 5 && $activeslide.attr('data-href')) { // it's a click!\n          self.$wrapper.css({\n            'left': self.leftPosition\n          });\n          window.clearTimeout(self.autoplaying);\n          window.location.href = $activeslide.attr('data-href');\n\n        } else { // return to original position\n          if (self.options.animationType == 'animate') {\n            self.$wrapper.animate({\n              'left': self.leftPosition\n            }, self.options.speed, self.removeWrapperSlideTransition() );\n\n          } else if (self.options.animationType == 'css'){\n            self.applyWrapperSlideTransition()();\n            self.$wrapper.on(\"transitionend\", function(e) { if ($(e.target).is(self.$wrapper)) { self.removeWrapperSlideTransition() } } );\n            self.$wrapper.css({ 'left': self.leftPosition});\n          }\n\n          if (self.options.autoplay && self.options.autoplayResume) {\n            self.autoplaying = self.autoplay();\n          }\n\n        }\n      }\n    },\n\n    clickHandlerLeftRight: function(e) {\n\n      var self = this;\n      var direction = $(e.target).closest('[data-direction]').addBack().attr('data-direction');\n      var $fromSlide = self.$slides.filter('.active');\n      var $toSlide;\n      var jumpsize;\n\n      if (direction == 'next') {\n        if (((self.options.jumpback) || self.options.transition == \"fade\") && self.$slides.eq(-1).hasClass('active')) { // last slide\n          $toSlide = self.$slides.eq(0);\n          jumpsize = -self.$slides.index($fromSlide);\n        } else {\n          $toSlide = $fromSlide.next();\n          jumpsize = 1;\n        }\n      } else {\n        if (self.options.transition == \"fade\" && self.$slides.eq(0).hasClass('active')) {\n          $toSlide = self.$slides.eq(-1); // first slide\n          jumpsize = self.$slides.length -1;\n        }  else {\n          $toSlide = $fromSlide.prev();\n          jumpsize = -1;\n        }\n      }\n\n      $toSlide.addClass('active');\n      $fromSlide.addClass('disengage').removeClass('active');\n\n      self.removeEventHandlers();\n      self.transitionWrapper(direction, jumpsize);\n\n      //update paging\n      if ((self.touchdevice || self.options.paging) && self.$slides.length > 1) {\n        var $activedot = self.$pagerdots.filter('.active');\n        self.$pagerdots.removeClass('active');\n        if (direction == 'next') {\n          $activedot.is(':last-child') ? self.$pagerdots.eq(0).addClass('active') : $activedot.next().addClass('active');\n        } else if (direction == 'prev') {\n          $activedot.is(':first-child') ? self.$pagerdots.eq(-1).addClass('active') : $activedot.prev().addClass('active');\n        }\n      }\n\n      // direction is not updateted for edge cases, because action functions don't use it\n\n      if ( $.isFunction( self.options.afterSliding ) ) {\n         self.options.afterSliding.call(this);\n      }\n    },\n\n    clickHandlerPaging: function(e) {\n      var self = this;\n      var activeindex = self.$pagerdots.index(self.$pagerdots.filter('.active'));\n      var jumpindex = self.$pagerdots.index($(e.target));\n      var jumpsize = jumpindex - activeindex;\n      var direction = (activeindex > jumpindex ? 'prev' : 'next');\n      var $fromSlide = self.$slides.filter('.active');\n      var $toSlide = self.$slides.eq(self.$slides.index($fromSlide)+jumpsize);\n\n      e.stopPropagation();\n      e.preventDefault();\n\n      // update paging\n      self.$pagerdots.removeClass('active').eq(jumpindex).addClass('active');\n\n      $fromSlide.addClass('disengage').removeClass('active');\n      $toSlide.addClass('active').removeClass('disengage');\n\n      self.removeEventHandlers();\n\n      if (self.touchdevice && self.options.swiping) {\n        self.applyWrapperSlideTransition()();\n      }\n\n      self.transitionWrapper(direction, jumpsize);\n    },\n\n    autoplay: function() {\n      var self = this;\n\n      var $fromSlide = self.$slides.filter('.active');\n      var $toSlide = ((self.options.leftaligned && self.options.jumpback) || self.options.transition == \"fade\") && self.$slides.eq(-1).hasClass('active') ?\n          self.$slides.eq(0) : $fromSlide.next();\n\n      return window.setTimeout(function(){\n\n        self.removeEventHandlers();\n\n        $fromSlide.addClass('disengage').removeClass('active');\n        $toSlide.addClass('active').removeClass('disengage');\n\n        //update paging\n        if ((self.touchdevice || self.options.paging) && self.$slides.length > 1) {\n          var $activedot = self.$pagerdots.filter('.active');\n          self.$pagerdots.removeClass('active');\n          $activedot.is(':last-child') ? self.$pagerdots.eq(0).addClass('active') : $activedot.next().addClass('active');\n\n        }\n\n        self.transitionWrapper('next', 1);\n\n        if ( $.isFunction( self.options.afterSliding ) ) {\n          self.options.afterSliding.call(this);\n        }\n\n      }, self.options.interval);\n\n    },\n\n    transitionWrapper: function(direction, jumpsize, dragoffset, easingfunction) {\n      var self = this;\n      if (self.options.transition == \"slide\" || ( self.options.swiping && self.touchdevice)) {\n        self.scrollWrapper(direction, jumpsize, dragoffset, easingfunction);\n      } else if (self.options.transition == \"fade\"){\n        self.fadeWrapper(direction, jumpsize);\n      }\n    },\n\n    scrollWrapper: function(direction, jumpsize, dragoffset, easingfunction) {\n\n      var self = this;\n      var touchoffset = dragoffset || 0;\n      var easing = easingfunction || 'swing';\n\n      window.clearTimeout(self.autoplaying);\n\n      if (jumpsize != 0) {\n        // rewrite with slideindex? -> could jump to 0 on resize\n        // console.log(direction + ' ' + jumpsize);\n        var xoffset = 0;\n        var $disengagingSlide = self.$slides.filter('.disengage');\n\n        if (self.options.leftaligned && self.options.jumpback && self.$slides.eq(0).hasClass('active') && self.$slides.eq(-1).hasClass('disengage')) {\n          for (var x=0; x<self.$slides.length-1; x++) {\n            xoffset -= self.$slides.eq(x).innerWidth()*-1;\n          }\n        } else if (self.options.leftaligned) {\n          xoffset = (jumpsize > 0 ? (-$disengagingSlide.innerWidth() * jumpsize) : (-self.$slides.filter('.active').innerWidth() * jumpsize));\n\n        } else { //centered\n          for (var j = 0; j <= Math.abs(jumpsize); j++) {\n            // get total offset by iterating through slides between disengaging and active slides\n            // add only half disengaging and active slides' width\n            xoffset += (self.$slides.eq(self.$slides.index($disengagingSlide) + j * (jumpsize > 0  ? 1 : -1 )).innerWidth()/(j==0 || j==Math.abs(jumpsize) ? 2 : 1) * (jumpsize > 0  ? -1 : 1 ));\n          }\n        }\n      } else { // jumpsize == 0\n        xoffset = 0;\n      }\n\n      self.leftPosition = self.$wrapper.position().left + xoffset - touchoffset;\n\n      // move slide and callback\n\n      var callbackfunction = function(e) {\n\n        // turn off transition before reordering\n        if (self.options.animationType == 'css') {\n          self.$wrapper.off();\n          self.removeWrapperSlideTransition()();\n        }\n\n        function reorderDOM(timestamp) {\n          // reapply click handlers\n          var $slidestomove = $();\n          self.addEventHandlers();\n          self.refreshSlides();\n          self.refreshImages();\n\n          self.$slides.removeClass('disengage');\n\n          // reorder slides\n          if (jumpsize > 0 && self.options.cycle) {\n            for (var x = 0; x < jumpsize; x++) {\n              self.leftPosition += self.$slides.eq(x).innerWidth();\n              $slidestomove = $slidestomove.add(self.$slides.eq(x));\n            }\n            $slidestomove.appendTo(self.$wrapper);\n            self.$wrapper.css('left', self.leftPosition );\n\n          } else if (jumpsize < 0 && self.options.cycle) {\n            for (var x = -1; x >= jumpsize; x--) {\n              self.leftPosition -= self.$slides.eq(x).innerWidth();\n              $slidestomove = $slidestomove.add(self.$slides.eq(x));\n            }\n            $slidestomove.prependTo(self.$wrapper);\n            self.$wrapper.css('left', self.leftPosition );\n          }\n\n          // handle jumpback option\n          if (self.options.jumpback) {\n            if (self.$slides.eq(-1).hasClass('active')) {\n              self.$clickwrappers.find('.skidder-next').addClass('jumpback');\n            } else {\n              self.$clickwrappers.find('.skidder-next').removeClass('jumpback');\n            }\n          }\n\n          if (self.options.autoplay && self.options.autoplayResume) {\n            self.autoplaying = self.autoplay();\n          }\n\n          if (self.options.directionClasses) {\n            self.addLeftAndRightClasses();\n          };\n\n          if (self.options.animationType == 'css') { // for touch, css transitions are only active for actual scrolling\n            window.requestAnimationFrame(self.applyWrapperSlideTransition());\n          }\n        }\n\n        window.requestAnimationFrame(reorderDOM);\n      }\n\n      // actual scrolling\n\n      if (self.options.animationType == 'animate') {\n        self.$wrapper.animate({\n          'left': self.leftPosition\n        }, self.options.speed, easing, callbackfunction);\n\n      } else if (self.options.animationType == 'css') {\n        self.$wrapper.on(\"transitionend\", function(e) { if ($(e.target).is(self.$wrapper)) { callbackfunction(e) } } );\n        self.$wrapper.css('left', self.leftPosition);\n      }\n\n    },\n\n    fadeWrapper: function(direction, jumpsize) {\n      var self = this;\n\n      window.clearTimeout(self.autoplaying);\n\n      self.addEventHandlers();\n\n      // handle jumpback option - TODO: test with fade\n      if (self.options.jumpback) {\n        if (self.$slides.eq(-1).hasClass('active')) {\n          self.$clickwrappers.find('.skidder-next').addClass('jumpback');\n          } else {\n            self.$clickwrappers.find('.skidder-next').removeClass('jumpback');\n          }\n        }\n\n      if (self.options.autoplay && self.options.autoplayResume) {\n        self.autoplaying = self.autoplay();\n      }\n\n      self.$slides.removeClass('disengage');\n      if (self.options.directionClasses) {\n        self.addLeftAndRightClasses();\n      };\n    },\n\n    centerPosition: function() {\n      // console.log('[centerPosition]');\n      var self = this;\n\n      if (self.options.leftaligned) {\n        // self.$wrapper.css('margin-left', (self.$viewport.innerWidth() - 940)/2 -35); // TODO!!!!!!\n        self.$wrapper.css('margin-left', Math.max(0, self.$viewport.innerWidth() - self.options.maxWidth)/2);\n      } else {\n        var leftmargin = (self.$viewport.innerWidth() - self.$slides.filter('.active').innerWidth())/2;\n        self.$wrapper.css({\n          'margin-left': leftmargin\n        });\n      }\n    },\n\n    setSlideshowHeight: function(newMaxHeight) {\n      var self = this;\n      // note: skidder-clickelements don't need to be sized if it weren't for #%@&% IE8\n      self.$elem.add(self.$viewport).add(self.$wrapper).add(self.$slides).add(self.$viewport.find('.skidder-clickelement')).css('height', newMaxHeight);\n    },\n\n    refreshSlides: function() {\n      var self = this;\n      self.$slides = self.$wrapper.find('.skidder-slide');\n    },\n\n    refreshImages: function() {\n      var self = this;\n      self.$images = $();\n\n      self.$slides.each(function() {\n        // if  slide has image, add image, else add slide\n        if ($(this).has('img').length > 0) {\n          self.$images = self.$images.add($(this).find('img').eq(0)); // perhaps exempt noScaleClass here\n        } else {\n          self.$images = self.$images.add($(this));\n        }\n      });\n    },\n\n    resize: function() {\n      var self = $(this).data('skidder');\n\n      if (self && self.options ) { // make sure skidder has been attached for ie8, who fires resize on page load\n        if (self.$images && self.$images.length && self.options.scaleSlides) {\n          self.scaleSlides();\n        }\n        self.centerPosition();\n        if ( $.isFunction( self.options.afterSliding ) ) {\n          self.options.afterResize.call(this);\n        }\n      }\n    },\n    stopAutoplay: function() {\n      var self = $(this).data('skidder');\n\n      if (self && self.options ) { // make sure skidder has been attached for ie8, who fires resize on page load\n        window.clearTimeout(self.autoplaying);\n      }\n    },\n    addLeftAndRightClasses: function() {\n\n      var self = this;\n\n      self.$slides.removeClass('left-from-active right-from-active');\n      self.refreshSlides();\n\n      var activeindex = self.$slides.index(self.$slides.filter('.active').eq(0));\n\n      self.$slides.each(function(i, elem) {\n        if (self.$slides.index($(elem)) < activeindex ) {\n          $(elem).addClass('left-from-active');\n        } else if (self.$slides.index($(elem)) > activeindex ) {\n          $(elem).addClass('right-from-active');\n        }\n      });\n    },\n    supportsTransitions: function() {\n      var s = document.createElement('p').style;\n      var supportsTransitions = 'transition' in s || 'WebkitTransition' in s ;\n      return supportsTransitions;\n    }\n  }\n\n  $.fn.skidder = function(options) {\n    var method = arguments[0];\n\n    if(Skidder[method]) {\n      method = Skidder[method];\n      var arguments1 = Array.prototype.slice.call(arguments, 1);\n      return this.each(function(){\n        method.apply(this, arguments1);\n      });\n    } else if( typeof(method) == 'object' || !method ) {\n      return this.each(function() {\n        var skidder = Object.create(Skidder);\n        skidder.init(options, this);\n      });\n    }\n  };\n\n  $.fn.skidder.options = {\n    slideClass      : \".slide\",\n    imageClass      : \"\",\n    animationType   : \"css\",\n    scaleSlides     : true,\n    maxWidth        : 800,\n    maxHeight       : 500,\n    scaleTo         : \"smallest\",\n    preservePortrait: false,\n    spaceSlides     : false,\n    noScaleClass    : \".skidder-no-scale\",\n    paging          : true,\n    pagingWrapper   : \".skidder-pager\",\n    pagingElement   : \".skidder-pager-dot\",\n    swiping         : true,\n    leftaligned     : false,\n    cycle           : true,\n    jumpback        : false,\n    speed           : 400,\n    autoplay        : false,\n    autoplayResume  : false,\n    interval        : 4000,\n    transition      : \"slide\",\n    directionClasses: false,\n    afterSliding    : function() {},\n    afterInit       : function() {},\n    afterResize     : function(instance) {}\n  };\n\n  $.extend($.easing, {\n    easeOutSkidder: function (x, t, b, c, d) {\n      return -c *(t/=d)*(t-2) + b;\n    },\n  });\n\n\n}(jQuery, window, document));\n","import $ from 'jquery';\nimport { Validator } from '../forms';\n\n$.fn.plusminus = function() {\n  var matched = $(this);\n\n  matched.each(function() {\n    var element = $(this);\n    var validator = new Validator(element);\n    if ($(this).find(\"#order-count\").attr(\"data-min\")){\n      var minNumber = $(this).find(\"#order-count\").attr(\"data-min\");\n    } else {\n      var minNumber = 0;\n    }\n    if($(this).find(\"#order-count\").attr(\"data-max\")){\n      var maxNumber = $(this).find(\"#order-count\").attr(\"data-max\");\n    } else {\n      var maxNumber = 0;\n    }\n\n    $(this).find(\"[data-value]\").off(\"mousedown\").on(\"mousedown\", function(e) {\n      e.preventDefault();\n      mousedown($(this), element, minNumber, maxNumber);\n    });\n    element.find(\"input\").off(\"change\").on(\"change\", function() {\n      validator.validate(true, true);\n    });\n  });\n\n  function mousedown($btn, $el, $minNumber ,$maxNumber) {\n    var validator = new Validator($el);\n\n    if (isNaN(parseInt($el.find(\"input\").val()))) {\n      validator.validate(true, true);\n      return;\n    }\n\n    var add_value = parseInt($btn.attr(\"data-value\"));\n    var current_value = parseInt($el.find(\"input\").val());\n    var new_value = current_value + add_value;\n\n    if(($minNumber > 0 && new_value < $minNumber) || ($maxNumber > 0 && new_value > $maxNumber)){\n      $el.find(\"input\").val(current_value);\n    } else {\n      $el.find(\"input\").val(new_value);\n      if (!validator.validate(false, true)) $el.find(\"input\").val(current_value);\n      else validator.validate(true, true);\n    }\n  }\n\n  return matched;\n};\n","/*!\n * jquery.base64.js 0.0.3 - https://github.com/yckart/jquery.base64.js\n * Makes Base64 en & -decoding simpler as it is.\n *\n * Based upon: https://gist.github.com/Yaffle/1284012\n *\n * Copyright (c) 2012 Yannick Albert (http://yckart.com)\n * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).\n * 2013/02/10\n **/\n;(function($) {\n\n    var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n        a256 = '',\n        r64 = [256],\n        r256 = [256],\n        i = 0;\n\n    var UTF8 = {\n\n        /**\n         * Encode multi-byte Unicode string into utf-8 multiple single-byte characters\n         * (BMP / basic multilingual plane only)\n         *\n         * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\n         *\n         * @param {String} strUni Unicode string to be encoded as UTF-8\n         * @returns {String} encoded string\n         */\n        encode: function(strUni) {\n            // use regular expressions & String.replace callback function for better efficiency\n            // than procedural approaches\n            var strUtf = strUni.replace(/[\\u0080-\\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz\n            function(c) {\n                var cc = c.charCodeAt(0);\n                return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);\n            })\n            .replace(/[\\u0800-\\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz\n            function(c) {\n                var cc = c.charCodeAt(0);\n                return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3F, 0x80 | cc & 0x3f);\n            });\n            return strUtf;\n        },\n\n        /**\n         * Decode utf-8 encoded string back into multi-byte Unicode characters\n         *\n         * @param {String} strUtf UTF-8 string to be decoded back to Unicode\n         * @returns {String} decoded string\n         */\n        decode: function(strUtf) {\n            // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!\n            var strUni = strUtf.replace(/[\\u00e0-\\u00ef][\\u0080-\\u00bf][\\u0080-\\u00bf]/g, // 3-byte chars\n            function(c) { // (note parentheses for precence)\n                var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f);\n                return String.fromCharCode(cc);\n            })\n            .replace(/[\\u00c0-\\u00df][\\u0080-\\u00bf]/g, // 2-byte chars\n            function(c) { // (note parentheses for precence)\n                var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f;\n                return String.fromCharCode(cc);\n            });\n            return strUni;\n        }\n    };\n\n    while(i < 256) {\n        var c = String.fromCharCode(i);\n        a256 += c;\n        r256[i] = i;\n        r64[i] = b64.indexOf(c);\n        ++i;\n    }\n\n    function code(s, discard, alpha, beta, w1, w2) {\n        s = String(s);\n        var buffer = 0,\n            i = 0,\n            length = s.length,\n            result = '',\n            bitsInBuffer = 0;\n\n        while(i < length) {\n            var c = s.charCodeAt(i);\n            c = c < 256 ? alpha[c] : -1;\n\n            buffer = (buffer << w1) + c;\n            bitsInBuffer += w1;\n\n            while(bitsInBuffer >= w2) {\n                bitsInBuffer -= w2;\n                var tmp = buffer >> bitsInBuffer;\n                result += beta.charAt(tmp);\n                buffer ^= tmp << bitsInBuffer;\n            }\n            ++i;\n        }\n        if(!discard && bitsInBuffer > 0) result += beta.charAt(buffer << (w2 - bitsInBuffer));\n        return result;\n    }\n\n    var Plugin = $.base64 = function(dir, input, encode) {\n            return input ? Plugin[dir](input, encode) : dir ? null : this;\n        };\n\n    Plugin.btoa = Plugin.encode = function(plain, utf8encode) {\n        plain = Plugin.raw === false || Plugin.utf8encode || utf8encode ? UTF8.encode(plain) : plain;\n        plain = code(plain, false, r256, b64, 8, 6);\n        return plain + '===='.slice((plain.length % 4) || 4);\n    };\n\n    Plugin.atob = Plugin.decode = function(coded, utf8decode) {\n        coded = String(coded).split('=');\n        var i = coded.length;\n        do {--i;\n            coded[i] = code(coded[i], true, r64, a256, 6, 8);\n        } while (i > 0);\n        coded = coded.join('');\n        return Plugin.raw === false || Plugin.utf8decode || utf8decode ? UTF8.decode(coded) : coded;\n    };\n}(jQuery));","/**\n * @license jquery.panzoom.js v2.0.4\n * Updated: Wed Apr 02 2014\n * Add pan and zoom functionality to any element\n * Copyright (c) 2014 timmy willison\n * Released under the MIT license\n * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt\n */\n\n(function(global, factory) {\n\t// AMD\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery' ], function(jQuery) {\n\t\t\treturn factory(global, jQuery);\n\t\t});\n\t// CommonJS/Browserify\n\t} else if (typeof exports === 'object') {\n\t\tfactory(global, require('jquery'));\n\t// Global\n\t} else {\n\t\tfactory(global, global.jQuery);\n\t}\n}(typeof window !== 'undefined' ? window : this, function(window, $) {\n\t'use strict';\n\n\t// Common properties to lift for touch or pointer events\n\tvar list = 'over out down up move enter leave cancel'.split(' ');\n\tvar hook = $.extend({}, $.event.mouseHooks);\n\tvar events = {};\n\n\t// Support pointer events in IE11+ if available\n\tif ( window.PointerEvent ) {\n\t\t$.each(list, function( i, name ) {\n\t\t\t// Add event name to events property and add fixHook\n\t\t\t$.event.fixHooks[\n\t\t\t\t(events[name] = 'pointer' + name)\n\t\t\t] = hook;\n\t\t});\n\t} else {\n\t\tvar mouseProps = hook.props;\n\t\t// Add touch properties for the touch hook\n\t\thook.props = mouseProps.concat(['touches', 'changedTouches', 'targetTouches', 'altKey', 'ctrlKey', 'metaKey', 'shiftKey']);\n\n\t\t/**\n\t\t * Support: Android\n\t\t * Android sets pageX/Y to 0 for any touch event\n\t\t * Attach first touch's pageX/pageY and clientX/clientY if not set correctly\n\t\t */\n\t\thook.filter = function( event, originalEvent ) {\n\t\t\tvar touch;\n\t\t\tvar i = mouseProps.length;\n\t\t\tif ( !originalEvent.pageX && originalEvent.touches && (touch = originalEvent.touches[0]) ) {\n\t\t\t\t// Copy over all mouse properties\n\t\t\t\twhile(i--) {\n\t\t\t\t\tevent[mouseProps[i]] = touch[mouseProps[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn event;\n\t\t};\n\n\t\t$.each(list, function( i, name ) {\n\t\t\t// No equivalent touch events for over and out\n\t\t\tif (i < 2) {\n\t\t\t\tevents[ name ] = 'mouse' + name;\n\t\t\t} else {\n\t\t\t\tvar touch = 'touch' +\n\t\t\t\t\t(name === 'down' ? 'start' : name === 'up' ? 'end' : name);\n\t\t\t\t// Add fixHook\n\t\t\t\t$.event.fixHooks[ touch ] = hook;\n\t\t\t\t// Add event names to events property\n\t\t\t\tevents[ name ] = touch + ' mouse' + name;\n\t\t\t}\n\t\t});\n\t}\n\n\t$.pointertouch = events;\n\n\tvar datakey = '__pz__';\n\tvar slice = Array.prototype.slice;\n\tvar pointerEvents = !!window.PointerEvent;\n\n\t// Regex\n\tvar rupper = /([A-Z])/g;\n\tvar rsvg = /^http:[\\w\\.\\/]+svg$/;\n\tvar rinline = /^inline/;\n\n\tvar floating = '(\\\\-?[\\\\d\\\\.e]+)';\n\tvar commaSpace = '\\\\,?\\\\s*';\n\tvar rmatrix = new RegExp(\n\t\t'^matrix\\\\(' +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + '\\\\)$'\n\t);\n\n\t/**\n\t * Utility for determing transform matrix equality\n\t * Checks backwards to test translation first\n\t * @param {Array} first\n\t * @param {Array} second\n\t */\n\tfunction matrixEquals(first, second) {\n\t\tvar i = first.length;\n\t\twhile(--i) {\n\t\t\tif (+first[i] !== +second[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Creates the options object for reset functions\n\t * @param {Boolean|Object} opts See reset methods\n\t * @returns {Object} Returns the newly-created options object\n\t */\n\tfunction createResetOptions(opts) {\n\t\tvar options = { range: true, animate: true };\n\t\tif (typeof opts === 'boolean') {\n\t\t\toptions.animate = opts;\n\t\t} else {\n\t\t\t$.extend(options, opts);\n\t\t}\n\t\treturn options;\n\t}\n\n\t/**\n\t * Represent a transformation matrix with a 3x3 matrix for calculations\n\t * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)\n\t * @param {Array|Number} a An array of six values representing a 2d transformation matrix\n\t */\n\tfunction Matrix(a, b, c, d, e, f, g, h, i) {\n\t\tif ($.type(a) === 'array') {\n\t\t\tthis.elements = [\n\t\t\t\t+a[0], +a[2], +a[4],\n\t\t\t\t+a[1], +a[3], +a[5],\n\t\t\t\t    0,     0,     1\n\t\t\t];\n\t\t} else {\n\t\t\tthis.elements = [\n\t\t\t\ta, b, c,\n\t\t\t\td, e, f,\n\t\t\t\tg || 0, h || 0, i || 1\n\t\t\t];\n\t\t}\n\t}\n\n\tMatrix.prototype = {\n\t\t/**\n\t\t * Multiply a 3x3 matrix by a similar matrix or a vector\n\t\t * @param {Matrix|Vector} matrix\n\t\t * @return {Matrix|Vector} Returns a vector if multiplying by a vector\n\t\t */\n\t\tx: function(matrix) {\n\t\t\tvar isVector = matrix instanceof Vector;\n\n\t\t\tvar a = this.elements,\n\t\t\t\tb = matrix.elements;\n\n\t\t\tif (isVector && b.length === 3) {\n\t\t\t\t// b is actually a vector\n\t\t\t\treturn new Vector(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[1] + a[2] * b[2],\n\t\t\t\t\ta[3] * b[0] + a[4] * b[1] + a[5] * b[2],\n\t\t\t\t\ta[6] * b[0] + a[7] * b[1] + a[8] * b[2]\n\t\t\t\t);\n\t\t\t} else if (b.length === a.length) {\n\t\t\t\t// b is a 3x3 matrix\n\t\t\t\treturn new Matrix(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[3] + a[2] * b[6],\n\t\t\t\t\ta[0] * b[1] + a[1] * b[4] + a[2] * b[7],\n\t\t\t\t\ta[0] * b[2] + a[1] * b[5] + a[2] * b[8],\n\n\t\t\t\t\ta[3] * b[0] + a[4] * b[3] + a[5] * b[6],\n\t\t\t\t\ta[3] * b[1] + a[4] * b[4] + a[5] * b[7],\n\t\t\t\t\ta[3] * b[2] + a[4] * b[5] + a[5] * b[8],\n\n\t\t\t\t\ta[6] * b[0] + a[7] * b[3] + a[8] * b[6],\n\t\t\t\t\ta[6] * b[1] + a[7] * b[4] + a[8] * b[7],\n\t\t\t\t\ta[6] * b[2] + a[7] * b[5] + a[8] * b[8]\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false; // fail\n\t\t},\n\t\t/**\n\t\t * Generates an inverse of the current matrix\n\t\t * @returns {Matrix}\n\t\t */\n\t\tinverse: function() {\n\t\t\tvar d = 1 / this.determinant(),\n\t\t\t\ta = this.elements;\n\t\t\treturn new Matrix(\n\t\t\t\td * ( a[8] * a[4] - a[7] * a[5]),\n\t\t\t\td * (-(a[8] * a[1] - a[7] * a[2])),\n\t\t\t\td * ( a[5] * a[1] - a[4] * a[2]),\n\n\t\t\t\td * (-(a[8] * a[3] - a[6] * a[5])),\n\t\t\t\td * ( a[8] * a[0] - a[6] * a[2]),\n\t\t\t\td * (-(a[5] * a[0] - a[3] * a[2])),\n\n\t\t\t\td * ( a[7] * a[3] - a[6] * a[4]),\n\t\t\t\td * (-(a[7] * a[0] - a[6] * a[1])),\n\t\t\t\td * ( a[4] * a[0] - a[3] * a[1])\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Calculates the determinant of the current matrix\n\t\t * @returns {Number}\n\t\t */\n\t\tdeterminant: function() {\n\t\t\tvar a = this.elements;\n\t\t\treturn a[0] * (a[8] * a[4] - a[7] * a[5]) - a[3] * (a[8] * a[1] - a[7] * a[2]) + a[6] * (a[5] * a[1] - a[4] * a[2]);\n\t\t}\n\t};\n\n\t/**\n\t * Create a vector containing three values\n\t */\n\tfunction Vector(x, y, z) {\n\t\tthis.elements = [ x, y, z ];\n\t}\n\n\t/**\n\t * Get the element at zero-indexed index i\n\t * @param {Number} i\n\t */\n\tVector.prototype.e = Matrix.prototype.e = function(i) {\n\t\treturn this.elements[ i ];\n\t};\n\n\t/**\n\t * Create a Panzoom object for a given element\n\t * @constructor\n\t * @param {Element} elem - Element to use pan and zoom\n\t * @param {Object} [options] - An object literal containing options to override default options\n\t *  (See Panzoom.defaults for ones not listed below)\n\t * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself\n\t *  e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzooom('zoomIn'); });)\n\t * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut\n\t * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control\n\t * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method\n\t * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events\n\t */\n\tfunction Panzoom(elem, options) {\n\n\t\t// Allow instantiation without `new` keyword\n\t\tif (!(this instanceof Panzoom)) {\n\t\t\treturn new Panzoom(elem, options);\n\t\t}\n\n\t\t// Sanity checks\n\t\tif (elem.nodeType !== 1) {\n\t\t\t$.error('Panzoom called on non-Element node');\n\t\t}\n\t\tif (!$.contains(document, elem)) {\n\t\t\t$.error('Panzoom element must be attached to the document');\n\t\t}\n\n\t\t// Don't remake\n\t\tvar d = $.data(elem, datakey);\n\t\tif (d) {\n\t\t\treturn d;\n\t\t}\n\n\t\t// Extend default with given object literal\n\t\t// Each instance gets its own options\n\t\tthis.options = options = $.extend({}, Panzoom.defaults, options);\n\t\tthis.elem = elem;\n\t\tvar $elem = this.$elem = $(elem);\n\t\tthis.$set = options.$set && options.$set.length ? options.$set : $elem;\n\t\tthis.$doc = $(elem.ownerDocument || document);\n\t\tthis.$parent = $elem.parent();\n\n\t\t// This is SVG if the namespace is SVG\n\t\t// However, while <svg> elements are SVG, we want to treat those like other elements\n\t\tthis.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n\n\t\tthis.panning = false;\n\n\t\t// Save the original transform value\n\t\t// Save the prefixed transform style key\n\t\t// Set the starting transform\n\t\tthis._buildTransform();\n\n\t\t// Build the appropriately-prefixed transform style property name\n\t\t// De-camelcase\n\t\tthis._transform = $.cssProps.transform.replace(rupper, '-$1').toLowerCase();\n\n\t\t// Build the transition value\n\t\tthis._buildTransition();\n\n\t\t// Build containment dimensions\n\t\tthis.resetDimensions();\n\n\t\t// Add zoom and reset buttons to `this`\n\t\tvar $empty = $();\n\t\tvar self = this;\n\t\t$.each([ '$zoomIn', '$zoomOut', '$zoomRange', '$reset' ], function(i, name) {\n\t\t\tself[ name ] = options[ name ] || $empty;\n\t\t});\n\n\t\tthis.enable();\n\n\t\t// Save the instance\n\t\t$.data(elem, datakey, this);\n\t}\n\n\t// Attach regex for possible use (immutable)\n\tPanzoom.rmatrix = rmatrix;\n\n\t// Container for event names\n\tPanzoom.events = $.pointertouch;\n\n\tPanzoom.defaults = {\n\t\t// Should always be non-empty\n\t\t// Used to bind jQuery events without collisions\n\t\t// A guid is not added here as different instantiations/versions of panzoom\n\t\t// on the same element is not supported, so don't do it.\n\t\teventNamespace: '.panzoom',\n\n\t\t// Whether or not to transition the scale\n\t\ttransition: true,\n\n\t\t// Default cursor style for the element\n\t\tcursor: 'move',\n\n\t\t// There may be some use cases for zooming without panning or vice versa\n\t\tdisablePan: false,\n\t\tdisableZoom: false,\n\n\t\t// The increment at which to zoom\n\t\t// adds/subtracts to the scale each time zoomIn/Out is called\n\t\tincrement: 0.3,\n\n\t\tminScale: 0.4,\n\t\tmaxScale: 5,\n\n\t\t// The default step for the range input\n\t\t// Precendence: default < HTML attribute < option setting\n\t\trangeStep: 0.05,\n\n\t\t// Animation duration (ms)\n\t\tduration: 200,\n\t\t// CSS easing used for scale transition\n\t\teasing: 'ease-in-out',\n\n\t\t// Indicate that the element should be contained within it's parent when panning\n\t\t// Note: this does not affect zooming outside of the parent\n\t\t// Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)\n\t\t// 'invert' is useful for a large panzoom element where you don't want to show anything behind it\n\t\tcontain: false\n\t};\n\n\tPanzoom.prototype = {\n\t\tconstructor: Panzoom,\n\n\t\t/**\n\t\t * @returns {Panzoom} Returns the instance\n\t\t */\n\t\tinstance: function() {\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Enable or re-enable the panzoom instance\n\t\t */\n\t\tenable: function() {\n\t\t\t// Unbind first\n\t\t\tthis._initStyle();\n\t\t\tthis._bind();\n\t\t\tthis.disabled = false;\n\t\t},\n\n\t\t/**\n\t\t * Disable panzoom\n\t\t */\n\t\tdisable: function() {\n\t\t\tthis.disabled = true;\n\t\t\tthis._resetStyle();\n\t\t\tthis._unbind();\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the current panzoom instance is disabled\n\t\t */\n\t\tisDisabled: function() {\n\t\t\treturn this.disabled;\n\t\t},\n\n\t\t/**\n\t\t * Destroy the panzoom instance\n\t\t */\n\t\tdestroy: function() {\n\t\t\tthis.disable();\n\t\t\t$.removeData(this.elem, datakey);\n\t\t},\n\n\t\t/**\n\t\t * Builds the restricing dimensions from the containment element\n\t\t * Also used with focal points\n\t\t * Call this method whenever the dimensions of the element or parent are changed\n\t\t */\n\t\tresetDimensions: function() {\n\t\t\t// Reset container properties\n\t\t\tvar $parent = this.$parent;\n\t\t\tthis.container = {\n\t\t\t\twidth: $parent.innerWidth(),\n\t\t\t\theight: $parent.innerHeight()\n\t\t\t};\n\t\t\tvar po = $parent.offset();\n\t\t\tvar elem = this.elem;\n\t\t\tvar $elem = this.$elem;\n\t\t\tvar dims;\n\t\t\tif (this.isSVG) {\n\t\t\t\tdims = elem.getBoundingClientRect();\n\t\t\t\tdims = {\n\t\t\t\t\tleft: dims.left - po.left,\n\t\t\t\t\ttop: dims.top - po.top,\n\t\t\t\t\twidth: dims.width,\n\t\t\t\t\theight: dims.height,\n\t\t\t\t\tmargin: { left: 0, top: 0 }\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdims = {\n\t\t\t\t\tleft: $.css(elem, 'left', true) || 0,\n\t\t\t\t\ttop: $.css(elem, 'top', true) || 0,\n\t\t\t\t\twidth: $elem.innerWidth(),\n\t\t\t\t\theight: $elem.innerHeight(),\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\ttop: $.css(elem, 'marginTop', true) || 0,\n\t\t\t\t\t\tleft: $.css(elem, 'marginLeft', true) || 0\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tdims.widthBorder = ($.css(elem, 'borderLeftWidth', true) + $.css(elem, 'borderRightWidth', true)) || 0;\n\t\t\tdims.heightBorder = ($.css(elem, 'borderTopWidth', true) + $.css(elem, 'borderBottomWidth', true)) || 0;\n\t\t\tthis.dimensions = dims;\n\t\t},\n\n\t\t/**\n\t\t * Return the element to it's original transform matrix\n\t\t * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.\n\t\t * @param {Boolean} [options.silent] Silence the reset event\n\t\t */\n\t\treset: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\t// Reset the transform to its original value\n\t\t\tvar matrix = this.setMatrix(this._origTransform, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('reset', matrix);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Only resets zoom level\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()\n\t\t */\n\t\tresetZoom: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\toptions.dValue = origMatrix[ 3 ];\n\t\t\tthis.zoom(origMatrix[0], options);\n\t\t},\n\n\t\t/**\n\t\t * Only reset panning\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()\n\t\t */\n\t\tresetPan: function(options) {\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\tthis.pan(origMatrix[4], origMatrix[5], createResetOptions(options));\n\t\t},\n\n\t\t/**\n\t\t * Sets a transform on the $set\n\t\t * @param {String} transform\n\t\t */\n\t\tsetTransform: function(transform) {\n\t\t\tvar method = this.isSVG ? 'attr' : 'style';\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t$[method]($set[i], 'transform', transform);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Retrieving the transform is different for SVG\n\t\t *  (unless a style transform is already present)\n\t\t * Uses the $set collection for retrieving the transform\n\t\t * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')\n\t\t *  to have it formatted into matrix format for use by Panzoom\n\t\t * @returns {String} Returns the current transform value of the element\n\t\t */\n\t\tgetTransform: function(transform) {\n\t\t\tvar $set = this.$set;\n\t\t\tvar transformElem = $set[0];\n\t\t\tif (transform) {\n\t\t\t\tthis.setTransform(transform);\n\t\t\t} else {\n\t\t\t\t// Retrieve the transform\n\t\t\t\ttransform = $[this.isSVG ? 'attr' : 'style'](transformElem, 'transform');\n\t\t\t}\n\n\t\t\t// Convert any transforms set by the user to matrix format\n\t\t\t// by setting to computed\n\t\t\tif (transform !== 'none' && !rmatrix.test(transform)) {\n\t\t\t\t// Get computed and set for next time\n\t\t\t\tthis.setTransform(transform = $.css(transformElem, 'transform'));\n\t\t\t}\n\n\t\t\treturn transform || 'none';\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)\n\t\t * @param {String} [transform] matrix-formatted transform value\n\t\t * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix\n\t\t */\n\t\tgetMatrix: function(transform) {\n\t\t\tvar matrix = rmatrix.exec(transform || this.getTransform());\n\t\t\tif (matrix) {\n\t\t\t\tmatrix.shift();\n\t\t\t}\n\t\t\treturn matrix || [ 1, 0, 0, 1, 0, 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Given a matrix object, quickly set the current matrix of the element\n\t\t * @param {Array|String} matrix\n\t\t * @param {Boolean} [animate] Whether to animate the transform change\n\t\t * @param {Object} [options]\n\t\t * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set\n\t\t * @param {Boolean} [options.contain] Override the global contain option\n\t\t * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.\n\t\t * @param {Boolean} [options.silent] If true, the change event will not be triggered\n\t\t * @returns {Array} Returns the newly-set matrix\n\t\t */\n\t\tsetMatrix: function(matrix, options) {\n\t\t\tif (this.disabled) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\t// Convert to array\n\t\t\tif (typeof matrix === 'string') {\n\t\t\t\tmatrix = this.getMatrix(matrix);\n\t\t\t}\n\t\t\tvar dims, container, marginW, marginH, diffW, diffH, left, top, width, height;\n\t\t\tvar scale = +matrix[0];\n\t\t\tvar $parent = this.$parent;\n\t\t\tvar contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;\n\n\t\t\t// Apply containment\n\t\t\tif (contain) {\n\t\t\t\tdims = this._checkDims();\n\t\t\t\tcontainer = this.container;\n\t\t\t\twidth = dims.width + dims.widthBorder;\n\t\t\t\theight = dims.height + dims.heightBorder;\n\t\t\t\t// Use absolute value of scale here as negative scale doesn't mean even smaller\n\t\t\t\tmarginW = ((width * Math.abs(scale)) - container.width) / 2;\n\t\t\t\tmarginH = ((height * Math.abs(scale)) - container.height) / 2;\n\t\t\t\tleft = dims.left + dims.margin.left;\n\t\t\t\ttop = dims.top + dims.margin.top;\n\t\t\t\tif (contain === 'invert') {\n\t\t\t\t\tdiffW = width > container.width ? width - container.width : 0;\n\t\t\t\t\tdiffH = height > container.height ? height - container.height : 0;\n\t\t\t\t\tmarginW += (container.width - width) / 2;\n\t\t\t\t\tmarginH += (container.height - height) / 2;\n\t\t\t\t\tmatrix[4] = Math.max(Math.min(matrix[4], marginW - left), -marginW - left - diffW);\n\t\t\t\t\tmatrix[5] = Math.max(Math.min(matrix[5], marginH - top), -marginH - top - diffH + dims.heightBorder);\n\t\t\t\t} else {\n\t\t\t\t\t// marginW += dims.widthBorder / 2;\n\t\t\t\t\tmarginH += dims.heightBorder / 2;\n\t\t\t\t\tdiffW = container.width > width ? container.width - width : 0;\n\t\t\t\t\tdiffH = container.height > height ? container.height - height : 0;\n\t\t\t\t\t// If the element is not naturally centered, assume full margin right\n\t\t\t\t\tif ($parent.css('textAlign') !== 'center' || !rinline.test($.css(this.elem, 'display'))) {\n\t\t\t\t\t\tmarginW = marginH = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiffW = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmatrix[4] = Math.min(\n\t\t\t\t\t\tMath.max(matrix[4], marginW - left),\n\t\t\t\t\t\t-marginW - left + diffW\n\t\t\t\t\t);\n\t\t\t\t\tmatrix[5] = Math.min(\n\t\t\t\t\t\tMath.max(matrix[5], marginH - top),\n\t\t\t\t\t\t-marginH - top + diffH\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.animate !== 'skip') {\n\t\t\t\t// Set transition\n\t\t\t\tthis.transition(!options.animate);\n\t\t\t}\n\t\t\t// Update range\n\t\t\tif (options.range) {\n\t\t\t\tthis.$zoomRange.val(scale);\n\t\t\t}\n\n\t\t\t// Set the matrix on this.$set\n\t\t\tthis.setTransform('matrix(' + matrix.join(',') + ')');\n\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('change', matrix);\n\t\t\t}\n\n\t\t\treturn matrix;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the panzoom element is currently being dragged\n\t\t */\n\t\tisPanning: function() {\n\t\t\treturn this.panning;\n\t\t},\n\n\t\t/**\n\t\t * Apply the current transition to the element, if allowed\n\t\t * @param {Boolean} [off] Indicates that the transition should be turned off\n\t\t */\n\t\ttransition: function(off) {\n\t\t\tvar transition = off || !this.options.transition ? 'none' : this._transition;\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t// Avoid reflows when zooming\n\t\t\t\tif ($.style($set[i], 'transition') !== transition) {\n\t\t\t\t\t$.style($set[i], 'transition', transition);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pan the element to the specified translation X and Y\n\t\t * Note: this is not the same as setting jQuery#offset() or jQuery#position()\n\t\t * @param {Number} x\n\t\t * @param {Number} y\n\t\t * @param {Object} [options] These options are passed along to setMatrix\n\t\t * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)\n\t\t * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.\n\t\t * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix\n\t\t */\n\t\tpan: function(x, y, options) {\n\t\t\tif (this.options.disablePan) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\tvar matrix = options.matrix;\n\t\t\tif (!matrix) {\n\t\t\t\tmatrix = this.getMatrix();\n\t\t\t}\n\t\t\t// Cast existing matrix values to numbers\n\t\t\tif (options.relative) {\n\t\t\t\tx += +matrix[4];\n\t\t\t\ty += +matrix[5];\n\t\t\t}\n\t\t\tmatrix[4] = x;\n\t\t\tmatrix[5] = y;\n\t\t\tthis.setMatrix(matrix, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('pan', matrix[4], matrix[5]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Zoom in/out the element using the scale properties of a transform matrix\n\t\t * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out\n\t\t * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.\n\t\t * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)\n\t\t * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.\n\t\t *  If an object, set the clientX and clientY properties to the position relative to the parent\n\t\t * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)\n\t\t * @param {Boolean} [opts.silent] Silence the zoom event\n\t\t * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved\n\t\t * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d\n\t\t *  where a/d are the horizontal/vertical scale values and b/c are the skew values\n\t\t *  (5 and 6 of matrix array are the tx/ty transform values).\n\t\t *  Normally, the scale is set to both the a and d values of the matrix.\n\t\t *  This option allows you to specify a different d value for the zoom.\n\t\t *  For instance, to flip vertically, you could set -1 as the dValue.\n\t\t */\n\t\tzoom: function(scale, opts) {\n\t\t\t// Shuffle arguments\n\t\t\tif (typeof scale === 'object') {\n\t\t\t\topts = scale;\n\t\t\t\tscale = null;\n\t\t\t} else if (!opts) {\n\t\t\t\topts = {};\n\t\t\t}\n\t\t\tvar options = $.extend({}, this.options, opts);\n\t\t\t// Check if disabled\n\t\t\tif (options.disableZoom) { return; }\n\t\t\tvar animate = false;\n\t\t\tvar matrix = options.matrix || this.getMatrix();\n\n\t\t\t// Calculate zoom based on increment\n\t\t\tif (typeof scale !== 'number') {\n\t\t\t\tscale = +matrix[0] + (options.increment * (scale ? -1 : 1));\n\t\t\t\tanimate = true;\n\t\t\t}\n\n\t\t\t// Constrain scale\n\t\t\tif (scale > options.maxScale) {\n\t\t\t\tscale = options.maxScale;\n\t\t\t} else if (scale < options.minScale) {\n\t\t\t\tscale = options.minScale;\n\t\t\t}\n\n\t\t\t// Calculate focal point based on scale\n\t\t\tvar focal = options.focal;\n\t\t\tif (focal && !options.disablePan) {\n\t\t\t\t// Adapted from code by Florian Günther\n\t\t\t\t// https://github.com/florianguenther/zui53\n\t\t\t\tvar dims = this._checkDims();\n\t\t\t\tvar clientX = focal.clientX;\n\t\t\t\tvar clientY = focal.clientY;\n\t\t\t\t// Adjust the focal point for default transform-origin => 50% 50%\n\t\t\t\tif (!this.isSVG) {\n\t\t\t\t\tclientX -= (dims.width + dims.widthBorder) / 2;\n\t\t\t\t\tclientY -= (dims.height + dims.heightBorder) / 2;\n\t\t\t\t}\n\t\t\t\tvar clientV = new Vector(clientX, clientY, 1);\n\t\t\t\tvar surfaceM = new Matrix(matrix);\n\t\t\t\t// Supply an offset manually if necessary\n\t\t\t\tvar o = this.parentOffset || this.$parent.offset();\n\t\t\t\tvar offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());\n\t\t\t\tvar surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));\n\t\t\t\tvar scaleBy = scale / matrix[0];\n\t\t\t\tsurfaceM = surfaceM.x(new Matrix([ scaleBy, 0, 0, scaleBy, 0, 0 ]));\n\t\t\t\tclientV = offsetM.x(surfaceM.x(surfaceV));\n\t\t\t\tmatrix[4] = +matrix[4] + (clientX - clientV.e(0));\n\t\t\t\tmatrix[5] = +matrix[5] + (clientY - clientV.e(1));\n\t\t\t}\n\n\t\t\t// Set the scale\n\t\t\tmatrix[0] = scale;\n\t\t\tmatrix[3] = typeof options.dValue === 'number' ? options.dValue : scale;\n\n\t\t\t// Calling zoom may still pan the element\n\t\t\tthis.setMatrix(matrix, {\n\t\t\t\tanimate: typeof options.animate === 'boolean' ? options.animate : animate,\n\t\t\t\t// Set the zoomRange value\n\t\t\t\trange: !options.noSetRange\n\t\t\t});\n\n\t\t\t// Trigger zoom event\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('zoom', matrix[0], options);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get/set option on an existing instance\n\t\t * @returns {Array|undefined} If getting, returns an array of all values\n\t\t *   on each instance for a given key. If setting, continue chaining by returning undefined.\n\t\t */\n\t\toption: function(key, value) {\n\t\t\tvar options;\n\t\t\tif (!key) {\n\t\t\t\t// Avoids returning direct reference\n\t\t\t\treturn $.extend({}, this.options);\n\t\t\t}\n\n\t\t\tif (typeof key === 'string') {\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn this.options[ key ] !== undefined ?\n\t\t\t\t\t\tthis.options[ key ] :\n\t\t\t\t\t\tnull;\n\t\t\t\t}\n\t\t\t\toptions = {};\n\t\t\t\toptions[ key ] = value;\n\t\t\t} else {\n\t\t\t\toptions = key;\n\t\t\t}\n\n\t\t\tthis._setOptions(options);\n\t\t},\n\n\t\t/**\n\t\t * Internally sets options\n\t\t * @param {Object} options - An object literal of options to set\n\t\t */\n\t\t_setOptions: function(options) {\n\t\t\t$.each(options, $.proxy(function(key, value) {\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._resetStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._unbind();\n\t\t\t\t}\n\t\t\t\tthis.options[ key ] = value;\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\t\t// Set these on the instance\n\t\t\t\t\t\tthis[ key ] = value;\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._bind();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cursor':\n\t\t\t\t\t\t$.style(this.elem, 'cursor', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'minScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('min', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'maxScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('max', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'rangeStep':\n\t\t\t\t\t\tthis.$zoomRange.attr('step', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'startTransform':\n\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'easing':\n\t\t\t\t\t\tthis._buildTransition();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'transition':\n\t\t\t\t\t\tthis.transition();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '$set':\n\t\t\t\t\t\tif (value instanceof $ && value.length) {\n\t\t\t\t\t\t\tthis.$set = value;\n\t\t\t\t\t\t\t// Reset styles\n\t\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t},\n\n\t\t/**\n\t\t * Initialize base styles for the element and its parent\n\t\t */\n\t\t_initStyle: function() {\n\t\t\tvar styles = {\n\t\t\t\t// Promote the element to it's own compositor layer\n\t\t\t\t'backface-visibility': 'hidden',\n\t\t\t\t// Set to defaults for the namespace\n\t\t\t\t'transform-origin': this.isSVG ? '0 0' : '50% 50%'\n\t\t\t};\n\t\t\t// Set elem styles\n\t\t\tif (!this.options.disablePan) {\n\t\t\t\tstyles.cursor = this.options.cursor;\n\t\t\t}\n\t\t\tthis.$set.css(styles);\n\n\t\t\t// Set parent to relative if set to static\n\t\t\tvar $parent = this.$parent;\n\t\t\t// No need to add styles to the body\n\t\t\tif ($parent.length && !$.nodeName($parent[0], 'body')) {\n\t\t\t\tstyles = {\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t};\n\t\t\t\tif ($parent.css('position') === 'static') {\n\t\t\t\t\tstyles.position = 'relative';\n\t\t\t\t}\n\t\t\t\t$parent.css(styles);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Undo any styles attached in this plugin\n\t\t */\n\t\t_resetStyle: function() {\n\t\t\tthis.$elem.css({\n\t\t\t\t'cursor': '',\n\t\t\t\t'transition': ''\n\t\t\t});\n\t\t\tthis.$parent.css({\n\t\t\t\t'overflow': '',\n\t\t\t\t'position': ''\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Binds all necessary events\n\t\t */\n\t\t_bind: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar str_start = pointerEvents ? 'pointerdown' + ns : ('touchstart' + ns + ' mousedown' + ns);\n\t\t\tvar str_click = pointerEvents ? 'pointerup' + ns : ('touchend' + ns + ' click' + ns);\n\t\t\tvar events = {};\n\t\t\tvar $reset = this.$reset;\n\t\t\tvar $zoomRange = this.$zoomRange;\n\n\t\t\t// Bind panzoom events from options\n\t\t\t$.each([ 'Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset' ], function() {\n\t\t\t\tvar m = options[ 'on' + this ];\n\t\t\t\tif ($.isFunction(m)) {\n\t\t\t\t\tevents[ 'panzoom' + this.toLowerCase() + ns ] = m;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Bind $elem drag and click/touchdown events\n\t\t\t// Bind touchstart if either panning or zooming is enabled\n\t\t\tif (!options.disablePan || !options.disableZoom) {\n\t\t\t\tevents[ str_start ] = function(e) {\n\t\t\t\t\tvar touches;\n\t\t\t\t\tif (e.type === 'touchstart' ?\n\t\t\t\t\t\t// Touch\n\t\t\t\t\t\t(touches = e.touches) &&\n\t\t\t\t\t\t\t((touches.length === 1 && !options.disablePan) || touches.length === 2) :\n\t\t\t\t\t\t// Mouse/Pointer: Ignore right click\n\t\t\t\t\t\t!options.disablePan && e.which === 1) {\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tself._startMove(e, touches);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.$elem.on(events);\n\n\t\t\t// Bind reset\n\t\t\tif ($reset.length) {\n\t\t\t\t$reset.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.reset();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Set default attributes for the range input\n\t\t\tif ($zoomRange.length) {\n\t\t\t\t$zoomRange.attr({\n\t\t\t\t\t// Only set the range step if explicit or\n\t\t\t\t\t// set the default if there is no attribute present\n\t\t\t\t\tstep: options.rangeStep === Panzoom.defaults.rangeStep &&\n\t\t\t\t\t\t$zoomRange.attr('step') ||\n\t\t\t\t\t\toptions.rangeStep,\n\t\t\t\t\tmin: options.minScale,\n\t\t\t\t\tmax: options.maxScale\n\t\t\t\t}).prop({\n\t\t\t\t\tvalue: this.getMatrix()[0]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// No bindings if zooming is disabled\n\t\t\tif (options.disableZoom) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $zoomIn = this.$zoomIn;\n\t\t\tvar $zoomOut = this.$zoomOut;\n\n\t\t\t// Bind zoom in/out\n\t\t\t// Don't bind one without the other\n\t\t\tif ($zoomIn.length && $zoomOut.length) {\n\t\t\t\t// preventDefault cancels future mouse events on touch events\n\t\t\t\t$zoomIn.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom();\n\t\t\t\t});\n\t\t\t\t$zoomOut.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom(true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($zoomRange.length) {\n\t\t\t\tevents = {};\n\t\t\t\t// Cannot prevent default action here, just use pointerdown/mousedown\n\t\t\t\tevents[ (pointerEvents ? 'pointerdown' : 'mousedown') + ns ] = function() {\n\t\t\t\t\tself.transition(true);\n\t\t\t\t};\n\t\t\t\tevents[ 'change' + ns ] = function() {\n\t\t\t\t\tself.zoom(+this.value, { noSetRange: true });\n\t\t\t\t};\n\t\t\t\t$zoomRange.on(events);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Unbind all events\n\t\t */\n\t\t_unbind: function() {\n\t\t\tthis.$elem\n\t\t\t\t.add(this.$zoomIn)\n\t\t\t\t.add(this.$zoomOut)\n\t\t\t\t.add(this.$reset)\n\t\t\t\t.off(this.options.eventNamespace);\n\t\t},\n\n\t\t/**\n\t\t * Builds the original transform value\n\t\t */\n\t\t_buildTransform: function() {\n\t\t\t// Save the original transform\n\t\t\t// Retrieving this also adds the correct prefixed style name\n\t\t\t// to jQuery's internal $.cssProps\n\t\t\treturn this._origTransform = this.getTransform(this.options.startTransform);\n\t\t},\n\n\t\t/**\n\t\t * Set transition property for later use when zooming\n\t\t * If SVG, create necessary animations elements for translations and scaling\n\t\t */\n\t\t_buildTransition: function() {\n\t\t\tvar options = this.options;\n\t\t\tthis._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;\n\t\t},\n\n\t\t/**\n\t\t * Checks dimensions to make sure they don't need to be re-calculated\n\t\t */\n\t\t_checkDims: function() {\n\t\t\tvar dims = this.dimensions;\n\t\t\t// Rebuild if width or height is still 0\n\t\t\tif (!dims.width || !dims.height) {\n\t\t\t\tthis.resetDimensions();\n\t\t\t}\n\t\t\treturn this.dimensions;\n\t\t},\n\n\t\t/**\n\t\t * Calculates the distance between two touch points\n\t\t * Remember pythagorean?\n\t\t * @param {Array} touches\n\t\t * @returns {Number} Returns the distance\n\t\t */\n\t\t_getDistance: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn Math.sqrt(Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) + Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2));\n\t\t},\n\n\t\t/**\n\t\t * Constructs an approximated point in the middle of two touch points\n\t\t * @returns {Object} Returns an object containing pageX and pageY\n\t\t */\n\t\t_getMiddle: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn {\n\t\t\t\tclientX: ((touch2.clientX - touch1.clientX) / 2) + touch1.clientX,\n\t\t\t\tclientY: ((touch2.clientY - touch1.clientY) / 2) + touch1.clientY\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Trigger a panzoom event on our element\n\t\t * The event is passed the Panzoom instance\n\t\t * @param {String|jQuery.Event} event\n\t\t * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger\n\t\t */\n\t\t_trigger: function (event) {\n\t\t\tif (typeof event === 'string') {\n\t\t\t\tevent = 'panzoom' + event;\n\t\t\t}\n\t\t\tthis.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));\n\t\t},\n\n\t\t/**\n\t\t * Starts the pan\n\t\t * This is bound to mouse/touchmove on the element\n\t\t * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list\n\t\t * @param {TouchList} [touches] The touches list if present\n\t\t */\n\t\t_startMove: function(event, touches) {\n\t\t\tvar move, moveEvent, endEvent,\n\t\t\t\tstartDistance, startScale, startMiddle,\n\t\t\t\tstartPageX, startPageY;\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar matrix = this.getMatrix();\n\t\t\tvar original = matrix.slice(0);\n\t\t\tvar origPageX = +original[4];\n\t\t\tvar origPageY = +original[5];\n\t\t\tvar panOptions = { matrix: matrix, animate: 'skip' };\n\n\t\t\t// Use proper events\n\t\t\tif (pointerEvents) {\n\t\t\t\tmoveEvent = 'pointermove';\n\t\t\t\tendEvent = 'pointerup';\n\t\t\t} else if (event.type === 'touchstart') {\n\t\t\t\tmoveEvent = 'touchmove';\n\t\t\t\tendEvent = 'touchend';\n\t\t\t} else {\n\t\t\t\tmoveEvent = 'mousemove';\n\t\t\t\tendEvent = 'mouseup';\n\t\t\t}\n\n\t\t\t// Add namespace\n\t\t\tmoveEvent += ns;\n\t\t\tendEvent += ns;\n\n\t\t\t// Remove any transitions happening\n\t\t\tthis.transition(true);\n\n\t\t\t// Indicate that we are currently panning\n\t\t\tthis.panning = true;\n\n\t\t\t// Trigger start event\n\t\t\tthis._trigger('start', event, touches);\n\n\t\t\tif (touches && touches.length === 2) {\n\t\t\t\tstartDistance = this._getDistance(touches);\n\t\t\t\tstartScale = +matrix[0];\n\t\t\t\tstartMiddle = this._getMiddle(touches);\n\t\t\t\tmove = function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t// Calculate move on middle point\n\t\t\t\t\tvar middle = self._getMiddle(touches = e.touches);\n\t\t\t\t\tvar diff = self._getDistance(touches) - startDistance;\n\n\t\t\t\t\t// Set zoom\n\t\t\t\t\tself.zoom(diff * (options.increment / 100) + startScale, {\n\t\t\t\t\t\tfocal: middle,\n\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\tanimate: false\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set pan\n\t\t\t\t\tself.pan(\n\t\t\t\t\t\t+matrix[4] + middle.clientX - startMiddle.clientX,\n\t\t\t\t\t\t+matrix[5] + middle.clientY - startMiddle.clientY,\n\t\t\t\t\t\tpanOptions\n\t\t\t\t\t);\n\t\t\t\t\tstartMiddle = middle;\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tstartPageX = event.pageX;\n\t\t\t\tstartPageY = event.pageY;\n\n\t\t\t\t/**\n\t\t\t\t * Mousemove/touchmove function to pan the element\n\t\t\t\t * @param {Object} e Event object\n\t\t\t\t */\n\t\t\t\tmove = function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.pan(\n\t\t\t\t\t\torigPageX + e.pageX - startPageX,\n\t\t\t\t\t\torigPageY + e.pageY - startPageY,\n\t\t\t\t\t\tpanOptions\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Bind the handlers\n\t\t\t$(document)\n\t\t\t\t.off(ns)\n\t\t\t\t.on(moveEvent, move)\n\t\t\t\t.on(endEvent, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t// Unbind all document events\n\t\t\t\t\t$(this).off(ns);\n\t\t\t\t\tself.panning = false;\n\t\t\t\t\t// Trigger our end event\n\t\t\t\t\t// Simply set the type to \"panzoomend\" to pass through all end properties\n\t\t\t\t\t// jQuery's `not` is used here to compare Array equality\n\t\t\t\t\te.type = 'panzoomend';\n\t\t\t\t\tself._trigger(e, matrix, !matrixEquals(matrix, original));\n\t\t\t\t});\n\t\t}\n\t};\n\n\t// Add Panzoom as a static property\n\t$.Panzoom = Panzoom;\n\n\t/**\n\t * Extend jQuery\n\t * @param {Object|String} options - The name of a method to call on the prototype\n\t *  or an object literal of options\n\t * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call\n\t */\n\t$.fn.panzoom = function(options) {\n\t\tvar instance, args, m, ret;\n\n\t\t// Call methods widget-style\n\t\tif (typeof options === 'string') {\n\t\t\tret = [];\n\t\t\targs = slice.call(arguments, 1);\n\t\t\tthis.each(function() {\n\t\t\t\tinstance = $.data(this, datakey);\n\n\t\t\t\tif (!instance) {\n\t\t\t\t\tret.push(undefined);\n\n\t\t\t\t// Ignore methods beginning with `_`\n\t\t\t\t} else if (options.charAt(0) !== '_' &&\n\t\t\t\t\ttypeof (m = instance[ options ]) === 'function' &&\n\t\t\t\t\t// If nothing is returned, do not add to return values\n\t\t\t\t\t(m = m.apply(instance, args)) !== undefined) {\n\n\t\t\t\t\tret.push(m);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Return an array of values for the jQuery instances\n\t\t\t// Or the value itself if there is only one\n\t\t\t// Or keep chaining\n\t\t\treturn ret.length ?\n\t\t\t\t(ret.length === 1 ? ret[0] : ret) :\n\t\t\t\tthis;\n\t\t}\n\n\t\treturn this.each(function() { new Panzoom(this, options); });\n\t};\n\n\treturn Panzoom;\n}));\n","/*\n    json2.js\n    2012-10-08\n\n    Public Domain.\n\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n    See http://www.JSON.org/js.html\n\n\n    This code should be minified before deployment.\n    See http://javascript.crockford.com/jsmin.html\n\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n    NOT CONTROL.\n\n\n    This file creates a global JSON object containing two methods: stringify\n    and parse.\n\n        JSON.stringify(value, replacer, space)\n            value       any JavaScript value, usually an object or array.\n\n            replacer    an optional parameter that determines how object\n                        values are stringified for objects. It can be a\n                        function or an array of strings.\n\n            space       an optional parameter that specifies the indentation\n                        of nested structures. If it is omitted, the text will\n                        be packed without extra whitespace. If it is a number,\n                        it will specify the number of spaces to indent at each\n                        level. If it is a string (such as '\\t' or '&nbsp;'),\n                        it contains the characters used to indent at each level.\n\n            This method produces a JSON text from a JavaScript value.\n\n            When an object value is found, if the object contains a toJSON\n            method, its toJSON method will be called and the result will be\n            stringified. A toJSON method does not serialize: it returns the\n            value represented by the name/value pair that should be serialized,\n            or undefined if nothing should be serialized. The toJSON method\n            will be passed the key associated with the value, and this will be\n            bound to the value\n\n            For example, this would serialize Dates as ISO strings.\n\n                Date.prototype.toJSON = function (key) {\n                    function f(n) {\n                        // Format integers to have at least two digits.\n                        return n < 10 ? '0' + n : n;\n                    }\n\n                    return this.getUTCFullYear()   + '-' +\n                         f(this.getUTCMonth() + 1) + '-' +\n                         f(this.getUTCDate())      + 'T' +\n                         f(this.getUTCHours())     + ':' +\n                         f(this.getUTCMinutes())   + ':' +\n                         f(this.getUTCSeconds())   + 'Z';\n                };\n\n            You can provide an optional replacer method. It will be passed the\n            key and value of each member, with this bound to the containing\n            object. The value that is returned from your method will be\n            serialized. If your method returns undefined, then the member will\n            be excluded from the serialization.\n\n            If the replacer parameter is an array of strings, then it will be\n            used to select the members to be serialized. It filters the results\n            such that only members with keys listed in the replacer array are\n            stringified.\n\n            Values that do not have JSON representations, such as undefined or\n            functions, will not be serialized. Such values in objects will be\n            dropped; in arrays they will be replaced with null. You can use\n            a replacer function to replace those with JSON values.\n            JSON.stringify(undefined) returns undefined.\n\n            The optional space parameter produces a stringification of the\n            value that is filled with line breaks and indentation to make it\n            easier to read.\n\n            If the space parameter is a non-empty string, then that string will\n            be used for indentation. If the space parameter is a number, then\n            the indentation will be that many spaces.\n\n            Example:\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}]);\n            // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\n            // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n            text = JSON.stringify([new Date()], function (key, value) {\n                return this[key] instanceof Date ?\n                    'Date(' + this[key] + ')' : value;\n            });\n            // text is '[\"Date(---current time---)\"]'\n\n\n        JSON.parse(text, reviver)\n            This method parses a JSON text to produce an object or array.\n            It can throw a SyntaxError exception.\n\n            The optional reviver parameter is a function that can filter and\n            transform the results. It receives each of the keys and values,\n            and its return value is used instead of the original value.\n            If it returns what it received, then the structure is not modified.\n            If it returns undefined then the member is deleted.\n\n            Example:\n\n            // Parse the text. Values that look like ISO date strings will\n            // be converted to Date objects.\n\n            myData = JSON.parse(text, function (key, value) {\n                var a;\n                if (typeof value === 'string') {\n                    a =\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n                    if (a) {\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n                            +a[5], +a[6]));\n                    }\n                }\n                return value;\n            });\n\n            myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n                var d;\n                if (typeof value === 'string' &&\n                        value.slice(0, 5) === 'Date(' &&\n                        value.slice(-1) === ')') {\n                    d = new Date(value.slice(5, -1));\n                    if (d) {\n                        return d;\n                    }\n                }\n                return value;\n            });\n\n\n    This is a reference implementation. You are free to copy, modify, or\n    redistribute.\n*/\n\n/*jslint evil: true, regexp: true */\n\n/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\n    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\n    test, toJSON, toString, valueOf\n*/\n\n\n// Create a JSON object only if one does not already exist. We create the\n// methods in a closure to avoid creating global variables.\n\nif (typeof JSON !== 'object') {\n    JSON = {};\n}\n\n(function () {\n    'use strict';\n\n    function f(n) {\n        // Format integers to have at least two digits.\n        return n < 10 ? '0' + n : n;\n    }\n\n    if (typeof Date.prototype.toJSON !== 'function') {\n\n        Date.prototype.toJSON = function (key) {\n\n            return isFinite(this.valueOf())\n                ? this.getUTCFullYear()     + '-' +\n                    f(this.getUTCMonth() + 1) + '-' +\n                    f(this.getUTCDate())      + 'T' +\n                    f(this.getUTCHours())     + ':' +\n                    f(this.getUTCMinutes())   + ':' +\n                    f(this.getUTCSeconds())   + 'Z'\n                : null;\n        };\n\n        String.prototype.toJSON      =\n            Number.prototype.toJSON  =\n            Boolean.prototype.toJSON = function (key) {\n                return this.valueOf();\n            };\n    }\n\n    var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n        escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n        gap,\n        indent,\n        meta = {    // table of character substitutions\n            '\\b': '\\\\b',\n            '\\t': '\\\\t',\n            '\\n': '\\\\n',\n            '\\f': '\\\\f',\n            '\\r': '\\\\r',\n            '\"' : '\\\\\"',\n            '\\\\': '\\\\\\\\'\n        },\n        rep;\n\n\n    function quote(string) {\n\n// If the string contains no control characters, no quote characters, and no\n// backslash characters, then we can safely slap some quotes around it.\n// Otherwise we must also replace the offending characters with safe escape\n// sequences.\n\n        escapable.lastIndex = 0;\n        return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n            var c = meta[a];\n            return typeof c === 'string'\n                ? c\n                : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n        }) + '\"' : '\"' + string + '\"';\n    }\n\n\n    function str(key, holder) {\n\n// Produce a string from holder[key].\n\n        var i,          // The loop counter.\n            k,          // The member key.\n            v,          // The member value.\n            length,\n            mind = gap,\n            partial,\n            value = holder[key];\n\n// If the value has a toJSON method, call it to obtain a replacement value.\n\n        if (value && typeof value === 'object' &&\n                typeof value.toJSON === 'function') {\n            value = value.toJSON(key);\n        }\n\n// If we were called with a replacer function, then call the replacer to\n// obtain a replacement value.\n\n        if (typeof rep === 'function') {\n            value = rep.call(holder, key, value);\n        }\n\n// What happens next depends on the value's type.\n\n        switch (typeof value) {\n        case 'string':\n            return quote(value);\n\n        case 'number':\n\n// JSON numbers must be finite. Encode non-finite numbers as null.\n\n            return isFinite(value) ? String(value) : 'null';\n\n        case 'boolean':\n        case 'null':\n\n// If the value is a boolean or null, convert it to a string. Note:\n// typeof null does not produce 'null'. The case is included here in\n// the remote chance that this gets fixed someday.\n\n            return String(value);\n\n// If the type is 'object', we might be dealing with an object or an array or\n// null.\n\n        case 'object':\n\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\n// so watch out for that case.\n\n            if (!value) {\n                return 'null';\n            }\n\n// Make an array to hold the partial results of stringifying this object value.\n\n            gap += indent;\n            partial = [];\n\n// Is the value an array?\n\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n// The value is an array. Stringify every element. Use null as a placeholder\n// for non-JSON values.\n\n                length = value.length;\n                for (i = 0; i < length; i += 1) {\n                    partial[i] = str(i, value) || 'null';\n                }\n\n// Join all of the elements together, separated with commas, and wrap them in\n// brackets.\n\n                v = partial.length === 0\n                    ? '[]'\n                    : gap\n                    ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\n                    : '[' + partial.join(',') + ']';\n                gap = mind;\n                return v;\n            }\n\n// If the replacer is an array, use it to select the members to be stringified.\n\n            if (rep && typeof rep === 'object') {\n                length = rep.length;\n                for (i = 0; i < length; i += 1) {\n                    if (typeof rep[i] === 'string') {\n                        k = rep[i];\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            } else {\n\n// Otherwise, iterate through all of the keys in the object.\n\n                for (k in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, k)) {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            }\n\n// Join all of the member texts together, separated with commas,\n// and wrap them in braces.\n\n            v = partial.length === 0\n                ? '{}'\n                : gap\n                ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\n                : '{' + partial.join(',') + '}';\n            gap = mind;\n            return v;\n        }\n    }\n\n// If the JSON object does not yet have a stringify method, give it one.\n\n    if (typeof JSON.stringify !== 'function') {\n        JSON.stringify = function (value, replacer, space) {\n\n// The stringify method takes a value and an optional replacer, and an optional\n// space parameter, and returns a JSON text. The replacer can be a function\n// that can replace values, or an array of strings that will select the keys.\n// A default replacer method can be provided. Use of the space parameter can\n// produce text that is more easily readable.\n\n            var i;\n            gap = '';\n            indent = '';\n\n// If the space parameter is a number, make an indent string containing that\n// many spaces.\n\n            if (typeof space === 'number') {\n                for (i = 0; i < space; i += 1) {\n                    indent += ' ';\n                }\n\n// If the space parameter is a string, it will be used as the indent string.\n\n            } else if (typeof space === 'string') {\n                indent = space;\n            }\n\n// If there is a replacer, it must be a function or an array.\n// Otherwise, throw an error.\n\n            rep = replacer;\n            if (replacer && typeof replacer !== 'function' &&\n                    (typeof replacer !== 'object' ||\n                    typeof replacer.length !== 'number')) {\n                throw new Error('JSON.stringify');\n            }\n\n// Make a fake root object containing our value under the key of ''.\n// Return the result of stringifying the value.\n\n            return str('', {'': value});\n        };\n    }\n\n\n// If the JSON object does not yet have a parse method, give it one.\n\n    if (typeof JSON.parse !== 'function') {\n        JSON.parse = function (text, reviver) {\n\n// The parse method takes a text and an optional reviver function, and returns\n// a JavaScript value if the text is a valid JSON text.\n\n            var j;\n\n            function walk(holder, key) {\n\n// The walk method is used to recursively walk the resulting structure so\n// that modifications can be made.\n\n                var k, v, value = holder[key];\n                if (value && typeof value === 'object') {\n                    for (k in value) {\n                        if (Object.prototype.hasOwnProperty.call(value, k)) {\n                            v = walk(value, k);\n                            if (v !== undefined) {\n                                value[k] = v;\n                            } else {\n                                delete value[k];\n                            }\n                        }\n                    }\n                }\n                return reviver.call(holder, key, value);\n            }\n\n\n// Parsing happens in four stages. In the first stage, we replace certain\n// Unicode characters with escape sequences. JavaScript handles many characters\n// incorrectly, either silently deleting them, or treating them as line endings.\n\n            text = String(text);\n            cx.lastIndex = 0;\n            if (cx.test(text)) {\n                text = text.replace(cx, function (a) {\n                    return '\\\\u' +\n                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n                });\n            }\n\n// In the second stage, we run the text against regular expressions that look\n// for non-JSON patterns. We are especially concerned with '()' and 'new'\n// because they can cause invocation, and '=' because it can cause mutation.\n// But just to be safe, we want to reject all unexpected forms.\n\n// We split the second stage into 4 regexp operations in order to work around\n// crippling inefficiencies in IE's and Safari's regexp engines. First we\n// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\n// replace all simple value tokens with ']' characters. Third, we delete all\n// open brackets that follow a colon or comma or that begin the text. Finally,\n// we look to see that the remaining characters are only whitespace or ']' or\n// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\n\n            if (/^[\\],:{}\\s]*$/\n                    .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n                        .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n                        .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n// In the third stage we use the eval function to compile the text into a\n// JavaScript structure. The '{' operator is subject to a syntactic ambiguity\n// in JavaScript: it can begin a block or an object literal. We wrap the text\n// in parens to eliminate the ambiguity.\n\n                j = eval('(' + text + ')');\n\n// In the optional fourth stage, we recursively walk the new structure, passing\n// each name/value pair to a reviver function for possible transformation.\n\n                return typeof reviver === 'function'\n                    ? walk({'': j}, '')\n                    : j;\n            }\n\n// If the text is not JSON parseable, then a SyntaxError is thrown.\n\n            throw new SyntaxError('JSON.parse');\n        };\n    }\n}());/**\n * History.js jQuery Adapter\n * @author Benjamin Arthur Lupton <contact@balupton.com>\n * @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>\n * @license New BSD License <http://creativecommons.org/licenses/BSD/>\n */\n\n// Closure\n(function(window,undefined){\n\t\"use strict\";\n\n\t// Localise Globals\n\tvar\n\t\tHistory = window.History = window.History||{},\n\t\tjQuery = window.jQuery;\n\n\t// Check Existence\n\tif ( typeof History.Adapter !== 'undefined' ) {\n\t\tthrow new Error('History.js Adapter has already been loaded...');\n\t}\n\n\t// Add the Adapter\n\tHistory.Adapter = {\n\t\t/**\n\t\t * History.Adapter.bind(el,event,callback)\n\t\t * @param {Element|string} el\n\t\t * @param {string} event - custom and standard events\n\t\t * @param {function} callback\n\t\t * @return {void}\n\t\t */\n\t\tbind: function(el,event,callback){\n\t\t\tjQuery(el).bind(event,callback);\n\t\t},\n\n\t\t/**\n\t\t * History.Adapter.trigger(el,event)\n\t\t * @param {Element|string} el\n\t\t * @param {string} event - custom and standard events\n\t\t * @param {Object=} extra - a object of extra event data (optional)\n\t\t * @return {void}\n\t\t */\n\t\ttrigger: function(el,event,extra){\n\t\t\tjQuery(el).trigger(event,extra);\n\t\t},\n\n\t\t/**\n\t\t * History.Adapter.extractEventData(key,event,extra)\n\t\t * @param {string} key - key for the event data to extract\n\t\t * @param {string} event - custom and standard events\n\t\t * @param {Object=} extra - a object of extra event data (optional)\n\t\t * @return {mixed}\n\t\t */\n\t\textractEventData: function(key,event,extra){\n\t\t\t// jQuery Native then jQuery Custom\n\t\t\tvar result = (event && event.originalEvent && event.originalEvent[key]) || (extra && extra[key]) || undefined;\n\n\t\t\t// Return\n\t\t\treturn result;\n\t\t},\n\n\t\t/**\n\t\t * History.Adapter.onDomLoad(callback)\n\t\t * @param {function} callback\n\t\t * @return {void}\n\t\t */\n\t\tonDomLoad: function(callback) {\n\t\t\tjQuery(callback);\n\t\t}\n\t};\n\n\t// Try and Initialise History\n\tif ( typeof History.init !== 'undefined' ) {\n\t\tHistory.init();\n\t}\n\n})(window);\n\n/**\n * History.js HTML4 Support\n * Depends on the HTML5 Support\n * @author Benjamin Arthur Lupton <contact@balupton.com>\n * @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>\n * @license New BSD License <http://creativecommons.org/licenses/BSD/>\n */\n\n(function(window,undefined){\n\t\"use strict\";\n\n\t// ========================================================================\n\t// Initialise\n\n\t// Localise Globals\n\tvar\n\t\tdocument = window.document, // Make sure we are using the correct document\n\t\tsetTimeout = window.setTimeout||setTimeout,\n\t\tclearTimeout = window.clearTimeout||clearTimeout,\n\t\tsetInterval = window.setInterval||setInterval,\n\t\tHistory = window.History = window.History||{}; // Public History Object\n\n\t// Check Existence\n\tif ( typeof History.initHtml4 !== 'undefined' ) {\n\t\tthrow new Error('History.js HTML4 Support has already been loaded...');\n\t}\n\n\n\t// ========================================================================\n\t// Initialise HTML4 Support\n\n\t// Initialise HTML4 Support\n\tHistory.initHtml4 = function(){\n\t\t// Initialise\n\t\tif ( typeof History.initHtml4.initialized !== 'undefined' ) {\n\t\t\t// Already Loaded\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\tHistory.initHtml4.initialized = true;\n\t\t}\n\n\n\t\t// ====================================================================\n\t\t// Properties\n\n\t\t/**\n\t\t * History.enabled\n\t\t * Is History enabled?\n\t\t */\n\t\tHistory.enabled = true;\n\n\n\t\t// ====================================================================\n\t\t// Hash Storage\n\n\t\t/**\n\t\t * History.savedHashes\n\t\t * Store the hashes in an array\n\t\t */\n\t\tHistory.savedHashes = [];\n\n\t\t/**\n\t\t * History.isLastHash(newHash)\n\t\t * Checks if the hash is the last hash\n\t\t * @param {string} newHash\n\t\t * @return {boolean} true\n\t\t */\n\t\tHistory.isLastHash = function(newHash){\n\t\t\t// Prepare\n\t\t\tvar oldHash = History.getHashByIndex(),\n\t\t\t\tisLast;\n\n\t\t\t// Check\n\t\t\tisLast = newHash === oldHash;\n\n\t\t\t// Return isLast\n\t\t\treturn isLast;\n\t\t};\n\n\t\t/**\n\t\t * History.isHashEqual(newHash, oldHash)\n\t\t * Checks to see if two hashes are functionally equal\n\t\t * @param {string} newHash\n\t\t * @param {string} oldHash\n\t\t * @return {boolean} true\n\t\t */\n\t\tHistory.isHashEqual = function(newHash, oldHash){\n\t\t\tnewHash = encodeURIComponent(newHash).replace(/%25/g, \"%\");\n\t\t\toldHash = encodeURIComponent(oldHash).replace(/%25/g, \"%\");\n\t\t\treturn newHash === oldHash;\n\t\t};\n\n\t\t/**\n\t\t * History.saveHash(newHash)\n\t\t * Push a Hash\n\t\t * @param {string} newHash\n\t\t * @return {boolean} true\n\t\t */\n\t\tHistory.saveHash = function(newHash){\n\t\t\t// Check Hash\n\t\t\tif ( History.isLastHash(newHash) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Push the Hash\n\t\t\tHistory.savedHashes.push(newHash);\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.getHashByIndex()\n\t\t * Gets a hash by the index\n\t\t * @param {integer} index\n\t\t * @return {string}\n\t\t */\n\t\tHistory.getHashByIndex = function(index){\n\t\t\t// Prepare\n\t\t\tvar hash = null;\n\n\t\t\t// Handle\n\t\t\tif ( typeof index === 'undefined' ) {\n\t\t\t\t// Get the last inserted\n\t\t\t\thash = History.savedHashes[History.savedHashes.length-1];\n\t\t\t}\n\t\t\telse if ( index < 0 ) {\n\t\t\t\t// Get from the end\n\t\t\t\thash = History.savedHashes[History.savedHashes.length+index];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Get from the beginning\n\t\t\t\thash = History.savedHashes[index];\n\t\t\t}\n\n\t\t\t// Return hash\n\t\t\treturn hash;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// Discarded States\n\n\t\t/**\n\t\t * History.discardedHashes\n\t\t * A hashed array of discarded hashes\n\t\t */\n\t\tHistory.discardedHashes = {};\n\n\t\t/**\n\t\t * History.discardedStates\n\t\t * A hashed array of discarded states\n\t\t */\n\t\tHistory.discardedStates = {};\n\n\t\t/**\n\t\t * History.discardState(State)\n\t\t * Discards the state by ignoring it through History\n\t\t * @param {object} State\n\t\t * @return {true}\n\t\t */\n\t\tHistory.discardState = function(discardedState,forwardState,backState){\n\t\t\t//History.debug('History.discardState', arguments);\n\t\t\t// Prepare\n\t\t\tvar discardedStateHash = History.getHashByState(discardedState),\n\t\t\t\tdiscardObject;\n\n\t\t\t// Create Discard Object\n\t\t\tdiscardObject = {\n\t\t\t\t'discardedState': discardedState,\n\t\t\t\t'backState': backState,\n\t\t\t\t'forwardState': forwardState\n\t\t\t};\n\n\t\t\t// Add to DiscardedStates\n\t\t\tHistory.discardedStates[discardedStateHash] = discardObject;\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.discardHash(hash)\n\t\t * Discards the hash by ignoring it through History\n\t\t * @param {string} hash\n\t\t * @return {true}\n\t\t */\n\t\tHistory.discardHash = function(discardedHash,forwardState,backState){\n\t\t\t//History.debug('History.discardState', arguments);\n\t\t\t// Create Discard Object\n\t\t\tvar discardObject = {\n\t\t\t\t'discardedHash': discardedHash,\n\t\t\t\t'backState': backState,\n\t\t\t\t'forwardState': forwardState\n\t\t\t};\n\n\t\t\t// Add to discardedHash\n\t\t\tHistory.discardedHashes[discardedHash] = discardObject;\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.discardedState(State)\n\t\t * Checks to see if the state is discarded\n\t\t * @param {object} State\n\t\t * @return {bool}\n\t\t */\n\t\tHistory.discardedState = function(State){\n\t\t\t// Prepare\n\t\t\tvar StateHash = History.getHashByState(State),\n\t\t\t\tdiscarded;\n\n\t\t\t// Check\n\t\t\tdiscarded = History.discardedStates[StateHash]||false;\n\n\t\t\t// Return true\n\t\t\treturn discarded;\n\t\t};\n\n\t\t/**\n\t\t * History.discardedHash(hash)\n\t\t * Checks to see if the state is discarded\n\t\t * @param {string} State\n\t\t * @return {bool}\n\t\t */\n\t\tHistory.discardedHash = function(hash){\n\t\t\t// Check\n\t\t\tvar discarded = History.discardedHashes[hash]||false;\n\n\t\t\t// Return true\n\t\t\treturn discarded;\n\t\t};\n\n\t\t/**\n\t\t * History.recycleState(State)\n\t\t * Allows a discarded state to be used again\n\t\t * @param {object} data\n\t\t * @param {string} title\n\t\t * @param {string} url\n\t\t * @return {true}\n\t\t */\n\t\tHistory.recycleState = function(State){\n\t\t\t//History.debug('History.recycleState', arguments);\n\t\t\t// Prepare\n\t\t\tvar StateHash = History.getHashByState(State);\n\n\t\t\t// Remove from DiscardedStates\n\t\t\tif ( History.discardedState(State) ) {\n\t\t\t\tdelete History.discardedStates[StateHash];\n\t\t\t}\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// HTML4 HashChange Support\n\n\t\tif ( History.emulated.hashChange ) {\n\t\t\t/*\n\t\t\t * We must emulate the HTML4 HashChange Support by manually checking for hash changes\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * History.hashChangeInit()\n\t\t\t * Init the HashChange Emulation\n\t\t\t */\n\t\t\tHistory.hashChangeInit = function(){\n\t\t\t\t// Define our Checker Function\n\t\t\t\tHistory.checkerFunction = null;\n\n\t\t\t\t// Define some variables that will help in our checker function\n\t\t\t\tvar lastDocumentHash = '',\n\t\t\t\t\tiframeId, iframe,\n\t\t\t\t\tlastIframeHash, checkerRunning,\n\t\t\t\t\tstartedWithHash = Boolean(History.getHash());\n\n\t\t\t\t// Handle depending on the browser\n\t\t\t\tif ( History.isInternetExplorer() ) {\n\t\t\t\t\t// IE6 and IE7\n\t\t\t\t\t// We need to use an iframe to emulate the back and forward buttons\n\n\t\t\t\t\t// Create iFrame\n\t\t\t\t\tiframeId = 'historyjs-iframe';\n\t\t\t\t\tiframe = document.createElement('iframe');\n\n\t\t\t\t\t// Adjust iFarme\n\t\t\t\t\t// IE 6 requires iframe to have a src on HTTPS pages, otherwise it will throw a\n\t\t\t\t\t// \"This page contains both secure and nonsecure items\" warning.\n\t\t\t\t\tiframe.setAttribute('id', iframeId);\n\t\t\t\t\tiframe.setAttribute('src', '#');\n\t\t\t\t\tiframe.style.display = 'none';\n\n\t\t\t\t\t// Append iFrame\n\t\t\t\t\tdocument.body.appendChild(iframe);\n\n\t\t\t\t\t// Create initial history entry\n\t\t\t\t\tiframe.contentWindow.document.open();\n\t\t\t\t\tiframe.contentWindow.document.close();\n\n\t\t\t\t\t// Define some variables that will help in our checker function\n\t\t\t\t\tlastIframeHash = '';\n\t\t\t\t\tcheckerRunning = false;\n\n\t\t\t\t\t// Define the checker function\n\t\t\t\t\tHistory.checkerFunction = function(){\n\t\t\t\t\t\t// Check Running\n\t\t\t\t\t\tif ( checkerRunning ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update Running\n\t\t\t\t\t\tcheckerRunning = true;\n\n\t\t\t\t\t\t// Fetch\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tdocumentHash = History.getHash(),\n\t\t\t\t\t\t\tiframeHash = History.getHash(iframe.contentWindow.document);\n\n\t\t\t\t\t\t// The Document Hash has changed (application caused)\n\t\t\t\t\t\tif ( documentHash !== lastDocumentHash ) {\n\t\t\t\t\t\t\t// Equalise\n\t\t\t\t\t\t\tlastDocumentHash = documentHash;\n\n\t\t\t\t\t\t\t// Create a history entry in the iframe\n\t\t\t\t\t\t\tif ( iframeHash !== documentHash ) {\n\t\t\t\t\t\t\t\t//History.debug('hashchange.checker: iframe hash change', 'documentHash (new):', documentHash, 'iframeHash (old):', iframeHash);\n\n\t\t\t\t\t\t\t\t// Equalise\n\t\t\t\t\t\t\t\tlastIframeHash = iframeHash = documentHash;\n\n\t\t\t\t\t\t\t\t// Create History Entry\n\t\t\t\t\t\t\t\tiframe.contentWindow.document.open();\n\t\t\t\t\t\t\t\tiframe.contentWindow.document.close();\n\n\t\t\t\t\t\t\t\t// Update the iframe's hash\n\t\t\t\t\t\t\t\tiframe.contentWindow.document.location.hash = History.escapeHash(documentHash);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Trigger Hashchange Event\n\t\t\t\t\t\t\tHistory.Adapter.trigger(window,'hashchange');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// The iFrame Hash has changed (back button caused)\n\t\t\t\t\t\telse if ( iframeHash !== lastIframeHash ) {\n\t\t\t\t\t\t\t//History.debug('hashchange.checker: iframe hash out of sync', 'iframeHash (new):', iframeHash, 'documentHash (old):', documentHash);\n\n\t\t\t\t\t\t\t// Equalise\n\t\t\t\t\t\t\tlastIframeHash = iframeHash;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// If there is no iframe hash that means we're at the original\n\t\t\t\t\t\t\t// iframe state.\n\t\t\t\t\t\t\t// And if there was a hash on the original request, the original\n\t\t\t\t\t\t\t// iframe state was replaced instantly, so skip this state and take\n\t\t\t\t\t\t\t// the user back to where they came from.\n\t\t\t\t\t\t\tif (startedWithHash && iframeHash === '') {\n\t\t\t\t\t\t\t\tHistory.back();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Update the Hash\n\t\t\t\t\t\t\t\tHistory.setHash(iframeHash,false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Reset Running\n\t\t\t\t\t\tcheckerRunning = false;\n\n\t\t\t\t\t\t// Return true\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// We are not IE\n\t\t\t\t\t// Firefox 1 or 2, Opera\n\n\t\t\t\t\t// Define the checker function\n\t\t\t\t\tHistory.checkerFunction = function(){\n\t\t\t\t\t\t// Prepare\n\t\t\t\t\t\tvar documentHash = History.getHash()||'';\n\n\t\t\t\t\t\t// The Document Hash has changed (application caused)\n\t\t\t\t\t\tif ( documentHash !== lastDocumentHash ) {\n\t\t\t\t\t\t\t// Equalise\n\t\t\t\t\t\t\tlastDocumentHash = documentHash;\n\n\t\t\t\t\t\t\t// Trigger Hashchange Event\n\t\t\t\t\t\t\tHistory.Adapter.trigger(window,'hashchange');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Return true\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Apply the checker function\n\t\t\t\tHistory.intervalList.push(setInterval(History.checkerFunction, History.options.hashChangeInterval));\n\n\t\t\t\t// Done\n\t\t\t\treturn true;\n\t\t\t}; // History.hashChangeInit\n\n\t\t\t// Bind hashChangeInit\n\t\t\tHistory.Adapter.onDomLoad(History.hashChangeInit);\n\n\t\t} // History.emulated.hashChange\n\n\n\t\t// ====================================================================\n\t\t// HTML5 State Support\n\n\t\t// Non-Native pushState Implementation\n\t\tif ( History.emulated.pushState ) {\n\t\t\t/*\n\t\t\t * We must emulate the HTML5 State Management by using HTML4 HashChange\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * History.onHashChange(event)\n\t\t\t * Trigger HTML5's window.onpopstate via HTML4 HashChange Support\n\t\t\t */\n\t\t\tHistory.onHashChange = function(event){\n\t\t\t\t//History.debug('History.onHashChange', arguments);\n\n\t\t\t\t// Prepare\n\t\t\t\tvar currentUrl = ((event && event.newURL) || History.getLocationHref()),\n\t\t\t\t\tcurrentHash = History.getHashByUrl(currentUrl),\n\t\t\t\t\tcurrentState = null,\n\t\t\t\t\tcurrentStateHash = null,\n\t\t\t\t\tcurrentStateHashExits = null,\n\t\t\t\t\tdiscardObject;\n\n\t\t\t\t// Check if we are the same state\n\t\t\t\tif ( History.isLastHash(currentHash) ) {\n\t\t\t\t\t// There has been no change (just the page's hash has finally propagated)\n\t\t\t\t\t//History.debug('History.onHashChange: no change');\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Reset the double check\n\t\t\t\tHistory.doubleCheckComplete();\n\n\t\t\t\t// Store our location for use in detecting back/forward direction\n\t\t\t\tHistory.saveHash(currentHash);\n\n\t\t\t\t// Expand Hash\n\t\t\t\tif ( currentHash && History.isTraditionalAnchor(currentHash) ) {\n\t\t\t\t\t//History.debug('History.onHashChange: traditional anchor', currentHash);\n\t\t\t\t\t// Traditional Anchor Hash\n\t\t\t\t\tHistory.Adapter.trigger(window,'anchorchange');\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Create State\n\t\t\t\tcurrentState = History.extractState(History.getFullUrl(currentHash||History.getLocationHref()),true);\n\n\t\t\t\t// Check if we are the same state\n\t\t\t\tif ( History.isLastSavedState(currentState) ) {\n\t\t\t\t\t//History.debug('History.onHashChange: no change');\n\t\t\t\t\t// There has been no change (just the page's hash has finally propagated)\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Create the state Hash\n\t\t\t\tcurrentStateHash = History.getHashByState(currentState);\n\n\t\t\t\t// Check if we are DiscardedState\n\t\t\t\tdiscardObject = History.discardedState(currentState);\n\t\t\t\tif ( discardObject ) {\n\t\t\t\t\t// Ignore this state as it has been discarded and go back to the state before it\n\t\t\t\t\tif ( History.getHashByIndex(-2) === History.getHashByState(discardObject.forwardState) ) {\n\t\t\t\t\t\t// We are going backwards\n\t\t\t\t\t\t//History.debug('History.onHashChange: go backwards');\n\t\t\t\t\t\tHistory.back(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We are going forwards\n\t\t\t\t\t\t//History.debug('History.onHashChange: go forwards');\n\t\t\t\t\t\tHistory.forward(false);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Push the new HTML5 State\n\t\t\t\t//History.debug('History.onHashChange: success hashchange');\n\t\t\t\tHistory.pushState(currentState.data,currentState.title,encodeURI(currentState.url),false);\n\n\t\t\t\t// End onHashChange closure\n\t\t\t\treturn true;\n\t\t\t};\n\t\t\tHistory.Adapter.bind(window,'hashchange',History.onHashChange);\n\n\t\t\t/**\n\t\t\t * History.pushState(data,title,url)\n\t\t\t * Add a new State to the history object, become it, and trigger onpopstate\n\t\t\t * We have to trigger for HTML4 compatibility\n\t\t\t * @param {object} data\n\t\t\t * @param {string} title\n\t\t\t * @param {string} url\n\t\t\t * @return {true}\n\t\t\t */\n\t\t\tHistory.pushState = function(data,title,url,queue){\n\t\t\t\t//History.debug('History.pushState: called', arguments);\n\n\t\t\t\t// We assume that the URL passed in is URI-encoded, but this makes\n\t\t\t\t// sure that it's fully URI encoded; any '%'s that are encoded are\n\t\t\t\t// converted back into '%'s\n\t\t\t\turl = encodeURI(url).replace(/%25/g, \"%\");\n\n\t\t\t\t// Check the State\n\t\t\t\tif ( History.getHashByUrl(url) ) {\n\t\t\t\t\tthrow new Error('History.js does not support states with fragment-identifiers (hashes/anchors).');\n\t\t\t\t}\n\n\t\t\t\t// Handle Queueing\n\t\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t\t// Wait + Push to Queue\n\t\t\t\t\t//History.debug('History.pushState: we must wait', arguments);\n\t\t\t\t\tHistory.pushQueue({\n\t\t\t\t\t\tscope: History,\n\t\t\t\t\t\tcallback: History.pushState,\n\t\t\t\t\t\targs: arguments,\n\t\t\t\t\t\tqueue: queue\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Make Busy\n\t\t\t\tHistory.busy(true);\n\n\t\t\t\t// Fetch the State Object\n\t\t\t\tvar newState = History.createStateObject(data,title,url),\n\t\t\t\t\tnewStateHash = History.getHashByState(newState),\n\t\t\t\t\toldState = History.getState(false),\n\t\t\t\t\toldStateHash = History.getHashByState(oldState),\n\t\t\t\t\thtml4Hash = History.getHash(),\n\t\t\t\t\twasExpected = History.expectedStateId == newState.id;\n\n\t\t\t\t// Store the newState\n\t\t\t\tHistory.storeState(newState);\n\t\t\t\tHistory.expectedStateId = newState.id;\n\n\t\t\t\t// Recycle the State\n\t\t\t\tHistory.recycleState(newState);\n\n\t\t\t\t// Force update of the title\n\t\t\t\tHistory.setTitle(newState);\n\n\t\t\t\t// Check if we are the same State\n\t\t\t\tif ( newStateHash === oldStateHash ) {\n\t\t\t\t\t//History.debug('History.pushState: no change', newStateHash);\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Update HTML5 State\n\t\t\t\tHistory.saveState(newState);\n\n\t\t\t\t// Fire HTML5 Event\n\t\t\t\tif(!wasExpected)\n\t\t\t\t\tHistory.Adapter.trigger(window,'statechange');\n\n\t\t\t\t// Update HTML4 Hash\n\t\t\t\tif ( !History.isHashEqual(newStateHash, html4Hash) && !History.isHashEqual(newStateHash, History.getShortUrl(History.getLocationHref())) ) {\n\t\t\t\t\tHistory.setHash(newStateHash,false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tHistory.busy(false);\n\n\t\t\t\t// End pushState closure\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * History.replaceState(data,title,url)\n\t\t\t * Replace the State and trigger onpopstate\n\t\t\t * We have to trigger for HTML4 compatibility\n\t\t\t * @param {object} data\n\t\t\t * @param {string} title\n\t\t\t * @param {string} url\n\t\t\t * @return {true}\n\t\t\t */\n\t\t\tHistory.replaceState = function(data,title,url,queue){\n\t\t\t\t//History.debug('History.replaceState: called', arguments);\n\n\t\t\t\t// We assume that the URL passed in is URI-encoded, but this makes\n\t\t\t\t// sure that it's fully URI encoded; any '%'s that are encoded are\n\t\t\t\t// converted back into '%'s\n\t\t\t\turl = encodeURI(url).replace(/%25/g, \"%\");\n\n\t\t\t\t// Check the State\n\t\t\t\tif ( History.getHashByUrl(url) ) {\n\t\t\t\t\tthrow new Error('History.js does not support states with fragment-identifiers (hashes/anchors).');\n\t\t\t\t}\n\n\t\t\t\t// Handle Queueing\n\t\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t\t// Wait + Push to Queue\n\t\t\t\t\t//History.debug('History.replaceState: we must wait', arguments);\n\t\t\t\t\tHistory.pushQueue({\n\t\t\t\t\t\tscope: History,\n\t\t\t\t\t\tcallback: History.replaceState,\n\t\t\t\t\t\targs: arguments,\n\t\t\t\t\t\tqueue: queue\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Make Busy\n\t\t\t\tHistory.busy(true);\n\n\t\t\t\t// Fetch the State Objects\n\t\t\t\tvar newState        = History.createStateObject(data,title,url),\n\t\t\t\t\tnewStateHash = History.getHashByState(newState),\n\t\t\t\t\toldState        = History.getState(false),\n\t\t\t\t\toldStateHash = History.getHashByState(oldState),\n\t\t\t\t\tpreviousState   = History.getStateByIndex(-2);\n\n\t\t\t\t// Discard Old State\n\t\t\t\tHistory.discardState(oldState,newState,previousState);\n\n\t\t\t\t// If the url hasn't changed, just store and save the state\n\t\t\t\t// and fire a statechange event to be consistent with the\n\t\t\t\t// html 5 api\n\t\t\t\tif ( newStateHash === oldStateHash ) {\n\t\t\t\t\t// Store the newState\n\t\t\t\t\tHistory.storeState(newState);\n\t\t\t\t\tHistory.expectedStateId = newState.id;\n\t\n\t\t\t\t\t// Recycle the State\n\t\t\t\t\tHistory.recycleState(newState);\n\t\n\t\t\t\t\t// Force update of the title\n\t\t\t\t\tHistory.setTitle(newState);\n\t\t\t\t\t\n\t\t\t\t\t// Update HTML5 State\n\t\t\t\t\tHistory.saveState(newState);\n\n\t\t\t\t\t// Fire HTML5 Event\n\t\t\t\t\t//History.debug('History.pushState: trigger popstate');\n\t\t\t\t\tHistory.Adapter.trigger(window,'statechange');\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Alias to PushState\n\t\t\t\t\tHistory.pushState(newState.data,newState.title,newState.url,false);\n\t\t\t\t}\n\n\t\t\t\t// End replaceState closure\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t} // History.emulated.pushState\n\n\n\n\t\t// ====================================================================\n\t\t// Initialise\n\n\t\t// Non-Native pushState Implementation\n\t\tif ( History.emulated.pushState ) {\n\t\t\t/**\n\t\t\t * Ensure initial state is handled correctly\n\t\t\t */\n\t\t\tif ( History.getHash() && !History.emulated.hashChange ) {\n\t\t\t\tHistory.Adapter.onDomLoad(function(){\n\t\t\t\t\tHistory.Adapter.trigger(window,'hashchange');\n\t\t\t\t});\n\t\t\t}\n\n\t\t} // History.emulated.pushState\n\n\t}; // History.initHtml4\n\n\t// Try to Initialise History\n\tif ( typeof History.init !== 'undefined' ) {\n\t\tHistory.init();\n\t}\n\n})(window);\n/**\n * History.js Core\n * @author Benjamin Arthur Lupton <contact@balupton.com>\n * @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>\n * @license New BSD License <http://creativecommons.org/licenses/BSD/>\n */\n\n(function(window,undefined){\n\t\"use strict\";\n\n\t// ========================================================================\n\t// Initialise\n\n\t// Localise Globals\n\tvar\n\t\tconsole = window.console||undefined, // Prevent a JSLint complain\n\t\tdocument = window.document, // Make sure we are using the correct document\n\t\tnavigator = window.navigator, // Make sure we are using the correct navigator\n\t\tsessionStorage = false, // sessionStorage\n\t\tsetTimeout = window.setTimeout,\n\t\tclearTimeout = window.clearTimeout,\n\t\tsetInterval = window.setInterval,\n\t\tclearInterval = window.clearInterval,\n\t\tJSON = window.JSON,\n\t\talert = window.alert,\n\t\tHistory = window.History = window.History||{}, // Public History Object\n\t\thistory = window.history; // Old History Object\n\n\ttry {\n\t\tsessionStorage = window.sessionStorage; // This will throw an exception in some browsers when cookies/localStorage are explicitly disabled (i.e. Chrome)\n\t\tsessionStorage.setItem('TEST', '1');\n\t\tsessionStorage.removeItem('TEST');\n\t} catch(e) {\n\t\tsessionStorage = false;\n\t}\n\n\t// MooTools Compatibility\n\tJSON.stringify = JSON.stringify||JSON.encode;\n\tJSON.parse = JSON.parse||JSON.decode;\n\n\t// Check Existence\n\tif ( typeof History.init !== 'undefined' ) {\n\t\tthrow new Error('History.js Core has already been loaded...');\n\t}\n\n\t// Initialise History\n\tHistory.init = function(options){\n\t\t// Check Load Status of Adapter\n\t\tif ( typeof History.Adapter === 'undefined' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check Load Status of Core\n\t\tif ( typeof History.initCore !== 'undefined' ) {\n\t\t\tHistory.initCore();\n\t\t}\n\n\t\t// Check Load Status of HTML4 Support\n\t\tif ( typeof History.initHtml4 !== 'undefined' ) {\n\t\t\tHistory.initHtml4();\n\t\t}\n\n\t\t// Return true\n\t\treturn true;\n\t};\n\n\n\t// ========================================================================\n\t// Initialise Core\n\n\t// Initialise Core\n\tHistory.initCore = function(options){\n\t\t// Initialise\n\t\tif ( typeof History.initCore.initialized !== 'undefined' ) {\n\t\t\t// Already Loaded\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\tHistory.initCore.initialized = true;\n\t\t}\n\n\n\t\t// ====================================================================\n\t\t// Options\n\n\t\t/**\n\t\t * History.options\n\t\t * Configurable options\n\t\t */\n\t\tHistory.options = History.options||{};\n\n\t\t/**\n\t\t * History.options.hashChangeInterval\n\t\t * How long should the interval be before hashchange checks\n\t\t */\n\t\tHistory.options.hashChangeInterval = History.options.hashChangeInterval || 100;\n\n\t\t/**\n\t\t * History.options.safariPollInterval\n\t\t * How long should the interval be before safari poll checks\n\t\t */\n\t\tHistory.options.safariPollInterval = History.options.safariPollInterval || 500;\n\n\t\t/**\n\t\t * History.options.doubleCheckInterval\n\t\t * How long should the interval be before we perform a double check\n\t\t */\n\t\tHistory.options.doubleCheckInterval = History.options.doubleCheckInterval || 500;\n\n\t\t/**\n\t\t * History.options.disableSuid\n\t\t * Force History not to append suid\n\t\t */\n\t\tHistory.options.disableSuid = History.options.disableSuid || false;\n\n\t\t/**\n\t\t * History.options.storeInterval\n\t\t * How long should we wait between store calls\n\t\t */\n\t\tHistory.options.storeInterval = History.options.storeInterval || 1000;\n\n\t\t/**\n\t\t * History.options.busyDelay\n\t\t * How long should we wait between busy events\n\t\t */\n\t\tHistory.options.busyDelay = History.options.busyDelay || 250;\n\n\t\t/**\n\t\t * History.options.debug\n\t\t * If true will enable debug messages to be logged\n\t\t */\n\t\tHistory.options.debug = History.options.debug || false;\n\n\t\t/**\n\t\t * History.options.initialTitle\n\t\t * What is the title of the initial state\n\t\t */\n\t\tHistory.options.initialTitle = History.options.initialTitle || document.title;\n\n\t\t/**\n\t\t * History.options.html4Mode\n\t\t * If true, will force HTMl4 mode (hashtags)\n\t\t */\n\t\tHistory.options.html4Mode = History.options.html4Mode || false;\n\n\t\t/**\n\t\t * History.options.delayInit\n\t\t * Want to override default options and call init manually.\n\t\t */\n\t\tHistory.options.delayInit = History.options.delayInit || false;\n\n\n\t\t// ====================================================================\n\t\t// Interval record\n\n\t\t/**\n\t\t * History.intervalList\n\t\t * List of intervals set, to be cleared when document is unloaded.\n\t\t */\n\t\tHistory.intervalList = [];\n\n\t\t/**\n\t\t * History.clearAllIntervals\n\t\t * Clears all setInterval instances.\n\t\t */\n\t\tHistory.clearAllIntervals = function(){\n\t\t\tvar i, il = History.intervalList;\n\t\t\tif (typeof il !== \"undefined\" && il !== null) {\n\t\t\t\tfor (i = 0; i < il.length; i++) {\n\t\t\t\t\tclearInterval(il[i]);\n\t\t\t\t}\n\t\t\t\tHistory.intervalList = null;\n\t\t\t}\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// Debug\n\n\t\t/**\n\t\t * History.debug(message,...)\n\t\t * Logs the passed arguments if debug enabled\n\t\t */\n\t\tHistory.debug = function(){\n\t\t\tif ( (History.options.debug||false) ) {\n\t\t\t\tHistory.log.apply(History,arguments);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * History.log(message,...)\n\t\t * Logs the passed arguments\n\t\t */\n\t\tHistory.log = function(){\n\t\t\t// Prepare\n\t\t\tvar\n\t\t\t\tconsoleExists = !(typeof console === 'undefined' || typeof console.log === 'undefined' || typeof console.log.apply === 'undefined'),\n\t\t\t\ttextarea = document.getElementById('log'),\n\t\t\t\tmessage,\n\t\t\t\ti,n,\n\t\t\t\targs,arg\n\t\t\t\t;\n\n\t\t\t// Write to Console\n\t\t\tif ( consoleExists ) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t\tmessage = args.shift();\n\t\t\t\tif ( typeof console.debug !== 'undefined' ) {\n\t\t\t\t\tconsole.debug.apply(console,[message,args]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log.apply(console,[message,args]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmessage = (\"\\n\"+arguments[0]+\"\\n\");\n\t\t\t}\n\n\t\t\t// Write to log\n\t\t\tfor ( i=1,n=arguments.length; i<n; ++i ) {\n\t\t\t\targ = arguments[i];\n\t\t\t\tif ( typeof arg === 'object' && typeof JSON !== 'undefined' ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\targ = JSON.stringify(arg);\n\t\t\t\t\t}\n\t\t\t\t\tcatch ( Exception ) {\n\t\t\t\t\t\t// Recursive Object\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmessage += \"\\n\"+arg+\"\\n\";\n\t\t\t}\n\n\t\t\t// Textarea\n\t\t\tif ( textarea ) {\n\t\t\t\ttextarea.value += message+\"\\n-----\\n\";\n\t\t\t\ttextarea.scrollTop = textarea.scrollHeight - textarea.clientHeight;\n\t\t\t}\n\t\t\t// No Textarea, No Console\n\t\t\telse if ( !consoleExists ) {\n\t\t\t\talert(message);\n\t\t\t}\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// Emulated Status\n\n\t\t/**\n\t\t * History.getInternetExplorerMajorVersion()\n\t\t * Get's the major version of Internet Explorer\n\t\t * @return {integer}\n\t\t * @license Public Domain\n\t\t * @author Benjamin Arthur Lupton <contact@balupton.com>\n\t\t * @author James Padolsey <https://gist.github.com/527683>\n\t\t */\n\t\tHistory.getInternetExplorerMajorVersion = function(){\n\t\t\tvar result = History.getInternetExplorerMajorVersion.cached =\n\t\t\t\t\t(typeof History.getInternetExplorerMajorVersion.cached !== 'undefined')\n\t\t\t\t?\tHistory.getInternetExplorerMajorVersion.cached\n\t\t\t\t:\t(function(){\n\t\t\t\t\t\tvar v = 3,\n\t\t\t\t\t\t\t\tdiv = document.createElement('div'),\n\t\t\t\t\t\t\t\tall = div.getElementsByTagName('i');\n\t\t\t\t\t\twhile ( (div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->') && all[0] ) {}\n\t\t\t\t\t\treturn (v > 4) ? v : false;\n\t\t\t\t\t})()\n\t\t\t\t;\n\t\t\treturn result;\n\t\t};\n\n\t\t/**\n\t\t * History.isInternetExplorer()\n\t\t * Are we using Internet Explorer?\n\t\t * @return {boolean}\n\t\t * @license Public Domain\n\t\t * @author Benjamin Arthur Lupton <contact@balupton.com>\n\t\t */\n\t\tHistory.isInternetExplorer = function(){\n\t\t\tvar result =\n\t\t\t\tHistory.isInternetExplorer.cached =\n\t\t\t\t(typeof History.isInternetExplorer.cached !== 'undefined')\n\t\t\t\t\t?\tHistory.isInternetExplorer.cached\n\t\t\t\t\t:\tBoolean(History.getInternetExplorerMajorVersion())\n\t\t\t\t;\n\t\t\treturn result;\n\t\t};\n\n\t\t/**\n\t\t * History.emulated\n\t\t * Which features require emulating?\n\t\t */\n\n\t\tif (History.options.html4Mode) {\n\t\t\tHistory.emulated = {\n\t\t\t\tpushState : true,\n\t\t\t\thashChange: true\n\t\t\t};\n\t\t}\n\n\t\telse {\n\n\t\t\tHistory.emulated = {\n\t\t\t\tpushState: !Boolean(\n\t\t\t\t\twindow.history && window.history.pushState && window.history.replaceState\n\t\t\t\t\t&& !(\n\t\t\t\t\t\t(/ Mobile\\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent) /* disable for versions of iOS before version 4.3 (8F190) */\n\t\t\t\t\t\t|| (/AppleWebKit\\/5([0-2]|3[0-2])/i).test(navigator.userAgent) /* disable for the mercury iOS browser, or at least older versions of the webkit engine */\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\thashChange: Boolean(\n\t\t\t\t\t!(('onhashchange' in window) || ('onhashchange' in document))\n\t\t\t\t\t||\n\t\t\t\t\t(History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 8)\n\t\t\t\t)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * History.enabled\n\t\t * Is History enabled?\n\t\t */\n\t\tHistory.enabled = !History.emulated.pushState;\n\n\t\t/**\n\t\t * History.bugs\n\t\t * Which bugs are present\n\t\t */\n\t\tHistory.bugs = {\n\t\t\t/**\n\t\t\t * Safari 5 and Safari iOS 4 fail to return to the correct state once a hash is replaced by a `replaceState` call\n\t\t\t * https://bugs.webkit.org/show_bug.cgi?id=56249\n\t\t\t */\n\t\t\tsetHash: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\\/5([0-2]|3[0-3])/.test(navigator.userAgent)),\n\n\t\t\t/**\n\t\t\t * Safari 5 and Safari iOS 4 sometimes fail to apply the state change under busy conditions\n\t\t\t * https://bugs.webkit.org/show_bug.cgi?id=42940\n\t\t\t */\n\t\t\tsafariPoll: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\\/5([0-2]|3[0-3])/.test(navigator.userAgent)),\n\n\t\t\t/**\n\t\t\t * MSIE 6 and 7 sometimes do not apply a hash even it was told to (requiring a second call to the apply function)\n\t\t\t */\n\t\t\tieDoubleCheck: Boolean(History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 8),\n\n\t\t\t/**\n\t\t\t * MSIE 6 requires the entire hash to be encoded for the hashes to trigger the onHashChange event\n\t\t\t */\n\t\t\thashEscape: Boolean(History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 7)\n\t\t};\n\n\t\t/**\n\t\t * History.isEmptyObject(obj)\n\t\t * Checks to see if the Object is Empty\n\t\t * @param {Object} obj\n\t\t * @return {boolean}\n\t\t */\n\t\tHistory.isEmptyObject = function(obj) {\n\t\t\tfor ( var name in obj ) {\n\t\t\t\tif ( obj.hasOwnProperty(name) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.cloneObject(obj)\n\t\t * Clones a object and eliminate all references to the original contexts\n\t\t * @param {Object} obj\n\t\t * @return {Object}\n\t\t */\n\t\tHistory.cloneObject = function(obj) {\n\t\t\tvar hash,newObj;\n\t\t\tif ( obj ) {\n\t\t\t\thash = JSON.stringify(obj);\n\t\t\t\tnewObj = JSON.parse(hash);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnewObj = {};\n\t\t\t}\n\t\t\treturn newObj;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// URL Helpers\n\n\t\t/**\n\t\t * History.getRootUrl()\n\t\t * Turns \"http://mysite.com/dir/page.html?asd\" into \"http://mysite.com\"\n\t\t * @return {String} rootUrl\n\t\t */\n\t\tHistory.getRootUrl = function(){\n\t\t\t// Create\n\t\t\tvar rootUrl = document.location.protocol+'//'+(document.location.hostname||document.location.host);\n\t\t\tif ( document.location.port||false ) {\n\t\t\t\trootUrl += ':'+document.location.port;\n\t\t\t}\n\t\t\trootUrl += '/';\n\n\t\t\t// Return\n\t\t\treturn rootUrl;\n\t\t};\n\n\t\t/**\n\t\t * History.getBaseHref()\n\t\t * Fetches the `href` attribute of the `<base href=\"...\">` element if it exists\n\t\t * @return {String} baseHref\n\t\t */\n\t\tHistory.getBaseHref = function(){\n\t\t\t// Create\n\t\t\tvar\n\t\t\t\tbaseElements = document.getElementsByTagName('base'),\n\t\t\t\tbaseElement = null,\n\t\t\t\tbaseHref = '';\n\n\t\t\t// Test for Base Element\n\t\t\tif ( baseElements.length === 1 ) {\n\t\t\t\t// Prepare for Base Element\n\t\t\t\tbaseElement = baseElements[0];\n\t\t\t\tbaseHref = baseElement.href.replace(/[^\\/]+$/,'');\n\t\t\t}\n\n\t\t\t// Adjust trailing slash\n\t\t\tbaseHref = baseHref.replace(/\\/+$/,'');\n\t\t\tif ( baseHref ) baseHref += '/';\n\n\t\t\t// Return\n\t\t\treturn baseHref;\n\t\t};\n\n\t\t/**\n\t\t * History.getBaseUrl()\n\t\t * Fetches the baseHref or basePageUrl or rootUrl (whichever one exists first)\n\t\t * @return {String} baseUrl\n\t\t */\n\t\tHistory.getBaseUrl = function(){\n\t\t\t// Create\n\t\t\tvar baseUrl = History.getBaseHref()||History.getBasePageUrl()||History.getRootUrl();\n\n\t\t\t// Return\n\t\t\treturn baseUrl;\n\t\t};\n\n\t\t/**\n\t\t * History.getPageUrl()\n\t\t * Fetches the URL of the current page\n\t\t * @return {String} pageUrl\n\t\t */\n\t\tHistory.getPageUrl = function(){\n\t\t\t// Fetch\n\t\t\tvar\n\t\t\t\tState = History.getState(false,false),\n\t\t\t\tstateUrl = (State||{}).url||History.getLocationHref(),\n\t\t\t\tpageUrl;\n\n\t\t\t// Create\n\t\t\tpageUrl = stateUrl.replace(/\\/+$/,'').replace(/[^\\/]+$/,function(part,index,string){\n\t\t\t\treturn (/\\./).test(part) ? part : part+'/';\n\t\t\t});\n\n\t\t\t// Return\n\t\t\treturn pageUrl;\n\t\t};\n\n\t\t/**\n\t\t * History.getBasePageUrl()\n\t\t * Fetches the Url of the directory of the current page\n\t\t * @return {String} basePageUrl\n\t\t */\n\t\tHistory.getBasePageUrl = function(){\n\t\t\t// Create\n\t\t\tvar basePageUrl = (History.getLocationHref()).replace(/[#\\?].*/,'').replace(/[^\\/]+$/,function(part,index,string){\n\t\t\t\treturn (/[^\\/]$/).test(part) ? '' : part;\n\t\t\t}).replace(/\\/+$/,'')+'/';\n\n\t\t\t// Return\n\t\t\treturn basePageUrl;\n\t\t};\n\n\t\t/**\n\t\t * History.getFullUrl(url)\n\t\t * Ensures that we have an absolute URL and not a relative URL\n\t\t * @param {string} url\n\t\t * @param {Boolean} allowBaseHref\n\t\t * @return {string} fullUrl\n\t\t */\n\t\tHistory.getFullUrl = function(url,allowBaseHref){\n\t\t\t// Prepare\n\t\t\tvar fullUrl = url, firstChar = url.substring(0,1);\n\t\t\tallowBaseHref = (typeof allowBaseHref === 'undefined') ? true : allowBaseHref;\n\n\t\t\t// Check\n\t\t\tif ( /[a-z]+\\:\\/\\//.test(url) ) {\n\t\t\t\t// Full URL\n\t\t\t}\n\t\t\telse if ( firstChar === '/' ) {\n\t\t\t\t// Root URL\n\t\t\t\tfullUrl = History.getRootUrl()+url.replace(/^\\/+/,'');\n\t\t\t}\n\t\t\telse if ( firstChar === '#' ) {\n\t\t\t\t// Anchor URL\n\t\t\t\tfullUrl = History.getPageUrl().replace(/#.*/,'')+url;\n\t\t\t}\n\t\t\telse if ( firstChar === '?' ) {\n\t\t\t\t// Query URL\n\t\t\t\tfullUrl = History.getPageUrl().replace(/[\\?#].*/,'')+url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Relative URL\n\t\t\t\tif ( allowBaseHref ) {\n\t\t\t\t\tfullUrl = History.getBaseUrl()+url.replace(/^(\\.\\/)+/,'');\n\t\t\t\t} else {\n\t\t\t\t\tfullUrl = History.getBasePageUrl()+url.replace(/^(\\.\\/)+/,'');\n\t\t\t\t}\n\t\t\t\t// We have an if condition above as we do not want hashes\n\t\t\t\t// which are relative to the baseHref in our URLs\n\t\t\t\t// as if the baseHref changes, then all our bookmarks\n\t\t\t\t// would now point to different locations\n\t\t\t\t// whereas the basePageUrl will always stay the same\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn fullUrl.replace(/\\#$/,'');\n\t\t};\n\n\t\t/**\n\t\t * History.getShortUrl(url)\n\t\t * Ensures that we have a relative URL and not a absolute URL\n\t\t * @param {string} url\n\t\t * @return {string} url\n\t\t */\n\t\tHistory.getShortUrl = function(url){\n\t\t\t// Prepare\n\t\t\tvar shortUrl = url, baseUrl = History.getBaseUrl(), rootUrl = History.getRootUrl();\n\n\t\t\t// Trim baseUrl\n\t\t\tif ( History.emulated.pushState ) {\n\t\t\t\t// We are in a if statement as when pushState is not emulated\n\t\t\t\t// The actual url these short urls are relative to can change\n\t\t\t\t// So within the same session, we the url may end up somewhere different\n\t\t\t\tshortUrl = shortUrl.replace(baseUrl,'');\n\t\t\t}\n\n\t\t\t// Trim rootUrl\n\t\t\tshortUrl = shortUrl.replace(rootUrl,'/');\n\n\t\t\t// Ensure we can still detect it as a state\n\t\t\tif ( History.isTraditionalAnchor(shortUrl) ) {\n\t\t\t\tshortUrl = './'+shortUrl;\n\t\t\t}\n\n\t\t\t// Clean It\n\t\t\tshortUrl = shortUrl.replace(/^(\\.\\/)+/g,'./').replace(/\\#$/,'');\n\n\t\t\t// Return\n\t\t\treturn shortUrl;\n\t\t};\n\n\t\t/**\n\t\t * History.getLocationHref(document)\n\t\t * Returns a normalized version of document.location.href\n\t\t * accounting for browser inconsistencies, etc.\n\t\t *\n\t\t * This URL will be URI-encoded and will include the hash\n\t\t *\n\t\t * @param {object} document\n\t\t * @return {string} url\n\t\t */\n\t\tHistory.getLocationHref = function(doc) {\n\t\t\tdoc = doc || document;\n\n\t\t\t// most of the time, this will be true\n\t\t\tif (doc.URL === doc.location.href)\n\t\t\t\treturn doc.location.href;\n\n\t\t\t// some versions of webkit URI-decode document.location.href\n\t\t\t// but they leave document.URL in an encoded state\n\t\t\tif (doc.location.href === decodeURIComponent(doc.URL))\n\t\t\t\treturn doc.URL;\n\n\t\t\t// FF 3.6 only updates document.URL when a page is reloaded\n\t\t\t// document.location.href is updated correctly\n\t\t\tif (doc.location.hash && decodeURIComponent(doc.location.href.replace(/^[^#]+/, \"\")) === doc.location.hash)\n\t\t\t\treturn doc.location.href;\n\n\t\t\tif (doc.URL.indexOf('#') == -1 && doc.location.href.indexOf('#') != -1)\n\t\t\t\treturn doc.location.href;\n\t\t\t\n\t\t\treturn doc.URL || doc.location.href;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// State Storage\n\n\t\t/**\n\t\t * History.store\n\t\t * The store for all session specific data\n\t\t */\n\t\tHistory.store = {};\n\n\t\t/**\n\t\t * History.idToState\n\t\t * 1-1: State ID to State Object\n\t\t */\n\t\tHistory.idToState = History.idToState||{};\n\n\t\t/**\n\t\t * History.stateToId\n\t\t * 1-1: State String to State ID\n\t\t */\n\t\tHistory.stateToId = History.stateToId||{};\n\n\t\t/**\n\t\t * History.urlToId\n\t\t * 1-1: State URL to State ID\n\t\t */\n\t\tHistory.urlToId = History.urlToId||{};\n\n\t\t/**\n\t\t * History.storedStates\n\t\t * Store the states in an array\n\t\t */\n\t\tHistory.storedStates = History.storedStates||[];\n\n\t\t/**\n\t\t * History.savedStates\n\t\t * Saved the states in an array\n\t\t */\n\t\tHistory.savedStates = History.savedStates||[];\n\n\t\t/**\n\t\t * History.noramlizeStore()\n\t\t * Noramlize the store by adding necessary values\n\t\t */\n\t\tHistory.normalizeStore = function(){\n\t\t\tHistory.store.idToState = History.store.idToState||{};\n\t\t\tHistory.store.urlToId = History.store.urlToId||{};\n\t\t\tHistory.store.stateToId = History.store.stateToId||{};\n\t\t};\n\n\t\t/**\n\t\t * History.getState()\n\t\t * Get an object containing the data, title and url of the current state\n\t\t * @param {Boolean} friendly\n\t\t * @param {Boolean} create\n\t\t * @return {Object} State\n\t\t */\n\t\tHistory.getState = function(friendly,create){\n\t\t\t// Prepare\n\t\t\tif ( typeof friendly === 'undefined' ) { friendly = true; }\n\t\t\tif ( typeof create === 'undefined' ) { create = true; }\n\n\t\t\t// Fetch\n\t\t\tvar State = History.getLastSavedState();\n\n\t\t\t// Create\n\t\t\tif ( !State && create ) {\n\t\t\t\tState = History.createStateObject();\n\t\t\t}\n\n\t\t\t// Adjust\n\t\t\tif ( friendly ) {\n\t\t\t\tState = History.cloneObject(State);\n\t\t\t\tState.url = State.cleanUrl||State.url;\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn State;\n\t\t};\n\n\t\t/**\n\t\t * History.getIdByState(State)\n\t\t * Gets a ID for a State\n\t\t * @param {State} newState\n\t\t * @return {String} id\n\t\t */\n\t\tHistory.getIdByState = function(newState){\n\n\t\t\t// Fetch ID\n\t\t\tvar id = History.extractId(newState.url),\n\t\t\t\tstr;\n\n\t\t\tif ( !id ) {\n\t\t\t\t// Find ID via State String\n\t\t\t\tstr = History.getStateString(newState);\n\t\t\t\tif ( typeof History.stateToId[str] !== 'undefined' ) {\n\t\t\t\t\tid = History.stateToId[str];\n\t\t\t\t}\n\t\t\t\telse if ( typeof History.store.stateToId[str] !== 'undefined' ) {\n\t\t\t\t\tid = History.store.stateToId[str];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Generate a new ID\n\t\t\t\t\twhile ( true ) {\n\t\t\t\t\t\tid = (new Date()).getTime() + String(Math.random()).replace(/\\D/g,'');\n\t\t\t\t\t\tif ( typeof History.idToState[id] === 'undefined' && typeof History.store.idToState[id] === 'undefined' ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply the new State to the ID\n\t\t\t\t\tHistory.stateToId[str] = id;\n\t\t\t\t\tHistory.idToState[id] = newState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return ID\n\t\t\treturn id;\n\t\t};\n\n\t\t/**\n\t\t * History.normalizeState(State)\n\t\t * Expands a State Object\n\t\t * @param {object} State\n\t\t * @return {object}\n\t\t */\n\t\tHistory.normalizeState = function(oldState){\n\t\t\t// Variables\n\t\t\tvar newState, dataNotEmpty;\n\n\t\t\t// Prepare\n\t\t\tif ( !oldState || (typeof oldState !== 'object') ) {\n\t\t\t\toldState = {};\n\t\t\t}\n\n\t\t\t// Check\n\t\t\tif ( typeof oldState.normalized !== 'undefined' ) {\n\t\t\t\treturn oldState;\n\t\t\t}\n\n\t\t\t// Adjust\n\t\t\tif ( !oldState.data || (typeof oldState.data !== 'object') ) {\n\t\t\t\toldState.data = {};\n\t\t\t}\n\n\t\t\t// ----------------------------------------------------------------\n\n\t\t\t// Create\n\t\t\tnewState = {};\n\t\t\tnewState.normalized = true;\n\t\t\tnewState.title = oldState.title||'';\n\t\t\tnewState.url = History.getFullUrl(oldState.url?oldState.url:(History.getLocationHref()));\n\t\t\tnewState.hash = History.getShortUrl(newState.url);\n\t\t\tnewState.data = History.cloneObject(oldState.data);\n\n\t\t\t// Fetch ID\n\t\t\tnewState.id = History.getIdByState(newState);\n\n\t\t\t// ----------------------------------------------------------------\n\n\t\t\t// Clean the URL\n\t\t\tnewState.cleanUrl = newState.url.replace(/\\??\\&_suid.*/,'');\n\t\t\tnewState.url = newState.cleanUrl;\n\n\t\t\t// Check to see if we have more than just a url\n\t\t\tdataNotEmpty = !History.isEmptyObject(newState.data);\n\n\t\t\t// Apply\n\t\t\tif ( (newState.title || dataNotEmpty) && History.options.disableSuid !== true ) {\n\t\t\t\t// Add ID to Hash\n\t\t\t\tnewState.hash = History.getShortUrl(newState.url).replace(/\\??\\&_suid.*/,'');\n\t\t\t\tif ( !/\\?/.test(newState.hash) ) {\n\t\t\t\t\tnewState.hash += '?';\n\t\t\t\t}\n\t\t\t\tnewState.hash += '&_suid='+newState.id;\n\t\t\t}\n\n\t\t\t// Create the Hashed URL\n\t\t\tnewState.hashedUrl = History.getFullUrl(newState.hash);\n\n\t\t\t// ----------------------------------------------------------------\n\n\t\t\t// Update the URL if we have a duplicate\n\t\t\tif ( (History.emulated.pushState || History.bugs.safariPoll) && History.hasUrlDuplicate(newState) ) {\n\t\t\t\tnewState.url = newState.hashedUrl;\n\t\t\t}\n\n\t\t\t// ----------------------------------------------------------------\n\n\t\t\t// Return\n\t\t\treturn newState;\n\t\t};\n\n\t\t/**\n\t\t * History.createStateObject(data,title,url)\n\t\t * Creates a object based on the data, title and url state params\n\t\t * @param {object} data\n\t\t * @param {string} title\n\t\t * @param {string} url\n\t\t * @return {object}\n\t\t */\n\t\tHistory.createStateObject = function(data,title,url){\n\t\t\t// Hashify\n\t\t\tvar State = {\n\t\t\t\t'data': data,\n\t\t\t\t'title': title,\n\t\t\t\t'url': url\n\t\t\t};\n\n\t\t\t// Expand the State\n\t\t\tState = History.normalizeState(State);\n\n\t\t\t// Return object\n\t\t\treturn State;\n\t\t};\n\n\t\t/**\n\t\t * History.getStateById(id)\n\t\t * Get a state by it's UID\n\t\t * @param {String} id\n\t\t */\n\t\tHistory.getStateById = function(id){\n\t\t\t// Prepare\n\t\t\tid = String(id);\n\n\t\t\t// Retrieve\n\t\t\tvar State = History.idToState[id] || History.store.idToState[id] || undefined;\n\n\t\t\t// Return State\n\t\t\treturn State;\n\t\t};\n\n\t\t/**\n\t\t * Get a State's String\n\t\t * @param {State} passedState\n\t\t */\n\t\tHistory.getStateString = function(passedState){\n\t\t\t// Prepare\n\t\t\tvar State, cleanedState, str;\n\n\t\t\t// Fetch\n\t\t\tState = History.normalizeState(passedState);\n\n\t\t\t// Clean\n\t\t\tcleanedState = {\n\t\t\t\tdata: State.data,\n\t\t\t\ttitle: passedState.title,\n\t\t\t\turl: passedState.url\n\t\t\t};\n\n\t\t\t// Fetch\n\t\t\tstr = JSON.stringify(cleanedState);\n\n\t\t\t// Return\n\t\t\treturn str;\n\t\t};\n\n\t\t/**\n\t\t * Get a State's ID\n\t\t * @param {State} passedState\n\t\t * @return {String} id\n\t\t */\n\t\tHistory.getStateId = function(passedState){\n\t\t\t// Prepare\n\t\t\tvar State, id;\n\n\t\t\t// Fetch\n\t\t\tState = History.normalizeState(passedState);\n\n\t\t\t// Fetch\n\t\t\tid = State.id;\n\n\t\t\t// Return\n\t\t\treturn id;\n\t\t};\n\n\t\t/**\n\t\t * History.getHashByState(State)\n\t\t * Creates a Hash for the State Object\n\t\t * @param {State} passedState\n\t\t * @return {String} hash\n\t\t */\n\t\tHistory.getHashByState = function(passedState){\n\t\t\t// Prepare\n\t\t\tvar State, hash;\n\n\t\t\t// Fetch\n\t\t\tState = History.normalizeState(passedState);\n\n\t\t\t// Hash\n\t\t\thash = State.hash;\n\n\t\t\t// Return\n\t\t\treturn hash;\n\t\t};\n\n\t\t/**\n\t\t * History.extractId(url_or_hash)\n\t\t * Get a State ID by it's URL or Hash\n\t\t * @param {string} url_or_hash\n\t\t * @return {string} id\n\t\t */\n\t\tHistory.extractId = function ( url_or_hash ) {\n\t\t\t// Prepare\n\t\t\tvar id,parts,url, tmp;\n\n\t\t\t// Extract\n\t\t\t\n\t\t\t// If the URL has a #, use the id from before the #\n\t\t\tif (url_or_hash.indexOf('#') != -1)\n\t\t\t{\n\t\t\t\ttmp = url_or_hash.split(\"#\")[0];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmp = url_or_hash;\n\t\t\t}\n\t\t\t\n\t\t\tparts = /(.*)\\&_suid=([0-9]+)$/.exec(tmp);\n\t\t\turl = parts ? (parts[1]||url_or_hash) : url_or_hash;\n\t\t\tid = parts ? String(parts[2]||'') : '';\n\n\t\t\t// Return\n\t\t\treturn id||false;\n\t\t};\n\n\t\t/**\n\t\t * History.isTraditionalAnchor\n\t\t * Checks to see if the url is a traditional anchor or not\n\t\t * @param {String} url_or_hash\n\t\t * @return {Boolean}\n\t\t */\n\t\tHistory.isTraditionalAnchor = function(url_or_hash){\n\t\t\t// Check\n\t\t\tvar isTraditional = !(/[\\/\\?\\.]/.test(url_or_hash));\n\n\t\t\t// Return\n\t\t\treturn isTraditional;\n\t\t};\n\n\t\t/**\n\t\t * History.extractState\n\t\t * Get a State by it's URL or Hash\n\t\t * @param {String} url_or_hash\n\t\t * @return {State|null}\n\t\t */\n\t\tHistory.extractState = function(url_or_hash,create){\n\t\t\t// Prepare\n\t\t\tvar State = null, id, url;\n\t\t\tcreate = create||false;\n\n\t\t\t// Fetch SUID\n\t\t\tid = History.extractId(url_or_hash);\n\t\t\tif ( id ) {\n\t\t\t\tState = History.getStateById(id);\n\t\t\t}\n\n\t\t\t// Fetch SUID returned no State\n\t\t\tif ( !State ) {\n\t\t\t\t// Fetch URL\n\t\t\t\turl = History.getFullUrl(url_or_hash);\n\n\t\t\t\t// Check URL\n\t\t\t\tid = History.getIdByUrl(url)||false;\n\t\t\t\tif ( id ) {\n\t\t\t\t\tState = History.getStateById(id);\n\t\t\t\t}\n\n\t\t\t\t// Create State\n\t\t\t\tif ( !State && create && !History.isTraditionalAnchor(url_or_hash) ) {\n\t\t\t\t\tState = History.createStateObject(null,null,url);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn State;\n\t\t};\n\n\t\t/**\n\t\t * History.getIdByUrl()\n\t\t * Get a State ID by a State URL\n\t\t */\n\t\tHistory.getIdByUrl = function(url){\n\t\t\t// Fetch\n\t\t\tvar id = History.urlToId[url] || History.store.urlToId[url] || undefined;\n\n\t\t\t// Return\n\t\t\treturn id;\n\t\t};\n\n\t\t/**\n\t\t * History.getLastSavedState()\n\t\t * Get an object containing the data, title and url of the current state\n\t\t * @return {Object} State\n\t\t */\n\t\tHistory.getLastSavedState = function(){\n\t\t\treturn History.savedStates[History.savedStates.length-1]||undefined;\n\t\t};\n\n\t\t/**\n\t\t * History.getLastStoredState()\n\t\t * Get an object containing the data, title and url of the current state\n\t\t * @return {Object} State\n\t\t */\n\t\tHistory.getLastStoredState = function(){\n\t\t\treturn History.storedStates[History.storedStates.length-1]||undefined;\n\t\t};\n\n\t\t/**\n\t\t * History.hasUrlDuplicate\n\t\t * Checks if a Url will have a url conflict\n\t\t * @param {Object} newState\n\t\t * @return {Boolean} hasDuplicate\n\t\t */\n\t\tHistory.hasUrlDuplicate = function(newState) {\n\t\t\t// Prepare\n\t\t\tvar hasDuplicate = false,\n\t\t\t\toldState;\n\n\t\t\t// Fetch\n\t\t\toldState = History.extractState(newState.url);\n\n\t\t\t// Check\n\t\t\thasDuplicate = oldState && oldState.id !== newState.id;\n\n\t\t\t// Return\n\t\t\treturn hasDuplicate;\n\t\t};\n\n\t\t/**\n\t\t * History.storeState\n\t\t * Store a State\n\t\t * @param {Object} newState\n\t\t * @return {Object} newState\n\t\t */\n\t\tHistory.storeState = function(newState){\n\t\t\t// Store the State\n\t\t\tHistory.urlToId[newState.url] = newState.id;\n\n\t\t\t// Push the State\n\t\t\tHistory.storedStates.push(History.cloneObject(newState));\n\n\t\t\t// Return newState\n\t\t\treturn newState;\n\t\t};\n\n\t\t/**\n\t\t * History.isLastSavedState(newState)\n\t\t * Tests to see if the state is the last state\n\t\t * @param {Object} newState\n\t\t * @return {boolean} isLast\n\t\t */\n\t\tHistory.isLastSavedState = function(newState){\n\t\t\t// Prepare\n\t\t\tvar isLast = false,\n\t\t\t\tnewId, oldState, oldId;\n\n\t\t\t// Check\n\t\t\tif ( History.savedStates.length ) {\n\t\t\t\tnewId = newState.id;\n\t\t\t\toldState = History.getLastSavedState();\n\t\t\t\toldId = oldState.id;\n\n\t\t\t\t// Check\n\t\t\t\tisLast = (newId === oldId);\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn isLast;\n\t\t};\n\n\t\t/**\n\t\t * History.saveState\n\t\t * Push a State\n\t\t * @param {Object} newState\n\t\t * @return {boolean} changed\n\t\t */\n\t\tHistory.saveState = function(newState){\n\t\t\t// Check Hash\n\t\t\tif ( History.isLastSavedState(newState) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Push the State\n\t\t\tHistory.savedStates.push(History.cloneObject(newState));\n\n\t\t\t// Return true\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.getStateByIndex()\n\t\t * Gets a state by the index\n\t\t * @param {integer} index\n\t\t * @return {Object}\n\t\t */\n\t\tHistory.getStateByIndex = function(index){\n\t\t\t// Prepare\n\t\t\tvar State = null;\n\n\t\t\t// Handle\n\t\t\tif ( typeof index === 'undefined' ) {\n\t\t\t\t// Get the last inserted\n\t\t\t\tState = History.savedStates[History.savedStates.length-1];\n\t\t\t}\n\t\t\telse if ( index < 0 ) {\n\t\t\t\t// Get from the end\n\t\t\t\tState = History.savedStates[History.savedStates.length+index];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Get from the beginning\n\t\t\t\tState = History.savedStates[index];\n\t\t\t}\n\n\t\t\t// Return State\n\t\t\treturn State;\n\t\t};\n\t\t\n\t\t/**\n\t\t * History.getCurrentIndex()\n\t\t * Gets the current index\n\t\t * @return (integer)\n\t\t*/\n\t\tHistory.getCurrentIndex = function(){\n\t\t\t// Prepare\n\t\t\tvar index = null;\n\t\t\t\n\t\t\t// No states saved\n\t\t\tif(History.savedStates.length < 1) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tindex = History.savedStates.length-1;\n\t\t\t}\n\t\t\treturn index;\n\t\t};\n\n\t\t// ====================================================================\n\t\t// Hash Helpers\n\n\t\t/**\n\t\t * History.getHash()\n\t\t * @param {Location=} location\n\t\t * Gets the current document hash\n\t\t * Note: unlike location.hash, this is guaranteed to return the escaped hash in all browsers\n\t\t * @return {string}\n\t\t */\n\t\tHistory.getHash = function(doc){\n\t\t\tvar url = History.getLocationHref(doc),\n\t\t\t\thash;\n\t\t\thash = History.getHashByUrl(url);\n\t\t\treturn hash;\n\t\t};\n\n\t\t/**\n\t\t * History.unescapeHash()\n\t\t * normalize and Unescape a Hash\n\t\t * @param {String} hash\n\t\t * @return {string}\n\t\t */\n\t\tHistory.unescapeHash = function(hash){\n\t\t\t// Prepare\n\t\t\tvar result = History.normalizeHash(hash);\n\n\t\t\t// Unescape hash\n\t\t\tresult = decodeURIComponent(result);\n\n\t\t\t// Return result\n\t\t\treturn result;\n\t\t};\n\n\t\t/**\n\t\t * History.normalizeHash()\n\t\t * normalize a hash across browsers\n\t\t * @return {string}\n\t\t */\n\t\tHistory.normalizeHash = function(hash){\n\t\t\t// Prepare\n\t\t\tvar result = hash.replace(/[^#]*#/,'').replace(/#.*/, '');\n\n\t\t\t// Return result\n\t\t\treturn result;\n\t\t};\n\n\t\t/**\n\t\t * History.setHash(hash)\n\t\t * Sets the document hash\n\t\t * @param {string} hash\n\t\t * @return {History}\n\t\t */\n\t\tHistory.setHash = function(hash,queue){\n\t\t\t// Prepare\n\t\t\tvar State, pageUrl;\n\n\t\t\t// Handle Queueing\n\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t// Wait + Push to Queue\n\t\t\t\t//History.debug('History.setHash: we must wait', arguments);\n\t\t\t\tHistory.pushQueue({\n\t\t\t\t\tscope: History,\n\t\t\t\t\tcallback: History.setHash,\n\t\t\t\t\targs: arguments,\n\t\t\t\t\tqueue: queue\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Log\n\t\t\t//History.debug('History.setHash: called',hash);\n\n\t\t\t// Make Busy + Continue\n\t\t\tHistory.busy(true);\n\n\t\t\t// Check if hash is a state\n\t\t\tState = History.extractState(hash,true);\n\t\t\tif ( State && !History.emulated.pushState ) {\n\t\t\t\t// Hash is a state so skip the setHash\n\t\t\t\t//History.debug('History.setHash: Hash is a state so skipping the hash set with a direct pushState call',arguments);\n\n\t\t\t\t// PushState\n\t\t\t\tHistory.pushState(State.data,State.title,State.url,false);\n\t\t\t}\n\t\t\telse if ( History.getHash() !== hash ) {\n\t\t\t\t// Hash is a proper hash, so apply it\n\n\t\t\t\t// Handle browser bugs\n\t\t\t\tif ( History.bugs.setHash ) {\n\t\t\t\t\t// Fix Safari Bug https://bugs.webkit.org/show_bug.cgi?id=56249\n\n\t\t\t\t\t// Fetch the base page\n\t\t\t\t\tpageUrl = History.getPageUrl();\n\n\t\t\t\t\t// Safari hash apply\n\t\t\t\t\tHistory.pushState(null,null,pageUrl+'#'+hash,false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Normal hash apply\n\t\t\t\t\tdocument.location.hash = hash;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\t\t/**\n\t\t * History.escape()\n\t\t * normalize and Escape a Hash\n\t\t * @return {string}\n\t\t */\n\t\tHistory.escapeHash = function(hash){\n\t\t\t// Prepare\n\t\t\tvar result = History.normalizeHash(hash);\n\n\t\t\t// Escape hash\n\t\t\tresult = window.encodeURIComponent(result);\n\n\t\t\t// IE6 Escape Bug\n\t\t\tif ( !History.bugs.hashEscape ) {\n\t\t\t\t// Restore common parts\n\t\t\t\tresult = result\n\t\t\t\t\t.replace(/\\%21/g,'!')\n\t\t\t\t\t.replace(/\\%26/g,'&')\n\t\t\t\t\t.replace(/\\%3D/g,'=')\n\t\t\t\t\t.replace(/\\%3F/g,'?');\n\t\t\t}\n\n\t\t\t// Return result\n\t\t\treturn result;\n\t\t};\n\n\t\t/**\n\t\t * History.getHashByUrl(url)\n\t\t * Extracts the Hash from a URL\n\t\t * @param {string} url\n\t\t * @return {string} url\n\t\t */\n\t\tHistory.getHashByUrl = function(url){\n\t\t\t// Extract the hash\n\t\t\tvar hash = String(url)\n\t\t\t\t.replace(/([^#]*)#?([^#]*)#?(.*)/, '$2')\n\t\t\t\t;\n\n\t\t\t// Unescape hash\n\t\t\thash = History.unescapeHash(hash);\n\n\t\t\t// Return hash\n\t\t\treturn hash;\n\t\t};\n\n\t\t/**\n\t\t * History.setTitle(title)\n\t\t * Applies the title to the document\n\t\t * @param {State} newState\n\t\t * @return {Boolean}\n\t\t */\n\t\tHistory.setTitle = function(newState){\n\t\t\t// Prepare\n\t\t\tvar title = newState.title,\n\t\t\t\tfirstState;\n\n\t\t\t// Initial\n\t\t\tif ( !title ) {\n\t\t\t\tfirstState = History.getStateByIndex(0);\n\t\t\t\tif ( firstState && firstState.url === newState.url ) {\n\t\t\t\t\ttitle = firstState.title||History.options.initialTitle;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply\n\t\t\ttry {\n\t\t\t\tdocument.getElementsByTagName('title')[0].innerHTML = title.replace('<','&lt;').replace('>','&gt;').replace(' & ',' &amp; ');\n\t\t\t}\n\t\t\tcatch ( Exception ) { }\n\t\t\tdocument.title = title;\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// Queueing\n\n\t\t/**\n\t\t * History.queues\n\t\t * The list of queues to use\n\t\t * First In, First Out\n\t\t */\n\t\tHistory.queues = [];\n\n\t\t/**\n\t\t * History.busy(value)\n\t\t * @param {boolean} value [optional]\n\t\t * @return {boolean} busy\n\t\t */\n\t\tHistory.busy = function(value){\n\t\t\t// Apply\n\t\t\tif ( typeof value !== 'undefined' ) {\n\t\t\t\t//History.debug('History.busy: changing ['+(History.busy.flag||false)+'] to ['+(value||false)+']', History.queues.length);\n\t\t\t\tHistory.busy.flag = value;\n\t\t\t}\n\t\t\t// Default\n\t\t\telse if ( typeof History.busy.flag === 'undefined' ) {\n\t\t\t\tHistory.busy.flag = false;\n\t\t\t}\n\n\t\t\t// Queue\n\t\t\tif ( !History.busy.flag ) {\n\t\t\t\t// Execute the next item in the queue\n\t\t\t\tclearTimeout(History.busy.timeout);\n\t\t\t\tvar fireNext = function(){\n\t\t\t\t\tvar i, queue, item;\n\t\t\t\t\tif ( History.busy.flag ) return;\n\t\t\t\t\tfor ( i=History.queues.length-1; i >= 0; --i ) {\n\t\t\t\t\t\tqueue = History.queues[i];\n\t\t\t\t\t\tif ( queue.length === 0 ) continue;\n\t\t\t\t\t\titem = queue.shift();\n\t\t\t\t\t\tHistory.fireQueueItem(item);\n\t\t\t\t\t\tHistory.busy.timeout = setTimeout(fireNext,History.options.busyDelay);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tHistory.busy.timeout = setTimeout(fireNext,History.options.busyDelay);\n\t\t\t}\n\n\t\t\t// Return\n\t\t\treturn History.busy.flag;\n\t\t};\n\n\t\t/**\n\t\t * History.busy.flag\n\t\t */\n\t\tHistory.busy.flag = false;\n\n\t\t/**\n\t\t * History.fireQueueItem(item)\n\t\t * Fire a Queue Item\n\t\t * @param {Object} item\n\t\t * @return {Mixed} result\n\t\t */\n\t\tHistory.fireQueueItem = function(item){\n\t\t\treturn item.callback.apply(item.scope||History,item.args||[]);\n\t\t};\n\n\t\t/**\n\t\t * History.pushQueue(callback,args)\n\t\t * Add an item to the queue\n\t\t * @param {Object} item [scope,callback,args,queue]\n\t\t */\n\t\tHistory.pushQueue = function(item){\n\t\t\t// Prepare the queue\n\t\t\tHistory.queues[item.queue||0] = History.queues[item.queue||0]||[];\n\n\t\t\t// Add to the queue\n\t\t\tHistory.queues[item.queue||0].push(item);\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\t\t/**\n\t\t * History.queue (item,queue), (func,queue), (func), (item)\n\t\t * Either firs the item now if not busy, or adds it to the queue\n\t\t */\n\t\tHistory.queue = function(item,queue){\n\t\t\t// Prepare\n\t\t\tif ( typeof item === 'function' ) {\n\t\t\t\titem = {\n\t\t\t\t\tcallback: item\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ( typeof queue !== 'undefined' ) {\n\t\t\t\titem.queue = queue;\n\t\t\t}\n\n\t\t\t// Handle\n\t\t\tif ( History.busy() ) {\n\t\t\t\tHistory.pushQueue(item);\n\t\t\t} else {\n\t\t\t\tHistory.fireQueueItem(item);\n\t\t\t}\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\t\t/**\n\t\t * History.clearQueue()\n\t\t * Clears the Queue\n\t\t */\n\t\tHistory.clearQueue = function(){\n\t\t\tHistory.busy.flag = false;\n\t\t\tHistory.queues = [];\n\t\t\treturn History;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// IE Bug Fix\n\n\t\t/**\n\t\t * History.stateChanged\n\t\t * States whether or not the state has changed since the last double check was initialised\n\t\t */\n\t\tHistory.stateChanged = false;\n\n\t\t/**\n\t\t * History.doubleChecker\n\t\t * Contains the timeout used for the double checks\n\t\t */\n\t\tHistory.doubleChecker = false;\n\n\t\t/**\n\t\t * History.doubleCheckComplete()\n\t\t * Complete a double check\n\t\t * @return {History}\n\t\t */\n\t\tHistory.doubleCheckComplete = function(){\n\t\t\t// Update\n\t\t\tHistory.stateChanged = true;\n\n\t\t\t// Clear\n\t\t\tHistory.doubleCheckClear();\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\t\t/**\n\t\t * History.doubleCheckClear()\n\t\t * Clear a double check\n\t\t * @return {History}\n\t\t */\n\t\tHistory.doubleCheckClear = function(){\n\t\t\t// Clear\n\t\t\tif ( History.doubleChecker ) {\n\t\t\t\tclearTimeout(History.doubleChecker);\n\t\t\t\tHistory.doubleChecker = false;\n\t\t\t}\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\t\t/**\n\t\t * History.doubleCheck()\n\t\t * Create a double check\n\t\t * @return {History}\n\t\t */\n\t\tHistory.doubleCheck = function(tryAgain){\n\t\t\t// Reset\n\t\t\tHistory.stateChanged = false;\n\t\t\tHistory.doubleCheckClear();\n\n\t\t\t// Fix IE6,IE7 bug where calling history.back or history.forward does not actually change the hash (whereas doing it manually does)\n\t\t\t// Fix Safari 5 bug where sometimes the state does not change: https://bugs.webkit.org/show_bug.cgi?id=42940\n\t\t\tif ( History.bugs.ieDoubleCheck ) {\n\t\t\t\t// Apply Check\n\t\t\t\tHistory.doubleChecker = setTimeout(\n\t\t\t\t\tfunction(){\n\t\t\t\t\t\tHistory.doubleCheckClear();\n\t\t\t\t\t\tif ( !History.stateChanged ) {\n\t\t\t\t\t\t\t//History.debug('History.doubleCheck: State has not yet changed, trying again', arguments);\n\t\t\t\t\t\t\t// Re-Attempt\n\t\t\t\t\t\t\ttryAgain();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\tHistory.options.doubleCheckInterval\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// Safari Bug Fix\n\n\t\t/**\n\t\t * History.safariStatePoll()\n\t\t * Poll the current state\n\t\t * @return {History}\n\t\t */\n\t\tHistory.safariStatePoll = function(){\n\t\t\t// Poll the URL\n\n\t\t\t// Get the Last State which has the new URL\n\t\t\tvar\n\t\t\t\turlState = History.extractState(History.getLocationHref()),\n\t\t\t\tnewState;\n\n\t\t\t// Check for a difference\n\t\t\tif ( !History.isLastSavedState(urlState) ) {\n\t\t\t\tnewState = urlState;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if we have a state with that url\n\t\t\t// If not create it\n\t\t\tif ( !newState ) {\n\t\t\t\t//History.debug('History.safariStatePoll: new');\n\t\t\t\tnewState = History.createStateObject();\n\t\t\t}\n\n\t\t\t// Apply the New State\n\t\t\t//History.debug('History.safariStatePoll: trigger');\n\t\t\tHistory.Adapter.trigger(window,'popstate');\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// State Aliases\n\n\t\t/**\n\t\t * History.back(queue)\n\t\t * Send the browser history back one item\n\t\t * @param {Integer} queue [optional]\n\t\t */\n\t\tHistory.back = function(queue){\n\t\t\t//History.debug('History.back: called', arguments);\n\n\t\t\t// Handle Queueing\n\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t// Wait + Push to Queue\n\t\t\t\t//History.debug('History.back: we must wait', arguments);\n\t\t\t\tHistory.pushQueue({\n\t\t\t\t\tscope: History,\n\t\t\t\t\tcallback: History.back,\n\t\t\t\t\targs: arguments,\n\t\t\t\t\tqueue: queue\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Make Busy + Continue\n\t\t\tHistory.busy(true);\n\n\t\t\t// Fix certain browser bugs that prevent the state from changing\n\t\t\tHistory.doubleCheck(function(){\n\t\t\t\tHistory.back(false);\n\t\t\t});\n\n\t\t\t// Go back\n\t\t\thistory.go(-1);\n\n\t\t\t// End back closure\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.forward(queue)\n\t\t * Send the browser history forward one item\n\t\t * @param {Integer} queue [optional]\n\t\t */\n\t\tHistory.forward = function(queue){\n\t\t\t//History.debug('History.forward: called', arguments);\n\n\t\t\t// Handle Queueing\n\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t// Wait + Push to Queue\n\t\t\t\t//History.debug('History.forward: we must wait', arguments);\n\t\t\t\tHistory.pushQueue({\n\t\t\t\t\tscope: History,\n\t\t\t\t\tcallback: History.forward,\n\t\t\t\t\targs: arguments,\n\t\t\t\t\tqueue: queue\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Make Busy + Continue\n\t\t\tHistory.busy(true);\n\n\t\t\t// Fix certain browser bugs that prevent the state from changing\n\t\t\tHistory.doubleCheck(function(){\n\t\t\t\tHistory.forward(false);\n\t\t\t});\n\n\t\t\t// Go forward\n\t\t\thistory.go(1);\n\n\t\t\t// End forward closure\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * History.go(index,queue)\n\t\t * Send the browser history back or forward index times\n\t\t * @param {Integer} queue [optional]\n\t\t */\n\t\tHistory.go = function(index,queue){\n\t\t\t//History.debug('History.go: called', arguments);\n\n\t\t\t// Prepare\n\t\t\tvar i;\n\n\t\t\t// Handle\n\t\t\tif ( index > 0 ) {\n\t\t\t\t// Forward\n\t\t\t\tfor ( i=1; i<=index; ++i ) {\n\t\t\t\t\tHistory.forward(queue);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( index < 0 ) {\n\t\t\t\t// Backward\n\t\t\t\tfor ( i=-1; i>=index; --i ) {\n\t\t\t\t\tHistory.back(queue);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('History.go: History.go requires a positive or negative integer passed.');\n\t\t\t}\n\n\t\t\t// Chain\n\t\t\treturn History;\n\t\t};\n\n\n\t\t// ====================================================================\n\t\t// HTML5 State Support\n\n\t\t// Non-Native pushState Implementation\n\t\tif ( History.emulated.pushState ) {\n\t\t\t/*\n\t\t\t * Provide Skeleton for HTML4 Browsers\n\t\t\t */\n\n\t\t\t// Prepare\n\t\t\tvar emptyFunction = function(){};\n\t\t\tHistory.pushState = History.pushState||emptyFunction;\n\t\t\tHistory.replaceState = History.replaceState||emptyFunction;\n\t\t} // History.emulated.pushState\n\n\t\t// Native pushState Implementation\n\t\telse {\n\t\t\t/*\n\t\t\t * Use native HTML5 History API Implementation\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * History.onPopState(event,extra)\n\t\t\t * Refresh the Current State\n\t\t\t */\n\t\t\tHistory.onPopState = function(event,extra){\n\t\t\t\t// Prepare\n\t\t\t\tvar stateId = false, newState = false, currentHash, currentState;\n\n\t\t\t\t// Reset the double check\n\t\t\t\tHistory.doubleCheckComplete();\n\n\t\t\t\t// Check for a Hash, and handle apporiatly\n\t\t\t\tcurrentHash = History.getHash();\n\t\t\t\tif ( currentHash ) {\n\t\t\t\t\t// Expand Hash\n\t\t\t\t\tcurrentState = History.extractState(currentHash||History.getLocationHref(),true);\n\t\t\t\t\tif ( currentState ) {\n\t\t\t\t\t\t// We were able to parse it, it must be a State!\n\t\t\t\t\t\t// Let's forward to replaceState\n\t\t\t\t\t\t//History.debug('History.onPopState: state anchor', currentHash, currentState);\n\t\t\t\t\t\tHistory.replaceState(currentState.data, currentState.title, currentState.url, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Traditional Anchor\n\t\t\t\t\t\t//History.debug('History.onPopState: traditional anchor', currentHash);\n\t\t\t\t\t\tHistory.Adapter.trigger(window,'anchorchange');\n\t\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\t}\n\n\t\t\t\t\t// We don't care for hashes\n\t\t\t\t\tHistory.expectedStateId = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Ensure\n\t\t\t\tstateId = History.Adapter.extractEventData('state',event,extra) || false;\n\n\t\t\t\t// Fetch State\n\t\t\t\tif ( stateId ) {\n\t\t\t\t\t// Vanilla: Back/forward button was used\n\t\t\t\t\tnewState = History.getStateById(stateId);\n\t\t\t\t}\n\t\t\t\telse if ( History.expectedStateId ) {\n\t\t\t\t\t// Vanilla: A new state was pushed, and popstate was called manually\n\t\t\t\t\tnewState = History.getStateById(History.expectedStateId);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Initial State\n\t\t\t\t\tnewState = History.extractState(History.getLocationHref());\n\t\t\t\t}\n\n\t\t\t\t// The State did not exist in our store\n\t\t\t\tif ( !newState ) {\n\t\t\t\t\t// Regenerate the State\n\t\t\t\t\tnewState = History.createStateObject(null,null,History.getLocationHref());\n\t\t\t\t}\n\n\t\t\t\t// Clean\n\t\t\t\tHistory.expectedStateId = false;\n\n\t\t\t\t// Check if we are the same state\n\t\t\t\tif ( History.isLastSavedState(newState) ) {\n\t\t\t\t\t// There has been no change (just the page's hash has finally propagated)\n\t\t\t\t\t//History.debug('History.onPopState: no change', newState, History.savedStates);\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Store the State\n\t\t\t\tHistory.storeState(newState);\n\t\t\t\tHistory.saveState(newState);\n\n\t\t\t\t// Force update of the title\n\t\t\t\tHistory.setTitle(newState);\n\n\t\t\t\t// Fire Our Event\n\t\t\t\tHistory.Adapter.trigger(window,'statechange');\n\t\t\t\tHistory.busy(false);\n\n\t\t\t\t// Return true\n\t\t\t\treturn true;\n\t\t\t};\n\t\t\tHistory.Adapter.bind(window,'popstate',History.onPopState);\n\n\t\t\t/**\n\t\t\t * History.pushState(data,title,url)\n\t\t\t * Add a new State to the history object, become it, and trigger onpopstate\n\t\t\t * We have to trigger for HTML4 compatibility\n\t\t\t * @param {object} data\n\t\t\t * @param {string} title\n\t\t\t * @param {string} url\n\t\t\t * @return {true}\n\t\t\t */\n\t\t\tHistory.pushState = function(data,title,url,queue){\n\t\t\t\t//History.debug('History.pushState: called', arguments);\n\n\t\t\t\t// Check the State\n\t\t\t\tif ( History.getHashByUrl(url) && History.emulated.pushState ) {\n\t\t\t\t\tthrow new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');\n\t\t\t\t}\n\n\t\t\t\t// Handle Queueing\n\t\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t\t// Wait + Push to Queue\n\t\t\t\t\t//History.debug('History.pushState: we must wait', arguments);\n\t\t\t\t\tHistory.pushQueue({\n\t\t\t\t\t\tscope: History,\n\t\t\t\t\t\tcallback: History.pushState,\n\t\t\t\t\t\targs: arguments,\n\t\t\t\t\t\tqueue: queue\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Make Busy + Continue\n\t\t\t\tHistory.busy(true);\n\n\t\t\t\t// Create the newState\n\t\t\t\tvar newState = History.createStateObject(data,title,url);\n\n\t\t\t\t// Check it\n\t\t\t\tif ( History.isLastSavedState(newState) ) {\n\t\t\t\t\t// Won't be a change\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Store the newState\n\t\t\t\t\tHistory.storeState(newState);\n\t\t\t\t\tHistory.expectedStateId = newState.id;\n\n\t\t\t\t\t// Push the newState\n\t\t\t\t\thistory.pushState(newState.id,newState.title,newState.url);\n\n\t\t\t\t\t// Fire HTML5 Event\n\t\t\t\t\tHistory.Adapter.trigger(window,'popstate');\n\t\t\t\t}\n\n\t\t\t\t// End pushState closure\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * History.replaceState(data,title,url)\n\t\t\t * Replace the State and trigger onpopstate\n\t\t\t * We have to trigger for HTML4 compatibility\n\t\t\t * @param {object} data\n\t\t\t * @param {string} title\n\t\t\t * @param {string} url\n\t\t\t * @return {true}\n\t\t\t */\n\t\t\tHistory.replaceState = function(data,title,url,queue){\n\t\t\t\t//History.debug('History.replaceState: called', arguments);\n\n\t\t\t\t// Check the State\n\t\t\t\tif ( History.getHashByUrl(url) && History.emulated.pushState ) {\n\t\t\t\t\tthrow new Error('History.js does not support states with fragement-identifiers (hashes/anchors).');\n\t\t\t\t}\n\n\t\t\t\t// Handle Queueing\n\t\t\t\tif ( queue !== false && History.busy() ) {\n\t\t\t\t\t// Wait + Push to Queue\n\t\t\t\t\t//History.debug('History.replaceState: we must wait', arguments);\n\t\t\t\t\tHistory.pushQueue({\n\t\t\t\t\t\tscope: History,\n\t\t\t\t\t\tcallback: History.replaceState,\n\t\t\t\t\t\targs: arguments,\n\t\t\t\t\t\tqueue: queue\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Make Busy + Continue\n\t\t\t\tHistory.busy(true);\n\n\t\t\t\t// Create the newState\n\t\t\t\tvar newState = History.createStateObject(data,title,url);\n\n\t\t\t\t// Check it\n\t\t\t\tif ( History.isLastSavedState(newState) ) {\n\t\t\t\t\t// Won't be a change\n\t\t\t\t\tHistory.busy(false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Store the newState\n\t\t\t\t\tHistory.storeState(newState);\n\t\t\t\t\tHistory.expectedStateId = newState.id;\n\n\t\t\t\t\t// Push the newState\n\t\t\t\t\thistory.replaceState(newState.id,newState.title,newState.url);\n\n\t\t\t\t\t// Fire HTML5 Event\n\t\t\t\t\tHistory.Adapter.trigger(window,'popstate');\n\t\t\t\t}\n\n\t\t\t\t// End replaceState closure\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t} // !History.emulated.pushState\n\n\n\t\t// ====================================================================\n\t\t// Initialise\n\n\t\t/**\n\t\t * Load the Store\n\t\t */\n\t\tif ( sessionStorage ) {\n\t\t\t// Fetch\n\t\t\ttry {\n\t\t\t\tHistory.store = JSON.parse(sessionStorage.getItem('History.store'))||{};\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t\tHistory.store = {};\n\t\t\t}\n\n\t\t\t// Normalize\n\t\t\tHistory.normalizeStore();\n\t\t}\n\t\telse {\n\t\t\t// Default Load\n\t\t\tHistory.store = {};\n\t\t\tHistory.normalizeStore();\n\t\t}\n\n\t\t/**\n\t\t * Clear Intervals on exit to prevent memory leaks\n\t\t */\n\t\tHistory.Adapter.bind(window,\"unload\",History.clearAllIntervals);\n\n\t\t/**\n\t\t * Create the initial State\n\t\t */\n\t\tHistory.saveState(History.storeState(History.extractState(History.getLocationHref(),true)));\n\n\t\t/**\n\t\t * Bind for Saving Store\n\t\t */\n\t\tif ( sessionStorage ) {\n\t\t\t// When the page is closed\n\t\t\tHistory.onUnload = function(){\n\t\t\t\t// Prepare\n\t\t\t\tvar\tcurrentStore, item, currentStoreString;\n\n\t\t\t\t// Fetch\n\t\t\t\ttry {\n\t\t\t\t\tcurrentStore = JSON.parse(sessionStorage.getItem('History.store'))||{};\n\t\t\t\t}\n\t\t\t\tcatch ( err ) {\n\t\t\t\t\tcurrentStore = {};\n\t\t\t\t}\n\n\t\t\t\t// Ensure\n\t\t\t\tcurrentStore.idToState = currentStore.idToState || {};\n\t\t\t\tcurrentStore.urlToId = currentStore.urlToId || {};\n\t\t\t\tcurrentStore.stateToId = currentStore.stateToId || {};\n\n\t\t\t\t// Sync\n\t\t\t\tfor ( item in History.idToState ) {\n\t\t\t\t\tif ( !History.idToState.hasOwnProperty(item) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentStore.idToState[item] = History.idToState[item];\n\t\t\t\t}\n\t\t\t\tfor ( item in History.urlToId ) {\n\t\t\t\t\tif ( !History.urlToId.hasOwnProperty(item) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentStore.urlToId[item] = History.urlToId[item];\n\t\t\t\t}\n\t\t\t\tfor ( item in History.stateToId ) {\n\t\t\t\t\tif ( !History.stateToId.hasOwnProperty(item) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentStore.stateToId[item] = History.stateToId[item];\n\t\t\t\t}\n\n\t\t\t\t// Update\n\t\t\t\tHistory.store = currentStore;\n\t\t\t\tHistory.normalizeStore();\n\n\t\t\t\t// In Safari, going into Private Browsing mode causes the\n\t\t\t\t// Session Storage object to still exist but if you try and use\n\t\t\t\t// or set any property/function of it it throws the exception\n\t\t\t\t// \"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to\n\t\t\t\t// add something to storage that exceeded the quota.\" infinitely\n\t\t\t\t// every second.\n\t\t\t\tcurrentStoreString = JSON.stringify(currentStore);\n\t\t\t\ttry {\n\t\t\t\t\t// Store\n\t\t\t\t\tsessionStorage.setItem('History.store', currentStoreString);\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tif (e.code === DOMException.QUOTA_EXCEEDED_ERR) {\n\t\t\t\t\t\tif (sessionStorage.length) {\n\t\t\t\t\t\t\t// Workaround for a bug seen on iPads. Sometimes the quota exceeded error comes up and simply\n\t\t\t\t\t\t\t// removing/resetting the storage can work.\n\t\t\t\t\t\t\tsessionStorage.removeItem('History.store');\n\t\t\t\t\t\t\tsessionStorage.setItem('History.store', currentStoreString);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Otherwise, we're probably private browsing in Safari, so we'll ignore the exception.\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// For Internet Explorer\n\t\t\tHistory.intervalList.push(setInterval(History.onUnload,History.options.storeInterval));\n\n\t\t\t// For Other Browsers\n\t\t\tHistory.Adapter.bind(window,'beforeunload',History.onUnload);\n\t\t\tHistory.Adapter.bind(window,'unload',History.onUnload);\n\n\t\t\t// Both are enabled for consistency\n\t\t}\n\n\t\t// Non-Native pushState Implementation\n\t\tif ( !History.emulated.pushState ) {\n\t\t\t// Be aware, the following is only for native pushState implementations\n\t\t\t// If you are wanting to include something for all browsers\n\t\t\t// Then include it above this if block\n\n\t\t\t/**\n\t\t\t * Setup Safari Fix\n\t\t\t */\n\t\t\tif ( History.bugs.safariPoll ) {\n\t\t\t\tHistory.intervalList.push(setInterval(History.safariStatePoll, History.options.safariPollInterval));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Ensure Cross Browser Compatibility\n\t\t\t */\n\t\t\tif ( navigator.vendor === 'Apple Computer, Inc.' || (navigator.appCodeName||'') === 'Mozilla' ) {\n\t\t\t\t/**\n\t\t\t\t * Fix Safari HashChange Issue\n\t\t\t\t */\n\n\t\t\t\t// Setup Alias\n\t\t\t\tHistory.Adapter.bind(window,'hashchange',function(){\n\t\t\t\t\tHistory.Adapter.trigger(window,'popstate');\n\t\t\t\t});\n\n\t\t\t\t// Initialise Alias\n\t\t\t\tif ( History.getHash() ) {\n\t\t\t\t\tHistory.Adapter.onDomLoad(function(){\n\t\t\t\t\t\tHistory.Adapter.trigger(window,'hashchange');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t} // !History.emulated.pushState\n\n\n\t}; // History.initCore\n\n\t// Try to Initialise History\n\tif (!History.options || !History.options.delayInit) {\n\t\tHistory.init();\n\t}\n\n})(window);\n","import $ from 'jquery';\n\nfunction updateSeoRelTags(){\n    var newRelPrev= $('.product-list-part').data('prev');\n    var newRelNext= $('.product-list-part').data('next');\n    var isNewRelPrevFirstPage = newRelPrev.indexOf(\"p=0\") >= 0;\n\n    // Tag is currently shown in HEAD\n    var currPrev= document.querySelector('link[rel=\"prev\"]');\n    var currNext = document.querySelector('link[rel=\"next\"]');\n\n    if (newRelPrev === ''){\n      $('head link[rel=\"prev\"]').remove();\n    } else if(currPrev === null && isNewRelPrevFirstPage){\n      var posNewPrev = newRelPrev.lastIndexOf('/');\n      $('head').append('<link rel=\"prev\" href=\"' + newRelPrev.substr(0, posNewPrev + 1) + '\">');\n    } else if(currPrev === null && !isNewRelPrevFirstPage){\n      $('head').append('<link rel=\"prev\" href=\"' + newRelPrev + '\">');\n    } else {\n      currPrev.setAttribute(\"href\", newRelPrev);\n    }\n\n    if(newRelNext === ''){\n      $('head link[rel=\"next\"]').remove();\n    } else if (currNext === null){\n      $('head').append('<link rel=\"next\" href=\"' + newRelNext + '\">');\n    } else{\n      currNext.setAttribute(\"href\", newRelNext);\n    }\n  }\n\n  function updateMetaRobotsCategory(){\n    var canonical = $('.product-list-part').data('canonical');\n    if (canonical !== '') {\n      var newUrl = new URL(canonical);\n      var url_params = newUrl.searchParams;\n      var hasUrlPageParams = url_params.has(\"p\");\n      if (hasUrlPageParams) {\n        $('head meta[name=\"robots\"]').remove();\n        $('head').append('<meta name=\"robots\" content=\"noindex,follow\">');\n      } else {\n        $('head meta[name=\"robots\"]').remove();\n        $('head').append('<meta name=\"robots\" content=\"index,follow\">');\n      }\n    }\n  }\n\nfunction updateCanonicalUrl(){\n  var canonical = $('.product-list-part').data('canonical');\n  var isFirstPage = canonical.indexOf(\"p=\") <= 0;\n  if (!isFirstPage) {\n    $('head link[rel=\"canonical\"]').remove();\n    $('head').append('<link rel=\"canonical\" href=\"' + canonical + '\">');\n  } else {\n    $('head link[rel=\"canonical\"]').remove();\n  }\n}\n\nexport {updateSeoRelTags, updateMetaRobotsCategory, updateCanonicalUrl};\n"]}