{"version":3,"sources":["libs/underscore.js","libs/enquire.js","libs/amplify.core.js","core/global/state.js","libs/jquery.bbq.js","libs/waypoints.js","core/global/analytics.js","core/global/compensatrs.js","libs/jquery.unobtrusive-ajax.js","global.js","bootstrap.js"],"names":["root","this","previousUnderscore","_","breaker","ArrayProto","Array","prototype","ObjProto","Object","FuncProto","Function","push","slice","concat","toString","hasOwnProperty","nativeForEach","forEach","nativeMap","map","nativeReduce","reduce","nativeReduceRight","reduceRight","nativeFilter","filter","nativeEvery","every","nativeSome","some","nativeIndexOf","indexOf","nativeLastIndexOf","lastIndexOf","nativeIsArray","isArray","nativeKeys","keys","nativeBind","bind","obj","_wrapped","exports","module","VERSION","each","iterator","context","length","i","call","collect","results","value","index","list","reduceError","foldl","inject","memo","initial","arguments","TypeError","foldr","find","detect","predicate","result","any","select","reject","all","identity","contains","include","target","invoke","method","args","isFunc","isFunction","apply","pluck","key","property","where","attrs","matches","findWhere","max","Math","Infinity","lastComputed","computed","min","shuffle","rand","shuffled","random","sample","n","guard","values","lookupIterator","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","has","indexBy","countBy","sortedIndex","array","low","high","mid","toArray","size","first","head","take","last","rest","tail","drop","compact","flatten","input","shallow","output","isArguments","without","difference","partition","pass","fail","elem","uniq","unique","isSorted","seen","union","intersection","item","other","zip","object","from","hasIndex","range","start","stop","step","ceil","idx","ctor","func","bound","self","partial","boundArgs","position","bindAll","funcs","Error","f","memoize","hasher","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","once","ran","wrap","wrapper","compose","after","times","isObject","pairs","invert","functions","methods","names","extend","source","prop","pick","copy","omit","defaults","clone","tap","interceptor","eq","aStack","bStack","className","String","global","multiline","ignoreCase","aCtor","constructor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","name","isFinite","isNaN","parseFloat","isNumber","isBoolean","isNull","isUndefined","noConflict","constant","accum","floor","Date","getTime","entityMap","escape","&","<",">","\"","'","unescape","entityRegexes","RegExp","join","string","replace","match","mixin","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","\t","
","
","escaper","template","text","data","settings","render","matcher","offset","variable","e","chain","_chain","define","amd","factory","matchMedia","window","collection","fn","cont","QueryHandler","deferSetup","setup","MediaQuery","query","isUnconditional","handlers","mql","listener","assess","addListener","MediaQueryDispatch","queries","browserIsIncapable","initialised","on","off","unmatch","destroy","equals","addHandler","handler","qh","removeHandler","h","splice","clear","removeListener","action","register","q","shouldDegrade","unregister","undefined","subscriptions","amplify","publish","topic","topicSubscriptions","subscription","ret","callback","subscribe","priority","added","topicIndex","topics","split","topicLength","subscriptionInfo","unshift","unsubscribe","$","console","log","getBreakpoint","bp","bpDoc","document","documentElement","clientWidth","bpInner","innerWidth","oldIe","hasClass","is_string","arg","curry","aps","get_fragment","url","get_querystring","jq_param_sub","is_fragment","get_func","params","merge_mode","qs","url_params","hash","re_trim_fragment","re_trim_querystring","jq_deparam","str_fragment","str_querystring","jq_param","re_no_escape","decode","str_location","str_href","jq_deparam_sub","url_or_params","coerce","jq_fn_sub","mode","force_attr","that","attr","jq_elemUrlAttr","nodeName","toLowerCase","jq_param_fragment","jq_deparam_fragment","jq_bbq_pushState","jq_bbq_getState","decodeURIComponent","param","jq_bbq","bbq","jq_event_special","event","special","str_hashchange","str_elemUrlAttr","str_src","elemUrlAttr_cache","noEscape","chars","arr","encodeURIComponent","deparam","coerce_types","true","false","null","j","v","val","cur","keys_last","test","shift","base","iframe","img","form","link","script","pushState","has_args","getState","removeState","state","add","handleObj","new_handler","old_handler","Waypoint","element","keyCounter","Adapter","adapter","axis","horizontal","enabled","triggerPoint","Group","findOrCreate","Context","findOrCreateByElement","offsetAliases","allWaypoints","queueTrigger","direction","trigger","remove","disable","enable","refresh","next","invokeAll","allWaypointsArray","waypointKey","end","destroyAll","disableAll","enableAll","refreshAll","viewportHeight","innerHeight","clientHeight","viewportWidth","adapters","continuous","bottom-in-view","outerHeight","right-in-view","outerWidth","requestAnimationFrameShim","didScroll","didResize","oldScroll","x","scrollLeft","y","scrollTop","waypoints","vertical","waypointContextKey","contexts","windowContext","createThrottledScrollHandler","createThrottledResizeHandler","oldWindowLoad","onload","waypoint","checkEmpty","horizontalEmpty","isEmptyObject","verticalEmpty","isWindow","resizeHandler","handleResize","requestAnimationFrame","scrollHandler","handleScroll","isTouch","triggeredGroups","axes","newScroll","forward","backward","axisKey","isForward","wasBeforeTriggerPoint","nowAfterTriggerPoint","crossedForward","crossedBackward","groupKey","flushTriggers","contextOffset","contextScroll","contextDimension","offsetProp","top","contextModifier","wasBeforeScroll","nowAfterScroll","triggeredBackward","triggeredForward","adjustment","oldTriggerPoint","elementOffset","freshWaypoint","findByElement","contextId","requestFn","mozRequestAnimationFrame","webkitRequestAnimationFrame","byTriggerPoint","byReverseTriggerPoint","clearTriggerQueues","groups","triggerQueues","up","down","reverse","inArray","isLast","getWindow","defaultView","NoFrameworkAdapter","isWin","removeListeners","listeners","removeEventListener","eventParts","eventType","namespace","ns","type","ownerDocument","win","rect","getBoundingClientRect","pageYOffset","clientTop","pageXOffset","clientLeft","nsHandlers","nsTypeList","addEventListener","includeMargin","computedStyle","height","getComputedStyle","parseInt","marginTop","marginBottom","width","marginLeft","marginRight","merge","me","liveballURLPrefix","sendToLiveball","$links","newUrl","$this","visit","visitId","visitor","visitorId","querystring","trackScrollDepth","recordSdEvent","trackid","dataLayer","reference","querySelector","triggerOnce","sendOrientationToGA","orientation","body","getPropertyValue","fireDataOnloadOnAnchor","startIndex","endIndex","functionName","substring","arr1","arr2","JSON","parse","temp","il","EFTOURS","analytics","Modernizr","handleUnsupportedHtml5","support","transition","animate","customCSSDetection","addTest","testAllProps","documentMode","handleTelLinks","device","removeAttr","ie8FontFix","getElementsByTagName","style","createElement","styleSheet","cssText","appendChild","removeChild","fakePlaceholder","placeholder","inputField","focus","blur","closest","clearInput","addClass","getFunction","code","argNames","parts","isMethodProxySafe","asyncOnBeforeSend","xhr","setRequestHeader","asyncOnSuccess","contentType","getAttribute","toUpperCase","update","firstChild","html","contents","insertBefore","replaceWith","parsedHtml","parseHTML","asyncRequest","confirm","loading","duration","beforeSend","show","complete","hide","success","status","getResponseHeader","error","ajax","validate","validationInfo","data_validation","data_click","evt","preventDefault","href","$target","parents","round","pageX","pageY","removeData","clickInfo","serializeArray","compensatr","init","require"],"mappings":"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AAlW,GAEAkW,SAAA,UAAA,SAAAle,GACAA,EAAAie,WAIA7Z,OAAA,YAAA;AVNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/zCA,ADg0CA;AC/zCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvSA,ADwSA;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpIA,ADqIA;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACh4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvvBA,ADwvBA;ACvvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClLA,ADmLA;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA,ADqBA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"bootstrap.js","sourcesContent":["// Underscore.js 1.6.0\r\n// http://underscorejs.org\r\n// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\r\n// Underscore may be freely distributed under the MIT license.\r\n\r\n(function() {\r\n\r\n // Baseline setup\r\n // --------------\r\n\r\n // Establish the root object, `window` in the browser, or `exports` on the server.\r\n var root = this;\r\n\r\n // Save the previous value of the `_` variable.\r\n var previousUnderscore = root._;\r\n\r\n // Establish the object that gets returned to break out of a loop iteration.\r\n var breaker = {};\r\n\r\n // Save bytes in the minified (but not gzipped) version:\r\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\r\n\r\n // Create quick reference variables for speed access to core prototypes.\r\n var\r\n push = ArrayProto.push,\r\n slice = ArrayProto.slice,\r\n concat = ArrayProto.concat,\r\n toString = ObjProto.toString,\r\n hasOwnProperty = ObjProto.hasOwnProperty;\r\n\r\n // All **ECMAScript 5** native function implementations that we hope to use\r\n // are declared here.\r\n var\r\n nativeForEach = ArrayProto.forEach,\r\n nativeMap = ArrayProto.map,\r\n nativeReduce = ArrayProto.reduce,\r\n nativeReduceRight = ArrayProto.reduceRight,\r\n nativeFilter = ArrayProto.filter,\r\n nativeEvery = ArrayProto.every,\r\n nativeSome = ArrayProto.some,\r\n nativeIndexOf = ArrayProto.indexOf,\r\n nativeLastIndexOf = ArrayProto.lastIndexOf,\r\n nativeIsArray = Array.isArray,\r\n nativeKeys = Object.keys,\r\n nativeBind = FuncProto.bind;\r\n\r\n // Create a safe reference to the Underscore object for use below.\r\n var _ = function(obj) {\r\n if (obj instanceof _) return obj;\r\n if (!(this instanceof _)) return new _(obj);\r\n this._wrapped = obj;\r\n };\r\n\r\n // Export the Underscore object for **Node.js**, with\r\n // backwards-compatibility for the old `require()` API. If we're in\r\n // the browser, add `_` as a global object via a string identifier,\r\n // for Closure Compiler \"advanced\" mode.\r\n if (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n exports = module.exports = _;\r\n }\r\n exports._ = _;\r\n } else {\r\n root._ = _;\r\n }\r\n\r\n // Current version.\r\n _.VERSION = '1.6.0';\r\n\r\n // Collection Functions\r\n // --------------------\r\n\r\n // The cornerstone, an `each` implementation, aka `forEach`.\r\n // Handles objects with the built-in `forEach`, arrays, and raw objects.\r\n // Delegates to **ECMAScript 5**'s native `forEach` if available.\r\n var each = _.each = _.forEach = function(obj, iterator, context) {\r\n if (obj == null) return obj;\r\n if (nativeForEach && obj.forEach === nativeForEach) {\r\n obj.forEach(iterator, context);\r\n } else if (obj.length === +obj.length) {\r\n for (var i = 0, length = obj.length; i < length; i++) {\r\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\r\n }\r\n } else {\r\n var keys = _.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;\r\n }\r\n }\r\n return obj;\r\n };\r\n\r\n // Return the results of applying the iterator to each element.\r\n // Delegates to **ECMAScript 5**'s native `map` if available.\r\n _.map = _.collect = function(obj, iterator, context) {\r\n var results = [];\r\n if (obj == null) return results;\r\n if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\r\n each(obj, function(value, index, list) {\r\n results.push(iterator.call(context, value, index, list));\r\n });\r\n return results;\r\n };\r\n\r\n var reduceError = 'Reduce of empty array with no initial value';\r\n\r\n // **Reduce** builds up a single result from a list of values, aka `inject`,\r\n // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\r\n _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\r\n var initial = arguments.length > 2;\r\n if (obj == null) obj = [];\r\n if (nativeReduce && obj.reduce === nativeReduce) {\r\n if (context) iterator = _.bind(iterator, context);\r\n return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\r\n }\r\n each(obj, function(value, index, list) {\r\n if (!initial) {\r\n memo = value;\r\n initial = true;\r\n } else {\r\n memo = iterator.call(context, memo, value, index, list);\r\n }\r\n });\r\n if (!initial) throw new TypeError(reduceError);\r\n return memo;\r\n };\r\n\r\n // The right-associative version of reduce, also known as `foldr`.\r\n // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\r\n _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\r\n var initial = arguments.length > 2;\r\n if (obj == null) obj = [];\r\n if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\r\n if (context) iterator = _.bind(iterator, context);\r\n return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\r\n }\r\n var length = obj.length;\r\n if (length !== +length) {\r\n var keys = _.keys(obj);\r\n length = keys.length;\r\n }\r\n each(obj, function(value, index, list) {\r\n index = keys ? keys[--length] : --length;\r\n if (!initial) {\r\n memo = obj[index];\r\n initial = true;\r\n } else {\r\n memo = iterator.call(context, memo, obj[index], index, list);\r\n }\r\n });\r\n if (!initial) throw new TypeError(reduceError);\r\n return memo;\r\n };\r\n\r\n // Return the first value which passes a truth test. Aliased as `detect`.\r\n _.find = _.detect = function(obj, predicate, context) {\r\n var result;\r\n any(obj, function(value, index, list) {\r\n if (predicate.call(context, value, index, list)) {\r\n result = value;\r\n return true;\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n // Return all the elements that pass a truth test.\r\n // Delegates to **ECMAScript 5**'s native `filter` if available.\r\n // Aliased as `select`.\r\n _.filter = _.select = function(obj, predicate, context) {\r\n var results = [];\r\n if (obj == null) return results;\r\n if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context);\r\n each(obj, function(value, index, list) {\r\n if (predicate.call(context, value, index, list)) results.push(value);\r\n });\r\n return results;\r\n };\r\n\r\n // Return all the elements for which a truth test fails.\r\n _.reject = function(obj, predicate, context) {\r\n return _.filter(obj, function(value, index, list) {\r\n return !predicate.call(context, value, index, list);\r\n }, context);\r\n };\r\n\r\n // Determine whether all of the elements match a truth test.\r\n // Delegates to **ECMAScript 5**'s native `every` if available.\r\n // Aliased as `all`.\r\n _.every = _.all = function(obj, predicate, context) {\r\n predicate || (predicate = _.identity);\r\n var result = true;\r\n if (obj == null) return result;\r\n if (nativeEvery && obj.every === nativeEvery) return obj.every(predicate, context);\r\n each(obj, function(value, index, list) {\r\n if (!(result = result && predicate.call(context, value, index, list))) return breaker;\r\n });\r\n return !!result;\r\n };\r\n\r\n // Determine if at least one element in the object matches a truth test.\r\n // Delegates to **ECMAScript 5**'s native `some` if available.\r\n // Aliased as `any`.\r\n var any = _.some = _.any = function(obj, predicate, context) {\r\n predicate || (predicate = _.identity);\r\n var result = false;\r\n if (obj == null) return result;\r\n if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);\r\n each(obj, function(value, index, list) {\r\n if (result || (result = predicate.call(context, value, index, list))) return breaker;\r\n });\r\n return !!result;\r\n };\r\n\r\n // Determine if the array or object contains a given value (using `===`).\r\n // Aliased as `include`.\r\n _.contains = _.include = function(obj, target) {\r\n if (obj == null) return false;\r\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\r\n return any(obj, function(value) {\r\n return value === target;\r\n });\r\n };\r\n\r\n // Invoke a method (with arguments) on every item in a collection.\r\n _.invoke = function(obj, method) {\r\n var args = slice.call(arguments, 2);\r\n var isFunc = _.isFunction(method);\r\n return _.map(obj, function(value) {\r\n return (isFunc ? method : value[method]).apply(value, args);\r\n });\r\n };\r\n\r\n // Convenience version of a common use case of `map`: fetching a property.\r\n _.pluck = function(obj, key) {\r\n return _.map(obj, _.property(key));\r\n };\r\n\r\n // Convenience version of a common use case of `filter`: selecting only objects\r\n // containing specific `key:value` pairs.\r\n _.where = function(obj, attrs) {\r\n return _.filter(obj, _.matches(attrs));\r\n };\r\n\r\n // Convenience version of a common use case of `find`: getting the first object\r\n // containing specific `key:value` pairs.\r\n _.findWhere = function(obj, attrs) {\r\n return _.find(obj, _.matches(attrs));\r\n };\r\n\r\n // Return the maximum element or (element-based computation).\r\n // Can't optimize arrays of integers longer than 65,535 elements.\r\n // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)\r\n _.max = function(obj, iterator, context) {\r\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\r\n return Math.max.apply(Math, obj);\r\n }\r\n var result = -Infinity, lastComputed = -Infinity;\r\n each(obj, function(value, index, list) {\r\n var computed = iterator ? iterator.call(context, value, index, list) : value;\r\n if (computed > lastComputed) {\r\n result = value;\r\n lastComputed = computed;\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n // Return the minimum element (or element-based computation).\r\n _.min = function(obj, iterator, context) {\r\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\r\n return Math.min.apply(Math, obj);\r\n }\r\n var result = Infinity, lastComputed = Infinity;\r\n each(obj, function(value, index, list) {\r\n var computed = iterator ? iterator.call(context, value, index, list) : value;\r\n if (computed < lastComputed) {\r\n result = value;\r\n lastComputed = computed;\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n // Shuffle an array, using the modern version of the\r\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\r\n _.shuffle = function(obj) {\r\n var rand;\r\n var index = 0;\r\n var shuffled = [];\r\n each(obj, function(value) {\r\n rand = _.random(index++);\r\n shuffled[index - 1] = shuffled[rand];\r\n shuffled[rand] = value;\r\n });\r\n return shuffled;\r\n };\r\n\r\n // Sample **n** random values from a collection.\r\n // If **n** is not specified, returns a single random element.\r\n // The internal `guard` argument allows it to work with `map`.\r\n _.sample = function(obj, n, guard) {\r\n if (n == null || guard) {\r\n if (obj.length !== +obj.length) obj = _.values(obj);\r\n return obj[_.random(obj.length - 1)];\r\n }\r\n return _.shuffle(obj).slice(0, Math.max(0, n));\r\n };\r\n\r\n // An internal function to generate lookup iterators.\r\n var lookupIterator = function(value) {\r\n if (value == null) return _.identity;\r\n if (_.isFunction(value)) return value;\r\n return _.property(value);\r\n };\r\n\r\n // Sort the object's values by a criterion produced by an iterator.\r\n _.sortBy = function(obj, iterator, context) {\r\n iterator = lookupIterator(iterator);\r\n return _.pluck(_.map(obj, function(value, index, list) {\r\n return {\r\n value: value,\r\n index: index,\r\n criteria: iterator.call(context, value, index, list)\r\n };\r\n }).sort(function(left, right) {\r\n var a = left.criteria;\r\n var b = right.criteria;\r\n if (a !== b) {\r\n if (a > b || a === void 0) return 1;\r\n if (a < b || b === void 0) return -1;\r\n }\r\n return left.index - right.index;\r\n }), 'value');\r\n };\r\n\r\n // An internal function used for aggregate \"group by\" operations.\r\n var group = function(behavior) {\r\n return function(obj, iterator, context) {\r\n var result = {};\r\n iterator = lookupIterator(iterator);\r\n each(obj, function(value, index) {\r\n var key = iterator.call(context, value, index, obj);\r\n behavior(result, key, value);\r\n });\r\n return result;\r\n };\r\n };\r\n\r\n // Groups the object's values by a criterion. Pass either a string attribute\r\n // to group by, or a function that returns the criterion.\r\n _.groupBy = group(function(result, key, value) {\r\n _.has(result, key) ? result[key].push(value) : result[key] = [value];\r\n });\r\n\r\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\r\n // when you know that your index values will be unique.\r\n _.indexBy = group(function(result, key, value) {\r\n result[key] = value;\r\n });\r\n\r\n // Counts instances of an object that group by a certain criterion. Pass\r\n // either a string attribute to count by, or a function that returns the\r\n // criterion.\r\n _.countBy = group(function(result, key) {\r\n _.has(result, key) ? result[key]++ : result[key] = 1;\r\n });\r\n\r\n // Use a comparator function to figure out the smallest index at which\r\n // an object should be inserted so as to maintain order. Uses binary search.\r\n _.sortedIndex = function(array, obj, iterator, context) {\r\n iterator = lookupIterator(iterator);\r\n var value = iterator.call(context, obj);\r\n var low = 0, high = array.length;\r\n while (low < high) {\r\n var mid = (low + high) >>> 1;\r\n iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\r\n }\r\n return low;\r\n };\r\n\r\n // Safely create a real, live array from anything iterable.\r\n _.toArray = function(obj) {\r\n if (!obj) return [];\r\n if (_.isArray(obj)) return slice.call(obj);\r\n if (obj.length === +obj.length) return _.map(obj, _.identity);\r\n return _.values(obj);\r\n };\r\n\r\n // Return the number of elements in an object.\r\n _.size = function(obj) {\r\n if (obj == null) return 0;\r\n return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\r\n };\r\n\r\n // Array Functions\r\n // ---------------\r\n\r\n // Get the first element of an array. Passing **n** will return the first N\r\n // values in the array. Aliased as `head` and `take`. The **guard** check\r\n // allows it to work with `_.map`.\r\n _.first = _.head = _.take = function(array, n, guard) {\r\n if (array == null) return void 0;\r\n if ((n == null) || guard) return array[0];\r\n if (n < 0) return [];\r\n return slice.call(array, 0, n);\r\n };\r\n\r\n // Returns everything but the last entry of the array. Especially useful on\r\n // the arguments object. Passing **n** will return all the values in\r\n // the array, excluding the last N. The **guard** check allows it to work with\r\n // `_.map`.\r\n _.initial = function(array, n, guard) {\r\n return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\r\n };\r\n\r\n // Get the last element of an array. Passing **n** will return the last N\r\n // values in the array. The **guard** check allows it to work with `_.map`.\r\n _.last = function(array, n, guard) {\r\n if (array == null) return void 0;\r\n if ((n == null) || guard) return array[array.length - 1];\r\n return slice.call(array, Math.max(array.length - n, 0));\r\n };\r\n\r\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\r\n // Especially useful on the arguments object. Passing an **n** will return\r\n // the rest N values in the array. The **guard**\r\n // check allows it to work with `_.map`.\r\n _.rest = _.tail = _.drop = function(array, n, guard) {\r\n return slice.call(array, (n == null) || guard ? 1 : n);\r\n };\r\n\r\n // Trim out all falsy values from an array.\r\n _.compact = function(array) {\r\n return _.filter(array, _.identity);\r\n };\r\n\r\n // Internal implementation of a recursive `flatten` function.\r\n var flatten = function(input, shallow, output) {\r\n if (shallow && _.every(input, _.isArray)) {\r\n return concat.apply(output, input);\r\n }\r\n each(input, function(value) {\r\n if (_.isArray(value) || _.isArguments(value)) {\r\n shallow ? push.apply(output, value) : flatten(value, shallow, output);\r\n } else {\r\n output.push(value);\r\n }\r\n });\r\n return output;\r\n };\r\n\r\n // Flatten out an array, either recursively (by default), or just one level.\r\n _.flatten = function(array, shallow) {\r\n return flatten(array, shallow, []);\r\n };\r\n\r\n // Return a version of the array that does not contain the specified value(s).\r\n _.without = function(array) {\r\n return _.difference(array, slice.call(arguments, 1));\r\n };\r\n\r\n // Split an array into two arrays: one whose elements all satisfy the given\r\n // predicate, and one whose elements all do not satisfy the predicate.\r\n _.partition = function(array, predicate) {\r\n var pass = [], fail = [];\r\n each(array, function(elem) {\r\n (predicate(elem) ? pass : fail).push(elem);\r\n });\r\n return [pass, fail];\r\n };\r\n\r\n // Produce a duplicate-free version of the array. If the array has already\r\n // been sorted, you have the option of using a faster algorithm.\r\n // Aliased as `unique`.\r\n _.uniq = _.unique = function(array, isSorted, iterator, context) {\r\n if (_.isFunction(isSorted)) {\r\n context = iterator;\r\n iterator = isSorted;\r\n isSorted = false;\r\n }\r\n var initial = iterator ? _.map(array, iterator, context) : array;\r\n var results = [];\r\n var seen = [];\r\n each(initial, function(value, index) {\r\n if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\r\n seen.push(value);\r\n results.push(array[index]);\r\n }\r\n });\r\n return results;\r\n };\r\n\r\n // Produce an array that contains the union: each distinct element from all of\r\n // the passed-in arrays.\r\n _.union = function() {\r\n return _.uniq(_.flatten(arguments, true));\r\n };\r\n\r\n // Produce an array that contains every item shared between all the\r\n // passed-in arrays.\r\n _.intersection = function(array) {\r\n var rest = slice.call(arguments, 1);\r\n return _.filter(_.uniq(array), function(item) {\r\n return _.every(rest, function(other) {\r\n return _.contains(other, item);\r\n });\r\n });\r\n };\r\n\r\n // Take the difference between one array and a number of other arrays.\r\n // Only the elements present in just the first array will remain.\r\n _.difference = function(array) {\r\n var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\r\n return _.filter(array, function(value){ return !_.contains(rest, value); });\r\n };\r\n\r\n // Zip together multiple lists into a single array -- elements that share\r\n // an index go together.\r\n _.zip = function() {\r\n var length = _.max(_.pluck(arguments, 'length').concat(0));\r\n var results = new Array(length);\r\n for (var i = 0; i < length; i++) {\r\n results[i] = _.pluck(arguments, '' + i);\r\n }\r\n return results;\r\n };\r\n\r\n // Converts lists into objects. Pass either a single array of `[key, value]`\r\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\r\n // the corresponding values.\r\n _.object = function(list, values) {\r\n if (list == null) return {};\r\n var result = {};\r\n for (var i = 0, length = list.length; i < length; i++) {\r\n if (values) {\r\n result[list[i]] = values[i];\r\n } else {\r\n result[list[i][0]] = list[i][1];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\r\n // we need this function. Return the position of the first occurrence of an\r\n // item in an array, or -1 if the item is not included in the array.\r\n // Delegates to **ECMAScript 5**'s native `indexOf` if available.\r\n // If the array is large and already in sort order, pass `true`\r\n // for **isSorted** to use binary search.\r\n _.indexOf = function(array, item, isSorted) {\r\n if (array == null) return -1;\r\n var i = 0, length = array.length;\r\n if (isSorted) {\r\n if (typeof isSorted == 'number') {\r\n i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);\r\n } else {\r\n i = _.sortedIndex(array, item);\r\n return array[i] === item ? i : -1;\r\n }\r\n }\r\n if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\r\n for (; i < length; i++) if (array[i] === item) return i;\r\n return -1;\r\n };\r\n\r\n // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\r\n _.lastIndexOf = function(array, item, from) {\r\n if (array == null) return -1;\r\n var hasIndex = from != null;\r\n if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\r\n return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\r\n }\r\n var i = (hasIndex ? from : array.length);\r\n while (i--) if (array[i] === item) return i;\r\n return -1;\r\n };\r\n\r\n // Generate an integer Array containing an arithmetic progression. A port of\r\n // the native Python `range()` function. See\r\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\r\n _.range = function(start, stop, step) {\r\n if (arguments.length <= 1) {\r\n stop = start || 0;\r\n start = 0;\r\n }\r\n step = arguments[2] || 1;\r\n\r\n var length = Math.max(Math.ceil((stop - start) / step), 0);\r\n var idx = 0;\r\n var range = new Array(length);\r\n\r\n while(idx < length) {\r\n range[idx++] = start;\r\n start += step;\r\n }\r\n\r\n return range;\r\n };\r\n\r\n // Function (ahem) Functions\r\n // ------------------\r\n\r\n // Reusable constructor function for prototype setting.\r\n var ctor = function(){};\r\n\r\n // Create a function bound to a given object (assigning `this`, and arguments,\r\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\r\n // available.\r\n _.bind = function(func, context) {\r\n var args, bound;\r\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\r\n if (!_.isFunction(func)) throw new TypeError;\r\n args = slice.call(arguments, 2);\r\n return bound = function() {\r\n if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\r\n ctor.prototype = func.prototype;\r\n var self = new ctor;\r\n ctor.prototype = null;\r\n var result = func.apply(self, args.concat(slice.call(arguments)));\r\n if (Object(result) === result) return result;\r\n return self;\r\n };\r\n };\r\n\r\n // Partially apply a function by creating a version that has had some of its\r\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\r\n // as a placeholder, allowing any combination of arguments to be pre-filled.\r\n _.partial = function(func) {\r\n var boundArgs = slice.call(arguments, 1);\r\n return function() {\r\n var position = 0;\r\n var args = boundArgs.slice();\r\n for (var i = 0, length = args.length; i < length; i++) {\r\n if (args[i] === _) args[i] = arguments[position++];\r\n }\r\n while (position < arguments.length) args.push(arguments[position++]);\r\n return func.apply(this, args);\r\n };\r\n };\r\n\r\n // Bind a number of an object's methods to that object. Remaining arguments\r\n // are the method names to be bound. Useful for ensuring that all callbacks\r\n // defined on an object belong to it.\r\n _.bindAll = function(obj) {\r\n var funcs = slice.call(arguments, 1);\r\n if (funcs.length === 0) throw new Error('bindAll must be passed function names');\r\n each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\r\n return obj;\r\n };\r\n\r\n // Memoize an expensive function by storing its results.\r\n _.memoize = function(func, hasher) {\r\n var memo = {};\r\n hasher || (hasher = _.identity);\r\n return function() {\r\n var key = hasher.apply(this, arguments);\r\n return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\r\n };\r\n };\r\n\r\n // Delays a function for the given number of milliseconds, and then calls\r\n // it with the arguments supplied.\r\n _.delay = function(func, wait) {\r\n var args = slice.call(arguments, 2);\r\n return setTimeout(function(){ return func.apply(null, args); }, wait);\r\n };\r\n\r\n // Defers a function, scheduling it to run after the current call stack has\r\n // cleared.\r\n _.defer = function(func) {\r\n return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\r\n };\r\n\r\n // Returns a function, that, when invoked, will only be triggered at most once\r\n // during a given window of time. Normally, the throttled function will run\r\n // as much as it can, without ever going more than once per `wait` duration;\r\n // but if you'd like to disable the execution on the leading edge, pass\r\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\r\n _.throttle = function(func, wait, options) {\r\n var context, args, result;\r\n var timeout = null;\r\n var previous = 0;\r\n options || (options = {});\r\n var later = function() {\r\n previous = options.leading === false ? 0 : _.now();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n context = args = null;\r\n };\r\n return function() {\r\n var now = _.now();\r\n if (!previous && options.leading === false) previous = now;\r\n var remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n previous = now;\r\n result = func.apply(context, args);\r\n context = args = null;\r\n } else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n };\r\n\r\n // Returns a function, that, as long as it continues to be invoked, will not\r\n // be triggered. The function will be called after it stops being called for\r\n // N milliseconds. If `immediate` is passed, trigger the function on the\r\n // leading edge, instead of the trailing.\r\n _.debounce = function(func, wait, immediate) {\r\n var timeout, args, context, timestamp, result;\r\n\r\n var later = function() {\r\n var last = _.now() - timestamp;\r\n if (last < wait) {\r\n timeout = setTimeout(later, wait - last);\r\n } else {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n }\r\n };\r\n\r\n return function() {\r\n context = this;\r\n args = arguments;\r\n timestamp = _.now();\r\n var callNow = immediate && !timeout;\r\n if (!timeout) {\r\n timeout = setTimeout(later, wait);\r\n }\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n context = args = null;\r\n }\r\n\r\n return result;\r\n };\r\n };\r\n\r\n // Returns a function that will be executed at most one time, no matter how\r\n // often you call it. Useful for lazy initialization.\r\n _.once = function(func) {\r\n var ran = false, memo;\r\n return function() {\r\n if (ran) return memo;\r\n ran = true;\r\n memo = func.apply(this, arguments);\r\n func = null;\r\n return memo;\r\n };\r\n };\r\n\r\n // Returns the first function passed as an argument to the second,\r\n // allowing you to adjust arguments, run code before and after, and\r\n // conditionally execute the original function.\r\n _.wrap = function(func, wrapper) {\r\n return _.partial(wrapper, func);\r\n };\r\n\r\n // Returns a function that is the composition of a list of functions, each\r\n // consuming the return value of the function that follows.\r\n _.compose = function() {\r\n var funcs = arguments;\r\n return function() {\r\n var args = arguments;\r\n for (var i = funcs.length - 1; i >= 0; i--) {\r\n args = [funcs[i].apply(this, args)];\r\n }\r\n return args[0];\r\n };\r\n };\r\n\r\n // Returns a function that will only be executed after being called N times.\r\n _.after = function(times, func) {\r\n return function() {\r\n if (--times < 1) {\r\n return func.apply(this, arguments);\r\n }\r\n };\r\n };\r\n\r\n // Object Functions\r\n // ----------------\r\n\r\n // Retrieve the names of an object's properties.\r\n // Delegates to **ECMAScript 5**'s native `Object.keys`\r\n _.keys = function(obj) {\r\n if (!_.isObject(obj)) return [];\r\n if (nativeKeys) return nativeKeys(obj);\r\n var keys = [];\r\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\r\n return keys;\r\n };\r\n\r\n // Retrieve the values of an object's properties.\r\n _.values = function(obj) {\r\n var keys = _.keys(obj);\r\n var length = keys.length;\r\n var values = new Array(length);\r\n for (var i = 0; i < length; i++) {\r\n values[i] = obj[keys[i]];\r\n }\r\n return values;\r\n };\r\n\r\n // Convert an object into a list of `[key, value]` pairs.\r\n _.pairs = function(obj) {\r\n var keys = _.keys(obj);\r\n var length = keys.length;\r\n var pairs = new Array(length);\r\n for (var i = 0; i < length; i++) {\r\n pairs[i] = [keys[i], obj[keys[i]]];\r\n }\r\n return pairs;\r\n };\r\n\r\n // Invert the keys and values of an object. The values must be serializable.\r\n _.invert = function(obj) {\r\n var result = {};\r\n var keys = _.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n result[obj[keys[i]]] = keys[i];\r\n }\r\n return result;\r\n };\r\n\r\n // Return a sorted list of the function names available on the object.\r\n // Aliased as `methods`\r\n _.functions = _.methods = function(obj) {\r\n var names = [];\r\n for (var key in obj) {\r\n if (_.isFunction(obj[key])) names.push(key);\r\n }\r\n return names.sort();\r\n };\r\n\r\n // Extend a given object with all the properties in passed-in object(s).\r\n _.extend = function(obj) {\r\n each(slice.call(arguments, 1), function(source) {\r\n if (source) {\r\n for (var prop in source) {\r\n obj[prop] = source[prop];\r\n }\r\n }\r\n });\r\n return obj;\r\n };\r\n\r\n // Return a copy of the object only containing the whitelisted properties.\r\n _.pick = function(obj) {\r\n var copy = {};\r\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\r\n each(keys, function(key) {\r\n if (key in obj) copy[key] = obj[key];\r\n });\r\n return copy;\r\n };\r\n\r\n // Return a copy of the object without the blacklisted properties.\r\n _.omit = function(obj) {\r\n var copy = {};\r\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\r\n for (var key in obj) {\r\n if (!_.contains(keys, key)) copy[key] = obj[key];\r\n }\r\n return copy;\r\n };\r\n\r\n // Fill in a given object with default properties.\r\n _.defaults = function(obj) {\r\n each(slice.call(arguments, 1), function(source) {\r\n if (source) {\r\n for (var prop in source) {\r\n if (obj[prop] === void 0) obj[prop] = source[prop];\r\n }\r\n }\r\n });\r\n return obj;\r\n };\r\n\r\n // Create a (shallow-cloned) duplicate of an object.\r\n _.clone = function(obj) {\r\n if (!_.isObject(obj)) return obj;\r\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\r\n };\r\n\r\n // Invokes interceptor with the obj, and then returns obj.\r\n // The primary purpose of this method is to \"tap into\" a method chain, in\r\n // order to perform operations on intermediate results within the chain.\r\n _.tap = function(obj, interceptor) {\r\n interceptor(obj);\r\n return obj;\r\n };\r\n\r\n // Internal recursive comparison function for `isEqual`.\r\n var eq = function(a, b, aStack, bStack) {\r\n // Identical objects are equal. `0 === -0`, but they aren't identical.\r\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\r\n if (a === b) return a !== 0 || 1 / a == 1 / b;\r\n // A strict comparison is necessary because `null == undefined`.\r\n if (a == null || b == null) return a === b;\r\n // Unwrap any wrapped objects.\r\n if (a instanceof _) a = a._wrapped;\r\n if (b instanceof _) b = b._wrapped;\r\n // Compare `[[Class]]` names.\r\n var className = toString.call(a);\r\n if (className != toString.call(b)) return false;\r\n switch (className) {\r\n // Strings, numbers, dates, and booleans are compared by value.\r\n case '[object String]':\r\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\r\n // equivalent to `new String(\"5\")`.\r\n return a == String(b);\r\n case '[object Number]':\r\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\r\n // other numeric values.\r\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\r\n case '[object Date]':\r\n case '[object Boolean]':\r\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\r\n // millisecond representations. Note that invalid dates with millisecond representations\r\n // of `NaN` are not equivalent.\r\n return +a == +b;\r\n // RegExps are compared by their source patterns and flags.\r\n case '[object RegExp]':\r\n return a.source == b.source &&\r\n a.global == b.global &&\r\n a.multiline == b.multiline &&\r\n a.ignoreCase == b.ignoreCase;\r\n }\r\n if (typeof a != 'object' || typeof b != 'object') return false;\r\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\r\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\r\n var length = aStack.length;\r\n while (length--) {\r\n // Linear search. Performance is inversely proportional to the number of\r\n // unique nested structures.\r\n if (aStack[length] == a) return bStack[length] == b;\r\n }\r\n // Objects with different constructors are not equivalent, but `Object`s\r\n // from different frames are.\r\n var aCtor = a.constructor, bCtor = b.constructor;\r\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\r\n _.isFunction(bCtor) && (bCtor instanceof bCtor))\r\n && ('constructor' in a && 'constructor' in b)) {\r\n return false;\r\n }\r\n // Add the first object to the stack of traversed objects.\r\n aStack.push(a);\r\n bStack.push(b);\r\n var size = 0, result = true;\r\n // Recursively compare objects and arrays.\r\n if (className == '[object Array]') {\r\n // Compare array lengths to determine if a deep comparison is necessary.\r\n size = a.length;\r\n result = size == b.length;\r\n if (result) {\r\n // Deep compare the contents, ignoring non-numeric properties.\r\n while (size--) {\r\n if (!(result = eq(a[size], b[size], aStack, bStack))) break;\r\n }\r\n }\r\n } else {\r\n // Deep compare objects.\r\n for (var key in a) {\r\n if (_.has(a, key)) {\r\n // Count the expected number of properties.\r\n size++;\r\n // Deep compare each member.\r\n if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\r\n }\r\n }\r\n // Ensure that both objects contain the same number of properties.\r\n if (result) {\r\n for (key in b) {\r\n if (_.has(b, key) && !(size--)) break;\r\n }\r\n result = !size;\r\n }\r\n }\r\n // Remove the first object from the stack of traversed objects.\r\n aStack.pop();\r\n bStack.pop();\r\n return result;\r\n };\r\n\r\n // Perform a deep comparison to check if two objects are equal.\r\n _.isEqual = function(a, b) {\r\n return eq(a, b, [], []);\r\n };\r\n\r\n // Is a given array, string, or object empty?\r\n // An \"empty\" object has no enumerable own-properties.\r\n _.isEmpty = function(obj) {\r\n if (obj == null) return true;\r\n if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\r\n for (var key in obj) if (_.has(obj, key)) return false;\r\n return true;\r\n };\r\n\r\n // Is a given value a DOM element?\r\n _.isElement = function(obj) {\r\n return !!(obj && obj.nodeType === 1);\r\n };\r\n\r\n // Is a given value an array?\r\n // Delegates to ECMA5's native Array.isArray\r\n _.isArray = nativeIsArray || function(obj) {\r\n return toString.call(obj) == '[object Array]';\r\n };\r\n\r\n // Is a given variable an object?\r\n _.isObject = function(obj) {\r\n return obj === Object(obj);\r\n };\r\n\r\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\r\n each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\r\n _['is' + name] = function(obj) {\r\n return toString.call(obj) == '[object ' + name + ']';\r\n };\r\n });\r\n\r\n // Define a fallback version of the method in browsers (ahem, IE), where\r\n // there isn't any inspectable \"Arguments\" type.\r\n if (!_.isArguments(arguments)) {\r\n _.isArguments = function(obj) {\r\n return !!(obj && _.has(obj, 'callee'));\r\n };\r\n }\r\n\r\n // Optimize `isFunction` if appropriate.\r\n if (typeof (/./) !== 'function') {\r\n _.isFunction = function(obj) {\r\n return typeof obj === 'function';\r\n };\r\n }\r\n\r\n // Is a given object a finite number?\r\n _.isFinite = function(obj) {\r\n return isFinite(obj) && !isNaN(parseFloat(obj));\r\n };\r\n\r\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\r\n _.isNaN = function(obj) {\r\n return _.isNumber(obj) && obj != +obj;\r\n };\r\n\r\n // Is a given value a boolean?\r\n _.isBoolean = function(obj) {\r\n return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\r\n };\r\n\r\n // Is a given value equal to null?\r\n _.isNull = function(obj) {\r\n return obj === null;\r\n };\r\n\r\n // Is a given variable undefined?\r\n _.isUndefined = function(obj) {\r\n return obj === void 0;\r\n };\r\n\r\n // Shortcut function for checking if an object has a given property directly\r\n // on itself (in other words, not on a prototype).\r\n _.has = function(obj, key) {\r\n return hasOwnProperty.call(obj, key);\r\n };\r\n\r\n // Utility Functions\r\n // -----------------\r\n\r\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\r\n // previous owner. Returns a reference to the Underscore object.\r\n _.noConflict = function() {\r\n root._ = previousUnderscore;\r\n return this;\r\n };\r\n\r\n // Keep the identity function around for default iterators.\r\n _.identity = function(value) {\r\n return value;\r\n };\r\n\r\n _.constant = function(value) {\r\n return function () {\r\n return value;\r\n };\r\n };\r\n\r\n _.property = function(key) {\r\n return function(obj) {\r\n return obj[key];\r\n };\r\n };\r\n\r\n // Returns a predicate for checking whether an object has a given set of `key:value` pairs.\r\n _.matches = function(attrs) {\r\n return function(obj) {\r\n if (obj === attrs) return true; //avoid comparing an object to itself.\r\n for (var key in attrs) {\r\n if (attrs[key] !== obj[key])\r\n return false;\r\n }\r\n return true;\r\n }\r\n };\r\n\r\n // Run a function **n** times.\r\n _.times = function(n, iterator, context) {\r\n var accum = Array(Math.max(0, n));\r\n for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\r\n return accum;\r\n };\r\n\r\n // Return a random integer between min and max (inclusive).\r\n _.random = function(min, max) {\r\n if (max == null) {\r\n max = min;\r\n min = 0;\r\n }\r\n return min + Math.floor(Math.random() * (max - min + 1));\r\n };\r\n\r\n // A (possibly faster) way to get the current timestamp as an integer.\r\n _.now = Date.now || function() { return new Date().getTime(); };\r\n\r\n // List of HTML entities for escaping.\r\n var entityMap = {\r\n escape: {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n }\r\n };\r\n entityMap.unescape = _.invert(entityMap.escape);\r\n\r\n // Regexes containing the keys and values listed immediately above.\r\n var entityRegexes = {\r\n escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\r\n unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\r\n };\r\n\r\n // Functions for escaping and unescaping strings to/from HTML interpolation.\r\n _.each(['escape', 'unescape'], function(method) {\r\n _[method] = function(string) {\r\n if (string == null) return '';\r\n return ('' + string).replace(entityRegexes[method], function(match) {\r\n return entityMap[method][match];\r\n });\r\n };\r\n });\r\n\r\n // If the value of the named `property` is a function then invoke it with the\r\n // `object` as context; otherwise, return it.\r\n _.result = function(object, property) {\r\n if (object == null) return void 0;\r\n var value = object[property];\r\n return _.isFunction(value) ? value.call(object) : value;\r\n };\r\n\r\n // Add your own custom functions to the Underscore object.\r\n _.mixin = function(obj) {\r\n each(_.functions(obj), function(name) {\r\n var func = _[name] = obj[name];\r\n _.prototype[name] = function() {\r\n var args = [this._wrapped];\r\n push.apply(args, arguments);\r\n return result.call(this, func.apply(_, args));\r\n };\r\n });\r\n };\r\n\r\n // Generate a unique integer id (unique within the entire client session).\r\n // Useful for temporary DOM ids.\r\n var idCounter = 0;\r\n _.uniqueId = function(prefix) {\r\n var id = ++idCounter + '';\r\n return prefix ? prefix + id : id;\r\n };\r\n\r\n // By default, Underscore uses ERB-style template delimiters, change the\r\n // following template settings to use alternative delimiters.\r\n _.templateSettings = {\r\n evaluate : /<%([\\s\\S]+?)%>/g,\r\n interpolate : /<%=([\\s\\S]+?)%>/g,\r\n escape : /<%-([\\s\\S]+?)%>/g\r\n };\r\n\r\n // When customizing `templateSettings`, if you don't want to define an\r\n // interpolation, evaluation or escaping regex, we need one that is\r\n // guaranteed not to match.\r\n var noMatch = /(.)^/;\r\n\r\n // Certain characters need to be escaped so that they can be put into a\r\n // string literal.\r\n var escapes = {\r\n \"'\": \"'\",\r\n '\\\\': '\\\\',\r\n '\\r': 'r',\r\n '\\n': 'n',\r\n '\\t': 't',\r\n '\\u2028': 'u2028',\r\n '\\u2029': 'u2029'\r\n };\r\n\r\n var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\r\n\r\n // JavaScript micro-templating, similar to John Resig's implementation.\r\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\r\n // and correctly escapes quotes within interpolated code.\r\n _.template = function(text, data, settings) {\r\n var render;\r\n settings = _.defaults({}, settings, _.templateSettings);\r\n\r\n // Combine delimiters into one regular expression via alternation.\r\n var matcher = new RegExp([\r\n (settings.escape || noMatch).source,\r\n (settings.interpolate || noMatch).source,\r\n (settings.evaluate || noMatch).source\r\n ].join('|') + '|$', 'g');\r\n\r\n // Compile the template source, escaping string literals appropriately.\r\n var index = 0;\r\n var source = \"__p+='\";\r\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\r\n source += text.slice(index, offset)\r\n .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\r\n\r\n if (escape) {\r\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\r\n }\r\n if (interpolate) {\r\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\r\n }\r\n if (evaluate) {\r\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\r\n }\r\n index = offset + match.length;\r\n return match;\r\n });\r\n source += \"';\\n\";\r\n\r\n // If a variable is not specified, place data values in local scope.\r\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\r\n\r\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\r\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\r\n source + \"return __p;\\n\";\r\n\r\n try {\r\n render = new Function(settings.variable || 'obj', '_', source);\r\n } catch (e) {\r\n e.source = source;\r\n throw e;\r\n }\r\n\r\n if (data) return render(data, _);\r\n var template = function(data) {\r\n return render.call(this, data, _);\r\n };\r\n\r\n // Provide the compiled function source as a convenience for precompilation.\r\n template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\r\n\r\n return template;\r\n };\r\n\r\n // Add a \"chain\" function, which will delegate to the wrapper.\r\n _.chain = function(obj) {\r\n return _(obj).chain();\r\n };\r\n\r\n // OOP\r\n // ---------------\r\n // If Underscore is called as a function, it returns a wrapped object that\r\n // can be used OO-style. This wrapper holds altered versions of all the\r\n // underscore functions. Wrapped objects may be chained.\r\n\r\n // Helper function to continue chaining intermediate results.\r\n var result = function(obj) {\r\n return this._chain ? _(obj).chain() : obj;\r\n };\r\n\r\n // Add all of the Underscore functions to the wrapper object.\r\n _.mixin(_);\r\n\r\n // Add all mutator Array functions to the wrapper.\r\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\r\n var method = ArrayProto[name];\r\n _.prototype[name] = function() {\r\n var obj = this._wrapped;\r\n method.apply(obj, arguments);\r\n if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\r\n return result.call(this, obj);\r\n };\r\n });\r\n\r\n // Add all accessor Array functions to the wrapper.\r\n each(['concat', 'join', 'slice'], function(name) {\r\n var method = ArrayProto[name];\r\n _.prototype[name] = function() {\r\n return result.call(this, method.apply(this._wrapped, arguments));\r\n };\r\n });\r\n\r\n _.extend(_.prototype, {\r\n\r\n // Start chaining a wrapped Underscore object.\r\n chain: function() {\r\n this._chain = true;\r\n return this;\r\n },\r\n\r\n // Extracts the result from a wrapped and chained object.\r\n value: function() {\r\n return this._wrapped;\r\n }\r\n\r\n });\r\n\r\n // AMD registration happens at the end for compatibility with AMD loaders\r\n // that may not enforce next-turn semantics on modules. Even though general\r\n // practice for AMD registration is to be anonymous, underscore registers\r\n // as a named module because, like jQuery, it is a base library that is\r\n // popular enough to be bundled in a third party lib, but not be part of\r\n // an AMD load request. Those cases could generate an error when an\r\n // anonymous define() is called outside of a loader request.\r\n if (typeof define === 'function' && define.amd) {\r\n define('underscore', [], function() {\r\n return _;\r\n });\r\n }\r\n}).call(this);\r\n\n","/*!\r\n * enquire.js v2.1.2 - Awesome Media Queries in JavaScript\r\n * Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/enquire.js\r\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\r\n */\r\n\r\n; (function (name, context, factory) {\r\n var matchMedia = window.matchMedia;\r\n\r\n if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = factory(matchMedia);\r\n }\r\n else if (typeof define === 'function' && define.amd) {\r\n define('libs/enquire',[],function () {\r\n return (context[name] = factory(matchMedia));\r\n });\r\n }\r\n else {\r\n context[name] = factory(matchMedia);\r\n }\r\n}('enquire', this, function (matchMedia) {\r\n\r\n 'use strict';\r\n\r\n /*jshint unused:false */\r\n /**\r\n * Helper function for iterating over a collection\r\n *\r\n * @param collection\r\n * @param fn\r\n */\r\n function each(collection, fn) {\r\n var i = 0,\r\n length = collection.length,\r\n cont;\r\n\r\n for (i; i < length; i++) {\r\n cont = fn(collection[i], i);\r\n if (cont === false) {\r\n break; //allow early exit\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is an array\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if array, false otherwise\r\n */\r\n function isArray(target) {\r\n return Object.prototype.toString.apply(target) === '[object Array]';\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is a function\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if function, false otherwise\r\n */\r\n function isFunction(target) {\r\n return typeof target === 'function';\r\n }\r\n\r\n /**\r\n * Delegate to handle a media query being matched and unmatched.\r\n *\r\n * @param {object} options\r\n * @param {function} options.match callback for when the media query is matched\r\n * @param {function} [options.unmatch] callback for when the media query is unmatched\r\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\r\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\r\n * @constructor\r\n */\r\n function QueryHandler(options) {\r\n this.options = options;\r\n !options.deferSetup && this.setup();\r\n }\r\n QueryHandler.prototype = {\r\n\r\n /**\r\n * coordinates setup of the handler\r\n *\r\n * @function\r\n */\r\n setup: function () {\r\n if (this.options.setup) {\r\n this.options.setup();\r\n }\r\n this.initialised = true;\r\n },\r\n\r\n /**\r\n * coordinates setup and triggering of the handler\r\n *\r\n * @function\r\n */\r\n on: function () {\r\n !this.initialised && this.setup();\r\n this.options.match && this.options.match();\r\n },\r\n\r\n /**\r\n * coordinates the unmatch event for the handler\r\n *\r\n * @function\r\n */\r\n off: function () {\r\n this.options.unmatch && this.options.unmatch();\r\n },\r\n\r\n /**\r\n * called when a handler is to be destroyed.\r\n * delegates to the destroy or unmatch callbacks, depending on availability.\r\n *\r\n * @function\r\n */\r\n destroy: function () {\r\n this.options.destroy ? this.options.destroy() : this.off();\r\n },\r\n\r\n /**\r\n * determines equality by reference.\r\n * if object is supplied compare options, if function, compare match callback\r\n *\r\n * @function\r\n * @param {object || function} [target] the target for comparison\r\n */\r\n equals: function (target) {\r\n return this.options === target || this.options.match === target;\r\n }\r\n\r\n };\r\n /**\r\n * Represents a single media query, manages it's state and registered handlers for this query\r\n *\r\n * @constructor\r\n * @param {string} query the media query string\r\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\r\n */\r\n function MediaQuery(query, isUnconditional) {\r\n this.query = query;\r\n this.isUnconditional = isUnconditional;\r\n this.handlers = [];\r\n this.mql = matchMedia(query);\r\n\r\n var self = this;\r\n this.listener = function (mql) {\r\n self.mql = mql;\r\n self.assess();\r\n };\r\n this.mql.addListener(this.listener);\r\n }\r\n MediaQuery.prototype = {\r\n\r\n /**\r\n * add a handler for this query, triggering if already active\r\n *\r\n * @param {object} handler\r\n * @param {function} handler.match callback for when query is activated\r\n * @param {function} [handler.unmatch] callback for when query is deactivated\r\n * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\r\n * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\r\n */\r\n addHandler: function (handler) {\r\n var qh = new QueryHandler(handler);\r\n this.handlers.push(qh);\r\n\r\n this.matches() && qh.on();\r\n },\r\n\r\n /**\r\n * removes the given handler from the collection, and calls it's destroy methods\r\n * \r\n * @param {object || function} handler the handler to remove\r\n */\r\n removeHandler: function (handler) {\r\n var handlers = this.handlers;\r\n each(handlers, function (h, i) {\r\n if (h.equals(handler)) {\r\n h.destroy();\r\n return !handlers.splice(i, 1); //remove from array and exit each early\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Determine whether the media query should be considered a match\r\n * \r\n * @return {Boolean} true if media query can be considered a match, false otherwise\r\n */\r\n matches: function () {\r\n return this.mql.matches || this.isUnconditional;\r\n },\r\n\r\n /**\r\n * Clears all handlers and unbinds events\r\n */\r\n clear: function () {\r\n each(this.handlers, function (handler) {\r\n handler.destroy();\r\n });\r\n this.mql.removeListener(this.listener);\r\n this.handlers.length = 0; //clear array\r\n },\r\n\r\n /*\r\n * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\r\n */\r\n assess: function () {\r\n var action = this.matches() ? 'on' : 'off';\r\n\r\n each(this.handlers, function (handler) {\r\n handler[action]();\r\n });\r\n }\r\n };\r\n /**\r\n * Allows for registration of query handlers.\r\n * Manages the query handler's state and is responsible for wiring up browser events\r\n *\r\n * @constructor\r\n */\r\n function MediaQueryDispatch() {\r\n if (!matchMedia) {\r\n throw new Error('matchMedia not present, legacy browsers require a polyfill');\r\n }\r\n\r\n this.queries = {};\r\n this.browserIsIncapable = !matchMedia('only all').matches;\r\n }\r\n\r\n MediaQueryDispatch.prototype = {\r\n\r\n /**\r\n * Registers a handler for the given media query\r\n *\r\n * @param {string} q the media query\r\n * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\r\n * @param {function} options.match fired when query matched\r\n * @param {function} [options.unmatch] fired when a query is no longer matched\r\n * @param {function} [options.setup] fired when handler first triggered\r\n * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\r\n * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\r\n */\r\n register: function (q, options, shouldDegrade) {\r\n var queries = this.queries,\r\n isUnconditional = shouldDegrade && this.browserIsIncapable;\r\n\r\n if (!queries[q]) {\r\n queries[q] = new MediaQuery(q, isUnconditional);\r\n }\r\n\r\n //normalise to object in an array\r\n if (isFunction(options)) {\r\n options = { match: options };\r\n }\r\n if (!isArray(options)) {\r\n options = [options];\r\n }\r\n each(options, function (handler) {\r\n if (isFunction(handler)) {\r\n handler = { match: handler };\r\n }\r\n queries[q].addHandler(handler);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * unregisters a query and all it's handlers, or a specific handler for a query\r\n *\r\n * @param {string} q the media query to target\r\n * @param {object || function} [handler] specific handler to unregister\r\n */\r\n unregister: function (q, handler) {\r\n var query = this.queries[q];\r\n\r\n if (query) {\r\n if (handler) {\r\n query.removeHandler(handler);\r\n }\r\n else {\r\n query.clear();\r\n delete this.queries[q];\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n };\r\n\r\n return new MediaQueryDispatch();\r\n\r\n}));\n","(function(root) {\ndefine(\"libs/amplify.core\", [], function() {\n return (function() {\n/*!\r\n * Amplify Core 1.1.2\r\n *\r\n * Copyright 2011 - 2013 appendTo LLC. (http://appendto.com/team)\r\n * Dual licensed under the MIT or GPL licenses.\r\n * http://appendto.com/open-source-licenses\r\n *\r\n * http://amplifyjs.com\r\n */\r\n(function( global, undefined ) {\r\n\r\nvar slice = [].slice,\r\n\tsubscriptions = global.subscriptions = {};\r\n\r\nvar amplify = global.amplify = {\r\n\tpublish: function( topic ) {\r\n\t\tif ( typeof topic !== \"string\" ) {\r\n\t\t\tthrow new Error( \"You must provide a valid topic to publish.\" );\r\n\t\t}\r\n\r\n\t\tvar args = slice.call( arguments, 1 ),\r\n\t\t\ttopicSubscriptions,\r\n\t\t\tsubscription,\r\n\t\t\tlength,\r\n\t\t\ti = 0,\r\n\t\t\tret;\r\n\r\n\t\tif ( !subscriptions[ topic ] ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\ttopicSubscriptions = subscriptions[ topic ].slice();\r\n\t\tfor ( length = topicSubscriptions.length; i < length; i++ ) {\r\n\t\t\tsubscription = topicSubscriptions[ i ];\r\n\t\t\tret = subscription.callback.apply( subscription.context, args );\r\n\t\t\tif ( ret === false ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn ret !== false;\r\n\t},\r\n\r\n\tsubscribe: function( topic, context, callback, priority ) {\r\n\t\tif ( typeof topic !== \"string\" ) {\r\n\t\t\tthrow new Error( \"You must provide a valid topic to create a subscription.\" );\r\n\t\t}\r\n\r\n\t\tif ( arguments.length === 3 && typeof callback === \"number\" ) {\r\n\t\t\tpriority = callback;\r\n\t\t\tcallback = context;\r\n\t\t\tcontext = null;\r\n\t\t}\r\n\t\tif ( arguments.length === 2 ) {\r\n\t\t\tcallback = context;\r\n\t\t\tcontext = null;\r\n\t\t}\r\n\t\tpriority = priority || 10;\r\n\r\n\t\tvar topicIndex = 0,\r\n\t\t\ttopics = topic.split( /\\s/ ),\r\n\t\t\ttopicLength = topics.length,\r\n\t\t\tadded;\r\n\t\tfor ( ; topicIndex < topicLength; topicIndex++ ) {\r\n\t\t\ttopic = topics[ topicIndex ];\r\n\t\t\tadded = false;\r\n\t\t\tif ( !subscriptions[ topic ] ) {\r\n\t\t\t\tsubscriptions[ topic ] = [];\r\n\t\t\t}\r\n\r\n\t\t\tvar i = subscriptions[ topic ].length - 1,\r\n\t\t\t\tsubscriptionInfo = {\r\n\t\t\t\t\tcallback: callback,\r\n\t\t\t\t\tcontext: context,\r\n\t\t\t\t\tpriority: priority\r\n\t\t\t\t};\r\n\r\n\t\t\tfor ( ; i >= 0; i-- ) {\r\n\t\t\t\tif ( subscriptions[ topic ][ i ].priority <= priority ) {\r\n\t\t\t\t\tsubscriptions[ topic ].splice( i + 1, 0, subscriptionInfo );\r\n\t\t\t\t\tadded = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( !added ) {\r\n\t\t\t\tsubscriptions[ topic ].unshift( subscriptionInfo );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn callback;\r\n\t},\r\n\r\n\tunsubscribe: function( topic, context, callback ) {\r\n\t\tif ( typeof topic !== \"string\" ) {\r\n\t\t\tthrow new Error( \"You must provide a valid topic to remove a subscription.\" );\r\n\t\t}\r\n\r\n\t\tif ( arguments.length === 2 ) {\r\n\t\t\tcallback = context;\r\n\t\t\tcontext = null;\r\n\t\t}\r\n\r\n\t\tif ( !subscriptions[ topic ] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar length = subscriptions[ topic ].length,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; i < length; i++ ) {\r\n\t\t\tif ( subscriptions[ topic ][ i ].callback === callback ) {\r\n\t\t\t\tif ( !context || subscriptions[ topic ][ i ].context === context ) {\r\n\t\t\t\t\tsubscriptions[ topic ].splice( i, 1 );\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Adjust counter and length for removed item\r\n\t\t\t\t\ti--;\r\n\t\t\t\t\tlength--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n}( this ) );\r\n\nreturn root.amplify = amplify;\n }).apply(root, arguments);\n});\n}(this));\n\n","// Functions to query the current browser state\r\ndefine('core/global/state',[\"jquery\"], function ($) {\r\n console.log(\"state\");\r\n return {\r\n\r\n //************ GET BREAKPOINT WIDTH ******************\r\n getBreakpoint : function() {\r\n var bp;\r\n bpDoc = document.documentElement.clientWidth;\r\n bpInner = window.innerWidth; // Use for css pixel\r\n bp = (typeof bpDoc !== \"undefined\" && typeof bpInner !== \"undefined\") ? bpInner : bpDoc;\r\n\r\n return bp;\r\n },\r\n\r\n //************ IS THIS AN OLD VERSION OF IE ******************\r\n // Temporary workaround for Swipe.js not working on IE8.\r\n oldIe : function() {\r\n return $('html').hasClass('lt-ie9');\r\n }\r\n }\r\n});\n","// KESM NOTE: I had to modify this script at line 980. Be careful when upgrading to a newer version (although hopefully my change will get fixed if another version comes out)\r\n\r\n/*!\r\n * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010\r\n * http://benalman.com/projects/jquery-bbq-plugin/\r\n * \r\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\r\n * Dual licensed under the MIT and GPL licenses.\r\n * http://benalman.com/about/license/\r\n */\r\n\r\n// Script: jQuery BBQ: Back Button & Query Library\r\n//\r\n// *Version: 1.2.1, Last updated: 2/17/2010*\r\n// \r\n// Project Home - http://benalman.com/projects/jquery-bbq-plugin/\r\n// GitHub - http://github.com/cowboy/jquery-bbq/\r\n// Source - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js\r\n// (Minified) - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (4.0kb)\r\n// \r\n// About: License\r\n// \r\n// Copyright (c) 2010 \"Cowboy\" Ben Alman,\r\n// Dual licensed under the MIT and GPL licenses.\r\n// http://benalman.com/about/license/\r\n// \r\n// About: Examples\r\n// \r\n// These working examples, complete with fully commented code, illustrate a few\r\n// ways in which this plugin can be used.\r\n// \r\n// Basic AJAX - http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/\r\n// Advanced AJAX - http://benalman.com/code/projects/jquery-bbq/examples/fragment-advanced/\r\n// jQuery UI Tabs - http://benalman.com/code/projects/jquery-bbq/examples/fragment-jquery-ui-tabs/\r\n// Deparam - http://benalman.com/code/projects/jquery-bbq/examples/deparam/\r\n// \r\n// About: Support and Testing\r\n// \r\n// Information about what version or versions of jQuery this plugin has been\r\n// tested with, what browsers it has been tested in, and where the unit tests\r\n// reside (so you can test it yourself).\r\n// \r\n// jQuery Versions - 1.3.2, 1.4.1, 1.4.2\r\n// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4,\r\n// Chrome 4-5, Opera 9.6-10.1.\r\n// Unit Tests - http://benalman.com/code/projects/jquery-bbq/unit/\r\n// \r\n// About: Release History\r\n// \r\n// 1.2.1 - (2/17/2010) Actually fixed the stale window.location Safari bug from\r\n// in BBQ, which was the main reason for the\r\n// previous release!\r\n// 1.2 - (2/16/2010) Integrated v1.2, which fixes a\r\n// Safari bug, the event can now be bound before DOM ready, and IE6/7\r\n// page should no longer scroll when the event is first bound. Also\r\n// added the method, and reworked the\r\n// internal \"add\" method to be compatible with\r\n// changes made to the jQuery 1.4.2 special events API.\r\n// 1.1.1 - (1/22/2010) Integrated v1.1, which fixes an\r\n// obscure IE8 EmulateIE7 meta tag compatibility mode bug.\r\n// 1.1 - (1/9/2010) Broke out the jQuery BBQ event.special \r\n// functionality into a separate plugin for users who want just the\r\n// basic event & back button support, without all the extra awesomeness\r\n// that BBQ provides. This plugin will be included as part of jQuery BBQ,\r\n// but also be available separately. See \r\n// plugin for more information. Also added the \r\n// method and added additional examples.\r\n// 1.0.3 - (12/2/2009) Fixed an issue in IE 6 where location.search and\r\n// location.hash would report incorrectly if the hash contained the ?\r\n// character. Also and \r\n// will no longer parse params out of a URL that doesn't contain ? or #,\r\n// respectively.\r\n// 1.0.2 - (10/10/2009) Fixed an issue in IE 6/7 where the hidden IFRAME caused\r\n// a \"This page contains both secure and nonsecure items.\" warning when\r\n// used on an https:// page.\r\n// 1.0.1 - (10/7/2009) Fixed an issue in IE 8. Since both \"IE7\" and \"IE8\r\n// Compatibility View\" modes erroneously report that the browser\r\n// supports the native window.onhashchange event, a slightly more\r\n// robust test needed to be added.\r\n// 1.0 - (10/2/2009) Initial release\r\n\r\ndefine('libs/jquery.bbq',['jquery'], function($) {\r\n\r\n '$:nomunge'; // Used by YUI compressor.\r\n\r\n // Some convenient shortcuts.\r\n var undefined,\r\n aps = Array.prototype.slice,\r\n decode = decodeURIComponent,\r\n\r\n // Method / object references.\r\n jq_param = $.param,\r\n jq_param_fragment,\r\n jq_deparam,\r\n jq_deparam_fragment,\r\n jq_bbq = $.bbq = $.bbq || {},\r\n jq_bbq_pushState,\r\n jq_bbq_getState,\r\n jq_elemUrlAttr,\r\n jq_event_special = $.event.special,\r\n\r\n // Reused strings.\r\n str_hashchange = 'hashchange',\r\n str_querystring = 'querystring',\r\n str_fragment = 'fragment',\r\n str_elemUrlAttr = 'elemUrlAttr',\r\n str_location = 'location',\r\n str_href = 'href',\r\n str_src = 'src',\r\n\r\n // Reused RegExp.\r\n re_trim_querystring = /^.*\\?|#.*$/g,\r\n re_trim_fragment = /^.*\\#/,\r\n re_no_escape,\r\n\r\n // Used by jQuery.elemUrlAttr.\r\n elemUrlAttr_cache = {};\r\n\r\n // A few commonly used bits, broken out to help reduce minified file size.\r\n\r\n function is_string(arg) {\r\n return typeof arg === 'string';\r\n };\r\n\r\n // Why write the same function twice? Let's curry! Mmmm, curry..\r\n\r\n function curry(func) {\r\n var args = aps.call(arguments, 1);\r\n\r\n return function() {\r\n return func.apply(this, args.concat(aps.call(arguments)));\r\n };\r\n };\r\n\r\n // Get location.hash (or what you'd expect location.hash to be) sans any\r\n // leading #. Thanks for making this necessary, Firefox!\r\n function get_fragment(url) {\r\n return url.replace(/^[^#]*#?(.*)$/, '$1');\r\n };\r\n\r\n // Get location.search (or what you'd expect location.search to be) sans any\r\n // leading #. Thanks for making this necessary, IE6!\r\n function get_querystring(url) {\r\n return url.replace(/(?:^[^?#]*\\?([^#]*).*$)?.*/, '$1');\r\n };\r\n\r\n // Section: Param (to string)\r\n // \r\n // Method: jQuery.param.querystring\r\n // \r\n // Retrieve the query string from a URL or if no arguments are passed, the\r\n // current window.location.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.param.querystring( [ url ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) A URL containing query string params to be parsed. If url\r\n // is not passed, the current window.location is used.\r\n // \r\n // Returns:\r\n // \r\n // (String) The parsed query string, with any leading \"?\" removed.\r\n //\r\n\r\n // Method: jQuery.param.querystring (build url)\r\n // \r\n // Merge a URL, with or without pre-existing query string params, plus any\r\n // object, params string or URL containing query string params into a new URL.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.param.querystring( url, params [, merge_mode ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) A valid URL for params to be merged into. This URL may\r\n // contain a query string and/or fragment (hash).\r\n // params - (String) A params string or URL containing query string params to\r\n // be merged into url.\r\n // params - (Object) A params object to be merged into url.\r\n // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\r\n // specified, and is as-follows:\r\n // \r\n // * 0: params in the params argument will override any query string\r\n // params in url.\r\n // * 1: any query string params in url will override params in the params\r\n // argument.\r\n // * 2: params argument will completely replace any query string in url.\r\n // \r\n // Returns:\r\n // \r\n // (String) Either a params string with urlencoded data or a URL with a\r\n // urlencoded query string in the format 'a=b&c=d&e=f'.\r\n\r\n // Method: jQuery.param.fragment\r\n // \r\n // Retrieve the fragment (hash) from a URL or if no arguments are passed, the\r\n // current window.location.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.param.fragment( [ url ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) A URL containing fragment (hash) params to be parsed. If\r\n // url is not passed, the current window.location is used.\r\n // \r\n // Returns:\r\n // \r\n // (String) The parsed fragment (hash) string, with any leading \"#\" removed.\r\n\r\n // Method: jQuery.param.fragment (build url)\r\n // \r\n // Merge a URL, with or without pre-existing fragment (hash) params, plus any\r\n // object, params string or URL containing fragment (hash) params into a new\r\n // URL.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.param.fragment( url, params [, merge_mode ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) A valid URL for params to be merged into. This URL may\r\n // contain a query string and/or fragment (hash).\r\n // params - (String) A params string or URL containing fragment (hash) params\r\n // to be merged into url.\r\n // params - (Object) A params object to be merged into url.\r\n // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\r\n // specified, and is as-follows:\r\n // \r\n // * 0: params in the params argument will override any fragment (hash)\r\n // params in url.\r\n // * 1: any fragment (hash) params in url will override params in the\r\n // params argument.\r\n // * 2: params argument will completely replace any query string in url.\r\n // \r\n // Returns:\r\n // \r\n // (String) Either a params string with urlencoded data or a URL with a\r\n // urlencoded fragment (hash) in the format 'a=b&c=d&e=f'.\r\n\r\n function jq_param_sub(is_fragment, get_func, url, params, merge_mode) {\r\n var result,\r\n qs,\r\n matches,\r\n url_params,\r\n hash;\r\n\r\n if (params !== undefined) {\r\n // Build URL by merging params into url string.\r\n\r\n // matches[1] = url part that precedes params, not including trailing ?/#\r\n // matches[2] = params, not including leading ?/#\r\n // matches[3] = if in 'querystring' mode, hash including leading #, otherwise ''\r\n matches = url.match(is_fragment ? /^([^#]*)\\#?(.*)$/ : /^([^#?]*)\\??([^#]*)(#?.*)/);\r\n\r\n // Get the hash if in 'querystring' mode, and it exists.\r\n hash = matches[3] || '';\r\n\r\n if (merge_mode === 2 && is_string(params)) {\r\n // If merge_mode is 2 and params is a string, merge the fragment / query\r\n // string into the URL wholesale, without converting it into an object.\r\n qs = params.replace(is_fragment ? re_trim_fragment : re_trim_querystring, '');\r\n\r\n } else {\r\n // Convert relevant params in url to object.\r\n url_params = jq_deparam(matches[2]);\r\n\r\n params = is_string(params)\r\n\r\n // Convert passed params string into object.\r\n ? jq_deparam[is_fragment ? str_fragment : str_querystring](params)\r\n\r\n // Passed params object.\r\n : params;\r\n\r\n qs = merge_mode === 2 ? params // passed params replace url params\r\n : merge_mode === 1 ? $.extend({}, params, url_params) // url params override passed params\r\n : $.extend({}, url_params, params); // passed params override url params\r\n\r\n // Convert params object to a string.\r\n qs = jq_param(qs);\r\n\r\n // Unescape characters specified via $.param.noEscape. Since only hash-\r\n // history users have requested this feature, it's only enabled for\r\n // fragment-related params strings.\r\n if (is_fragment) {\r\n qs = qs.replace(re_no_escape, decode);\r\n }\r\n }\r\n\r\n // Build URL from the base url, querystring and hash. In 'querystring'\r\n // mode, ? is only added if a query string exists. In 'fragment' mode, #\r\n // is always added.\r\n result = matches[1] + (is_fragment ? '#' : qs || !matches[1] ? '?' : '') + qs + hash;\r\n\r\n } else {\r\n // If URL was passed in, parse params from URL string, otherwise parse\r\n // params from window.location.\r\n result = get_func(url !== undefined ? url : window[str_location][str_href]);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n jq_param[str_querystring] = curry(jq_param_sub, 0, get_querystring);\r\n jq_param[str_fragment] = jq_param_fragment = curry(jq_param_sub, 1, get_fragment);\r\n\r\n // Method: jQuery.param.fragment.noEscape\r\n // \r\n // Specify characters that will be left unescaped when fragments are created\r\n // or merged using , or when the fragment is modified\r\n // using . This option only applies to serialized data\r\n // object fragments, and not set-as-string fragments. Does not affect the\r\n // query string. Defaults to \",/\" (comma, forward slash).\r\n // \r\n // Note that this is considered a purely aesthetic option, and will help to\r\n // create URLs that \"look pretty\" in the address bar or bookmarks, without\r\n // affecting functionality in any way. That being said, be careful to not\r\n // unescape characters that are used as delimiters or serve a special\r\n // purpose, such as the \"#?&=+\" (octothorpe, question mark, ampersand,\r\n // equals, plus) characters.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.param.fragment.noEscape( [ chars ] );\r\n // \r\n // Arguments:\r\n // \r\n // chars - (String) The characters to not escape in the fragment. If\r\n // unspecified, defaults to empty string (escape all characters).\r\n // \r\n // Returns:\r\n // \r\n // Nothing.\r\n\r\n jq_param_fragment.noEscape = function(chars) {\r\n chars = chars || '';\r\n var arr = $.map(chars.split(''), encodeURIComponent);\r\n re_no_escape = new RegExp(arr.join('|'), 'g');\r\n };\r\n\r\n // A sensible default. These are the characters people seem to complain about\r\n // \"uglifying up the URL\" the most.\r\n jq_param_fragment.noEscape(',/');\r\n\r\n // Section: Deparam (from string)\r\n // \r\n // Method: jQuery.deparam\r\n // \r\n // Deserialize a params string into an object, optionally coercing numbers,\r\n // booleans, null and undefined values; this method is the counterpart to the\r\n // internal jQuery.param method.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.deparam( params [, coerce ] );\r\n // \r\n // Arguments:\r\n // \r\n // params - (String) A params string to be parsed.\r\n // coerce - (Boolean) If true, coerces any numbers or true, false, null, and\r\n // undefined to their actual value. Defaults to false if omitted.\r\n // \r\n // Returns:\r\n // \r\n // (Object) An object representing the deserialized params string.\r\n\r\n $.deparam = jq_deparam = function(params, coerce) {\r\n var obj = {},\r\n coerce_types = { 'true': !0, 'false': !1, 'null': null };\r\n\r\n // Iterate over all name=value pairs.\r\n $.each(params.replace(/\\+/g, ' ').split('&'), function(j, v) {\r\n var param = v.split('='),\r\n key = decode(param[0]),\r\n val,\r\n cur = obj,\r\n i = 0,\r\n\r\n // If key is more complex than 'foo', like 'a[]' or 'a[b][c]', split it\r\n // into its component parts.\r\n keys = key.split(']['),\r\n keys_last = keys.length - 1;\r\n\r\n // If the first keys part contains [ and the last ends with ], then []\r\n // are correctly balanced.\r\n if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keys_last])) {\r\n // Remove the trailing ] from the last keys part.\r\n keys[keys_last] = keys[keys_last].replace(/\\]$/, '');\r\n\r\n // Split first keys part into two parts on the [ and add them back onto\r\n // the beginning of the keys array.\r\n keys = keys.shift().split('[').concat(keys);\r\n\r\n keys_last = keys.length - 1;\r\n } else {\r\n // Basic 'foo' style key.\r\n keys_last = 0;\r\n }\r\n\r\n // Are we dealing with a name=value pair, or just a name?\r\n if (param.length === 2) {\r\n val = decode(param[1]);\r\n\r\n // Coerce values.\r\n if (coerce) {\r\n val = val && !isNaN(val) ? +val // number\r\n : val === 'undefined' ? undefined // undefined\r\n : coerce_types[val] !== undefined ? coerce_types[val] // true, false, null\r\n : val; // string\r\n }\r\n\r\n if (keys_last) {\r\n // Complex key, build deep object structure based on a few rules:\r\n // * The 'cur' pointer starts at the object top-level.\r\n // * [] = array push (n is set to array length), [n] = array if n is \r\n // numeric, otherwise object.\r\n // * If at the last keys part, set the value.\r\n // * For each keys part, if the current level is undefined create an\r\n // object or array based on the type of the next keys part.\r\n // * Move the 'cur' pointer to the next level.\r\n // * Rinse & repeat.\r\n for (; i <= keys_last; i++) {\r\n key = keys[i] === '' ? cur.length : keys[i];\r\n cur = cur[key] = i < keys_last\r\n ? cur[key] || (keys[i + 1] && isNaN(keys[i + 1]) ? {} : [])\r\n : val;\r\n }\r\n\r\n } else {\r\n // Simple key, even simpler rules, since only scalars and shallow\r\n // arrays are allowed.\r\n\r\n if (Array.isArray(obj[key])) {\r\n // val is already an array, so push on the next value.\r\n obj[key].push(val);\r\n\r\n } else if (obj[key] !== undefined) {\r\n // val isn't an array, but since a second value has been specified,\r\n // convert val into an array.\r\n obj[key] = [obj[key], val];\r\n\r\n } else {\r\n // val is a scalar.\r\n obj[key] = val;\r\n }\r\n }\r\n\r\n } else if (key) {\r\n // No value was defined, so set something meaningful.\r\n obj[key] = coerce\r\n ? undefined\r\n : '';\r\n }\r\n });\r\n\r\n return obj;\r\n };\r\n\r\n // Method: jQuery.deparam.querystring\r\n // \r\n // Parse the query string from a URL or the current window.location,\r\n // deserializing it into an object, optionally coercing numbers, booleans,\r\n // null and undefined values.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.deparam.querystring( [ url ] [, coerce ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) An optional params string or URL containing query string\r\n // params to be parsed. If url is omitted, the current window.location\r\n // is used.\r\n // coerce - (Boolean) If true, coerces any numbers or true, false, null, and\r\n // undefined to their actual value. Defaults to false if omitted.\r\n // \r\n // Returns:\r\n // \r\n // (Object) An object representing the deserialized params string.\r\n\r\n // Method: jQuery.deparam.fragment\r\n // \r\n // Parse the fragment (hash) from a URL or the current window.location,\r\n // deserializing it into an object, optionally coercing numbers, booleans,\r\n // null and undefined values.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.deparam.fragment( [ url ] [, coerce ] );\r\n // \r\n // Arguments:\r\n // \r\n // url - (String) An optional params string or URL containing fragment (hash)\r\n // params to be parsed. If url is omitted, the current window.location\r\n // is used.\r\n // coerce - (Boolean) If true, coerces any numbers or true, false, null, and\r\n // undefined to their actual value. Defaults to false if omitted.\r\n // \r\n // Returns:\r\n // \r\n // (Object) An object representing the deserialized params string.\r\n\r\n function jq_deparam_sub(is_fragment, url_or_params, coerce) {\r\n if (url_or_params === undefined || typeof url_or_params === 'boolean') {\r\n // url_or_params not specified.\r\n coerce = url_or_params;\r\n url_or_params = jq_param[is_fragment ? str_fragment : str_querystring]();\r\n } else {\r\n url_or_params = is_string(url_or_params)\r\n ? url_or_params.replace(is_fragment ? re_trim_fragment : re_trim_querystring, '')\r\n : url_or_params;\r\n }\r\n\r\n return jq_deparam(url_or_params, coerce);\r\n };\r\n\r\n jq_deparam[str_querystring] = curry(jq_deparam_sub, 0);\r\n jq_deparam[str_fragment] = jq_deparam_fragment = curry(jq_deparam_sub, 1);\r\n\r\n // Section: Element manipulation\r\n // \r\n // Method: jQuery.elemUrlAttr\r\n // \r\n // Get the internal \"Default URL attribute per tag\" list, or augment the list\r\n // with additional tag-attribute pairs, in case the defaults are insufficient.\r\n // \r\n // In the and methods, this list\r\n // is used to determine which attribute contains the URL to be modified, if\r\n // an \"attr\" param is not specified.\r\n // \r\n // Default Tag-Attribute List:\r\n // \r\n // a - href\r\n // base - href\r\n // iframe - src\r\n // img - src\r\n // input - src\r\n // form - action\r\n // link - href\r\n // script - src\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.elemUrlAttr( [ tag_attr ] );\r\n // \r\n // Arguments:\r\n // \r\n // tag_attr - (Object) An object containing a list of tag names and their\r\n // associated default attribute names in the format { tag: 'attr', ... } to\r\n // be merged into the internal tag-attribute list.\r\n // \r\n // Returns:\r\n // \r\n // (Object) An object containing all stored tag-attribute values.\r\n\r\n // Only define function and set defaults if function doesn't already exist, as\r\n // the urlInternal plugin will provide this method as well.\r\n $[str_elemUrlAttr] || ($[str_elemUrlAttr] = function(obj) {\r\n return $.extend(elemUrlAttr_cache, obj);\r\n })({\r\n a: str_href,\r\n base: str_href,\r\n iframe: str_src,\r\n img: str_src,\r\n input: str_src,\r\n form: 'action',\r\n link: str_href,\r\n script: str_src\r\n });\r\n\r\n jq_elemUrlAttr = $[str_elemUrlAttr];\r\n\r\n // Method: jQuery.fn.querystring\r\n // \r\n // Update URL attribute in one or more elements, merging the current URL (with\r\n // or without pre-existing query string params) plus any params object or\r\n // string into a new URL, which is then set into that attribute. Like\r\n // , but for all elements in a jQuery\r\n // collection.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery('selector').querystring( [ attr, ] params [, merge_mode ] );\r\n // \r\n // Arguments:\r\n // \r\n // attr - (String) Optional name of an attribute that will contain a URL to\r\n // merge params or url into. See for a list of default\r\n // attributes.\r\n // params - (Object) A params object to be merged into the URL attribute.\r\n // params - (String) A URL containing query string params, or params string\r\n // to be merged into the URL attribute.\r\n // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\r\n // specified, and is as-follows:\r\n // \r\n // * 0: params in the params argument will override any params in attr URL.\r\n // * 1: any params in attr URL will override params in the params argument.\r\n // * 2: params argument will completely replace any query string in attr\r\n // URL.\r\n // \r\n // Returns:\r\n // \r\n // (jQuery) The initial jQuery collection of elements, but with modified URL\r\n // attribute values.\r\n\r\n // Method: jQuery.fn.fragment\r\n // \r\n // Update URL attribute in one or more elements, merging the current URL (with\r\n // or without pre-existing fragment/hash params) plus any params object or\r\n // string into a new URL, which is then set into that attribute. Like\r\n // , but for all elements in a jQuery\r\n // collection.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery('selector').fragment( [ attr, ] params [, merge_mode ] );\r\n // \r\n // Arguments:\r\n // \r\n // attr - (String) Optional name of an attribute that will contain a URL to\r\n // merge params into. See for a list of default\r\n // attributes.\r\n // params - (Object) A params object to be merged into the URL attribute.\r\n // params - (String) A URL containing fragment (hash) params, or params\r\n // string to be merged into the URL attribute.\r\n // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\r\n // specified, and is as-follows:\r\n // \r\n // * 0: params in the params argument will override any params in attr URL.\r\n // * 1: any params in attr URL will override params in the params argument.\r\n // * 2: params argument will completely replace any fragment (hash) in attr\r\n // URL.\r\n // \r\n // Returns:\r\n // \r\n // (jQuery) The initial jQuery collection of elements, but with modified URL\r\n // attribute values.\r\n\r\n function jq_fn_sub(mode, force_attr, params, merge_mode) {\r\n if (!is_string(params) && typeof params !== 'object') {\r\n // force_attr not specified.\r\n merge_mode = params;\r\n params = force_attr;\r\n force_attr = undefined;\r\n }\r\n\r\n return this.each(function() {\r\n var that = $(this),\r\n\r\n // Get attribute specified, or default specified via $.elemUrlAttr.\r\n attr = force_attr || jq_elemUrlAttr()[(this.nodeName || '').toLowerCase()] || '',\r\n\r\n // Get URL value.\r\n url = attr && that.attr(attr) || '';\r\n\r\n // Update attribute with new URL.\r\n that.attr(attr, jq_param[mode](url, params, merge_mode));\r\n });\r\n\r\n };\r\n\r\n $.fn[str_querystring] = curry(jq_fn_sub, str_querystring);\r\n $.fn[str_fragment] = curry(jq_fn_sub, str_fragment);\r\n\r\n // Section: History, hashchange event\r\n // \r\n // Method: jQuery.bbq.pushState\r\n // \r\n // Adds a 'state' into the browser history at the current position, setting\r\n // location.hash and triggering any bound callbacks\r\n // (provided the new state is different than the previous state).\r\n // \r\n // If no arguments are passed, an empty state is created, which is just a\r\n // shortcut for jQuery.bbq.pushState( {}, 2 ).\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.bbq.pushState( [ params [, merge_mode ] ] );\r\n // \r\n // Arguments:\r\n // \r\n // params - (String) A serialized params string or a hash string beginning\r\n // with # to merge into location.hash.\r\n // params - (Object) A params object to merge into location.hash.\r\n // merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\r\n // specified (unless a hash string beginning with # is specified, in which\r\n // case merge behavior defaults to 2), and is as-follows:\r\n // \r\n // * 0: params in the params argument will override any params in the\r\n // current state.\r\n // * 1: any params in the current state will override params in the params\r\n // argument.\r\n // * 2: params argument will completely replace current state.\r\n // \r\n // Returns:\r\n // \r\n // Nothing.\r\n // \r\n // Additional Notes:\r\n // \r\n // * Setting an empty state may cause the browser to scroll.\r\n // * Unlike the fragment and querystring methods, if a hash string beginning\r\n // with # is specified as the params agrument, merge_mode defaults to 2.\r\n\r\n jq_bbq.pushState = jq_bbq_pushState = function(params, merge_mode) {\r\n if (is_string(params) && /^#/.test(params) && merge_mode === undefined) {\r\n // Params string begins with # and merge_mode not specified, so completely\r\n // overwrite window.location.hash.\r\n merge_mode = 2;\r\n }\r\n\r\n var has_args = params !== undefined,\r\n // Merge params into window.location using $.param.fragment.\r\n url = jq_param_fragment(window[str_location][str_href],\r\n has_args ? params : {}, has_args ? merge_mode : 2);\r\n\r\n // Set new window.location.href. If hash is empty, use just # to prevent\r\n // browser from reloading the page. Note that Safari 3 & Chrome barf on\r\n // location.hash = '#'.\r\n window[str_location][str_href] = url + (/#/.test(url) ? '' : '#');\r\n };\r\n\r\n // Method: jQuery.bbq.getState\r\n // \r\n // Retrieves the current 'state' from the browser history, parsing\r\n // location.hash for a specific key or returning an object containing the\r\n // entire state, optionally coercing numbers, booleans, null and undefined\r\n // values.\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.bbq.getState( [ key ] [, coerce ] );\r\n // \r\n // Arguments:\r\n // \r\n // key - (String) An optional state key for which to return a value.\r\n // coerce - (Boolean) If true, coerces any numbers or true, false, null, and\r\n // undefined to their actual value. Defaults to false.\r\n // \r\n // Returns:\r\n // \r\n // (Anything) If key is passed, returns the value corresponding with that key\r\n // in the location.hash 'state', or undefined. If not, an object\r\n // representing the entire 'state' is returned.\r\n\r\n jq_bbq.getState = jq_bbq_getState = function(key, coerce) {\r\n return key === undefined || typeof key === 'boolean'\r\n ? jq_deparam_fragment(key) // 'key' really means 'coerce' here\r\n : jq_deparam_fragment(coerce)[key];\r\n };\r\n\r\n // Method: jQuery.bbq.removeState\r\n // \r\n // Remove one or more keys from the current browser history 'state', creating\r\n // a new state, setting location.hash and triggering any bound\r\n // callbacks (provided the new state is different than\r\n // the previous state).\r\n // \r\n // If no arguments are passed, an empty state is created, which is just a\r\n // shortcut for jQuery.bbq.pushState( {}, 2 ).\r\n // \r\n // Usage:\r\n // \r\n // > jQuery.bbq.removeState( [ key [, key ... ] ] );\r\n // \r\n // Arguments:\r\n // \r\n // key - (String) One or more key values to remove from the current state,\r\n // passed as individual arguments.\r\n // key - (Array) A single array argument that contains a list of key values\r\n // to remove from the current state.\r\n // \r\n // Returns:\r\n // \r\n // Nothing.\r\n // \r\n // Additional Notes:\r\n // \r\n // * Setting an empty state may cause the browser to scroll.\r\n\r\n jq_bbq.removeState = function(arr) {\r\n var state = {};\r\n\r\n // If one or more arguments is passed..\r\n if (arr !== undefined) {\r\n\r\n // Get the current state.\r\n state = jq_bbq_getState();\r\n\r\n // For each passed key, delete the corresponding property from the current\r\n // state.\r\n $.each(Array.isArray(arr) ? arr : arguments, function (i, v) {\r\n delete state[v];\r\n });\r\n }\r\n\r\n // Set the state, completely overriding any existing state.\r\n jq_bbq_pushState(state, 2);\r\n };\r\n\r\n // Event: hashchange event (BBQ)\r\n // \r\n // Usage in jQuery 1.4 and newer:\r\n // \r\n // In jQuery 1.4 and newer, the event object passed into any hashchange event\r\n // callback is augmented with a copy of the location.hash fragment at the time\r\n // the event was triggered as its event.fragment property. In addition, the\r\n // event.getState method operates on this property (instead of location.hash)\r\n // which allows this fragment-as-a-state to be referenced later, even after\r\n // window.location may have changed.\r\n // \r\n // Note that event.fragment and event.getState are not defined according to\r\n // W3C (or any other) specification, but will still be available whether or\r\n // not the hashchange event exists natively in the browser, because of the\r\n // utility they provide.\r\n // \r\n // The event.fragment property contains the output of \r\n // and the event.getState method is equivalent to the \r\n // method.\r\n // \r\n // > $(window).bind( 'hashchange', function( event ) {\r\n // > var hash_str = event.fragment,\r\n // > param_obj = event.getState(),\r\n // > param_val = event.getState( 'param_name' ),\r\n // > param_val_coerced = event.getState( 'param_name', true );\r\n // > ...\r\n // > });\r\n // \r\n // Usage in jQuery 1.3.2:\r\n // \r\n // In jQuery 1.3.2, the event object cannot to be augmented as in jQuery 1.4+,\r\n // so the fragment state isn't bound to the event object and must instead be\r\n // parsed using the and methods.\r\n // \r\n // > $(window).bind( 'hashchange', function( event ) {\r\n // > var hash_str = $.param.fragment(),\r\n // > param_obj = $.bbq.getState(),\r\n // > param_val = $.bbq.getState( 'param_name' ),\r\n // > param_val_coerced = $.bbq.getState( 'param_name', true );\r\n // > ...\r\n // > });\r\n // \r\n // Additional Notes:\r\n // \r\n // * Due to changes in the special events API, jQuery BBQ v1.2 or newer is\r\n // required to enable the augmented event object in jQuery 1.4.2 and newer.\r\n // * See for more detailed information.\r\n\r\n jq_event_special[str_hashchange] = $.extend(jq_event_special[str_hashchange], {\r\n\r\n // Augmenting the event object with the .fragment property and .getState\r\n // method requires jQuery 1.4 or newer. Note: with 1.3.2, everything will\r\n // work, but the event won't be augmented)\r\n add: function(handleObj) {\r\n var old_handler;\r\n\r\n function new_handler(e) {\r\n // e.fragment is set to the value of location.hash (with any leading #\r\n // removed) at the time the event is triggered.\r\n var hash = e[str_fragment] = jq_param_fragment();\r\n\r\n // e.getState() works just like $.bbq.getState(), but uses the\r\n // e.fragment property stored on the event object.\r\n e.getState = function(key, coerce) {\r\n return key === undefined || typeof key === 'boolean'\r\n ? jq_deparam(hash, key) // 'key' really means 'coerce' here\r\n : jq_deparam(hash, coerce)[key];\r\n };\r\n\r\n old_handler.apply(this, arguments);\r\n };\r\n\r\n // This may seem a little complicated, but it normalizes the special event\r\n // .add method between jQuery 1.4/1.4.1 and 1.4.2+\r\n if ($.isFunction(handleObj)) {\r\n // 1.4, 1.4.1\r\n old_handler = handleObj;\r\n return new_handler;\r\n } else {\r\n // 1.4.2+\r\n old_handler = handleObj.handler;\r\n handleObj.handler = new_handler;\r\n }\r\n }\r\n\r\n });\r\n\r\n\r\n});\n","/*!\r\nWaypoints - 4.0.1\r\nCopyright © 2011-2016 Caleb Troughton\r\nLicensed under the MIT license.\r\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\r\n*/\r\n(function () {\r\n 'use strict'\r\n\r\n var keyCounter = 0\r\n var allWaypoints = {}\r\n\r\n /* http://imakewebthings.com/waypoints/api/waypoint */\r\n function Waypoint(options) {\r\n if (!options) {\r\n throw new Error('No options passed to Waypoint constructor')\r\n }\r\n if (!options.element) {\r\n throw new Error('No element option passed to Waypoint constructor')\r\n }\r\n if (!options.handler) {\r\n throw new Error('No handler option passed to Waypoint constructor')\r\n }\r\n\r\n this.key = 'waypoint-' + keyCounter\r\n this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\r\n this.element = this.options.element\r\n this.adapter = new Waypoint.Adapter(this.element)\r\n this.callback = options.handler\r\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\r\n this.enabled = this.options.enabled\r\n this.triggerPoint = null\r\n this.group = Waypoint.Group.findOrCreate({\r\n name: this.options.group,\r\n axis: this.axis\r\n })\r\n this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\r\n\r\n if (Waypoint.offsetAliases[this.options.offset]) {\r\n this.options.offset = Waypoint.offsetAliases[this.options.offset]\r\n }\r\n this.group.add(this)\r\n this.context.add(this)\r\n allWaypoints[this.key] = this\r\n keyCounter += 1\r\n }\r\n\r\n /* Private */\r\n Waypoint.prototype.queueTrigger = function (direction) {\r\n this.group.queueTrigger(this, direction)\r\n }\r\n\r\n /* Private */\r\n Waypoint.prototype.trigger = function (args) {\r\n if (!this.enabled) {\r\n return\r\n }\r\n if (this.callback) {\r\n this.callback.apply(this, args)\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/destroy */\r\n Waypoint.prototype.destroy = function () {\r\n this.context.remove(this)\r\n this.group.remove(this)\r\n delete allWaypoints[this.key]\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/disable */\r\n Waypoint.prototype.disable = function () {\r\n this.enabled = false\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/enable */\r\n Waypoint.prototype.enable = function () {\r\n this.context.refresh()\r\n this.enabled = true\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/next */\r\n Waypoint.prototype.next = function () {\r\n return this.group.next(this)\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/previous */\r\n Waypoint.prototype.previous = function () {\r\n return this.group.previous(this)\r\n }\r\n\r\n /* Private */\r\n Waypoint.invokeAll = function (method) {\r\n var allWaypointsArray = []\r\n for (var waypointKey in allWaypoints) {\r\n allWaypointsArray.push(allWaypoints[waypointKey])\r\n }\r\n for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\r\n allWaypointsArray[i][method]()\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/destroy-all */\r\n Waypoint.destroyAll = function () {\r\n Waypoint.invokeAll('destroy')\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/disable-all */\r\n Waypoint.disableAll = function () {\r\n Waypoint.invokeAll('disable')\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/enable-all */\r\n Waypoint.enableAll = function () {\r\n Waypoint.Context.refreshAll()\r\n for (var waypointKey in allWaypoints) {\r\n allWaypoints[waypointKey].enabled = true\r\n }\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/refresh-all */\r\n Waypoint.refreshAll = function () {\r\n Waypoint.Context.refreshAll()\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/viewport-height */\r\n Waypoint.viewportHeight = function () {\r\n return window.innerHeight || document.documentElement.clientHeight\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/viewport-width */\r\n Waypoint.viewportWidth = function () {\r\n return document.documentElement.clientWidth\r\n }\r\n\r\n Waypoint.adapters = []\r\n\r\n Waypoint.defaults = {\r\n context: window,\r\n continuous: true,\r\n enabled: true,\r\n group: 'default',\r\n horizontal: false,\r\n offset: 0\r\n }\r\n\r\n Waypoint.offsetAliases = {\r\n 'bottom-in-view': function () {\r\n return this.context.innerHeight() - this.adapter.outerHeight()\r\n },\r\n 'right-in-view': function () {\r\n return this.context.innerWidth() - this.adapter.outerWidth()\r\n }\r\n }\r\n\r\n window.Waypoint = Waypoint\r\n}())\r\n ; (function () {\r\n 'use strict'\r\n\r\n function requestAnimationFrameShim(callback) {\r\n window.setTimeout(callback, 1000 / 60)\r\n }\r\n\r\n var keyCounter = 0\r\n var contexts = {}\r\n var Waypoint = window.Waypoint\r\n var oldWindowLoad = window.onload\r\n\r\n /* http://imakewebthings.com/waypoints/api/context */\r\n function Context(element) {\r\n this.element = element\r\n this.Adapter = Waypoint.Adapter\r\n this.adapter = new this.Adapter(element)\r\n this.key = 'waypoint-context-' + keyCounter\r\n this.didScroll = false\r\n this.didResize = false\r\n this.oldScroll = {\r\n x: this.adapter.scrollLeft(),\r\n y: this.adapter.scrollTop()\r\n }\r\n this.waypoints = {\r\n vertical: {},\r\n horizontal: {}\r\n }\r\n\r\n element.waypointContextKey = this.key\r\n contexts[element.waypointContextKey] = this\r\n keyCounter += 1\r\n if (!Waypoint.windowContext) {\r\n Waypoint.windowContext = true\r\n Waypoint.windowContext = new Context(window)\r\n }\r\n\r\n this.createThrottledScrollHandler()\r\n this.createThrottledResizeHandler()\r\n }\r\n\r\n /* Private */\r\n Context.prototype.add = function (waypoint) {\r\n var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\r\n this.waypoints[axis][waypoint.key] = waypoint\r\n this.refresh()\r\n }\r\n\r\n /* Private */\r\n Context.prototype.checkEmpty = function () {\r\n var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\r\n var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\r\n var isWindow = this.element == this.element.window\r\n if (horizontalEmpty && verticalEmpty && !isWindow) {\r\n this.adapter.off('.waypoints')\r\n delete contexts[this.key]\r\n }\r\n }\r\n\r\n /* Private */\r\n Context.prototype.createThrottledResizeHandler = function () {\r\n var self = this\r\n\r\n function resizeHandler() {\r\n self.handleResize()\r\n self.didResize = false\r\n }\r\n\r\n this.adapter.on('resize.waypoints', function () {\r\n if (!self.didResize) {\r\n self.didResize = true\r\n Waypoint.requestAnimationFrame(resizeHandler)\r\n }\r\n })\r\n }\r\n\r\n /* Private */\r\n Context.prototype.createThrottledScrollHandler = function () {\r\n var self = this\r\n function scrollHandler() {\r\n self.handleScroll()\r\n self.didScroll = false\r\n }\r\n\r\n this.adapter.on('scroll.waypoints', function () {\r\n if (!self.didScroll || Waypoint.isTouch) {\r\n self.didScroll = true\r\n Waypoint.requestAnimationFrame(scrollHandler)\r\n }\r\n })\r\n }\r\n\r\n /* Private */\r\n Context.prototype.handleResize = function () {\r\n Waypoint.Context.refreshAll()\r\n }\r\n\r\n /* Private */\r\n Context.prototype.handleScroll = function () {\r\n var triggeredGroups = {}\r\n var axes = {\r\n horizontal: {\r\n newScroll: this.adapter.scrollLeft(),\r\n oldScroll: this.oldScroll.x,\r\n forward: 'right',\r\n backward: 'left'\r\n },\r\n vertical: {\r\n newScroll: this.adapter.scrollTop(),\r\n oldScroll: this.oldScroll.y,\r\n forward: 'down',\r\n backward: 'up'\r\n }\r\n }\r\n\r\n for (var axisKey in axes) {\r\n var axis = axes[axisKey]\r\n var isForward = axis.newScroll > axis.oldScroll\r\n var direction = isForward ? axis.forward : axis.backward\r\n\r\n for (var waypointKey in this.waypoints[axisKey]) {\r\n var waypoint = this.waypoints[axisKey][waypointKey]\r\n if (waypoint.triggerPoint === null) {\r\n continue\r\n }\r\n var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\r\n var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\r\n var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\r\n var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\r\n if (crossedForward || crossedBackward) {\r\n waypoint.queueTrigger(direction)\r\n triggeredGroups[waypoint.group.id] = waypoint.group\r\n }\r\n }\r\n }\r\n\r\n for (var groupKey in triggeredGroups) {\r\n triggeredGroups[groupKey].flushTriggers()\r\n }\r\n\r\n this.oldScroll = {\r\n x: axes.horizontal.newScroll,\r\n y: axes.vertical.newScroll\r\n }\r\n }\r\n\r\n /* Private */\r\n Context.prototype.innerHeight = function () {\r\n /*eslint-disable eqeqeq */\r\n if (this.element == this.element.window) {\r\n return Waypoint.viewportHeight()\r\n }\r\n /*eslint-enable eqeqeq */\r\n return this.adapter.innerHeight()\r\n }\r\n\r\n /* Private */\r\n Context.prototype.remove = function (waypoint) {\r\n delete this.waypoints[waypoint.axis][waypoint.key]\r\n this.checkEmpty()\r\n }\r\n\r\n /* Private */\r\n Context.prototype.innerWidth = function () {\r\n /*eslint-disable eqeqeq */\r\n if (this.element == this.element.window) {\r\n return Waypoint.viewportWidth()\r\n }\r\n /*eslint-enable eqeqeq */\r\n return this.adapter.innerWidth()\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/context-destroy */\r\n Context.prototype.destroy = function () {\r\n var allWaypoints = []\r\n for (var axis in this.waypoints) {\r\n for (var waypointKey in this.waypoints[axis]) {\r\n allWaypoints.push(this.waypoints[axis][waypointKey])\r\n }\r\n }\r\n for (var i = 0, end = allWaypoints.length; i < end; i++) {\r\n allWaypoints[i].destroy()\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/context-refresh */\r\n Context.prototype.refresh = function () {\r\n /*eslint-disable eqeqeq */\r\n var isWindow = this.element == this.element.window\r\n /*eslint-enable eqeqeq */\r\n var contextOffset = isWindow ? undefined : this.adapter.offset()\r\n var triggeredGroups = {}\r\n var axes\r\n\r\n this.handleScroll()\r\n axes = {\r\n horizontal: {\r\n contextOffset: isWindow ? 0 : contextOffset.left,\r\n contextScroll: isWindow ? 0 : this.oldScroll.x,\r\n contextDimension: this.innerWidth(),\r\n oldScroll: this.oldScroll.x,\r\n forward: 'right',\r\n backward: 'left',\r\n offsetProp: 'left'\r\n },\r\n vertical: {\r\n contextOffset: isWindow ? 0 : contextOffset.top,\r\n contextScroll: isWindow ? 0 : this.oldScroll.y,\r\n contextDimension: this.innerHeight(),\r\n oldScroll: this.oldScroll.y,\r\n forward: 'down',\r\n backward: 'up',\r\n offsetProp: 'top'\r\n }\r\n }\r\n\r\n for (var axisKey in axes) {\r\n var axis = axes[axisKey]\r\n for (var waypointKey in this.waypoints[axisKey]) {\r\n var waypoint = this.waypoints[axisKey][waypointKey]\r\n var adjustment = waypoint.options.offset\r\n var oldTriggerPoint = waypoint.triggerPoint\r\n var elementOffset = 0\r\n var freshWaypoint = oldTriggerPoint == null\r\n var contextModifier, wasBeforeScroll, nowAfterScroll\r\n var triggeredBackward, triggeredForward\r\n\r\n if (waypoint.element !== waypoint.element.window) {\r\n elementOffset = waypoint.adapter.offset()[axis.offsetProp]\r\n }\r\n\r\n if (typeof adjustment === 'function') {\r\n adjustment = adjustment.apply(waypoint)\r\n }\r\n else if (typeof adjustment === 'string') {\r\n adjustment = parseFloat(adjustment)\r\n if (waypoint.options.offset.indexOf('%') > - 1) {\r\n adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\r\n }\r\n }\r\n\r\n contextModifier = axis.contextScroll - axis.contextOffset\r\n waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\r\n wasBeforeScroll = oldTriggerPoint < axis.oldScroll\r\n nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\r\n triggeredBackward = wasBeforeScroll && nowAfterScroll\r\n triggeredForward = !wasBeforeScroll && !nowAfterScroll\r\n\r\n if (!freshWaypoint && triggeredBackward) {\r\n waypoint.queueTrigger(axis.backward)\r\n triggeredGroups[waypoint.group.id] = waypoint.group\r\n }\r\n else if (!freshWaypoint && triggeredForward) {\r\n waypoint.queueTrigger(axis.forward)\r\n triggeredGroups[waypoint.group.id] = waypoint.group\r\n }\r\n else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\r\n waypoint.queueTrigger(axis.forward)\r\n triggeredGroups[waypoint.group.id] = waypoint.group\r\n }\r\n }\r\n }\r\n\r\n Waypoint.requestAnimationFrame(function () {\r\n for (var groupKey in triggeredGroups) {\r\n triggeredGroups[groupKey].flushTriggers()\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n /* Private */\r\n Context.findOrCreateByElement = function (element) {\r\n return Context.findByElement(element) || new Context(element)\r\n }\r\n\r\n /* Private */\r\n Context.refreshAll = function () {\r\n for (var contextId in contexts) {\r\n contexts[contextId].refresh()\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/context-find-by-element */\r\n Context.findByElement = function (element) {\r\n return contexts[element.waypointContextKey]\r\n }\r\n\r\n window.onload = function () {\r\n if (oldWindowLoad) {\r\n oldWindowLoad()\r\n }\r\n Context.refreshAll()\r\n }\r\n\r\n\r\n Waypoint.requestAnimationFrame = function (callback) {\r\n var requestFn = window.requestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n requestAnimationFrameShim\r\n requestFn.call(window, callback)\r\n }\r\n Waypoint.Context = Context\r\n }())\r\n ; (function () {\r\n 'use strict'\r\n\r\n function byTriggerPoint(a, b) {\r\n return a.triggerPoint - b.triggerPoint\r\n }\r\n\r\n function byReverseTriggerPoint(a, b) {\r\n return b.triggerPoint - a.triggerPoint\r\n }\r\n\r\n var groups = {\r\n vertical: {},\r\n horizontal: {}\r\n }\r\n var Waypoint = window.Waypoint\r\n\r\n /* http://imakewebthings.com/waypoints/api/group */\r\n function Group(options) {\r\n this.name = options.name\r\n this.axis = options.axis\r\n this.id = this.name + '-' + this.axis\r\n this.waypoints = []\r\n this.clearTriggerQueues()\r\n groups[this.axis][this.name] = this\r\n }\r\n\r\n /* Private */\r\n Group.prototype.add = function (waypoint) {\r\n this.waypoints.push(waypoint)\r\n }\r\n\r\n /* Private */\r\n Group.prototype.clearTriggerQueues = function () {\r\n this.triggerQueues = {\r\n up: [],\r\n down: [],\r\n left: [],\r\n right: []\r\n }\r\n }\r\n\r\n /* Private */\r\n Group.prototype.flushTriggers = function () {\r\n for (var direction in this.triggerQueues) {\r\n var waypoints = this.triggerQueues[direction]\r\n var reverse = direction === 'up' || direction === 'left'\r\n waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\r\n for (var i = 0, end = waypoints.length; i < end; i += 1) {\r\n var waypoint = waypoints[i]\r\n if (waypoint.options.continuous || i === waypoints.length - 1) {\r\n waypoint.trigger([direction])\r\n }\r\n }\r\n }\r\n this.clearTriggerQueues()\r\n }\r\n\r\n /* Private */\r\n Group.prototype.next = function (waypoint) {\r\n this.waypoints.sort(byTriggerPoint)\r\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\r\n var isLast = index === this.waypoints.length - 1\r\n return isLast ? null : this.waypoints[index + 1]\r\n }\r\n\r\n /* Private */\r\n Group.prototype.previous = function (waypoint) {\r\n this.waypoints.sort(byTriggerPoint)\r\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\r\n return index ? this.waypoints[index - 1] : null\r\n }\r\n\r\n /* Private */\r\n Group.prototype.queueTrigger = function (waypoint, direction) {\r\n this.triggerQueues[direction].push(waypoint)\r\n }\r\n\r\n /* Private */\r\n Group.prototype.remove = function (waypoint) {\r\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\r\n if (index > -1) {\r\n this.waypoints.splice(index, 1)\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/first */\r\n Group.prototype.first = function () {\r\n return this.waypoints[0]\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/last */\r\n Group.prototype.last = function () {\r\n return this.waypoints[this.waypoints.length - 1]\r\n }\r\n\r\n /* Private */\r\n Group.findOrCreate = function (options) {\r\n return groups[options.axis][options.name] || new Group(options)\r\n }\r\n\r\n Waypoint.Group = Group\r\n }())\r\n ; (function () {\r\n 'use strict'\r\n\r\n var Waypoint = window.Waypoint\r\n\r\n function isWindow(element) {\r\n return element === element.window\r\n }\r\n\r\n function getWindow(element) {\r\n if (isWindow(element)) {\r\n return element\r\n }\r\n return element.defaultView\r\n }\r\n\r\n function NoFrameworkAdapter(element) {\r\n this.element = element\r\n this.handlers = {}\r\n }\r\n\r\n NoFrameworkAdapter.prototype.innerHeight = function () {\r\n var isWin = isWindow(this.element)\r\n return isWin ? this.element.innerHeight : this.element.clientHeight\r\n }\r\n\r\n NoFrameworkAdapter.prototype.innerWidth = function () {\r\n var isWin = isWindow(this.element)\r\n return isWin ? this.element.innerWidth : this.element.clientWidth\r\n }\r\n\r\n NoFrameworkAdapter.prototype.off = function (event, handler) {\r\n function removeListeners(element, listeners, handler) {\r\n for (var i = 0, end = listeners.length - 1; i < end; i++) {\r\n var listener = listeners[i]\r\n if (!handler || handler === listener) {\r\n element.removeEventListener(listener)\r\n }\r\n }\r\n }\r\n\r\n var eventParts = event.split('.')\r\n var eventType = eventParts[0]\r\n var namespace = eventParts[1]\r\n var element = this.element\r\n\r\n if (namespace && this.handlers[namespace] && eventType) {\r\n removeListeners(element, this.handlers[namespace][eventType], handler)\r\n this.handlers[namespace][eventType] = []\r\n }\r\n else if (eventType) {\r\n for (var ns in this.handlers) {\r\n removeListeners(element, this.handlers[ns][eventType] || [], handler)\r\n this.handlers[ns][eventType] = []\r\n }\r\n }\r\n else if (namespace && this.handlers[namespace]) {\r\n for (var type in this.handlers[namespace]) {\r\n removeListeners(element, this.handlers[namespace][type], handler)\r\n }\r\n this.handlers[namespace] = {}\r\n }\r\n }\r\n\r\n /* Adapted from jQuery 1.x offset() */\r\n NoFrameworkAdapter.prototype.offset = function () {\r\n if (!this.element.ownerDocument) {\r\n return null\r\n }\r\n\r\n var documentElement = this.element.ownerDocument.documentElement\r\n var win = getWindow(this.element.ownerDocument)\r\n var rect = {\r\n top: 0,\r\n left: 0\r\n }\r\n\r\n if (this.element.getBoundingClientRect) {\r\n rect = this.element.getBoundingClientRect()\r\n }\r\n\r\n return {\r\n top: rect.top + win.pageYOffset - documentElement.clientTop,\r\n left: rect.left + win.pageXOffset - documentElement.clientLeft\r\n }\r\n }\r\n\r\n NoFrameworkAdapter.prototype.on = function (event, handler) {\r\n var eventParts = event.split('.')\r\n var eventType = eventParts[0]\r\n var namespace = eventParts[1] || '__default'\r\n var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {}\r\n var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || []\r\n\r\n nsTypeList.push(handler)\r\n this.element.addEventListener(eventType, handler)\r\n }\r\n\r\n NoFrameworkAdapter.prototype.outerHeight = function (includeMargin) {\r\n var height = this.innerHeight()\r\n var computedStyle\r\n\r\n if (includeMargin && !isWindow(this.element)) {\r\n computedStyle = window.getComputedStyle(this.element)\r\n height += parseInt(computedStyle.marginTop, 10)\r\n height += parseInt(computedStyle.marginBottom, 10)\r\n }\r\n\r\n return height\r\n }\r\n\r\n NoFrameworkAdapter.prototype.outerWidth = function (includeMargin) {\r\n var width = this.innerWidth()\r\n var computedStyle\r\n\r\n if (includeMargin && !isWindow(this.element)) {\r\n computedStyle = window.getComputedStyle(this.element)\r\n width += parseInt(computedStyle.marginLeft, 10)\r\n width += parseInt(computedStyle.marginRight, 10)\r\n }\r\n\r\n return width\r\n }\r\n\r\n NoFrameworkAdapter.prototype.scrollLeft = function () {\r\n var win = getWindow(this.element)\r\n return win ? win.pageXOffset : this.element.scrollLeft\r\n }\r\n\r\n NoFrameworkAdapter.prototype.scrollTop = function () {\r\n var win = getWindow(this.element)\r\n return win ? win.pageYOffset : this.element.scrollTop\r\n }\r\n\r\n NoFrameworkAdapter.extend = function () {\r\n var args = Array.prototype.slice.call(arguments)\r\n\r\n function merge(target, obj) {\r\n if (typeof target === 'object' && typeof obj === 'object') {\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n target[key] = obj[key]\r\n }\r\n }\r\n }\r\n\r\n return target\r\n }\r\n\r\n for (var i = 1, end = args.length; i < end; i++) {\r\n merge(args[0], args[i])\r\n }\r\n return args[0]\r\n }\r\n\r\n NoFrameworkAdapter.inArray = function (element, array, i) {\r\n return array == null ? -1 : array.indexOf(element, i)\r\n }\r\n\r\n NoFrameworkAdapter.isEmptyObject = function (obj) {\r\n /* eslint no-unused-vars: 0 */\r\n for (var name in obj) {\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n Waypoint.adapters.push({\r\n name: 'noframework',\r\n Adapter: NoFrameworkAdapter\r\n })\r\n Waypoint.Adapter = NoFrameworkAdapter\r\n }())\r\n ;\ndefine(\"waypoints\", function(){});\n\n","define('core/global/analytics',[\"jquery\", \"core/global/state\", \"libs/jquery.bbq\", \"waypoints\"], function ($, state) {\r\n console.log('global/analytics');\r\n\r\n // This file needs to pull in some vars that are set in _Layout, so using loose module pattern coupling \r\n var me = (function (ns) {\r\n ns.liveballURLPrefix = \"landing.\";\r\n\r\n /***************** Add DMS visit ID to all liveball links *****************/\r\n ns.sendToLiveball = function () {\r\n // get all links to liveball\r\n var $links = $('a[href*=\"' + ns.liveballURLPrefix + '\"]');\r\n\r\n // loop through each link\r\n $links.each(function () {\r\n var $this = $(this),\r\n url = $this.attr('href'),\r\n data = {},\r\n newUrl;\r\n\r\n // create object of key/value pairs to append to existing url\r\n data.visit = ns.visitId;\r\n data.visitor = ns.visitorId;\r\n\r\n // create new url\r\n\r\n newUrl = $.param.querystring(url, data);\r\n\r\n // set url\r\n $this.attr('href', newUrl);\r\n });\r\n };\r\n\r\n //************ Scroll Depth Tracking ******************\r\n ns.trackScrollDepth = function () {\r\n\r\n function recordSdEvent(trackid) {\r\n dataLayer.push({ 'event': 'scroll', 'reference': '' + trackid + '' });\r\n }\r\n\r\n // Waypoints blows up ie8\r\n \r\n if (!state.oldIe()) {\r\n var waypoint = new Waypoint({\r\n element: document.querySelector('.sd-unit'),\r\n handler: function (direction) {\r\n recordSdEvent($(this).data('analyticsid'));\r\n },\r\n\r\n triggerOnce: true,\r\n offset: \"bottom-in-view\"\r\n\r\n });\r\n }\r\n };\r\n\r\n //************ SEND ORIENTATION TO GA ******************\r\n ns.sendOrientationToGA = function() {\r\n // send device orientation to ga \r\n if (window.getComputedStyle) { // if the browser doesn't support getComputedStyle, skip this because it will crash\r\n var orientation = window.getComputedStyle(document.body, ':before').getPropertyValue('content');\r\n if (orientation.indexOf(\"portrait\") != -1)\r\n dataLayer.push({ 'event': 'load', 'orientation': 'portrait' });\r\n\r\n if (orientation.indexOf(\"landscape\") != -1)\r\n dataLayer.push({ 'event': 'load', 'orientation': 'landscape' });\r\n }\r\n };\r\n\r\n //************** FIRE JS ON LOAD OF ANCHOR TAG ***********\r\n // Used for GA Tracking of A/B Tested links\r\n ns.fireDataOnloadOnAnchor = function() {\r\n $(\"a[data-onload]\").each(function(i) {\r\n var x = ($(this).attr('data-onload'));\r\n var func;\r\n\r\n // substring - to get datalayer param\r\n if (x) {\r\n var startIndex = x.indexOf(\"(\");\r\n var endIndex = x.indexOf(\")\");\r\n var functionName = x.substring(0, startIndex);\r\n var param = x.substring(startIndex + 1, endIndex);\r\n\r\n // replacing ' with \" in param\r\n var arr1 = param.split(\"'\");\r\n var arr2 = arr1.join('\"');\r\n\r\n // converting param string to object\r\n var obj = JSON.parse(arr2);\r\n }\r\n\r\n if (functionName) {\r\n temp = functionName.split('.');\r\n il = temp.length;\r\n context = null;\r\n\r\n for (i = 0; i < il; i++) {\r\n if (func == null) {\r\n func = window[temp[i]];\r\n\r\n if (typeof (func) !== \"function\") {\r\n context = func;\r\n }\r\n continue;\r\n }\r\n func = func[temp[i]];\r\n }\r\n\r\n // function call \r\n func.call(context, obj);\r\n }\r\n });\r\n };\r\n\r\n return ns;\r\n }(window.EFTOURS.analytics || {}));\r\n\r\n return me;\r\n});\n","// Browser polyfills and fixes that should be included on every page.\r\ndefine('core/global/compensatrs',[\"jquery\", \"core/global/state\", \"modernizr\"], function ($, state, Modernizr) {\r\n console.log('global/compensatrs');\r\n\r\n return {\r\n\r\n //************ FEATURE DETECTION HANDLING ******************\r\n // Add modernizr html5 feature detection handling here\r\n handleUnsupportedHtml5: function() {\r\n /* If CSS transitions are not supported, delegate transition() calls to animate().\r\n ** Note: if you specify an easing, please make sure to define that easing in jQuery. \r\n ** Likewise, jQuery's \"swing\" easing is not supported by CSS, although you could\r\n ** approximate it in CSS by doing this: http://stackoverflow.com/a/9245729/925475 */\r\n if (!$.support.transition) {\r\n $.fn.transition = $.fn.animate;\r\n }\r\n },\r\n\r\n // Add detection for non standard css properties here\r\n customCSSDetection: function() {\r\n Modernizr.addTest('appearance', function() {\r\n return Modernizr.testAllProps('appearance') && (document.documentMode === undefined || document.documentMode > 7);\r\n });\r\n },\r\n\r\n // remove href of phone links\r\n // this is a bit hacky -- if it isn't a touch device, simply remove the href from the a tag.\r\n handleTelLinks: function() {\r\n if (!EFTOURS.device.isTouch) {\r\n $(\".tel-link\").removeAttr(\"href\");\r\n }\r\n },\r\n\r\n // Fix for icon fonts in ie8 that forces a repaint for pseudo elements.\r\n ie8FontFix: function() {\r\n if (state.oldIe()) {\r\n var head = document.getElementsByTagName('head')[0],\r\n style = document.createElement('style');\r\n style.type = 'text/css';\r\n style.styleSheet.cssText = ':before,:after{content:\"\" !important';\r\n head.appendChild(style);\r\n setTimeout(function() {\r\n head.removeChild(style);\r\n }, 0);\r\n }\r\n },\r\n\r\n //************ REPLACE HTML5 PLACEHOLDER TEXT FUNCTIONALITY ON OLD BROWSERS ******************\r\n fakePlaceholder: function() {\r\n // Fake placehold if using ie8 or ie9\r\n if (!Modernizr.input.placeholder) {\r\n $(\"input\").each(\r\n function() {\r\n var inputField = $(this);\r\n if (inputField.val() == \"\" && inputField.attr(\"placeholder\") != \"\") {\r\n\r\n inputField.val(inputField.attr(\"placeholder\"));\r\n\r\n inputField.focus(function() {\r\n if (inputField.val() == inputField.attr(\"placeholder\")) {\r\n inputField.val(\"\");\r\n }\r\n });\r\n\r\n inputField.blur(function() {\r\n if (inputField.val() == \"\") {\r\n inputField.val(inputField.attr(\"placeholder\"));\r\n }\r\n });\r\n\r\n $(inputField).closest('form').on(\"submit\", function() {\r\n var form = $(this);\r\n if (!form.hasClass('placeholderPending')) {\r\n $('input', this).each(function() {\r\n var clearInput = $(this);\r\n if (clearInput.val() == clearInput.attr(\"placeholder\")) {\r\n clearInput.val(\"\");\r\n }\r\n });\r\n form.addClass('placeholderPending');\r\n }\r\n });\r\n\r\n }\r\n });\r\n }\r\n }\r\n };\r\n});\n","/*!\r\n** Unobtrusive Ajax support library for jQuery\r\n** Copyright (C) Microsoft Corporation. All rights reserved.\r\n*/\r\n\r\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\r\n/*global window: false, jQuery: false */\r\n\r\ndefine('jquery.unobtrusive-ajax',[\"jquery\"], function ($) {\r\n var data_click = \"unobtrusiveAjaxClick\",\r\n data_validation = \"unobtrusiveValidation\";\r\n\r\n function getFunction(code, argNames) {\r\n var fn = window, parts = (code || \"\").split(\".\");\r\n while (fn && parts.length) {\r\n fn = fn[parts.shift()];\r\n }\r\n if (typeof (fn) === \"function\") {\r\n return fn;\r\n }\r\n argNames.push(code);\r\n return Function.constructor.apply(null, argNames);\r\n }\r\n\r\n function isMethodProxySafe(method) {\r\n return method === \"GET\" || method === \"POST\";\r\n }\r\n\r\n function asyncOnBeforeSend(xhr, method) {\r\n if (!isMethodProxySafe(method)) {\r\n xhr.setRequestHeader(\"X-HTTP-Method-Override\", method);\r\n }\r\n }\r\n\r\n function asyncOnSuccess(element, data, contentType) {\r\n var mode;\r\n\r\n if (contentType.indexOf(\"application/x-javascript\") !== -1) { // jQuery already executes JavaScript for us\r\n return;\r\n }\r\n\r\n mode = (element.getAttribute(\"data-ajax-mode\") || \"\").toUpperCase();\r\n $(element.getAttribute(\"data-ajax-update\")).each(function (i, update) {\r\n var top;\r\n\r\n switch (mode) {\r\n case \"BEFORE\":\r\n top = update.firstChild;\r\n $(\"
\").html(data).contents().each(function () {\r\n update.insertBefore(this, top);\r\n });\r\n break;\r\n case \"AFTER\":\r\n $(\"
\").html(data).contents().each(function () {\r\n update.appendChild(this);\r\n });\r\n break;\r\n default:\r\n if ($(update).data(\"usereplacewith\") !== undefined) {\r\n $(update).replaceWith(data);\r\n }\r\n //hacky solution to weird bug from SC 7.5 upgrade.\r\n //something about the thank you page markup made it jump to the top of the page\r\n //parsing html fixed it... for some reason\r\n else if (data.indexOf(\"form-content-success\") > -1) {\r\n var parsedHtml = $.parseHTML(data);\r\n $(update).html(parsedHtml);\r\n }\r\n else {\r\n $(update).html(data);\r\n }\r\n\r\n break;\r\n }\r\n });\r\n }\r\n\r\n function asyncRequest(element, options) {\r\n var confirm, loading, method, duration;\r\n\r\n confirm = element.getAttribute(\"data-ajax-confirm\");\r\n if (confirm && !window.confirm(confirm)) {\r\n return;\r\n }\r\n\r\n loading = $(element.getAttribute(\"data-ajax-loading\"));\r\n duration = element.getAttribute(\"data-ajax-loading-duration\") || 0;\r\n\r\n $.extend(options, {\r\n type: element.getAttribute(\"data-ajax-method\") || undefined,\r\n url: element.getAttribute(\"data-ajax-url\") || undefined,\r\n beforeSend: function (xhr) {\r\n var result;\r\n asyncOnBeforeSend(xhr, method);\r\n result = getFunction(element.getAttribute(\"data-ajax-begin\"), [\"xhr\"]).apply(this, arguments);\r\n if (result !== false) {\r\n loading.show(duration);\r\n }\r\n return result;\r\n },\r\n complete: function () {\r\n loading.hide(duration);\r\n getFunction(element.getAttribute(\"data-ajax-complete\"), [\"xhr\", \"status\"]).apply(this, arguments);\r\n },\r\n success: function (data, status, xhr) {\r\n asyncOnSuccess(element, data, xhr.getResponseHeader(\"Content-Type\") || \"text/html\");\r\n getFunction(element.getAttribute(\"data-ajax-success\"), [\"data\", \"status\", \"xhr\"]).apply(this, arguments);\r\n },\r\n error: getFunction(element.getAttribute(\"data-ajax-failure\"), [\"xhr\", \"status\", \"error\"])\r\n });\r\n\r\n options.data.push({ name: \"X-Requested-With\", value: \"XMLHttpRequest\" });\r\n\r\n // KESM Added following line to allow callback functions to reference calling element/form\r\n options.context = element;\r\n\r\n method = options.type.toUpperCase();\r\n if (!isMethodProxySafe(method)) {\r\n options.type = \"POST\";\r\n options.data.push({ name: \"X-HTTP-Method-Override\", value: method });\r\n }\r\n\r\n $.ajax(options);\r\n }\r\n\r\n function validate(form) {\r\n var validationInfo = $(form).data(data_validation);\r\n return !validationInfo || !validationInfo.validate || validationInfo.validate();\r\n }\r\n\r\n $(document).on(\"click\", \"a[data-ajax=true]\", function (evt) {\r\n evt.preventDefault();\r\n asyncRequest(this, {\r\n url: this.href,\r\n type: \"GET\",\r\n data: []\r\n });\r\n });\r\n\r\n $(document).on(\"click\", \"form[data-ajax=true] input[type=image]\", function (evt) {\r\n var name = evt.target.name,\r\n $target = $(evt.target),\r\n form = $target.parents(\"form\")[0],\r\n offset = $target.offset();\r\n\r\n $(form).data(data_click, [\r\n { name: name + \".x\", value: Math.round(evt.pageX - offset.left) },\r\n { name: name + \".y\", value: Math.round(evt.pageY - offset.top) }\r\n ]);\r\n\r\n setTimeout(function () {\r\n $(form).removeData(data_click);\r\n }, 0);\r\n });\r\n\r\n $(document).on(\"click\", \"form[data-ajax=true] :submit\", function (evt) {\r\n var name = evt.target.name,\r\n form = $(evt.target).parents(\"form\")[0];\r\n\r\n $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);\r\n\r\n setTimeout(function () {\r\n $(form).removeData(data_click);\r\n }, 0);\r\n });\r\n\r\n $(document).on(\"submit\", \"form[data-ajax=true]\", function (evt) {\r\n var clickInfo = $(this).data(data_click) || [];\r\n evt.preventDefault();\r\n if (!validate(this)) {\r\n return;\r\n }\r\n asyncRequest(this, {\r\n url: this.action,\r\n type: this.method || \"GET\",\r\n data: clickInfo.concat($(this).serializeArray())\r\n });\r\n });\r\n});\n","/* \r\n global.js -- the hub of all javascripts. ALL javascripts. Every. Single. One.\r\n*/\r\ndefine('global',[\"core/global/analytics\", \"core/global/compensatrs\", \"jquery.unobtrusive-ajax\"], function (analytics, compensatr) {\r\n return {\r\n init: function() {\r\n console.log(\"global\");\r\n\r\n analytics.sendToLiveball();\r\n analytics.trackScrollDepth();\r\n analytics.sendOrientationToGA();\r\n analytics.fireDataOnloadOnAnchor();\r\n\r\n compensatr.handleUnsupportedHtml5();\r\n compensatr.customCSSDetection();\r\n compensatr.fakePlaceholder();\r\n compensatr.handleTelLinks();\r\n compensatr.ie8FontFix(); \r\n }\r\n }\r\n});\n","// loads all the dependencies for code that is used on all pages.\r\nrequire([\"jquery\", \"underscore\", \"libs/enquire\", \"libs/amplify.core\"], function ($) {\r\n // init the global stuff\r\n require(['global'], function (global) {\r\n global.init();\r\n });\r\n});\r\n\ndefine(\"bootstrap\", function(){});\n\n"]}