{"version":3,"sources":["../../../../node_modules/wee-core/temp/?","../../../../node_modules/wee-core/js/wee.js","../../../../node_modules/wee-core/js/wee.animate.js","../../../../node_modules/wee-core/js/wee.assets.js","../../../../node_modules/wee-core/js/wee.data.js","../../../../node_modules/wee-core/js/wee.dom.js","../../../../node_modules/wee-core/js/wee.events.js","../../../../node_modules/wee-core/js/wee.history.js","../../../../node_modules/wee-core/js/wee.routes.js","../../../../node_modules/wee-core/js/wee.screen.js","../../../../node_modules/wee-core/js/wee.touch.js","../../../../node_modules/wee-core/js/wee.view.js","../../../../node_modules/wee-core/js/wee.view.diff.js","../../../../node_modules/wee-core/js/wee.chain.js","../../../../node_modules/wee-core/js/chain/wee.chain.animate.js","../../../../node_modules/wee-core/js/chain/wee.chain.dom.js","../../../../node_modules/wee-core/js/chain/wee.chain.events.js","../../../../node_modules/wee-core/js/chain/wee.chain.view.js","../../../../node_modules/wee-core/temp/views.js","../../../../source/js/build/blog.js","../../../../source/js/build/common.js","../../../../source/js/build/donate.js","../../../../source/js/build/gridsection.js","../../../../source/js/build/home.js","../../../../source/js/build/navigation.js","../../../../source/js/build/prayWithUs.js","../../../../source/js/build/readTheBible.js","../../../../source/js/build/social.js","../../../../source/js/custom/script.js","../../../../source/modules/dropdown/core/js/script.js","../../../../source/modules/easyslide/core/js/script.js","../../../../source/modules/weemason/core/js/script.js"],"names":["exports","global","Wee","W","U","web","window","scope","env","range","D","document","store","$","observe","refs","_storage","obj","key","create","val","data","type","$type","num","segs","toString","split","pop","forEach","hasOwnProperty","Array","isArray","arr","slice","length","_copy","_set","obs","options","stored","seg","_val","_trigger","_get","fallback","set","resp","_has","$isObject","indexOf","_add","prepend","root","$toArray","concat","unshift","push","_merge","$extend","_drop","i","splice","_observe","fn","orig","upd","Object","keys","_equals","opts","map","join","el","recursive","value","args","diff","_diff","$exec","once","_extend","_contains","source","target","_html","contains","object","deep","src","len","a","b","aType","_arrEquals","_objEquals","every","aKeys","sort","aObj","bObj","after","before","_canExec","_$","WeeAlias","_body","body","_doc","documentElement","_slice","_win","make","name","pub","priv","base","basePubConst","basePrivConst","_construct","$private","_make","extend","c","this","selector","context","ref","filter","sel","trim","WeeSelector","test","pre","getElementById","substr","getElementsByClassName","getElementsByTagName","querySelectorAll","e","$parseHTML","childNodes","nodeType","call","html","createRange","selectNode","createContextualFragment","child","div","createElement","createDocumentFragment","innerHTML","firstChild","appendChild","$set","$get","$push","$concat","$merge","$has","$drop","$observe","$unobserve","$trigger","$each","conf","els","_selArray","reverse","$env","rules","fb","host","location","hostname","rule","$envSecure","protocol","fns","response","apply","bool","arguments","$diff","$equals","$isArray","$isFunction","$isString","$map","res","$serialize","encodeURIComponent","replace","$unserialize","str","decodeURIComponent","$setRef","getAttribute","$setVar","_castString","prototype","toLowerCase","$unique","array","$chain","controller","method","parseInt","JSON","parse","model","id","Public","Private","core","$destroy","_destruct","$public","pubDest","basePubDest","basePrivDest","ready","readyState","addEventListener","module","undefined","raf","easings","ease","t","linear","process","prop","cssValue","scroll","bodyScroll","getComputedStyle","css","unit","setValue","update","style","dir","dist","Math","abs","start","Date","now","duration","complete","animate","tween","values","requestAnimationFrame","cb","setTimeout","addEasing","groups","loaded","groupId","_load","js","path","async","onload","_done","group","onerror","_fail","head","link","rel","href","img","Image","assets","load","files","ext","file","noCache","cache","remove","parentNode","removeChild","poll","hasErrors","error","success","version","_change","x","code","status","exec","_success","responseText","json","_jsonp","jsonpCallback","jsonp","_getUrl","request","headers","dt","url","XMLHttpRequest","send","onreadystatechange","contentTypeHeader","toUpperCase","processData","stringify","serialize","open","Accept","setRequestHeader","_getSelected","select","option","selected","_getClass","SVGElement","className","_setClass","setAttribute","_getSibling","match","index","$index","$children","$parent","$is","_toCamel","_toDashed","$addClass","func","cn","names","$after","aft","par","cel","$clone","insertBefore","nextSibling","$remove","$append","app","$attr","$before","bef","parent","children","$filter","cloneNode","$closest","$contains","descendant","$contents","$css","$data","attributes","attr","$empty","$eq","$find","$first","$hasClass","some","RegExp","$height","height","innerHeight","scrollHeight","offsetHeight","marginTop","marginBottom","$hide","$html","nodeName","atob","outerHTML","$insertAfter","$insertBefore","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","$last","$next","$not","$offset","rect","getBoundingClientRect","offset","top","pageYOffset","left","pageXOffset","$parents","$position","offsetTop","offsetLeft","$prepend","$prev","$prop","$removeAttr","removeAttribute","$removeClass","$replaceWith","$scrollLeft","scrollLeft","$scrollTop","scrollTop","$serializeForm","elements","checked","$show","$siblings","siblings","$slice","end","$text","textContent","$toggle","$toggleClass","state","$val","opt","$width","width","innerWidth","scrollWidth","offsetWidth","marginLeft","marginRight","$wrap","wrap","$wrapInner","bound","custom","_bind","delegate","targ","evts","evt","ev","parts","f","namespace","cont","_off","events","init","removeEventListener","on","off","event","binding","String","trigger","preventDefault","stopPropagation","addEvent","E","H","support","pushState","entries","settings","_path","loc","pathname","search","hash","_isValid","hasAttribute","exts","extensions","_reset","history","bind","_process","prev","title","routes","uri","run","pushstate","popstate","partials","scrollRestoration","replaceState","prevConf","go","click","submit","each","form","l","full","metaKey","req","begin","sendEvents","successEvents","errorEvents","completeEvents","targets","X-PJAX","X-Requested-With","replaceEvent","action","replaceChild","scrollEvent","st","anim","processErrors","filters","Number","any","route","total","k","y","ran","negate","eq","query","segments","curr","addFilter","current","_addRule","watch","_run","size","screen","_eq","callback","sz","mn","min","mx","max","ex","parseFloat","getPropertyValue","sets","reset","ns","distance","movement","touches","changedTouches","travel","esc","reg","pair","partial","single","tags","helpers","is","not","isEmpty","empty","notEmpty","views","_isEmpty","_embed","temp","m","tag","_parseArgs","arg","_parse","helper","inner","cond","help","meth","sec","agg","rv","isObject",".","#","##","isPlainObject","item","$key","helps","_render","depth","exists","o","view","render","$pause","$resume","template","addHelper","addView","specialElHandlers","OPTION","fromEl","toEl","INPUT","TEXTAREA","newValue","nodeValue","_morphAttrs","fromNode","toNode","attrName","attrValue","attrs","foundAttrs","specified","_moveChildren","curChild","nextChild","savedEls","unmatchedEls","removeNodeHelper","node","nestedInSavedEl","walkDiscardedChildNodes","removeNode","alreadyVisited","morphEl","tagName","curToNodeId","fromNextSibling","toNextSibling","savedEl","unmatchedEl","curToNodeChild","curFromNodeChild","outer","curFromNodeId","curFromNodeType","isCompatible","specialElHandler","morphedNode","savedElId","A","Get","copy","setRef","setVar","toArray","add","addClass","append","appendTo","clone","closest","contents","r","find","first","get","hasClass","hide","insertAfter","last","next","parents","position","prependTo","removeAttr","removeClass","replaceWith","show","text","toggle","toggleClass","wrapInner","dropdown.view","$spinner","masonWee","columns","loading","detachHeader","navToggle","chain","dropdown","isDisabled","isVisible","isActive","enable","disable","visible","invisible","activate","deactivate","toggleActive","$body","$overlay","expanded","$this","$header","$donate","$win","scrolled","sticky","pos","animateLabels","checkBoxes","calculateScriptures","$input","label","scriptureCost","scriptures","ceil","resizeGrid","$sections","setGridSectionHeights","onresize","clearTimeout","tallestSection","currentHeight","initSlider","easySlide","elementRef","arrows","trackerRef","$tabs","socialSideFade","stickyScroll","$socialSide","elPos","isFloated","winPos","$secondaryContent","hidden","$any","$root","about","blog","$slug","read-the-bible","donate","financials","resources","get-involved","contact-us","become-a-christian","pray-with-us","namePrefix","activeClass","isExpanded","placeholder","$selects","labelTemplate","buildOptions","$select","rootModifier","selection","bindLabelEvents","bindContentEvents","close","$label","mouseenter.weeDropdown","mouseleave.weeDropdown","click.weeDropdown","keyup.weeDropdown","keyCode","labelClick","isSelected","itemClick","$el","modifierClass","childModifier","config","thumbs","resizeParent","$slideElements","$slideTrackers","$arrows","disabledClass","$leftArrow","$rightArrow","console","log","cycle","swipeRight","swipeLeft","dragstart","calculateWidths","setupThumbs","overflow","$thumbs","thumbWidth","totalWidth","containerWidth","reCalculateParent","moveThumbs","$wrapper","half","wrapLeft","remaining","minLeft","gridName","gridSelector","gridHiddenClass","tileSelector","$grid","$tiles","totalTiles","checkLoadingImages","buildColumns","calculateLayout","$tempDiv","tiles","columnData","$columns","buildLayout","totalHeight","imgPaths","tileHeights","restructure","buildColumnDataStructure","columnWidth","getTileHeights","assignTiles","gridConf","heights","assignTilesLogic","setNumber","smallestCol","smallest","j"],"mappings":"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","file":"../script.min.js","sourcesContent":[null,"// Wee (weepower.com)\n// Licensed under Apache 2 (http://www.apache.org/licenses/LICENSE-2.0)\n// DO NOT MODIFY\n\n/* global exports */\n/* jshint maxdepth: 4, maxparams: 6 */\n\nvar Wee;\n\n(function(W, U) {\n\t'use strict';\n\n\tvar web = typeof window != 'undefined',\n\t\tscope = web ? window : global,\n\t\tW = (function() {\n\t\t\tvar D = web ? document : {},\n\t\t\t\tstore = {\n\t\t\t\t\t$: {}\n\t\t\t\t},\n\t\t\t\tobserve = {},\n\t\t\t\trefs = {},\n\t\t\t\tenv,\n\t\t\t\trange,\n\n\t\t\t\t/**\n\t\t\t\t * Determine data storage root, key, and value\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {boolean} [create=false]\n\t\t\t\t * @returns {Array} value\n\t\t\t\t */\n\t\t\t\t_storage = function(obj, key, create) {\n\t\t\t\t\tvar data = obj,\n\t\t\t\t\t\ttype = W.$type(key),\n\t\t\t\t\t\tnum = type == 'number',\n\t\t\t\t\t\tval;\n\n\t\t\t\t\tif (num || type == 'string') {\n\t\t\t\t\t\tvar segs = key.toString().split('.');\n\t\t\t\t\t\tkey = segs.pop();\n\t\t\t\t\t\tdata = data.$;\n\n\t\t\t\t\t\tsegs.forEach(function(key) {\n\t\t\t\t\t\t\tdata = data.hasOwnProperty(key) ?\n\t\t\t\t\t\t\t\tdata[key] :\n\t\t\t\t\t\t\t\t(create ? data[key] = {} : []);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkey = '$';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (num && Array.isArray(data)) {\n\t\t\t\t\t\tvar arr = data.slice(key);\n\n\t\t\t\t\t\tif (arr.length) {\n\t\t\t\t\t\t\tval = arr[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkey = key.toString();\n\n\t\t\t\t\t\tif (data.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tval = data[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [data, key, _copy(val)];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Set global variable\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_set = function(obj, obs, key, val, options) {\n\t\t\t\t\tvar stored = _storage(obj, key, true),\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\tdata = seg == '$' ?\n\t\t\t\t\t\t\t_val(key, val) :\n\t\t\t\t\t\t\t_val(val, options);\n\n\t\t\t\t\tstored[0][seg] = data;\n\n\t\t\t\t\t_trigger(obj, obs, key, stored[2], data, 'set');\n\n\t\t\t\t\treturn data;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get global variable\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_get = function(obj, obs, key, fallback, set, options) {\n\t\t\t\t\tvar stored = _storage(obj, key),\n\t\t\t\t\t\tresp = stored[2];\n\n\t\t\t\t\tif (resp !== U) {\n\t\t\t\t\t\treturn resp;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fallback !== U) {\n\t\t\t\t\t\treturn set ?\n\t\t\t\t\t\t\t_set(obj, obs, key, fallback, options) :\n\t\t\t\t\t\t\t_val(fallback, options);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if storage criteria is set\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_has = function(obj, key, val) {\n\t\t\t\t\tvar stored = _storage(obj, key),\n\t\t\t\t\t\tresp = stored[2];\n\n\t\t\t\t\tif (val !== U) {\n\t\t\t\t\t\tif (W.$isObject(resp)) {\n\t\t\t\t\t\t\treturn resp.hasOwnProperty(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Array.isArray(resp)) {\n\t\t\t\t\t\t\treturn resp.indexOf(val) > -1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn resp === val;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn resp !== U;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Push or concatenate values into global array\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_add = function(type, obj, obs, key, val, prepend) {\n\t\t\t\t\tvar stored = _storage(obj, key, true),\n\t\t\t\t\t\troot = stored[0],\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\tresp = stored[2];\n\n\t\t\t\t\tif (seg == '$') {\n\t\t\t\t\t\tprepend = val;\n\t\t\t\t\t\tval = key;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (! Array.isArray(resp)) {\n\t\t\t\t\t\troot[seg] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type == 1) {\n\t\t\t\t\t\troot[seg] = prepend ?\n\t\t\t\t\t\t\tW.$toArray(val).concat(root[seg]) :\n\t\t\t\t\t\t\troot[seg].concat(val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprepend ?\n\t\t\t\t\t\t\troot[seg].unshift(val) :\n\t\t\t\t\t\t\troot[seg].push(val);\n\t\t\t\t\t}\n\n\t\t\t\t\t_trigger(obj, obs, key, resp, root[seg],\n\t\t\t\t\t\ttype == 1 ? 'concat' : 'push');\n\n\t\t\t\t\treturn root[seg];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object into into global storage\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_merge = function(obj, obs, key, val) {\n\t\t\t\t\tval === U ?\n\t\t\t\t\t\tkey = W.$extend(true, {}, obj.$, key) :\n\t\t\t\t\t\tval = W.$extend(true, {}, _get(obj, obs, key, {}), val);\n\n\t\t\t\t\treturn _set(obj, obs, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove key or value from global array\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_drop = function(obj, obs, key, val) {\n\t\t\t\t\tvar stored = _storage(obj, key),\n\t\t\t\t\t\troot = stored[0],\n\t\t\t\t\t\tseg = stored[1],\n\t\t\t\t\t\tresp = stored[2],\n\t\t\t\t\t\tarr = Array.isArray(root);\n\n\t\t\t\t\tif (val !== U) {\n\t\t\t\t\t\tif (resp !== U) {\n\t\t\t\t\t\t\tif (arr) {\n\t\t\t\t\t\t\t\tvar i = resp.indexOf(val);\n\n\t\t\t\t\t\t\t\tif (i > -1) {\n\t\t\t\t\t\t\t\t\troot[seg].splice(i, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (resp === val) {\n\t\t\t\t\t\t\t\tdelete root[seg];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete root[seg][val];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr ?\n\t\t\t\t\t\t\troot.splice(seg, 1) :\n\t\t\t\t\t\t\tdelete root[seg];\n\t\t\t\t\t}\n\n\t\t\t\t\t_trigger(obj, obs, key, resp, root[seg], 'drop');\n\n\t\t\t\t\treturn val !== U ? root[seg] : root;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Attach callback to data storage change\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_observe = function(obs, key, fn, options) {\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\toptions.fn = fn;\n\n\t\t\t\t\tobs[key] = obs[key] || [];\n\t\t\t\t\tobs[key].push(options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Fire callback from data storage change\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t */\n\t\t\t\t_trigger = function(obj, obs, key, orig, upd, type) {\n\t\t\t\t\tif (Object.keys(obs).length && (\n\t\t\t\t\t\ttype == 'trigger' ||\n\t\t\t\t\t\t! _equals(upd, orig)\n\t\t\t\t\t)) {\n\t\t\t\t\t\tif (typeof key != 'string') {\n\t\t\t\t\t\t\tkey = '';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar arr = [],\n\t\t\t\t\t\t\topts = key.split('.').map(function(seg) {\n\t\t\t\t\t\t\t\tarr.push(seg);\n\t\t\t\t\t\t\t\treturn arr.join('.');\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tfor (var val in obs) {\n\t\t\t\t\t\t\tif (opts.indexOf(val) > -1 || val == '*') {\n\t\t\t\t\t\t\t\tvar data = val == '*' ? obj.$ : upd;\n\n\t\t\t\t\t\t\t\tobs[val].forEach(function(el, i) {\n\t\t\t\t\t\t\t\t\tif (val === key || val == '*' || el.recursive) {\n\t\t\t\t\t\t\t\t\t\tif (! el.value || _equals(el.value, data)) {\n\t\t\t\t\t\t\t\t\t\t\tvar args = [\n\t\t\t\t\t\t\t\t\t\t\t\tel.recursive ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t_get(obj, false, val) :\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\ttype\n\t\t\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\t\t\t\tif (el.diff) {\n\t\t\t\t\t\t\t\t\t\t\t\targs.push(_diff(orig, data));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tW.$exec(el.fn, {\n\t\t\t\t\t\t\t\t\t\t\t\targs: args\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tif (el.once) {\n\t\t\t\t\t\t\t\t\t\t\t\tobs[val].splice(i, 1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Clone value to a new instance\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} val\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\t_copy = function(val) {\n\t\t\t\t\tvar type = W.$type(val);\n\n\t\t\t\t\tif (type == 'object') {\n\t\t\t\t\t\tval = _extend({}, val, true);\n\t\t\t\t\t} else if (type == 'array') {\n\t\t\t\t\t\tval = val.slice(0);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if a node contains another node\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {HTMLElement} source\n\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t * @returns {boolean} match\n\t\t\t\t */\n\t\t\t\t_contains = function(source, target) {\n\t\t\t\t\treturn (source === D ? W._html : source)\n\t\t\t\t\t\t.contains(target);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend target object with source object(s)\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} target\n\t\t\t\t * @param {object} object\n\t\t\t\t * @param {boolean} [deep=false]\n\t\t\t\t * @param {Array} [_set=[]]\n\t\t\t\t * @returns object\n\t\t\t\t */\n\t\t\t\t_extend = function(target, object, deep, _set) {\n\t\t\t\t\tif (! object) {\n\t\t\t\t\t\treturn target;\n\t\t\t\t\t}\n\n\t\t\t\t\t_set = _set || [];\n\n\t\t\t\t\tfor (var key in object) {\n\t\t\t\t\t\tvar src = object[key],\n\t\t\t\t\t\t\ttype = W.$type(src);\n\n\t\t\t\t\t\tif (deep && type == 'object') {\n\t\t\t\t\t\t\tvar len = _set.length,\n\t\t\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\t\t\tval;\n\n\t\t\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\t\t\tif (_set[i] === src) {\n\t\t\t\t\t\t\t\t\tval = src;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\t\ttarget[key] = val;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_set.push(src);\n\t\t\t\t\t\t\t\ttarget[key] = _extend(target[key] || {}, src, deep, _set);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (src !== U) {\n\t\t\t\t\t\t\ttarget[key] = type == 'array' ? src.slice(0) : src;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two values for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} a\n\t\t\t\t * @param {*} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_equals = function(a, b) {\n\t\t\t\t\tif (a === b) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar aType = W.$type(a);\n\n\t\t\t\t\tif (aType != W.$type(b)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'array') {\n\t\t\t\t\t\treturn _arrEquals(a, b);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'object') {\n\t\t\t\t\t\treturn _objEquals(a, b);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aType == 'date') {\n\t\t\t\t\t\treturn +a == +b; // jscs:ignore\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two arrays for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {Array} a\n\t\t\t\t * @param {Array} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_arrEquals = function(a, b) {\n\t\t\t\t\treturn a.length == b.length &&\n\t\t\t\t\t\ta.every(function(el, i) {\n\t\t\t\t\t\t\treturn _equals(el, b[i]);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two objects for equality\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} a\n\t\t\t\t * @param {object} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t_objEquals = function(a, b) {\n\t\t\t\t\tvar aKeys = Object.keys(a);\n\n\t\t\t\t\treturn _arrEquals(aKeys.sort(), Object.keys(b).sort()) &&\n\t\t\t\t\t\taKeys.every(function(i) {\n\t\t\t\t\t\t\treturn _equals(a[i], b[i]);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Generate a delta from two objects\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {object} a - original object\n\t\t\t\t * @param {object} b - updated object\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t_diff = function(a, b) {\n\t\t\t\t\tvar aObj = W.$isObject(a),\n\t\t\t\t\t\tbObj = W.$isObject(b);\n\n\t\t\t\t\tif (! (aObj || bObj)) {\n\t\t\t\t\t\tvar type = 'u';\n\n\t\t\t\t\t\tif (_equals(a, b)) {\n\t\t\t\t\t\t\ttype = '-';\n\t\t\t\t\t\t} else if (a === U) {\n\t\t\t\t\t\t\ttype = 'c';\n\t\t\t\t\t\t} else if (b === U) {\n\t\t\t\t\t\t\ttype = 'd';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tafter: b,\n\t\t\t\t\t\t\tbefore: a,\n\t\t\t\t\t\t\ttype: type\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar diff = {};\n\n\t\t\t\t\tif (aObj) {\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tdiff[key] = _diff(\n\t\t\t\t\t\t\t\ta[key],\n\t\t\t\t\t\t\t\tb && bObj ? b[key] : U\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (bObj) {\n\t\t\t\t\t\tObject.keys(b).forEach(function(key) {\n\t\t\t\t\t\t\tif (! diff[key]) {\n\t\t\t\t\t\t\t\tdiff[key] = _diff(U, b[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn diff;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get value from function or directly\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @returns {*}\n\t\t\t\t */\n\t\t\t\t_val = function(val, options) {\n\t\t\t\t\treturn W._canExec(val) ?\n\t\t\t\t\t\tW.$exec(val, options) :\n\t\t\t\t\t\tval;\n\t\t\t\t};\n\n\t\t\treturn {\n\t\t\t\t_$: scope.WeeAlias || '$',\n\t\t\t\t_body: D.body,\n\t\t\t\t_doc: D,\n\t\t\t\t_html: D.documentElement,\n\t\t\t\t_slice: [].slice,\n\t\t\t\t_win: scope,\n\t\t\t\tfn: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Create a namespaced controller\n\t\t\t\t\t *\n\t\t\t\t\t * @param {string} name\n\t\t\t\t\t * @param {object} pub - public methods and properties\n\t\t\t\t\t * @param {object} [priv] - private methods and properties\n\t\t\t\t\t */\n\t\t\t\t\tmake: function(name, pub, priv) {\n\t\t\t\t\t\tvar base,\n\t\t\t\t\t\t\tbasePubConst,\n\t\t\t\t\t\t\tbasePrivConst;\n\n\t\t\t\t\t\t// Check for base controller\n\t\t\t\t\t\tif (name.indexOf(':') > 0) {\n\t\t\t\t\t\t\tvar segs = name.split(':');\n\t\t\t\t\t\t\tbase = _copy(W[segs[1]]);\n\t\t\t\t\t\t\tbasePubConst = base._construct;\n\t\t\t\t\t\t\tbasePrivConst = base.$private._construct;\n\t\t\t\t\t\t\tname = segs[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create new controller instance\n\t\t\t\t\t\tW.fn[name] = W._make(name, pub, priv, base);\n\t\t\t\t\t\tW[name] = new W.fn[name](name);\n\n\t\t\t\t\t\t// Execute base constructors\n\t\t\t\t\t\tif (basePubConst) {\n\t\t\t\t\t\t\tbasePubConst();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (basePrivConst) {\n\t\t\t\t\t\t\tbasePrivConst();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Execute controller constructors\n\t\t\t\t\t\tif (W[name].$private._construct) {\n\t\t\t\t\t\t\tW[name].$private._construct();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (W[name]._construct) {\n\t\t\t\t\t\t\tW[name]._construct();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Extend controller with additional methods and properties\n\t\t\t\t\t *\n\t\t\t\t\t * @param {(object|string)} a - controller name or core methods\n\t\t\t\t\t * @param {object} [b] - public methods and properties\n\t\t\t\t\t * @param {object} [c] - private methods and properties\n\t\t\t\t\t */\n\t\t\t\t\textend: function(a, b, c) {\n\t\t\t\t\t\tif (W.$isObject(a)) {\n\t\t\t\t\t\t\t// Merge into the global object\n\t\t\t\t\t\t\t_extend(W, a);\n\t\t\t\t\t\t} else if (W.hasOwnProperty(a)) {\n\t\t\t\t\t\t\t// Merge the objects else create the controller\n\t\t\t\t\t\t\tif (c) {\n\t\t\t\t\t\t\t\tb.$private = c;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_extend(W[a], b, true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.make(a, b, c);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get matches to specified selector or return parsed HTML\n\t\t\t\t *\n\t\t\t\t * @param {($|HTMLElement|string)} selector\n\t\t\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t\t\t * @returns {Array} elements\n\t\t\t\t */\n\t\t\t\t$: function(selector, context) {\n\t\t\t\t\tvar el = null,\n\t\t\t\t\t\tref = [];\n\n\t\t\t\t\tif (typeof selector != 'string') {\n\t\t\t\t\t\tel = selector;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (selector == 'window') {\n\t\t\t\t\t\t\treturn [scope];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (selector == 'document') {\n\t\t\t\t\t\t\treturn [D];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Return nothing if context doesn't exist\n\t\t\t\t\t\tcontext = context !== U ? W.$(context)[0] : D;\n\n\t\t\t\t\t\tif (! context) {\n\t\t\t\t\t\t\treturn ref;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check for pre-cached elements\n\t\t\t\t\t\tif (selector.indexOf('ref:') > -1) {\n\t\t\t\t\t\t\tvar split = selector.split(',').filter(function(sel) {\n\t\t\t\t\t\t\t\tsel = sel.trim();\n\n\t\t\t\t\t\t\t\tif (sel.slice(0, 4) == 'ref:') {\n\t\t\t\t\t\t\t\t\tsel = sel.slice(4);\n\t\t\t\t\t\t\t\t\tsel = refs[sel];\n\n\t\t\t\t\t\t\t\t\t// Apply context filter if not document\n\t\t\t\t\t\t\t\t\tif (sel) {\n\t\t\t\t\t\t\t\t\t\tref = ref.concat(\n\t\t\t\t\t\t\t\t\t\t\tcontext === D ?\n\t\t\t\t\t\t\t\t\t\t\t\tsel :\n\t\t\t\t\t\t\t\t\t\t\t\tsel.filter(function(el) {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn _contains(context, el);\n\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\t\t\tselector = split.join(',');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn ref;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use third-party selector engine if defined\n\t\t\t\t\t\tif (scope.WeeSelector !== U) {\n\t\t\t\t\t\t\tel = scope.WeeSelector(selector, context);\n\t\t\t\t\t\t} else if (/^[#.]?[\\w-]+$/.test(selector)) {\n\t\t\t\t\t\t\tvar pre = selector[0];\n\n\t\t\t\t\t\t\tif (pre == '#') {\n\t\t\t\t\t\t\t\tel = D.getElementById(selector.substr(1));\n\t\t\t\t\t\t\t} else if (pre == '.') {\n\t\t\t\t\t\t\t\tel = context.getElementsByClassName(selector.substr(1));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tel = context.getElementsByTagName(selector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tel = context.querySelectorAll(selector);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tel = W.$parseHTML(selector).childNodes;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (! el) {\n\t\t\t\t\t\tel = ref;\n\t\t\t\t\t} else if (el.nodeType !== U || el === scope) {\n\t\t\t\t\t\tel = [el];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel = W._slice.call(el);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Join references if available\n\t\t\t\t\treturn ref.length ? el.concat(ref) : el;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Create document fragment from an HTML string\n\t\t\t\t *\n\t\t\t\t * @param {string} html\n\t\t\t\t * @returns {HTMLElement} element\n\t\t\t\t */\n\t\t\t\t$parseHTML: function(html) {\n\t\t\t\t\tvar el;\n\t\t\t\t\thtml = html.trim();\n\n\t\t\t\t\tif (! range) {\n\t\t\t\t\t\trange = D.createRange();\n\t\t\t\t\t\trange.selectNode(W._body);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (range && range.createContextualFragment) {\n\t\t\t\t\t\tel = range.createContextualFragment(html);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar div = D.createElement('div'),\n\t\t\t\t\t\t\tchild;\n\t\t\t\t\t\tel = D.createDocumentFragment();\n\n\t\t\t\t\t\tdiv.innerHTML = html;\n\n\t\t\t\t\t\twhile (child = div.firstChild) {\n\t\t\t\t\t\t\tel.appendChild(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Set global variable\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {object} [options] - applicable if value is a callback\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} value\n\t\t\t\t */\n\t\t\t\t$set: function(key, val, options) {\n\t\t\t\t\treturn _set(store, observe, key, val, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get global variable\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [fallback]\n\t\t\t\t * @param {boolean} [set=false]\n\t\t\t\t * @param {object} [options] - available for fallback functions\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} value\n\t\t\t\t */\n\t\t\t\t$get: function(key, fallback, set, options) {\n\t\t\t\t\treturn _get(store, observe, key, fallback, set, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Push value into global array\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {boolean} [prepend=false]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$push: function(key, val, prepend) {\n\t\t\t\t\treturn _add(2, store, observe, key, val, prepend);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Concatenate values into global storage\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} val\n\t\t\t\t * @param {boolean} [prepend=false]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$concat: function(key, val, prepend) {\n\t\t\t\t\treturn _add(1, store, observe, key, val, prepend);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object into global storage\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @returns {object} value\n\t\t\t\t */\n\t\t\t\t$merge: function(key, obj) {\n\t\t\t\t\treturn _merge(store, observe, key, obj);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Check if storage criteria is set\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [val]\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$has: function(key, val) {\n\t\t\t\t\treturn _has(store, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove key or value from global array\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {*} [val]\n\t\t\t\t * @returns {Array|object} value\n\t\t\t\t */\n\t\t\t\t$drop: function(key, val) {\n\t\t\t\t\treturn _drop(store, observe, key, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Attach callback to data storage change\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {boolean} [options.diff=false]\n\t\t\t\t * @param {boolean} [options.once=false]\n\t\t\t\t * @param {boolean} [options.recursive=false]\n\t\t\t\t * @param {*} [options.value]\n\t\t\t\t */\n\t\t\t\t$observe: function(key, fn, options) {\n\t\t\t\t\t_observe(observe, key, fn, options);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Remove callback from data storage change\n\t\t\t\t *\n\t\t\t\t * @param {string} [key]\n\t\t\t\t */\n\t\t\t\t$unobserve: function(key) {\n\t\t\t\t\tkey === U ?\n\t\t\t\t\t\tobserve = [] :\n\t\t\t\t\t\tdelete observe[key];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute matching observed callbacks\n\t\t\t\t *\n\t\t\t\t * @param {string} key\n\t\t\t\t */\n\t\t\t\t$trigger: function(key) {\n\t\t\t\t\tvar val = _get(store, false, key);\n\n\t\t\t\t\t_trigger(store, observe, key, val, val, 'trigger');\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute function for each matching selection\n\t\t\t\t *\n\t\t\t\t * @param {($|Array|HTMLElement|string)} target\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {($|HTMLElement|string)} [options.context=document]\n\t\t\t\t * @param {boolean} [options.reverse=false]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t */\n\t\t\t\t$each: function(target, fn, options) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t\t}, options),\n\t\t\t\t\t\t\tels = W._selArray(target, conf),\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\tif (conf.reverse && ! els._$) {\n\t\t\t\t\t\t\tels = els.reverse();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (; i < els.length; i++) {\n\t\t\t\t\t\t\tvar el = els[i],\n\t\t\t\t\t\t\t\tval = W.$exec(fn, {\n\t\t\t\t\t\t\t\t\targs: [el, i].concat(conf.args),\n\t\t\t\t\t\t\t\t\tscope: conf.scope || el\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (val === false) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Get current environment or set current environment against\n\t\t\t\t * specified object\n\t\t\t\t *\n\t\t\t\t * @param {object} [rules]\n\t\t\t\t * @param {string} [fallback=local]\n\t\t\t\t * @returns {string} environment\n\t\t\t\t */\n\t\t\t\t$env: function(rules, fallback) {\n\t\t\t\t\tvar fb = fallback || 'local';\n\n\t\t\t\t\tif (rules) {\n\t\t\t\t\t\tvar host = location.hostname;\n\n\t\t\t\t\t\tfor (var rule in rules) {\n\t\t\t\t\t\t\tvar val = rules[rule];\n\n\t\t\t\t\t\t\tif (val == host || _val(val, {\n\t\t\t\t\t\t\t\t\targs: host\n\t\t\t\t\t\t\t\t}) === true) {\n\t\t\t\t\t\t\t\tenv = rule;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (! env) {\n\t\t\t\t\t\t\tenv = fb;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn env || fb;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if the current environment is SSL encrypted\n\t\t\t\t *\n\t\t\t\t * @returns {boolean} secure\n\t\t\t\t */\n\t\t\t\t$envSecure: function() {\n\t\t\t\t\treturn location.protocol == 'https:';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute specified function or controller method\n\t\t\t\t *\n\t\t\t\t * @param {Array|function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {*} [response]\n\t\t\t\t */\n\t\t\t\t$exec: function(fn, options) {\n\t\t\t\t\toptions = options || {};\n\n\t\t\t\t\tvar fns = W.$toArray(fn),\n\t\t\t\t\t\tlen = fns.length,\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t}, options || {});\n\t\t\t\t\t\tfn = fns[i];\n\n\t\t\t\t\t\tif (typeof fn == 'string') {\n\t\t\t\t\t\t\tvar segs = fn.split(':');\n\n\t\t\t\t\t\t\tif (W[segs[0]]) {\n\t\t\t\t\t\t\t\tfn = W[segs[0]][\n\t\t\t\t\t\t\t\t\tsegs.length > 1 ?\n\t\t\t\t\t\t\t\t\t\tsegs[1] :\n\t\t\t\t\t\t\t\t\t\t'init'\n\t\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\tif (! conf.scope) {\n\t\t\t\t\t\t\t\t\tconf.scope = W[segs[0]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof fn == 'function') {\n\t\t\t\t\t\t\tvar response = fn.apply(\n\t\t\t\t\t\t\t\tconf.scope,\n\t\t\t\t\t\t\t\tW.$toArray(conf.args)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (len === 1) {\n\t\t\t\t\t\t\t\treturn response;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend target object with source object(s)\n\t\t\t\t *\n\t\t\t\t * @param {(boolean|object)} deep - extend nested properties else target object\n\t\t\t\t * @param {object} [obj] - target object\n\t\t\t\t * @param {...object} [obj] - merged objects\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t$extend: function(deep) {\n\t\t\t\t\tvar bool = typeof deep == 'boolean',\n\t\t\t\t\t\targs = W._slice.call(arguments).slice(bool ? 1 : 0),\n\t\t\t\t\t\ttarget = args[0] || {};\n\t\t\t\t\tdeep = bool ? deep : false;\n\n\t\t\t\t\targs.slice(1).forEach(function(source) {\n\t\t\t\t\t\ttarget = _extend(target, source, deep);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn target;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Generate a delta from two objects\n\t\t\t\t *\n\t\t\t\t * @param {object} a\n\t\t\t\t * @param {object} b\n\t\t\t\t * @returns {object}\n\t\t\t\t */\n\t\t\t\t$diff: function(a, b) {\n\t\t\t\t\treturn _diff(a, b);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Compare two values for strict equality\n\t\t\t\t *\n\t\t\t\t * @param {*} a\n\t\t\t\t * @param {*} b\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$equals: function(a, b) {\n\t\t\t\t\treturn _equals(a, b);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is an array\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isArray: function(obj) {\n\t\t\t\t\treturn Array.isArray(obj);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is a function\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isFunction: function(obj) {\n\t\t\t\t\treturn W.$type(obj) == 'function';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is an object\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isObject: function(obj) {\n\t\t\t\t\treturn W.$type(obj) == 'object';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value is a string\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns {boolean}\n\t\t\t\t */\n\t\t\t\t$isString: function(obj) {\n\t\t\t\t\treturn typeof obj == 'string';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Translate items in an array or selection to new array\n\t\t\t\t *\n\t\t\t\t * @param {($|Array|HTMLElement|string)} target - array or selector\n\t\t\t\t * @param {function} fn\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {Array} [options.args]\n\t\t\t\t * @param {object} [options.scope]\n\t\t\t\t * @returns {Array}\n\t\t\t\t */\n\t\t\t\t$map: function(target, fn, options) {\n\t\t\t\t\tif (! Array.isArray(target)) {\n\t\t\t\t\t\ttarget = W._selArray(target, options);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar conf = _extend({\n\t\t\t\t\t\t\targs: []\n\t\t\t\t\t\t}, options),\n\t\t\t\t\t\tres = [],\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < target.length; i++) {\n\t\t\t\t\t\tvar el = target[i],\n\t\t\t\t\t\t\tval = W.$exec(fn, {\n\t\t\t\t\t\t\t\targs: [el, i].concat(conf.args),\n\t\t\t\t\t\t\t\tscope: conf.scope || el\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (val !== false) {\n\t\t\t\t\t\t\tres.push(val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn res;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Serialize object\n\t\t\t\t *\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @returns {string} value\n\t\t\t\t */\n\t\t\t\t$serialize: function(obj) {\n\t\t\t\t\tvar arr = [];\n\n\t\t\t\t\tObject.keys(obj || {}).forEach(function(key) {\n\t\t\t\t\t\tvar val = obj[key];\n\t\t\t\t\t\tkey = encodeURIComponent(key);\n\n\t\t\t\t\t\tif (typeof val != 'object') {\n\t\t\t\t\t\t\tarr.push(key + '=' + encodeURIComponent(val));\n\t\t\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\t\t\tval.forEach(function(el) {\n\t\t\t\t\t\t\t\tarr.push(key + '[]=' + encodeURIComponent(el));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn arr.length ? arr.join('&').replace(/%20/g, '+') : '';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Convert serialized string back into an object\n\t\t\t\t *\n\t\t\t\t * @param {string} str\n\t\t\t\t * @returns {object} value\n\t\t\t\t */\n\t\t\t\t$unserialize: function(str) {\n\t\t\t\t\tvar obj = {};\n\n\t\t\t\t\tdecodeURIComponent(str)\n\t\t\t\t\t\t.replace(/^\\?/, '')\n\t\t\t\t\t\t.split('&').forEach(function(el) {\n\t\t\t\t\t\t\tvar split = el.split('='),\n\t\t\t\t\t\t\t\tkey = split[0],\n\t\t\t\t\t\t\t\tval = split[1].replace('+', ' ') || '';\n\n\t\t\t\t\t\t\tif (obj[key]) {\n\t\t\t\t\t\t\t\tobj[key] = W.$toArray(obj[key]);\n\t\t\t\t\t\t\t\tobj[key].push(val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tobj[key] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\treturn obj;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Add ref elements to datastore\n\t\t\t\t *\n\t\t\t\t * @param {(HTMLElement|string)} [context=document]\n\t\t\t\t */\n\t\t\t\t$setRef: function(context) {\n\t\t\t\t\tcontext = context ? W.$(context)[0] : D;\n\n\t\t\t\t\t// Clear existing refs if reset\n\t\t\t\t\tObject.keys(refs).forEach(function(val) {\n\t\t\t\t\t\trefs[val] = refs[val].filter(function(el) {\n\t\t\t\t\t\t\treturn ! (\n\t\t\t\t\t\t\t\t! _contains(D, el) ||\n\t\t\t\t\t\t\t\t(_contains(context, el) && context !== el)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set refs from DOM\n\t\t\t\t\tW.$each('[data-ref]', function(el) {\n\t\t\t\t\t\tel.getAttribute('data-ref').split(/\\s+/)\n\t\t\t\t\t\t\t.forEach(function(val) {\n\t\t\t\t\t\t\t\trefs[val] = refs[val] || [];\n\t\t\t\t\t\t\t\trefs[val].push(el);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Add metadata variables to datastore\n\t\t\t\t *\n\t\t\t\t * @param {(HTMLElement|string)} [context=document]\n\t\t\t\t */\n\t\t\t\t$setVar: function(context) {\n\t\t\t\t\tW.$each('[data-set]', function(el) {\n\t\t\t\t\t\tvar key = el.getAttribute('data-set'),\n\t\t\t\t\t\t\tval = W._castString(el.getAttribute('data-value'));\n\n\t\t\t\t\t\tkey.slice(-2) == '[]' ?\n\t\t\t\t\t\t\t_add(2, store, observe, key.slice(0, -2), val) :\n\t\t\t\t\t\t\t_set(store, observe, key, val);\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Cast value to array if it isn't one\n\t\t\t\t *\n\t\t\t\t * @param {*} val\n\t\t\t\t * @returns {Array} value\n\t\t\t\t */\n\t\t\t\t$toArray: function(val) {\n\t\t\t\t\treturn val !== U ? (Array.isArray(val) ? val : [val]) : [];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Determine the JavaScript type of an object\n\t\t\t\t *\n\t\t\t\t * @param {*} obj\n\t\t\t\t * @returns string\n\t\t\t\t */\n\t\t\t\t$type: function(obj) {\n\t\t\t\t\treturn obj === U ? 'undefined' :\n\t\t\t\t\t\tObject.prototype.toString.call(obj)\n\t\t\t\t\t\t\t.replace(/^\\[object (.+)]$/, '$1')\n\t\t\t\t\t\t\t.toLowerCase();\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Create new array with only unique values from source array\n\t\t\t\t *\n\t\t\t\t * @param {Array} array\n\t\t\t\t * @returns {Array} unique values\n\t\t\t\t */\n\t\t\t\t$unique: function(array) {\n\t\t\t\t\treturn array.reverse().filter(function(el, i, arr) {\n\t\t\t\t\t\treturn arr.indexOf(el, i + 1) < 0;\n\t\t\t\t\t}).reverse();\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Fallback for non-existent chaining\n\t\t\t\t */\n\t\t\t\t$chain: function() {},\n\n\t\t\t\t/**\n\t\t\t\t * Determine if value can be executed as a function\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {*} fn\n\t\t\t\t * @returns {boolean} is executable\n\t\t\t\t */\n\t\t\t\t_canExec: function(fn) {\n\t\t\t\t\tif (typeof fn == 'string' && fn.indexOf(':') > -1) {\n\t\t\t\t\t\tvar split = fn.split(':'),\n\t\t\t\t\t\t\tcontroller = W[split[0]],\n\t\t\t\t\t\t\tmethod = split[1];\n\n\t\t\t\t\t\tif (controller && controller[method]) {\n\t\t\t\t\t\t\tfn = controller[method];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn typeof fn == 'function';\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Cast string to most applicable data type\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {*} val\n\t\t\t\t */\n\t\t\t\t_castString: function(val) {\n\t\t\t\t\tif (typeof val == 'string') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tval = val == 'true' ? true :\n\t\t\t\t\t\t\t\tval == 'false' ? false :\n\t\t\t\t\t\t\t\tval == 'null' ? null :\n\t\t\t\t\t\t\t\tparseInt(val).toString() == val ? parseInt(val) :\n\t\t\t\t\t\t\t\t\t/^(?:\\{[\\w\\W]*}|\\[[\\w\\W]*])$/.test(val) ? JSON.parse(val) :\n\t\t\t\t\t\t\t\t\tval;\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Extend object storage with object or key -> val\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {object} obj\n\t\t\t\t * @param {(object|string)} a\n\t\t\t\t * @param {*} b\n\t\t\t\t */\n\t\t\t\t_extend: function(obj, a, b) {\n\t\t\t\t\tvar val = a;\n\n\t\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\t\tval = [];\n\t\t\t\t\t\tval[a] = b;\n\t\t\t\t\t}\n\n\t\t\t\t\t_extend(obj, val);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Convert selection to array\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {($|HTMLElement|string)} selector\n\t\t\t\t * @param {object} [options]\n\t\t\t\t * @param {(HTMLElement|string)} [options.context=document]\n\t\t\t\t * @returns {($|Array)} nodes\n\t\t\t\t */\n\t\t\t\t_selArray: function(selector, options) {\n\t\t\t\t\tif (selector && selector._$) {\n\t\t\t\t\t\treturn selector;\n\t\t\t\t\t}\n\n\t\t\t\t\toptions = options || {};\n\n\t\t\t\t\tvar el = typeof selector == 'string' ?\n\t\t\t\t\t\tW.$(selector, options.context) :\n\t\t\t\t\t\tselector;\n\n\t\t\t\t\treturn W.$toArray(el);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Return a new controller method\n\t\t\t\t *\n\t\t\t\t * @protected\n\t\t\t\t * @param {string} name\n\t\t\t\t * @param {object} pub\n\t\t\t\t * @param {object} [priv]\n\t\t\t\t * @param {(boolean|object)} base\n\t\t\t\t * @param {object} [model]\n\t\t\t\t * @returns {Function}\n\t\t\t\t */\n\t\t\t\t_make: function(name, pub, priv, base, model) {\n\t\t\t\t\treturn function(id) {\n\t\t\t\t\t\tvar Public = pub || {},\n\t\t\t\t\t\t\tPrivate = priv || {};\n\n\t\t\t\t\t\t// Ensure the current controller is not being extended\n\t\t\t\t\t\tif (name != '_tmp') {\n\t\t\t\t\t\t\tvar store = {\n\t\t\t\t\t\t\t\t\t$: model || {}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tobserve = {},\n\t\t\t\t\t\t\t\tcore = {\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Get value from controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {*}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$get: function(key, fallback, set, options) {\n\t\t\t\t\t\t\t\t\t\treturn _get(store, observe, key, fallback, set, options);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Set value in controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {*}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$set: function(key, val, options) {\n\t\t\t\t\t\t\t\t\t\treturn _set(store, observe, key, val, options);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Check if storage criteria is set\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {boolean}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$has: function(key, val) {\n\t\t\t\t\t\t\t\t\t\treturn _has(store, key, val);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Push value into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$push: function(key, val, prepend) {\n\t\t\t\t\t\t\t\t\t\treturn _add(2, store, observe, key, val, prepend);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Concatenate values into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$concat: function(key, val, prepend) {\n\t\t\t\t\t\t\t\t\t\treturn _add(1, store, observe, key, val, prepend);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Extend object into controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$merge: function(key, obj) {\n\t\t\t\t\t\t\t\t\t\treturn _merge(store, observe, key, obj);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Remove value from controller storage\n\t\t\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t\t\t * @returns {Array}\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$drop: function(key, val) {\n\t\t\t\t\t\t\t\t\t\treturn _drop(store, observe, key, val);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Attach callback to data storage change\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$observe: function(key, fn, options) {\n\t\t\t\t\t\t\t\t\t\t_observe(observe, key, fn, options);\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Remove callback from data storage change\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$unobserve: function(key) {\n\t\t\t\t\t\t\t\t\t\tdelete observe[key];\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Execute matching observed callbacks\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$trigger: function(key) {\n\t\t\t\t\t\t\t\t\t\tvar val = _get(store, false, key);\n\n\t\t\t\t\t\t\t\t\t\t_trigger(store, observe, key, val, val, 'trigger');\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t * Destroy current controller\n\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t$destroy: function() {\n\t\t\t\t\t\t\t\t\t\tif (this.$private._destruct) {\n\t\t\t\t\t\t\t\t\t\t\tthis.$private._destruct();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (this._destruct) {\n\t\t\t\t\t\t\t\t\t\t\tthis._destruct();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// If namespaced delete root property\n\t\t\t\t\t\t\t\t\t\tif (id) {\n\t\t\t\t\t\t\t\t\t\t\tdelete W[id];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Extend public and private objects with core methods\n\t\t\t\t\t\t\tPublic = _extend(Public, core);\n\t\t\t\t\t\t\tPrivate = _extend(Private, core);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Clone controller objects for instance support\n\t\t\t\t\t\tPublic = _copy(Public);\n\t\t\t\t\t\tPrivate = _copy(Private);\n\n\t\t\t\t\t\t// Interface $public and $private\n\t\t\t\t\t\tPublic.$private = Private;\n\t\t\t\t\t\tPrivate.$public = Public;\n\n\t\t\t\t\t\tif (base) {\n\t\t\t\t\t\t\tvar pubDest = Public.$destroy,\n\t\t\t\t\t\t\t\tbasePubDest = base._destruct,\n\t\t\t\t\t\t\t\tbasePrivDest = base.$private._destruct;\n\n\t\t\t\t\t\t\t// Extend controller methods into base\n\t\t\t\t\t\t\tPublic = _extend(base, Public, true);\n\t\t\t\t\t\t\tPublic.$private.$public = Public;\n\n\t\t\t\t\t\t\tPublic.$destroy = function() {\n\t\t\t\t\t\t\t\t// Execute controller destructor\n\t\t\t\t\t\t\t\tpubDest.call(this);\n\n\t\t\t\t\t\t\t\t// Execute base destructors\n\t\t\t\t\t\t\t\tif (basePrivDest) {\n\t\t\t\t\t\t\t\t\tbasePrivDest.call(this.$private);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (basePubDest) {\n\t\t\t\t\t\t\t\t\tbasePubDest.call(this);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Public;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Execute specified function when document is ready\n\t\t\t\t *\n\t\t\t\t * @param {(Array|function|string)} fn\n\t\t\t\t */\n\t\t\t\tready: function(fn) {\n\t\t\t\t\tD.readyState == 'complete' ?\n\t\t\t\t\t\tW.$exec(fn) :\n\t\t\t\t\t\tD.addEventListener('DOMContentLoaded', function() {\n\t\t\t\t\t\t\tW.$exec(fn);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t})();\n\n\t// Set data variables and bind elements\n\tif (web) {\n\t\tW.$setRef();\n\t\tW.$setVar();\n\t}\n\n\texports = Wee = W;\n\n\tif (typeof module == 'object' && module.exports) {\n\t\tmodule.exports = W;\n\t}\n})(Wee, undefined);","/* jshint maxparams: 5 */\n\n(function(W) {\n\t'use strict';\n\n\t/**\n\t * Default easing functions\n\t */\n\tvar easings = {\n\t\t\tease: function(t) {\n\t\t\t\treturn t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n\t\t\t},\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process a specific animation property\n\t\t *\n\t\t * @param {HTMLElement} el\n\t\t * @param {string} prop\n\t\t * @param {number} target\n\t\t * @param {object} conf\n\t\t * @param {function} ease\n\t\t */\n\t\tprocess = function(el, prop, target, conf, ease) {\n\t\t\tvar scroll = prop == 'scrollTop' || prop == 'scrollLeft',\n\t\t\t\tbodyScroll = scroll && el === W._body,\n\t\t\t\tcssValue;\n\n\t\t\tif (! scroll) {\n\t\t\t\tcssValue = getComputedStyle(el, null)[prop];\n\t\t\t}\n\n\t\t\tvar css = cssValue !== undefined,\n\t\t\t\tunit = css && cssValue.slice(-2) == 'px' ? 'px' : '',\n\t\t\t\tval = parseInt(\n\t\t\t\t\tcss ?\n\t\t\t\t\t\tcssValue :\n\t\t\t\t\t\tbodyScroll ? (el[prop] || W._html[prop]) : el[prop]\n\t\t\t\t),\n\t\t\t\tsetValue = function(prop, update) {\n\t\t\t\t\tcss ?\n\t\t\t\t\t\tel.style[prop] = update + unit :\n\t\t\t\t\t\tel[prop] = update;\n\n\t\t\t\t\tif (bodyScroll) {\n\t\t\t\t\t\tW._html[prop] = update;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdir = target > val ? 1 : -1,\n\t\t\t\tdist = Math.abs(target - val),\n\t\t\t\tstart = Date.now(),\n\t\t\t\tfn = function() {\n\t\t\t\t\tvar diff = Date.now() - start;\n\n\t\t\t\t\tif (dist && diff < conf.duration) {\n\t\t\t\t\t\tsetValue(prop, val + dist * ease(diff / conf.duration) * dir);\n\t\t\t\t\t\traf(fn);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetValue(prop, target);\n\t\t\t\t\t\tconf.i--;\n\n\t\t\t\t\t\tif (conf.complete && ! conf.i) {\n\t\t\t\t\t\t\tW.$exec(conf.complete);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tfn();\n\t\t},\n\t\traf;\n\n\tW.animate = {\n\t\t/**\n\t\t * Transition an attribute or property value\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {object} values\n\t\t * @param {object} [options]\n\t\t * @param {(Array|function|string)} [options.complete]\n\t\t * @param {number} [options.duration=400]\n\t\t * @param {string} [options.ease='ease']\n\t\t */\n\t\ttween: function(target, values, options) {\n\t\t\tvar conf = W.$extend({\n\t\t\t\t\tduration: 400\n\t\t\t\t}, options),\n\t\t\t\tease = easings[conf.ease] || easings.ease;\n\t\t\tconf.i = 0;\n\n\t\t\tif (! raf) {\n\t\t\t\traf = W._win.requestAnimationFrame || function(cb) {\n\t\t\t\t\tsetTimeout(cb, 15);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tfor (var prop in values) {\n\t\t\t\t\tconf.i++;\n\t\t\t\t\tprocess(el, prop, parseInt(values[prop]), conf, ease);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Add additional easing function(s)\n\t\t *\n\t\t * @param {(object|string)} a - name or easing object\n\t\t * @param {function} [b] - easing function\n\t\t */\n\t\taddEasing: function(a, b) {\n\t\t\tW._extend(easings, a, b);\n\t\t}\n\t};\n})(Wee);","(function(W, U) {\n\t'use strict';\n\n\tvar groups = {},\n\t\tloaded = {},\n\t\troot = '',\n\t\tgroupId = 1,\n\n\t\t_load = {\n\t\t\t/**\n\t\t\t * Request JavaScript\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t * @param {boolean} [conf.async=false]\n\t\t\t */\n\t\t\tjs: function(path, conf) {\n\t\t\t\tvar js = W._doc.createElement('script');\n\n\t\t\t\tjs.async = conf.async === true;\n\t\t\t\tjs.onload = function() {\n\t\t\t\t\tloaded[js.src] = js;\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t};\n\n\t\t\t\tjs.onerror = function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t};\n\n\t\t\t\tjs.src = path;\n\t\t\t\tW._doc.head.appendChild(js);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Request stylesheet\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t */\n\t\t\tcss: function(path, conf) {\n\t\t\t\tvar link = W._doc.createElement('link');\n\n\t\t\t\tlink.rel = 'stylesheet';\n\t\t\t\tlink.href = path;\n\n\t\t\t\tlink.addEventListener('load', function() {\n\t\t\t\t\tloaded[link.href] = link;\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t}, false);\n\n\t\t\t\tlink.addEventListener('error', function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t}, false);\n\n\t\t\t\tW._doc.head.appendChild(link);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Request image\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param {string} path\n\t\t\t * @param {object} conf\n\t\t\t * @param {string} conf.group\n\t\t\t */\n\t\t\timg: function(path, conf) {\n\t\t\t\tvar img = new Image();\n\n\t\t\t\timg.onload = function() {\n\t\t\t\t\t_done(conf.group);\n\t\t\t\t};\n\n\t\t\t\timg.onerror = function() {\n\t\t\t\t\t_fail(conf.group);\n\t\t\t\t};\n\n\t\t\t\timg.src = path;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Decrement remaining asset count\n\t\t *\n\t\t * @private\n\t\t * @param {string} group\n\t\t */\n\t\t_done = function(group) {\n\t\t\tgroups[group][0]--;\n\t\t\tW.assets.ready(group, {}, false);\n\t\t},\n\n\t\t/**\n\t\t * Increment failed asset count\n\t\t *\n\t\t * @private\n\t\t * @param {string} group\n\t\t */\n\t\t_fail = function(group) {\n\t\t\tgroups[group][2]++;\n\t\t\t_done(group);\n\t\t};\n\n\tW.assets = {\n\t\t/**\n\t\t * Get current asset root or set with specified value\n\t\t *\n\t\t * @param {string} [value]\n\t\t * @returns {string} root\n\t\t */\n\t\troot: function(value) {\n\t\t\tif (value) {\n\t\t\t\troot = value;\n\t\t\t}\n\n\t\t\treturn root;\n\t\t},\n\n\t\t/**\n\t\t * Load specified assets with set options\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {boolean} [options.async=false]\n\t\t * @param {boolean} [options.cache=false]\n\t\t * @param {(Array|string)} [options.css]\n\t\t * @param {(Array|function|string)} [options.error]\n\t\t * @param {(Array|string)} [options.files]\n\t\t * @param {string} [options.group]\n\t\t * @param {(Array|string)} [options.img]\n\t\t * @param {(Array|string)} [options.js]\n\t\t * @param {string} [options.root]\n\t\t * @param {(Array|function|string)} [options.success]\n\t\t */\n\t\tload: function(options) {\n\t\t\tvar files = W.$toArray(options.files),\n\t\t\t\tjs = W.$toArray(options.js),\n\t\t\t\tcss = W.$toArray(options.css),\n\t\t\t\timg = W.$toArray(options.img),\n\t\t\t\troot = options.root !== U ? options.root : this.root(),\n\t\t\t\tassets = [],\n\t\t\t\ti = 0,\n\t\t\t\ttype;\n\n\t\t\t// Create group name if not specified\n\t\t\tif (! options.group) {\n\t\t\t\toptions.group = 'g' + groupId++;\n\t\t\t}\n\n\t\t\t// Determine file type\n\t\t\tfor (; i < files.length; i++) {\n\t\t\t\tvar ext = files[i].split('.').pop().split(/#|\\?/)[0];\n\t\t\t\ttype = ext == 'js' || ext == 'css' ?\n\t\t\t\t\text : /(gif|jpe?g|png|svg|webp)$/i.test(ext) ?\n\t\t\t\t\t\t'img' : '';\n\n\t\t\t\tif (type) {\n\t\t\t\t\tassets[files[i]] = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < js.length; i++) {\n\t\t\t\tassets[js[i]] = 'js';\n\t\t\t}\n\n\t\t\tfor (i = 0; i < css.length; i++) {\n\t\t\t\tassets[css[i]] = 'css';\n\t\t\t}\n\n\t\t\tfor (i = 0; i < img.length; i++) {\n\t\t\t\tassets[img[i]] = 'img';\n\t\t\t}\n\n\t\t\t// Set file array length to check against\n\t\t\tgroups[options.group] = [\n\t\t\t\tObject.keys(assets).length,\n\t\t\t\toptions,\n\t\t\t\t0\n\t\t\t];\n\n\t\t\t// Request each specified file\n\t\t\tfor (var file in assets) {\n\t\t\t\tvar noCache = options.cache === false,\n\t\t\t\t\ta = W._doc.createElement('a');\n\n\t\t\t\ttype = assets[file];\n\t\t\t\ta.href = (root && /^(https?:)?\\/\\//i.test(file) ? '' : root) +\n\t\t\t\t\tfile;\n\t\t\t\tfile = a.href;\n\n\t\t\t\tif (! loaded[file] || noCache) {\n\t\t\t\t\tif (noCache) {\n\t\t\t\t\t\tfile += (file.indexOf('?') < 0 ? '?' : '&') + Date.now();\n\t\t\t\t\t}\n\n\t\t\t\t\t_load[type](file, options);\n\t\t\t\t} else {\n\t\t\t\t\t_done(options.group);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove one or more files from the DOM\n\t\t *\n\t\t * @param {(Array|string)} files\n\t\t * @param {string} [root='']\n\t\t */\n\t\tremove: function(files, root) {\n\t\t\tfiles = W.$toArray(files);\n\t\t\troot = root || '';\n\n\t\t\tvar a = W._doc.createElement('a');\n\n\t\t\tfiles.forEach(function(key) {\n\t\t\t\tvar src = root + files[key];\n\t\t\t\ta.href = src;\n\t\t\t\tsrc = a.href;\n\n\t\t\t\tvar el = loaded[src];\n\n\t\t\t\tif (el !== U) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t\tel = null;\n\t\t\t\t\tdelete loaded[src];\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Execute callback when specified references are ready\n\t\t *\n\t\t * @param {string} group\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {(Array|function|string)} [options.error]\n\t\t * @param {object} [options.scope]\n\t\t * @param {(Array|function|string)} [options.success]\n\t\t * @param {boolean} [poll=false]\n\t\t * @returns {boolean} ready\n\t\t */\n\t\tready: function(group, options, poll) {\n\t\t\tvar set = groups[group],\n\t\t\t\tcomplete = set && ! set[0];\n\n\t\t\tif (options === U) {\n\t\t\t\treturn complete;\n\t\t\t}\n\n\t\t\tif (complete) {\n\t\t\t\tvar conf = W.$extend(set[1], options),\n\t\t\t\t\thasErrors = set[2];\n\t\t\t\toptions = {\n\t\t\t\t\targs: conf.args,\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t};\n\n\t\t\t\tif (conf.error && hasErrors) {\n\t\t\t\t\tW.$exec(conf.error, options);\n\t\t\t\t} else if (conf.success && ! hasErrors) {\n\t\t\t\t\tW.$exec(conf.success, options);\n\t\t\t\t}\n\t\t\t} else if (poll) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tW.assets.ready(group, options, true);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Cache existing CSS and JavaScript assets\n\t */\n\tW.$each('link[rel=\"stylesheet\"], script[src]', function(el) {\n\t\tloaded[el.src || el.href] = el;\n\t});\n})(Wee, undefined);","(function(W) {\n\t'use strict';\n\n\tvar version = 1,\n\n\t\t/**\n\t\t * Process the readyState change event\n\t\t *\n\t\t * @private\n\t\t * @param {XMLHttpRequest} x\n\t\t * @param {object} conf\n\t\t * @returns {*}\n\t\t */\n\t\t_change = function(x, conf) {\n\t\t\tif (x.readyState === 4) {\n\t\t\t\tvar code = x.status,\n\t\t\t\t\texec = {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t};\n\n\t\t\t\tif (code >= 200 && code < 400) {\n\t\t\t\t\tif (conf.success) {\n\t\t\t\t\t\t_success(x, conf);\n\t\t\t\t\t}\n\t\t\t\t} else if (conf.error) {\n\t\t\t\t\tW.$exec(conf.error, exec);\n\t\t\t\t}\n\n\t\t\t\tif (conf.complete) {\n\t\t\t\t\tW.$exec(conf.complete, exec);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Execute the request success callback\n\t\t *\n\t\t * @private\n\t\t * @param {XMLHttpRequest} x\n\t\t * @param {object} conf\n\t\t * @returns {boolean}\n\t\t */\n\t\t_success = function(x, conf) {\n\t\t\tvar resp = x.responseText,\n\t\t\t\texec = {\n\t\t\t\t\targs: conf.args.slice(0),\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t};\n\n\t\t\t// Parse JSON response if specified\n\t\t\tif (conf.json) {\n\t\t\t\ttry {\n\t\t\t\t\tresp = JSON.parse(resp);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tresp = {};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texec.args.unshift(resp);\n\n\t\t\t// Execute success callback if specified\n\t\t\tW.$exec(conf.success, exec);\n\t\t},\n\n\t\t/**\n\t\t * Process JSONP request\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t */\n\t\t_jsonp = function(conf) {\n\t\t\tvar el = W._doc.createElement('script');\n\n\t\t\tif (conf.success) {\n\t\t\t\tvar fn = conf.jsonpCallback;\n\n\t\t\t\tif (! fn) {\n\t\t\t\t\tfn = 'jsonp' + version;\n\t\t\t\t\tversion++;\n\t\t\t\t}\n\n\t\t\t\tW._win[fn] = function(data) {\n\t\t\t\t\tconf.args.unshift(data);\n\n\t\t\t\t\tW.$exec(conf.success, {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tconf.data[\n\t\t\t\t\tconf.jsonp === true ?\n\t\t\t\t\t\t'callback' :\n\t\t\t\t\t\tconf.jsonp\n\t\t\t\t\t] = fn;\n\t\t\t}\n\n\t\t\tel.src = W.data._getUrl(conf);\n\n\t\t\tif (conf.error) {\n\t\t\t\tel.onerror = function() {\n\t\t\t\t\tW.$exec(conf.error, {\n\t\t\t\t\t\targs: conf.args,\n\t\t\t\t\t\tscope: conf.scope\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tW._doc.head.appendChild(el);\n\t\t};\n\n\tW.data = {\n\t\t/**\n\t\t * Make request based on specified options\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {Array} [options.args] - callback arguments appended after default values\n\t\t * @param {(Array|function|string)} [options.complete] - callback on request completion\n\t\t * @param {object} [options.data] - object to serialize and pass along with request\n\t\t * @param {(Array|function|string)} [options.error] - callback if request fails\n\t\t * @param {object} [options.headers] - request headers\n\t\t * @param {boolean} [options.json=false] - evaluate the response as JSON and return object\n\t\t * @param {(boolean|string)} [options.jsonp=false] - boolean or callback query parameter override\n\t\t * @param {string} [options.jsonpCallback] - override the name of the JSONP callback function\n\t\t * @param {string} [options.method=get] - request verb\n\t\t * @param {boolean} [options.processData=true] - post data in the body\n\t\t * @param {string} [options.root=''] - prepended request path\n\t\t * @param {object} [options.scope] - callback scope\n\t\t * @param {(Array|function|string)} [options.send] - executed before Ajax call\n\t\t * @param {(Array|function|string)} [options.success] - callback if request succeeds\n\t\t * @param {string} [options.type] - form, html, json, or xml\n\t\t * @param {string} options.url - endpoint to request\n\t\t */\n\t\trequest: function(options) {\n\t\t\tvar conf = W.$extend({\n\t\t\t\targs: [],\n\t\t\t\tdata: {},\n\t\t\t\theaders: {},\n\t\t\t\tmethod: 'get',\n\t\t\t\troot: ''\n\t\t\t}, options);\n\n\t\t\tif (conf.cache === false) {\n\t\t\t\tconf.data.dt = Date.now();\n\t\t\t}\n\n\t\t\t// Prefix root path to url\n\t\t\tif (conf.root) {\n\t\t\t\tconf.url = (conf.root + '/' + conf.url).replace(/\\/{2,}/g, '/');\n\t\t\t}\n\n\t\t\t// Process JSONP\n\t\t\tif (conf.jsonp) {\n\t\t\t\treturn _jsonp(conf);\n\t\t\t}\n\n\t\t\tvar x = new XMLHttpRequest();\n\n\t\t\t// Inject XHR object as first callback argument\n\t\t\tconf.args.unshift(x);\n\n\t\t\tif (conf.send) {\n\t\t\t\tW.$exec(conf.send, {\n\t\t\t\t\targs: conf.args,\n\t\t\t\t\tscope: conf.scope\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tx.onreadystatechange = function() {\n\t\t\t\t_change(x, conf);\n\t\t\t};\n\n\t\t\tvar contentTypeHeader = 'Content-Type',\n\t\t\t\tmethod = conf.method.toUpperCase(),\n\t\t\t\tsend = null,\n\t\t\t\theaders = [];\n\n\t\t\t// Format data based on specified verb\n\t\t\tif (method == 'GET') {\n\t\t\t\tconf.url = this._getUrl(conf);\n\t\t\t} else {\n\t\t\t\tvar str = typeof conf.data == 'string';\n\n\t\t\t\tif (! str && ! conf.type) {\n\t\t\t\t\tconf.type = 'json';\n\t\t\t\t}\n\n\t\t\t\tsend = str || conf.processData === false ?\n\t\t\t\t\tconf.data :\n\t\t\t\t\tconf.type == 'json' ?\n\t\t\t\t\t\tJSON.stringify(conf.data) :\n\t\t\t\t\t\t$.serialize(conf.data);\n\t\t\t}\n\n\t\t\tx.open(method, conf.url, true);\n\n\t\t\t// Add content type header\n\t\t\tif (conf.type == 'json') {\n\t\t\t\theaders[contentTypeHeader] = 'application/json';\n\t\t\t} else if (conf.type == 'xml') {\n\t\t\t\theaders[contentTypeHeader] = 'text/xml';\n\t\t\t} else if (method == 'POST' || conf.type == 'form') {\n\t\t\t\theaders[contentTypeHeader] =\n\t\t\t\t\t'application/x-www-form-urlencoded';\n\t\t\t}\n\n\t\t\t// Accept JSON header\n\t\t\tif (conf.json) {\n\t\t\t\theaders.Accept = 'application/json, text/javascript, */*; q=0.01';\n\t\t\t}\n\n\t\t\t// Add X-Requested-With header for same domain requests\n\t\t\tvar a = W._doc.createElement('a');\n\t\t\ta.href = conf.url;\n\n\t\t\tif (! a.host || a.host == location.host) {\n\t\t\t\theaders['X-Requested-With'] = 'XMLHttpRequest';\n\t\t\t}\n\n\t\t\t// Append character set to content type header\n\t\t\theaders[contentTypeHeader] += '; charset=UTF-8';\n\n\t\t\t// Extend configured headers into defaults\n\t\t\theaders = W.$extend(headers, conf.headers);\n\n\t\t\t// Set request headers\n\t\t\tfor (var key in headers) {\n\t\t\t\tvar val = headers[key];\n\n\t\t\t\tif (val !== false) {\n\t\t\t\t\tx.setRequestHeader(key, val);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tx.send(send);\n\t\t},\n\n\t\t/**\n\t\t * Generate final URL\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t */\n\t\t_getUrl: function(conf) {\n\t\t\tvar url = conf.url.replace(/[\\?&]$/, '');\n\n\t\t\tif (conf.data && Object.keys(conf.data).length) {\n\t\t\t\turl += (url.indexOf('?') < 0 ? '?' : '&') +\n\t\t\t\t\tW.$serialize(conf.data);\n\t\t\t}\n\n\t\t\tif (url[0] != '/' && ! /^(?:[a-z]+:)?\\/\\//i.test(url)) {\n\t\t\t\turl = '/' + url;\n\t\t\t}\n\n\t\t\treturn url;\n\t\t}\n\t};\n})(Wee);","/* jshint maxdepth: 4 */\n\n(function(W, U) {\n\t'use strict';\n\n\t/**\n\t * Get the selected options from a select\n\t *\n\t * @private\n\t * @param {HTMLElement} select\n\t * @returns {Array} selected\n\t */\n\tvar _getSelected = function(select) {\n\t\tvar options = select.options,\n\t\t\tarr = [],\n\t\t\ti = 0;\n\n\t\tfor (; i < options.length; i++) {\n\t\t\tvar option = options[i];\n\n\t\t\tif (option.selected) {\n\t\t\t\tarr.push(option.value);\n\t\t\t}\n\t\t}\n\n\t\treturn arr;\n\t},\n\n\t/**\n\t * Get class value of element\n\t *\n\t * @private\n\t * @param {HTMLElement} el\n\t * @returns {string}\n\t */\n\t_getClass = function(el) {\n\t\treturn el instanceof SVGElement ?\n\t\t\tel.getAttribute('class') :\n\t\t\tel.className;\n\t},\n\n\t/**\n\t * Set class value of element\n\t *\n\t * @private\n\t * @param {HTMLElement} el\n\t * @param {string} className\n\t */\n\t_setClass = function(el, className) {\n\t\tel instanceof SVGElement ?\n\t\t\tel.setAttribute('class', className) :\n\t\t\tel.className = className;\n\t},\n\n\t/**\n\t * Return either direct previous or next sibling\n\t *\n\t * @private\n\t * @param {($|HTMLElement|string)} target\n\t * @param {int} dir\n\t * @param filter\n\t * @param {object} [options]\n\t * @returns {HTMLElement}\n\t */\n\t_getSibling = function(target, dir, filter, options) {\n\t\tvar match;\n\n\t\tW.$each(target, function(el) {\n\t\t\tvar index = W.$index(el) + dir;\n\n\t\t\tW.$children(W.$parent(el)).forEach(function(el, i) {\n\t\t\t\tif (i === index &&\n\t\t\t\t\t(! filter || filter && W.$is(el, filter, options))) {\n\t\t\t\t\tmatch = el;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn match;\n\t},\n\n\t/**\n\t * Convert dash-separated string to camel-case\n\t *\n\t * @private\n\t * @param {string} name\n\t * @returns {string}\n\t */\n\t_toCamel = function(name) {\n\t\treturn name.toLowerCase()\n\t\t\t.replace(/-(.)/g, function(match, val) {\n\t\t\t\treturn val.toUpperCase();\n\t\t\t});\n\t},\n\n\t/**\n\t * Convert camel-cased string to dash-separated\n\t *\n\t * @private\n\t * @param {string} name\n\t * @returns {string}\n\t */\n\t_toDashed = function(name) {\n\t\treturn name.replace(/[A-Z]/g, function(match) {\n\t\t\treturn '-' + match[0].toLowerCase();\n\t\t});\n\t};\n\n\tW.fn.extend({\n\t\t/**\n\t\t * Add classes to each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t */\n\t\t$addClass: function(target, value) {\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar cn = _getClass(el),\n\t\t\t\t\tname = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, cn],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tvar names = cn.split(' '),\n\t\t\t\t\t\tupd = name.split(' ').filter(function(val) {\n\t\t\t\t\t\t\treturn names.indexOf(val) < 0;\n\t\t\t\t\t\t});\n\n\t\t\t\t\tupd.unshift(cn);\n\n\t\t\t\t\t_setClass(el, upd.join(' '));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t */\n\t\t$after: function(target, source, remove) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar aft = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof aft == 'string') {\n\t\t\t\t\taft = W.$parseHTML(aft);\n\t\t\t\t}\n\n\t\t\t\tif (aft) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(aft, function(cel) {\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpar.insertBefore(cel, el.nextSibling);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t}, {\n\t\t\t\t\t\treverse: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (remove) {\n\t\t\t\t\tW.$remove(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t */\n\t\t$append: function(target, source) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar app = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof app == 'string') {\n\t\t\t\t\tapp = W.$parseHTML(app);\n\t\t\t\t}\n\n\t\t\t\tif (app) {\n\t\t\t\t\tW.$each(app, function(cel) {\n\t\t\t\t\t\tel.appendChild(cel);\n\t\t\t\t\t});\n\n\t\t\t\t\tW.$setRef(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get attribute of first matching selection or set attribute\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$attr: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel.setAttribute(key, a[key]);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel.setAttribute(a, func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn W.$(target)[0].getAttribute(a);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t */\n\t\t$before: function(target, source, remove) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar bef = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof bef == 'string') {\n\t\t\t\t\tbef = W.$parseHTML(bef);\n\t\t\t\t}\n\n\t\t\t\tif (bef) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(bef, function(cel) {\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpar.insertBefore(cel, el);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t}, {\n\t\t\t\t\t\treverse: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (remove) {\n\t\t\t\t\tW.$remove(el);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique direct children of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param filter\n\t\t * @returns {Array}\n\t\t */\n\t\t$children: function(parent, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tvar children = W._slice.call(el.children);\n\n\t\t\t\tarr = arr.concat(\n\t\t\t\t\tfilter ?\n\t\t\t\t\t\tW.$filter(children, filter) :\n\t\t\t\t\t\tchildren\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Clone each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {Array}\n\t\t */\n\t\t$clone: function(target) {\n\t\t\treturn W.$map(target, function(el) {\n\t\t\t\treturn el.cloneNode(true);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique closest ancestors of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param context\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$closest: function(target, filter, context) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\tif (W.$is(el, filter)) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\n\t\t\t\twhile (el !== null) {\n\t\t\t\t\tel = el.parentNode;\n\n\t\t\t\t\tif (el === W._html) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (W.$is(el, filter)) {\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tcontext: context\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Determine if any matching parent contains descendant selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param descendant\n\t\t * @returns {boolean}\n\t\t */\n\t\t$contains: function(parent, descendant) {\n\t\t\tvar b = false;\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tif (W.$(descendant, el).length) {\n\t\t\t\t\tb = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn b;\n\t\t},\n\n\t\t/**\n\t\t * Get unique content of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @returns {Array}\n\t\t */\n\t\t$contents: function(parent) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tarr = arr.concat(W._slice.call(el.childNodes));\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get CSS value of first matching selection or set value\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(object|string)} a\n\t\t * @param {(function|string)} [b]\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$css: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel.style[key] = a[key];\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel.style[a] = func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el.style[a]],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\treturn getComputedStyle(el, null)[a];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get data of first matching selection or set data\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param [b]\n\t\t * @returns {(object|string|undefined)}\n\t\t */\n\t\t$data: function(target, a, b) {\n\t\t\tif (a === U) {\n\t\t\t\tvar el = W.$(target)[0],\n\t\t\t\t\tarr = {};\n\n\t\t\t\tW._slice.call(el.attributes).forEach(function(attr) {\n\t\t\t\t\tif (attr.name.substr(0, 5) == 'data-') {\n\t\t\t\t\t\tarr[_toCamel(attr.name.substr(5))] =\n\t\t\t\t\t\t\tW._castString(attr.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn arr;\n\t\t\t}\n\n\t\t\tif (W.$isObject(a)) {\n\t\t\t\tvar obj = {};\n\n\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\tobj['data-' + _toDashed(key)] = a[key];\n\t\t\t\t});\n\n\t\t\t\ta = obj;\n\t\t\t} else {\n\t\t\t\ta = 'data-' + _toDashed(a);\n\t\t\t}\n\n\t\t\treturn W._castString(W.$attr(target, a, b));\n\t\t},\n\n\t\t/**\n\t\t * Remove child nodes from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$empty: function(target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\twhile (el.firstChild) {\n\t\t\t\t\tel.removeChild(el.firstChild);\n\t\t\t\t}\n\n\t\t\t\tW.$setRef(el);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get indexed node of matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {int} index\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$eq: function(target, index, context) {\n\t\t\tvar el = W.$(target, context);\n\n\t\t\treturn el[index < 0 ? el.length + index : index];\n\t\t},\n\n\t\t/**\n\t\t * Return a filtered subset of elements from a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$filter: function(target, filter, options) {\n\t\t\tvar func = W._canExec(filter);\n\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\tvar match = func ?\n\t\t\t\t\tW.$exec(filter, {\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tW.$is(el, filter, options);\n\n\t\t\t\treturn match ? el : false;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get unique filtered descendants from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} parent\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$find: function(parent, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(parent, function(el) {\n\t\t\t\tarr = arr.concat(W.$(filter, el));\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get the first element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$first: function(target, context) {\n\t\t\treturn W.$(target, context)[0];\n\t\t},\n\n\t\t/**\n\t\t * Determine if the matching selection has a class\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {string} className\n\t\t * @returns {boolean}\n\t\t */\n\t\t$hasClass: function(target, className) {\n\t\t\treturn W.$(target).some(function(el) {\n\t\t\t\treturn new RegExp('(^| )' + className + '($| )', 'gim')\n\t\t\t\t\t.test(_getClass(el));\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the height of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {number}\n\t\t */\n\t\t$height: function(target, value) {\n\t\t\tvar func = value && W._canExec(value),\n\t\t\t\theight;\n\n\t\t\tif (value === U || value === true || func) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el === W._win) {\n\t\t\t\t\theight = el.innerHeight;\n\t\t\t\t} else if (el === W._doc) {\n\t\t\t\t\theight = el.documentElement.scrollHeight;\n\t\t\t\t} else {\n\t\t\t\t\theight = el.offsetHeight;\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvar style = getComputedStyle(el);\n\t\t\t\t\t\theight += parseInt(style.marginTop) +\n\t\t\t\t\t\t\tparseInt(style.marginBottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (! func) {\n\t\t\t\t\treturn height;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvalue = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, height],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (typeof value == 'number') {\n\t\t\t\t\tvalue += 'px';\n\t\t\t\t}\n\n\t\t\t\tW.$css(el, 'height', value);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Hide each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$hide: function(target) {\n\t\t\tW.$addClass(target, 'js-hide');\n\t\t},\n\n\t\t/**\n\t\t * Get inner HTML of first selection or set each matching selection HTML\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {(string|undefined)}\n\t\t */\n\t\t$html: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\treturn W.$(target)[0].innerHTML;\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar html = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (html !== false && html !== U) {\n\t\t\t\t\tif (el.nodeName == 'SELECT' && ! W._win.atob) {\n\t\t\t\t\t\tel.outerHTML = el.outerHTML.replace(\n\t\t\t\t\t\t\tel.innerHTML + ' 0) {\n\t\t\t\t\t\tcel = W.$clone(cel)[0];\n\t\t\t\t\t}\n\n\t\t\t\t\tpar.insertBefore(cel, el.nextSibling);\n\n\t\t\t\t\tW.$setRef(par);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element before\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$insertBefore: function(source, target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tW.$each(source, function(cel) {\n\t\t\t\t\tel.parentNode.insertBefore(cel, el);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Determine if at least one matching selection matches\n\t\t * a specified criteria\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {boolean}\n\t\t */\n\t\t$is: function(target, filter, options) {\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\tif (typeof filter == 'string' && filter.slice(0, 4) == 'ref:') {\n\t\t\t\t\treturn W.$(filter).indexOf(el) > -1;\n\t\t\t\t}\n\n\t\t\t\tif (W.$isObject(filter)) {\n\t\t\t\t\tfor (var key in filter) {\n\t\t\t\t\t\tif (filter[key] === el) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(filter)) {\n\t\t\t\t\treturn filter.indexOf(el) > -1;\n\t\t\t\t}\n\n\t\t\t\tif (W._canExec(filter)) {\n\t\t\t\t\treturn W.$exec(filter, W.$extend({\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}, options));\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tel.matches ||\n\t\t\t\t\tel.msMatchesSelector ||\n\t\t\t\t\tel.webkitMatchesSelector ||\n\t\t\t\t\tel.mozMatchesSelector\n\t\t\t\t).call(el, filter);\n\t\t\t}).length > 0;\n\t\t},\n\n\t\t/**\n\t\t * Get the last element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\t$last: function(target, context) {\n\t\t\treturn W.$eq(target, -1, context);\n\t\t},\n\n\t\t/**\n\t\t * Get the unique next sibling of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$next: function(target, filter, options) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\treturn _getSibling(el, 1, filter, options);\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Returns elements not matching the filtered selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$not: function(target, filter, options) {\n\t\t\tvar func = W._canExec(filter);\n\n\t\t\treturn W.$map(target, function(el, i) {\n\t\t\t\treturn (func ?\n\t\t\t\t\tW.$exec(filter, {\n\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tW.$is(el, filter, options)) ? false : el;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get the position of a matching selection relative to the document\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|number)} value\n\t\t * @returns {{top: number, left: number}}\n\t\t */\n\t\t$offset: function(target, value) {\n\t\t\tvar rect = W.$(target)[0].getBoundingClientRect(),\n\t\t\t\toffset = {\n\t\t\t\t\ttop: rect.top + W._win.pageYOffset,\n\t\t\t\t\tleft: rect.left + W._win.pageXOffset\n\t\t\t\t};\n\n\t\t\tif (value) {\n\t\t\t\tvar func = W._canExec(value);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tvar set = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, offset],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\t\tif (typeof set.top == 'number') {\n\t\t\t\t\t\tset.top = set.top + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof set.left == 'number') {\n\t\t\t\t\t\tset.left = set.left + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tW.$css(el, set);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn offset;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get unique parent from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} child\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$parent: function(child, filter) {\n\t\t\treturn W.$unique(W.$map(child, function(el) {\n\t\t\t\tvar parent = el.parentNode;\n\t\t\t\treturn ! filter || W.$is(parent, filter) ? parent : false;\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Get unique ancestors of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} child\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$parents: function(child, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(child, function(el) {\n\t\t\t\twhile (el !== null) {\n\t\t\t\t\tel = el.parentNode;\n\n\t\t\t\t\tif (! filter || (filter && W.$is(el, filter))) {\n\t\t\t\t\t\tarr.push(el);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (el === W._html) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get the position of the first matching selection relative\n\t\t * to its offset parent\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {{top: number, left: number}}\n\t\t */\n\t\t$position: function(target) {\n\t\t\tvar el = W.$(target)[0];\n\n\t\t\treturn {\n\t\t\t\ttop: el.offsetTop,\n\t\t\t\tleft: el.offsetLeft\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t */\n\t\t$prepend: function(target, source) {\n\t\t\tvar func = W._canExec(source);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar pre = func ?\n\t\t\t\t\tW.$exec(source, {\n\t\t\t\t\t\targs: [i, el.innerHTML],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tsource;\n\n\t\t\t\tif (typeof pre == 'string') {\n\t\t\t\t\tpre = W.$parseHTML(pre);\n\t\t\t\t}\n\n\t\t\t\tif (pre) {\n\t\t\t\t\tW.$each(pre, function(cel) {\n\t\t\t\t\t\tel.insertBefore(cel, el.firstChild);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get the unique previous sibling of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$prev: function(target, filter, options) {\n\t\t\treturn W.$unique(W.$map(target, function(el) {\n\t\t\t\treturn _getSibling(el, -1, filter, options);\n\t\t\t}));\n\t\t},\n\n\t\t/**\n\t\t * Get property of first matching selection or set property of\n\t\t * each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {*}\n\t\t */\n\t\t$prop: function(target, a, b) {\n\t\t\tvar obj = W.$isObject(a);\n\n\t\t\tif (b !== U || obj) {\n\t\t\t\tvar func = ! obj && W._canExec(b);\n\n\t\t\t\tW.$each(target, function(el, i) {\n\t\t\t\t\tobj ?\n\t\t\t\t\t\tObject.keys(a).forEach(function(key) {\n\t\t\t\t\t\t\tel[key] = a[key];\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tel[a] = func ?\n\t\t\t\t\t\t\tW.$exec(b, {\n\t\t\t\t\t\t\t\targs: [i, el],\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tb;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\treturn el[a];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove each matching selection from the document\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\t$remove: function(target, context) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\tpar.removeChild(el);\n\n\t\t\t\tW.$setRef(par);\n\t\t\t}, {\n\t\t\t\tcontext: context\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Remove specified attribute of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {string} name\n\t\t */\n\t\t$removeAttr: function(target, name) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tname.split(/\\s+/).forEach(function(value) {\n\t\t\t\t\tel.removeAttribute(value);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Remove classes from each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t */\n\t\t$removeClass: function(target, value) {\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar cn = _getClass(el),\n\t\t\t\t\tname = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, cn],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tvar names = name.split(' ');\n\n\t\t\t\t\t_setClass(el, cn.split(' ').filter(function(val) {\n\t\t\t\t\t\treturn names.indexOf(val) < 0;\n\t\t\t\t\t}).join(' '));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Replace each matching selection with selection or markup\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {($|HTMLElement|string)} source\n\t\t */\n\t\t$replaceWith: function(target, source) {\n\t\t\tW.$after(target, source, true);\n\t\t},\n\n\t\t/**\n\t\t * Get or set the X scroll position of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {number} value\n\t\t * @returns {number}\n\t\t */\n\t\t$scrollLeft: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = target ? W.$(target)[0] : W._win;\n\n\t\t\t\treturn el === W._win ?\n\t\t\t\t\tel.pageXOffset :\n\t\t\t\t\tel.scrollLeft;\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tel.scrollLeft = value;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the Y scroll position of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {number} value\n\t\t * @returns {number}\n\t\t */\n\t\t$scrollTop: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = target ? W.$(target)[0] : W._win;\n\n\t\t\t\treturn el === W._win ?\n\t\t\t\t\tel.pageYOffset :\n\t\t\t\t\tel.scrollTop;\n\t\t\t}\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tel.scrollTop = value;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Serialize input values from first matching form selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {boolean} json\n\t\t * @returns {string}\n\t\t */\n\t\t$serializeForm: function(target, json) {\n\t\t\tvar el = W.$(target)[0],\n\t\t\t\tobj = {},\n\t\t\t\ti = 0;\n\n\t\t\tif (el.nodeName != 'FORM') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfor (; i < el.elements.length; i++) {\n\t\t\t\tvar child = el.elements[i],\n\t\t\t\t\tname = child.name,\n\t\t\t\t\ttype = child.type;\n\n\t\t\t\tif (name && type != 'file' && type != 'reset') {\n\t\t\t\t\tvar arr = name.slice(-2) == '[]';\n\n\t\t\t\t\tif (arr) {\n\t\t\t\t\t\tname = name.slice(0, -2);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type == 'select-multiple') {\n\t\t\t\t\t\tobj[name] = _getSelected(child);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttype != 'submit' && type != 'button' &&\n\t\t\t\t\t\t((type != 'checkbox' && type != 'radio') ||\n\t\t\t\t\t\tchild.checked)) {\n\t\t\t\t\t\tif (arr || (type == 'checkbox' && obj[name])) {\n\t\t\t\t\t\t\tobj[name] = W.$toArray(obj[name]);\n\t\t\t\t\t\t\tobj[name].push(child.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj[name] = child.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn json ? obj : W.$serialize(obj);\n\t\t},\n\n\t\t/**\n\t\t * Show each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$show: function(target) {\n\t\t\tW.$removeClass(target, 'js-hide');\n\t\t},\n\n\t\t/**\n\t\t * Get unique siblings of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param filter\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$siblings: function(target, filter) {\n\t\t\tvar arr = [];\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tvar siblings = W._slice.call(el.parentNode.children),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfor (; i < siblings.length; i++) {\n\t\t\t\t\tif (siblings[i] === el) {\n\t\t\t\t\t\tsiblings.splice(i, 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tarr = arr.concat(\n\t\t\t\t\tfilter ?\n\t\t\t\t\t\tW.$filter(siblings, filter) :\n\t\t\t\t\t\tsiblings\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn W.$unique(arr);\n\t\t},\n\n\t\t/**\n\t\t * Get subset of selection matches from specified range\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {int} start\n\t\t * @param {int} end\n\t\t * @returns {Array} elements\n\t\t */\n\t\t$slice: function(target, start, end) {\n\t\t\tif (! target._$) {\n\t\t\t\ttarget = W._selArray(target);\n\t\t\t}\n\n\t\t\treturn W._slice.call(target, start, end);\n\t\t},\n\n\t\t/**\n\t\t * Get inner text of first selection or set each matching selection text\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {string}\n\t\t */\n\t\t$text: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\treturn W.$map(target, function(el) {\n\t\t\t\t\treturn el.textContent.trim();\n\t\t\t\t}).join('');\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tel.textContent = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, el.textContent.trim()],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Toggle the display of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t */\n\t\t$toggle: function(target) {\n\t\t\tW.$each(target, function(el) {\n\t\t\t\t! W.$hasClass(el, 'js-hide') ?\n\t\t\t\t\tW.$hide(el) :\n\t\t\t\t\tW.$show(el);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Toggle adding and removing class(es) from the specified element\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} className\n\t\t * @param {boolean} [state]\n\t\t */\n\t\t$toggleClass: function(target, className, state) {\n\t\t\tvar func = W._canExec(className);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tif (func) {\n\t\t\t\t\tclassName = W.$exec(className, {\n\t\t\t\t\t\targs: [i, _getClass(el), state],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (className) {\n\t\t\t\t\tclassName.split(/\\s+/).forEach(function(value) {\n\t\t\t\t\t\tstate === false ||\n\t\t\t\t\t\t(state === U && W.$hasClass(el, value)) ?\n\t\t\t\t\t\t\tW.$removeClass(el, value) :\n\t\t\t\t\t\t\tW.$addClass(el, value);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get value of first matching selection or set match values\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} value\n\t\t * @returns {(Array|string)}\n\t\t */\n\t\t$val: function(target, value) {\n\t\t\tif (value === U) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el.type == 'select-multiple') {\n\t\t\t\t\treturn _getSelected(el);\n\t\t\t\t}\n\n\t\t\t\treturn el.value;\n\t\t\t}\n\n\t\t\tvar func = W._canExec(value);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tif (el.nodeName == 'SELECT') {\n\t\t\t\t\tvar opt = W.$find(el, 'option');\n\t\t\t\t\tvalue = W.$toArray(value);\n\n\t\t\t\t\topt.forEach(function(a) {\n\t\t\t\t\t\tif (value.indexOf(a.value) > -1) {\n\t\t\t\t\t\t\ta.selected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tel.value = func ?\n\t\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\t\targs: [i, el.value],\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tvalue;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Get or set the width of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {number}\n\t\t */\n\t\t$width: function(target, value) {\n\t\t\tvar func = value && W._canExec(value),\n\t\t\t\twidth;\n\n\t\t\tif (value === U || value === true || func) {\n\t\t\t\tvar el = W.$(target)[0];\n\n\t\t\t\tif (el === W._win) {\n\t\t\t\t\twidth = el.innerWidth;\n\t\t\t\t} else if (el === W._doc) {\n\t\t\t\t\twidth = el.documentElement.scrollWidth;\n\t\t\t\t} else {\n\t\t\t\t\twidth = el.offsetWidth;\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvar style = getComputedStyle(el);\n\t\t\t\t\t\twidth += parseInt(style.marginLeft) +\n\t\t\t\t\t\t\tparseInt(style.marginRight);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (! func) {\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvalue = func ?\n\t\t\t\t\tW.$exec(value, {\n\t\t\t\t\t\targs: [i, width],\n\t\t\t\t\t\tscope: el\n\t\t\t\t\t}) :\n\t\t\t\t\tvalue;\n\n\t\t\t\tif (typeof value == 'number') {\n\t\t\t\t\tvalue += 'px';\n\t\t\t\t}\n\n\t\t\t\tW.$css(el, 'width', value);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} html\n\t\t */\n\t\t$wrap: function(target, html) {\n\t\t\tvar func = W._canExec(html);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar wrap = W.$(\n\t\t\t\t\tfunc ?\n\t\t\t\t\t\tW.$exec(html, {\n\t\t\t\t\t\t\targs: i,\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\thtml\n\t\t\t\t);\n\n\t\t\t\tif (wrap) {\n\t\t\t\t\tvar par = el.parentNode;\n\n\t\t\t\t\tW.$each(wrap, function(cel) {\n\t\t\t\t\t\tcel = cel.cloneNode(true);\n\n\t\t\t\t\t\tpar.insertBefore(cel, el);\n\t\t\t\t\t\tcel.appendChild(el);\n\n\t\t\t\t\t\tW.$setRef(par);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around the content of each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @param {(function|string)} html\n\t\t */\n\t\t$wrapInner: function(target, html) {\n\t\t\tvar func = W._canExec(html);\n\n\t\t\tW.$each(target, function(el, i) {\n\t\t\t\tvar wrap = W.$parseHTML(\n\t\t\t\t\tfunc ?\n\t\t\t\t\t\tW.$exec(html, {\n\t\t\t\t\t\t\targs: i,\n\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\thtml\n\t\t\t\t);\n\n\t\t\t\tif (wrap) {\n\t\t\t\t\tvar children = W.$children(el);\n\n\t\t\t\t\tif (! children.length) {\n\t\t\t\t\t\tchildren = W.$html(el);\n\n\t\t\t\t\t\tW.$empty(el);\n\t\t\t\t\t\tW.$html(wrap, children);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tW.$each(children, function(cel) {\n\t\t\t\t\t\t\twrap[0].appendChild(cel);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tW.$append(el, wrap);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(Wee, undefined);","/* jshint maxparams: 5 */\n\n(function(W) {\n\t'use strict';\n\n\tvar bound = [],\n\t\tcustom = {},\n\n\t\t/**\n\t\t * Attach specific event logic to element\n\t\t *\n\t\t * @private\n\t\t * @param {Array} els\n\t\t * @param {object} obj\n\t\t * @param {object} options\n\t\t */\n\t\t_bind = function(els, obj, options) {\n\t\t\t// Redefine variables when delegating\n\t\t\tif (options && options.delegate) {\n\t\t\t\toptions.targ = els;\n\t\t\t\tels = options.delegate;\n\t\t\t}\n\n\t\t\t// For each element attach events\n\t\t\tW.$each(els, function(el) {\n\t\t\t\t// Loop through object events\n\t\t\t\tfor (var key in obj) {\n\t\t\t\t\tvar evts = key.split(' '),\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < evts.length; i++) {\n\t\t\t\t\t\tvar conf = W.$extend({\n\t\t\t\t\t\t\t\targs: [],\n\t\t\t\t\t\t\t\tonce: false,\n\t\t\t\t\t\t\t\tscope: el\n\t\t\t\t\t\t\t}, options),\n\t\t\t\t\t\t\tfn = obj[key],\n\t\t\t\t\t\t\tevt = evts[i],\n\t\t\t\t\t\t\tev = evt,\n\t\t\t\t\t\t\tparts = ev.split('.'),\n\t\t\t\t\t\t\tf = fn;\n\t\t\t\t\t\tevt = parts[0];\n\n\t\t\t\t\t\tif (parts.length == 1 && conf.namespace) {\n\t\t\t\t\t\t\tev += '.' + conf.namespace;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prepend element to callback arguments if necessary\n\t\t\t\t\t\tif (conf.args[1] !== el) {\n\t\t\t\t\t\t\tconf.args.unshift(0, el);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function(el, evt, fn, f, conf) {\n\t\t\t\t\t\t\tvar cb = function(e) {\n\t\t\t\t\t\t\t\tvar cont = true;\n\t\t\t\t\t\t\t\tconf.args[0] = e;\n\n\t\t\t\t\t\t\t\t// If watch within ancestor make sure the target\n\t\t\t\t\t\t\t\t// matches the selector\n\t\t\t\t\t\t\t\tif (conf.targ) {\n\t\t\t\t\t\t\t\t\tvar targ = conf.targ,\n\t\t\t\t\t\t\t\t\t\tsel = targ._$ ? targ.sel : targ;\n\n\t\t\t\t\t\t\t\t\t// Update refs when targeting ref\n\t\t\t\t\t\t\t\t\tif (typeof sel == 'string' &&\n\t\t\t\t\t\t\t\t\t\tsel.indexOf('ref:') > -1) {\n\t\t\t\t\t\t\t\t\t\tW.$setRef(el);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tcont = W.$toArray(W.$(sel)).some(function(el) {\n\t\t\t\t\t\t\t\t\t\treturn el.contains(e.target) && (targ = el);\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Ensure element argument is the target\n\t\t\t\t\t\t\t\t\tconf.args[1] = conf.scope = targ;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (cont) {\n\t\t\t\t\t\t\t\t\tW.$exec(fn, conf);\n\n\t\t\t\t\t\t\t\t\t// Unbind after first execution\n\t\t\t\t\t\t\t\t\tif (conf.once) {\n\t\t\t\t\t\t\t\t\t\t_off(el, evt, f);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Ensure the specified element, event, and function\n\t\t\t\t\t\t\t// combination hasn't already been bound\n\t\t\t\t\t\t\tif (evt != 'init' && ! W.events.bound(el, ev, f).length) {\n\t\t\t\t\t\t\t\t// Determine if the event is native or custom\n\t\t\t\t\t\t\t\tif ('on' + evt in el) {\n\t\t\t\t\t\t\t\t\tel.addEventListener(evt, cb, false);\n\t\t\t\t\t\t\t\t} else if (custom[evt]) {\n\t\t\t\t\t\t\t\t\tcustom[evt][0](el, fn, conf);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbound.push({\n\t\t\t\t\t\t\t\t\tel: el,\n\t\t\t\t\t\t\t\t\tev: ev,\n\t\t\t\t\t\t\t\t\tevt: evt,\n\t\t\t\t\t\t\t\t\tcb: cb,\n\t\t\t\t\t\t\t\t\tfn: f\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (evt == 'init' || conf.init === true) {\n\t\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})(el, evt, fn, f, conf);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Detach event(s) from element\n\t\t *\n\t\t * @private\n\t\t * @param {(HTMLElement|string)} [sel]\n\t\t * @param {string} [evt]\n\t\t * @param {function} [fn]\n\t\t */\n\t\t_off = function(sel, evt, fn) {\n\t\t\tW.$each(W.events.bound(sel, evt, fn), function(e) {\n\t\t\t\tif ('on' + e.evt in W._doc) {\n\t\t\t\t\te.el.removeEventListener(e.evt, e.cb);\n\t\t\t\t} else if (custom[e.evt]) {\n\t\t\t\t\tcustom[e.evt][1](e.el, e.cb);\n\t\t\t\t}\n\n\t\t\t\tbound.splice(bound.indexOf(e), 1);\n\t\t\t});\n\t\t};\n\n\tW.events = {\n\t\t/**\n\t\t * Bind event function to element\n\t\t *\n\t\t * @param {(HTMLElement|object|string)} target\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {(function|object)} [b] - event callback or options object\n\t\t * @param {(object|string)} [c] - event options\n\t\t * @param {Array} [c.args] - callback arguments\n\t\t * @param {(HTMLElement|string)} [c.context=document]\n\t\t * @param {(HTMLElement|string)} [c.delegate]\n\t\t * @param {boolean} [c.once=false] - remove event after first execution\n\t\t * @param {object} [c.scope]\n\t\t */\n\t\ton: function(target, a, b, c) {\n\t\t\tvar evts = [];\n\n\t\t\tif (W.$isObject(target) && ! target._$) {\n\t\t\t\tvar keys = Object.keys(target),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfor (; i < keys.length; i++) {\n\t\t\t\t\tvar key = keys[i];\n\t\t\t\t\tevts = target[key];\n\n\t\t\t\t\t_bind(key, evts, a);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\tevts[a] = b;\n\t\t\t\t} else {\n\t\t\t\t\tevts = a;\n\t\t\t\t\tc = b;\n\t\t\t\t}\n\n\t\t\t\t_bind(target, evts, c);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove specified event from specified element\n\t\t *\n\t\t * @param {(HTMLElement|string)} [target]\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {function} [b] - specific function to remove\n\t\t */\n\t\toff: function(target, a, b) {\n\t\t\tvar obj = a;\n\n\t\t\tif (a) {\n\t\t\t\tif (typeof a == 'string') {\n\t\t\t\t\tobj = [];\n\t\t\t\t\tobj[a] = b;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in obj) {\n\t\t\t\t\tvar evts = key.split(' '),\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor (; i < evts.length; i++) {\n\t\t\t\t\t\tvar evt = evts[i],\n\t\t\t\t\t\tfn = obj[evt];\n\n\t\t\t\t\t\t_off(target, evt, fn);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_off(target);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get currently bound events to optional specified element and event|function\n\t\t *\n\t\t * @param {(boolean|HTMLElement|string)} [target]\n\t\t * @param {string} [event] - event name to match\n\t\t * @param {function} [fn] - specific function to match\n\t\t * @returns {Array} matches\n\t\t */\n\t\tbound: function(target, event, fn) {\n\t\t\tvar segs = (event || '').split('.'),\n\t\t\t\tmatches = [];\n\t\t\ttarget = target || [0];\n\n\t\t\tW.$each(target, function(el) {\n\t\t\t\tObject.keys(bound).forEach(function(e) {\n\t\t\t\t\tvar binding = bound[e],\n\t\t\t\t\t\tparts = binding.ev.split('.'),\n\t\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tif (el && el !== binding.el) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event &&\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tsegs[0] !== '' &&\n\t\t\t\t\t\t\tsegs[0] != parts[0]\n\t\t\t\t\t\t) ||\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tsegs[1] &&\n\t\t\t\t\t\t\tsegs[1] != parts[1]\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fn && String(fn) !== String(binding.fn)) {\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tmatches.push(binding);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn target ? matches : bound;\n\t\t},\n\n\t\t/**\n\t\t * Execute bound event for each matching selection\n\t\t *\n\t\t * @param {(HTMLElement|string)} target\n\t\t * @param {string} name\n\t\t */\n\t\ttrigger: function(target, name) {\n\t\t\tvar fn = function() {};\n\n\t\t\tthis.bound(target, name).forEach(function(e) {\n\t\t\t\te.cb({\n\t\t\t\t\ttarget: e.el,\n\t\t\t\t\tpreventDefault: fn,\n\t\t\t\t\tstopPropagation: fn\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Add a custom event\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {function} on\n\t\t * @param {function} off\n\t\t */\n\t\taddEvent: function(name, on, off) {\n\t\t\tcustom[name] = [on, off];\n\t\t}\n\t};\n})(Wee);","/* jshint maxparams: 5 */\n\n(function(W, D, E, H, U) {\n\t'use strict';\n\n\tvar support = H && H.pushState,\n\t\tentries = [],\n\t\tsettings = {},\n\t\troot = '',\n\t\tpath = '',\n\n\t\t/**\n\t\t * Return current path\n\t\t *\n\t\t * @private\n\t\t * @param {object} [loc]\n\t\t * @returns {string}\n\t\t */\n\t\t_path = function(loc) {\n\t\t\tloc = loc || location;\n\t\t\treturn loc.pathname + loc.search + loc.hash;\n\t\t},\n\n\t\t/**\n\t\t * Determine if path is valid for history navigation\n\t\t *\n\t\t * @private\n\t\t * @param {HTMLElement} el\n\t\t */\n\t\t_isValid = function(el) {\n\t\t\tvar host = el.host,\n\t\t\t\tpath = el.pathname,\n\t\t\t\tloc = location;\n\n\t\t\tif (! el.href ||\n\t\t\t\tel.target == '_blank' ||\n\t\t\t\t! /https?:/.test(el.href) ||\n\t\t\t\tel.hasAttribute('download') ||\n\t\t\t\tel.hasAttribute('data-static') ||\n\t\t\t\t(host && host != loc.host) ||\n\t\t\t\t(el.hash && path == loc.pathname)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar exts = settings.extensions,\n\t\t\t\tsegs = path.split('.'),\n\t\t\t\text;\n\n\t\t\tif (segs.length > 1) {\n\t\t\t\text = segs.pop().split(/#|\\?/)[0];\n\t\t\t}\n\n\t\t\treturn ! ext || (exts && exts.indexOf(ext) > -1);\n\t\t},\n\n\t\t/**\n\t\t * Reset references and variables for a given selector\n\t\t *\n\t\t * @private\n\t\t * @param sel\n\t\t */\n\t\t_reset = function(sel) {\n\t\t\tW.$setRef(sel);\n\t\t\tW.$setVar(sel);\n\n\t\t\tW.history.bind();\n\t\t},\n\n\t\t/**\n\t\t * Process the history state of the request\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf\n\t\t */\n\t\t_process = function(conf) {\n\t\t\tvar request = conf.request,\n\t\t\t\tmethod = request.method;\n\n\t\t\tif (! method || method == 'get') {\n\t\t\t\tconf.path = D._getUrl(request);\n\t\t\t}\n\n\t\t\tvar key = conf.path.replace(/^\\//g, ''),\n\t\t\t\tobj = {\n\t\t\t\t\targs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdir: conf.push ? 1 : -1,\n\t\t\t\t\t\t\tpath: conf.path,\n\t\t\t\t\t\t\tprev: path\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\tentries[key] = conf;\n\n\t\t\t// Add entry to HTML5 history\n\t\t\tif (conf.push && support) {\n\t\t\t\tH.pushState(0, '', conf.path);\n\t\t\t}\n\n\t\t\t// Update document title\n\t\t\tif (conf.title) {\n\t\t\t\tW._doc.title = conf.title;\n\t\t\t}\n\n\t\t\tif (W.routes) {\n\t\t\t\t// Update current path\n\t\t\t\tW.routes.uri(conf.path);\n\t\t\t\tW.routes.uri({\n\t\t\t\t\thistory: true\n\t\t\t\t});\n\n\t\t\t\t// Evaluate routes against updated path\n\t\t\t\tif (conf.run) {\n\t\t\t\t\tW.routes.run({\n\t\t\t\t\t\tevent: 'pop',\n\t\t\t\t\t\tpath: path\n\t\t\t\t\t});\n\n\t\t\t\t\tW.routes.run({\n\t\t\t\t\t\tpath: conf.path\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tpath = conf.path;\n\t\t\t}\n\n\t\t\tif (conf.push && conf.pushstate) {\n\t\t\t\tW.$exec(conf.pushstate, obj);\n\t\t\t}\n\n\t\t\tif (conf.pop && conf.popstate) {\n\t\t\t\tW.$exec(conf.popstate, obj);\n\t\t\t}\n\n\t\t\tif (conf.end) {\n\t\t\t\tW.$exec(conf.end, obj);\n\t\t\t}\n\t\t};\n\n\tW.history = {\n\t\t/**\n\t\t * Set the initial state and popstate event, and bind global actions\n\t\t *\n\t\t * @param {object} [options]\n\t\t * @param {($|boolean|HTMLElement|string)} [options.bind]\n\t\t * @param {Array} [options.extensions]\n\t\t * @param {string} [options.partials='title,main']\n\t\t * @param {boolean} [options.processErrors=false]\n\t\t * @param {boolean} [options.push=true]\n\t\t * @param {object} [options.request]\n\t\t * @param {boolean} [options.run=true]\n\t\t */\n\t\tinit: function(options) {\n\t\t\tif (! this.request) {\n\t\t\t\tpath = _path();\n\t\t\t\tsettings = W.$extend({\n\t\t\t\t\tpartials: 'title,main',\n\t\t\t\t\tpush: true,\n\t\t\t\t\trequest: {},\n\t\t\t\t\trun: true,\n\t\t\t\t\tscrollTop: 0\n\t\t\t\t}, options);\n\t\t\t\troot = settings.request.root || '';\n\n\t\t\t\tthis.request = settings.request;\n\t\t\t\tdelete settings.request;\n\n\t\t\t\tif (support) {\n\t\t\t\t\tH.scrollRestoration = 'manual';\n\n\t\t\t\t\t// Set current state\n\t\t\t\t\tH.replaceState(0, '');\n\n\t\t\t\t\t// Listen for browser navigation\n\t\t\t\t\tE.on(W._win, 'popstate.history', function(e) {\n\t\t\t\t\t\tif (e.state !== null) {\n\t\t\t\t\t\t\tvar url = _path(),\n\t\t\t\t\t\t\t\tprevConf = entries[path.replace(/^\\//g, '')];\n\n\t\t\t\t\t\t\tif (prevConf) {\n\t\t\t\t\t\t\t\tvar conf = W.$extend(\n\t\t\t\t\t\t\t\t\tentries[url.replace(/^\\//g, '')] || {\n\t\t\t\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\t\t\t\troot: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\t\t\tpath: url,\n\t\t\t\t\t\t\t\t\t\tpush: false,\n\t\t\t\t\t\t\t\t\t\tpop: true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconf.partials = prevConf.partials;\n\n\t\t\t\t\t\t\t\t// Restore previous scroll position\n\t\t\t\t\t\t\t\tif (e.state.top) {\n\t\t\t\t\t\t\t\t\tconf.scrollTop = e.state.top;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tW.history.go(conf);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tW._win.location = url;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Bind PJAX actions\n\t\t\t\tthis.bind();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Bind element events and form submit events to PJAX\n\t\t *\n\t\t * @param {(boolean|object)} [events]\n\t\t * @param {($|HTMLElement|Object|string)} [a] - settings or context\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\tbind: function(events, a, context) {\n\t\t\tevents = events || settings.bind;\n\n\t\t\tif (events === true) {\n\t\t\t\tevents = {\n\t\t\t\t\tclick: 'a',\n\t\t\t\t\tsubmit: 'form'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (support && typeof events == 'object') {\n\t\t\t\tvar keys = Object.keys(events),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (typeof a !== 'object') {\n\t\t\t\t\tcontext = a;\n\t\t\t\t\ta = {};\n\t\t\t\t}\n\n\t\t\t\tfor (; i < keys.length; i++) {\n\t\t\t\t\tvar event = keys[i],\n\t\t\t\t\t\tsel = events[event];\n\n\t\t\t\t\t$(sel).each(function(el) {\n\t\t\t\t\t\tvar evt = event.split(' ').map(function(val) {\n\t\t\t\t\t\t\t\treturn val + '.history';\n\t\t\t\t\t\t\t}).join(' '),\n\t\t\t\t\t\t\tloc = el.getAttribute('data-url'),\n\t\t\t\t\t\t\tform = el.nodeName == 'FORM',\n\t\t\t\t\t\t\tl = el;\n\n\t\t\t\t\t\tif (loc || form) {\n\t\t\t\t\t\t\tl = W._doc.createElement('a');\n\t\t\t\t\t\t\tl.href = loc || el.getAttribute('action') ||\n\t\t\t\t\t\t\t\tW.routes.uri().full;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ensure the path exists and is local\n\t\t\t\t\t\tif (! evt || ! _isValid(l)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar options = W.$extend(true, {}, a);\n\n\t\t\t\t\t\t// Remove existing history events\n\t\t\t\t\t\tE.off(el, '.history');\n\n\t\t\t\t\t\tE.on(el, evt, function(e, el) {\n\t\t\t\t\t\t\tif (! e.metaKey) {\n\t\t\t\t\t\t\t\toptions.path = _path(l);\n\n\t\t\t\t\t\t\t\tif (form) {\n\t\t\t\t\t\t\t\t\tif (el.method.toLowerCase() == 'post') {\n\t\t\t\t\t\t\t\t\t\toptions.request = W.$extend(options.request, {\n\t\t\t\t\t\t\t\t\t\t\tdata: W.$serializeForm(el, true),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'form',\n\t\t\t\t\t\t\t\t\t\t\tmethod: 'post'\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toptions.path += '?' + W.$serializeForm(el);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tW.history.go(options);\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcontext: context\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Navigate to a new path or within the browser history\n\t\t *\n\t\t * @param {object} options\n\t\t * @param {string} [options.action='replace']\n\t\t * @param {Array} [options.extensions]\n\t\t * @param {string} [options.partials='title,main']\n\t\t * @param {string} [options.path=current path]\n\t\t * @param {boolean} [options.push=true]\n\t\t * @param {object} [options.request]\n\t\t * @param {boolean} [options.run=true]\n\t\t * @param {($|boolean|HTMLElement|number|string)} [options.scrollTop]\n\t\t * @param {string} [options.title]\n\t\t */\n\t\tgo: function(options) {\n\t\t\tvar scope = this;\n\n\t\t\tif (! scope.request) {\n\t\t\t\tscope.init();\n\t\t\t}\n\n\t\t\tvar req = scope.request,\n\t\t\t\tconf = W.$extend(\n\t\t\t\t\t{},\n\t\t\t\t\tsettings,\n\t\t\t\t\toptions\n\t\t\t\t),\n\t\t\t\trequest = W.$extend(\n\t\t\t\t\t{},\n\t\t\t\t\treq,\n\t\t\t\t\tconf.request || {}\n\t\t\t\t);\n\n\t\t\trequest.root = request.root !== U ? request.root : root;\n\t\t\trequest.url = request.url !== U ? request.url : conf.path;\n\n\t\t\t// Navigate to external URL or if history isn't supported\n\t\t\tvar a = W._doc.createElement('a');\n\t\t\ta.href = request.root + request.url;\n\n\t\t\tif (! support || ! _isValid(a)) {\n\t\t\t\tW._win.location = request.url;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (conf.begin && W.$exec(conf.begin, {\n\t\t\t\t\targs: [conf]\n\t\t\t\t}) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set current scroll position\n\t\t\tH.replaceState({\n\t\t\t\ttop: W._body.scrollTop\n\t\t\t}, '');\n\n\t\t\t// Reset URL to exclude root\n\t\t\ta.href = request.url;\n\n\t\t\trequest.url = _path(a);\n\t\t\tconf.request = request;\n\n\t\t\t// Request partial Ajax\n\t\t\tif (request.url !== U) {\n\t\t\t\tvar sendEvents = [],\n\t\t\t\t\tsuccessEvents = [],\n\t\t\t\t\terrorEvents = [],\n\t\t\t\t\tcompleteEvents = [],\n\t\t\t\t\tpartials = conf.partials,\n\t\t\t\t\ttargets = W.$(partials);\n\n\t\t\t\t// Setup PJAX headers\n\t\t\t\trequest.headers = W.$extend({\n\t\t\t\t\t'X-PJAX': 'true',\n\t\t\t\t\t'X-Requested-With': false\n\t\t\t\t}, request.headers);\n\n\t\t\t\t// Process send events\n\t\t\t\tif (request.send) {\n\t\t\t\t\tsendEvents.push(request.send);\n\t\t\t\t}\n\n\t\t\t\tif (req.send) {\n\t\t\t\t\tsendEvents.push(req.send);\n\t\t\t\t}\n\n\t\t\t\trequest.send = sendEvents;\n\n\t\t\t\t// Compile success events\n\t\t\t\tvar replaceEvent = function(x) {\n\t\t\t\t\tvar html = typeof x == 'string' ? x : x.responseText;\n\n\t\t\t\t\tif (conf.replace) {\n\t\t\t\t\t\thtml = W.$exec(conf.replace, {\n\t\t\t\t\t\t\targs: [html]\n\t\t\t\t\t\t}) || html;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Evaluate unload routes against updated path\n\t\t\t\t\tif (W.routes && conf.run) {\n\t\t\t\t\t\tW.routes.run({\n\t\t\t\t\t\t\tevent: 'unload',\n\t\t\t\t\t\t\tpath: path\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (partials) {\n\t\t\t\t\t\thtml = W.$parseHTML('' + html + '').firstChild;\n\n\t\t\t\t\t\t// Make partial replacements from response\n\t\t\t\t\t\tW.$each(partials.split(','), function(sel) {\n\t\t\t\t\t\t\tW.$each(sel, function(el) {\n\t\t\t\t\t\t\t\tvar target = W.$(sel)[0];\n\n\t\t\t\t\t\t\t\tif (target) {\n\t\t\t\t\t\t\t\t\tvar parent = target.parentNode;\n\n\t\t\t\t\t\t\t\t\tconf.action == 'append' ?\n\t\t\t\t\t\t\t\t\t\tparent.appendChild(el) :\n\t\t\t\t\t\t\t\t\t\tparent.replaceChild(el, target);\n\n\t\t\t\t\t\t\t\t\t_reset(parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tcontext: html\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttargets.innerHTML = html;\n\n\t\t\t\t\t\t_reset(targets);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsuccessEvents.push(replaceEvent);\n\n\t\t\t\tif (request.success) {\n\t\t\t\t\tsuccessEvents.push(request.success);\n\t\t\t\t}\n\n\t\t\t\tif (req.success) {\n\t\t\t\t\tsuccessEvents.push(req.success);\n\t\t\t\t}\n\n\t\t\t\tvar scrollEvent = function() {\n\t\t\t\t\tvar st = conf.scrollTop;\n\n\t\t\t\t\t// Scroll vertically to target\n\t\t\t\t\tif (st !== false) {\n\t\t\t\t\t\tvar top = 0,\n\t\t\t\t\t\t\tanim = W.animate;\n\n\t\t\t\t\t\tif (a.hash) {\n\t\t\t\t\t\t\tst = a.hash;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof st == 'number') {\n\t\t\t\t\t\t\ttop = st;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar el = W.$(st)[0];\n\n\t\t\t\t\t\t\tif (el) {\n\t\t\t\t\t\t\t\ttop = el.getBoundingClientRect().top +\n\t\t\t\t\t\t\t\t\tW._win.pageYOffset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (anim) {\n\t\t\t\t\t\t\tanim.tween(W._body, {\n\t\t\t\t\t\t\t\tscrollTop: top\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tW._body.scrollTop = top;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsuccessEvents.push(scrollEvent);\n\n\t\t\t\trequest.success = successEvents;\n\n\t\t\t\t// Compile error events\n\t\t\t\tif (request.error) {\n\t\t\t\t\terrorEvents.push(request.error);\n\t\t\t\t}\n\n\t\t\t\tif (req.error) {\n\t\t\t\t\terrorEvents.push(req.error);\n\t\t\t\t}\n\n\t\t\t\t// Optionally process error events\n\t\t\t\tif (conf.processErrors) {\n\t\t\t\t\terrorEvents.push(replaceEvent);\n\t\t\t\t\terrorEvents.push(scrollEvent);\n\t\t\t\t}\n\n\t\t\t\trequest.error = errorEvents;\n\n\t\t\t\t// Compile complete events\n\t\t\t\tif (request.complete) {\n\t\t\t\t\tcompleteEvents.push(request.complete);\n\t\t\t\t}\n\n\t\t\t\tif (req.complete) {\n\t\t\t\t\tcompleteEvents.push(req.complete);\n\t\t\t\t}\n\n\t\t\t\tcompleteEvents.push(function(x) {\n\t\t\t\t\tvar code = x.status;\n\n\t\t\t\t\tif (conf.processErrors || (code >= 200 && code < 400)) {\n\t\t\t\t\t\t_process(conf);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trequest.complete = completeEvents;\n\n\t\t\t\t// Make Ajax request\n\t\t\t\trequest.args = request.args || [];\n\t\t\t\trequest.args.unshift(targets);\n\n\t\t\t\tD.request(request);\n\t\t\t} else {\n\t\t\t\t_process(conf);\n\t\t\t}\n\t\t}\n\t};\n})(Wee, Wee.data, Wee.events, history, undefined);","/* jshint maxdepth: 6 */\n\n(function(W, U) {\n\t'use strict';\n\n\tvar filters = {\n\t\t\tnum: function(seg) {\n\t\t\t\treturn Number(parseInt(seg)) == seg;\n\t\t\t}\n\t\t},\n\t\tany = [],\n\t\troutes,\n\t\tsegs,\n\t\turi,\n\n\t\t/**\n\t\t * Recursively process routes\n\t\t *\n\t\t * @private\n\t\t * @param {string} route - route to evaluate\n\t\t * @param {int} i - current index in iteration\n\t\t * @param {int} total - total number of routes\n\t\t * @param {string} [event='load'] - lifecycle event\n\t\t */\n\t\t_process = function(route, i, total, event) {\n\t\t\tvar seg = segs[i],\n\t\t\t\tkeys = Object.keys(route),\n\t\t\t\tx = 0;\n\t\t\ti++;\n\n\t\t\t// Match against patterns\n\t\t\tfor (; x < keys.length; x++) {\n\t\t\t\tvar key = keys[x],\n\t\t\t\t\tchild = route[key],\n\t\t\t\t\topts = key.split('||'),\n\t\t\t\t\tk = 0,\n\t\t\t\t\ty = i,\n\t\t\t\t\tmatch = false,\n\t\t\t\t\tran = false;\n\n\t\t\t\tfor (; k < opts.length; k++) {\n\t\t\t\t\tvar opt = opts[k],\n\t\t\t\t\t\tparts = opt.split(':'),\n\t\t\t\t\t\thistory = event != U,\n\t\t\t\t\t\tnegate = false,\n\t\t\t\t\t\tpush = false,\n\t\t\t\t\t\teq = false;\n\n\t\t\t\t\t// Ensure event type matches route type\n\t\t\t\t\tif ((! history && (\n\t\t\t\t\t\t\tparts.indexOf('unload') > -1 ||\n\t\t\t\t\t\t\tparts.indexOf('pop') > -1)\n\t\t\t\t\t\t) ||\n\t\t\t\t\t\t(history && (\n\t\t\t\t\t\t\t! W.$isObject(child) &&\n\t\t\t\t\t\t\tparts.indexOf(event) < 0\n\t\t\t\t\t\t))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set option to rule root\n\t\t\t\t\tif (parts.length > 1) {\n\t\t\t\t\t\topt = parts[0];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Negate routes prefixed by !\n\t\t\t\t\tif (opt[0] == '!') {\n\t\t\t\t\t\topt = opt.slice(1);\n\t\t\t\t\t\tnegate = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Move the segment pointer back one level\n\t\t\t\t\tif (parts.indexOf('eval') > -1) {\n\t\t\t\t\t\ty--;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opt == seg) {\n\t\t\t\t\t\teq = true;\n\t\t\t\t\t} else if (opt[0] == '$') {\n\t\t\t\t\t\topt = opt.slice(1);\n\n\t\t\t\t\t\tif (opt == 'any') {\n\t\t\t\t\t\t\teq = true;\n\n\t\t\t\t\t\t\tif (parts.indexOf('fire') > -1) {\n\t\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\t} else if (! W.$isObject(child)) {\n\t\t\t\t\t\t\t\tpush = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (opt == 'root') {\n\t\t\t\t\t\t\tif (! seg) {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (opt[0] == '/') {\n\t\t\t\t\t\t\tvar split = opt.split('/');\n\n\t\t\t\t\t\t\tif (new RegExp(split[1], split[2] || U).test(seg)) {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar filter = filters[opt];\n\n\t\t\t\t\t\t\tif (filter) {\n\t\t\t\t\t\t\t\tif (filter(seg, child, y) === true) {\n\t\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t\t\tpush = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (seg && seg.trim() !== '') {\n\t\t\t\t\t\t\t\teq = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Invert the equality if the route is negated\n\t\t\t\t\tif (negate) {\n\t\t\t\t\t\teq = ! eq;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (eq) {\n\t\t\t\t\t\t// If ran is true then execute the route immediately\n\t\t\t\t\t\tif (ran) {\n\t\t\t\t\t\t\tW.$exec(child, {\n\t\t\t\t\t\t\t\targs: seg\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If push is true then push the route to the any queue\n\t\t\t\t\t\tif (push) {\n\t\t\t\t\t\t\tran = true;\n\t\t\t\t\t\t\tany.push([child, seg]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Remove the route if set to once\n\t\t\t\t\t\tif (parts.indexOf('once') > -1) {\n\t\t\t\t\t\t\tdelete route[key];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Set match to true and break on match\n\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If matched then process recursively or execute if applicable\n\t\t\t\tif (match) {\n\t\t\t\t\tif (W.$isObject(child)) {\n\t\t\t\t\t\t_process(child, y, total, event);\n\t\t\t\t\t} else if (! ran && y === total) {\n\t\t\t\t\t\tW.$exec(child, {\n\t\t\t\t\t\t\targs: seg\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\tW.routes = {\n\t\t/**\n\t\t * Get current URI values or set with string or value\n\t\t *\n\t\t * @param {(object|string)} [value]\n\t\t * @param {string} [value.full]\n\t\t * @param {string} [value.hash]\n\t\t * @param {boolean} [value.history]\n\t\t * @param {string} [value.path]\n\t\t * @param {object} [value.query]\n\t\t * @param {Array} [value.segments]\n\t\t * @param {string} [value.url]\n\t\t * @returns {object} data\n\t\t */\n\t\turi: function(value) {\n\t\t\tif (value) {\n\t\t\t\tif (W.$isObject(value)) {\n\t\t\t\t\turi = W.$extend(this.uri(), value);\n\t\t\t\t\treturn uri;\n\t\t\t\t}\n\n\t\t\t\tvar a = W._doc.createElement('a');\n\t\t\t\ta.href = value;\n\n\t\t\t\tvar search = a.search,\n\t\t\t\t\tpath = a.pathname.replace(/^\\/|\\/$/g, '');\n\n\t\t\t\turi = {\n\t\t\t\t\tfull: '/' + path + search + a.hash,\n\t\t\t\t\thash: a.hash.slice(1),\n\t\t\t\t\thistory: false,\n\t\t\t\t\tpath: '/' + path,\n\t\t\t\t\tquery: search ? W.$unserialize(search) : {},\n\t\t\t\t\tsegments: path.split('/'),\n\t\t\t\t\turl: a.href\n\t\t\t\t};\n\t\t\t} else if (! uri) {\n\t\t\t\turi = W.routes.uri(location.href);\n\t\t\t}\n\n\t\t\treturn uri;\n\t\t},\n\n\t\t/**\n\t\t * Get all segments or segment at index\n\t\t *\n\t\t * @param {int} [index]\n\t\t * @returns {(Array|string)} segments\n\t\t */\n\t\tsegments: function(index) {\n\t\t\tvar segs = this.uri().segments;\n\n\t\t\treturn index !== U ? (segs[index] || '') : segs;\n\t\t},\n\n\t\t/**\n\t\t * Retrieve or add route endpoints\n\t\t *\n\t\t * @param {object} obj - routes\n\t\t * @param {bool} [init=false] - immediately evaluate routes\n\t\t * @returns {object} routes\n\t\t */\n\t\tmap: function(obj, init) {\n\t\t\tvar curr = routes || {};\n\n\t\t\tif (obj) {\n\t\t\t\troutes = W.$extend(curr, obj);\n\n\t\t\t\tif (init) {\n\t\t\t\t\tthis.run({\n\t\t\t\t\t\troutes: routes\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn curr;\n\t\t},\n\n\t\t/**\n\t\t * Add conditional route filter\n\t\t *\n\t\t * @param {(object|string)} a - name or filter object\n\t\t * @param {function} [b]\n\t\t */\n\t\taddFilter: function(a, b) {\n\t\t\tW._extend(filters, a, b);\n\t\t},\n\n\t\t/**\n\t\t * Evaluate routes against URI\n\t\t *\n\t\t * @param {object} [conf]\n\t\t * @param {string} [conf.event='load']\n\t\t * @param {string} [conf.path]\n\t\t * @param {object} [conf.routes]\n\t\t */\n\t\trun: function(conf) {\n\t\t\tconf = conf || {};\n\t\t\tvar rules = conf.routes || routes;\n\n\t\t\tif (rules) {\n\t\t\t\tsegs = conf.path ?\n\t\t\t\t\tconf.path.replace(/^\\/|\\/$/g, '').split(/#|\\?/)[0].split('/') :\n\t\t\t\t\tthis.segments();\n\n\t\t\t\t_process(rules, 0, segs.length, conf.event);\n\n\t\t\t\t// Execute queued init functions on last iteration\n\t\t\t\tif (any.length) {\n\t\t\t\t\tfor (var i = 0; i < any.length; i++) {\n\t\t\t\t\t\tvar rule = any[i];\n\n\t\t\t\t\t\tW.$exec(rule[0], {\n\t\t\t\t\t\t\targs: rule[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear array for next iteration\n\t\t\t\t\tany = [];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n})(Wee, undefined);","(function(W) {\n\t'use strict';\n\n\tvar events = [],\n\t\tid = 0,\n\t\tbound,\n\t\tcurrent,\n\n\t\t/**\n\t\t * Bind individual rule\n\t\t *\n\t\t * @private\n\t\t * @param {object} conf - breakpoint rules\n\t\t * @param {Array} [conf.args] - callback arguments\n\t\t * @param {function} conf.callback\n\t\t * @param {boolean} [conf.each=false] - execute for each matching breakpoint\n\t\t * @param {boolean} [conf.init=true] - check event on load\n\t\t * @param {int} [conf.max] - maximum breakpoint value\n\t\t * @param {int} [conf.min] - minimum breakpoint value\n\t\t * @param {boolean} [conf.once=false] - only execute the callback once\n\t\t * @param {object} [conf.scope] - callback scope\n\t\t * @param {int} [conf.size] - specific breakpoint value\n\t\t * @param {boolean} [conf.watch=true] - check event on screen resize\n\t\t * @param {string} [conf.namespace] - namespace the event\n\t\t */\n\t\t_addRule = function(conf) {\n\t\t\t// Attach unique identifier\n\t\t\tconf.i = id++;\n\n\t\t\t// Only setup watching when enabled\n\t\t\tif (conf.watch !== false) {\n\t\t\t\tevents.push(conf);\n\n\t\t\t\t// Only attach event once\n\t\t\t\tif (! bound) {\n\t\t\t\t\tvar run = _run.bind(this, false, 0);\n\t\t\t\t\tbound = 1;\n\t\t\t\t\tevents = [conf];\n\n\t\t\t\t\t// Attach resize event\n\t\t\t\t\tW._win.addEventListener('resize', run);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Evaluate rule immediately if not disabled\n\t\t\tif (conf.init !== false) {\n\t\t\t\t_run(true, [conf]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Check mapped rules for matching conditions\n\t\t *\n\t\t * @private\n\t\t * @param {boolean} [init=false] - initial page load\n\t\t * @param {Array} [rules] - breakpoint rules\n\t\t */\n\t\t_run = function(init, rules) {\n\t\t\tvar size = W.screen.size();\n\n\t\t\t// If breakpoint has been hit or resize logic initialized\n\t\t\tif (size && (init || size !== current)) {\n\t\t\t\tvar evts = rules || events,\n\t\t\t\t\ti = evts.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tvar evt = evts[i];\n\n\t\t\t\t\tif (_eq(evt, size, init)) {\n\t\t\t\t\t\tvar f = init && ! current,\n\t\t\t\t\t\t\tdata = {\n\t\t\t\t\t\t\t\tdir: f ? 0 : (size > current ? 1 : -1),\n\t\t\t\t\t\t\t\tinit: f,\n\t\t\t\t\t\t\t\tprev: current,\n\t\t\t\t\t\t\t\tsize: size\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\tW.$exec(evt.callback, {\n\t\t\t\t\t\t\targs: evt.args ? [data].concat(evt.args) : [data],\n\t\t\t\t\t\t\tscope: evt.scope\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Disable future execution if once\n\t\t\t\t\t\tif (evt.once) {\n\t\t\t\t\t\t\tevents = events.filter(function(obj) {\n\t\t\t\t\t\t\t\treturn obj.i !== evt.i;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache current value\n\t\t\t\tcurrent = size;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Compare event rules against current size\n\t\t *\n\t\t * @private\n\t\t * @param {object} evt\n\t\t * @param {number} size\n\t\t * @param {boolean} init\n\t\t * @returns {boolean}\n\t\t */\n\t\t_eq = function(evt, size, init) {\n\t\t\tvar sz = evt.size,\n\t\t\t\tmn = evt.min,\n\t\t\t\tmx = evt.max,\n\t\t\t\tex = evt.each || init;\n\n\t\t\t// Check match against rules\n\t\t\treturn (! sz && ! mn && ! mx) ||\n\t\t\t\t(sz && sz === size) ||\n\t\t\t\t(mn && size >= mn && (ex || current < mn) && (! mx || size <= mx)) ||\n\t\t\t\t(mx && size <= mx && (ex || current > mx) && (! mn || size >= mn));\n\t\t};\n\n\tW.screen = {\n\t\t/**\n\t\t * Get current breakpoint value\n\t\t *\n\t\t * @returns {number} size\n\t\t */\n\t\tsize: function() {\n\t\t\treturn parseFloat(\n\t\t\t\tgetComputedStyle(W._html, null)\n\t\t\t\t\t.getPropertyValue('font-family')\n\t\t\t\t\t.replace(/[^0-9\\.]+/g, '')\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Map conditional events to breakpoint values\n\t\t *\n\t\t * @param {(Array|object)} rules - breakpoint rules\n\t\t * @param {Array} [rules.args] - callback arguments\n\t\t * @param {function} rules.callback\n\t\t * @param {boolean} [rules.each=false] - execute for each matching breakpoint\n\t\t * @param {boolean} [rules.init=true] - check event on load\n\t\t * @param {int} [rules.max] - maximum breakpoint value\n\t\t * @param {int} [rules.min] - minimum breakpoint value\n\t\t * @param {string} [rules.namespace] - namespace the event\n\t\t * @param {boolean} [rules.once=false] - only execute the callback once\n\t\t * @param {object} [rules.scope] - callback scope\n\t\t * @param {int} [rules.size] - specific breakpoint value\n\t\t * @param {boolean} [rules.watch=true] - check event on screen resize\n\t\t */\n\t\tmap: function(rules) {\n\t\t\tvar sets = W.$toArray(rules),\n\t\t\t\ti = sets.length;\n\n\t\t\twhile (i--) {\n\t\t\t\t_addRule(sets[i]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Evaluate the current breakpoint\n\t\t */\n\t\trun: function() {\n\t\t\t_run(true);\n\t\t},\n\n\t\t/**\n\t\t * Remove events from bound rules\n\t\t *\n\t\t * @param {string} [namespace] - remove screen events in this namespace\n\t\t */\n\t\treset: function(namespace) {\n\t\t\tevents = events.filter(function(obj) {\n\t\t\t\treturn obj.namespace !== namespace;\n\t\t\t});\n\t\t}\n\t};\n})(Wee);","(function(W, E) {\n\t'use strict';\n\n\tvar events = [\n\t\t['swipeLeft', 'X', 'Y', 1],\n\t\t['swipeRight', 'X', 'Y',-1],\n\t\t['swipeUp', 'Y', 'X', 1],\n\t\t['swipeDown', 'Y','X', -1]\n\t];\n\n\t/**\n\t * Loop through custom events and bind applicable standard events\n\t */\n\tevents.forEach(function(event) {\n\t\tvar ns = event[0],\n\t\t\tstart = 'mousedown.' + ns + ' touchstart.' + ns,\n\t\t\tend = 'mouseup.' + ns + ' touchend.' + ns;\n\n\t\tE.addEvent(ns, function(el, fn, conf) {\n\t\t\tvar scope = this,\n\t\t\t\tdistance = conf.distance || 50,\n\t\t\t\tmovement = conf.movement || 25;\n\n\t\t\tE.on(el, start, function(e) {\n\t\t\t\tvar a = e.touches ? e.touches[0] : e;\n\t\t\t\tscope.start = a['page' + event[1]];\n\t\t\t\tscope.scroll = W._win['page' + event[2] + 'Offset'];\n\t\t\t}, conf);\n\n\t\t\tE.on(el, end, function(e, el) {\n\t\t\t\tvar a = e.changedTouches ? e.changedTouches[0] : e,\n\t\t\t\t\ttravel = (scope.start - a['page' + event[1]]) * event[3],\n\t\t\t\t\tscroll = Math.abs(scope.scroll - W._win['page' + event[2] + 'Offset']);\n\n\t\t\t\tif (travel > distance && scroll < movement) {\n\t\t\t\t\tfn.apply(conf.scope || el, W._slice.call(arguments));\n\t\t\t\t}\n\t\t\t}, conf);\n\t\t}, function(el, fn) {\n\t\t\tE.off(el, start + ' ' + end, fn);\n\t\t});\n\t});\n})(Wee, Wee.events);","/* jshint maxdepth: 5, maxparams: 6 */\n\n(function(W, U) {\n\t'use strict';\n\n\tvar reg = {\n\t\t\targs: /(\\\\?['\"][^'\"]+\\\\?['\"]|[^,]+)/g,\n\t\t\text: /(.[^\\(]+)(?:\\((.*)\\))?/,\n\t\t\tpair: /{{#(\\S+?)(?:\\|(.+?))?}}([\\s\\S]+?){{\\/\\1}}/g,\n\t\t\tpartial: /{{\\s*>(.+?)}}/g,\n\t\t\tsingle: /{{(.+?)}}/g,\n\t\t\tstr: /^\\\\?(\"|')/,\n\t\t\ttags: /{{\\s*(?:([#\\/])([^#{\\|\\n\\s]+)\\s*(\\|[^{\\n]+)?|else)\\s*}}/g\n\t\t},\n\t\thelpers = {\n\t\t\tis: function(val) {\n\t\t\t\treturn this.val === val;\n\t\t\t},\n\t\t\tnot: function(val) {\n\t\t\t\treturn this.val !== val;\n\t\t\t},\n\t\t\tisEmpty: function() {\n\t\t\t\treturn this.empty;\n\t\t\t},\n\t\t\tnotEmpty: function() {\n\t\t\t\treturn ! this.empty;\n\t\t\t}\n\t\t},\n\t\tviews = {},\n\t\tesc,\n\n\t\t/**\n\t\t * Determine if value matches empty criteria\n\t\t *\n\t\t * @private\n\t\t * @param {*} val\n\t\t * @returns {boolean}\n\t\t */\n\t\t_isEmpty = function(val) {\n\t\t\treturn val === '' || val === false || val == null ||\n\t\t\t\t(typeof val == 'object' && ! Object.keys(val).length);\n\t\t},\n\n\t\t/**\n\t\t * Make recursive partial replacements\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @returns {string}\n\t\t */\n\t\t_embed = function(temp) {\n\t\t\ttemp = temp.replace(reg.partial, function(m, tag) {\n\t\t\t\treturn views[tag.trim()] || '';\n\t\t\t});\n\n\t\t\tif (reg.partial.test(temp)) {\n\t\t\t\ttemp = _embed(temp);\n\t\t\t}\n\n\t\t\treturn temp;\n\t\t},\n\n\t\t/**\n\t\t * Get specific object value\n\t\t *\n\t\t * @private\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {string} key\n\t\t * @param {string} fb\n\t\t * @param {object} init\n\t\t * @returns {*}\n\t\t */\n\t\t_get = function(data, prev, key, fb, init) {\n\t\t\tkey = key.trim();\n\n\t\t\t// Alter context\n\t\t\tif (key.substr(0, 6) == '$root.') {\n\t\t\t\tkey = key.substr(6);\n\t\t\t\tdata = init;\n\t\t\t} else if (key.substr(0, 3) == '../') {\n\t\t\t\tkey = key.substr(3);\n\t\t\t\tdata = prev;\n\t\t\t}\n\n\t\t\tvar segs = key == '.' ? ['.'] : key.split('.'),\n\t\t\t\torig = data,\n\t\t\t\tlen = segs.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\t// Loop through object segments\n\t\t\tfor (; i <= len; i++) {\n\t\t\t\tkey = segs[i];\n\n\t\t\t\tif (data && data.hasOwnProperty(key)) {\n\t\t\t\t\tdata = data[key];\n\n\t\t\t\t\t// Return value on last segment\n\t\t\t\t\tif (i === len) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (key == '.') {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Process fallback value\n\t\t\tif (fb && fb !== '') {\n\t\t\t\tfb = fb.trim();\n\t\t\t\tvar match = fb.match(reg.str);\n\n\t\t\t\tif (match) {\n\t\t\t\t\treturn fb.replace(reg.str, '')\n\t\t\t\t\t\t.replace(new RegExp(match[0] + '$'), '');\n\t\t\t\t}\n\n\t\t\t\treturn _get(orig, prev, fb, '', init);\n\t\t\t}\n\n\t\t\treturn fb;\n\t\t},\n\n\t\t/**\n\t\t * Parse helper arguments\n\t\t *\n\t\t * @private\n\t\t * @param {string} str\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {object} init\n\t\t * @returns {*}\n\t\t */\n\t\t_parseArgs = function(str, data, prev, init) {\n\t\t\tvar args = str !== U ? str.match(reg.args) || [] : [];\n\n\t\t\treturn args.map(function(arg) {\n\t\t\t\targ = arg.trim();\n\t\t\t\tvar match = arg.match(reg.str);\n\n\t\t\t\tif (match) {\n\t\t\t\t\treturn arg.replace(reg.str, '')\n\t\t\t\t\t\t.replace(new RegExp(match[0] + '$'), '');\n\t\t\t\t}\n\n\t\t\t\treturn arg == 'true' ? true :\n\t\t\t\t\targ == 'false' ? false :\n\t\t\t\t\targ == 'null' ? null :\n\t\t\t\t\tparseInt(arg).toString() == arg ? parseInt(arg) :\n\t\t\t\t\t_get(data, prev, arg, '', init);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Parse template string\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @param {object} data\n\t\t * @param {object} prev\n\t\t * @param {object} init\n\t\t * @param {int} index\n\t\t * @returns {string}\n\t\t */\n\t\t_parse = function(temp, data, prev, init, index) {\n\t\t\treturn temp.replace(reg.pair, function(m, t, helper, inner) {\n\t\t\t\t// Return escaped template tag pairs\n\t\t\t\tif (t == '!') {\n\t\t\t\t\tesc = true;\n\t\t\t\t\treturn inner.replace(/{{/g, '{~');\n\t\t\t\t}\n\n\t\t\t\tvar tag = t.replace(/%\\d+/, ''),\n\t\t\t\t\tcond = inner.split('{{:' + t + '}}');\n\t\t\t\tinner = cond[0];\n\n\t\t\t\tvar val = _get(data, prev, tag, U, init),\n\t\t\t\t\tempty = _isEmpty(val),\n\t\t\t\t\thelp = [],\n\t\t\t\t\teach;\n\n\t\t\t\t// Parse helpers\n\t\t\t\tif (helper || empty) {\n\t\t\t\t\tvar meth = helper ? helper.split('|') : [],\n\t\t\t\t\t\tsec = cond.length > 1 ? cond[1] : '',\n\t\t\t\t\t\tagg = [];\n\n\t\t\t\t\t// Check for root helpers\n\t\t\t\t\tif (empty) {\n\t\t\t\t\t\tvar arg = meth[0] && meth[0][0] == '(';\n\t\t\t\t\t\tmeth.unshift(tag + (arg ? meth[0] : '()'));\n\n\t\t\t\t\t\tif (arg) {\n\t\t\t\t\t\t\tmeth.splice(1, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Capture available aggregates and helpers\n\t\t\t\t\tmeth.forEach(function(el) {\n\t\t\t\t\t\tvar arr = el.match(reg.ext),\n\t\t\t\t\t\t\tname = arr[1].trim();\n\n\t\t\t\t\t\t// Check for each helper\n\t\t\t\t\t\tif (name == 'each') {\n\t\t\t\t\t\t\teach = true;\n\t\t\t\t\t\t} else if (helpers[name]) {\n\t\t\t\t\t\t\tel = [helpers[name], arr[2]];\n\t\t\t\t\t\t\teach ? help.push(el) : agg.push(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Process aggregates\n\t\t\t\t\tif (agg.length) {\n\t\t\t\t\t\tif (! agg.every(function(f) {\n\t\t\t\t\t\t\t\tvar rv = f[0].apply({\n\t\t\t\t\t\t\t\t\tval: val,\n\t\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\t\tempty: empty,\n\t\t\t\t\t\t\t\t\tindex: index\n\t\t\t\t\t\t\t\t}, _parseArgs(f[1], data, prev, init));\n\n\t\t\t\t\t\t\t\tif (rv === false) {\n\t\t\t\t\t\t\t\t\treturn rv;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (rv !== true) {\n\t\t\t\t\t\t\t\t\tval = rv;\n\t\t\t\t\t\t\t\t\tempty = _isEmpty(val);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t})) {\n\t\t\t\t\t\t\treturn _parse(sec, data, prev, init, index);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (empty) {\n\t\t\t\t\t\treturn _parse(sec, data, prev, init, index);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar isObject = typeof val == 'object';\n\n\t\t\t\tif (! each) {\n\t\t\t\t\tif (! isObject) {\n\t\t\t\t\t\tval = W.$extend({}, data, {\n\t\t\t\t\t\t\t'.': val,\n\t\t\t\t\t\t\t'#': 0,\n\t\t\t\t\t\t\t'##': 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _parse(inner, val, data, init, index);\n\t\t\t\t}\n\n\t\t\t\tif (! empty) {\n\t\t\t\t\t// Loop through objects and arrays\n\t\t\t\t\tif (isObject) {\n\t\t\t\t\t\tvar isPlainObject = W.$isObject(val),\n\t\t\t\t\t\t\tresp = '',\n\t\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\t\tfor (var key in val) {\n\t\t\t\t\t\t\tif (val.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\t// Merge default properties\n\t\t\t\t\t\t\t\tvar el = val[key];\n\t\t\t\t\t\t\t\tempty = _isEmpty(el);\n\n\t\t\t\t\t\t\t\t// Process helpers\n\t\t\t\t\t\t\t\tif (! help.length ||\n\t\t\t\t\t\t\t\t\thelp.every(function(f) {\n\t\t\t\t\t\t\t\t\t\tvar rv = f[0].apply({\n\t\t\t\t\t\t\t\t\t\t\tval: el,\n\t\t\t\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\t\t\t\tempty: empty,\n\t\t\t\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t\t\t\t}, _parseArgs(f[1], val));\n\n\t\t\t\t\t\t\t\t\t\tif (rv === false) {\n\t\t\t\t\t\t\t\t\t\t\treturn rv;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (rv !== true) {\n\t\t\t\t\t\t\t\t\t\t\tel = rv;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tvar item = W.$extend({}, W.$isObject(el) ?\n\t\t\t\t\t\t\t\t\t\t\tel :\n\t\t\t\t\t\t\t\t\t\t\t(isPlainObject ? val : {}),\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t$key: key,\n\t\t\t\t\t\t\t\t\t\t\t'.': el,\n\t\t\t\t\t\t\t\t\t\t\t'#': i,\n\t\t\t\t\t\t\t\t\t\t\t'##': i + 1\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\t\t\t\tresp += _parse(inner, item, data, init, i);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn resp;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inner;\n\t\t\t\t}\n\t\t\t}).replace(reg.single, function(m, set) {\n\t\t\t\tvar split = set.split('||'),\n\t\t\t\t\tfb = split[1],\n\t\t\t\t\tsegs = split[0].split('|'),\n\t\t\t\t\ttag = segs[0].trim(),\n\t\t\t\t\tval = _get(data, prev, tag, fb, init),\n\t\t\t\t\thelps = segs.length > 1 ? segs.slice(1) : segs;\n\n\t\t\t\t// Process helpers\n\t\t\t\thelps.forEach(function(el, i) {\n\t\t\t\t\tvar arr = el.match(reg.ext);\n\t\t\t\t\thelps[i] = el.trim();\n\n\t\t\t\t\tif (arr) {\n\t\t\t\t\t\tvar helper = helpers[arr[1].trim()];\n\n\t\t\t\t\t\tif (helper && (segs.length > 1 ||\n\t\t\t\t\t\t\t! data.hasOwnProperty(tag))) {\n\t\t\t\t\t\t\tval = helper.apply({\n\t\t\t\t\t\t\t\tval: val,\n\t\t\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\t\t\troot: init,\n\t\t\t\t\t\t\t\ttag: tag,\n\t\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\t\tfallback: fb\n\t\t\t\t\t\t\t}, _parseArgs(arr[2], data));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Encode output by default\n\t\t\t\tif (val === U || typeof val == 'object') {\n\t\t\t\t\tval = '';\n\t\t\t\t} else if (typeof val == 'string') {\n\t\t\t\t\t// Recursively process injected tags\n\t\t\t\t\tif (val.indexOf('{{') > -1) {\n\t\t\t\t\t\tval = _render(val, data);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Encode HTML characters\n\t\t\t\t\tif (helps.indexOf('raw') < 0) {\n\t\t\t\t\t\tval = val.replace(/&/g, '&')\n\t\t\t\t\t\t\t.replace(/&/g, '&')\n\t\t\t\t\t\t\t.replace(//g, '>')\n\t\t\t\t\t\t\t.replace(/\"/g, '"');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn val;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Render template string\n\t\t *\n\t\t * @private\n\t\t * @param {string} temp\n\t\t * @param {object} data\n\t\t * @returns {string}\n\t\t */\n\t\t_render = function(temp, data) {\n\t\t\tvar tags = [],\n\t\t\t\tdepth = [];\n\n\t\t\t// Make partial replacements\n\t\t\ttemp = _embed(temp);\n\n\t\t\t// Match tag pairs\n\t\t\ttemp = temp.replace(reg.tags, function(m, pre, tag, helper) {\n\t\t\t\tvar resp = '{{';\n\n\t\t\t\tif (tag == '!') {\n\t\t\t\t\tesc = pre == '#';\n\t\t\t\t\tresp += pre + tag;\n\t\t\t\t} else if (esc) {\n\t\t\t\t\treturn m;\n\t\t\t\t} else if (pre) {\n\t\t\t\t\tvar segs = tag.split('('),\n\t\t\t\t\t\troot = segs[0],\n\t\t\t\t\t\texists = tags.hasOwnProperty(tag);\n\t\t\t\t\tresp += pre + root + '%';\n\n\t\t\t\t\tif (pre == '#') {\n\t\t\t\t\t\tdepth.push(root);\n\n\t\t\t\t\t\tif (exists) {\n\t\t\t\t\t\t\ttags[root].i++;\n\t\t\t\t\t\t\ttags[root].o.push(tags[root].i);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[root] = {\n\t\t\t\t\t\t\t\ti: 1,\n\t\t\t\t\t\t\t\to: [1]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (segs.length > 1) {\n\t\t\t\t\t\t\thelper = '(' + segs.slice(1).join('(');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresp += tags[root].i + (helper || '');\n\t\t\t\t\t} else if (exists) {\n\t\t\t\t\t\tresp += tags[root].o.pop();\n\t\t\t\t\t\ttags[root].i--;\n\t\t\t\t\t\tdepth.pop();\n\t\t\t\t\t}\n\t\t\t\t} else if (depth.length) {\n\t\t\t\t\ttag = depth.slice(-1)[0];\n\t\t\t\t\tresp += ':' + tag + '%' + tags[tag].i;\n\t\t\t\t}\n\n\t\t\t\treturn resp + '}}';\n\t\t\t});\n\n\t\t\t// Parse template tags\n\t\t\treturn _parse(temp, data, {}, data, 0);\n\t\t};\n\n\tW.app = {\n\t\t/**\n\t\t * Application instance storage\n\t\t */\n\t\tfn: {},\n\n\t\t/**\n\t\t * Create an application\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {object} options\n\t\t * @param {object} options.model\n\t\t * @param {($|HTMLElement|string)} [options.target]\n\t\t * @param {($|HTMLElement|string)} options.view\n\t\t *\n\t\t */\n\t\tmake: function(name, options) {\n\t\t\tvar sel = options.view,\n\t\t\t\ttarg = options.target,\n\t\t\t\tmodel = options.model || {},\n\t\t\t\tviews = W.$(targ || sel).map(function(el) {\n\t\t\t\t\treturn [el, targ ? sel : el.outerHTML];\n\t\t\t\t}),\n\t\t\t\tfn = function(data) {\n\t\t\t\t\tviews.forEach(function(view) {\n\t\t\t\t\t\tW.$setRef(\n\t\t\t\t\t\t\tW.view.diff(view[0], W.$parseHTML(\n\t\t\t\t\t\t\t\tW.view.render(view[1], data)\n\t\t\t\t\t\t\t), targ)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tapp = W.app;\n\n\t\t\tfn(model);\n\n\t\t\t// Create a new application controller\n\t\t\tapp.fn[name] = W._make(name, {}, {}, false, model);\n\t\t\tapp[name] = new app.fn[name]();\n\n\t\t\tW.$extend(app[name], {\n\t\t\t\t/**\n\t\t\t\t * Destroy current application\n\t\t\t\t */\n\t\t\t\t$destroy: function() {\n\t\t\t\t\tif (options._destruct) {\n\t\t\t\t\t\toptions._destruct();\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete app[name];\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Pause view updating\n\t\t\t\t */\n\t\t\t\t$pause: function() {\n\t\t\t\t\tapp[name].$unobserve('*', fn);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Resume view updating\n\t\t\t\t *\n\t\t\t\t * @param {boolean} [update=false]\n\t\t\t\t */\n\t\t\t\t$resume: function(update) {\n\t\t\t\t\tapp[name].$observe('*', fn);\n\n\t\t\t\t\tif (update) {\n\t\t\t\t\t\tfn(app[name].$get());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Initialize app observation\n\t\t\tapp[name].$resume();\n\n\t\t\treturn app[name];\n\t\t}\n\t};\n\n\tW.view = {\n\t\t/**\n\t\t * Parse data into template string\n\t\t *\n\t\t * @param {string} template\n\t\t * @param {object} [data]\n\t\t * @returns {string}\n\t\t */\n\t\trender: function(template, data) {\n\t\t\tesc = false;\n\t\t\ttemplate = _render(views[template] || template, W.$extend(data));\n\n\t\t\treturn esc ?\n\t\t\t\ttemplate.replace(/{~/g, '{{') :\n\t\t\t\ttemplate;\n\t\t},\n\n\t\t/**\n\t\t * Add conditional template handler or tag data modifier\n\t\t *\n\t\t * @param {object|string} name\n\t\t * @param {function} [fn]\n\t\t */\n\t\taddHelper: function(name, fn) {\n\t\t\tW._extend(helpers, name, fn);\n\t\t},\n\n\t\t/**\n\t\t * Add views to store for on-demand reference\n\t\t *\n\t\t * @param {object|string} name\n\t\t * @param {string} [value]\n\t\t */\n\t\taddView: function(name, value) {\n\t\t\tW._extend(views, name, value);\n\t\t}\n\t};\n})(Wee, undefined);","/**\n * Copyright (c) 2015, Patrick Steele-Idem\n * https://github.com/patrick-steele-idem/morphdom\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/* jshint maxdepth: 8 */\n\n(function(W, D) {\n\tvar specialElHandlers = {\n\t\t/**\n\t\t * Needed for IE. Apparently IE doesn't think\n\t\t * that \"selected\" is an attribute when reading\n\t\t * over the attributes using selectEl.attributes\n\t\t */\n\t\tOPTION: function(fromEl, toEl) {\n\t\t\tif (fromEl.selected == toEl.selected) {\n\t\t\t\tfromEl.setAttribute('selected', '');\n\t\t\t} else {\n\t\t\t\tfromEl.removeAttribute('selected');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The \"value\" attribute is special for the element\n\t\t * since it sets the initial value. Changing the \"value\"\n\t\t * attribute without changing the \"value\" property will have\n\t\t * no effect since it is only used to the set the initial value.\n\t\t * Similar for the \"checked\" attribute.\n\t\t */\n\t\tINPUT: function(fromEl, toEl) {\n\t\t\tfromEl.checked = toEl.checked;\n\n\t\t\tif (fromEl.value != toEl.value) {\n\t\t\t\tfromEl.value = toEl.value;\n\t\t\t}\n\n\t\t\tif (! toEl.hasAttribute('checked')) {\n\t\t\t\tfromEl.removeAttribute('checked');\n\t\t\t}\n\n\t\t\tif (! toEl.hasAttribute('value')) {\n\t\t\t\tfromEl.removeAttribute('value');\n\t\t\t}\n\t\t},\n\n\t\tTEXTAREA: function(fromEl, toEl) {\n\t\t\tvar newValue = toEl.value;\n\n\t\t\tif (fromEl.value != newValue) {\n\t\t\t\tfromEl.value = newValue;\n\t\t\t}\n\n\t\t\tif (fromEl.firstChild) {\n\t\t\t\tfromEl.firstChild.nodeValue = newValue;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Loop over all of the attributes on the target node and make sure the\n\t * original DOM node has the same attributes. If an attribute\n\t * found on the original node is not on the new node then remove it from\n\t * the original node\n\t *\n\t * @private\n\t * @param {HTMLElement} fromNode\n\t * @param {HTMLElement} toNode\n\t */\n\t_morphAttrs = function(fromNode, toNode) {\n\t\tvar attrs = toNode.attributes,\n\t\t\tfoundAttrs = {},\n\t\t\tattrName,\n\t\t\tattrValue,\n\t\t\tattr,\n\t\t\ti;\n\n\t\tfor (i = attrs.length - 1; i >= 0; i--) {\n\t\t\tattr = attrs[i];\n\n\t\t\tif (attr.specified !== false) {\n\t\t\t\tattrName = attr.name;\n\t\t\t\tattrValue = attr.value;\n\t\t\t\tfoundAttrs[attrName] = true;\n\n\t\t\t\tif (fromNode.getAttribute(attrName) !== attrValue) {\n\t\t\t\t\tfromNode.setAttribute(attrName, attrValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Delete any extra attributes found on the original DOM element\n\t\t// that weren't found on the target element\n\t\tattrs = fromNode.attributes;\n\n\t\tfor (i = attrs.length - 1; i >= 0; i--) {\n\t\t\tattr = attrs[i];\n\n\t\t\tif (attr.specified !== false) {\n\t\t\t\tattrName = attr.name;\n\n\t\t\t\tif (! foundAttrs.hasOwnProperty(attrName)) {\n\t\t\t\t\tfromNode.removeAttribute(attrName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Copies the children of one DOM element to another\n\t *\n\t * @private\n\t * @param {HTMLElement} fromEl\n\t * @param {HTMLElement} toEl\n\t * @returns {HTMLElement}\n\t */\n\t_moveChildren = function(fromEl, toEl) {\n\t\tvar curChild = fromEl.firstChild;\n\n\t\twhile (curChild) {\n\t\t\tvar nextChild = curChild.nextSibling;\n\n\t\t\ttoEl.appendChild(curChild);\n\n\t\t\tcurChild = nextChild;\n\t\t}\n\n\t\treturn toEl;\n\t};\n\n\tW.view.diff = function(fromNode, toNode, replace) {\n\t\t// Used to store DOM elements with IDs\n\t\tvar savedEls = {},\n\t\t\tunmatchedEls = {},\n\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {HTMLElement} node\n\t\t\t * @param {boolean} nestedInSavedEl\n\t\t\t */\n\t\t\tremoveNodeHelper = function(node, nestedInSavedEl) {\n\t\t\t\tvar id = node.id;\n\n\t\t\t\t// If the node has an ID then store it since we will want to\n\t\t\t\t// reuse it in case the target DOM tree has a DOM element with\n\t\t\t\t// the same ID\n\t\t\t\tif (id) {\n\t\t\t\t\tsavedEls[id] = node;\n\t\t\t\t}\n\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tvar curChild = node.firstChild;\n\n\t\t\t\t\twhile (curChild) {\n\t\t\t\t\t\tremoveNodeHelper(curChild, nestedInSavedEl || id);\n\n\t\t\t\t\t\tcurChild = curChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {HTMLElement} node\n\t\t\t */\n\t\t\twalkDiscardedChildNodes = function(node) {\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tvar curChild = node.firstChild;\n\n\t\t\t\t\twhile (curChild) {\n\t\t\t\t\t\tif (! curChild.id) {\n\t\t\t\t\t\t\t// Walk recursively\n\t\t\t\t\t\t\twalkDiscardedChildNodes(curChild);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurChild = curChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {HTMLElement} node\n\t\t\t * @param {HTMLElement} parentNode\n\t\t\t * @param {boolean} alreadyVisited\n\t\t\t */\n\t\t\tremoveNode = function(node, parentNode, alreadyVisited) {\n\t\t\t\tparentNode.removeChild(node);\n\n\t\t\t\tif (alreadyVisited) {\n\t\t\t\t\tif (! node.id) {\n\t\t\t\t\t\twalkDiscardedChildNodes(node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremoveNodeHelper(node);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {HTMLElement} fromEl\n\t\t\t * @param {HTMLElement} toEl\n\t\t\t * @param {boolean} alreadyVisited\n\t\t\t */\n\t\t\tmorphEl = function(fromEl, toEl, alreadyVisited) {\n\t\t\t\tif (toEl.id) {\n\t\t\t\t\t// If an element with an ID is being morphed then it is\n\t\t\t\t\t// will be in the final DOM so clear it out of the saved\n\t\t\t\t\t// elements collection\n\t\t\t\t\tdelete savedEls[toEl.id];\n\t\t\t\t}\n\n\t\t\t\t// Don't process elements specifically excluded\n\t\t\t\tif (fromEl.hasAttribute('data-ignore')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_morphAttrs(fromEl, toEl);\n\n\t\t\t\tif (fromEl.tagName != 'TEXTAREA') {\n\t\t\t\t\tvar curToNodeChild = toEl.firstChild,\n\t\t\t\t\t\tcurFromNodeChild = fromEl.firstChild,\n\t\t\t\t\t\tcurToNodeId,\n\t\t\t\t\t\tfromNextSibling,\n\t\t\t\t\t\ttoNextSibling,\n\t\t\t\t\t\tsavedEl,\n\t\t\t\t\t\tunmatchedEl;\n\n\t\t\t\t\touter: while (curToNodeChild) {\n\t\t\t\t\t\ttoNextSibling = curToNodeChild.nextSibling;\n\t\t\t\t\t\tcurToNodeId = curToNodeChild.id;\n\n\t\t\t\t\t\twhile (curFromNodeChild) {\n\t\t\t\t\t\t\tvar curFromNodeId = curFromNodeChild.id;\n\t\t\t\t\t\t\tfromNextSibling = curFromNodeChild.nextSibling;\n\n\t\t\t\t\t\t\tif (! alreadyVisited) {\n\t\t\t\t\t\t\t\tif (curFromNodeId && (unmatchedEl = unmatchedEls[curFromNodeId])) {\n\t\t\t\t\t\t\t\t\tunmatchedEl.parentNode.replaceChild(curFromNodeChild, unmatchedEl);\n\t\t\t\t\t\t\t\t\tmorphEl(curFromNodeChild, unmatchedEl, alreadyVisited);\n\n\t\t\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar curFromNodeType = curFromNodeChild.nodeType;\n\n\t\t\t\t\t\t\tif (curFromNodeType === curToNodeChild.nodeType) {\n\t\t\t\t\t\t\t\tvar isCompatible = false;\n\n\t\t\t\t\t\t\t\tif (curFromNodeType === 1) {\n\t\t\t\t\t\t\t\t\t// Both nodes being compared are Element nodes\n\t\t\t\t\t\t\t\t\tif (curFromNodeChild.tagName === curToNodeChild.tagName) {\n\t\t\t\t\t\t\t\t\t\t// We have compatible DOM elements\n\t\t\t\t\t\t\t\t\t\tif (curFromNodeId || curToNodeId) {\n\t\t\t\t\t\t\t\t\t\t\t// If either DOM element has an ID\n\t\t\t\t\t\t\t\t\t\t\t// then we handle those differently\n\t\t\t\t\t\t\t\t\t\t\t// since we want to match up by ID\n\t\t\t\t\t\t\t\t\t\t\tif (curToNodeId === curFromNodeId) {\n\t\t\t\t\t\t\t\t\t\t\t\tisCompatible = true;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tisCompatible = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (isCompatible) {\n\t\t\t\t\t\t\t\t\t\t// We found compatible DOM elements so\n\t\t\t\t\t\t\t\t\t\t// transform the current \"from\" node\n\t\t\t\t\t\t\t\t\t\t// to match the current target DOM node\n\t\t\t\t\t\t\t\t\t\tmorphEl(curFromNodeChild, curToNodeChild, alreadyVisited);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (curFromNodeType === 3) {\n\t\t\t\t\t\t\t\t\t// Both nodes being compared are Text nodes\n\t\t\t\t\t\t\t\t\tisCompatible = true;\n\t\t\t\t\t\t\t\t\t// Simply update nodeValue on the original\n\t\t\t\t\t\t\t\t\t// node to change the text value\n\t\t\t\t\t\t\t\t\tcurFromNodeChild.nodeValue = curToNodeChild.nodeValue;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isCompatible) {\n\t\t\t\t\t\t\t\t\tcurToNodeChild = toNextSibling;\n\t\t\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\n\t\t\t\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// No compatible match so remove the old node from\n\t\t\t\t\t\t\t// the DOM and continue trying to find a match in\n\t\t\t\t\t\t\t// the original DOM\n\t\t\t\t\t\t\tremoveNode(curFromNodeChild, fromEl, alreadyVisited);\n\t\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (curToNodeId) {\n\t\t\t\t\t\t\tif ((savedEl = savedEls[curToNodeId])) {\n\t\t\t\t\t\t\t\tmorphEl(savedEl, curToNodeChild, true);\n\t\t\t\t\t\t\t\tcurToNodeChild = savedEl;\n\t\t\t\t\t\t\t\t// We want to append the saved element instead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// The current DOM element in the target tree has an ID\n\t\t\t\t\t\t\t\t// but we did not find a match in any of the corresponding\n\t\t\t\t\t\t\t\t// siblings. We just put the target element in the old DOM tree\n\t\t\t\t\t\t\t\t// but if we later find an element in the old DOM tree that has\n\t\t\t\t\t\t\t\t// a matching ID then we will replace the target element\n\t\t\t\t\t\t\t\t// with the corresponding old element and morph the old element\n\t\t\t\t\t\t\t\tunmatchedEls[curToNodeId] = curToNodeChild;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we got this far then we did not find a candidate match for our \"to node\"\n\t\t\t\t\t\t// and we exhausted all of the children \"from\" nodes. Therefore, we will just\n\t\t\t\t\t\t// append the current \"to node\" to the end\n\t\t\t\t\t\tfromEl.appendChild(curToNodeChild);\n\n\t\t\t\t\t\tcurToNodeChild = toNextSibling;\n\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We have processed all of the \"to nodes\". If\n\t\t\t\t\t// curFromNodeChild is non-null then we still have some from\n\t\t\t\t\t// nodes left over that need to be removed\n\t\t\t\t\twhile (curFromNodeChild) {\n\t\t\t\t\t\tfromNextSibling = curFromNodeChild.nextSibling;\n\t\t\t\t\t\tremoveNode(curFromNodeChild, fromEl, alreadyVisited);\n\t\t\t\t\t\tcurFromNodeChild = fromNextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar specialElHandler = specialElHandlers[fromEl.tagName];\n\n\t\t\t\tif (specialElHandler) {\n\t\t\t\t\tspecialElHandler(fromEl, toEl);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmorphedNode = fromNode;\n\n\t\tif (replace) {\n\t\t\tvar el = fromNode.cloneNode();\n\n\t\t\t// Place fragment in container\n\t\t\tel.appendChild(toNode);\n\t\t\ttoNode = el;\n\t\t} else {\n\t\t\ttoNode = toNode.firstChild;\n\t\t}\n\n\t\tif (fromNode.tagName !== toNode.tagName) {\n\t\t\tmorphedNode = _moveChildren(fromNode, D.createElement(toNode.tagName));\n\t\t}\n\n\t\tif (morphedNode !== toNode) {\n\t\t\tmorphEl(morphedNode, toNode, false);\n\n\t\t\tfor (var savedElId in savedEls) {\n\t\t\t\tif (savedEls.hasOwnProperty(savedElId)) {\n\t\t\t\t\tvar savedEl = savedEls[savedElId];\n\t\t\t\t\twalkDiscardedChildNodes(savedEl);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (morphedNode !== fromNode && fromNode.parentNode) {\n\t\t\t// If we had to swap out the from node with a new node because the\n\t\t\t// old node was not compatible with the target node then we need to\n\t\t\t// replace the old DOM node in the original DOM tree. This is only\n\t\t\t// possible if the original DOM node was part of a DOM tree which\n\t\t\t// we know is the case if it has a parent node.\n\t\t\tfromNode.parentNode.replaceChild(morphedNode, fromNode);\n\t\t}\n\n\t\treturn morphedNode;\n\t};\n})(Wee, document);","(function(W, A) {\n\t'use strict';\n\n\t/**\n\t * Cast selection as Wee object\n\t *\n\t * @private\n\t * @param {($|HTMLElement|string)} sel\n\t * @param {($|HTMLElement|string)} [context=document]\n\t */\n\tvar Get = function(sel, context) {\n\t\t\tif (sel) {\n\t\t\t\tvar els = Array.isArray(sel) ?\n\t\t\t\t\t\tsel :\n\t\t\t\t\t\tW.$toArray(W.$(sel, context)),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfor (; i < els.length; i++) {\n\t\t\t\t\tvar el = els[i];\n\n\t\t\t\t\tif (el) {\n\t\t\t\t\t\tA.call(this, el);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.sel = sel;\n\t\t\t}\n\t\t},\n\t\t$;\n\n\t/**\n\t * Create chainable Wee object from selection\n\t *\n\t * @param {(HTMLElement|string)} sel\n\t * @param {object} [context=document]\n\t */\n\t$ = W._win[W._$] = function(sel, context) {\n\t\treturn new Get(sel, context);\n\t};\n\n\t// Extend core with chain registration method\n\tW.fn.extend({\n\t\t/**\n\t\t * Register a new chainable method\n\t\t *\n\t\t * @param {(object|string)} a - method name or object\n\t\t * @param {function} b\n\t\t */\n\t\t$chain: function(a, b) {\n\t\t\tif (typeof a == 'string') {\n\t\t\t\t$.fn[a] = b;\n\t\t\t} else {\n\t\t\t\tfor (var key in a) {\n\t\t\t\t\t$.fn[key] = a[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Shortcut core methods from alias\n\tfor (var key in W) {\n\t\tvar val = W[key];\n\n\t\t$[key.replace(/^\\$/, '')] = typeof val == 'function' ?\n\t\t\tval.bind(W) :\n\t\t\tval;\n\t}\n\n\t// Bind core chainable methods\n\t$.fn = Get.prototype = {\n\t\t_$: true,\n\t\tlength: 0,\n\n\t\t/**\n\t\t * Execute function for each object element\n\t\t *\n\t\t * @param fn\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {context} [options.context=document]\n\t\t * @param {bool} [options.reverse=false]\n\t\t * @param {Array} [options.scope]\n\t\t */\n\t\teach: function(fn, options) {\n\t\t\tW.$each(this, fn, options);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Translate object elements to a new array\n\t\t *\n\t\t * @param {function} fn\n\t\t * @param {object} [options]\n\t\t * @param {Array} [options.args]\n\t\t * @param {object} [options.scope]\n\t\t * @returns {Array}\n\t\t */\n\t\tmap: function(fn, options) {\n\t\t\treturn W.$map(this, fn, options);\n\t\t},\n\n\t\t/**\n\t\t * Reverse the order of object elements\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\treverse: function() {\n\t\t\tvar copy = W.$extend(this),\n\t\t\t\tx = this.length,\n\t\t\t\ttotal = x,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i < total; i++) {\n\t\t\t\tx--;\n\t\t\t\tthis[i] = copy[x];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add ref elements to datastore\n\t\t */\n\t\tsetRef: function() {\n\t\t\tW.$setRef(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add metadata variables to datastore\n\t\t */\n\t\tsetVar: function() {\n\t\t\tW.$setVar(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Convert selection to standard array\n\t\t */\n\t\ttoArray: function() {\n\t\t\treturn W._slice.call(this);\n\t\t}\n\t};\n\n\t// Map shorthand registration method\n\t$.fn.extend = W.$chain;\n})(Wee, [].push);","(function(W) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Transition an attribute or property value\n\t\t *\n\t\t * @param {object} values\n\t\t * @param {object} [options]\n\t\t * @param {(Array|function|string)} [options.complete]\n\t\t * @param {number} [options.duration=400]\n\t\t * @param {string} [options.ease='ease']\n\t\t * @returns {$} selection\n\t\t */\n\t\ttween: function(values, options) {\n\t\t\tW.animate.tween(this, values, options);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee);","(function(W, U) {\n\t'use strict';\n\n\tvar $ = W._win[W._$];\n\n\tW.$chain({\n\t\t/**\n\t\t * Append additional selection to Wee object\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tadd: function(source) {\n\t\t\tvar orig = [],\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i < this.length; i++) {\n\t\t\t\torig.push(this[i]);\n\t\t\t}\n\n\t\t\treturn $(W.$unique(orig.concat(W.$(source))));\n\t\t},\n\n\t\t/**\n\t\t * Add classes to each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {$}\n\t\t */\n\t\taddClass: function(value) {\n\t\t\tW.$addClass(this, value);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t * @returns {$}\n\t\t */\n\t\tafter: function(source, remove) {\n\t\t\tW.$after(this, source, remove);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup after each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tappend: function(source) {\n\t\t\tW.$append(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Append selection or markup to each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tappendTo: function(target) {\n\t\t\tW.$append(target, this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get attribute of first matching selection or set attribute\n\t\t * of each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {($|string)}\n\t\t */\n\t\tattr: function(a, b) {\n\t\t\tvar resp = W.$attr(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : resp;\n\t\t},\n\n\t\t/**\n\t\t * Insert selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @param {boolean} [remove=false]\n\t\t * @returns {$}\n\t\t */\n\t\tbefore: function(source, remove) {\n\t\t\tW.$before(this, source, remove);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get unique direct children of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tchildren: function(filter) {\n\t\t\treturn $(W.$children(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Clone each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tclone: function() {\n\t\t\treturn $(W.$clone(this));\n\t\t},\n\n\t\t/**\n\t\t * Get unique closest ancestors of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param context\n\t\t * @returns {$}\n\t\t */\n\t\tclosest: function(filter, context) {\n\t\t\treturn $(W.$closest(this, filter, context));\n\t\t},\n\n\t\t/**\n\t\t * Determine if any matching parent selection contains descendant selection\n\t\t *\n\t\t * @param descendant\n\t\t * @returns {boolean}\n\t\t */\n\t\tcontains: function(descendant) {\n\t\t\treturn W.$contains(this, descendant);\n\t\t},\n\n\t\t/**\n\t\t * Get unique content of each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tcontents: function() {\n\t\t\treturn $(W.$contents(this));\n\t\t},\n\n\t\t/**\n\t\t * Get CSS value of first matching selection or set value\n\t\t * of each matching selection\n\t\t *\n\t\t * @param {(object|string)} a\n\t\t * @param {(function|string)} [b]\n\t\t * @returns {($|string)}\n\t\t */\n\t\tcss: function(a, b) {\n\t\t\tvar r = W.$css(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get data of first matching selection or set data\n\t\t * of each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param [b]\n\t\t * @returns {($|string)}\n\t\t */\n\t\tdata: function(a, b) {\n\t\t\tvar resp = W.$data(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : resp;\n\t\t},\n\n\t\t/**\n\t\t * Remove child nodes from each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tempty: function() {\n\t\t\tW.$empty(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get indexed node of matching selection\n\t\t *\n\t\t * @param index\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {$}\n\t\t */\n\t\teq: function(index, context) {\n\t\t\treturn $(W.$eq(this, index, context));\n\t\t},\n\n\t\t/**\n\t\t * Return a filtered subset of elements from a matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {$}\n\t\t */\n\t\tfilter: function(filter, options) {\n\t\t\treturn $(W.$filter(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get unique filtered descendants from each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tfind: function(filter) {\n\t\t\treturn $(W.$find(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get the first element of a matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tfirst: function() {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\t/**\n\t\t * Return node from Wee object at specific index\n\t\t *\n\t\t * @returns {HTMLElement}\n\t\t */\n\t\tget: function(index) {\n\t\t\treturn W.$eq(this, index);\n\t\t},\n\n\t\t/**\n\t\t * Determine if the matching selection has a class\n\t\t *\n\t\t * @param className\n\t\t * @returns {boolean}\n\t\t */\n\t\thasClass: function(className) {\n\t\t\treturn W.$hasClass(this, className);\n\t\t},\n\n\t\t/**\n\t\t * Get or set the height of each matching selection\n\t\t *\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {($|number)}\n\t\t */\n\t\theight: function(value) {\n\t\t\tvar r = W.$height(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Hide each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\thide: function() {\n\t\t\tW.$hide(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get inner HTML of first selection or set each matching selection's HTML\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\thtml: function(value) {\n\t\t\tvar r = W.$html(this, value);\n\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get the zero-based index of a matching selection relative\n\t\t * to it's siblings\n\t\t *\n\t\t * @returns {int}\n\t\t */\n\t\tindex: function() {\n\t\t\treturn W.$index(this);\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element after\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tinsertAfter: function(target) {\n\t\t\tW.$insertAfter(this, target);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Insert each matching source selection element before\n\t\t * each matching target selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tinsertBefore: function(target) {\n\t\t\tW.$insertBefore(this, target);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Determine if at least one matching selection matches\n\t\t * a specified criteria\n\t\t *\n\t\t * @param filter\n\t\t * @param [options]\n\t\t * @returns {boolean}\n\t\t */\n\t\tis: function(filter, options) {\n\t\t\treturn W.$is(this, filter, options);\n\t\t},\n\n\t\t/**\n\t\t * Get the last element of a matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t * @returns {$}\n\t\t */\n\t\tlast: function(context) {\n\t\t\treturn $(W.$last(this, context));\n\t\t},\n\n\t\t/**\n\t\t * Get the unique next sibling of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tnext: function(filter, options) {\n\t\t\treturn $(W.$next(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Returns elements not matching the filtered selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tnot: function(filter, options) {\n\t\t\treturn $(W.$not(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get the offset position of a matching selection relative to the document\n\t\t *\n\t\t * @param {(function|number)} value\n\t\t * @returns {number}\n\t\t */\n\t\toffset: function(value) {\n\t\t\treturn W.$offset(this, value);\n\t\t},\n\n\t\t/**\n\t\t * Get unique parent from each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tparent: function(filter) {\n\t\t\treturn $(W.$parent(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get unique ancestors of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tparents: function(filter) {\n\t\t\treturn $(W.$parents(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get the position of the first matching selection relative\n\t\t * to its offset parent\n\t\t *\n\t\t * @returns {{top, left}}\n\t\t */\n\t\tposition: function() {\n\t\t\treturn W.$position(this);\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup before each matching selection\n\t\t *\n\t\t * @param {($|function|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\tprepend: function(source) {\n\t\t\tW.$prepend(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Prepend selection or markup to each matching selection\n\t\t *\n\t\t * @param {($|HTMLElement|string)} target\n\t\t * @returns {$}\n\t\t */\n\t\tprependTo: function(target) {\n\t\t\tW.$prepend(target, this.reverse());\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get the unique previous sibling of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @param {object} [options]\n\t\t * @returns {$}\n\t\t */\n\t\tprev: function(filter, options) {\n\t\t\treturn $(W.$prev(this, filter, options));\n\t\t},\n\n\t\t/**\n\t\t * Get property of first matching selection or set property of\n\t\t * each matching selection\n\t\t *\n\t\t * @param a\n\t\t * @param b\n\t\t * @returns {($|string)}\n\t\t */\n\t\tprop: function(a, b) {\n\t\t\tvar r = W.$prop(this, a, b);\n\n\t\t\treturn b !== U || W.$isObject(a) ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Remove each matching selection from the document\n\t\t *\n\t\t * @returns {$}\n\t\t * @param {($|HTMLElement|string)} [context=document]\n\t\t */\n\t\tremove: function(context) {\n\t\t\tW.$remove(this, context);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove specified attribute of each matching selection\n\t\t *\n\t\t * @param {string} name\n\t\t * @returns {$}\n\t\t */\n\t\tremoveAttr: function(name) {\n\t\t\tW.$removeAttr(this, name);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove classes from each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {$}\n\t\t */\n\t\tremoveClass: function(value) {\n\t\t\tW.$removeClass(this, value);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Replace each matching selection with selection or markup\n\t\t *\n\t\t * @param {($|HTMLElement|string)} source\n\t\t * @returns {$}\n\t\t */\n\t\treplaceWith: function(source) {\n\t\t\tW.$replaceWith(this, source);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the X scroll position of each matching selection\n\t\t *\n\t\t * @param value\n\t\t * @returns {($|number)}\n\t\t */\n\t\tscrollLeft: function(value) {\n\t\t\tvar r = W.$scrollLeft(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the Y scroll position of each matching selection\n\t\t *\n\t\t * @param value\n\t\t * @returns {($|number)}\n\t\t */\n\t\tscrollTop: function(value) {\n\t\t\tvar r = W.$scrollTop(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Serialize input values from first matching form selection\n\t\t *\n\t\t * @param {boolean} json\n\t\t * @returns {string}\n\t\t */\n\t\tserialize: function(json) {\n\t\t\treturn W.$serializeForm(this, json);\n\t\t},\n\n\t\t/**\n\t\t * Show each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\tshow: function() {\n\t\t\tW.$show(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get unique siblings of each matching selection\n\t\t *\n\t\t * @param filter\n\t\t * @returns {$}\n\t\t */\n\t\tsiblings: function(filter) {\n\t\t\treturn $(W.$siblings(this, filter));\n\t\t},\n\n\t\t/**\n\t\t * Get subset of selection matches from specified range\n\t\t *\n\t\t * @param start\n\t\t * @param end\n\t\t * @returns {$}\n\t\t */\n\t\tslice: function(start, end) {\n\t\t\treturn $(W.$slice(this, start, end));\n\t\t},\n\n\t\t/**\n\t\t * Get inner text of first selection or set each matching selection's text\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\ttext: function(value) {\n\t\t\tvar r = W.$text(this, value);\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Toggle the display of each matching selection\n\t\t *\n\t\t * @returns {$}\n\t\t */\n\t\ttoggle: function() {\n\t\t\tW.$toggle(this);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Toggle adding and removing class(es) from the specified element\n\t\t *\n\t\t * @param {(function|string)} className\n\t\t * @param {boolean} [state]\n\t\t * @returns {$}\n\t\t */\n\t\ttoggleClass: function(className, state) {\n\t\t\tW.$toggleClass(this, className, state);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get value of first matching selection or set values of\n\t\t * each matching selection\n\t\t *\n\t\t * @param {(function|string)} value\n\t\t * @returns {($|string)}\n\t\t */\n\t\tval: function(value) {\n\t\t\tvar r = W.$val(this, value);\n\n\t\t\treturn value !== U ? this : r;\n\t\t},\n\n\t\t/**\n\t\t * Get or set the width of each matching selection\n\t\t *\n\t\t * @param {(function|number|string)} value\n\t\t * @returns {($|number)}\n\t\t */\n\t\twidth: function(value) {\n\t\t\tvar r = W.$width(this, value);\n\n\t\t\treturn value === U || value === true ? r : this;\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around each matching selection\n\t\t *\n\t\t * @param {(function|string)} html\n\t\t * @returns {$}\n\t\t */\n\t\twrap: function(html) {\n\t\t\tW.$wrap(this, html);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Wrap markup around the content of each matching selection\n\t\t *\n\t\t * @param {(function|string)} html\n\t\t * @returns {$}\n\t\t */\n\t\twrapInner: function(html) {\n\t\t\tW.$wrapInner(this, html);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee, undefined);","(function(W, E) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Bind event(s) to selection\n\t\t *\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {(function|object)} [b] - event callback or options object\n\t\t * @param {(object|string)} [c] - event options\n\t\t * @param {Array} [c.args] - callback arguments\n\t\t * @param {(HTMLElement|string)} [c.context=document]\n\t\t * @param {(HTMLElement|string)} [c.delegate]\n\t\t * @param {boolean} [c.once=false] - remove event after first execution\n\t\t * @param {object} [c.scope]\n\t\t * @returns {$} selection\n\t\t */\n\t\ton: function(a, b, c) {\n\t\t\tE.on(this, a, b, c);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Remove event(s) from selection\n\t\t *\n\t\t * @param {(object|string)} a - event name or object of events\n\t\t * @param {function} [b] - specific function to remove\n\t\t * @returns {$} selection\n\t\t */\n\t\toff: function(a, b) {\n\t\t\tE.off(this, a, b);\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Get currently bound events to optional specified element and event|function\n\t\t *\n\t\t * @param {string} [event] - event name to match\n\t\t * @param {function} [fn] - specific function to match\n\t\t * @returns {Array} matches\n\t\t */\n\t\tbound: function(event, fn) {\n\t\t\treturn E.bound(this, event, fn);\n\t\t},\n\n\t\t/**\n\t\t * Execute bound event for each matching selection\n\t\t *\n\t\t * @param {string} name\n\t\t * @returns {$} selection\n\t\t */\n\t\ttrigger: function(name) {\n\t\t\tE.trigger(this, name);\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee, Wee.events);","(function(W) {\n\t'use strict';\n\n\tW.$chain({\n\t\t/**\n\t\t * Parse data into DOM selection\n\t\t *\n\t\t * @param {object} data\n\t\t * @returns {$} selection\n\t\t */\n\t\trender: function(data) {\n\t\t\tW.$each(this, function(el) {\n\t\t\t\tW.$html(el, W.view.render(W.$text(el), data));\n\t\t\t});\n\n\t\t\treturn this;\n\t\t}\n\t});\n})(Wee);","Wee.view.addView({\"dropdown.view\":\"