{"version":3,"sources":["dev/j/avast.js"],"names":["jQuery","avm","define","evt","pos","speed","offset","$","require","off","position","velocity","preventDefault","animate","scrollTop","currentTarget","attr","window","location","hash","once","init","appendPbld","this","re","regex","RegExp","results","exec","href","param","each","indexOf","input","find","cartLink","val","document","on","cj","getURLParameter","ref","toUpperCase","cjCookieName","age","domain","path","setCookie","name","decodeURI","search","value","exp","p","d","encodeURIComponent","Date","setTime","getTime","toUTCString","cookie","options","regexS","providers","urlQuery","params","undefined","couponParam","i","length","Emitter","obj","mixin","key","prototype","addEventListener","event","fn","_callbacks","push","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","call","len","listeners","hasListeners","decimal","translate","number","root","avastGlobals","isNaN","web","ds","numberDecimalSeparator","ts","numberThousandSeparator","number_format","numberOfDecimals","decimalSeparator","thousandSeparator","symbol","haddValue","haddRegex","dr-store.avast.com","idRegex","paramTmpl","dr-store.avast.co.jp","store.avast.com","store.avast.ru","store.avast.ua","$this","cartUrl","attrName","getHaddParam","delim","charAt","substr","attributes","specified","toLowerCase","url","regID","id","hadd","replace","getHadd","el","nodeType","navigator","cookieEnabled","sessionStorage","localStorage","setItem","removeItem","error","console","warn","animateScroll","$langSelector","$html","self","avast","locale","addClass","proxy","toggleHandler","keyPressHandler","clickHandler","stopPropagation","is","target","className","which","toggleClass","hasClass","removeClass","prop","parents","navigation","defaults","navCloseTreshold","timeout","leaveNavTimeout","navClass","levelClass","activeLevelClass","listClass","navSwitchClass","header","content","navSwitch","navBack","opts","body","extend","nav","toggleNav","toggleLevel","resetTimeout","closeNav","escapeNav","onscroll","checkNavCloseTreshold","levelUp","preRenderNav","html","documentElement","initHeight","Math","max","scrollHeight","offsetHeight","clientHeight","css","openNav","markActiveLevel","blur","setNavCloseTreshold","removeActive","subLevelReady","levelSelector","parent","targetId","idLevel","parentClass","match","currentLevelNum","parseInt","subLevelNum","currentLevel","subLevel","subNav","levelNum","clearTimeout","level","klass","activeLevel","getActiveLevel","classToRemove","leaveNav","t","setTimeout","topLevel","eq","closest","maxListHeight","height","filter","get","pageYOffset","clientTop","navClasses","activeClass","oldLevel","newLevel","overlayScrollDisable","$body","mousewheel","all","querySelector","$overlayBox","$overlayBoxTrigger","$overlayBoxContainerClose","_data","routes","w","$window","hashChangeListener","substring","navigate","set","Error","urlObject","hasOwnProperty","Object","urlString","lang","setDate","getDate","toGMTString","click","pathname","hostname","top","data","getItem","decodeURIComponent","n","clear","tabs","nId","eId","easytabs","select","sHref","tabsAnchor","behavior","stick","highlight","waypoint","clone","firstItemId","lastItemId","h","outerHeight","anchorId","direction","before","remove","trigger","lastSection","children","index","prev","type","dataLayer","trackEvents","chromeOffer","view","eventCategory","eventAction","eventLabel","passwordCheck","called","methods","track","evtName","evtObj","callback","space","handler","spaces","split","toString","urlParameters","urlParametersLength","urlParameter","urlBag","addValue","String","getData","getEncodedData","base64","base64encode","stringify","JSON","v","json","arr","constructor","Array","o1","o2","o3","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","charCodeAt","join","r","isCookieEnabled","storageFactory","keys","cookieStorage","expires","secure","regExp","test","keysArray","keysArrayLength","userAgent","userLanguage","patterns","isStorageEnabled","appCodeName","appVersion","language","browser","Avast","version","Opera","Edge","Chrome","Firefox","InternetExplorer","Safari","os","WindowsPhone","Windows","10","8.1","8","7","Vista","XP","2000","Android","IOS","Mac","Linux","Unix","testRegExp","subPatterns","subResults","subversion","isName","nameFound","subversionFound","subPattern","item","detect","pathRegex","pathName","config","$headerButton","$headerButtonSpan","buttonUpdater","inArray","smbPages1","links","downloadButtonLinks","shopButtonLink","text","buyNow","hide","isIOS","wifiFinder","iOS","isAndroid","android","productPages","$pageButton","platforms","noWinLogoPaths","replaceButton","dynamicHeaderButton","__hasClass","cls","classList","contains","__addClass","elements","_elements","querySelectorAll","tagName","add","__removeClass","node","TypeError","parentNode","getElementsByClassName","Element","HTMLDocument","WindowPrototype","DocumentPrototype","ElementPrototype","dispatchEvent","registry","listener","unshift","returnValue","cancelBubble","srcElement","attachEvent","register","detachEvent","eventObject","fireEvent","Window","ClassList","element","forEach","list","scope","toggle","oldName","newName","defineProperty","DOMTokenList","domLoad","setDefaultCategory","category","$navDesktopPlatforms","getAttribute","j","$navDesktopPlatformToggles","$navMobilePlatforms","$navMobilePlatformToggles","detectFlexboxSupport","style","offClickTracking","buttonAttributesToggler","$buttons","$desktopNavigation","$desktopMenus","navigationHistory","selectors","navigationToggleHistory","shift","has","navbarLinksUpdater","$shopLink","$accountLink","smbPages2","accountButtonLink","pageAttr","$header","$navigation","$navDesktopMenuToggles","$navDesktopMenus","_loop","$toggle","menu","_j2","_j3","_item","_j","_loop2","_j4","_i","$navMobileFadeScreen","$navMobileToggles","$navMobileSectionToggles","$navMobileLevel1","$navMobileLevel2","_loop3","_j5","_loop4","$target","_loop5","_j6","isMac","winLoad","$navDesktop","$subcategories","subcategoryHeight","$item","itemHeight","_i2","_$item","onload","router","ios","mac","pc","$jsPlatformSwitcher","$popupButtons","$overlayBoxClose","detectPlatform","switcher","closeOverlayBox","showButtons","addBodyClass","rootPlatform","platform","addRootClass","resetPlatformClass","selectPlatform","rum","perfUrl","logData","limit","trackType","load","ecommerce","custom","Function","bind","addEvent","onerror","message","line","errEvtObj","getDomain","getPageId","pop","getContentId","contentId","pageName","getLocale","getBrowser","detection","ver","getPerformance","wp","performance","webkitPerformance","msPerformance","mozPerformance","wpt","timing","wpTimes","unloadEventEnd","unloadEventStart","unloadTime","redirectTime","redirectEnd","redirectStart","domainLookupTime","domainLookupEnd","domainLookupStart","connectTime","connectEnd","connectStart","requestTime","responseStart","requestStart","responseTime","responseEnd","dom","interactiveTime","domInteractive","domLoading","loadEventStartTime","domContentLoadedEventStart","contentLoadedEventTime","domContentLoadedEventEnd","resourceLodedTime","domComplete","domTime","loadEventEnd","navigationStart","loadEventStart","loadEventTime","fullTime","getError","newError","URL","referrer","pageId","loc","typeMsg","getTrackType","requestLimit","count","sendRum","merge","trackError","e","sendBeacon","sendImg","createElement","b","getElementsByTagName","setAttribute","width","appendChild","pushData","tData","destroy","removeEvent","getUrlParameter","sParam","sParameterName","sPageURL","sURLVariables","getExpirationTime","hours","now","slider","pager","controls","auto","pause","prevDomEl","nextDomEl","subheaderDomEl","textPagerDomEl","useCSS","cDomEl","settings","context","slideLocked","pagerEls","mode","onSlideBefore","$slideElement","oldIndex","newIndex","onSlideAfter","bxSlider","goToPrevSlide","stopAuto","goToNextSlide","goToSlide","klasPrefix","klas","c","onBeforeSlide","currentSlide","totalSlides","getCurrentSlide","thumbIndex","maxSlides","nextSelector","prevSelector","getSlider","forceSlider","reloadSlider","urlParams","tracker","chromeBanner","hasBanner","isChrome","product","isMsBuild","show","trackClick","pExt","pExtVal","infoValue","clientInfo","sendResourceTiming","resources","resource","getEntriesByType","res","client_js","duration","fetchStart","startTime","entryType","initiatorType","descriptor","configurable","enumerable","client","navigationControls","navigationItems","button","nav-controls-levelup","nav-controls-close","i-0","i-1","i-2","i-3","i-4","i-5","i-6","i-7","i-8","i-9","i-10","i-11","i-0-0","i-0-1","i-0-2","i-0-3","i-0-4","i-0-5","i-0-6","i-0-7","i-1-0","i-1-1","i-1-2","i-2-0","i-2-1","i-2-2","i-2-3","i-2-4","i-2-5","i-2-6","i-3-0","i-3-1","i-3-2","i-3-3","i-3-4","i-4-0","i-4-1","i-4-2","i-4-3","i-4-4","i-4-5","i-4-6","i-4-7","i-4-8","i-4-9","i-4-10","findNavigationItem","eventTargetClass","parentElement","asyncClientInfo","aswparam","inited","cartLinks","CX","urls","paramPattern","paramRegex","appendBeforeRegex","SL","cookies","p_pro","p_vbd","p_hid","testCookieFail","p_glic","values","cookieFail","paramName","cookieName","getClientInfo","urlParamName","urlParamValue","updateLinks","link","linkDecorator","getCookieValue","parts","urlBagEncodedData","provider","providerDef","providerUrl","log","legacy","legacySettings","boot","exportLegacy","module","disableRum","ready","disabledModules","disableAppendPbld","disableAswparam","disableCj","disableShowCouponCode","disableHadd","disableLanguageSelector","langSelect","disableNavigation","disableTabs","ie6zh","isInternetExplorer","disableTabsAnchor","disableSmoothScroll","disableSlider","pagerSelector","buildPager","slideIndex","ppBx","infiniteLoop","moveSlides","minSlides","slideWidth","slideMargin","onSliderLoad","slideTop","tooltip","topHeight","minHeight","moduleName","req","RootPath","responsive","rootPath","getOS","getWinVersion","src","skipped","getConfig"],"mappings":"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","file":"avast.js","sourcesContent":["/**\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/**\r\n * Animation for scrolling on page\r\n * @version 2.2.4\r\n * @author Michal Samas , Ales Gabriel \r\n * @module avast.scroll.animateScroll\r\n * @requires jquery\r\n * @param {event} [evt]\r\n * @param {number} [pos]\r\n * @param {number} [speed]\r\n * @param {number} [offset]\r\n */\r\n\r\navm.define('avast.scroll.animateScroll', function (evt, pos, speed, offset) {\r\n 'use strict';\r\n var $ = avm.require('jquery'),\r\n off = offset ? offset : 0,\r\n position = pos ? pos + off : 0,\r\n velocity = speed ? speed : 0;\r\n\r\n if(evt && typeof evt.preventDefault === 'function') {\r\n evt.preventDefault();\r\n }\r\n\r\n $('html, body').animate(\r\n {scrollTop: position + 'px'},\r\n velocity,\r\n\t\tfunction() {\r\n\t\t\tif (evt && $(evt.currentTarget).attr('data-hash')) {\r\n\t\t\t\twindow.location.hash = $(evt.currentTarget).attr('data-hash');\r\n\t\t\t}\r\n\t\t}\r\n );\r\n});\n/**\r\n * Append p_bld param to cart links\r\n * @version 0.2.0\r\n * @author Ales Gabriel \r\n * @module avast.web.appendPbld\r\n * @requires jquery\r\n */\r\navm.define('avast.web.appendPbld', (function () {\r\n 'use strict';\r\n \r\n var $ = avm.require('jquery');\r\n \r\n return {\r\n once: 0,\r\n init: function(){\r\n var appendPbld = this;\r\n var re = '[\\\\?&](p_bld=[^&#]*)';\r\n var regex = new RegExp(re, 'i');\r\n var results = regex.exec(window.location.href);\r\n var param = '';\r\n \r\n if(results){\r\n // Web\r\n $('a').each(function() {\r\n if (this.href.indexOf('store.avast.com') != -1 && this.href.indexOf('p_bld=') == -1) {\r\n param = (this.href.indexOf('?') > -1) ? '&' + results[1] : '?' + results[1];\r\n this.href += param;\r\n }\r\n });\r\n // Ints\r\n $('.choice', '.selection').each(function() {\r\n var input = $(this).find('input[type=radio]');\r\n var cartLink = input.val();\r\n if (cartLink.indexOf('store.avast.com') != -1 && cartLink.indexOf('p_bld=') == -1) {\r\n param = (cartLink.indexOf('?') > -1) ? '&' + results[1] : '?' + results[1];\r\n input.val(cartLink + param);\r\n }\r\n });\r\n }\r\n\r\n if (!this.once) {\r\n $(document).on('avast.ab.updatePrice avast.bab.updatePrice', function() {appendPbld.init();});\r\n this.once = 1;\r\n }\r\n }\r\n };\r\n})());\r\n\n/**\r\n * Create SOURCE cookie from ref=cj, ref=td query string parameter\r\n * @version 0.2.0\r\n * @author Ales Gabriel, Michal SamaÅ¡\r\n * @module avast.web.cj\r\n * @todo use avast.storage modules for cookie\r\n * @copyright Avast Software s.r.o ©2015\r\n */\r\n\r\navm.define('avast.web.cj', (function() {\r\n var cj = {\r\n init: function(){\r\n var cj = this;\r\n var param = cj.getURLParameter('ref');\r\n var ref = (typeof param === 'string') ? param.toUpperCase() : null;\r\n var cjCookieName = 'SOURCE';\r\n var age = 7776000; // 90 days to expire\r\n var domain = '.avast.com';\r\n var path = '/';\r\n\r\n\t\t\tif (ref === 'CJ' || ref === 'TD') {\r\n cj.setCookie(cjCookieName, ref, domain, path, age);\r\n\t\t\t}\r\n },\r\n getURLParameter: function(name) {\r\n return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]);\r\n },\r\n setCookie: function(name,value,domain,path,age) {\r\n var exp = \"\",p = \";path=/\",d = \"\";\r\n var val = (value) ? encodeURIComponent(value) : '';\r\n if (age) {\r\n d = new Date();\r\n d.setTime(d.getTime()+(age*1000));\r\n exp = \";expires=\"+d.toUTCString()+\";max-age=\"+ age;\r\n }\r\n if(path){\r\n p = \";path=\"+path;\r\n } \r\n if(domain){\r\n d = \";domain=\"+domain;\r\n } \r\n\r\n document.cookie = name+\"=\"+val+exp+d+p+\";\";\r\n }\r\n };\r\n\r\nreturn cj;\r\n\r\n})());\r\n\n/**\r\n* Decorate cart link with showCuponeCode parameter \r\n* @version 1.0.0\r\n* @author Ales Gabriel\r\n* @module avast.web.cuponeCode\r\n* @requires jquery\r\n*/\r\navm.define('avast.web.couponCode', (function () {\r\n 'use strict';\r\n\r\n var $ = avm.require('jquery');\r\n \r\n return {\r\n options: {\r\n regexS: '[\\\\?&]couponfield=yes([^&#]*)',\r\n providers:['dr-store.avast.com','store.avast.com','store.avast.ru'],\r\n urlQuery: '/showCouponCode=yes'\r\n },\r\n\r\n init: function(params){\r\n var root = this;\r\n if(params !== undefined){\r\n for(var param in params){\r\n this.options[param] = params[param];\r\n }\r\n }\r\n\r\n var regex = new RegExp(this.options.regexS,\"i\");\r\n var results = regex.exec(window.location.href);\r\n\r\n if(results === null){\r\n return 1;\r\n } else {\r\n var href;\r\n var couponParam = this.options.urlQuery;\r\n var providers = this.options.providers;\r\n\r\n $(\"a\").each(function(){\r\n href = $(this).attr('href') ? $(this).attr('href') : \"\";\r\n for(var i=0;i\r\n * @module avast.event.emitter\r\n * @return {Function} Emitter constructor\r\n */\r\navm.define('avast.event.emitter', (function(){\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * Event emitter\r\n\t * @version 1.2.1\r\n\t * @see {@link https://github.com/component/emitter}\r\n\t */\r\n\r\n\t/*\r\n\t(The MIT License)\r\n\r\n\tCopyright (c) 2014 Component contributors \r\n\r\n\tPermission is hereby granted, free of charge, to any person\r\n\tobtaining a copy of this software and associated documentation\r\n\tfiles (the \"Software\"), to deal in the Software without\r\n\trestriction, including without limitation the rights to use,\r\n\tcopy, modify, merge, publish, distribute, sublicense, and/or sell\r\n\tcopies of the Software, and to permit persons to whom the\r\n\tSoftware is furnished to do so, subject to the following\r\n\tconditions:\r\n\r\n\tThe above copyright notice and this permission notice shall be\r\n\tincluded in all copies or substantial portions of the Software.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\n\tOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n\tNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n\tHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\n\tWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\n\tFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\n\tOTHER DEALINGS IN THE SOFTWARE.\r\n\t*/\r\n\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\r\n\tfunction Emitter(obj) {\r\n\t if (obj) return mixin(obj);\r\n\t};\r\n\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction mixin(obj) {\r\n\t for (var key in Emitter.prototype) {\r\n\t\tobj[key] = Emitter.prototype[key];\r\n\t }\r\n\t return obj;\r\n\t}\r\n\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t this._callbacks = this._callbacks || {};\r\n\t (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t\t.push(fn);\r\n\t return this;\r\n\t};\r\n\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t function on() {\r\n\t\tthis.off(event, on);\r\n\t\tfn.apply(this, arguments);\r\n\t }\r\n\r\n\t on.fn = fn;\r\n\t this.on(event, on);\r\n\t return this;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t this._callbacks = this._callbacks || {};\r\n\r\n\t // all\r\n\t if (0 == arguments.length) {\r\n\t\tthis._callbacks = {};\r\n\t\treturn this;\r\n\t }\r\n\r\n\t // specific event\r\n\t var callbacks = this._callbacks['$' + event];\r\n\t if (!callbacks) return this;\r\n\r\n\t // remove all handlers\r\n\t if (1 == arguments.length) {\r\n\t\tdelete this._callbacks['$' + event];\r\n\t\treturn this;\r\n\t }\r\n\r\n\t // remove specific handler\r\n\t var cb;\r\n\t for (var i = 0; i < callbacks.length; i++) {\r\n\t\tcb = callbacks[i];\r\n\t\tif (cb === fn || cb.fn === fn) {\r\n\t\t callbacks.splice(i, 1);\r\n\t\t break;\r\n\t\t}\r\n\t }\r\n\t return this;\r\n\t};\r\n\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\r\n\tEmitter.prototype.emit = function(event){\r\n\t this._callbacks = this._callbacks || {};\r\n\t var args = [].slice.call(arguments, 1)\r\n\t\t, callbacks = this._callbacks['$' + event];\r\n\r\n\t if (callbacks) {\r\n\t\tcallbacks = callbacks.slice(0);\r\n\t\tfor (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t\t callbacks[i].apply(this, args);\r\n\t\t}\r\n\t }\r\n\r\n\t return this;\r\n\t};\r\n\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\r\n\tEmitter.prototype.listeners = function(event){\r\n\t this._callbacks = this._callbacks || {};\r\n\t return this._callbacks['$' + event] || [];\r\n\t};\r\n\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t return !! this.listeners(event).length;\r\n\t};\r\n\r\n\treturn Emitter;\r\n})());\r\n\n/**\r\n * Avast Number format\r\n * @version 2.1.0\r\n * @author Michal Samas \r\n * @module avast.number.format\r\n * @requires jquery\r\n */\r\n\r\navm.define('avast.number.format', (function () {\r\n 'use strict';\r\n var $ = avm.require('jquery');\r\n return {\r\n options: {\r\n decimal: 0\r\n },\r\n translate: function (number, decimal) {\r\n var root = this,\r\n avastGlobals = window.avastGlobals;\r\n\r\n if (decimal !== undefined) {\r\n this.options.decimal = decimal;\r\n } else {\r\n this.options.decimal = 0;\r\n }\r\n if (!isNaN(number) && avastGlobals && typeof avastGlobals.web === 'object') {\r\n var ds = avastGlobals.web.numberDecimalSeparator,\r\n ts = avastGlobals.web.numberThousandSeparator;\r\n if (ds && ds) {\r\n var val = $().number_format(\r\n number,\r\n {\r\n numberOfDecimals: root.options.decimal,\r\n decimalSeparator: ds,\r\n thousandSeparator: ts,\r\n symbol: \"\"\r\n }\r\n );\r\n return val;\r\n } else {\r\n return number;\r\n }\r\n } else {\r\n return number;\r\n }\r\n }\r\n };\r\n})());\n/**\r\n * Avast hadd manipulation class\r\n * @version 2.1\r\n * @author Michal Samas, Milan Adam, Ales Gabriel\r\n * @copyright Avast Software s.r.o ©2014\r\n */\r\navm.define('avast.hadd', function () {\r\n 'use strict';\r\n return {\r\n haddValue: '',\r\n options: {\r\n haddRegex: \"[\\\\?&]hadd=([^&#]*)\",\r\n providers: {\r\n \"dr-store.avast.com\": {\r\n idRegex: \"[\\\\?&]PRODUCT([^&#=]*)\",\r\n paramTmpl: \"HADD{{id}}[ADDITIONAL1]={{hadd}}\"\r\n },\r\n \"dr-store.avast.co.jp\": {\r\n idRegex: \"productID[\\\\.]([^&#=\\/]*)[\\/]\",\r\n paramTmpl: \"/HADD.{{id}}/ADDITIONAL1.{{hadd}}\"\r\n },\r\n \"store.avast.com\": {\r\n idRegex: \"productID[\\\\.]([^&#=\\/]*)[\\/]\",\r\n paramTmpl: \"/HADD.{{id}}/ADDITIONAL1.{{hadd}}\"\r\n },\r\n \"store.avast.ru\": {\r\n paramTmpl: \"licenseid={{hadd}}\"\r\n },\r\n \"store.avast.ua\": {\r\n paramTmpl: \"licenseid={{hadd}}\"\r\n }\r\n }\r\n },\r\n\r\n init: function (params) {\r\n //console.time('hadd sken');\r\n var root = this,\r\n listen = false;\r\n\r\n if (params !== undefined) {\r\n for (var key in params){\r\n this.options[key] = params[key];\r\n }\r\n }\r\n\r\n var regex = new RegExp(this.options.haddRegex,\"i\"),\r\n results = regex.exec(window.location.href);\r\n\r\n if (results === null) {\r\n // Stops here if no HADD in url\r\n return 1;\r\n } else {\r\n if (!this.haddValue){\r\n // Store hadd parameter value\r\n this.haddValue = results[1];\r\n // Listen to price update and sken again.\r\n // TODO: Remove 'avast.ab.updatePrice', 'avast.bab.updatePrice' events, when all triggers replaced with 'priceUpdate.ab.avast'.\r\n $(document).on('priceUpdate.ab.avast avast.ab.updatePrice avast.bab.updatePrice', function () {root.init();});\r\n }\r\n\r\n // Scan all links, radio buttons\r\n $('a, input[type=\"radio\"]').each(function () {\r\n var $this = $(this),\r\n cartUrl = $this.attr('href') || $this.attr('value') || \"\",\r\n attrName = 'href',\r\n param = root.getHaddParam(cartUrl),\r\n delim = '';\r\n\r\n if (param && cartUrl.indexOf(param) === -1) {\r\n if (param.charAt(0) !== '/' && cartUrl.substr(cartUrl.length - 1) !== '&') {\r\n delim = (cartUrl.indexOf(\"?\") == -1) ? \"?\" : \"&\";\r\n }\r\n cartUrl = cartUrl + delim + param;\r\n\r\n // check if it has specified property\r\n $.each(this.attributes, function () {\r\n if (this.specified && this.name) {\r\n if (this.name.toLowerCase() === 'href') {\r\n attrName = 'href';\r\n return false;\r\n } else if (this.name.toLowerCase() === 'value') {\r\n attrName = 'value';\r\n }\r\n }\r\n });\r\n\r\n $this.attr(attrName, cartUrl);\r\n }\r\n });\r\n }\r\n //console.timeEnd('hadd sken');\r\n },\r\n\r\n getHaddParam: function (url) {\r\n var providers = this.options.providers,\r\n hadd = this.haddValue,\r\n param,\r\n regID,\r\n id;\r\n\r\n for (var key in providers) {\r\n if (url && url.indexOf(key) != -1) {\r\n // Look for ID number, if provider has regexp for id search\r\n if (providers[key].idRegex) {\r\n regID = providers[key].idRegex ? new RegExp(providers[key].idRegex,\"i\") : '';\r\n id = regID.exec(url);\r\n }\r\n // Replace param template with id\r\n if (id &&providers[key].paramTmpl) {\r\n param = providers[key].paramTmpl.replace('{{id}}', id[1]).replace('{{hadd}}', hadd);\r\n }\r\n // Replace param template without id\r\n if (!id && providers[key].paramTmpl) {\r\n param = providers[key].paramTmpl.replace('{{hadd}}', hadd);\r\n }\r\n }\r\n }\r\n return param;\r\n },\r\n\r\n getHadd: function (el) {\r\n // Check in which elements attribute cart link is stored.\r\n var url;\r\n\r\n if (el && el.nodeType === 1) {\r\n if (el.href) {\r\n url = el.href;\r\n }\r\n if (el.value) {\r\n url = el.value;\r\n }\r\n }\r\n\r\n return this.getHaddParam(url);\r\n }\r\n };\r\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.0.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' && typeof localStorage === 'object') {\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' && typeof console.warn === 'function') {\n\t\t\tconsole.warn(error);\n\t\t}\n\t}\n\treturn false;\n})());\n\n/**\r\n* Avast Language selector \r\n* @version 2.0.3\r\n* @author Michal Samas, Ales Gabriel\r\n* @module avast.web.languageSelector\r\n* @requires jquery\r\n* @requires avast.scroll.animateScroll\r\n*/\r\n\r\navm.define('avast.web.languageSelector', function () {\r\n 'use strict';\r\n var $ = avm.require('jquery'),\r\n animateScroll = avm.require('avast.scroll.animateScroll'),\r\n $langSelector = $('#lang-selector'),\r\n $html = $('html');\r\n return {\r\n init: function () {\r\n var self = this;\r\n // Highligh current region\r\n $langSelector.find('.' + avast.locale).addClass('highlight');\r\n\r\n $('.region-selector a, #lang-selector .selector-close').on('click', $.proxy(self.toggleHandler, self));\r\n \r\n $(document).on('keydown.languageSelector.avast', $.proxy(self.keyPressHandler, self));\r\n $langSelector.on('click', $.proxy(self.clickHandler, self));\r\n },\r\n toggleHandler: function (evt) {\r\n // Can be called without argument so check it first\r\n \r\n if (evt) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\t\t\tif ($(evt.currentTarget).is('.region .region-selector-button') || evt.target.className === 'selector-close' || evt.which === 27) {\r\n $langSelector.toggleClass('open');\r\n }\r\n if ($langSelector.hasClass('open')) {\r\n $html.addClass('lang-selector-open');\r\n if (animateScroll) {\r\n var pos = $(window).scrollTop();\r\n animateScroll(evt, pos);\r\n }\r\n } else {\r\n $html.removeClass('lang-selector-open');\r\n }\r\n },\r\n keyPressHandler: function (evt) {\r\n if (evt.which === 27 && $('.lang-selector-open').length > 0) {\r\n this.toggleHandler(evt);\r\n }\r\n },\r\n clickHandler: function (evt) {\r\n var target = $(evt.target);\r\n if (target.prop('tagName').toLowerCase !== 'a' && target.parents('.rs-region').length === 0) {\r\n evt.preventDefault();\r\n this.toggleHandler(evt);\r\n } else {\r\n evt.stopPropagation();\r\n }\r\n }\r\n };\r\n});\n/**\r\n * Avast off canvas slide on top navigation \r\n * \r\n * @version 0.2.0\r\n * @author Ales Gabriel \r\n * @module avast.web.navigationOld\r\n * @requires module:jquery\r\n * @todo Close with escape\r\n * @todo Stop closing when clicked on navigation\r\n * @todo Debouncer on scroll event !!!\r\n * @copyright Avast Software\r\n */\r\n\r\n\r\navm.define('avast.web.navigationOld', (function(){\r\n \r\n var $ = avm.require('jquery');\r\n\r\n var navigation = {\r\n defaults: {\r\n // default settings\r\n navCloseTreshold : 0,\r\n timeout: '',\r\n leaveNavTimeout : 1000,\r\n \r\n // Classes\r\n navClass : 'nav', \r\n levelClass : 'nav-level',\r\n activeLevelClass : 'active-level',\r\n listClass : 'nav-list',\r\n navSwitchClass : 'nav-switch',\r\n \r\n // DOM actors\r\n header : $('#header'),\r\n content : $('#content-holder'),\r\n navSwitch : $('.nav-switch'),\r\n navBack : $('.nav-controls-levelup')\r\n },\r\n\r\n init: function(opts){\r\n var body = document.body;\r\n\r\n this.opts = $.extend({}, this.defaults, opts);\r\n this.opts.nav = $('.' + this.opts.navClass);\r\n \r\n // Register default events\r\n \r\n // Open/close navigation\r\n this.opts.navSwitch.on('click', $.proxy(this.toggleNav, this));\r\n\r\n // Toggle levels, follow link or do nothing\r\n this.opts.nav.on('click', 'a', $.proxy(this.toggleLevel, this));\r\n \r\n // Reset timeout on mouseenter \r\n this.opts.nav.on('mouseenter', $.proxy(this.resetTimeout, this));\r\n\r\n // Close nav on body click\r\n $(body).on('click', $.proxy(this.closeNav, this));\r\n\r\n // Close on escape\r\n $(body).on('keyup', $.proxy(this.escapeNav, this));\r\n\r\n // Set overflow to skroll on window resize\r\n window.onscroll = $.proxy(this.checkNavCloseTreshold, this);\r\n\r\n // Mobile events\r\n this.opts.navBack.on('click', $.proxy(this.levelUp, this));\r\n },\r\n\r\n preRenderNav: function (evt){\r\n // Minimal nav height shoud be body height or viewport height\r\n \r\n var html = document.documentElement;\r\n var body = document.body;\r\n\r\n var initHeight = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\r\n this.opts.nav.css('minHeight', initHeight + 'px');\r\n },\r\n /**\r\n * toggleNav Open/close navigation\r\n * @param {Object} evt \r\n */\r\n toggleNav: function (evt){\r\n if(evt && evt.preventDefault && evt.stopPropagation) {\r\n evt.preventDefault();\r\n //evt.stopPropagation();\r\n }\r\n this.preRenderNav();\r\n\r\n if($('.' + this.opts.levelClass).is('.open')){\r\n this.closeNav(evt);\r\n } else {\r\n this.openNav();\r\n this.markActiveLevel(1);\r\n\r\n // Release button. If not released nav item will be target of escape keyup event.\r\n $(evt.currentTarget).blur();\r\n\r\n // Update nav close treshold\r\n this.setNavCloseTreshold();\r\n \r\n // Remove all active elements\r\n // TODO: removeActive should accept multiple params \r\n this.removeActive(1);\r\n this.removeActive(2);\r\n }\r\n },\r\n /**\r\n * toggleLevel Switch level \r\n * @param {Event} evt It suppose to be a click\r\n */\r\n toggleLevel: function (evt){ \r\n var $this = $(evt.currentTarget),\r\n href = $this.attr('href'),\r\n levelSelector = '.' + this.opts.levelClass, \r\n target = $this.parent(),\r\n targetId = $(target).attr('id'),\r\n idLevel = targetId ? targetId.substr(2, targetId.length - 1) : null,\r\n parent = $(target).parents(levelSelector),\r\n parentClass = $(parent).attr('class'),\r\n re = new RegExp('(' + this.opts.levelClass + ')(\\\\d)'),\r\n match = parentClass ? re.exec(parentClass) : null,\r\n currentLevelNum = match ? parseInt(match[2], 10) : null,\r\n subLevelNum = currentLevelNum + 1,\r\n currentLevel = $(levelSelector + currentLevelNum),\r\n subLevel = $(levelSelector + subLevelNum),\r\n subNav = $('#l-' + idLevel),\r\n subLevelReady;\r\n\r\n // Only clicks on active level pass through\r\n if(currentLevel.parents('.' + this.opts.activeLevelClass + currentLevelNum).length < 1){\r\n evt.preventDefault();\r\n return;\r\n }\r\n\r\n // Resolve links\r\n if (href) {\r\n // Do nothing when real link in navigation is clicked. \r\n if(href.indexOf('#') !== 0 && href.indexOf('.') !== 0){ \r\n //console.log('Propagtion stoped!');\r\n return;\r\n }\r\n // Hash trap. Only if single # in href is catched. Prevent adding hash to address bar from nav items.\r\n if((href.indexOf('#') === 0 && href.length === 1) || (href.indexOf('../#') === 0 && href.length === 4)){\r\n evt.preventDefault();\r\n //console.log('Hash trapped!');\r\n }\r\n if(href.indexOf('#') === 0 && href.length !== 1){\r\n return;\r\n }\r\n }\r\n\r\n // Switch subnav pannel visibility\r\n // Hide all levels more then 2 levels deeper \r\n \r\n $(levelSelector + (subLevelNum + 1) + '.open').removeClass('open');\r\n\r\n subLevelReady = subNav.length ? true : false;\r\n\r\n // Switch active level and make visible content\r\n if(subLevelReady) {\r\n evt.preventDefault();\r\n\r\n // Release button. If not released nav item will be target of escape keyup event.\r\n $(evt.currentTarget).blur();\r\n\r\n // Clear content in sublevel if there is already some displayed \r\n $(levelSelector + subLevelNum + ' .visible').removeClass('visible');\r\n\r\n // Display correct content in sublevel\r\n subNav.addClass('visible');\r\n \r\n // Make sublevel panel visible \r\n subLevel.addClass('open');\r\n // Mark in global nav wrapper which level is oppened \r\n this.markActiveLevel(subLevelNum);\r\n \r\n // Set new nav height treshold. \r\n this.setNavCloseTreshold();\r\n\r\n // highlight active\r\n this.removeActive(currentLevelNum, subLevelNum);\r\n target.addClass('active');\r\n\r\n } else {\r\n // Mark in global nav wrapper current level as oppened.\r\n this.markActiveLevel(currentLevelNum);\r\n // Update nav close treshold\r\n this.setNavCloseTreshold();\r\n // If there is no sublevel close everything 2 steps deep and ...\r\n if(subLevel){\r\n subLevel.removeClass('open');\r\n this.removeActive(currentLevelNum, subLevelNum);\r\n }\r\n }\r\n },\r\n \r\n removeActive: function (levelNum, subLevelNum){\r\n if(!levelNum && !subLevelNum){\r\n this.opts.nav.find('li').removeClass('active');\r\n }\r\n if(levelNum){\r\n $('.' + this.opts.levelClass + levelNum + ' li').removeClass('active');\r\n }\r\n if(subLevelNum) {\r\n $('.' + this.opts.levelClass + ' li').removeClass('active');\r\n }\r\n }, \r\n\r\n resetTimeout: function() {\r\n clearTimeout(this.opts.timeout);\r\n },\r\n\r\n markActiveLevel: function (level){\r\n var klass = this.opts.activeLevelClass + level,\r\n activeLevelClass = this.opts.activeLevelClass,\r\n activeLevel = this.getActiveLevel(),\r\n classToRemove = (activeLevel) ? activeLevelClass + activeLevel : '';\r\n\r\n this.opts.nav.removeClass(classToRemove);\r\n\r\n if(level){\r\n this.opts.nav.addClass(klass);\r\n }\r\n },\r\n\r\n leaveNav: function (evt){\r\n if(this.opts.nav.find('.open').length > 0){\r\n var t = this.opts.leaveNavTimeout;\r\n var root = this;\r\n this.opts.timeout = setTimeout(function(){\r\n root.closeNav(evt);\r\n }, t);\r\n }\r\n },\r\n\r\n openNav: function (){\r\n var topLevel = $('.' + this.opts.levelClass).eq(0),\r\n nav = this.opts.nav, \r\n navClass = this.opts.navClass,\r\n listClass = this.opts.listClass,\r\n content = this.opts.content;\r\n\r\n nav.removeClass('closing');\r\n \r\n // Open 1st level\r\n topLevel.addClass('open');\r\n \r\n // Make 1st level list visible \r\n topLevel.find('.' + listClass).addClass('visible');\r\n \r\n // Overlay\r\n content.addClass(navClass + '-open');\r\n },\r\n\r\n closeNav: function (evt){\r\n var content = this.opts.content; \r\n\r\n if($(evt.target).closest('.' + this.opts.levelClass + ', .' + this.opts.navSwitchClass).length){\r\n return;\r\n } \r\n \r\n this.markActiveLevel(); \r\n // Close all opened panels\r\n // TODO: Close levels clever way.\r\n $('.' + this.opts.levelClass).each(function(){\r\n $(this).removeClass('open');\r\n });\r\n\r\n this.opts.nav.find('.active').removeClass('active');\r\n content.removeClass(this.opts.navClass + '-open'); \r\n },\r\n escapeNav: function(evt){\r\n if (evt.which === 27) {\r\n this.levelUp(evt);\r\n }\r\n },\r\n\r\n maxListHeight: function (){\r\n var height = 0,\r\n activeLevel = this.getActiveLevel();\r\n\r\n height = $('.' + this.opts.levelClass + activeLevel).find('.' + this.opts.listClass).filter(':visible').get(0).offsetHeight;\r\n \r\n return height;\r\n },\r\n\r\n setNavCloseTreshold: function (){\r\n var height = this.maxListHeight(); \r\n this.opts.navCloseTreshold = height;\r\n },\r\n // TODO: Debounce this\r\n checkNavCloseTreshold: function (evt){\r\n var html = $('html'),\r\n scrollTop = (window.pageYOffset || html.scrollTop) - (html.clientTop || 0),\r\n activeLevel = this.getActiveLevel();\r\n\r\n //console.log('treshold: ' + this.opts.navCloseTreshold);\r\n\r\n if (scrollTop > (this.opts.navCloseTreshold + 70) && activeLevel) {\r\n this.closeNav(evt);\r\n }\r\n },\r\n /**\r\n * getActiveLevel Get number of opened active level\r\n * @return {Int} Return number of active level\r\n */\r\n getActiveLevel: function(){\r\n var navClasses = this.opts.nav.attr('class'),\r\n pos,\r\n activeClass = this.opts.activeLevelClass,\r\n currentLevel;\r\n\r\n if(navClasses){\r\n pos = navClasses.indexOf(activeClass) + activeClass.length;\r\n currentLevel = (pos > activeClass.length) ? navClasses.charAt(pos) : -1;\r\n }\r\n\r\n return (currentLevel !== -1) ? parseInt(currentLevel, 10) : 0;\r\n },\r\n \r\n levelUp: function (evt){\r\n //evt.stopPropagation();\r\n\r\n var oldLevel = this.getActiveLevel();\r\n var newLevel = oldLevel ? parseInt(oldLevel, 10) - 1 : 0;\r\n \r\n // Mark correct active level on global nav wrapper\r\n if(newLevel){\r\n this.markActiveLevel(newLevel);\r\n } else {\r\n this.closeNav(evt);\r\n }\r\n\r\n // Clear active class on current level and level up \r\n $('.' + this.opts.levelClass).eq(newLevel - 1).find('.active').removeClass('active');\r\n \r\n // Close sublevel \r\n $('.' + this.opts.levelClass).eq(oldLevel - 1).removeClass('open');\r\n }\r\n };\r\n\r\n return navigation;\r\n})());\r\n\n/**\n * Avast Overlay Popup\n * @version 1.0.0\n * @author Michal Samas \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'));\n $('.overlay-box[data*=\"' + _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/**\r\n * Avast Router\r\n * @version 1.0.1\r\n * @author Michal Samas \r\n * @module avast.web.router\r\n * @requires jquery\r\n */\r\navm.define('avast.web.router', (function () {\r\n\t'use strict';\r\n\tvar $ = avm.require('jquery'),\r\n\t\troutes,\r\n\t\tself,\r\n\t\tw = window,\r\n\t\t$window = $(window);\r\n\r\n\treturn {\r\n\t\t/*\r\n\t\t * add window hashchange listener\r\n\t\t * look for key in routes object and execute its function\r\n\t\t */\r\n\t\thashChangeListener: function () {\r\n\t\t\tself = this;\r\n\t\t\t$window.on('hashchange', function () {\r\n\t\t\t\tself.exec(w.location.hash.substring(1));\r\n\t\t\t});\r\n\t\t},\r\n\t\t/*\r\n\t\t * @param {string} [path]\r\n\t\t * change hash in URL if it is not the same as current one, otherwise execute function from routes object\r\n\t\t */\r\n\t\tnavigate: function (path) {\r\n\t\t\tif (w.location.hash.substring(1) !== path) {\r\n\t\t\t\tw.location.hash = path;\r\n\t\t\t} else {\r\n\t\t\t\tthis.exec(path);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/* \r\n\t\t * @param {string} [path]\r\n\t\t * execute function from routes object\r\n\t\t */\r\n\t\texec: function (path) {\r\n\t\t\tif (routes[path]) {\r\n\t\t\t\troutes[path]();\r\n\t\t\t} else {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/*\r\n\t\t * @param {object} [path]\r\n\t\t * set the routes object\r\n\t\t * add hashchange listener\r\n\t\t * after page load check hash and execute function from routes object\r\n\t\t * return routes object if path is object, otherwise throw error\r\n\t\t */\r\n\t\tset: function (path) {\r\n\t\t\troutes = path;\r\n\t\t\tself = this;\r\n\t\t\tself.hashChangeListener();\r\n\t\t\tself.navigate(w.location.hash.substring(1));\r\n\t\t\tif (typeof path === 'object') {\r\n\t\t\t\treturn routes;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Object has to be passed to router.set()');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n})());\n/**\r\n * Serialize URL parameters from object to string\r\n * @version 1.1.0\r\n * @author Jiri Duchon \r\n * @module avast.url.serialize\r\n * @param {Object} urlObject\r\n * @returns {string}\r\n */\r\navm.define('avast.url.serialize', function(urlObject) {\r\n\t'use strict';\r\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\tif (typeof urlObject === 'object' && urlObject) {\r\n\t\tvar urlString = '';\r\n\t\tfor (var key in urlObject) {\r\n\t\t\tif (hasOwnProperty.call(urlObject, key)) {\r\n\t\t\t\tif (urlString.length) {\r\n\t\t\t\t\turlString += '&';\r\n\t\t\t\t}\r\n\t\t\t\turlString += encodeURIComponent(key) + '=' + encodeURIComponent(urlObject[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn urlString;\r\n\t} else {\r\n\t\tthrow new Error('Invalid method arguments to avast.url.serialize');\r\n\t}\r\n});\r\n\n/**\n * Set cookie avastComLocale with locale value\n * @version 0.1.0\n * @author Ales Gabriel \n * @module avast.web.setLanguage\n */\navm.define('avast.web.setLanguage', function (lang) {\n 'use strict'; \n \n var d=new Date();\n d.setDate(d.getDate() + 365);\n document.cookie = \"avastComLocale=\"+lang+\";path=/;EXPIRES=\" + d.toGMTString(); \n});\n\n/**\r\n * Hash anchor smooth scroll\r\n * @version 2.3.0\r\n * @author Michal Samas , AleÅ¡ Gabriel \r\n * @module avast.scroll.smoothScroll\r\n * @requires jquery\r\n * @requires avast.scroll.animateScroll\r\n */\r\n\r\navm.define('avast.scroll.smoothScroll', function () {\r\n 'use strict';\r\n var $ = avm.require('jquery'),\r\n animateScroll = avm.require('avast.scroll.animateScroll');\r\n $('a[href*=#]:not([href=#])').click(function (evt) {\r\n var $this = $(this);\r\n var offset = $(this).closest('#tabs-anchor').length ? (2 - $(this).closest('#tabs-anchor').height()) : 0;\r\n\r\n if (location.pathname.replace(/^\\//, '') === this.pathname.replace(/^\\//, '')\r\n && location.hostname === this.hostname\r\n && !$this.hasClass('no-smooth-scroll')\r\n && $this.closest('.tabs-nav-faq').length === 0) {\r\n var target = $(this.hash);\r\n target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');\r\n\r\n if (target.length && typeof animateScroll === 'function') {\r\n animateScroll(evt, target.offset().top, 400, offset);\r\n }\r\n }\r\n });\r\n});\r\n\n/**\r\n * Factory for storage object\r\n * @version 1.1.0\r\n * @author Jiri Duchon \r\n * @module avast.storage.storageFactory\r\n * @returns {Object}\r\n */\r\navm.define('avast.storage.storageFactory', function() {\r\n\t'use strict';\r\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty,\r\n\t\tdata = {};\r\n\treturn {\r\n\t\tlength: 0,\r\n\r\n\t\t/**\r\n\t\t * Add key/value pair\r\n\t\t * @param {*} key\r\n\t\t * @param {*} value\r\n\t\t */\r\n\t\tsetItem: function(key, value) {\r\n\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\r\n\t\t\t\tkey = encodeURIComponent(key);\r\n\t\t\t\tvalue = encodeURIComponent(value);\r\n\t\t\t\tif (!hasOwnProperty.call(data, key)) {\r\n\t\t\t\t\tthis.length++;\r\n\t\t\t\t}\r\n\t\t\t\tdata[key] = value;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.setItem');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get value associated with key\r\n\t\t * @param {*} key\r\n\t\t * @returns {string}\r\n\t\t */\r\n\t\tgetItem: function(key) {\r\n\t\t\tif (typeof key !== 'undefined') {\r\n\t\t\t\tkey = encodeURIComponent(key);\r\n\t\t\t\treturn typeof data[key] !== 'undefined' ? decodeURIComponent(data[key]) : null;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.getItem');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Remove key/value pair\r\n\t\t * @param {*} key\r\n\t\t */\r\n\t\tremoveItem: function(key) {\r\n\t\t\tif (typeof key !== 'undefined') {\r\n\t\t\t\tkey = encodeURIComponent(key);\r\n\t\t\t\tif (hasOwnProperty.call(data, key)) {\r\n\t\t\t\t\tdelete data[key];\r\n\t\t\t\t\tthis.length--;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.removeItem');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get name of nth key\r\n\t\t * @param {number} n\r\n\t\t * @returns {string}\r\n\t\t */\r\n\t\tkey: function(n) {\r\n\t\t\tif (typeof n === 'number') {\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\tfor (var key in data) {\r\n\t\t\t\t\tif (hasOwnProperty.call(data, key)) {\r\n\t\t\t\t\t\tif (i === n) {\r\n\t\t\t\t\t\t\treturn decodeURIComponent(key);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.storageFactory.key');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Clear all items\r\n\t\t */\r\n\t\tclear: function() {\r\n\t\t\tdata = {};\r\n\t\t\tthis.length = 0;\r\n\t\t}\r\n\r\n\t};\r\n});\r\n\n/**\r\n * Avast tabs class\r\n * @version 0.1.0 \r\n * @author Milan Adam , Ales Gabriel \r\n * @module avast.web.tabs\r\n * @requires module:jquery\r\n * @copyright Avast Software s.r.o ©2013\r\n */\r\n\r\navm.define('avast.web.tabs', (function() {\r\n \r\n var $ = avm.require('jquery');\r\n\r\n var tabs = {\r\n /**\r\n * @var string nId - DOM element that has connected tabs\r\n */\r\n nId:null,\r\n /**\r\n * Tabs default options\r\n * @var boolean animate - animate on change or not\r\n * @var string tabs - css selector of relative position of main list in tabs container\r\n */\r\n options:{\r\n animate: true,\r\n tabs: \"> div#tabs-navigation > ul > li\"\r\n },\r\n /**\r\n * Initialization\r\n * @param string eId - DOM element where tabs are included\r\n * @param object params - parameters rewriting default options\r\n */\r\n init:function(eId,params){\r\n this.nId = eId;\r\n if(params !== undefined){\r\n for(var param in params){\r\n this.options[param] = params[param];\r\n }\r\n }\r\n\r\n $(this.nId).easytabs(this.options);\r\n },\r\n /**\r\n * Method for selecting specific tab\r\n * @param string sHref - id of the desired tab with perfix '#' e.g. '#tab3'\r\n */\r\n select:function(sHref){\r\n $(this.nId).easytabs('select',sHref);\r\n }\r\n };\r\n\r\n return tabs;\r\n\r\n})());\r\n\n/**\r\n * Sticky nav for tabs. Sticky slide in to viewport when scrolled.\r\n * @version 0.5.0\r\n * @author Ales Gabriel , Michal Samas \r\n * @module avast.web.tabsAnchor\r\n * @requires module:jquery\r\n * @copyright Avast Software s.r.o ©2014-2015\r\n */\r\n\r\navm.define('avast.web.tabsAnchor', (function() {\r\n\r\n\tvar $ = avm.require('jquery');\r\n\r\n\tvar tabsAnchor = {\r\n\t\tdefaults: {\r\n\t\t\tbehavior: 'slideIn' \r\n\t\t},\r\n\t\tinit: function(nId, options){\r\n\t\t\tvar opts = this.options = $.extend(true, this.defaults, options);\r\n\r\n\t\t\tif(nId) {\r\n\t\t\t\tthis.stick(nId);\r\n\t\t\t\tthis.highlight(nId);\r\n\t\t\t}\r\n\t\t},\r\n\t\tstick: function(nId){\r\n\t\t\tif(typeof $.fn.waypoint === 'function'){\r\n\r\n\t\t\t\tvar clone = $('
'),\r\n\t\t\t\t\t$this = $(nId),\r\n\t\t\t\t\tfirstItemId = $(nId + ' ul:first li:first-child').find('a').attr('href'),\r\n\t\t\t\t\tlastItemId = $(nId + ' ul:first li:last-child').find('a').attr('href'),\r\n\t\t\t\t\th = this.options.height ? this.options.height : $this.outerHeight(),\r\n\t\t\t\t\tp = $this.css('marginTop'),\r\n\t\t\t\t\tsTop = $(window).scrollTop(),\r\n\t\t\t\t\troot = this;\r\n\r\n\t\t\t\tif(firstItemId && firstItemId.indexOf('#') !== 0){\r\n\t\t\t\t\tfirstItemId = '-';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(lastItemId && lastItemId.indexOf('#') !== 0){\r\n\t\t\t\t\tlastItemId = '-';\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Find correct anchored element\r\n\t\t\t\tif($(firstItemId).length === 0){\r\n\t\t\t\t\t$(nId + ' ul:first li').each(function(){\r\n\t\t\t\t\t\tvar $this = $(this);\r\n\t\t\t\t\t\tvar anchorId = $this.find('a').attr('href');\r\n\t\t\t\t\t\tif(anchorId){\r\n\t\t\t\t\t\t\tif(anchorId.indexOf('#') !== 0){\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif($(anchorId).length > 0){\r\n\t\t\t\t\t\t\tfirstItemId = anchorId;\r\n\t\t\t\t\t\t\treturn false; // stop loop with first success\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\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. \r\n\t\t\t\t// first tab reached\r\n\t\t\t\t$(firstItemId).waypoint(function(direction){\r\n\t\t\t\t\tif(direction === \"down\"){\r\n\t\t\t\t\t\t$this.addClass('sticky');\r\n\t\t\t\t\t\tif(root.options.behavior === 'static' && $('#tabs-anchor-clone').length < 1) {\r\n\t\t\t\t\t\t\tclone.height(h);\r\n\t\t\t\t\t\t\t$this.before(clone);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(direction === \"up\"){\r\n\t\t\t\t\t\t$this.removeClass('sticky');\r\n\t\t\t\t\t\tif(root.options.behavior === 'static') {\r\n\t\t\t\t\t\t\tclone.remove();\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t}\r\n\t\t\t\t\t$('body').trigger('reached.waypoint', [this, direction]);\r\n\t\t\t\t}, {offset: h});\r\n\r\n\t\t\t\t// last tab reached\r\n\t\t\t\t$(lastItemId).waypoint(function(direction){\r\n\t\t\t\t\tif(direction === \"up\"){\r\n\t\t\t\t\t\t$this.addClass('sticky');\r\n\t\t\t\t\t\tif(root.options.behavior === 'static' && $('#tabs-anchor-clone').length < 1) {\r\n\t\t\t\t\t\t\tclone.height(h);\r\n\t\t\t\t\t\t\t$this.before(clone);\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(direction === \"down\"){\r\n\t\t\t\t\t\t$this.removeClass('sticky');\r\n\t\t\t\t\t\tif(root.options.behavior === 'static') {\r\n\t\t\t\t\t\t\tclone.remove();\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t}\r\n\t\t\t\t\t$('body').trigger('reached.waypoint', [this, direction]);\r\n\t\t\t\t}, {offset: - $(lastItemId).outerHeight()});\r\n\t\t\t}\r\n\t\t},\r\n\t\thighlight: function(nId) {\r\n\t\t\tvar h = $(nId).outerHeight();\r\n\t\t\tvar lastSection;\r\n\r\n\t\t\t$(nId + ' ul:first').find('a').each(function(){\r\n\t\t\t\tvar href = $(this).attr('href');\r\n\t\t\t\tvar id = href.replace(/#/,''); \r\n\r\n\t\t\t\t$('#content-holder').children().each(function(index){\r\n\t\t\t\t\tif(id == $(this).attr('id')){\r\n\t\t\t\t\t\t$(this).addClass('tabs-anchor-section');\r\n\t\t\t\t\t\t// last child\r\n\t\t\t\t\t\tlastSection = $(this);\r\n\t\t\t\t\t} \r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(lastSection){\r\n\t\t\t\tlastSection.addClass('last-anchor-section'); \r\n\t\t\t}\r\n\r\n\t\t\t$('.tabs-anchor-section').waypoint(function(direction){\r\n\t\t\t\t//alert(direction);\r\n\t\t\t\tvar id;\r\n\r\n\t\t\t\t$(nId + ' ul:first').find('a').removeClass('active');\r\n\t\t\t\tif(direction == \"down\") {\r\n\t\t\t\t\tid = $(this).attr('id');\r\n\t\t\t\t\t//console.log('direction: %s on #%s', direction, id);\r\n\t\t\t\t\t$('[href=#'+ id +']').addClass('active');\r\n\t\t\t\t}\r\n\t\t\t\tif(direction == \"up\") {\r\n\t\t\t\t\tid = $(this).attr('id');\r\n\t\t\t\t\t//console.log('direction: %s on #%s', direction, id);\r\n\t\t\t\t\t$('[href=#'+ id +']').parent('li').prev().find('a').addClass('active');\r\n\t\t\t\t}\r\n\t\t\t}, {offset: h});\r\n\r\n\t\t\t// Publish when 500px offset reached - for store background change\r\n\t\t\t$('.tabs-anchor-section').waypoint(function(direction){\r\n\t\t\t\tvar el = $(this);\r\n\t\t\t\tvar timeout = setTimeout(function(){\r\n\t\t\t\t\t$(el).trigger({\r\n\t\t\t\t\t\ttype: 'passed.waypoint',\r\n\t\t\t\t\t\tdirection: direction,\r\n\t\t\t\t\t\toffset: 500\r\n\t\t\t\t\t});\r\n\t\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\t}, 100);\r\n\r\n\r\n\t\t\t}, {offset: 500});\r\n\t\t}\r\n\t};\r\n\r\n\treturn tabsAnchor;\r\n\r\n})());\n/**\r\n* Push data to GTM dataLayer.\r\n* @version 1.0.0\r\n* @author Ales Gabriel \r\n* @module avast.web.tracker\r\n* @desc GTM dataLayer helper. Primary centralize various window.datalayer pushes.\r\n* @requires jquery\r\n*/\r\navm.define('avast.web.tracker', (function () {\r\n\t'use strict';\r\n\r\n\tvar $ = avm.require('jquery');\r\n\r\n\twindow.dataLayer = window.dataLayer || [];\r\n\r\n\t/*\r\n\t *\tConfig events and handlers.\r\n\t *\tIf tracked via GTM, only datalayer.push should be required.\r\n\t */\r\n\r\n\t// Define callbacks for events\r\n\tvar trackEvents = {\r\n\t\t'chromeOffer': {\r\n\t\t\t/**\r\n\t\t\t * Track banner impression\r\n\t\t\t * @return {Integer} Length of datalayer\r\n\t\t\t */\r\n\t\t\tview: function(evt){\r\n\t\t\t\t//console.log(evt);\r\n\t\t\t\treturn window.dataLayer.push({\r\n\t\t\t\t\t'event' : 'chromeOffer',\r\n\t\t\t\t\t'eventCategory' : 'Chrome',\r\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\r\n\t\t\t\t\t'eventLabel' : 'View'\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t/**\r\n\t\t\t * Track clicking on download Chrome button\r\n\t\t\t * @param {Object} evt Event object\r\n\t\t\t * @return {Integer} Length of dataLayer\r\n\t\t\t */\r\n\t\t\tclick: function(evt){\r\n\t\t\t\t//console.log(evt);\r\n\t\t\t\treturn window.dataLayer.push({\r\n\t\t\t\t\t'event' : 'chromeOffer',\r\n\t\t\t\t\t'eventCategory' : 'Chrome',\r\n\t\t\t\t\t'eventAction' : 'Chrome Offer',\r\n\t\t\t\t\t'eventLabel' : 'Click'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * Password checker on first char - only once per visit\r\n\t\t * @param {Object} evt Event object\r\n\t\t * @return {Int} Length of dataLayer array\r\n\t\t */\r\n\t\t'passwordCheck' : (function(){\r\n\t\t\tvar called = 0;\r\n\r\n\t\t\treturn function(evt){\r\n\t\t\t\tif(!called){\r\n\t\t\t\t\tcalled = 1;\r\n\t\t\t\t\t//console.log('passwordCheck event: %o', evt);\r\n\t\t\t\t\treturn window.dataLayer.push({\r\n\t\t\t\t\t\t'event' : 'passwordCheck', // First char filled\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t})()\r\n\t};\r\n\r\n\t// Bind events\r\n\t$(document).on('passwordCheck.avast', function(){\r\n\t\tmethods.track('passwordCheck');\r\n\t});\r\n\r\n\t///////////////////////////////////////////////////////////////////////////////////\r\n\r\n\t/*\r\n\t * Methods\r\n\t */\r\n\tvar methods = {\r\n\t\t/**\r\n\t\t * Track event\r\n\t\t * @param {String} evtName Event name. Looking for callback. Dot notation allowed.\r\n\t\t * @param {Object} [evtObj] Passes event object\r\n\t\t * @param {Function} [callback] Callback handler. If not defined in param, lookup on module internal callbacks storage is made.\r\n\t\t */\r\n\t\ttrack: function(evtName, evtObj, callback){\r\n\t\t\tvar handler = callback || trackEvents,\r\n\t\t\t\tspaces = (typeof evtName === 'string') ? evtName.split('.') : null,\r\n\t\t\t\targs = evtObj ? [evtObj] : [],\r\n\t\t\t\tspace,\r\n\t\t\t\ttoString = Object.prototype.toString;\r\n\r\n\t\t\t// TODO: Do not step into object cycles if callback is only plain function by default\r\n\t\t\tif ((toString.call(handler) === '[object Function]' || toString.call(handler) === '[object Object]') && spaces && spaces.length > 0){\r\n\t\t\t\tfor (var i = 0; i < spaces.length; i++) {\r\n\t\t\t\t\tspace = spaces[i];\r\n\t\t\t\t\tif (handler !== null && space in handler) {\r\n\t\t\t\t\t\thandler = handler[space];\r\n\r\n\t\t\t\t\t\t// Function founded earlier than in last cycle considered as incorrect.\r\n\t\t\t\t\t\t// So properties defined on functions are not allowed.\r\n\t\t\t\t\t\tif (toString.call(handler) === '[object Function]' && i !== (spaces.length - 1)) {\r\n\t\t\t\t\t\t\thandler = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof handler === 'function') {\r\n\t\t\t\treturn handler.apply(this, args); // FIXME: In window context? Really?\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Export methods\r\n\treturn methods;\r\n})());\r\n\n/**\r\n * Unserialize URL parameters from string to object\r\n * @version 1.1.0\r\n * @author Jiri Duchon \r\n * @module avast.url.unserialize\r\n * @param {string} [urlString]\r\n * @returns {Object}\r\n */\r\navm.define('avast.url.unserialize', function(urlString) {\r\n\t'use strict';\r\n\turlString = typeof urlString === 'undefined' ? location.search : urlString;\r\n\tif (typeof urlString === 'string') {\r\n\t\tvar urlObject = {},\r\n\t\t\turlQuery = urlString.replace(/\\#.*|.*\\?/g, '');\r\n\t\tif (urlQuery.length) {\r\n\t\t\tvar urlParameters = urlQuery.split('&'),\r\n\t\t\t\turlParametersLength = urlParameters.length,\r\n\t\t\t\turlParameter = [];\r\n\t\t\tfor (var i = 0; i < urlParametersLength; i++) {\r\n\t\t\t\turlParameter = urlParameters[i].split('=');\r\n\t\t\t\turlObject[decodeURIComponent(urlParameter[0])] = decodeURIComponent(urlParameter[1] || '');\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn urlObject;\r\n\t} else {\r\n\t\tthrow new Error('Invalid method arguments to avast.url.unserialize');\r\n\t}\r\n});\r\n\n/**\r\n * Avast UrlBag (adds encoded params to cart links)\r\n * @version 0.1.0\r\n * @author Vojtech Sir \r\n * @module avast.web.urlBag\r\n * @copyright Avast Software s.r.o ©2014\r\n */\r\navm.define('avast.web.urlBag', (function() {\r\n var urlBag = { \r\n data: {},\r\n addValue: function(key, value) {\r\n this.data[key] = String(value);\r\n },\r\n getData: function() {\r\n return this.data;\r\n },\r\n getEncodedData: function() {\r\n var base64 = this.base64encode(this.stringify(this.data));\r\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }, \r\n stringify: function(obj) {\r\n if (typeof JSON != 'undefined' && JSON && JSON.stringify) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n var t = typeof(obj);\r\n if (t != 'object' || obj === null) {\r\n if (t == 'string') {\r\n obj = '\"' + obj + '\"';\r\n }\r\n return String(obj);\r\n }\r\n else {\r\n var n, v, json = [], arr = (obj && obj.constructor == Array);\r\n\r\n for (n in obj) {\r\n v = obj[n]; t = typeof(v);\r\n if (t == 'string') v = '\"' + v + '\"';\r\n else if (t == 'object' && v !== null) v = this.stringify(v);\r\n json.push((arr ? \"\" : '\"' + n + '\":') + String(v));\r\n }\r\n return (arr ? '[' : '{') + String(json) + (arr ? ']' : '}');\r\n }\r\n },\r\n // http://phpjs.org/functions/base64_encode/\r\n base64encode: function(data) {\r\n if (!data) {\r\n return data;\r\n }\r\n\r\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '', tmp_arr = [];\r\n\r\n do { // pack three octets into four hexets\r\n o1 = data.charCodeAt(i++);\r\n o2 = data.charCodeAt(i++);\r\n o3 = data.charCodeAt(i++);\r\n\r\n bits = o1 << 16 | o2 << 8 | o3;\r\n\r\n h1 = bits >> 18 & 0x3f;\r\n h2 = bits >> 12 & 0x3f;\r\n h3 = bits >> 6 & 0x3f;\r\n h4 = bits & 0x3f;\r\n\r\n // use hexets to index into b64, and append result to encoded string\r\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\r\n } while (i < data.length);\r\n\r\n enc = tmp_arr.join('');\r\n var r = data.length % 3;\r\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\r\n }\r\n };\r\n\r\n return urlBag;\r\n\r\n })());\r\n\n/**\r\n * Wrapper for cookieStorage object\r\n * @version 1.1.0\r\n * @author Jiri Duchon \r\n * @module avast.storage.cookieStorage\r\n * @requires avast.storage.isCookieEnabled\r\n * @requires avast.storage.storageFactory\r\n */\r\navm.define('avast.storage.cookieStorage', (function() {\r\n\t'use strict';\r\n\tvar isCookieEnabled = avm.require('avast.storage.isCookieEnabled'),\r\n\t\tstorageFactory = avm.require('avast.storage.storageFactory'),\r\n\t\ttoString = Object.prototype.toString,\r\n\t\tkeys = function() {\r\n\t\t\treturn document.cookie.replace(/((?:^|\\s*;)[^=]+)(?=;|$)|^\\s*|\\s*(?:=[^;]*)?(?:\\1|$)/g, '').split(/\\s*(?:=[^;]*)?;\\s*/);\r\n\t\t},\r\n\t\tcookieStorage = {\r\n\t\t\tlength: document.cookie !== '' ? keys().length : 0,\r\n\r\n\t\t\t/**\r\n\t\t\t * Add key/value pair\r\n\t\t\t * @param {*} key\r\n\t\t\t * @param {*} value\r\n\t\t\t * @param {string|date} [expires]\r\n\t\t\t * @param {string} [path]\r\n\t\t\t * @param {string} [domain]\r\n\t\t\t * @param {boolean} [secure]\r\n\t\t\t */\r\n\t\t\tsetItem: function(key, value, expires, path, domain, secure) {\r\n\t\t\t\tif (typeof key !== 'undefined' && typeof value !== 'undefined') {\r\n\t\t\t\t\tvar regExp = /^(?:expires|max\\-age|path|domain|secure)$/i;\r\n\t\t\t\t\tkey = encodeURIComponent(key);\r\n\t\t\t\t\tvalue = encodeURIComponent(value);\r\n\t\t\t\t\tif (key && !regExp.test(key)) {\r\n\t\t\t\t\t\tif (document.cookie.indexOf(key) === -1) {\r\n\t\t\t\t\t\t\tthis.length++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (typeof expires === 'string') {\r\n\t\t\t\t\t\t\texpires = '; expires=' + expires;\r\n\t\t\t\t\t\t} else if (toString.call(expires) === '[object Date]') {\r\n\t\t\t\t\t\t\texpires = '; expires=' + expires.toUTCString();\r\n\t\t\t\t\t\t}\r\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' : '');\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.setItem');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get value associated with key\r\n\t\t\t * @param {*} key\r\n\t\t\t * @returns {string|null}\r\n\t\t\t */\r\n\t\t\tgetItem: function(key) {\r\n\t\t\t\tif (typeof key !== 'undefined') {\r\n\t\t\t\t\tvar regExp = new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$');\r\n\t\t\t\t\treturn decodeURIComponent(document.cookie.replace(regExp, '$1')) || null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.getItem');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Remove key/value pair\r\n\t\t\t * @param {*} key\r\n\t\t\t * @param {string} [path]\r\n\t\t\t * @param {string} [domain]\r\n\t\t\t */\r\n\t\t\tremoveItem: function(key, path, domain) {\r\n\t\t\t\tif (typeof key !== 'undefined') {\r\n\t\t\t\t\tkey = encodeURIComponent(key);\r\n\t\t\t\t\tif (document.cookie.indexOf(key) !== -1) {\r\n\t\t\t\t\t\tthis.length--;\r\n\t\t\t\t\t}\r\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 : '');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.removeItem');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get name of nth key\r\n\t\t\t * @param {number} n\r\n\t\t\t * @returns {string}\r\n\t\t\t */\r\n\t\t\tkey: function(n) {\r\n\t\t\t\tif (typeof n === 'number') {\r\n\t\t\t\t\tvar keysArray = keys(),\r\n\t\t\t\t\t\tkeysArrayLength = keysArray.length;\r\n\t\t\t\t\tif (n < keysArrayLength) {\r\n\t\t\t\t\t\treturn decodeURIComponent(keysArray[n]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Error('Invalid method arguments to avast.storage.cookieStorage.key');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Clear all items\r\n\t\t\t */\r\n\t\t\tclear: function() {\r\n\t\t\t\tvar keysArray = keys(),\r\n\t\t\t\t\tkeysArrayLength = keysArray.length;\r\n\t\t\t\tfor (var i = 0; i < keysArrayLength; i++) {\r\n\t\t\t\t\tthis.removeItem(keysArray[i]);\r\n\t\t\t\t}\r\n\t\t\t\tthis.length = document.cookie !== '' ? keys().length : 0;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\treturn isCookieEnabled ? cookieStorage : storageFactory();\r\n})());\r\n\n/**\r\n * Browser and OS detection\r\n * @version 1.2.0\r\n * @author Jiri Duchon \r\n * @module avast.detect\r\n * @requires avast.storage.isCookieEnabled\r\n * @requires avast.storage.isStorageEnabled\r\n * @param {string} [userAgent]\r\n * @param {string} [userLanguage]\r\n * @param {Object} [patterns]\r\n * @returns {Object}\r\n */\r\navm.define('avast.detect', function(userAgent, userLanguage, patterns) {\r\n\t'use strict';\r\n\tvar isCookieEnabled = avm.require('avast.storage.isCookieEnabled'),\r\n\t\tisStorageEnabled = avm.require('avast.storage.isStorageEnabled'),\r\n\t\ttoString = Object.prototype.toString,\r\n\t\thasOwnProperty = Object.prototype.hasOwnProperty;\r\n\tuserAgent = typeof userAgent === 'undefined' ? navigator.userAgent || (typeof navigator.appCodeName === 'string' && typeof navigator.appVersion === 'string' ? navigator.appCodeName + '/' + navigator.appVersion : '') : userAgent;\r\n\tuserLanguage = typeof userLanguage === 'undefined' ? navigator.userLanguage || navigator.language || '' : userLanguage;\r\n\tpatterns = typeof patterns === 'undefined' ? {\r\n\t\tbrowser: {\r\n\t\t\tAvast: {\r\n\t\t\t\tname: /avastium/,\r\n\t\t\t\tversion: /(?:avastium\\s\\()(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tOpera: {\r\n\t\t\t\tname: /opr|opera/,\r\n\t\t\t\tversion: /(?:opr\\/|opera(?:\\s|\\/)|version\\/)(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tEdge: {\r\n\t\t\t\tname: /edge/,\r\n\t\t\t\tversion: /(?:edge\\/(\\d+(?:\\.\\d+)+))/\r\n\t\t\t},\r\n\t\t\tChrome: {\r\n\t\t\t\tname: /chrome|crios|crmo/,\r\n\t\t\t\tversion: /(?:chrome|crios|crmo)\\/(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tFirefox: {\r\n\t\t\t\tname: /firefox|iceweasel/,\r\n\t\t\t\tversion: /(?:firefox|iceweasel)\\/(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tInternetExplorer: {\r\n\t\t\t\tname: /msie|trident/,\r\n\t\t\t\tversion: /(?:rv\\:|msie\\s)(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tSafari: {\r\n\t\t\t\tname: /safari/,\r\n\t\t\t\tversion: /(?:version|safari)\\/(\\d+(?:\\.\\d+)+)/\r\n\t\t\t}\r\n\t\t},\r\n\t\tos: {\r\n\t\t\tWindowsPhone: {\r\n\t\t\t\tname: /windows phone/,\r\n\t\t\t\tversion: /windows\\sphone\\s(?:os\\s)?(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tWindows: {\r\n\t\t\t\tname: /windows/,\r\n\t\t\t\tversion: {\r\n\t\t\t\t\t10: /windows nt 10.0/,\r\n\t\t\t\t\t8.1: /windows nt 6.3/,\r\n\t\t\t\t\t8: /windows nt 6.2/,\r\n\t\t\t\t\t7: /windows nt 6.1/,\r\n\t\t\t\t\tVista: /windows nt 6.0/,\r\n\t\t\t\t\tXP: /windows nt (?:5.1|5.2)/,\r\n\t\t\t\t\t2000: /windows nt 5.0/\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tAndroid: {\r\n\t\t\t\tname: /android/,\r\n\t\t\t\tversion: /android\\s(\\d+(?:\\.\\d+)+)/\r\n\t\t\t},\r\n\t\t\tIOS: {\r\n\t\t\t\tname: /iphone|ipad|ipod/,\r\n\t\t\t\tversion: /cpu\\s(?:iphone\\s)?os\\s(\\d+(?:\\_\\d+)+)/\r\n\t\t\t},\r\n\t\t\tMac: {\r\n\t\t\t\tname: /mac/,\r\n\t\t\t\tversion: /mac\\sos\\sx\\s(\\d+(?:\\_\\d+)+)/\r\n\t\t\t},\r\n\t\t\tLinux: {\r\n\t\t\t\tname: /linux/,\r\n\t\t\t\tversion: /linux\\s([^;]+)/\r\n\t\t\t},\r\n\t\t\tUnix: {\r\n\t\t\t\tname: /x11/,\r\n\t\t\t\tversion: /x11\\;\\s(?:u\\;)?([^;]+)/\r\n\t\t\t}\r\n\t\t}\r\n\t} : patterns;\r\n\tif (typeof userAgent === 'string' && typeof userLanguage === 'string' && typeof patterns === 'object' && patterns && typeof patterns.browser === 'object' && patterns.browser && typeof patterns.os === 'object' && patterns.os) {\r\n\t\tvar results = {\r\n\t\t\tbrowser: {\r\n\t\t\t\tuserAgent: userAgent.toLowerCase(),\r\n\t\t\t\tuserLanguage: userLanguage.toLowerCase(),\r\n\t\t\t\tisCookieEnabled: isCookieEnabled,\r\n\t\t\t\tisStorageEnabled: isStorageEnabled,\r\n\t\t\t\tname: '',\r\n\t\t\t\tversion: ''\r\n\t\t\t},\r\n\t\t\tos: {\r\n\t\t\t\tname: '',\r\n\t\t\t\tversion: ''\r\n\t\t\t}\r\n\t\t},\r\n\t\ttestRegExp = function(subPatterns, subResults) {\r\n\t\t\tvar name = '',\r\n\t\t\t\tisName = '',\r\n\t\t\t\tversion,\r\n\t\t\t\tsubversion,\r\n\t\t\t\tnameFound = false,\r\n\t\t\t\tsubversionFound = false;\r\n\t\t\tfor (var subPattern in subPatterns) {\r\n\t\t\t\tif (hasOwnProperty.call(subPatterns, subPattern)) {\r\n\t\t\t\t\tname = subPatterns[subPattern].name;\r\n\t\t\t\t\tversion = subPatterns[subPattern].version;\r\n\t\t\t\t\tisName = 'is' + subPattern;\r\n\t\t\t\t\tif (!nameFound && name.test(results.browser.userAgent)) {\r\n\t\t\t\t\t\tsubResults.name = subPattern;\r\n\t\t\t\t\t\tsubResults[isName] = true;\r\n\t\t\t\t\t\tif (toString.call(version) === '[object RegExp]' && version.test(results.browser.userAgent)) {\r\n\t\t\t\t\t\t\tsubResults.version = results.browser.userAgent.match(version)[1];\r\n\t\t\t\t\t\t} else if (toString.call(version) === '[object Object]') {\r\n\t\t\t\t\t\t\tfor (var item in version) {\r\n\t\t\t\t\t\t\t\tif (!subversionFound && hasOwnProperty.call(version, item)) {\r\n\t\t\t\t\t\t\t\t\tsubversion = version[item];\r\n\t\t\t\t\t\t\t\t\tif (toString.call(subversion) === '[object RegExp]' && subversion.test(results.browser.userAgent)) {\r\n\t\t\t\t\t\t\t\t\t\tsubResults.version = item;\r\n\t\t\t\t\t\t\t\t\t\tsubversionFound = true;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tnameFound = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsubResults[isName] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\ttestRegExp(patterns.browser, results.browser);\r\n\t\ttestRegExp(patterns.os, results.os);\r\n\t\treturn results;\r\n\t} else {\r\n\t\tthrow new Error('Invalid method arguments to avast.detect');\r\n\t}\r\n});\r\n\n/**\r\n * Avast Dynamic Header button\r\n * @version 1.1.0\r\n * @author Michal Samas \r\n * @module avast.web.dynamicHeaderButton\r\n * @requires jquery\r\n * @requires module:avast.detect\r\n * @copyright Avast Software\r\n */\r\navm.define('avast.web.dynamicHeaderButton', (function() {\r\n\tvar $ = avm.require('jquery'),\r\n\t\tdetect = avm.require('avast.detect'),\r\n\t\tpathRegex = /([^\\/.]+)(([^\\/]*)(\\.[^\\/.]+))?$/g,\r\n\t\tpathName = window.location.pathname.match(pathRegex) ? window.location.pathname.match(pathRegex)[0] : '',\r\n\t\tconfig = avastGlobals.web.navigation,\r\n\t\t$headerButton = $('.js-header-button'),\r\n\t\t$headerButtonSpan = $('.js-header-button span'),\r\n\t\tbuttonUpdater = function() {\r\n\t\t\t// Update download button link and text\r\n\t\t\tif ($.inArray(pathName, config.smbPages1) !== -1) {\r\n\t\t\t\t$headerButton.attr('href', config.links.downloadButtonLinks[pathName] || config.links.shopButtonLink);\r\n\t\t\t\t$headerButtonSpan.text(config.buyNow);\r\n\t\t\t} else if (pathName === 'cleanup') {\r\n\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t} else if (pathName === 'download-thank-you.php') {\r\n\t\t\t\t$headerButton.hide();\r\n\t\t\t} else if (pathName === 'wifi-finder') {\r\n\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t\tif (detect().os.isIOS) {\r\n\t\t\t\t\t$headerButton.attr('href', config.links.wifiFinder.iOS);\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"IWF\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'IWF');\r\n\t\t\t\t} else if (detect().os.isAndroid) {\r\n\t\t\t\t\t$headerButton.attr('href', config.links.wifiFinder.android);\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"AWF\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'AWF');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$headerButton.hide();\r\n\t\t\t\t}\r\n\t\t\t} else if (pathName === 'battery-saver') {\r\n\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t\tif (detect().os.isAndroid) {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"ABS-MARKET\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"ABS-MARKET\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'ABS-MARKET');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"ABS\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"ABS\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'ABS');\r\n\t\t\t\t}\r\n\t\t\t} else if (pathName === 'cleanup-android') {\r\n\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t\tif (detect().os.isAndroid) {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"ACL-MARKET\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"ACL-MARKET\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'ACL-MARKET');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"ACL\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"ACL\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'ACL');\r\n\t\t\t\t}\r\n\t\t\t} else if (pathName === 'android') {\r\n\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t\tif (detect().os.isAndroid) {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"AMS-MARKET\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"AMS-MARKET\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'AMS-MARKET');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$headerButton.attr('href', $('#top a.button[data-bi-download-name=\"AMS\"]').attr('href'));\r\n\t\t\t\t\t$headerButton.html($('#top a.button[data-bi-download-name=\"AMS\"]').html());\r\n\t\t\t\t\t$headerButton.attr('data-bi-download-name', 'AMS');\r\n\t\t\t\t}\r\n\t\t\t} else if ($.inArray(pathName, config.productPages) !== -1) {\r\n\t\t\t\tvar $pageButton = $('#top a.button'),\r\n\t\t\t\t\tplatforms = ['pc', 'android', 'mac', 'ios'],\r\n\t\t\t\t\tnoWinLogoPaths = ['cleanup', 'wifi-finder', 'secureline-vpn', 'passwords', 'free-mac-security', 'free-mobile-security', 'cleanup-android', 'battery-saver', 'secureme', 'photo-space', 'call-blocker', 'ios', 'mac', 'android'],\r\n\t\t\t\t\treplaceButton = function() {\r\n\t\t\t\t\t\t// Find visible button in #top element and replace Header button\r\n\t\t\t\t\t\t$pageButton.each(function() {\r\n\t\t\t\t\t\t\tif ($(this).css('display') !== 'none') {\r\n\t\t\t\t\t\t\t\t$headerButton.attr('href', $(this).attr('href'));\r\n\t\t\t\t\t\t\t\t$headerButton.html($(this).html());\r\n\t\t\t\t\t\t\t\t$headerButton.attr('data-bi-download-name', $(this).attr('data-bi-download-name'));\r\n\r\n\t\t\t\t\t\t\t\tif (pathName && noWinLogoPaths.indexOf(pathName) > -1) {\r\n\t\t\t\t\t\t\t\t\t// Check for windows icon class and update class in Header button\r\n\t\t\t\t\t\t\t\t\tif ($.inArray('logo-win', $(this).attr('class').split(' ')) === -1) {\r\n\t\t\t\t\t\t\t\t\t\t$headerButton.removeClass('logo-win');\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\treplaceButton();\r\n\r\n\t\t\t\t// Switch Header button on platform switch\r\n\t\t\t\t$(window).on('hashchange', function() {\r\n\t\t\t\t\tif ($.inArray(window.location.hash.substring(1), platforms) !== -1) {\r\n\t\t\t\t\t\treplaceButton();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn buttonUpdater;\r\n})());\r\n\n/**\n * Avast navigation\n * \n * @version 1.1.0\n * @author Jiri Maha , Michal Samas \n * @module avast.web.navigation\n * @requires jquery\n * @requires module:avast.detect\n * @copyright Avast Software\n */\navm.define('avast.web.navigation', (function(){\n\tvar detect = avm.require('avast.detect'),\n\t$ = avm.require('jquery'),\n\tdynamicHeaderButton = avm.require('avast.web.dynamicHeaderButton'),\n\tnavigation = {\n\t\tinit: function() {\n\t\t\tfunction __hasClass(el, cls) {\n\t\t\t\treturn el.classList === 'object' && el.classList.contains === 'function' ? el.classList.contains(cls) : (el.className + ' ').indexOf(cls + ' ') > -1;\n\t\t\t}\n\n\t\t\tfunction __addClass(elements, cls) {\n\t\t\t\tvar _elements = elements;\n\n\t\t\t\t// if there are no elements, we're done\n\t\t\t\tif (!_elements) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof _elements === 'string') {\n\t\t\t\t\t// if we have a selector, get the chosen _elements\n\t\t\t\t\t_elements = document.querySelectorAll(_elements);\n\t\t\t\t} else if (_elements.tagName) {\n\t\t\t\t\t// if we have a single DOM element, make it an array to simplify behavior\n\t\t\t\t\t_elements = [_elements];\n\t\t\t\t}\n\n\t\t\t\t// add class to all chosen _elements\n\t\t\t\tfor (var i = 0; i < _elements.length; i += 1) {\n\t\t\t\t\t// check classList support\n\t\t\t\t\tif (_elements[i].classList) {\n\t\t\t\t\t\t_elements[i].classList.add(cls);\n\t\t\t\t\t} else if (!__hasClass(_elements[i], cls)) {\n\t\t\t\t\t\t_elements[i].cls += ' ' + cls;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction __removeClass(elements, cls) {\n\t\t\t\tvar _elements = elements;\n\n\t\t\t\t// if there are no elements, we're done\n\t\t\t\tif (!_elements) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof _elements === 'string') {\n\t\t\t\t\t// if we have a selector, get the chosen _elements\n\t\t\t\t\t_elements = document.querySelectorAll(_elements);\n\t\t\t\t} else if (_elements.tagName) {\n\t\t\t\t\t// if we have a single DOM element, make it an array to simplify behavior\n\t\t\t\t\t_elements = [_elements];\n\t\t\t\t}\n\n\t\t\t\t// remove class from all chosen _elements\n\t\t\t\tfor (var i = 0; i < _elements.length; i += 1) {\n\t\t\t\t\t// check classList support\n\t\t\t\t\tif (_elements[i].classList) _elements[i].classList.remove(cls);else _elements[i].className = _elements[i].className.replace(new RegExp('\\\\b' + cls + '\\\\b', 'g'), '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Polyfill for \"Node.contains\" for IE8\n\t\t\tfunction contains(node) {\n\t\t\t\tif (!(0 in arguments)) {\n\t\t\t\t\tthrow new TypeError('1 argument is required');\n\t\t\t\t}\n\n\t\t\t\tdo {\n\t\t\t\t\tif (this === node) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t} while (node = node && node.parentNode);\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (!document.getElementsByClassName && Element.prototype) {\n\t\t\t\tHTMLDocument.prototype.contains = contains;\n\t\t\t\tElement.prototype.contains = contains;\n\t\t\t}\n\t\t\t// /Polyfill for \"Node.contains\" for IE8\n\n\t\t\t// Polyfill for \"addEventListener\" for IE8\n\t\t\t!window.addEventListener && (function (WindowPrototype, DocumentPrototype, ElementPrototype, addEventListener, removeEventListener, dispatchEvent, registry) {\n\t\t\t\tWindowPrototype[addEventListener] = DocumentPrototype[addEventListener] = ElementPrototype[addEventListener] = function (type, listener) {\n\t\t\t\t\tvar target = this;\n\n\t\t\t\t\tregistry.unshift([target, type, listener, function (event) {\n\t\t\t\t\t\tevent.currentTarget = target;\n\t\t\t\t\t\tevent.preventDefault = function () { event.returnValue = false };\n\t\t\t\t\t\tevent.stopPropagation = function () { event.cancelBubble = true };\n\t\t\t\t\t\tevent.target = event.srcElement || target;\n\n\t\t\t\t\t\tlistener.call(target, event);\n\t\t\t\t\t}]);\n\n\t\t\t\t\tthis.attachEvent(\"on\" + type, registry[0][3]);\n\t\t\t\t};\n\n\t\t\t\tWindowPrototype[removeEventListener] = DocumentPrototype[removeEventListener] = ElementPrototype[removeEventListener] = function (type, listener) {\n\t\t\t\t\tfor (var index = 0, register; register = registry[index]; ++index) {\n\t\t\t\t\t\tif (register[0] == this && register[1] == type && register[2] == listener) {\n\t\t\t\t\t\t\treturn this.detachEvent(\"on\" + type, registry.splice(index, 1)[0][3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tWindowPrototype[dispatchEvent] = DocumentPrototype[dispatchEvent] = ElementPrototype[dispatchEvent] = function (eventObject) {\n\t\t\t\t\treturn this.fireEvent(\"on\" + eventObject.type, eventObject);\n\t\t\t\t};\n\t\t\t})(Window.prototype, HTMLDocument.prototype, Element.prototype, \"addEventListener\", \"removeEventListener\", \"dispatchEvent\", []);\n\t\t\t// /Polyfill for \"addEventListener\" for IE8\n\n\t\t\t// Polyfill IE8 classList\n\t\t\t(function() {\n\t\t\t\t// helpers\n\t\t\t\tvar regExp = function(name) {\n\t\t\t\t\treturn new RegExp('(^| )'+ name +'( |$)');\n\t\t\t\t};\n\t\t\t\tvar forEach = function(list, fn, scope) {\n\t\t\t\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\t\t\t\tfn.call(scope, list[i]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// class list object with basic methods\n\t\t\t\tfunction ClassList(element) {\n\t\t\t\t\tthis.element = element;\n\t\t\t\t}\n\n\t\t\t\tClassList.prototype = {\n\t\t\t\t\tadd: function() {\n\t\t\t\t\t\tforEach(arguments, function(name) {\n\t\t\t\t\t\t\tif (!this.contains(name)) {\n\t\t\t\t\t\t\t\tthis.element.className += ' '+ name;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t},\n\t\t\t\t\tremove: function() {\n\t\t\t\t\t\tforEach(arguments, function(name) {\n\t\t\t\t\t\t\tthis.element.className =\n\t\t\t\t\t\t\t\tthis.element.className.replace(regExp(name), '');\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t},\n\t\t\t\t\ttoggle: function(name) {\n\t\t\t\t\t\treturn this.contains(name) \n\t\t\t\t\t\t\t? (this.remove(name), false) : (this.add(name), true);\n\t\t\t\t\t},\n\t\t\t\t\tcontains: function(name) {\n\t\t\t\t\t\treturn regExp(name).test(this.element.className);\n\t\t\t\t\t},\n\t\t\t\t\t// bonus..\n\t\t\t\t\treplace: function(oldName, newName) {\n\t\t\t\t\t\tthis.remove(oldName), this.add(newName);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// IE8/9, Safari\n\t\t\t\tif (!('classList' in Element.prototype)) {\n\t\t\t\t\tObject.defineProperty(Element.prototype, 'classList', {\n\t\t\t\t\t\tget: function() {\n\t\t\t\t\t\t\treturn new ClassList(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// replace() support for others\n\t\t\t\tif (window.DOMTokenList && DOMTokenList.prototype.replace == null) {\n\t\t\t\t\tDOMTokenList.prototype.replace = ClassList.prototype.replace;\n\t\t\t\t}\n\t\t\t})();\n\t\t\t// /Polyfill IE8 classList\n\n\t\t\tvar domLoad = function domLoad() {\n\t\t\t\tvar $body = document.body;\n\t\t\t\tvar pageAttr = document.documentElement.getAttribute('data-nav-page');\n\t\t\t\tvar $header = document.querySelector('.js-header');\n\t\t\t\tvar $navigation = document.querySelector('#main-nav');\n\t\t\t\tvar $navDesktopMenuToggles = document.querySelectorAll('[data-nav-menu-toggle]');\n\t\t\t\tvar $navDesktopMenus = $('#main-nav-desktop [data-nav-menu]');\n\t\t\t\tvar $navDesktopPlatformToggles = $('#main-nav-desktop [data-nav-platform-toggle]');\n\t\t\t\tvar $navDesktopPlatforms = $('#main-nav-desktop [data-nav-platform]');\n\n\t\t\t\t// submenu\n\n\t\t\t\tvar _loop = function _loop(i) {\n\t\t\t\t\tvar $toggle = $navDesktopMenuToggles[i];\n\t\t\t\t\tvar menu = $toggle.getAttribute('data-nav-menu-toggle');\n\n\t\t\t\t\tif ($toggle.getAttribute('data-nav-menu-toggle') === pageAttr) {\n\t\t\t\t\t\t__addClass($toggle, 'is-page');\n\t\t\t\t\t}\n\n\t\t\t\t\t$toggle.addEventListener('click', function () {\n\t\t\t\t\t\tif (!__hasClass($toggle, 'is-active')) {\n\t\t\t\t\t\t\t// toggle\n\t\t\t\t\t\t\tfor (var j = 0; j < $navDesktopMenuToggles.length; j += 1) {\n\t\t\t\t\t\t\t\t__removeClass($navDesktopMenuToggles[j], 'is-active');\n\t\t\t\t\t\t\t\t__removeClass($navDesktopMenuToggles[j], 'is-page');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__addClass($toggle, 'is-active');\n\n\t\t\t\t\t\t\t// menu\n\t\t\t\t\t\t\tfor (var _j = 0; _j < $navDesktopMenus.length; _j += 1) {\n\t\t\t\t\t\t\t\tvar item = $navDesktopMenus[_j];\n\t\t\t\t\t\t\t\tif (item.getAttribute('data-nav-menu') === menu) {\n\t\t\t\t\t\t\t\t\t__addClass(item, 'is-active');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t__removeClass(item, 'is-active');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t__removeClass($toggle, 'is-active');\n\t\t\t\t\t\t\t// menu\n\t\t\t\t\t\t\tfor (var _j2 = 0; _j2 < $navDesktopMenus.length; _j2 += 1) {\n\t\t\t\t\t\t\t\t__removeClass($navDesktopMenus[_j2], 'is-active');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (var _j3 = 0; _j3 < $navDesktopMenuToggles.length; _j3 += 1) {\n\t\t\t\t\t\t\t\tvar _item = $navDesktopMenuToggles[_j3];\n\t\t\t\t\t\t\t\tif (_item.getAttribute('data-nav-menu-toggle') === pageAttr) {\n\t\t\t\t\t\t\t\t\t__addClass(_item, 'is-page');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < $navDesktopMenuToggles.length; i += 1) {\n\t\t\t\t\t_loop(i);\n\t\t\t\t}\n\n\t\t\t\t// subcategories\n\n\t\t\t\tvar _loop2 = function _loop2(i) {\n\t\t\t\t\tvar $toggle = $navDesktopPlatformToggles[i];\n\t\t\t\t\tvar category = $toggle.getAttribute('data-nav-platform-toggle');\n\n\t\t\t\t\t// $toggle.addEventListener('click', (event) => {\n\t\t\t\t\t// event.stopPropagation();\n\t\t\t\t\t// });\n\n\t\t\t\t\t$toggle.addEventListener('click', function () {\n\n\t\t\t\t\t\t// toggle\n\t\t\t\t\t\tfor (var j = 0; j < $navDesktopPlatformToggles.length; j += 1) {\n\t\t\t\t\t\t\t__removeClass($navDesktopPlatformToggles[j], 'is-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__addClass($toggle, 'is-active');\n\n\t\t\t\t\t\t// categories\n\t\t\t\t\t\tfor (var _j4 = 0; _j4 < $navDesktopPlatforms.length; _j4 += 1) {\n\t\t\t\t\t\t\tvar item = $navDesktopPlatforms[_j4];\n\n\t\t\t\t\t\t\tif (item.getAttribute('data-nav-platform') === category) {\n\t\t\t\t\t\t\t\t__addClass(item, 'is-active');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t__removeClass(item, 'is-active');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// event.preventDefault();\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < $navDesktopPlatformToggles.length; i += 1) {\n\t\t\t\t\t_loop2(i);\n\t\t\t\t}\n\n\t\t\t\t// hide menu on mouse click anywhere else then navigation itself\n\t\t\t\t$body.addEventListener('click', function (event) {\n\t\t\t\t\tif (event.target.id !== 'main-nav' && !$navigation.contains(event.target) && event.target.id !== 'header' && !$header.contains(event.target)) {\n\t\t\t\t\t\t// toggle\n\t\t\t\t\t\tfor (var i = 0; i < $navDesktopMenuToggles.length; i += 1) {\n\t\t\t\t\t\t\t__removeClass($navDesktopMenuToggles[i], 'is-active');\n\t\t\t\t\t\t\tif ($navDesktopMenuToggles[i].getAttribute('data-nav-menu-toggle') === pageAttr) {\n\t\t\t\t\t\t\t\t__addClass($navDesktopMenuToggles[i], 'is-page');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// menus\n\t\t\t\t\t\tfor (var _i = 0; _i < $navDesktopMenus.length; _i += 1) {\n\t\t\t\t\t\t\t__removeClass($navDesktopMenus[_i], 'is-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\n\t\t\t\t//\n\t\t\t\t// mobile\n\t\t\t\tvar $navMobileFadeScreen = $('#nav-mobile-fade-screen');\n\t\t\t\tvar $navMobileToggles = $('[data-nav-mobile-toggle]');\n\t\t\t\tvar $navMobileSectionToggles = $('[data-nav-mobile-level-toggle]');\n\t\t\t\tvar $navMobileLevel1 = $('.nav-mobile-level-1');\n\t\t\t\tvar $navMobileLevel2 = $('[data-nav-mobile-level]');\n\t\t\t\tvar $navMobilePlatformToggles = $('[data-nav-mobile-platform-toggle]');\n\t\t\t\tvar $navMobilePlatforms = $('[data-nav-mobile-platform]');\n\n\t\t\t\t// mobile menu\n\n\t\t\t\tvar _loop3 = function _loop3(i) {\n\t\t\t\t\tvar $toggle = $navMobileToggles[i];\n\t\t\t\t\tvar value = $toggle.getAttribute('data-nav-mobile-toggle');\n\n\t\t\t\t\t$toggle.addEventListener('click', function () {\n\t\t\t\t\t\tif (value === 'open') {\n\t\t\t\t\t\t\t__addClass($navMobileLevel1, 'is-active');\n\t\t\t\t\t\t\t__addClass($navMobileFadeScreen, 'is-active');\n\t\t\t\t\t\t\t__addClass($body, 'no-scroll');\n\t\t\t\t\t\t} else if (value === 'close') {\n\t\t\t\t\t\t\t__removeClass($navMobileLevel1, 'is-active');\n\t\t\t\t\t\t\t// animated menu fade in\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t__removeClass($body, 'no-scroll');\n\t\t\t\t\t\t\t\t__removeClass($navMobileFadeScreen, 'is-active');\n\t\t\t\t\t\t\t}, 470);\n\t\t\t\t\t\t\tfor (var j = 0; j < $navMobileLevel2.length; j += 1) {\n\t\t\t\t\t\t\t\t__removeClass($navMobileLevel2[j], 'is-active');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value === 'previous') {\n\t\t\t\t\t\t\tfor (var _j5 = 0; _j5 < $navMobileLevel2.length; _j5 += 1) {\n\t\t\t\t\t\t\t\t__removeClass($navMobileLevel2[_j5], 'is-active');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < $navMobileToggles.length; i += 1) {\n\t\t\t\t\t_loop3(i);\n\t\t\t\t}\n\n\t\t\t\t// mobile sections\n\n\t\t\t\tvar _loop4 = function _loop4(i) {\n\t\t\t\t\tvar $toggle = $navMobileSectionToggles[i];\n\t\t\t\t\tvar value = $toggle.getAttribute('data-nav-mobile-level-toggle');\n\t\t\t\t\tvar $target = $('#main-nav-mobile [data-nav-mobile-level=\"' + value + '\"]');\n\n\t\t\t\t\t$toggle.addEventListener('click', function () {\n\t\t\t\t\t\t__addClass($target, 'is-active');\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < $navMobileSectionToggles.length; i += 1) {\n\t\t\t\t\t_loop4(i);\n\t\t\t\t}\n\n\t\t\t\t// mobile platforms\n\n\t\t\t\tvar _loop5 = function _loop5(i) {\n\t\t\t\t\tvar $toggle = $navMobilePlatformToggles[i];\n\t\t\t\t\tvar value = $toggle.getAttribute('data-nav-mobile-platform-toggle');\n\n\t\t\t\t\t$toggle.addEventListener('click', function () {\n\t\t\t\t\t\tif (!__hasClass($toggle, 'is-active')) {\n\t\t\t\t\t\t\t// toggle\n\t\t\t\t\t\t\tfor (var j = 0; j < $navMobilePlatformToggles.length; j += 1) {\n\t\t\t\t\t\t\t\t__removeClass($navMobilePlatformToggles[j], 'is-active');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t__addClass($toggle, 'is-active');\n\n\t\t\t\t\t\t\t// menu\n\t\t\t\t\t\t\tfor (var _j6 = 0; _j6 < $navMobilePlatforms.length; _j6 += 1) {\n\t\t\t\t\t\t\t\tvar item = $navMobilePlatforms[_j6];\n\n\t\t\t\t\t\t\t\tif (item.getAttribute('data-nav-mobile-platform') === value) {\n\t\t\t\t\t\t\t\t\t__addClass(item, 'is-active');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t__removeClass(item, 'is-active');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < $navMobilePlatformToggles.length; i += 1) {\n\t\t\t\t\t_loop5(i);\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Add classes to subcategories according to detected platform\n\t\t\t\t * @param {String} category \n\t\t\t\t */\n\t\t\t\tfunction setDefaultCategory(category) {\n\t\t\t\t\tfor (var i = 0; i < $navDesktopPlatforms.length; i++) {\n\t\t\t\t\t\tif ($navDesktopPlatforms[i].getAttribute('data-nav-platform') === category) {\n\t\t\t\t\t\t\t__addClass($navDesktopPlatforms[i], 'is-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var j = 0; j < $navDesktopPlatformToggles.length; j++) {\n\t\t\t\t\t\tif ($navDesktopPlatformToggles[j].getAttribute('data-nav-platform-toggle') === category) {\n\t\t\t\t\t\t\t__addClass($navDesktopPlatformToggles[j], 'is-active');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var i = 0; i < $navMobilePlatforms.length; i++) {\n\t\t\t\t\t\t//category = 'pc';\n\t\t\t\t\t\tif ($navMobilePlatforms[i].getAttribute('data-nav-mobile-platform') === category) {\n\t\t\t\t\t\t\t__addClass($navMobilePlatforms[i], 'is-active');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var j = 0; j < $navMobilePlatformToggles.length; j++) {\n\t\t\t\t\t\t//category = 'pc';\n\t\t\t\t\t\tif ($navMobilePlatformToggles[j].getAttribute('data-nav-mobile-platform-toggle') === category) {\n\t\t\t\t\t\t\t__addClass($navMobilePlatformToggles[j], 'is-active');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (detect().os.isAndroid) {\n\t\t\t\t\tsetDefaultCategory('android');\n\t\t\t\t} else if (detect().os.isIOS) {\n\t\t\t\t\tsetDefaultCategory('ios');\n\t\t\t\t} else if (detect().os.isMac) {\n\t\t\t\t\tsetDefaultCategory('mac');\n\t\t\t\t} else {\n\t\t\t\t\tsetDefaultCategory('pc');\n\t\t\t\t}\n\n\t\t\t\t// Flexbox detection\n\t\t\t\tfunction detectFlexboxSupport() {\n\t\t\t\t\tvar d = document.documentElement.style;\n\n\t\t\t\t\tif ('flexWrap' in d || 'WebkitFlexWrap' in d || 'msFlexWrap' in d) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('body').addClass('no-flex');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdetectFlexboxSupport();\n\t\t\t\t// /Flexbox detection\n\n\t\t\t\t/**\n\t\t\t\t * Push tracking when off click from navigation closes navigation\n\t\t\t\t */\n\t\t\t\tvar navigationToggleHistory = [false, false];\n\t\t\t\tvar selectors = [$('.nav-menu-home'), $('.nav-menu-business'), $('.nav-mobile-level-1'), $('.nav-mobile-level-2'), $('[data-nav-menu-toggle]')];\n\n\t\t\t\tfunction offClickTracking() {\n\t\t\t\t\tif (typeof window.dataLayer.push === 'function') {\n\t\t\t\t\t\twindow.dataLayer.push({\n\t\t\t\t\t\t\t'event': 'navClose',\n\t\t\t\t\t\t\t'eventLabel':'outsideClick' \n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update attributes on Header desktop buttons when navigation toggles\n\t\t\t\tfunction buttonAttributesToggler() {\n\t\t\t\t\tvar $buttons = $('#nav-bar-desktop [data-bi-nav-menu-status]'),\n\t\t\t\t\t\t$desktopNavigation = $('#nav-bar-desktop'),\n\t\t\t\t\t\t$desktopMenus = $('.nav-section-menu'),\n\t\t\t\t\t\tindex = $desktopMenus.index($('.nav-section-menu.is-active'));\n\n\t\t\t\t\tif ($desktopNavigation.css('display') !== 'none') {\n\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\t$buttons.attr('data-bi-nav-menu-status', 'open');\n\t\t\t\t\t\t\t$buttons.eq(index).attr('data-bi-nav-menu-status', 'close');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$buttons.attr('data-bi-nav-menu-status', 'open');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction navigationHistory(event) {\n\t\t\t\t\tfor (var i = 0; i < selectors.length; i++) {\n\t\t\t\t\t\tif (selectors[i].hasClass('is-active')) {\n\t\t\t\t\t\t\tnavigationToggleHistory.shift();\n\t\t\t\t\t\t\tnavigationToggleHistory.push(true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($('#main-header, #main-nav').has($(event.target)).length === 0 || $(event.target).is('#nav-mobile-fade-screen') || $(event.target).is('[data-nav-mobile-toggle=\"close\"]') || $(event.target).is('.icon-close') || $(event.target).is('[data-nav-menu-toggle=\"close\"]') || $(event.target).is('[data-nav-menu-toggle] span') && !$(event.target).parent().hasClass('is-active')) {\n\t\t\t\t\t\tnavigationToggleHistory.shift();\n\t\t\t\t\t\tnavigationToggleHistory.push(false);\n\t\t\t\t\t}\n\n\t\t\t\t\t//console.log('navigationToggleHistory', navigationToggleHistory);\n\n\t\t\t\t\t// Track off navigation click that closes navigation\n\t\t\t\t\tif (navigationToggleHistory[0] === true && navigationToggleHistory[1] === false && $('#main-header, #main-nav').has($(event.target)).length === 0) {\n\t\t\t\t\t\toffClickTracking();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$(document).click(function(event) {\n\t\t\t\t\tnavigationHistory(event);\n\t\t\t\t\tbuttonAttributesToggler();\n\t\t\t\t});\n\n\t\t\t\t// Update navbar links according to URL\n\t\t\t\tfunction navbarLinksUpdater() {\n\t\t\t\t\tvar pathRegex = /([^\\/.]+)(([^\\/]*)(\\.[^\\/.]+))?$/g,\n\t\t\t\t\t\tpathName = window.location.pathname.match(pathRegex)[0],\n\t\t\t\t\t\t$shopLink = $('.nav-bar-section-secondary li:nth-child(2) a').add('.nav-mobile-section-secondary li:nth-child(2) a'),\n\t\t\t\t\t\t$accountLink = $('.nav-bar-section-secondary li:nth-child(3) a').add('.nav-mobile-section-secondary li:nth-child(3) a'),\n\t\t\t\t\t\tconfig = avastGlobals.web.navigation;\n\n\t\t\t\t\t// Update shop link\n\t\t\t\t\tif ($.inArray(pathName, config.smbPages1) !== -1) {\n\t\t\t\t\t\t$shopLink.attr('href', config.links.shopButtonLink);\n\t\t\t\t\t\t$shopLink.hide();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update Acount link\n\t\t\t\t\tif ($.inArray(pathName, config.smbPages2) !== -1) {\n\t\t\t\t\t\t$accountLink.attr('href', config.links.accountButtonLink);\n\t\t\t\t\t} else if ($.inArray(pathName, config.smbPages1) !== -1 && $.inArray(pathName, config.smbPages2) === -1) {\n\t\t\t\t\t\t$accountLink.parent().hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnavbarLinksUpdater();\n\t\t\t\tdynamicHeaderButton();\n\t\t\t};\n\n\t\t\tvar winLoad = function winLoad() {\n\t\t\t\tvar $navDesktop = document.querySelector('#main-nav-desktop');\n\t\t\t\tvar $subcategories = $navDesktop.querySelectorAll('.nav-menu-subcategory');\n\n\t\t\t\tvar subcategoryHeight = 0;\n\t\t\t\t// find the heightest subcategory and set the height to all other subcategories\n\t\t\t\tfor (var i = 0; i < $subcategories.length; i += 1) {\n\t\t\t\t\tvar $item = $subcategories[i];\n\t\t\t\t\tvar itemHeight = $item.offsetHeight;\n\n\t\t\t\t\tsubcategoryHeight = itemHeight > subcategoryHeight ? itemHeight : subcategoryHeight;\n\t\t\t\t}\n\n\t\t\t\tif (subcategoryHeight > 200) {\n\t\t\t\t\tfor (var _i2 = 0; _i2 < $subcategories.length; _i2 += 1) {\n\t\t\t\t\t\tvar _$item = $subcategories[_i2];\n\t\t\t\t\t\t_$item.style.height = subcategoryHeight + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.onload = function () {\n\t\t\t\t/*domLoad();\n\t\t\t\twinLoad();*/\n\t\t\t};\n\t\t\tdomLoad();\n\t\t\twinLoad();\n\t\t}\n\t};\n\n\treturn navigation;\n})());\n/**\r\n * Avast Platform Switcher\r\n * @version 1.2.1\r\n * @author Michal Samas \r\n * @module avast.web.platformSwitcher\r\n * @requires jquery\r\n * @requires avast.detect\r\n * @requires avast.web.router\r\n */\r\navm.define('avast.web.platformSwitcher', (function () {\r\n\t'use strict';\r\n\tvar $ = avm.require('jquery'),\r\n\t\tdetect = avm.require('avast.detect'),\r\n\t\trouter = avm.require('avast.web.router'),\r\n\t\tandroid = 'android',\r\n\t\tios = 'ios',\r\n\t\tmac = 'mac',\r\n\t\tpc = 'pc',\r\n\t\tplatforms = [android, ios, mac, pc],\r\n\t\t$body = $('body'),\r\n\t\t$jsPlatformSwitcher = $('.js-platform-switcher'),\r\n\t\t$popupButtons = $('.overlay-box .js-platform-switcher'),\r\n\t\t$overlayBoxClose = $('.overlay-box .close');\r\n\treturn {\r\n\t\tinit: function () {\r\n\t\t\tvar self = this;\r\n\t\t\tself.detectPlatform();\r\n\t\t\tself.switcher();\r\n\t\t\tself.closeOverlayBox();\r\n\t\t\tself.showButtons();\r\n\t\t\trouter.set({\r\n\t\t\t\t'pc': function() {\r\n\t\t\t\t\tself.addBodyClass(pc);\r\n\t\t\t\t},\r\n\t\t\t\t'mac': function() {\r\n\t\t\t\t\tself.addBodyClass(mac);\r\n\t\t\t\t},\r\n\t\t\t\t'android': function() {\r\n\t\t\t\t\tself.addBodyClass(android);\r\n\t\t\t\t},\r\n\t\t\t\t'ios': function() {\r\n\t\t\t\t\tself.addBodyClass(ios);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\t// change root class and add hash to URL according to detected device\r\n\t\tdetectPlatform: function () {\r\n\t\t\tvar hash = window.location.hash,\r\n\t\t\t\tplatform = hash.substring(1),\r\n\t\t\t\trootPlatform;\r\n\t\t\t// add root class to body according to detected platform or detected hash from URL\r\n\t\t\tif (detect().os.isAndroid) {\r\n\t\t\t\trootPlatform = android;\r\n\t\t\t} else if (detect().os.isIOS) {\r\n\t\t\t\trootPlatform = ios;\r\n\t\t\t} else if (detect().os.isMac) {\r\n\t\t\t\trootPlatform = mac;\r\n\t\t\t} else {\r\n\t\t\t\trootPlatform = pc;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (platforms.indexOf(platform) < 0) {\r\n\t\t\t\tplatform = rootPlatform;\r\n\t\t\t}\r\n\r\n\t\t\tthis.addRootClass(rootPlatform);\r\n\t\t\twindow.location.hash = platform;\r\n\t\t},\r\n\t\t// add class according to used device\r\n\t\taddRootClass: function (platform) {\r\n\t\t\t$body.addClass('js-root-' + platform);\r\n\t\t},\r\n\t\t// remove platform classes\r\n\t\tresetPlatformClass: function () {\r\n\t\t\t$body.removeClass('js-pc js-android js-ios js-mac');\r\n\t\t},\r\n\t\t// remove platform classes and add class to body\r\n\t\taddBodyClass: function (platform) {\r\n\t\t\tthis.resetPlatformClass();\r\n\t\t\t$body.addClass('js-' + platform);\r\n\t\t},\r\n\t\t// remove platform classes and add platform class according to clicked element\r\n\t\tswitcher: function () {\r\n\t\t\t$jsPlatformSwitcher.on('click', function () {\r\n\t\t\t\tvar self = $(this),\r\n\t\t\t\t\tselectPlatform;\r\n\t\t\t\tif (self.hasClass('js-android')) {\r\n\t\t\t\t\tselectPlatform = android;\r\n\t\t\t\t} else if (self.hasClass('js-ios')) {\r\n\t\t\t\t\tselectPlatform = ios;\r\n\t\t\t\t} else if (self.hasClass('js-mac')) {\r\n\t\t\t\t\tselectPlatform = mac;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tselectPlatform = pc;\r\n\t\t\t\t}\r\n\t\t\t\twindow.location.hash = selectPlatform;\r\n\t\t\t});\r\n\t\t},\r\n\t\t// close overlay-box when platform clicked\r\n\t\tcloseOverlayBox: function () {\r\n\t\t\t$popupButtons.on('click', function (event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t$overlayBoxClose.trigger('click');\r\n\t\t\t});\r\n\t\t},\r\n\t\t// add class to body to show buttons, they are hidden by default to prevent showing all buttons at once on DOM load\r\n\t\tshowButtons: function () {\r\n\t\t\t$body.addClass('js-show-buttons');\r\n\t\t}\r\n\t};\r\n})());\n/**\r\n * Real User Monitoring - performance and error tracking\r\n * @version 3.2.2\r\n * @author Michal Samas, Ales Gabriel\r\n * @requires avast.detect\r\n */\r\n\r\navm.define('avast.rum', (function() {\r\n\t'use strict';\r\n\r\n\tvar detect = avm.require('avast.detect');\r\n\treturn {\r\n\t/**\r\n\t* init Bind performance tracking to onload event\r\n\t*/\r\n\t\tinit: function(){\r\n\t\t\tvar rum = this;\r\n\r\n\t\t\trum.perfUrl = '//t.av.st/api/rum/v1/';\r\n\t\t\trum.logData = [];\r\n\t\t\trum.limit = 30;\r\n\t\t\trum.trackType = {\r\n\t\t\t\t'load' : 'trackHit',\r\n\t\t\t\t'error' : 'trackError',\r\n\t\t\t\t'ecommerce' : 'trackCart',\r\n\t\t\t\t'custom' : 'trackCustom'\r\n\t\t\t};\r\n\r\n\t\t\t// Send rum data\r\n\t\t\tif(typeof navigator !== 'undefined' && Function.prototype.bind){\r\n\t\t\t\trum.addEvent(window, 'load', rum.track.bind(this, 'load'));\r\n\t\t\t} else {\r\n\t\t\t\trum.addEvent(window, 'load', function(evt){rum.track('load', evt);}); // Wrapped in fn because of scope.\r\n\t\t\t}\r\n\r\n\t\t\t// Send onError window data\r\n\t\t\twindow.onerror = function(message, url, line){\r\n\t\t\t\tvar errEvtObj = {\r\n\t\t\t\t\t'message': message\r\n\t\t\t\t};\r\n\t\t\t\trum.track('error', errEvtObj);\r\n\t\t\t};\r\n\r\n\t\t\treturn rum;\r\n\t\t},\r\n\t/**\r\n\t* getDomain\r\n\t* @return {String} hostname\r\n\t*/\r\n\t\tgetDomain: function(){\r\n\t\t\treturn window.location.hostname;\r\n\t\t},\r\n\t/**\r\n\t* getPageId Useful indentificator of page\r\n\t* @return {String} Page pathname\r\n\t*/\r\n\t\tgetPageId: function(){\r\n\t\t\treturn window.location.pathname ? window.location.pathname.split('/').pop() : 'N/A';\r\n\t\t},\r\n\t/**\r\n\t* getPageId Useful indentificator of page\r\n\t* @return {String} Page pathname\r\n\t* @todo Use avastGlobals variable\r\n\t*/\r\n\t\tgetContentId: function(){\r\n\t\t\tvar contentId = '';\r\n\r\n\t\t\tif(window && window.avastGlobals && window.avastGlobals.web) {\r\n\t\t\t\tcontentId = window.avastGlobals.web.pageName;\r\n\t\t\t}\r\n\t\t\treturn contentId;\r\n\t\t},\r\n\t/**\r\n\t* getLocale\r\n\t* @return {String} Region\r\n\t* @todo Use avastGlobals variable\r\n\t*/\r\n\t\tgetLocale: function(){\r\n\t\t\treturn (typeof locale !== 'undefined') ? locale : 'N/A';\r\n\t\t},\r\n\t/**\r\n\t* getBrowser Info about client browser.\r\n\t* @return {Object} [description]\r\n\t*/\r\n\t\tgetBrowser: function(){\r\n\t\t\tvar detection = detect(),\r\n\t\t\t\tbrowser = {};\r\n\r\n\t\t\tbrowser.name = detection.browser.name;\r\n\t\t\tbrowser.ver = detection.browser.version;\r\n\t\t\tbrowser.lang = detection.browser.userLanguage;\r\n\r\n\t\t\treturn browser;\r\n\t\t},\r\n\t/**\r\n\t* getPerformance Collect performance data.\r\n\t* @return {Object} Performance data.\r\n\t*\r\n\t* \r\n\t* Other useful numbers:\r\n\t* domInteractive - domLoading = how long take the browser parsing all of the HTML and DOM construction\r\n\t* domContentLoaded - domInteractive = typically CSSOM building time\r\n\t*\r\n\t* more info: https://developers.google.com/web/fundamentals/performance/critical-rendering-path/measure-crp\r\n\t* \r\n\t*/\r\n\t\tgetPerformance: function(){\r\n\t\t\tvar wp = window.performance || window.webkitPerformance || window.msPerformance || window.mozPerformance,\r\n\t\t\t\twpt = (wp !== undefined) ? wp.timing : wp,\r\n\t\t\t\twpTimes = {};\r\n\r\n\t\t\tif (wpt !== undefined) {\r\n\t\t\t\tif( wpt.unloadEventEnd >= wpt.unloadEventStart ){\r\n\t\t\t\t\twpTimes.unloadTime = wpt.unloadEventEnd - wpt.unloadEventStart;\r\n\t\t\t\t}\r\n\t\t\t\twpTimes.redirectTime = wpt.redirectEnd - wpt.redirectStart;\r\n\t\t\t\twpTimes.domainLookupTime = wpt.domainLookupEnd - wpt.domainLookupStart;\r\n\t\t\t\twpTimes.connectTime = wpt.connectEnd - wpt.connectStart;\r\n\t\t\t\twpTimes.requestTime = wpt.responseStart - wpt.requestStart;\r\n\t\t\t\twpTimes.responseTime = wpt.responseEnd - wpt.responseStart;\r\n\t\t\t\twpTimes.dom = {\r\n\t\t\t\t\tinteractiveTime: wpt.domInteractive - wpt.domLoading, // Typically DOM is ready\r\n\t\t\t\t\tloadEventStartTime: wpt.domContentLoadedEventStart - wpt.domInteractive, // Typically DOM and CSSOM are ready. If there is no parser blocking JavaScript then DOMContentLoaded will fire immediately after domInteractive.\r\n\t\t\t\t\tcontentLoadedEventTime: wpt.domContentLoadedEventEnd - wpt.domContentLoadedEventStart, // Typically execution of ondomready scripts.\r\n\t\t\t\t\tresourceLodedTime: wpt.domComplete - wpt.domContentLoadedEventEnd\r\n\t\t\t\t};\r\n\t\t\t\twpTimes.domTime = wpt.domComplete - wpt.domLoading;\r\n\t\t\t\tif(wpt.loadEventEnd > 0 && wpt.navigationStart > 0 && wpt.loadEventStart > 0){\r\n\t\t\t\t\twpTimes.loadEventTime = wpt.loadEventEnd - wpt.loadEventStart;\r\n\t\t\t\t\twpTimes.fullTime = wpt.loadEventEnd - wpt.navigationStart;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn wpTimes;\r\n\t\t},\r\n\t/**\r\n\t* Get error data to logData\r\n\t* @param {string} message\r\n\t*/\r\n\t\tgetError: function(evt) {\r\n\t\t\tvar newError = {},\r\n\t\t\t\trum = this; \r\n\r\n\t\t\tif (document.URL) {\r\n\t\t\t\tnewError.url = document.URL;\r\n\t\t\t}\r\n\t\t\tif (document.referrer) {\r\n\t\t\t\tnewError.referrer = document.referrer;\r\n\t\t\t}\r\n\t\t\tif(evt){\r\n\t\t\t\tnewError.message = evt.message; \r\n\t\t\t}\r\n\r\n\t\t\treturn newError;\r\n\t\t},\r\n\t/**\r\n\t* track Complete collecting tracking data and start sending beacon request\r\n\t* @param {string} type Event type. \r\n\t* @param {object} evt Event object.\r\n\t*/\r\n\t\ttrack: function(type, evt, pageId, loc){\r\n\t\t\tvar timeout,\r\n\t\t\t\trum = this,\r\n\t\t\t\tdata = {},\r\n\t\t\t\ttrackType,\r\n\t\t\t\ttypeMsg;\r\n\r\n\r\n\t\t\t// Push general data\r\n\t\t\tdata = {\r\n\t\t\t\tdomain: rum.getDomain(),\r\n\t\t\t\tpageId: pageId ? pageId : rum.getPageId(),\r\n\t\t\t\tcontentId: rum.getContentId(),\r\n\t\t\t\tlocale: loc ? loc : rum.getLocale(),\r\n\t\t\t\tbrowser: rum.getBrowser()\r\n\t\t\t}; \r\n\r\n\t\t\t// Resolve track type\r\n\t\t\ttrackType = rum.getTrackType(type);\r\n\r\n\t\t\tif(trackType && evt) {\r\n\t\t\t\tdata[trackType] = true;\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif(arguments.length === 0 ){\r\n\t\t\t\t\ttypeMsg = 'Missing RUM type and event object.' + typeof type;\r\n\t\t\t\t}\r\n\t\t\t\tif(arguments.length === 1 ){\r\n\t\t\t\t\ttypeMsg = 'Missing RUM type or event object.';\r\n\t\t\t\t}\r\n\t\t\t\tif(arguments.length > 1 ){\r\n\t\t\t\t\ttypeMsg = 'Incorrect RUM type: ' + typeof type;\r\n\t\t\t\t}\r\n\t\t\t\t// console.log(typeMsg);\r\n\t\t\t\t// rum.track('error', {message: typeMsg});\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Request limits exceded\r\n\t\t\tif(rum.logData.length > (rum.limit - 1)){\r\n\t\t\t\tdata.requestLimit = {\r\n\t\t\t\t\tmessage: 'Requests limit exceeded.',\r\n\t\t\t\t\tcount: rum.logData.length\r\n\t\t\t\t};\r\n\t\t\t\t//rum.destroy();\r\n\t\t\t}\r\n\r\n\t\t\tif(type && rum.logData.length < (rum.limit + 1)) {\r\n\r\n\t\t\t\t// Send performance on load\r\n\t\t\t\tif(type === 'load'){\r\n\t\t\t\t\t// setTimeout with 0 length have to be used to finish loadEventEnd.\r\n\t\t\t\t\ttimeout = setTimeout(function(){\r\n\t\t\t\t\t\tdata.performance = rum.getPerformance();\r\n\t\t\t\t\t\trum.logData.push(data);\r\n\t\t\t\t\t\trum.sendRum(1);\r\n\t\t\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\t\t}, 0);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Send window error by default or custom error\r\n\t\t\t\t// avast.rum.track('error', {message: 'Pure custom error message'});\r\n\t\t\t\tif(type === 'error') { \r\n\t\t\t\t\tevt = rum.getError(evt);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Custom data\r\n\t\t\t\tdata[type] = evt;\r\n\r\n\t\t\t\trum.logData.push(data);\r\n\t\t\t\trum.sendRum();\r\n\t\t\t}\r\n\t\t},\r\n\t/**\r\n\t* [sendRum description]\r\n\t* @return {[type]} [description]\r\n\t*/\r\n\t\tsendRum: function(merge){\r\n\t\t\tvar rum = this,\r\n\t\t\t\turl = rum.perfUrl ? rum.perfUrl : null,\r\n\t\t\t\tdata = rum.logData ? rum.logData.slice(-1).pop() : {};\r\n\t\t\t// TODO: merge multiple data with same type.\r\n\t\t\tif(merge && data){\r\n\t\t\t\tfor (var i = 0; rum.logData.length > i + 1; i++) {\r\n\t\t\t\t\tif(!rum.logData[i].trackError){\r\n\t\t\t\t\t\tfor (var prop in rum.logData[i]){\r\n\t\t\t\t\t\t\tif(!data[prop]){\r\n\t\t\t\t\t\t\t\tdata[prop] = rum.logData[i][prop];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// Allow custom pageId\r\n\t\t\t\t\t\t\tif(rum.logData[i].pageId){\r\n\t\t\t\t\t\t\t\tdata.pageId = rum.logData[i].pageId;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdata = rum.logData.slice(-1).pop();\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tdata = JSON.stringify(data);\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// console.log(e)\r\n\t\t\t\tdata = null;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Send Use beacon if available\r\n\t\t\tif(data){\r\n\t\t\t\tif(typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function' && url){\r\n\t\t\t\t\tnavigator.sendBeacon(url, data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trum.sendImg(url, data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//console.log('rum.logData: %o', rum.logData);\r\n\t\t},\r\n\t/**\r\n\t* [sendImg description]\r\n\t* @return {[type]} [description]\r\n\t*/\r\n\t\tsendImg: function(url, data){\r\n\t\t\tvar i = document.createElement('img');\r\n\t\t\tvar d = encodeURIComponent(data);\r\n\t\t\tvar b = document.getElementsByTagName('body').item(0);\r\n\r\n\t\t\ti.setAttribute('src', url + '?q=' + d);\r\n\t\t\t// i.style.display = 'none';\r\n\t\t\ti.width = 1;\r\n\t\t\ti.height = 1;\r\n\t\t\tif(b){\r\n\t\t\t\tb.appendChild(i); \r\n\t\t\t}\r\n\t\t},\r\n\t/**\r\n\t* getTrackType\r\n\t* @param {string} type Type of track event \r\n\t* @return {dtring} Hit type\r\n\t*/\r\n\t\tgetTrackType: function(type){\r\n\t\t\tvar rum = this,\r\n\t\t\t\ttrackType;\r\n\r\n\t\t\tif(rum.trackType && rum.trackType[type]){\r\n\t\t\t\treturn rum.trackType[type]; \r\n\t\t\t}\r\n\t\t},\r\n\t/**\r\n\t* pushData Collect optional data before beacon is send. \r\n\t* @param {string} type Type of event.\r\n\t* @param {object} data Tracking data.\r\n\t* @param {string} pageId Custom pageId, rewrite default.\r\n\t* @param {object} loc Custom locale.\r\n\t*/\r\n\t\tpushData: function(type, data, pageId, loc){\r\n\t\t\tvar rum = this,\r\n\t\t\t\ttData = {},\r\n\t\t\t\ttrackType = rum.getTrackType(type);\r\n\r\n\t\t\tif(typeof type === 'string' && data && rum.logData && trackType){\r\n\t\t\t\ttData[trackType] = true;\r\n\t\t\t\ttData[type] = data;\r\n\t\t\t\t// Allow custom pageId\r\n\t\t\t\tif(typeof pageId === 'string') {\r\n\t\t\t\t\ttData.pageId = pageId;\r\n\t\t\t\t}\r\n\t\t\t\t// Allow custom location\r\n\t\t\t\tif(typeof loc === 'string') {\r\n\t\t\t\t\ttData.locale = loc;\r\n\t\t\t\t}\r\n\t\t\t\trum.logData.push(tData);\r\n\t\t\t}\r\n\t\t},\r\n\t\tdestroy: function(){\r\n\t\t\tvar rum = this;\r\n\r\n\t\t\trum.removeEvent(window, 'load', rum.track );\r\n\r\n\t\t\t// TODO: clear log array?\r\n\t\t},\r\n\r\n\t/**\r\n\t* HELPERS\r\n\t*/\r\n\t/**\r\n\t* [addEvent description] - ejohn flexible-javascript-events\r\n\t* @param {[type]} obj [description]\r\n\t* @param {[type]} type [description]\r\n\t* @param {Function} fn [description]\r\n\t*/\r\n\t\taddEvent: function ( obj, type, fn ){\r\n\t\t\tif (obj.addEventListener){\r\n\t\t\t\tobj.addEventListener(type, fn, false);\r\n\t\t\t} else if (obj.attachEvent){\r\n\t\t\t\tobj['e'+type+fn] = fn;\r\n\t\t\t\tobj[type+fn] = function() {\r\n\t\t\t\t\tobj['e'+type+fn](window.event);\r\n\t\t\t\t};\r\n\t\t\t\tobj.attachEvent('on'+type, obj[type+fn]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tremoveEvent: function( obj, type, fn ) {\r\n\t\t\tif ( obj.detachEvent ) {\r\n\t\t\t\tobj.detachEvent( 'on'+type, obj[type+fn] );\r\n\t\t\t\tobj[type+fn] = null;\r\n\t\t\t} else\r\n\t\t\t\tobj.removeEventListener( type, fn, false );\r\n\t\t}\r\n\t};\r\n})());\r\n\nvar cookieStorage = avm.require('avast.storage.cookieStorage'),\r\n getUrlParameter = function getUrlParameter(sParam) {\r\n var sPageURL = decodeURIComponent(window.location.search.substring(1)),\r\n sURLVariables = sPageURL.split('&'),\r\n sParameterName,\r\n i;\r\n\r\n for (i = 0; i < sURLVariables.length; i++) {\r\n sParameterName = sURLVariables[i].split('=');\r\n\r\n if (sParameterName[0] === sParam) {\r\n return sParameterName[1] === undefined ? true : sParameterName[1];\r\n }\r\n }\r\n },\r\n getExpirationTime = function (hours) {\r\n var now = new Date();\r\n now.setTime(now.getTime() + hours * 3600 * 1000);\r\n return now.toUTCString();\r\n };\r\n\r\nif (getUrlParameter('gclsrc') && getUrlParameter('gclid')) {\r\n cookieStorage.setItem('gclid-avast', getUrlParameter('gclid'), getExpirationTime(24), '/', 'avast.com', false);\r\n}\n/**\r\n * BXslider wrapper\r\n * @version 0.1.0\r\n * @author Milan Adam , Ales Gabriel \r\n * @module avast.web.slider\r\n * @requires jquery\r\n */\r\n\r\navm.define('avast.web.slider', (function(){\r\n \r\n var $ = avm.require('jquery');\r\n var rum = avm.require('avast.rum');\r\n\r\n var slider = {\r\n /**\r\n * @var bxSlider slider - instance of slider\r\n */\r\n slider:null,\r\n /**\r\n * Slider default options\r\n * @var boolean pager - creating pager or not\r\n * @var boolean controls - creating controls(prev/next) or not\r\n * @var boolean auto - start scrolling or not\r\n * @var int pause - pause between scrolling\r\n */\r\n options:{\r\n pager: true,\r\n controls:false,\r\n auto:true,\r\n pause:20000,\r\n prevDomEl:\".prev\",\r\n nextDomEl:\".next\",\r\n subheaderDomEl:\"#subheader ul.home li\",\r\n textPagerDomEl:\".slide-text\",\r\n useCSS: false\r\n },\r\n /**\r\n * Initialization\r\n * @param string type - choosing predefined slider\r\n * @param string cDomEl - slider contnet wrapper\r\n * @param object params - parameters rewriting default options\r\n */\r\n init:function(type,cDomEl,params){\r\n var root = this;\r\n var settings = this.options;\r\n var context = $(cDomEl).closest('.AVsizer').parent();\r\n\r\n if(params !== undefined){\r\n for(var param in params){\r\n settings[param] = params[param];\r\n }\r\n }\r\n\r\n if(type === null) type = \"\";\r\n switch(type){\r\n case \"v9\":\r\n var slideLocked = false;\r\n var pagerEls = context.find(root.options.textPagerDomEl).children();\r\n settings.mode = 'fade';\r\n settings.speed = 500;\r\n settings.onSlideBefore = function($slideElement, oldIndex, newIndex){\r\n pagerEls.removeClass('active');\r\n pagerEls.eq(newIndex).addClass('active');\r\n slideLocked = true;\r\n };\r\n settings.onSlideAfter = function($slideElement, oldIndex, newIndex){\r\n slideLocked = false;\r\n };\r\n\r\n\r\n // Create slider\r\n this.slider = $(cDomEl).bxSlider(settings);\r\n context.find(settings.prevDomEl).click(function(e){\r\n root.slider.goToPrevSlide();\r\n root.slider.stopAuto();\r\n return false;\r\n });\r\n context.find(settings.nextDomEl).click(function(e){\r\n root.slider.goToNextSlide();\r\n root.slider.stopAuto();\r\n return false;\r\n });\r\n $('.slide-text').children(':not(hr)').on('click', function(){\r\n var i = pagerEls.index(this);\r\n if (!slideLocked){\r\n pagerEls.removeClass('active');\r\n pagerEls.eq(i).addClass('active');\r\n root.slider.stopAuto();\r\n root.slider.goToSlide(i);\r\n }\r\n });\r\n break;\r\n\r\n case \"v9hp\":\r\n // Create slider\r\n settings.mode = 'fade';\r\n settings.speed = 900;\r\n settings.onSlideBefore = function($slideElement, oldIndex, newIndex){\r\n var klasPrefix = \"bg-slide-\",\r\n klas = klasPrefix + (newIndex + 1);\r\n\r\n\r\n $('#top').removeClass(function(i, c) {\r\n var klas = c.match(/bg-slide-\\d+/g);\r\n return klas ? klas.join(' ') : false;\r\n });\r\n $('#top').addClass(klas);\r\n };\r\n this.slider = $(cDomEl).bxSlider(settings);\r\n context.find(settings.prevDomEl).click(function(e){\r\n root.slider.goToPrevSlide();\r\n return false;\r\n });\r\n context.find(settings.nextDomEl).click(function(e){\r\n root.slider.goToNextSlide();\r\n return false;\r\n });\r\n break;\r\n\r\n case \"hp\":\r\n settings.onBeforeSlide = function(currentSlide, totalSlides){\r\n $(root.options.subheaderDomEl).removeClass('active');\r\n var i = currentSlide + 1;\r\n $(root.options.subheaderDomEl+':nth-child('+i+')').addClass('active');\r\n };\r\n this.slider = $(cDomEl).bxSlider(settings);\r\n $(settings.prevDomEl).click(function(){\r\n root.slider.goToPrevSlide();\r\n $(root.options.subheaderDomEl).removeClass('active');\r\n var i = root.slider.getCurrentSlide() + 1;\r\n $(root.options.subheaderDomEl+':nth-child('+i+')').addClass('active');\r\n return false;\r\n });\r\n\r\n $(settings.nextDomEl).click(function(){\r\n root.slider.goToNextSlide();\r\n $(root.options.subheaderDomEl).removeClass('active');\r\n var i = root.slider.getCurrentSlide() + 1;\r\n $(root.options.subheaderDomEl+':nth-child('+i+')').addClass('active');\r\n return false;\r\n });\r\n\r\n $(settings.subheaderDomEl).on('click',function(){\r\n var thumbIndex = $(root.options.subheaderDomEl).index(this);\r\n root.slider.goToSlide(thumbIndex);\r\n\r\n return false;\r\n });\r\n\r\n $(settings.subheaderDomEl+':first').addClass('active');\r\n break;\r\n\r\n case \"awards\":\r\n if($(cDomEl + \" .frame\").length > settings.maxSlides){\r\n var awardsSlider = $(cDomEl).bxSlider(params);\r\n } else {\r\n $(params.nextSelector).hide();\r\n $(params.prevSelector).hide();\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n \r\n return this.slider;\r\n },\r\n getSlider:function(){\r\n return this.slider;\r\n },\r\n forceSlider : function (slider){\r\n return function(){\r\n if(slider) {\r\n var currentSlide = slider.getCurrentSlide();\r\n slider.reloadSlider();\r\n }\r\n };\r\n }\r\n };\r\n\r\n return slider;\r\n \r\n})());\r\n\n/**\r\n * Display Chrome Offer in non-chrome browsers\r\n * @version 1.0.0\r\n * @author Ales Gabriel \r\n * @module avast.web.chromeBanner\r\n * @requires jquery\r\n * @requires avast.detect\r\n */\r\navm.define('avast.web.chromeBanner', (function () {\r\n\t'use strict';\r\n\r\n\tvar $ = avm.require('jquery');\r\n\tvar detect = avm.require('avast.detect')();\r\n\tvar urlParams = avm.require('avast.url.unserialize')();\r\n\tvar tracker = avm.require('avast.web.tracker');\r\n\r\n\t// Chrome banner\r\n\tvar chromeBanner = {\r\n\t\tinit: function(){\r\n\t\t\tvar hasBanner = $('#offer-chrome').length;\r\n\t\t\tvar isChrome = detect.browser.isChrome;\r\n\t\t\tvar product = (typeof urlParams.product === 'string') ? urlParams.product : '';\r\n\t\t\tvar isMsBuild = (product.indexOf('-ONLINE-MS') > -1) ? true : false;\r\n\r\n\t\t\tif(hasBanner){\r\n\t\t\t\tif(!isChrome && !isMsBuild){\r\n\t\t\t\t\tthis.show();\r\n\t\t\t\t\t$('#offer-chrome').on('click', '.button', this.trackClick);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tshow: function(e){\r\n\t\t\tvar url = document.location.href,\r\n\t\t\t\tpExt = url.match(/[?&]p_ext=([^&]*)/),\r\n\t\t\t\tpExtVal = pExt ? pExt[1].toLowerCase() : '';\r\n\r\n\t\t\tif (url.indexOf('?') > -1) {\r\n\t\t\t\turl = url.substr(0, url.indexOf(\"?\"));\r\n\t\t\t}\r\n\r\n\t\t\tif(pExtVal.indexOf('chrome') == -1){\r\n\t\t\t\t$('#offer-chrome').show();\r\n\t\t\t\ttracker.track('chromeOffer.view', e);\r\n\t\t\t}\r\n\t\t},\r\n\t\ttrackClick: function(e){ \r\n\t\t\ttracker.track('chromeOffer.click', e);\r\n\t\t}\r\n\t};\r\n\t\r\n\treturn chromeBanner;\r\n\r\n})());\r\n\n/**\r\n * Async client info\r\n * @version 1.0.3\r\n * @author Ales Gabriel \r\n * @module avast.web.clientInfo\r\n * @requires avast.event.emitter\r\n * @copyright Avast Software s.r.o ©2017\r\n */\r\n\r\navm.define('avast.web.clientInfo', (function(){\r\n\t'use strict';\r\n\r\n\tvar Emitter = avm.require('avast.event.emitter'),\r\n\t\trum = avm.require('avast.rum');\r\n\r\n\tvar infoValue,\r\n\t\tclientInfo = {\r\n\t\t\tsendResourceTiming: function(){\r\n\t\t\t\tvar resources, resource;\r\n\r\n\t\t\t\tif (rum && window.performance && typeof window.performance.getEntriesByType === 'function') {\r\n\t\t\t\t\tresources = window.performance.getEntriesByType(\"resource\");\r\n\r\n\t\t\t\t\tif (resources && Array.prototype.filter) {\r\n\t\t\t\t\t\tresource = resources.filter(function(res){\r\n\t\t\t\t\t\t\tif (typeof res.name === 'string' && res.name.indexOf('/client.js') > -1) {\r\n\t\t\t\t\t\t\t\treturn res;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(resource.length){\r\n\t\t\t\t\t\t\trum.pushData('custom', {\r\n\t\t\t\t\t\t\t\tresource: {\r\n\t\t\t\t\t\t\t\t\t'client_js': {\r\n\t\t\t\t\t\t\t\t\t\tduration: resource[0].duration,\r\n\t\t\t\t\t\t\t\t\t\tfetchStart: resource[0].fetchStart,\r\n\t\t\t\t\t\t\t\t\t\tresponseEnd: resource[0].responseEnd,\r\n\t\t\t\t\t\t\t\t\t\tstartTime: resource[0].startTime,\r\n\t\t\t\t\t\t\t\t\t\tname: resource[0].name,\r\n\t\t\t\t\t\t\t\t\t\tentryType: resource[0].entryType,\r\n\t\t\t\t\t\t\t\t\t\tinitiatorType: resource[0].initiatorType\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn resource;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tdescriptor = {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn infoValue;\r\n\t\t\t},\r\n\t\t\tset: function(value) {\r\n\t\t\t\t// Set value\r\n\t\t\t\tinfoValue = value;\r\n\r\n\t\t\t\t// Emitt event\r\n\t\t\t\tclientInfo.emit('change', value);\r\n\r\n\t\t\t\t// Send resource timing RUM\r\n\t\t\t\tclientInfo.sendResourceTiming();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t// Define client property if not set\r\n\twindow.avastGlobals = window.avastGlobals || {};\r\n\tif (!window.avastGlobals.client) {\r\n\t\ttry {\r\n\t\t\tObject.defineProperty(window.avastGlobals, 'client', descriptor);\r\n\t\t} catch(e) {\r\n\t\t\tif (rum) rum.track('error', {message: 'avast.web.clientInfo throws error: ' + e.message});\r\n\t\t}\r\n\t}\r\n\r\n\t// Mix-in emitter to clientInfo object\r\n\tif(typeof Emitter === 'function'){\r\n\t\tEmitter(clientInfo);\r\n\t}\r\n\r\n\treturn clientInfo;\r\n})());\r\n\n/**\r\n * Navigation tracking\r\n * @version 1.0.0\r\n * @author Michal Samas\r\n * @requires jquery\r\n * @requires avast.rum\r\n */\r\navm.define('avast.web.navigationTracking', (function () {\r\n\t'use strict';\r\n\tvar $ = avm.require('jquery'),\r\n\t\trum = avm.require('avast.rum'),\r\n\t\t$navigation = $('.nav'),\r\n\t\tnavigationControls = ['nav-controls-close', 'nav-controls-levelup'],\r\n\t\tnavigationItems = {\r\n\t\t\t'button': {\r\n\t\t\t\titem: 'Compare',\r\n\t\t\t\turl: 'compare-antivirus'\r\n\t\t\t},\r\n\t\t\t'nav-controls-levelup': {\r\n\t\t\t\titem: 'Back',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'nav-controls-close': {\r\n\t\t\t\titem: 'Close',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-0': {\r\n\t\t\t\titem: 'PC / Laptop',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-1': {\r\n\t\t\t\titem: 'Mac',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-2': {\r\n\t\t\t\titem: 'Android',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-3': {\r\n\t\t\t\titem: 'iPhone / iPad',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-4': {\r\n\t\t\t\titem: 'Business',\r\n\t\t\t\turl: ''\r\n\t\t\t},\r\n\t\t\t'i-5': {\r\n\t\t\t\titem: 'Education',\r\n\t\t\t\turl: 'education'\r\n\t\t\t},\r\n\t\t\t'i-6': {\r\n\t\t\t\titem: 'Online Support',\r\n\t\t\t\turl: 'support'\r\n\t\t\t},\r\n\t\t\t'i-7': {\r\n\t\t\t\titem: 'Company',\r\n\t\t\t\turl: 'about'\r\n\t\t\t},\r\n\t\t\t'i-8': {\r\n\t\t\t\titem: 'Technology',\r\n\t\t\t\turl: 'technology'\r\n\t\t\t},\r\n\t\t\t'i-9': {\r\n\t\t\t\titem: 'Jobs',\r\n\t\t\t\turl: 'careers'\r\n\t\t\t},\r\n\t\t\t'i-10': {\r\n\t\t\t\titem: 'Premium Tech Support',\r\n\t\t\t\turl: 'total-care'\r\n\t\t\t},\r\n\t\t\t'i-11': {\r\n\t\t\t\titem: 'Academy',\r\n\t\t\t\turl: 'c-online-threats'\r\n\t\t\t},\r\n\t\t\t'i-0-0': {\r\n\t\t\t\titem: 'Premier',\r\n\t\t\t\turl: 'premier'\r\n\t\t\t},\r\n\t\t\t'i-0-1': {\r\n\t\t\t\titem: 'Internet Security',\r\n\t\t\t\turl: 'internet-security'\r\n\t\t\t},\r\n\t\t\t'i-0-2': {\r\n\t\t\t\titem: 'Pro Antivirus',\r\n\t\t\t\turl: 'pro-antivirus'\r\n\t\t\t},\r\n\t\t\t'i-0-3': {\r\n\t\t\t\titem: 'Free Antivirus',\r\n\t\t\t\turl: 'free-antivirus-download'\r\n\t\t\t},\r\n\t\t\t'i-0-4': {\r\n\t\t\t\titem: 'SecureLine',\r\n\t\t\t\turl: 'secureline-vpn#pc'\r\n\t\t\t},\r\n\t\t\t'i-0-5': {\r\n\t\t\t\titem: 'Passwords',\r\n\t\t\t\turl: 'passwords#pc'\r\n\t\t\t},\r\n\t\t\t'i-0-6': {\r\n\t\t\t\titem: 'Cleanup',\r\n\t\t\t\turl: 'cleanup'\r\n\t\t\t},\r\n\t\t\t'i-0-7': {\r\n\t\t\t\titem: 'Browser Cleanup',\r\n\t\t\t\turl: 'browser-cleanup'\r\n\t\t\t},\r\n\t\t\t'i-1-0': {\r\n\t\t\t\titem: 'Free Mac Security',\r\n\t\t\t\turl: 'free-mac-security'\r\n\t\t\t},\r\n\t\t\t'i-1-1': {\r\n\t\t\t\titem: 'SecureLine',\r\n\t\t\t\turl: 'secureline-vpn#mac'\r\n\t\t\t},\r\n\t\t\t'i-1-2': {\r\n\t\t\t\titem: 'Passwords',\r\n\t\t\t\turl: 'passwords-mac'\r\n\t\t\t},\r\n\t\t\t'i-2-0': {\r\n\t\t\t\titem: 'Free Mobile Security',\r\n\t\t\t\turl: 'free-mobile-security'\r\n\t\t\t},\r\n\t\t\t'i-2-1': {\r\n\t\t\t\titem: 'Anti-Theft',\r\n\t\t\t\turl: 'anti-theft'\r\n\t\t\t},\r\n\t\t\t'i-2-2': {\r\n\t\t\t\titem: 'SecureLine',\r\n\t\t\t\turl: 'secureline-vpn#android'\r\n\t\t\t},\r\n\t\t\t'i-2-3': {\r\n\t\t\t\titem: 'Passwords',\r\n\t\t\t\turl: 'passwords#android'\r\n\t\t\t},\r\n\t\t\t'i-2-4': {\r\n\t\t\t\titem: 'Cleanup',\r\n\t\t\t\turl: 'cleanup-android'\r\n\t\t\t},\r\n\t\t\t'i-2-5': {\r\n\t\t\t\titem: 'Battery Saver',\r\n\t\t\t\turl: 'battery-saver'\r\n\t\t\t},\r\n\t\t\t'i-2-6': {\r\n\t\t\t\titem: 'Wi-Fi Finder',\r\n\t\t\t\turl: 'wifi-finder'\r\n\t\t\t},\r\n\t\t\t'i-3-0': {\r\n\t\t\t\titem: 'SecureLine',\r\n\t\t\t\turl: 'secureline-vpn#ios'\r\n\t\t\t},\r\n\t\t\t'i-3-1': {\r\n\t\t\t\titem: 'Passwords',\r\n\t\t\t\turl: 'passwords#ios'\r\n\t\t\t},\r\n\t\t\t'i-3-2': {\r\n\t\t\t\titem: 'Wi-Fi Finder',\r\n\t\t\t\turl: 'wifi-finder'\r\n\t\t\t},\r\n\t\t\t'i-3-3': {\r\n\t\t\t\titem: 'SecureMe',\r\n\t\t\t\turl: 'secureme'\r\n\t\t\t},\r\n\t\t\t'i-3-4': {\r\n\t\t\t\titem: 'Photo Space',\r\n\t\t\t\turl: 'photo-space'\r\n\t\t\t},\r\n\t\t\t'i-4-0': {\r\n\t\t\t\titem: 'Overview',\r\n\t\t\t\turl: 'business'\r\n\t\t\t},\r\n\t\t\t'i-4-1': {\r\n\t\t\t\titem: 'Endpoint Protection Suite Plus',\r\n\t\t\t\turl: 'endpoint-protection-suite-plus'\r\n\t\t\t},\r\n\t\t\t'i-4-2': {\r\n\t\t\t\titem: 'Most Popular',\r\n\t\t\t\turl: 'endpoint-protection-suite'\r\n\t\t\t},\r\n\t\t\t'i-4-3': {\r\n\t\t\t\titem: 'Endpoint Protection Plus',\r\n\t\t\t\turl: 'endpoint-protection-plus'\r\n\t\t\t},\r\n\t\t\t'i-4-4': {\r\n\t\t\t\titem: 'Endpoint Protection',\r\n\t\t\t\turl: 'endpoint-protection'\r\n\t\t\t},\r\n\t\t\t'i-4-5': {\r\n\t\t\t\titem: 'Avast for Business',\r\n\t\t\t\turl: 'avast-for-business'\r\n\t\t\t},\r\n\t\t\t'i-4-6': {\r\n\t\t\t\titem: 'Email Server Security',\r\n\t\t\t\turl: 'email-server-security'\r\n\t\t\t},\r\n\t\t\t'i-4-7': {\r\n\t\t\t\titem: 'File Server Security',\r\n\t\t\t\turl: 'file-server-security'\r\n\t\t\t},\r\n\t\t\t'i-4-8': {\r\n\t\t\t\titem: 'Linux Security',\r\n\t\t\t\turl: 'linux-server-antivirus'\r\n\t\t\t},\r\n\t\t\t'i-4-9': {\r\n\t\t\t\titem: 'Avast Virtual Mobile Platform',\r\n\t\t\t\turl: 'enterprise'\r\n\t\t\t},\r\n\t\t\t'i-4-10': {\r\n\t\t\t\titem: 'Avast for Education',\r\n\t\t\t\turl: 'education'\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn {\r\n\t\t/**\r\n\t\t * Find navigation item object in navigationItems\r\n\t\t * @param {string} [item]\r\n\t\t * @returns {object}\r\n\t\t */\r\n\t\tfindNavigationItem: function(item) {\r\n\t\t\tfor (var key in navigationItems) {\r\n\t\t\t\tif (key === item) {\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\titem.nav = navigationItems[key];\r\n\t\t\t\t\treturn item;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tinit: function() {\r\n\t\t\tvar self = this;\r\n\t\t\t//rum.init();\r\n\t\t\t$navigation.on('click', function(event) {\r\n\t\t\t\tvar eventTargetClass = $(event.target).attr('class');\r\n\r\n\t\t\t\t// Normal list item was clicked\r\n\t\t\t\tif (eventTargetClass === 'icon') {\r\n\t\t\t\t\trum.track('custom', self.findNavigationItem(event.target.parentElement.id));\r\n\t\t\t\t// Compare button or list item description was clicked\r\n\t\t\t\t} else if (typeof eventTargetClass === 'undefined') {\r\n\t\t\t\t\t// Description was clicked\r\n\t\t\t\t\tif (event.target.parentElement.className === 'icon') {\r\n\t\t\t\t\t\trum.track('custom', self.findNavigationItem($(event.target).parent().parent().attr('id')));\r\n\t\t\t\t\t// Compare button was clicked\r\n\t\t\t\t\t} else if (event.target.parentElement.className.split(' ').indexOf('button') > -1) {\r\n\t\t\t\t\t\trum.track('custom', self.findNavigationItem('button'));\r\n\t\t\t\t\t}\r\n\t\t\t\t// Navigation controls have been clicked\r\n\t\t\t\t} else if (navigationControls.indexOf(eventTargetClass) > -1) {\r\n\t\t\t\t\trum.track('custom', self.findNavigationItem(eventTargetClass));\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n})());\n/**\r\n * Avast Aswparam (adds /ASWPARAM to cart links)\r\n * @version 0.3.0\r\n * @author Vojtech Sir , Ales Gabriel \r\n * @module avast.web.aswparam\r\n * @requires module:avast.web.urlBag\r\n * @requires module:jquery\r\n * @copyright Avast Software s.r.o ©2015\r\n */\r\n\r\navm.define('avast.web.aswparam', (function() {\r\n\r\n var $ = avm.require('jquery'),\r\n urlBag = avm.require('avast.web.urlBag'),\r\n asyncClientInfo = avm.require('avast.web.clientInfo');\r\n\r\n var aswparam = {\r\n inited: false,\r\n cartLinks: {\r\n 'CX': {\r\n urls: ['store.avast.com'],\r\n paramPattern: '/ASWPARAM.%urlBagValue%',\r\n paramRegex: /(\\/ASWPARAM\\.)[^/]+/,\r\n appendBeforeRegex: /(\\/ThemeID\\.)/\r\n },\r\n 'SL': {\r\n urls: ['store.avast.ru', 'store-kz.avast.com', 'store.avast.ua'],\r\n paramPattern: 'ASWPARAM=%urlBagValue%&',\r\n paramRegex: /(&(amp;)?ASWPARAM=)[^&]+/,\r\n appendBeforeRegex: /(quantity=)/\r\n }\r\n },\r\n init: function(){\r\n var cookies = {'p_pro': 'x-avast-pro', 'p_vbd': 'x-avast-vbd', 'p_hid': 'x-avast-hid'},\r\n testCookieFail = ['p_pro', 'p_vbd'],\r\n urlParams = {'p_glic': 'p_glic'},\r\n values = {},\r\n cookieFail = false,\r\n aswparam = this;\r\n\r\n $.each(cookies, function(paramName, cookieName) {\r\n values[paramName] = aswparam.getClientInfo(paramName, cookieName);\r\n if ($.inArray(paramName, testCookieFail) > -1 && !values[paramName]) {\r\n cookieFail = true;\r\n }\r\n });\r\n\r\n if (!cookieFail) {\r\n $.each(values, function(name, value) {\r\n urlBag.addValue(name, value);\r\n });\r\n\r\n $.each(urlParams, function(paramName, urlParamName) {\r\n var urlParamValue = aswparam.getURLParameter(urlParamName);\r\n\r\n if (urlParamValue) {\r\n urlBag.addValue(paramName, urlParamValue);\r\n }\r\n });\r\n\r\n this.updateLinks();\r\n } else {\r\n if('bind' in Function.prototype && 'once' in asyncClientInfo) {\r\n asyncClientInfo.once('change', aswparam.init.bind(aswparam));\r\n }\r\n }\r\n\r\n },\r\n updateLinks: function(){\r\n var aswparam = this;\r\n\r\n // Web page\r\n $('a').each(function() {\r\n var link = aswparam.linkDecorator(this.href);\r\n // Decorate only cart links.\r\n if(link){\r\n this.href = link;\r\n }\r\n });\r\n // INTs, LPs\r\n $('.choice', '.selection').each(function() {\r\n var input = $(this).find('input[type=radio]');\r\n var link = aswparam.linkDecorator(input.val());\r\n if(link){\r\n input.val(link);\r\n }\r\n });\r\n // for dynamically loaded prices\r\n if (!this.inited) {\r\n // TODO: Remove 'avast.ab.updatePrice', 'avast.bab.updatePrice' events, when all triggers replaced with 'priceUpdate.ab.avast'.\r\n $(document).on('priceUpdate.ab.avast avast.ab.updatePrice avast.bab.updatePrice', function() {aswparam.updateLinks();});\r\n this.inited = true;\r\n }\r\n },\r\n getCookieValue: function(name) {\r\n var value = '; ' + document.cookie;\r\n var parts = value.split('; ' + name + '=');\r\n return (parts.length >= 2) ? parts.pop().split(';').shift() : null;\r\n },\r\n getURLParameter: function(name) {\r\n return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]);\r\n },\r\n linkDecorator: function(link){\r\n var href;\r\n var urlBagEncodedData = urlBag.getEncodedData();\r\n\r\n if (urlBagEncodedData) {\r\n $.each(this.cartLinks, function (provider, providerDef) {\r\n $.each(providerDef.urls, function (key, providerUrl) {\r\n if (link.indexOf(providerUrl) != -1) {\r\n if (link.search(providerDef.paramRegex) > -1) {\r\n href = link.replace(providerDef.paramRegex, '$1' + urlBagEncodedData);\r\n } else {\r\n href = link.replace(providerDef.appendBeforeRegex, providerDef.paramPattern.replace('%urlBagValue%', urlBagEncodedData) + '$1');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n return href;\r\n },\r\n getClientInfo: function(paramName, cookieName){\r\n var client = (window.avastGlobals && window.avastGlobals.client) ? window.avastGlobals.client : null,\r\n value;\r\n\r\n if(client){\r\n value = (client[paramName] === 'null') ? null : client[paramName];\r\n } else {\r\n value = this.getCookieValue(cookieName + '-i') ? this.getCookieValue(cookieName + '-i') : this.getCookieValue(cookieName);\r\n }\r\n\r\n return value;\r\n }\r\n };\r\n\r\n return aswparam;\r\n\r\n})());\r\n\n/**\r\n * Avast Config Module\r\n * @version 0.9.0\r\n * @module avast.web.config\r\n * @author Ales Gabriel \r\n * @requires module:avast.detect\r\n * @requires module:jquery\r\n * @requires module:avast.rum\r\n * @requires module:avast.web.appendPbld\r\n * @requires module:avast.web.aswparam\r\n * @requires module:avast.web.cj\r\n * @requires module:avast.web.couponCode\r\n * @requires module:avast.hadd\r\n * @requires module:avast.web.languageSelector\r\n * @requires module:avast.web.dynamicHeaderButton\r\n * @requires module:avast.web.navigation\r\n * @requires module:avast.web.navigationOld\r\n * @requires module:avast.web.navigationTracking\r\n * @requires module:avast.web.tabs\r\n * @requires module:avast.web.tabsAnchor\r\n * @requires module:avast.scroll.smoothScroll\r\n * @requires module:avast.web.setLanguage\r\n * @requires module:avast.web.chromeBanner\r\n * @requires module:avast.web.tracker\r\n * @copyright AVAST Software s.r.o.\r\n */\r\navm.define('avast.web.config', (function(){\r\n\t'use strict';\r\n\r\n\tvar $ = avm.require('jquery');\r\n\r\n\t// Prevent log errors on browsers without console.\r\n\tif (!window.console) {\r\n\t\twindow.console = {log: function() {}};\r\n\t}\r\n\r\n\t// Set js class if javascript enabled\r\n\tif(typeof document !== \"undefined\" && typeof document.documentElement !== \"undefined\") {\r\n\t\tdocument.documentElement.className = document.documentElement.className.length ? document.documentElement.className + ' js' : 'js';\r\n\t}\r\n\r\n\t// Config environment\r\n\tvar config = {\r\n\t\toptions: {},\r\n\t\t/**\r\n\t\t * Basic setup - init modules + legacy\r\n\t\t */\r\n\t\tinit: function() {\r\n\t\t\tvar opts = window.avastGlobals ? window.avastGlobals.web || {} : {};\r\n\t\t\tvar legacy = this.legacySettings(opts);\r\n\t\t\tvar boot = this.boot;\r\n\r\n\t\t\t/**\r\n\t\t\t * Global namespace options\r\n\t\t\t */\r\n\t\t\tthis.options = opts;\r\n\r\n\t\t\t/*\r\n\t\t\t * Support former avast config settings in global namespace\r\n\t\t\t */\r\n\t\t\tthis.exportLegacy(legacy, window);\r\n\r\n\t\t\t/**\r\n\t\t\t * Global modules\r\n\t\t\t *\r\n\t\t\t * @description Boot global modules. First param of boot function is a module name.\r\n\t\t\t * Second is init function. Module is passed os parameter.\r\n\t\t\t */\r\n\r\n\t\t\t// Init legacy free modules\r\n\t\t\tavm.require('avast.web.tracker');\r\n\r\n\t\t\t/*\r\n\t\t\t *\r\n\t\t\t * !!! COMMENTS WITH avm.require STATEMENT BEFORE EACH boot ARE MANDATORY !!!\r\n\t\t\t * CORRECT ORDER DURING CONCAT IS NOT GUARANTED WITHOUT THAT.\r\n\t\t\t *\r\n\t\t\t */\r\n\r\n\t\t\t// avm.require('avast.rum') - Real Time Monitoring (always first)\r\n\t\t\tboot('avast.rum', function (module) {\r\n\t\t\t\tif (!avast.disableRum) {\r\n\t\t\t\t\tmodule.init();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$(document).ready(function(){\r\n\t\t\t\tvar disabledModules = avastGlobals.disabledModules || [];\r\n\r\n\t\t\t\t// avm.require('avast.web.appendPbld') - Add p_bld param to cart links\r\n\t\t\t\tboot('avast.web.appendPbld', function (module) {\r\n\t\t\t\t\tif (!avast.disableAppendPbld) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.aswparam') - Pack and add ASWPARAM to cart links\r\n\t\t\t\tboot('avast.web.aswparam', function (module) {\r\n\t\t\t\t\tif (!avast.disableAswparam) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.cj') - Set CJ cookie\r\n\t\t\t\tboot('avast.web.cj', function (module) {\r\n\t\t\t\t\tif (!avast.disableCj) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.couponCode') - Add couponcode param to cart links\r\n\t\t\t\tboot('avast.web.couponCode', function (module) {\r\n\t\t\t\t\tif (!avast.disableShowCouponCode) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.hadd') - Add couponcode param to cart links\r\n\t\t\t\tboot('avast.hadd', function (module) {\r\n\t\t\t\t\tif (!avast.disableHadd) {\r\n\t\t\t\t\t\tvar hadd = module();\r\n\t\t\t\t\t\thadd.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.languageSelector') - Language Selector\r\n\t\t\t\tboot('avast.web.languageSelector', function (module) {\r\n\t\t\t\t\tif (!avast.disableLanguageSelector) {\r\n\t\t\t\t\t\tvar langSelect = module();\r\n\t\t\t\t\t\tlangSelect.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.dynamicHeaderButton') - Navigation\r\n\t\t\t\tboot('avast.web.dynamicHeaderButton', function (module) {\r\n\t\t\t\t\tif (!avast.disableNavigation) {\r\n\t\t\t\t\t\tmodule();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.navigation') - Navigation\r\n\t\t\t\tboot('avast.web.navigation', function (module) {\r\n\t\t\t\t\tif (!avast.disableNavigation && $('#main-header').length > 0) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.navigationOld') - Navigation\r\n\t\t\t\tboot('avast.web.navigationOld', function (module) {\r\n\t\t\t\t\tif (!avast.disableNavigation) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.navigationTracking') - Navigation tracking\r\n\t\t\t\tboot('avast.web.navigationTracking', function (module) {\r\n\t\t\t\t\tif (!avast.disableNavigation && window.avastGlobals.web.locale === 'it-it') {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.tabs') - Tabs in v8 style. Not initialized if tabs in sticky bar.\r\n\t\t\t\tboot('avast.web.tabs', function (module) {\r\n\t\t\t\t\tif(!avast.disableTabs && $('#tabs-anchor').hasClass('tabs-nav')){\r\n\t\t\t\t\t\tmodule.init('#content-holder', { tabs : '#tabs-anchor li'});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.tabsAnchor') - Tabs in v8 style. Not initialized if tabs in sticky bar.\r\n\t\t\t\tboot('avast.web.tabsAnchor', function (module) {\r\n\t\t\t\t\tvar detect = avm.require('avast.detect')();\r\n\t\t\t\t\tvar ie6zh = (detect.browser.isInternetExplorer && detect.browser.version === \"6.0\" && window.avastGlobals.web.locale === \"zh-cn\") ? 1 : 0;\r\n\r\n\t\t\t\t\tif(!avast.disableTabsAnchor && !ie6zh){\r\n\t\t\t\t\t\t// window.avast.tabsAnchor = window.avast.tabsAnchor || module;\r\n\t\t\t\t\t\tmodule.init('#tabs-anchor');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.scroll.smoothScroll') - Animate scrolls\r\n\t\t\t\tboot('avast.scroll.smoothScroll', function (module) {\r\n\t\t\t\t\tif (!avast.disableSmoothScroll) {\r\n\t\t\t\t\t\tmodule();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.chromeBanner') - Chrome banner visibility and tracking\r\n\t\t\t\tboot('avast.web.chromeBanner', function (module) {\r\n\t\t\t\t\t\tmodule.init();\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.setLanguage') - Chrome banner visibility and tracking\r\n\t\t\t\tboot('avast.web.setLanguage', function (module) {\r\n\t\t\t\t\t\tmodule(opts.locale || '');\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// avm.require('avast.web.slider') - BxSlider wrapper\r\n\t\t\t\tboot('avast.web.slider', function (slider) {\r\n\t\t\t\t\t\tvar rum = avm.require('avast.rum');\r\n\t\t\t\t\t\tvar detect = avm.require('avast.detect')();\r\n\t\t\t\t\t\tvar ie6zh = (detect.browser.isInternetExplorer && detect.browser.version === \"6.0\" && window.avastGlobals.web.locale === \"zh-cn\") ? 1 : 0;\r\n\r\n\t\t\t\t\t\tif(avast.disableSlider){\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Product slider\r\n\t\t\t\t\t\tif($('#features .slider-slides').length > 0) {\r\n\t\t\t\t\t\t\tslider.init(\"v9\", '#features .slider-slides', {\r\n\t\t\t\t\t\t\t\tpager: false\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t// Rum log\r\n\t\t\t\t\t\t\trum.track('error', {message: 'Slider #features called'});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// index slider (also used on business)\r\n\t\t\t\t\t\tif($('#top .slider-slides').length > 0 && !ie6zh) {\r\n\t\t\t\t\t\t\tslider.init(\"v9hp\", '#top .slider-slides', {\r\n\t\t\t\t\t\t\t\tpager: true,\r\n\t\t\t\t\t\t\t\tpagerSelector: \"#top .control\",\r\n\t\t\t\t\t\t\t\tbuildPager: function(slideIndex){\r\n\t\t\t\t\t\t\t\t\treturn '';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t// Rum log\r\n\t\t\t\t\t\t\trum.track('error', {message: 'Slider #top called'});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Extra sliders on /index + /online-backup + /grimefighter\r\n\t\t\t\t\t\tif($('#results .slider-slides, #whybackup .slider-slides').length > 0) {\r\n\t\t\t\t\t\t\tvar context = $('#results, #whybackup');\r\n\t\t\t\t\t\t\tvar ppBx = $(\"#results .slider-slides, #whybackup .slider-slides\").bxSlider({\r\n\t\t\t\t\t\t\t\t\tauto: false,\r\n\t\t\t\t\t\t\t\t\tpager: true,\r\n\t\t\t\t\t\t\t\t\tpagerSelector: \"#results .control, #whybackup .control\",\r\n\t\t\t\t\t\t\t\t\tinfiniteLoop: true,\r\n\t\t\t\t\t\t\t\t\tmoveSlides: 1,\r\n\t\t\t\t\t\t\t\t\tminSlides: 1,\r\n\t\t\t\t\t\t\t\t\tmaxSlides: 1,\r\n\t\t\t\t\t\t\t\t\tslideWidth: 900,\r\n\t\t\t\t\t\t\t\t\tslideMargin: 0,\r\n\t\t\t\t\t\t\t\t\tcontrols: false,\r\n\t\t\t\t\t\t\t\t\tnextSelector: \"\",\r\n\t\t\t\t\t\t\t\t\tprevSelector: \"\",\r\n\t\t\t\t\t\t\t\t\tuseCSS: false,\r\n\t\t\t\t\t\t\t\t\tonSliderLoad: function(){\r\n\t\t\t\t\t\t\t\t\t\t$('.bx-clone').css('visibility', 'visible');\r\n\t\t\t\t\t\t\t\t\t\t$('#results-slides').css('visibility', 'visible');\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tbuildPager: function(slideIndex){\r\n\t\t\t\t\t\t\t\t\t\treturn '';\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tcontext.find('.prev').click(function(e){\r\n\t\t\t\t\t\t\t\tppBx.goToPrevSlide();\r\n\t\t\t\t\t\t\t\te.preventDefault(); // FIXME\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tcontext.find('.next').click(function(e){\r\n\t\t\t\t\t\t\t\tppBx.goToNextSlide();\r\n\t\t\t\t\t\t\t\te.preventDefault(); // FIXME\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t// Rum log\r\n\t\t\t\t\t\t\trum.track('error', {message: 'Slider #results#whybackup called'});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Sliders on /business\r\n\t\t\t\t\t\tif($('#results-business .slider-slides').length > 0) {\r\n\t\t\t\t\t\t\t// Rum log\r\n\t\t\t\t\t\t\trum.track('error', {message: 'Slider #results-business called'});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\t/*\r\n\t\t\t\t * jQuery plugins\r\n\t\t\t\t */\r\n\r\n\t\t\t\t// Return to the top of the page button\r\n\t\t\t\tif(typeof $.fn.slideTop === 'function'){\r\n\t\t\t\t\t$('#content-holder').slideTop();\r\n\t\t\t\t}\r\n\t\t\t\t// Initialize tooltip plugin\r\n\t\t\t\tif(typeof $.fn.tooltip === 'function' &&\r\n\t\t\t\t\tnavigator.userAgent.indexOf('aclwebview') === -1 &&\r\n\t\t\t\t\tArray.prototype.indexOf &&\r\n\t\t\t\t\tdisabledModules.indexOf('tooltip') === -1){\r\n\t\t\t\t\t$('#content-holder').tooltip();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set class for comparison table cell with tick\r\n\t\t\t\tif($('#comparison').length > 0){\r\n\t\t\t\t $('#comparison table tr.feature span.yes').closest('td').addClass('cell-tick');\r\n\t\t\t\t}\r\n\t\t\t\tif($('#compare-table').length > 0){\r\n\t\t\t\t $('#compare-table table tr.feature span.yes').closest('td').addClass('cell-tick');\r\n\t\t\t\t}\r\n\t\t\t\tif($('#compare').length > 0){\r\n\t\t\t\t\t$('#compare table tr.feature span.yes').closest('td').addClass('cell-tick');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// FIX height in IE\r\n\t\t\t\tvar detect = avm.require('avast.detect')();\r\n\r\n\t\t\t\tif(detect.browser.isInternetExplorer){\r\n\t\t\t\t\tvar topHeight = $('#top.fullscreen .AVsizer .absolute-center').height();\r\n\r\n\t\t\t\t\tif(topHeight){\r\n\t\t\t\t\t\t$('#top.fullscreen .AVsizer').css({\r\n\t\t\t\t\t\t\tminHeight: (topHeight + 25) + 'px',\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t * Invoke global modules\r\n\t\t * @param {string} moduleName Module name\r\n\t\t * @param {Function} fn Init function\r\n\t\t * @return {*} Module instance. Object is prefered\r\n\t\t */\r\n\t\tboot: function (moduleName, fn) {\r\n\t\t\tvar config = this;\r\n\t\t\tvar req = avm.require;\r\n\t\t\tvar module = moduleName ? req(moduleName, false) : null;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tfn.call(config, module);\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// console.log(moduleName + ': ' + e); // Send custom RUM event here?\r\n\t\t\t\treturn false;\r\n\t\t\t} finally {\r\n\t\t\t\treturn module;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * legacySettings Config settings in global namespace\r\n\t\t * @param {object} opts Settings options\r\n\t\t * @return {object} Object equals former global namespace settings\r\n\t\t */\r\n\t\tlegacySettings: function(opts){\r\n\t\t\tvar detect = avm.require('avast.detect')();\r\n\r\n\t\t\tif(opts){\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlocale : opts.locale,\r\n\t\t\t\t\tRootPath : opts.RootPath,\r\n\t\t\t\t\tavast: {\r\n\t\t\t\t\t\tlocale : opts.locale,\r\n\t\t\t\t\t\tnumberDecimalSeparator : opts.numberDecimalSeparator,\r\n\t\t\t\t\t\tnumberThousandSeparator : opts.numberThousandSeparator,\r\n\t\t\t\t\t\tresponsive : opts.responsive,\r\n\t\t\t\t\t\trootPath : opts.RootPath,\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tlocale : opts.locale,\r\n\t\t\t\t\t\t\trootPath : opts.RootPath\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetOS : function(){\r\n\t\t\t\t\t\t\treturn detect.os.name;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tgetWinVersion : function(){\r\n\t\t\t\t\t\t\treturn detect.os.version;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttabsAnchor : (function(){\r\n\t\t\t\t\t\t\treturn avm.require('avast.web.tabsAnchor');\r\n\t\t\t\t\t\t})(),\r\n\t\t\t\t\t\tslider : (function(){\r\n\t\t\t\t\t\t\treturn avm.require('avast.web.slider');\r\n\t\t\t\t\t\t})(),\r\n\t\t\t\t\t\thadd : (function(){\r\n\t\t\t\t\t\t\treturn avm.require('avast.hadd')();\r\n\t\t\t\t\t\t})()\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Extend global namespace with avast variables\r\n\t\t * @param {object} src Object to be merged\r\n\t\t * @param {object} target Object to be extended\r\n\t\t * @return {string} Not merged variables\r\n\t\t */\r\n\t\texportLegacy: function(src, target){\r\n\t\t\tvar skipped;\r\n\r\n\t\t\tfor(var key in src){\r\n\t\t\t\tif(Object.prototype.toString.call(src[key]) !== '[object Object]' && src[key] !== null){\r\n\t\t\t\t\tif(!(key in target)){\r\n\t\t\t\t\t\ttarget[key] = src[key];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tskipped = !skipped ? key : skipped + ', ' + key;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[key] = target[key] || {};\r\n\t\t\t\t\tthis.exportLegacy(src[key], target[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// todo: log skipped\r\n\t\t\t// console.log('settings: %o', target);\r\n\t\t\treturn target;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get current config options\r\n\t\t * @return {Object} Config options\r\n\t\t */\r\n\t\tgetConfig: function(){\r\n\t\t\treturn this.options;\r\n\t\t}\r\n\t};\r\n\r\n\t// Run config\r\n\tconfig.init();\r\n\r\n\treturn config;\r\n})());\r\n"]}