{"version":3,"sources":["mootools-core-1.4.5-full-nocompat.js","barometer-1.3.js"," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterable] "," [synthetic:es6/util/arrayfromiterator] ","node_modules/dom-utils/lib/matches.js","node_modules/dom-utils/lib/parents.js","node_modules/dom-utils/lib/delegate.js","node_modules/dom-utils/lib/closest.js","lib/plugins/event-tracker.js","node_modules/dom-utils/lib/get-attributes.js","node_modules/dom-utils/lib/parse-url.js","lib/method-chain.js","lib/utilities.js","lib/provide.js","lib/constants.js","lib/usage.js","lib/plugins/clean-url-tracker.js","lib/plugins/impression-tracker.js","lib/event-emitter.js","lib/store.js","lib/session.js","lib/plugins/max-scroll-tracker.js","lib/plugins/media-query-tracker.js","lib/plugins/outbound-form-tracker.js","lib/plugins/outbound-link-tracker.js","lib/plugins/page-visibility-tracker.js","lib/plugins/social-widget-tracker.js","lib/plugins/url-change-tracker.js"," [synthetic:util/defineproperty] "," [synthetic:util/global] "," [synthetic:es6/util/inherits] ","config.js"],"names":["this","MooTools","version","build","typeOf","item","$family","nodeName","nodeType","test","nodeValue","length","callee","Function","instanceOf","object","constructor","$constructor","parent","hasOwnProperty","enumerables","i","toString","prototype","overloadSetter","usePlural","self","a","b","k","call","overloadGetter","args","result","arguments","extend","key","value","implement","slice","Array","from","Type","isEnumerable","Number","number","parseFloat","isFinite","String","hide","$hidden","protect","$protected","name","lower","toLowerCase","typeCheck","Object","hooks","hooksOf","type","method","hook","previous","apply","alias","existing","mirror","push","force","methods","isType","l","generic","proto","methodsEnumerable","propertyIsEnumerable","forEachMethod","fn","RegExp","Date","Boolean","min","max","Math","floor","random","bind","each","forEach","cloneOf","clone","mergeOne","source","current","merge","v","append","original","extended","UID","now","every","filter","results","indexOf","map","some","clean","invoke","methodName","associate","keys","obj","link","contains","array","getLast","getRandom","include","combine","erase","splice","empty","flatten","concat","pick","hexToRgb","rgb","toInt","rgbToHex","hex","bit","join","regex","params","string","separator","trim","replace","camelCase","match","charAt","toUpperCase","hyphenate","capitalize","escapeRegExp","base","parseInt","toFloat","substitute","regexp","limit","round","precision","pow","toFixed","times","math","attempt","e","that","F","bound","context","pass","delay","setTimeout","periodical","setInterval","subset","values","getLength","keyOf","toQueryString","queryString","qs","val","encodeURIComponent","document","window","ua","navigator","userAgent","platform","UA","mode","documentMode","Browser","Platform","Features","xpath","air","query","json","Plugins","Request","XMLHTTP","XMLHttpRequest","MSXML2","ActiveXObject","MSXML","xhr","plugins","description","GetVariable","Flash","exec","text","execScript","script","createElement","setAttribute","head","appendChild","removeChild","scripts","all","code","Document","Window","Element","Event","html","documentElement","getElementsByTagName","execCommand","attachEvent","addEventListener","unloadEvent","detachEvent","arrayFrom","childNodes","_keys","DOMEvent","event","win","$extended","shift","shiftKey","control","ctrlKey","alt","altKey","meta","metaKey","target","srcElement","parentNode","id","which","keyCode","fromCharCode","doc","compatMode","body","page","x","pageX","clientX","scrollLeft","y","pageY","clientY","scrollTop","client","pageXOffset","pageYOffset","wheel","wheelDelta","detail","rightClick","button","related","relatedTarget","rotation","scale","targetTouches","changedTouches","touches","touch","stop","preventDefault","stopPropagation","cancelBubble","returnValue","defineKey","defineKeys","38","40","37","39","27","32","8","9","46","13","Class","initialize","newClass","reset","$prototyping","$caller","caller","Error","$name","$owner","wrap","$origin","wrapper","retain","Mutators","getInstance","klass","Extends","Implements","items","instance","Chain","$chain","chain","callChain","clearChain","removeOn","full","first","Events","$events","addEvent","internal","addEvents","events","fireEvent","removeEvent","index","removeEvents","fns","Options","setOptions","options","option","parser","rawMatch","combinator","combinatorChildren","tagName","className","attributeKey","attributeOperator","attributeQuote","attributeValue","pseudoMarker","pseudoClass","pseudoQuote","pseudoClassQuotedValue","pseudoClassValue","separatorIndex","parsed","expressions","combinatorIndex","currentSeparator","reversed","reverseCombinator","tag","currentParsed","reUnescape","classList","classes","pseudos","attributes","operator","cache","reverseCache","parse","expression","isReversed","Slick","currentCache","raw","reverse","exp","last","parts","j","cexp","exports","local","featuresCache","isNativeCode","isXML","xmlVersion","xml","setDocument","ownerDocument","feature","root","rootUid","getUIDXML","features","isXMLDocument","brokenStarGEBTN","starSelectsClosedQSA","idGetsName","brokenMixedCaseQSA","brokenGEBCN","brokenCheckedQSA","brokenEmptyAttributeQSA","isHTMLDocument","nativeMatchesSelector","starSelectsClosed","starSelectsComments","brokenSecondClassNameGEBCN","cachedGetElementsByClassName","brokenFormAttributeGetter","selected","testNode","testRoot","innerHTML","getElementById","style","display","createComment","firstChild","getElementsByClassName","querySelectorAll","getAttribute","matchesSelector","mozMatchesSelector","webkitMatchesSelector","slick_expando","getUID","getUIDHTML","node","attributeGetters","attributeNode","getAttributeNode","hasAttribute","attribute","specified","nativeRootContains","nativeDocumentContains","compareDocumentPosition","documentSorter","sourceIndex","aRange","createRange","bRange","setStart","setEnd","compareBoundaryPoints","Range","START_TO_END","reSimpleSelector","reEmptyAttribute","qsaFailExpCache","search","found","uniques","hasOthers","contextIsDocument","simpleSelector","simpleSelectors","nodes","symbol","matchClass","sort","querySelector","disableQSA","_expression","_context","currentId","removeAttribute","posNTH","posNTHLast","posNTHType","posNTHTypeLast","pushArray","pushUID","m","n","currentItems","currentExpression","currentBit","lastBit","bitUniques","uidx","uidk","uid","uniqueNumber","cacheNTH","matchNTH","parseNTHArgument","argument","special","createNTHPseudo","child","sibling","positions","ofType","el","count","pos","matchSelector","matchNode","selector","matchError","simpleExpCounter","matchPseudo","pseudoName","part","cls","combinators"," ","children","getById","idNode","getByClass",">","nextSibling","+","^","~","++","~~","!","!>","!+","previousSibling","!^","lastChild","!~","c","innerText","textContent","not","first-child","last-child","only-child","prev","next","nth-child","nth-last-child","nth-of-type","nth-last-of-type","even","odd","first-of-type","last-of-type","only-of-type","enabled","disabled","checked","focus","activeElement","href","p","for","htmlFor","cssText","tabindex","maxlength","MAXLENGTH","maxLength","find","container","defineAttributeGetter","lookupAttributeGetter","definePseudo","lookupPseudo","pseudo","override","uidOf","props","konstructor","Constructors","set","attr","newElement","_fireEvent","elements","element","Elements","Prototype","IFrame","iframe","properties","isObject","onload","uniqueID","onLoad","contentWindow","frames","addListener","unshift","newElements","collection","0","1","createElementAcceptsHTML","escapeQuotes","defaultChecked","newTextNode","createTextNode","getDocument","getWindow","types","nocash","toElement","textnode","whitespace","zero","$","nc","getElements","getElement","injectCombinator","getNext","getPrevious","getParent","getAllNext","getAllPrevious","getSiblings","getChildren","getParents","getFirst","$$","inserters","before","insertBefore","after","bottom","top","inside","propertyGetters","propertySetters","property","real","bools","booleans","bool","class","input","pollutesGetAttribute","div","setProperty","setter","attributeWhiteList","retrieve","setProperties","getProperty","getter","expando","outer","outerHTML","substr","getProperties","removeProperty","removeProperties","prop","Properties","get","hasClass","addClass","removeClass","toggleClass","adopt","fragment","createDocumentFragment","appendText","where","grab","inject","replaces","replaceChild","wraps","getSelected","selectedIndex","opt","collected","storage","clearAttributes","formProps","textarea","destroy","dispose","contents","keepid","cloneNode","ce","te","mergeAttributes","no","eo","ie","co","to","old","removeListener","removeEventListener","dflt","store","eliminate","CollectGarbage","supportsHTML5Elements","tags","split","supportsTableInnerHTML","tr","supportsTRInnerHTML","translations","table","select","tbody","thead","tfoot","level","testForm","color","doesNotRemoveStyles","styles","setStyles","hasOpacity","opacity","hasFilter","reAlpha","setVisibility","visibility","setOpacity","currentStyle","hasLayout","zoom","getComputedStyle","getOpacity","floatName","cssFloat","defaultView","computed","getPropertyValue","setStyle","Styles","getStyle","ShortStyles","s","isNaN","size","opera","getStyles","left","right","width","height","maxWidth","maxHeight","minWidth","minHeight","backgroundColor","backgroundPosition","fontSize","letterSpacing","lineHeight","clip","margin","padding","border","borderWidth","borderStyle","borderColor","zIndex","fontWeight","textIndent","direction","Short","All","sd","bd","bdw","bds","bdc","realType","custom","condition","onAdd","defn","nativeEvent","NativeEvents","list","onRemove","attached","cloneEvents","eventType","click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","gesturestart","gesturechange","gestureend","blur","change","submit","paste","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll","mouseenter","mouseleave","check","prefix","propertychange","propertyName","eventListenerSupport","focusin","focusout","bubbleUp","capture","_key","formObserver","remove","forms","listen","form","listeners","listener","_fn","inputObserver","relay","useCapture","newType","delegation","stored","_uid","_type","_match","_map","elementEvent","__match","delegator","__uid","styleNumber","styleString","borderBox","topBorder","leftBorder","isBody","getCompatElement","brokenOffsetParent","offsetParent","isOffset","isOffsetStatic","scrollTo","getSize","offsetWidth","offsetHeight","getScrollSize","scrollWidth","scrollHeight","getScroll","getScrolls","position","getOffsetParent","isOffsetCheck","getOffsets","getBoundingClientRect","ios","htmlScroll","elemScrolls","isFixed","clientLeft","clientTop","offsetLeft","offsetTop","firefox","safari","getPosition","relative","offset","relativePosition","getCoordinates","computePosition","setPosition","clientWidth","clientHeight","getHeight","getWidth","getScrollTop","getScrollLeft","getScrollHeight","getScrollWidth","getTop","getLeft","Fx","fps","unit","duration","frameSkip","subject","getTransition","cos","PI","step","diff","time","frameInterval","frame","delta","transition","compute","isRunning","cancel","start","Durations","pushInstance","pullInstance","pause","resume","instances","short","normal","long","timers","loop","clearInterval","CSS","prepare","pixelLeft","Parsers","serve","returned","render","Cache","selectorTest","styleSheets","sheet","domain","rules","cssRules","rule","selectorText","Color","one","Tween","tween","fade","how","toggle","flag","highlight","end","Morph","morph","trans","Transitions","Sine","easeInOut","data","Transition","easeIn","easeOut","linear","transitions","Pow","Expo","Circ","sin","acos","Back","Bounce","Elastic","progressSupport","url","headers","X-Requested-With","Accept","async","format","isSuccess","emulation","urlEncoded","encoding","evalScripts","evalResponse","timeout","noCache","onStateChange","readyState","running","status","onreadystatechange","onprogress","onloadstart","clearTimeout","timer","response","responseText","responseXML","success","failure","processScripts","getHeader","stripScripts","onSuccess","onFailure","loadstart","progress","setHeader","getResponseHeader","send","_method","location","pathname","trimPosition","lastIndexOf","open","user","password","withCredentials","setRequestHeader","sender","HTML","update","javascript","temp","tree","isString","JSON","\b","\t","\n","\f","\r","\"","\\","escape","chr","charCodeAt","validate","encode","stringify","toJSON","decode","secure","eval","X-Request","Cookie","path","write","date","setTime","getTime","toGMTString","cookie","read","decodeURIComponent","ready","loaded","shouldPoll","checks","testElement","domready","poll","doScrollWorks","doScroll","state","Swiff","quality","allowScriptAccess","wMode","swLiveConnect","callBacks","vars","CallBacks","callBack","flashVars","classid","movie","param","remote","rs","CallFunction","__flash__argumentsToXML","Barometer","areaSelector","hoverSelector","popupSelector","overlaySelector","hoverClass","popupClass","ga_tracker","ga_category","ga_actions","show","ga_actions_delay","trackEventTimer","hovers","popups","overlay","setup","trackEvent","area","getHovers","getPopups","clearTrackEvent","hover","popup","action","opt_label","opt_value","_trackEvent","$jscomp.initSymbol","$jscomp.global","Symbol","$jscomp.Symbol","ba","$jscomp.SYMBOL_PREFIX","$jscomp.symbolCounter_","iterator","$jscomp.defineProperty","configurable","writable","$jscomp.arrayIterator","$jscomp.initSymbolIterator","da","$jscomp.iteratorPrototype","done","ea","fa","matches","nativeMatches","parents","delegate","callback","d","delegateTarget","opts","composed","composedPath","parentElements","h","ancestor","getAttributes","attrs","parseUrl","port","HTTP_PORT","HTTPS_PORT","host","DEFAULT_PORT","hash","hostname","origin","protocol","MethodChain","originalMethodReference","isTask","methodChain","boundMethodChain","wrappedMethod","this.wrappedMethod","$jscomp.arrayFromIterable","add","methodOverride","getOrCreateMethodChain","rebindMethodChain","qa","previousMethod","createFieldsObj","defaultFields","userFields","tracker","hitFilter","originalBuildHitTask","buildHitTask","model","assign","getAttributeFields","attributeFields","field","domReady","debounce","wait","withTimeout","called","deferUntilPluginsLoaded","processQueue","ref","MethodChain.remove","queueMap","trackingId","queue","ref.send","originalMethod","MethodChain.add","str","p1","provide","pluginName","pluginConstructor","gaAlias","GoogleAnalyticsObject","q","gaDevIds","DEV_ID","gaplugins","trackUsage","plugin","VERSION","usageHex","PLUGIN_COUNT","toAdd","usageBin","CleanUrlTracker","CLEAN_URL_TRACKER","queryDimension","stripQuery","queryDimensionIndex","trackerGetOverride","buildHitTaskOverride","xa","cleanUrlFields","fieldsObj","indexFilename","trailingSlash","cleanedFieldsObj","stripNonWhitelistedQueryParams","NULL_DIMENSION","urlFieldsFilter","userCleanedFieldsObj","ya","searchString","isArray","queryParamsWhitelist","foundParams","kv","$jscomp.makeIterator","EventTracker","EVENT_TRACKER","attributePrefix","handleEvents","delegates","ImpressionTracker","IMPRESSION_TRACKER","IntersectionObserver","MutationObserver","rootMargin","handleDomMutations","handleIntersectionChanges","handleDomElementAdded","handleDomElementRemoved","mutationObserver","elementMap","thresholdMap","observeElements","deriveDataFromElements","M","getItemFromElement","threshold","N","walkNodeTree","trackFirstImpressionOnly","EventEmitter","registry_","on","Ca","getRegistry_","externalSet","Store","defaults","key_","defaults_","cache_","getOrCreate","S","namespace","AUTOTRACK_PREFIX","isListening","storageListener","isSupported_","Ea","browserSupportsLocalStorage","localStorage","setItem","removeItem","err","Ga","clear","Store.isSupported_","oldData","oldValue","newData","newValue","emit","Session","timeZone","Session.DEFAULT_TIMEOUT","sendHitTaskOverride","dateTimeFormatter","Intl","DateTimeFormat","Store.getOrCreate","hitTime","isExpired","uuid","Ia","getId","V","MaxScrollTracker","MAX_SCROLL_TRACKER","increaseThreshold","sessionTimeout","pagePath","getPagePath","handleScroll","trackerSetOverride","session","Session.getOrCreate","listenForMaxScrollChanges","Ka","getMaxScrollPercentageForCurrentPage","Ja","MediaQueryTracker","MEDIA_QUERY_TRACKER","matchMedia","changeTemplate","changeTimeout","definitions","changeListeners","processMediaQueries","Oa","definition","dimensionIndex","mediaName","getMatchName","addChangeListeners","Pa","getMediaList","media","Qa","mql","handleChanges","transport","eventCategory","eventAction","eventLabel","nonInteraction","mediaMap","OutboundFormTracker","OUTBOUND_FORM_TRACKER","formSelector","shouldTrackOutboundForm","handleFormSubmits","OutboundLinkTracker","OUTBOUND_LINK_TRACKER","linkSelector","shouldTrackOutboundLink","handleLinkInteractions","PageVisibilityTracker","PAGE_VISIBILITY_TRACKER","visibilityState","visibleThreshold","sendInitialPageview","lastPageState","visibleThresholdTimeout_","isInitialPageviewSent_","handleChange","handleWindowUnload","handleExternalStoreSet","VISIBLE","sendPageview","isPageLoad","pageId","PAGE_ID","sessionId","pageLoadsMetricIndex","sendPageLoad","getAndValidateChangeData","Ua","lastStoredChange","HIDDEN","sendPageVisibilityEvent","Va","deltaInSeconds","SECONDS$1","eventValue","queueTime","visibleMetricIndex","Ta","SocialWidgetTracker","SOCIAL_WIDGET_TRACKER","addWidgetListeners","addTwitterEventHandlers","handleTweetEvents","handleFollowEvents","handleLikeEvents","handleUnlikeEvents","removeTwitterEventHandlers","Xa","twttr","unbind","UrlChangeTracker","URL_CHANGE_TRACKER","history","pushState","shouldTrackUrlChange","trackReplaceState","pushStateOverride","replaceStateOverride","handlePopState","Za","handleUrlChange","historyDidUpdate","oldPath","newPath","title","g","defineProperties","defineProperty","TypeError","global","msMatchesSelector","oMatchesSelector","oa","len","sources","K","f","L","hitType","za","ImpressionTracker.prototype","observer","observe","childList","subtree","requestAnimationFrame","unobserveElements","itemsToKeep","itemsToRemove","itemToRemove","dataToKeep","dataToRemove","unobserve","disconnect","unobserveAllElements","?.prototype","mutations","mutation","removedEl","removedNodes","addedEl","addedNodes","records","record","intersectionRatio","intersectionRect","handleImpression","Ba","ca","ha","getOwnPropertyDescriptor","R","getItem","U","sessionData","oldHitTime","currentDate","oldHitDate","MINUTES","datesAreDifferentInTimezone","sessionControl","sessionWillStart","sessionWillEnd","W","scrollPercentage","innerHeight","maxScrollPercentage","stopListeningForMaxScrollChanges","increaseAmount","setMaxScrollPercentageForCurrentPage","sendMaxScrollEvent","maxScrollMetricIndex","o","lastPagePath","Ma","X","sendBeacon","hitCallback","parseUrlFn","Y","clickHandler","defaultPrevented","oldHitCallback","Sa","PageVisibilityTracker.prototype","PageVisibilityTracker_prototype$trackerSetOverride","fields","Wa","SocialWidgetTracker.prototype","FB","subscribe","addFacebookEventHandlers","region","socialNetwork","socialAction","socialTarget","screen_name","unsubscribe","removeFacebookEventHandlers","Ya","UrlChangeTracker.prototype","links","ga-on","ga-event-category","ga-event-action","ga-event-label","barometer","pageTracker","period","substring"],"mappings":"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","file":"scripts.min.js","sourcesContent":["/*\n---\nMooTools: the javascript framework\n\nweb build:\n - http://mootools.net/core/76bf47062d6c1983d66ce47ad66aa0e0\n\npackager build:\n - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Delegation Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff\n\n...\n*/\n\n/*\n---\n\nname: Core\n\ndescription: The heart of MooTools.\n\nlicense: MIT-style license.\n\ncopyright: Copyright (c) 2006-2012 [Valerio Proietti](http://mad4milk.net/).\n\nauthors: The MooTools production team (http://mootools.net/developers/)\n\ninspiration:\n - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)\n - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)\n\nprovides: [Core, MooTools, Type, typeOf, instanceOf, Native]\n\n...\n*/\n\n(function(){\n\nthis.MooTools = {\n\tversion: '1.4.5',\n\tbuild: '74e34796f5f76640cdb98853004650aea1499d69'\n};\n\n// typeOf, instanceOf\n\nvar typeOf = this.typeOf = function(item){\n\tif (item == null) return 'null';\n\tif (item.$family != null) return item.$family();\n\n\tif (item.nodeName){\n\t\tif (item.nodeType == 1) return 'element';\n\t\tif (item.nodeType == 3) return (/\\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';\n\t} else if (typeof item.length == 'number'){\n\t\tif (item.callee) return 'arguments';\n\t\tif ('item' in item) return 'collection';\n\t}\n\n\treturn typeof item;\n};\n\nvar instanceOf = this.instanceOf = function(item, object){\n\tif (item == null) return false;\n\tvar constructor = item.$constructor || item.constructor;\n\twhile (constructor){\n\t\tif (constructor === object) return true;\n\t\tconstructor = constructor.parent;\n\t}\n\t/**/\n\tif (!item.hasOwnProperty) return false;\n\t/**/\n\treturn item instanceof object;\n};\n\n// Function overloading\n\nvar Function = this.Function;\n\nvar enumerables = true;\nfor (var i in {toString: 1}) enumerables = null;\nif (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];\n\nFunction.prototype.overloadSetter = function(usePlural){\n\tvar self = this;\n\treturn function(a, b){\n\t\tif (a == null) return this;\n\t\tif (usePlural || typeof a != 'string'){\n\t\t\tfor (var k in a) self.call(this, k, a[k]);\n\t\t\tif (enumerables) for (var i = enumerables.length; i--;){\n\t\t\t\tk = enumerables[i];\n\t\t\t\tif (a.hasOwnProperty(k)) self.call(this, k, a[k]);\n\t\t\t}\n\t\t} else {\n\t\t\tself.call(this, a, b);\n\t\t}\n\t\treturn this;\n\t};\n};\n\nFunction.prototype.overloadGetter = function(usePlural){\n\tvar self = this;\n\treturn function(a){\n\t\tvar args, result;\n\t\tif (typeof a != 'string') args = a;\n\t\telse if (arguments.length > 1) args = arguments;\n\t\telse if (usePlural) args = [a];\n\t\tif (args){\n\t\t\tresult = {};\n\t\t\tfor (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]);\n\t\t} else {\n\t\t\tresult = self.call(this, a);\n\t\t}\n\t\treturn result;\n\t};\n};\n\nFunction.prototype.extend = function(key, value){\n\tthis[key] = value;\n}.overloadSetter();\n\nFunction.prototype.implement = function(key, value){\n\tthis.prototype[key] = value;\n}.overloadSetter();\n\n// From\n\nvar slice = Array.prototype.slice;\n\nFunction.from = function(item){\n\treturn (typeOf(item) == 'function') ? item : function(){\n\t\treturn item;\n\t};\n};\n\nArray.from = function(item){\n\tif (item == null) return [];\n\treturn (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];\n};\n\nNumber.from = function(item){\n\tvar number = parseFloat(item);\n\treturn isFinite(number) ? number : null;\n};\n\nString.from = function(item){\n\treturn item + '';\n};\n\n// hide, protect\n\nFunction.implement({\n\n\thide: function(){\n\t\tthis.$hidden = true;\n\t\treturn this;\n\t},\n\n\tprotect: function(){\n\t\tthis.$protected = true;\n\t\treturn this;\n\t}\n\n});\n\n// Type\n\nvar Type = this.Type = function(name, object){\n\tif (name){\n\t\tvar lower = name.toLowerCase();\n\t\tvar typeCheck = function(item){\n\t\t\treturn (typeOf(item) == lower);\n\t\t};\n\n\t\tType['is' + name] = typeCheck;\n\t\tif (object != null){\n\t\t\tobject.prototype.$family = (function(){\n\t\t\t\treturn lower;\n\t\t\t}).hide();\n\t\t\t\n\t\t}\n\t}\n\n\tif (object == null) return null;\n\n\tobject.extend(this);\n\tobject.$constructor = Type;\n\tobject.prototype.$constructor = object;\n\n\treturn object;\n};\n\nvar toString = Object.prototype.toString;\n\nType.isEnumerable = function(item){\n\treturn (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' );\n};\n\nvar hooks = {};\n\nvar hooksOf = function(object){\n\tvar type = typeOf(object.prototype);\n\treturn hooks[type] || (hooks[type] = []);\n};\n\nvar implement = function(name, method){\n\tif (method && method.$hidden) return;\n\n\tvar hooks = hooksOf(this);\n\n\tfor (var i = 0; i < hooks.length; i++){\n\t\tvar hook = hooks[i];\n\t\tif (typeOf(hook) == 'type') implement.call(hook, name, method);\n\t\telse hook.call(this, name, method);\n\t}\n\n\tvar previous = this.prototype[name];\n\tif (previous == null || !previous.$protected) this.prototype[name] = method;\n\n\tif (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){\n\t\treturn method.apply(item, slice.call(arguments, 1));\n\t});\n};\n\nvar extend = function(name, method){\n\tif (method && method.$hidden) return;\n\tvar previous = this[name];\n\tif (previous == null || !previous.$protected) this[name] = method;\n};\n\nType.implement({\n\n\timplement: implement.overloadSetter(),\n\n\textend: extend.overloadSetter(),\n\n\talias: function(name, existing){\n\t\timplement.call(this, name, this.prototype[existing]);\n\t}.overloadSetter(),\n\n\tmirror: function(hook){\n\t\thooksOf(this).push(hook);\n\t\treturn this;\n\t}\n\n});\n\nnew Type('Type', Type);\n\n// Default Types\n\nvar force = function(name, object, methods){\n\tvar isType = (object != Object),\n\t\tprototype = object.prototype;\n\n\tif (isType) object = new Type(name, object);\n\n\tfor (var i = 0, l = methods.length; i < l; i++){\n\t\tvar key = methods[i],\n\t\t\tgeneric = object[key],\n\t\t\tproto = prototype[key];\n\n\t\tif (generic) generic.protect();\n\t\tif (isType && proto) object.implement(key, proto.protect());\n\t}\n\n\tif (isType){\n\t\tvar methodsEnumerable = prototype.propertyIsEnumerable(methods[0]);\n\t\tobject.forEachMethod = function(fn){\n\t\t\tif (!methodsEnumerable) for (var i = 0, l = methods.length; i < l; i++){\n\t\t\t\tfn.call(prototype, prototype[methods[i]], methods[i]);\n\t\t\t}\n\t\t\tfor (var key in prototype) fn.call(prototype, prototype[key], key)\n\t\t};\n\t}\n\n\treturn force;\n};\n\nforce('String', String, [\n\t'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search',\n\t'slice', 'split', 'substr', 'substring', 'trim', 'toLowerCase', 'toUpperCase'\n])('Array', Array, [\n\t'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice',\n\t'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight'\n])('Number', Number, [\n\t'toExponential', 'toFixed', 'toLocaleString', 'toPrecision'\n])('Function', Function, [\n\t'apply', 'call', 'bind'\n])('RegExp', RegExp, [\n\t'exec', 'test'\n])('Object', Object, [\n\t'create', 'defineProperty', 'defineProperties', 'keys',\n\t'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames',\n\t'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen'\n])('Date', Date, ['now']);\n\nObject.extend = extend.overloadSetter();\n\nDate.extend('now', function(){\n\treturn +(new Date);\n});\n\nnew Type('Boolean', Boolean);\n\n// fixes NaN returning as Number\n\nNumber.prototype.$family = function(){\n\treturn isFinite(this) ? 'number' : 'null';\n}.hide();\n\n// Number.random\n\nNumber.extend('random', function(min, max){\n\treturn Math.floor(Math.random() * (max - min + 1) + min);\n});\n\n// forEach, each\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nObject.extend('forEach', function(object, fn, bind){\n\tfor (var key in object){\n\t\tif (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object);\n\t}\n});\n\nObject.each = Object.forEach;\n\nArray.implement({\n\n\tforEach: function(fn, bind){\n\t\tfor (var i = 0, l = this.length; i < l; i++){\n\t\t\tif (i in this) fn.call(bind, this[i], i, this);\n\t\t}\n\t},\n\n\teach: function(fn, bind){\n\t\tArray.forEach(this, fn, bind);\n\t\treturn this;\n\t}\n\n});\n\n// Array & Object cloning, Object merging and appending\n\nvar cloneOf = function(item){\n\tswitch (typeOf(item)){\n\t\tcase 'array': return item.clone();\n\t\tcase 'object': return Object.clone(item);\n\t\tdefault: return item;\n\t}\n};\n\nArray.implement('clone', function(){\n\tvar i = this.length, clone = new Array(i);\n\twhile (i--) clone[i] = cloneOf(this[i]);\n\treturn clone;\n});\n\nvar mergeOne = function(source, key, current){\n\tswitch (typeOf(current)){\n\t\tcase 'object':\n\t\t\tif (typeOf(source[key]) == 'object') Object.merge(source[key], current);\n\t\t\telse source[key] = Object.clone(current);\n\t\tbreak;\n\t\tcase 'array': source[key] = current.clone(); break;\n\t\tdefault: source[key] = current;\n\t}\n\treturn source;\n};\n\nObject.extend({\n\n\tmerge: function(source, k, v){\n\t\tif (typeOf(k) == 'string') return mergeOne(source, k, v);\n\t\tfor (var i = 1, l = arguments.length; i < l; i++){\n\t\t\tvar object = arguments[i];\n\t\t\tfor (var key in object) mergeOne(source, key, object[key]);\n\t\t}\n\t\treturn source;\n\t},\n\n\tclone: function(object){\n\t\tvar clone = {};\n\t\tfor (var key in object) clone[key] = cloneOf(object[key]);\n\t\treturn clone;\n\t},\n\n\tappend: function(original){\n\t\tfor (var i = 1, l = arguments.length; i < l; i++){\n\t\t\tvar extended = arguments[i] || {};\n\t\t\tfor (var key in extended) original[key] = extended[key];\n\t\t}\n\t\treturn original;\n\t}\n\n});\n\n// Object-less types\n\n['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){\n\tnew Type(name);\n});\n\n// Unique ID\n\nvar UID = Date.now();\n\nString.extend('uniqueID', function(){\n\treturn (UID++).toString(36);\n});\n\n\n\n})();\n\n\n/*\n---\n\nname: Array\n\ndescription: Contains Array Prototypes like each, contains, and erase.\n\nlicense: MIT-style license.\n\nrequires: Type\n\nprovides: Array\n\n...\n*/\n\nArray.implement({\n\n\t/**/\n\tevery: function(fn, bind){\n\t\tfor (var i = 0, l = this.length >>> 0; i < l; i++){\n\t\t\tif ((i in this) && !fn.call(bind, this[i], i, this)) return false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfilter: function(fn, bind){\n\t\tvar results = [];\n\t\tfor (var value, i = 0, l = this.length >>> 0; i < l; i++) if (i in this){\n\t\t\tvalue = this[i];\n\t\t\tif (fn.call(bind, value, i, this)) results.push(value);\n\t\t}\n\t\treturn results;\n\t},\n\n\tindexOf: function(item, from){\n\t\tvar length = this.length >>> 0;\n\t\tfor (var i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++){\n\t\t\tif (this[i] === item) return i;\n\t\t}\n\t\treturn -1;\n\t},\n\n\tmap: function(fn, bind){\n\t\tvar length = this.length >>> 0, results = Array(length);\n\t\tfor (var i = 0; i < length; i++){\n\t\t\tif (i in this) results[i] = fn.call(bind, this[i], i, this);\n\t\t}\n\t\treturn results;\n\t},\n\n\tsome: function(fn, bind){\n\t\tfor (var i = 0, l = this.length >>> 0; i < l; i++){\n\t\t\tif ((i in this) && fn.call(bind, this[i], i, this)) return true;\n\t\t}\n\t\treturn false;\n\t},\n\t/**/\n\n\tclean: function(){\n\t\treturn this.filter(function(item){\n\t\t\treturn item != null;\n\t\t});\n\t},\n\n\tinvoke: function(methodName){\n\t\tvar args = Array.slice(arguments, 1);\n\t\treturn this.map(function(item){\n\t\t\treturn item[methodName].apply(item, args);\n\t\t});\n\t},\n\n\tassociate: function(keys){\n\t\tvar obj = {}, length = Math.min(this.length, keys.length);\n\t\tfor (var i = 0; i < length; i++) obj[keys[i]] = this[i];\n\t\treturn obj;\n\t},\n\n\tlink: function(object){\n\t\tvar result = {};\n\t\tfor (var i = 0, l = this.length; i < l; i++){\n\t\t\tfor (var key in object){\n\t\t\t\tif (object[key](this[i])){\n\t\t\t\t\tresult[key] = this[i];\n\t\t\t\t\tdelete object[key];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\n\tcontains: function(item, from){\n\t\treturn this.indexOf(item, from) != -1;\n\t},\n\n\tappend: function(array){\n\t\tthis.push.apply(this, array);\n\t\treturn this;\n\t},\n\n\tgetLast: function(){\n\t\treturn (this.length) ? this[this.length - 1] : null;\n\t},\n\n\tgetRandom: function(){\n\t\treturn (this.length) ? this[Number.random(0, this.length - 1)] : null;\n\t},\n\n\tinclude: function(item){\n\t\tif (!this.contains(item)) this.push(item);\n\t\treturn this;\n\t},\n\n\tcombine: function(array){\n\t\tfor (var i = 0, l = array.length; i < l; i++) this.include(array[i]);\n\t\treturn this;\n\t},\n\n\terase: function(item){\n\t\tfor (var i = this.length; i--;){\n\t\t\tif (this[i] === item) this.splice(i, 1);\n\t\t}\n\t\treturn this;\n\t},\n\n\tempty: function(){\n\t\tthis.length = 0;\n\t\treturn this;\n\t},\n\n\tflatten: function(){\n\t\tvar array = [];\n\t\tfor (var i = 0, l = this.length; i < l; i++){\n\t\t\tvar type = typeOf(this[i]);\n\t\t\tif (type == 'null') continue;\n\t\t\tarray = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);\n\t\t}\n\t\treturn array;\n\t},\n\n\tpick: function(){\n\t\tfor (var i = 0, l = this.length; i < l; i++){\n\t\t\tif (this[i] != null) return this[i];\n\t\t}\n\t\treturn null;\n\t},\n\n\thexToRgb: function(array){\n\t\tif (this.length != 3) return null;\n\t\tvar rgb = this.map(function(value){\n\t\t\tif (value.length == 1) value += value;\n\t\t\treturn value.toInt(16);\n\t\t});\n\t\treturn (array) ? rgb : 'rgb(' + rgb + ')';\n\t},\n\n\trgbToHex: function(array){\n\t\tif (this.length < 3) return null;\n\t\tif (this.length == 4 && this[3] == 0 && !array) return 'transparent';\n\t\tvar hex = [];\n\t\tfor (var i = 0; i < 3; i++){\n\t\t\tvar bit = (this[i] - 0).toString(16);\n\t\t\thex.push((bit.length == 1) ? '0' + bit : bit);\n\t\t}\n\t\treturn (array) ? hex : '#' + hex.join('');\n\t}\n\n});\n\n\n\n\n/*\n---\n\nname: String\n\ndescription: Contains String Prototypes like camelCase, capitalize, test, and toInt.\n\nlicense: MIT-style license.\n\nrequires: Type\n\nprovides: String\n\n...\n*/\n\nString.implement({\n\n\ttest: function(regex, params){\n\t\treturn ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this);\n\t},\n\n\tcontains: function(string, separator){\n\t\treturn (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : String(this).indexOf(string) > -1;\n\t},\n\n\ttrim: function(){\n\t\treturn String(this).replace(/^\\s+|\\s+$/g, '');\n\t},\n\n\tclean: function(){\n\t\treturn String(this).replace(/\\s+/g, ' ').trim();\n\t},\n\n\tcamelCase: function(){\n\t\treturn String(this).replace(/-\\D/g, function(match){\n\t\t\treturn match.charAt(1).toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(){\n\t\treturn String(this).replace(/[A-Z]/g, function(match){\n\t\t\treturn ('-' + match.charAt(0).toLowerCase());\n\t\t});\n\t},\n\n\tcapitalize: function(){\n\t\treturn String(this).replace(/\\b[a-z]/g, function(match){\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tescapeRegExp: function(){\n\t\treturn String(this).replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n\t},\n\n\ttoInt: function(base){\n\t\treturn parseInt(this, base || 10);\n\t},\n\n\ttoFloat: function(){\n\t\treturn parseFloat(this);\n\t},\n\n\thexToRgb: function(array){\n\t\tvar hex = String(this).match(/^#?(\\w{1,2})(\\w{1,2})(\\w{1,2})$/);\n\t\treturn (hex) ? hex.slice(1).hexToRgb(array) : null;\n\t},\n\n\trgbToHex: function(array){\n\t\tvar rgb = String(this).match(/\\d{1,3}/g);\n\t\treturn (rgb) ? rgb.rgbToHex(array) : null;\n\t},\n\n\tsubstitute: function(object, regexp){\n\t\treturn String(this).replace(regexp || (/\\\\?\\{([^{}]+)\\}/g), function(match, name){\n\t\t\tif (match.charAt(0) == '\\\\') return match.slice(1);\n\t\t\treturn (object[name] != null) ? object[name] : '';\n\t\t});\n\t}\n\n});\n\n\n/*\n---\n\nname: Number\n\ndescription: Contains Number Prototypes like limit, round, times, and ceil.\n\nlicense: MIT-style license.\n\nrequires: Type\n\nprovides: Number\n\n...\n*/\n\nNumber.implement({\n\n\tlimit: function(min, max){\n\t\treturn Math.min(max, Math.max(min, this));\n\t},\n\n\tround: function(precision){\n\t\tprecision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0);\n\t\treturn Math.round(this * precision) / precision;\n\t},\n\n\ttimes: function(fn, bind){\n\t\tfor (var i = 0; i < this; i++) fn.call(bind, i, this);\n\t},\n\n\ttoFloat: function(){\n\t\treturn parseFloat(this);\n\t},\n\n\ttoInt: function(base){\n\t\treturn parseInt(this, base || 10);\n\t}\n\n});\n\nNumber.alias('each', 'times');\n\n(function(math){\n\tvar methods = {};\n\tmath.each(function(name){\n\t\tif (!Number[name]) methods[name] = function(){\n\t\t\treturn Math[name].apply(null, [this].concat(Array.from(arguments)));\n\t\t};\n\t});\n\tNumber.implement(methods);\n})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);\n\n\n/*\n---\n\nname: Function\n\ndescription: Contains Function Prototypes like create, bind, pass, and delay.\n\nlicense: MIT-style license.\n\nrequires: Type\n\nprovides: Function\n\n...\n*/\n\nFunction.extend({\n\n\tattempt: function(){\n\t\tfor (var i = 0, l = arguments.length; i < l; i++){\n\t\t\ttry {\n\t\t\t\treturn arguments[i]();\n\t\t\t} catch (e){}\n\t\t}\n\t\treturn null;\n\t}\n\n});\n\nFunction.implement({\n\n\tattempt: function(args, bind){\n\t\ttry {\n\t\t\treturn this.apply(bind, Array.from(args));\n\t\t} catch (e){}\n\n\t\treturn null;\n\t},\n\n\t/**/\n\tbind: function(that){\n\t\tvar self = this,\n\t\t\targs = arguments.length > 1 ? Array.slice(arguments, 1) : null,\n\t\t\tF = function(){};\n\n\t\tvar bound = function(){\n\t\t\tvar context = that, length = arguments.length;\n\t\t\tif (this instanceof bound){\n\t\t\t\tF.prototype = self.prototype;\n\t\t\t\tcontext = new F;\n\t\t\t}\n\t\t\tvar result = (!args && !length)\n\t\t\t\t? self.call(context)\n\t\t\t\t: self.apply(context, args && length ? args.concat(Array.slice(arguments)) : args || arguments);\n\t\t\treturn context == that ? result : context;\n\t\t};\n\t\treturn bound;\n\t},\n\t/**/\n\n\tpass: function(args, bind){\n\t\tvar self = this;\n\t\tif (args != null) args = Array.from(args);\n\t\treturn function(){\n\t\t\treturn self.apply(bind, args || arguments);\n\t\t};\n\t},\n\n\tdelay: function(delay, bind, args){\n\t\treturn setTimeout(this.pass((args == null ? [] : args), bind), delay);\n\t},\n\n\tperiodical: function(periodical, bind, args){\n\t\treturn setInterval(this.pass((args == null ? [] : args), bind), periodical);\n\t}\n\n});\n\n\n\n\n/*\n---\n\nname: Object\n\ndescription: Object generic methods\n\nlicense: MIT-style license.\n\nrequires: Type\n\nprovides: [Object, Hash]\n\n...\n*/\n\n(function(){\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nObject.extend({\n\n\tsubset: function(object, keys){\n\t\tvar results = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++){\n\t\t\tvar k = keys[i];\n\t\t\tif (k in object) results[k] = object[k];\n\t\t}\n\t\treturn results;\n\t},\n\n\tmap: function(object, fn, bind){\n\t\tvar results = {};\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object);\n\t\t}\n\t\treturn results;\n\t},\n\n\tfilter: function(object, fn, bind){\n\t\tvar results = {};\n\t\tfor (var key in object){\n\t\t\tvar value = object[key];\n\t\t\tif (hasOwnProperty.call(object, key) && fn.call(bind, value, key, object)) results[key] = value;\n\t\t}\n\t\treturn results;\n\t},\n\n\tevery: function(object, fn, bind){\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsome: function(object, fn, bind){\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tkeys: function(object){\n\t\tvar keys = [];\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key)) keys.push(key);\n\t\t}\n\t\treturn keys;\n\t},\n\n\tvalues: function(object){\n\t\tvar values = [];\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key)) values.push(object[key]);\n\t\t}\n\t\treturn values;\n\t},\n\n\tgetLength: function(object){\n\t\treturn Object.keys(object).length;\n\t},\n\n\tkeyOf: function(object, value){\n\t\tfor (var key in object){\n\t\t\tif (hasOwnProperty.call(object, key) && object[key] === value) return key;\n\t\t}\n\t\treturn null;\n\t},\n\n\tcontains: function(object, value){\n\t\treturn Object.keyOf(object, value) != null;\n\t},\n\n\ttoQueryString: function(object, base){\n\t\tvar queryString = [];\n\n\t\tObject.each(object, function(value, key){\n\t\t\tif (base) key = base + '[' + key + ']';\n\t\t\tvar result;\n\t\t\tswitch (typeOf(value)){\n\t\t\t\tcase 'object': result = Object.toQueryString(value, key); break;\n\t\t\t\tcase 'array':\n\t\t\t\t\tvar qs = {};\n\t\t\t\t\tvalue.each(function(val, i){\n\t\t\t\t\t\tqs[i] = val;\n\t\t\t\t\t});\n\t\t\t\t\tresult = Object.toQueryString(qs, key);\n\t\t\t\tbreak;\n\t\t\t\tdefault: result = key + '=' + encodeURIComponent(value);\n\t\t\t}\n\t\t\tif (value != null) queryString.push(result);\n\t\t});\n\n\t\treturn queryString.join('&');\n\t}\n\n});\n\n})();\n\n\n\n\n/*\n---\n\nname: Browser\n\ndescription: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash.\n\nlicense: MIT-style license.\n\nrequires: [Array, Function, Number, String]\n\nprovides: [Browser, Window, Document]\n\n...\n*/\n\n(function(){\n\nvar document = this.document;\nvar window = document.window = this;\n\nvar ua = navigator.userAgent.toLowerCase(),\n\tplatform = navigator.platform.toLowerCase(),\n\tUA = ua.match(/(opera|ie|firefox|chrome|version)[\\s\\/:]([\\w\\d\\.]+)?.*?(safari|version[\\s\\/:]([\\w\\d\\.]+)|$)/) || [null, 'unknown', 0],\n\tmode = UA[1] == 'ie' && document.documentMode;\n\nvar Browser = this.Browser = {\n\n\textend: Function.prototype.extend,\n\n\tname: (UA[1] == 'version') ? UA[3] : UA[1],\n\n\tversion: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),\n\n\tPlatform: {\n\t\tname: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]\n\t},\n\n\tFeatures: {\n\t\txpath: !!(document.evaluate),\n\t\tair: !!(window.runtime),\n\t\tquery: !!(document.querySelector),\n\t\tjson: !!(window.JSON)\n\t},\n\n\tPlugins: {}\n\n};\n\nBrowser[Browser.name] = true;\nBrowser[Browser.name + parseInt(Browser.version, 10)] = true;\nBrowser.Platform[Browser.Platform.name] = true;\n\n// Request\n\nBrowser.Request = (function(){\n\n\tvar XMLHTTP = function(){\n\t\treturn new XMLHttpRequest();\n\t};\n\n\tvar MSXML2 = function(){\n\t\treturn new ActiveXObject('MSXML2.XMLHTTP');\n\t};\n\n\tvar MSXML = function(){\n\t\treturn new ActiveXObject('Microsoft.XMLHTTP');\n\t};\n\n\treturn Function.attempt(function(){\n\t\tXMLHTTP();\n\t\treturn XMLHTTP;\n\t}, function(){\n\t\tMSXML2();\n\t\treturn MSXML2;\n\t}, function(){\n\t\tMSXML();\n\t\treturn MSXML;\n\t});\n\n})();\n\nBrowser.Features.xhr = !!(Browser.Request);\n\n// Flash detection\n\nvar version = (Function.attempt(function(){\n\treturn navigator.plugins['Shockwave Flash'].description;\n}, function(){\n\treturn new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');\n}) || '0 r0').match(/\\d+/g);\n\nBrowser.Plugins.Flash = {\n\tversion: Number(version[0] || '0.' + version[1]) || 0,\n\tbuild: Number(version[2]) || 0\n};\n\n// String scripts\n\nBrowser.exec = function(text){\n\tif (!text) return text;\n\tif (window.execScript){\n\t\twindow.execScript(text);\n\t} else {\n\t\tvar script = document.createElement('script');\n\t\tscript.setAttribute('type', 'text/javascript');\n\t\tscript.text = text;\n\t\tdocument.head.appendChild(script);\n\t\tdocument.head.removeChild(script);\n\t}\n\treturn text;\n};\n\nString.implement('stripScripts', function(exec){\n\tvar scripts = '';\n\tvar text = this.replace(/]*>([\\s\\S]*?)<\\/script>/gi, function(all, code){\n\t\tscripts += code + '\\n';\n\t\treturn '';\n\t});\n\tif (exec === true) Browser.exec(scripts);\n\telse if (typeOf(exec) == 'function') exec(scripts, text);\n\treturn text;\n});\n\n// Window, Document\n\nBrowser.extend({\n\tDocument: this.Document,\n\tWindow: this.Window,\n\tElement: this.Element,\n\tEvent: this.Event\n});\n\nthis.Window = this.$constructor = new Type('Window', function(){});\n\nthis.$family = Function.from('window').hide();\n\nWindow.mirror(function(name, method){\n\twindow[name] = method;\n});\n\nthis.Document = document.$constructor = new Type('Document', function(){});\n\ndocument.$family = Function.from('document').hide();\n\nDocument.mirror(function(name, method){\n\tdocument[name] = method;\n});\n\ndocument.html = document.documentElement;\nif (!document.head) document.head = document.getElementsByTagName('head')[0];\n\nif (document.execCommand) try {\n\tdocument.execCommand(\"BackgroundImageCache\", false, true);\n} catch (e){}\n\n/**/\nif (this.attachEvent && !this.addEventListener){\n\tvar unloadEvent = function(){\n\t\tthis.detachEvent('onunload', unloadEvent);\n\t\tdocument.head = document.html = document.window = null;\n\t};\n\tthis.attachEvent('onunload', unloadEvent);\n}\n\n// IE fails on collections and )\nvar arrayFrom = Array.from;\ntry {\n\tarrayFrom(document.html.childNodes);\n} catch(e){\n\tArray.from = function(item){\n\t\tif (typeof item != 'string' && Type.isEnumerable(item) && typeOf(item) != 'array'){\n\t\t\tvar i = item.length, array = new Array(i);\n\t\t\twhile (i--) array[i] = item[i];\n\t\t\treturn array;\n\t\t}\n\t\treturn arrayFrom(item);\n\t};\n\n\tvar prototype = Array.prototype,\n\t\tslice = prototype.slice;\n\t['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice'].each(function(name){\n\t\tvar method = prototype[name];\n\t\tArray[name] = function(item){\n\t\t\treturn method.apply(Array.from(item), slice.call(arguments, 1));\n\t\t};\n\t});\n}\n/**/\n\n\n\n})();\n\n\n/*\n---\n\nname: Event\n\ndescription: Contains the Event Type, to make the event object cross-browser.\n\nlicense: MIT-style license.\n\nrequires: [Window, Document, Array, Function, String, Object]\n\nprovides: Event\n\n...\n*/\n\n(function() {\n\nvar _keys = {};\n\nvar DOMEvent = this.DOMEvent = new Type('DOMEvent', function(event, win){\n\tif (!win) win = window;\n\tevent = event || win.event;\n\tif (event.$extended) return event;\n\tthis.event = event;\n\tthis.$extended = true;\n\tthis.shift = event.shiftKey;\n\tthis.control = event.ctrlKey;\n\tthis.alt = event.altKey;\n\tthis.meta = event.metaKey;\n\tvar type = this.type = event.type;\n\tvar target = event.target || event.srcElement;\n\twhile (target && target.nodeType == 3) target = target.parentNode;\n\tthis.target = document.id(target);\n\n\tif (type.indexOf('key') == 0){\n\t\tvar code = this.code = (event.which || event.keyCode);\n\t\tthis.key = _keys[code];\n\t\tif (type == 'keydown'){\n\t\t\tif (code > 111 && code < 124) this.key = 'f' + (code - 111);\n\t\t\telse if (code > 95 && code < 106) this.key = code - 96;\n\t\t}\n\t\tif (this.key == null) this.key = String.fromCharCode(code).toLowerCase();\n\t} else if (type == 'click' || type == 'dblclick' || type == 'contextmenu' || type == 'DOMMouseScroll' || type.indexOf('mouse') == 0){\n\t\tvar doc = win.document;\n\t\tdoc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;\n\t\tthis.page = {\n\t\t\tx: (event.pageX != null) ? event.pageX : event.clientX + doc.scrollLeft,\n\t\t\ty: (event.pageY != null) ? event.pageY : event.clientY + doc.scrollTop\n\t\t};\n\t\tthis.client = {\n\t\t\tx: (event.pageX != null) ? event.pageX - win.pageXOffset : event.clientX,\n\t\t\ty: (event.pageY != null) ? event.pageY - win.pageYOffset : event.clientY\n\t\t};\n\t\tif (type == 'DOMMouseScroll' || type == 'mousewheel')\n\t\t\tthis.wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;\n\n\t\tthis.rightClick = (event.which == 3 || event.button == 2);\n\t\tif (type == 'mouseover' || type == 'mouseout'){\n\t\t\tvar related = event.relatedTarget || event[(type == 'mouseover' ? 'from' : 'to') + 'Element'];\n\t\t\twhile (related && related.nodeType == 3) related = related.parentNode;\n\t\t\tthis.relatedTarget = document.id(related);\n\t\t}\n\t} else if (type.indexOf('touch') == 0 || type.indexOf('gesture') == 0){\n\t\tthis.rotation = event.rotation;\n\t\tthis.scale = event.scale;\n\t\tthis.targetTouches = event.targetTouches;\n\t\tthis.changedTouches = event.changedTouches;\n\t\tvar touches = this.touches = event.touches;\n\t\tif (touches && touches[0]){\n\t\t\tvar touch = touches[0];\n\t\t\tthis.page = {x: touch.pageX, y: touch.pageY};\n\t\t\tthis.client = {x: touch.clientX, y: touch.clientY};\n\t\t}\n\t}\n\n\tif (!this.client) this.client = {};\n\tif (!this.page) this.page = {};\n});\n\nDOMEvent.implement({\n\n\tstop: function(){\n\t\treturn this.preventDefault().stopPropagation();\n\t},\n\n\tstopPropagation: function(){\n\t\tif (this.event.stopPropagation) this.event.stopPropagation();\n\t\telse this.event.cancelBubble = true;\n\t\treturn this;\n\t},\n\n\tpreventDefault: function(){\n\t\tif (this.event.preventDefault) this.event.preventDefault();\n\t\telse this.event.returnValue = false;\n\t\treturn this;\n\t}\n\n});\n\nDOMEvent.defineKey = function(code, key){\n\t_keys[code] = key;\n\treturn this;\n};\n\nDOMEvent.defineKeys = DOMEvent.defineKey.overloadSetter(true);\n\nDOMEvent.defineKeys({\n\t'38': 'up', '40': 'down', '37': 'left', '39': 'right',\n\t'27': 'esc', '32': 'space', '8': 'backspace', '9': 'tab',\n\t'46': 'delete', '13': 'enter'\n});\n\n})();\n\n\n\n\n\n\n/*\n---\n\nname: Class\n\ndescription: Contains the Class Function for easily creating, extending, and implementing reusable Classes.\n\nlicense: MIT-style license.\n\nrequires: [Array, String, Function, Number]\n\nprovides: Class\n\n...\n*/\n\n(function(){\n\nvar Class = this.Class = new Type('Class', function(params){\n\tif (instanceOf(params, Function)) params = {initialize: params};\n\n\tvar newClass = function(){\n\t\treset(this);\n\t\tif (newClass.$prototyping) return this;\n\t\tthis.$caller = null;\n\t\tvar value = (this.initialize) ? this.initialize.apply(this, arguments) : this;\n\t\tthis.$caller = this.caller = null;\n\t\treturn value;\n\t}.extend(this).implement(params);\n\n\tnewClass.$constructor = Class;\n\tnewClass.prototype.$constructor = newClass;\n\tnewClass.prototype.parent = parent;\n\n\treturn newClass;\n});\n\nvar parent = function(){\n\tif (!this.$caller) throw new Error('The method \"parent\" cannot be called.');\n\tvar name = this.$caller.$name,\n\t\tparent = this.$caller.$owner.parent,\n\t\tprevious = (parent) ? parent.prototype[name] : null;\n\tif (!previous) throw new Error('The method \"' + name + '\" has no parent.');\n\treturn previous.apply(this, arguments);\n};\n\nvar reset = function(object){\n\tfor (var key in object){\n\t\tvar value = object[key];\n\t\tswitch (typeOf(value)){\n\t\t\tcase 'object':\n\t\t\t\tvar F = function(){};\n\t\t\t\tF.prototype = value;\n\t\t\t\tobject[key] = reset(new F);\n\t\t\tbreak;\n\t\t\tcase 'array': object[key] = value.clone(); break;\n\t\t}\n\t}\n\treturn object;\n};\n\nvar wrap = function(self, key, method){\n\tif (method.$origin) method = method.$origin;\n\tvar wrapper = function(){\n\t\tif (method.$protected && this.$caller == null) throw new Error('The method \"' + key + '\" cannot be called.');\n\t\tvar caller = this.caller, current = this.$caller;\n\t\tthis.caller = current; this.$caller = wrapper;\n\t\tvar result = method.apply(this, arguments);\n\t\tthis.$caller = current; this.caller = caller;\n\t\treturn result;\n\t}.extend({$owner: self, $origin: method, $name: key});\n\treturn wrapper;\n};\n\nvar implement = function(key, value, retain){\n\tif (Class.Mutators.hasOwnProperty(key)){\n\t\tvalue = Class.Mutators[key].call(this, value);\n\t\tif (value == null) return this;\n\t}\n\n\tif (typeOf(value) == 'function'){\n\t\tif (value.$hidden) return this;\n\t\tthis.prototype[key] = (retain) ? value : wrap(this, key, value);\n\t} else {\n\t\tObject.merge(this.prototype, key, value);\n\t}\n\n\treturn this;\n};\n\nvar getInstance = function(klass){\n\tklass.$prototyping = true;\n\tvar proto = new klass;\n\tdelete klass.$prototyping;\n\treturn proto;\n};\n\nClass.implement('implement', implement.overloadSetter());\n\nClass.Mutators = {\n\n\tExtends: function(parent){\n\t\tthis.parent = parent;\n\t\tthis.prototype = getInstance(parent);\n\t},\n\n\tImplements: function(items){\n\t\tArray.from(items).each(function(item){\n\t\t\tvar instance = new item;\n\t\t\tfor (var key in instance) implement.call(this, key, instance[key], true);\n\t\t}, this);\n\t}\n};\n\n})();\n\n\n/*\n---\n\nname: Class.Extras\n\ndescription: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.\n\nlicense: MIT-style license.\n\nrequires: Class\n\nprovides: [Class.Extras, Chain, Events, Options]\n\n...\n*/\n\n(function(){\n\nthis.Chain = new Class({\n\n\t$chain: [],\n\n\tchain: function(){\n\t\tthis.$chain.append(Array.flatten(arguments));\n\t\treturn this;\n\t},\n\n\tcallChain: function(){\n\t\treturn (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;\n\t},\n\n\tclearChain: function(){\n\t\tthis.$chain.empty();\n\t\treturn this;\n\t}\n\n});\n\nvar removeOn = function(string){\n\treturn string.replace(/^on([A-Z])/, function(full, first){\n\t\treturn first.toLowerCase();\n\t});\n};\n\nthis.Events = new Class({\n\n\t$events: {},\n\n\taddEvent: function(type, fn, internal){\n\t\ttype = removeOn(type);\n\n\t\t\n\n\t\tthis.$events[type] = (this.$events[type] || []).include(fn);\n\t\tif (internal) fn.internal = true;\n\t\treturn this;\n\t},\n\n\taddEvents: function(events){\n\t\tfor (var type in events) this.addEvent(type, events[type]);\n\t\treturn this;\n\t},\n\n\tfireEvent: function(type, args, delay){\n\t\ttype = removeOn(type);\n\t\tvar events = this.$events[type];\n\t\tif (!events) return this;\n\t\targs = Array.from(args);\n\t\tevents.each(function(fn){\n\t\t\tif (delay) fn.delay(delay, this, args);\n\t\t\telse fn.apply(this, args);\n\t\t}, this);\n\t\treturn this;\n\t},\n\n\tremoveEvent: function(type, fn){\n\t\ttype = removeOn(type);\n\t\tvar events = this.$events[type];\n\t\tif (events && !fn.internal){\n\t\t\tvar index = events.indexOf(fn);\n\t\t\tif (index != -1) delete events[index];\n\t\t}\n\t\treturn this;\n\t},\n\n\tremoveEvents: function(events){\n\t\tvar type;\n\t\tif (typeOf(events) == 'object'){\n\t\t\tfor (type in events) this.removeEvent(type, events[type]);\n\t\t\treturn this;\n\t\t}\n\t\tif (events) events = removeOn(events);\n\t\tfor (type in this.$events){\n\t\t\tif (events && events != type) continue;\n\t\t\tvar fns = this.$events[type];\n\t\t\tfor (var i = fns.length; i--;) if (i in fns){\n\t\t\t\tthis.removeEvent(type, fns[i]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n});\n\nthis.Options = new Class({\n\n\tsetOptions: function(){\n\t\tvar options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));\n\t\tif (this.addEvent) for (var option in options){\n\t\t\tif (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;\n\t\t\tthis.addEvent(option, options[option]);\n\t\t\tdelete options[option];\n\t\t}\n\t\treturn this;\n\t}\n\n});\n\n})();\n\n\n/*\n---\nname: Slick.Parser\ndescription: Standalone CSS3 Selector parser\nprovides: Slick.Parser\n...\n*/\n\n;(function(){\n\nvar parsed,\n\tseparatorIndex,\n\tcombinatorIndex,\n\treversed,\n\tcache = {},\n\treverseCache = {},\n\treUnescape = /\\\\/g;\n\nvar parse = function(expression, isReversed){\n\tif (expression == null) return null;\n\tif (expression.Slick === true) return expression;\n\texpression = ('' + expression).replace(/^\\s+|\\s+$/g, '');\n\treversed = !!isReversed;\n\tvar currentCache = (reversed) ? reverseCache : cache;\n\tif (currentCache[expression]) return currentCache[expression];\n\tparsed = {\n\t\tSlick: true,\n\t\texpressions: [],\n\t\traw: expression,\n\t\treverse: function(){\n\t\t\treturn parse(this.raw, true);\n\t\t}\n\t};\n\tseparatorIndex = -1;\n\twhile (expression != (expression = expression.replace(regexp, parser)));\n\tparsed.length = parsed.expressions.length;\n\treturn currentCache[parsed.raw] = (reversed) ? reverse(parsed) : parsed;\n};\n\nvar reverseCombinator = function(combinator){\n\tif (combinator === '!') return ' ';\n\telse if (combinator === ' ') return '!';\n\telse if ((/^!/).test(combinator)) return combinator.replace(/^!/, '');\n\telse return '!' + combinator;\n};\n\nvar reverse = function(expression){\n\tvar expressions = expression.expressions;\n\tfor (var i = 0; i < expressions.length; i++){\n\t\tvar exp = expressions[i];\n\t\tvar last = {parts: [], tag: '*', combinator: reverseCombinator(exp[0].combinator)};\n\n\t\tfor (var j = 0; j < exp.length; j++){\n\t\t\tvar cexp = exp[j];\n\t\t\tif (!cexp.reverseCombinator) cexp.reverseCombinator = ' ';\n\t\t\tcexp.combinator = cexp.reverseCombinator;\n\t\t\tdelete cexp.reverseCombinator;\n\t\t}\n\n\t\texp.reverse().push(last);\n\t}\n\treturn expression;\n};\n\nvar escapeRegExp = function(string){// Credit: XRegExp 0.6.1 (c) 2007-2008 Steven Levithan MIT License\n\treturn string.replace(/[-[\\]{}()*+?.\\\\^$|,#\\s]/g, function(match){\n\t\treturn '\\\\' + match;\n\t});\n};\n\nvar regexp = new RegExp(\n/*\n#!/usr/bin/env ruby\nputs \"\\t\\t\" + DATA.read.gsub(/\\(\\?x\\)|\\s+#.*$|\\s+|\\\\$|\\\\n/,'')\n__END__\n\t\"(?x)^(?:\\\n\t \\\\s* ( , ) \\\\s* # Separator \\n\\\n\t| \\\\s* ( + ) \\\\s* # Combinator \\n\\\n\t| ( \\\\s+ ) # CombinatorChildren \\n\\\n\t| ( + | \\\\* ) # Tag \\n\\\n\t| \\\\# ( + ) # ID \\n\\\n\t| \\\\. ( + ) # ClassName \\n\\\n\t| # Attribute \\n\\\n\t\\\\[ \\\n\t\t\\\\s* (+) (?: \\\n\t\t\t\\\\s* ([*^$!~|]?=) (?: \\\n\t\t\t\t\\\\s* (?:\\\n\t\t\t\t\t([\\\"']?)(.*?)\\\\9 \\\n\t\t\t\t)\\\n\t\t\t) \\\n\t\t)? \\\\s* \\\n\t\\\\](?!\\\\]) \\n\\\n\t| :+ ( + )(?:\\\n\t\\\\( (?:\\\n\t\t(?:([\\\"'])([^\\\\12]*)\\\\12)|((?:\\\\([^)]+\\\\)|[^()]*)+)\\\n\t) \\\\)\\\n\t)?\\\n\t)\"\n*/\n\t\"^(?:\\\\s*(,)\\\\s*|\\\\s*(+)\\\\s*|(\\\\s+)|(+|\\\\*)|\\\\#(+)|\\\\.(+)|\\\\[\\\\s*(+)(?:\\\\s*([*^$!~|]?=)(?:\\\\s*(?:([\\\"']?)(.*?)\\\\9)))?\\\\s*\\\\](?!\\\\])|(:+)(+)(?:\\\\((?:(?:([\\\"'])([^\\\\13]*)\\\\13)|((?:\\\\([^)]+\\\\)|[^()]*)+))\\\\))?)\"\n\t.replace(//, '[' + escapeRegExp(\">+~`!@$%^&={}\\\\;/g, '(?:[\\\\w\\\\u00a1-\\\\uFFFF-]|\\\\\\\\[^\\\\s0-9a-f])')\n\t.replace(//g, '(?:[:\\\\w\\\\u00a1-\\\\uFFFF-]|\\\\\\\\[^\\\\s0-9a-f])')\n);\n\nfunction parser(\n\trawMatch,\n\n\tseparator,\n\tcombinator,\n\tcombinatorChildren,\n\n\ttagName,\n\tid,\n\tclassName,\n\n\tattributeKey,\n\tattributeOperator,\n\tattributeQuote,\n\tattributeValue,\n\n\tpseudoMarker,\n\tpseudoClass,\n\tpseudoQuote,\n\tpseudoClassQuotedValue,\n\tpseudoClassValue\n){\n\tif (separator || separatorIndex === -1){\n\t\tparsed.expressions[++separatorIndex] = [];\n\t\tcombinatorIndex = -1;\n\t\tif (separator) return '';\n\t}\n\n\tif (combinator || combinatorChildren || combinatorIndex === -1){\n\t\tcombinator = combinator || ' ';\n\t\tvar currentSeparator = parsed.expressions[separatorIndex];\n\t\tif (reversed && currentSeparator[combinatorIndex])\n\t\t\tcurrentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator);\n\t\tcurrentSeparator[++combinatorIndex] = {combinator: combinator, tag: '*'};\n\t}\n\n\tvar currentParsed = parsed.expressions[separatorIndex][combinatorIndex];\n\n\tif (tagName){\n\t\tcurrentParsed.tag = tagName.replace(reUnescape, '');\n\n\t} else if (id){\n\t\tcurrentParsed.id = id.replace(reUnescape, '');\n\n\t} else if (className){\n\t\tclassName = className.replace(reUnescape, '');\n\n\t\tif (!currentParsed.classList) currentParsed.classList = [];\n\t\tif (!currentParsed.classes) currentParsed.classes = [];\n\t\tcurrentParsed.classList.push(className);\n\t\tcurrentParsed.classes.push({\n\t\t\tvalue: className,\n\t\t\tregexp: new RegExp('(^|\\\\s)' + escapeRegExp(className) + '(\\\\s|$)')\n\t\t});\n\n\t} else if (pseudoClass){\n\t\tpseudoClassValue = pseudoClassValue || pseudoClassQuotedValue;\n\t\tpseudoClassValue = pseudoClassValue ? pseudoClassValue.replace(reUnescape, '') : null;\n\n\t\tif (!currentParsed.pseudos) currentParsed.pseudos = [];\n\t\tcurrentParsed.pseudos.push({\n\t\t\tkey: pseudoClass.replace(reUnescape, ''),\n\t\t\tvalue: pseudoClassValue,\n\t\t\ttype: pseudoMarker.length == 1 ? 'class' : 'element'\n\t\t});\n\n\t} else if (attributeKey){\n\t\tattributeKey = attributeKey.replace(reUnescape, '');\n\t\tattributeValue = (attributeValue || '').replace(reUnescape, '');\n\n\t\tvar test, regexp;\n\n\t\tswitch (attributeOperator){\n\t\t\tcase '^=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) ); break;\n\t\t\tcase '$=' : regexp = new RegExp( escapeRegExp(attributeValue) +'$' ); break;\n\t\t\tcase '~=' : regexp = new RegExp( '(^|\\\\s)'+ escapeRegExp(attributeValue) +'(\\\\s|$)' ); break;\n\t\t\tcase '|=' : regexp = new RegExp( '^'+ escapeRegExp(attributeValue) +'(-|$)' ); break;\n\t\t\tcase '=' : test = function(value){\n\t\t\t\treturn attributeValue == value;\n\t\t\t}; break;\n\t\t\tcase '*=' : test = function(value){\n\t\t\t\treturn value && value.indexOf(attributeValue) > -1;\n\t\t\t}; break;\n\t\t\tcase '!=' : test = function(value){\n\t\t\t\treturn attributeValue != value;\n\t\t\t}; break;\n\t\t\tdefault : test = function(value){\n\t\t\t\treturn !!value;\n\t\t\t};\n\t\t}\n\n\t\tif (attributeValue == '' && (/^[*$^]=$/).test(attributeOperator)) test = function(){\n\t\t\treturn false;\n\t\t};\n\n\t\tif (!test) test = function(value){\n\t\t\treturn value && regexp.test(value);\n\t\t};\n\n\t\tif (!currentParsed.attributes) currentParsed.attributes = [];\n\t\tcurrentParsed.attributes.push({\n\t\t\tkey: attributeKey,\n\t\t\toperator: attributeOperator,\n\t\t\tvalue: attributeValue,\n\t\t\ttest: test\n\t\t});\n\n\t}\n\n\treturn '';\n};\n\n// Slick NS\n\nvar Slick = (this.Slick || {});\n\nSlick.parse = function(expression){\n\treturn parse(expression);\n};\n\nSlick.escapeRegExp = escapeRegExp;\n\nif (!this.Slick) this.Slick = Slick;\n\n}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this);\n\n\n/*\n---\nname: Slick.Finder\ndescription: The new, superfast css selector engine.\nprovides: Slick.Finder\nrequires: Slick.Parser\n...\n*/\n\n;(function(){\n\nvar local = {},\n\tfeaturesCache = {},\n\ttoString = Object.prototype.toString;\n\n// Feature / Bug detection\n\nlocal.isNativeCode = function(fn){\n\treturn (/\\{\\s*\\[native code\\]\\s*\\}/).test('' + fn);\n};\n\nlocal.isXML = function(document){\n\treturn (!!document.xmlVersion) || (!!document.xml) || (toString.call(document) == '[object XMLDocument]') ||\n\t(document.nodeType == 9 && document.documentElement.nodeName != 'HTML');\n};\n\nlocal.setDocument = function(document){\n\n\t// convert elements / window arguments to document. if document cannot be extrapolated, the function returns.\n\tvar nodeType = document.nodeType;\n\tif (nodeType == 9); // document\n\telse if (nodeType) document = document.ownerDocument; // node\n\telse if (document.navigator) document = document.document; // window\n\telse return;\n\n\t// check if it's the old document\n\n\tif (this.document === document) return;\n\tthis.document = document;\n\n\t// check if we have done feature detection on this document before\n\n\tvar root = document.documentElement,\n\t\trootUid = this.getUIDXML(root),\n\t\tfeatures = featuresCache[rootUid],\n\t\tfeature;\n\n\tif (features){\n\t\tfor (feature in features){\n\t\t\tthis[feature] = features[feature];\n\t\t}\n\t\treturn;\n\t}\n\n\tfeatures = featuresCache[rootUid] = {};\n\n\tfeatures.root = root;\n\tfeatures.isXMLDocument = this.isXML(document);\n\n\tfeatures.brokenStarGEBTN\n\t= features.starSelectsClosedQSA\n\t= features.idGetsName\n\t= features.brokenMixedCaseQSA\n\t= features.brokenGEBCN\n\t= features.brokenCheckedQSA\n\t= features.brokenEmptyAttributeQSA\n\t= features.isHTMLDocument\n\t= features.nativeMatchesSelector\n\t= false;\n\n\tvar starSelectsClosed, starSelectsComments,\n\t\tbrokenSecondClassNameGEBCN, cachedGetElementsByClassName,\n\t\tbrokenFormAttributeGetter;\n\n\tvar selected, id = 'slick_uniqueid';\n\tvar testNode = document.createElement('div');\n\n\tvar testRoot = document.body || document.getElementsByTagName('body')[0] || root;\n\ttestRoot.appendChild(testNode);\n\n\t// on non-HTML documents innerHTML and getElementsById doesnt work properly\n\ttry {\n\t\ttestNode.innerHTML = '';\n\t\tfeatures.isHTMLDocument = !!document.getElementById(id);\n\t} catch(e){};\n\n\tif (features.isHTMLDocument){\n\n\t\ttestNode.style.display = 'none';\n\n\t\t// IE returns comment nodes for getElementsByTagName('*') for some documents\n\t\ttestNode.appendChild(document.createComment(''));\n\t\tstarSelectsComments = (testNode.getElementsByTagName('*').length > 1);\n\n\t\t// IE returns closed nodes (EG:\"\") for getElementsByTagName('*') for some documents\n\t\ttry {\n\t\t\ttestNode.innerHTML = 'foo';\n\t\t\tselected = testNode.getElementsByTagName('*');\n\t\t\tstarSelectsClosed = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');\n\t\t} catch(e){};\n\n\t\tfeatures.brokenStarGEBTN = starSelectsComments || starSelectsClosed;\n\n\t\t// IE returns elements with the name instead of just id for getElementsById for some documents\n\t\ttry {\n\t\t\ttestNode.innerHTML = '';\n\t\t\tfeatures.idGetsName = document.getElementById(id) === testNode.firstChild;\n\t\t} catch(e){};\n\n\t\tif (testNode.getElementsByClassName){\n\n\t\t\t// Safari 3.2 getElementsByClassName caches results\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = '';\n\t\t\t\ttestNode.getElementsByClassName('b').length;\n\t\t\t\ttestNode.firstChild.className = 'b';\n\t\t\t\tcachedGetElementsByClassName = (testNode.getElementsByClassName('b').length != 2);\n\t\t\t} catch(e){};\n\n\t\t\t// Opera 9.6 getElementsByClassName doesnt detects the class if its not the first one\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = '';\n\t\t\t\tbrokenSecondClassNameGEBCN = (testNode.getElementsByClassName('a').length != 2);\n\t\t\t} catch(e){};\n\n\t\t\tfeatures.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN;\n\t\t}\n\n\t\tif (testNode.querySelectorAll){\n\t\t\t// IE 8 returns closed nodes (EG:\"\") for querySelectorAll('*') for some documents\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = 'foo';\n\t\t\t\tselected = testNode.querySelectorAll('*');\n\t\t\t\tfeatures.starSelectsClosedQSA = (selected && !!selected.length && selected[0].nodeName.charAt(0) == '/');\n\t\t\t} catch(e){};\n\n\t\t\t// Safari 3.2 querySelectorAll doesnt work with mixedcase on quirksmode\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = '';\n\t\t\t\tfeatures.brokenMixedCaseQSA = !testNode.querySelectorAll('.MiX').length;\n\t\t\t} catch(e){};\n\n\t\t\t// Webkit and Opera dont return selected options on querySelectorAll\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = '';\n\t\t\t\tfeatures.brokenCheckedQSA = (testNode.querySelectorAll(':checked').length == 0);\n\t\t\t} catch(e){};\n\n\t\t\t// IE returns incorrect results for attr[*^$]=\"\" selectors on querySelectorAll\n\t\t\ttry {\n\t\t\t\ttestNode.innerHTML = '';\n\t\t\t\tfeatures.brokenEmptyAttributeQSA = (testNode.querySelectorAll('[class*=\"\"]').length != 0);\n\t\t\t} catch(e){};\n\n\t\t}\n\n\t\t// IE6-7, if a form has an input of id x, form.getAttribute(x) returns a reference to the input\n\t\ttry {\n\t\t\ttestNode.innerHTML = '
';\n\t\t\tbrokenFormAttributeGetter = (testNode.firstChild.getAttribute('action') != 's');\n\t\t} catch(e){};\n\n\t\t// native matchesSelector function\n\n\t\tfeatures.nativeMatchesSelector = root.matchesSelector || /*root.msMatchesSelector ||*/ root.mozMatchesSelector || root.webkitMatchesSelector;\n\t\tif (features.nativeMatchesSelector) try {\n\t\t\t// if matchesSelector trows errors on incorrect sintaxes we can use it\n\t\t\tfeatures.nativeMatchesSelector.call(root, ':slick');\n\t\t\tfeatures.nativeMatchesSelector = null;\n\t\t} catch(e){};\n\n\t}\n\n\ttry {\n\t\troot.slick_expando = 1;\n\t\tdelete root.slick_expando;\n\t\tfeatures.getUID = this.getUIDHTML;\n\t} catch(e) {\n\t\tfeatures.getUID = this.getUIDXML;\n\t}\n\n\ttestRoot.removeChild(testNode);\n\ttestNode = selected = testRoot = null;\n\n\t// getAttribute\n\n\tfeatures.getAttribute = (features.isHTMLDocument && brokenFormAttributeGetter) ? function(node, name){\n\t\tvar method = this.attributeGetters[name];\n\t\tif (method) return method.call(node);\n\t\tvar attributeNode = node.getAttributeNode(name);\n\t\treturn (attributeNode) ? attributeNode.nodeValue : null;\n\t} : function(node, name){\n\t\tvar method = this.attributeGetters[name];\n\t\treturn (method) ? method.call(node) : node.getAttribute(name);\n\t};\n\n\t// hasAttribute\n\n\tfeatures.hasAttribute = (root && this.isNativeCode(root.hasAttribute)) ? function(node, attribute) {\n\t\treturn node.hasAttribute(attribute);\n\t} : function(node, attribute) {\n\t\tnode = node.getAttributeNode(attribute);\n\t\treturn !!(node && (node.specified || node.nodeValue));\n\t};\n\n\t// contains\n\t// FIXME: Add specs: local.contains should be different for xml and html documents?\n\tvar nativeRootContains = root && this.isNativeCode(root.contains),\n\t\tnativeDocumentContains = document && this.isNativeCode(document.contains);\n\n\tfeatures.contains = (nativeRootContains && nativeDocumentContains) ? function(context, node){\n\t\treturn context.contains(node);\n\t} : (nativeRootContains && !nativeDocumentContains) ? function(context, node){\n\t\t// IE8 does not have .contains on document.\n\t\treturn context === node || ((context === document) ? document.documentElement : context).contains(node);\n\t} : (root && root.compareDocumentPosition) ? function(context, node){\n\t\treturn context === node || !!(context.compareDocumentPosition(node) & 16);\n\t} : function(context, node){\n\t\tif (node) do {\n\t\t\tif (node === context) return true;\n\t\t} while ((node = node.parentNode));\n\t\treturn false;\n\t};\n\n\t// document order sorting\n\t// credits to Sizzle (http://sizzlejs.com/)\n\n\tfeatures.documentSorter = (root.compareDocumentPosition) ? function(a, b){\n\t\tif (!a.compareDocumentPosition || !b.compareDocumentPosition) return 0;\n\t\treturn a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;\n\t} : ('sourceIndex' in root) ? function(a, b){\n\t\tif (!a.sourceIndex || !b.sourceIndex) return 0;\n\t\treturn a.sourceIndex - b.sourceIndex;\n\t} : (document.createRange) ? function(a, b){\n\t\tif (!a.ownerDocument || !b.ownerDocument) return 0;\n\t\tvar aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();\n\t\taRange.setStart(a, 0);\n\t\taRange.setEnd(a, 0);\n\t\tbRange.setStart(b, 0);\n\t\tbRange.setEnd(b, 0);\n\t\treturn aRange.compareBoundaryPoints(Range.START_TO_END, bRange);\n\t} : null ;\n\n\troot = null;\n\n\tfor (feature in features){\n\t\tthis[feature] = features[feature];\n\t}\n};\n\n// Main Method\n\nvar reSimpleSelector = /^([#.]?)((?:[\\w-]+|\\*))$/,\n\treEmptyAttribute = /\\[.+[*$^]=(?:\"\"|'')?\\]/,\n\tqsaFailExpCache = {};\n\nlocal.search = function(context, expression, append, first){\n\n\tvar found = this.found = (first) ? null : (append || []);\n\n\tif (!context) return found;\n\telse if (context.navigator) context = context.document; // Convert the node from a window to a document\n\telse if (!context.nodeType) return found;\n\n\t// setup\n\n\tvar parsed, i,\n\t\tuniques = this.uniques = {},\n\t\thasOthers = !!(append && append.length),\n\t\tcontextIsDocument = (context.nodeType == 9);\n\n\tif (this.document !== (contextIsDocument ? context : context.ownerDocument)) this.setDocument(context);\n\n\t// avoid duplicating items already in the append array\n\tif (hasOthers) for (i = found.length; i--;) uniques[this.getUID(found[i])] = true;\n\n\t// expression checks\n\n\tif (typeof expression == 'string'){ // expression is a string\n\n\t\t/**/\n\t\tvar simpleSelector = expression.match(reSimpleSelector);\n\t\tsimpleSelectors: if (simpleSelector) {\n\n\t\t\tvar symbol = simpleSelector[1],\n\t\t\t\tname = simpleSelector[2],\n\t\t\t\tnode, nodes;\n\n\t\t\tif (!symbol){\n\n\t\t\t\tif (name == '*' && this.brokenStarGEBTN) break simpleSelectors;\n\t\t\t\tnodes = context.getElementsByTagName(name);\n\t\t\t\tif (first) return nodes[0] || null;\n\t\t\t\tfor (i = 0; node = nodes[i++];){\n\t\t\t\t\tif (!(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\t\t\t\t}\n\n\t\t\t} else if (symbol == '#'){\n\n\t\t\t\tif (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors;\n\t\t\t\tnode = context.getElementById(name);\n\t\t\t\tif (!node) return found;\n\t\t\t\tif (this.idGetsName && node.getAttributeNode('id').nodeValue != name) break simpleSelectors;\n\t\t\t\tif (first) return node || null;\n\t\t\t\tif (!(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\n\t\t\t} else if (symbol == '.'){\n\n\t\t\t\tif (!this.isHTMLDocument || ((!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll)) break simpleSelectors;\n\t\t\t\tif (context.getElementsByClassName && !this.brokenGEBCN){\n\t\t\t\t\tnodes = context.getElementsByClassName(name);\n\t\t\t\t\tif (first) return nodes[0] || null;\n\t\t\t\t\tfor (i = 0; node = nodes[i++];){\n\t\t\t\t\t\tif (!(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar matchClass = new RegExp('(^|\\\\s)'+ Slick.escapeRegExp(name) +'(\\\\s|$)');\n\t\t\t\t\tnodes = context.getElementsByTagName('*');\n\t\t\t\t\tfor (i = 0; node = nodes[i++];){\n\t\t\t\t\t\tclassName = node.className;\n\t\t\t\t\t\tif (!(className && matchClass.test(className))) continue;\n\t\t\t\t\t\tif (first) return node;\n\t\t\t\t\t\tif (!(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (hasOthers) this.sort(found);\n\t\t\treturn (first) ? null : found;\n\n\t\t}\n\t\t/**/\n\n\t\t/**/\n\t\tquerySelector: if (context.querySelectorAll) {\n\n\t\t\tif (!this.isHTMLDocument\n\t\t\t\t|| qsaFailExpCache[expression]\n\t\t\t\t//TODO: only skip when expression is actually mixed case\n\t\t\t\t|| this.brokenMixedCaseQSA\n\t\t\t\t|| (this.brokenCheckedQSA && expression.indexOf(':checked') > -1)\n\t\t\t\t|| (this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression))\n\t\t\t\t|| (!contextIsDocument //Abort when !contextIsDocument and...\n\t\t\t\t\t// there are multiple expressions in the selector\n\t\t\t\t\t// since we currently only fix non-document rooted QSA for single expression selectors\n\t\t\t\t\t&& expression.indexOf(',') > -1\n\t\t\t\t)\n\t\t\t\t|| Slick.disableQSA\n\t\t\t) break querySelector;\n\n\t\t\tvar _expression = expression, _context = context;\n\t\t\tif (!contextIsDocument){\n\t\t\t\t// non-document rooted QSA\n\t\t\t\t// credits to Andrew Dupont\n\t\t\t\tvar currentId = _context.getAttribute('id'), slickid = 'slickid__';\n\t\t\t\t_context.setAttribute('id', slickid);\n\t\t\t\t_expression = '#' + slickid + ' ' + _expression;\n\t\t\t\tcontext = _context.parentNode;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (first) return context.querySelector(_expression) || null;\n\t\t\t\telse nodes = context.querySelectorAll(_expression);\n\t\t\t} catch(e) {\n\t\t\t\tqsaFailExpCache[expression] = 1;\n\t\t\t\tbreak querySelector;\n\t\t\t} finally {\n\t\t\t\tif (!contextIsDocument){\n\t\t\t\t\tif (currentId) _context.setAttribute('id', currentId);\n\t\t\t\t\telse _context.removeAttribute('id');\n\t\t\t\t\tcontext = _context;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.starSelectsClosedQSA) for (i = 0; node = nodes[i++];){\n\t\t\t\tif (node.nodeName > '@' && !(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\t\t\t} else for (i = 0; node = nodes[i++];){\n\t\t\t\tif (!(hasOthers && uniques[this.getUID(node)])) found.push(node);\n\t\t\t}\n\n\t\t\tif (hasOthers) this.sort(found);\n\t\t\treturn found;\n\n\t\t}\n\t\t/**/\n\n\t\tparsed = this.Slick.parse(expression);\n\t\tif (!parsed.length) return found;\n\t} else if (expression == null){ // there is no expression\n\t\treturn found;\n\t} else if (expression.Slick){ // expression is a parsed Slick object\n\t\tparsed = expression;\n\t} else if (this.contains(context.documentElement || context, expression)){ // expression is a node\n\t\t(found) ? found.push(expression) : found = expression;\n\t\treturn found;\n\t} else { // other junk\n\t\treturn found;\n\t}\n\n\t/**//**/\n\n\t// cache elements for the nth selectors\n\n\tthis.posNTH = {};\n\tthis.posNTHLast = {};\n\tthis.posNTHType = {};\n\tthis.posNTHTypeLast = {};\n\n\t/**//**/\n\n\t// if append is null and there is only a single selector with one expression use pushArray, else use pushUID\n\tthis.push = (!hasOthers && (first || (parsed.length == 1 && parsed.expressions[0].length == 1))) ? this.pushArray : this.pushUID;\n\n\tif (found == null) found = [];\n\n\t// default engine\n\n\tvar j, m, n;\n\tvar combinator, tag, id, classList, classes, attributes, pseudos;\n\tvar currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions;\n\n\tsearch: for (i = 0; (currentExpression = expressions[i]); i++) for (j = 0; (currentBit = currentExpression[j]); j++){\n\n\t\tcombinator = 'combinator:' + currentBit.combinator;\n\t\tif (!this[combinator]) continue search;\n\n\t\ttag = (this.isXMLDocument) ? currentBit.tag : currentBit.tag.toUpperCase();\n\t\tid = currentBit.id;\n\t\tclassList = currentBit.classList;\n\t\tclasses = currentBit.classes;\n\t\tattributes = currentBit.attributes;\n\t\tpseudos = currentBit.pseudos;\n\t\tlastBit = (j === (currentExpression.length - 1));\n\n\t\tthis.bitUniques = {};\n\n\t\tif (lastBit){\n\t\t\tthis.uniques = uniques;\n\t\t\tthis.found = found;\n\t\t} else {\n\t\t\tthis.uniques = {};\n\t\t\tthis.found = [];\n\t\t}\n\n\t\tif (j === 0){\n\t\t\tthis[combinator](context, tag, id, classes, attributes, pseudos, classList);\n\t\t\tif (first && lastBit && found.length) break search;\n\t\t} else {\n\t\t\tif (first && lastBit) for (m = 0, n = currentItems.length; m < n; m++){\n\t\t\t\tthis[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);\n\t\t\t\tif (found.length) break search;\n\t\t\t} else for (m = 0, n = currentItems.length; m < n; m++) this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);\n\t\t}\n\n\t\tcurrentItems = this.found;\n\t}\n\n\t// should sort if there are nodes in append and if you pass multiple expressions.\n\tif (hasOthers || (parsed.expressions.length > 1)) this.sort(found);\n\n\treturn (first) ? (found[0] || null) : found;\n};\n\n// Utils\n\nlocal.uidx = 1;\nlocal.uidk = 'slick-uniqueid';\n\nlocal.getUIDXML = function(node){\n\tvar uid = node.getAttribute(this.uidk);\n\tif (!uid){\n\t\tuid = this.uidx++;\n\t\tnode.setAttribute(this.uidk, uid);\n\t}\n\treturn uid;\n};\n\nlocal.getUIDHTML = function(node){\n\treturn node.uniqueNumber || (node.uniqueNumber = this.uidx++);\n};\n\n// sort based on the setDocument documentSorter method.\n\nlocal.sort = function(results){\n\tif (!this.documentSorter) return results;\n\tresults.sort(this.documentSorter);\n\treturn results;\n};\n\n/**//**/\n\nlocal.cacheNTH = {};\n\nlocal.matchNTH = /^([+-]?\\d*)?([a-z]+)?([+-]\\d+)?$/;\n\nlocal.parseNTHArgument = function(argument){\n\tvar parsed = argument.match(this.matchNTH);\n\tif (!parsed) return false;\n\tvar special = parsed[2] || false;\n\tvar a = parsed[1] || 1;\n\tif (a == '-') a = -1;\n\tvar b = +parsed[3] || 0;\n\tparsed =\n\t\t(special == 'n')\t? {a: a, b: b} :\n\t\t(special == 'odd')\t? {a: 2, b: 1} :\n\t\t(special == 'even')\t? {a: 2, b: 0} : {a: 0, b: a};\n\n\treturn (this.cacheNTH[argument] = parsed);\n};\n\nlocal.createNTHPseudo = function(child, sibling, positions, ofType){\n\treturn function(node, argument){\n\t\tvar uid = this.getUID(node);\n\t\tif (!this[positions][uid]){\n\t\t\tvar parent = node.parentNode;\n\t\t\tif (!parent) return false;\n\t\t\tvar el = parent[child], count = 1;\n\t\t\tif (ofType){\n\t\t\t\tvar nodeName = node.nodeName;\n\t\t\t\tdo {\n\t\t\t\t\tif (el.nodeName != nodeName) continue;\n\t\t\t\t\tthis[positions][this.getUID(el)] = count++;\n\t\t\t\t} while ((el = el[sibling]));\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tif (el.nodeType != 1) continue;\n\t\t\t\t\tthis[positions][this.getUID(el)] = count++;\n\t\t\t\t} while ((el = el[sibling]));\n\t\t\t}\n\t\t}\n\t\targument = argument || 'n';\n\t\tvar parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument);\n\t\tif (!parsed) return false;\n\t\tvar a = parsed.a, b = parsed.b, pos = this[positions][uid];\n\t\tif (a == 0) return b == pos;\n\t\tif (a > 0){\n\t\t\tif (pos < b) return false;\n\t\t} else {\n\t\t\tif (b < pos) return false;\n\t\t}\n\t\treturn ((pos - b) % a) == 0;\n\t};\n};\n\n/**//**/\n\nlocal.pushArray = function(node, tag, id, classes, attributes, pseudos){\n\tif (this.matchSelector(node, tag, id, classes, attributes, pseudos)) this.found.push(node);\n};\n\nlocal.pushUID = function(node, tag, id, classes, attributes, pseudos){\n\tvar uid = this.getUID(node);\n\tif (!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos)){\n\t\tthis.uniques[uid] = true;\n\t\tthis.found.push(node);\n\t}\n};\n\nlocal.matchNode = function(node, selector){\n\tif (this.isHTMLDocument && this.nativeMatchesSelector){\n\t\ttry {\n\t\t\treturn this.nativeMatchesSelector.call(node, selector.replace(/\\[([^=]+)=\\s*([^'\"\\]]+?)\\s*\\]/g, '[$1=\"$2\"]'));\n\t\t} catch(matchError) {}\n\t}\n\n\tvar parsed = this.Slick.parse(selector);\n\tif (!parsed) return true;\n\n\t// simple (single) selectors\n\tvar expressions = parsed.expressions, simpleExpCounter = 0, i;\n\tfor (i = 0; (currentExpression = expressions[i]); i++){\n\t\tif (currentExpression.length == 1){\n\t\t\tvar exp = currentExpression[0];\n\t\t\tif (this.matchSelector(node, (this.isXMLDocument) ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return true;\n\t\t\tsimpleExpCounter++;\n\t\t}\n\t}\n\n\tif (simpleExpCounter == parsed.length) return false;\n\n\tvar nodes = this.search(this.document, parsed), item;\n\tfor (i = 0; item = nodes[i++];){\n\t\tif (item === node) return true;\n\t}\n\treturn false;\n};\n\nlocal.matchPseudo = function(node, name, argument){\n\tvar pseudoName = 'pseudo:' + name;\n\tif (this[pseudoName]) return this[pseudoName](node, argument);\n\tvar attribute = this.getAttribute(node, name);\n\treturn (argument) ? argument == attribute : !!attribute;\n};\n\nlocal.matchSelector = function(node, tag, id, classes, attributes, pseudos){\n\tif (tag){\n\t\tvar nodeName = (this.isXMLDocument) ? node.nodeName : node.nodeName.toUpperCase();\n\t\tif (tag == '*'){\n\t\t\tif (nodeName < '@') return false; // Fix for comment nodes and closed nodes\n\t\t} else {\n\t\t\tif (nodeName != tag) return false;\n\t\t}\n\t}\n\n\tif (id && node.getAttribute('id') != id) return false;\n\n\tvar i, part, cls;\n\tif (classes) for (i = classes.length; i--;){\n\t\tcls = this.getAttribute(node, 'class');\n\t\tif (!(cls && classes[i].regexp.test(cls))) return false;\n\t}\n\tif (attributes) for (i = attributes.length; i--;){\n\t\tpart = attributes[i];\n\t\tif (part.operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return false;\n\t}\n\tif (pseudos) for (i = pseudos.length; i--;){\n\t\tpart = pseudos[i];\n\t\tif (!this.matchPseudo(node, part.key, part.value)) return false;\n\t}\n\treturn true;\n};\n\nvar combinators = {\n\n\t' ': function(node, tag, id, classes, attributes, pseudos, classList){ // all child nodes, any level\n\n\t\tvar i, item, children;\n\n\t\tif (this.isHTMLDocument){\n\t\t\tgetById: if (id){\n\t\t\t\titem = this.document.getElementById(id);\n\t\t\t\tif ((!item && node.all) || (this.idGetsName && item && item.getAttributeNode('id').nodeValue != id)){\n\t\t\t\t\t// all[id] returns all the elements with that name or id inside node\n\t\t\t\t\t// if theres just one it will return the element, else it will be a collection\n\t\t\t\t\tchildren = node.all[id];\n\t\t\t\t\tif (!children) return;\n\t\t\t\t\tif (!children[0]) children = [children];\n\t\t\t\t\tfor (i = 0; item = children[i++];){\n\t\t\t\t\t\tvar idNode = item.getAttributeNode('id');\n\t\t\t\t\t\tif (idNode && idNode.nodeValue == id){\n\t\t\t\t\t\t\tthis.push(item, tag, null, classes, attributes, pseudos);\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\treturn;\n\t\t\t\t}\n\t\t\t\tif (!item){\n\t\t\t\t\t// if the context is in the dom we return, else we will try GEBTN, breaking the getById label\n\t\t\t\t\tif (this.contains(this.root, node)) return;\n\t\t\t\t\telse break getById;\n\t\t\t\t} else if (this.document !== node && !this.contains(node, item)) return;\n\t\t\t\tthis.push(item, tag, null, classes, attributes, pseudos);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgetByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN){\n\t\t\t\tchildren = node.getElementsByClassName(classList.join(' '));\n\t\t\t\tif (!(children && children.length)) break getByClass;\n\t\t\t\tfor (i = 0; item = children[i++];) this.push(item, tag, id, null, attributes, pseudos);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tgetByTag: {\n\t\t\tchildren = node.getElementsByTagName(tag);\n\t\t\tif (!(children && children.length)) break getByTag;\n\t\t\tif (!this.brokenStarGEBTN) tag = null;\n\t\t\tfor (i = 0; item = children[i++];) this.push(item, tag, id, classes, attributes, pseudos);\n\t\t}\n\t},\n\n\t'>': function(node, tag, id, classes, attributes, pseudos){ // direct children\n\t\tif ((node = node.firstChild)) do {\n\t\t\tif (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);\n\t\t} while ((node = node.nextSibling));\n\t},\n\n\t'+': function(node, tag, id, classes, attributes, pseudos){ // next sibling\n\t\twhile ((node = node.nextSibling)) if (node.nodeType == 1){\n\t\t\tthis.push(node, tag, id, classes, attributes, pseudos);\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t'^': function(node, tag, id, classes, attributes, pseudos){ // first child\n\t\tnode = node.firstChild;\n\t\tif (node){\n\t\t\tif (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);\n\t\t\telse this['combinator:+'](node, tag, id, classes, attributes, pseudos);\n\t\t}\n\t},\n\n\t'~': function(node, tag, id, classes, attributes, pseudos){ // next siblings\n\t\twhile ((node = node.nextSibling)){\n\t\t\tif (node.nodeType != 1) continue;\n\t\t\tvar uid = this.getUID(node);\n\t\t\tif (this.bitUniques[uid]) break;\n\t\t\tthis.bitUniques[uid] = true;\n\t\t\tthis.push(node, tag, id, classes, attributes, pseudos);\n\t\t}\n\t},\n\n\t'++': function(node, tag, id, classes, attributes, pseudos){ // next sibling and previous sibling\n\t\tthis['combinator:+'](node, tag, id, classes, attributes, pseudos);\n\t\tthis['combinator:!+'](node, tag, id, classes, attributes, pseudos);\n\t},\n\n\t'~~': function(node, tag, id, classes, attributes, pseudos){ // next siblings and previous siblings\n\t\tthis['combinator:~'](node, tag, id, classes, attributes, pseudos);\n\t\tthis['combinator:!~'](node, tag, id, classes, attributes, pseudos);\n\t},\n\n\t'!': function(node, tag, id, classes, attributes, pseudos){ // all parent nodes up to document\n\t\twhile ((node = node.parentNode)) if (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);\n\t},\n\n\t'!>': function(node, tag, id, classes, attributes, pseudos){ // direct parent (one level)\n\t\tnode = node.parentNode;\n\t\tif (node !== this.document) this.push(node, tag, id, classes, attributes, pseudos);\n\t},\n\n\t'!+': function(node, tag, id, classes, attributes, pseudos){ // previous sibling\n\t\twhile ((node = node.previousSibling)) if (node.nodeType == 1){\n\t\t\tthis.push(node, tag, id, classes, attributes, pseudos);\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t'!^': function(node, tag, id, classes, attributes, pseudos){ // last child\n\t\tnode = node.lastChild;\n\t\tif (node){\n\t\t\tif (node.nodeType == 1) this.push(node, tag, id, classes, attributes, pseudos);\n\t\t\telse this['combinator:!+'](node, tag, id, classes, attributes, pseudos);\n\t\t}\n\t},\n\n\t'!~': function(node, tag, id, classes, attributes, pseudos){ // previous siblings\n\t\twhile ((node = node.previousSibling)){\n\t\t\tif (node.nodeType != 1) continue;\n\t\t\tvar uid = this.getUID(node);\n\t\t\tif (this.bitUniques[uid]) break;\n\t\t\tthis.bitUniques[uid] = true;\n\t\t\tthis.push(node, tag, id, classes, attributes, pseudos);\n\t\t}\n\t}\n\n};\n\nfor (var c in combinators) local['combinator:' + c] = combinators[c];\n\nvar pseudos = {\n\n\t/**/\n\n\t'empty': function(node){\n\t\tvar child = node.firstChild;\n\t\treturn !(child && child.nodeType == 1) && !(node.innerText || node.textContent || '').length;\n\t},\n\n\t'not': function(node, expression){\n\t\treturn !this.matchNode(node, expression);\n\t},\n\n\t'contains': function(node, text){\n\t\treturn (node.innerText || node.textContent || '').indexOf(text) > -1;\n\t},\n\n\t'first-child': function(node){\n\t\twhile ((node = node.previousSibling)) if (node.nodeType == 1) return false;\n\t\treturn true;\n\t},\n\n\t'last-child': function(node){\n\t\twhile ((node = node.nextSibling)) if (node.nodeType == 1) return false;\n\t\treturn true;\n\t},\n\n\t'only-child': function(node){\n\t\tvar prev = node;\n\t\twhile ((prev = prev.previousSibling)) if (prev.nodeType == 1) return false;\n\t\tvar next = node;\n\t\twhile ((next = next.nextSibling)) if (next.nodeType == 1) return false;\n\t\treturn true;\n\t},\n\n\t/**/\n\n\t'nth-child': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTH'),\n\n\t'nth-last-child': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHLast'),\n\n\t'nth-of-type': local.createNTHPseudo('firstChild', 'nextSibling', 'posNTHType', true),\n\n\t'nth-last-of-type': local.createNTHPseudo('lastChild', 'previousSibling', 'posNTHTypeLast', true),\n\n\t'index': function(node, index){\n\t\treturn this['pseudo:nth-child'](node, '' + (index + 1));\n\t},\n\n\t'even': function(node){\n\t\treturn this['pseudo:nth-child'](node, '2n');\n\t},\n\n\t'odd': function(node){\n\t\treturn this['pseudo:nth-child'](node, '2n+1');\n\t},\n\n\t/**/\n\n\t/**/\n\n\t'first-of-type': function(node){\n\t\tvar nodeName = node.nodeName;\n\t\twhile ((node = node.previousSibling)) if (node.nodeName == nodeName) return false;\n\t\treturn true;\n\t},\n\n\t'last-of-type': function(node){\n\t\tvar nodeName = node.nodeName;\n\t\twhile ((node = node.nextSibling)) if (node.nodeName == nodeName) return false;\n\t\treturn true;\n\t},\n\n\t'only-of-type': function(node){\n\t\tvar prev = node, nodeName = node.nodeName;\n\t\twhile ((prev = prev.previousSibling)) if (prev.nodeName == nodeName) return false;\n\t\tvar next = node;\n\t\twhile ((next = next.nextSibling)) if (next.nodeName == nodeName) return false;\n\t\treturn true;\n\t},\n\n\t/**/\n\n\t// custom pseudos\n\n\t'enabled': function(node){\n\t\treturn !node.disabled;\n\t},\n\n\t'disabled': function(node){\n\t\treturn node.disabled;\n\t},\n\n\t'checked': function(node){\n\t\treturn node.checked || node.selected;\n\t},\n\n\t'focus': function(node){\n\t\treturn this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, 'tabindex'));\n\t},\n\n\t'root': function(node){\n\t\treturn (node === this.root);\n\t},\n\n\t'selected': function(node){\n\t\treturn node.selected;\n\t}\n\n\t/**/\n};\n\nfor (var p in pseudos) local['pseudo:' + p] = pseudos[p];\n\n// attributes methods\n\nvar attributeGetters = local.attributeGetters = {\n\n\t'for': function(){\n\t\treturn ('htmlFor' in this) ? this.htmlFor : this.getAttribute('for');\n\t},\n\n\t'href': function(){\n\t\treturn ('href' in this) ? this.getAttribute('href', 2) : this.getAttribute('href');\n\t},\n\n\t'style': function(){\n\t\treturn (this.style) ? this.style.cssText : this.getAttribute('style');\n\t},\n\n\t'tabindex': function(){\n\t\tvar attributeNode = this.getAttributeNode('tabindex');\n\t\treturn (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null;\n\t},\n\n\t'type': function(){\n\t\treturn this.getAttribute('type');\n\t},\n\n\t'maxlength': function(){\n\t\tvar attributeNode = this.getAttributeNode('maxLength');\n\t\treturn (attributeNode && attributeNode.specified) ? attributeNode.nodeValue : null;\n\t}\n\n};\n\nattributeGetters.MAXLENGTH = attributeGetters.maxLength = attributeGetters.maxlength;\n\n// Slick\n\nvar Slick = local.Slick = (this.Slick || {});\n\nSlick.version = '1.1.7';\n\n// Slick finder\n\nSlick.search = function(context, expression, append){\n\treturn local.search(context, expression, append);\n};\n\nSlick.find = function(context, expression){\n\treturn local.search(context, expression, null, true);\n};\n\n// Slick containment checker\n\nSlick.contains = function(container, node){\n\tlocal.setDocument(container);\n\treturn local.contains(container, node);\n};\n\n// Slick attribute getter\n\nSlick.getAttribute = function(node, name){\n\tlocal.setDocument(node);\n\treturn local.getAttribute(node, name);\n};\n\nSlick.hasAttribute = function(node, name){\n\tlocal.setDocument(node);\n\treturn local.hasAttribute(node, name);\n};\n\n// Slick matcher\n\nSlick.match = function(node, selector){\n\tif (!(node && selector)) return false;\n\tif (!selector || selector === node) return true;\n\tlocal.setDocument(node);\n\treturn local.matchNode(node, selector);\n};\n\n// Slick attribute accessor\n\nSlick.defineAttributeGetter = function(name, fn){\n\tlocal.attributeGetters[name] = fn;\n\treturn this;\n};\n\nSlick.lookupAttributeGetter = function(name){\n\treturn local.attributeGetters[name];\n};\n\n// Slick pseudo accessor\n\nSlick.definePseudo = function(name, fn){\n\tlocal['pseudo:' + name] = function(node, argument){\n\t\treturn fn.call(node, argument);\n\t};\n\treturn this;\n};\n\nSlick.lookupPseudo = function(name){\n\tvar pseudo = local['pseudo:' + name];\n\tif (pseudo) return function(argument){\n\t\treturn pseudo.call(this, argument);\n\t};\n\treturn null;\n};\n\n// Slick overrides accessor\n\nSlick.override = function(regexp, fn){\n\tlocal.override(regexp, fn);\n\treturn this;\n};\n\nSlick.isXML = local.isXML;\n\nSlick.uidOf = function(node){\n\treturn local.getUIDHTML(node);\n};\n\nif (!this.Slick) this.Slick = Slick;\n\n}).apply(/**/(typeof exports != 'undefined') ? exports : /**/this);\n\n\n/*\n---\n\nname: Element\n\ndescription: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.\n\nlicense: MIT-style license.\n\nrequires: [Window, Document, Array, String, Function, Object, Number, Slick.Parser, Slick.Finder]\n\nprovides: [Element, Elements, $, $$, Iframe, Selectors]\n\n...\n*/\n\nvar Element = function(tag, props){\n\tvar konstructor = Element.Constructors[tag];\n\tif (konstructor) return konstructor(props);\n\tif (typeof tag != 'string') return document.id(tag).set(props);\n\n\tif (!props) props = {};\n\n\tif (!(/^[\\w-]+$/).test(tag)){\n\t\tvar parsed = Slick.parse(tag).expressions[0][0];\n\t\ttag = (parsed.tag == '*') ? 'div' : parsed.tag;\n\t\tif (parsed.id && props.id == null) props.id = parsed.id;\n\n\t\tvar attributes = parsed.attributes;\n\t\tif (attributes) for (var attr, i = 0, l = attributes.length; i < l; i++){\n\t\t\tattr = attributes[i];\n\t\t\tif (props[attr.key] != null) continue;\n\n\t\t\tif (attr.value != null && attr.operator == '=') props[attr.key] = attr.value;\n\t\t\telse if (!attr.value && !attr.operator) props[attr.key] = true;\n\t\t}\n\n\t\tif (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' ');\n\t}\n\n\treturn document.newElement(tag, props);\n};\n\n\nif (Browser.Element){\n\tElement.prototype = Browser.Element.prototype;\n\t// IE8 and IE9 require the wrapping.\n\tElement.prototype._fireEvent = (function(fireEvent){\n\t\treturn function(type, event){\n\t\t\treturn fireEvent.call(this, type, event);\n\t\t};\n\t})(Element.prototype.fireEvent);\n}\n\nnew Type('Element', Element).mirror(function(name){\n\tif (Array.prototype[name]) return;\n\n\tvar obj = {};\n\tobj[name] = function(){\n\t\tvar results = [], args = arguments, elements = true;\n\t\tfor (var i = 0, l = this.length; i < l; i++){\n\t\t\tvar element = this[i], result = results[i] = element[name].apply(element, args);\n\t\t\telements = (elements && typeOf(result) == 'element');\n\t\t}\n\t\treturn (elements) ? new Elements(results) : results;\n\t};\n\n\tElements.implement(obj);\n});\n\nif (!Browser.Element){\n\tElement.parent = Object;\n\n\tElement.Prototype = {\n\t\t'$constructor': Element,\n\t\t'$family': Function.from('element').hide()\n\t};\n\n\tElement.mirror(function(name, method){\n\t\tElement.Prototype[name] = method;\n\t});\n}\n\nElement.Constructors = {};\n\n\n\nvar IFrame = new Type('IFrame', function(){\n\tvar params = Array.link(arguments, {\n\t\tproperties: Type.isObject,\n\t\tiframe: function(obj){\n\t\t\treturn (obj != null);\n\t\t}\n\t});\n\n\tvar props = params.properties || {}, iframe;\n\tif (params.iframe) iframe = document.id(params.iframe);\n\tvar onload = props.onload || function(){};\n\tdelete props.onload;\n\tprops.id = props.name = [props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + String.uniqueID()].pick();\n\tiframe = new Element(iframe || 'iframe', props);\n\n\tvar onLoad = function(){\n\t\tonload.call(iframe.contentWindow);\n\t};\n\n\tif (window.frames[props.id]) onLoad();\n\telse iframe.addListener('load', onLoad);\n\treturn iframe;\n});\n\nvar Elements = this.Elements = function(nodes){\n\tif (nodes && nodes.length){\n\t\tvar uniques = {}, node;\n\t\tfor (var i = 0; node = nodes[i++];){\n\t\t\tvar uid = Slick.uidOf(node);\n\t\t\tif (!uniques[uid]){\n\t\t\t\tuniques[uid] = true;\n\t\t\t\tthis.push(node);\n\t\t\t}\n\t\t}\n\t}\n};\n\nElements.prototype = {length: 0};\nElements.parent = Array;\n\nnew Type('Elements', Elements).implement({\n\n\tfilter: function(filter, bind){\n\t\tif (!filter) return this;\n\t\treturn new Elements(Array.filter(this, (typeOf(filter) == 'string') ? function(item){\n\t\t\treturn item.match(filter);\n\t\t} : filter, bind));\n\t}.protect(),\n\n\tpush: function(){\n\t\tvar length = this.length;\n\t\tfor (var i = 0, l = arguments.length; i < l; i++){\n\t\t\tvar item = document.id(arguments[i]);\n\t\t\tif (item) this[length++] = item;\n\t\t}\n\t\treturn (this.length = length);\n\t}.protect(),\n\n\tunshift: function(){\n\t\tvar items = [];\n\t\tfor (var i = 0, l = arguments.length; i < l; i++){\n\t\t\tvar item = document.id(arguments[i]);\n\t\t\tif (item) items.push(item);\n\t\t}\n\t\treturn Array.prototype.unshift.apply(this, items);\n\t}.protect(),\n\n\tconcat: function(){\n\t\tvar newElements = new Elements(this);\n\t\tfor (var i = 0, l = arguments.length; i < l; i++){\n\t\t\tvar item = arguments[i];\n\t\t\tif (Type.isEnumerable(item)) newElements.append(item);\n\t\t\telse newElements.push(item);\n\t\t}\n\t\treturn newElements;\n\t}.protect(),\n\n\tappend: function(collection){\n\t\tfor (var i = 0, l = collection.length; i < l; i++) this.push(collection[i]);\n\t\treturn this;\n\t}.protect(),\n\n\tempty: function(){\n\t\twhile (this.length) delete this[--this.length];\n\t\treturn this;\n\t}.protect()\n\n});\n\n\n\n(function(){\n\n// FF, IE\nvar splice = Array.prototype.splice, object = {'0': 0, '1': 1, length: 2};\n\nsplice.call(object, 1, 1);\nif (object[1] == 1) Elements.implement('splice', function(){\n\tvar length = this.length;\n\tvar result = splice.apply(this, arguments);\n\twhile (length >= this.length) delete this[length--];\n\treturn result;\n}.protect());\n\nArray.forEachMethod(function(method, name){\n\tElements.implement(name, method);\n});\n\nArray.mirror(Elements);\n\n/**/\nvar createElementAcceptsHTML;\ntry {\n createElementAcceptsHTML = (document.createElement('').name == 'x');\n} catch (e){}\n\nvar escapeQuotes = function(html){\n\treturn ('' + html).replace(/&/g, '&').replace(/\"/g, '"');\n};\n/**/\n\nDocument.implement({\n\n\tnewElement: function(tag, props){\n\t\tif (props && props.checked != null) props.defaultChecked = props.checked;\n\t\t/**/// Fix for readonly name and type properties in IE < 8\n\t\tif (createElementAcceptsHTML && props){\n\t\t\ttag = '<' + tag;\n\t\t\tif (props.name) tag += ' name=\"' + escapeQuotes(props.name) + '\"';\n\t\t\tif (props.type) tag += ' type=\"' + escapeQuotes(props.type) + '\"';\n\t\t\ttag += '>';\n\t\t\tdelete props.name;\n\t\t\tdelete props.type;\n\t\t}\n\t\t/**/\n\t\treturn this.id(this.createElement(tag)).set(props);\n\t}\n\n});\n\n})();\n\n(function(){\n\nSlick.uidOf(window);\nSlick.uidOf(document);\n\nDocument.implement({\n\n\tnewTextNode: function(text){\n\t\treturn this.createTextNode(text);\n\t},\n\n\tgetDocument: function(){\n\t\treturn this;\n\t},\n\n\tgetWindow: function(){\n\t\treturn this.window;\n\t},\n\n\tid: (function(){\n\n\t\tvar types = {\n\n\t\t\tstring: function(id, nocash, doc){\n\t\t\t\tid = Slick.find(doc, '#' + id.replace(/(\\W)/g, '\\\\$1'));\n\t\t\t\treturn (id) ? types.element(id, nocash) : null;\n\t\t\t},\n\n\t\t\telement: function(el, nocash){\n\t\t\t\tSlick.uidOf(el);\n\t\t\t\tif (!nocash && !el.$family && !(/^(?:object|embed)$/i).test(el.tagName)){\n\t\t\t\t\tvar fireEvent = el.fireEvent;\n\t\t\t\t\t// wrapping needed in IE7, or else crash\n\t\t\t\t\tel._fireEvent = function(type, event){\n\t\t\t\t\t\treturn fireEvent(type, event);\n\t\t\t\t\t};\n\t\t\t\t\tObject.append(el, Element.Prototype);\n\t\t\t\t}\n\t\t\t\treturn el;\n\t\t\t},\n\n\t\t\tobject: function(obj, nocash, doc){\n\t\t\t\tif (obj.toElement) return types.element(obj.toElement(doc), nocash);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t};\n\n\t\ttypes.textnode = types.whitespace = types.window = types.document = function(zero){\n\t\t\treturn zero;\n\t\t};\n\n\t\treturn function(el, nocash, doc){\n\t\t\tif (el && el.$family && el.uniqueNumber) return el;\n\t\t\tvar type = typeOf(el);\n\t\t\treturn (types[type]) ? types[type](el, nocash, doc || document) : null;\n\t\t};\n\n\t})()\n\n});\n\nif (window.$ == null) Window.implement('$', function(el, nc){\n\treturn document.id(el, nc, this.document);\n});\n\nWindow.implement({\n\n\tgetDocument: function(){\n\t\treturn this.document;\n\t},\n\n\tgetWindow: function(){\n\t\treturn this;\n\t}\n\n});\n\n[Document, Element].invoke('implement', {\n\n\tgetElements: function(expression){\n\t\treturn Slick.search(this, expression, new Elements);\n\t},\n\n\tgetElement: function(expression){\n\t\treturn document.id(Slick.find(this, expression));\n\t}\n\n});\n\nvar contains = {contains: function(element){\n\treturn Slick.contains(this, element);\n}};\n\nif (!document.contains) Document.implement(contains);\nif (!document.createElement('div').contains) Element.implement(contains);\n\n\n\n// tree walking\n\nvar injectCombinator = function(expression, combinator){\n\tif (!expression) return combinator;\n\n\texpression = Object.clone(Slick.parse(expression));\n\n\tvar expressions = expression.expressions;\n\tfor (var i = expressions.length; i--;)\n\t\texpressions[i][0].combinator = combinator;\n\n\treturn expression;\n};\n\nObject.forEach({\n\tgetNext: '~',\n\tgetPrevious: '!~',\n\tgetParent: '!'\n}, function(combinator, method){\n\tElement.implement(method, function(expression){\n\t\treturn this.getElement(injectCombinator(expression, combinator));\n\t});\n});\n\nObject.forEach({\n\tgetAllNext: '~',\n\tgetAllPrevious: '!~',\n\tgetSiblings: '~~',\n\tgetChildren: '>',\n\tgetParents: '!'\n}, function(combinator, method){\n\tElement.implement(method, function(expression){\n\t\treturn this.getElements(injectCombinator(expression, combinator));\n\t});\n});\n\nElement.implement({\n\n\tgetFirst: function(expression){\n\t\treturn document.id(Slick.search(this, injectCombinator(expression, '>'))[0]);\n\t},\n\n\tgetLast: function(expression){\n\t\treturn document.id(Slick.search(this, injectCombinator(expression, '>')).getLast());\n\t},\n\n\tgetWindow: function(){\n\t\treturn this.ownerDocument.window;\n\t},\n\n\tgetDocument: function(){\n\t\treturn this.ownerDocument;\n\t},\n\n\tgetElementById: function(id){\n\t\treturn document.id(Slick.find(this, '#' + ('' + id).replace(/(\\W)/g, '\\\\$1')));\n\t},\n\n\tmatch: function(expression){\n\t\treturn !expression || Slick.match(this, expression);\n\t}\n\n});\n\n\n\nif (window.$$ == null) Window.implement('$$', function(selector){\n\tif (arguments.length == 1){\n\t\tif (typeof selector == 'string') return Slick.search(this.document, selector, new Elements);\n\t\telse if (Type.isEnumerable(selector)) return new Elements(selector);\n\t}\n\treturn new Elements(arguments);\n});\n\n// Inserters\n\nvar inserters = {\n\n\tbefore: function(context, element){\n\t\tvar parent = element.parentNode;\n\t\tif (parent) parent.insertBefore(context, element);\n\t},\n\n\tafter: function(context, element){\n\t\tvar parent = element.parentNode;\n\t\tif (parent) parent.insertBefore(context, element.nextSibling);\n\t},\n\n\tbottom: function(context, element){\n\t\telement.appendChild(context);\n\t},\n\n\ttop: function(context, element){\n\t\telement.insertBefore(context, element.firstChild);\n\t}\n\n};\n\ninserters.inside = inserters.bottom;\n\n\n\n// getProperty / setProperty\n\nvar propertyGetters = {}, propertySetters = {};\n\n// properties\n\nvar properties = {};\nArray.forEach([\n\t'type', 'value', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan',\n\t'frameBorder', 'rowSpan', 'tabIndex', 'useMap'\n], function(property){\n\tproperties[property.toLowerCase()] = property;\n});\n\nproperties.html = 'innerHTML';\nproperties.text = (document.createElement('div').textContent == null) ? 'innerText': 'textContent';\n\nObject.forEach(properties, function(real, key){\n\tpropertySetters[key] = function(node, value){\n\t\tnode[real] = value;\n\t};\n\tpropertyGetters[key] = function(node){\n\t\treturn node[real];\n\t};\n});\n\n// Booleans\n\nvar bools = [\n\t'compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked',\n\t'disabled', 'readOnly', 'multiple', 'selected', 'noresize',\n\t'defer', 'defaultChecked', 'autofocus', 'controls', 'autoplay',\n\t'loop'\n];\n\nvar booleans = {};\nArray.forEach(bools, function(bool){\n\tvar lower = bool.toLowerCase();\n\tbooleans[lower] = bool;\n\tpropertySetters[lower] = function(node, value){\n\t\tnode[bool] = !!value;\n\t};\n\tpropertyGetters[lower] = function(node){\n\t\treturn !!node[bool];\n\t};\n});\n\n// Special cases\n\nObject.append(propertySetters, {\n\n\t'class': function(node, value){\n\t\t('className' in node) ? node.className = (value || '') : node.setAttribute('class', value);\n\t},\n\n\t'for': function(node, value){\n\t\t('htmlFor' in node) ? node.htmlFor = value : node.setAttribute('for', value);\n\t},\n\n\t'style': function(node, value){\n\t\t(node.style) ? node.style.cssText = value : node.setAttribute('style', value);\n\t},\n\n\t'value': function(node, value){\n\t\tnode.value = (value != null) ? value : '';\n\t}\n\n});\n\npropertyGetters['class'] = function(node){\n\treturn ('className' in node) ? node.className || null : node.getAttribute('class');\n};\n\n/* */\nvar el = document.createElement('button');\n// IE sets type as readonly and throws\ntry { el.type = 'button'; } catch(e){}\nif (el.type != 'button') propertySetters.type = function(node, value){\n\tnode.setAttribute('type', value);\n};\nel = null;\n/* */\n\n/**/\nvar input = document.createElement('input');\ninput.value = 't';\ninput.type = 'submit';\nif (input.value != 't') propertySetters.type = function(node, type){\n\tvar value = node.value;\n\tnode.type = type;\n\tnode.value = value;\n};\ninput = null;\n/**/\n\n/* getProperty, setProperty */\n\n/* */\nvar pollutesGetAttribute = (function(div){\n\tdiv.random = 'attribute';\n\treturn (div.getAttribute('random') == 'attribute');\n})(document.createElement('div'));\n\n/* */\n\nElement.implement({\n\n\tsetProperty: function(name, value){\n\t\tvar setter = propertySetters[name.toLowerCase()];\n\t\tif (setter){\n\t\t\tsetter(this, value);\n\t\t} else {\n\t\t\t/* */\n\t\t\tif (pollutesGetAttribute) var attributeWhiteList = this.retrieve('$attributeWhiteList', {});\n\t\t\t/* */\n\n\t\t\tif (value == null){\n\t\t\t\tthis.removeAttribute(name);\n\t\t\t\t/* */\n\t\t\t\tif (pollutesGetAttribute) delete attributeWhiteList[name];\n\t\t\t\t/* */\n\t\t\t} else {\n\t\t\t\tthis.setAttribute(name, '' + value);\n\t\t\t\t/* */\n\t\t\t\tif (pollutesGetAttribute) attributeWhiteList[name] = true;\n\t\t\t\t/* */\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tsetProperties: function(attributes){\n\t\tfor (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);\n\t\treturn this;\n\t},\n\n\tgetProperty: function(name){\n\t\tvar getter = propertyGetters[name.toLowerCase()];\n\t\tif (getter) return getter(this);\n\t\t/* */\n\t\tif (pollutesGetAttribute){\n\t\t\tvar attr = this.getAttributeNode(name), attributeWhiteList = this.retrieve('$attributeWhiteList', {});\n\t\t\tif (!attr) return null;\n\t\t\tif (attr.expando && !attributeWhiteList[name]){\n\t\t\t\tvar outer = this.outerHTML;\n\t\t\t\t// segment by the opening tag and find mention of attribute name\n\t\t\t\tif (outer.substr(0, outer.search(/\\/?['\"]?>(?![^<]*<['\"])/)).indexOf(name) < 0) return null;\n\t\t\t\tattributeWhiteList[name] = true;\n\t\t\t}\n\t\t}\n\t\t/* */\n\t\tvar result = Slick.getAttribute(this, name);\n\t\treturn (!result && !Slick.hasAttribute(this, name)) ? null : result;\n\t},\n\n\tgetProperties: function(){\n\t\tvar args = Array.from(arguments);\n\t\treturn args.map(this.getProperty, this).associate(args);\n\t},\n\n\tremoveProperty: function(name){\n\t\treturn this.setProperty(name, null);\n\t},\n\n\tremoveProperties: function(){\n\t\tArray.each(arguments, this.removeProperty, this);\n\t\treturn this;\n\t},\n\n\tset: function(prop, value){\n\t\tvar property = Element.Properties[prop];\n\t\t(property && property.set) ? property.set.call(this, value) : this.setProperty(prop, value);\n\t}.overloadSetter(),\n\n\tget: function(prop){\n\t\tvar property = Element.Properties[prop];\n\t\treturn (property && property.get) ? property.get.apply(this) : this.getProperty(prop);\n\t}.overloadGetter(),\n\n\terase: function(prop){\n\t\tvar property = Element.Properties[prop];\n\t\t(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);\n\t\treturn this;\n\t},\n\n\thasClass: function(className){\n\t\treturn this.className.clean().contains(className, ' ');\n\t},\n\n\taddClass: function(className){\n\t\tif (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();\n\t\treturn this;\n\t},\n\n\tremoveClass: function(className){\n\t\tthis.className = this.className.replace(new RegExp('(^|\\\\s)' + className + '(?:\\\\s|$)'), '$1');\n\t\treturn this;\n\t},\n\n\ttoggleClass: function(className, force){\n\t\tif (force == null) force = !this.hasClass(className);\n\t\treturn (force) ? this.addClass(className) : this.removeClass(className);\n\t},\n\n\tadopt: function(){\n\t\tvar parent = this, fragment, elements = Array.flatten(arguments), length = elements.length;\n\t\tif (length > 1) parent = fragment = document.createDocumentFragment();\n\n\t\tfor (var i = 0; i < length; i++){\n\t\t\tvar element = document.id(elements[i], true);\n\t\t\tif (element) parent.appendChild(element);\n\t\t}\n\n\t\tif (fragment) this.appendChild(fragment);\n\n\t\treturn this;\n\t},\n\n\tappendText: function(text, where){\n\t\treturn this.grab(this.getDocument().newTextNode(text), where);\n\t},\n\n\tgrab: function(el, where){\n\t\tinserters[where || 'bottom'](document.id(el, true), this);\n\t\treturn this;\n\t},\n\n\tinject: function(el, where){\n\t\tinserters[where || 'bottom'](this, document.id(el, true));\n\t\treturn this;\n\t},\n\n\treplaces: function(el){\n\t\tel = document.id(el, true);\n\t\tel.parentNode.replaceChild(this, el);\n\t\treturn this;\n\t},\n\n\twraps: function(el, where){\n\t\tel = document.id(el, true);\n\t\treturn this.replaces(el).grab(el, where);\n\t},\n\n\tgetSelected: function(){\n\t\tthis.selectedIndex; // Safari 3.2.1\n\t\treturn new Elements(Array.from(this.options).filter(function(option){\n\t\t\treturn option.selected;\n\t\t}));\n\t},\n\n\ttoQueryString: function(){\n\t\tvar queryString = [];\n\t\tthis.getElements('input, select, textarea').each(function(el){\n\t\t\tvar type = el.type;\n\t\t\tif (!el.name || el.disabled || type == 'submit' || type == 'reset' || type == 'file' || type == 'image') return;\n\n\t\t\tvar value = (el.get('tag') == 'select') ? el.getSelected().map(function(opt){\n\t\t\t\t// IE\n\t\t\t\treturn document.id(opt).get('value');\n\t\t\t}) : ((type == 'radio' || type == 'checkbox') && !el.checked) ? null : el.get('value');\n\n\t\t\tArray.from(value).each(function(val){\n\t\t\t\tif (typeof val != 'undefined') queryString.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(val));\n\t\t\t});\n\t\t});\n\t\treturn queryString.join('&');\n\t}\n\n});\n\nvar collected = {}, storage = {};\n\nvar get = function(uid){\n\treturn (storage[uid] || (storage[uid] = {}));\n};\n\nvar clean = function(item){\n\tvar uid = item.uniqueNumber;\n\tif (item.removeEvents) item.removeEvents();\n\tif (item.clearAttributes) item.clearAttributes();\n\tif (uid != null){\n\t\tdelete collected[uid];\n\t\tdelete storage[uid];\n\t}\n\treturn item;\n};\n\nvar formProps = {input: 'checked', option: 'selected', textarea: 'value'};\n\nElement.implement({\n\n\tdestroy: function(){\n\t\tvar children = clean(this).getElementsByTagName('*');\n\t\tArray.each(children, clean);\n\t\tElement.dispose(this);\n\t\treturn null;\n\t},\n\n\tempty: function(){\n\t\tArray.from(this.childNodes).each(Element.dispose);\n\t\treturn this;\n\t},\n\n\tdispose: function(){\n\t\treturn (this.parentNode) ? this.parentNode.removeChild(this) : this;\n\t},\n\n\tclone: function(contents, keepid){\n\t\tcontents = contents !== false;\n\t\tvar clone = this.cloneNode(contents), ce = [clone], te = [this], i;\n\n\t\tif (contents){\n\t\t\tce.append(Array.from(clone.getElementsByTagName('*')));\n\t\t\tte.append(Array.from(this.getElementsByTagName('*')));\n\t\t}\n\n\t\tfor (i = ce.length; i--;){\n\t\t\tvar node = ce[i], element = te[i];\n\t\t\tif (!keepid) node.removeAttribute('id');\n\t\t\t/**/\n\t\t\tif (node.clearAttributes){\n\t\t\t\tnode.clearAttributes();\n\t\t\t\tnode.mergeAttributes(element);\n\t\t\t\tnode.removeAttribute('uniqueNumber');\n\t\t\t\tif (node.options){\n\t\t\t\t\tvar no = node.options, eo = element.options;\n\t\t\t\t\tfor (var j = no.length; j--;) no[j].selected = eo[j].selected;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**/\n\t\t\tvar prop = formProps[element.tagName.toLowerCase()];\n\t\t\tif (prop && element[prop]) node[prop] = element[prop];\n\t\t}\n\n\t\t/**/\n\t\tif (Browser.ie){\n\t\t\tvar co = clone.getElementsByTagName('object'), to = this.getElementsByTagName('object');\n\t\t\tfor (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML;\n\t\t}\n\t\t/**/\n\t\treturn document.id(clone);\n\t}\n\n});\n\n[Element, Window, Document].invoke('implement', {\n\n\taddListener: function(type, fn){\n\t\tif (type == 'unload'){\n\t\t\tvar old = fn, self = this;\n\t\t\tfn = function(){\n\t\t\t\tself.removeListener('unload', fn);\n\t\t\t\told();\n\t\t\t};\n\t\t} else {\n\t\t\tcollected[Slick.uidOf(this)] = this;\n\t\t}\n\t\tif (this.addEventListener) this.addEventListener(type, fn, !!arguments[2]);\n\t\telse this.attachEvent('on' + type, fn);\n\t\treturn this;\n\t},\n\n\tremoveListener: function(type, fn){\n\t\tif (this.removeEventListener) this.removeEventListener(type, fn, !!arguments[2]);\n\t\telse this.detachEvent('on' + type, fn);\n\t\treturn this;\n\t},\n\n\tretrieve: function(property, dflt){\n\t\tvar storage = get(Slick.uidOf(this)), prop = storage[property];\n\t\tif (dflt != null && prop == null) prop = storage[property] = dflt;\n\t\treturn prop != null ? prop : null;\n\t},\n\n\tstore: function(property, value){\n\t\tvar storage = get(Slick.uidOf(this));\n\t\tstorage[property] = value;\n\t\treturn this;\n\t},\n\n\teliminate: function(property){\n\t\tvar storage = get(Slick.uidOf(this));\n\t\tdelete storage[property];\n\t\treturn this;\n\t}\n\n});\n\n/**/\nif (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){\n\tObject.each(collected, clean);\n\tif (window.CollectGarbage) CollectGarbage();\n});\n/**/\n\nElement.Properties = {};\n\n\n\nElement.Properties.style = {\n\n\tset: function(style){\n\t\tthis.style.cssText = style;\n\t},\n\n\tget: function(){\n\t\treturn this.style.cssText;\n\t},\n\n\terase: function(){\n\t\tthis.style.cssText = '';\n\t}\n\n};\n\nElement.Properties.tag = {\n\n\tget: function(){\n\t\treturn this.tagName.toLowerCase();\n\t}\n\n};\n\nElement.Properties.html = {\n\n\tset: function(html){\n\t\tif (html == null) html = '';\n\t\telse if (typeOf(html) == 'array') html = html.join('');\n\t\tthis.innerHTML = html;\n\t},\n\n\terase: function(){\n\t\tthis.innerHTML = '';\n\t}\n\n};\n\n/**/\n// technique by jdbarlett - http://jdbartlett.com/innershiv/\nvar div = document.createElement('div');\ndiv.innerHTML = '';\nvar supportsHTML5Elements = (div.childNodes.length == 1);\nif (!supportsHTML5Elements){\n\tvar tags = 'abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video'.split(' '),\n\t\tfragment = document.createDocumentFragment(), l = tags.length;\n\twhile (l--) fragment.createElement(tags[l]);\n}\ndiv = null;\n/**/\n\n/**/\nvar supportsTableInnerHTML = Function.attempt(function(){\n\tvar table = document.createElement('table');\n\ttable.innerHTML = '';\n\treturn true;\n});\n\n/**/\nvar tr = document.createElement('tr'), html = '';\ntr.innerHTML = html;\nvar supportsTRInnerHTML = (tr.innerHTML == html);\ntr = null;\n/**/\n\nif (!supportsTableInnerHTML || !supportsTRInnerHTML || !supportsHTML5Elements){\n\n\tElement.Properties.html.set = (function(set){\n\n\t\tvar translations = {\n\t\t\ttable: [1, '', '
'],\n\t\t\tselect: [1, ''],\n\t\t\ttbody: [2, '', '
'],\n\t\t\ttr: [3, '', '
']\n\t\t};\n\n\t\ttranslations.thead = translations.tfoot = translations.tbody;\n\n\t\treturn function(html){\n\t\t\tvar wrap = translations[this.get('tag')];\n\t\t\tif (!wrap && !supportsHTML5Elements) wrap = [0, '', ''];\n\t\t\tif (!wrap) return set.call(this, html);\n\n\t\t\tvar level = wrap[0], wrapper = document.createElement('div'), target = wrapper;\n\t\t\tif (!supportsHTML5Elements) fragment.appendChild(wrapper);\n\t\t\twrapper.innerHTML = [wrap[1], html, wrap[2]].flatten().join('');\n\t\t\twhile (level--) target = target.firstChild;\n\t\t\tthis.empty().adopt(target.childNodes);\n\t\t\tif (!supportsHTML5Elements) fragment.removeChild(wrapper);\n\t\t\twrapper = null;\n\t\t};\n\n\t})(Element.Properties.html.set);\n}\n/*
*/\n\n/**/\nvar testForm = document.createElement('form');\ntestForm.innerHTML = '';\n\nif (testForm.firstChild.value != 's') Element.Properties.value = {\n\n\tset: function(value){\n\t\tvar tag = this.get('tag');\n\t\tif (tag != 'select') return this.setProperty('value', value);\n\t\tvar options = this.getElements('option');\n\t\tfor (var i = 0; i < options.length; i++){\n\t\t\tvar option = options[i],\n\t\t\t\tattr = option.getAttributeNode('value'),\n\t\t\t\toptionValue = (attr && attr.specified) ? option.value : option.get('text');\n\t\t\tif (optionValue == value) return option.selected = true;\n\t\t}\n\t},\n\n\tget: function(){\n\t\tvar option = this, tag = option.get('tag');\n\n\t\tif (tag != 'select' && tag != 'option') return this.getProperty('value');\n\n\t\tif (tag == 'select' && !(option = option.getSelected()[0])) return '';\n\n\t\tvar attr = option.getAttributeNode('value');\n\t\treturn (attr && attr.specified) ? option.value : option.get('text');\n\t}\n\n};\ntestForm = null;\n/**/\n\n/**/\nif (document.createElement('div').getAttributeNode('id')) Element.Properties.id = {\n\tset: function(id){\n\t\tthis.id = this.getAttributeNode('id').value = id;\n\t},\n\tget: function(){\n\t\treturn this.id || null;\n\t},\n\terase: function(){\n\t\tthis.id = this.getAttributeNode('id').value = '';\n\t}\n};\n/**/\n\n})();\n\n\n/*\n---\n\nname: Element.Style\n\ndescription: Contains methods for interacting with the styles of Elements in a fashionable way.\n\nlicense: MIT-style license.\n\nrequires: Element\n\nprovides: Element.Style\n\n...\n*/\n\n(function(){\n\nvar html = document.html;\n\n//\n// Check for oldIE, which does not remove styles when they're set to null\nvar el = document.createElement('div');\nel.style.color = 'red';\nel.style.color = null;\nvar doesNotRemoveStyles = el.style.color == 'red';\nel = null;\n//\n\nElement.Properties.styles = {set: function(styles){\n\tthis.setStyles(styles);\n}};\n\nvar hasOpacity = (html.style.opacity != null),\n\thasFilter = (html.style.filter != null),\n\treAlpha = /alpha\\(opacity=([\\d.]+)\\)/i;\n\nvar setVisibility = function(element, opacity){\n\telement.store('$opacity', opacity);\n\telement.style.visibility = opacity > 0 || opacity == null ? 'visible' : 'hidden';\n};\n\nvar setOpacity = (hasOpacity ? function(element, opacity){\n\telement.style.opacity = opacity;\n} : (hasFilter ? function(element, opacity){\n\tvar style = element.style;\n\tif (!element.currentStyle || !element.currentStyle.hasLayout) style.zoom = 1;\n\tif (opacity == null || opacity == 1) opacity = '';\n\telse opacity = 'alpha(opacity=' + (opacity * 100).limit(0, 100).round() + ')';\n\tvar filter = style.filter || element.getComputedStyle('filter') || '';\n\tstyle.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity;\n\tif (!style.filter) style.removeAttribute('filter');\n} : setVisibility));\n\nvar getOpacity = (hasOpacity ? function(element){\n\tvar opacity = element.style.opacity || element.getComputedStyle('opacity');\n\treturn (opacity == '') ? 1 : opacity.toFloat();\n} : (hasFilter ? function(element){\n\tvar filter = (element.style.filter || element.getComputedStyle('filter')),\n\t\topacity;\n\tif (filter) opacity = filter.match(reAlpha);\n\treturn (opacity == null || filter == null) ? 1 : (opacity[1] / 100);\n} : function(element){\n\tvar opacity = element.retrieve('$opacity');\n\tif (opacity == null) opacity = (element.style.visibility == 'hidden' ? 0 : 1);\n\treturn opacity;\n}));\n\nvar floatName = (html.style.cssFloat == null) ? 'styleFloat' : 'cssFloat';\n\nElement.implement({\n\n\tgetComputedStyle: function(property){\n\t\tif (this.currentStyle) return this.currentStyle[property.camelCase()];\n\t\tvar defaultView = Element.getDocument(this).defaultView,\n\t\t\tcomputed = defaultView ? defaultView.getComputedStyle(this, null) : null;\n\t\treturn (computed) ? computed.getPropertyValue((property == floatName) ? 'float' : property.hyphenate()) : null;\n\t},\n\n\tsetStyle: function(property, value){\n\t\tif (property == 'opacity'){\n\t\t\tif (value != null) value = parseFloat(value);\n\t\t\tsetOpacity(this, value);\n\t\t\treturn this;\n\t\t}\n\t\tproperty = (property == 'float' ? floatName : property).camelCase();\n\t\tif (typeOf(value) != 'string'){\n\t\t\tvar map = (Element.Styles[property] || '@').split(' ');\n\t\t\tvalue = Array.from(value).map(function(val, i){\n\t\t\t\tif (!map[i]) return '';\n\t\t\t\treturn (typeOf(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;\n\t\t\t}).join(' ');\n\t\t} else if (value == String(Number(value))){\n\t\t\tvalue = Math.round(value);\n\t\t}\n\t\tthis.style[property] = value;\n\t\t//\n\t\tif ((value == '' || value == null) && doesNotRemoveStyles && this.style.removeAttribute){\n\t\t\tthis.style.removeAttribute(property);\n\t\t}\n\t\t//\n\t\treturn this;\n\t},\n\n\tgetStyle: function(property){\n\t\tif (property == 'opacity') return getOpacity(this);\n\t\tproperty = (property == 'float' ? floatName : property).camelCase();\n\t\tvar result = this.style[property];\n\t\tif (!result || property == 'zIndex'){\n\t\t\tresult = [];\n\t\t\tfor (var style in Element.ShortStyles){\n\t\t\t\tif (property != style) continue;\n\t\t\t\tfor (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));\n\t\t\t\treturn result.join(' ');\n\t\t\t}\n\t\t\tresult = this.getComputedStyle(property);\n\t\t}\n\t\tif (result){\n\t\t\tresult = String(result);\n\t\t\tvar color = result.match(/rgba?\\([\\d\\s,]+\\)/);\n\t\t\tif (color) result = result.replace(color[0], color[0].rgbToHex());\n\t\t}\n\t\tif (Browser.ie && isNaN(parseFloat(result))){\n\t\t\tif ((/^(height|width)$/).test(property)){\n\t\t\t\tvar values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;\n\t\t\t\tvalues.each(function(value){\n\t\t\t\t\tsize += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();\n\t\t\t\t}, this);\n\t\t\t\treturn this['offset' + property.capitalize()] - size + 'px';\n\t\t\t}\n\t\t\tif (Browser.opera && String(result).indexOf('px') != -1) return result;\n\t\t\tif ((/^border(.+)Width|margin|padding/).test(property)) return '0px';\n\t\t}\n\t\treturn result;\n\t},\n\n\tsetStyles: function(styles){\n\t\tfor (var style in styles) this.setStyle(style, styles[style]);\n\t\treturn this;\n\t},\n\n\tgetStyles: function(){\n\t\tvar result = {};\n\t\tArray.flatten(arguments).each(function(key){\n\t\t\tresult[key] = this.getStyle(key);\n\t\t}, this);\n\t\treturn result;\n\t}\n\n});\n\nElement.Styles = {\n\tleft: '@px', top: '@px', bottom: '@px', right: '@px',\n\twidth: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',\n\tbackgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',\n\tfontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',\n\tmargin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',\n\tborderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',\n\tzIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'\n};\n\n\n\n\n\nElement.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};\n\n['Top', 'Right', 'Bottom', 'Left'].each(function(direction){\n\tvar Short = Element.ShortStyles;\n\tvar All = Element.Styles;\n\t['margin', 'padding'].each(function(style){\n\t\tvar sd = style + direction;\n\t\tShort[style][sd] = All[sd] = '@px';\n\t});\n\tvar bd = 'border' + direction;\n\tShort.border[bd] = All[bd] = '@px @ rgb(@, @, @)';\n\tvar bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';\n\tShort[bd] = {};\n\tShort.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';\n\tShort.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';\n\tShort.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';\n});\n\n})();\n\n\n/*\n---\n\nname: Element.Event\n\ndescription: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events, if necessary.\n\nlicense: MIT-style license.\n\nrequires: [Element, Event]\n\nprovides: Element.Event\n\n...\n*/\n\n(function(){\n\nElement.Properties.events = {set: function(events){\n\tthis.addEvents(events);\n}};\n\n[Element, Window, Document].invoke('implement', {\n\n\taddEvent: function(type, fn){\n\t\tvar events = this.retrieve('events', {});\n\t\tif (!events[type]) events[type] = {keys: [], values: []};\n\t\tif (events[type].keys.contains(fn)) return this;\n\t\tevents[type].keys.push(fn);\n\t\tvar realType = type,\n\t\t\tcustom = Element.Events[type],\n\t\t\tcondition = fn,\n\t\t\tself = this;\n\t\tif (custom){\n\t\t\tif (custom.onAdd) custom.onAdd.call(this, fn, type);\n\t\t\tif (custom.condition){\n\t\t\t\tcondition = function(event){\n\t\t\t\t\tif (custom.condition.call(this, event, type)) return fn.call(this, event);\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (custom.base) realType = Function.from(custom.base).call(this, type);\n\t\t}\n\t\tvar defn = function(){\n\t\t\treturn fn.call(self);\n\t\t};\n\t\tvar nativeEvent = Element.NativeEvents[realType];\n\t\tif (nativeEvent){\n\t\t\tif (nativeEvent == 2){\n\t\t\t\tdefn = function(event){\n\t\t\t\t\tevent = new DOMEvent(event, self.getWindow());\n\t\t\t\t\tif (condition.call(self, event) === false) event.stop();\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.addListener(realType, defn, arguments[2]);\n\t\t}\n\t\tevents[type].values.push(defn);\n\t\treturn this;\n\t},\n\n\tremoveEvent: function(type, fn){\n\t\tvar events = this.retrieve('events');\n\t\tif (!events || !events[type]) return this;\n\t\tvar list = events[type];\n\t\tvar index = list.keys.indexOf(fn);\n\t\tif (index == -1) return this;\n\t\tvar value = list.values[index];\n\t\tdelete list.keys[index];\n\t\tdelete list.values[index];\n\t\tvar custom = Element.Events[type];\n\t\tif (custom){\n\t\t\tif (custom.onRemove) custom.onRemove.call(this, fn, type);\n\t\t\tif (custom.base) type = Function.from(custom.base).call(this, type);\n\t\t}\n\t\treturn (Element.NativeEvents[type]) ? this.removeListener(type, value, arguments[2]) : this;\n\t},\n\n\taddEvents: function(events){\n\t\tfor (var event in events) this.addEvent(event, events[event]);\n\t\treturn this;\n\t},\n\n\tremoveEvents: function(events){\n\t\tvar type;\n\t\tif (typeOf(events) == 'object'){\n\t\t\tfor (type in events) this.removeEvent(type, events[type]);\n\t\t\treturn this;\n\t\t}\n\t\tvar attached = this.retrieve('events');\n\t\tif (!attached) return this;\n\t\tif (!events){\n\t\t\tfor (type in attached) this.removeEvents(type);\n\t\t\tthis.eliminate('events');\n\t\t} else if (attached[events]){\n\t\t\tattached[events].keys.each(function(fn){\n\t\t\t\tthis.removeEvent(events, fn);\n\t\t\t}, this);\n\t\t\tdelete attached[events];\n\t\t}\n\t\treturn this;\n\t},\n\n\tfireEvent: function(type, args, delay){\n\t\tvar events = this.retrieve('events');\n\t\tif (!events || !events[type]) return this;\n\t\targs = Array.from(args);\n\n\t\tevents[type].keys.each(function(fn){\n\t\t\tif (delay) fn.delay(delay, this, args);\n\t\t\telse fn.apply(this, args);\n\t\t}, this);\n\t\treturn this;\n\t},\n\n\tcloneEvents: function(from, type){\n\t\tfrom = document.id(from);\n\t\tvar events = from.retrieve('events');\n\t\tif (!events) return this;\n\t\tif (!type){\n\t\t\tfor (var eventType in events) this.cloneEvents(from, eventType);\n\t\t} else if (events[type]){\n\t\t\tevents[type].keys.each(function(fn){\n\t\t\t\tthis.addEvent(type, fn);\n\t\t\t}, this);\n\t\t}\n\t\treturn this;\n\t}\n\n});\n\nElement.NativeEvents = {\n\tclick: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons\n\tmousewheel: 2, DOMMouseScroll: 2, //mouse wheel\n\tmouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement\n\tkeydown: 2, keypress: 2, keyup: 2, //keyboard\n\torientationchange: 2, // mobile\n\ttouchstart: 2, touchmove: 2, touchend: 2, touchcancel: 2, // touch\n\tgesturestart: 2, gesturechange: 2, gestureend: 2, // gesture\n\tfocus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, paste: 2, input: 2, //form elements\n\tload: 2, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window\n\terror: 1, abort: 1, scroll: 1 //misc\n};\n\nElement.Events = {mousewheel: {\n\tbase: (Browser.firefox) ? 'DOMMouseScroll' : 'mousewheel'\n}};\n\nif ('onmouseenter' in document.documentElement){\n\tElement.NativeEvents.mouseenter = Element.NativeEvents.mouseleave = 2;\n} else {\n\tvar check = function(event){\n\t\tvar related = event.relatedTarget;\n\t\tif (related == null) return true;\n\t\tif (!related) return false;\n\t\treturn (related != this && related.prefix != 'xul' && typeOf(this) != 'document' && !this.contains(related));\n\t};\n\n\tElement.Events.mouseenter = {\n\t\tbase: 'mouseover',\n\t\tcondition: check\n\t};\n\n\tElement.Events.mouseleave = {\n\t\tbase: 'mouseout',\n\t\tcondition: check\n\t};\n}\n\n/**/\nif (!window.addEventListener){\n\tElement.NativeEvents.propertychange = 2;\n\tElement.Events.change = {\n\t\tbase: function(){\n\t\t\tvar type = this.type;\n\t\t\treturn (this.get('tag') == 'input' && (type == 'radio' || type == 'checkbox')) ? 'propertychange' : 'change'\n\t\t},\n\t\tcondition: function(event){\n\t\t\treturn this.type != 'radio' || (event.event.propertyName == 'checked' && this.checked);\n\t\t}\n\t}\n}\n/**/\n\n\n\n})();\n\n\n/*\n---\n\nname: Element.Delegation\n\ndescription: Extends the Element native object to include the delegate method for more efficient event management.\n\nlicense: MIT-style license.\n\nrequires: [Element.Event]\n\nprovides: [Element.Delegation]\n\n...\n*/\n\n(function(){\n\nvar eventListenerSupport = !!window.addEventListener;\n\nElement.NativeEvents.focusin = Element.NativeEvents.focusout = 2;\n\nvar bubbleUp = function(self, match, fn, event, target){\n\twhile (target && target != self){\n\t\tif (match(target, event)) return fn.call(target, event, target);\n\t\ttarget = document.id(target.parentNode);\n\t}\n};\n\nvar map = {\n\tmouseenter: {\n\t\tbase: 'mouseover'\n\t},\n\tmouseleave: {\n\t\tbase: 'mouseout'\n\t},\n\tfocus: {\n\t\tbase: 'focus' + (eventListenerSupport ? '' : 'in'),\n\t\tcapture: true\n\t},\n\tblur: {\n\t\tbase: eventListenerSupport ? 'blur' : 'focusout',\n\t\tcapture: true\n\t}\n};\n\n/**/\nvar _key = '$delegation:';\nvar formObserver = function(type){\n\n\treturn {\n\n\t\tbase: 'focusin',\n\n\t\tremove: function(self, uid){\n\t\t\tvar list = self.retrieve(_key + type + 'listeners', {})[uid];\n\t\t\tif (list && list.forms) for (var i = list.forms.length; i--;){\n\t\t\t\tlist.forms[i].removeEvent(type, list.fns[i]);\n\t\t\t}\n\t\t},\n\n\t\tlisten: function(self, match, fn, event, target, uid){\n\t\t\tvar form = (target.get('tag') == 'form') ? target : event.target.getParent('form');\n\t\t\tif (!form) return;\n\n\t\t\tvar listeners = self.retrieve(_key + type + 'listeners', {}),\n\t\t\t\tlistener = listeners[uid] || {forms: [], fns: []},\n\t\t\t\tforms = listener.forms, fns = listener.fns;\n\n\t\t\tif (forms.indexOf(form) != -1) return;\n\t\t\tforms.push(form);\n\n\t\t\tvar _fn = function(event){\n\t\t\t\tbubbleUp(self, match, fn, event, target);\n\t\t\t};\n\t\t\tform.addEvent(type, _fn);\n\t\t\tfns.push(_fn);\n\n\t\t\tlisteners[uid] = listener;\n\t\t\tself.store(_key + type + 'listeners', listeners);\n\t\t}\n\t};\n};\n\nvar inputObserver = function(type){\n\treturn {\n\t\tbase: 'focusin',\n\t\tlisten: function(self, match, fn, event, target){\n\t\t\tvar events = {blur: function(){\n\t\t\t\tthis.removeEvents(events);\n\t\t\t}};\n\t\t\tevents[type] = function(event){\n\t\t\t\tbubbleUp(self, match, fn, event, target);\n\t\t\t};\n\t\t\tevent.target.addEvents(events);\n\t\t}\n\t};\n};\n\nif (!eventListenerSupport) Object.append(map, {\n\tsubmit: formObserver('submit'),\n\treset: formObserver('reset'),\n\tchange: inputObserver('change'),\n\tselect: inputObserver('select')\n});\n/**/\n\nvar proto = Element.prototype,\n\taddEvent = proto.addEvent,\n\tremoveEvent = proto.removeEvent;\n\nvar relay = function(old, method){\n\treturn function(type, fn, useCapture){\n\t\tif (type.indexOf(':relay') == -1) return old.call(this, type, fn, useCapture);\n\t\tvar parsed = Slick.parse(type).expressions[0][0];\n\t\tif (parsed.pseudos[0].key != 'relay') return old.call(this, type, fn, useCapture);\n\t\tvar newType = parsed.tag;\n\t\tparsed.pseudos.slice(1).each(function(pseudo){\n\t\t\tnewType += ':' + pseudo.key + (pseudo.value ? '(' + pseudo.value + ')' : '');\n\t\t});\n\t\told.call(this, type, fn);\n\t\treturn method.call(this, newType, parsed.pseudos[0].value, fn);\n\t};\n};\n\nvar delegation = {\n\n\taddEvent: function(type, match, fn){\n\t\tvar storage = this.retrieve('$delegates', {}), stored = storage[type];\n\t\tif (stored) for (var _uid in stored){\n\t\t\tif (stored[_uid].fn == fn && stored[_uid].match == match) return this;\n\t\t}\n\n\t\tvar _type = type, _match = match, _fn = fn, _map = map[type] || {};\n\t\ttype = _map.base || _type;\n\n\t\tmatch = function(target){\n\t\t\treturn Slick.match(target, _match);\n\t\t};\n\n\t\tvar elementEvent = Element.Events[_type];\n\t\tif (elementEvent && elementEvent.condition){\n\t\t\tvar __match = match, condition = elementEvent.condition;\n\t\t\tmatch = function(target, event){\n\t\t\t\treturn __match(target, event) && condition.call(target, event, type);\n\t\t\t};\n\t\t}\n\n\t\tvar self = this, uid = String.uniqueID();\n\t\tvar delegator = _map.listen ? function(event, target){\n\t\t\tif (!target && event && event.target) target = event.target;\n\t\t\tif (target) _map.listen(self, match, fn, event, target, uid);\n\t\t} : function(event, target){\n\t\t\tif (!target && event && event.target) target = event.target;\n\t\t\tif (target) bubbleUp(self, match, fn, event, target);\n\t\t};\n\n\t\tif (!stored) stored = {};\n\t\tstored[uid] = {\n\t\t\tmatch: _match,\n\t\t\tfn: _fn,\n\t\t\tdelegator: delegator\n\t\t};\n\t\tstorage[_type] = stored;\n\t\treturn addEvent.call(this, type, delegator, _map.capture);\n\t},\n\n\tremoveEvent: function(type, match, fn, _uid){\n\t\tvar storage = this.retrieve('$delegates', {}), stored = storage[type];\n\t\tif (!stored) return this;\n\n\t\tif (_uid){\n\t\t\tvar _type = type, delegator = stored[_uid].delegator, _map = map[type] || {};\n\t\t\ttype = _map.base || _type;\n\t\t\tif (_map.remove) _map.remove(this, _uid);\n\t\t\tdelete stored[_uid];\n\t\t\tstorage[_type] = stored;\n\t\t\treturn removeEvent.call(this, type, delegator);\n\t\t}\n\n\t\tvar __uid, s;\n\t\tif (fn) for (__uid in stored){\n\t\t\ts = stored[__uid];\n\t\t\tif (s.match == match && s.fn == fn) return delegation.removeEvent.call(this, type, match, fn, __uid);\n\t\t} else for (__uid in stored){\n\t\t\ts = stored[__uid];\n\t\t\tif (s.match == match) delegation.removeEvent.call(this, type, match, s.fn, __uid);\n\t\t}\n\t\treturn this;\n\t}\n\n};\n\n[Element, Window, Document].invoke('implement', {\n\taddEvent: relay(addEvent, delegation.addEvent),\n\tremoveEvent: relay(removeEvent, delegation.removeEvent)\n});\n\n})();\n\n\n/*\n---\n\nname: Element.Dimensions\n\ndescription: Contains methods to work with size, scroll, or positioning of Elements and the window object.\n\nlicense: MIT-style license.\n\ncredits:\n - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).\n - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).\n\nrequires: [Element, Element.Style]\n\nprovides: [Element.Dimensions]\n\n...\n*/\n\n(function(){\n\nvar element = document.createElement('div'),\n\tchild = document.createElement('div');\nelement.style.height = '0';\nelement.appendChild(child);\nvar brokenOffsetParent = (child.offsetParent === element);\nelement = child = null;\n\nvar isOffset = function(el){\n\treturn styleString(el, 'position') != 'static' || isBody(el);\n};\n\nvar isOffsetStatic = function(el){\n\treturn isOffset(el) || (/^(?:table|td|th)$/i).test(el.tagName);\n};\n\nElement.implement({\n\n\tscrollTo: function(x, y){\n\t\tif (isBody(this)){\n\t\t\tthis.getWindow().scrollTo(x, y);\n\t\t} else {\n\t\t\tthis.scrollLeft = x;\n\t\t\tthis.scrollTop = y;\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetSize: function(){\n\t\tif (isBody(this)) return this.getWindow().getSize();\n\t\treturn {x: this.offsetWidth, y: this.offsetHeight};\n\t},\n\n\tgetScrollSize: function(){\n\t\tif (isBody(this)) return this.getWindow().getScrollSize();\n\t\treturn {x: this.scrollWidth, y: this.scrollHeight};\n\t},\n\n\tgetScroll: function(){\n\t\tif (isBody(this)) return this.getWindow().getScroll();\n\t\treturn {x: this.scrollLeft, y: this.scrollTop};\n\t},\n\n\tgetScrolls: function(){\n\t\tvar element = this.parentNode, position = {x: 0, y: 0};\n\t\twhile (element && !isBody(element)){\n\t\t\tposition.x += element.scrollLeft;\n\t\t\tposition.y += element.scrollTop;\n\t\t\telement = element.parentNode;\n\t\t}\n\t\treturn position;\n\t},\n\n\tgetOffsetParent: brokenOffsetParent ? function(){\n\t\tvar element = this;\n\t\tif (isBody(element) || styleString(element, 'position') == 'fixed') return null;\n\n\t\tvar isOffsetCheck = (styleString(element, 'position') == 'static') ? isOffsetStatic : isOffset;\n\t\twhile ((element = element.parentNode)){\n\t\t\tif (isOffsetCheck(element)) return element;\n\t\t}\n\t\treturn null;\n\t} : function(){\n\t\tvar element = this;\n\t\tif (isBody(element) || styleString(element, 'position') == 'fixed') return null;\n\n\t\ttry {\n\t\t\treturn element.offsetParent;\n\t\t} catch(e) {}\n\t\treturn null;\n\t},\n\n\tgetOffsets: function(){\n\t\tif (this.getBoundingClientRect && !Browser.Platform.ios){\n\t\t\tvar bound = this.getBoundingClientRect(),\n\t\t\t\thtml = document.id(this.getDocument().documentElement),\n\t\t\t\thtmlScroll = html.getScroll(),\n\t\t\t\telemScrolls = this.getScrolls(),\n\t\t\t\tisFixed = (styleString(this, 'position') == 'fixed');\n\n\t\t\treturn {\n\t\t\t\tx: bound.left.toInt() + elemScrolls.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,\n\t\t\t\ty: bound.top.toInt() + elemScrolls.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop\n\t\t\t};\n\t\t}\n\n\t\tvar element = this, position = {x: 0, y: 0};\n\t\tif (isBody(this)) return position;\n\n\t\twhile (element && !isBody(element)){\n\t\t\tposition.x += element.offsetLeft;\n\t\t\tposition.y += element.offsetTop;\n\n\t\t\tif (Browser.firefox){\n\t\t\t\tif (!borderBox(element)){\n\t\t\t\t\tposition.x += leftBorder(element);\n\t\t\t\t\tposition.y += topBorder(element);\n\t\t\t\t}\n\t\t\t\tvar parent = element.parentNode;\n\t\t\t\tif (parent && styleString(parent, 'overflow') != 'visible'){\n\t\t\t\t\tposition.x += leftBorder(parent);\n\t\t\t\t\tposition.y += topBorder(parent);\n\t\t\t\t}\n\t\t\t} else if (element != this && Browser.safari){\n\t\t\t\tposition.x += leftBorder(element);\n\t\t\t\tposition.y += topBorder(element);\n\t\t\t}\n\n\t\t\telement = element.offsetParent;\n\t\t}\n\t\tif (Browser.firefox && !borderBox(this)){\n\t\t\tposition.x -= leftBorder(this);\n\t\t\tposition.y -= topBorder(this);\n\t\t}\n\t\treturn position;\n\t},\n\n\tgetPosition: function(relative){\n\t\tvar offset = this.getOffsets(),\n\t\t\tscroll = this.getScrolls();\n\t\tvar position = {\n\t\t\tx: offset.x - scroll.x,\n\t\t\ty: offset.y - scroll.y\n\t\t};\n\n\t\tif (relative && (relative = document.id(relative))){\n\t\t\tvar relativePosition = relative.getPosition();\n\t\t\treturn {x: position.x - relativePosition.x - leftBorder(relative), y: position.y - relativePosition.y - topBorder(relative)};\n\t\t}\n\t\treturn position;\n\t},\n\n\tgetCoordinates: function(element){\n\t\tif (isBody(this)) return this.getWindow().getCoordinates();\n\t\tvar position = this.getPosition(element),\n\t\t\tsize = this.getSize();\n\t\tvar obj = {\n\t\t\tleft: position.x,\n\t\t\ttop: position.y,\n\t\t\twidth: size.x,\n\t\t\theight: size.y\n\t\t};\n\t\tobj.right = obj.left + obj.width;\n\t\tobj.bottom = obj.top + obj.height;\n\t\treturn obj;\n\t},\n\n\tcomputePosition: function(obj){\n\t\treturn {\n\t\t\tleft: obj.x - styleNumber(this, 'margin-left'),\n\t\t\ttop: obj.y - styleNumber(this, 'margin-top')\n\t\t};\n\t},\n\n\tsetPosition: function(obj){\n\t\treturn this.setStyles(this.computePosition(obj));\n\t}\n\n});\n\n\n[Document, Window].invoke('implement', {\n\n\tgetSize: function(){\n\t\tvar doc = getCompatElement(this);\n\t\treturn {x: doc.clientWidth, y: doc.clientHeight};\n\t},\n\n\tgetScroll: function(){\n\t\tvar win = this.getWindow(), doc = getCompatElement(this);\n\t\treturn {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};\n\t},\n\n\tgetScrollSize: function(){\n\t\tvar doc = getCompatElement(this),\n\t\t\tmin = this.getSize(),\n\t\t\tbody = this.getDocument().body;\n\n\t\treturn {x: Math.max(doc.scrollWidth, body.scrollWidth, min.x), y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)};\n\t},\n\n\tgetPosition: function(){\n\t\treturn {x: 0, y: 0};\n\t},\n\n\tgetCoordinates: function(){\n\t\tvar size = this.getSize();\n\t\treturn {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};\n\t}\n\n});\n\n// private methods\n\nvar styleString = Element.getComputedStyle;\n\nfunction styleNumber(element, style){\n\treturn styleString(element, style).toInt() || 0;\n}\n\nfunction borderBox(element){\n\treturn styleString(element, '-moz-box-sizing') == 'border-box';\n}\n\nfunction topBorder(element){\n\treturn styleNumber(element, 'border-top-width');\n}\n\nfunction leftBorder(element){\n\treturn styleNumber(element, 'border-left-width');\n}\n\nfunction isBody(element){\n\treturn (/^(?:body|html)$/i).test(element.tagName);\n}\n\nfunction getCompatElement(element){\n\tvar doc = element.getDocument();\n\treturn (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;\n}\n\n})();\n\n//aliases\nElement.alias({position: 'setPosition'}); //compatability\n\n[Window, Document, Element].invoke('implement', {\n\n\tgetHeight: function(){\n\t\treturn this.getSize().y;\n\t},\n\n\tgetWidth: function(){\n\t\treturn this.getSize().x;\n\t},\n\n\tgetScrollTop: function(){\n\t\treturn this.getScroll().y;\n\t},\n\n\tgetScrollLeft: function(){\n\t\treturn this.getScroll().x;\n\t},\n\n\tgetScrollHeight: function(){\n\t\treturn this.getScrollSize().y;\n\t},\n\n\tgetScrollWidth: function(){\n\t\treturn this.getScrollSize().x;\n\t},\n\n\tgetTop: function(){\n\t\treturn this.getPosition().y;\n\t},\n\n\tgetLeft: function(){\n\t\treturn this.getPosition().x;\n\t}\n\n});\n\n\n/*\n---\n\nname: Fx\n\ndescription: Contains the basic animation logic to be extended by all other Fx Classes.\n\nlicense: MIT-style license.\n\nrequires: [Chain, Events, Options]\n\nprovides: Fx\n\n...\n*/\n\n(function(){\n\nvar Fx = this.Fx = new Class({\n\n\tImplements: [Chain, Events, Options],\n\n\toptions: {\n\t\t/*\n\t\tonStart: nil,\n\t\tonCancel: nil,\n\t\tonComplete: nil,\n\t\t*/\n\t\tfps: 60,\n\t\tunit: false,\n\t\tduration: 500,\n\t\tframes: null,\n\t\tframeSkip: true,\n\t\tlink: 'ignore'\n\t},\n\n\tinitialize: function(options){\n\t\tthis.subject = this.subject || this;\n\t\tthis.setOptions(options);\n\t},\n\n\tgetTransition: function(){\n\t\treturn function(p){\n\t\t\treturn -(Math.cos(Math.PI * p) - 1) / 2;\n\t\t};\n\t},\n\n\tstep: function(now){\n\t\tif (this.options.frameSkip){\n\t\t\tvar diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval;\n\t\t\tthis.time = now;\n\t\t\tthis.frame += frames;\n\t\t} else {\n\t\t\tthis.frame++;\n\t\t}\n\n\t\tif (this.frame < this.frames){\n\t\t\tvar delta = this.transition(this.frame / this.frames);\n\t\t\tthis.set(this.compute(this.from, this.to, delta));\n\t\t} else {\n\t\t\tthis.frame = this.frames;\n\t\t\tthis.set(this.compute(this.from, this.to, 1));\n\t\t\tthis.stop();\n\t\t}\n\t},\n\n\tset: function(now){\n\t\treturn now;\n\t},\n\n\tcompute: function(from, to, delta){\n\t\treturn Fx.compute(from, to, delta);\n\t},\n\n\tcheck: function(){\n\t\tif (!this.isRunning()) return true;\n\t\tswitch (this.options.link){\n\t\t\tcase 'cancel': this.cancel(); return true;\n\t\t\tcase 'chain': this.chain(this.caller.pass(arguments, this)); return false;\n\t\t}\n\t\treturn false;\n\t},\n\n\tstart: function(from, to){\n\t\tif (!this.check(from, to)) return this;\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.frame = (this.options.frameSkip) ? 0 : -1;\n\t\tthis.time = null;\n\t\tthis.transition = this.getTransition();\n\t\tvar frames = this.options.frames, fps = this.options.fps, duration = this.options.duration;\n\t\tthis.duration = Fx.Durations[duration] || duration.toInt();\n\t\tthis.frameInterval = 1000 / fps;\n\t\tthis.frames = frames || Math.round(this.duration / this.frameInterval);\n\t\tthis.fireEvent('start', this.subject);\n\t\tpushInstance.call(this, fps);\n\t\treturn this;\n\t},\n\n\tstop: function(){\n\t\tif (this.isRunning()){\n\t\t\tthis.time = null;\n\t\t\tpullInstance.call(this, this.options.fps);\n\t\t\tif (this.frames == this.frame){\n\t\t\t\tthis.fireEvent('complete', this.subject);\n\t\t\t\tif (!this.callChain()) this.fireEvent('chainComplete', this.subject);\n\t\t\t} else {\n\t\t\t\tthis.fireEvent('stop', this.subject);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tcancel: function(){\n\t\tif (this.isRunning()){\n\t\t\tthis.time = null;\n\t\t\tpullInstance.call(this, this.options.fps);\n\t\t\tthis.frame = this.frames;\n\t\t\tthis.fireEvent('cancel', this.subject).clearChain();\n\t\t}\n\t\treturn this;\n\t},\n\n\tpause: function(){\n\t\tif (this.isRunning()){\n\t\t\tthis.time = null;\n\t\t\tpullInstance.call(this, this.options.fps);\n\t\t}\n\t\treturn this;\n\t},\n\n\tresume: function(){\n\t\tif ((this.frame < this.frames) && !this.isRunning()) pushInstance.call(this, this.options.fps);\n\t\treturn this;\n\t},\n\n\tisRunning: function(){\n\t\tvar list = instances[this.options.fps];\n\t\treturn list && list.contains(this);\n\t}\n\n});\n\nFx.compute = function(from, to, delta){\n\treturn (to - from) * delta + from;\n};\n\nFx.Durations = {'short': 250, 'normal': 500, 'long': 1000};\n\n// global timers\n\nvar instances = {}, timers = {};\n\nvar loop = function(){\n\tvar now = Date.now();\n\tfor (var i = this.length; i--;){\n\t\tvar instance = this[i];\n\t\tif (instance) instance.step(now);\n\t}\n};\n\nvar pushInstance = function(fps){\n\tvar list = instances[fps] || (instances[fps] = []);\n\tlist.push(this);\n\tif (!timers[fps]) timers[fps] = loop.periodical(Math.round(1000 / fps), list);\n};\n\nvar pullInstance = function(fps){\n\tvar list = instances[fps];\n\tif (list){\n\t\tlist.erase(this);\n\t\tif (!list.length && timers[fps]){\n\t\t\tdelete instances[fps];\n\t\t\ttimers[fps] = clearInterval(timers[fps]);\n\t\t}\n\t}\n};\n\n})();\n\n\n/*\n---\n\nname: Fx.CSS\n\ndescription: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.\n\nlicense: MIT-style license.\n\nrequires: [Fx, Element.Style]\n\nprovides: Fx.CSS\n\n...\n*/\n\nFx.CSS = new Class({\n\n\tExtends: Fx,\n\n\t//prepares the base from/to object\n\n\tprepare: function(element, property, values){\n\t\tvalues = Array.from(values);\n\t\tvar from = values[0], to = values[1];\n\t\tif (to == null){\n\t\t\tto = from;\n\t\t\tfrom = element.getStyle(property);\n\t\t\tvar unit = this.options.unit;\n\t\t\t// adapted from: https://github.com/ryanmorr/fx/blob/master/fx.js#L299\n\t\t\tif (unit && from.slice(-unit.length) != unit && parseFloat(from) != 0){\n\t\t\t\telement.setStyle(property, to + unit);\n\t\t\t\tvar value = element.getComputedStyle(property);\n\t\t\t\t// IE and Opera support pixelLeft or pixelWidth\n\t\t\t\tif (!(/px$/.test(value))){\n\t\t\t\t\tvalue = element.style[('pixel-' + property).camelCase()];\n\t\t\t\t\tif (value == null){\n\t\t\t\t\t\t// adapted from Dean Edwards' http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\t\t\t\t\t\tvar left = element.style.left;\n\t\t\t\t\t\telement.style.left = to + unit;\n\t\t\t\t\t\tvalue = element.style.pixelLeft;\n\t\t\t\t\t\telement.style.left = left;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfrom = (to || 1) / (parseFloat(value) || 1) * (parseFloat(from) || 0);\n\t\t\t\telement.setStyle(property, from + unit);\n\t\t\t}\n\t\t}\n\t\treturn {from: this.parse(from), to: this.parse(to)};\n\t},\n\n\t//parses a value into an array\n\n\tparse: function(value){\n\t\tvalue = Function.from(value)();\n\t\tvalue = (typeof value == 'string') ? value.split(' ') : Array.from(value);\n\t\treturn value.map(function(val){\n\t\t\tval = String(val);\n\t\t\tvar found = false;\n\t\t\tObject.each(Fx.CSS.Parsers, function(parser, key){\n\t\t\t\tif (found) return;\n\t\t\t\tvar parsed = parser.parse(val);\n\t\t\t\tif (parsed || parsed === 0) found = {value: parsed, parser: parser};\n\t\t\t});\n\t\t\tfound = found || {value: val, parser: Fx.CSS.Parsers.String};\n\t\t\treturn found;\n\t\t});\n\t},\n\n\t//computes by a from and to prepared objects, using their parsers.\n\n\tcompute: function(from, to, delta){\n\t\tvar computed = [];\n\t\t(Math.min(from.length, to.length)).times(function(i){\n\t\t\tcomputed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});\n\t\t});\n\t\tcomputed.$family = Function.from('fx:css:value');\n\t\treturn computed;\n\t},\n\n\t//serves the value as settable\n\n\tserve: function(value, unit){\n\t\tif (typeOf(value) != 'fx:css:value') value = this.parse(value);\n\t\tvar returned = [];\n\t\tvalue.each(function(bit){\n\t\t\treturned = returned.concat(bit.parser.serve(bit.value, unit));\n\t\t});\n\t\treturn returned;\n\t},\n\n\t//renders the change to an element\n\n\trender: function(element, property, value, unit){\n\t\telement.setStyle(property, this.serve(value, unit));\n\t},\n\n\t//searches inside the page css to find the values for a selector\n\n\tsearch: function(selector){\n\t\tif (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];\n\t\tvar to = {}, selectorTest = new RegExp('^' + selector.escapeRegExp() + '$');\n\t\tArray.each(document.styleSheets, function(sheet, j){\n\t\t\tvar href = sheet.href;\n\t\t\tif (href && href.contains('://') && !href.contains(document.domain)) return;\n\t\t\tvar rules = sheet.rules || sheet.cssRules;\n\t\t\tArray.each(rules, function(rule, i){\n\t\t\t\tif (!rule.style) return;\n\t\t\t\tvar selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\\w+/, function(m){\n\t\t\t\t\treturn m.toLowerCase();\n\t\t\t\t}) : null;\n\t\t\t\tif (!selectorText || !selectorTest.test(selectorText)) return;\n\t\t\t\tObject.each(Element.Styles, function(value, style){\n\t\t\t\t\tif (!rule.style[style] || Element.ShortStyles[style]) return;\n\t\t\t\t\tvalue = String(rule.style[style]);\n\t\t\t\t\tto[style] = ((/^rgb/).test(value)) ? value.rgbToHex() : value;\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\treturn Fx.CSS.Cache[selector] = to;\n\t}\n\n});\n\nFx.CSS.Cache = {};\n\nFx.CSS.Parsers = {\n\n\tColor: {\n\t\tparse: function(value){\n\t\t\tif (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);\n\t\t\treturn ((value = value.match(/(\\d+),\\s*(\\d+),\\s*(\\d+)/))) ? [value[1], value[2], value[3]] : false;\n\t\t},\n\t\tcompute: function(from, to, delta){\n\t\t\treturn from.map(function(value, i){\n\t\t\t\treturn Math.round(Fx.compute(from[i], to[i], delta));\n\t\t\t});\n\t\t},\n\t\tserve: function(value){\n\t\t\treturn value.map(Number);\n\t\t}\n\t},\n\n\tNumber: {\n\t\tparse: parseFloat,\n\t\tcompute: Fx.compute,\n\t\tserve: function(value, unit){\n\t\t\treturn (unit) ? value + unit : value;\n\t\t}\n\t},\n\n\tString: {\n\t\tparse: Function.from(false),\n\t\tcompute: function(zero, one){\n\t\t\treturn one;\n\t\t},\n\t\tserve: function(zero){\n\t\t\treturn zero;\n\t\t}\n\t}\n\n};\n\n\n\n\n/*\n---\n\nname: Fx.Tween\n\ndescription: Formerly Fx.Style, effect to transition any CSS property for an element.\n\nlicense: MIT-style license.\n\nrequires: Fx.CSS\n\nprovides: [Fx.Tween, Element.fade, Element.highlight]\n\n...\n*/\n\nFx.Tween = new Class({\n\n\tExtends: Fx.CSS,\n\n\tinitialize: function(element, options){\n\t\tthis.element = this.subject = document.id(element);\n\t\tthis.parent(options);\n\t},\n\n\tset: function(property, now){\n\t\tif (arguments.length == 1){\n\t\t\tnow = property;\n\t\t\tproperty = this.property || this.options.property;\n\t\t}\n\t\tthis.render(this.element, property, now, this.options.unit);\n\t\treturn this;\n\t},\n\n\tstart: function(property, from, to){\n\t\tif (!this.check(property, from, to)) return this;\n\t\tvar args = Array.flatten(arguments);\n\t\tthis.property = this.options.property || args.shift();\n\t\tvar parsed = this.prepare(this.element, this.property, args);\n\t\treturn this.parent(parsed.from, parsed.to);\n\t}\n\n});\n\nElement.Properties.tween = {\n\n\tset: function(options){\n\t\tthis.get('tween').cancel().setOptions(options);\n\t\treturn this;\n\t},\n\n\tget: function(){\n\t\tvar tween = this.retrieve('tween');\n\t\tif (!tween){\n\t\t\ttween = new Fx.Tween(this, {link: 'cancel'});\n\t\t\tthis.store('tween', tween);\n\t\t}\n\t\treturn tween;\n\t}\n\n};\n\nElement.implement({\n\n\ttween: function(property, from, to){\n\t\tthis.get('tween').start(property, from, to);\n\t\treturn this;\n\t},\n\n\tfade: function(how){\n\t\tvar fade = this.get('tween'), method, args = ['opacity'].append(arguments), toggle;\n\t\tif (args[1] == null) args[1] = 'toggle';\n\t\tswitch (args[1]){\n\t\t\tcase 'in': method = 'start'; args[1] = 1; break;\n\t\t\tcase 'out': method = 'start'; args[1] = 0; break;\n\t\t\tcase 'show': method = 'set'; args[1] = 1; break;\n\t\t\tcase 'hide': method = 'set'; args[1] = 0; break;\n\t\t\tcase 'toggle':\n\t\t\t\tvar flag = this.retrieve('fade:flag', this.getStyle('opacity') == 1);\n\t\t\t\tmethod = 'start';\n\t\t\t\targs[1] = flag ? 0 : 1;\n\t\t\t\tthis.store('fade:flag', !flag);\n\t\t\t\ttoggle = true;\n\t\t\tbreak;\n\t\t\tdefault: method = 'start';\n\t\t}\n\t\tif (!toggle) this.eliminate('fade:flag');\n\t\tfade[method].apply(fade, args);\n\t\tvar to = args[args.length - 1];\n\t\tif (method == 'set' || to != 0) this.setStyle('visibility', to == 0 ? 'hidden' : 'visible');\n\t\telse fade.chain(function(){\n\t\t\tthis.element.setStyle('visibility', 'hidden');\n\t\t\tthis.callChain();\n\t\t});\n\t\treturn this;\n\t},\n\n\thighlight: function(start, end){\n\t\tif (!end){\n\t\t\tend = this.retrieve('highlight:original', this.getStyle('background-color'));\n\t\t\tend = (end == 'transparent') ? '#fff' : end;\n\t\t}\n\t\tvar tween = this.get('tween');\n\t\ttween.start('background-color', start || '#ffff88', end).chain(function(){\n\t\t\tthis.setStyle('background-color', this.retrieve('highlight:original'));\n\t\t\ttween.callChain();\n\t\t}.bind(this));\n\t\treturn this;\n\t}\n\n});\n\n\n/*\n---\n\nname: Fx.Morph\n\ndescription: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.\n\nlicense: MIT-style license.\n\nrequires: Fx.CSS\n\nprovides: Fx.Morph\n\n...\n*/\n\nFx.Morph = new Class({\n\n\tExtends: Fx.CSS,\n\n\tinitialize: function(element, options){\n\t\tthis.element = this.subject = document.id(element);\n\t\tthis.parent(options);\n\t},\n\n\tset: function(now){\n\t\tif (typeof now == 'string') now = this.search(now);\n\t\tfor (var p in now) this.render(this.element, p, now[p], this.options.unit);\n\t\treturn this;\n\t},\n\n\tcompute: function(from, to, delta){\n\t\tvar now = {};\n\t\tfor (var p in from) now[p] = this.parent(from[p], to[p], delta);\n\t\treturn now;\n\t},\n\n\tstart: function(properties){\n\t\tif (!this.check(properties)) return this;\n\t\tif (typeof properties == 'string') properties = this.search(properties);\n\t\tvar from = {}, to = {};\n\t\tfor (var p in properties){\n\t\t\tvar parsed = this.prepare(this.element, p, properties[p]);\n\t\t\tfrom[p] = parsed.from;\n\t\t\tto[p] = parsed.to;\n\t\t}\n\t\treturn this.parent(from, to);\n\t}\n\n});\n\nElement.Properties.morph = {\n\n\tset: function(options){\n\t\tthis.get('morph').cancel().setOptions(options);\n\t\treturn this;\n\t},\n\n\tget: function(){\n\t\tvar morph = this.retrieve('morph');\n\t\tif (!morph){\n\t\t\tmorph = new Fx.Morph(this, {link: 'cancel'});\n\t\t\tthis.store('morph', morph);\n\t\t}\n\t\treturn morph;\n\t}\n\n};\n\nElement.implement({\n\n\tmorph: function(props){\n\t\tthis.get('morph').start(props);\n\t\treturn this;\n\t}\n\n});\n\n\n/*\n---\n\nname: Fx.Transitions\n\ndescription: Contains a set of advanced transitions to be used with any of the Fx Classes.\n\nlicense: MIT-style license.\n\ncredits:\n - Easing Equations by Robert Penner, , modified and optimized to be used with MooTools.\n\nrequires: Fx\n\nprovides: Fx.Transitions\n\n...\n*/\n\nFx.implement({\n\n\tgetTransition: function(){\n\t\tvar trans = this.options.transition || Fx.Transitions.Sine.easeInOut;\n\t\tif (typeof trans == 'string'){\n\t\t\tvar data = trans.split(':');\n\t\t\ttrans = Fx.Transitions;\n\t\t\ttrans = trans[data[0]] || trans[data[0].capitalize()];\n\t\t\tif (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];\n\t\t}\n\t\treturn trans;\n\t}\n\n});\n\nFx.Transition = function(transition, params){\n\tparams = Array.from(params);\n\tvar easeIn = function(pos){\n\t\treturn transition(pos, params);\n\t};\n\treturn Object.append(easeIn, {\n\t\teaseIn: easeIn,\n\t\teaseOut: function(pos){\n\t\t\treturn 1 - transition(1 - pos, params);\n\t\t},\n\t\teaseInOut: function(pos){\n\t\t\treturn (pos <= 0.5 ? transition(2 * pos, params) : (2 - transition(2 * (1 - pos), params))) / 2;\n\t\t}\n\t});\n};\n\nFx.Transitions = {\n\n\tlinear: function(zero){\n\t\treturn zero;\n\t}\n\n};\n\n\n\nFx.Transitions.extend = function(transitions){\n\tfor (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);\n};\n\nFx.Transitions.extend({\n\n\tPow: function(p, x){\n\t\treturn Math.pow(p, x && x[0] || 6);\n\t},\n\n\tExpo: function(p){\n\t\treturn Math.pow(2, 8 * (p - 1));\n\t},\n\n\tCirc: function(p){\n\t\treturn 1 - Math.sin(Math.acos(p));\n\t},\n\n\tSine: function(p){\n\t\treturn 1 - Math.cos(p * Math.PI / 2);\n\t},\n\n\tBack: function(p, x){\n\t\tx = x && x[0] || 1.618;\n\t\treturn Math.pow(p, 2) * ((x + 1) * p - x);\n\t},\n\n\tBounce: function(p){\n\t\tvar value;\n\t\tfor (var a = 0, b = 1; 1; a += b, b /= 2){\n\t\t\tif (p >= (7 - 4 * a) / 11){\n\t\t\t\tvalue = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\tElastic: function(p, x){\n\t\treturn Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3);\n\t}\n\n});\n\n['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){\n\tFx.Transitions[transition] = new Fx.Transition(function(p){\n\t\treturn Math.pow(p, i + 2);\n\t});\n});\n\n\n/*\n---\n\nname: Request\n\ndescription: Powerful all purpose Request Class. Uses XMLHTTPRequest.\n\nlicense: MIT-style license.\n\nrequires: [Object, Element, Chain, Events, Options, Browser]\n\nprovides: Request\n\n...\n*/\n\n(function(){\n\nvar empty = function(){},\n\tprogressSupport = ('onprogress' in new Browser.Request);\n\nvar Request = this.Request = new Class({\n\n\tImplements: [Chain, Events, Options],\n\n\toptions: {/*\n\t\tonRequest: function(){},\n\t\tonLoadstart: function(event, xhr){},\n\t\tonProgress: function(event, xhr){},\n\t\tonComplete: function(){},\n\t\tonCancel: function(){},\n\t\tonSuccess: function(responseText, responseXML){},\n\t\tonFailure: function(xhr){},\n\t\tonException: function(headerName, value){},\n\t\tonTimeout: function(){},\n\t\tuser: '',\n\t\tpassword: '',*/\n\t\turl: '',\n\t\tdata: '',\n\t\theaders: {\n\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'\n\t\t},\n\t\tasync: true,\n\t\tformat: false,\n\t\tmethod: 'post',\n\t\tlink: 'ignore',\n\t\tisSuccess: null,\n\t\temulation: true,\n\t\turlEncoded: true,\n\t\tencoding: 'utf-8',\n\t\tevalScripts: false,\n\t\tevalResponse: false,\n\t\ttimeout: 0,\n\t\tnoCache: false\n\t},\n\n\tinitialize: function(options){\n\t\tthis.xhr = new Browser.Request();\n\t\tthis.setOptions(options);\n\t\tthis.headers = this.options.headers;\n\t},\n\n\tonStateChange: function(){\n\t\tvar xhr = this.xhr;\n\t\tif (xhr.readyState != 4 || !this.running) return;\n\t\tthis.running = false;\n\t\tthis.status = 0;\n\t\tFunction.attempt(function(){\n\t\t\tvar status = xhr.status;\n\t\t\tthis.status = (status == 1223) ? 204 : status;\n\t\t}.bind(this));\n\t\txhr.onreadystatechange = empty;\n\t\tif (progressSupport) xhr.onprogress = xhr.onloadstart = empty;\n\t\tclearTimeout(this.timer);\n\n\t\tthis.response = {text: this.xhr.responseText || '', xml: this.xhr.responseXML};\n\t\tif (this.options.isSuccess.call(this, this.status))\n\t\t\tthis.success(this.response.text, this.response.xml);\n\t\telse\n\t\t\tthis.failure();\n\t},\n\n\tisSuccess: function(){\n\t\tvar status = this.status;\n\t\treturn (status >= 200 && status < 300);\n\t},\n\n\tisRunning: function(){\n\t\treturn !!this.running;\n\t},\n\n\tprocessScripts: function(text){\n\t\tif (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return Browser.exec(text);\n\t\treturn text.stripScripts(this.options.evalScripts);\n\t},\n\n\tsuccess: function(text, xml){\n\t\tthis.onSuccess(this.processScripts(text), xml);\n\t},\n\n\tonSuccess: function(){\n\t\tthis.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();\n\t},\n\n\tfailure: function(){\n\t\tthis.onFailure();\n\t},\n\n\tonFailure: function(){\n\t\tthis.fireEvent('complete').fireEvent('failure', this.xhr);\n\t},\n\n\tloadstart: function(event){\n\t\tthis.fireEvent('loadstart', [event, this.xhr]);\n\t},\n\n\tprogress: function(event){\n\t\tthis.fireEvent('progress', [event, this.xhr]);\n\t},\n\n\ttimeout: function(){\n\t\tthis.fireEvent('timeout', this.xhr);\n\t},\n\n\tsetHeader: function(name, value){\n\t\tthis.headers[name] = value;\n\t\treturn this;\n\t},\n\n\tgetHeader: function(name){\n\t\treturn Function.attempt(function(){\n\t\t\treturn this.xhr.getResponseHeader(name);\n\t\t}.bind(this));\n\t},\n\n\tcheck: function(){\n\t\tif (!this.running) return true;\n\t\tswitch (this.options.link){\n\t\t\tcase 'cancel': this.cancel(); return true;\n\t\t\tcase 'chain': this.chain(this.caller.pass(arguments, this)); return false;\n\t\t}\n\t\treturn false;\n\t},\n\n\tsend: function(options){\n\t\tif (!this.check(options)) return this;\n\n\t\tthis.options.isSuccess = this.options.isSuccess || this.isSuccess;\n\t\tthis.running = true;\n\n\t\tvar type = typeOf(options);\n\t\tif (type == 'string' || type == 'element') options = {data: options};\n\n\t\tvar old = this.options;\n\t\toptions = Object.append({data: old.data, url: old.url, method: old.method}, options);\n\t\tvar data = options.data, url = String(options.url), method = options.method.toLowerCase();\n\n\t\tswitch (typeOf(data)){\n\t\t\tcase 'element': data = document.id(data).toQueryString(); break;\n\t\t\tcase 'object': case 'hash': data = Object.toQueryString(data);\n\t\t}\n\n\t\tif (this.options.format){\n\t\t\tvar format = 'format=' + this.options.format;\n\t\t\tdata = (data) ? format + '&' + data : format;\n\t\t}\n\n\t\tif (this.options.emulation && !['get', 'post'].contains(method)){\n\t\t\tvar _method = '_method=' + method;\n\t\t\tdata = (data) ? _method + '&' + data : _method;\n\t\t\tmethod = 'post';\n\t\t}\n\n\t\tif (this.options.urlEncoded && ['post', 'put'].contains(method)){\n\t\t\tvar encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';\n\t\t\tthis.headers['Content-type'] = 'application/x-www-form-urlencoded' + encoding;\n\t\t}\n\n\t\tif (!url) url = document.location.pathname;\n\n\t\tvar trimPosition = url.lastIndexOf('/');\n\t\tif (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);\n\n\t\tif (this.options.noCache)\n\t\t\turl += (url.contains('?') ? '&' : '?') + String.uniqueID();\n\n\t\tif (data && method == 'get'){\n\t\t\turl += (url.contains('?') ? '&' : '?') + data;\n\t\t\tdata = null;\n\t\t}\n\n\t\tvar xhr = this.xhr;\n\t\tif (progressSupport){\n\t\t\txhr.onloadstart = this.loadstart.bind(this);\n\t\t\txhr.onprogress = this.progress.bind(this);\n\t\t}\n\n\t\txhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password);\n\t\tif (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;\n\n\t\txhr.onreadystatechange = this.onStateChange.bind(this);\n\n\t\tObject.each(this.headers, function(value, key){\n\t\t\ttry {\n\t\t\t\txhr.setRequestHeader(key, value);\n\t\t\t} catch (e){\n\t\t\t\tthis.fireEvent('exception', [key, value]);\n\t\t\t}\n\t\t}, this);\n\n\t\tthis.fireEvent('request');\n\t\txhr.send(data);\n\t\tif (!this.options.async) this.onStateChange();\n\t\telse if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);\n\t\treturn this;\n\t},\n\n\tcancel: function(){\n\t\tif (!this.running) return this;\n\t\tthis.running = false;\n\t\tvar xhr = this.xhr;\n\t\txhr.abort();\n\t\tclearTimeout(this.timer);\n\t\txhr.onreadystatechange = empty;\n\t\tif (progressSupport) xhr.onprogress = xhr.onloadstart = empty;\n\t\tthis.xhr = new Browser.Request();\n\t\tthis.fireEvent('cancel');\n\t\treturn this;\n\t}\n\n});\n\nvar methods = {};\n['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){\n\tmethods[method] = function(data){\n\t\tvar object = {\n\t\t\tmethod: method\n\t\t};\n\t\tif (data != null) object.data = data;\n\t\treturn this.send(object);\n\t};\n});\n\nRequest.implement(methods);\n\nElement.Properties.send = {\n\n\tset: function(options){\n\t\tvar send = this.get('send').cancel();\n\t\tsend.setOptions(options);\n\t\treturn this;\n\t},\n\n\tget: function(){\n\t\tvar send = this.retrieve('send');\n\t\tif (!send){\n\t\t\tsend = new Request({\n\t\t\t\tdata: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')\n\t\t\t});\n\t\t\tthis.store('send', send);\n\t\t}\n\t\treturn send;\n\t}\n\n};\n\nElement.implement({\n\n\tsend: function(url){\n\t\tvar sender = this.get('send');\n\t\tsender.send({data: this, url: url || sender.options.url});\n\t\treturn this;\n\t}\n\n});\n\n})();\n\n\n/*\n---\n\nname: Request.HTML\n\ndescription: Extends the basic Request Class with additional methods for interacting with HTML responses.\n\nlicense: MIT-style license.\n\nrequires: [Element, Request]\n\nprovides: Request.HTML\n\n...\n*/\n\nRequest.HTML = new Class({\n\n\tExtends: Request,\n\n\toptions: {\n\t\tupdate: false,\n\t\tappend: false,\n\t\tevalScripts: true,\n\t\tfilter: false,\n\t\theaders: {\n\t\t\tAccept: 'text/html, application/xml, text/xml, */*'\n\t\t}\n\t},\n\n\tsuccess: function(text){\n\t\tvar options = this.options, response = this.response;\n\n\t\tresponse.html = text.stripScripts(function(script){\n\t\t\tresponse.javascript = script;\n\t\t});\n\n\t\tvar match = response.html.match(/]*>([\\s\\S]*?)<\\/body>/i);\n\t\tif (match) response.html = match[1];\n\t\tvar temp = new Element('div').set('html', response.html);\n\n\t\tresponse.tree = temp.childNodes;\n\t\tresponse.elements = temp.getElements(options.filter || '*');\n\n\t\tif (options.filter) response.tree = response.elements;\n\t\tif (options.update){\n\t\t\tvar update = document.id(options.update).empty();\n\t\t\tif (options.filter) update.adopt(response.elements);\n\t\t\telse update.set('html', response.html);\n\t\t} else if (options.append){\n\t\t\tvar append = document.id(options.append);\n\t\t\tif (options.filter) response.elements.reverse().inject(append);\n\t\t\telse append.adopt(temp.getChildren());\n\t\t}\n\t\tif (options.evalScripts) Browser.exec(response.javascript);\n\n\t\tthis.onSuccess(response.tree, response.elements, response.html, response.javascript);\n\t}\n\n});\n\nElement.Properties.load = {\n\n\tset: function(options){\n\t\tvar load = this.get('load').cancel();\n\t\tload.setOptions(options);\n\t\treturn this;\n\t},\n\n\tget: function(){\n\t\tvar load = this.retrieve('load');\n\t\tif (!load){\n\t\t\tload = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'});\n\t\t\tthis.store('load', load);\n\t\t}\n\t\treturn load;\n\t}\n\n};\n\nElement.implement({\n\n\tload: function(){\n\t\tthis.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString}));\n\t\treturn this;\n\t}\n\n});\n\n\n/*\n---\n\nname: JSON\n\ndescription: JSON encoder and decoder.\n\nlicense: MIT-style license.\n\nSeeAlso: \n\nrequires: [Array, String, Number, Function]\n\nprovides: JSON\n\n...\n*/\n\nif (typeof JSON == 'undefined') this.JSON = {};\n\n\n\n(function(){\n\nvar special = {'\\b': '\\\\b', '\\t': '\\\\t', '\\n': '\\\\n', '\\f': '\\\\f', '\\r': '\\\\r', '\"' : '\\\\\"', '\\\\': '\\\\\\\\'};\n\nvar escape = function(chr){\n\treturn special[chr] || '\\\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4);\n};\n\nJSON.validate = function(string){\n\tstring = string.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').\n\t\t\t\t\treplace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']').\n\t\t\t\t\treplace(/(?:^|:|,)(?:\\s*\\[)+/g, '');\n\n\treturn (/^[\\],:{}\\s]*$/).test(string);\n};\n\nJSON.encode = JSON.stringify ? function(obj){\n\treturn JSON.stringify(obj);\n} : function(obj){\n\tif (obj && obj.toJSON) obj = obj.toJSON();\n\n\tswitch (typeOf(obj)){\n\t\tcase 'string':\n\t\t\treturn '\"' + obj.replace(/[\\x00-\\x1f\\\\\"]/g, escape) + '\"';\n\t\tcase 'array':\n\t\t\treturn '[' + obj.map(JSON.encode).clean() + ']';\n\t\tcase 'object': case 'hash':\n\t\t\tvar string = [];\n\t\t\tObject.each(obj, function(value, key){\n\t\t\t\tvar json = JSON.encode(value);\n\t\t\t\tif (json) string.push(JSON.encode(key) + ':' + json);\n\t\t\t});\n\t\t\treturn '{' + string + '}';\n\t\tcase 'number': case 'boolean': return '' + obj;\n\t\tcase 'null': return 'null';\n\t}\n\n\treturn null;\n};\n\nJSON.decode = function(string, secure){\n\tif (!string || typeOf(string) != 'string') return null;\n\n\tif (secure || JSON.secure){\n\t\tif (JSON.parse) return JSON.parse(string);\n\t\tif (!JSON.validate(string)) throw new Error('JSON could not decode the input; security is enabled and the value is not secure.');\n\t}\n\n\treturn eval('(' + string + ')');\n};\n\n})();\n\n\n/*\n---\n\nname: Request.JSON\n\ndescription: Extends the basic Request Class with additional methods for sending and receiving JSON data.\n\nlicense: MIT-style license.\n\nrequires: [Request, JSON]\n\nprovides: Request.JSON\n\n...\n*/\n\nRequest.JSON = new Class({\n\n\tExtends: Request,\n\n\toptions: {\n\t\t/*onError: function(text, error){},*/\n\t\tsecure: true\n\t},\n\n\tinitialize: function(options){\n\t\tthis.parent(options);\n\t\tObject.append(this.headers, {\n\t\t\t'Accept': 'application/json',\n\t\t\t'X-Request': 'JSON'\n\t\t});\n\t},\n\n\tsuccess: function(text){\n\t\tvar json;\n\t\ttry {\n\t\t\tjson = this.response.json = JSON.decode(text, this.options.secure);\n\t\t} catch (error){\n\t\t\tthis.fireEvent('error', [text, error]);\n\t\t\treturn;\n\t\t}\n\t\tif (json == null) this.onFailure();\n\t\telse this.onSuccess(json, text);\n\t}\n\n});\n\n\n/*\n---\n\nname: Cookie\n\ndescription: Class for creating, reading, and deleting browser Cookies.\n\nlicense: MIT-style license.\n\ncredits:\n - Based on the functions by Peter-Paul Koch (http://quirksmode.org).\n\nrequires: [Options, Browser]\n\nprovides: Cookie\n\n...\n*/\n\nvar Cookie = new Class({\n\n\tImplements: Options,\n\n\toptions: {\n\t\tpath: '/',\n\t\tdomain: false,\n\t\tduration: false,\n\t\tsecure: false,\n\t\tdocument: document,\n\t\tencode: true\n\t},\n\n\tinitialize: function(key, options){\n\t\tthis.key = key;\n\t\tthis.setOptions(options);\n\t},\n\n\twrite: function(value){\n\t\tif (this.options.encode) value = encodeURIComponent(value);\n\t\tif (this.options.domain) value += '; domain=' + this.options.domain;\n\t\tif (this.options.path) value += '; path=' + this.options.path;\n\t\tif (this.options.duration){\n\t\t\tvar date = new Date();\n\t\t\tdate.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);\n\t\t\tvalue += '; expires=' + date.toGMTString();\n\t\t}\n\t\tif (this.options.secure) value += '; secure';\n\t\tthis.options.document.cookie = this.key + '=' + value;\n\t\treturn this;\n\t},\n\n\tread: function(){\n\t\tvar value = this.options.document.cookie.match('(?:^|;)\\\\s*' + this.key.escapeRegExp() + '=([^;]*)');\n\t\treturn (value) ? decodeURIComponent(value[1]) : null;\n\t},\n\n\tdispose: function(){\n\t\tnew Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write('');\n\t\treturn this;\n\t}\n\n});\n\nCookie.write = function(key, value, options){\n\treturn new Cookie(key, options).write(value);\n};\n\nCookie.read = function(key){\n\treturn new Cookie(key).read();\n};\n\nCookie.dispose = function(key, options){\n\treturn new Cookie(key, options).dispose();\n};\n\n\n/*\n---\n\nname: DOMReady\n\ndescription: Contains the custom event domready.\n\nlicense: MIT-style license.\n\nrequires: [Browser, Element, Element.Event]\n\nprovides: [DOMReady, DomReady]\n\n...\n*/\n\n(function(window, document){\n\nvar ready,\n\tloaded,\n\tchecks = [],\n\tshouldPoll,\n\ttimer,\n\ttestElement = document.createElement('div');\n\nvar domready = function(){\n\tclearTimeout(timer);\n\tif (ready) return;\n\tBrowser.loaded = ready = true;\n\tdocument.removeListener('DOMContentLoaded', domready).removeListener('readystatechange', check);\n\n\tdocument.fireEvent('domready');\n\twindow.fireEvent('domready');\n};\n\nvar check = function(){\n\tfor (var i = checks.length; i--;) if (checks[i]()){\n\t\tdomready();\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nvar poll = function(){\n\tclearTimeout(timer);\n\tif (!check()) timer = setTimeout(poll, 10);\n};\n\ndocument.addListener('DOMContentLoaded', domready);\n\n/**/\n// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/\n// testElement.doScroll() throws when the DOM is not ready, only in the top window\nvar doScrollWorks = function(){\n\ttry {\n\t\ttestElement.doScroll();\n\t\treturn true;\n\t} catch (e){}\n\treturn false;\n};\n// If doScroll works already, it can't be used to determine domready\n// e.g. in an iframe\nif (testElement.doScroll && !doScrollWorks()){\n\tchecks.push(doScrollWorks);\n\tshouldPoll = true;\n}\n/**/\n\nif (document.readyState) checks.push(function(){\n\tvar state = document.readyState;\n\treturn (state == 'loaded' || state == 'complete');\n});\n\nif ('onreadystatechange' in document) document.addListener('readystatechange', check);\nelse shouldPoll = true;\n\nif (shouldPoll) poll();\n\nElement.Events.domready = {\n\tonAdd: function(fn){\n\t\tif (ready) fn.call(this);\n\t}\n};\n\n// Make sure that domready fires before load\nElement.Events.load = {\n\tbase: 'load',\n\tonAdd: function(fn){\n\t\tif (loaded && this == window) fn.call(this);\n\t},\n\tcondition: function(){\n\t\tif (this == window){\n\t\t\tdomready();\n\t\t\tdelete Element.Events.load;\n\t\t}\n\t\treturn true;\n\t}\n};\n\n// This is based on the custom load event\nwindow.addEvent('load', function(){\n\tloaded = true;\n});\n\n})(window, document);\n\n\n/*\n---\n\nname: Swiff\n\ndescription: Wrapper for embedding SWF movies. Supports External Interface Communication.\n\nlicense: MIT-style license.\n\ncredits:\n - Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.\n\nrequires: [Options, Object, Element]\n\nprovides: Swiff\n\n...\n*/\n\n(function(){\n\nvar Swiff = this.Swiff = new Class({\n\n\tImplements: Options,\n\n\toptions: {\n\t\tid: null,\n\t\theight: 1,\n\t\twidth: 1,\n\t\tcontainer: null,\n\t\tproperties: {},\n\t\tparams: {\n\t\t\tquality: 'high',\n\t\t\tallowScriptAccess: 'always',\n\t\t\twMode: 'window',\n\t\t\tswLiveConnect: true\n\t\t},\n\t\tcallBacks: {},\n\t\tvars: {}\n\t},\n\n\ttoElement: function(){\n\t\treturn this.object;\n\t},\n\n\tinitialize: function(path, options){\n\t\tthis.instance = 'Swiff_' + String.uniqueID();\n\n\t\tthis.setOptions(options);\n\t\toptions = this.options;\n\t\tvar id = this.id = options.id || this.instance;\n\t\tvar container = document.id(options.container);\n\n\t\tSwiff.CallBacks[this.instance] = {};\n\n\t\tvar params = options.params, vars = options.vars, callBacks = options.callBacks;\n\t\tvar properties = Object.append({height: options.height, width: options.width}, options.properties);\n\n\t\tvar self = this;\n\n\t\tfor (var callBack in callBacks){\n\t\t\tSwiff.CallBacks[this.instance][callBack] = (function(option){\n\t\t\t\treturn function(){\n\t\t\t\t\treturn option.apply(self.object, arguments);\n\t\t\t\t};\n\t\t\t})(callBacks[callBack]);\n\t\t\tvars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;\n\t\t}\n\n\t\tparams.flashVars = Object.toQueryString(vars);\n\t\tif (Browser.ie){\n\t\t\tproperties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';\n\t\t\tparams.movie = path;\n\t\t} else {\n\t\t\tproperties.type = 'application/x-shockwave-flash';\n\t\t}\n\t\tproperties.data = path;\n\n\t\tvar build = '';\n\t\t}\n\t\tbuild += '';\n\t\tthis.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;\n\t},\n\n\treplaces: function(element){\n\t\telement = document.id(element, true);\n\t\telement.parentNode.replaceChild(this.toElement(), element);\n\t\treturn this;\n\t},\n\n\tinject: function(element){\n\t\tdocument.id(element, true).appendChild(this.toElement());\n\t\treturn this;\n\t},\n\n\tremote: function(){\n\t\treturn Swiff.remote.apply(Swiff, [this.toElement()].append(arguments));\n\t}\n\n});\n\nSwiff.CallBacks = {};\n\nSwiff.remote = function(obj, fn){\n\tvar rs = obj.CallFunction('' + __flash__argumentsToXML(arguments, 2) + '');\n\treturn eval(rs);\n};\n\n})();\n\n","var Barometer = new Class({\r\n\tImplements: [Options],\r\n\r\n\toptions: {\r\n\t\tareaSelector: 'map area',\r\n\t\thoverSelector: 'ul li',\r\n\t\tpopupSelector: 'table',\r\n\t\toverlaySelector: '.overlay',\r\n\t\thoverClass: 'hover',\r\n\t\tpopupClass: 'shown',\r\n\t\tga_tracker: null,\r\n\t\tga_category: 'Barometer',\r\n\t\tga_actions: {\r\n\t\t\tshow: 'Gegevens bekijken',\r\n\t\t\tclick: 'Barometer bekijken'\r\n\t\t},\r\n\t\tga_actions_delay: {}\r\n\t},\r\n\r\n\ttrackEventTimer: {},\r\n\r\n\tinitialize: function (element, options) {\r\n\t\tthis.element = document.id(element);\r\n\t\tthis.setOptions(options);\r\n\r\n\t\tthis.hovers = this.element.getElements(this.options.hoverSelector);\r\n\t\tthis.popups = this.element.getElements(this.options.popupSelector);\r\n\t\tthis.overlay = this.element.getElement(this.options.overlaySelector);\r\n\r\n\t\tthis.setup();\r\n\t},\r\n\r\n\tsetup: function () {\r\n\t\tthis.element.addEvent('mouseenter:relay(' + this.options.areaSelector + ')', this.show.bind(this));\r\n\t\tthis.element.addEvent('mouseleave:relay(' + this.options.areaSelector + ')', this.hide.bind(this));\r\n\r\n\t\tif (this.overlay && this.overlay.getElement('a')) {\r\n\t\t\tthis.element.addClass('has-overlay').addEvents({\r\n\t\t\t\t'mouseenter': function () {\r\n\t\t\t\t\tthis.overlay.addClass('shown');\r\n\t\t\t\t} .bind(this),\r\n\t\t\t\t'mouseleave': function () {\r\n\t\t\t\t\tthis.overlay.removeClass('shown');\r\n\t\t\t\t} .bind(this),\r\n\t\t\t\t'click': function () {\r\n\t\t\t\t\tthis.trackEvent('click');\r\n\t\t\t\t\twindow.document.location = this.overlay.getElement('a').href;\r\n\t\t\t\t} .bind(this)\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tshow: function (e) {\r\n\t\tvar area = document.id(e.target);\r\n\t\tvar className = area.get('class');\r\n\r\n\t\t// Show hovers\r\n\t\tthis.getHovers(className).addClass(this.options.hoverClass);\r\n\r\n\t\t// Show popups\r\n\t\tthis.getPopups(className).addClass(this.options.popupClass);\r\n\r\n\t\t// Track event\r\n\t\tthis.trackEvent('show', area.get('alt'));\r\n\t},\r\n\r\n\thide: function (e) {\r\n\t\tvar area = document.id(e.target);\r\n\t\tvar className = area.get('class');\r\n\r\n\t\t// Hide hovers\r\n\t\tthis.getHovers(className).removeClass(this.options.hoverClass);\r\n\r\n\t\t// Hide popups\r\n\t\tthis.getPopups(className).removeClass(this.options.popupClass);\r\n\r\n\t\t// Clear event tracker timeout\r\n\t\tthis.clearTrackEvent('show');\r\n\t},\r\n\r\n\tgetHovers: function (className) {\r\n\t\treturn this.hovers.filter(function (hover) {\r\n\t\t\treturn hover.hasClass(className);\r\n\t\t});\r\n\t},\r\n\r\n\tgetPopups: function (className) {\r\n\t\treturn this.popups.filter(function (popup) {\r\n\t\t\treturn popup.hasClass(className);\r\n\t\t});\r\n\t},\r\n\r\n\ttrackEvent: function (action, opt_label, opt_value) {\r\n\t\tif (this.options.ga_tracker) {\r\n\t\t\tthis.clearTrackEvent(action);\r\n\t\t\tthis.trackEventTimer[action] = this.options.ga_tracker._trackEvent.delay(this.options.ga_actions_delay[action] || 0, this.options.ga_tracker, [this.options.ga_category, this.options.ga_actions[action], opt_label, opt_value]);\r\n\t\t}\r\n\t},\r\n\r\n\tclearTrackEvent: function (action) {\r\n\t\tclearTimeout(this.trackEventTimer[action]);\r\n\t}\r\n});",null,null,null,null,"const proto = window.Element.prototype;\nconst nativeMatches = proto.matches ||\n proto.matchesSelector ||\n proto.webkitMatchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector;\n\n\n/**\n * Tests if a DOM elements matches any of the test DOM elements or selectors.\n * @param {Element} element The DOM element to test.\n * @param {Element|string|Array} test A DOM element, a CSS\n * selector, or an array of DOM elements or CSS selectors to match against.\n * @return {boolean} True of any part of the test matches.\n */\nexport default function matches(element, test) {\n // Validate input.\n if (element && element.nodeType == 1 && test) {\n // if test is a string or DOM element test it.\n if (typeof test == 'string' || test.nodeType == 1) {\n return element == test ||\n matchesSelector(element, /** @type {string} */ (test));\n } else if ('length' in test) {\n // if it has a length property iterate over the items\n // and return true if any match.\n for (let i = 0, item; item = test[i]; i++) {\n if (element == item || matchesSelector(element, item)) return true;\n }\n }\n }\n // Still here? Return false\n return false;\n}\n\n\n/**\n * Tests whether a DOM element matches a selector. This polyfills the native\n * Element.prototype.matches method across browsers.\n * @param {!Element} element The DOM element to test.\n * @param {string} selector The CSS selector to test element against.\n * @return {boolean} True if the selector matches.\n */\nfunction matchesSelector(element, selector) {\n if (typeof selector != 'string') return false;\n if (nativeMatches) return nativeMatches.call(element, selector);\n const nodes = element.parentNode.querySelectorAll(selector);\n for (let i = 0, node; node = nodes[i]; i++) {\n if (node == element) return true;\n }\n return false;\n}\n","/**\n * Returns an array of a DOM element's parent elements.\n * @param {!Element} element The DOM element whose parents to get.\n * @return {!Array} An array of all parent elemets, or an empty array if no\n * parent elements are found.\n */\nexport default function parents(element) {\n const list = [];\n while (element && element.parentNode && element.parentNode.nodeType == 1) {\n element = /** @type {!Element} */ (element.parentNode);\n list.push(element);\n }\n return list;\n}\n","import closest from './closest';\nimport matches from './matches';\n\n/**\n * Delegates the handling of events for an element matching a selector to an\n * ancestor of the matching element.\n * @param {!Node} ancestor The ancestor element to add the listener to.\n * @param {string} eventType The event type to listen to.\n * @param {string} selector A CSS selector to match against child elements.\n * @param {!Function} callback A function to run any time the event happens.\n * @param {Object=} opts A configuration options object. The available options:\n * - useCapture: If true, bind to the event capture phase.\n * - deep: If true, delegate into shadow trees.\n * @return {Object} The delegate object. It contains a destroy method.\n */\nexport default function delegate(\n ancestor, eventType, selector, callback, opts = {}) {\n // Defines the event listener.\n const listener = function(event) {\n let delegateTarget;\n\n // If opts.composed is true and the event originated from inside a Shadow\n // tree, check the composed path nodes.\n if (opts.composed && typeof event.composedPath == 'function') {\n const composedPath = event.composedPath();\n for (let i = 0, node; node = composedPath[i]; i++) {\n if (node.nodeType == 1 && matches(node, selector)) {\n delegateTarget = node;\n }\n }\n } else {\n // Otherwise check the parents.\n delegateTarget = closest(event.target, selector, true);\n }\n\n if (delegateTarget) {\n callback.call(delegateTarget, event, delegateTarget);\n }\n };\n\n ancestor.addEventListener(eventType, listener, opts.useCapture);\n\n return {\n destroy: function() {\n ancestor.removeEventListener(eventType, listener, opts.useCapture);\n },\n };\n}\n","import matches from './matches';\nimport parents from './parents';\n\n/**\n * Gets the closest parent element that matches the passed selector.\n * @param {Element} element The element whose parents to check.\n * @param {string} selector The CSS selector to match against.\n * @param {boolean=} shouldCheckSelf True if the selector should test against\n * the passed element itself.\n * @return {Element|undefined} The matching element or undefined.\n */\nexport default function closest(element, selector, shouldCheckSelf = false) {\n if (!(element && element.nodeType == 1 && selector)) return;\n const parentElements =\n (shouldCheckSelf ? [element] : []).concat(parents(element));\n\n for (let i = 0, parent; parent = parentElements[i]; i++) {\n if (matches(parent, selector)) return parent;\n }\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, getAttributeFields} from '../utilities';\n\n\n/**\n * Class for the `eventTracker` analytics.js plugin.\n * @implements {EventTrackerPublicInterface}\n */\nclass EventTracker {\n /**\n * Registers declarative event tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?EventTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.EVENT_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {EventTrackerOpts} */\n const defaultOpts = {\n events: ['click'],\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {EventTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleEvents = this.handleEvents.bind(this);\n\n const selector = '[' + this.opts.attributePrefix + 'on]';\n\n // Creates a mapping of events to their delegates\n this.delegates = {};\n this.opts.events.forEach((event) => {\n this.delegates[event] = delegate(document, event, selector,\n this.handleEvents, {composed: true, useCapture: true});\n });\n }\n\n /**\n * Handles all events on elements with event attributes.\n * @param {Event} event The DOM click event.\n * @param {Element} element The delegated DOM element target.\n */\n handleEvents(event, element) {\n const prefix = this.opts.attributePrefix;\n const events = element.getAttribute(prefix + 'on').split(/\\s*,\\s*/);\n\n // Ensures the type matches one of the events specified on the element.\n if (events.indexOf(event.type) < 0) return;\n\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n const attributeFields = getAttributeFields(element, prefix);\n const userFields = assign({}, this.opts.fieldsObj, attributeFields);\n const hitType = attributeFields.hitType || 'event';\n\n this.tracker.send(hitType, createFieldsObj(defaultFields,\n userFields, this.tracker, this.opts.hitFilter, element, event));\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n Object.keys(this.delegates).forEach((key) => {\n this.delegates[key].destroy();\n });\n }\n}\n\n\nprovide('eventTracker', EventTracker);\n","/**\n * Gets all attributes of an element as a plain JavaScriot object.\n * @param {Element} element The element whose attributes to get.\n * @return {!Object} An object whose keys are the attribute keys and whose\n * values are the attribute values. If no attributes exist, an empty\n * object is returned.\n */\nexport default function getAttributes(element) {\n const attrs = {};\n\n // Validate input.\n if (!(element && element.nodeType == 1)) return attrs;\n\n // Return an empty object if there are no attributes.\n const map = element.attributes;\n if (map.length === 0) return {};\n\n for (let i = 0, attr; attr = map[i]; i++) {\n attrs[attr.name] = attr.value;\n }\n return attrs;\n}\n","const HTTP_PORT = '80';\nconst HTTPS_PORT = '443';\nconst DEFAULT_PORT = RegExp(':(' + HTTP_PORT + '|' + HTTPS_PORT + ')$');\n\n\nconst a = document.createElement('a');\nconst cache = {};\n\n\n/**\n * Parses the given url and returns an object mimicing a `Location` object.\n * @param {string} url The url to parse.\n * @return {!Object} An object with the same properties as a `Location`.\n */\nexport default function parseUrl(url) {\n // All falsy values (as well as \".\") should map to the current URL.\n url = (!url || url == '.') ? location.href : url;\n\n if (cache[url]) return cache[url];\n\n a.href = url;\n\n // When parsing file relative paths (e.g. `../index.html`), IE will correctly\n // resolve the `href` property but will keep the `..` in the `path` property.\n // It will also not include the `host` or `hostname` properties. Furthermore,\n // IE will sometimes return no protocol or just a colon, especially for things\n // like relative protocol URLs (e.g. \"//google.com\").\n // To workaround all of these issues, we reparse with the full URL from the\n // `href` property.\n if (url.charAt(0) == '.' || url.charAt(0) == '/') return parseUrl(a.href);\n\n // Don't include default ports.\n let port = (a.port == HTTP_PORT || a.port == HTTPS_PORT) ? '' : a.port;\n\n // PhantomJS sets the port to \"0\" when using the file: protocol.\n port = port == '0' ? '' : port;\n\n // Sometimes IE incorrectly includes a port for default ports\n // (e.g. `:80` or `:443`) even when no port is specified in the URL.\n // http://bit.ly/1rQNoMg\n const host = a.host.replace(DEFAULT_PORT, '');\n\n // Not all browser support `origin` so we have to build it.\n const origin = a.origin ? a.origin : a.protocol + '//' + host;\n\n // Sometimes IE doesn't include the leading slash for pathname.\n // http://bit.ly/1rQNoMg\n const pathname = a.pathname.charAt(0) == '/' ? a.pathname : '/' + a.pathname;\n\n return cache[url] = {\n hash: a.hash,\n host: host,\n hostname: a.hostname,\n href: a.href,\n origin: origin,\n pathname: pathname,\n port: port,\n protocol: a.protocol,\n search: a.search,\n };\n}\n","/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview\n * The functions exported by this module make it easier (and safer) to override\n * foreign object methods (in a modular way) and respond to or modify their\n * invocation. The primary feature is the ability to override a method without\n * worrying if it's already been overridden somewhere else in the codebase. It\n * also allows for safe restoring of an overridden method by only fully\n * restoring a method once all overrides have been removed.\n */\n\n\nconst instances = [];\n\n\n/**\n * A class that wraps a foreign object method and emit events before and\n * after the original method is called.\n */\nexport default class MethodChain {\n /**\n * Adds the passed override method to the list of method chain overrides.\n * @param {!Object} context The object containing the method to chain.\n * @param {string} methodName The name of the method on the object.\n * @param {!Function} methodOverride The override method to add.\n */\n static add(context, methodName, methodOverride) {\n getOrCreateMethodChain(context, methodName).add(methodOverride);\n }\n\n /**\n * Removes a method chain added via `add()`. If the override is the\n * only override added, the original method is restored.\n * @param {!Object} context The object containing the method to unchain.\n * @param {string} methodName The name of the method on the object.\n * @param {!Function} methodOverride The override method to remove.\n */\n static remove(context, methodName, methodOverride) {\n getOrCreateMethodChain(context, methodName).remove(methodOverride);\n }\n\n /**\n * Wraps a foreign object method and overrides it. Also stores a reference\n * to the original method so it can be restored later.\n * @param {!Object} context The object containing the method.\n * @param {string} methodName The name of the method on the object.\n */\n constructor(context, methodName) {\n this.context = context;\n this.methodName = methodName;\n this.isTask = /Task$/.test(methodName);\n\n this.originalMethodReference = this.isTask ?\n context.get(methodName) : context[methodName];\n\n this.methodChain = [];\n this.boundMethodChain = [];\n\n // Wraps the original method.\n this.wrappedMethod = (...args) => {\n const lastBoundMethod =\n this.boundMethodChain[this.boundMethodChain.length - 1];\n\n return lastBoundMethod(...args);\n };\n\n // Override original method with the wrapped one.\n if (this.isTask) {\n context.set(methodName, this.wrappedMethod);\n } else {\n context[methodName] = this.wrappedMethod;\n }\n }\n\n /**\n * Adds a method to the method chain.\n * @param {!Function} overrideMethod The override method to add.\n */\n add(overrideMethod) {\n this.methodChain.push(overrideMethod);\n this.rebindMethodChain();\n }\n\n /**\n * Removes a method from the method chain and restores the prior order.\n * @param {!Function} overrideMethod The override method to remove.\n */\n remove(overrideMethod) {\n const index = this.methodChain.indexOf(overrideMethod);\n if (index > -1) {\n this.methodChain.splice(index, 1);\n if (this.methodChain.length > 0) {\n this.rebindMethodChain();\n } else {\n this.destroy();\n }\n }\n }\n\n /**\n * Loops through the method chain array and recreates the bound method\n * chain array. This is necessary any time a method is added or removed\n * to ensure proper original method context and order.\n */\n rebindMethodChain() {\n this.boundMethodChain = [];\n for (let method, i = 0; method = this.methodChain[i]; i++) {\n const previousMethod = this.boundMethodChain[i - 1] ||\n this.originalMethodReference.bind(this.context);\n this.boundMethodChain.push(method(previousMethod));\n }\n }\n\n /**\n * Calls super and destroys the instance if no registered handlers remain.\n */\n destroy() {\n const index = instances.indexOf(this);\n if (index > -1) {\n instances.splice(index, 1);\n if (this.isTask) {\n this.context.set(this.methodName, this.originalMethodReference);\n } else {\n this.context[this.methodName] = this.originalMethodReference;\n }\n }\n }\n}\n\n\n/**\n * Gets a MethodChain instance for the passed object and method. If the method\n * has already been wrapped via an existing MethodChain instance, that\n * instance is returned.\n * @param {!Object} context The object containing the method.\n * @param {string} methodName The name of the method on the object.\n * @return {!MethodChain}\n */\nfunction getOrCreateMethodChain(context, methodName) {\n let methodChain = instances\n .filter((h) => h.context == context && h.methodName == methodName)[0];\n\n if (!methodChain) {\n methodChain = new MethodChain(context, methodName);\n instances.push(methodChain);\n }\n return methodChain;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {getAttributes} from 'dom-utils';\nimport MethodChain from './method-chain';\n\n\n/**\n * Accepts default and user override fields and an optional tracker, hit\n * filter, and target element and returns a single object that can be used in\n * `ga('send', ...)` commands.\n * @param {FieldsObj} defaultFields The default fields to return.\n * @param {FieldsObj} userFields Fields set by the user to override the\n * defaults.\n * @param {Tracker=} tracker The tracker object to apply the hit filter to.\n * @param {Function=} hitFilter A filter function that gets\n * called with the tracker model right before the `buildHitTask`. It can\n * be used to modify the model for the current hit only.\n * @param {Element=} target If the hit originated from an interaction\n * with a DOM element, hitFilter is invoked with that element as the\n * second argument.\n * @param {(Event|TwttrEvent)=} event If the hit originated via a DOM event,\n * hitFilter is invoked with that event as the third argument.\n * @return {!FieldsObj} The final fields object.\n */\nexport function createFieldsObj(\n defaultFields, userFields, tracker = undefined,\n hitFilter = undefined, target = undefined, event = undefined) {\n if (typeof hitFilter == 'function') {\n const originalBuildHitTask = tracker.get('buildHitTask');\n return {\n buildHitTask: (/** @type {!Model} */ model) => {\n model.set(defaultFields, null, true);\n model.set(userFields, null, true);\n hitFilter(model, target, event);\n originalBuildHitTask(model);\n },\n };\n } else {\n return assign({}, defaultFields, userFields);\n }\n}\n\n\n/**\n * Retrieves the attributes from an DOM element and returns a fields object\n * for all attributes matching the passed prefix string.\n * @param {Element} element The DOM element to get attributes from.\n * @param {string} prefix An attribute prefix. Only the attributes matching\n * the prefix will be returned on the fields object.\n * @return {FieldsObj} An object of analytics.js fields and values\n */\nexport function getAttributeFields(element, prefix) {\n const attributes = getAttributes(element);\n const attributeFields = {};\n\n Object.keys(attributes).forEach(function(attribute) {\n // The `on` prefix is used for event handling but isn't a field.\n if (attribute.indexOf(prefix) === 0 && attribute != prefix + 'on') {\n let value = attributes[attribute];\n\n // Detects Boolean value strings.\n if (value == 'true') value = true;\n if (value == 'false') value = false;\n\n const field = camelCase(attribute.slice(prefix.length));\n attributeFields[field] = value;\n }\n });\n\n return attributeFields;\n}\n\n\n/**\n * Accepts a function to be invoked once the DOM is ready. If the DOM is\n * already ready, the callback is invoked immediately.\n * @param {!Function} callback The ready callback.\n */\nexport function domReady(callback) {\n if (document.readyState == 'loading') {\n document.addEventListener('DOMContentLoaded', function fn() {\n document.removeEventListener('DOMContentLoaded', fn);\n callback();\n });\n } else {\n callback();\n }\n}\n\n\n/**\n * Returns a function, that, as long as it continues to be called, will not\n * actually run. The function will only run after it stops being called for\n * `wait` milliseconds.\n * @param {!Function} fn The function to debounce.\n * @param {number} wait The debounce wait timeout in ms.\n * @return {!Function} The debounced function.\n */\nexport function debounce(fn, wait) {\n let timeout;\n return function(...args) {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), wait);\n };\n}\n\n\n/**\n * Accepts a function and returns a wrapped version of the function that is\n * expected to be called elsewhere in the system. If it's not called\n * elsewhere after the timeout period, it's called regardless. The wrapper\n * function also prevents the callback from being called more than once.\n * @param {!Function} callback The function to call.\n * @param {number=} wait How many milliseconds to wait before invoking\n * the callback.\n * @return {!Function} The wrapped version of the passed function.\n */\nexport function withTimeout(callback, wait = 2000) {\n let called = false;\n const fn = function() {\n if (!called) {\n called = true;\n callback();\n }\n };\n setTimeout(fn, wait);\n return fn;\n}\n\n// Maps trackers to queue by tracking ID.\nconst queueMap = {};\n\n/**\n * Queues a function for execution in the next call stack, or immediately\n * before any send commands are executed on the tracker. This allows\n * autotrack plugins to defer running commands until after all other plugins\n * are required but before any other hits are sent.\n * @param {!Tracker} tracker\n * @param {!Function} fn\n */\nexport function deferUntilPluginsLoaded(tracker, fn) {\n const trackingId = tracker.get('trackingId');\n const ref = queueMap[trackingId] = queueMap[trackingId] || {};\n\n const processQueue = () => {\n clearTimeout(ref.timeout);\n if (ref.send) {\n MethodChain.remove(tracker, 'send', ref.send);\n }\n delete queueMap[trackingId];\n\n ref.queue.forEach((fn) => fn());\n };\n\n clearTimeout(ref.timeout);\n ref.timeout = setTimeout(processQueue, 0);\n ref.queue = ref.queue || [];\n ref.queue.push(fn);\n\n if (!ref.send) {\n ref.send = (originalMethod) => {\n return (...args) => {\n processQueue();\n originalMethod(...args);\n };\n };\n MethodChain.add(tracker, 'send', ref.send);\n }\n}\n\n\n/**\n * A small shim of Object.assign that aims for brevity over spec-compliant\n * handling all the edge cases.\n * @param {!Object} target The target object to assign to.\n * @param {...?Object} sources Additional objects who properties should be\n * assigned to target. Non-objects are converted to objects.\n * @return {!Object} The modified target object.\n */\nexport const assign = Object.assign || function(target, ...sources) {\n for (let i = 0, len = sources.length; i < len; i++) {\n const source = Object(sources[i]);\n for (let key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n};\n\n\n/**\n * Accepts a string containing hyphen or underscore word separators and\n * converts it to camelCase.\n * @param {string} str The string to camelCase.\n * @return {string} The camelCased version of the string.\n */\nexport function camelCase(str) {\n return str.replace(/[\\-\\_]+(\\w?)/g, function(match, p1) {\n return p1.toUpperCase();\n });\n}\n\n\n/**\n * Capitalizes the first letter of a string.\n * @param {string} str The input string.\n * @return {string} The capitalized string\n */\nexport function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\n/**\n * Indicates whether the passed variable is a JavaScript object.\n * @param {*} value The input variable to test.\n * @return {boolean} Whether or not the test is an object.\n */\nexport function isObject(value) {\n return typeof value == 'object' && value !== null;\n}\n\n\n/**\n * Accepts a value that may or may not be an array. If it is not an array,\n * it is returned as the first item in a single-item array.\n * @param {*} value The value to convert to an array if it is not.\n * @return {!Array} The array-ified value.\n */\nexport function toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\n\n/**\n * @return {number} The current date timestamp\n */\nexport function now() {\n return +new Date();\n}\n\n\n/*eslint-disable */\n// https://gist.github.com/jed/982883\n/** @param {?=} a */\nexport const uuid = function b(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,b)};\n/*eslint-enable */\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {DEV_ID} from './constants';\nimport {capitalize} from './utilities';\n\n\n/**\n * Provides a plugin for use with analytics.js, accounting for the possibility\n * that the global command queue has been renamed or not yet defined.\n * @param {string} pluginName The plugin name identifier.\n * @param {Function} pluginConstructor The plugin constructor function.\n */\nexport default function provide(pluginName, pluginConstructor) {\n const gaAlias = window.GoogleAnalyticsObject || 'ga';\n window[gaAlias] = window[gaAlias] || function(...args) {\n (window[gaAlias].q = window[gaAlias].q || []).push(args);\n };\n\n // Adds the autotrack dev ID if not already included.\n window.gaDevIds = window.gaDevIds || [];\n if (window.gaDevIds.indexOf(DEV_ID) < 0) {\n window.gaDevIds.push(DEV_ID);\n }\n\n // Formally provides the plugin for use with analytics.js.\n window[gaAlias]('provide', pluginName, pluginConstructor);\n\n // Registers the plugin on the global gaplugins object.\n window.gaplugins = window.gaplugins || {};\n window.gaplugins[capitalize(pluginName)] = pluginConstructor;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nexport const VERSION = '2.4.1';\nexport const DEV_ID = 'i5iSjo';\n\nexport const VERSION_PARAM = '_av';\nexport const USAGE_PARAM = '_au';\n\nexport const NULL_DIMENSION = '(not set)';\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {USAGE_PARAM, VERSION, VERSION_PARAM} from './constants';\n\n\nexport const plugins = {\n CLEAN_URL_TRACKER: 1,\n EVENT_TRACKER: 2,\n IMPRESSION_TRACKER: 3,\n MEDIA_QUERY_TRACKER: 4,\n OUTBOUND_FORM_TRACKER: 5,\n OUTBOUND_LINK_TRACKER: 6,\n PAGE_VISIBILITY_TRACKER: 7,\n SOCIAL_WIDGET_TRACKER: 8,\n URL_CHANGE_TRACKER: 9,\n MAX_SCROLL_TRACKER: 10,\n};\n\n\nconst PLUGIN_COUNT = Object.keys(plugins).length;\n\n\n/**\n * Tracks the usage of the passed plugin by encoding a value into a usage\n * string sent with all hits for the passed tracker.\n * @param {!Tracker} tracker The analytics.js tracker object.\n * @param {number} plugin The plugin enum.\n */\nexport function trackUsage(tracker, plugin) {\n trackVersion(tracker);\n trackPlugin(tracker, plugin);\n}\n\n\n/**\n * Converts a hexadecimal string to a binary string.\n * @param {string} hex A hexadecimal numeric string.\n * @return {string} a binary numeric string.\n */\nfunction convertHexToBin(hex) {\n return parseInt(hex || '0', 16).toString(2);\n}\n\n\n/**\n * Converts a binary string to a hexadecimal string.\n * @param {string} bin A binary numeric string.\n * @return {string} a hexadecimal numeric string.\n */\nfunction convertBinToHex(bin) {\n return parseInt(bin || '0', 2).toString(16);\n}\n\n\n/**\n * Adds leading zeros to a string if it's less than a minimum length.\n * @param {string} str A string to pad.\n * @param {number} len The minimum length of the string\n * @return {string} The padded string.\n */\nfunction padZeros(str, len) {\n if (str.length < len) {\n let toAdd = len - str.length;\n while (toAdd) {\n str = '0' + str;\n toAdd--;\n }\n }\n return str;\n}\n\n\n/**\n * Accepts a binary numeric string and flips the digit from 0 to 1 at the\n * specified index.\n * @param {string} str The binary numeric string.\n * @param {number} index The index to flip the bit.\n * @return {string} The new binary string with the bit flipped on\n */\nfunction flipBitOn(str, index) {\n return str.substr(0, index) + 1 + str.substr(index + 1);\n}\n\n\n/**\n * Accepts a tracker and a plugin index and flips the bit at the specified\n * index on the tracker's usage parameter.\n * @param {Object} tracker An analytics.js tracker.\n * @param {number} pluginIndex The index of the plugin in the global list.\n */\nfunction trackPlugin(tracker, pluginIndex) {\n const usageHex = tracker.get('&' + USAGE_PARAM);\n let usageBin = padZeros(convertHexToBin(usageHex), PLUGIN_COUNT);\n\n // Flip the bit of the plugin being tracked.\n usageBin = flipBitOn(usageBin, PLUGIN_COUNT - pluginIndex);\n\n // Stores the modified usage string back on the tracker.\n tracker.set('&' + USAGE_PARAM, convertBinToHex(usageBin));\n}\n\n\n/**\n * Accepts a tracker and adds the current version to the version param.\n * @param {Object} tracker An analytics.js tracker.\n */\nfunction trackVersion(tracker) {\n tracker.set('&' + VERSION_PARAM, VERSION);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {parseUrl} from 'dom-utils';\nimport {NULL_DIMENSION} from '../constants';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign} from '../utilities';\n\n\n/**\n * Class for the `cleanUrlTracker` analytics.js plugin.\n * @implements {CleanUrlTrackerPublicInterface}\n */\nclass CleanUrlTracker {\n /**\n * Registers clean URL tracking on a tracker object. The clean URL tracker\n * removes query parameters from the page value reported to Google Analytics.\n * It also helps to prevent tracking similar URLs, e.g. sometimes ending a\n * URL with a slash and sometimes not.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?CleanUrlTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.CLEAN_URL_TRACKER);\n\n /** @type {CleanUrlTrackerOpts} */\n const defaultOpts = {\n // stripQuery: undefined,\n // queryParamsWhitelist: undefined,\n // queryDimensionIndex: undefined,\n // indexFilename: undefined,\n // trailingSlash: undefined,\n // urlFilter: undefined,\n };\n this.opts = /** @type {CleanUrlTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n /** @type {string|null} */\n this.queryDimension = this.opts.stripQuery &&\n this.opts.queryDimensionIndex ?\n `dimension${this.opts.queryDimensionIndex}` : null;\n\n // Binds methods to `this`.\n this.trackerGetOverride = this.trackerGetOverride.bind(this);\n this.buildHitTaskOverride = this.buildHitTaskOverride.bind(this);\n\n // Override built-in tracker method to watch for changes.\n MethodChain.add(tracker, 'get', this.trackerGetOverride);\n MethodChain.add(tracker, 'buildHitTask', this.buildHitTaskOverride);\n }\n\n /**\n * Ensures reads of the tracker object by other plugins always see the\n * \"cleaned\" versions of all URL fields.\n * @param {function(string):*} originalMethod A reference to the overridden\n * method.\n * @return {function(string):*}\n */\n trackerGetOverride(originalMethod) {\n return (field) => {\n if (field == 'page' || field == this.queryDimension) {\n const fieldsObj = /** @type {!FieldsObj} */ ({\n location: originalMethod('location'),\n page: originalMethod('page'),\n });\n const cleanedFieldsObj = this.cleanUrlFields(fieldsObj);\n return cleanedFieldsObj[field];\n } else {\n return originalMethod(field);\n }\n };\n }\n\n /**\n * Cleans URL fields passed in a send command.\n * @param {function(!Model)} originalMethod A reference to the\n * overridden method.\n * @return {function(!Model)}\n */\n buildHitTaskOverride(originalMethod) {\n return (model) => {\n const cleanedFieldsObj = this.cleanUrlFields({\n location: model.get('location'),\n page: model.get('page'),\n });\n model.set(cleanedFieldsObj, null, true);\n originalMethod(model);\n };\n }\n\n /**\n * Accepts of fields object containing URL fields and returns a new\n * fields object with the URLs \"cleaned\" according to the tracker options.\n * @param {!FieldsObj} fieldsObj\n * @return {!FieldsObj}\n */\n cleanUrlFields(fieldsObj) {\n const url = parseUrl(\n /** @type {string} */ (fieldsObj.page || fieldsObj.location));\n\n let pathname = url.pathname;\n\n // If an index filename was provided, remove it if it appears at the end\n // of the URL.\n if (this.opts.indexFilename) {\n const parts = pathname.split('/');\n if (this.opts.indexFilename == parts[parts.length - 1]) {\n parts[parts.length - 1] = '';\n pathname = parts.join('/');\n }\n }\n\n // Ensure the URL ends with or doesn't end with slash based on the\n // `trailingSlash` option. Note that filename URLs should never contain\n // a trailing slash.\n if (this.opts.trailingSlash == 'remove') {\n pathname = pathname.replace(/\\/+$/, '');\n } else if (this.opts.trailingSlash == 'add') {\n const isFilename = /\\.\\w+$/.test(pathname);\n if (!isFilename && pathname.substr(-1) != '/') {\n pathname = pathname + '/';\n }\n }\n\n /** @type {!FieldsObj} */\n const cleanedFieldsObj = {\n page: pathname + (this.opts.stripQuery ?\n this.stripNonWhitelistedQueryParams(url.search) : url.search),\n };\n if (fieldsObj.location) {\n cleanedFieldsObj.location = fieldsObj.location;\n }\n if (this.queryDimension) {\n cleanedFieldsObj[this.queryDimension] =\n url.search.slice(1) || NULL_DIMENSION;\n }\n\n // Apply the `urlFieldsFilter()` option if passed.\n if (typeof this.opts.urlFieldsFilter == 'function') {\n /** @type {!FieldsObj} */\n const userCleanedFieldsObj =\n this.opts.urlFieldsFilter(cleanedFieldsObj, parseUrl);\n\n // Ensure only the URL fields are returned.\n const returnValue = {\n page: userCleanedFieldsObj.page,\n location: userCleanedFieldsObj.location,\n };\n if (this.queryDimension) {\n returnValue[this.queryDimension] =\n userCleanedFieldsObj[this.queryDimension];\n }\n return returnValue;\n } else {\n return cleanedFieldsObj;\n }\n }\n\n /**\n * Accpets a raw URL search string and returns a new search string containing\n * only the site search params (if they exist).\n * @param {string} searchString The URL search string (starting with '?').\n * @return {string} The query string\n */\n stripNonWhitelistedQueryParams(searchString) {\n if (Array.isArray(this.opts.queryParamsWhitelist)) {\n const foundParams = [];\n searchString.slice(1).split('&').forEach((kv) => {\n const [key, value] = kv.split('=');\n if (this.opts.queryParamsWhitelist.indexOf(key) > -1 && value) {\n foundParams.push([key, value]);\n }\n });\n\n return foundParams.length ?\n '?' + foundParams.map((kv) => kv.join('=')).join('&') : '';\n } else {\n return '';\n }\n }\n\n /**\n * Restores all overridden tasks and methods.\n */\n remove() {\n MethodChain.remove(this.tracker, 'get', this.trackerGetOverride);\n MethodChain.remove(this.tracker, 'buildHitTask', this.buildHitTaskOverride);\n }\n}\n\n\nprovide('cleanUrlTracker', CleanUrlTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n domReady, getAttributeFields} from '../utilities';\n\n\n/**\n * Class for the `impressionTracker` analytics.js plugin.\n * @implements {ImpressionTrackerPublicInterface}\n */\nclass ImpressionTracker {\n /**\n * Registers impression tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?ImpressionTrackerOpts} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.IMPRESSION_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!(window.IntersectionObserver && window.MutationObserver)) return;\n\n /** type {ImpressionTrackerOpts} */\n const defaultOptions = {\n // elements: undefined,\n rootMargin: '0px',\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** type {ImpressionTrackerOpts} */ (\n assign(defaultOptions, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleDomMutations = this.handleDomMutations.bind(this);\n this.handleIntersectionChanges = this.handleIntersectionChanges.bind(this);\n this.handleDomElementAdded = this.handleDomElementAdded.bind(this);\n this.handleDomElementRemoved = this.handleDomElementRemoved.bind(this);\n\n /** @type {MutationObserver} */\n this.mutationObserver = null;\n\n // The primary list of elements to observe. Each item contains the\n // element ID, threshold, and whether it's currently in-view.\n this.items = [];\n\n // A map of element IDs in the `items` array to DOM elements in the\n // document. The presence of a key indicates that the element ID is in the\n // `items` array, and the presence of an element value indicates that the\n // element is in the DOM.\n this.elementMap = {};\n\n // A map of threshold values. Each threshold is mapped to an\n // IntersectionObserver instance specific to that threshold.\n this.thresholdMap = {};\n\n // Once the DOM is ready, start observing for changes (if present).\n domReady(() => {\n if (this.opts.elements) {\n this.observeElements(this.opts.elements);\n }\n });\n }\n\n /**\n * Starts observing the passed elements for impressions.\n * @param {Array} elements\n */\n observeElements(elements) {\n const data = this.deriveDataFromElements(elements);\n\n // Merge the new data with the data already on the plugin instance.\n this.items = this.items.concat(data.items);\n this.elementMap = assign({}, data.elementMap, this.elementMap);\n this.thresholdMap = assign({}, data.thresholdMap, this.thresholdMap);\n\n // Observe each new item.\n data.items.forEach((item) => {\n const observer = this.thresholdMap[item.threshold] =\n (this.thresholdMap[item.threshold] || new IntersectionObserver(\n this.handleIntersectionChanges, {\n rootMargin: this.opts.rootMargin,\n threshold: [+item.threshold],\n }));\n\n const element = this.elementMap[item.id] ||\n (this.elementMap[item.id] = document.getElementById(item.id));\n\n if (element) {\n observer.observe(element);\n }\n });\n\n if (!this.mutationObserver) {\n this.mutationObserver = new MutationObserver(this.handleDomMutations);\n this.mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n // TODO(philipwalton): Remove temporary hack to force a new frame\n // immediately after adding observers.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612323\n requestAnimationFrame(() => {});\n }\n\n /**\n * Stops observing the passed elements for impressions.\n * @param {Array} elements\n * @return {undefined}\n */\n unobserveElements(elements) {\n const itemsToKeep = [];\n const itemsToRemove = [];\n\n this.items.forEach((item) => {\n const itemInItems = elements.some((element) => {\n const itemToRemove = getItemFromElement(element);\n return itemToRemove.id === item.id &&\n itemToRemove.threshold === item.threshold &&\n itemToRemove.trackFirstImpressionOnly ===\n item.trackFirstImpressionOnly;\n });\n if (itemInItems) {\n itemsToRemove.push(item);\n } else {\n itemsToKeep.push(item);\n }\n });\n\n // If there are no items to keep, run the `unobserveAllElements` logic.\n if (!itemsToKeep.length) {\n this.unobserveAllElements();\n } else {\n const dataToKeep = this.deriveDataFromElements(itemsToKeep);\n const dataToRemove = this.deriveDataFromElements(itemsToRemove);\n\n this.items = dataToKeep.items;\n this.elementMap = dataToKeep.elementMap;\n this.thresholdMap = dataToKeep.thresholdMap;\n\n // Unobserve removed elements.\n itemsToRemove.forEach((item) => {\n if (!dataToKeep.elementMap[item.id]) {\n const observer = dataToRemove.thresholdMap[item.threshold];\n const element = dataToRemove.elementMap[item.id];\n\n if (element) {\n observer.unobserve(element);\n }\n\n // Disconnect unneeded threshold observers.\n if (!dataToKeep.thresholdMap[item.threshold]) {\n dataToRemove.thresholdMap[item.threshold].disconnect();\n }\n }\n });\n }\n }\n\n /**\n * Stops observing all currently observed elements.\n */\n unobserveAllElements() {\n Object.keys(this.thresholdMap).forEach((key) => {\n this.thresholdMap[key].disconnect();\n });\n\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n\n this.items = [];\n this.elementMap = {};\n this.thresholdMap = {};\n }\n\n /**\n * Loops through each of the passed elements and creates a map of element IDs,\n * threshold values, and a list of \"items\" (which contains each element's\n * `threshold` and `trackFirstImpressionOnly` property).\n * @param {Array} elements A list of elements to derive item data from.\n * @return {Object} An object with the properties `items`, `elementMap`\n * and `threshold`.\n */\n deriveDataFromElements(elements) {\n const items = [];\n const thresholdMap = {};\n const elementMap = {};\n\n if (elements.length) {\n elements.forEach((element) => {\n const item = getItemFromElement(element);\n\n items.push(item);\n elementMap[item.id] = this.elementMap[item.id] || null;\n thresholdMap[item.threshold] =\n this.thresholdMap[item.threshold] || null;\n });\n }\n\n return {items, elementMap, thresholdMap};\n }\n\n /**\n * Handles nodes being added or removed from the DOM. This function is passed\n * as the callback to `this.mutationObserver`.\n * @param {Array} mutations A list of `MutationRecord` instances\n */\n handleDomMutations(mutations) {\n for (let i = 0, mutation; mutation = mutations[i]; i++) {\n // Handles removed elements.\n for (let k = 0, removedEl; removedEl = mutation.removedNodes[k]; k++) {\n this.walkNodeTree(removedEl, this.handleDomElementRemoved);\n }\n // Handles added elements.\n for (let j = 0, addedEl; addedEl = mutation.addedNodes[j]; j++) {\n this.walkNodeTree(addedEl, this.handleDomElementAdded);\n }\n }\n }\n\n /**\n * Iterates through all descendents of a DOM node and invokes the passed\n * callback if any of them match an elememt in `elementMap`.\n * @param {Node} node The DOM node to walk.\n * @param {Function} callback A function to be invoked if a match is found.\n */\n walkNodeTree(node, callback) {\n if (node.nodeType == 1 && node.id in this.elementMap) {\n callback(node.id);\n }\n for (let i = 0, child; child = node.childNodes[i]; i++) {\n this.walkNodeTree(child, callback);\n }\n }\n\n /**\n * Handles intersection changes. This function is passed as the callback to\n * `this.intersectionObserver`\n * @param {Array} records A list of `IntersectionObserverEntry` records.\n */\n handleIntersectionChanges(records) {\n const itemsToRemove = [];\n for (let i = 0, record; record = records[i]; i++) {\n for (let j = 0, item; item = this.items[j]; j++) {\n if (record.target.id !== item.id) continue;\n\n if (isTargetVisible(item.threshold, record)) {\n this.handleImpression(item.id);\n\n if (item.trackFirstImpressionOnly) {\n itemsToRemove.push(item);\n }\n }\n }\n }\n if (itemsToRemove.length) {\n this.unobserveElements(itemsToRemove);\n }\n }\n\n /**\n * Sends a hit to Google Analytics with the impression data.\n * @param {string} id The ID of the element making the impression.\n */\n handleImpression(id) {\n const element = document.getElementById(id);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Viewport',\n eventAction: 'impression',\n eventLabel: id,\n nonInteraction: true,\n };\n\n /** @type {FieldsObj} */\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(element, this.opts.attributePrefix));\n\n this.tracker.send('event', createFieldsObj(defaultFields,\n userFields, this.tracker, this.opts.hitFilter, element));\n }\n\n /**\n * Handles an element in the items array being added to the DOM.\n * @param {string} id The ID of the element that was added.\n */\n handleDomElementAdded(id) {\n const element = this.elementMap[id] = document.getElementById(id);\n this.items.forEach((item) => {\n if (id == item.id) {\n this.thresholdMap[item.threshold].observe(element);\n }\n });\n }\n\n /**\n * Handles an element currently being observed for intersections being\n * removed from the DOM.\n * @param {string} id The ID of the element that was removed.\n */\n handleDomElementRemoved(id) {\n const element = this.elementMap[id];\n this.items.forEach((item) => {\n if (id == item.id) {\n this.thresholdMap[item.threshold].unobserve(element);\n }\n });\n\n this.elementMap[id] = null;\n }\n\n /**\n * Removes all listeners and observers.\n * @private\n */\n remove() {\n this.unobserveAllElements();\n }\n}\n\n\nprovide('impressionTracker', ImpressionTracker);\n\n\n/**\n * Detects whether or not an intersection record represents a visible target\n * given a particular threshold.\n * @param {number} threshold The threshold the target is visible above.\n * @param {IntersectionObserverEntry} record The most recent record entry.\n * @return {boolean} True if the target is visible.\n */\nfunction isTargetVisible(threshold, record) {\n if (threshold === 0) {\n const i = record.intersectionRect;\n return i.top > 0 || i.bottom > 0 || i.left > 0 || i.right > 0;\n } else {\n return record.intersectionRatio >= threshold;\n }\n}\n\n\n/**\n * Creates an item by merging the passed element with the item defaults.\n * If the passed element is just a string, that string is treated as\n * the item ID.\n * @param {!ImpressionTrackerElementsItem|string} element The element to\n * convert to an item.\n * @return {!ImpressionTrackerElementsItem} The item object.\n */\nfunction getItemFromElement(element) {\n /** @type {ImpressionTrackerElementsItem} */\n const defaultOpts = {\n threshold: 0,\n trackFirstImpressionOnly: true,\n };\n\n if (typeof element == 'string') {\n element = /** @type {!ImpressionTrackerElementsItem} */ ({id: element});\n }\n\n return assign(defaultOpts, element);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * An simple reimplementation of the native Node.js EventEmitter class.\n * The goal of this implementation is to be as small as possible.\n */\nexport default class EventEmitter {\n /**\n * Creates the event registry.\n */\n constructor() {\n this.registry_ = {};\n }\n\n /**\n * Adds a handler function to the registry for the passed event.\n * @param {string} event The event name.\n * @param {!Function} fn The handler to be invoked when the passed\n * event is emitted.\n */\n on(event, fn) {\n this.getRegistry_(event).push(fn);\n }\n\n /**\n * Removes a handler function from the registry for the passed event.\n * @param {string=} event The event name.\n * @param {Function=} fn The handler to be removed.\n */\n off(event = undefined, fn = undefined) {\n if (event && fn) {\n const eventRegistry = this.getRegistry_(event);\n const handlerIndex = eventRegistry.indexOf(fn);\n if (handlerIndex > -1) {\n eventRegistry.splice(handlerIndex, 1);\n }\n } else {\n this.registry_ = {};\n }\n }\n\n /**\n * Runs all registered handlers for the passed event with the optional args.\n * @param {string} event The event name.\n * @param {...*} args The arguments to be passed to the handler.\n */\n emit(event, ...args) {\n this.getRegistry_(event).forEach((fn) => fn(...args));\n }\n\n /**\n * Returns the total number of event handlers currently registered.\n * @return {number}\n */\n getEventCount() {\n let eventCount = 0;\n Object.keys(this.registry_).forEach((event) => {\n eventCount += this.getRegistry_(event).length;\n });\n return eventCount;\n }\n\n /**\n * Returns an array of handlers associated with the passed event name.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} event The event name.\n * @return {!Array} An array of handler functions.\n */\n getRegistry_(event) {\n return this.registry_[event] = (this.registry_[event] || []);\n }\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport EventEmitter from './event-emitter';\nimport {assign} from './utilities';\n\n\nconst AUTOTRACK_PREFIX = 'autotrack';\nconst instances = {};\nlet isListening = false;\n\n\n/** @type {boolean|undefined} */\nlet browserSupportsLocalStorage;\n\n\n/**\n * A storage object to simplify interacting with localStorage.\n */\nexport default class Store extends EventEmitter {\n /**\n * Gets an existing instance for the passed arguements or creates a new\n * instance if one doesn't exist.\n * @param {string} trackingId The tracking ID for the GA property.\n * @param {string} namespace A namespace unique to this store.\n * @param {Object=} defaults An optional object of key/value defaults.\n * @return {Store} The Store instance.\n */\n static getOrCreate(trackingId, namespace, defaults) {\n const key = [AUTOTRACK_PREFIX, trackingId, namespace].join(':');\n\n // Don't create multiple instances for the same tracking Id and namespace.\n if (!instances[key]) {\n instances[key] = new Store(key, defaults);\n if (!isListening) initStorageListener();\n }\n return instances[key];\n }\n\n /**\n * Returns true if the browser supports and can successfully write to\n * localStorage. The results is cached so this method can be invoked many\n * times with no extra performance cost.\n * @private\n * @return {boolean}\n */\n static isSupported_() {\n if (browserSupportsLocalStorage != null) {\n return browserSupportsLocalStorage;\n }\n\n try {\n window.localStorage.setItem(AUTOTRACK_PREFIX, AUTOTRACK_PREFIX);\n window.localStorage.removeItem(AUTOTRACK_PREFIX);\n browserSupportsLocalStorage = true;\n } catch (err) {\n browserSupportsLocalStorage = false;\n }\n return browserSupportsLocalStorage;\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n * @return {string|null} The stored value.\n */\n static get_(key) {\n return window.localStorage.getItem(key);\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n * @param {string} value The value to store.\n */\n static set_(key, value) {\n window.localStorage.setItem(key, value);\n }\n\n /**\n * Wraps the native localStorage method for each stubbing in tests.\n * @private\n * @param {string} key The store key.\n */\n static clear_(key) {\n window.localStorage.removeItem(key);\n }\n\n /**\n * @param {string} key A key unique to this store.\n * @param {Object=} defaults An optional object of key/value defaults.\n */\n constructor(key, defaults = {}) {\n super();\n this.key_ = key;\n this.defaults_ = defaults;\n\n /** @type {?Object} */\n this.cache_ = null; // Will be set after the first get.\n }\n\n /**\n * Gets the data stored in localStorage for this store. If the cache is\n * already populated, return it as is (since it's always kept up-to-date\n * and in sync with activity in other windows via the `storage` event).\n * TODO(philipwalton): Implement schema migrations if/when a new\n * schema version is introduced.\n * @return {!Object} The stored data merged with the defaults.\n */\n get() {\n if (this.cache_) {\n return this.cache_;\n } else {\n if (Store.isSupported_()) {\n try {\n this.cache_ = parse(Store.get_(this.key_));\n } catch(err) {\n // Do nothing.\n }\n }\n return this.cache_ = assign({}, this.defaults_, this.cache_);\n }\n }\n\n /**\n * Saves the passed data object to localStorage,\n * merging it with the existing data.\n * @param {Object} newData The data to save.\n */\n set(newData) {\n this.cache_ = assign({}, this.defaults_, this.cache_, newData);\n\n if (Store.isSupported_()) {\n try {\n Store.set_(this.key_, JSON.stringify(this.cache_));\n } catch(err) {\n // Do nothing.\n }\n }\n }\n\n /**\n * Clears the data in localStorage for the current store.\n */\n clear() {\n this.cache_ = {};\n if (Store.isSupported_()) {\n try {\n Store.clear_(this.key_);\n } catch(err) {\n // Do nothing.\n }\n }\n }\n\n /**\n * Removes the store instance for the global instances map. If this is the\n * last store instance, the storage listener is also removed.\n * Note: this does not erase the stored data. Use `clear()` for that.\n */\n destroy() {\n delete instances[this.key_];\n if (!Object.keys(instances).length) {\n removeStorageListener();\n }\n }\n}\n\n\n/**\n * Adds a single storage event listener and flips the global `isListening`\n * flag so multiple events aren't added.\n */\nfunction initStorageListener() {\n window.addEventListener('storage', storageListener);\n isListening = true;\n}\n\n\n/**\n * Removes the storage event listener and flips the global `isListening`\n * flag so it can be re-added later.\n */\nfunction removeStorageListener() {\n window.removeEventListener('storage', storageListener);\n isListening = false;\n}\n\n\n/**\n * The global storage event listener.\n * @param {!Event} event The DOM event.\n */\nfunction storageListener(event) {\n const store = instances[event.key];\n if (store) {\n const oldData = assign({}, store.defaults_, parse(event.oldValue));\n const newData = assign({}, store.defaults_, parse(event.newValue));\n\n store.cache_ = newData;\n store.emit('externalSet', newData, oldData);\n }\n}\n\n\n/**\n * Parses a source string as JSON\n * @param {string|null} source\n * @return {!Object} The JSON object.\n */\nfunction parse(source) {\n let data = {};\n if (source) {\n try {\n data = /** @type {!Object} */ (JSON.parse(source));\n } catch(err) {\n // Do nothing.\n }\n }\n return data;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport MethodChain from './method-chain';\nimport Store from './store';\nimport {now, uuid} from './utilities';\n\n\nconst SECONDS = 1000;\nconst MINUTES = 60 * SECONDS;\n\n\nconst instances = {};\n\n\n/**\n * A session management class that helps track session boundaries\n * across multiple open tabs/windows.\n */\nexport default class Session {\n /**\n * Gets an existing instance for the passed arguments or creates a new\n * instance if one doesn't exist.\n * @param {!Tracker} tracker An analytics.js tracker object.\n * @param {number} timeout The session timeout (in minutes). This value\n * should match what's set in the \"Session settings\" section of the\n * Google Analytics admin.\n * @param {string=} timeZone The optional IANA time zone of the view. This\n * value should match what's set in the \"View settings\" section of the\n * Google Analytics admin. (Note: this assumes all views for the property\n * use the same time zone. If that's not true, it's better not to use\n * this feature).\n * @return {Session} The Session instance.\n */\n static getOrCreate(tracker, timeout, timeZone) {\n // Don't create multiple instances for the same property.\n const trackingId = tracker.get('trackingId');\n if (instances[trackingId]) {\n return instances[trackingId];\n } else {\n return instances[trackingId] = new Session(tracker, timeout, timeZone);\n }\n }\n\n /**\n * @param {!Tracker} tracker An analytics.js tracker object.\n * @param {number} timeout The session timeout (in minutes). This value\n * should match what's set in the \"Session settings\" section of the\n * Google Analytics admin.\n * @param {string=} timeZone The optional IANA time zone of the view. This\n * value should match what's set in the \"View settings\" section of the\n * Google Analytics admin. (Note: this assumes all views for the property\n * use the same time zone. If that's not true, it's better not to use\n * this feature).\n */\n constructor(tracker, timeout, timeZone) {\n this.tracker = tracker;\n this.timeout = timeout || Session.DEFAULT_TIMEOUT;\n this.timeZone = timeZone;\n\n // Binds methods.\n this.sendHitTaskOverride = this.sendHitTaskOverride.bind(this);\n\n // Overrides into the trackers sendHitTask method.\n MethodChain.add(tracker, 'sendHitTask', this.sendHitTaskOverride);\n\n // Some browser doesn't support various features of the\n // `Intl.DateTimeFormat` API, so we have to try/catch it. Consequently,\n // this allows us to assume the presence of `this.dateTimeFormatter` means\n // it works in the current browser.\n try {\n this.dateTimeFormatter =\n new Intl.DateTimeFormat('en-US', {timeZone: this.timeZone});\n } catch(err) {\n // Do nothing.\n }\n\n /** @type {SessionStoreData} */\n const defaultProps = {\n hitTime: 0,\n isExpired: false,\n };\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'session', defaultProps);\n\n // Ensure the session has an ID.\n if (!this.store.get().id) {\n this.store.set(/** @type {SessionStoreData} */ ({id: uuid()}));\n }\n }\n\n /**\n * Returns the ID of the current session.\n * @return {string}\n */\n getId() {\n return this.store.get().id;\n }\n\n /**\n * Accepts a session ID and returns true if the specified session has\n * evidentially expired. A session can expire for two reasons:\n * - More than 30 minutes has elapsed since the previous hit\n * was sent (The 30 minutes number is the Google Analytics default, but\n * it can be modified in GA admin \"Session settings\").\n * - A new day has started since the previous hit, in the\n * specified time zone (should correspond to the time zone of the\n * property's views).\n *\n * Note: since real session boundaries are determined at processing time,\n * this is just a best guess rather than a source of truth.\n *\n * @param {string} id The ID of a session to check for expiry.\n * @return {boolean} True if the session has not exp\n */\n isExpired(id = this.getId()) {\n // If a session ID is passed and it doesn't match the current ID,\n // assume it's from an expired session. If no ID is passed, assume the ID\n // of the current session.\n if (id != this.getId()) return true;\n\n /** @type {SessionStoreData} */\n const sessionData = this.store.get();\n\n // `isExpired` will be `true` if the sessionControl field was set to\n // 'end' on the previous hit.\n if (sessionData.isExpired) return true;\n\n const oldHitTime = sessionData.hitTime;\n\n // Only consider a session expired if previous hit time data exists, and\n // the previous hit time is greater than that session timeout period or\n // the hits occurred on different days in the session timezone.\n if (oldHitTime) {\n const currentDate = new Date();\n const oldHitDate = new Date(oldHitTime);\n if (currentDate - oldHitDate > (this.timeout * MINUTES) ||\n this.datesAreDifferentInTimezone(currentDate, oldHitDate)) {\n return true;\n }\n }\n\n // For all other cases return false.\n return false;\n }\n\n /**\n * Returns true if (and only if) the timezone date formatting is supported\n * in the current browser and if the two dates are definitively not the\n * same date in the session timezone. Anything short of this returns false.\n * @param {!Date} d1\n * @param {!Date} d2\n * @return {boolean}\n */\n datesAreDifferentInTimezone(d1, d2) {\n if (!this.dateTimeFormatter) {\n return false;\n } else {\n return this.dateTimeFormatter.format(d1)\n != this.dateTimeFormatter.format(d2);\n }\n }\n\n /**\n * Keeps track of when the previous hit was sent to determine if a session\n * has expired. Also inspects the `sessionControl` field to handles\n * expiration accordingly.\n * @param {function(!Model)} originalMethod A reference to the overridden\n * method.\n * @return {function(!Model)}\n */\n sendHitTaskOverride(originalMethod) {\n return (model) => {\n originalMethod(model);\n\n const sessionControl = model.get('sessionControl');\n const sessionWillStart = sessionControl == 'start' || this.isExpired();\n const sessionWillEnd = sessionControl == 'end';\n\n /** @type {SessionStoreData} */\n const sessionData = this.store.get();\n sessionData.hitTime = now();\n if (sessionWillStart) {\n sessionData.isExpired = false;\n sessionData.id = uuid();\n }\n if (sessionWillEnd) {\n sessionData.isExpired = true;\n }\n this.store.set(sessionData);\n };\n }\n\n /**\n * Restores the tracker's original `sendHitTask` to the state before\n * session control was initialized and removes this instance from the global\n * store.\n */\n destroy() {\n MethodChain.remove(this.tracker, 'sendHitTask', this.sendHitTaskOverride);\n this.store.destroy();\n delete instances[this.tracker.get('trackingId')];\n }\n}\n\n\nSession.DEFAULT_TIMEOUT = 30; // minutes\n","/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {parseUrl} from 'dom-utils';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport Session from '../session';\nimport Store from '../store';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, debounce, isObject} from '../utilities';\n\n\n/**\n * Class for the `maxScrollQueryTracker` analytics.js plugin.\n * @implements {MaxScrollTrackerPublicInterface}\n */\nclass MaxScrollTracker {\n /**\n * Registers outbound link tracking on tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.MAX_SCROLL_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {MaxScrollTrackerOpts} */\n const defaultOpts = {\n increaseThreshold: 20,\n sessionTimeout: Session.DEFAULT_TIMEOUT,\n // timeZone: undefined,\n // maxScrollMetricIndex: undefined,\n fieldsObj: {},\n // hitFilter: undefined\n };\n\n this.opts = /** @type {MaxScrollTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n this.pagePath = this.getPagePath();\n\n // Binds methods to `this`.\n this.handleScroll = debounce(this.handleScroll.bind(this), 500);\n this.trackerSetOverride = this.trackerSetOverride.bind(this);\n\n // Creates the store and binds storage change events.\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'plugins/max-scroll-tracker');\n\n // Creates the session and binds session events.\n this.session = Session.getOrCreate(\n tracker, this.opts.sessionTimeout, this.opts.timeZone);\n\n // Override the built-in tracker.set method to watch for changes.\n MethodChain.add(tracker, 'set', this.trackerSetOverride);\n\n this.listenForMaxScrollChanges();\n }\n\n\n /**\n * Adds a scroll event listener if the max scroll percentage for the\n * current page isn't already at 100%.\n */\n listenForMaxScrollChanges() {\n const maxScrollPercentage = this.getMaxScrollPercentageForCurrentPage();\n if (maxScrollPercentage < 100) {\n window.addEventListener('scroll', this.handleScroll);\n }\n }\n\n\n /**\n * Removes an added scroll listener.\n */\n stopListeningForMaxScrollChanges() {\n window.removeEventListener('scroll', this.handleScroll);\n }\n\n\n /**\n * Handles the scroll event. If the current scroll percentage is greater\n * that the stored scroll event by at least the specified increase threshold,\n * send an event with the increase amount.\n */\n handleScroll() {\n const pageHeight = getPageHeight();\n const scrollPos = window.pageYOffset; // scrollY isn't supported in IE.\n const windowHeight = window.innerHeight;\n\n // Ensure scrollPercentage is an integer between 0 and 100.\n const scrollPercentage = Math.min(100, Math.max(0,\n Math.round(100 * (scrollPos / (pageHeight - windowHeight)))));\n\n // If the max scroll data gets out of the sync with the session data\n // (for whatever reason), clear it.\n const sessionId = this.session.getId();\n if (sessionId != this.store.get().sessionId) {\n this.store.clear();\n this.store.set({sessionId});\n }\n\n // If the session has expired, clear the stored data and don't send any\n // events (since they'd start a new session). Note: this check is needed,\n // in addition to the above check, to handle cases where the session IDs\n // got out of sync, but the session didn't expire.\n if (this.session.isExpired(this.store.get().sessionId)) {\n this.store.clear();\n } else {\n const maxScrollPercentage = this.getMaxScrollPercentageForCurrentPage();\n\n if (scrollPercentage > maxScrollPercentage) {\n if (scrollPercentage == 100 || maxScrollPercentage == 100) {\n this.stopListeningForMaxScrollChanges();\n }\n const increaseAmount = scrollPercentage - maxScrollPercentage;\n if (scrollPercentage == 100 ||\n increaseAmount >= this.opts.increaseThreshold) {\n this.setMaxScrollPercentageForCurrentPage(scrollPercentage);\n this.sendMaxScrollEvent(increaseAmount, scrollPercentage);\n }\n }\n }\n }\n\n /**\n * Detects changes to the tracker object and triggers an update if the page\n * field has changed.\n * @param {function((Object|string), (string|undefined))} originalMethod\n * A reference to the overridden method.\n * @return {function((Object|string), (string|undefined))}\n */\n trackerSetOverride(originalMethod) {\n return (field, value) => {\n originalMethod(field, value);\n\n /** @type {!FieldsObj} */\n const fields = isObject(field) ? field : {[field]: value};\n if (fields.page) {\n const lastPagePath = this.pagePath;\n this.pagePath = this.getPagePath();\n\n if (this.pagePath != lastPagePath) {\n // Since event listeners for the same function are never added twice,\n // we don't need to worry about whether we're already listening. We\n // can just add the event listener again.\n this.listenForMaxScrollChanges();\n }\n }\n };\n }\n\n /**\n * Sends an event for the increased max scroll percentage amount.\n * @param {number} increaseAmount\n * @param {number} scrollPercentage\n */\n sendMaxScrollEvent(increaseAmount, scrollPercentage) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Max Scroll',\n eventAction: 'increase',\n eventValue: increaseAmount,\n eventLabel: String(scrollPercentage),\n nonInteraction: true,\n };\n\n // If a custom metric was specified, set it equal to the event value.\n if (this.opts.maxScrollMetricIndex) {\n defaultFields['metric' + this.opts.maxScrollMetricIndex] = increaseAmount;\n }\n\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Stores the current max scroll percentage for the current page.\n * @param {number} maxScrollPercentage\n */\n setMaxScrollPercentageForCurrentPage(maxScrollPercentage) {\n this.store.set({\n [this.pagePath]: maxScrollPercentage,\n sessionId: this.session.getId(),\n });\n }\n\n /**\n * Gets the stored max scroll percentage for the current page.\n * @return {number}\n */\n getMaxScrollPercentageForCurrentPage() {\n return this.store.get()[this.pagePath] || 0;\n }\n\n /**\n * Gets the page path from the tracker object.\n * @return {number}\n */\n getPagePath() {\n const url = parseUrl(\n this.tracker.get('page') || this.tracker.get('location'));\n return url.pathname + url.search;\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n this.session.destroy();\n this.stopListeningForMaxScrollChanges();\n MethodChain.remove(this.tracker, 'set', this.trackerSetOverride);\n }\n}\n\n\nprovide('maxScrollTracker', MaxScrollTracker);\n\n\n/**\n * Gets the maximum height of the page including scrollable area.\n * @return {number}\n */\nfunction getPageHeight() {\n const html = document.documentElement;\n const body = document.body;\n return Math.max(html.offsetHeight, html.scrollHeight,\n body.offsetHeight, body.scrollHeight);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {NULL_DIMENSION} from '../constants';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n debounce, isObject, toArray} from '../utilities';\n\n\n/**\n * Declares the MediaQueryList instance cache.\n */\nconst mediaMap = {};\n\n\n/**\n * Class for the `mediaQueryTracker` analytics.js plugin.\n * @implements {MediaQueryTrackerPublicInterface}\n */\nclass MediaQueryTracker {\n /**\n * Registers media query tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.MEDIA_QUERY_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.matchMedia) return;\n\n /** @type {MediaQueryTrackerOpts} */\n const defaultOpts = {\n // definitions: unefined,\n changeTemplate: this.changeTemplate,\n changeTimeout: 1000,\n fieldsObj: {},\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {MediaQueryTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n // Exits early if media query data doesn't exist.\n if (!isObject(this.opts.definitions)) return;\n\n this.opts.definitions = toArray(this.opts.definitions);\n this.tracker = tracker;\n this.changeListeners = [];\n\n this.processMediaQueries();\n }\n\n /**\n * Loops through each media query definition, sets the custom dimenion data,\n * and adds the change listeners.\n */\n processMediaQueries() {\n this.opts.definitions.forEach((definition) => {\n // Only processes definitions with a name and index.\n if (definition.name && definition.dimensionIndex) {\n const mediaName = this.getMatchName(definition);\n this.tracker.set('dimension' + definition.dimensionIndex, mediaName);\n\n this.addChangeListeners(definition);\n }\n });\n }\n\n /**\n * Takes a definition object and return the name of the matching media item.\n * If no match is found, the NULL_DIMENSION value is returned.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension.\n * @return {string} The name of the matched media or NULL_DIMENSION.\n */\n getMatchName(definition) {\n let match;\n\n definition.items.forEach((item) => {\n if (getMediaList(item.media).matches) {\n match = item;\n }\n });\n return match ? match.name : NULL_DIMENSION;\n }\n\n /**\n * Adds change listeners to each media query in the definition list.\n * Debounces the changes to prevent unnecessary hits from being sent.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension\n */\n addChangeListeners(definition) {\n definition.items.forEach((item) => {\n const mql = getMediaList(item.media);\n const fn = debounce(() => {\n this.handleChanges(definition);\n }, this.opts.changeTimeout);\n\n mql.addListener(fn);\n this.changeListeners.push({mql, fn});\n });\n }\n\n /**\n * Handles changes to the matched media. When the new value differs from\n * the old value, a change event is sent.\n * @param {Object} definition A set of named media queries associated\n * with a single custom dimension\n */\n handleChanges(definition) {\n const newValue = this.getMatchName(definition);\n const oldValue = this.tracker.get('dimension' + definition.dimensionIndex);\n\n if (newValue !== oldValue) {\n this.tracker.set('dimension' + definition.dimensionIndex, newValue);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: definition.name,\n eventAction: 'change',\n eventLabel: this.opts.changeTemplate(oldValue, newValue),\n nonInteraction: true,\n };\n this.tracker.send('event', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n for (let i = 0, listener; listener = this.changeListeners[i]; i++) {\n listener.mql.removeListener(listener.fn);\n }\n }\n\n /**\n * Sets the default formatting of the change event label.\n * This can be overridden by setting the `changeTemplate` option.\n * @param {string} oldValue The value of the media query prior to the change.\n * @param {string} newValue The value of the media query after the change.\n * @return {string} The formatted event label.\n */\n changeTemplate(oldValue, newValue) {\n return oldValue + ' => ' + newValue;\n }\n}\n\n\nprovide('mediaQueryTracker', MediaQueryTracker);\n\n\n/**\n * Accepts a media query and returns a MediaQueryList object.\n * Caches the values to avoid multiple unnecessary instances.\n * @param {string} media A media query value.\n * @return {MediaQueryList} The matched media.\n */\nfunction getMediaList(media) {\n return mediaMap[media] || (mediaMap[media] = window.matchMedia(media));\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate, parseUrl} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n getAttributeFields, withTimeout} from '../utilities';\n\n\n/**\n * Class for the `outboundFormTracker` analytics.js plugin.\n * @implements {OutboundFormTrackerPublicInterface}\n */\nclass OutboundFormTracker {\n /**\n * Registers outbound form tracking.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.OUTBOUND_FORM_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {OutboundFormTrackerOpts} */\n const defaultOpts = {\n formSelector: 'form',\n shouldTrackOutboundForm: this.shouldTrackOutboundForm,\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined\n };\n\n this.opts = /** @type {OutboundFormTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n this.delegate = delegate(document, 'submit', this.opts.formSelector,\n this.handleFormSubmits.bind(this), {composed: true, useCapture: true});\n }\n\n /**\n * Handles all submits on form elements. A form submit is considered outbound\n * if its action attribute starts with http and does not contain\n * location.hostname.\n * When the beacon transport method is not available, the event's default\n * action is prevented and re-emitted after the hit is sent.\n * @param {Event} event The DOM submit event.\n * @param {Element} form The delegated event target.\n */\n handleFormSubmits(event, form) {\n const action = parseUrl(form.action).href;\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Outbound Form',\n eventAction: 'submit',\n eventLabel: action,\n };\n\n if (this.opts.shouldTrackOutboundForm(form, parseUrl)) {\n if (!navigator.sendBeacon) {\n // Stops the submit and waits until the hit is complete (with timeout)\n // for browsers that don't support beacon.\n event.preventDefault();\n defaultFields.hitCallback = withTimeout(function() {\n form.submit();\n });\n }\n\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(form, this.opts.attributePrefix));\n\n this.tracker.send('event', createFieldsObj(\n defaultFields, userFields,\n this.tracker, this.opts.hitFilter, form, event));\n }\n }\n\n /**\n * Determines whether or not the tracker should send a hit when a form is\n * submitted. By default, forms with an action attribute that starts with\n * \"http\" and doesn't contain the current hostname are tracked.\n * @param {Element} form The form that was submitted.\n * @param {Function} parseUrlFn A cross-browser utility method for url\n * parsing (note: renamed to disambiguate when compiling).\n * @return {boolean} Whether or not the form should be tracked.\n */\n shouldTrackOutboundForm(form, parseUrlFn) {\n const url = parseUrlFn(form.action);\n return url.hostname != location.hostname &&\n url.protocol.slice(0, 4) == 'http';\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n this.delegate.destroy();\n }\n}\n\n\nprovide('outboundFormTracker', OutboundFormTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {delegate, parseUrl} from 'dom-utils';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj,\n getAttributeFields, withTimeout} from '../utilities';\n\n\n/**\n * Class for the `outboundLinkTracker` analytics.js plugin.\n * @implements {OutboundLinkTrackerPublicInterface}\n */\nclass OutboundLinkTracker {\n /**\n * Registers outbound link tracking on a tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.OUTBOUND_LINK_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {OutboundLinkTrackerOpts} */\n const defaultOpts = {\n events: ['click'],\n linkSelector: 'a, area',\n shouldTrackOutboundLink: this.shouldTrackOutboundLink,\n fieldsObj: {},\n attributePrefix: 'ga-',\n // hitFilter: undefined,\n };\n\n this.opts = /** @type {OutboundLinkTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods.\n this.handleLinkInteractions = this.handleLinkInteractions.bind(this);\n\n // Creates a mapping of events to their delegates\n this.delegates = {};\n this.opts.events.forEach((event) => {\n this.delegates[event] = delegate(document, event, this.opts.linkSelector,\n this.handleLinkInteractions, {composed: true, useCapture: true});\n });\n }\n\n /**\n * Handles all interactions on link elements. A link is considered an outbound\n * link if its hostname property does not match location.hostname. When the\n * beacon transport method is not available, the links target is set to\n * \"_blank\" to ensure the hit can be sent.\n * @param {Event} event The DOM click event.\n * @param {Element} link The delegated event target.\n */\n handleLinkInteractions(event, link) {\n if (this.opts.shouldTrackOutboundLink(link, parseUrl)) {\n const href = link.getAttribute('href') || link.getAttribute('xlink:href');\n const url = parseUrl(href);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Outbound Link',\n eventAction: event.type,\n eventLabel: url.href,\n };\n\n /** @type {FieldsObj} */\n const userFields = assign({}, this.opts.fieldsObj,\n getAttributeFields(link, this.opts.attributePrefix));\n\n const fieldsObj = createFieldsObj(defaultFields, userFields,\n this.tracker, this.opts.hitFilter, link, event);\n\n if (!navigator.sendBeacon &&\n linkClickWillUnloadCurrentPage(event, link)) {\n // Adds a new event handler at the last minute to minimize the chances\n // that another event handler for this click will run after this logic.\n const clickHandler = () => {\n window.removeEventListener('click', clickHandler);\n\n // Checks to make sure another event handler hasn't already prevented\n // the default action. If it has the custom redirect isn't needed.\n if (!event.defaultPrevented) {\n // Stops the click and waits until the hit is complete (with\n // timeout) for browsers that don't support beacon.\n event.preventDefault();\n\n const oldHitCallback = fieldsObj.hitCallback;\n fieldsObj.hitCallback = withTimeout(function() {\n if (typeof oldHitCallback == 'function') oldHitCallback();\n location.href = href;\n });\n }\n this.tracker.send('event', fieldsObj);\n };\n window.addEventListener('click', clickHandler);\n } else {\n this.tracker.send('event', fieldsObj);\n }\n }\n }\n\n /**\n * Determines whether or not the tracker should send a hit when a link is\n * clicked. By default links with a hostname property not equal to the current\n * hostname are tracked.\n * @param {Element} link The link that was clicked on.\n * @param {Function} parseUrlFn A cross-browser utility method for url\n * parsing (note: renamed to disambiguate when compiling).\n * @return {boolean} Whether or not the link should be tracked.\n */\n shouldTrackOutboundLink(link, parseUrlFn) {\n const href = link.getAttribute('href') || link.getAttribute('xlink:href');\n const url = parseUrlFn(href);\n return url.hostname != location.hostname &&\n url.protocol.slice(0, 4) == 'http';\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n Object.keys(this.delegates).forEach((key) => {\n this.delegates[key].destroy();\n });\n }\n}\n\n\nprovide('outboundLinkTracker', OutboundLinkTracker);\n\n\n/**\n * Determines if a link click event will cause the current page to upload.\n * Note: most link clicks *will* cause the current page to unload because they\n * initiate a page navigation. The most common reason a link click won't cause\n * the page to unload is if the clicked was to open the link in a new tab.\n * @param {Event} event The DOM event.\n * @param {Element} link The link element clicked on.\n * @return {boolean} True if the current page will be unloaded.\n */\nfunction linkClickWillUnloadCurrentPage(event, link) {\n return !(\n // The event type can be customized; we only care about clicks here.\n event.type != 'click' ||\n // Links with target=\"_blank\" set will open in a new window/tab.\n link.target == '_blank' ||\n // On mac, command clicking will open a link in a new tab. Control\n // clicking does this on windows.\n event.metaKey || event.ctrlKey ||\n // Shift clicking in Chrome/Firefox opens the link in a new window\n // In Safari it adds the URL to a favorites list.\n event.shiftKey ||\n // On Mac, clicking with the option key is used to download a resouce.\n event.altKey ||\n // Middle mouse button clicks (which == 2) are used to open a link\n // in a new tab, and right clicks (which == 3) on Firefox trigger\n // a click event.\n event.which > 1);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport {NULL_DIMENSION} from '../constants';\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport Session from '../session';\nimport Store from '../store';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj, deferUntilPluginsLoaded,\n isObject, now, uuid} from '../utilities';\n\n\nconst HIDDEN = 'hidden';\nconst VISIBLE = 'visible';\nconst PAGE_ID = uuid();\nconst SECONDS = 1000;\n\n\n/**\n * Class for the `pageVisibilityTracker` analytics.js plugin.\n * @implements {PageVisibilityTrackerPublicInterface}\n */\nclass PageVisibilityTracker {\n /**\n * Registers outbound link tracking on tracker object.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.PAGE_VISIBILITY_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!document.visibilityState) return;\n\n /** @type {PageVisibilityTrackerOpts} */\n const defaultOpts = {\n sessionTimeout: Session.DEFAULT_TIMEOUT,\n visibleThreshold: 5 * SECONDS,\n // timeZone: undefined,\n sendInitialPageview: false,\n // pageLoadsMetricIndex: undefined,\n // visibleMetricIndex: undefined,\n fieldsObj: {},\n // hitFilter: undefined\n };\n\n this.opts = /** @type {PageVisibilityTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n this.lastPageState = document.visibilityState;\n this.visibleThresholdTimeout_ = null;\n this.isInitialPageviewSent_ = false;\n\n // Binds methods to `this`.\n this.trackerSetOverride = this.trackerSetOverride.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleWindowUnload = this.handleWindowUnload.bind(this);\n this.handleExternalStoreSet = this.handleExternalStoreSet.bind(this);\n\n // Creates the store and binds storage change events.\n this.store = Store.getOrCreate(\n tracker.get('trackingId'), 'plugins/page-visibility-tracker');\n this.store.on('externalSet', this.handleExternalStoreSet);\n\n // Creates the session and binds session events.\n this.session = Session.getOrCreate(\n tracker, this.opts.sessionTimeout, this.opts.timeZone);\n\n // Override the built-in tracker.set method to watch for changes.\n MethodChain.add(tracker, 'set', this.trackerSetOverride);\n\n window.addEventListener('unload', this.handleWindowUnload);\n document.addEventListener('visibilitychange', this.handleChange);\n\n // Postpone sending any hits until the next call stack, which allows all\n // autotrack plugins to be required sync before any hits are sent.\n deferUntilPluginsLoaded(this.tracker, () => {\n if (document.visibilityState == VISIBLE) {\n if (this.opts.sendInitialPageview) {\n this.sendPageview({isPageLoad: true});\n this.isInitialPageviewSent_ = true;\n }\n this.store.set(/** @type {PageVisibilityStoreData} */ ({\n time: now(),\n state: VISIBLE,\n pageId: PAGE_ID,\n sessionId: this.session.getId(),\n }));\n } else {\n if (this.opts.sendInitialPageview && this.opts.pageLoadsMetricIndex) {\n this.sendPageLoad();\n }\n }\n });\n }\n\n /**\n * Inspects the last visibility state change data and determines if a\n * visibility event needs to be tracked based on the current visibility\n * state and whether or not the session has expired. If the session has\n * expired, a change to `visible` will trigger an additional pageview.\n * This method also sends as the event value (and optionally a custom metric)\n * the elapsed time between this event and the previously reported change\n * in the same session, allowing you to more accurately determine when users\n * were actually looking at your page versus when it was in the background.\n */\n handleChange() {\n if (!(document.visibilityState == VISIBLE ||\n document.visibilityState == HIDDEN)) {\n return;\n }\n\n const lastStoredChange = this.getAndValidateChangeData();\n\n /** @type {PageVisibilityStoreData} */\n const change = {\n time: now(),\n state: document.visibilityState,\n pageId: PAGE_ID,\n sessionId: this.session.getId(),\n };\n\n // If the visibilityState has changed to visible and the initial pageview\n // has not been sent (and the `sendInitialPageview` option is `true`).\n // Send the initial pageview now.\n if (document.visibilityState == VISIBLE &&\n this.opts.sendInitialPageview && !this.isInitialPageviewSent_) {\n this.sendPageview();\n this.isInitialPageviewSent_ = true;\n }\n\n // If the visibilityState has changed to hidden, clear any scheduled\n // pageviews waiting for the visibleThreshold timeout.\n if (document.visibilityState == HIDDEN && this.visibleThresholdTimeout_) {\n clearTimeout(this.visibleThresholdTimeout_);\n }\n\n if (this.session.isExpired(lastStoredChange.sessionId)) {\n this.store.clear();\n if (this.lastPageState == HIDDEN &&\n document.visibilityState == VISIBLE) {\n // If the session has expired, changes from hidden to visible should\n // be considered a new pageview rather than a visibility event.\n // This behavior ensures all sessions contain a pageview so\n // session-level page dimensions and metrics (e.g. ga:landingPagePath\n // and ga:entrances) are correct.\n // Also, in order to prevent false positives, we add a small timeout\n // that is cleared if the visibilityState changes to hidden shortly\n // after the change to visible. This can happen if a user is quickly\n // switching through their open tabs but not actually interacting with\n // and of them. It can also happen when a user goes to a tab just to\n // immediately close it. Such cases should not be considered pageviews.\n clearTimeout(this.visibleThresholdTimeout_);\n this.visibleThresholdTimeout_ = setTimeout(() => {\n this.store.set(change);\n this.sendPageview({hitTime: change.time});\n }, this.opts.visibleThreshold);\n }\n } else {\n if (lastStoredChange.pageId == PAGE_ID &&\n lastStoredChange.state == VISIBLE) {\n this.sendPageVisibilityEvent(lastStoredChange);\n }\n this.store.set(change);\n }\n\n this.lastPageState = document.visibilityState;\n }\n\n /**\n * Retroactively updates the stored change data in cases where it's known to\n * be out of sync.\n * This plugin keeps track of each visiblity change and stores the last one\n * in localStorage. LocalStorage is used to handle situations where the user\n * has multiple page open at the same time and we don't want to\n * double-report page visibility in those cases.\n * However, a problem can occur if a user closes a page when one or more\n * visible pages are still open. In such cases it's impossible to know\n * which of the remaining pages the user will interact with next.\n * To solve this problem we wait for the next change on any page and then\n * retroactively update the stored data to reflect the current page as being\n * the page on which the last change event occured and measure visibility\n * from that point.\n * @return {!PageVisibilityStoreData}\n */\n getAndValidateChangeData() {\n const lastStoredChange =\n /** @type {PageVisibilityStoreData} */ (this.store.get());\n\n if (this.lastPageState == VISIBLE &&\n lastStoredChange.state == HIDDEN &&\n lastStoredChange.pageId != PAGE_ID) {\n lastStoredChange.state = VISIBLE;\n lastStoredChange.pageId = PAGE_ID;\n this.store.set(lastStoredChange);\n }\n return lastStoredChange;\n }\n\n /**\n * Sends a Page Visibility event to track the time this page was in the\n * visible state (assuming it was in that state long enough to meet the\n * threshold).\n * @param {!PageVisibilityStoreData} lastStoredChange\n * @param {{hitTime: (number|undefined)}=} param1\n * - hitTime: A hit timestap used to help ensure original order in cases\n * where the send is delayed.\n */\n sendPageVisibilityEvent(lastStoredChange, {hitTime} = {}) {\n const delta = this.getTimeSinceLastStoredChange(\n lastStoredChange, {hitTime});\n\n // If the detla is greater than the visibileThreshold, report it.\n if (delta && delta >= this.opts.visibleThreshold) {\n const deltaInSeconds = Math.round(delta / SECONDS);\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n nonInteraction: true,\n eventCategory: 'Page Visibility',\n eventAction: 'track',\n eventValue: deltaInSeconds,\n eventLabel: NULL_DIMENSION,\n };\n\n if (hitTime) {\n defaultFields.queueTime = now() - hitTime;\n }\n\n // If a custom metric was specified, set it equal to the event value.\n if (this.opts.visibleMetricIndex) {\n defaultFields['metric' + this.opts.visibleMetricIndex] = deltaInSeconds;\n }\n\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n }\n\n /**\n * Sends a page load event.\n */\n sendPageLoad() {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n eventCategory: 'Page Visibility',\n eventAction: 'page load',\n eventLabel: NULL_DIMENSION,\n ['metric' + this.opts.pageLoadsMetricIndex]: 1,\n nonInteraction: true,\n };\n this.tracker.send('event',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Sends a pageview, optionally calculating an offset if hitTime is passed.\n * @param {{\n * hitTime: (number|undefined),\n * isPageLoad: (boolean|undefined)\n * }=} param1\n * hitTime: The timestamp of the current hit.\n * isPageLoad: True if this pageview was also a page load.\n */\n sendPageview({hitTime, isPageLoad} = {}) {\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n if (hitTime) {\n defaultFields.queueTime = now() - hitTime;\n }\n if (isPageLoad && this.opts.pageLoadsMetricIndex) {\n defaultFields['metric' + this.opts.pageLoadsMetricIndex] = 1;\n }\n\n this.tracker.send('pageview',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Detects changes to the tracker object and triggers an update if the page\n * field has changed.\n * @param {function((Object|string), (string|undefined))} originalMethod\n * A reference to the overridden method.\n * @return {function((Object|string), (string|undefined))}\n */\n trackerSetOverride(originalMethod) {\n return (field, value) => {\n /** @type {!FieldsObj} */\n const fields = isObject(field) ? field : {[field]: value};\n if (fields.page && fields.page !== this.tracker.get('page')) {\n if (this.lastPageState == VISIBLE) {\n this.handleChange();\n }\n }\n originalMethod(field, value);\n };\n }\n\n /**\n * Calculates the time since the last visibility change event in the current\n * session. If the session has expired the reported time is zero.\n * @param {PageVisibilityStoreData} lastStoredChange\n * @param {{hitTime: (number|undefined)}=} param1\n * hitTime: The time of the current hit (defaults to now).\n * @return {number} The time (in ms) since the last change.\n */\n getTimeSinceLastStoredChange(lastStoredChange, {hitTime} = {}) {\n return lastStoredChange.time ?\n (hitTime || now()) - lastStoredChange.time : 0;\n }\n\n /**\n * Handles responding to the `storage` event.\n * The code on this page needs to be informed when other tabs or windows are\n * updating the stored page visibility state data. This method checks to see\n * if a hidden state is stored when there are still visible tabs open, which\n * can happen if multiple windows are open at the same time.\n * @param {PageVisibilityStoreData} newData\n * @param {PageVisibilityStoreData} oldData\n */\n handleExternalStoreSet(newData, oldData) {\n // If the change times are the same, then the previous write only\n // updated the active page ID. It didn't enter a new state and thus no\n // hits should be sent.\n if (newData.time == oldData.time) return;\n\n // Page Visibility events must be sent by the tracker on the page\n // where the original event occurred. So if a change happens on another\n // page, but this page is where the previous change event occurred, then\n // this page is the one that needs to send the event (so all dimension\n // data is correct).\n if (oldData.pageId == PAGE_ID &&\n oldData.state == VISIBLE &&\n !this.session.isExpired(oldData.sessionId)) {\n this.sendPageVisibilityEvent(oldData, {hitTime: newData.time});\n }\n }\n\n /**\n * Handles responding to the `unload` event.\n * Since some browsers don't emit a `visibilitychange` event in all cases\n * where a page might be unloaded, it's necessary to hook into the `unload`\n * event to ensure the correct state is always stored.\n */\n handleWindowUnload() {\n // If the stored visibility state isn't hidden when the unload event\n // fires, it means the visibilitychange event didn't fire as the document\n // was being unloaded, so we invoke it manually.\n if (this.lastPageState != HIDDEN) {\n this.handleChange();\n }\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n this.store.destroy();\n this.session.destroy();\n MethodChain.remove(this.tracker, 'set', this.trackerSetOverride);\n window.removeEventListener('unload', this.handleWindowUnload);\n document.removeEventListener('visibilitychange', this.handleChange);\n }\n}\n\n\nprovide('pageVisibilityTracker', PageVisibilityTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj} from '../utilities';\n\n\n/**\n * Class for the `socialWidgetTracker` analytics.js plugin.\n * @implements {SocialWidgetTrackerPublicInterface}\n */\nclass SocialWidgetTracker {\n /**\n * Registers social tracking on tracker object.\n * Supports both declarative social tracking via HTML attributes as well as\n * tracking for social events when using official Twitter or Facebook widgets.\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.SOCIAL_WIDGET_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!window.addEventListener) return;\n\n /** @type {SocialWidgetTrackerOpts} */\n const defaultOpts = {\n fieldsObj: {},\n hitFilter: null,\n };\n\n this.opts = /** @type {SocialWidgetTrackerOpts} */ (\n assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Binds methods to `this`.\n this.addWidgetListeners = this.addWidgetListeners.bind(this);\n this.addTwitterEventHandlers = this.addTwitterEventHandlers.bind(this);\n this.handleTweetEvents = this.handleTweetEvents.bind(this);\n this.handleFollowEvents = this.handleFollowEvents.bind(this);\n this.handleLikeEvents = this.handleLikeEvents.bind(this);\n this.handleUnlikeEvents = this.handleUnlikeEvents.bind(this);\n\n if (document.readyState != 'complete') {\n // Adds the widget listeners after the window's `load` event fires.\n // If loading widgets using the officially recommended snippets, they\n // will be available at `window.load`. If not users can call the\n // `addWidgetListeners` method manually.\n window.addEventListener('load', this.addWidgetListeners);\n } else {\n this.addWidgetListeners();\n }\n }\n\n\n /**\n * Invokes the methods to add Facebook and Twitter widget event listeners.\n * Ensures the respective global namespaces are present before adding.\n */\n addWidgetListeners() {\n if (window.FB) this.addFacebookEventHandlers();\n if (window.twttr) this.addTwitterEventHandlers();\n }\n\n /**\n * Adds event handlers for the \"tweet\" and \"follow\" events emitted by the\n * official tweet and follow buttons. Note: this does not capture tweet or\n * follow events emitted by other Twitter widgets (tweet, timeline, etc.).\n */\n addTwitterEventHandlers() {\n try {\n window.twttr.ready(() => {\n window.twttr.events.bind('tweet', this.handleTweetEvents);\n window.twttr.events.bind('follow', this.handleFollowEvents);\n });\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Removes event handlers for the \"tweet\" and \"follow\" events emitted by the\n * official tweet and follow buttons.\n */\n removeTwitterEventHandlers() {\n try {\n window.twttr.ready(() => {\n window.twttr.events.unbind('tweet', this.handleTweetEvents);\n window.twttr.events.unbind('follow', this.handleFollowEvents);\n });\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Adds event handlers for the \"like\" and \"unlike\" events emitted by the\n * official Facebook like button.\n */\n addFacebookEventHandlers() {\n try {\n window.FB.Event.subscribe('edge.create', this.handleLikeEvents);\n window.FB.Event.subscribe('edge.remove', this.handleUnlikeEvents);\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Removes event handlers for the \"like\" and \"unlike\" events emitted by the\n * official Facebook like button.\n */\n removeFacebookEventHandlers() {\n try {\n window.FB.Event.unsubscribe('edge.create', this.handleLikeEvents);\n window.FB.Event.unsubscribe('edge.remove', this.handleUnlikeEvents);\n } catch(err) {\n // Do nothing.\n }\n }\n\n /**\n * Handles `tweet` events emitted by the Twitter JS SDK.\n * @param {TwttrEvent} event The Twitter event object passed to the handler.\n */\n handleTweetEvents(event) {\n // Ignores tweets from widgets that aren't the tweet button.\n if (event.region != 'tweet') return;\n\n const url = event.data.url || event.target.getAttribute('data-url') ||\n location.href;\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Twitter',\n socialAction: 'tweet',\n socialTarget: url,\n };\n this.tracker.send('social',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter, event.target, event));\n }\n\n /**\n * Handles `follow` events emitted by the Twitter JS SDK.\n * @param {TwttrEvent} event The Twitter event object passed to the handler.\n */\n handleFollowEvents(event) {\n // Ignore follows from widgets that aren't the follow button.\n if (event.region != 'follow') return;\n\n const screenName = event.data.screen_name ||\n event.target.getAttribute('data-screen-name');\n\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Twitter',\n socialAction: 'follow',\n socialTarget: screenName,\n };\n this.tracker.send('social',\n createFieldsObj(defaultFields, this.opts.fieldsObj,\n this.tracker, this.opts.hitFilter, event.target, event));\n }\n\n /**\n * Handles `like` events emitted by the Facebook JS SDK.\n * @param {string} url The URL corresponding to the like event.\n */\n handleLikeEvents(url) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Facebook',\n socialAction: 'like',\n socialTarget: url,\n };\n this.tracker.send('social', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Handles `unlike` events emitted by the Facebook JS SDK.\n * @param {string} url The URL corresponding to the unlike event.\n */\n handleUnlikeEvents(url) {\n /** @type {FieldsObj} */\n const defaultFields = {\n transport: 'beacon',\n socialNetwork: 'Facebook',\n socialAction: 'unlike',\n socialTarget: url,\n };\n this.tracker.send('social', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n\n /**\n * Removes all event listeners and instance properties.\n */\n remove() {\n window.removeEventListener('load', this.addWidgetListeners);\n this.removeFacebookEventHandlers();\n this.removeTwitterEventHandlers();\n }\n}\n\n\nprovide('socialWidgetTracker', SocialWidgetTracker);\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport MethodChain from '../method-chain';\nimport provide from '../provide';\nimport {plugins, trackUsage} from '../usage';\nimport {assign, createFieldsObj} from '../utilities';\n\n\n/**\n * Class for the `urlChangeTracker` analytics.js plugin.\n * @implements {UrlChangeTrackerPublicInterface}\n */\nclass UrlChangeTracker {\n /**\n * Adds handler for the history API methods\n * @param {!Tracker} tracker Passed internally by analytics.js\n * @param {?Object} opts Passed by the require command.\n */\n constructor(tracker, opts) {\n trackUsage(tracker, plugins.URL_CHANGE_TRACKER);\n\n // Feature detects to prevent errors in unsupporting browsers.\n if (!history.pushState || !window.addEventListener) return;\n\n /** @type {UrlChangeTrackerOpts} */\n const defaultOpts = {\n shouldTrackUrlChange: this.shouldTrackUrlChange,\n trackReplaceState: false,\n fieldsObj: {},\n hitFilter: null,\n };\n\n this.opts = /** @type {UrlChangeTrackerOpts} */ (assign(defaultOpts, opts));\n\n this.tracker = tracker;\n\n // Sets the initial page field.\n // Don't set this on the tracker yet so campaign data can be retreived\n // from the location field.\n this.path = getPath();\n\n // Binds methods.\n this.pushStateOverride = this.pushStateOverride.bind(this);\n this.replaceStateOverride = this.replaceStateOverride.bind(this);\n this.handlePopState = this.handlePopState.bind(this);\n\n // Watches for history changes.\n MethodChain.add(history, 'pushState', this.pushStateOverride);\n MethodChain.add(history, 'replaceState', this.replaceStateOverride);\n window.addEventListener('popstate', this.handlePopState);\n }\n\n /**\n * Handles invocations of the native `history.pushState` and calls\n * `handleUrlChange()` indicating that the history updated.\n * @param {!Function} originalMethod A reference to the overridden method.\n * @return {!Function}\n */\n pushStateOverride(originalMethod) {\n return (...args) => {\n originalMethod(...args);\n this.handleUrlChange(true);\n };\n }\n\n /**\n * Handles invocations of the native `history.replaceState` and calls\n * `handleUrlChange()` indicating that history was replaced.\n * @param {!Function} originalMethod A reference to the overridden method.\n * @return {!Function}\n */\n replaceStateOverride(originalMethod) {\n return (...args) => {\n originalMethod(...args);\n this.handleUrlChange(false);\n };\n }\n\n /**\n * Handles responding to the popstate event and calls\n * `handleUrlChange()` indicating that history was updated.\n */\n handlePopState() {\n this.handleUrlChange(true);\n }\n\n /**\n * Updates the page and title fields on the tracker and sends a pageview\n * if a new history entry was created.\n * @param {boolean} historyDidUpdate True if the history was changed via\n * `pushState()` or the `popstate` event. False if the history was just\n * modified via `replaceState()`.\n */\n handleUrlChange(historyDidUpdate) {\n // Calls the update logic asychronously to help ensure that app logic\n // responding to the URL change happens prior to this.\n setTimeout(() => {\n const oldPath = this.path;\n const newPath = getPath();\n\n if (oldPath != newPath &&\n this.opts.shouldTrackUrlChange.call(this, newPath, oldPath)) {\n this.path = newPath;\n this.tracker.set({\n page: newPath,\n title: document.title,\n });\n\n if (historyDidUpdate || this.opts.trackReplaceState) {\n /** @type {FieldsObj} */\n const defaultFields = {transport: 'beacon'};\n this.tracker.send('pageview', createFieldsObj(defaultFields,\n this.opts.fieldsObj, this.tracker, this.opts.hitFilter));\n }\n }\n }, 0);\n }\n\n /**\n * Determines whether or not the tracker should send a hit with the new page\n * data. This default implementation can be overrided in the config options.\n * @param {string} newPath The path after the URL change.\n * @param {string} oldPath The path prior to the URL change.\n * @return {boolean} Whether or not the URL change should be tracked.\n */\n shouldTrackUrlChange(newPath, oldPath) {\n return !!(newPath && oldPath);\n }\n\n /**\n * Removes all event listeners and restores overridden methods.\n */\n remove() {\n MethodChain.remove(history, 'pushState', this.pushStateOverride);\n MethodChain.remove(history, 'replaceState', this.replaceStateOverride);\n window.removeEventListener('popstate', this.handlePopState);\n }\n}\n\n\nprovide('urlChangeTracker', UrlChangeTracker);\n\n\n/**\n * @return {string} The path value of the current URL.\n */\nfunction getPath() {\n return location.pathname + location.search;\n}\n",null,null,null,"window.addEvent('domready', function () {\r\n // Add IE class\r\n if (Browser.ie) {\r\n document.id(document.body).addClass('ie');\r\n }\r\n\r\n // Add GA tracking attributes\r\n $$(document.links).filter(function (a) {\r\n if (a.href.test('.pdf$', 'i')) {\r\n a.set({\r\n 'ga-on': 'click',\r\n 'ga-event-category': 'Download',\r\n 'ga-event-action': 'click',\r\n 'ga-event-label': a.href\r\n });\r\n }\r\n });\r\n\r\n // Barometer\r\n $$('#container .barometer .content').each(function (element) {\r\n var barometer = new Barometer(element, {\r\n ga_tracker: window.pageTracker,\r\n ga_actions_delay: {\r\n show: 2000\r\n }\r\n });\r\n\r\n // Get custom tracking category\r\n var name = element.getElement('h2'),\r\n period = element.getElement('p');\r\n if (name) {\r\n barometer.options.ga_category = name.get('text');\r\n if (period) {\r\n barometer.options.ga_category += ' ' + period.get('text');\r\n }\r\n }\r\n });\r\n\r\n // Open external links in new window\r\n $$(document.links).filter(function (a) {\r\n return !a.getProperty('target') && // Already has a target attribute\r\n (a.href.test('^http', 'i') && !a.href.test('^' + document.location.href.substring(0, document.location.href.indexOf('/', 8)), 'i')) || // Different domain name\r\n a.href.test('.pdf$', 'i') || // PDF extension\r\n (a.getProperty('rel') && a.getProperty('rel').contains('external', ' ')); // External link\r\n }).setProperty('target', '_blank');\r\n});"]}