{"version":3,"sources":["../../dev/j/global.js"],"names":["dateFromISO8601","isoDateString","parts","match","isoTime","Date","UTC","searchArray","array","key","valuetofind","i","length","getOS","nVer","navigator","appVersion","nAgt","userAgent","os","clientStrings","s","r","id","cs","test","osVersion","exec","getBrowser","ua","undefined","window","toLowerCase","indexOf","platform_match","browser","matched","version","versionNumber","platform","version_rounded","parseInt","android","bb","blackberry","ipad","iphone","ipod","kindle","playbook","silk","mobile","cros","mac","linux","win","desktop","chrome","opr","safari","webkit","rv","iemobile","edge","mozilla","getAndroidVersion","getScrollBarWidth","scrollDiv","document","createElement","className","$AVG","append","scrollbarWidth","offsetWidth","clientWidth","removeChild","setSizeList","object","compareSize","callbackTrue","callbackFalse","each","k","v","getViewportSize","avg","sizes","breakpointKey","windowSize","outerWidth","c","outerHeight","waitForWebfonts","fonts","callback","loadedFonts","l","font","checkFont","node","width","remove","interval","clearInterval","text","css","position","left","top","font-size","font-family","font-variant","font-style","font-weight","letter-spacing","setInterval","platformDetection","closestHigherNumber","arr","closestTo","closest","Math","max","apply","emptyValue","el","val","getOffset","childPos","offset","parentPos","parent","latinize","str","replace","x","characters","keyboardEvents","event","typein","$","actualLi","find","keyCode","which","arrowCodes","inArray","type","prevAll","first","prop","removeClass","addClass","scrollTop","nextAll","trigger","els","toUpperCase","getQueryVariable","variable","query","encodeURIComponent","location","search","substring","vars","split","pair","isInArray","value","checkTouchEvents","touchevent","DocumentTouch","translation","dicKey","number","data","plural","nameParts","closeNav","lastOpenedMenu","querySelector","setAttribute","classList","focus","lastOpenedSubMenu","lastMenuLink","expandNav","mainNavItem","navLink","subMenu","linksArray","querySelectorAll","add","hideNav","showNav","addSticky","removeSticky","isScrolledIntoView","elem","state","$elem","$window","docViewTop","elemTop","elemBottom","height","itemsSlideIn","disableOptOutCookiesButton","$optOutButton","$textSection","$disabledTest","html","deleteTrackingCookies","cookiesNamesWhitelist","cookiesStubsWhitelist","cookies","cookie","cookieName","notFound","j","domain","setDeclineCookie","optOutCookies","name","declineCookie","cookieDate","setFullYear","getFullYear","toUTCString","avm","toString","Object","prototype","modules","define","namespace","space","spaces","spacesLength","spacesLast","spacesRoot","call","Error","require","required","console","warn","jQuery","decodedObject","btoa","JSON","stringify","error","cookieEnabled","sessionStorage","localStorage","setItem","removeItem","urlObject","hasOwnProperty","urlString","dataLayer","trackEvents","chromeOffer","view","evt","push","eventCategory","eventAction","eventLabel","click","passwordCheck","called","on","methods","track","evtName","evtObj","handler","args","this","urlQuery","urlParameters","urlParametersLength","urlParameter","decodeURIComponent","toISOString","pad","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","slice","Array","elt","len","from","Number","arguments","ceil","floor","keys","o","TypeError","p","waitForFinalEvent","timers","ms","uniqueId","clearTimeout","setTimeout","ẚ","Á","á","À","à","Ă","ă","Ắ","ắ","Ằ","ằ","Ẵ","ẵ","Ẳ","ẳ","Â","â","Ấ","ấ","Ầ","ầ","Ẫ","ẫ","Ẩ","ẩ","Ǎ","ǎ","Å","å","Ǻ","ǻ","Ä","ä","Ǟ","ǟ","Ã","ã","Ȧ","ȧ","Ǡ","ǡ","Ą","ą","Ā","ā","Ả","ả","Ȁ","ȁ","Ȃ","ȃ","Ạ","ạ","Ặ","ặ","Ậ","ậ","Ḁ","ḁ","Ⱥ","ⱥ","Ǽ","ǽ","Ǣ","ǣ","Ḃ","ḃ","Ḅ","ḅ","Ḇ","ḇ","Ƀ","ƀ","ᵬ","Ɓ","ɓ","Ƃ","ƃ","Ć","ć","Ĉ","ĉ","Č","č","Ċ","ċ","Ç","ç","Ḉ","ḉ","Ȼ","ȼ","Ƈ","ƈ","ɕ","Ď","ď","Ḋ","ḋ","Ḑ","ḑ","Ḍ","ḍ","Ḓ","ḓ","Ḏ","ḏ","Đ","đ","ᵭ","Ɖ","ɖ","Ɗ","ɗ","Ƌ","ƌ","ȡ","ð","É","Ə","Ǝ","ǝ","é","È","è","Ĕ","ĕ","Ê","ê","Ế","ế","Ề","ề","Ễ","ễ","Ể","ể","Ě","ě","Ë","ë","Ẽ","ẽ","Ė","ė","Ȩ","ȩ","Ḝ","ḝ","Ę","ę","Ē","ē","Ḗ","ḗ","Ḕ","ḕ","Ẻ","ẻ","Ȅ","ȅ","Ȇ","ȇ","Ẹ","ẹ","Ệ","ệ","Ḙ","ḙ","Ḛ","ḛ","Ɇ","ɇ","ɚ","ɝ","Ḟ","ḟ","ᵮ","Ƒ","ƒ","Ǵ","ǵ","Ğ","ğ","Ĝ","ĝ","Ǧ","ǧ","Ġ","ġ","Ģ","ģ","Ḡ","ḡ","Ǥ","ǥ","Ɠ","ɠ","Ĥ","ĥ","Ȟ","ȟ","Ḧ","ḧ","Ḣ","ḣ","Ḩ","ḩ","Ḥ","ḥ","Ḫ","ḫ","H","̱","ẖ","Ħ","ħ","Ⱨ","ⱨ","Í","í","Ì","ì","Ĭ","ĭ","Î","î","Ǐ","ǐ","Ï","ï","Ḯ","ḯ","Ĩ","ĩ","İ","Į","į","Ī","ī","Ỉ","ỉ","Ȉ","ȉ","Ȋ","ȋ","Ị","ị","Ḭ","ḭ","I","ı","Ɨ","ɨ","Ĵ","ĵ","J","̌","ǰ","ȷ","Ɉ","ɉ","ʝ","ɟ","ʄ","Ḱ","ḱ","Ǩ","ǩ","Ķ","ķ","Ḳ","ḳ","Ḵ","ḵ","Ƙ","ƙ","Ⱪ","ⱪ","Ĺ","ĺ","Ľ","ľ","Ļ","ļ","Ḷ","ḷ","Ḹ","ḹ","Ḽ","ḽ","Ḻ","ḻ","Ł","ł","̣","Ŀ","ŀ","Ƚ","ƚ","Ⱡ","ⱡ","Ɫ","ɫ","ɬ","ɭ","ȴ","Ḿ","ḿ","Ṁ","ṁ","Ṃ","ṃ","ɱ","Ń","ń","Ǹ","ǹ","Ň","ň","Ñ","ñ","Ṅ","ṅ","Ņ","ņ","Ṇ","ṇ","Ṋ","ṋ","Ṉ","ṉ","Ɲ","ɲ","Ƞ","ƞ","ɳ","ȵ","N","̈","n","Ó","ó","Ò","ò","Ŏ","ŏ","Ô","ô","Ố","ố","Ồ","ồ","Ỗ","ỗ","Ổ","ổ","Ǒ","ǒ","Ö","ö","Ȫ","ȫ","Ő","ő","Õ","õ","Ṍ","ṍ","Ṏ","ṏ","Ȭ","ȭ","Ȯ","ȯ","Ȱ","ȱ","Ø","ø","Ǿ","ǿ","Ǫ","ǫ","Ǭ","ǭ","Ō","ō","Ṓ","ṓ","Ṑ","ṑ","Ỏ","ỏ","Ȍ","ȍ","Ȏ","ȏ","Ơ","ơ","Ớ","ớ","Ờ","ờ","Ỡ","ỡ","Ở","ở","Ợ","ợ","Ọ","ọ","Ộ","ộ","Ɵ","ɵ","Ṕ","ṕ","Ṗ","ṗ","Ᵽ","Ƥ","ƥ","P","̃","ʠ","Ɋ","ɋ","Ŕ","ŕ","Ř","ř","Ṙ","ṙ","Ŗ","ŗ","Ȑ","ȑ","Ȓ","ȓ","Ṛ","ṛ","Ṝ","ṝ","Ṟ","ṟ","Ɍ","ɍ","ᵲ","ɼ","Ɽ","ɽ","ɾ","ᵳ","ß","Ś","ś","Ṥ","ṥ","Ŝ","ŝ","Š","š","Ṧ","ṧ","Ṡ","ṡ","ẛ","Ş","ş","Ṣ","ṣ","Ṩ","ṩ","Ș","ș","ʂ","S","̩","Þ","þ","Ť","ť","T","ẗ","Ṫ","ṫ","Ţ","ţ","Ṭ","ṭ","Ț","ț","Ṱ","ṱ","Ṯ","ṯ","Ŧ","ŧ","Ⱦ","ⱦ","ᵵ","ƫ","Ƭ","ƭ","Ʈ","ʈ","ȶ","Ú","ú","Ù","ù","Ŭ","ŭ","Û","û","Ǔ","ǔ","Ů","ů","Ü","ü","Ǘ","ǘ","Ǜ","ǜ","Ǚ","ǚ","Ǖ","ǖ","Ű","ű","Ũ","ũ","Ṹ","ṹ","Ų","ų","Ū","ū","Ṻ","ṻ","Ủ","ủ","Ȕ","ȕ","Ȗ","ȗ","Ư","ư","Ứ","ứ","Ừ","ừ","Ữ","ữ","Ử","ử","Ự","ự","Ụ","ụ","Ṳ","ṳ","Ṷ","ṷ","Ṵ","ṵ","Ʉ","ʉ","Ṽ","ṽ","Ṿ","ṿ","Ʋ","ʋ","Ẃ","ẃ","Ẁ","ẁ","Ŵ","ŵ","W","̊","ẘ","Ẅ","ẅ","Ẇ","ẇ","Ẉ","ẉ","Ẍ","ẍ","Ẋ","ẋ","Ý","ý","Ỳ","ỳ","Ŷ","ŷ","Y","ẙ","Ÿ","ÿ","Ỹ","ỹ","Ẏ","ẏ","Ȳ","ȳ","Ỷ","ỷ","Ỵ","ỵ","ʏ","Ɏ","ɏ","Ƴ","ƴ","Ź","ź","Ẑ","ẑ","Ž","ž","Ż","ż","Ẓ","ẓ","Ẕ","ẕ","Ƶ","ƶ","Ȥ","ȥ","ʐ","ʑ","Ⱬ","ⱬ","Ǯ","ǯ","ƺ","2","6","B","F","J","N","R","V","Z","b","f","j","n","r","v","z","1","5","9","A","E","I","M","Q","U","Y","a","e","i","m","q","u","y","0","4","8","D","H","L","P","T","X","d","h","l","p","t","x","3","7","C","G","K","O","S","W","c","g","k","o","s","w","fn","updateFormInputs","types","getParentByChild","child","found","inputs","attr","showFlags","datafor","dataname","datadisabled","classes","options","selectval","is","latinizedData","valclass","flagClass","contents","select","insertAfter","appendTo","off","e","stopPropagation","hasClass","selectInput","change","getHighestElement","maxHeight","map","get","equalizeHeights","ready","substr","isVisible","offsetParent","innerHeight","scrollLeft","innerWidth","extend","expr","isvisible","$w","visible","partial","hidden","direction","$t","eq","t","vpWidth","vpHeight","clientSize","offsetHeight","getBoundingClientRect","rec","tViz","bViz","bottom","lViz","rViz","right","vVisible","hVisible","viewTop","viewBottom","viewLeft","viewRight","_top","_bottom","_left","_right","compareTop","compareBottom","compareLeft","compareRight","Plugin","option","_relatedTarget","$this","Modal","DEFAULTS","show","element","$body","body","$element","$dialog","$backdrop","isShown","originalBodyPad","ignoreBackdropClick","fixedContent","remote","load","proxy","VERSION","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","keyboard","toggle","hide","that","Event","relatedTarget","isDefaultPrevented","checkScrollbar","setScrollbar","escape","resize","one","target","transition","support","adjustDialog","enforceFocus","emulateTransitionEnd","preventDefault","hideModal","has","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","animate","doAnimate","currentTarget","callbackRemove","modalIsOverflowing","scrollHeight","documentElement","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","documentElementRect","abs","measureScrollbar","bodyPad","style","index","actualPadding","calculatedPadding","parseFloat","padding","removeData","old","modal","Constructor","noConflict","href","$target","showEvent","transitionEnd","transEndEventNames","WebkitTransition","MozTransition","OTransition","end","duration","$el","special","bsTransitionEnd","bindType","delegateType","handle","handleObj","getTargetFromTrigger","$trigger","Collapse","filter","transitioning","sizeAction","$parent","getParent","addAriaAndCollapsedClass","dimension","activesData","actives","children","startEvent","complete","scrollSize","camelCase","join","isOpen","toggleClass","collapse","eventHandler","propertyExists","property","feature","domPrefixes","elm","propertyCapital","charAt","browserProperty","valuePrefix","Navigation","navigationControls","actionSkip","init","css3","controls","navigationTarget","container","$navigation","navigationContainer","settings","nav","align","base","closed","opened","prepend","navigation","clickHandler","readyHandler","AndroidFix","androidNav","handleClick","navItems","linkParent","api","$trackButton","$menuLink","$menuLinkSubmenu","$navigationClose","$navigationBack","$self","$selfSubmenu","selfLink","$clicked","forEach","navButton","addEventListener","activeElement","err","Dimension","setFullHeight","elements","setEqualHeights","m","minus_height","minus","searchParent","pattern","RegExp","sign","parents","heights","sort","a","b","tab","scroll","Platform","setAttr","platforms","attribute","PriceUtil","fastAddToCartLink","countdown","countAgain","relative","relativeEventDate","repeat","timer","eventDate","hideAfterDelay","localization","string","label","currentDate","now","currentDateSecondLess","continuous","seconds","days","log","hours","minutes","thisElement","timeLabel","timeStrings","String","isNaN","date","displayDays","componentCount","compCount","parse","getTime","avgGeneral","avgAccordion","wrapper","area","button","$area","slideToggle","caption","readMore","readLess","Footer","setState","objectSizes","xs","sm","md","lg","footer","DRUtils","link","params","paramsName","ACCOUNTID","LICENSETYPE","paidLicenseTypes","replacements","replaceLink","url","getDataFromURL","getDataFromCookie","regexp","paramsURL","getAccountLicense","getParam","encodedParams","decodeBase64","accountID","licenseType","isValidGUID","param","guid","w","fromCharCode","L","Button","outerDiv","next","selectedIndex","encodeURI","BoxFilter","EQUALIZE_BOXES","setting","setDefaultItems","displayBoxes","addFilterToUrl","SEE_MORE","seeMore","equalizeBoxes","$boxes","urlBoxesLimit","breakpointItems","breakpointLimits","persistUrlFilter","allFilters","DEFAULTVISIBLE","SEE_MORE_PRODUCTS","NO_PRODUCTS","FILTER_RESULTS","HIDDEN","allContentWrapper","filterBoxesHidden","filterHeader","filterMiddle","filterBottom","findNextNumber","idx","hash","filterFromInputs","concat","productResult","currentFilter","adjustFilter","filterFromQuery","filteredArray","filteredBoxes","sortedArray","reorder","windowHash","$checkboxes","item","urlLimitSetup","showItems","boxesWithoutOrder","orderArray","orderNumber","displayed","boxesNumber","showMore","sortedArrayIE","$filterResultsIE","$seeMoreProducts","$noProducts","clone","boxfilter","$inputSpan","not","wrapAll","bGraph2","GRAPH_CLASS","FIXED_TITLE_CLASS","GRAPH_ANIMATE_CLASS","animationSizes","animation","graph","Locator","akamaiData","ipAdress","city","country","timeZone","device","mapCanvas","YES","NO","browserObj","browserName","initLocator","getAkamai","parseString","ajax","success","status","xhr","akamaiHeader","getResponseHeader","clientIP","trackingMap","countryObj","countriesJSON","nativeName","setHTML","lat","lng","mapOptions","center","google","maps","LatLng","zoom","scrollwheel","draggable","disableDefaultUI","mapTypeId","MapTypeId","ROADMAP","Map","set","featureType","elementType","stylers","hue","saturation","lightness","locator","shopbox2","radioChange","computersChange","placeholders","updateQuantity","keyUPChange","shopbox","initialized","businessDesign","sellbox","selectedInputValue","sellboxOptions","productCode","validityMonthsKeys","maintenances","shopboxWrapper","errMessage","priceType","priceListPriceType","selectedPC","selectedpc","selectedOption","exterlnalRefID","setProductCode","shopboxHtmlElements","createHtmlElementsVariable","sellboxCountdown","dropdownOptions","dropdownSelectOptions","seats","predefineComputers","hideDropdownOptions","updateDropdownSale","updatePrices","setExternalRefId","updateRadio","updateButton","provider","tracking","selector","elmName","getKeys","json","selected","price","wasPrice","current","vat","externalRefID","newLink","visibleOptions","compDesc","discountPercent","inputValue","computers","trackingCode","trackingData","updateOtherShopbox","selectedValue","selectedOptionsText","changeCountdownValues","countdownButton","elmValue","elmValueInt","blur","saleSecondYear","subscription","trim","action","selectHandler","shopboxes","translationKey","translationData","originTranslation","optionVal","keyUpHandler","previousScroll","currentScroll","$item","SocialShare","currentPage","DATA_SOCIAL_NETWORKS","DELIMETER_SOCIAL_NETWORKS","SELECTOR_SHARE_COUNT","counts","FB","TW","GP","LI","getUsedSocials","getFacebookShareCounts","getTwitterShareCounts","getGooglePlusShareCounts","getLinkedInShareCounts","socials","validateCount","social","setShareCounts","sum","numberFormat","pow","round","getJSON","share_count","count","method","nolog","source","userId","groupId","jsonrpc","apiVersion","processData","contentType","result","metadata","globalCounts","dataType","jsonpCallback","open","title","cartLinkReplace","$link","Header","Shopbox","header","slideImg","delay","images","callout","opacity","pop","shift","dataTrackingCallback","slideUp","alert","TextComponent","textComponent","Zoomify","_zooming","_zoomed","_timeout","$shadow","$image","reposition","easing","scale","-webkit-transition","-moz-transition","-ms-transition","-o-transition","addTransition","removeTransition","isFunction","transform","-webkit-transform","-moz-transform","-ms-transform","-o-transform","transformScaleAndTranslate","translateX","translateY","zoomOut","zoomIn","nWidth","naturalWidth","Infinity","nHeight","naturalHeight","wWidth","wHeight","scaleX","min","scaleY","addShadow","removeShadow","zoomify","setAswParamLink","aswParamValue","aswParamPlaceholder","oldLink","removeAswParamFromLink","unserializeUrl","encode","path","URLparams","$document","$targetLinks","$newTargetLinks","ppc","separator","aswparam","setAswparamOnButton","buylinks","updateLink","detail","urlParams","aswObj","partnerid","programtype","clickID","trafficSource","getItem","sdl","system","message","serializeUrl","createLink","currentLink","linkParams","regexS","providers","couponParam","Emitter","obj","mixin","_callbacks","once","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","listeners","hasListeners","unserialize","qs","valueTest","downloadURL","downloadQueryString","getAttribute","brcmpgid","URL","URLSearchParams","source_tag","avastGlobals","detect","isWindows","script","src","appendChild","setTooltipOnButton","texts","chromeUnsupportedOS","tooltip","buttons","changeCM","abTest","testVariant","web","abtest","ticketNumber","dataCM","hrefCM","cmUpdate","CMvalue","CMhref","CMvariantParams","sourceVariantParams","lastIndexOf","buyButtons","tracker","showException","qp_sid","hasBanner","isChrome","isSbr","isAvast","product","isMsBuild","trackClick","pExt","pExtVal","locale","done","response","comment","createComment","region","contentHolder","XMLHttpRequest","self","onreadystatechange","readyState","innerHTML","responseText","setRequestHeader","send","querystring","newValue","paramArr","$els","hrefParams","urls","pathName","fileName","unserializedUrl","cmpgContent","cmpg_for_af","detected","isAndroid","mobileTracking","isIOS","checkIfApplyPopupLogicForCurrentPage","config","page","currentPageName","updateInsteadLinks","$popup","alternativeLinks","configCurrentPage","alternativeTracking","detectedPlatform","customLabels","customButtonLabels","buttonBadges","buttonBadgesLinks","detectOthers","_alternativeLinks","pathnameSplitted","pathname","supportedPlatforms","$popupButton","$downloadButton","downloadButtonData","data-os","data-download-name","$close","bodyOverflow","removeAttr","overlayScrollDisable","mousewheel","all","$overlayBox","$overlayBoxTrigger","$overlayBoxContainerClose","_data","routes","hashChangeListener","navigate","updateButtonHref","clear","$faq_holder","jsonInjection","contextType","content","jsonIntro","@context","@type","assign","$items","contentJson","innerText","acceptedAnswer","offsetTop","offsetBottom","waypoint","elementTop","elementBottom","viewportTop","viewportBottom","chromeBanner","decorate","isCookieEnabled","storageFactory","cookieStorage","expires","secure","regExp","keysArray","keysArrayLength","waypoints","lastScrollTop","defaults","behavior","nId","stick","highlight","$bar","firstItemId","lastItemId","h","root","anchorId","st","before","lastSection","timeout","updateActiveItem","$cookieSubmitButton","cookieNotFound","$cookieBar","hostname","$cartLink","cmpgMarker","campaignMarker","trSrc","setTime","isCampaignMarker","updatedLink","campainMarker","CMPGNMARKER","cm","SMBCookeValue","getCampaignMarkerCookie","cookieValue","replaceCookieString","re","decorateCartLink","updateDataAttr","dataset","setCampaignMarkerCookie","nodeList","nodes","HTMLElement","SMBRegExp","links","dataAttr","linkDecorator","cts","COOKIE_NAME","COOKIE_REGEX_MATCH_GROUP","PARAM_NAME","TARGET_EL","TARGET_MATCH_ELS","contentEl","getElementById","getCookieGroupValue","matches","cookieGroup","queryString","regex","setCartTrackingConsent"],"mappings":"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AAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAI7hB,EAAI,IAAI8hB,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAID,IAAI,IAAIE,IAAI,IAAID,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIC,EAAI,IAAID,IAAI,IAAIE,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAI9a,EAAI,IAAI8a,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIrwB,EAAI,IAAIqwB,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAI/I,IAAI,IAAIgJ,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,EAAI,IAAIlB,IAAI,IAAImB,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI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","file":"global.js","sourcesContent":["/**\n * Avast Module Definition\n * @version 1.1.0\n * @author Jiri Duchon \n * @copyright AVAST Software s.r.o.\n */\nvar avm = (function() {\n\t'use strict';\n\tvar toString = Object.prototype.toString,\n\t\tmodules = {};\n\treturn {\n\t\t/**\n\t\t * Define module\n\t\t * @param {string} namespace\n\t\t * @param {*} value\n\t\t * @returns {*}\n\t\t */\n\t\tdefine: function(namespace, value) {\n\t\t\tif (typeof namespace === 'string' && typeof value !== 'undefined') {\n\t\t\t\tvar spaces = namespace.split('.'),\n\t\t\t\t\tspacesLength = spaces.length,\n\t\t\t\t\tspacesLast = spacesLength - 1,\n\t\t\t\t\tspacesRoot = modules,\n\t\t\t\t\tspace;\n\t\t\t\tfor (var i = 0; i < spacesLength; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (i < spacesLast && (toString.call(spacesRoot[space]) === '[object Object]' && spacesRoot[space] !== null || !(space in spacesRoot))) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space] = spacesRoot[space] || {};\n\t\t\t\t\t} else if (i === spacesLast && !(space in spacesRoot)) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Module ' + namespace + ' already exists');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spacesRoot;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments');\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Require module\n\t\t * @param {string} namespace\n\t\t * @param {boolean} [required=true]\n\t\t * @returns {*}\n\t\t */\n\t\trequire: function(namespace, required) {\n\t\t\trequired = typeof required === 'undefined' ? true : required;\n\t\t\tif (typeof namespace === 'string' && typeof required === 'boolean') {\n\t\t\t\tvar spaces = namespace.split('.'),\n\t\t\t\t\tspacesLength = spaces.length,\n\t\t\t\t\tspacesRoot = modules,\n\t\t\t\t\tspace;\n\t\t\t\tfor (var i = 0; i < spacesLength; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (toString.call(spacesRoot) === '[object Object]' && spacesRoot !== null && space in spacesRoot) {\n\t\t\t\t\t\tspacesRoot = spacesRoot[space];\n\t\t\t\t\t} else if (required) {\n\t\t\t\t\t\tthrow new Error('Module ' + namespace + ' does not exist');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (typeof console === 'object' && typeof console.warn === 'function') {\n\t\t\t\t\t\t\tconsole.warn('Module ' + namespace + ' does not exist');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn spacesRoot;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments');\n\t\t\t}\n\t\t}\n\t};\n})();\n\n\n\n\n\n\n\n/**\n * Avast superclass\n * @author Milan Adam, Ales Gabriel\n * @copyright Avast Software s.r.o ©2011-15\n */\nif (typeof jQuery !== 'undefined') {\n\tif (typeof avm === 'object' && typeof avm.define === 'function') {\n\t\tavm.define('jquery', jQuery);\n\t}\n}\n\n\n/**\n * Encode Base64 safely (supports IE10+ or IE6+ with base64 polyfill)\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.base64.encode\n * @param {*} decodedObject\n * @returns {string|null}\n */\navm.define('avast.base64.encode', function(decodedObject) {\n\t'use strict';\n\tif (typeof decodedObject !== 'undefined') {\n\t\ttry {\n\t\t\treturn btoa(JSON.stringify(decodedObject)).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n\t\t} catch (error) {\n\t\t\tif (typeof console === 'object' && console && typeof console.warn === 'function') {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t} else {\n\t\tthrow new Error('Invalid method arguments to avast.base64.encode');\n\t}\n});\n\n/**\n * Check if cookie support is enabled\n * @version 1.0.0\n * @author Jiri Duchon \n * @module avast.storage.isCookieEnabled\n */\navm.define('avast.storage.isCookieEnabled', (function() {\n\t'use strict';\n\tif (navigator.cookieEnabled) {\n\t\treturn true;\n\t} else {\n\t\tvar key = 'isCookieEnabled';\n\t\tdocument.cookie = key + '=1';\n\t\tif (document.cookie.indexOf(key + '=1') !== -1) {\n\t\t\tdocument.cookie = key + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n})());\n\n/**\n * Check if storage support is enabled\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.isStorageEnabled\n */\navm.define('avast.storage.isStorageEnabled', (function() {\n\t'use strict';\n\ttry {\n\t\tif (typeof sessionStorage === 'object' && sessionStorage && typeof localStorage === 'object' && localStorage) {\n\t\t\tvar key = 'isStorageEnabled';\n\t\t\tsessionStorage.setItem(key, '1');\n\t\t\tsessionStorage.removeItem(key);\n\t\t\tlocalStorage.setItem(key, '1');\n\t\t\tlocalStorage.removeItem(key);\n\t\t\treturn true;\n\t\t}\n\t} catch (error) {\n\t\tif (typeof console === 'object' && console && typeof console.warn === 'function') {\n\t\t\tconsole.warn(error);\n\t\t}\n\t}\n\treturn false;\n})());\n\n/**\n * Serialize URL parameters from object to string\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.url.serialize\n * @param {Object} urlObject\n * @returns {string}\n */\navm.define('avast.url.serialize', function(urlObject) {\n\t'use strict';\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tif (typeof urlObject === 'object' && urlObject) {\n\t\tvar urlString = '';\n\t\tfor (var key in urlObject) {\n\t\t\tif (hasOwnProperty.call(urlObject, key)) {\n\t\t\t\tif (urlString.length) {\n\t\t\t\t\turlString += '&';\n\t\t\t\t}\n\t\t\t\turlString += encodeURIComponent(key) + '=' + encodeURIComponent(urlObject[key]);\n\t\t\t}\n\t\t}\n\t\treturn urlString;\n\t} else {\n\t\tthrow new Error('Invalid method arguments to avast.url.serialize');\n\t}\n});\n\n/**\n* Push data to GTM dataLayer. \n* @version 1.0.0\n* @author Ales Gabriel \n* @module avast.web.tracker\n* @desc GTM dataLayer helper. Primary centralize various window.datalayer pushes.\n* @requires jquery\n*/\navm.define('avast.web.tracker', (function () {\n\t'use strict';\n\n\tvar $ = avm.require('jquery');\n\t\n\twindow.dataLayer = window.dataLayer || []; \n\n\t/*\n\t *\tConfig events and handlers.\n\t *\tIf tracked via GTM, only datalayer.push should be required.\n\t */\n\n\t// Define callbacks for events\n\tvar trackEvents = {\n\t\t'chromeOffer': {\n\t\t\t/**\n\t\t\t * Track banner impression\n\t\t\t * @return {Integer} Length of datalayer\n\t\t\t */\n\t\t\tview: function(evt){\n\t\t\t\t//console.log(evt);\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event' : 'chromeOffer', \n\t\t\t\t\t'eventCategory' : 'Chrome',\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\n\t\t\t\t\t'eventLabel' : 'View'\n\t\t\t\t});\n\t\t\t},\n\t\t\t/**\n\t\t\t * Track clicking on download Chrome button\n\t\t\t * @param {Object} evt Event object\n\t\t\t * @return {Integer} Length of dataLayer\n\t\t\t */\n\t\t\tclick: function(evt){\n\t\t\t\t//console.log(evt);\n\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t'event' : 'chromeOffer', \n\t\t\t\t\t'eventCategory' : 'Chrome',\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\n\t\t\t\t\t'eventLabel' : 'Click'\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Password checker on first char - only once per visit \n\t\t * @param {Object} evt Event object\n\t\t * @return {Int} Length of dataLayer array\n\t\t */\n\t\t'passwordCheck' : (function(){\n\t\t\tvar called = 0;\n\n\t\t\treturn function(evt){\n\t\t\t\tif(!called){\n\t\t\t\t\tcalled = 1;\n\t\t\t\t\t//console.log('passwordCheck event: %o', evt);\n\t\t\t\t\treturn window.dataLayer.push({\n\t\t\t\t\t\t'event' : 'passwordCheck', // First char filled\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t})()\n\t};\n\n\t// Bind events\n\t$(document).on('passwordCheck.avast', function(){\n\t\tmethods.track('passwordCheck');\n\t});\n\n\t///////////////////////////////////////////////////////////////////////////////////\n\t\n\t/*\n\t * Methods\n\t */\t\n\tvar methods = {\n\t\t/**\n\t\t * Track event \n\t\t * @param {String} evtName Event name. Looking for callback. Dot notation allowed. \n\t\t * @param {Object} [evtObj] Event object\n\t\t * @param {Function} [callback] Callback handler. If not defined in param, lookup on module internal callbacks storage is made. \n\t\t */\n\t\ttrack: function(evtName, evtObj, callback){\n\t\t\tvar handler = callback || trackEvents,\n\t\t\t\tspaces = (typeof evtName === 'string') ? evtName.split('.') : null,\n\t\t\t\targs = evtObj ? [evtObj] : [], // IE 8 with no arguments \n\t\t\t\tspace,\n\t\t\t\ttoString = Object.prototype.toString;\n\t\t\t\n\t\t\t// TODO: Do not step into object cycles if callback is only plain function by default\n\t\t\tif ((toString.call(handler) === '[object Function]' || toString.call(handler) === '[object Object]') && spaces && spaces.length > 0){\n\t\t\t\tfor (var i = 0; i < spaces.length; i++) {\n\t\t\t\t\tspace = spaces[i];\n\t\t\t\t\tif (handler !== null && space in handler) {\n\t\t\t\t\t\thandler = handler[space];\n\t\t\t\t\t\n\t\t\t\t\t\t// Function founded earlier than in last cycle considered as incorrect.\n\t\t\t\t\t\t// So properties defined on functions are not allowed.\n\t\t\t\t\t\tif (toString.call(handler) === '[object Function]' && i !== (spaces.length - 1)) {\t\t\t\t\t\t\n\t\t\t\t\t\t\thandler = null;\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\tif (typeof handler === 'function') {\n\t\t\t\treturn handler.apply(this, args); // FIXME: Change to call.\n\t\t\t}\n\t\t}\n\t};\n\n\n\t// Export methods\n\treturn methods;\n})());\n\n/**\n * Unserialize URL parameters from string to object\n * @version 1.2.0\n * @author Jiri Duchon \n * @module avast.url.unserialize\n * @param {string} [urlString]\n * @returns {Object}\n */\navm.define('avast.url.unserialize', function(urlString) {\n\t'use strict';\n\turlString = typeof urlString === 'undefined' ? location.search : urlString;\n\tif (typeof urlString === 'string') {\n\t\tvar urlObject = {},\n\t\t\turlQuery = urlString.replace(/#.*|.*\\?/g, '');\n\t\tif (urlQuery.length) {\n\t\t\tvar urlParameters = urlQuery.split('&'),\n\t\t\t\turlParametersLength = urlParameters.length,\n\t\t\t\turlParameter = [];\n\t\t\tfor (var i = 0; i < urlParametersLength; i++) {\n\t\t\t\turlParameter = urlParameters[i].split('=');\n\t\t\t\turlObject[decodeURIComponent(urlParameter[0])] = decodeURIComponent(urlParameter[1] || '');\n\t\t\t}\n\t\t}\n\t\treturn urlObject;\n\t} else {\n\t\tthrow new Error('Invalid method arguments to avast.url.unserialize');\n\t}\n});\n\n// Using toISOString()\n// This method was standardized in ECMA-262 5th edition.\n// Engines which have not been updated to support this method can work around the absence of this method using the following shim:\n\nif (!Date.prototype.toISOString) {\n (function () {\n\n function pad(number) {\n if (number < 10) {\n return '0' + number;\n }\n return number;\n }\n\n Date.prototype.toISOString = function () {\n return this.getUTCFullYear() +\n '-' + pad(this.getUTCMonth() + 1) +\n '-' + pad(this.getUTCDate()) +\n 'T' + pad(this.getUTCHours()) +\n ':' + pad(this.getUTCMinutes()) +\n ':' + pad(this.getUTCSeconds()) +\n '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +\n 'Z';\n };\n\n }());\n}\n\n// IE8 ISO Format\nfunction dateFromISO8601(isoDateString) {\n if (typeof isoDateString !== \"undefined\") {\n var parts = isoDateString.match(/\\d+/g);\n var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]);\n var isoDate = new Date(isoTime);\n\n return isoDate;\n }\n return new Date();\n}\n\n/**\n * Search in json by key and value\n * @param {Array} array\n * @param {String} key\n * @param {String} valuetofind\n * @returns {Array|Number}\n * @author Michal Pribila\n */\nfunction searchArray(array, key, valuetofind) {\n for (i = 0; i < array.length; i++) {\n if (array[i][key] === valuetofind) {\n return array[i];\n }\n }\n return -1;\n}\n\n\nvar avg = {};\navg.sizes = {};\navg.sizes['xs'] = [0, 479];\navg.sizes['sm'] = [480, 767];\navg.sizes['md'] = [768, 991];\navg.sizes['lg'] = [992, 3000];\n\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(elt /*, from*/ ) {\n var len = this.length >>> 0;\n\n var from = Number(arguments[1]) || 0;\n from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n if (from < 0)\n from += len;\n\n for (; from < len; from++) {\n if (from in this &&\n this[from] === elt)\n return from;\n }\n return -1;\n };\n}\n\nif (!('keys' in Object)) Object.keys = function(o) {\n if (typeof o != 'object' || o === null) {\n throw new TypeError('Object.keys called on a non-object or null');\n }\n var k = [];\n for (var p in o)\n if (o.hasOwnProperty(p)) k.push(p);\n return k;\n}\n\nfunction getOS() {\n var nVer = navigator.appVersion;\n var nAgt = navigator.userAgent;\n\n // system\n var os = \"unknown\";\n var clientStrings = [\n {s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/},\n {s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/},\n {s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/},\n {s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/},\n {s: 'Windows Vista', r: /Windows NT 6.0/},\n {s: 'Windows Server 2003', r: /Windows NT 5.2/},\n {s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/},\n {s: 'Windows 2000', r: /(Windows NT 5.0|Windows 2000)/},\n {s: 'Windows ME', r: /(Win 9x 4.90|Windows ME)/},\n {s: 'Windows 98', r: /(Windows 98|Win98)/},\n {s: 'Windows 95', r: /(Windows 95|Win95|Windows_95)/},\n {s: 'Windows NT 4.0', r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},\n {s: 'Windows CE', r: /Windows CE/},\n {s: 'Windows 3.11', r: /Win16/},\n {s: 'Android', r: /Android/},\n {s: 'Open BSD', r: /OpenBSD/},\n {s: 'Sun OS', r: /SunOS/},\n {s: 'Linux', r: /(Linux|X11)/},\n {s: 'iOS', r: /(iPhone|iPad|iPod)/},\n {s: 'Mac OS X', r: /Mac OS X/},\n {s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},\n {s: 'QNX', r: /QNX/},\n {s: 'UNIX', r: /UNIX/},\n {s: 'BeOS', r: /BeOS/},\n {s: 'OS/2', r: /OS\\/2/},\n {s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/}\n ];\n for (var id in clientStrings) {\n var cs = clientStrings[id];\n if (cs.r.test(nAgt)) {\n os = cs.s;\n break;\n }\n }\n\n var osVersion = \"unknown\";\n\n if (/Windows/.test(os)) {\n osVersion = /Windows (.*)/.exec(os)[1];\n os = 'Windows';\n }\n\n switch (os) {\n case 'Mac OS X':\n osVersion = /Mac OS X (10[\\.\\_\\d]+)/.exec(nAgt)[1];\n break;\n\n case 'Android':\n osVersion = /Android ([\\.\\_\\d]+)/.exec(nAgt)[1];\n break;\n\n case 'iOS':\n osVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(nVer);\n osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);\n break;\n }\n return os;\n}\n\nfunction getBrowser(ua) {\n // If an UA is not provided, default to the current browser UA.\n if (ua === undefined) {\n ua = window.navigator.userAgent;\n }\n ua = ua.toLowerCase();\n\n var match = /(edge)\\/([\\w.]+)/.exec(ua) ||\n /(opr)[\\/]([\\w.]+)/.exec(ua) ||\n /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n /(iemobile)[\\/]([\\w.]+)/.exec(ua) ||\n /(version)(applewebkit)[ \\/]([\\w.]+).*(safari)[ \\/]([\\w.]+)/.exec(ua) ||\n /(webkit)[ \\/]([\\w.]+).*(version)[ \\/]([\\w.]+).*(safari)[ \\/]([\\w.]+)/.exec(ua) ||\n /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n /(msie) ([\\w.]+)/.exec(ua) ||\n ua.indexOf(\"trident\") >= 0 && /(rv)(?::| )([\\w.]+)/.exec(ua) ||\n ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n [];\n\n var platform_match = /(ipad)/.exec(ua) ||\n /(ipod)/.exec(ua) ||\n /(windows phone)/.exec(ua) ||\n /(iphone)/.exec(ua) ||\n /(kindle)/.exec(ua) ||\n /(silk)/.exec(ua) ||\n /(android)/.exec(ua) ||\n /(win)/.exec(ua) ||\n /(mac)/.exec(ua) ||\n /(linux)/.exec(ua) ||\n /(cros)/.exec(ua) ||\n /(playbook)/.exec(ua) ||\n /(bb)/.exec(ua) ||\n /(blackberry)/.exec(ua) ||\n [];\n\n var browser = {},\n matched = {\n browser: match[ 5 ] || match[ 3 ] || match[ 1 ] || \"\",\n version: match[ 2 ] || match[ 4 ] || \"0\",\n versionNumber: match[ 4 ] || match[ 2 ] || \"0\",\n platform: platform_match[ 0 ] || \"\"\n };\n\n if (matched.browser) {\n browser[ matched.browser ] = true;\n browser.version = matched.version;\n browser.version_rounded = parseInt(matched.versionNumber, 10);\n }\n\n if (matched.platform) {\n browser[ matched.platform ] = true;\n }\n\n // These are all considered mobile platforms, meaning they run a mobile browser\n if (browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone ||\n browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ \"windows phone\" ]) {\n browser.mobile = true;\n }\n\n // These are all considered desktop platforms, meaning they run a desktop browser\n if (browser.cros || browser.mac || browser.linux || browser.win) {\n browser.desktop = true;\n }\n\n // Chrome, Opera 15+ and Safari are webkit based browsers\n if (browser.chrome || browser.opr || browser.safari) {\n browser.webkit = true;\n }\n\n // IE11 has a new token so we will assign it msie to avoid breaking changes\n if (browser.rv || browser.iemobile) {\n var ie = \"msie\";\n\n matched.browser = ie;\n browser[ie] = true;\n }\n\n // Edge is officially known as Microsoft Edge, so rewrite the key to match\n if (browser.edge) {\n delete browser.edge;\n var msedge = \"msedge\";\n\n matched.browser = msedge;\n browser[msedge] = true;\n }\n\n // Blackberry browsers are marked as Safari on BlackBerry\n if (browser.safari && browser.blackberry) {\n var blackberry = \"blackberry\";\n\n matched.browser = blackberry;\n browser[blackberry] = true;\n }\n\n // Playbook browsers are marked as Safari on Playbook\n if (browser.safari && browser.playbook) {\n var playbook = \"playbook\";\n\n matched.browser = playbook;\n browser[playbook] = true;\n }\n\n // BB10 is a newer OS version of BlackBerry\n if (browser.bb) {\n var bb = \"blackberry\";\n\n matched.browser = bb;\n browser[bb] = true;\n }\n\n // Opera 15+ are identified as opr\n if (browser.opr) {\n var opera = \"opera\";\n\n matched.browser = opera;\n browser[opera] = true;\n }\n\n // Stock Android browsers are marked as Safari on Android.\n if (browser.safari && browser.android) {\n var android = \"android\";\n\n matched.browser = android;\n browser[android] = true;\n }\n\n // Kindle browsers are marked as Safari on Kindle\n if (browser.safari && browser.kindle) {\n var kindle = \"kindle\";\n\n matched.browser = kindle;\n browser[kindle] = true;\n }\n\n // Kindle Silk browsers are marked as Safari on Kindle\n if (browser.safari && browser.silk) {\n var silk = \"silk\";\n\n matched.browser = silk;\n browser[silk] = true;\n }\n\n // Rename mozilla to firefox\n if (browser.mozilla) {\n var firefox = \"firefox\";\n\n matched.browser = firefox;\n browser[firefox] = true;\n }\n\n // Assign the name and platform variable\n browser.browser = matched.browser;\n browser.platform = matched.platform;\n return browser;\n}\n\nfunction getAndroidVersion(ua) {\n var ua = ua || navigator.userAgent;\n var match = ua.match(/Android\\s([0-9\\.]*)/);\n return match ? match[1] : false;\n}\n\n\nfunction getScrollBarWidth() {\n var scrollDiv = document.createElement('div');\n scrollDiv.className = 'modal-scrollbar-measure';\n $AVG('body').append(scrollDiv);\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n $AVG('body')[0].removeChild(scrollDiv);\n return scrollbarWidth;\n}\n\nfunction setSizeList(object) {\n if (object['xs'] === true) {\n if (typeof object['sm'] === 'undefined')\n object['sm'] = true;\n if (typeof object['md'] === 'undefined')\n object['md'] = true;\n if (typeof object['lg'] === 'undefined')\n object['lg'] = true;\n } else {\n if (typeof object['sm'] === 'undefined')\n object['sm'] = false;\n if (typeof object['md'] === 'undefined')\n object['md'] = false;\n if (typeof object['lg'] === 'undefined')\n object['lg'] = false;\n }\n\n return object;\n}\n\nfunction compareSize(object, callbackTrue, callbackFalse) {\n $AVG.each(object, function(k, v) {\n if (getViewportSize('x') >= avg.sizes[k][0] && getViewportSize('x') <= avg.sizes[k][1]) {\n if (v) {\n callbackTrue();\n } else {\n callbackFalse();\n }\n }\n });\n}\n\n/*\n * Return name of breakpoint (sm,xs,md,lg)\n * @returns {String}\n */\nfunction breakpointKey() {\n var windowSize = $AVG(window).outerWidth() + getScrollBarWidth();\n var breakpointKey;\n $AVG.each(avg.sizes, function(key) {\n if (windowSize >= avg.sizes[key][0] && windowSize <= avg.sizes[key][1]) {\n breakpointKey = key;\n }\n });\n return breakpointKey;\n}\n\nfunction getViewportSize(c) {\n if (c == 'x') return ($AVG(window).outerWidth() + getScrollBarWidth());\n if (c == 'y') return ($AVG(window).outerHeight());\n}\n\nfunction waitForWebfonts(fonts, callback) {\n var loadedFonts = 0;\n for (var i = 0, l = fonts.length; i < l; ++i) {\n (function(font) {\n var node = $AVG('');\n // Characters that vary significantly among different fonts\n node.text('giItT1WQy@!-/#');\n // Visible - so we can measure it - but not on the screen\n node.css({\n 'position': 'absolute',\n 'left': '-10000px',\n 'top': '-10000px',\n 'font-size': '300px',\n 'font-family': 'sans-serif',\n 'font-variant': 'normal',\n 'font-style': 'normal',\n 'font-weight': 'normal',\n 'letter-spacing': 0\n });\n\n $AVG('body').append(node);\n\n var width = node.width();\n\n node.css('font-family', font);\n\n var interval;\n function checkFont() {\n // Compare current width with original width\n if (node && node.width() != width) {\n ++loadedFonts;\n node.remove();\n }\n\n // If all fonts have been loaded\n if (loadedFonts >= fonts.length) {\n if (interval) {\n clearInterval(interval);\n }\n if (loadedFonts == fonts.length) {\n return true;\n }\n }\n }\n\n if (!checkFont()) {\n interval = setInterval(checkFont, 50);\n }\n })(fonts[i]);\n }\n if (loadedFonts == fonts.length) {\n callback();\n }\n}\n\n\nvar waitForFinalEvent = (function() {\n var timers = {};\n return function(callback, ms, uniqueId) {\n if (!uniqueId) {\n uniqueId = \"Don't call this twice without a uniqueId\";\n }\n if (timers[uniqueId]) {\n clearTimeout(timers[uniqueId]);\n }\n timers[uniqueId] = setTimeout(callback, ms);\n };\n})();\n\nfunction platformDetection() {\n var ua = navigator.userAgent.toLowerCase();\n var current_platform;\n if (ua.indexOf(\"android\") > -1) {\n current_platform = \"platform_android\";\n } else if (ua.indexOf(\"mac\") > -1 && ua.indexOf(\"ipad\") === -1 && ua.indexOf(\"iphone\") === -1 && ua.indexOf(\"ipod\") === -1) {\n current_platform = \"platform_mac\";\n } else if (ua.indexOf('ipad') > -1 || ua.indexOf('iphone') > -1 || ua.indexOf('ipod') > -1) {\n current_platform = \"platform_ios\";\n } else {\n current_platform = \"platform_pc\";\n }\n return current_platform;\n}\n\n/* find closes higher number in int array or use last\n * @param {int array} arr\n * @param {Number} closestTo\n * @return {Number} closest\n */\nfunction closestHigherNumber(arr, closestTo) {\n\n var closest = Math.max.apply(null, arr);\n\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] >= closestTo && arr[i] < closest)\n closest = arr[i];\n }\n\n return closest;\n}\n\nfunction emptyValue(el) {\n $AVG(el).val('');\n}\n\nfunction getOffset(el) {\n var childPos = $AVG(el).offset();\n var parentPos = $AVG(el).parent().offset();\n return {\n top: childPos.top - parentPos.top,\n left: childPos.left - parentPos.left\n };\n}\n\nfunction latinize(str) {\n return str.replace(/[^A-Za-z0-9]/g, function(x) { return latinize.characters[x] || x; });\n}\nlatinize.characters = {'ẚ':'a','Á':'a','á':'a','À':'a','à':'a','Ă':'a','ă':'a','Ắ':'a','ắ':'a','Ằ':'a','ằ':'a','Ẵ':'a','ẵ':'a','Ẳ':'a','ẳ':'a','Â':'a','â':'a','Ấ':'a','ấ':'a','Ầ':'a','ầ':'a','Ẫ':'a','ẫ':'a','Ẩ':'a','ẩ':'a','Ǎ':'a','ǎ':'a','Å':'a','å':'a','Ǻ':'a','ǻ':'a','Ä':'a','ä':'a','Ǟ':'a','ǟ':'a','Ã':'a','ã':'a','Ȧ':'a','ȧ':'a','Ǡ':'a','ǡ':'a','Ą':'a','ą':'a','Ā':'a','ā':'a','Ả':'a','ả':'a','Ȁ':'a','ȁ':'a','Ȃ':'a','ȃ':'a','Ạ':'a','ạ':'a','Ặ':'a','ặ':'a','Ậ':'a','ậ':'a','Ḁ':'a','ḁ':'a','Ⱥ':'a','ⱥ':'a','Ǽ':'a','ǽ':'a','Ǣ':'a','ǣ':'a','Ḃ':'b','ḃ':'b','Ḅ':'b','ḅ':'b','Ḇ':'b','ḇ':'b','Ƀ':'b','ƀ':'b','ᵬ':'b','Ɓ':'b','ɓ':'b','Ƃ':'b','ƃ':'b','Ć':'c','ć':'c','Ĉ':'c','ĉ':'c','Č':'c','č':'c','Ċ':'c','ċ':'c','Ç':'c','ç':'c','Ḉ':'c','ḉ':'c','Ȼ':'c','ȼ':'c','Ƈ':'c','ƈ':'c','ɕ':'c','Ď':'d','ď':'d','Ḋ':'d','ḋ':'d','Ḑ':'d','ḑ':'d','Ḍ':'d','ḍ':'d','Ḓ':'d','ḓ':'d','Ḏ':'d','ḏ':'d','Đ':'d','đ':'d','ᵭ':'d','Ɖ':'d','ɖ':'d','Ɗ':'d','ɗ':'d','Ƌ':'d','ƌ':'d','ȡ':'d','ð':'d','É':'e','Ə':'e','Ǝ':'e','ǝ':'e','é':'e','È':'e','è':'e','Ĕ':'e','ĕ':'e','Ê':'e','ê':'e','Ế':'e','ế':'e','Ề':'e','ề':'e','Ễ':'e','ễ':'e','Ể':'e','ể':'e','Ě':'e','ě':'e','Ë':'e','ë':'e','Ẽ':'e','ẽ':'e','Ė':'e','ė':'e','Ȩ':'e','ȩ':'e','Ḝ':'e','ḝ':'e','Ę':'e','ę':'e','Ē':'e','ē':'e','Ḗ':'e','ḗ':'e','Ḕ':'e','ḕ':'e','Ẻ':'e','ẻ':'e','Ȅ':'e','ȅ':'e','Ȇ':'e','ȇ':'e','Ẹ':'e','ẹ':'e','Ệ':'e','ệ':'e','Ḙ':'e','ḙ':'e','Ḛ':'e','ḛ':'e','Ɇ':'e','ɇ':'e','ɚ':'e','ɝ':'e','Ḟ':'f','ḟ':'f','ᵮ':'f','Ƒ':'f','ƒ':'f','Ǵ':'g','ǵ':'g','Ğ':'g','ğ':'g','Ĝ':'g','ĝ':'g','Ǧ':'g','ǧ':'g','Ġ':'g','ġ':'g','Ģ':'g','ģ':'g','Ḡ':'g','ḡ':'g','Ǥ':'g','ǥ':'g','Ɠ':'g','ɠ':'g','Ĥ':'h','ĥ':'h','Ȟ':'h','ȟ':'h','Ḧ':'h','ḧ':'h','Ḣ':'h','ḣ':'h','Ḩ':'h','ḩ':'h','Ḥ':'h','ḥ':'h','Ḫ':'h','ḫ':'h','H':'h','̱':'h','ẖ':'h','Ħ':'h','ħ':'h','Ⱨ':'h','ⱨ':'h','Í':'i','í':'i','Ì':'i','ì':'i','Ĭ':'i','ĭ':'i','Î':'i','î':'i','Ǐ':'i','ǐ':'i','Ï':'i','ï':'i','Ḯ':'i','ḯ':'i','Ĩ':'i','ĩ':'i','İ':'i','i':'i','Į':'i','į':'i','Ī':'i','ī':'i','Ỉ':'i','ỉ':'i','Ȉ':'i','ȉ':'i','Ȋ':'i','ȋ':'i','Ị':'i','ị':'i','Ḭ':'i','ḭ':'i','I':'i','ı':'i','Ɨ':'i','ɨ':'i','Ĵ':'j','ĵ':'j','J':'j','̌':'j','ǰ':'j','ȷ':'j','Ɉ':'j','ɉ':'j','ʝ':'j','ɟ':'j','ʄ':'j','Ḱ':'k','ḱ':'k','Ǩ':'k','ǩ':'k','Ķ':'k','ķ':'k','Ḳ':'k','ḳ':'k','Ḵ':'k','ḵ':'k','Ƙ':'k','ƙ':'k','Ⱪ':'k','ⱪ':'k','Ĺ':'a','ĺ':'l','Ľ':'l','ľ':'l','Ļ':'l','ļ':'l','Ḷ':'l','ḷ':'l','Ḹ':'l','ḹ':'l','Ḽ':'l','ḽ':'l','Ḻ':'l','ḻ':'l','Ł':'l','ł':'l','Ł':'l','̣':'l','ł':'l','̣':'l','Ŀ':'l','ŀ':'l','Ƚ':'l','ƚ':'l','Ⱡ':'l','ⱡ':'l','Ɫ':'l','ɫ':'l','ɬ':'l','ɭ':'l','ȴ':'l','Ḿ':'m','ḿ':'m','Ṁ':'m','ṁ':'m','Ṃ':'m','ṃ':'m','ɱ':'m','Ń':'n','ń':'n','Ǹ':'n','ǹ':'n','Ň':'n','ň':'n','Ñ':'n','ñ':'n','Ṅ':'n','ṅ':'n','Ņ':'n','ņ':'n','Ṇ':'n','ṇ':'n','Ṋ':'n','ṋ':'n','Ṉ':'n','ṉ':'n','Ɲ':'n','ɲ':'n','Ƞ':'n','ƞ':'n','ɳ':'n','ȵ':'n','N':'n','̈':'n','n':'n','̈':'n','Ó':'o','ó':'o','Ò':'o','ò':'o','Ŏ':'o','ŏ':'o','Ô':'o','ô':'o','Ố':'o','ố':'o','Ồ':'o','ồ':'o','Ỗ':'o','ỗ':'o','Ổ':'o','ổ':'o','Ǒ':'o','ǒ':'o','Ö':'o','ö':'o','Ȫ':'o','ȫ':'o','Ő':'o','ő':'o','Õ':'o','õ':'o','Ṍ':'o','ṍ':'o','Ṏ':'o','ṏ':'o','Ȭ':'o','ȭ':'o','Ȯ':'o','ȯ':'o','Ȱ':'o','ȱ':'o','Ø':'o','ø':'o','Ǿ':'o','ǿ':'o','Ǫ':'o','ǫ':'o','Ǭ':'o','ǭ':'o','Ō':'o','ō':'o','Ṓ':'o','ṓ':'o','Ṑ':'o','ṑ':'o','Ỏ':'o','ỏ':'o','Ȍ':'o','ȍ':'o','Ȏ':'o','ȏ':'o','Ơ':'o','ơ':'o','Ớ':'o','ớ':'o','Ờ':'o','ờ':'o','Ỡ':'o','ỡ':'o','Ở':'o','ở':'o','Ợ':'o','ợ':'o','Ọ':'o','ọ':'o','Ộ':'o','ộ':'o','Ɵ':'o','ɵ':'o','Ṕ':'p','ṕ':'p','Ṗ':'p','ṗ':'p','Ᵽ':'p','Ƥ':'p','ƥ':'p','P':'p','̃':'p','p':'p','̃':'p','ʠ':'q','Ɋ':'q','ɋ':'q','Ŕ':'r','ŕ':'r','Ř':'r','ř':'r','Ṙ':'r','ṙ':'r','Ŗ':'r','ŗ':'r','Ȑ':'r','ȑ':'r','Ȓ':'r','ȓ':'r','Ṛ':'r','ṛ':'r','Ṝ':'r','ṝ':'r','Ṟ':'r','ṟ':'r','Ɍ':'r','ɍ':'r','ᵲ':'r','ɼ':'r','Ɽ':'r','ɽ':'r','ɾ':'r','ᵳ':'r','ß':'s','Ś':'s','ś':'s','Ṥ':'s','ṥ':'s','Ŝ':'s','ŝ':'s','Š':'s','š':'s','Ṧ':'s','ṧ':'s','Ṡ':'s','ṡ':'s','ẛ':'s','Ş':'s','ş':'s','Ṣ':'s','ṣ':'s','Ṩ':'s','ṩ':'s','Ș':'s','ș':'s','ʂ':'s','S':'s','̩':'s','s':'s','̩':'s','Þ':'t','þ':'t','Ť':'t','ť':'t','T':'t','̈':'t','ẗ':'t','Ṫ':'t','ṫ':'t','Ţ':'t','ţ':'t','Ṭ':'t','ṭ':'t','Ț':'t','ț':'t','Ṱ':'t','ṱ':'t','Ṯ':'t','ṯ':'t','Ŧ':'t','ŧ':'t','Ⱦ':'t','ⱦ':'t','ᵵ':'t','ƫ':'t','Ƭ':'t','ƭ':'t','Ʈ':'t','ʈ':'t','ȶ':'t','Ú':'u','ú':'u','Ù':'u','ù':'u','Ŭ':'u','ŭ':'u','Û':'u','û':'u','Ǔ':'u','ǔ':'u','Ů':'u','ů':'u','Ü':'u','ü':'u','Ǘ':'u','ǘ':'u','Ǜ':'u','ǜ':'u','Ǚ':'u','ǚ':'u','Ǖ':'u','ǖ':'u','Ű':'u','ű':'u','Ũ':'u','ũ':'u','Ṹ':'u','ṹ':'u','Ų':'u','ų':'u','Ū':'u','ū':'u','Ṻ':'u','ṻ':'u','Ủ':'u','ủ':'u','Ȕ':'u','ȕ':'u','Ȗ':'u','ȗ':'u','Ư':'u','ư':'u','Ứ':'u','ứ':'u','Ừ':'u','ừ':'u','Ữ':'u','ữ':'u','Ử':'u','ử':'u','Ự':'u','ự':'u','Ụ':'u','ụ':'u','Ṳ':'u','ṳ':'u','Ṷ':'u','ṷ':'u','Ṵ':'u','ṵ':'u','Ʉ':'u','ʉ':'u','Ṽ':'v','ṽ':'v','Ṿ':'v','ṿ':'v','Ʋ':'v','ʋ':'v','Ẃ':'w','ẃ':'w','Ẁ':'w','ẁ':'w','Ŵ':'w','ŵ':'w','W':'w','̊':'w','ẘ':'w','Ẅ':'w','ẅ':'w','Ẇ':'w','ẇ':'w','Ẉ':'w','ẉ':'w','Ẍ':'x','ẍ':'x','Ẋ':'x','ẋ':'x','Ý':'y','ý':'y','Ỳ':'y','ỳ':'y','Ŷ':'y','ŷ':'y','Y':'y','̊':'y','ẙ':'y','Ÿ':'y','ÿ':'y','Ỹ':'y','ỹ':'y','Ẏ':'y','ẏ':'y','Ȳ':'y','ȳ':'y','Ỷ':'y','ỷ':'y','Ỵ':'y','ỵ':'y','ʏ':'y','Ɏ':'y','ɏ':'y','Ƴ':'y','ƴ':'y','Ź':'z','ź':'z','Ẑ':'z','ẑ':'z','Ž':'z','ž':'z','Ż':'z','ż':'z','Ẓ':'z','ẓ':'z','Ẕ':'z','ẕ':'z','Ƶ':'z','ƶ':'z','Ȥ':'z','ȥ':'z','ʐ':'z','ʑ':'z','Ⱬ':'z','ⱬ':'z','Ǯ':'z','ǯ':'z','ƺ':'z','2':'2','6':'6','B':'B','F':'F','J':'J','N':'N','R':'R','V':'V','Z':'Z','b':'b','f':'f','j':'j','n':'n','r':'r','v':'v','z':'z','1':'1','5':'5','9':'9','A':'A','E':'E','I':'I','M':'M','Q':'Q','U':'U','Y':'Y','a':'a','e':'e','i':'i','m':'m','q':'q','u':'u','y':'y','0':'0','4':'4','8':'8','D':'D','H':'H','L':'L','P':'P','T':'T','X':'X','d':'d','h':'h','l':'l','p':'p','t':'t','x':'x','3':'3','7':'7','C':'C','G':'G','K':'K','O':'O','S':'S','W':'W','c':'c','g':'g','k':'k','o':'o','s':'s','w':'w'};\n\n\nfunction keyboardEvents(el, event, typein) {\n if (!typein) {\n var typein = false;\n }\n var parent = $(el).closest('span.select.input');\n if (typeof actualLi === 'undefined') {\n actualLi = ($(parent).find('li.selected:not(.hide)').length === 1) ? $(parent).find('ul li.selected') : $(parent).find('ul li:first-child');\n }\n\n var keyCode = (window.Event) ? event.which : event.keyCode;\n\n var arrowCodes = [13, 27, 33, 34, 35, 36, 38, 40];\n\n if ($.inArray(event.keyCode, arrowCodes) > -1 && event.type === 'keydown') {\n //$(el).attr('value', '');\n }\n\n /* UP ARROW */\n if (keyCode === 38 && event.type === 'keydown') {\n if ($(actualLi).prevAll(':not(.hide)').first().prop('tagName') === 'LI') {\n actualLi = $(actualLi).prevAll(':not(.hide)').first();\n }\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* DOWN ARROW */\n }\n else if (keyCode === 40 && event.type === 'keydown') {\n if ($(actualLi).nextAll(':not(.hide)').first().prop('tagName') === 'LI') {\n actualLi = $(actualLi).nextAll(':not(.hide)').first();\n }\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* PAGE UP */\n }\n else if (keyCode === 33 && event.type === 'keydown') {\n if ($(actualLi).prevAll(':not(.hide):eq(5)').first().prop('tagName') === 'LI') {\n actualLi = $(actualLi).prevAll(':not(.hide):eq(5)').first();\n } else {\n actualLi = $(parent).find('ul li:first-child');\n }\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* PAGE DOWN */\n }\n else if (keyCode === 34 && event.type === 'keydown') {\n if ($(actualLi).nextAll(':not(.hide):eq(5)').first().prop('tagName') === 'LI') {\n actualLi = $(actualLi).nextAll(':not(.hide):eq(5)').first();\n } else {\n actualLi = $(parent).find('ul li:last-child');\n }\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* END */\n }\n else if (keyCode === 35 && event.type === 'keydown') {\n actualLi = $(parent).find('ul li:last-child');\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* HOME */\n }\n else if (keyCode === 36 && event.type === 'keydown') {\n actualLi = $(parent).find('ul li:first-child');\n $(parent).find('li').removeClass('hovered');\n $(actualLi).addClass('hovered');\n $(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n\n /* ENTER */\n }\n else if (keyCode === 13 && event.type === 'keydown') {\n $(el).trigger('blur');\n $(actualLi).trigger('click');\n\n /* ESCAPE */\n }\n else if (keyCode === 27 && event.type === 'keydown') {\n $(el).trigger('blur');\n $(document).trigger('click');\n\n /* ALL KEYS EXCEPT ONES ABOVE */\n }\n else if (event.type === 'keyup' && $.inArray(keyCode, arrowCodes) === -1) {\n // if (typein === true) {\n\n\n if ($.inArray(keyCode, arrowCodes) > -1) {\n actualLi = $(parent).find('ul li:first-child');\n }\n $(parent).find('.ul-wrapper').addClass('active');\n\n var els = $(parent).find('li[data-text^=\"' + $(el).val().toUpperCase() + '\"], li[data-value=\"\"]');\n\n\n if ($(el).val().length > 0) {\n $(parent).find('li').addClass('hide');\n $(els).removeClass('hide');\n }\n else {\n $(parent).find('li').removeClass('hide');\n }\n // }\n }\n}\n\n$AVG.fn.updateFormInputs = function(types) {\n $AVG.fn.getParentByChild = function(child) {\n if ($AVG(this).length > 0) {\n var found = false;\n var el = $AVG(this);\n while (found === false) {\n el = $AVG(el).parent();\n if ($AVG(el).find($AVG(child))) {\n found = true;\n return $AVG(el);\n }\n }\n }\n };\n\n var height = $AVG(document).height();\n var inputs = $AVG(this);\n var i = 0;\n var els = $AVG(inputs).find('select:not([data-input-update=\"false\"])');\n\n $AVG.each(els, function() {\n $AVG(this).attr('size', 2);\n var parent = $AVG(this).getParentByChild('label');\n $AVG(parent).addClass('input-parent select-parent');\n $AVG(this).addClass('input-replaced');\n var typein = ($AVG(this).attr('data-type-in') === 'true');\n var showFlags = ($AVG(this).attr('data-show-flags') === 'true');\n var datafor = $AVG(this).attr('id');\n var dataname = $AVG(this).attr('name');\n var datadisabled = 'false';\n var classes = 'input select ' + dataname;\n var options = '';\n var selectval = $AVG(this).find(':selected').text();\n if ($AVG(this).is(':disabled')) {\n datadisabled = 'true';\n classes += ' disabled';\n }\n\n\n $AVG.each($AVG(this).find('option'), function() {\n var latinizedData = typein ? ' data-latinized=\"' + $AVG(this).html().toUpperCase() + '\"' : '';\n var addClass = ($AVG(this).attr('data-class')) ? $AVG(this).attr('data-class') : '';\n var valclass = ($AVG(this).attr('value').length != 0) ? 'val-' + $AVG(this).attr('value') : '';\n var flagClass = showFlags && valclass.length != 0 ? 'flag-' + $AVG(this).attr('value') : '';\n options += '' + $AVG(this).text() + '';\n });\n\n options = ($AVG('').html('
    ' + options + '
').contents());\n var select = $AVG('' + ((typein) ? '' : '' + selectval + '') + '')\n .insertAfter($AVG(this));\n $AVG(options).appendTo($AVG(select));\n });\n\n $AVG('span.select.input .value').off('click').on('click', function(e, data) {\n e.stopPropagation();\n var event = window.event ? window.event : e;\n var parent = $AVG(this).closest('span.select.input');\n var actualLi = ($AVG(parent).find('li.selected').length == 1) ? $AVG(parent).find('ul li.selected') : $AVG(parent).find('ul li:first-child');\n if (event.type == 'click') {\n $AVG(parent).find('input[type=\"text\"]').trigger('focus');\n if ($AVG(parent).attr('data-disabled') === 'false') {\n if ($AVG(parent).find('.ul-wrapper').hasClass('active')) {\n $AVG(parent).find('.ul-wrapper').removeClass('active');\n } else {\n $AVG(parent).find('li').removeClass('hide hovered');\n $AVG('span.select.input .ul-wrapper').removeClass('active');\n $AVG(parent).find('.ul-wrapper').addClass('active');\n $AVG(parent).find('.ul-wrapper').scrollTop(getOffset(actualLi).top);\n }\n }\n }\n });\n\n $AVG('span.select.input[data-type-in=\"true\"] input[type=\"text\"]').on('keyup keydown', function(e) {\n var event = window.event ? window.event : e;\n keyboardEvents($AVG(this), e, true);\n });\n\n $AVG('span.select.input input.input-hidden[type=\"text\"]').on('keyup keydown', function(e) {\n var event = window.event ? window.event : e;\n keyboardEvents($AVG(this), e, false);\n });\n\n $AVG(document).on(\"click\", function() {\n actualLi = undefined;\n var selectInput = $AVG('span.select.input input[type=\"text\"]');\n $AVG('span.select.input .ul-wrapper').removeClass('active');\n if ($AVG(selectInput).length > 0) {\n $AVG.each($AVG(selectInput), function() {\n $AVG(this).prop('value', $AVG(this).prop('placeholder'));\n });\n }\n });\n\n $AVG('span.select.input li').off('click').on('click', function(e, data) {\n if ($AVG(this).closest('span.select.input').attr('data-disabled') === 'false') {\n var parent = $AVG(this).closest('span.select.input');\n $AVG(parent).find('li').removeClass('selected');\n $AVG(this).addClass('selected');\n $AVG(parent).find('.value span:first-child input').val($AVG(this).text());\n $AVG(parent).find('.value span:first-child input').attr('placeholder', $AVG(this).text());\n if ($AVG(parent).find('.value span:first-child span.sval').length > 0) {\n $AVG(parent).find('.value span:first-child span.sval').text($AVG(this).text());\n }\n if (typeof data === \"undefined\") {\n data = {\n change: true\n };\n }\n if (data.change === true) {\n $AVG('#' + $AVG(parent).attr('data-for')).val($AVG(this).attr('data-value')).trigger('change', {\n change: false\n });\n }\n $AVG(parent).find('.ul-wrapper').removeClass('active');\n }\n });\n\n $AVG(els).on('change keydown', function(e, data) {\n var event = window.event ? window.event : e;\n var keyCode = (window.Event) ? event.which : event.keyCode;\n\n /* UP, DOWN ARROW */\n if (keyCode === 38 || keyCode === 40 && event.type === 'keydown' || event.type === 'change') {\n if (typeof data === \"undefined\") {\n data = {\n change: true\n };\n }\n if (data.change === true) {\n $AVG('[data-for=\"' + $AVG(this).attr('id') + '\"] ' + '[data-value=\"' + $AVG(this).find(':selected').attr('value') + '\"]').trigger('click', {\n change: false\n });\n }\n }\n });\n\n $AVG(els).on('focus', function(e, data) {\n $AVG('span.input.select').removeClass('focus');\n $AVG('[data-for=\"' + $AVG(this).attr('id') + '\"]').addClass('focus');\n });\n\n $AVG(els).on('blur', function(e, data) {\n $AVG('[data-for=\"' + $AVG(this).attr('id') + '\"]').removeClass('focus');\n });\n};\n\nfunction getQueryVariable(variable) {\n var query = encodeURIComponent(window.location.search.substring(1));\n var vars = query.split(\"%26\");\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split(\"%3D\");\n if (pair[0] === variable) {\n return pair[1];\n }\n }\n return '';\n};\n\n/* equal elements heights */\n$.fn.getHighestElement = function() {\n var maxHeight = this.map(function(i, e) {\n return $(e).height();\n }).get();\n return Math.max.apply(this, maxHeight);\n};\n\n/*\n * Check if array contains value\n * @returns {Boolean}\n */\nfunction isInArray(value, array) {\n return array.indexOf(value) > -1;\n}\n\n/*\n* Check device with touch event\n* {@link https://modernizr.com}\n* @return {String} touchevent\n*/\nfunction checkTouchEvents() {\n var touchevent = 'no-touchevents';\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n var touchevent = 'touchevents';\n }\n return touchevent;\n}\n\n/**\n* Get translation of plural string according to number of items\n* @param key to the data object\n* @param number amount of items of units from key\n* @param data dictionary JSON object\n* @return Dictionary string with the locale translation or empty string\n*/\nfunction translation(dicKey, number, data){\n var plural;\n $AVG.each(data, function(key, value) {\n /* check for correct format NAME_FROM,_TO and if the number is inside [from, to)\n from inclusive\n to exclusive\n eg NAME_1_5 means 1,2,3,4 (not 5!)\n */\n if( key.indexOf(dicKey) !== -1 && key.indexOf('_') !== -1){\n var nameParts = key.split('_');\n if ( nameParts.length > 2 && parseInt(number) >= nameParts[1] && parseInt(number) < nameParts[2]) {\n plural = value;\n }\n }\n\n });\n return plural;\n}\n\n/* equal heights */\n$.fn.equalizeHeights = function () {\n var maxHeight = this.map(function (i, e) {\n return $(e).height();\n }).get();\n return this.height(Math.max.apply(this, maxHeight));\n};\n\n$AVG(document).ready(function() {\n var browser = getBrowser();\n var android = getAndroidVersion();\n\n browser.android = '';\n if (android) {\n browser.android = ' android-' + android.substr(0, 1);\n }\n $AVG('body').addClass('br-' + browser.browser.toLowerCase() + ' br-ver-' + browser.version_rounded + browser.android + ' ' + checkTouchEvents());\n waitForWebfonts(['AVGSans_Light','AVGSans_1', 'AVGSans_2', 'AVGSans_3', 'AVGSans_4'], function() {\n $AVG(window).trigger('fontsLoaded');\n });\n});\n\n/*\n 1.4.2016 - Suggest to remove.\n This function doesn't work as expected.\n Use .visible() function instead.\n */\n$AVG.fn.isVisible = function () {\n\tvar el = this;\n\tvar top = el.offset().top;\n\tvar left = el.offset().left;\n\tvar width = el.outerWidth();\n\tvar height = el.outerHeight();\n\n\tel = el.offsetParent();\n\ttop += el.offset().top;\n\tleft += el.offset().left;\n\n\treturn (\n\t\t($AVG(window).scrollTop() + $AVG(window).innerHeight()) >= top && $AVG(window).scrollTop() <= (top + height) &&\n\t\t($AVG(window).scrollLeft() + $AVG(window).innerWidth()) >= left && $AVG(window).scrollLeft() <= (left + width)\n\t);\n}\n\n$AVG.extend($AVG.expr[':'], {isvisible: function(elem) {\n\treturn $AVG(elem).isVisible() ? $AVG(elem) : false;\n}});\n(function ($) {\n\n /**\n * Copyright 2012, Digital Fusion Licensed under the MIT license.\n * http://teamdf.com/jquery-plugins/license/\n *\n * @author Sam Sehnert\n * @desc A small plugin that checks whether elements are within the user\n * visible viewport of a web browser. only accounts for vertical\n * position, not horizontal.\n */\n var $w = $(window);\n $.fn.visible = function (partial, hidden, direction) {\n\n if (this.length < 1)\n return;\n\n var $t = this.length > 1 ? this.eq(0) : this,\n t = $t.get(0),\n vpWidth = $w.width(),\n vpHeight = $w.height(),\n direction = (direction) ? direction : 'both',\n clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true;\n\n if (typeof t.getBoundingClientRect === 'function') {\n\n // Use this native browser method, if available.\n var rec = t.getBoundingClientRect(),\n tViz = rec.top >= 0 && rec.top < vpHeight,\n bViz = rec.bottom > 0 && rec.bottom <= vpHeight,\n lViz = rec.left >= 0 && rec.left < vpWidth,\n rViz = rec.right > 0 && rec.right <= vpWidth,\n vVisible = partial ? tViz || bViz : tViz && bViz,\n hVisible = partial ? lViz || lViz : lViz && rViz;\n\n if (direction === 'both')\n return clientSize && vVisible && hVisible;\n else if (direction === 'vertical')\n return clientSize && vVisible;\n else if (direction === 'horizontal')\n return clientSize && hVisible;\n else if (direction === 'vertical-bottom')\n return clientSize && bViz;\n } else {\n\n var viewTop = $w.scrollTop(),\n viewBottom = viewTop + vpHeight,\n viewLeft = $w.scrollLeft(),\n viewRight = viewLeft + vpWidth,\n offset = $t.offset(),\n _top = offset.top,\n _bottom = _top + $t.height(),\n _left = offset.left,\n _right = _left + $t.width(),\n compareTop = partial === true ? _bottom : _top,\n compareBottom = partial === true ? _top : _bottom,\n compareLeft = partial === true ? _right : _left,\n compareRight = partial === true ? _left : _right;\n\n if (direction === 'both')\n return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft));\n else if (direction === 'vertical')\n return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop));\n else if (direction === 'horizontal')\n return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft));\n else if (direction === 'vertical-bottom') { \n return !!clientSize && (compareBottom <= viewBottom);\n }\n }\n };\n\n})($);\n/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$dialog = this.$element.find('.modal-dialog')\n this.$backdrop = null\n this.isShown = null\n this.originalBodyPad = null\n this.scrollbarWidth = 0\n this.ignoreBackdropClick = false\n this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.4.1'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this.isShown ? this.hide() : this.show(_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.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n })\n })\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(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n that.adjustDialog()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element.addClass('in')\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$dialog // wait for modal to slide in\n .one('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('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 this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .off('click.dismiss.bs.modal')\n .off('mouseup.dismiss.bs.modal')\n\n this.$dialog.off('mousedown.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\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 (document !== e.target &&\n this.$element[0] !== e.target &&\n !this.$element.has(e.target).length) {\n this.$element.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\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 = $(document.createElement('div'))\n .addClass('modal-backdrop ' + animate)\n .appendTo(this.$body)\n\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n if (this.ignoreBackdropClick) {\n this.ignoreBackdropClick = false\n return\n }\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus()\n : this.hide()\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('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n this.adjustDialog()\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n var fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n var documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n var scrollbarWidth = this.scrollbarWidth\n if (this.bodyIsOverflowing) {\n this.$body.css('padding-right', bodyPad + scrollbarWidth)\n $(this.fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight\n var calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n })\n }\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', this.originalBodyPad)\n $(this.fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(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 var old = $.fn.modal\n\n $.fn.modal = Plugin\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') ||\n (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n var $target = $(document).find(target)\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n Plugin.call($target, option, this)\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n/* +function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options, trigger, config) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$backdrop =\n this.isShown = null\n this.$trigger\t\t\t\t= trigger\n this.scrollbarWidth = 0\n this.config\t\t\t\t\t= config\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.3.1'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n options: { title: '' },\n show: true,\n delay: 0\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n\t\treturn this.isShown ? this.hide() : this.show(_relatedTarget)\n }\n\n Modal.prototype.setIframe = function (target, url) {\n\t\tvar body = target.find('.modal-body');\n\t\tvar iframeFormat = ''\n\n\t\tbody.html(iframeFormat);\n\t}\n\n Modal.prototype.removeIframe = function (target) {\n\t\tvar body = target.find('.modal-body');\n\t\tbody.find('iframe').remove();\n }\n\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n var config = this.$trigger.data().options || {}\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n if (this.$trigger.hasClass('video-open')) {\n \tthis.$element.addClass('video')\n \tthis.setIframe(this.$element, this.$trigger.attr('href').substr(1))\n }\n\n\t\tif (typeof config.title !== \"undefined\") {\n\t\t\tthis.$element.removeClass('no-header')\n \tthis.$element.find('.modal-header').append('

' + config.title + '

')\n }\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.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(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n if (that.options.backdrop) that.adjustBackdrop()\n that.adjustDialog()\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('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('focus').trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n var config = this.$trigger.data().options || {}\n\n e = $.Event('hide.bs.modal')\n\n\t\tthis.$element.removeClass('video').trigger(e)\n\n if (typeof config.title !== \"undefined\") {\n\t this.$element.addClass('no-header')\n\t this.$element.find('.modal-header h4').remove()\n\t this.removeIframe(this.$element)\n }\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .attr('aria-hidden', true)\n .off('click.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\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.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\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 var classes = ''\n\t\t\tif (this.$trigger.hasClass('video-open')) {\n\t\t\t\tclasses = ' video';\n\t\t\t}\n\n this.$backdrop = $('
')\n .prependTo(this.$element)\n .on('click.dismiss.bs.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('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n if (this.options.backdrop) this.adjustBackdrop()\n this.adjustDialog()\n }\n\n Modal.prototype.adjustBackdrop = function () {\n this.$backdrop\n .css('height', 0)\n .css('height', this.$element[0].scrollHeight)\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', '')\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(option, _relatedTarget, trigger, config) {\n\t\treturn this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n Modal.DEFAULTS.modalDelay = 0;\n\t\t\tif (trigger.data().modalDelay) Modal.DEFAULTS.modalDelay = trigger.data().modalDelay\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n var reevaluate = true\n\n\t\t\tif (typeof options['bs.modal'] === 'undefined')\n\t\t\t\toptions['bs.modal'] = {'options': {'delay': 0}}\n\n\t\t\tif (typeof trigger.data().options !== \"undefined\" && typeof $this.data('bs.modal') !== \"undefined\") {\n\t\t\t\t\tif ($this.data('bs.modal').$trigger[0] === trigger[0])\n\t\t\t\t\t\treevaluate = false;\n\t\t\t}\n\n if (!data || reevaluate) { $this.data('bs.modal', (data = new Modal(this, options, trigger))); }\n if (typeof option == 'string') setTimeout(function(){data[option](_relatedTarget)}, options.delay || options['bs.modal'].options.delay)\n else if (options.show) setTimeout(function(){data.show(_relatedTarget)}, options.delay || options['bs.modal'].options.delay)\n })\n }\n\n var old = $.fn.modal\n\n $.fn.modal = Plugin\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\tfunction readyHandler () {\n\t\tthis.href = '#' + this.href;\n\t}\n\n // MODAL DATA-API\n // ==============\n\n $(document).ready(function(){\n \t$('.video-open[data-toggle=\"modal\"]').each(function(){\n\t\t\treadyHandler.call(this);\n\t });\n\t});\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('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n\n Plugin.call($target, option, null, $this)\n })\n\n}(jQuery); */\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n '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 return false // explicit for ie8 ( ._.)\n }\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', 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 if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n\n+function ($) {\n '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.$trigger = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\n this.transitioning = null\n\n if (this.options.event == 'resize' || this.options.event == 'load') {\n var element = this.$element\n var trigger = this.$trigger\n var sizeAction = {}\n this.options.sizes = setSizeList(this.options.sizes);\n compareSize(\n this.options.sizes,\n function () {\n sizeAction = true\n trigger\n .removeClass('expandLink')\n },\n function () {\n sizeAction = false\n trigger\n .addClass('expandLink')\n }\n );\n this.options['sizeAction'] = sizeAction\n }\n\n if (typeof this.options.sizes === 'undefined')\n this.options.sizes = {};\n\n if (this.options.parent) {\n this.$parent = this.getParent()\n } else {\n this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n }\n\n if (this.options.toggle)\n this.toggle()\n\n }\n\n Collapse.VERSION = '3.3.1'\n\n Collapse.TRANSITION_DURATION = 350\n\n Collapse.DEFAULTS = {\n toggle: true,\n trigger: '[data-toggle=\"collapse\"]'\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'))\n return\n var activesData\n var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\n\n $('body')\n .trigger('menu-opening', {element: this});\n\n if (actives && actives.length) {\n activesData = actives.data('bs.collapse')\n if (activesData && activesData.transitioning)\n return\n }\n\n var startEvent = $.Event('show.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented())\n return\n\n if (actives && actives.length) {\n Plugin.call(actives, 'hide')\n activesData || actives.data('bs.collapse', null)\n }\n\n var dimension = this.dimension()\n\n if (Object.keys(this.options.sizes).length > 0) {\n var element = this.$element\n var trigger = this.$trigger\n\n this.options.sizes = setSizeList(this.options.sizes);\n compareSize(\n this.options.sizes,\n function () {\n element\n .removeClass('collapse')\n .addClass('collapsing')[dimension](0)\n .attr('aria-expanded', true)\n\n trigger\n .removeClass('collapsed plus')\n .addClass('minus icon-right')\n .attr('aria-expanded', true)\n },\n function () {\n element\n .attr('aria-expanded', true)\n trigger\n .removeClass('plus')\n .attr('aria-expanded', true)\n }\n );\n } else {\n element\n .removeClass('collapse')\n .addClass('collapsing')[dimension](0)\n .attr('aria-expanded', true)\n\n trigger\n .removeClass('collapsed')\n .attr('aria-expanded', true)\n }\n\n this.transitioning = 1\n\n var complete = function () {\n $('body')\n .addClass('menu-opened')\n .removeClass('menu-closed');\n\n this.$element\n .removeClass('collapsing')\n .addClass('collapse in')[dimension]('')\n this.transitioning = 0\n this.$element\n .trigger('shown.bs.collapse')\n }\n\n if (!$.support.transition)\n return complete.call(this)\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n this.$element\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n }\n\n Collapse.prototype.hide = function () {\n if (this.transitioning || !this.$element.hasClass('in'))\n return\n var startEvent = $.Event('hide.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented())\n return\n\n var dimension = this.dimension()\n\n $('body')\n .trigger('menu-closing', {element: this});\n\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n this.transitioning = 1\n\n var complete = function () {\n $('body')\n .addClass('menu-closed')\n .removeClass('menu-opened');\n\n this.transitioning = 0\n this.$element\n .removeClass('collapsing')\n .addClass('collapse')\n .trigger('hidden.bs.collapse')\n }\n\n if (Object.keys(this.options.sizes).length > 0) {\n var $this = this\n var element = this.$element\n var trigger = this.$trigger\n this.options.sizes = setSizeList(this.options.sizes);\n compareSize(\n this.options.sizes,\n function () {\n element\n .addClass('collapsing')\n .removeClass('collapse in')\n .attr('aria-expanded', false)\n [dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, $this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n\n trigger\n .removeClass('minus')\n .addClass('collapsed plus icon-right')\n .attr('aria-expanded', false)\n\n },\n function () {\n element\n .one('bsTransitionEnd', $.proxy(complete, $this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n }\n );\n } else {\n element\n .addClass('collapsing')\n .removeClass('collapse in')\n .attr('aria-expanded', false)\n\n trigger\n .addClass('collapsed')\n .attr('aria-expanded', false)\n\n this.$element\n [dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n }\n\n if (!$.support.transition)\n return complete.call(this)\n\n }\n\n Collapse.prototype.toggle = function () {\n if (Object.keys(this.options.sizes).length > 0 && (this.options.event == \"load\" || this.options.event == \"resize\")) {\n\n if (this.options.sizeAction) {\n this.hide()\n this.$trigger.addClass('collapsed plus icon-right')\n } else {\n this.show()\n }\n this.options.event = \"default\"\n } else {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n }\n\n Collapse.prototype.getParent = function () {\n return $(this.options.parent)\n .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n .each($.proxy(function (i, element) {\n var $element = $(element)\n this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n }, this))\n .end()\n }\n\n Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n var isOpen = $element.hasClass('in')\n\n $element.attr('aria-expanded', isOpen)\n $trigger\n .toggleClass('collapsed', !isOpen)\n .attr('aria-expanded', isOpen)\n }\n\n function getTargetFromTrigger($trigger) {\n var href\n var target = $trigger.attr('data-target')\n || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n return $(target)\n }\n\n\n// COLLAPSE PLUGIN DEFINITION\n// ==========================\n\n function Plugin(option) {\n\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 if (!data && options.toggle && option == 'show')\n options.toggle = false\n if (!data || option.event == 'resize')\n $this.data('bs.collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string')\n data[option]()\n })\n }\n\n var old = $.fn.collapse\n\n $.fn.collapse = Plugin\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)\n if (!$this.attr('data-target'))\n e.preventDefault()\n var $target = getTargetFromTrigger($this)\n var data = $target.data('bs.collapse')\n var option = data ? 'toggle' : $.extend({}, $this.data(), {trigger: this})\n Plugin.call($target, option)\n })\n\n var eventHandler = function (els, event) {\n\n var $this = $(els)\n $.each($this, function () {\n\n var $target = getTargetFromTrigger($(this))\n var option = $.extend({}, {event: event}, $this.data(), {trigger: this})\n Plugin.call($target, option)\n });\n }\n\n $(window).load(\n function () {\n eventHandler('[data-expand]', \"load\")\n }\n )\n $(window).resize(function () {\n waitForFinalEvent(function () {\n eventHandler('[data-expand]', \"resize\")\n }, 500);\n });\n\n\n}(jQuery);\n/* ========================================================================\n * Bootstrap: navigation.js v3.3.1\n * ========================================================================\n * Copyright 2015 Vojtech Portes\n * ======================================================================== */\n\n\n+function ($) {\n\t'use strict';\n\n\t// NAVIGATION CLASS DEFINITION\n\t// ====================\n\n\tvar Navigation = function (element, options) {\n\t\tthis.element = $(element);\n\t\tthis.options = options;\n\t\tthis.options.css3 = true;\n\t\tthis.$trigger = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-navigation-target=\"#' + element.id + '\"]');\n\t}\n\n\tNavigation.prototype.toggle = function () {\n\t\tvar controls = this.options.navigationControls;\n\t\tvar $target = $(this.options.navigationTarget);\n\t\tvar $parent = $(controls.container);\n\t\tvar $navigation = $(controls.navigationContainer).first();\n\t\tvar $this = $(this.element);\n\t\tvar settings = {};\n\t\tsettings.parent = {};\n\t\tsettings.nav = {};\n\n\t\t$('html, body').animate({\n\t\t\tscrollTop: $(\".navigation\").offset().top\n\t\t}, 100);\n\n\t\t$target.toggleClass('in');\n\t\t$('body, html').toggleClass('nav-active');\n\n\t\tif (!propertyExists('transition')) {\n\t\t\tif ($target.hasClass('in')) {\n\t\t\t\tif (controls.align == 'left') {\n\t\t\t\t\tvar base = $navigation.css('left');\n\t\t\t\t\tsettings.parent.right = controls.closed;\n\n\t\t\t\t\tif ($('body').hasClass('br-msie')) {\n\t\t\t\t\t\tsettings.nav.left = base + controls.closed;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettings.nav.left = controls.opened;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (controls.align == 'right') {\n\t\t\t\t\tvar base = $navigation.css('right');\n\t\t\t\t\tsettings.parent.left = controls.closed;\n\n\t\t\t\t\tif ($('body').hasClass('br-msie')) {\n\t\t\t\t\t\tsettings.nav.right = base + controls.closed;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsettings.nav.right = controls.opened;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t$target.animate(settings.nav, controls.duration);\n\t\t\t\t$navigation.animate(settings.parent, controls.duration);\n\t\t\t\t$parent.animate(settings.parent, controls.duration);\n\t\t\t} else {\n\t\t\t\tif (controls.align == 'left') {\n\t\t\t\t\tsettings.parent.right = -controls.opened;\n\t\t\t\t\tsettings.nav.left = controls.closed;\n\t\t\t\t}\n\t\t\t\tif (controls.align == 'right') {\n\t\t\t\t\tsettings.parent.left = -controls.opened;\n\t\t\t\t\tsettings.nav.right = controls.closed;\n\t\t\t\t}\n\n\t\t\t\t$target.animate(settings.nav, controls.duration);\n\t\t\t\t$navigation.animate(settings.parent, controls.duration);\n\t\t\t\t$parent.animate(settings.parent, controls.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tNavigation.prototype.init = function () {\n\t\tvar controls = this.options.navigationControls;\n\t\tvar $target = $(this.options.navigationTarget);\n\t\tvar $parent = $(controls.container);\n\t\tvar $navigation = $(controls.navigationContainer);\n\t\tvar $this = $(this.element);\n\t\tvar css = {};\n\n\t\tcss['position'] = 'relative';\n\t\tcss[((controls.align == 'right') ? 'left' : 'right')] = 0;\n\t\t$parent.css(css);\n\n\t\t$navigation.css(css);\n\n\t\tif (propertyExists('transition')) {\n\t\t\t$target.prepend('');\n\t\t}\n\t}\n\n\tfunction propertyExists(property) {\n\t\tvar feature = false,\n\t\t\t\tdomPrefixes = 'Webkit Moz ms O'.split(' '),\n\t\t\t\telm = document.createElement('div'),\n\t\t\t\tpropertyCapital = null;\n\n\t\tproperty = property.toLowerCase();\n\n\t\tif (elm.style[property] !== undefined) {\n\t\t\tfeature = true;\n\t\t}\n\n\t\tif (feature === false) {\n\t\t\tpropertyCapital = property.charAt(0).toUpperCase() + property.substr(1);\n\t\t\tfor (var i = 0; i < domPrefixes.length; i++) {\n\t\t\t\tif (elm.style[domPrefixes[i] + propertyCapital ] !== undefined) {\n\t\t\t\t\tproperty = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn feature;\n\t}\n\n\tfunction browserProperty(property, value, valuePrefix) {\n\t\tif (typeof valuePrefix === 'undefined')\n\t\t\tvaluePrefix = false;\n\n\t\treturn \tproperty + ': ' + value + ';'\n\t\t\t\t+ '-webkit-' + property + ': ' + ((valuePrefix) ? '-webkit-' : '') + value + ';'\n\t\t\t\t+ '-moz-' + property + ': ' + ((valuePrefix) ? '-moz-' : '') + value + ';'\n\t\t\t\t+ '-ms-' + property + ': ' + ((valuePrefix) ? '-ms-' : '') + value + ';'\n\t\t\t\t+ '-o-' + property + ': ' + ((valuePrefix) ? '-o-' : '') + value + ';';\n\t}\n\n\n\t// NAVIGATION PLUGIN DEFINITION\n\t// =====================\n\n\tfunction Plugin(option) {\n\t\treturn this.each(function () {\n\t\t\tvar $this = $(this)\n\t\t\tvar options = $.extend({}, $this.data(), typeof object == 'object' && option)\n\n\t\t\tvar data = new Navigation(this, options);\n\t\t\tswitch (option) {\n\t\t\t\tcase 'init':\n\t\t\t\t\tif (options.navigationControls.actionSkip !== \"init\") {\n\t\t\t\t\t\tdata.init();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'toggle':\n\t\t\t\t\tdata.toggle();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t})\n\t}\n\n\tvar old = $.fn.navigation\n\n\t$.fn.navigation = Plugin\n\t$.fn.navigation.Constructor = Navigation\n\n\n\t// NAVIGATION NO CONFLICT\n\t// ===============\n\n\t$.fn.navigation.noConflict = function () {\n\t\t$.fn.navigation = old\n\t\treturn this\n\t}\n\n\n\t// NAVIGATION DATA-API\n\t// ============\n\n\tvar clickHandler = function (e) {\n\t\te.preventDefault()\n\t\tPlugin.call($(this), 'toggle')\n\t}\n\n\tvar readyHandler = function (e) {\n\t\tvar els = '[data-navigation-toggle=\"navigation\"]'\n\t\tPlugin.call($(els), 'init');\n\t}\n\n\t$(document)\n\t\t\t.on('click.bs.naviagtion.data-api', '[data-navigation-toggle=\"navigation\"]', clickHandler)\n\t\t\t.ready(readyHandler)\n\n}(jQuery);\n\nAndroidFix = window.AndroidFix || {};\nAndroidFix.androidNav = (function ($, document) {\n\tvar api = {};\n\tvar navItems = $(\".nav-main-link\").filter(function () {\n\t\treturn($(this).find(\"ul\").length !== 0);\n\t});\n\n\t$('.navbar-toggle, .navigation-close').on('click', function() {\n\t\tvar $trackButton = $('[data-bi-nav-menu-status]'),\n\t\t\t$trackButtonTrackingAttribute = $trackButton.attr('data-bi-nav-menu-status');\n\n\t\tif ($trackButtonTrackingAttribute === 'open') {\n\t\t\t$trackButton.attr('data-bi-nav-menu-status', 'close');\n\t\t} else {\n\t\t\t$trackButton.attr('data-bi-nav-menu-status', 'open');\n\t\t}\n\t});\n\n\tfunction handleClick(event)\n\t{\n\t\tif ($('.navbar-toggle').css('display') === \"none\") {\n\t\t\tnavItems.on('click.android-link', '> a', function (e) {\n\t\t\t\tvar linkParent = $(this).parent();\n\t\t\t\tif (linkParent.hasClass(\"open\")) {\n\t\t\t\t\tlinkParent.removeClass(\"open\");\n\t\t\t\t} else {\n\t\t\t\t\tnavItems.removeClass(\"open\");\n\t\t\t\t\tlinkParent.addClass('open');\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t});\n\t\t} else {\n\t\t\tnavItems.off(\"click.android-link\");\n\t\t}\n\t}\n\n\tapi.init = function () {\n\t\t$(document).on({\n\t\t\tready: function () {\n\t\t\t\tnavItems.addClass('mobile-android-link');\n\t\t\t\thandleClick();\n\t\t\t}\n\t\t});\n\t\t$(window).resize(function () {\n\t\t\thandleClick();\n\t\t});\n\t};\n\treturn api;\n}($, document));\n\n$(document).ready(function () {\n\tif (getAndroidVersion()) {\n\t\tAndroidFix.androidNav.init();\n\t}\n\n\tif ($(window).width() < 991 && $('.navigation').length > 0) {\n\t\tfunction mobileNavigation() {\n\t\t\tvar $menuLink = $('.nav-main-link > a'),\n\t\t\t\t$menuLinkSubmenu = $menuLink.parent().find('ul'),\n\t\t\t\t$navigationClose = $('.js-navigation-close'),\n\t\t\t\t$navigationBack = $('.js-navigation-back');\n\n\t\t\t$menuLinkSubmenu.attr('style', 'display: block !important');\n\t\t\t$navigationBack.hide();\n\n\t\t\t$(window).on('resize', function() {\n\t\t\t\t$menuLinkSubmenu.removeClass('active');\n\t\t\t\t$navigationBack.hide();\n\n\t\t\t\tif ($(window).width < 991) {\n\t\t\t\t\t$menuLinkSubmenu.attr('style', 'display: block !important');\n\t\t\t\t} else {\n\t\t\t\t\t$menuLinkSubmenu.attr('style', '');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$menuLink.on('click', function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tvar $self = $(this),\n\t\t\t\t\t$selfSubmenu = $self.parent().find('ul'),\n\t\t\t\t\tselfLink = $self.attr('href');\n\n\t\t\t\tif (selfLink.indexOf('all-products') > -1 || selfLink.indexOf('services') > -1\n\t\t\t\t\t|| selfLink.indexOf('support') > -1 || selfLink.indexOf('business') > -1\n\t\t\t\t\t|| selfLink.indexOf('store#') > -1) {\n\t\t\t\t\t$menuLinkSubmenu.removeClass('active');\n\t\t\t\t\t$selfSubmenu.addClass('active');\n\t\t\t\t\t$menuLinkSubmenu.attr('style', 'display: block !important');\n\t\t\t\t\t$navigationBack.show();\n\t\t\t\t} else {\n\t\t\t\t\twindow.location = selfLink;\n\t\t\t\t}\n\n\t\t\t\t// $menuLinkSubmenu.attr('style', 'display: none !important');\n\n\t\t\t\t// $selfSubmenu.attr('style', 'display: block !important');\n\t\t\t});\n\n\t\t\t$navigationClose.on('click', function() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$menuLinkSubmenu.removeClass('active');\n\t\t\t\t\t$navigationBack.hide();\n\t\t\t\t}, 500);\n\t\t\t});\n\n\t\t\t$navigationBack.on('click', function() {\n\t\t\t\t$menuLinkSubmenu.removeClass('active');\n\t\t\t\t$(this).hide();\n\t\t\t});\n\n\t\t\t// Close navigation if clicked outside of it\n\t\t\t$(document).on('click', function(event) {\n\t\t\t\tvar $clicked = $(event.target);\n\n\t\t\t\t// In file 30_optoutbar.js is click triggering when Cookie bar closed. This will prevent script from automatic closing of navigation in condition below this IF.\n\t\t\t\tif ($clicked.hasClass('cookie-submit-button')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ($('.nav-active').length > 0 && $('.navigation').has($clicked).length === 0) {\n\t\t\t\t\t$navigationClose.trigger('click');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tmobileNavigation();\n\n\t\t// Bug fix - closed cookie bar causes page to scroll up, but body overflow is hidden when nav opened. Need to scroll to top of the page when navigation closed.\n\t\t$(window).on('cookie-bar-closed', function() {\n\t\t\t$(window).scrollTop(0);\n\t\t});\n\t}\n});\n\n// nav accessibility\nvar lastOpenedMenu = null,\n\tlastOpenedSubMenu = null,\n\tlastMenuLink = null;\n\n// nodeList not working in IE\ntry {\n\tdocument.querySelectorAll('.nav-main-link').forEach(function(navButton) {\n\t\tnavButton.addEventListener('keydown', function(e) {\n\t\t\tif (e.which == 13 || e.keyCode == 13) {\n\t\t\t\tif (navButton.querySelector('ul') !== null && /menu-link/.test(document.activeElement.className)) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\texpandNav(navButton);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t});\n}\ncatch (err){\n}\n\ndocument.addEventListener('keydown', function(e) {\n\tif (e.which == 9 || e.keyCode == 9) {\n\t\tif (lastMenuLink !== null) {\n\t\t\tif (document.activeElement === lastMenuLink) {\n\t\t\t\tlastOpenedSubMenu.focus();\n\t\t\t}\n\t\t}\n\t} else if (e.which == 27 || e.keyCode == 27) {\n\t\tcloseNav();\n\t}\n});\n\nfunction closeNav() {\n\tif (lastOpenedMenu !== null) {\n\t\tdocument.querySelector('[aria-expanded=true]') !== undefined ? document.querySelector('[aria-expanded=true]').setAttribute('aria-expanded', false) : '';\n\t\tdocument.querySelector('.navigation .expanded') !== undefined ? document.querySelector('.navigation .expanded').classList.remove('expanded') : '';\n\t\tlastOpenedMenu.focus();\n\n\t\tlastOpenedMenu = null;\n\t\tlastOpenedSubMenu = null,\n\t\tlastMenuLink = null;\n\t}\n}\n\nfunction expandNav(mainNavItem) {\n\tvar navLink = mainNavItem.querySelector('.menu-link'),\n\t\tsubMenu = mainNavItem.querySelector('ul.bi-nav-items'),\n\t\tlinksArray = subMenu.querySelectorAll('a:not(.js-navigation-close)');\n\n\tmainNavItem.classList.add('expanded');\n\tnavLink.setAttribute('aria-expanded', true);\n\tsubMenu.setAttribute('tabIndex', -1);\n\tsubMenu.focus();\n\n\tlastOpenedSubMenu = subMenu;\n\tlastOpenedMenu = navLink;\n\tlastMenuLink = linksArray[linksArray.length - 1];\n}\n\n/* ========================================================================\n * Bootstrap: dimension.js v3.0.1\n * ========================================================================\n * Copyright V. Portes 2015\n * ======================================================================== */\n\n+function ($) {\n\n\n\n var Dimension = function (element, event) {\n this.element = $(element);\n this.event = event;\n }\n\n Dimension.prototype.setFullHeight = function (parent, options) {\n var $this = this.element;\n var height = {};\n var minus_height = 0;\n var m;\n\n if (typeof options.property === 'undefined')\n options.property = 'height';\n if (typeof options.sizes === 'undefined')\n options.sizes = {};\n if (typeof options.minus === 'undefined')\n options.minus = 0;\n if (typeof options.searchParent === 'undefined')\n options.searchParent = true;\n if (typeof options.outerHeight === 'undefined')\n options.outerHeight = false;\n\n if (typeof options.minus === 'string') {\n var pattern = new RegExp(/(?:\\s([+-])\\s)?([.#]?[a-zA-Z\\[\\]\\-=\\\"\\'\\{\\}:,*]+)/g);\n var sign = '+';\n var visible;\n while ((m = pattern.exec(options.minus)) != null) {\n if (typeof m[1] !== 'undefined') {\n if (m[1] == '+' || m[1] == '-') {\n sign = m[1];\n }\n }\n if (typeof m[2] !== 'undefined') {\n if ($(m[2]).length > 0) {\n visible = true;\n if ($(m[2])) {\n visible = true;\n }\n\n if (visible) {\n if (sign == '+') {\n minus_height = minus_height + $(m[2]).first().outerHeight();\n } else if (sign == '-') {\n minus_height = minus_height - $(m[2]).first().outerHeight();\n }\n }\n }\n }\n }\n options.minus = minus_height;\n }\n\n if (this.event == 'resize') {\n $this.css(options.property, 'auto');\n }\n\n if (parent === 'window') {\n if (options.outerHeight) {\n height.parent = $(window).outerHeight();\n } else {\n height.parent = $(window).height();\n }\n } else {\n if (options.searchParent) {\n if (options.outerHeight) {\n height.parent = $this.parents(parent).outerHeight();\n } else {\n height.parent = $this.parents(parent).height();\n }\n } else {\n if (options.outerHeight) {\n height.parent = $(parent).outerHeight();\n } else {\n height.parent = $(parent).height();\n }\n }\n }\n\n if (Object.keys(options.sizes).length > 0) {\n options.sizes = setSizeList(options.sizes);\n compareSize(\n options.sizes,\n function () {\n $this.css(options.property, height.parent - options.minus);\n },\n function () {\n $this.css(options.property, 'auto');\n }\n );\n } else {\n $this.css(options.property, height.parent - options.minus);\n }\n }\n\n Dimension.prototype.setEqualHeights = function (elements) {\n var heights = [];\n var $this = this.element;\n $this.find(elements).css('height', 'auto');\n $.each($this.find(elements), function () {\n heights.push(parseInt($(this).outerHeight()));\n });\n heights.sort(function (a, b) {\n return b - a\n });\n $this.find(elements).css('height', heights[0] + 'px');\n }\n\n\n function Plugin(els, event) {\n $.each($(els), function () {\n var data = new Dimension(this, event);\n var options = $.extend({}, $(this).data('dimension-options'), true);\n switch ($(this).data('dimension-action')) {\n case 'fullHeight':\n var parent = $(this).data('dimension-target');\n data.setFullHeight(parent, options);\n break;\n case 'equalHeights':\n var elements = $(this).data('dimension-target');\n $.each(elements.split(' | '), function (k, el) {\n data.setEqualHeights(el);\n });\n break;\n }\n });\n }\n\n var old = $.fn.dimension\n\n $.fn.dimension = Plugin\n $.fn.dimension.Constructor = Dimension\n\n\n // DIMENSION NO CONFLICT\n // ===============\n\n $.fn.dimension.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n // DIMENSION DATA-API\n // ============\n\n var eventHandler = function (els, event) {\n Plugin(els, event)\n }\n\n $(window).on('fontsLoaded', function () {\n $(window).load(function () {\n if (!$('body').hasClass('cq-wcm-edit')) {\n\n eventHandler('[data-dimension-action][data-dimension-target]');\n\n $(window).resize(function () {\n eventHandler('[data-dimension-action][data-dimension-target]', 'resize')\n });\n $(window).scroll(function () {\n eventHandler('[data-dimension-action][data-dimension-target][data-dimension-scroll]')\n });\n }\n });\n });\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: platform.js v3.3.1\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // PLATFORM PUBLIC CLASS DEFINITION\n // ==============================\n\n var Platform = function (element) {\n this.$element = $(element);\n };\n\n Platform.prototype.setAttr = function () {\n var platform = platformDetection(), platforms = this.$element.data('platform'), attribute = this.$element.data('platform-attr');\n\n platform = platforms[platform];\n\n if (typeof PriceUtil !== 'undefined' && typeof attribute === 'undefined' || attribute === 'href') {\n platform = PriceUtil.fastAddToCartLink(platform);\n }\n\n if (typeof attribute === 'undefined') {\n if (platform !== \"\") {\n this.$element.attr('href', platform);\n }\n } else {\n switch (attribute) {\n case 'class':\n this.$element.addClass(platform);\n break;\n case 'style':\n if (platform instanceof Object) {\n this.$element.css(platform);\n }\n break;\n case 'html':\n this.$element.html(platform);\n break;\n case 'text':\n this.$element.text(platform);\n break;\n default:\n this.$element.attr(attribute, platform);\n break;\n }\n }\n };\n\n // PLATFORM PLUGIN DEFINITION\n // ========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = new Platform($this);\n data.setAttr();\n });\n }\n\n var old = $.fn.platform;\n\n $.fn.platform = Plugin;\n $.fn.platform.Constructor = Platform;\n\n\n // PLATFORM NO CONFLICT\n // ==================\n\n $.fn.platform.noConflict = function () {\n $.fn.platform = old;\n return this;\n };\n\n\n // PLATFORM DATA-API\n // ===============\n\n $(document).ready(function () {\n Plugin.call($('[data-platform]'));\n });\n $(document).on(\"TestAndTargetInit teaserInit\", function () {\n Plugin.call($('[data-platform]'));\n });\n}(jQuery);\n\n(function ($) {\n $.fn.countdown = function (options, callback) {\n var thisElement = $(this);\n var settings = {\n 'date': null,\n 'displayDays': false,\n 'continuous': false,\n 'repeat': null,\n 'relative': null,\n 'componentCount': null,\n 'timeLabel': \"\"\n };\n if (options) {\n $.extend(settings, options);\n }\n var compCount = settings['componentCount'];\n if (eventDate == null) {\n var eventDate = Date.parse(settings['date']) / 1000;\n }\n\n var browser = getBrowser();\n if (browser.browser.toLowerCase() === 'msie' && browser.version_rounded < 9 && settings['date'] == \"\") {\n var relativeEventDate = Math.floor((dateFromISO8601($.cookie(compCount)).getTime()) / 1000);\n } else {\n var relativeEventDate = Math.floor((new Date($.cookie(compCount)).getTime()) / 1000);\n }\n \n \n var relative = settings['relative'];\n var currentDate = Math.floor($.now() / 1000);\n var maxSecs = 99 * 3600 + 99 * 60 + 99; //362439\n var repeat = settings['repeat'] * 1000;\n var continuous = settings['continuous'];\n var jsonCountDown = null;\n var interval = null;\n var countDownHref = null;\n var currentDateSecondLess = currentDate - 1;\n var timeStrings = settings['timeStrings'];\n\n\n function countAgain() {\n if (relative != 0) {\n relativeEventDate = relativeEventDate + (2 * 24 * 3600) + repeat / 1000 + 1;\n interval = setInterval(function () {\n timer(relativeEventDate);\n }, 1000);\n } else {\n eventDate = eventDate + (2 * 24 * 3600) + repeat / 1000 + 1;\n interval = setInterval(function () {\n timer(eventDate);\n }, 1000);\n }\n }\n\n function hideAfterDelay() {\n $('.countdown').css('visibility', 'hidden');\n $('.countdown-timer').css('display', 'none');\n }\n\n // dynamic localization string\n function localization(string, number) {\n var label = \"\";\n if (string !== undefined) {\n for(key in string){ \n if(key.indexOf(number) != -1){\n label = string[key];\n break;\n } else {\n label = string['other'];\n }\n }\n }\n return label;\n }\n\n function change() { \n // attribute becasue of teaser is loaded after all events\n $('#countdown').attr('data-finish',true);\n $(document).trigger(\"CountdownFinish\");\n }\n\n function timer() {\n currentDate = Math.floor($.now() / 1000);\n currentDateSecondLess = currentDate - 1;\n if (arguments[0] <= currentDateSecondLess) {\n clearInterval(interval);\n if (continuous == \"count\" && arguments[0] == currentDateSecondLess) {\n setTimeout(countAgain, repeat);\n } else if (continuous == \"count\" && arguments[0] < currentDateSecondLess) {\n countAgain();\n }\n if (continuous == \"change\" && arguments[0] == currentDateSecondLess) {\n change();\n setTimeout(hideAfterDelay, repeat);\n } else if (continuous == \"change\" && arguments[0] < currentDateSecondLess) {\n change();\n } else if (continuous == \"change\" && arguments[0] - repeat < currentDateSecondLess) {\n hideAfterDelay();\n }\n } else {\n $('.countdown').css('visibility', 'visible');\n $('.countdown-timer').css('display', 'inline');\n seconds = arguments[0] - currentDate;\n if (settings['displayDays']) {\n days = Math.floor(seconds / 3600 / 24);\n seconds -= days * 3600 * 24;\n console.log(days);\n } else {\n days= 0;\n }\n\n hours = Math.floor(seconds / 3600);\n seconds -= hours * 3600;\n minutes = Math.floor(seconds / 60);\n seconds -= minutes * 60;\n \n\n if (days !== 0) {\n thisElement.find('.countdown-days, .countdown-hours, .countdown-mins').css('display', 'inline');\n timeLabel = localization(timeStrings.days, days);\n }\n if (days === 0 && hours !== 0) {\n thisElement.find('.countdown-hours, .countdown-mins').css('display', 'inline');\n timeLabel = localization(timeStrings.hours, hours);\n thisElement.find('.countdown-days').css('display', 'none');\n }\n if (days === 0 && hours === 0 && minutes !== 0) {\n thisElement.find('.countdown-hours').css('display', 'inline');\n timeLabel = localization(timeStrings.minutes, minutes);\n thisElement.find('.countdown-hours, .countdown-days').css('display', 'none');\n }\n if (days === 0 && hours === 0 && minutes === 0 && seconds !== 0) {\n timeLabel = localization(timeStrings.seconds, seconds);\n thisElement.find('.countdown-hours, .countdown-days, .countdown-mins').css('display', 'none');\n }\n/*\n if (settings['displayDays']) {\n days = String(days).length >= 2 ? days : \"0\" + days;\n } else {\n days = \"0\";\n }\n*/\n days = String(days).length >= 2 ? days : \"0\" + days;\n hours = String(hours).length >= 2 ? hours : \"0\" + hours;\n minutes = String(minutes).length >= 2 ? minutes : \"0\" + minutes;\n seconds = String(seconds).length >= 2 ? seconds : \"0\" + seconds;\n\n if (!isNaN(arguments[0])) {\n if (settings['displayDays']) {\n thisElement.find(\".countdown-main-d1\").text(String(days).substr(0, 1));\n thisElement.find(\".countdown-main-d2\").text(String(days).substr(1, 1));\n }\n thisElement.find(\".countdown-main-h1\").text(String(hours).substr(0, 1));\n thisElement.find(\".countdown-main-h2\").text(String(hours).substr(1, 1));\n thisElement.find(\".countdown-main-m1\").text(String(minutes).substr(0, 1));\n thisElement.find(\".countdown-main-m2\").text(String(minutes).substr(1, 1));\n thisElement.find(\".countdown-main-s1\").text(String(seconds).substr(0, 1));\n thisElement.find(\".countdown-main-s2\").text(String(seconds).substr(1, 1));\n thisElement.find(\".count-timeString\").text(timeLabel);\n } else {\n clearInterval(interval);\n }\n }\n }\n\n if (relative != 0) {\n timer(relativeEventDate);\n interval = setInterval(function () {\n timer(relativeEventDate);\n }, 1000);\n } else {\n timer(eventDate);\n interval = setInterval(function () {\n timer(eventDate);\n }, 1000);\n }\n }\n})(jQuery);\n$(document).ready(function () {\n 'use strict';\n var avgGeneral = avgGeneral || {};\n avgGeneral.avgAccordion = function (options) {\n var settings = $.extend({\n wrapper: null,\n area: null,\n button: null\n }, options || {});\n\n $(settings.button).click(function (e) {\n e.preventDefault();\n var $parent = $(this).parent();\n var $area = $(this).closest(settings.wrapper).find(settings.area);\n $area.slideToggle('slow', function () {\n if ($area.css('display') === \"block\") {\n $parent.removeClass('see-details');\n $parent.addClass('hide-details');\n } else {\n $parent.removeClass('hide-details');\n $parent.addClass('see-details');\n }\n });\n var caption = $(this).text();\n var readMore = $(this).attr('data-readmore');\n var readLess = $(this).attr('data-readless');\n $(this).text((caption === readMore) ? readLess : readMore);\n });\n };\n\n if ($('.comparison-column-content').length > 0) {\n avgGeneral.avgAccordion({\n wrapper: \".comparison-column-content\",\n area: \".features-list\",\n button: \".features-list-btn\"\n });\n }\n\n});\n+function ($) {\n 'use strict';\n\n // FOOTER PUBLIC CLASS DEFINITION\n // ==============================\n\n var Footer = function (element, options) {\n this.$element = $(element);\n this.options = $.extend({}, options);\n this.objectSizes = {'xs': true, 'sm': true, 'md': false, 'lg': false};\n };\n\n Footer.prototype.setState = function (elm) { \n compareSize(\n this.objectSizes,\n function () {\n elm.addClass('clickable');\n elm.find('.footer-links-content').hide();\n elm.removeClass('active-column');\n },\n function () {\n elm.removeClass('active');\n elm.find('.footer-links-content').show();\n elm.removeClass('active-column');\n }\n );\n };\n\n Footer.prototype.toggle = function (elm) {\n elm.find('.footer-links-content').slideToggle('fast');\n elm.toggleClass('active-column');\n };\n\n /*\n // FOOTER PLUGIN DEFINITION\n // ========================\n */\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.footer');\n var options = typeof option === 'object' && option;\n\n if (!data)\n $this.data('bs.footer', (data = new Footer(this, options)));\n\n if (option === 'toggle'){\n data.toggle($this);\n } else if (option){\n data.setState($this);\n }\n });\n }\n\n var old = $.fn.footer;\n\n $.fn.footer = Plugin;\n $.fn.footer.Constructor = Footer;\n\n\n // FOOTER NO CONFLICT\n // ==================\n\n $.fn.footer.noConflict = function () {\n $.fn.footer = old;\n return this;\n };\n\n var clickHandler = function (e) { \n e.stopPropagation(); \n Plugin.call($(this), 'toggle');\n };\n\n var readyHandler = function (e) {\n var els = '[data-footer=\"toggle\"]';\n Plugin.call($(els), 'setState');\n };\n\n $(document)\n .on('click.bs.footer.data-api', '.footer-links.clickable', clickHandler)\n .ready(readyHandler);\n\n $(window).resize(function () {\n waitForFinalEvent(function () {\n readyHandler();\n }, 100, \"footer-resize\");\n });\n\n}(jQuery);\n+function ($AVG) {\n 'use strict';\n // DRUTILS OPTIONS PUBLIC CLASS DEFINITION\n // ================================\n var DRUtils = function (element, options) {\n this.link = $AVG(element);\n this.options = options;\n this.params = ['A', 'T', 'Z'];\n this.paramsName = {\n 'ACCOUNTID': ['ACCID', 'ZID'], // ACCID ~ AV|PCT account ID, ZID ~ Zen ID; GUID (Globally Unique Identifier)\n 'LICENSETYPE': ['LT', 'LICTYPE', 'APPAV', 'APPTU'], // https://confluence.cz.avg.com/display/ZENCOE/Application+Params+URL\n };\n this.paidLicenseTypes = /%4%|%P%|LTfull/i; // AV and TU return license type \"4\" or \"P\", Zen returns license type for both (APPAV and APPTU)\n this.replacements = [\n {\n pattern: /\\/buy\\//i,\n replace: '/buysaf/',\n },\n {\n pattern: /$/,\n replace: '/AVGAccountIDIdentifiedFlow.%ACCOUNTID%/IdentifiedFlowPaidRenewals.%LICENSETYPE%',\n },\n ];\n };\n\n DRUtils.prototype.init = function () {\n this.replaceLink();\n };\n\n DRUtils.prototype.countdown = function () {\n this.replaceLink();\n };\n\n DRUtils.prototype.replaceLink = function () {\n var url = this.link.attr('href'),\n data,\n i;\n\n // get data from URL or cookie\n data = this.getDataFromURL() || this.getDataFromCookie();\n\n if (data) {\n if(url.indexOf('IdentifiedFlowPaidRenewals') !== -1) {\n url = url.replace(/\\/(AVGAccountIDIdentifiedFlow|IdentifiedFlowPaidRenewals)[^\\/]+/g,'');\n }\n\n // change URL\n for (i = 0; i < this.replacements.length; i++) {\n url = url.replace(this.replacements[i].pattern, this.replacements[i].replace);\n }\n // apply data\n $AVG.each(data, function(key, value) {\n var regexp = new RegExp('%' + key + '%', 'g');\n url = url.replace(regexp, value);\n });\n this.link.attr('href', url);\n }\n };\n\n DRUtils.prototype.getDataFromURL = function () {\n var paramsURL = window.location.search.substring(1).split('&');\n\n return this.getAccountLicense(this.getParam(paramsURL, this.params));\n };\n\n DRUtils.prototype.getDataFromCookie = function() {\n var r = false,\n i;\n\n for (i = 0; i < this.params.length; i++) {\n r = this.getAccountLicense($AVG.cookie('app-param-' + this.params[i]) || ''); // due undefined cookie\n if (r) {\n return r;\n }\n }\n return false;\n };\n\n DRUtils.prototype.getAccountLicense = function(encodedParams) {\n var params = this.decodeBase64(encodedParams).split(' '),\n accountID = this.getParam(params, this.paramsName.ACCOUNTID),\n licenseType = '',\n i;\n\n\n if (this.isValidGUID(accountID)) {\n // join all possible license to string (due ZEN)\n for (i = 0; i < this.paramsName.LICENSETYPE.length; i++) {\n licenseType += '%' + this.getParam(params, [this.paramsName.LICENSETYPE[i]]) + '%';\n }\n return {\n 'ACCOUNTID': accountID,\n 'LICENSETYPE': licenseType.match(this.paidLicenseTypes) !== null, // paid = true, others = false\n }\n }\n return false;\n };\n\n DRUtils.prototype.getParam = function(params, param) {\n var pair = '',\n i;\n\n for (i = 0; i < params.length; i++) {\n pair = params[i].split('=');\n if (param.indexOf(pair[0].toUpperCase()) !== -1 && pair[1].length) {\n return pair[1];\n }\n }\n return false;\n };\n\n DRUtils.prototype.isValidGUID = function (guid) {\n var regexGuid = /^(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}$/gi;\n return regexGuid.test(guid);\n };\n\n DRUtils.prototype.decodeBase64 = function(s) {\n var e = {}, i, b = 0, c, l = 0, a, r = '', w = String.fromCharCode, L = s.length,\n A = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n for (i = 0; i < 64; i++) {\n e[A.charAt(i)] = i;\n }\n\n for(i = 0; i < L; i++) {\n c = e[s.charAt(i)];\n b = (b<<6)+c;\n l += 6;\n while( l>=8 ) {\n ((a=(b>>>(l-=8))&0xff)||(i<(L-2)))&&(r+=w(a));\n }\n }\n return r;\n };\n\n // DRUtils PLUGIN DEFINITION\n // =======================\n function Plugin(option) {\n return this.each(function () {\n var $this = $AVG(this);\n var data = $this.data('drutils.link');\n var options = $AVG.extend({}, $this.data(), typeof object == 'object' && option);\n if (!data) {\n $this.data('drutils.link', (data = new DRUtils(this, options)));\n }\n switch (option) {\n case 'init':\n data.init();\n break;\n case 'countdown':\n data.countdown();\n break;\n }\n });\n };\n\n var old = $AVG.fn.DRUtils;\n $AVG.fn.DRUtils = Plugin;\n $AVG.fn.DRUtils.Constructor = DRUtils;\n // DRUtils NO CONFLICT\n // =====================\n $AVG.fn.DRUtils.noConflict = function () {\n $AVG.fn.DRUtils = old;\n return this;\n };\n\n var els = 'a[href*=\"shop.avg.com/store\"]'; // selector was changed because we can't set class '.dr-store-link';\n\n var countdown = function (e) {\n Plugin.call($AVG(els), 'countdown');\n };\n\n var readyHandler = function (e) {\n Plugin.call($AVG(els), 'init');\n };\n\n $AVG(document)\n .on('TestAndTargetInit teaserInit drLinkChange', readyHandler)\n .on('CountdownFinish', countdown)\n .ready(readyHandler);\n\n}(jQuery);\n\n/** \n * @version 1.0\n * @author Michal Pribila\n */\n+function ($AVG) {\n 'use strict';\n\n // FOOTER PUBLIC CLASS DEFINITION\n // ==============================\n\n var Button = function (element, options) {\n this.$element = $AVG(element);\n this.options = $AVG.extend({}, options);\n };\n\n /**\n * Swap button after countdown change\n * @param {Object} elm \n */\n Button.prototype.countdown = function (elm) {\n\n // if outer div exist change classes\n var outerDiv = $(elm).parent('[data-countdownClass]');\n if (outerDiv.length > 0) {\n outerDiv.attr('class', outerDiv.attr('data-countdownClass'));\n }\n elm.next(\"a\").remove();\n elm.removeClass('countdownBtnChange');\n // swap platform attributes to avoid overwrite by other scripts\n if (typeof (elm.data('platform')) !== \"undefined\") {\n elm.data('platform', elm.data('countdown-platform'));\n var platform = elm.data('platform')[platformDetection()];\n if (typeof PriceUtil !== 'undefined') {\n platform = PriceUtil.fastAddToCartLink(platform);\n }\n elm.attr('href', platform);\n }\n };\n\n /*\n // FOOTER PLUGIN DEFINITION\n // ========================\n */\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $AVG(this);\n var data = $this.data('bs.button');\n var options = typeof option === 'object' && option;\n\n if (!data)\n $this.data('bs.button', (data = new Button(this, options)));\n\n if (option === 'countdown') {\n data.countdown($this);\n }\n });\n }\n\n var old = $AVG.fn.button;\n\n $AVG.fn.button = Plugin;\n $AVG.fn.button.Constructor = Button;\n\n\n // FOOTER NO CONFLICT\n // ==================\n\n $AVG.fn.button.noConflict = function () {\n $AVG.fn.button = old;\n return this;\n };\n\n var countdown = function (e) {\n var els = 'a.countdownBtnChange';\n Plugin.call($AVG(els), 'countdown');\n };\n\n $AVG(document).on('CountdownFinish', countdown);\n}(jQuery);\n$(document).ready(function () {\n $('.dropdown-links').on('change', function () {\n if (this.selectedIndex !== 0) {\n window.location.href = encodeURI(this.value);\n }\n });\n});\n+ function($AVG) {\n 'use strict';\n\n /**\n * @author Michal Pribila\n * @version 1.0\n */\n\n // BOXFILTER CLASS DEFINITION\n // ======================\n var BoxFilter = function(element, options) {\n this.options = $AVG.extend({}, options);\n this.$element = $AVG(element);\n this.$boxes = this.$element.find('.filter-box');\n this.urlBoxesLimit = getQueryVariable('boxes');\n this.breakpointItems = parseInt(this.breakpointLimits());\n this.persistUrlFilter = []; // filter from URL which cannot be changed by any filter on the page\n this.allFilters = $AVG('.filtering .input-filter').map(function() {\n return this.name + \"=\" + this.value;\n }).get();\n };\n\n BoxFilter.DEFAULTVISIBLE = 1000;\n BoxFilter.SEE_MORE = 'see-more';\n BoxFilter.SEE_MORE_PRODUCTS = 'see-more-products';\n BoxFilter.NO_PRODUCTS = 'no-products';\n BoxFilter.FILTER_RESULTS = 'filter-results';\n BoxFilter.HIDDEN = 'hidden';\n BoxFilter.EQUALIZE_BOXES = 'equalize-boxes';\n\n BoxFilter.prototype.init = function() {\n this.displayBoxes();\n };\n\n BoxFilter.prototype.equalizeBoxes = function() { \n var allContentWrapper = this.$boxes.find('.filter-box-header, .feature-list-wrapper, .bottom-wrapper');\n if (breakpointKey() !== 'xs' && breakpointKey() !== 'sm') { \n var filterBoxesHidden = this.$element.find('.filter-box').filter(function() { \n return $(this).is('.' + BoxFilter.HIDDEN);\n });\n \n var filterHeader = this.$boxes.find('.filter-box-header');\n var filterMiddle = this.$boxes.find('.feature-list-wrapper');\n var filterBottom = this.$boxes.find('.bottom-wrapper');\n\n allContentWrapper.css('height','');\n filterBoxesHidden.removeClass(BoxFilter.HIDDEN);\n filterHeader.equalizeHeights();\n filterMiddle.equalizeHeights();\n filterBottom.equalizeHeights();\n filterBoxesHidden.addClass(BoxFilter.HIDDEN);\n } else { \n allContentWrapper.css('height','auto');\n }\n };\n\n /*\n * Check if array contains value\n * @return {Int} number\n */\n BoxFilter.prototype.findNextNumber = function(number, array) {\n number++;\n var idx = array.indexOf(number);\n while (idx !== -1) {\n number++;\n idx = array.indexOf(number, idx + 1);\n }\n return number;\n };\n\n // add current filter to URL as hash\n BoxFilter.prototype.addFilterToUrl = function() {\n var urlQuery = window.location.hash.toString().split('?');\n window.location.hash = this.filterFromInputs().concat(this.persistUrlFilter).join('&') + (typeof urlQuery[1] !== 'undefined' ? '?' + urlQuery[1] : '');\n };\n\n /*\n * Basic setting for filter\n * \n */\n BoxFilter.prototype.setting = function(option) {\n // setup new filter only after changing filter by checkbox or on load page\n var productResult = this.$element.find('.filter-results');\n productResult.css('min-height', productResult.height());\n if (option !== BoxFilter.SEE_MORE) {\n // return elements to load state before ordering\n this.$boxes.addClass(BoxFilter.HIDDEN).css('order', '');\n this.currentFilter = this.adjustFilter(option === 'init' ? this.filterFromQuery() : this.filterFromInputs().concat(this.persistUrlFilter));\n if (this.currentFilter.length > 0) {\n // return array of filtered product\n this.filteredArray = this.filteredBoxes();\n // return sortered array by data-order attribute\n this.sortedArray = this.reorder();\n }\n }\n };\n\n /**\n * get all selected checkboxes names and values \n * @returns {Array} filter;\n */\n BoxFilter.prototype.filterFromInputs = function() {\n return $AVG('.input-filter:checked').map(function() {\n return this.name + \"=\" + this.value;\n }).get();\n };\n\n /**\n * if URL parameter match filter checkbox add to filter and change checked value\n * @returns {Array} filter;\n */\n BoxFilter.prototype.filterFromQuery = function() {\n var urlQuery = window.location.hash;\n if (urlQuery.indexOf('?')) {\n var urlQueryParse = urlQuery.split('?');\n urlQuery = urlQueryParse[0];\n }\n var windowHash = urlQuery.indexOf('=') !== -1 ? urlQuery.replace('#', '').split('&') : '';\n var $checkboxes = 0,\n filter = [],\n $this = this;\n if (windowHash.length > 0) {\n windowHash.forEach(function(item) {\n item = item.split('=');\n $checkboxes = $AVG('.input-filter[name=' + item[0].replace('!', '') + '][value=' + item[1] + ']');\n\n if ($checkboxes.length === 0) {\n $this.persistUrlFilter.push(item[0] + '=' + item[1]);\n }\n if (item[0].indexOf('!') === -1 && $checkboxes.length > 0) {\n $checkboxes.prop('checked', true);\n }\n\n filter.push(item[0] + '=' + item[1]);\n });\n }\n return filter;\n };\n\n /**\n * Adjust array for matching all boxes with data attributes and values\n * @param {Array} array\n * @returns {Array} filter;\n */\n BoxFilter.prototype.adjustFilter = function(array) {\n var filter = array.map(function(item) {\n if (item.indexOf('!=') !== -1) {\n item = item.split('!=');\n return \".filter-box:not([data-\" + item[0] + \"~=\" + item[1] + \"])\";\n } else {\n item = item.split('=');\n return \"[data-\" + item[0] + \"~=\" + item[1] + \"]\";\n }\n });\n return filter;\n };\n\n /**\n * Return number based on breakpoint (xs,sm,md,lg) and default displayed items for each breakpoint\n * @return {Int}\n */\n BoxFilter.prototype.breakpointLimits = function() {\n // setup limit by URL parameter 'boxes' for all and call it only once \n if (this.urlBoxesLimit && !this.urlLimitSetup) {\n if (this.urlBoxesLimit === 'all') {\n this.urlLimitSetup = BoxFilter.DEFAULTVISIBLE;\n } else if (/^\\d+$/.test(this.urlBoxesLimit)) {\n this.urlLimitSetup = parseInt(this.urlBoxesLimit);\n } else {\n this.urlLimitSetup = this.options.showItems[breakpointKey()];\n }\n }\n\n // check if limit by URL is already initiazized\n if (this.urlBoxesLimit && this.urlLimitSetup) {\n return this.urlLimitSetup;\n } else {\n return this.options.showItems[breakpointKey()];\n }\n };\n\n /**\n * Reset visible filter do default after filtering\n */\n BoxFilter.prototype.setDefaultItems = function() {\n this.breakpointItems = parseInt(this.breakpointLimits());\n };\n\n /**\n * Reorder boxes to keep boxes with \"override order\" property in same positon after filtering\n * @param {Object} object description\n * @return {Object} description\n */\n BoxFilter.prototype.reorder = function(object) {\n var $this = this;\n // array of boxes without override order\n var boxesWithoutOrder = this.filteredArray.filter(function() {\n return !$(this).data('order');\n });\n\n // get array of override order numbers\n var orderArray = this.filteredArray.map(function() {\n $AVG(this).css('order', $AVG(this).data('order'));\n return $AVG(this).data('order');\n }).get();\n\n // flexbox init order value\n var orderNumber = 0;\n\n // add order to all elements\n boxesWithoutOrder.each(function(index) {\n orderNumber++;\n // skip override order numbers\n if (isInArray(orderNumber, orderArray)) {\n // return next following number which is not in array\n orderNumber = $this.findNextNumber(orderNumber, orderArray);\n }\n $(this).attr('data-reorder', orderNumber);\n $(this).css('order', orderNumber);\n });\n\n // sort array by reorder attribute\n return this.filteredArray.sort(function(a, b) {\n return parseInt($AVG(a).data('reorder')) - parseInt($AVG(b).data('reorder'));\n });\n };\n\n /**\n * Return boxes filtered by multiple filters\n * @return {Object}\n */\n BoxFilter.prototype.filteredBoxes = function() {\n return this.$boxes.filter(this.currentFilter.join(\"\"));\n };\n\n BoxFilter.prototype.displayBoxes = function() {\n var displayed, boxesNumber, showMore, sortedArrayIE, $filterResultsIE;\n var $seeMoreProducts = this.$element.find('.' + BoxFilter.SEE_MORE_PRODUCTS);\n var $noProducts = this.$element.find('.' + BoxFilter.NO_PRODUCTS);\n\n if (this.currentFilter.length > 0) {\n // show only boxes by breakpoint setting\n displayed = this.sortedArray.slice(0, this.breakpointItems);\n boxesNumber = this.filteredArray.length;\n } else {\n // show only boxes by breakpoint setting\n displayed = this.$boxes.slice(0, this.breakpointItems);\n boxesNumber = this.$boxes.length;\n }\n\n // IE9 fix for re-ordering elements and keep overrided order elements on same place\n if (getBrowser().browser === 'MSIE' && getBrowser().version_rounded <= 9) {\n $filterResultsIE = this.$element.find('.filter-results-ie');\n if (this.currentFilter.length > 0) {\n // clone element to remove reference\n sortedArrayIE = this.sortedArray.clone();\n displayed = sortedArrayIE.slice(0, this.breakpointItems);\n showMore = this.$element.find('.' + BoxFilter.FILTER_RESULTS + ' .last-in-order').clone();\n this.$element.find('.' + BoxFilter.FILTER_RESULTS).addClass(BoxFilter.HIDDEN);\n $filterResultsIE.removeClass(BoxFilter.HIDDEN);\n $filterResultsIE.html(sortedArrayIE);\n // add see more and message div after replace boxes\n if (this.$element.find('.filter-results-ie .last-in-order').length === 0) {\n $filterResultsIE.append(showMore);\n }\n } else {\n this.$element.find('.' + BoxFilter.FILTER_RESULTS).removeClass(BoxFilter.HIDDEN);\n $filterResultsIE.addClass(BoxFilter.HIDDEN);\n }\n }\n\n // show all filtered boxes\n displayed.removeClass(BoxFilter.HIDDEN);\n\n // clear inline css for auto height value\n this.$element.find('.filter-results').css('min-height', '');\n boxesNumber <= this.breakpointItems ?\n $seeMoreProducts.addClass(BoxFilter.HIDDEN) :\n $seeMoreProducts.removeClass(BoxFilter.HIDDEN);\n\n // show|hide empty filter message\n boxesNumber === 0 ?\n $noProducts.removeClass(BoxFilter.HIDDEN) :\n $noProducts.addClass(BoxFilter.HIDDEN);\n\n };\n\n /**\n * Update variable to see next set of boxes after see-more-product button\n * @param {String} option description\n */\n BoxFilter.prototype.seeMore = function(option) {\n this.breakpointItems += parseInt(this.breakpointLimits());\n this.displayBoxes(option);\n };\n\n // BOXFILTER PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function() {\n var $this = $AVG(this);\n var data = $this.data('bs.boxfilter');\n var options = $AVG.extend({}, $this.data());\n if (!data)\n $this.data('bs.boxfilter', (data = new BoxFilter(this, options)));\n\n try {\n if (option !== BoxFilter.EQUALIZE_BOXES) {\n data.setting(option);\n }\n\n switch (option) {\n case 'filter':\n // skip setup default items if URL contains boxes param \n data.setDefaultItems();\n data.displayBoxes();\n data.addFilterToUrl();\n break;\n case BoxFilter.SEE_MORE:\n data.seeMore(option);\n break;\n case BoxFilter.EQUALIZE_BOXES:\n data.equalizeBoxes();\n break;\n default:\n data.init();\n }\n } catch (e) {\n // todo add log to new relic\n }\n\n });\n }\n\n var old = $AVG.fn.boxfilter;\n\n $AVG.fn.boxfilter = Plugin;\n $AVG.fn.boxfilter.Constructor = BoxFilter;\n\n // BOXFILTER NO CONFLICT\n // =================\n\n $AVG.fn.boxfilter.noConflict = function() {\n $AVG.fn.boxfilter = old;\n return this;\n };\n\n // BOXFILTER DATA-API\n // ==============\n\n $AVG(document).ready(function() {\n Plugin.call($AVG('[data-filterbox]'), 'init');\n\n // set height from highest span because of hover effect\n $AVG('.filtering .platforms-filter').each(function(e) {\n var $inputSpan = $AVG(this).find('.input-text span');\n $inputSpan.css('position', 'static');\n $AVG(this).find('.input-text').height($inputSpan.getHighestElement());\n $inputSpan.css('position', 'absolute');\n });\n\n $AVG('.filtering').on('click', '.input-filter', function() {\n // only one checkbox can be selected at the same time\n $AVG(this).parents('.button-group').find('.input-filter').not($AVG(this)).prop('checked', false);\n Plugin.call($AVG('[data-filterbox]'), 'filter');\n });\n\n $AVG('[data-filterbox]').on('click', '.' + BoxFilter.SEE_MORE_PRODUCTS, function(e) {\n Plugin.call($AVG('[data-filterbox]'), BoxFilter.SEE_MORE);\n });\n\n // add element to fix IE9 centering tables\n if (getBrowser().browser === 'MSIE' && getBrowser().version_rounded <= 9) {\n $AVG('.filtering .categories-filter .input-wrapper').wrapAll('
');\n }\n });\n\n // equal heights for header, list-wrapper and bottom\n $AVG(window).on('fontsLoaded', function() {\n $AVG(window).load(function() {\n Plugin.call($AVG('[data-filterbox]'), BoxFilter.EQUALIZE_BOXES);\n });\n });\n\n $AVG(window).resize(function () {\n waitForFinalEvent(function () {\n Plugin.call($AVG('[data-filterbox]'), BoxFilter.EQUALIZE_BOXES);\n }, 500);\n });\n}(jQuery);\n\nvar bGraph2 = {\n GRAPH_CLASS: \"graph-responsive\",\n FIXED_TITLE_CLASS: \"fixed-title\",\n GRAPH_ANIMATE_CLASS: \"graph-animate\",\n\n /**\n * Set in which sizes should be graph animated.\n * true => animate, false => don't animate\n */\n options: {\n animationSizes: {\n 'xs': false,\n 'sm': false,\n 'md': true,\n 'lg': true\n }\n },\n\n /**\n * Checks whether the graph is visible by user and run animation if it is.\n */\n animation: function() {\n $AVG(\".\" + this.GRAPH_CLASS).each(function() {\n var graph = $AVG(this);\n\n if(!graph.visible()) {\n // Add class that will run animation after its removing\n $AVG(graph).addClass(bGraph2.GRAPH_ANIMATE_CLASS);\n\n // Bind \"remove animate class\" after graph is visible\n $AVG(window).on(\"scroll resize\", function() {\n if (graph.visible(false, false, \"vertical-bottom\")) {\n graph.removeClass(bGraph2.GRAPH_ANIMATE_CLASS);\n }\n });\n }\n });\n },\n};\n\n/**\n * On document ready, check user's resolution and compare with graph animationSizes option\n */\n$AVG(document).ready(function() {\n compareSize(\n bGraph2.options.animationSizes,\n function() {\n bGraph2.animation();\n },\n function() {}\n );\n});\n+function ($AVG) {\n 'use strict';\n\n /**\n * @author Michal Pribila\n * @version 1.0\n */\n\n // LOCATOR CLASS DEFINITION\n // ======================\n\n var Locator = function (element, options) {\n this.options = $AVG.extend({}, options);\n this.$element = $AVG(element);\n this.akamaiData = {};\n this.ipAdress = this.$element.find('.ip-address');\n this.city = this.$element.find('.city');\n this.country = this.$element.find('.country');\n this.timeZone = this.$element.find('.time-zone');\n this.browser = this.$element.find('.browser');\n this.device = this.$element.find('.device');\n this.cookies = this.$element.find('.cookies');\n this.mapCanvas = this.$element.find('.tracking-map'); \n if (this.cookies.length > 0) {\n this.cookieEnabled = (navigator.cookieEnabled) ? this.cookies.data('cookies').YES : this.cookies.data('cookies').NO;\n } else {\n this.cookieEnabled = '';\n }\n this.browserObj = getBrowser();\n this.browserName = this.browserObj.browser + ' ' + this.browserObj.version_rounded;\n this.initLocator();\n };\n\n Locator.prototype.initLocator = function () {\n this.getAkamai();\n };\n\n /**\n * Parse string and fill akamaiData object\n * @param {String} str\n */\n Locator.prototype.parseString = function (str) {\n if (str.indexOf(',') !== -1) {\n var vars = str.split(',');\n for (var i = 0; i < vars.length; i++) {\n if (vars[i].indexOf('=') !== -1) {\n var pair = vars[i].split('=');\n this.akamaiData[pair[0]] = pair[1];\n }\n }\n }\n };\n /**\n * Get akamai headers\n * Akamai data are available only in production. For testing in proxy have to be\n * added query parameter: akamai_geo_header=country_code=CZ,city=PRAGUE,...\n */\n Locator.prototype.getAkamai = function () {\n var $this = this;\n $AVG.ajax({\n type: 'GET',\n url: document.location,\n success: function (data, status, xhr) {\n var akamaiHeader = (xhr.getResponseHeader('X-Akamai-Edgescape'));\n // True-Client-IP is available only in production\n var clientIP = (xhr.getResponseHeader('True-Client-IP'));\n if (akamaiHeader) {\n $this.parseString(akamaiHeader);\n if ($this.akamaiData['lat'] && $this.akamaiData['long']) {\n $this.trackingMap($this.akamaiData['lat'], $this.akamaiData['long']);\n }\n if ($this.akamaiData['country_code']) {\n // get country object from coutries clientlib\n var countryObj = searchArray(countriesJSON(), \"alpha2Code\", $this.akamaiData['country_code']);\n $this.akamaiData['country_name'] = countryObj.nativeName;\n }\n }\n if (clientIP) {\n $this.akamaiData['ip_address'] = clientIP;\n }\n $this.setHTML();\n }\n });\n };\n\n Locator.prototype.setHTML = function () {\n this.ipAdress.html(this.akamaiData['ip_address']);\n this.city.html(this.akamaiData['city']);\n this.country.html(this.akamaiData['country_name']);\n this.timeZone.html(this.akamaiData['timezone']);\n this.browser.html(this.browserName);\n this.device.html(getOS());\n this.cookies.html(this.cookieEnabled);\n };\n\n /**\n * Create google map by latitude and longitude\n * @param {String} lat latitude\n * @param {String} lng longitude\n */\n Locator.prototype.trackingMap = function (lat, lng) {\n var mapOptions = {\n center: new google.maps.LatLng(lat, lng),\n zoom: 10,\n scrollwheel: false,\n draggable: false,\n disableDefaultUI: true,\n mapTypeId: google.maps.MapTypeId.ROADMAP\n },\n map = new google.maps.Map(this.mapCanvas[0], mapOptions);\n\n return {\n init: function () {\n map.set('styles', [{\n featureType: 'landscape',\n elementType: 'geometry',\n stylers: [\n {hue: '#ffff00'},\n {saturation: 30},\n {lightness: 10}\n ]}\n ]);\n }\n };\n };\n\n // LOCATOR PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $AVG(this);\n var data = $this.data('bs.locator');\n var options = typeof option === 'object' && option;\n\n if (!data)\n $this.data('bs.locator', (data = new Locator(this, options)));\n if (typeof option === 'string')\n data[option]();\n });\n }\n\n var old = $AVG.fn.locator;\n\n $AVG.fn.locator = Plugin;\n $AVG.fn.locator.Constructor = Locator;\n\n // LOCATOR NO CONFLICT\n // =================\n\n $AVG.fn.locator.noConflict = function () {\n $AVG.fn.locator = old;\n return this;\n };\n\n // LOCATOR DATA-API\n // ==============\n\n $AVG(document).ready(function () {\n Plugin.call($AVG('[data-locator]'));\n });\n\n}(jQuery);\n+function ($AVG) {\n 'use strict';\n // SHOPBOXWITH OPTIONS PUBLIC CLASS DEFINITION\n // ================================\n var shopbox2 = function (element, options) {\n this.shopbox = $AVG(element);\n this.options = options;\n this.button = this.shopbox.find('.button'); \n this.initialized = false;\n this.businessDesign = this.shopbox.hasClass('business') && this.options.sellbox !== \"undefined\";\n };\n\n shopbox2.prototype.init = function () {\n // avoid initialize more times by teaser or mbox\n if (!this.initialized) {\n if(this.shopbox.find('.subscription-wrapper input[type=radio]:checked').length === 0){\n this.shopbox.find('.subscription-wrapper input[type=radio]').first().attr('checked', true).change();\n }\n this.selectedInputValue = this.shopbox.find('input:checked').val(); \n if (this.options.sellboxOptions) {\n var YEAR_PRICE_SELECTOR = \".year-price\",\n YEAR_PRICE_NAME = \"orgPrice\",\n WAS_PRICE_SELECTOR = \".wasPrice\",\n WAS_PRICE_NAME = \"wasPrice\",\n COMBINE_DISCOUNT_SELECTOR = \".percent\",\n COMBINE_DISCOUNT_NAME = \"percent\";\n this.sellbox = this.options.sellboxOptions;\n \n this.productCode = Object.keys(this.sellbox)[0].split('-'); \n this.keys = this.options.keys; \n // get validity e.g. 12m, 24m\n this.validityMonthsKeys = this.options.maintenances.split(',');\n this.shopboxWrapper = this.shopbox.parents('.bshopbox2-wrapper');\n this.errMessage = $AVG('.error-message');\n this.priceType = 'realPriceFormatted';\n this.priceListPriceType = 'priceFormatted';\n this.selectedPC = this.options.selectedpc;\n // select default option by user input or predefined option\n this.selectedOption = this.keys[0];\n if (typeof this.selectedPC !== \"undefined\") {\n this.selectedOption = closestHigherNumber(this.keys, this.options.selectedpc);\n } else if (this.shopbox.find('option:selected').length > 0) {\n this.selectedOption = this.shopbox.find('option:selected').val();\n }\n this.exterlnalRefID = this.sellbox[this.setProductCode()]['link']; \n this.shopboxHtmlElements = {};\n for (var i = 0; i < this.validityMonthsKeys.length; i++) {\n this.createHtmlElementsVariable(YEAR_PRICE_SELECTOR, YEAR_PRICE_NAME, i);\n this.createHtmlElementsVariable(WAS_PRICE_SELECTOR, WAS_PRICE_NAME, i);\n this.createHtmlElementsVariable(COMBINE_DISCOUNT_SELECTOR, COMBINE_DISCOUNT_NAME, i);\n }\n\n if (typeof this.options.sellboxCountdown !== \"undefined\" && this.options.sellboxCountdown) {\n this.sellboxCountdown = this.options.sellboxCountdown.sellbox;\n }\n }\n\n if (this.businessDesign) {\n this.dropdownOptions = this.shopbox.find(\".options li:not(.val-customComputers)\");\n this.dropdownSelectOptions = this.shopbox.find(\"option:not(option[value=customComputers])\");\n this.seats = [];\n for (i = 0; i < this.dropdownSelectOptions.length; i++) {\n this.seats[$AVG(this.dropdownSelectOptions[i]).val()] = $AVG(this.dropdownSelectOptions[i]).text();\n }\n if (this.options.predefineComputers) {\n this.hideDropdownOptions();\n }\n this.updateDropdownSale();\n this.updatePrices(this.selectedOption);\n } else {\n this.setExternalRefId(this.shopbox.find('input:checked'));\n }\n\n this.updateRadio(this.selectedInputValue);\n this.updateButton();\n this.provider = this.button.attr('href').indexOf('addtocart') !== -1 ? \"INHOUSE\" : \"DR\";\n this.tracking();\n if (this.businessDesign){ this.placeholders(); }\n this.initialized = true;\n }\n };\n /**\n * Helper method to create variable to connect html element with validity (e.g.12m)\n * @param {string} selector\n * @param {string} elmName\n * @param {number} index\n */\n shopbox2.prototype.createHtmlElementsVariable = function (selector, elmName, index) {\n try {\n if (this.shopbox.find(selector + this.validityMonthsKeys[index]).length > 0) {\n var name = elmName + this.validityMonthsKeys[index];\n this.shopboxHtmlElements[name] = this.shopbox.find(selector + this.validityMonthsKeys[index]);\n this.shopboxHtmlElements[name]['validity'] = this.validityMonthsKeys[index];\n this.shopboxHtmlElements[name]['type'] = elmName;\n }\n } catch (e) {\n // todo: add new relic notification\n }\n };\n /**\n * Get all keys from object\n * @param {Object} json\n */\n shopbox2.prototype.getKeys = function (json) {\n var keys = [];\n for (var o in json) {\n keys.push(o); // the property name\n }\n return keys;\n };\n /**\n * Update prices in options based on VAT set in data element\n * @param {number} selected\n */\n shopbox2.prototype.updatePrices = function (selected) {\n var sellbox = this.sellbox, price, wasPrice, current;\n this.productCode[2] = ('000' + selected ).slice(-3);\n for (var element in this.shopboxHtmlElements) {\n this.productCode[3] = this.shopboxHtmlElements[element]['validity'];\n current = this.productCode.join('-');\n try {\n price = sellbox[current][this.priceType] + \" \" + this.options.vat;\n if (this.shopboxHtmlElements[element]['type'] === 'orgPrice') {\n this.shopboxHtmlElements[element].html(price);\n }\n } catch (e) {\n // todo: add new relic notification\n }\n\n try {\n wasPrice = sellbox[current][this.priceType] + \" \" + this.options.vat;\n if (this.shopboxHtmlElements[element]['type'] === 'wasPrice') {\n if (price !== wasPrice) {\n this.shopboxHtmlElements[element].removeClass('hidden');\n this.shopboxHtmlElements[element].html(wasPrice);\n } else {\n this.shopboxHtmlElements[element].addClass('hidden');\n }\n }\n } catch (e) {\n // todo: add new relic notification\n }\n try {\n if (this.shopboxHtmlElements[element]['type'] === 'percent') {\n if (typeof sellbox[this.setProductCode(this.shopboxHtmlElements[element]['validity'])]['discountPercent'] !== 'undefined' && sellbox[this.setProductCode(this.shopboxHtmlElements[element]['validity'])]['discountPercent'] !== 0) {\n this.shopboxHtmlElements[element].removeClass('hidden');\n this.shopboxHtmlElements[element].html(' -' + sellbox[this.setProductCode(this.shopboxHtmlElements[element]['validity'])]['discountPercent'] + '% ');\n } else {\n this.shopboxHtmlElements[element].addClass('hidden');\n }\n }\n } catch (e) {\n // todo: add new relic notification\n }\n }\n };\n // update button based on product code\n shopbox2.prototype.updateButton = function () {\n var newLink = \"\", externalRefID;\n if (this.businessDesign) {\n if ( this.sellbox[this.productCode.join('-')]['link'].indexOf('addtocart') !== -1 ) {\n newLink = this.sellbox[this.productCode.join('-')]['link'];\n } else {\n externalRefID = this.sellbox[this.setProductCode()]['link'].match(/externalRefID\\.([^\\/]+)/)[1].split('.'); \n newLink = this.button.attr('href').replace(/externalRefID[^\\/]+/,\n \"externalRefID.\" + (externalRefID.length >= 4\n ? (externalRefID[0] + \".\" + externalRefID[1] + \".\" + externalRefID[4])\n : externalRefID.join('.')\n )); \n }\n } else {\n newLink = this.shopbox.find('input:checked').data('link');\n }\n if (typeof PriceUtil !== \"undefined\") {\n newLink = PriceUtil.fastAddToCartLink(newLink);\n }\n this.button.attr('href', newLink);\n $(document).trigger('drLinkChange');\n };\n shopbox2.prototype.hideDropdownOptions = function () {\n var visibleOptions = this.options.predefineComputers.replace(/ /g, '').split(',');\n this.dropdownOptions.each(function (index, element) {\n if (visibleOptions.indexOf($AVG(this).attr('data-value')) === -1) {\n $AVG(this).addClass('hidden');\n }\n });\n };\n\n shopbox2.prototype.updateDropdownSale = function () {\n var sellbox = this.sellbox;\n var compDesc = this.seats[this.selectedOption]; \n var current = this.productCode.join('-');\n var $this = this;\n if (typeof sellbox[current].discountPercent !== 'undefined' && sellbox[current].discountPercent !== 0) {\n this.shopbox.find('.rext .sval').html(compDesc + \" (-\" + sellbox[current].discountPercent + \"%)\");\n } else {\n this.shopbox.find('.rext .sval').html(compDesc);\n }\n this.dropdownOptions.each(function (index, element) {\n if (typeof sellbox[$this.setProductCode($AVG(this).attr('data-value'))] !== \"undefined\" && typeof sellbox[$this.setProductCode($AVG(this).attr('data-value'))]['discountPercent'] !== 'undefined') {\n $AVG(this).text($AVG(this).attr('data-text') + \" (-\" + sellbox[$this.setProductCode($AVG(this).attr('data-value'))]['discountPercent'] + \"%)\");\n } else {\n $AVG(this).html($AVG(this).attr('data-text'));\n }\n });\n };\n /**\n * Dropdown custom quantity option\n * @param {string} elm\n */\n shopbox2.prototype.updateQuantity = function (elm) {\n if (elm.match(/^[0-9]\\d*$/)) {\n var inputValue = parseInt(elm);\n var computers = closestHigherNumber(this.keys, inputValue);\n this.selectedOption = inputValue;\n this.shopbox.find('.rext .val-' + computers).trigger('click');\n this.shopbox.find('.inputQuantity').addClass('hidden');\n this.shopbox.find('.rext').removeClass('hidden');\n if (inputValue !== computers) {\n this.errMessage.removeClass('hidden');\n }\n } else if (elm === \"\") {\n this.shopbox.find('.inputQuantity').addClass('hidden');\n this.shopbox.find('.rext').removeClass('hidden');\n this.shopbox.find('.rext .val-' + this.selectedOption).trigger('click');\n }\n };\n /**\n * Tracking for button\n */\n shopbox2.prototype.tracking = function () {\n var trackingCode,link;\n if(this.provider === \"INHOUSE\"){\n trackingCode = this.exterlnalRefID.split(\".\").slice(0, 5).join(\".\");\n } else {\n link = this.options.sellboxOptions ? this.sellbox[this.productCode.join('-')]['link'] : this.shopbox.find('input:checked').data('link');\n if( link.indexOf('addtocart') === -1 ){\n trackingCode = link.match(/externalRefID\\.([^\\/]+)/)[1].split(\".\").slice(0, 3).join(\".\");\n } else {\n trackingCode = link.match(/[a-z]{3}\\.\\d.*/g)[0].split(\".\").slice(0, 3).join(\".\");\n }\n }\n \n var trackingData = this.button.data('tracking');\n if (this.button.data('tracking').length > 1) {\n this.button.data('tracking', trackingData.replace(/'product':'.*?'/, \"'product':'\" + trackingCode + \"'\"));\n this.button.attr('data-tracking', trackingData.replace(/'product':'.*?'/, \"'product':'\" + trackingCode + \"'\"));\n }\n };\n /**\n * Update other shopboxes with same product code\n * @param {Object} shopbox\n * @param {Number} selectedValue\n */\n shopbox2.prototype.updateOtherShopbox = function (shopbox, selectedValue) {\n $AVG('.bshopbox2[data-product=\"' + this.options.productCode + '\"]').not(shopbox).each(function (index) {\n // update selected dropdown text in other shopboxes\n var selectedOptionsText = $AVG(this).find('.rext .val-' + selectedValue).text();\n $AVG(this).find('.rext .sval').text(selectedOptionsText);\n });\n };\n /**\n * Update radio buttons and update product code\n * @param {Object} elm\n */\n shopbox2.prototype.updateRadio = function (value) {\n // update other shopbox inputs\n this.shopbox.find('input[value=\"' + value + '\"]:visible').attr('checked', true).change();\n };\n /**\n * Set product code by seats or validity\n * @param {Object} elm\n */\n shopbox2.prototype.setProductCode = function () {\n // update other shopbox inputs \n this.productCode[2] = ('000'+this.selectedOption).slice(-3);\n this.productCode[3] = this.selectedInputValue; \n return this.productCode.join('-');\n };\n\n /**\n * set externalRefID from input value\n * @param {Object} elm\n */\n shopbox2.prototype.setExternalRefId = function (elm) {\n if (this.businessDesign) {\n this.exterlnalRefID = this.setProductCode(); \n\n } else {\n this.exterlnalRefID = (this.provider === \"INHOUSE\" ?\n this.shopbox.find('input:checked').data('link').match(/[?&]addtocart=([^&]+)(&|$)/)[1] :\n this.shopbox.find('input:checked').data('link').match(/externalRefID\\.([^\\/]+)/)[1]);\n }\n };\n\n shopbox2.prototype.countdown = function () {\n if (this.options.changeCountdownValues) {\n this.shopbox.find('.subscription-wrapper').remove();\n this.shopbox.find('.subscription-wrapper-countdown').removeClass('hidden');\n if(this.shopbox.find('input[type=radio]:checked').length === 0){\n this.shopbox.find('input[type=radio]').first().attr('checked', true).change();\n }\n if (this.businessDesign) {\n if (typeof this.sellboxCountdown !== \"undefined\" && this.sellboxCountdown) {\n this.sellbox = this.sellboxCountdown;\n this.updateDropdownSale();\n this.updatePrices(this.selectedOption);\n this.updateRadio(this.shopbox.find('input:checked').val());\n }\n\n // change overlay title\n this.shopbox.parents('.container').find('.swo-overlay-title')\n .html(this.shopbox.find('.overlayTitleCountdown').html());\n\n if (this.shopbox.find('.countdownButton').length > 0) {\n var countdownButton = this.shopbox.find('.countdownButton');\n this.button.html(countdownButton.html());\n if (countdownButton.data('twolines')) {\n this.button.addClass('two-lines');\n } else {\n this.button.removeClass('two-lines');\n }\n }\n }\n this.updateButton();\n }\n };\n\n /**\n * Selected option dependecies\n * @param {String} elm radio value\n */\n shopbox2.prototype.radioChange = function (elm) {\n this.selectedInputValue = elm.val();\n this.updateRadio(elm.val());\n this.setExternalRefId(elm);\n if (this.businessDesign) {\n this.updateDropdownSale();\n }\n this.updateButton();\n this.tracking();\n if (this.businessDesign) {\n this.placeholders();\n }\n };\n\n /**\n * Selected option dependecies\n * @param {number} elmValue Dropdown value\n */\n shopbox2.prototype.computersChange = function (elmValue) {\n if (elmValue === 'customComputers') {\n this.shopbox.find('.inputQuantity').removeClass('hidden');\n this.shopbox.find('.compQuantity').val(\"\").focus();\n this.shopbox.find('.rext').addClass('hidden');\n this.shopbox.find('.validInfo').addClass('hidden');\n } else {\n var elmValueInt = parseInt(elmValue);\n this.selectedOption = elmValueInt;\n this.exterlnalRefID = this.sellbox[this.setProductCode()];\n this.errMessage.addClass('hidden');\n this.updateOtherShopbox(this.shopbox, this.options, elmValueInt);\n this.updatePrices(elmValueInt);\n this.updateButton();\n this.tracking();\n }\n };\n /**\n * Input validation to allow only numbers\n * @param {Object} elm\n * @param {Event} e\n */\n shopbox2.prototype.keyUPChange = function (elm, e) {\n elm.value = $AVG(elm).val().replace(/[^0-9]/g, '');\n if (elm.value.match(/^[0-9]\\d*$/)) {\n $AVG(elm).next().removeClass('hidden');\n } else {\n $AVG(elm).next().addClass('hidden');\n }\n if (e.type === 'keyup' && e.keyCode === 10 || e.keyCode === 13) {\n $AVG(elm).blur();\n }\n };\n\n shopbox2.prototype.placeholders = function () {\n var price = \"\";\n var wasPrice = \"\";\n var saleSecondYear = \"\";\n var seats = \"\";\n var subscription = \"\";\n var current = this.productCode.join('-');\n try {\n\n price = this.sellbox[current][this.priceType] + \" \" + this.options.vat; //price-placeholder\n wasPrice = this.sellbox[current][this.priceListPriceType] + \" \" + this.options.vat; //was-price-placeholder\n saleSecondYear = this.sellbox[current]['discountPercent']; //sale-placeholder\n seats = this.seats[this.selectedOption]; //seats-placeholder\n subscription = this.shopbox.find('input:checked').data('text'); //subscription-placeholder\n } catch (e) {\n // todo: add new relic notification\n }\n this.shopboxWrapper.find('.price-placeholder').html(price);\n this.shopboxWrapper.find('.was-price-placeholder').html(wasPrice);\n this.shopboxWrapper.find('.discount-placeholder').html(saleSecondYear);\n this.shopboxWrapper.find('.seats-placeholder').html(seats.trim());\n this.shopboxWrapper.find('.subscription-placeholder').html(subscription);\n };\n\n\n // shopbox PLUGIN DEFINITION\n // =======================\n function Plugin(option, elm, event) {\n return this.each(function () { \n var $this = $AVG(this);\n var data = $this.data('bs.shopbox-with-options');\n var options = $AVG.extend({}, $this.data(), typeof object == 'object' && option);\n if (!data)\n $this.data('bs.shopbox-with-options', (data = new shopbox2(this, options)));\n switch (option) {\n case 'init':\n data.init();\n break;\n case 'countdown':\n data.countdown();\n break;\n case 'update':\n data.radioChange($AVG(elm));\n break;\n case 'select':\n data.computersChange($AVG(elm).val());\n data.placeholders();\n break;\n case 'customQuantity':\n data.updateQuantity($AVG(elm).val());\n break;\n case 'keyUP':\n data.keyUPChange(elm, event);\n break;\n }\n });\n }\n\n var old = $AVG.fn.shopbox2;\n $AVG.fn.shopbox2 = Plugin;\n $AVG.fn.shopbox2.Constructor = shopbox2;\n // shopbox NO CONFLICT\n // =====================\n $AVG.fn.shopbox2.noConflict = function () {\n $AVG.fn.shopbox2 = old;\n return this;\n };\n\n var clickHandler = function (e) {\n var parent = $AVG(this).parents('.bshopbox2');\n var action = $AVG(this).data('shopbox2');\n var productCode = parent.attr(\"data-product\");\n Plugin.call($AVG('.bshopbox2[data-product=\"' + productCode + '\"]'), action, this);\n };\n\n var selectHandler = function (e) {\n var parent = $AVG(this).parents('.bshopbox2');\n var productCode = parent.attr(\"data-product\");\n Plugin.call($AVG('.bshopbox2[data-product=\"' + productCode + '\"]'), 'select', this);\n };\n\n var readyHandler = function (e) { \n var shopboxes = $AVG('.bshopbox2');\n if (shopboxes.length > 0) { \n // check if is input already change by updateFormInputs()\n for (var i = 0, l = shopboxes.length; i < l; i++) {\n if (!$AVG(shopboxes[i]).find('.select.rext').length > 0) {\n // add tracking data to customer design button\n if ($AVG(shopboxes[i]).hasClass('consumer')) {\n $AVG(shopboxes[i]).find('.button').attr('data-tracking', \"'product',{'category':'HOME','product':''}\");\n } else{\n var errMessage = $AVG(shopboxes[i]).parents('.bshopbox2-wrapper').find('.error-message');\n errMessage.html(errMessage.text().replace('[SEATS]',' '));\n }\n // update dropdown on plural \n if( $AVG(shopboxes[i]).find('select option').length > 0 ){\n var translationKey = $AVG(shopboxes[i]).data('translationkey');\n var translationData = $AVG(shopboxes[i]).data('translationplural');\n var originTranslation = $AVG(shopboxes[i]).data('defaulttranslation');\n \n $AVG(shopboxes[i]).find('select option').each(function (index, element) {\n var optionVal = $AVG(this).val();\n if( /\\d+/.test(optionVal)){ \n $AVG(this).text( $AVG(this).text().replace( originTranslation, translation(translationKey, optionVal, translationData) ) );\n }\n });\n }\n\n $AVG(shopboxes[i]).updateFormInputs();\n }\n }\n // add data attributes for button parsys to trigger modal\n $AVG(\".bshopbox2-wrapper .button-wrapper\").each(function (index, element) {\n $AVG(this).find('a').attr('data-toggle', 'modal');\n $AVG(this).find('a').attr('data-target', '#' + $AVG(this).data('index'));\n });\n $AVG(\".button-wrapper\").on(\"click\", \"a\", function (e) {\n e.preventDefault();\n });\n\n var els = '[data-shopbox2-comp]';\n Plugin.call($AVG(els), 'init');\n // If teaser is loaded after countdownFinish event call coundown function\n if ($AVG('#countdown[data-finish]').length > 0) {\n Plugin.call($AVG(els), 'countdown');\n }\n }\n };\n\n var countdown = function (e) {\n var els = '[data-shopbox2-comp]';\n Plugin.call($AVG(els), 'countdown');\n };\n\n var keyUpHandler = function (e) {\n var els = '[data-shopbox2-comp]';\n Plugin.call($AVG(els), 'keyUP', this, e);\n };\n\n $AVG(document)\n .on('change.bs.shopbox2.data-api', '[data-shopbox2-comp] select', selectHandler)\n .on('TestAndTargetInit teaserInit', readyHandler)\n .on('click.bs.shopbox2.data-api', '[data-shopbox2]:not([data-shopbox2=\"customQuantity\"])', clickHandler)\n .on('blur.bs.shopbox2.data-api', '[data-shopbox2=\"customQuantity\"]', clickHandler)\n .on('keyup.bs.shopbox2.data-api', '[data-shopbox2=\"customQuantity\"]', keyUpHandler)\n .on('CountdownFinish', countdown)\n .ready(readyHandler);\n}(jQuery);\nvar previousScroll = 0;\n\n$AVG(window).scroll(function () {\n if ($AVG('.sliding-tabs-wrapper').length > 0) {\n var currentScroll = $AVG(this).scrollTop();\n\n if (currentScroll > previousScroll) {\n window.setTimeout(hideNav, 300);\n } else {\n window.setTimeout(showNav, 300);\n }\n previousScroll = currentScroll;\n\n if (isScrolledIntoView($AVG('.sliding-tabs-wrapper'), 'bottom'))\n addSticky();\n if (isScrolledIntoView($AVG('.sliding-tabs-wrapper'), 'top'))\n removeSticky();\n }\n\n});\n\nfunction hideNav() {\n $AVG(\"[data-nav-status='sticky-toggle']\").removeClass(\"slide-in\").addClass(\"slide-out\");\n}\n\nfunction showNav() {\n $AVG(\"[data-nav-status='sticky-toggle']\").removeClass(\"slide-out\").addClass(\"slide-in\");\n}\n\nfunction addSticky() {\n $AVG(\"[data-nav-status='sticky-toggle']\").removeClass(\"sticky-disabled\").addClass(\"sticky-enabled\");\n}\n\nfunction removeSticky() {\n $AVG(\"[data-nav-status='sticky-toggle']\").removeClass(\"sticky-enabled\").addClass(\"sticky-disabled\");\n}\n\nfunction isScrolledIntoView(elem, state) {\n var $elem = $AVG(elem);\n var $window = $AVG(window);\n\n var docViewTop = $window.scrollTop();\n\n var elemTop = $elem.offset().top;\n var elemBottom = elemTop + $elem.height();\n\n if (state == 'top')\n return (elemTop >= docViewTop);\n if (state == 'bottom')\n return (elemBottom <= docViewTop);\n}\n\nfunction itemsSlideIn() {\n $AVG('.sliding-tabs ul').addClass('slide-from-right');\n}\n\n$AVG(document).ready(function () {\n // set height to hide scrollbar\n if ($AVG('.sliding-tabs').length > 0 && platformDetection() !== 'platform_pc') {\n $AVG('.sliding-tabs').each(function(){\n $AVG(this).find('.panel-body').css('padding-bottom','20px');\n $AVG(this).css('height',$AVG(this).outerHeight()-20);\n });\n }\n itemsSlideIn();\n\n $AVG('.sliding-tabs-hub .items').each(function() {\n var $item = $AVG(this);\n $item.removeClass('opened');\n $item.find('li:first-child').click(function() {\n $item.toggleClass('opened');\n })\n });\n});\n\"use strict\";\nvar SocialShare = {\n currentPage: encodeURIComponent(location.href),\n DATA_SOCIAL_NETWORKS: 'social-networks',\n DELIMETER_SOCIAL_NETWORKS: '|',\n SELECTOR_SHARE_COUNT: '.social-share .social',\n\n counts: {\n FB: false, // Facebook\n TW: false, // Twitter\n GP: false, // GooglePlus\n LI: false, // LinkedIn\n },\n\n init: function() {\n this.getUsedSocials();\n\n if(this.counts.FB === true) {\n this.getFacebookShareCounts();\n }\n if(this.counts.TW === true) {\n this.getTwitterShareCounts();\n }\n if(this.counts.GP === true) {\n this.getGooglePlusShareCounts();\n }\n if(this.counts.LI === true) {\n this.getLinkedInShareCounts();\n }\n },\n\n /**\n * Find which social networks are used on page for calculating sum of share counts\n */\n getUsedSocials: function() {\n $AVG('[data-' + this.DATA_SOCIAL_NETWORKS + ']').each(function() {\n var socials = $AVG(this).data(SocialShare.DATA_SOCIAL_NETWORKS).split(SocialShare.DELIMETER_SOCIAL_NETWORKS);\n var l = socials.length;\n\n for(var i = 0; i < l; i++) {\n SocialShare.counts[socials[i]] = true;\n }\n });\n },\n\n /**\n * Check whether the response data is correct number or not\n */\n validateCount: function(number, social) {\n if(!isNaN(parseInt(number))) {\n this.counts[social] = parseInt(number);\n }else {\n // todo: add new relic notification\n }\n this.setShareCounts();\n },\n\n /**\n * Loop through social share component instances and sets sum of share counts.\n * Unloaded social networks has TRUE value in counts object.\n */\n setShareCounts: function() {\n if(this.counts.FB === true || this.counts.TW === true ||\n this.counts.GP === true || this.counts.LI === true) {\n return;\n }\n\n // All social networks loaded\n $AVG(this.SELECTOR_SHARE_COUNT).each(function() {\n var socials = $AVG(this).data(SocialShare.DATA_SOCIAL_NETWORKS).split(SocialShare.DELIMETER_SOCIAL_NETWORKS);\n var sum = 0, l = socials.length;\n\n for(var i = 0; i < l; i++) {\n sum += SocialShare.counts[socials[i]];\n }\n\n if(parseInt($AVG(this).data('aggregate-number')) <= sum) {\n $AVG(this).find('.count-number').text(SocialShare.numberFormat(sum));\n $AVG(this).find('.share-counts').css('display', 'inline-block');\n }\n });\n },\n\n /**\n * Shorten number with appropriate abbreviation. 1_000_000 -> 1M, 10_000 -> 10k\n */\n numberFormat: function(number) {\n if(number >= Math.pow(10, 6)) {\n number = Math.round(number / Math.pow(10, 6)) + \"M\";\n } else if(number >= Math.pow(10, 4)) {\n number = Math.round(number / Math.pow(10, 3)) + \"k\";\n }\n\n return number;\n },\n\n getFacebookShareCounts: function() {\n $AVG.getJSON('//graph.facebook.com/fql?q=SELECT share_count FROM link_stat WHERE url=\"' + this.currentPage + '\"', function (data) {\n try {\n SocialShare.validateCount(data.data[0].share_count, \"FB\");\n } catch(e) {\n // todo: add new relic notification\n }\n });\n },\n\n getTwitterShareCounts: function() {\n $AVG.getJSON('//opensharecount.com/count.json?url=' + SocialShare.currentPage, function(data) {\n try {\n SocialShare.validateCount(data.count, \"TW\");\n } catch(e) {\n // todo: add new relic notification\n }\n });\n },\n\n getGooglePlusShareCounts: function() {\n var data = {\n \"method\": \"pos.plusones.get\",\n \"id\": decodeURIComponent(SocialShare.currentPage),\n\n \"params\": {\n \"nolog\": true,\n \"id\": decodeURIComponent(SocialShare.currentPage),\n \"source\": \"widget\",\n \"userId\": \"@viewer\",\n \"groupId\": \"@self\",\n },\n\n \"jsonrpc\": \"2.0\",\n \"key\": \"p\",\n \"apiVersion\": \"v1\",\n };\n\n $AVG.ajax({\n type: \"POST\",\n url: \"https://clients6.google.com/rpc\",\n processData: true,\n contentType: \"application/json\",\n data: JSON.stringify(data),\n success: function(data){\n try {\n SocialShare.validateCount(data.result.metadata.globalCounts.count, \"GP\");\n } catch(e) {\n // todo: add new relic notification\n }\n }\n });\n },\n\n getLinkedInShareCounts: function() {\n $AVG.ajax({\n url: \"https://www.linkedin.com/countserv/count/share\",\n dataType: \"jsonp\",\n jsonpCallback: \"social_share_linked_in_callback\",\n data: {\n \"url\": decodeURIComponent(SocialShare.currentPage),\n },\n success: function(data){\n try {\n SocialShare.validateCount(data.count, \"LI\");\n } catch(e) {\n // todo: add new relic notification\n }\n },\n });\n },\n};\n\n$AVG(document).ready(function () {\n if($AVG('.social-share').length > 0){\n // Bind open dialog\n $AVG('.social-share .social-button').click(function(){\n window.open($AVG(this).attr('href') + '&t=' + encodeURIComponent(document.title), 'sharer', 'toolbar=0,status=0,width=626,height=436');\n return false;\n });\n\n if($AVG(SocialShare.SELECTOR_SHARE_COUNT).length > 0) {\n SocialShare.init();\n }\n }\n});\n+ function ($AVG) {\n 'use strict';\n\n /**\n * @author Zden�k Mazanec\n * @version 1.0\n */\n\n // find and replace cart links to avoid http redirects\n function cartLinkReplace() {\n if (typeof PriceUtil !== 'undefined') {\n $AVG('main').find('a[href*=\"/cart\"]').each(function () {\n var $link = $AVG(this);\n $link.attr('href', PriceUtil.fastAddToCartLink($link.attr('href')));\n });\n }\n }\n\n $AVG(document).ready(function () {\n cartLinkReplace();\n });\n\n}(jQuery);\n\nHeader = window.Shopbox|| {};\nHeader.header = (function($, document) {\n\tvar api = {};\n\t\n\tfunction slideImg(){\n\t\t\t\n\t\tvar delay = 500;\t\t\t\t\n\t\tvar images = $AVG('.header-wrapper .banner-header-img').not('.callout');\n\t\tvar callout = $AVG('.header-wrapper .callout');\n\t\t\t\t\n\t\timages.css( 'left' , '-=50px');\t\n\t\t\n\t\timages.each(function( index ) {\n\t\t\t\n\t\t\tdelay = (index == 0 ? 0 : delay);\t\t\t\n\t\t\t\n\t\t\t$AVG(this).delay(delay).animate({\n\t\t\t\t'left': '+=50px',\n\t\t\t\t'opacity': '1.0'\n\t\t\t}, 400, 'swing');\n\t\t\t\n\t\t\tdelay += 200;\n\t\t});\n\t\t\t\t\n\t\tcallout.delay(500).animate({ 'opacity': '1.0' }, 300, 'swing'); \n\t\t\t\n\t\t\n\t}\t\n\t\n\tapi.init = function() {\n\t\t$AVG(document).on({\n\t\t\tready : function() {\n\t\t\t\t\t\n\t\t\t\tslideImg();\t\t\t\t\t\t\t\t\n\t\t\t}\t\t\t\n\t\t});\n\t};\n\treturn api;\n\t\n}($AVG, document));\n\n\nHeader.header.init();\n\n\nfunction disableOptOutCookiesButton() {\n var $optOutButton = $AVG(\"a.opt_out_cookies_button\");\n $optOutButton.addClass(\"disabled\");\n var $textSection = $optOutButton.find(\"span.text\");\n var $disabledTest = $textSection.data(\"opt-out-already-text\");\n $textSection.html(\"\" + $disabledTest + \"\");\n}\n\n$AVG(document).ready(function(){\n var value = \"; \" + document.cookie;\n var parts = value.split(\"; sat_track=\");\n if (parts.length === 2) {\n if (parts.pop().split(\";\").shift() === \"false\") {\n disableOptOutCookiesButton();\n }\n }\n});\n\n$AVG(\"a.opt_out_cookies_button\").click(function(event) {\n event.preventDefault();\n if (typeof s !== 'undefined' && typeof s.dataTrackingCallback !== 'undefined') {\n s.dataTrackingCallback('optOut');\n } \n if (typeof deleteTrackingCookies === \"function\") {\n deleteTrackingCookies();\n disableOptOutCookiesButton();\n }\n if (typeof setDeclineCookie === \"function\") {\n setDeclineCookie();\n }\n $AVG(\"#avg-cookie-bar\").slideUp('fast');\n});\n\n$AVG(\"a.opt_out_cookies_button_author\").click(function(event) {\n event.preventDefault();\n alert(\"Function is disabled on author instance\");\n});\n\nfunction deleteTrackingCookies() {\n var cookiesNamesWhitelist = [\"AVGCookiePercentage\",\"avg_eshop_cart\",\"AVGSIDM\",\"F5AVG\",\"TSSID\",\"avg_toolbar\",\"avgualpw\",\"avguareg\",\"upl_ssid_c\",\"geoip\",\"spideroak\",\"avg_eshop_cart_ubrowser\",\"avg_eshop_ctysel\",\"avg_myaccount\",\"avg_eshop_chsel\",\"avg_eshop_chsel_force\",\"avg_eshop_chsel_force\",\"avg_eshop_pattempts\",\"avg_eshop_empty_cart_redir\",\"avg_eshop_no_expiry_date\",\"avg_eshop_bkpcd_\",\"checkout_type_\",\"avg_eshop_use_license_data\",\"affid\",\"forceGateway\",\"rbsFail\",\"gbcFail\",\"TC_orderInfo_Fail\",\"TC_getKeyRequest_Fail\",\"checkout_type\",\"autobilling_variant\",\"debugbar\",\"AVGSCHELPREQUEST\",\"avgLocale\",\"avg_plt\",\"avg_thr\",\"avg_mobile\",\"SESSIONID\",\"JSESSIONID\",\"SessionPersistence-publish-prod\",\"AParam\",\"app-param-A\",\"avg_app_params\",\"avg_app_params2\",\"SessionPersistence-publish\",\"two_step_acc\",\"AVGSurvey\",\"avgLocale\",\"PHPSESSID\",\"s_zen\"];\n var cookiesStubsWhitelist = [\"AVGCSC\",\"AVGRandom\"];\n var cookies = document.cookie.split(\"; \");\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i];\n var parts = cookie.split(\"=\");\n var cookieName = parts[0];\n if (typeof cookieName !== \"undefined\") {\n var notFound = true;\n for (var j = 0; j < cookiesNamesWhitelist.length; j++) {\n if (cookiesNamesWhitelist[j] === cookieName) {\n notFound = false;\n break;\n }\n }\n if (notFound) {\n for (j = 0; j < cookiesStubsWhitelist.length; j++) {\n if (cookieName.indexOf(cookiesStubsWhitelist[j]) == 0) {\n notFound = false;\n break;\n }\n }\n }\n if (notFound) {\n if (document.domain.indexOf(\".avg.com\", document.domain.length - 8) !== -1) {\n document.cookie = cookieName + \"=; expires=Thu, 01-Jan-70 00:00:00 UTC; path=/; domain=.avg.com;\";\n } else {\n document.cookie = cookieName + \"=; expires=Thu, 01-Jan-70 00:00:00 UTC; path=/;\";\n }\n }\n }\n }\n}\n\nfunction setDeclineCookie() {\n var optOutCookies = [\"sat_track:false\"];\n var name = \"sat_track\";\n var value = \"false\";\n if (optOutCookies.length > 0) {\n var declineCookie = optOutCookies[0].split(\":\");\n name = declineCookie[0];\n if (declineCookie.length > 1) {\n value = declineCookie[1];\n } else {\n value = name;\n }\n }\n var cookieDate = new Date();\n cookieDate.setFullYear(cookieDate.getFullYear( ) + 2);\n if (document.domain.indexOf(\".avg.com\", document.domain.length - 8) !== -1) {\n document.cookie = name + \"=\" + value +\"; expires=\" + cookieDate.toUTCString() + \"; path=/; domain=.avg.com;\";\n } else {\n document.cookie = name + \"=\" + value +\"; expires=\" + cookieDate.toUTCString() + \"; path=/;\";\n }\n}\n\n(function checkOptOutCookies() {\n var value = \"; \" + document.cookie;\n var optOutCookies = [\"sat_track:false\"];\n for (var i = 0; i < optOutCookies.length; i++) {\n var cookie = optOutCookies[i].split(\":\");\n var parts = value.split(\"; \"+ cookie[0] + \"=\");\n if (parts.length == 2) {\n var value = parts.pop().split(\";\").shift();\n if (typeof value !== \"undefined\") {\n if (cookie.length > 1) {\n if (value === cookie[1]) {\n deleteTrackingCookies();\n var cookieDate = new Date();\n cookieDate.setFullYear(cookieDate.getFullYear() + 2);\n if (document.domain.indexOf(\".avg.com\", document.domain.length - 8) !== -1) {\n document.cookie = cookie[0] + \"=\" + value +\"; expires=\" + cookieDate.toUTCString() + \"; path=/; domain=.avg.com;\";\n } else {\n document.cookie = cookie[0] + \"=\" + value +\"; expires=\" + cookieDate.toUTCString() + \"; path=/;\";\n }\n }\n }\n }\n }\n }\n}());\n/**\n * @version 1.0\n * @author Michal Pribila\n */\n+function ($AVG) {\n 'use strict';\n\n // TEXT COMPONENT PUBLIC CLASS DEFINITION\n // ==============================\n\n var TextComponent = function (element, options) {\n this.$element = $AVG(element);\n this.options = $AVG.extend({}, options);\n };\n\n /**\n * Swap textComponent after countdown change\n * @param {Object} elm\n */\n TextComponent.prototype.countdown = function (elm) {\n $AVG(elm).css('display', 'none');\n $AVG('.countdownChange').css('display', 'block');\n };\n\n /*\n // TEXT COMPONENT PLUGIN DEFINITION\n // ========================\n */\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $AVG(this);\n var data = $this.data('bs.textComponent');\n var options = $AVG.extend({}, $this.data());\n if (!data)\n $this.data('bs.textComponent', (data = new TextComponent(this, options)));\n\n if (option === 'countdown') {\n data.countdown($this);\n }\n });\n }\n\n var old = $AVG.fn.textComponent;\n\n $AVG.fn.textComponent = Plugin;\n $AVG.fn.textComponent.Constructor = TextComponent;\n\n\n // TEXT COMPONENT NO CONFLICT\n // ==================\n\n $AVG.fn.textComponent.noConflict = function () {\n $AVG.fn.textComponent = old;\n return this;\n };\n\n var countdown = function (e) {\n var els = '.defaultWithoutChange';\n Plugin.call($AVG(els), 'countdown');\n };\n\n $AVG(document).on('CountdownFinish', countdown);\n $AVG(document).on(\"TestAndTargetInit teaserInit\", function () {\n // If teaser is loaded after countdownFinish event call coundown function\n if ($('#countdown[data-finish]').length > 0) {\n countdown();\n }\n });\n}(jQuery);\n\n/**\n * Zoomify\n * A jQuery plugin for simple lightboxes with zoom effect.\n * http://indrimuska.github.io/zoomify\n *\n * (c) 2015 Indri Muska - MIT\n */\n;(function ($AVG) {\n\n // initialization\n function Zoomify(element, options) {\n var that = this;\n\n this._zooming = false;\n this._zoomed = false;\n this._timeout = null;\n this.$shadow = null;\n this.$image = $AVG(element).addClass('zoomify');\n this.$parent = this.$image.parents('.lightbox');\n this.options = $AVG.extend({}, Zoomify.DEFAULTS, this.$image.data(), options);\n this.$image.on('click', function (event) { \n that.zoom();return false;\n });\n $AVG(window).on('resize', function () {\n that.reposition();\n });\n $AVG(document).on('scroll', function () {\n that.reposition();\n });\n }\n ;\n Zoomify.DEFAULTS = {\n duration: 200,\n easing: 'linear',\n scale: 0.9\n };\n\n // css utilities\n Zoomify.prototype.transition = function ($element, value) {\n $element.css({\n '-webkit-transition': value,\n '-moz-transition': value,\n '-ms-transition': value,\n '-o-transition': value,\n 'transition': value\n });\n };\n Zoomify.prototype.addTransition = function ($element) {\n this.transition($element, 'all ' + this.options.duration + 'ms ' + this.options.easing);\n };\n Zoomify.prototype.removeTransition = function ($element, callback) {\n var that = this;\n\n clearTimeout(this._timeout);\n this._timeout = setTimeout(function () {\n that.transition($element, '');\n if ($AVG.isFunction(callback))\n callback.call(that);\n }, this.options.duration);\n };\n Zoomify.prototype.transform = function (value) {\n this.$image.css({\n '-webkit-transform': value,\n '-moz-transform': value,\n '-ms-transform': value,\n '-o-transform': value,\n 'transform': value\n });\n };\n Zoomify.prototype.transformScaleAndTranslate = function (scale, translateX, translateY, callback) {\n this.addTransition(this.$image);\n this.transform('scale(' + scale + ') translate(' + translateX + 'px, ' + translateY + 'px)');\n this.removeTransition(this.$image, callback);\n };\n\n // zooming functions\n Zoomify.prototype.zoom = function () {\n if (this._zooming)\n return;\n\n if (this._zoomed)\n this.zoomOut();\n else\n this.zoomIn();\n };\n Zoomify.prototype.zoomIn = function () {\n var that = this,\n transform = this.$image.css('transform');\n\n this.transition(this.$image, 'none');\n this.transform('none');\n\n var offset = this.$image.offset(),\n width = this.$image.outerWidth(),\n height = this.$image.outerHeight(),\n nWidth = this.$image[0].naturalWidth || +Infinity,\n nHeight = this.$image[0].naturalHeight || +Infinity,\n wWidth = $AVG(window).width(),\n wHeight = $AVG(window).height(),\n scaleX = Math.min(nWidth, wWidth * this.options.scale) / width,\n scaleY = Math.min(nHeight, wHeight * this.options.scale) / height,\n scale = Math.min(scaleX, scaleY),\n translateX = (-offset.left + (wWidth - width) / 2) / scale,\n translateY = (-offset.top + (wHeight - height) / 2 + $AVG(document).scrollTop()) / scale;\n\n this.transform(transform);\n\n this._zooming = true;\n this.$image.addClass('zoomed').trigger('zoom-in.zoomify');\t\n this.$parent.removeClass('lightbox-thumbnail');\n setTimeout(function () {\n that.addShadow();\n that.transformScaleAndTranslate(scale, translateX, translateY, function () {\n that._zooming = false;\n that.$image.trigger('zoom-in-complete.zoomify');\n });\n that._zoomed = true;\n });\n };\n Zoomify.prototype.zoomOut = function () {\n var that = this;\n\n this._zooming = true;\n this.$image.trigger('zoom-out.zoomify');\n this.transformScaleAndTranslate(1, 0, 0, function () {\n that._zooming = false;\n that.$image.removeClass('zoomed').trigger('zoom-out-complete.zoomify');\n this.$parent.addClass('lightbox-thumbnail');\n });\n this.removeShadow();\n this._zoomed = false;\n };\n\n // page listener callbacks\n Zoomify.prototype.reposition = function () {\n if (this._zoomed) {\n this.transition(this.$image, 'none');\n this.zoomIn();\n }\n };\n\n // shadow background\n Zoomify.prototype.addShadow = function () {\n var that = this;\n if (this._zoomed)\n return;\n\n if (that.$shadow)\n that.$shadow.remove();\n this.$shadow = $AVG('
');\n $AVG('body').append(this.$shadow);\n this.addTransition(this.$shadow);\n this.$shadow.on('click', function () {\n that.zoomOut();\n });\n\n setTimeout(function () {\n that.$shadow.addClass('zoomed');\n }, 10);\n };\n Zoomify.prototype.removeShadow = function () {\n var that = this;\n if (!this.$shadow)\n return;\n\n this.addTransition(this.$shadow);\n this.$shadow.removeClass('zoomed');\n this.$image.one('zoom-out-complete.zoomify', function () {\n if (that.$shadow)\n that.$shadow.remove();\n that.$shadow = null;\n });\n };\n\n // plugin definition\n $AVG.fn.zoomify = function (option) {\n return this.each(function () {\n var $this = $AVG(this),\n zoomify = $this.data('zoomify');\n if (!zoomify)\n $this.data('zoomify', (zoomify = new Zoomify(this, typeof option === 'object' && option)));\n if (typeof option === 'string' && ['zoom', 'zoomIn', 'zoomOut', 'reposition'].indexOf(option) >= 0)\n zoomify[option]();\n });\n };\n \n $AVG('.lightbox-thumbnail .zoom').zoomify();\n $AVG('.lightbox-thumbnail').on('click',function (event) {\n $AVG(this).find('.zoom').trigger('click');\n return false;\n });\n})(jQuery);\n(function() {\n\t'use strict';\n\tvar unserializeUrl = avm.require('avast.url.unserialize'),\n\t\tencode = avm.require('avast.base64.encode'),\n\t\tpath = window.location.href,\n\t\tURLparams = unserializeUrl(path),\n\t\t$document = $(document),\n\t\t$targetLinks = $('a[href*=\"shop.avg.com/store/avgstore\"]'),\t// link with old functionality\n\t\t$newTargetLinks = $('a[href*=\"shop.avg.com/store\"]'); // link with new functionality\n\n\tif (typeof URLparams.test !== 'undefined') { /* @todo : This condition to be removed when approved in OO-9609 */\n\n\t\t$newTargetLinks.each(function() {\n\t\t\tremoveAswParamFromLink($(this));\n\t\t});\n\n\t\tif (typeof URLparams.ppc !== 'undefined' && URLparams.ppc.length > 0) {\n\n\t\t\t\t$document.ready(function() {\n\n\t\t\t\t\t$targetLinks.each(function() {\n\n\t\t\t\t\t\tvar $self = $(this),\n\t\t\t\t\t\t\toldLink = $self.attr('href'),\n\t\t\t\t\t\t\tseparator = oldLink.substring(oldLink.length - 1 ) === '/' ? '' : '/';\n\n\t\t\t\t\t\t\t$self.attr('href', oldLink + separator + 'ASWPARAM.' + encode({ppc: URLparams.ppc}));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t\t// new aswparam functionality\n\t} else if (typeof URLparams.aswparam !== 'undefined' && URLparams.aswparam.length > 0) {\n\n\t\t$newTargetLinks.each(function() {\n\t\t\tsetAswParamLink($(this), URLparams.aswparam, $(this).data('aswparam-placeholder'));\n\t\t});\n\t} else {\n\t\t$newTargetLinks.each(function() {\n\t\t\tremoveAswParamFromLink($(this));\n\t\t});\n\t}\n\n\tfunction setAswParamLink(link, aswParamValue, aswParamPlaceholder) {\n\n\t\tvar oldLink = link.attr('href');\n\n\t\tif(aswParamPlaceholder) {\n\t\t\t$(link).attr('href', oldLink.replace('{aswparam}', aswParamPlaceholder.replace('{ASWPARAM}', aswParamValue)));\n\t\t} else {\n\t\t\tremoveAswParamFromLink(link);\n\t\t}\n\t}\n\tfunction removeAswParamFromLink(link) {\n\t\tvar oldLink = link.attr('href');\n\t\t$(link).attr('href', oldLink.replace('{aswparam}', ''));\n\t}\n})();\n\n// affiliate aswparam from url parameters GLOWEB-7251\n(function() {\n 'use strict';\n\n try {\n // get parameters from url\n var urlParams = location.search.toLowerCase(),\n buylinks = document.querySelectorAll('[data-role=\"cart-link\"]');\n\n // check if url contains some of the affiliate parameters\n if (/programtype|partnerid|clickid|trafficsource/.test(urlParams)) {\n\n var aswObj = {},\n aswparam = '';\n\n // put parameters from url to object\n //safari fix, remove when safari starts working\n //if (/partnerid=/.test(urlParams)) aswObj.partnerid = urlParams.match(/(?<=partnerid=).*?(?=&)|(?<=partnerid=).*?$/)[0];\n //if (/programtype=/.test(urlParams)) aswObj.programtype = urlParams.match(/(?<=programtype=).*?(?=&)|(?<=programtype=).*?$/)[0];\n //if (/clickid=/.test(urlParams)) aswObj.clickID = urlParams.match(/(?<=clickid=).*?(?=&)|(?<=clickid=).*?$/)[0];\n //if (/trafficsource=/.test(urlParams)) aswObj.trafficSource = urlParams.match(/(?<=trafficsource=).*?(?=&)|(?<=trafficsource=).*?$/)[0];\n if (/partnerid=/.test(urlParams)) {\n aswObj.partnerid = urlParams.match(/(?:partnerid=).*?(?=&)|(?:partnerid=).*?$/)[0].replace(/partnerid=/, '');\n }\n\n if (/programtype=/.test(urlParams)) {\n aswObj.programtype = urlParams.match(/(?:programtype=).*?(?=&)|(?:programtype=).*?$/)[0].replace(/programtype=/, '');\n }\n\n if (/clickid=/.test(urlParams)) {\n aswObj.clickID = urlParams.match(/(?:clickid=).*?(?=&)|(?:clickid=).*?$/)[0].replace(/clickid=/, '');\n }\n\n if (/trafficsource=/.test(urlParams)) {\n aswObj.trafficSource = urlParams.match(/(?:trafficsource=).*?(?=&)|(?:trafficsource=).*?$/)[0].replace(/trafficsource=/, '');\n }\n\n // encode object to base64\n aswparam = btoa(JSON.stringify(aswObj));\n\n if (!sessionStorage.getItem(\"aswparam\")) {\n sessionStorage.setItem(\"aswparam\", aswparam);\n }\n\n setAswparamOnButton(aswparam);\n\n } else if (sessionStorage.getItem(\"aswparam\")) {\n setAswparamOnButton(sessionStorage.getItem(\"aswparam\"));\n };\n\n function setAswparamOnButton(aswparam) {\n // check if there any buttons on page\n if (buylinks.length > 0) {\n\n // for each buy link update href\n buylinks.forEach(function(link) {\n updateLink(link, aswparam)\n });\n };\n\n // event listener for change in actionbox\n window.addEventListener('actionbox-updated', function(e) {\n e.detail.element.querySelectorAll('[data-role=\"cart-link\"]').forEach(function(link) {\n updateLink(link, aswparam)\n });\n });\n\n }\n\n // check if link doesn't contain aswparam and add it\n function updateLink(link, aswparam) {\n if(!/aswparam/.test(link.href)) {\n link.href = link.href + '&aswparam=' + aswparam;\n };\n }\n\n } catch (error) {\n console.error(error);\n sdl.push({\n system: {\n error: {\n type: error.name,\n message: error.message,\n }\n },\n event: 'system.error'\n })\n }\n}());\n\n(function() {\n\t'use strict';\n\tvar serializeUrl = avm.require('avast.url.serialize'),\n\t\tunserializeUrl = avm.require('avast.url.unserialize'),\n\t\tcreateLink = function(currentLink, param, value) {\n\t\t\tvar newLink = currentLink.substring(0, currentLink.indexOf('?')),\n\t\t\t\tlinkParams = unserializeUrl(currentLink);\n\n\t\t\tlinkParams[param] = value;\n\t\t\tnewLink += '?' + serializeUrl(linkParams);\n\n\t\t\treturn newLink;\n\t\t},\n\t\tpath = window.location.href,\n\t\tURLparams = unserializeUrl(path),\n\t\t$targetLinks = $('a[href*=\"product=freegsr\"]');\n\n\tif (URLparams.ppc && path.indexOf('/ppc/') > -1) {\n\t\tif ( URLparams.ppc.match(/[A-Za-z0-9]/) && URLparams.ppc.length === 2) {\n\t\t\t$(document).ready(function() {\n\t\t\t\t$targetLinks.each(function(index) {\n\t\t\t\t\tvar $self = $(this),\n\t\t\t\t\t\tselfLink = $self.attr('href'),\n\t\t\t\t\t\tvalue = URLparams.ppc;\n\n\t\t\t\t\t$self.attr('href', createLink(selfLink, 'ppc', value));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n})();\n\n(function() {\n\t'use strict';\n\n\t/**\n\t* Decorate cart link with showCuponeCode parameter\n\t* @version 1.0.0\n\t* @author Ales Gabriel\n\t* @module avast.web.cuponeCode\n\t* @requires jquery\n\t*/\n\tfunction couponCode() {\n\t\treturn {\n\t\t\toptions: {\n\t\t\t\tregexS: '[\\\\?&]couponfield=yes([^&#]*)',\n\t\t\t\tproviders: ['shop.avg.com'],\n\t\t\t\turlQuery: '/showCouponCode=yes'\n\t\t\t},\n\n\t\t\tinit: function(params) {\n\t\t\t\tif (params !== undefined) {\n\t\t\t\t\tfor (var param in params) {\n\t\t\t\t\t\tthis.options[param] = params[param];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar regex = new RegExp(this.options.regexS, 'i');\n\t\t\t\tvar results = regex.exec(window.location.href);\n\n\t\t\t\tif (results === null) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tvar href;\n\t\t\t\t\tvar couponParam = this.options.urlQuery;\n\t\t\t\t\tvar providers = this.options.providers;\n\n\t\t\t\t\t$('a').each(function() {\n\t\t\t\t\t\thref = $(this).attr('href') ? $(this).attr('href') : '';\n\t\t\t\t\t\tfor (var i = 0; i < providers.length; i++) {\n\t\t\t\t\t\t\tif (href.indexOf(providers[i]) !== -1) {\n\t\t\t\t\t\t\t\thref += couponParam;\n\t\t\t\t\t\t\t\t$(this).attr('href', href);\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}\n\t\t\t}\n\t\t};\n\t}\n\n\tcouponCode().init();\n})();\n\n/**\n * Event emitter\n * @version 1.0.0\n * @author Ales Gabriel \n * @module avast.event.emitter\n * @return {Function} Emitter constructor\n */\navm.define('avast.event.emitter', (function(){\n\t'use strict';\n\n\t/**\n\t * Event emitter\n\t * @version 1.2.1\n\t * @see {@link https://github.com/component/emitter}\n\t */\n\n\t/*\n\t(The MIT License)\n\n\tCopyright (c) 2014 Component contributors \n\n\tPermission is hereby granted, free of charge, to any person\n\tobtaining a copy of this software and associated documentation\n\tfiles (the \"Software\"), to deal in the Software without\n\trestriction, including without limitation the rights to use,\n\tcopy, modify, merge, publish, distribute, sublicense, and/or sell\n\tcopies of the Software, and to permit persons to whom the\n\tSoftware is furnished to do so, subject to the following\n\tconditions:\n\n\tThe above copyright notice and this permission notice shall be\n\tincluded in all copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n\tOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\tNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n\tHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n\tWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n\tFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n\tOTHER DEALINGS IN THE SOFTWARE.\n\t*/\n\n\t/**\n\t * Initialize a new `Emitter`.\n\t *\n\t * @api public\n\t */\n\n\tfunction Emitter(obj) {\n\t if (obj) return mixin(obj);\n\t};\n\n\t/**\n\t * Mixin the emitter properties.\n\t *\n\t * @param {Object} obj\n\t * @return {Object}\n\t * @api private\n\t */\n\n\tfunction mixin(obj) {\n\t for (var key in Emitter.prototype) {\n\t\tobj[key] = Emitter.prototype[key];\n\t }\n\t return obj;\n\t}\n\n\t/**\n\t * Listen on the given `event` with `fn`.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.on =\n\tEmitter.prototype.addEventListener = function(event, fn){\n\t this._callbacks = this._callbacks || {};\n\t (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n\t\t.push(fn);\n\t return this;\n\t};\n\n\t/**\n\t * Adds an `event` listener that will be invoked a single\n\t * time then automatically removed.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.once = function(event, fn){\n\t function on() {\n\t\tthis.off(event, on);\n\t\tfn.apply(this, arguments);\n\t }\n\n\t on.fn = fn;\n\t this.on(event, on);\n\t return this;\n\t};\n\n\t/**\n\t * Remove the given callback for `event` or all\n\t * registered callbacks.\n\t *\n\t * @param {String} event\n\t * @param {Function} fn\n\t * @return {Emitter}\n\t * @api public\n\t */\n\n\tEmitter.prototype.off =\n\tEmitter.prototype.removeListener =\n\tEmitter.prototype.removeAllListeners =\n\tEmitter.prototype.removeEventListener = function(event, fn){\n\t this._callbacks = this._callbacks || {};\n\n\t // all\n\t if (0 == arguments.length) {\n\t\tthis._callbacks = {};\n\t\treturn this;\n\t }\n\n\t // specific event\n\t var callbacks = this._callbacks['$' + event];\n\t if (!callbacks) return this;\n\n\t // remove all handlers\n\t if (1 == arguments.length) {\n\t\tdelete this._callbacks['$' + event];\n\t\treturn this;\n\t }\n\n\t // remove specific handler\n\t var cb;\n\t for (var i = 0; i < callbacks.length; i++) {\n\t\tcb = callbacks[i];\n\t\tif (cb === fn || cb.fn === fn) {\n\t\t callbacks.splice(i, 1);\n\t\t break;\n\t\t}\n\t }\n\t return this;\n\t};\n\n\t/**\n\t * Emit `event` with the given args.\n\t *\n\t * @param {String} event\n\t * @param {Mixed} ...\n\t * @return {Emitter}\n\t */\n\n\tEmitter.prototype.emit = function(event){\n\t this._callbacks = this._callbacks || {};\n\t var args = [].slice.call(arguments, 1)\n\t\t, callbacks = this._callbacks['$' + event];\n\n\t if (callbacks) {\n\t\tcallbacks = callbacks.slice(0);\n\t\tfor (var i = 0, len = callbacks.length; i < len; ++i) {\n\t\t callbacks[i].apply(this, args);\n\t\t}\n\t }\n\n\t return this;\n\t};\n\n\t/**\n\t * Return array of callbacks for `event`.\n\t *\n\t * @param {String} event\n\t * @return {Array}\n\t * @api public\n\t */\n\n\tEmitter.prototype.listeners = function(event){\n\t this._callbacks = this._callbacks || {};\n\t return this._callbacks['$' + event] || [];\n\t};\n\n\t/**\n\t * Check if this emitter has `event` handlers.\n\t *\n\t * @param {String} event\n\t * @return {Boolean}\n\t * @api public\n\t */\n\n\tEmitter.prototype.hasListeners = function(event){\n\t return !! this.listeners(event).length;\n\t};\n\n\treturn Emitter;\n})());\n\n/**\n * Avast brcmpgid parameter\n * @version 1.0.0\n * @author Jaroslav Slaby \n * @module avast.web.brcmpgid\n * @requires avast.url.unserialize\n * @requires avast.web.linkDecorator\n * @copyright Avast Software s.r.o ©2021\n */\n\n (function() {\n\t'use strict';\n\t\n\t// check for brcmpgid parameter in url and if URLSearchParams method exists in browser\n\tif (/brcmpgid/.test(location.search) && 'URLSearchParams' in window) {\n\t\tvar unserialize = avm.require('avast.url.unserialize'),\n\t\t\tqs = unserialize(),\n\t\t\tproductId = 'SBR',\n\t\t\tvalueTest = /^[a-z0-9]+$/i,\n\t\t\tSBRLinks = document.querySelectorAll('[data-download-name*=\"' + productId + '\"]');\n\n\t\tSBRLinks.forEach(function(el) {\n\t\t\ttry {\n\t\t\t\tvar downloadURL,\n\t\t\t\t\tdownloadQueryString;\n\n\t\t\t\tif(!/ANDROID|IOS/.test(el.getAttribute('data-download-name')) && qs && qs.brcmpgid && valueTest.test(qs.brcmpgid)) {\n\t\t\t\t\tif (el.href) {\n\t\t\t\t\t\tdownloadURL = new URL(el.href);\n\t\t\t\t\t\tdownloadQueryString = new URLSearchParams(downloadURL.search);\n\n\t\t\t\t\t\tdownloadQueryString.set('product', (el.getAttribute('data-download-name') !== null ? el.getAttribute('data-download-name') : el.getAttribute('data-bi-download-name')) + '-CID');\n\n\t\t\t\t\t\tif (qs.brcmpgid !== undefined) {\n\t\t\t\t\t\t\tdownloadQueryString.set('tag', qs.brcmpgid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (qs.source_tag !== undefined) {\n\t\t\t\t\t\t\tdownloadQueryString.set('source_tag', qs.source_tag);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdownloadURL.search = downloadQueryString.toString();\n\t\t\t\t\t\tel.href = downloadURL.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} catch (error) {\n\t\t\t\t// singe data layer error tracking\n\t\t\t\tif (typeof sdl !== 'undefined') {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tsdl.push({\n\t\t\t\t\t\tsystem: {\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\ttype: error.name,\n\t\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tevent: 'system.error'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t})\t\n\t}\n\n\treturn;\n\n})();\n\n// unsupported chrome on older windows versions GLOWEB-7000\n\n(function() {\n 'use strict';\n\n try {\n var version = avastGlobals.detect.os.version;\n\n // check for windows version 7, 8, 8.1\n if(avastGlobals.detect.os.isWindows && (version === '7' || version === '8' || version === '8.1')) {\n\n // load tooltip script into page\n var script = document.createElement('script');\n script.src = document.querySelector('link[rel=\"stylesheet\"]').href.split('/c/')[0]+'/j/lib/tooltip.js';\n document.body.appendChild(script);\n\n setTimeout(function() {\n var buttons = document.querySelectorAll('[data-download-name*=\"SBR\"]'),\n stickyButton = document.querySelectorAll('.sticky-bar [data-download-name*=\"SBR\"]');\n\n stickyButton.forEach(function(button) {\n button.setAttribute('data-placement', 'bottom');\n });\n\n // set tooltip on all download links contains SBR download ID\n buttons.forEach(function(button) {\n setTooltipOnButton(button)\n });\n\n\n // event listener for change in actionbox and search if in updated content isn't link with SBR download ID\n window.addEventListener('actionbox-updated', function(e) {\n e.detail.element.querySelectorAll('[data-download-name*=\"SBR\"]:not([data-toggle])').forEach(function(button) {\n setTooltipOnButton(button)\n });\n });\n\n // event listener for opened modal and search if modal content contains not-updated link with SBR download ID\n window.addEventListener('modal-shown', function(e) {\n e.detail.element.querySelectorAll('[data-download-name*=\"SBR\"]:not([data-toggle])').forEach(function(button) {\n setTooltipOnButton(button)\n });\n });\n\n // set tooltip with information about unsupported system version on provided button\n function setTooltipOnButton(button) {\n button.setAttribute('data-toggle', 'tooltip');\n button.setAttribute('data-original-title', avastGlobals.texts.chromeUnsupportedOS);\n $(button).tooltip()\n }\n }, 1000);\n\n }\n\n } catch (error) {\n console.error(error);\n sdl.push({\n system: {\n error: {\n type: error.name,\n message: error.message,\n }\n },\n event: 'system.error'\n })\n }\n\n})();\n\n/**\n * Avast CampaignMarker set from Google Optimize WYSIWYG editor\n * @version 1.0.0\n * @author Jaroslav Slaby \n * @module avast.web.campaignMarkerChange\n * @copyright Avast Software s.r.o ©2020\n */\n\navm.define('avast.campaignMarkerChange', function() {\n\treturn {\n\t\tchangeCM: function(abTest, testVariant) {\n\t\t\tavastGlobals.web.abtest = {\n\t\t\t\t'ticketNumber': abTest,\n\t\t\t\t'testVariant': testVariant\n\t\t\t}\n\n\t\t\tdocument.querySelectorAll('[data-role=cart-link]').forEach(function(el) {\n\t\t\t\tvar dataCM = el.getAttribute('data-campaign-marker').split('~'),\n\t\t\t\t\threfCM = el.getAttribute('href').split('~');\n\n\t\t\t\tdataCM[3] = abTest;\n\t\t\t\tdataCM[4] = testVariant;\n\t\t\t\threfCM[3] = abTest;\n\t\t\t\threfCM[4] = testVariant;\n\t\t\t\tel.setAttribute('data-campaign-marker', dataCM.join('~'))\n\t\t\t\tel.setAttribute('href', hrefCM.join('~'))\n\t\t\t})\n\t\t}\n\t}\n});\n\n// GLOWEB-1762 AB test\n(function() {\n // get parameters from url\n var urlParams = location.search.toLowerCase();\n var params = new URLSearchParams(window.location.search);\n var sourceVariantParams = params.get('sourceVariant');\n\n if (/sourcevariant/.test(urlParams)) {\n var buyButtons = document.querySelectorAll('[data-role=\"cart-link\"]');\n\t\t\n\t\tsourceVariantParams = sourceVariantParams.replace(/[^\\w\\-]/g, ''); \n\n\t\tbuyButtons.forEach(function (button) {\n\t\t\tcmUpdate(button);\n\t\t})\n\n function cmUpdate(button) {\n var CMvalue = button.getAttribute('data-campaign-marker').split('~'),\n\t\t\t\tCMhref = button.getAttribute('href').split('~'),\n\t\t\t\tCMvariantParams = sourceVariantParams.split('-');\n\n\t\t\tCMvalue[3] = sourceVariantParams.substring(0, sourceVariantParams.lastIndexOf('-'));\n CMvalue[4] = CMvariantParams[CMvariantParams.length - 1].slice(-1);\n\n\t\t\tCMhref[3] = sourceVariantParams.substring(0, sourceVariantParams.lastIndexOf('-'));\n\t\t\tCMhref[4] = CMvariantParams[CMvariantParams.length - 1].slice(-1);\n\n button.setAttribute('data-campaign-marker', CMvalue.join('~'));\n button.setAttribute('href', CMhref.join('~'))\n\t\t}\n\n\t\twindow.addEventListener('actionbox-updated', function(event) {\n\t\t\tvar buttons = event.detail.element.querySelectorAll('[data-role=\"cart-link\"]');\n\n\t\t\tbuttons.forEach(function (button) {\n\t\t\t\tcmUpdate(button);\n\t\t\t});\n\t\t})\n }\n})();\n\n/**\n * Display Chrome Offer in non-chrome browsers\n * @version 1.2.0\n * @author Ales Gabriel \n * @module avast.web.chromeBanner\n * @requires jquery\n * @requires avast.url.unserialize\n * @requires avast.web.tracker\n */\navm.define('avast.web.chromeBanner', (function () {\n\t'use strict';\n\n\tvar $ = avm.require('jquery');\n\tvar detect = avastGlobals.detect;\n\tvar urlParams = avm.require('avast.url.unserialize')();\n\tvar tracker = avm.require('avast.web.tracker');\n\tvar showException = urlParams.qp_sid === 'SV_d5wxMSvcStdiUgC' ? true : false; // exception for SBR survey\n\n\t// Chrome banner\n\tvar chromeBanner = {\n\t\tinit: function(){\n\t\t\tvar hasBanner = $('#offer-chrome').length,\n\t\t\t\tisChrome = detect.browser.isChrome,\n\t\t\t\tisSbr = detect.browser.isAvast,\n\t\t\t\tproduct = (typeof urlParams.product === 'string') ? urlParams.product : '',\n\t\t\t\tisMsBuild = (product.indexOf('-ONLINE-MS') > -1) ? true : false;\n\n\t\t\tif(hasBanner){\n\t\t\t\tif(!isChrome && !isMsBuild && !isSbr){\n\t\t\t\t\tthis.show();\n\t\t\t\t\t$('#offer-chrome').on('click', '.button', this.trackClick);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tshow: function(e){\n\t\t\tvar url = document.location.href,\n\t\t\t\tpExt = url.match(/[?&]p_ext=([^&]*)/),\n\t\t\t\tpExtVal = pExt ? pExt[1].toLowerCase() : '';\n\n\t\t\tif (url.indexOf('?') > -1) {\n\t\t\t\turl = url.substr(0, url.indexOf(\"?\"));\n\t\t\t}\n\n\t\t\tif(pExtVal.indexOf('chrome') == -1 && !showException && !/secure-browser/.test(url)){\n\t\t\t\t$('#offer-chrome').show();\n\t\t\t\ttracker.track('chromeOffer.view', e);\n\t\t\t}\n\t\t},\n\t\ttrackClick: function(e){\n\t\t\ttracker.track('chromeOffer.click', e);\n\t\t}\n\t};\n\n\treturn chromeBanner;\n\n})());\n\n(function() {\n\t'use strict';\n\n\t//\n\t//\tFAQ accordion\n\t//\n\tvar $faqTitle = $('.js-info-box .accordion-title');\n\n\t$faqTitle.on('click', function() {\n\t\tvar $parent = $(this).parent(),\n\t\t\texpandClass = 'expand';\n\n\n\t\t// Close all other items\n\t\t$('.js-info-box').not($parent).removeClass(expandClass);\n\n\t\t// Toggle the 'expand' class on the clicked item's parent\n\t\t$parent.toggleClass(expandClass);\n\t});\n\n})();\n\n/**\n * Geoip detection for project Median\n */\n\n if (avastGlobals.web.locale === 'ms-my') {\n $.ajax({ url: 'geo-data'})\n .done(function(response) {\n var data = JSON.parse(response),\n comment = document.createComment(data.region);\n\n document.querySelector('body').prepend(comment);\n });\n}\n\n/**\n * Legal Modals\n * @version 1.0.0\n * @author Jaroslav Slaby \n * @requires jquery\n */\n\n(function(){\n 'use strict';\n var $ = avm.require('jquery'),\n buttons = $('.js-legal-modal-trigger[data-toggle=\"modal\"]');\n\n buttons.on('click', function(){\n if ($($(this).attr('data-target')).length === 0) {\n var contentHolder = document.querySelector('#body-inner'),\n xhr = new XMLHttpRequest(),\n self = this;\n\n xhr.onreadystatechange = function() {\n if (this.readyState == 4 && this.status == 200) {\n\n var container = document.createElement('div');\n\n container.innerHTML = this.responseText;\n contentHolder.append(container);\n $($(self).attr('data-target')).modal('show');\n }\n };\n xhr.open(\"GET\", 'https://' + avastGlobals.web.domain + '/' + avastGlobals.web.locale + '/' + $(this).attr('data-target').substring(1) + '?projectId[]=29965', true);\n xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');\n xhr.send(null);\n }\n })\n})();\n\n/**\n * Decorate link with params\n * @version 1.1.0\n * @author Ales Gabriel \n * @module avast.web.linkdecorator\n * @requires jquery\n * @requires avast.url.unserialize\n * @param {string} selector Css selector. Matched elements will be decorated\n * @param {(string|string[])} params Name or array of names\n * @param {string} [querystring] Optionally you can set querystring parameter manually. In this case querystring from URL will be ignored.\n * @param {string} [newValue] Optionally value can be set\n * @returns {object} jQuery object of selected elements\n */\n\navm.define('avast.web.linkDecorator', function(selector, params, querystring, newValue){\n\t'use strict';\n\n\tvar $ = avm.require('jquery'),\n\t\tquery = querystring ? querystring : undefined,\n\t\tunserialize = avm.require('avast.url.unserialize'),\n\t\turlParams = unserialize(query),\n\t\tparamArr = (Object.prototype.toString.call(params) === '[object Array]') ? params : [params],\n\t\tparam = null,\n\t\t$els = null,\n\t\tresult = [];\n\n\tfor (var i = 0; i < paramArr.length; i++ ) {\n\t\tparam = paramArr[i];\n\n\t\tif(urlParams[param]){\n\t\t\t$els = $(selector).each(function () {\n\t\t\t\tvar $el = $(this),\n\t\t\t\t\tprepend = this.search && this.search.length > 0 ? '&' : '?',\n\t\t\t\t\threfParams = unserialize($el.attr('href')),\n\t\t\t\t\tvalue = newValue || urlParams[param];\n\n\t\t\t\tif(!hrefParams[urlParams[param]]){\n\t\t\t\t\t$el.attr('href', $el.attr('href') + prepend + param + '=' + value );\n\t\t\t\t}\n\t\t\t});\n\t\t\tresult.push($els)\n\t\t}\n\t}\n\n\treturn result;\n});\n/**\n * Tracking for Mobile Campaigns\n * @version 1.0.0\n * @author Fedor Kušš \n * @module avg.web.mobileTracking\n * @requires jquery\n * @requires avg.url.unserialize\n */\n\n(function() {\n\t'use strict';\n\t$(document).ready(function() {\n\t\tvar urls = ['homepage', 'antivirus-for-android'],\n\t\t\tpathName = window.avastGlobals.web.fileName;\n\n\t\tif (urls.indexOf(pathName) > -1) {\n\n\t\t\tvar unserializedUrl = avm.require('avast.url.unserialize')(),\n\t\t\t\tcmpgContent = unserializedUrl.cmpg_for_af;\n\n\t\t\tif (typeof cmpgContent !== 'undefined' && cmpgContent.length > 0) {\n\n\t\t\t\tvar detected = avastGlobals.detect;\n\n\t\t\t\tif (detected.os.isAndroid) {\n\t\t\t\t\t$('body').addClass('mobile-tracking');\n\t\t\t\t\tvar mobileTracking = $('.mobile-tracking .button.button-green');\n\t\t\t\t\tmobileTracking.attr('href', 'https://go.onelink.me/y9mF?pid=AdWords-Web&c=' + cmpgContent + '&af_web_dp=https%3A%2F%2Fwww.avg.com%2Fantivirus-for-android');\n\t\t\t\t}\n\n\t\t\t\tif (detected.os.isAndroid || detected.os.isIOS) {\n\t\t\t\t\tif (pathName === 'lp-safe-emailing') {\n\t\t\t\t\t\t$('body').addClass('mobile-tracking');\n\t\t\t\t\t\tvar mobileTracking = $('.mobile-tracking .button.button-green');\n mobileTracking.attr('href', 'https://avg.sng.link/Djkjd/h6qa/giqs');\n }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})();\n\n// Notification overlay for wrong download\n(function () {\n\t'use strict';\n\n\tvar $ = avm.require('jquery'),\n\t\tdetect = avastGlobals.detect,\n\t\tdetectedPlatform = detect.os.name.toLowerCase(),\n\t\t$document = $(document),\n\t\tcurrentPageName = getCurrentPageName(),\n\t\tsupportedPlatforms = ['windows', 'mac', 'android', 'ios'],\n\t\tconfig = window.avastGlobals && typeof window.avastGlobals.web !== 'undefined' && typeof window.avastGlobals.web['notification-overlay-for-wrong-download'] !== 'undefined' ? window.avastGlobals.web['notification-overlay-for-wrong-download'] : false,\n\t\tconfigCurrentPage = config[currentPageName];\n\n\t$document.ready(function () {\n\t\tif (checkIfApplyPopupLogicForCurrentPage()) {\n\t\t\tvar $body = $('body'),\n\t\t\t\t$popup = $('.js-notification-overlay-for-wrong-download'),\n\t\t\t\t$popupButton = $popup.find('.js-popup-button'),\n\t\t\t\t$downloadButton = $(configCurrentPage['button-selector']),\n\t\t\t\tdownloadButtonData = {\n\t\t\t\t\t'data-os': $downloadButton.attr('data-os') || configCurrentPage['supported-platform'],\n\t\t\t\t\t'data-download-name': $downloadButton.attr('data-download-name') || configCurrentPage['product-id'],\n\t\t\t\t\t'href': $downloadButton.attr('href') || null\n\t\t\t\t},\n\t\t\t\t$close = $popup.find('.js-close'),\n\t\t\t\tbodyOverflow = $body.css('overflow');\n\n\t\t\t// Dynamicly update button for particular page\n\t\t\t$popupButton.attr('data-os', downloadButtonData['data-os']);\n\t\t\t$popupButton.attr('data-download-name', downloadButtonData['data-download-name']);\n\t\t\t$popupButton.attr('href', downloadButtonData.href);\n\n\t\t\t$close.on('click', function () {\n\t\t\t\t$popup.removeClass('show-popup');\n\t\t\t\twindow.location.hash = '!';\n\t\t\t\t$body.css('overflow', bodyOverflow);\n\t\t\t\t$body.removeAttr('data-oops-open');\n\t\t\t});\n\n\t\t\t$popup.on('click', function (event) {\n\t\t\t\tif ($(event.target).is($popup)) {\n\t\t\t\t\t$close.trigger('click');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$downloadButton.on('click', function (event) {\n\t\t\t\tif (detectedPlatform !== configCurrentPage['supported-platform']) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t$popup.addClass('show-popup');\n\t\t\t\t\t$popup.addClass('detected-' + (supportedPlatforms.indexOf(detectedPlatform) === -1 ? 'unknown' : detectedPlatform));\n\t\t\t\t\t$popup.addClass('install-' + configCurrentPage['supported-platform']);\n\t\t\t\t\twindow.location.hash = 'oops';\n\t\t\t\t\t$body.css('overflow', 'hidden');\n\t\t\t\t\t$body.attr('data-oops-open', 'true');\n\n\t\t\t\t\tif (typeof configCurrentPage['alternative-text'] !== 'undefined') {\n\t\t\t\t\t\t$popup.removeClass('no-alternative-text');\n\t\t\t\t\t\t$popup.addClass('alternative-text');\n\t\t\t\t\t\t$popup.addClass('alternative-text-' + configCurrentPage['alternative-text']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tupdateInsteadLinks($popup);\n\n\t\t\t// If platform is known but alternative download is missing\n\t\t\tif (detectOthers($popup)) {\n\t\t\t\t$popup.addClass('detected-others');\n\t\t\t}\n\t\t}\n\t});\n\n\t// Checks whether current page name is listed in avastGlobals config. If not, skip popup logic\n\tfunction checkIfApplyPopupLogicForCurrentPage() {\n\t\tif (config) {\n\t\t\t// Check config if page is there\n\t\t\tfor (var page in config) {\n\t\t\t\tif (page === currentPageName) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction getCurrentPageName() {\n\t\tvar pathnameSplitted = window.location.pathname.split('/');\n\t\treturn pathnameSplitted[pathnameSplitted.length - 1];\n\t}\n\n\tfunction updateInsteadLinks($popup) {\n\t\tvar alternativeLinks = configCurrentPage['alternative-links'],\n\t\t\talternativeTracking = configCurrentPage['alternative-tracking'],\n\t\t\t$targetLinks = $popup.find('.js-detected-' + detectedPlatform + '.js-install-' + configCurrentPage['supported-platform']).find('.js-instead-link'),\n\t\t\tcustomLabels = typeof customButtonLabels !== 'undefined' ? customButtonLabels : null,\n\t\t\tbuttonBadges = typeof buttonBadgesLinks !== 'undefined' ? buttonBadgesLinks : null;\n\n\t\tif (typeof alternativeLinks !== 'undefined') {\n\t\t\t$targetLinks.attr('href', alternativeLinks[detectedPlatform]);\n\t\t}\n\n\t\tif (typeof alternativeTracking !== 'undefined') {\n\t\t\t$targetLinks.attr('data-download-name', alternativeTracking[detectedPlatform]);\n\t\t}\n\n\t\t$targetLinks.attr('data-os', detectedPlatform);\n\n\t\tif (buttonBadges && buttonBadges[detectedPlatform]) {\n\t\t\t$targetLinks.html('\"\"');\n\t\t} else if (customLabels && customLabels[detectedPlatform]) {\n\t\t\t$targetLinks.text(customLabels[detectedPlatform]);\n\t\t}\n\n\t\t/*\n\t\t\tjs-detected-windows\n\t\t\t\tjs-install-mac\n\t\t\t\tjs-install-android\n\t\t\t\tjs-install-ios\n\t\t\tjs-detected-mac\n\t\t\t\tjs-install-windows\n\t\t\t\tjs-install-android\n\t\t\t\tjs-install-ios\n\t\t\tjs-detected-android\n\t\t\t\tjs-install-windows\n\t\t\t\tjs-install-mac\n\t\t\t\tjs-install-ios\n\t\t*/\n\t}\n\n\t// This function returns true if platform is known (Windows, Mac etc.), but there is no altertnative download\n\tfunction detectOthers($popup) {\n\t\tvar _alternativeLinks = typeof configCurrentPage['alternative-links'] !== 'undefined' ? configCurrentPage['alternative-links'] : null;\n\n\t\tif (!$popup.hasClass('detected-unknown') && (_alternativeLinks === null || typeof _alternativeLinks[detectedPlatform] === 'undefined')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n})();\n// /Notification overlay for wrong download\n\n/**\n * Avast Overlay Popup\n * @version 1.0.0\n * @author Michal Langhoffer \n * @module avast.web.overlayPopup\n * @requires jquery\n */\navm.define('avast.web.overlayPopup', function () {\n 'use strict';\n var $ = avm.require('jquery'),\n $body = $('body'),\n $overlayBox = $('.overlay-box'),\n $overlayBoxTrigger = $('.overlay-box-trigger'),\n $overlayBoxContainerClose = $('.overlay-box-container .close');\n // Disabling scroll event when overlay active\n function overlayScrollDisable() {\n $body.on({\n 'mousewheel': function (event) {\n if (event.target.id === 'el') {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n });\n if (document.all && document.querySelector && !document.addEventListener) {\n $body.css('overflow', 'auto');\n } else {\n $body.css('overflow', 'hidden');\n }\n }\n // Window resize functions\n $(window).on('resize', function () {\n if ($('[class*=\"overlay-box\"]').hasClass('is-visible')) {\n overlayScrollDisable();\n }\n });\n // scroll event disable when popup active\n $('[class*=\"overlay-box-trigger\"]').on('click', function () {\n overlayScrollDisable();\n });\n $overlayBoxContainerClose.on('click', function () {\n $body.off('mousewheel');\n $body.css('overflow', 'auto');\n });\n\n //open popup\n $overlayBoxTrigger.on('click', function (event) {\n event.preventDefault();\n var _data = ($(this).attr('data-box'));\n $('.overlay-box[data-box*=\"' + _data + '\"]').addClass('is-visible');\n });\n\n //close popup\n $overlayBox.on('click', function (event) {\n if ($(event.target).is('.close') || $(event.target).is('.overlay-box')) {\n event.preventDefault();\n $(this).removeClass('is-visible');\n }\n });\n //close popup when clicking the esc keyboard button\n $(document).on('keyup', function (event) {\n if (event.which === 27) {\n $overlayBox.removeClass('is-visible');\n $body.off('mousewheel');\n $body.css('overflow', 'auto');\n }\n });\n});\n/**\n * Avast Router\n * @version 1.0.1\n * @author Michal Langhoffer \n * @module avast.web.router\n * @requires jquery\n */\navm.define('avast.web.router', (function () {\n\t'use strict';\n\tvar $ = avm.require('jquery'),\n\t\troutes,\n\t\tself,\n\t\tw = window,\n\t\t$window = $(window);\n\n\treturn {\n\t\t/*\n\t\t * add window hashchange listener\n\t\t * look for key in routes object and execute its function\n\t\t */\n\t\thashChangeListener: function () {\n\t\t\tself = this;\n\t\t\t$window.on('hashchange', function () {\n\t\t\t\tself.exec(w.location.hash.substring(1));\n\t\t\t});\n\t\t},\n\t\t/*\n\t\t * @param {string} [path]\n\t\t * change hash in URL if it is not the same as current one, otherwise execute function from routes object\n\t\t */\n\t\tnavigate: function (path) {\n\t\t\tif (w.location.hash.substring(1) !== path) {\n\t\t\t\tw.location.hash = path;\n\t\t\t} else {\n\t\t\t\tthis.exec(path);\n\t\t\t}\n\t\t},\n\t\t/* \n\t\t * @param {string} [path]\n\t\t * execute function from routes object\n\t\t */\n\t\texec: function (path) {\n\t\t\tif (routes[path]) {\n\t\t\t\troutes[path]();\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * @param {object} [path]\n\t\t * set the routes object\n\t\t * add hashchange listener\n\t\t * after page load check hash and execute function from routes object\n\t\t * return routes object if path is object, otherwise throw error\n\t\t */\n\t\tset: function (path) {\n\t\t\troutes = path;\n\t\t\tself = this;\n\t\t\tself.hashChangeListener();\n\t\t\tself.navigate(w.location.hash.substring(1));\n\t\t\tif (typeof path === 'object') {\n\t\t\t\treturn routes;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Object has to be passed to router.set()');\n\t\t\t}\n\t\t}\n\t};\n})());\n// change link to RUBY LP for stand alone buy buttons\n(function () {\n if (avastGlobals.web.locale === 'ru-ru') {\n var buyButtons = document.querySelectorAll('[data-role=\"cart-link\"]');\n\n buyButtons.forEach(function(button) {\n updateButtonHref(button);\n });\n\n window.addEventListener('pricebox-updated', function() {\n document.querySelectorAll('[data-role=\"cart-link\"]').forEach(function(button) {\n updateButtonHref(button);\n });\n });\n\n function updateButtonHref(button) {\n button.href = 'https://' + avastGlobals.web.domain + '/ru-ru/information-customers-russia-belarus';\n }\n } \n \n})()\n\n/**\n * Factory for storage object\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.storageFactory\n * @returns {Object}\n */\navm.define('avast.storage.storageFactory', function() {\n\t'use strict';\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty,\n\t\tdata = {};\n\treturn {\n\t\tlength: 0,\n\n\t\t/**\n\t\t * Add key/value pair\n\t\t * @param {*} key\n\t\t * @param {*} value\n\t\t */\n\t\tsetItem: function(key, value) {\n\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\tvalue = encodeURIComponent(value);\n\t\t\t\tif (!hasOwnProperty.call(data, key)) {\n\t\t\t\t\tthis.length++;\n\t\t\t\t}\n\t\t\t\tdata[key] = value;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.setItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get value associated with key\n\t\t * @param {*} key\n\t\t * @returns {string}\n\t\t */\n\t\tgetItem: function(key) {\n\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\treturn typeof data[key] !== 'undefined' ? decodeURIComponent(data[key]) : null;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.getItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove key/value pair\n\t\t * @param {*} key\n\t\t */\n\t\tremoveItem: function(key) {\n\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\tif (hasOwnProperty.call(data, key)) {\n\t\t\t\t\tdelete data[key];\n\t\t\t\t\tthis.length--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.removeItem');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get name of nth key\n\t\t * @param {number} n\n\t\t * @returns {string}\n\t\t */\n\t\tkey: function(n) {\n\t\t\tif (typeof n === 'number') {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (var key in data) {\n\t\t\t\t\tif (hasOwnProperty.call(data, key)) {\n\t\t\t\t\t\tif (i === n) {\n\t\t\t\t\t\t\treturn decodeURIComponent(key);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.key');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Clear all items\n\t\t */\n\t\tclear: function() {\n\t\t\tdata = {};\n\t\t\tthis.length = 0;\n\t\t}\n\n\t};\n});\n\n/**\n * Script for adding Structured data to document head tag\n * @version 1.0.0\n * @author Cenek Hybler \n * @requires jquery\n */\n\n(function() {\n\t'use strict';\n\tvar $ = avm.require('jquery'),\n\t\t$faq_holder = $('[data-structured-type=\"faq\"]'),\n\t\t/* Function for JSON stringify and Script injection */\n\t\tjsonInjection = function(contextType, content){\n\t\t\tvar el = document.createElement('script');\n\t\t\tvar jsonIntro = {\n\t\t\t\t\t\"@context\": \"http://schema.org\",\n\t\t\t\t\t\"@type\": contextType\n\t\t\t\t},\n\t\t\t\tjson = Object.assign(jsonIntro, content);\n\n\t\t\tel.type = 'application/ld+json';\n\t\t\tel.text = JSON.stringify(json);\n\t\t\tdocument.querySelector('head').appendChild(el);\n\t\t};\n\n\t$(document).ready(function(){\n\t\t//FAQ\n\t\tif ($faq_holder) {\n\t\t\t$faq_holder.each(function(){\n\t\t\t\tvar contextType = 'FAQPage',\n\t\t\t\t\t$items = $(this).find('.accordion-item'),\n\t\t\t\t\tcontent = {},\n\t\t\t\t\tcontentJson = [];\n\n\t\t\t\t$items.each(function() {\n\t\t\t\t\tcontentJson.push({\n\t\t\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\t\t\"name\": this.querySelector('.accordion-title h4').innerText.replace(/\\n/g,'').replace(/\\t/g,''),\n\t\t\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\t\t\"text\": this.querySelector('.accordion-content').innerHTML.replace(/\\n/g,'').replace(/\\t/g,'')\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t\tcontent['mainEntity'] = contentJson;\n\n\t\t\t\tjsonInjection(contextType, content);\n\t\t\t});\n\t\t}\n\t});\n})();\n\n/**\n * Waypoints\n * @version 1.1.0\n * @author Michal Langhoffer \n * @module avast.web.waypoints\n * @requires jquery\n * @param {DOM element} $element\n * @param {Number} offsetTop\n * @param {Number} offsetBottom\n * @param {Boolean} waypoint\n * @returns {boolean}\n */\navm.define('avast.web.waypoints', function($element, offsetTop, offsetBottom, waypoint) {\n\t'use strict';\n\tvar $ = avm.require('jquery'),\n\t\telementTop = $element.offset().top,\n\t\telementBottom = elementTop + $element.outerHeight(),\n\t\tviewportTop = $(window).scrollTop(),\n\t\tviewportBottom = viewportTop + $(window).height(),\n\t\toffsetTop = offsetTop ? offsetTop : 0,\n\t\toffsetBottom = offsetBottom ? offsetBottom : 0;\n\n\tif (waypoint) {\n\t\tif (viewportTop >= elementTop) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tif (offsetTop < 1 && offsetTop !== 0) {\n\t\t\toffsetTop = $element.outerHeight() * offsetTop;\n\t\t}\n\n\t\tif (offsetBottom < 1 && offsetBottom !== 0) {\n\t\t\toffsetBottom = $element.outerHeight() * offsetBottom;\n\t\t}\n\n\t\treturn elementBottom - offsetBottom > viewportTop && elementTop + offsetTop < viewportBottom;\n\t}\n});\n\n(function () {\n\t'use strict';\n\n\t// Chrome banner\n\tvar chromeBanner = avm.require('avast.web.chromeBanner');\n\tchromeBanner.init();\n\treturn chromeBanner;\n\n})();\n\n(function() {\n\t'use strict';\n\tvar unserializeUrl = avm.require('avast.url.unserialize'),\n\t\tdecorate = avm.require('avast.web.linkDecorator'),\n\t\tpath = window.location.href,\n\t\tURLparams = unserializeUrl(path),\n\t\t$document = $(document),\n\t\t$targetLinks = $('a[href*=\"download-thank-you.php\"]');\n\n\tif (typeof URLparams.ppc !== 'undefined' && URLparams.ppc.length > 0) {\n\t\tif (path.indexOf('/ppc/performance') > -1 || path.indexOf('/ppc/tune') > -1 || path.indexOf('/avg-pctuneup') > -1) {\n\t\t\t$document.ready(function() {\n\t\t\t\tdecorate($targetLinks, 'ppc');\n\t\t\t});\n\t\t}\n\t}\n})();\n\n/**\n * Wrapper for cookieStorage object\n * @version 1.1.0\n * @author Jiri Duchon \n * @module avast.storage.cookieStorage\n * @requires avast.storage.isCookieEnabled\n * @requires avast.storage.storageFactory\n */\navm.define('avast.storage.cookieStorage', (function() {\n\t'use strict';\n\tvar isCookieEnabled = avm.require('avast.storage.isCookieEnabled'),\n\t\tstorageFactory = avm.require('avast.storage.storageFactory'),\n\t\ttoString = Object.prototype.toString,\n\t\tkeys = function() {\n\t\t\treturn document.cookie.replace(/((?:^|\\s*;)[^=]+)(?=;|$)|^\\s*|\\s*(?:=[^;]*)?(?:\\1|$)/g, '').split(/\\s*(?:=[^;]*)?;\\s*/);\n\t\t},\n\t\tcookieStorage = {\n\t\t\tlength: document.cookie !== '' ? keys().length : 0,\n\n\t\t\t/**\n\t\t\t * Add key/value pair\n\t\t\t * @param {*} key\n\t\t\t * @param {*} value\n\t\t\t * @param {string|date} [expires]\n\t\t\t * @param {string} [path]\n\t\t\t * @param {string} [domain]\n\t\t\t * @param {boolean} [secure]\n\t\t\t */\n\t\t\tsetItem: function(key, value, expires, path, domain, secure) {\n\t\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\n\t\t\t\t\tvar regExp = /^(?:expires|max\\-age|path|domain|secure)$/i;\n\t\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\t\tvalue = encodeURIComponent(value);\n\t\t\t\t\tif (key && !regExp.test(key)) {\n\t\t\t\t\t\tif (document.cookie.indexOf(key) === -1) {\n\t\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof expires === 'string') {\n\t\t\t\t\t\t\texpires = '; expires=' + expires;\n\t\t\t\t\t\t} else if (toString.call(expires) === '[object Date]') {\n\t\t\t\t\t\t\texpires = '; expires=' + expires.toUTCString();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdocument.cookie = key + '=' + value + (typeof expires === 'string' ? expires : '') + (typeof domain === 'string' ? '; domain=' + domain : '') + (typeof path === 'string' ? '; path=' + path : '') + (secure ? '; secure' : '');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.setItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get value associated with key\n\t\t\t * @param {*} key\n\t\t\t * @returns {string|null}\n\t\t\t */\n\t\t\tgetItem: function(key) {\n\t\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\t\tvar regExp = new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$');\n\t\t\t\t\treturn decodeURIComponent(document.cookie.replace(regExp, '$1')) || null;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.getItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Remove key/value pair\n\t\t\t * @param {*} key\n\t\t\t * @param {string} [path]\n\t\t\t * @param {string} [domain]\n\t\t\t */\n\t\t\tremoveItem: function(key, path, domain) {\n\t\t\t\tif (typeof key !== 'undefined') {\n\t\t\t\t\tkey = encodeURIComponent(key);\n\t\t\t\t\tif (document.cookie.indexOf(key) !== -1) {\n\t\t\t\t\t\tthis.length--;\n\t\t\t\t\t}\n\t\t\t\t\tdocument.cookie = key + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + (typeof domain === 'string' ? '; domain=' + domain : '') + (typeof path === 'string' ? '; path=' + path : '');\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.removeItem');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get name of nth key\n\t\t\t * @param {number} n\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tkey: function(n) {\n\t\t\t\tif (typeof n === 'number') {\n\t\t\t\t\tvar keysArray = keys(),\n\t\t\t\t\t\tkeysArrayLength = keysArray.length;\n\t\t\t\t\tif (n < keysArrayLength) {\n\t\t\t\t\t\treturn decodeURIComponent(keysArray[n]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.key');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Clear all items\n\t\t\t */\n\t\t\tclear: function() {\n\t\t\t\tvar keysArray = keys(),\n\t\t\t\t\tkeysArrayLength = keysArray.length;\n\t\t\t\tfor (var i = 0; i < keysArrayLength; i++) {\n\t\t\t\t\tthis.removeItem(keysArray[i]);\n\t\t\t\t}\n\t\t\t\tthis.length = document.cookie !== '' ? keys().length : 0;\n\t\t\t}\n\n\t\t};\n\treturn isCookieEnabled ? cookieStorage : storageFactory();\n})());\n\n/** copy from AVAST\n * Sticky nav for tabs. Sticky slide in to viewport when scrolled.\n * @version 0.7.0\n * @author Ales Gabriel , Michal Langhoffer \n * @module avast.web.tabsAnchor\n * @requires module:jquery\n * @copyright Avast Software s.r.o ©2014-2015\n */\n\navm.define('avast.web.tabsAnchor', (function() {\n\n\tvar $ = avm.require('jquery'),\n\t\t$window = $(window),\n\t\twaypoints = avm.require('avast.web.waypoints'),\n\t\tlastScrollTop = 0,\n\t\tdirection;\n\n\tvar tabsAnchor = {\n\t\tdefaults: {\n\t\t\tbehavior: 'slideIn'\n\t\t},\n\t\tinit: function(nId, options){\n\t\t\tvar opts = this.options = $.extend(true, this.defaults, options);\n\n\t\t\tif(nId && $(nId).length > 0) {\n\t\t\t\tthis.stick(nId);\n\t\t\t\tthis.highlight(nId);\n\t\t\t\tthis.handleClick(nId);\n\t\t\t\tthis.visible(nId);\n\t\t\t}\n\t\t},\n\t\tvisible: function(nId) {\n\t\t\tvar $bar = $(nId),\n\t\t\t\twindowScrollTop = $window.scrollTop(),\n\t\t\t\t$wrapper = $(nId).parent(),\n\t\t\t\twrapperOffsetTop = $wrapper.offset().top;\n\n\t\t\tif (windowScrollTop > wrapperOffsetTop) {\n\t\t\t\t$bar.addClass('sticky');\n\t\t\t} else {\n\t\t\t\t$bar.removeClass('sticky');\n\t\t\t}\n\t\t},\n\t\tstick: function(nId){\n\t\t\tif(typeof waypoints === 'function'){\n\n\t\t\t\tvar clone = $('
'),\n\t\t\t\t\t$this = $(nId),\n\t\t\t\t\tfirstItemId = $(nId + ' ul:first li:first-child').find('a').attr('href'),\n\t\t\t\t\tlastItemId = $(nId + ' ul:first li:last-child').find('a').attr('href'),\n\t\t\t\t\th = this.options.height ? this.options.height : $this.outerHeight(),\n\t\t\t\t\tp = $this.css('marginTop'),\n\t\t\t\t\tsTop = $window.scrollTop(),\n\t\t\t\t\troot = this;\n\n\t\t\t\tif(firstItemId && firstItemId.indexOf('#') !== 0){\n\t\t\t\t\tfirstItemId = '-';\n\t\t\t\t}\n\n\t\t\t\tif(lastItemId && lastItemId.indexOf('#') !== 0){\n\t\t\t\t\tlastItemId = '-';\n\t\t\t\t}\n\n\t\t\t\t// Find correct anchored element\n\t\t\t\tif($(firstItemId).length === 0){\n\t\t\t\t\t$(nId + ' ul:first li').each(function(){\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tvar anchorId = $this.find('a').attr('href');\n\t\t\t\t\t\tif(anchorId){\n\t\t\t\t\t\t\tif(anchorId.indexOf('#') !== 0){\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif($(anchorId).length > 0){\n\t\t\t\t\t\t\tfirstItemId = anchorId;\n\t\t\t\t\t\t\treturn false; // stop loop with first success\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// TODO: Cure situation when item is in nav without approp section on page. Sticky bar is not hide when moved to top.\n\t\t\t\t// first tab reached\n $window.on('resize scroll', function() {\n var st = $(this).scrollTop();\n if (st > lastScrollTop){\n direction = 'down';\n } else {\n direction = 'up';\n }\n\t\t\t\t\tlastScrollTop = st;\n\t\t\t\t\t\n\t\t\t\t\tif ($this.parent().hasClass('partscreen')) {\n\t\t\t\t\t\troot.visible(nId);\n\t\t\t\t\t} else if ($(firstItemId).length > 0 && waypoints($(firstItemId), null, null, true)) {\n $this.addClass('sticky');\n if(root.options.behavior === 'static' && $('#tabs-anchor-clone').length < 1) {\n clone.height(h);\n $this.before(clone);\n }\n } else {\n $this.removeClass('sticky');\n if(root.options.behavior === 'static') {\n clone.remove();\n }\n }\n\n // last tab reached\n if ($(lastItemId).length > 0 && waypoints($(lastItemId), null, null, true)) {\n\t\t\t\t\t\t$this.addClass('sticky');\n\t\t\t\t\t\tif(root.options.behavior === 'static' && $('#tabs-anchor-clone').length < 1) {\n\t\t\t\t\t\t\tclone.height(h);\n\t\t\t\t\t\t\t$this.before(clone);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ($(lastItemId).length > 0 && $(lastItemId).offset().top + $(lastItemId).outerHeight() - $(nId).outerHeight() < $window.scrollTop()) {\n\t\t\t\t\t\t$this.removeClass('sticky');\n\t\t\t\t\t\tif(root.options.behavior === 'static') {\n\t\t\t\t\t\t\tclone.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n });\n\t\t\t}\n\t\t},\n\t\thighlight: function(nId) {\n\t\t\tvar lastSection;\n\n\t\t\t$(nId + ' ul:first').find('a').each(function(){\n\t\t\t\tvar href = $(this).attr('href');\n\t\t\t\tvar id = href.replace(/#/,'');\n\n\t\t\t\t$('#content-holder').children().each(function(index){\n\t\t\t\t\tif(id == $(this).attr('id')){\n\t\t\t\t\t\t$(this).addClass('tabs-anchor-section');\n\t\t\t\t\t\t// last child\n\t\t\t\t\t\tlastSection = $(this);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif(lastSection){\n\t\t\t\tlastSection.addClass('last-anchor-section');\n\t\t\t}\n\n\t\t\t$('.tabs-anchor-section').each(function() {\n\t\t\t\tvar $self = $(this);\n\t\t\t\tif ($self.length > 0) {\n\t\t\t\t\t$window.on('resize scroll', function() {\n\t\t\t\t\t\tif (waypoints($self, null, null, true)) {\n\t\t\t\t\t\t\tvar id;\n\t\n\t\t\t\t\t\t\t$(nId + ' ul:first').find('a').removeClass('active');\n\t\t\t\t\t\t\t\tid = $self.attr('id');\n\t\t\t\t\t\t\t\t$('[href=\"#'+ id +'\"]').addClass('active');\n\t\n\t\n\t\t\t\t\t\t\tvar el = $self;\n\t\t\t\t\t\t\tvar timeout = setTimeout(function(){\n\t\t\t\t\t\t\t\t$(el).trigger({\n\t\t\t\t\t\t\t\t\ttype: 'passed.waypoint',\n\t\t\t\t\t\t\t\t\tdirection: direction,\n\t\t\t\t\t\t\t\t\toffset: 500\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n });\n\t\t},\n\t\thandleClick: function(nId) {\n\t\t\tvar $item = $(nId + ' ul li a');\n\n\t\t\t$item.on('click', function(event) {\n\t\t\t\tfunction updateActiveItem() {\n\t\t\t\t\t$item.removeClass('active');\n\t\t\t\t\t$(event.target).addClass('active');\n\t\t\t\t\tclearTimeout($.data(this, 'scrollTimer'));\n\n\t\t\t\t\t// Wait until page stops scrolling\n\t\t\t\t\t$.data(this, 'scrollTimer', setTimeout(function() {\n\t\t\t\t\t\t$(event.target).addClass('active');\n\t\t\t\t\t\t$window.off('scroll', updateActiveItem)\n\t\t\t\t\t}, 50));\n\t\t\t\t}\n\n\t\t\t\t$window.on('scroll', updateActiveItem);\n\t\t\t});\n\t\t}\n\t};\n\n\treturn tabsAnchor;\n\n})());\n\n// 30_optoutbar.js\n(function() {\n 'use strict';\n var $ = avm.require('jquery');\n\n $(document).ready(function() {\n var cookieStorage = avm.require('avast.storage.cookieStorage'),\n $cookieBar = $('.js-cookie-bar'),\n $cookieSubmitButton,\n cookieName,\n cookieDate,\n cookieNotFound;\n\n if ($cookieBar.length > 0) {\n $cookieSubmitButton = $cookieBar.find('.js-cookie-submit-button');\n cookieName = 'avgCookieConsentAccepted';\n cookieDate = new Date();\n cookieNotFound = cookieStorage.getItem(cookieName) === null;\n\n $cookieSubmitButton.on('click', function(event) {\n dataLayer.push({\n 'event': 'cookie-bar-consent-granted'\n });\n event.preventDefault();\n cookieDate.setFullYear(cookieDate.getFullYear() + 2); // set cookie date for 2 years from now\n $cookieBar.slideUp('fast');\n $(window).trigger('cookie-bar-closed'); // for navigation purposes\n cookieStorage.setItem(cookieName, true, cookieDate, '/', window.location.hostname, false);\n });\n\n if (cookieNotFound) {\n dataLayer.push({\n 'event': 'cookie-bar-displayed'\n });\n $cookieBar.removeClass('hidden');\n }\n }\n });\n})();\n// / 30_optoutbar.js\n/**\n * Decorate Buy Links with Campaign Marker if Present in URL\n * @version 1.0.0\n * @author Fedor Kušš \n * @module avast.web.mobileTracking\n * @requires jquery\n * @requires avast.storage.cookieStorage\n * @requires avast.url.unserialize\n */\n\navm.define('avast.web.campaignMarkerDecorator', $(document).ready(function() {\n\t'use strict';\n\tvar cookieStorage = avm.require('avast.storage.cookieStorage'),\n\t\t$cartLink = $('.bi-cart-link'),\n\t\tunserializedUrl = avm.require('avast.url.unserialize')(window.location.href),\n\t\tcmpgMarker = unserializedUrl.campaignMarker,\n\t\ttrSrc = cookieStorage.getItem('__trSrc'),\n\t\tCMPGNMARKER = 'campaignMarker',\n\n\t\tgetExpirationTime = function(minutes) {\n\t\t\tvar now = new Date();\n\t\t\tnow.setTime(now.getTime() + minutes * 60 * 1000);\n\t\t\treturn now.toUTCString();\n\t\t};\n\n\tif (cmpgMarker && cmpgMarker.length > 0) {\n\t\tcookieStorage.setItem('campaignMarker', cmpgMarker, getExpirationTime(30), '/', location.hostname, false);\n\t}\n\n\t$cartLink.on('click', function() {\n\t\t// add tracing cookie into link if it missing\n\t\ttrSrc !== null ? /~trSrcCookieValue/.test($(this).attr('href')) ? $(this).attr('href', $(this).attr('href').replace('~trSrcCookieValue', '~' + trSrc)) : '' : '';\n\n\t\tif (cookieStorage.getItem('campaignMarker') && cookieStorage.getItem('campaignMarker').length > 0)\t{\n\t\t\t\n\t\t\tvar link = $(this).attr('href'),\n\t\t\t\tisCampaignMarker = link.indexOf(CMPGNMARKER),\n\t\t\t\tupdatedLink = [],\n\t\t\t\tcampainMarker = cookieStorage.getItem(CMPGNMARKER);\n\n\t\t\t// if cartlink parameters in query param (avast)\n\t\t\t// else cartlink parameters in link (avast,avg)\n\t\t\tif (link.indexOf('?') >= 0) {\n\t\t\t\tvar linkVariables1 = link.split(';');\n\n\t\t\t\tlinkVariables1.forEach(function(item) {\n\t\t\t\t\tvar params = item.split('=');\n\t\t\t\t\tif (params[0] === 'CampaignMarker') {\n\t\t\t\t\t\tupdatedLink.push(params[0] + '=' + params[1].substring(0, params[1].length - 4) + '-' + campainMarker);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdatedLink.push(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t$(this).attr('href', updatedLink.join(';'));\n\t\t\t} else {\n\t\t\t\tvar linkVariables = link.split('/');\n\n\t\t\t\tlinkVariables.forEach(function(item) {\n\t\t\t\t\tvar params = item.split('.');\n\n\t\t\t\t\tif (params[0] === CMPGNMARKER) {\n\t\t\t\t\t\tupdatedLink.push(params[0] + '.' + params[1] + '-' + campainMarker);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdatedLink.push(item);\n\t\t\t\t\t}\n\t\t\t\t\tif (params[0] === 'Currency' && isCampaignMarker === -1) {\n\t\t\t\t\t\tupdatedLink.push(CMPGNMARKER + '.' + campainMarker);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(this).attr('href', updatedLink.join('/'));\n\t\t\t}\n\t\t}\n\t});\n}));\n\n/**\n * Avast CampaignMarker (decorate cart links and update data attributes)\n * @version 0.0.4\n * @author Ales Gabriel \n * @module avast.web.campaignMarkerCookie\n * @requires module:avast.storage.cookieStorage\n * @copyright Avast Software s.r.o ©2020\n */\n\navm.define('avast.web.campaignMarkerCookie', function() {\n\n\tvar cookieStorage = avm.require('avast.storage.cookieStorage');\n\n\tvar cm = {\n\t\tcookie: '__trSrc',\n\t\tSMBCookeValue: cookieStorage.getItem('__smbChannelSrc'),\n\t\tels: document.querySelectorAll('a[data-campaign-marker]'),\n\t\tgetCampaignMarkerCookie: function() {\n\t\t\tvar result;\n\n\t\t\ttry {\n\t\t\t\t// check if CM is set in avastGlobals\n\t\t\t\tif (avastGlobals.web.campaignMarker === undefined) {\n\t\t\t\t\tvar cookieValue = cookieStorage.getItem('__trSrc');\n\t\t\t\t\t// check for old trSrc cookie\n\t\t\t\t\tif (cookieValue && encodeURIComponent) {\n\t\t\t\t\t\tcookieValue = encodeURIComponent(cookieValue);\n\t\t\t\t\t\tresult = cookieValue;\n\t\t\t\t\t\tavastGlobals.web.campaignMarker = cookieValue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = avastGlobals.web.campaignMarker;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\tsdl.push({\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\ttype: error.name,\n\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tevent: 'system.error'\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\treplaceCookieString: function(str, cookie) {\n\t\t\tvar re = /~trSrcCookieValue/;\n\n\t\t\treturn str.replace(re, '~' + cookie);\n\t\t},\n\t\tdecorateCartLink: function(data) {\n\t\t\tvar href,\n\t\t\t\tel = data.currentTarget,\n\t\t\t\tcookieValue = cm.getCampaignMarkerCookie() || '';\n\n\t\t\tif (el) {\n\t\t\t\tel.href = cm.replaceCookieString(el.href, cookieValue);\n\t\t\t\thref = el.href;\n\t\t\t}\n\n\t\t\treturn href;\n\t\t},\n\t\tupdateDataAttr: function(data) {\n\t\t\tvar campaignMarker,\n\t\t\t\tel = data.currentTarget,\n\t\t\t\tcookieValue = cm.getCampaignMarkerCookie() || '';\n\n\t\t\tif (el.dataset && el.dataset.campaignMarker) {\n\t\t\t\tel.dataset.campaignMarker = cm.replaceCookieString(el.dataset.campaignMarker, cookieValue);\n\t\t\t\tcampaignMarker = el.dataset.campaignMarker;\n\t\t\t}\n\n\t\t\treturn campaignMarker;\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {HTMLElement|NodeList} els List of elements\n\t\t */\n\n\t\tsetCampaignMarkerCookie: function(els) {\n\n\t\t\tvar nodeList = els || cm.els,\n\t\t\t\tnodes = els instanceof HTMLElement ? [els] : Array.prototype.slice.call(nodeList),\n\t\t\t\tcookieValue = cm.getCampaignMarkerCookie(cm.cookie),\n\t\t\t\tSMBRegExp = /smbChannelSrcCookieValue-/,\n\t\t\t\tlinks = [];\n\n\t\t\tif (cookieValue) {\n\t\t\t\tnodes.forEach(function(el) {\n\t\t\t\t\tvar result = {\n\t\t\t\t\t\tel: el\n\t\t\t\t\t};\n\n\t\t\t\t\tresult.link = cm.decorateCartLink({\n\t\t\t\t\t\tcurrentTarget: el\n\t\t\t\t\t});\n\t\t\t\t\tresult.dataAttr = cm.updateDataAttr({\n\t\t\t\t\t\tcurrentTarget: el\n\t\t\t\t\t});\n\n\t\t\t\t\tlinks.push(result);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Register mousedown event.\n\t\t\t\t// FIXME: Move to scanner on DOM ready.\n\t\t\t\tnodes.forEach(function(el) {\n\t\t\t\t\tel.addEventListener('mousedown', cm.decorateCartLink);\n\t\t\t\t\tel.addEventListener('mousedown', cm.updateDataAttr);\n\t\t\t\t\tel.addEventListener('focus', cm.decorateCartLink);\n\t\t\t\t\tel.addEventListener('focus', cm.updateDataAttr);\n\n\t\t\t\t\tlinks.push({\n\t\t\t\t\t\tel: el,\n\t\t\t\t\t\tevt: 'mousedown',\n\t\t\t\t\t\tcallback: cm.decorateCartLink\n\t\t\t\t\t});\n\t\t\t\t\tlinks.push({\n\t\t\t\t\t\tel: el,\n\t\t\t\t\t\tevt: 'mousedown',\n\t\t\t\t\t\tcallback: cm.updateDataAttr\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tnodes.forEach(function(el) {\n\t\t\t\tif (el.href.match(SMBRegExp) || el.getAttribute('data-campaign-marker').match(SMBRegExp)) {\n\t\t\t\t\tif (cm.SMBCookeValue !== null) {\n\t\t\t\t\t\tvar cookieValue = cm.SMBCookeValue.slice(-1) === '-' ? cm.SMBCookeValue : cm.SMBCookeValue + '-';\n\t\t\t\t\t\tel.href = el.href.replace(SMBRegExp, cookieValue);\n\t\t\t\t\t\tel.dataset.campaignMarker = el.dataset.campaignMarker.replace(SMBRegExp, cookieValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.href = el.href.replace(SMBRegExp, '');\n\t\t\t\t\t\tel.dataset.campaignMarker = el.dataset.campaignMarker.replace(SMBRegExp, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn links;\n\t\t}\n\t};\n\n\treturn cm;\n\n});\n\n\n/**\n * Avast cartTrackingConsent (decorate cart links with query parram based on OptanonConsent cookie)\n * event delegation is used to capture all added buttons after the page load. In case of any performance issue it is possible to reconsider.\n * @version 1.0.0\n * @author Erik Ondrus \n * @module avast.web.cartTrackingConsent\n * @requires module:avast.storage.cookieStorage\n * @requires avast.web.linkDecorator\n * @copyright Avast Software s.r.o ©2021\n */\n\navm.define('avast.web.cartTrackingConsent', function() {\n\tvar cookieStorage = avm.require('avast.storage.cookieStorage'),\n\t\tlinkDecorator = avm.require('avast.web.linkDecorator');\n\n\tvar cts = {\n\t\tCOOKIE_NAME: 'OptanonConsent',\n\t\tCOOKIE_REGEX_MATCH_GROUP: /groups=(.*?)(?=&|$)/i,\n\t\tPARAM_NAME: 'trackingDisabled',\n\t\tTARGET_EL: '[data-role=\"cart-link\"]',\n\t\tTARGET_MATCH_ELS: '[data-role=\"cart-link\"], [data-role=\"cart-link\"] *',\n\t\tcontentEl: document.getElementById('body-inner'),\n\n\t\tgetCookieGroupValue: function() {\n\t\t\tvar cookieValue = cookieStorage.getItem(cts.COOKIE_NAME) || '';\n\t\t\tvar group = cookieValue.match(cts.COOKIE_REGEX_MATCH_GROUP) || '';\n\t\t\treturn group[1] || '';\n\t\t},\n\n\t\tdecorateCartLink: function(event) {\n\t\t\tvar el = event.target;\n\t\t\tif (el.matches(cts.TARGET_MATCH_ELS)) {\n\t\t\t\tvar cookieGroup = cts.getCookieGroupValue();\n\n\t\t\t\tif (!el.href) {\n\t\t\t\t\tel = el.closest(cts.TARGET_EL);\n\t\t\t\t}\n\n\t\t\t\tif (cookieGroup && el.href) {\n\t\t\t\t\tif ('URLSearchParams' in window) {\n\t\t\t\t\t\turl = new URL(el.href);\n\t\t\t\t\t\tqueryString = new URLSearchParams(url.search);\n\t\t\t\t\t\tqueryString.set(cts.PARAM_NAME, cookieGroup);\n\n\t\t\t\t\t\turl.search = queryString.toString();\n\t\t\t\t\t\tel.href = url.toString();\n\t\t\t\t\t}\n\t\t\t\t\t// IE fallback\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar regex = new RegExp('(&?)' + cts.PARAM_NAME + '=(.*?)(?=&|$)', 'gi');\n\t\t\t\t\t\tel.href = el.href.replace(regex, '');\n\t\t\t\t\t\tlinkDecorator(el, cts.PARAM_NAME, cts.PARAM_NAME + '=null', encodeURIComponent(cookieGroup));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetCartTrackingConsent: function() {\n\t\t\tif (cts.contentEl) {\n\t\t\t\tcts.contentEl.addEventListener('focusin', cts.decorateCartLink);\n\t\t\t\tcts.contentEl.addEventListener('mousedown', cts.decorateCartLink);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn cts;\n});\n\n(function() {\n\tvar cm = avm.require('avast.web.campaignMarkerCookie')();\n\tcm.setCampaignMarkerCookie();\n})();\n\n(function() {\n\tvar cts = avm.require('avast.web.cartTrackingConsent')();\n\tcts.setCartTrackingConsent();\n})();"]}