{"version":3,"sources":["node_modules/nittro-forms/src/Bridges/netteForms.js","node_modules/promiz/promiz.js","node_modules/nittro-core/src/context.js","node_modules/nittro-core/src/Utils/Strings.js","node_modules/nittro-core/src/Utils/Arrays.js","node_modules/nittro-core/src/Utils/HashMap.js","node_modules/nittro-core/src/Utils/Url.js","node_modules/nittro-core/src/Utils/DOM.js","node_modules/nittro-core/src/Utils/CSSTransitions.js","node_modules/nittro-core/src/Utils/ReflectionClass.js","node_modules/nittro-core/src/Utils/ReflectionFunction.js","node_modules/nittro-core/src/Nittro/EventEmitter.js","node_modules/nittro-core/src/Nittro/Freezable.js","node_modules/nittro-core/src/Nittro/Object.js","node_modules/nittro-datetime/src/DateInterval.js","node_modules/nittro-datetime/src/DateTime.js","node_modules/nittro-datetime/src/DateTime.i18n.js","node_modules/nittro-datetime/src/DateTime.en.js","node_modules/nittro-neon/src/Utils/Tokenizer.js","node_modules/nittro-neon/src/Neon/Neon.js","node_modules/nittro-di/src/ServiceDefinition.js","node_modules/nittro-di/src/ContainerMixin.js","node_modules/nittro-di/src/Container.js","node_modules/nittro-di/src/BuilderExtension.js","node_modules/nittro-di/src/ContainerBuilder.js","node_modules/nittro-ajax/src/Request.js","node_modules/nittro-ajax/src/Response.js","node_modules/nittro-ajax/src/Service.js","node_modules/nittro-ajax/src/Transport/Native.js","node_modules/nittro-page/src/js/Snippet.js","node_modules/nittro-page/src/js/SnippetManagerHelpers.js","node_modules/nittro-page/src/js/SnippetManager.js","node_modules/nittro-page/src/js/SnippetAgent.js","node_modules/nittro-page/src/js/AjaxAgent.js","node_modules/nittro-page/src/js/HistoryAgent.js","node_modules/nittro-page/src/js/History.js","node_modules/nittro-page/src/js/TransitionAgent.js","node_modules/nittro-page/src/js/ScrollAgent.js","node_modules/nittro-page/src/js/Transaction.js","node_modules/nittro-page/src/js/CspAgent.js","node_modules/nittro-page/src/js/GoogleAnalyticsHelper.js","node_modules/nittro-page/src/js/Service.js","node_modules/nette-forms/src/assets/netteForms.js","node_modules/nittro-forms/src/Vendor.js","node_modules/nittro-forms/src/FormData.js","node_modules/nittro-forms/src/Form.js","node_modules/nittro-forms/src/Locator.js","node_modules/nittro-forms/src/DefaultErrorRenderer.js","node_modules/nittro-flashes/src/js/Helpers.js","node_modules/nittro-flashes/src/js/Message.js","node_modules/nittro-flashes/src/js/DefaultPositioner.js","node_modules/nittro-flashes/src/js/Service.js","node_modules/nittro-routing/src/URLRoute.js","node_modules/nittro-routing/src/DOMRoute.js","node_modules/nittro-routing/src/Router.js","node_modules/nittro-extras-checklist/src/CheckList.js","node_modules/nittro-extras-keymap/src/Keymap.js","node_modules/nittro-extras-keymap/src/TabContext.js","node_modules/nittro-extras-keymap/src/Keys.js","node_modules/nittro-extras-keymap/src/Manager.js","node_modules/nittro-extras-dialogs/src/js/Dialog.js","node_modules/nittro-extras-dialogs/src/js/IFrameDialog.js","node_modules/nittro-extras-dialogs/src/js/Manager.js","node_modules/nittro-extras-confirm/src/Confirm.js","node_modules/nittro-extras-confirm/src/ConfirmMixin.js","node_modules/nittro-extras-dropzone/src/DropZone.js","node_modules/nittro-extras-paginator/src/js/Paginator.js","node_modules/nittro-extras-storage/src/Storage.js","node_modules/nittro-ajax/src/Bridges/AjaxDI/AjaxExtension.js","node_modules/nittro-page/src/js/Bridges/PageDI/PageExtension.js","node_modules/nittro-page/src/js/Bridges/PageFlashes/FlashAgent.js","node_modules/nittro-forms/src/Bridges/FormsDI/FormsExtension.js","node_modules/nittro-forms/src/Bridges/FormsPage/FormsMixin.js","node_modules/nittro-flashes/src/js/Bridges/FlashesDI/FlashesExtension.js","node_modules/nittro-routing/src/Bridges/RoutingDI/RoutingExtension.js","node_modules/nittro-extras-checklist/src/Bridges/CheckListDI/CheckListExtension.js","node_modules/nittro-extras-keymap/src/Bridges/KeymapDI/KeymapExtension.js","node_modules/nittro-extras-dialogs/src/js/Bridges/DialogsPage/DialogAgent.js","node_modules/nittro-extras-dialogs/src/js/FormDialog.js","node_modules/nittro-extras-dialogs/src/js/Bridges/DialogsForms/FormDialogMixin.js","node_modules/nittro-extras-dialogs/src/js/Bridges/DialogsKeymap/KeymapMixin.js","node_modules/nittro-extras-dialogs/src/js/Bridges/DialogsDI/DialogsExtension.js","node_modules/nittro-extras-confirm/src/Bridges/ConfirmDI/ConfirmExtension.js","node_modules/nittro-extras-confirm/src/Bridges/ConfirmPage/AutoConfirm.js","node_modules/nittro-extras-dropzone/src/Bridges/DropZoneDI/DropZoneExtension.js","node_modules/nittro-extras-paginator/src/js/Bridges/PaginatorDI/PaginatorExtension.js","node_modules/nittro-extras-storage/src/Bridges/StorageDI/StorageExtension.js","__bootstrap-generated.js","node_modules/nittro-core/src/stack.js"],"names":["window","Nette","noInit","global","this","queueId","queue","isRunningTask","nextTick","fn","setImmediate","importScripts","setTimeout","postMessage","Deferred","resolver","undefined","TypeError","then","er","self","state","val","next","v","fire","_fn","_er","_d","d","resolve","reject","push","finish","type","map","p","e","thennable","ref","cb","ec","cn","cnt","call","addEventListener","source","data","value","all","arr","Array","done","reduce","i","r","race","length","module","_context","api","t","loaded","loading","REQ_TIMEOUT","doc","document","elem","n","createElement","win","loc","history","location","c","clearTimeout","promise","Promise","nsStack","nonce","names","classes","resolveUrl","u","href","xhrFactory","o","f","shift","Error","XMLHttpRequest","ActiveXObject","xdrFactory","XDomainRequest","err","xhr","fulfill","req","m","len","exec","substr","isRelative","open","onsuccess","onerror","onload","onreadystatechange","readyState","status","send","abort","s","elems","getElementsByTagName","item","test","resolveNonce","replace","toLowerCase","match","setAttribute","q","styleSheet","cssText","appendChild","createTextNode","head","text","parentNode","removeChild","lookup","indexOf","split","invoke","ns","unshift","params","toString","args","apply","copyProps","target","key","hasOwnProperty","lookupClass","constructor","Object","load","a","arguments","responseText","getResponseHeader","fulfilled","rejected","extend","parent","proto","tmp","prototype","Super","STATIC","mixin","merge","b","register","name","pop","join","__ns","Strings","applyModifiers","slice","sprintf","vsprintf","parseInt","parseFloat","toFixed","webalize","chars","ws","RegExp","escapeRegex","trim","re","offsetCapture","noEmpty","delimCapture","ignoreCase","multiline","filter","ofs","substring","_trim","trimLeft","trimRight","l","firstUpper","toUpperCase","compare","Math","min","contains","h","isNumeric","escapeHtml","nl2br","collapse","random","charCodeAt","abs","String","fromCharCode","round","Arrays","isArrayLike","shuffle","createFrom","getKeys","k","keys","isArray","filterKeys","rem","getValues","mergeTree","props","walk","HashMap","src","_","values","nonNumeric","nextNumeric","from","clone","set","isList","deep","forEach","append","_shiftKeys","splice","to","remove","removed","get","need","RangeError","has","index","strict","callback","thisArg","recursive","find","predicate","_find","findKey","some","exportData","diff","expect","Url","protocol","hostname","port","path","pathname","parseQuery","search","hash","url","onto","RE_PROTOCOL","username","password","auth","RE_AUTHORITY","getProtocol","getUsername","getPassword","getHostname","getPort","getAuthority","getOrigin","getPath","getQuery","buildQuery","getParam","hasParam","getParams","getHash","setProtocol","setUsername","setPassword","setHostname","setPort","setPath","setQuery","query","setParam","addParams","setParams","removeParam","setHash","toAbsolute","toLocal","toRelative","getRelativePath","qto","qthis","isLocal","fromCurrent","PART","PORT","PROTOCOL","USERNAME","PASSWORD","HOSTNAME","PATH","QUERY","HASH","getDirName","pairs","en","encodeURIComponent","flatten","dec","decodeURIComponent","convertType","ret","getElem","HTMLCollection","NodeList","DOM","getById","getPrefixed","prop","style","charAt","variants","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","knownEventModules","MouseEvent","create","view","init","initMouseEvent","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","KeyboardEvent","modifiers","initKeyboardEvent","FocusEvent","initUIEvent","HTMLEvents","initEvent","knownEvents","click","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","contextmenu","keydown","keypress","keyup","focus","blur","change","submit","reset","containers","caption","colgroup","col","thead","tbody","tfoot","tr","th","td","li","optgroup","option","getByClassName","className","context","getElementsByClassName","id","getElementById","sel","getChildren","childNodes","node","nodeType","closest","nodeName","hasClass","attrs","setAttributes","createFromHtml","html","container","setStyle","prefix","getStyle","prefixed","getComputedStyle","res","getStyleFloat","refloat","normalizeValue","stylePropsToFloat","innerHTML","script","hasAttribute","textContent","attributes","insertBefore","str","empty","firstChild","children","child","prepend","first","before","adown","documentElement","bup","compareDocumentPosition","addListener","listener","capture","removeListener","removeEventListener","trigger","dispatchEvent","delegate","handler","j","ids","found","getData","def","JSON","parse","parseData","getAttribute","setData","stringify","addClass","removeClass","toggleClass","testElem","prepare","asStr","classList","add","toggle","current","CSSTransitions","support","getDuration","elements","durations","concat","max","run","forceLayout","_resolve","pageXOffset","duration","after","ReflectionClass","reflectedClass","getClass","getClassName","obj","hasProperty","hasMethod","newInstance","newInstanceArgs","inst","ReflectionFunction","reflectedFunction","argsList","parts","getName","getArgs","invokeArgs","list","eventEmitter","listeners","defaultListeners","namespaces","process","emitter","op","arg1","arg2","dflt","prepareNamespaces","sort","mode","hasCommonElement","triggerDefault","isDefaultPrevented","NittroEventEmitter","on","one","off","NittroEvent","isAsync","defaultPrevented","async","preventDefault","waitFor","onfulfilled","onrejected","frozen","Freezable","freeze","isFrozen","_updating","Utils","DateInterval","interval","locale","initialized","DateTime","defaultLocale","intervals","intervalLengths","year","month","week","day","hour","minute","second","millisecond","getValue","getLength","_initialize","subtract","isNegative","valueOf","format","pattern","sign","pad","floor","precision","last","i18n","getInterval","getConjuction","formatAuto","rest","getIntervalParser","y","w","date","Date","now","isDateObject","timezone","timezone_type","isLeapYear","isModifyString","getParser","getDaysInMonth","3","5","8","10","ni","formatTz","offset","getLocalTzOffset","getTimezoneOffset","formatModifiers","getUTCDate","getDate","D","getWeekday","getUTCDay","getDay","N","S","z","M","getUTCFullYear","getFullYear","getUTCMonth","getMonth","W","F","L","Y","getUTCHours","getHours","A","g","G","H","getUTCMinutes","getMinutes","getUTCSeconds","getSeconds","getUTCMilliseconds","getMilliseconds","I","O","P","T","Z","U","getTime","utc","getLocale","setLocale","hasLocale","method","getTimestamp","getDateObject","modify","dt","setHours","setFullYear","setMonth","setDate","getWeekStart","modifyClone","locales","abbrev","keywords","months","weekdays","conjuction","unit","getPlural","weekStart","parser","parsers","full","yesterday","today","tomorrow","firstOf","lastOf","at","noon","midnight","buildParser","intervalParser","buildIntervalParser","Nittro","Tokenizer","patterns","matchCase","types","getCoordinates","lastIndexOf","tokenize","input","tokens","pos","bind","Neon","_cbStr","brackets","{","[","(","consts","true","True","TRUE","yes","Yes","YES","On","ON","false","False","FALSE","no","No","NO","Off","OFF","null","Null","NULL","indent","BLOCK","encode","options","NeonEntity","decode","tokenizer","error","indentTabs","result","inlineParser","entity","hasValue","hasKey","addValue","newIndent","mapping","\"","\\","/","msg","token","ServiceDefinition","factory","setup","getFactory","setFactory","getArguments","setArguments","getSetup","hasSetup","addSetup","setRun","isRun","services","serviceDefs","ContainerMixin","addService","service","addServiceDefinition","definition","override","hasServiceDefinition","getServiceDefinition","getService","_createService","hasService","isServiceCreated","runServices","_autowireArguments","_expandArguments","_toEntity","_expandEntity","argList","arg","lookupArg","_expandArg","mergeArgs","traverse","cursor","Container","config","factories","hasFactory","addFactory","__expandArg","BuilderExtension","containerBuilder","_getConfig","defaults","_getContainerBuilder","ContainerBuilder","extensions","addExtension","extension","createContainer","_prepareExtensions","_loadExtensions","_setupExtensions","Request","headers","normalized","dispatched","deferred","aborted","response","getUrl","_normalize","getMethod","isGet","isPost","isMethod","getHeaders","setUrl","setMethod","setHeader","header","setHeaders","setDispatched","isDispatched","setFulfilled","setResponse","getResponse","setRejected","reason","isAborted","Forms","FormData","Response","payload","getStatus","getPayload","getHeader","getAllHeaders","Service","transport","allowOrigins","setTransport","addTransport","console","log","supports","isAllowedOrigin","dispatch","createRequest","post","request","Native","createXhr","isUpload","adv","_checkSupport","_createError","_bindEvents","_formatData","_addHeaders","onLoad","_createResponse","onError","upload","lengthComputable","total","ontimeout","setRequestHeader","getAllResponseHeaders","Snippet","phase","INACTIVE","handlers","PREPARE_SETUP","RUN_SETUP","PREPARE_TEARDOWN","RUN_TEARDOWN","getId","getElement","teardown","runPhase","elm","getPhase","setContainer","isContainer","Helpers","buildContent","prepareDynamicContainer","snippet","mask","element","sortCache","computeSortedSnippets","snippets","changeset","sortData","_getSortData","_mergeSortData","_applySortData","applySortedSnippets","firstElementChild","content","previousElementSibling","nextElementSibling","sorted","_compareSnippets","descriptor","asc","_buildSortData","_parseDescriptor","update","_extractSortData","field","extractor","attr","_getAttrExtractor","_getDataExtractor","_getTextExtractor","SnippetManager","containerCache","currentPhase","getSnippet","isSnippet","_runSnippetsPhase","getRemoveTargets","computeChanges","removeTargets","_clearDynamicContainerCache","_resolveRemovals","_resolveUpdates","_resolveDynamicSnippets","applyChanges","_applyRemove","_applyUpdate","_applyAdd","_applyDynamic","_runSnippetsPhaseOnNextFrame","cleanupDescendants","isDescendant","_resolveAddition","_resolveUpdate","cid","_getDynamicContainerParams","action","tagName","_getDynamicContainerParamsForId","requestAnimationFrame","_getDynamicContainerCache","cache","SnippetAgent","page","snippetManager","_initTransaction","transaction","_handleResponse","_applyChangeset","_doApplyChangeset","AjaxAgent","ajax","_checkTransaction","whitelistRedirects","_dispatch","_abort","_doDispatch","_doHandleResponse","postGet","allowAjax","redirect","HistoryAgent","whitelistHistory","fromHistory","setIsFromHistory","setIsHistoryState","title","_saveState","isBackground","isHistoryState","History","_handleState","_nittro","replaceState","getState","pushState","TransitionAgent","defaultSelector","_getTransitionTargets","_getRemoveTargets","_handleSnippets","_handleError","_transitionIn","transitionOut","_transitionOut","_transition","aborting","dir","targets","transition","ScrollAgent","anchor","position","left","top","width","height","marginTop","scrollRestoration","_init","margin","scrollDown","_scrollTo","scrollAgent","rect","body","getBoundingClientRect","previous","pageYOffset","bottom","_cleanup","_handleHistory","scrollTo","isFromHistory","_apply","_resolveTarget","force","y0","dy","t0","step","x","cos","PI","Transaction","background","createRejected","setIsBackground","CspAgent","pending","_handleChangeset","_fixNonce","scripts","GoogleAnalyticsHelper","ga","currentTransaction","currentUrl","_handleLinkClick","_checkReady","whitelistLinks","backgroundErrors","_createRejectedTransaction","_createTransaction","openLink","link","_checkUrl","_checkLink","_dispatchTransaction","_handleSuccess","define","amd","exports","initOnLoad","getHandler","formErrors","version","addEvent","attachEvent","form","checked","files","selectedIndex","selected","getEffectiveValue","validateControl","rules","onlyCheck","emptyOptional","parseJSON","rule","curElem","control","namedItem","neg","condition","curValue","success","validateRule","isDisabled","message","foo","addError","validity","valid","validateForm","sender","scope","scopeArr","showFormErrors","radios","select","textarea","disabled","errors","focusElem","messages","inArray","alert","expandRuleArgument","preventFiltering","validators","filled","badInput","FileList","blank","equal","loop","i1","len1","i2","len2","notEqual","minLength","tooShort","maxLength","tooLong","email","regexp","caseInsensitive","regExp","patternCaseInsensitive","integer","float","rangeUnderflow","rangeOverflow","range","submitted","fileSize","size","image","static","toggleForm","toggles","toggleControl","firsttime","curSuccess","handled","oldIE","els","checkbox","radio","id2","eval","visible","srcElement","display","initForm","noValidate","stopPropagation","cancelBubble","returnValue","forms","webalizeTable","á","ä","č","ď","é","ě","í","ľ","ň","ó","ô","ř","š","ť","ú","ů","ý","ž","dataStorage","_isFile","File","Blob","mergeData","forcePlain","fd","Vendor","Form","submittedBy","inLiveValidation","errorRenderer","_handleSubmit","_handleReset","setElement","_handleBlur","setErrorRenderer","renderer","HTMLFormElement","validationMode","getElements","setSubmittedBy","validate","cleanupErrors","setValues","_getFieldNames","setValue","toStr","single","serialize","by","btn","destroy","enabledOnly","anonId","Locator","formErrorRenderer","registry","_forwardError","getForm","removeForm","refreshForms","DefaultErrorRenderer","_getErrorContainer","class","hasFixedParent","offsetParent","getRect","right","tryFloatingPosition","placement","positioner","opacity","fixed","elemRect","targetRect","order","getDefaultOrder","Message","_doDismiss","_normalizeDismissTime","_scheduleDismiss","_getTarget","tag","inline","rich","data-flash-dynamic","wrap","dismiss","show","_show","getLayer","getPositioner","getGlobalHolder","hide","DefaultPositioner","defaultOrder","above","innerWidth","innerHeight","below","leftOf","rightOf","globalHolder","layer","_removeStatic","URLRoute","_prepareMask","styles","int","bool","tryMatch","param","reTop","reParam","reParen","reOptional","DOMRoute","selector","matches","Router","basePath","routes","dom","getDOMRoute","getURLRoute","matchDOM","matchURL","matchAll","CheckList","scrolling","scroll","speed","zoneSize","_handleMouseDown","_handleClick","items","boundary","horizontal","_getItems","mdevt","start","states","originalStates","_getItemState","_setItemState","handleMove","_getMoveHandler","end","muevt","endTgt","prev","offs","coffs","_getScrollInfo","boundaryElems","_getBoundaryElements","boundaries","_getBoundaries","horiz","check","direction","lastMousePosition","prevThreshold","_startScrolling","nextThreshold","info","canScroll","doScroll","scrollBy","zone","_getScrollContainerInfo","scrollWidth","offsetWidth","clientWidth","_getScrollZoneSize","offsetCross","scrollHeight","offsetHeight","clientHeight","scrollProp","scrollSize","clientSize","offsetSize","overflow","scrollable","auto","isScrollable","createInfo","Keymap","MAC","navigator","platform","ACTION","TabContext","lastFocused","insert","addFromContainer","links","tabIndex","Element","_handleFocus","_getItem","_isDisabled","cycle","count","cycled","clear","Keys","Shift","Control","Alt","Meta","modifierOrder","codes","9","13","16","17","18","27","32","33","34","35","36","37","38","39","40","45","46","91","93","186","187","188","189","190","191","192","219","220","221","222","224","225","Manager","keymaps","tabContexts","_handleKeyDown","_handleKey","RE_TAB","_extractKey","which","keyCode","modifier","Dialog","getDefaults","destroying","scrollLock","cancel","scrollPosition","keyMap","tabContext","origFocusTarget","ios","userAgent","elms","holder","templates","wrapper","buttons","HTMLElement","_createButtons","keymap","_saveFocusedElement","_restoreFocusedElement","_handleScroll","Escape","setDefaults","isVisible","_setState","_lockScrolling","_setVisible","_unlockScrolling","isBusy","setBusy","getContent","getButtons","getKeyMap","getTabContext","_doDestroy","resolved","activeElement","label","IFrameDialog","_handleLoad","allowFullscreen","allowPaymentRequest","autoHeight","lazy","close","getContentDocument","contentDocument","external","busy","ready","_load","isCurrent","ignoreHash","_applyAutoHeight","baseZ","stack","zIndex","_handleShow","_handleHide","_handleDestroy","createDialog","dlg","_setup","createIFrameDialog","hasOpenDialog","getTopmostOpenDialog","getOpenDialogs","getDialog","registerDialog","dialog","unregisterDialog","Confirm","_prepareOptions","confirm","Enter","onfulfill","onreject","ConfirmMixin","createConfirm","zones","findTargetZones","hasTarget","handleDrop","getTarget","dataTransfer","addFiles","handleDragEnter","validZones","handleDragLeave","leaveAll","handleDragOver","tmr","handleDragOverTimeout","kind","hasAllowedType","findValidZones","DropZone","allow","_serialize","_handleFieldChange","_getField","allowedTypes","setAllowedTypes","maxSize","_normalizeMaxSize","fieldName","required","multiple","accept","_formatAccept","removeAttribute","attach","formLocator","HTMLInputElement","TYPES","netteValidate","perFile","onSubmit","invalidType","exceededSize","detach","isAttached","_normalizeTypes","setMaxSize","setRequired","setMultiple","setFieldName","hasFiles","getFiles","getFile","isImage","file","loadImages","loadImage","reader","FileReader","Image","readAsDataURL","addFile","_validateFile","ValidationError","NetteValidationError","removeFile","_hasField","_formatErrorMessage","formatSize","bytes","units","_validateType","_validateSize","Paginator","viewport","_resolveViewport","currentRequest","pageSize","pageCount","disablePreviousPages","currentPage","_computeMargin","itemRenderer","template","responseProcessor","_processResponse","firstPage","lastPage","lock","_computeNextThreshold","handleScroll","prevElem","prevContainer","previousItems","previousLock","time","threshold","_computeElemOffset","_getFirstItem","previousThreshold","_computePreviousThreshold","pageThresholds","_getScrollTop","_preparePreviousPage","_renderNextPage","_renderPreviousPage","_getPageUrl","_createItem","delta","scrollTop","existing","itemStyle","pt","paddingTop","pb","paddingBottom","marginBottom","_setScrollTop","_renderItem","lastElementChild","_getViewportHeight","edge","overflowY","Storage","namespace","persistent","engine","localStorage","sessionStorage","filters","in","out","NAMESPACE_SEPARATOR","FILTER_IN","FILTER_OUT","getItem","_formatKey","_applyFilters","_parseValue","setItem","_stringifyValue","hasItem","removeItem","nsl","getNamespace","addFilter","AjaxExtension","builder","PageExtension","csp","transitions","connectionError","unknownError","flashes","FlashAgent","_showFlashes","FormsExtension","whitelistForms","autoResetForms","initForms","FormsMixin","_handleButtonClick","_refreshForms","_initFormTransaction","sendForm","frm","_handleFormSuccess","allowReset","_handleFormResponse","_checkForm","FlashesExtension","RoutingExtension","router","CheckListExtension","KeymapExtension","DialogAgent","dialogManager","_setupTransactionContext","disableDefaultTransitions","disableDefaultScroll","setFormLocator","active","iframe","ctx","dialogs","_mergeDefinitions","_openIframeDialog","_createDialog","_processDialog","merged","_isSnippetType","_injectForm","defs","","warn","createFormDialog","_cleanupDialog","setForm","FormDialog","_handleButton","autoFocus","_autoFocus","resetOnHide","_autoReset","FormDialogMixin","_removeDialogForm","setKeymapManager","keymapManager","_setupKeymap","_pushKeymap","_popKeymap","DialogsExtension","ConfirmExtension","autoConfirm","handleTransaction","AutoConfirm","prompt","DropZoneExtension","PaginatorExtension","StorageExtension","DI","routing","checklist","dropzone","paginator","storage","di","_stack"],"mappings":"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","file":"nittro.min.js","sourcesContent":["window.Nette = {\n noInit: true\n};\n","(function () {\n global = this\n\n var queueId = 1\n var queue = {}\n var isRunningTask = false\n\n if (!global.setImmediate)\n global.addEventListener('message', function (e) {\n if (e.source == global){\n if (isRunningTask)\n nextTick(queue[e.data])\n else {\n isRunningTask = true\n try {\n queue[e.data]()\n } catch (e) {}\n\n delete queue[e.data]\n isRunningTask = false\n }\n }\n })\n\n function nextTick(fn) {\n if (global.setImmediate) setImmediate(fn)\n // if inside of web worker\n else if (global.importScripts) setTimeout(fn)\n else {\n queueId++\n queue[queueId] = fn\n global.postMessage(queueId, '*')\n }\n }\n\n Deferred.resolve = function (value) {\n if (!(this._d == 1))\n throw TypeError()\n\n if (value instanceof Deferred)\n return value\n\n return new Deferred(function (resolve) {\n resolve(value)\n })\n }\n\n Deferred.reject = function (value) {\n if (!(this._d == 1))\n throw TypeError()\n\n return new Deferred(function (resolve, reject) {\n reject(value)\n })\n }\n\n Deferred.all = function (arr) {\n if (!(this._d == 1))\n throw TypeError()\n\n if (!(arr instanceof Array))\n return Deferred.reject(TypeError())\n\n var d = new Deferred()\n\n function done(e, v) {\n if (v)\n return d.resolve(v)\n\n if (e)\n return d.reject(e)\n\n var unresolved = arr.reduce(function (cnt, v) {\n if (v && v.then)\n return cnt + 1\n return cnt\n }, 0)\n\n if(unresolved == 0)\n d.resolve(arr)\n\n arr.map(function (v, i) {\n if (v && v.then)\n v.then(function (r) {\n arr[i] = r\n done()\n return r\n }, done)\n })\n }\n\n done()\n\n return d\n }\n\n Deferred.race = function (arr) {\n if (!(this._d == 1))\n throw TypeError()\n\n if (!(arr instanceof Array))\n return Deferred.reject(TypeError())\n\n if (arr.length == 0)\n return new Deferred()\n\n var d = new Deferred()\n\n function done(e, v) {\n if (v)\n return d.resolve(v)\n\n if (e)\n return d.reject(e)\n\n var unresolved = arr.reduce(function (cnt, v) {\n if (v && v.then)\n return cnt + 1\n return cnt\n }, 0)\n\n if(unresolved == 0)\n d.resolve(arr)\n\n arr.map(function (v, i) {\n if (v && v.then)\n v.then(function (r) {\n done(null, r)\n }, done)\n })\n }\n\n done()\n\n return d\n }\n\n Deferred._d = 1\n\n\n /**\n * @constructor\n */\n function Deferred(resolver) {\n 'use strict'\n if (typeof resolver != 'function' && resolver != undefined)\n throw TypeError()\n\n if (typeof this != 'object' || (this && this.then))\n throw TypeError()\n\n // states\n // 0: pending\n // 1: resolving\n // 2: rejecting\n // 3: resolved\n // 4: rejected\n var self = this,\n state = 0,\n val = 0,\n next = [],\n fn, er;\n\n self['promise'] = self\n\n self['resolve'] = function (v) {\n fn = self.fn\n er = self.er\n if (!state) {\n val = v\n state = 1\n\n nextTick(fire)\n }\n return self\n }\n\n self['reject'] = function (v) {\n fn = self.fn\n er = self.er\n if (!state) {\n val = v\n state = 2\n\n nextTick(fire)\n\n }\n return self\n }\n\n self['_d'] = 1\n\n self['then'] = function (_fn, _er) {\n if (!(this._d == 1))\n throw TypeError()\n\n var d = new Deferred()\n\n d.fn = _fn\n d.er = _er\n if (state == 3) {\n d.resolve(val)\n }\n else if (state == 4) {\n d.reject(val)\n }\n else {\n next.push(d)\n }\n\n return d\n }\n\n self['catch'] = function (_er) {\n return self['then'](null, _er)\n }\n\n var finish = function (type) {\n state = type || 4\n next.map(function (p) {\n state == 3 && p.resolve(val) || p.reject(val)\n })\n }\n\n try {\n if (typeof resolver == 'function')\n resolver(self['resolve'], self['reject'])\n } catch (e) {\n self['reject'](e)\n }\n\n return self\n\n // ref : reference to 'then' function\n // cb, ec, cn : successCallback, failureCallback, notThennableCallback\n function thennable (ref, cb, ec, cn) {\n // Promises can be rejected with other promises, which should pass through\n if (state == 2) {\n return cn()\n }\n if ((typeof val == 'object' || typeof val == 'function') && typeof ref == 'function') {\n try {\n\n // cnt protects against abuse calls from spec checker\n var cnt = 0\n ref.call(val, function (v) {\n if (cnt++) return\n val = v\n cb()\n }, function (v) {\n if (cnt++) return\n val = v\n ec()\n })\n } catch (e) {\n val = e\n ec()\n }\n } else {\n cn()\n }\n };\n\n function fire() {\n\n // check if it's a thenable\n var ref;\n try {\n ref = val && val.then\n } catch (e) {\n val = e\n state = 2\n return fire()\n }\n\n thennable(ref, function () {\n state = 1\n fire()\n }, function () {\n state = 2\n fire()\n }, function () {\n try {\n if (state == 1 && typeof fn == 'function') {\n val = fn(val)\n }\n\n else if (state == 2 && typeof er == 'function') {\n val = er(val)\n state = 1\n }\n } catch (e) {\n val = e\n return finish()\n }\n\n if (val == self) {\n val = TypeError()\n finish()\n } else thennable(ref, function () {\n finish(3)\n }, finish, function () {\n finish(state == 1 && 3)\n })\n\n })\n }\n\n\n }\n\n // Export our library object, either for node.js or as a globally scoped variable\n if (typeof module != 'undefined') {\n module['exports'] = Deferred\n } else {\n global['Promise'] = global['Promise'] || Deferred\n }\n})()\n","var _context = (function() {\n var t = {},\n api,\n loaded = [],\n loading = {},\n REQ_TIMEOUT = 30000,\n undefined,\n doc = document,\n elem = function(n) { return doc.createElement(n); },\n win = window,\n loc = win.history.location || win.location, // support for HTML5 history polyfill\n setTimeout = function(c, t) { return win.setTimeout(c, t); },\n clearTimeout = function(t) { return win.clearTimeout(t); },\n promise = Promise,\n resolver = null,\n nsStack = [],\n nonce = null,\n map = {\n names: [],\n classes: []\n };\n\n function resolveUrl(u) {\n resolver || (resolver = elem('a'));\n resolver.href = u;\n return resolver.href;\n }\n\n\n function isRelative(u) {\n try {\n var len = /^https?:\\/\\/.+?(\\/|$)/i.exec(loc.href)[0].length;\n return u.substr(0, len) === loc.href.substr(0, len);\n\n } catch (err) {\n return false;\n\n }\n }\n\n var xhrFactory = (function(o, f) {\n while(o.length) {\n try {\n f = o.shift();\n f();\n\n return f;\n\n } catch (e) {}\n }\n\n return function() { throw new Error(); };\n\n })([\n function() { return new XMLHttpRequest(); },\n function() { return new ActiveXObject('Msxml2.XMLHTTP'); },\n function() { return new ActiveXObject('Msxml3.XMLHTTP'); },\n function() { return new ActiveXObject('Microsoft.XMLHTTP'); }\n ]);\n\n var xdrFactory = (function() {\n try {\n if ('withCredentials' in new XMLHttpRequest()) {\n return function() { return new XMLHttpRequest(); };\n\n } else if (win.XDomainRequest !== undefined) {\n return function() { return new win.XDomainRequest(); };\n\n }\n\n } catch (err) { }\n\n return function() { throw new Error(); };\n\n })();\n\n function xhr(u) {\n return new promise(function(fulfill, reject) {\n var req,\n m;\n\n if (isRelative(u)) {\n req = xhrFactory();\n\n } else {\n req = xdrFactory();\n\n }\n\n req.open('GET', u, true);\n\n var f = function () {\n m && clearTimeout(m);\n fulfill(req);\n };\n\n var r = function () {\n m && clearTimeout(m);\n reject(req);\n };\n\n if ('onsuccess' in req) {\n req.onsuccess = f;\n req.onerror = r;\n\n } else if (win.XDomainRequest !== undefined && req instanceof win.XDomainRequest) {\n req.onload = f;\n req.onerror = r;\n\n } else {\n req.onreadystatechange = function() {\n if (req.readyState !== 4) {\n return;\n\n }\n\n if (req.status === 200) {\n f();\n\n } else {\n r();\n\n }\n };\n }\n\n req.send();\n\n m = setTimeout(function() {\n if (req.readyState && req.readyState < 4) try {\n req.abort();\n\n } catch (err) { }\n\n m = null;\n r();\n\n }, REQ_TIMEOUT);\n\n });\n }\n\n function resolveNonce() {\n if (nonce !== null) {\n return nonce;\n }\n\n var elems = document.getElementsByTagName('script'),\n i, n, elem;\n\n for (i = 0, n = elems.length; i < n; i++) {\n elem = elems.item(i);\n\n if (/^((application|text)\\/javascript)?$/i.test(elem.type) && elem.nonce) {\n return nonce = elem.nonce;\n }\n }\n\n return nonce = false;\n }\n\n function exec(s, t, u) {\n var e, o = resolveNonce();\n\n if (!t) {\n if (u.match(/\\.(?:less|css)/i)) {\n t = 'text/css';\n } else {\n t = 'application/javascript';\n }\n } else {\n t = t.replace(/\\s*;.*$/, '').toLowerCase();\n }\n\n if (t === 'text/css') {\n e = elem('style');\n e.type = t;\n o && e.setAttribute('nonce', o);\n\n u = u.replace(/[^\\/]+$/, '');\n s = s.replace(/url\\s*\\((['\"])?(?:\\.\\/)?(.+?)\\1\\)/, function (m, q, n) {\n q || (q = '\"');\n\n if (n.match(/^(?:(?:https?:)?\\/)?\\//)) {\n return 'url(' + q + n + q + ')';\n } else {\n return 'url(' + q + resolveUrl(u + n) + q + ')';\n }\n });\n\n if (e.styleSheet) {\n e.styleSheet.cssText = s;\n } else {\n e.appendChild(doc.createTextNode(s));\n }\n\n doc.head.appendChild(e);\n\n } else {\n e = elem('script');\n e.type = t;\n e.text = s;\n o && e.setAttribute('nonce', o);\n doc.head.appendChild(e).parentNode.removeChild(e);\n }\n }\n\n function lookup(s, c) {\n var i = map.names.indexOf(s);\n\n if (i > -1) {\n return map.classes[i];\n\n }\n\n var r = t,\n p = s.split('.'),\n n;\n\n while (p.length) {\n n = p.shift();\n if (r[n] === undefined) {\n if (c) {\n r[n] = {};\n\n } else {\n throw new Error(s + ' not found in context');\n\n }\n }\n\n r = r[n];\n\n }\n\n map.names.push(s);\n map.classes.push(r);\n\n return r;\n\n }\n\n function lookupClass(o) {\n if (typeof o === 'object' && o.constructor !== Object) {\n o = o.constructor;\n\n }\n\n if (typeof o !== 'function' && typeof o !== 'object') {\n throw new Error('Cannot lookup class name of non-object');\n\n }\n\n var i = map.classes.indexOf(o);\n\n return i === -1 ? false : map.names[i];\n\n }\n\n function load() {\n var u, a, p = promise.resolve(true);\n\n for (a = 0; a < arguments.length; a++) {\n if (typeof arguments[a] === 'function') {\n p = p.then(function(f) {\n return function () {\n return invoke(f);\n\n };\n }(arguments[a]));\n\n } else if (typeof arguments[a] === 'string') {\n u = resolveUrl(arguments[a]);\n\n if (loaded.indexOf(u) === -1) {\n if (loading[u]) {\n p = p.then(function (p) {\n return function () {\n return p;\n\n };\n }(loading[u]));\n } else {\n p = loading[u] = function (p, u) {\n return new promise(function (f, r) {\n xhr(u).then(function (xhr) {\n p.then(function () {\n exec(xhr.responseText, xhr.getResponseHeader('Content-Type'), u);\n delete loading[u];\n loaded.push(u);\n f();\n\n }, r);\n });\n });\n\n }(p, u);\n }\n }\n }\n }\n\n return a = {\n then: function (fulfilled, rejected) {\n p.then(function () {\n fulfilled && invoke(fulfilled);\n }, function () {\n rejected && invoke(rejected);\n });\n\n return a;\n\n }\n };\n }\n\n\n function invoke(ns, f, i) {\n if (i === undefined && typeof ns === 'function') {\n i = f;\n f = ns;\n ns = null;\n\n }\n\n if (ns) {\n nsStack.unshift(ns, ns = lookup(ns, true));\n\n } else {\n ns = t;\n nsStack.unshift(null, ns);\n\n }\n\n var params = f.length ? f.toString().match(/^function\\s*\\((.*?)\\)/i)[1].split(/\\s*,\\s*/) : [],\n args = [],\n p, c, r;\n\n for (p = 0; p < params.length; p++) {\n if (params[p] === 'context') {\n args.push(api);\n\n } else if (params[p] === '_NS_') {\n args.push(ns);\n\n } else if (params[p] === 'undefined') {\n args.push(undefined);\n\n } else if (i !== undefined && params[p] in i) {\n c = i[params[p]];\n\n if (typeof c === 'string') {\n c = lookup(c);\n\n }\n\n args.push(c);\n\n } else if (ns[params[p]] !== undefined) {\n args.push(ns[params[p]]);\n\n } else if (t[params[p]] !== undefined) {\n args.push(t[params[p]]);\n\n } else {\n throw new Error('\"' + params[p] + '\" not found in context');\n\n }\n }\n\n r = f.apply(ns, args);\n\n nsStack.shift();\n nsStack.shift();\n return r;\n\n }\n\n function register(constructor, name) {\n var ns = name.split(/\\./g),\n key = ns.pop();\n\n if (ns.length) {\n ns = lookup(ns.join('.'), true);\n\n } else {\n if (nsStack.length && nsStack[0] !== null) {\n name = nsStack[0] + '.' + name;\n ns = nsStack[1];\n\n } else {\n ns = t;\n\n }\n }\n\n ns[key] = constructor;\n\n map.names.push(name);\n map.classes.push(constructor);\n return api;\n\n }\n\n function __ns() {\n if (arguments.length) {\n nsStack.unshift(arguments[0], arguments[1]);\n\n } else {\n nsStack.shift();\n nsStack.shift();\n }\n }\n\n function extend(parent, constructor, proto) {\n if (!proto) {\n proto = constructor;\n constructor = parent;\n parent = null;\n\n }\n\n if (!parent) {\n parent = Object;\n\n } else if (typeof parent === 'string') {\n parent = lookup(parent);\n\n }\n\n var tmp = function () {};\n tmp.prototype = parent.prototype;\n constructor.prototype = new tmp();\n constructor.prototype.constructor = constructor;\n constructor.Super = parent;\n\n if (proto) {\n if (proto.hasOwnProperty('STATIC') && proto.STATIC) {\n copyProps(constructor, proto.STATIC);\n\n }\n\n copyProps(constructor.prototype, proto);\n\n }\n\n return constructor;\n\n }\n\n function mixin(target, source, map) {\n if (typeof target === 'string') {\n target = lookup(target);\n\n }\n\n if (typeof source === 'string') {\n source = lookup(source);\n\n }\n\n if (source.hasOwnProperty('STATIC') && source.STATIC) {\n merge(target, source.STATIC);\n\n }\n\n copyProps(target.prototype, source, map);\n return target;\n\n }\n\n function copyProps(target, source, map) {\n var key;\n\n for (key in source) {\n if (source.hasOwnProperty(key) && key !== 'STATIC') {\n target[map && key in map ? map[key] : key] = source[key];\n\n }\n }\n }\n\n function merge(a, b) {\n for (var key in b) {\n if (b.hasOwnProperty(key)) {\n if (!a.hasOwnProperty(key)) {\n a[key] = b[key];\n\n } else if (typeof a[key] === 'object' && typeof b[key] === 'object') {\n if (!a[key]) {\n a[key] = b[key];\n\n } else if (b[key]) {\n merge(a[key], b[key]);\n\n }\n } else {\n a[key] = b[key];\n\n }\n }\n }\n }\n\n return api = {\n lookup: lookup,\n lookupClass: lookupClass,\n invoke: invoke,\n load: load,\n extend: extend,\n mixin: mixin,\n register: register,\n __ns: __ns\n };\n\n})();\n","_context.invoke('Utils', function(undefined) {\n\n var Strings = {\n applyModifiers: function(s) {\n var f = Array.prototype.slice.call(arguments, 1),\n i = 0,\n a, m;\n\n for (; i < f.length; i++) {\n a = f[i].split(':');\n m = a.shift();\n a.unshift(s);\n s = Strings[m].apply(Strings, a);\n\n }\n\n return s;\n\n },\n\n toString: function(s) {\n return s === undefined ? 'undefined' : (typeof s === 'string' ? s : (s.toString !== undefined ? s.toString() : Object.prototype.toString.call(s)));\n\n },\n\n sprintf: function(s) {\n return Strings.vsprintf(s, Array.prototype.slice.call(arguments, 1));\n\n },\n\n vsprintf: function(s, args) {\n var n = 0;\n\n return s.replace(/%(?:(\\d+)\\$)?(\\.\\d+|\\[.*?:.*?\\])?([idsfa%])/g, function(m, a, p, f) {\n if (f === '%') {\n return f;\n\n }\n\n a = a ? parseInt(a) - 1 : n++;\n\n if (args[a] === undefined) {\n throw new Error('Missing parameter #' + (a + 1));\n\n }\n\n a = args[a];\n\n switch (f) {\n case 's':\n return Strings.toString(a);\n\n case 'i':\n case 'd':\n return parseInt(a);\n\n case 'f':\n a = parseFloat(a);\n\n if (p && p.match(/^\\.\\d+$/)) {\n a = a.toFixed(parseInt(p.substr(1)));\n\n }\n\n return a;\n\n case 'a':\n p = p && p.match(/^\\[.*:.*\\]$/) ? p.substr(1, p.length - 2).split(':') : [', ', ', '];\n return a.length === 0 ? '' : a.slice(0, -1).join(p[0]) + (a.length > 1 ? p[1] : '') + a[a.length - 1];\n\n }\n\n return m;\n\n });\n },\n\n webalize: function(s, chars, ws) {\n if (ws) {\n s = s.replace(/\\s+/g, '_');\n\n }\n\n s = s.replace(new RegExp('[^_A-Za-z\\u00C0-\\u017F' + Strings.escapeRegex(chars || '').replace(/\\\\-/g, '-') + ']+', 'g'), '-');\n\n return Strings.trim(s, '_-');\n\n },\n\n escapeRegex: function(s) {\n return s.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n\n },\n\n split: function(s, re, offsetCapture, noEmpty, delimCapture) {\n if (re instanceof RegExp) {\n re = new RegExp(re.source, [re.ignoreCase ? 'i' : '', re.multiline ? 'm' : '', 'g'].filter(function(v) { return !!v; }).join(''))\n\n } else {\n re = new RegExp(re, 'g');\n\n }\n\n var r = [],\n len = 0;\n\n s = s.replace(re, function(m, p, ofs) {\n ofs = arguments[arguments.length - 2];\n p = s.substring(len, ofs);\n\n if (p.length && !p.match(/^[\\t ]+$/) || !noEmpty) {\n r.push(offsetCapture ? [p, len] : s.substring(len, ofs));\n\n }\n\n if (delimCapture && (m.length && !m.match(/^[\\t ]+$/) || !noEmpty)) {\n r.push(offsetCapture ? [m, ofs] : m);\n\n }\n\n len = ofs + m.length;\n\n return m;\n\n });\n\n if (len < s.length || !noEmpty) {\n s = s.substring(len);\n (!noEmpty || (s.length && !s.match(/^[\\t ]+$/))) && r.push(offsetCapture ? [s, len] : s);\n\n }\n\n return r;\n\n },\n\n trim: function(s, c) {\n return Strings._trim(s, c, true, true);\n\n },\n\n trimLeft: function(s, c) {\n return Strings._trim(s, c, true, false);\n\n },\n\n trimRight: function(s, c) {\n return Strings._trim(s, c, false, true);\n\n },\n\n _trim: function (s, c, l, r) {\n if (!c) {\n c = \" \\t\\n\\r\\0\\x0B\\xC2\\xA0\";\n\n }\n\n var re = [];\n c = '[' + Strings.escapeRegex(c) + ']+';\n l && re.push('^', c);\n l && r && re.push('|');\n r && re.push(c, '$');\n\n return s.replace(new RegExp(re.join(''), 'ig'), '');\n\n },\n\n firstUpper: function(s) {\n return s.substr(0, 1).toUpperCase() + s.substr(1);\n\n },\n\n compare: function(a, b, len) {\n if (typeof a !== \"string\" || typeof b !== 'string') {\n return false;\n\n }\n\n if (!len) {\n len = Math.min(a.length, b.length);\n\n }\n\n return a.substr(0, len).toLowerCase() === b.substr(0, len).toLowerCase();\n\n },\n\n contains: function(h, n) {\n return h.indexOf(n) !== -1;\n\n },\n\n isNumeric: function(s) {\n return Object.prototype.toString.call(s) !== '[object Array]' && (s - parseFloat(s) + 1) >= 0;\n\n },\n\n escapeHtml: function(s) {\n return s\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\n },\n\n nl2br: function(s, collapse) {\n return s.replace(collapse ? /\\n+/g : /\\n/g, '
');\n\n },\n\n random: function(len, chars) {\n chars = (chars || 'a-z0-9').replace(/.-./g, function(m, a, b) {\n a = m.charCodeAt(0);\n b = m.charCodeAt(2);\n var n = Math.abs(b - a),\n c = new Array(n),\n o = Math.min(a, b),\n i = 0;\n\n for (; i <= n; i++) {\n c[i] = o + i;\n }\n\n return String.fromCharCode.apply(null, c);\n\n });\n\n len || (len = 8);\n\n var s = new Array(len),\n n = chars.length - 1,\n i;\n\n for (i = 0; i < len; i++) {\n s[i] = chars[Math.round(Math.random() * n)];\n\n }\n\n return s.join('');\n\n }\n };\n\n _context.register(Strings, 'Strings');\n\n});\n","_context.invoke('Utils', function(undefined) {\n\n var Arrays = {\n isArrayLike: function(a) {\n return typeof a === 'object' && a.length !== undefined;\n\n },\n\n shuffle: function (a) {\n var c = a.length, t, i;\n\n // While there are elements in the array\n while (c--) {\n // Pick a random index\n i = (Math.random() * c) | 0;\n\n // And swap the last element with it\n t = a[c];\n a[c] = a[i];\n a[i] = t;\n }\n\n return a;\n\n },\n\n createFrom: function(a, s, e) {\n if (a.length === undefined) {\n throw new Error('Invalid argument, only array-like objects can be supplied');\n\n }\n\n return Array.prototype.slice.call(a, s || 0, e || a.length);\n\n },\n\n getKeys: function(a) {\n var keys = [], k;\n\n if (Array.isArray(a)) {\n for (k = 0; k < a.length; k++) {\n keys.push(k);\n\n }\n } else {\n for (k in a) {\n keys.push(k);\n\n }\n }\n\n return keys;\n\n },\n\n filterKeys: function() {\n var args = Arrays.createFrom(arguments),\n t = args.shift(),\n a, i, r = {}, rem;\n\n rem = function(k) {\n if (r[k] === undefined) {\n r[k] = t[k];\n delete t[k];\n\n }\n };\n\n while (args.length) {\n a = args.shift();\n\n if (typeof a === 'object') {\n if (a instanceof Array) {\n for (i = 0; i < a.length; i++) {\n rem(a[i]);\n\n }\n } else {\n for (i in a) {\n rem(i);\n\n }\n }\n } else {\n rem(a);\n\n }\n }\n },\n\n getValues: function(a) {\n var arr = [], k;\n\n for (k in a) {\n arr.push(a[k]);\n\n }\n\n return arr;\n\n },\n\n merge: function() {\n var args = Arrays.createFrom(arguments),\n a = args.shift(),\n r = false,\n b, i;\n\n if (typeof a === 'boolean') {\n r = a;\n a = args.shift();\n\n }\n\n if (!a) {\n a = [];\n }\n\n while (args.length) {\n b = args.shift();\n if (b instanceof Array) {\n for (i = 0; i < b.length; i++) {\n if (r && typeof b[i] === 'object' && Object.prototype.toString.call(b[i]) === '[object Object]') {\n a.push(Arrays.mergeTree(r, {}, b[i]));\n\n } else {\n a.push(b[i]);\n\n }\n }\n }\n }\n\n return a;\n\n },\n\n mergeTree: function() {\n var r = false,\n args = Arrays.createFrom(arguments),\n ofs = 1,\n t = args.shift(),\n props = [];\n\n if (typeof t === 'boolean') {\n r = t;\n t = args.shift();\n ofs = 2;\n\n }\n\n while (args.length) {\n var o = args.pop(),\n p, a, i;\n\n if (typeof o !== 'object' || o === null) {\n continue;\n\n }\n\n if (!t) {\n t = {};\n\n }\n\n for (p in o) {\n if (!o.hasOwnProperty(p) || props.indexOf(p) !== -1) {\n continue;\n\n }\n\n if (typeof o[p] === 'object') {\n if (r) {\n if (o[p] instanceof Array) {\n a = [r, t[p] || null];\n\n for (i = ofs; i < arguments.length; i++) {\n a.push(arguments[i][p] || null);\n\n }\n\n t[p] = Arrays.merge.apply(this, a);\n\n } else {\n a = [r, null];\n\n for (i = ofs; i < arguments.length; i++) {\n a.push(arguments[i] ? arguments[i][p] || null : null);\n\n }\n\n t[p] = Arrays.mergeTree.apply(this, a) || t[p];\n\n }\n\n } else {\n t[p] = t[p] === undefined ? o[p] : (o[p] === null ? t[p] : o[p]);\n\n }\n } else {\n t[p] = o[p];\n\n }\n\n props.push(p);\n\n }\n }\n\n return t;\n\n },\n\n walk: function(r, a, f) {\n if (typeof r !== \"boolean\") {\n f = a;\n a = r;\n r = false;\n }\n\n var i,\n p = function(k, v) {\n if (r && (v instanceof Array || v instanceof Object)) {\n Arrays.walk(r, v, f);\n\n } else {\n f.call(v, k, v);\n\n }\n };\n\n if (a instanceof Array) {\n for (i = 0; i < a.length; i++) {\n p(i, a[i]);\n\n }\n } else if (a instanceof Object) {\n for (i in a) {\n p(i, a[i]);\n\n }\n } else {\n p(null, a);\n\n }\n }\n };\n\n _context.register(Arrays, 'Arrays');\n\n});\n","_context.invoke('Utils', function (Arrays, undefined) {\n\n var HashMap = _context.extend(function (src) {\n this._ = {\n keys: [],\n values: [],\n nonNumeric: 0,\n nextNumeric: 0\n };\n\n if (src) {\n this.merge(src);\n\n }\n }, {\n STATIC: {\n from: function (data, keys) {\n if (!keys) {\n return data instanceof HashMap ? data.clone() : new HashMap(data);\n\n } else if (!Array.isArray(keys)) {\n throw new Error('Invalid argument supplied to HashMap.from(): the second argument must be an array');\n\n }\n\n var map = new HashMap(),\n i, n = keys.length,\n k,\n arr = Array.isArray(data);\n\n for (i = 0; i < n; i++) {\n k = arr ? i : keys[i];\n\n if (data[k] !== undefined) {\n map.set(keys[i], data[k]);\n\n }\n }\n\n return map;\n\n }\n },\n\n length: 0,\n\n isList: function () {\n return this._.nonNumeric === 0;\n\n },\n\n clone: function (deep) {\n var o = new HashMap();\n o._.keys = this._.keys.slice();\n o._.nextNumeric = this._.nextNumeric;\n o.length = this.length;\n\n if (deep) {\n o._.values = this._.values.map(function (v) {\n return v instanceof HashMap ? v.clone(deep) : v;\n });\n } else {\n o._.values = this._.values.slice();\n\n }\n\n return o;\n\n },\n\n merge: function (src) {\n if (src instanceof HashMap || Array.isArray(src)) {\n src.forEach(function(value, key) { this.set(key, value); }, this);\n\n } else if (typeof src === 'object' && src !== null) {\n for (var k in src) {\n if (src.hasOwnProperty(k)) {\n this.set(k, src[k]);\n\n }\n }\n } else {\n throw new TypeError('HashMap.merge() expects the first argument to be an array or an object, ' + (typeof src) + ' given');\n\n }\n\n return this;\n\n },\n\n append: function (src) {\n if (src instanceof HashMap || Array.isArray(src)) {\n src.forEach(function (value, key) {\n if (typeof key === 'number') {\n this.push(value);\n\n } else {\n this.set(key, value);\n\n }\n }, this);\n } else {\n this.merge(src);\n\n }\n\n return this;\n\n },\n\n push: function (value) {\n for (var i = 0; i < arguments.length; i++) {\n this._.keys.push(this._.nextNumeric);\n this._.values.push(arguments[i]);\n this._.nextNumeric++;\n this.length++;\n\n }\n\n return this;\n\n },\n\n pop: function () {\n if (!this.length) {\n return null;\n\n }\n\n var k = this._.keys.pop();\n\n if (typeof k === 'number') {\n if (k + 1 === this._.nextNumeric) {\n this._.nextNumeric--;\n\n }\n } else {\n this._.nonNumeric--;\n\n }\n\n this.length--;\n return this._.values.pop();\n\n },\n\n shift: function () {\n if (!this.length) {\n return null;\n\n }\n\n if (typeof this._.keys[0] === 'number') {\n this._.nextNumeric--;\n this._shiftKeys(1, this.length, -1);\n\n } else {\n this._.nonNumeric--;\n\n }\n\n this.length--;\n this._.keys.shift();\n return this._.values.shift();\n\n },\n\n unshift: function (value) {\n var values = Arrays.createFrom(arguments),\n n = values.length,\n i = 0,\n keys = new Array(n);\n\n while (i < n) {\n keys[i] = i++;\n }\n\n keys.unshift(0, 0);\n values.unshift(0, 0);\n\n this._shiftKeys(0, this.length, n);\n this._.keys.splice.apply(this._.keys, keys);\n this._.values.splice.apply(this._.values, values);\n this._.nextNumeric += n;\n this.length += n;\n return this;\n\n },\n\n slice: function (from, to) {\n (from === undefined) && (from = 0);\n (from < 0) && (from += this.length);\n (to === undefined) && (to = this.length);\n (to < 0) && (to += this.length);\n\n var o = new HashMap();\n\n o._.keys = this._.keys.slice(from, to).map(function(k) {\n if (typeof k === 'number') {\n k = o._.nextNumeric;\n o._.nextNumeric++;\n return k;\n\n } else {\n o._.nonNumeric++;\n return k;\n\n }\n });\n\n o._.values = this._.values.slice(from, to);\n o.length = o._.keys.length;\n\n return o;\n\n },\n\n splice: function (from, remove) {\n var values = Arrays.createFrom(arguments),\n keys = values.slice().map(function() { return -1; }),\n removed, i;\n\n keys[0] = values[0];\n keys[1] = values[1];\n\n this._.keys.splice.apply(this._.keys, keys);\n removed = this._.values.splice.apply(this._.values, values);\n\n this.length = this._.keys.length;\n this._.nextNumeric = 0;\n this._.nonNumeric = 0;\n\n for (i = 0; i < this.length; i++) {\n if (typeof this._.keys[i] === 'number') {\n this._.keys[i] = this._.nextNumeric;\n this._.nextNumeric++;\n\n } else {\n this._.nonNumeric++;\n\n }\n }\n\n return removed;\n\n },\n\n 'set': function (key, value) {\n var i = this._.keys.indexOf(key);\n\n if (i === -1) {\n this._.keys.push(key);\n this._.values.push(value);\n this.length++;\n\n if (typeof key === 'number') {\n if (key >= this._.nextNumeric) {\n this._.nextNumeric = key + 1;\n\n }\n } else {\n this._.nonNumeric++;\n\n }\n } else {\n this._.values[i] = value;\n\n }\n\n return this;\n\n },\n\n 'get': function (key, need) {\n var i = this._.keys.indexOf(key);\n\n if (i > -1) {\n return this._.values[i];\n\n } else if (need) {\n throw new RangeError('Key ' + key + ' not present in HashMap');\n\n }\n\n return null;\n\n },\n\n has: function (key) {\n var index = this._.keys.indexOf(key);\n return index > -1 && this._.values[index] !== undefined;\n\n },\n\n remove: function (key, strict) {\n var index = this._.keys.indexOf(key);\n\n if (index > -1) {\n this._.keys.splice(index, 1);\n this._.values.slice(index, 1);\n this.length--;\n\n if (typeof key === 'number') {\n if (key + 1 === this._.nextNumeric) {\n this._.nextNumeric--;\n }\n } else {\n this._.nonNumeric--;\n }\n } else if (strict) {\n throw new RangeError('Key ' + key + ' not present in HashMap');\n }\n\n return this;\n },\n\n forEach: function (callback, thisArg) {\n for (var i = 0; i < this.length; i++) {\n callback.call(thisArg || null, this._.values[i], this._.keys[i], this);\n\n }\n\n return this;\n\n },\n\n map: function (callback, recursive, thisArg) {\n return this.clone(recursive).walk(callback, recursive, thisArg);\n\n },\n\n walk: function (callback, recursive, thisArg) {\n for (var i = 0; i < this.length; i++) {\n if (recursive && this._.values[i] instanceof HashMap) {\n this._.values[i].walk(callback, recursive, thisArg);\n\n } else {\n this._.values[i] = callback.call(thisArg || null, this._.values[i], this._.keys[i], this);\n\n }\n }\n\n return this;\n\n },\n\n find: function (predicate, thisArg) {\n var i = this._find(predicate, thisArg, true);\n return i === false ? null : this._.values[i];\n\n },\n\n findKey: function (predicate, thisArg) {\n var i = this._find(predicate, thisArg, true);\n return i === false ? null : this._.keys[i];\n\n },\n\n some: function (predicate, thisArg) {\n return this._find(predicate, thisArg, true) !== false;\n\n },\n\n all: function (predicate, thisArg) {\n return this._find(predicate, thisArg, false) === false;\n\n },\n\n filter: function (predicate, thisArg) {\n var o = new HashMap(),\n i;\n\n for (i = 0; i < this.length; i++) {\n if (predicate.call(thisArg || null, this._.values[i], this._.keys[i], this)) {\n if (typeof this._.keys[i] === 'number') {\n o.push(this._.values[i]);\n\n } else {\n o.set(this._.keys[i], this._.values[i]);\n\n }\n }\n }\n\n return o;\n\n },\n\n exportData: function () {\n if (this.isList()) {\n return this.getValues().map(function(v) {\n return v instanceof HashMap ? v.exportData() : v;\n\n });\n }\n\n for (var i = 0, r = {}; i < this.length; i++) {\n if (this._.values[i] instanceof HashMap) {\n r[this._.keys[i]] = this._.values[i].exportData();\n\n } else {\n r[this._.keys[i]] = this._.values[i];\n\n }\n }\n\n return r;\n\n },\n\n getKeys: function () {\n return this._.keys.slice();\n\n },\n\n getValues: function () {\n return this._.values.slice();\n\n },\n\n _shiftKeys: function (from, to, diff) {\n while (from < to) {\n if (typeof this._.keys[from] === 'number') {\n this._.keys[from] += diff;\n\n }\n\n from++;\n\n }\n },\n\n _find: function (predicate, thisArg, expect) {\n for (var i = 0; i < this.length; i++) {\n if (predicate.call(thisArg || null, this._.values[i], this._.keys[i], this) === expect) {\n return i;\n\n }\n }\n\n return false;\n\n }\n });\n\n _context.register(HashMap, 'HashMap');\n\n});\n","_context.invoke('Utils', function(Strings, undefined) {\n\n var location = window.history.location || window.location; // support for HTML5 history polyfill\n\n var Url = function(s) {\n if (s === null || s === '' || s === undefined) {\n this._ = {\n protocol: location.protocol,\n hostname: location.hostname,\n port: location.port,\n path: location.pathname,\n params: Url.parseQuery(location.search),\n hash: location.hash\n };\n\n extractAuthInfo(location.href, this._);\n } else {\n s += '';\n\n var proto = Url.RE_PROTOCOL.exec(s),\n auth,\n i;\n\n this._ = {\n protocol: proto ? proto[1] || location.protocol : location.protocol\n };\n\n if (proto) {\n if (proto[2] && proto[3] || proto[4]) {\n s = s.substr(proto[0].length);\n auth = Url.RE_AUTHORITY.exec(s) || [''];\n s = s.substr(auth[0].length);\n this._.username = auth[1] || '';\n this._.password = auth[2] || '';\n this._.hostname = auth[3] || '';\n this._.port = auth[4] || '';\n } else {\n this._.username\n = this._.password\n = this._.hostname\n = this._.port\n = this._.path\n = this._.hash\n = '';\n\n this._.params = {};\n return;\n }\n } else {\n this._.username = '';\n this._.password = '';\n this._.hostname = location.hostname;\n this._.port = location.port;\n }\n\n if ((i = s.indexOf('#')) > -1) {\n this._.hash = s.substr(i);\n s = s.substr(0, i);\n } else {\n this._.hash = '';\n }\n\n if ((i = s.indexOf('?')) > -1) {\n this._.params = Url.parseQuery(s.substr(i + 1));\n s = s.substr(0, i);\n } else {\n this._.params = {};\n }\n\n this._.path = s || '/';\n }\n };\n\n Url.prototype.getProtocol = function() {\n return this._.protocol;\n\n };\n\n Url.prototype.getUsername = function() {\n return this._.username;\n\n };\n\n Url.prototype.getPassword = function() {\n return this._.password;\n\n };\n\n Url.prototype.getHostname = function() {\n return this._.hostname;\n\n };\n\n Url.prototype.getPort = function() {\n return this._.port;\n\n };\n\n Url.prototype.getAuthority = function() {\n var a = '';\n\n if (this._.username) {\n if (this._.password) {\n a += this._.username + ':' + this._.password + '@';\n\n } else {\n a += this._.username + '@';\n\n }\n }\n\n a += this._.hostname;\n\n if (this._.port) {\n a += ':' + this._.port;\n\n }\n\n return a;\n\n };\n\n Url.prototype.getOrigin = function () {\n return this._.protocol + '//' + this._.hostname + (this._.port ? ':' + this._.port : '');\n };\n\n Url.prototype.getPath = function() {\n return this._.path;\n\n };\n\n Url.prototype.getQuery = function() {\n var q = Url.buildQuery(this._.params);\n return q.length ? '?' + q : '';\n\n };\n\n Url.prototype.getParam = function(n) {\n return this._.params[n];\n\n };\n\n Url.prototype.hasParam = function(n) {\n return this._.params[n] !== undefined;\n\n };\n\n Url.prototype.getParams = function() {\n return this._.params;\n\n };\n\n Url.prototype.getHash = function() {\n return this._.hash;\n\n };\n\n\n Url.prototype.setProtocol = function(protocol) {\n this._.protocol = protocol ? Strings.trimRight(protocol, ':') + ':' : '';\n return this;\n\n };\n\n Url.prototype.setUsername = function(username) {\n this._.username = username;\n return this;\n\n };\n\n Url.prototype.setPassword = function(password) {\n this._.password = password;\n return this;\n\n };\n\n Url.prototype.setHostname = function(hostname) {\n this._.hostname = hostname;\n return this;\n\n };\n\n Url.prototype.setPort = function(port) {\n this._.port = port;\n return this;\n\n };\n\n Url.prototype.setPath = function(path) {\n this._.path = path ? '/' + Strings.trimLeft(path, '/') : '';\n return this;\n\n };\n\n Url.prototype.setQuery = function(query) {\n this._.params = Url.parseQuery(query);\n return this;\n\n };\n\n Url.prototype.setParam = function(n, v) {\n this._.params[n] = v;\n return this;\n\n };\n\n Url.prototype.addParams = function(p) {\n if (Array.isArray(p) && (p.length && 'name' in p[0] && 'value' in p[0])) {\n p = Url.parseQuery(Url.buildQuery(p, true));\n }\n\n for (var k in p) {\n if (p[k] !== undefined) {\n this._.params[k] = p[k];\n }\n }\n\n return this;\n\n };\n\n Url.prototype.getParams = function () {\n return this._.params;\n\n };\n\n Url.prototype.setParams = function(p) {\n this._.params = {};\n this.addParams(p);\n return this;\n\n };\n\n Url.prototype.removeParam = function(n) {\n delete this._.params[n];\n return this;\n\n };\n\n Url.prototype.setHash = function(hash) {\n this._.hash = hash ? '#' + Strings.trimLeft(hash, '#') : '';\n return this;\n\n };\n\n\n Url.prototype.toAbsolute = function() {\n return this._.protocol + '//' + this.getAuthority() + this._.path + this.getQuery() + this._.hash;\n\n };\n\n Url.prototype.toLocal = function () {\n return this._.path + this.getQuery() + this._.hash;\n\n };\n\n Url.prototype.toRelative = function(to) {\n to = Url.from(to || location.href);\n\n if (to.getProtocol() !== this.getProtocol()) {\n return this.toAbsolute();\n\n }\n\n if (to.getAuthority() !== this.getAuthority()) {\n return '//' + this.getAuthority() + this.getPath() + this.getQuery() + this.getHash();\n\n }\n\n if (to.getPath() !== this.getPath()) {\n return Url.getRelativePath(to.getPath(), this.getPath()) + this.getQuery() + this.getHash();\n\n }\n\n var qto = to.getQuery(), qthis = this.getQuery();\n if (qto !== qthis) {\n return qthis + this.getHash();\n\n }\n\n return to.getHash() === this.getHash() ? '' : this.getHash();\n\n };\n\n Url.prototype.toString = function() {\n return this.toAbsolute();\n\n };\n\n Url.prototype.isLocal = function() {\n return this.compare(Url.fromCurrent()) < Url.PART.PORT;\n\n };\n\n Url.prototype.compare = function(to) {\n if (!(to instanceof Url)) {\n to = Url.from(to);\n\n }\n\n var r = 0;\n\n this.getProtocol() !== to.getProtocol() && (r |= Url.PART.PROTOCOL);\n this.getUsername() !== to.getUsername() && (r |= Url.PART.USERNAME);\n this.getPassword() !== to.getPassword() && (r |= Url.PART.PASSWORD);\n this.getHostname() !== to.getHostname() && (r |= Url.PART.HOSTNAME);\n this.getPort() !== to.getPort() && (r |= Url.PART.PORT);\n this.getPath() !== to.getPath() && (r |= Url.PART.PATH);\n this.getQuery() !== to.getQuery() && (r |= Url.PART.QUERY);\n this.getHash() !== to.getHash() && (r |= Url.PART.HASH);\n\n return r;\n\n };\n\n Url.RE_PROTOCOL = /^((?:(https?)|[a-z][a-z0-9.+-]*):)(\\/\\/)?|^(\\/\\/)/i;\n Url.RE_AUTHORITY = /^(?:([^@:]+?)(?::([^@]+))?@)?([^:\\/]+)(?::(\\d+))?/;\n\n Url.PART = {\n PROTOCOL: 128,\n USERNAME: 64,\n PASSWORD: 32,\n HOSTNAME: 16,\n PORT: 8,\n PATH: 4,\n QUERY: 2,\n HASH: 1\n };\n\n Url.from = function(s) {\n return s instanceof Url ? new Url(s.toAbsolute()) : new Url(s);\n };\n\n Url.fromCurrent = function() {\n return new Url();\n };\n\n Url.getDirName = function (path) {\n return path.replace(/(^|\\/)[^\\/]*$/, '');\n\n };\n\n Url.getRelativePath = function(from, to) {\n from = Strings.trimLeft(from, '/').split('/');\n from.pop(); // last element is either a file or empty because the previous element is a directory\n\n if (!to.match(/^\\//)) {\n return to.replace(/^\\.\\//, '');\n\n }\n\n to = Strings.trimLeft(to, '/').split('/');\n\n var e = 0,\n f,\n t,\n o = [],\n n = Math.min(from.length, to.length);\n\n for (; e < n; e++) {\n if (from[e] !== to[e]) {\n break;\n\n }\n }\n\n for (f = e; f < from.length; f++) {\n o.push('..');\n\n }\n\n for (t = e; t < to.length; t++) {\n o.push(to[t]);\n\n }\n\n return o.join('/');\n\n };\n\n Url.buildQuery = function(data, pairs) {\n var q = [], n;\n\n function en(v) {\n return encodeURIComponent(v).replace(/%20/g, '+');\n }\n\n function val(v) {\n if (v === undefined) {\n return null;\n\n } else if (typeof v === 'boolean') {\n return v ? 1 : 0;\n\n } else {\n return en('' + v);\n\n }\n }\n\n function flatten(a, n) {\n var r = [], i;\n\n if (Array.isArray(a)) {\n for (i = 0; i < a.length; i++) {\n r.push(en(n + '[]') + '=' + val(a[i]));\n\n }\n } else {\n for (i in a) {\n if (typeof a[i] === 'object') {\n r.push(flatten(a[i], n + '[' + i + ']'));\n\n } else {\n r.push(en(n + '[' + i + ']') + '=' + val(a[i]));\n\n }\n }\n }\n\n return r.length ? r.filter(function(v) { return v !== null }).join('&') : null;\n\n }\n\n for (n in data) {\n if (data[n] === null || data[n] === undefined) {\n continue;\n\n } else if (pairs) {\n q.push(en(data[n].name) + '=' + val(data[n].value));\n\n } else if (typeof data[n] === 'object') {\n q.push(flatten(data[n], n));\n\n } else {\n q.push(en(n) + '=' + val(data[n]));\n\n }\n }\n\n return q.filter(function(v) { return v !== null; }).join('&');\n\n };\n\n Url.parseQuery = function(s) {\n if (s.match(/^\\??$/)) {\n return {};\n\n }\n\n s = Strings.trimLeft(s, '?').split('&');\n\n var p = {}, a = false, c, d, k, i, m, n, v;\n\n function dec(v) {\n return decodeURIComponent(v.replace(/\\+/g,' '));\n }\n\n function convertType(v) {\n var c;\n\n if (v.match(/^(?:[1-9]\\d*|0)$/) && (c = parseInt(v)) + '' === v) {\n return c;\n\n } else if (v.match(/^\\d*\\.\\d+$/) && (c = parseFloat(v)) + '' === v) {\n return c;\n\n }\n\n return v;\n\n }\n\n for (i = 0; i < s.length; i++) {\n m = s[i].split('=');\n n = dec(m.shift());\n v = convertType(dec(m.join('=')));\n\n if (n.indexOf('[') !== -1) {\n n = n.replace(/\\]/g, '');\n d = n.split('[');\n c = p;\n a = false;\n\n if (n.match(/\\[$/)) {\n d.pop();\n a = true;\n\n }\n\n n = d.pop();\n\n while (d.length) {\n k = d.shift();\n\n if (c[k] === undefined) {\n c[k] = {};\n\n }\n\n c = c[k];\n\n }\n\n if (a) {\n if (c[n] === undefined) {\n c[n] = [v];\n\n } else {\n c[n].push(v);\n\n }\n } else {\n c[n] = v;\n\n }\n } else {\n p[n] = v;\n\n }\n }\n\n return p;\n\n };\n\n\n function extractAuthInfo(url, onto) {\n url = url.replace(Url.RE_PROTOCOL, '');\n\n var tmp = url.indexOf('@');\n\n if (tmp > -1) {\n tmp = url.substr(0, tmp).split(':', 2);\n onto.username = tmp[0];\n onto.password = tmp[1] || '';\n } else {\n onto.username = onto.password = '';\n }\n }\n\n _context.register(Url, 'Url');\n\n});\n","_context.invoke('Utils', function (Arrays, Strings, undefined) {\n\n /****** Utilities *******/\n\n function map(args, callback) {\n args = Arrays.createFrom(args);\n\n if (Array.isArray(args[0])) {\n for (var i = 0, elems = args[0], ret = []; i < elems.length; i++) {\n args[0] = getElem(elems[i]);\n\n if (args[0]) {\n ret.push(callback.apply(null, args));\n\n } else {\n ret.push(args[0]);\n\n }\n }\n\n return ret;\n\n } else {\n args[0] = getElem(args[0]);\n\n if (args[0]) {\n return callback.apply(null, args);\n\n } else {\n return args[0];\n\n }\n }\n }\n\n function getElem(elem) {\n if (Array.isArray(elem) || elem instanceof HTMLCollection || elem instanceof NodeList) {\n elem = elem[0];\n\n }\n\n return typeof elem === 'string' ? DOM.getById(elem) : elem;\n\n }\n\n function getPrefixed(elem, prop) {\n elem = getElem(elem);\n\n if (!elem || prop in elem.style) {\n return prop;\n\n }\n\n\n var p = prop.charAt(0).toUpperCase() + prop.substr(1),\n variants = ['webkit' + p, 'moz' + p, 'o' + p, 'ms' + p],\n i;\n\n for (i = 0; i < variants.length; i++) {\n if (variants[i] in elem.style) {\n return variants[i];\n\n }\n }\n\n return prop;\n\n }\n\n function parseData(value) {\n if (!value) return null;\n\n try {\n return JSON.parse(value);\n\n } catch (e) {\n return value;\n\n }\n }\n\n\n\n\n /******* CustomEvent support in IE9+ ******/\n\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n\n }\n\n var knownEventModules = {\n MouseEvent: {\n create: function(type, params) {\n params.view || (params.view = window);\n return new MouseEvent(type, params);\n },\n init: function(event, type, params) {\n event.initMouseEvent(\n type,\n params.bubbles,\n params.cancelable,\n params.view || window,\n params.detail || 1,\n params.screenX || 0,\n params.screenY || 0,\n params.clientX || 0,\n params.clientY || 0,\n params.ctrlKey || false,\n params.altKey || false,\n params.shiftKey || false,\n params.metaKey || false,\n params.button || 1,\n params.relatedTarget\n );\n }\n },\n KeyboardEvent: {\n create: function(type, params) { return new KeyboardEvent(type, params); },\n init: function(event, type, params) {\n var modifiers = [];\n params.ctrlKey && modifiers.push('Control');\n params.shiftKey && modifiers.push('Shift');\n params.altKey && modifiers.push('Alt');\n params.metaKey && modifiers.push('Meta');\n event.initKeyboardEvent(type, params.bubbles, params.cancelable, params.view || window, params.key || '', params.location || 0, modifiers.join(' '));\n }\n },\n FocusEvent: {\n create: function(type, params) { return new FocusEvent(type, params); },\n init: function(event, type, params) {\n event.initUIEvent(type, params.bubbles, params.cancelable, params.view || window, params.detail || 0);\n },\n name: 'UIEvent'\n },\n HTMLEvents: {\n create: function(type, params) { return new Event(type, params); },\n init: function(event, type, params) {\n event.initEvent(type, params.bubbles, params.cancelable);\n }\n },\n CustomEvent: {\n create: function(type, params) { return new CustomEvent(type, params); },\n init: function(event, type, params) {\n event.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n }\n }\n };\n\n var knownEvents = {\n click: 'MouseEvent',\n dblclick: 'MouseEvent',\n mousedown: 'MouseEvent',\n mouseenter: 'MouseEvent',\n mouseleave: 'MouseEvent',\n mousemove: 'MouseEvent',\n mouseout: 'MouseEvent',\n mouseover: 'MouseEvent',\n mouseup: 'MouseEvent',\n contextmenu: 'MouseEvent',\n keydown: 'KeyboardEvent',\n keypress: 'KeyboardEvent',\n keyup: 'KeyboardEvent',\n focus: 'FocusEvent',\n blur: 'FocusEvent',\n change: 'HTMLEvents',\n submit: 'HTMLEvents',\n reset: 'HTMLEvents'\n };\n\n var containers = {\n caption: 'table',\n colgroup: 'table',\n col: 'colgroup',\n thead: 'table',\n tbody: 'table',\n tfoot: 'table',\n tr: 'tbody',\n th: 'tr',\n td: 'tr',\n li: 'ul',\n optgroup: 'select',\n option: 'select'\n };\n\n\n\n /******* Public interface *******/\n\n var DOM = {\n getByClassName: function (className, context) {\n return Arrays.createFrom((context || document).getElementsByClassName(className));\n\n },\n\n getById: function (id) {\n return document.getElementById(id);\n\n },\n\n find: function (sel, context) {\n var elems = [];\n sel = sel.trim().split(/\\s*,\\s*/g);\n\n sel.forEach(function (s) {\n var m = s.match(/^#([^\\s\\[>+:.]+)\\s+\\.([^\\s\\[>+:]+)$/);\n\n if (m) {\n elems.push.apply(elems, DOM.getByClassName(m[2], DOM.getById(m[1])));\n return;\n\n } else if (s.match(/^[^.#]|[\\s\\[>+:]/)) {\n throw new TypeError('Invalid selector \"' + s + '\", only single-level .class and #id or \"#id .class\" are allowed');\n\n }\n\n if (s.charAt(0) === '#') {\n m = DOM.getById(s.substr(1));\n\n if (m) {\n elems.push(m);\n\n }\n } else {\n m = DOM.getByClassName(s.substr(1), context);\n elems.push.apply(elems, m);\n\n }\n });\n\n return elems;\n\n },\n\n getChildren: function (elem) {\n return Arrays.createFrom(elem.childNodes || '').filter(function (node) {\n return node.nodeType === 1;\n\n });\n },\n\n closest: function (elem, nodeName, className) {\n return map(arguments, function (elem, nodeName, className) {\n while (elem) {\n if (elem.nodeType === 1 && (!nodeName || elem.nodeName.toLowerCase() === nodeName) && (!className || DOM.hasClass(elem, className))) {\n return elem;\n\n }\n\n elem = elem.parentNode;\n\n }\n\n return null;\n });\n },\n\n create: function (elem, attrs) {\n elem = document.createElement(elem);\n\n if (attrs) {\n DOM.setAttributes(elem, attrs);\n\n }\n\n return elem;\n\n },\n\n createFromHtml: function (html) {\n var container,\n elems;\n\n if (container = html.match(/^\\s*<(caption|colgroup|col|thead|tbody|tfoot|tr|th|td|li|optgroup|option)[\\s>]/i)) {\n container = containers[container[1].toLowerCase()];\n }\n\n container = DOM.create(container || 'div');\n DOM.html(container, html);\n elems = DOM.getChildren(container);\n\n elems.forEach(function (e) {\n container.removeChild(e);\n });\n\n container = null;\n\n return elems.length > 1 ? elems : elems[0];\n\n },\n\n setAttributes: function (elem, attrs) {\n return map([elem], function (elem) {\n for (var a in attrs) {\n if (attrs.hasOwnProperty(a)) {\n elem.setAttribute(a, attrs[a]);\n\n }\n }\n\n return elem;\n\n });\n },\n\n setStyle: function (elem, prop, value, prefix) {\n if (prop && typeof prop === 'object') {\n prefix = value;\n value = prop;\n\n for (prop in value) {\n if (value.hasOwnProperty(prop)) {\n DOM.setStyle(elem, prop, value[prop], prefix);\n\n }\n }\n\n return elem;\n\n }\n\n if (prefix !== false) {\n prop = getPrefixed(elem, prop);\n\n }\n\n return map([elem], function (elem) {\n elem.style[prop] = value;\n\n });\n },\n\n getStyle: function(elem, props, prefix) {\n if (!Array.isArray(props)) {\n props = props.split(/\\s+/g);\n }\n\n var prefixed = props;\n\n if (prefix !== false) {\n prefixed = props.map(function(prop) {\n return getPrefixed(elem, prop);\n });\n }\n\n return map([elem], function(elem) {\n var style = window.getComputedStyle(elem);\n\n if (props.length === 1) {\n return style[prefixed[0]];\n\n } else {\n var res = {};\n\n props.forEach(function(prop, i) {\n res[prop] = style[prefixed[i]];\n\n });\n\n return res;\n\n }\n });\n },\n\n getStyleFloat: function(elem, props, prefix) {\n if (!Array.isArray(props)) {\n props = props.split(/\\s+/g);\n }\n\n var style = DOM.getStyle(elem, props, prefix),\n refloat = /^(\\d+|\\d*\\.\\d+)(px|m?s)?$/;\n\n function normalizeValue(v) {\n var m = refloat.exec(v);\n\n if (m) {\n v = parseFloat(m[1]);\n\n if (m[2] === 's') {\n v *= 1000;\n\n }\n }\n\n return v;\n\n }\n\n function stylePropsToFloat(style) {\n if (props.length === 1) {\n return normalizeValue(style);\n\n } else {\n props.forEach(function(prop) {\n style[prop] = normalizeValue(style[prop]);\n\n });\n\n return style;\n\n }\n }\n\n if (Array.isArray(style)) {\n return style.map(stylePropsToFloat);\n\n } else {\n return stylePropsToFloat(style);\n\n }\n },\n\n html: function (elem, html) {\n return map([elem], function (elem) {\n elem.innerHTML = html;\n\n Arrays.createFrom(elem.getElementsByTagName('script')).forEach(function (elem) {\n var type = elem.type ? elem.type.toLowerCase() : null;\n\n if (!type || type === 'text/javascript' || type === 'application/javascript') {\n var load = elem.hasAttribute('src'),\n src = load ? elem.src : (elem.text || elem.textContent || elem.innerHTML || ''),\n attrs = {}, i,\n script;\n\n for (i = 0; i < elem.attributes.length; i++) {\n if (elem.attributes.item(i).name !== 'src') {\n attrs[elem.attributes.item(i).name] = elem.attributes.item(i).value;\n }\n }\n\n script = DOM.create('script', attrs);\n\n if (load) {\n script.src = src;\n\n } else {\n try {\n script.appendChild(document.createTextNode(src));\n\n } catch (e) {\n script.text = src;\n\n }\n }\n\n elem.parentNode.insertBefore(script, elem);\n elem.parentNode.removeChild(elem);\n\n }\n });\n });\n },\n\n text: function (str) {\n if (arguments.length > 1) {\n if (Array.isArray(arguments[1])) {\n str = Strings.vsprintf(str, arguments[1]);\n } else {\n str = Arrays.createFrom(arguments).join(' ');\n }\n }\n\n return document.createTextNode(str);\n },\n\n empty: function(elem) {\n return map(arguments, function (elem) {\n while (elem.firstChild) {\n elem.removeChild(elem.firstChild);\n }\n });\n },\n\n append: function (elem, children) {\n elem = getElem(elem);\n children = Array.isArray(children) ? children : Arrays.createFrom(arguments, 1);\n\n children.forEach(function(child) {\n elem.appendChild(child);\n });\n\n return elem;\n\n },\n\n prepend: function (elem, children) {\n elem = getElem(elem);\n children = Array.isArray(children) ? children : Arrays.createFrom(arguments, 1);\n\n var first = elem.firstChild;\n\n children.forEach(function(child) {\n elem.insertBefore(child, first);\n });\n\n return elem;\n\n },\n\n insertBefore: function(before, elem) {\n var elems = Array.isArray(elem) ? elem : Arrays.createFrom(arguments, 1),\n parent;\n\n before = getElem(before);\n parent = before.parentNode;\n\n elems.forEach(function(elem) {\n parent.insertBefore(elem, before);\n });\n\n return before;\n\n },\n\n contains: function( a, b ) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n\n return a === bup || !!( bup && bup.nodeType === 1 && (\n adown.contains\n ? adown.contains( bup )\n : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n ));\n },\n\n addListener: function (elem, evt, listener, capture) {\n return map(arguments, function (elem, evt, listener, capture) {\n elem.addEventListener(evt, listener, !!capture);\n return elem;\n\n });\n },\n removeListener: function (elem, evt, listener, capture) {\n return map(arguments, function (elem, evt, listener, capture) {\n elem.removeEventListener(evt, listener, !!capture);\n return elem;\n\n });\n },\n\n trigger: function (elem, evt, params) {\n var module = knownEvents[evt] || 'CustomEvent',\n event;\n\n params || (params = {});\n 'bubbles' in params || (params.bubbles = true);\n 'cancelable' in params || (params.cancelable = true);\n\n try {\n event = knownEventModules[module].create(evt, params);\n\n } catch (e) {\n event = document.createEvent(knownEventModules[module].name || module);\n knownEventModules[module].init(event, evt, params);\n\n }\n\n return getElem(elem).dispatchEvent(event);\n\n },\n\n delegate: function(sel, handler) {\n sel = sel\n .trim()\n .split(/\\s*,\\s*/g)\n .map(function(s) {\n var m = s.match(/^(?:(?:#([^\\s\\[>+:.]+)\\s+)?\\.([^\\s\\[>+:]+)|#([^\\s\\[>+:.]+))$/);\n return [m[1] || m[3], m[2]];\n });\n\n return function(evt) {\n if (!evt.target) {\n return;\n }\n\n var elems = [],\n ids = [],\n classes = [],\n found = [],\n elem = evt.target,\n i, j;\n\n do {\n elems.push(elem);\n ids.push(elem.id);\n classes.push(((elem.className || '') + '').trim().split(/\\s+/g));\n } while (elem = elem.parentNode);\n\n for (i = 0; i < elems.length; i++) {\n for (j = 0; j < sel.length; j++) {\n if ((!sel[j][1] || classes[i].indexOf(sel[j][1]) > -1) && (!sel[j][0] || (!sel[j][1] ? ids[i] === sel[j][0] : ids.indexOf(sel[j][0]) > i))) {\n found.push(elems[i]);\n }\n }\n }\n\n for (i = 0; i < found.length; i++) {\n handler.call(found[i], evt, found[i]);\n }\n };\n },\n\n getData: function (elem, key, def) {\n elem = getElem(elem);\n key = 'data-' + key;\n\n if (!elem.hasAttribute(key)) {\n return def;\n }\n\n return parseData(elem.getAttribute(key));\n\n },\n setData: function (elem, key, value) {\n return map([elem], function (elem) {\n elem.setAttribute('data-' + key, JSON.stringify(value));\n return elem;\n\n });\n },\n\n addClass: null,\n removeClass: null,\n toggleClass: null,\n hasClass: null\n };\n\n\n var testElem = DOM.create('span'),\n prepare = function(args, asStr) {\n args = Arrays.createFrom(args, 1).join(' ').trim();\n return asStr ? args : args.split(/\\s+/g);\n };\n\n if ('classList' in testElem) {\n testElem.classList.add('c1', 'c2');\n\n if (testElem.classList.contains('c2')) {\n DOM.addClass = function (elem, classes) {\n classes = prepare(arguments);\n\n return map([elem], function (elem) {\n elem.classList.add.apply(elem.classList, classes);\n return elem;\n\n });\n };\n\n DOM.removeClass = function (elem, classes) {\n classes = prepare(arguments);\n\n return map([elem], function (elem) {\n elem.classList.remove.apply(elem.classList, classes);\n return elem;\n\n });\n };\n } else {\n DOM.addClass = function (elem, classes) {\n classes = prepare(arguments);\n\n return map([elem], function (elem) {\n classes.forEach(function (c) {\n elem.classList.add(c);\n\n });\n\n return elem;\n\n });\n };\n\n DOM.removeClass = function (elem, classes) {\n classes = prepare(arguments);\n\n return map([elem], function (elem) {\n classes.forEach(function (c) {\n elem.classList.remove(c);\n\n });\n\n return elem;\n\n });\n };\n }\n\n testElem.classList.toggle('c1', true);\n\n if (testElem.classList.contains('c1')) {\n DOM.toggleClass = function (elem, classes, value) {\n classes = classes.trim().split(/\\s+/g);\n\n return map([elem], function (elem) {\n if (value === undefined) {\n classes.forEach(function (c) {\n elem.classList.toggle(c);\n\n });\n } else {\n classes.forEach(function (c) {\n elem.classList.toggle(c, !!value);\n\n });\n }\n\n return elem;\n\n });\n };\n } else {\n DOM.toggleClass = function (elem, classes, value) {\n classes = classes.trim().split(/\\s+/g);\n\n return map([elem], function (elem) {\n classes.forEach(function (c) {\n if (value === undefined || !value === elem.classList.contains(c)) {\n elem.classList.toggle(c);\n\n }\n });\n\n return elem;\n\n });\n };\n }\n\n DOM.hasClass = function (elem, classes) {\n elem = getElem(elem);\n classes = prepare(arguments);\n\n for (var i = 0; i < classes.length; i++) {\n if (!elem.classList.contains(classes[i])) {\n return false;\n\n }\n }\n\n return true;\n\n };\n } else {\n DOM.addClass = function (elem, classes) {\n classes = prepare(arguments, true);\n\n return map([elem], function (elem) {\n elem.className += (elem.className ? ' ' : '') + classes;\n return elem;\n\n });\n };\n\n DOM.removeClass = function (elem, classes) {\n classes = prepare(arguments).map(Strings.escapeRegex);\n\n return map([elem], function (elem) {\n if (!elem.className) return elem;\n\n elem.className = elem.className.replace(new RegExp('(?:(?:^|\\\\s+)(?:' + classes.join('|') + '))+(?=\\\\s+|$)', 'g'), ' ').trim().replace(/\\s\\s+/g, ' ');\n return elem;\n\n });\n };\n\n DOM.toggleClass = function (elem, classes, value) {\n classes = classes.trim().split(/\\s+/g);\n\n return map([elem], function (elem) {\n var current = (elem.className || '').trim().split(/\\s+/g);\n\n classes.forEach(function (c) {\n var i = current.indexOf(c),\n has = i > -1;\n\n if (value !== false && !has) {\n current.push(c);\n\n } else if (value !== true && has) {\n current.splice(i, 1);\n\n }\n });\n\n elem.className = current.join(' ');\n return elem;\n\n });\n };\n\n DOM.hasClass = function (elem, classes) {\n elem = getElem(elem);\n if (!elem.className) return false;\n classes = prepare(arguments);\n\n var current = elem.className.trim().split(/\\s+/g);\n\n for (var i = 0; i < classes.length; i++) {\n if (current.indexOf(classes[i]) === -1) {\n return false;\n\n }\n }\n\n return true;\n\n };\n }\n\n testElem = null;\n\n _context.register(DOM, 'DOM');\n\n});\n","_context.invoke('Utils', function (DOM) {\n\n var CSSTransitions = {\n support: 'getComputedStyle' in window,\n\n getDuration: function (elements) {\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n var durations = DOM.getStyle(elements, 'animationDuration')\n .concat(DOM.getStyle(elements, 'transitionDuration'))\n .map(function(d) {\n if (!d) {\n return 0;\n }\n\n return Math.max.apply(null, d.split(/\\s*,\\s*/g).map(function(v) {\n v = v.match(/^((?:\\d*\\.)?\\d+)(m?s)$/);\n return v ? parseFloat(v[1]) * (v[2] === 'ms' ? 1 : 1000) : 0;\n\n }));\n });\n\n return durations.length ? Math.max.apply(null, durations) : 0;\n\n },\n\n run: function(elements, classes, forceLayout) {\n if (!CSSTransitions.support || (Array.isArray(elements) ? !elements.length : !elements)) {\n return Promise.resolve(elements);\n\n } else {\n return CSSTransitions._resolve(elements, classes, forceLayout);\n\n }\n },\n\n _resolve: function (elements, classes, forceLayout) {\n if (forceLayout) {\n var foo = window.pageXOffset; // needed to force layout and thus run asynchronously\n\n }\n\n classes && classes.add && DOM.addClass(elements, classes.add);\n classes && classes.remove && DOM.removeClass(elements, classes.remove);\n\n var duration = CSSTransitions.getDuration(elements);\n\n return new Promise(function (fulfill) {\n window.setTimeout(function () {\n classes && classes.add && DOM.removeClass(elements, classes.add);\n classes && classes.after && DOM.addClass(elements, classes.after);\n fulfill(elements);\n\n }, duration);\n });\n }\n };\n\n if (CSSTransitions.support) try {\n var s = DOM.create('span').style;\n\n CSSTransitions.support = [\n 'transition',\n 'WebkitTransition',\n 'MozTransition',\n 'msTransition',\n 'OTransition'\n ].some(function(prop) {\n return prop in s;\n });\n\n s = null;\n\n } catch (e) { }\n\n _context.register(CSSTransitions, 'CSSTransitions');\n\n});\n","_context.invoke('Utils', function(undefined) {\n\n var ReflectionClass = function(c) {\n this._ = {\n reflectedClass: typeof c === \"string\" ? ReflectionClass.getClass(c) : c\n };\n };\n\n ReflectionClass.from = function(c) {\n return c instanceof ReflectionClass ? c : new ReflectionClass(c);\n\n };\n\n ReflectionClass.getClass = function(name) {\n return _context.lookup(name);\n\n };\n\n ReflectionClass.getClassName = function(obj, need) {\n var className = _context.lookupClass(obj);\n\n if (className === false && need) {\n throw new Error('Unknown class');\n\n }\n\n return className;\n\n };\n\n ReflectionClass.prototype.hasProperty = function(name) {\n return this._.reflectedClass.prototype[name] !== undefined && typeof this._.reflectedClass.prototype[name] !== \"function\";\n\n };\n\n ReflectionClass.prototype.hasMethod = function(name) {\n return this._.reflectedClass.prototype[name] !== undefined && typeof this._.reflectedClass.prototype[name] === \"function\";\n\n };\n\n ReflectionClass.prototype.newInstance = function() {\n return this.newInstanceArgs(arguments);\n\n };\n\n ReflectionClass.prototype.newInstanceArgs = function(args) {\n var inst, ret, tmp = function() {};\n tmp.prototype = this._.reflectedClass.prototype;\n inst = new tmp();\n ret = this._.reflectedClass.apply(inst, args);\n\n return Object(ret) === ret ? ret : inst;\n\n };\n\n _context.register(ReflectionClass, 'ReflectionClass');\n\n});\n","_context.invoke('Utils', function(Arrays, undefined) {\n\n var ReflectionFunction = function(f) {\n this._ = {\n reflectedFunction: f,\n argsList: null,\n name: null\n };\n\n var parts = f.toString()\n .match(/^\\s*function(?:\\s*|\\s+([^\\(]+?)\\s*)\\(\\s*([\\s\\S]*?)\\s*\\)/i);\n\n this._.name = parts[1] || null;\n this._.argsList = !parts[2] ? [] : parts[2]\n .replace(/\\/\\*\\*?[\\s\\S]*?\\*\\//g, '')\n .trim()\n .split(/\\s*,\\s*/);\n\n };\n\n ReflectionFunction.from = function(f) {\n return f instanceof ReflectionFunction ? f : new ReflectionFunction(f);\n\n };\n\n ReflectionFunction.prototype.getName = function () {\n return this._.name;\n\n };\n\n ReflectionFunction.prototype.getArgs = function () {\n return this._.argsList;\n\n };\n\n ReflectionFunction.prototype.invoke = function(context) {\n var args = Arrays.createFrom(arguments);\n args.shift();\n\n return this._.reflectedFunction.apply(context, args);\n\n };\n\n ReflectionFunction.prototype.invokeArgs = function(context, args) {\n var list = [];\n for (var i = 0; i < this._.argsList.length; i++) {\n if (args[this._.argsList[i]] === undefined) {\n throw new Error('Parameter \"' + this._.argsList[i] + '\" was not provided in argument list');\n\n }\n\n list.push(args[this._.argsList[i]]);\n\n }\n\n return this._.reflectedFunction.apply(context, list);\n\n };\n\n _context.register(ReflectionFunction, 'ReflectionFunction');\n\n});\n","_context.invoke('Nittro', function () {\n\n function prepare (self, need) {\n if (!self._) {\n if (need === false) return false;\n self._ = {};\n\n }\n\n if (!self._.eventEmitter) {\n if (need === false) return false;\n\n self._.eventEmitter = {\n listeners: {},\n defaultListeners: {},\n namespaces: []\n };\n }\n }\n\n function prepareNamespaces (emitter, namespaces) {\n return namespaces.map(function (ns) {\n var i = emitter.namespaces.indexOf(ns);\n\n if (i > -1) return i;\n\n i = emitter.namespaces.length;\n emitter.namespaces.push(ns);\n\n return i;\n\n });\n }\n\n function hasCommonElement (a, b) {\n var i = 0, j = 0;\n\n while (i < a.length && j < b.length) {\n if (a[i] < b[j]) i++;\n else if (a[i] > b[j]) j++;\n else return true;\n\n }\n\n return false;\n\n }\n\n function process (emitter, evt, op, arg1, arg2) {\n evt = (evt || '').replace(/^\\s+|\\s+$/g, '').split(/\\s+/g);\n\n evt.forEach(function (e) {\n var dflt = e.split(/:/),\n ns = dflt[0].split(/\\./g);\n\n e = ns.shift();\n ns = prepareNamespaces(emitter, ns);\n ns.sort();\n op(emitter, e, ns, dflt[1] === 'default', arg1, arg2);\n\n });\n }\n\n function add (emitter, evt, ns, dflt, handler, mode) {\n if (!evt) {\n throw new TypeError('No event specified');\n }\n\n if (dflt) {\n if (mode !== 0 || ns.length) {\n throw new TypeError(\"Default event handlers don't support namespaces and one()/first()\");\n\n } else if (emitter.defaultListeners.hasOwnProperty(evt)) {\n throw new TypeError(\"Event '\" + evt + \"' already has a default listener\");\n\n }\n\n emitter.defaultListeners[evt] = handler;\n return;\n\n }\n\n if (mode === 2) {\n ns.unshift(emitter.namespaces.length);\n\n }\n\n emitter.listeners[evt] || (emitter.listeners[evt] = []);\n emitter.listeners[evt].push({handler: handler, namespaces: ns, mode: mode});\n\n }\n\n function remove (emitter, evt, ns, dflt, handler) {\n if (!evt) {\n var listeners = dflt ? emitter.defaultListeners : emitter.listeners;\n\n for (evt in listeners) {\n if (listeners.hasOwnProperty(evt)) {\n remove(emitter, evt, ns, dflt, handler);\n\n }\n }\n\n return;\n\n }\n\n if (dflt) {\n if (emitter.defaultListeners.hasOwnProperty(evt) && (!handler || emitter.defaultListeners[evt] === handler)) {\n delete emitter.defaultListeners[evt];\n\n }\n\n return;\n\n }\n\n if (!emitter.listeners[evt]) return;\n\n if (ns.length) {\n emitter.listeners[evt] = emitter.listeners[evt].filter(function (listener) {\n if (handler && listener.handler !== handler) return true;\n return !listener.namespaces.length || !hasCommonElement(listener.namespaces, ns);\n\n });\n } else if (handler) {\n emitter.listeners[evt] = emitter.listeners[evt].filter(function (listener) {\n return listener.handler !== handler;\n\n });\n } else {\n if (emitter.listeners.hasOwnProperty(evt)) {\n delete emitter.listeners[evt];\n\n }\n\n if (emitter.defaultListeners.hasOwnProperty(evt)) {\n delete emitter.defaultListeners[evt];\n\n }\n }\n }\n\n function trigger (self, evt, data) {\n var e, _ = self._.eventEmitter;\n\n if (typeof evt === \"object\") {\n e = evt;\n evt = e.type;\n } else {\n e = new NittroEvent(self, evt, data);\n }\n\n if (_.listeners.hasOwnProperty(evt)) {\n _.listeners[evt].slice().forEach(function (listener) {\n if (listener.mode === 1) {\n remove(_, evt, [], false, listener.handler);\n\n } else if (listener.mode === 2) {\n remove(_, '', [listener.namespaces[0]], false);\n\n }\n\n listener.handler.call(self, e);\n\n });\n }\n\n if (e.isAsync()) {\n e.then(function () {\n triggerDefault(self, _, evt, e);\n }, function() { /* no default handler on async reject */ });\n } else {\n triggerDefault(self, _, evt, e);\n }\n\n return e;\n\n }\n\n function triggerDefault (self, _, evt, e) {\n if (!e.isDefaultPrevented() && _.defaultListeners.hasOwnProperty(evt)) {\n _.defaultListeners[evt].call(self, e);\n }\n }\n\n var NittroEventEmitter = {\n on: function (evt, handler) {\n prepare(this);\n process(this._.eventEmitter, evt, add, handler, 0);\n return this;\n\n },\n\n one: function (evt, handler) {\n prepare(this);\n process(this._.eventEmitter, evt, add, handler, 1);\n return this;\n\n },\n\n first: function (evt, handler) {\n prepare(this);\n process(this._.eventEmitter, evt, add, handler, 2);\n this._.eventEmitter.namespaces.push(null);\n return this;\n\n },\n\n off: function (evt, handler) {\n if (prepare(this, false) === false) return this;\n process(this._.eventEmitter, evt, remove, handler);\n return this;\n\n },\n\n trigger: function (evt, data) {\n prepare(this);\n return trigger(this, evt, data);\n\n }\n };\n\n var NittroEvent = _context.extend(function (target, type, data) {\n this.target = target;\n this.type = type;\n this.data = data || {};\n\n this._ = {\n defaultPrevented: false,\n async: false,\n queue: null,\n promise: null\n };\n }, {\n preventDefault: function () {\n this._.defaultPrevented = true;\n return this;\n },\n\n isDefaultPrevented: function () {\n return this._.defaultPrevented;\n },\n\n waitFor: function (promise) {\n if (this._.promise) {\n throw new Error('The event\\'s queue has already been frozen');\n }\n\n this._.queue || (this._.queue = []);\n this._.queue.push(promise);\n this._.async = true;\n return this;\n },\n\n isAsync: function () {\n return this._.async;\n },\n\n then: function (onfulfilled, onrejected) {\n if (!this._.promise) {\n this._.promise = this._.queue ? Promise.all(this._.queue) : Promise.resolve();\n this._.queue = null;\n }\n\n return this._.promise.then(onfulfilled, onrejected);\n }\n });\n\n _context.register(NittroEventEmitter, 'EventEmitter');\n _context.register(NittroEvent, 'Event');\n\n});\n","_context.invoke('Nittro', function () {\n\n var prepare = function (self, need) {\n if (!self._) {\n if (need === false) return false;\n self._ = {};\n\n }\n\n if (!self._.hasOwnProperty('frozen')) {\n if (need === false) return false;\n self._.frozen = false;\n\n }\n };\n\n var Freezable = {\n freeze: function () {\n prepare(this);\n this._.frozen = true;\n return this;\n\n },\n\n isFrozen: function () {\n if (prepare(this, false) === false) {\n return false;\n\n }\n\n return this._.frozen;\n\n },\n\n _updating: function (prop) {\n if (prepare(this, false) === false) {\n return this;\n\n }\n\n if (this._.frozen) {\n var className = _context.lookupClass(this) || 'object';\n\n if (prop) {\n prop = ' \"' + prop + '\"';\n\n }\n\n throw new Error('Cannot update property' + prop + ' of a frozen ' + className);\n\n }\n\n return this;\n\n }\n };\n\n\n _context.register(Freezable, 'Freezable');\n\n});\n","_context.invoke('Nittro', function () {\n\n var Object = _context.extend(function () {\n this._ = { };\n\n }, {\n\n });\n\n _context.mixin(Object, 'Nittro.EventEmitter');\n _context.register(Object, 'Object');\n\n});\n","_context.invoke('Utils', function (Utils, undefined) {\n\n var DateInterval = function (interval, locale) {\n this._ = {\n initialized: false,\n interval: interval,\n locale: locale || Utils.DateTime.defaultLocale\n };\n };\n\n DateInterval.from = function (interval, locale) {\n return new DateInterval(interval, locale);\n\n };\n\n var intervals = [\n 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'\n ];\n\n var intervalLengths = {\n year: 31536000000,\n month: 2678400000,\n week: 604800000,\n day: 86400000,\n hour: 3600000,\n minute: 60000,\n second: 1000,\n millisecond: 1\n };\n\n function getValue(interval) {\n if (typeof interval === 'number') {\n return interval;\n } else if (interval instanceof DateInterval) {\n return interval.getLength();\n } else {\n return DateInterval.from(interval).getLength();\n }\n }\n\n DateInterval.prototype.add = function (interval) {\n this._initialize();\n this._.interval += getValue(interval);\n return this;\n\n };\n\n DateInterval.prototype.subtract = function (interval) {\n this._initialize();\n this._.interval -= getValue(interval);\n return this;\n\n };\n\n DateInterval.prototype.isNegative = function () {\n this._initialize();\n return this._.interval < 0;\n\n };\n\n DateInterval.prototype.getLength = function () {\n this._initialize();\n return this._.interval;\n\n };\n\n DateInterval.prototype.valueOf = function () {\n return this.getLength();\n\n };\n\n\n function formatAuto(interval, precision, locale) {\n if (precision === true) {\n precision = 8;\n\n } else if (!precision) {\n precision = 2;\n\n }\n\n var i, v, str = [], last, sign = '';\n\n if (interval < 0) {\n sign = '-';\n interval = -interval;\n\n }\n\n intervals.some(function (i) {\n if (interval >= intervalLengths[i]) {\n precision--;\n v = interval / intervalLengths[i];\n v = precision === 0 ? Math.round(v) : Math.floor(v);\n str.push(v + ' ' + Utils.DateTime.i18n.getInterval(locale, i, v));\n interval -= v * intervalLengths[i];\n\n if (precision === 0) {\n return true;\n\n }\n }\n });\n\n if (str.length > 2) {\n last = str.pop();\n return sign + str.join(', ') + ' ' + Utils.DateTime.i18n.getConjuction(locale) + ' ' + last;\n\n } else {\n return sign + str.join(' ' + Utils.DateTime.i18n.getConjuction(locale) + ' ');\n\n }\n }\n\n function format(interval, pattern) {\n var sign = interval < 0 ? '-' : '+';\n interval = Math.abs(interval);\n\n return (pattern + '').replace(/%(.)/g, function (m, f) {\n var v, pad = false;\n\n switch (f) {\n case '%':\n return '%';\n\n case 'y':\n m = intervalLengths.year;\n break;\n\n case 'w':\n m = intervalLengths.week;\n break;\n\n case 'm':\n pad = true;\n case 'n':\n m = intervalLengths.month;\n break;\n\n case 'd':\n pad = true;\n case 'j':\n m = intervalLengths.day;\n break;\n\n case 'H':\n pad = true;\n case 'G':\n m = intervalLengths.hour;\n break;\n\n case 'i':\n pad = true;\n case 'I':\n m = intervalLengths.minute;\n break;\n\n case 's':\n pad = true;\n case 'S':\n m = intervalLengths.second;\n break;\n\n case '-':\n return sign === '-' ? sign : '';\n\n case '+':\n return sign;\n\n default:\n throw new Error('Unknown format modifier: %' + f);\n\n }\n\n v = Math.floor(interval / m);\n interval -= m * v;\n return pad && v < 10 ? '0' + v : v;\n\n });\n }\n\n DateInterval.prototype.format = function (pattern) {\n this._initialize();\n\n if (typeof pattern === 'boolean' || typeof pattern === 'number' || !pattern) {\n return formatAuto(this._.interval, pattern, this._.locale);\n\n } else {\n return format(this._.interval, pattern);\n\n }\n };\n\n DateInterval.prototype._initialize = function () {\n if (this._.initialized) {\n return;\n }\n\n this._.initialized = true;\n\n if (typeof this._.interval === 'number') {\n return;\n\n }\n\n var interval = this._.interval;\n\n if (interval instanceof DateInterval) {\n this._.interval = interval.getLength();\n\n } else if (typeof interval === 'string') {\n if (interval.match(/^\\s*(?:\\+|-)?\\s*\\d+\\s*$/)) {\n this._.interval = parseInt(interval.trim());\n\n } else {\n var res = 0,\n rest;\n\n rest = interval.replace(Utils.DateTime.i18n.getIntervalParser(this._.locale), function (_, sign, n, y, m, w, d, h, i, s, u) {\n sign = sign === '-' ? -1 : 1;\n\n n = parseInt(n) * sign;\n\n y && (n *= intervalLengths.year);\n m && (n *= intervalLengths.month);\n w && (n *= intervalLengths.week);\n d && (n *= intervalLengths.day);\n h && (n *= intervalLengths.hour);\n i && (n *= intervalLengths.minute);\n s && (n *= intervalLengths.second);\n u && (n *= intervalLengths.millisecond);\n\n res += n;\n\n return '';\n\n });\n\n if (rest.length) {\n throw new Error('Invalid interval specification \"' + interval + '\", didn\\'t understand \"' + rest + '\"');\n\n }\n\n this._.interval = res;\n\n }\n } else {\n throw new Error('Invalid interval specification, expected string, number or a DateInterval instance');\n\n }\n };\n\n _context.register(DateInterval, 'DateInterval');\n\n});\n","_context.invoke('Utils', function(Strings, Arrays, DateInterval, undefined) {\n\n\tvar DateTime = function(d, locale) {\n\t\tthis._ = {\n\t\t\tinitialized: false,\n\t\t\tdate: d || new Date(),\n locale: locale || DateTime.defaultLocale\n\t\t};\n\t};\n\n\tDateTime.defaultLocale = 'en';\n\n\tDateTime.from = function(s, locale) {\n\t\treturn new DateTime(s, locale);\n\n\t};\n\n\tDateTime.now = function () {\n\t\treturn new DateTime();\n\t};\n\n\tDateTime.isDateObject = function(o) {\n\t\treturn typeof o === 'object' && o && o.date !== undefined && o.timezone !== undefined && o.timezone_type !== undefined;\n\n\t};\n\n\tDateTime.isLeapYear = function(y) {\n\t\treturn y % 4 === 0 && y % 100 !== 0 || y % 400 === 0;\n\n\t};\n\n DateTime.isModifyString = function (str, locale) {\n return DateTime.i18n.getParser(locale || DateTime.defaultLocale).test(str);\n };\n\n\tDateTime.getDaysInMonth = function(m, y) {\n\t while (m < 0) { m += 12; y--; }\n\t while (m > 12) { m -= 12; y++; }\n\t\treturn m === 1 ? (DateTime.isLeapYear(y) ? 29 : 28) : (m in {3:1,5:1,8:1,10:1} ? 30 : 31);\n\n\t};\n\n\tvar ni = function() { throw new Error('Not implemented!'); },\n\t\tpad = function(n) {\n\t\t\treturn (n < 10) ? '0' + n : n;\n\t\t};\n\n\tvar formatTz = function (offset) {\n\t\tif ((typeof offset === 'string' || offset instanceof String) && offset.match(/(\\+|-)\\d\\d:\\d\\d/)) {\n\t\t\treturn offset;\n\n\t\t}\n\n\t\tif (typeof offset !== 'number') {\n\t\t\toffset = parseInt(offset);\n\n\t\t}\n\n\t\treturn (offset < 0 ? '+' : '-') + pad(parseInt(Math.abs(offset) / 60)) + ':' + pad(Math.abs(offset) % 60)\n\n\t};\n\n\tDateTime.getLocalTzOffset = function () {\n\t\treturn formatTz(new Date().getTimezoneOffset());\n\n\t};\n\n\tDateTime.formatModifiers = {\n\t\td: function(d, u) { return pad(u ? d.getUTCDate() : d.getDate()); },\n\t\tD: function(d, u, o) { return DateTime.i18n.getWeekday(o, u ? d.getUTCDay() : d.getDay(), true); },\n\t\tj: function(d, u) { return u ? d.getUTCDate() : d.getDate(); },\n\t\tl: function(d, u, o) { return DateTime.i18n.getWeekday(o, u ? d.getUTCDay() : d.getDay()); },\n\t\tN: function(d, u, n) { n = u ? d.getUTCDay() : d.getDay(); return n === 0 ? 7 : n; },\n\t\tS: function(d, u, n) { n = u ? d.getUTCDate() : d.getDate(); n %= 10; return n === 0 || n > 3 ? 'th' : ['st', 'nd', 'rd'][n - 1]; },\n\t\tw: function(d, u) { return u ? d.getUTCDay() : d.getDay(); },\n\t\tz: function(d, u, n, m, y, M) { n = u ? d.getUTCDate() : d.getDate(); n--; y = u ? d.getUTCFullYear() : d.getFullYear(); m = 0; M = u ? d.getUTCMonth() : d.getMonth(); while (m < M) n += DateTime.getDaysInMonth(m++, y); return n; },\n\t\tW: ni,\n\t\tF: function(d, u, o) { return DateTime.i18n.getMonth(o, u ? d.getUTCMonth() : d.getMonth()); },\n\t\tm: function(d, u) { return pad((u ? d.getUTCMonth() : d.getMonth()) + 1); },\n\t\tM: function(d, u, o) { return DateTime.i18n.getMonth(o, u ? d.getUTCMonth() : d.getMonth(), true); },\n\t\tn: function(d, u) { return (u ? d.getUTCMonth() : d.getMonth()) + 1; },\n\t\tt: function(d, u) { return DateTime.getDaysInMonth(u ? d.getUTCMonth() : d.getMonth(), u ? d.getUTCFullYear() : d.getFullYear()); },\n\t\tL: function(d, u) { return DateTime.isLeapYear(u ? d.getUTCFullYear() : d.getFullYear()) ? 1 : 0; },\n\t\to: ni,\n\t\tY: function(d, u) { return u ? d.getUTCFullYear() : d.getFullYear(); },\n\t\ty: function(d, u) { return (u ? d.getUTCFullYear() : d.getFullYear()).toString().substr(-2); },\n\t\ta: function(d, u, h) { h = u ? d.getUTCHours() : d.getHours(); return h >= 0 && h < 12 ? 'am' : 'pm'; },\n\t\tA: function(d, u) { return DateTime.formatModifiers.a(d, u).toUpperCase(); },\n\t\tg: function(d, u, h) { h = u ? d.getUTCHours() : d.getHours(); return h === 0 ? 12 : (h > 12 ? h - 12 : h); },\n\t\tG: function(d, u) { return u ? d.getUTCHours() : d.getHours(); },\n\t\th: function(d, u) { return pad(DateTime.formatModifiers.g(d, u)); },\n\t\tH: function(d, u) { return pad(u ? d.getUTCHours() : d.getHours()); },\n\t\ti: function(d, u) { return pad(u ? d.getUTCMinutes() : d.getMinutes()); },\n\t\ts: function(d, u) { return pad(u ? d.getUTCSeconds() : d.getSeconds()); },\n\t\tu: function(d, u) { return (u ? d.getUTCMilliseconds() : d.getMilliseconds()) * 1000; },\n\t\te: ni,\n\t\tI: ni,\n\t\tO: function (d, u) { return DateTime.formatModifiers.P(d, u).replace(':', ''); },\n\t\tP: function (d, u) { return u ? '+00:00' : formatTz(d.getTimezoneOffset()); },\n\t\tT: ni,\n\t\tZ: function (d, u) { return u ? 0 : d.getTimezoneOffset() * -60; },\n\t\tc: function (d, u) { return DateTime.from(d).format('Y-m-d\\\\TH:i:sP', u); },\n\t\tr: function (d, u) { return DateTime.from(d).format('D, n M Y G:i:s O', u); },\n\t\tU: function(d) { return Math.round(d.getTime() / 1000); }\n\t};\n\n\tDateTime.prototype.format = function(f, utc) {\n\t\tthis._initialize();\n\n\t\tvar date = this._.date,\n locale = this._.locale,\n\t\t\tpattern = Arrays.getKeys(DateTime.formatModifiers).map(Strings.escapeRegex).join('|'),\n\t\t\tre = new RegExp('(\\\\\\\\*)(' + pattern + ')', 'g');\n\n\t\treturn f.replace(re, function(s, c, m) {\n\t\t\tif (c.length % 2) {\n\t\t\t\treturn c.substr(1) + m;\n\n\t\t\t}\n\n\t\t\treturn c + '' + (DateTime.formatModifiers[m](date, utc, locale));\n\n\t\t});\n\t};\n\n\tDateTime.prototype.getLocale = function () {\n return this._.locale;\n };\n\n\tDateTime.prototype.setLocale = function (locale) {\n\t if (!DateTime.i18n.hasLocale(locale)) {\n\t throw new Error('Unknown locale: ' + locale);\n }\n\n this._.locale = locale;\n return this;\n\n };\n\n\t[\n 'getTime',\n 'getDate', 'getDay', 'getMonth', 'getFullYear',\n 'getHours', 'getMinutes', 'getSeconds', 'getMilliseconds', 'getTimezoneOffset',\n 'getUTCDate', 'getUTCDay', 'getUTCMonth', 'getUTCFullYear',\n 'getUTCHours', 'getUTCMinutes', 'getUTCSeconds', 'getUTCMilliseconds',\n 'toDateString', 'toISOString', 'toJSON',\n 'toLocaleDateString', 'toLocaleFormat', 'toLocaleTimeString',\n 'toString', 'toTimeString', 'toUTCString'\n ].forEach(function (method) {\n DateTime.prototype[method] = function () {\n this._initialize();\n return this._.date[method].apply(this._.date, arguments);\n\n };\n });\n\n [\n 'setTime',\n 'setDate', 'setMonth', 'setFullYear',\n 'setHours', 'setMinutes', 'setSeconds', 'setMilliseconds',\n 'setUTCDate', 'setUTCMonth', 'setUTCFullYear',\n 'setUTCHours', 'setUTCMinutes', 'setUTCSeconds', 'setUTCMilliseconds'\n ].forEach(function (method) {\n DateTime.prototype[method] = function () {\n this._initialize();\n this._.date[method].apply(this._.date, arguments);\n return this;\n\n };\n });\n\n\tDateTime.prototype.getTimestamp = function() {\n\t\tthis._initialize();\n\t\treturn Math.round(this._.date.getTime() / 1000);\n\n\t};\n\n\tDateTime.prototype.getDateObject = function () {\n\t\tthis._initialize();\n\t\treturn this._.date;\n\n\t};\n\n\tDateTime.prototype.valueOf = function () {\n\t\treturn this.getTimestamp();\n\n\t};\n\n\tDateTime.prototype.modify = function(s) {\n\t\tthis._initialize();\n\n var t = this._.date.getTime(),\n parts, dt, i, o;\n\n if (s instanceof DateInterval) {\n this._.date = new Date(t + s.getLength());\n return this;\n\n }\n\n parts = DateTime.i18n.getParser(this._.locale).exec(s.toLowerCase());\n\n if (!parts) {\n throw new Error('Invalid interval expression: ' + s);\n }\n\n /**\n * Parts' indices:\n * 1: now\n * 2: yesterday\n * 3: today\n * 4: tomorrow\n * 5: first of\n * 6: last of\n * 7: last\n * 8: this\n * 9: next\n * 10: year\n * 11: month\n * 12: week\n * 13: last\n * 14: this\n * 15: next\n * 16-27: months\n * 28-34: weekdays\n * 35: noon\n * 36: midnight\n * 37: time\n * 38: relative offset\n */\n\n if (parts[1]) {\n t = Date.now();\n\n } else if (parts[2]) {\n t -= 86400000;\n\n } else if (parts[3]) {\n dt = new Date();\n dt.setHours(this._.date.getHours(), this._.date.getMinutes(), this._.date.getSeconds(), this._.date.getMilliseconds());\n t = dt.getTime();\n\n } else if (parts[4]) {\n t += 86400000;\n\n } else if (parts[5] || parts[6]) {\n dt = new Date(t);\n o = parts[7] ? -1 : (parts[9] ? 1 : 0);\n\n if (parts[10]) {\n dt.setFullYear(dt.getFullYear() + o, parts[5] ? 0 : 11, parts[5] ? 1 : 31);\n\n } else if (parts[11]) {\n dt.setMonth(dt.getMonth() + o, parts[5] ? 1 : DateTime.getDaysInMonth(dt.getMonth() + o, dt.getFullYear()));\n\n } else { // parts[12]\n dt.setDate(dt.getDate() - dt.getDay() + DateTime.i18n.getWeekStart(this._.locale) + o * 7 + (parts[5] ? 0 : 6));\n\n }\n\n t = dt.getTime();\n\n } else if (parts[13] || parts[14] || parts[15]) {\n dt = new Date(t);\n o = parts[13] ? -1 : (parts[15] ? 1 : 0);\n\n for (i = 16; i < 35; i++) {\n if (parts[i]) {\n break;\n }\n }\n\n if (i < 28) {\n i -= 16;\n dt.setMonth(o * 12 + i, 1);\n\n } else {\n i -= 28;\n\n if (i < DateTime.i18n.getWeekStart(this._.locale)) {\n i += 7;\n }\n\n dt.setDate(dt.getDate() - dt.getDay() + o * 7 + i);\n\n }\n\n t = dt.getTime();\n\n }\n\n if (parts[35] || parts[36]) {\n dt = new Date(t);\n dt.setHours(parts[36] ? 0 : 12, 0, 0, 0);\n t = dt.getTime();\n\n } else if (parts[37]) {\n dt = new Date(t);\n o = parts[37].match(/^(\\d+)(?::(\\d+)(?::(\\d+))?)?\\s*([ap]m)?/i);\n o[1] = parseInt(o[1].replace(/^0(\\d)$/, '$1'));\n\n if (o[1] === 12 && o[4] === 'am') {\n o[1] = 0;\n } else if (o[1] < 12 && o[4] === 'pm') {\n o[1] += 12;\n }\n\n o[2] = o[2] !== undefined ? parseInt(o[2].replace(/^0(\\d)$/, '$1')) : 0;\n o[3] = o[3] !== undefined ? parseInt(o[3].replace(/^0(\\d)$/, '$1')) : 0;\n dt.setHours(o[1], o[2], o[3], 0);\n t = dt.getTime();\n\n }\n\n if (parts[38]) {\n t += DateInterval.from(parts[38], this._.locale).getLength();\n }\n\n this._.date = new Date(t);\n return this;\n\n\t};\n\n\tDateTime.prototype.modifyClone = function(s) {\n\t\treturn DateTime.from(this).modify(s);\n\n\t};\n\n\tDateTime.prototype._initialize = function() {\n\t\tif (this._.initialized) {\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._.initialized = true;\n\n var m, s;\n\n\t\tif (typeof this._.date === 'string') {\n\t\t\tif (m = this._.date.match(/^@(\\d+)$/)) {\n\t\t\t\tthis._.date = new Date(m[1] * 1000);\n\n\t\t\t} else if (m = this._.date.match(/^(\\d\\d\\d\\d-\\d\\d-\\d\\d)[ T](\\d\\d:\\d\\d(?::\\d\\d(?:\\.\\d+)?)?)([-+]\\d\\d:?\\d\\d)?$/)) {\n\t\t\t\tthis._.date = new Date(m[1] + 'T' + m[2] + (m[3] || ''));\n\n\t\t\t} else if (DateTime.isModifyString(this._.date, this._.locale)) {\n\t\t\t\ts = this._.date;\n\t\t\t\tthis._.date = new Date();\n\t\t\t\tthis.modify(s);\n\n\t\t\t} else {\n\t\t\t\tthis._.date = new Date(this._.date);\n\n\t\t\t}\n\t\t} else if (typeof this._.date === 'number') {\n\t\t\tthis._.date = new Date(this._.date);\n\n\t\t} else if (DateTime.isDateObject(this._.date)) {\n\t\t\ts = this._.date.date;\n\n\t\t\tif (this._.date.timezone_type !== 3 || this._.date.timezone === 'UTC') {\n\t\t\t\ts += ' ' + this._.date.timezone;\n\n\t\t\t}\n\n\t\t\tthis._.date = new Date(s);\n\n\t\t} else if (this._.date instanceof DateTime) {\n\t\t this._.locale = this._.date.getLocale();\n\t\t\tthis._.date = new Date(this._.date.getTime());\n\n\t\t}\n\t};\n\n _context.register(DateTime, 'DateTime');\n\n});\n","_context.invoke('Utils', function(DateTime, Strings) {\n\n function buildParser(locale) {\n var i;\n\n if (!('months' in locale.parsers)) {\n locale.parsers.months = [];\n\n for (i = 0; i < 12; i++) {\n locale.parsers.months.push(Strings.escapeRegex(locale.keywords.months.full[i]) + '|' + Strings.escapeRegex(locale.keywords.months.abbrev[i]));\n }\n }\n\n if (!('weekdays' in locale.parsers)) {\n locale.parsers.weekdays = [];\n\n for (i = 0; i < 7; i++) {\n locale.parsers.weekdays.push(Strings.escapeRegex(locale.keywords.weekdays.full[i]) + '|' + Strings.escapeRegex(locale.keywords.weekdays.abbrev[i]));\n }\n }\n\n var parts = [\n '^',\n '(?:',\n '(?:',\n '(', locale.parsers.now, ')|',\n '(', locale.parsers.yesterday, ')|',\n '(', locale.parsers.today, ')|',\n '(', locale.parsers.tomorrow, ')|',\n '(?:',\n '(', locale.parsers.firstOf, ')|',\n '(', locale.parsers.lastOf, ')',\n ')\\\\s+(?:',\n '(', locale.parsers.last, ')|',\n '(', locale.parsers['this'], ')|',\n '(', locale.parsers.next, ')',\n ')\\\\s+(?:',\n '(', locale.parsers.year, ')|',\n '(', locale.parsers.month, ')|',\n '(', locale.parsers.week, ')',\n ')',\n '|',\n '(?:',\n '(', locale.parsers.last, ')|',\n '(', locale.parsers['this'], ')|',\n '(', locale.parsers.next, ')',\n ')\\\\s+(?:',\n '(', locale.parsers.months.join(')|('), ')',\n '|',\n '(', locale.parsers.weekdays.join(')|('), ')',\n ')',\n ')(?:\\\\s+|$)',\n ')?',\n '(?:',\n '(?:', locale.parsers.at, '\\\\s+)?',\n '(?:',\n '(', locale.parsers.noon, ')|',\n '(', locale.parsers.midnight, ')|',\n '([012]?\\\\d(?::[0-5]\\\\d(?::[0-5]\\\\d)?)?(?:\\\\s*[ap]m)?)',\n ')',\n '(?=[-+]|\\\\s|$)',\n ')?',\n '(',\n '(?:',\n '\\\\s*[-+]?\\\\s*\\\\d+\\\\s+',\n '(?:',\n locale.parsers.intervals.year, '|',\n locale.parsers.intervals.month, '|',\n locale.parsers.intervals.week, '|',\n locale.parsers.intervals.day, '|',\n locale.parsers.intervals.hour, '|',\n locale.parsers.intervals.minute, '|',\n locale.parsers.intervals.second, '|',\n locale.parsers.intervals.millisecond,\n ')',\n '(?=[-+]|\\\\s|$)',\n ')*',\n ')',\n '$'\n ];\n\n return new RegExp(parts.join(''), 'i');\n\n }\n\n function buildIntervalParser(locale) {\n var parts = [\n '\\\\s*([-+]?)\\\\s*(\\\\d+)\\\\s+',\n '(?:',\n '(', locale.parsers.intervals.year, ')|',\n '(', locale.parsers.intervals.month, ')|',\n '(', locale.parsers.intervals.week, ')|',\n '(', locale.parsers.intervals.day, ')|',\n '(', locale.parsers.intervals.hour, ')|',\n '(', locale.parsers.intervals.minute, ')|',\n '(', locale.parsers.intervals.second, ')|',\n '(', locale.parsers.intervals.millisecond, ')',\n ')\\\\s*'\n ];\n\n return new RegExp(parts.join(''), 'ig');\n\n }\n\n var i18n = DateTime.i18n = {\n locales: {},\n\n hasLocale: function(locale) {\n return locale in i18n.locales;\n },\n\n getLocale: function(locale) {\n if (!i18n.hasLocale(locale)) {\n throw new Error('Unknown locale: ' + locale);\n }\n\n return i18n.locales[locale];\n\n },\n\n getMonth: function(locale, m, abbrev) {\n return i18n.getLocale(locale).keywords.months[abbrev ? 'abbrev' : 'full'][m];\n },\n\n getWeekday: function(locale, d, abbrev) {\n return i18n.getLocale(locale).keywords.weekdays[abbrev ? 'abbrev' : 'full'][d];\n },\n\n getConjuction: function(locale) {\n return i18n.getLocale(locale).keywords.conjuction;\n },\n\n getInterval: function(locale, unit, n) {\n locale = i18n.getLocale(locale);\n n = locale.getPlural(n);\n return locale.keywords.intervals[unit][n];\n\n },\n\n getWeekStart: function(locale) {\n return i18n.getLocale(locale).weekStart;\n },\n\n getParser: function (locale) {\n locale = i18n.getLocale(locale);\n\n if (!locale.parser) {\n locale.parser = buildParser(locale);\n }\n\n return locale.parser;\n\n },\n\n getIntervalParser: function(locale) {\n locale = i18n.getLocale(locale);\n\n if (!locale.intervalParser) {\n locale.intervalParser = buildIntervalParser(locale);\n }\n\n return locale.intervalParser;\n\n }\n };\n\n});\n","_context.invoke('Utils', function (DateTime) {\n\n DateTime.i18n.locales.en = {\n getPlural: function(n) { return n === 1 ? 0 : 1; },\n weekStart: 0,\n keywords: {\n weekdays: {\n abbrev: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n full: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n },\n months: {\n abbrev: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n full: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n },\n intervals: {\n year: ['year', 'years'],\n month: ['month', 'months'],\n week: ['week', 'weeks'],\n day: ['day', 'days'],\n hour: ['hour', 'hours'],\n minute: ['minute', 'minutes'],\n second: ['second', 'seconds'],\n millisecond: ['millisecond', 'milliseconds']\n },\n conjuction: 'and'\n },\n parsers: {\n now: 'now',\n today: 'today',\n tomorrow: 'tomorrow',\n yesterday: 'yesterday',\n at: 'at',\n noon: 'noon',\n midnight: 'midnight',\n last: 'last',\n 'this': 'this',\n next: 'next',\n firstOf: 'first(?:\\\\s+day)?\\\\s+of',\n lastOf: 'last(?:\\\\s+day)?\\\\s+of',\n year: 'year',\n month: 'month',\n week: 'week',\n intervals: {\n year: 'y(?:ears?)?',\n month: 'mon(?:ths?)?',\n week: 'w(?:eeks?)?',\n day: 'd(?:ays?)?',\n hour: 'h(?:ours?)?',\n minute: 'min(?:utes?)?',\n second: 's(?:ec(?:onds?)?)?',\n millisecond: 'millis(?:econds?)?|ms'\n }\n }\n };\n\n});\n","_context.invoke('Nittro.Utils', function(Nittro, Strings, Arrays, HashMap, undefined) {\n\n var Tokenizer = _context.extend(function(patterns, matchCase) {\n var types = false;\n\n if (!Array.isArray(patterns)) {\n if (patterns instanceof HashMap) {\n types = patterns.getKeys();\n patterns = patterns.getValues();\n\n } else {\n var tmp = patterns, type;\n types = [];\n patterns = [];\n\n for (type in tmp) {\n if (tmp.hasOwnProperty(type)) {\n types.push(type);\n patterns.push(tmp[type]);\n\n }\n }\n }\n }\n\n this._ = {\n pattern: '(' + patterns.join(')|(') + ')',\n types: types,\n matchCase: matchCase\n };\n }, {\n STATIC: {\n getCoordinates: function(text, offset) {\n text = text.substr(0, offset);\n var m = text.match(/\\n/g);\n\n return [(m ? m.length : 0) + 1, offset - (\"\\n\" + text).lastIndexOf(\"\\n\") + 1];\n\n }\n },\n\n tokenize: function(input) {\n var re, tokens, pos, n;\n\n if (this._.types) {\n re = new RegExp(this._.pattern, 'gm' + (this._.matchCase ? '' : 'i'));\n tokens = [];\n pos = 0;\n n = this._.types.length;\n\n input.replace(re, function () {\n var ofs = arguments[n + 1],\n i;\n\n if (ofs > pos) {\n tokens.push([input.substr(pos, ofs - pos), pos, null]);\n\n }\n\n for (i = 1; i <= n; i++) {\n if (arguments[i] !== undefined) {\n tokens.push([arguments[i], ofs, this._.types[i - 1]]);\n pos = ofs + arguments[0].length;\n return;\n\n }\n }\n\n throw new Error('Unknown token type: ' + arguments[0]);\n\n }.bind(this));\n\n if (pos + 1 < input.length) {\n tokens.push([input.substr(pos), pos, null]);\n\n }\n } else {\n tokens = Strings.split(input, new RegExp(this._.pattern, 'm' + (this._.matchCase ? '' : 'i')), true, true, true);\n\n }\n\n return tokens;\n\n }\n });\n\n _context.register(Tokenizer, 'Tokenizer');\n\n}, {\n Strings: 'Utils.Strings',\n Arrays: 'Utils.Arrays',\n HashMap: 'Utils.HashMap'\n});\n","_context.invoke('Nittro.Neon', function(Nittro, HashMap, Tokenizer, Strings, Arrays, DateTime, undefined) {\n\n var Neon = _context.extend(function() {\n this._cbStr = this._cbStr.bind(this);\n\n }, {\n STATIC: {\n patterns: [\n '\\'[^\\'\\\\n]*\\'|\"(?:\\\\\\\\.|[^\"\\\\\\\\\\\\n])*\"', //string\n '(?:[^#\"\\',:=[\\\\]{}()\\x00-\\x20!`-]|[:-][^\"\\',\\\\]})\\\\s])(?:[^,:=\\\\]})(\\x00-\\x20]|:(?![\\\\s,\\\\]})]|$)|[ \\\\t]+[^#,:=\\\\]})(\\x00-\\x20])*', // literal / boolean / integer / float\n '[,:=[\\\\]{}()-]', // symbol\n '?:#.*', // comment\n '\\\\n[\\\\t ]*', // new line + indent\n '?:[\\\\t ]+' // whitespace\n ],\n\n brackets: {\n '{' : '}',\n '[' : ']',\n '(' : ')'\n },\n\n consts: {\n 'true': true, 'True': true, 'TRUE': true, 'yes': true, 'Yes': true, 'YES': true, 'on': true, 'On': true, 'ON': true,\n 'false': false, 'False': false, 'FALSE': false, 'no': false, 'No': false, 'NO': false, 'off': false, 'Off': false, 'OFF': false,\n 'null': null, 'Null': null, 'NULL': null\n },\n\n indent: ' ',\n\n BLOCK: 1,\n\n encode: function(data, options) {\n var tmp, s, isList;\n\n if (data instanceof DateTime) {\n return data.format('Y-m-d H:i:s O');\n\n } else if (data instanceof NeonEntity) {\n tmp = Neon.encode(data.attributes);\n return Neon.encode(data.value) + '(' + tmp.substr(1, tmp.length - 2) + ')';\n\n }\n\n if (data && typeof data === 'object') { // array or object literal\n s = [];\n isList = Array.isArray(data);\n\n if (options & Neon.BLOCK) {\n Arrays.walk(data, function(k, v) {\n v = Neon.encode(v, Neon.BLOCK);\n s.push(isList ? '-' : (Neon.encode(k) + ':'), Strings.contains(v, \"\\n\") ? \"\\n\" + Neon.indent + v.replace(/\\n/g, \"\\n\" + Neon.indent) : (' ' + v), \"\\n\");\n\n });\n\n return s.length ? s.join('') : '[]';\n\n } else {\n Arrays.walk(data, function(k, v) {\n s.push(isList ? '' : (Neon.encode(k) + ': '), Neon.encode(v), ', ');\n\n });\n\n s.pop(); // remove last ', '\n return (isList ? '[' : \"{\") + s.join('') + (isList ? ']' : '}');\n\n }\n } else if (typeof data === 'string' && !Strings.isNumeric(data)\n && !data.match(/[\\x00-\\x1F]|^\\d{4}|^(true|false|yes|no|on|off|null)$/i)\n && data.match(new RegExp('^' + Neon.patterns[1] + '$'))) {\n\n return data;\n\n } else {\n return JSON.stringify(data);\n\n }\n },\n\n decode: function(input) {\n if (typeof input !== 'string') {\n throw new Error('Invalid argument, must be a string');\n\n }\n\n if (!Neon.tokenizer) {\n Neon.tokenizer = new Tokenizer(Neon.patterns);\n\n }\n\n input = input.replace(/\\r/g, '');\n\n var parser = new Neon(),\n res;\n\n parser.input = input;\n parser.tokens = Neon.tokenizer.tokenize(input);\n\n res = parser.parse(0, new HashMap());\n\n while (parser.tokens[parser.n] !== undefined) {\n if (parser.tokens[parser.n][0].charAt(0) === \"\\n\") {\n parser.n++;\n\n } else {\n parser.error();\n\n }\n }\n\n return res;\n\n }\n },\n\n input: null,\n tokens: null,\n n: 0,\n indentTabs: null,\n\n parse: function(indent, result) {\n indent === undefined && (indent = null);\n result === undefined && (result = new HashMap());\n\n var inlineParser = (indent === null),\n value = null, key = null, entity = null,\n hasValue = false, hasKey = false,\n t;\n\n for (; this.n < this.tokens.length; this.n++) {\n t = this.tokens[this.n][0];\n\n if (t === ',') {\n if ((!hasKey && !hasValue) || !inlineParser) {\n this.error();\n\n }\n\n this.addValue(result, hasKey, key, hasValue ? value : null);\n hasKey = hasValue = false;\n\n } else if (t === ':' || t === '=') {\n if (hasKey || !hasValue) {\n this.error();\n\n }\n\n if (typeof value !== 'string' && typeof value !== 'number') {\n this.error('Unacceptable key');\n\n }\n\n key = Strings.toString(value);\n hasKey = true;\n hasValue = false;\n\n } else if (t === '-') {\n if (hasKey || hasValue || inlineParser) {\n this.error();\n\n }\n\n key = null;\n hasKey = true;\n\n } else if (Neon.brackets[t] !== undefined) {\n if (hasValue) {\n if (t !== '(') {\n this.error();\n\n }\n\n this.n++;\n\n entity = new NeonEntity();\n entity.value = value;\n entity.attributes = this.parse(null, new HashMap());\n value = entity;\n\n } else {\n this.n++;\n value = this.parse(null, new HashMap());\n\n }\n\n hasValue = true;\n\n if (this.tokens[this.n] === undefined || this.tokens[this.n][0] !== Neon.brackets[t]) {\n this.error();\n\n }\n\n } else if (t === '}' || t === ']' || t === ')') {\n if (!inlineParser) {\n this.error();\n\n }\n\n break;\n\n } else if (t.charAt(0) === \"\\n\") {\n if (inlineParser) {\n if (hasKey || hasValue) {\n this.addValue(result, hasKey, key, hasValue ? value : null);\n hasKey = hasValue = false;\n\n }\n } else {\n while (this.tokens[this.n + 1] !== undefined && this.tokens[this.n + 1][0].charAt(0) === \"\\n\") {\n this.n++;\n\n }\n\n if (this.tokens[this.n + 1] === undefined) {\n break;\n\n }\n\n var newIndent = this.tokens[this.n][0].length - 1;\n if (indent === null) {\n indent = newIndent;\n\n }\n\n if (newIndent) {\n if (this.indentTabs === null) {\n this.indentTabs = this.tokens[this.n][0].charAt(1) === \"\\t\";\n\n }\n\n if (Strings.contains(this.tokens[this.n][0], this.indentTabs ? ' ' : \"\\t\")) {\n this.n++;\n this.error('Either tabs or spaces may be used for indentation, not both');\n\n }\n }\n\n if (newIndent > indent) {\n if (hasValue || !hasKey) {\n this.n++;\n this.error('Unexpected indentation');\n\n } else {\n this.addValue(result, key !== null, key, this.parse(newIndent, new HashMap()));\n\n }\n\n newIndent = this.tokens[this.n] !== undefined ? this.tokens[this.n][0].length - 1 : 0;\n hasKey = false;\n\n } else {\n if (hasValue && !hasKey) {\n break;\n\n } else if (hasKey) {\n this.addValue(result, key !== null, key, hasValue ? value : null);\n hasKey = hasValue = false;\n\n }\n }\n\n if (newIndent < indent) {\n return result;\n\n }\n }\n } else {\n if (hasValue) {\n this.error();\n\n }\n\n if (t.charAt(0) === '\"') {\n value = t.substr(1, t.length - 2).replace(/\\\\(?:u[0-9a-f]{4}|x[0-9a-f]{2}|.)/gi, this._cbStr);\n\n } else if (t.charAt(0) === \"'\") {\n value = t.substr(1, t.length - 2);\n\n } else if (Neon.consts[t] !== undefined) {\n value = Neon.consts[t];\n\n } else if (Strings.isNumeric(t)) {\n value = parseFloat(t);\n\n } else if (t.match(/^\\d\\d\\d\\d-\\d\\d?-\\d\\d?(?:(?:[Tt]| +)\\d\\d?:\\d\\d(?::\\d\\d(?:\\.\\d*)?)? *(?:Z|[-+]\\d\\d?(?::?\\d\\d)?)?)?$/)) {\n value = DateTime.from(t);\n\n } else {\n value = t;\n\n }\n\n hasValue = true;\n\n }\n }\n\n if (inlineParser) {\n if (hasKey || hasValue) {\n this.addValue(result, hasKey, key, hasValue ? value : null);\n\n }\n } else {\n if (hasValue && !hasKey) {\n if (!result.length) {\n result = value;\n\n } else {\n this.error();\n\n }\n } else if (hasKey) {\n this.addValue(result, key !== null, key, hasValue ? value : null);\n\n }\n }\n\n return result;\n\n },\n\n addValue: function(result, hasKey, key, value) {\n if (hasKey) {\n if (result && result.has(key)) {\n this.error(\"Duplicated key \" + key);\n\n }\n\n result.set(key, value);\n\n } else {\n result.push(value);\n\n }\n },\n\n _cbStr: function(m) {\n var mapping = {t: '\\t', n: '\\n', r: '\\r', f: '\\x0C', b: '\\x08', '\"': '\"', '\\\\': '\\\\', '/': '/', '_': '\\xC2\\xA0'}\n\n if (mapping[m.charAt(1)] !== undefined) {\n return mapping[m.charAt(1)];\n\n } else if (m.charAt(1) === 'u' && m.length === 6) {\n return String.fromCharCode(parseInt(m.substr(2), 16));\n\n } else if (m.charAt(1) === 'x' && m.length === 4) {\n return String.fromCharCode(parseInt(m.substr(2), 16));\n\n } else {\n this.error('Invalid escape sequence ' + m);\n\n }\n },\n\n error: function(msg) {\n var last = this.tokens[this.n] !== undefined ? this.tokens[this.n] : null,\n pos = Tokenizer.getCoordinates(this.input, last ? last[1] : this.input.length),\n token = last ? last[0].substr(0, 40).replace(/\\n/g, '') : 'end';\n\n throw new Error((msg || 'Unexpected %s').replace(/%s/g, token) + ' on line ' + pos[0] + ', column ' + pos[1]);\n\n }\n\n });\n\n var NeonEntity = function(value, attributes) {\n this.value = value || null;\n this.attributes = attributes || null;\n\n };\n\n _context.register(Neon, 'Neon');\n _context.register(NeonEntity, 'NeonEntity');\n\n}, {\n HashMap: 'Utils.HashMap',\n Strings: 'Utils.Strings',\n Arrays: 'Utils.Arrays',\n DateTime: 'Utils.DateTime',\n Tokenizer: 'Nittro.Utils.Tokenizer'\n});\n","_context.invoke('Nittro.DI', function(undefined) {\n\n var ServiceDefinition = _context.extend(function(factory, args, setup, run) {\n this._ = {\n factory: factory,\n args: args || {},\n setup: setup || [],\n run: !!run\n };\n }, {\n getFactory: function() {\n return this._.factory;\n },\n\n setFactory: function(factory, args) {\n this._.factory = factory;\n\n if (args !== undefined) {\n this._.args = args;\n }\n\n return this;\n },\n\n getArguments: function () {\n return this._.args;\n },\n\n setArguments: function(args) {\n this._.args = args;\n return this;\n },\n\n getSetup: function () {\n return this._.setup;\n },\n\n hasSetup: function() {\n return this._.setup.length > 0;\n },\n\n addSetup: function(callback) {\n this._.setup.push(callback);\n return this;\n },\n\n setRun: function(state) {\n this._.run = state === undefined || !!state;\n return this;\n },\n\n isRun: function() {\n return this._.run;\n }\n });\n\n _context.register(ServiceDefinition, 'ServiceDefinition');\n\n});\n","_context.invoke('Nittro.DI', function(Nittro, ReflectionClass, ReflectionFunction, Arrays, Strings, HashMap, Neon, NeonEntity, ServiceDefinition, undefined) {\n\n var prepare = function (self) {\n if (!self._) {\n self._ = {};\n }\n\n if (!self._.services) {\n self._.services = {};\n self._.serviceDefs = {};\n\n }\n };\n\n var ContainerMixin = {\n addService: function (name, service) {\n prepare(this);\n\n if (this._.services[name] || this._.serviceDefs[name]) {\n throw new Error('Container already has a service named \"' + name + '\"');\n\n }\n\n this._.services[name] = service;\n\n return this;\n\n },\n\n addServiceDefinition: function (name, definition, override) {\n prepare(this);\n\n if (!override && (this._.services[name] || this._.serviceDefs[name])) {\n throw new Error('Container already has a service named \"' + name + '\"');\n\n }\n\n this._.serviceDefs[name] = definition;\n\n return this;\n\n },\n\n hasServiceDefinition: function(name) {\n prepare(this);\n return this._.serviceDefs[name] !== undefined;\n },\n\n getServiceDefinition: function(name) {\n prepare(this);\n\n if (!this._.serviceDefs[name]) {\n throw new Error('Container has no service \"' + name + '\"');\n\n }\n\n if (typeof this._.serviceDefs[name] === 'string') {\n this._.serviceDefs[name] = new ServiceDefinition(\n this._.serviceDefs[name].replace(/!$/, ''),\n null,\n null,\n !!this._.serviceDefs[name].match(/!$/)\n );\n } else if (typeof this._.serviceDefs[name] === 'function') {\n this._.serviceDefs[name] = new ServiceDefinition(\n this._.serviceDefs[name]\n );\n } else if (!(this._.serviceDefs[name] instanceof ServiceDefinition)) {\n this._.serviceDefs[name] = new ServiceDefinition(\n this._.serviceDefs[name].factory,\n this._.serviceDefs[name].args,\n this._.serviceDefs[name].setup,\n this._.serviceDefs[name].run\n );\n }\n\n return this._.serviceDefs[name];\n\n },\n\n getService: function (name) {\n prepare(this);\n\n if (name === 'container') {\n return this;\n\n } else if (this._.services[name] === undefined) {\n if (this._.serviceDefs[name]) {\n this._createService(name);\n\n } else {\n throw new Error('Container has no service named \"' + name + '\"');\n\n }\n }\n\n return this._.services[name];\n\n },\n\n hasService: function (name) {\n prepare(this);\n return name === 'container' || this._.services[name] !== undefined || this._.serviceDefs[name] !== undefined;\n\n },\n\n isServiceCreated: function (name) {\n if (!this.hasService(name)) {\n throw new Error('Container has no service named \"' + name + '\"');\n\n }\n\n return !!this._.services[name];\n\n },\n\n runServices: function () {\n prepare(this);\n\n var name, def;\n\n for (name in this._.serviceDefs) {\n def = this.getServiceDefinition(name);\n\n if (def.isRun()) {\n this.getService(name);\n\n }\n }\n },\n\n invoke: function (callback, args, thisArg) {\n prepare(this);\n args = this._autowireArguments(callback, args);\n return callback.apply(thisArg || null, this._expandArguments(args));\n\n },\n\n _createService: function (name) {\n var def = this.getServiceDefinition(name),\n factory = def.getFactory(),\n obj,\n service,\n setup;\n\n if (typeof factory === 'function') {\n service = this.invoke(factory, def.getArguments());\n\n if (!service) {\n throw new Error('Factory failed to create service \"' + name + '\"');\n\n }\n } else {\n factory = this._toEntity(factory);\n service = this._expandEntity(factory, null, def.getArguments());\n\n if (service === factory) {\n throw new Error('Invalid factory for service \"' + name + '\"');\n\n }\n }\n\n this._.services[name] = service;\n\n if (def.hasSetup()) {\n setup = def.getSetup();\n\n for (var i = 0; i < setup.length; i++) {\n if (typeof setup[i] === 'function') {\n this.invoke(setup[i], null, service);\n\n } else {\n obj = this._toEntity(setup[i]);\n this._expandEntity(obj, service);\n\n }\n }\n }\n\n return service;\n\n },\n\n _autowireArguments: function (callback) {\n var argList = ReflectionFunction.from(callback).getArgs();\n\n var args = Arrays.createFrom(arguments, 1)\n .filter(function(arg) { return !!arg; })\n .map(function (arg) {\n if (arg instanceof HashMap) {\n if (arg.isList()) {\n arg = HashMap.from(arg.getValues(), argList);\n\n }\n } else {\n arg = HashMap.from(arg, argList);\n\n }\n\n return arg;\n\n });\n\n var i, a;\n\n lookupArg:\n for (i = 0; i < argList.length; i++) {\n for (a = args.length - 1; a >= 0; a--) {\n if (args[a].has(argList[i])) {\n argList[i] = args[a].get(argList[i]);\n continue lookupArg;\n\n } else if (args[a].has(i)) {\n argList[i] = args[a].get(i);\n continue lookupArg;\n\n }\n }\n\n if (this.hasService(argList[i])) {\n argList[i] = this.getService(argList[i]);\n continue;\n\n }\n\n throw new Error('Cannot autowire argument \"' + argList[i] + '\" of function');\n\n }\n\n return argList;\n\n },\n\n _expandArguments: function (args) {\n for (var i = 0; i < args.length; i++) {\n args[i] = this._expandArg(args[i]);\n\n }\n\n return args;\n\n },\n\n _expandArg: function (arg) {\n if (arg instanceof NeonEntity) {\n return this._expandEntity(arg);\n\n } else if (typeof arg === 'string' && arg.match(/^@\\S+$/)) {\n return this.getService(arg.substr(1));\n\n } else {\n return arg;\n\n }\n },\n\n _toEntity: function (str) {\n var m = str.match(/^([^\\(]+)\\((.*)\\)$/);\n\n if (m) {\n return new NeonEntity(m[1], Neon.decode('[' + m[2] + ']'));\n\n } else {\n return new NeonEntity(str, new HashMap());\n\n }\n },\n\n _expandEntity: function (entity, context, mergeArgs) {\n var m, obj, method, args;\n\n if (m = entity.value.match(/^(?:(@)?([^:].*?))?(?:::(.+))?$/)) {\n if (m[2]) {\n obj = m[1] ? this.getService(m[2]) : ReflectionClass.getClass(m[2]);\n\n } else if (context) {\n obj = context;\n\n } else {\n throw new Error('No context for calling ' + entity.value + ' given');\n\n }\n\n if (m[3] !== undefined) {\n method = m[3];\n args = this._autowireArguments(obj[method], entity.attributes, mergeArgs);\n return obj[method].apply(obj, this._expandArguments(args));\n\n } else if (!m[1]) {\n args = this._autowireArguments(obj, entity.attributes, mergeArgs);\n return ReflectionClass.from(obj).newInstanceArgs(this._expandArguments(args));\n\n } else if (entity.attributes.length) {\n throw new Error('Invalid entity \"' + entity.value + '\"');\n\n } else {\n return obj;\n\n }\n } else {\n return entity;\n\n }\n }\n };\n\n _context.register(ContainerMixin, 'ContainerMixin');\n\n}, {\n ReflectionClass: 'Utils.ReflectionClass',\n ReflectionFunction: 'Utils.ReflectionFunction',\n Arrays: 'Utils.Arrays',\n Strings: 'Utils.Strings',\n HashMap: 'Utils.HashMap',\n Neon: 'Nittro.Neon.Neon',\n NeonEntity: 'Nittro.Neon.NeonEntity'\n});\n","_context.invoke('Nittro.DI', function(ContainerMixin, Arrays, HashMap, ReflectionClass, NeonEntity, undefined) {\n\n function traverse(cursor, path, create) {\n if (typeof path === 'string') {\n path = path.split(/\\./g);\n\n }\n\n var i, p, n = path.length;\n\n for (i = 0; i < n; i++) {\n p = path[i];\n\n if (Array.isArray(cursor) && p.match(/^\\d+$/)) {\n p = parseInt(p);\n\n }\n\n if (cursor[p] === undefined) {\n if (create) {\n cursor[p] = {};\n\n } else {\n return undefined;\n\n }\n }\n\n cursor = cursor[p];\n\n }\n\n return cursor;\n\n }\n\n var Container = _context.extend(function(config) {\n config || (config = {});\n\n this._ = {\n params: Arrays.mergeTree({}, config.params || null),\n serviceDefs: Arrays.mergeTree({}, config.services || null),\n services: {},\n factories: Arrays.mergeTree({}, config.factories || null)\n };\n\n }, {\n hasParam: function(name) {\n return traverse(this._.params, name) !== undefined;\n\n },\n\n getParam: function(name, def) {\n var value = traverse(this._.params, name);\n return value !== undefined ? value : (def !== undefined ? def : null);\n\n },\n\n setParam: function(name, value) {\n name = name.split(/\\./g);\n\n var p = name.pop(),\n cursor = this._.params;\n\n if (name.length) {\n cursor = traverse(cursor, name, true);\n\n }\n\n if (Array.isArray(cursor) && p.match(/^\\d+$/)) {\n p = parseInt(p);\n\n }\n\n cursor[p] = value;\n\n return this;\n\n },\n\n hasFactory: function(name) {\n return this._.factories[name] !== undefined;\n\n },\n\n addFactory: function(name, factory, params) {\n if (typeof factory === 'string') {\n this._.factories[name] = factory;\n\n } else {\n this._.factories[name] = {\n callback: factory,\n params: params || null\n };\n }\n\n return this;\n\n },\n\n create: function(name, args) {\n if (!this.hasFactory(name)) {\n throw new Error('No factory named \"' + name + '\" has been registered');\n\n }\n\n var factory = this._.factories[name];\n\n if (typeof factory === 'string') {\n this._.factories[name] = factory = this._toEntity(factory);\n\n } else if (!(factory.params instanceof HashMap)) {\n factory.params = new HashMap(factory.params);\n\n }\n\n if (factory instanceof NeonEntity) {\n return this._expandEntity(factory, null, args);\n\n } else {\n args = this._autowireArguments(factory.callback, factory.params, args);\n return factory.callback.apply(null, this._expandArguments(args));\n\n }\n },\n\n _expandArg: function (arg) {\n if (typeof arg === 'string' && arg.indexOf('%') > -1) {\n if (arg.match(/^%[^%]+%$/)) {\n return this.getParam(arg.replace(/^%|%$/g, ''));\n\n } else {\n return arg.replace(/%([a-z0-9_.-]+)%/gi, function () {\n return this.getParam(arguments[1]);\n\n }.bind(this));\n }\n } else {\n return this.__expandArg(arg);\n\n }\n }\n });\n\n _context.mixin(Container, ContainerMixin, {\n _expandArg: '__expandArg'\n });\n\n _context.register(Container, 'Container');\n\n}, {\n Arrays: 'Utils.Arrays',\n HashMap: 'Utils.HashMap',\n ReflectionClass: 'Utils.ReflectionClass',\n NeonEntity: 'Nittro.Neon.NeonEntity'\n});\n","_context.invoke('Nittro.DI', function (Arrays) {\n\n var BuilderExtension = _context.extend(function(containerBuilder, config) {\n this._ = {\n containerBuilder: containerBuilder,\n config: config\n };\n }, {\n load: function() {\n\n },\n\n setup: function () {\n\n },\n\n _getConfig: function (defaults) {\n if (defaults) {\n this._.config = Arrays.mergeTree({}, defaults, this._.config);\n }\n\n return this._.config;\n\n },\n\n _getContainerBuilder: function () {\n return this._.containerBuilder;\n }\n });\n\n _context.register(BuilderExtension, 'BuilderExtension');\n\n}, {\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.DI', function(Container, BuilderExtension, undefined) {\n\n var ContainerBuilder = _context.extend(Container, function(config) {\n config || (config = {});\n\n ContainerBuilder.Super.call(this, config);\n this._.extensions = config.extensions || {};\n\n }, {\n addExtension: function(name, extension) {\n if (this._.extensions[name] !== undefined) {\n throw new Error('Container builder already has an extension called \"' + name + '\"');\n }\n\n this._.extensions[name] = extension;\n\n return this;\n },\n\n createContainer: function() {\n this._prepareExtensions();\n this._loadExtensions();\n this._setupExtensions();\n\n return new Container({\n params: this._.params,\n services: this._.serviceDefs,\n factories: this._.factories\n });\n },\n\n _prepareExtensions: function () {\n var name, extension;\n\n for (name in this._.extensions) {\n extension = this._.extensions[name];\n\n if (typeof extension === 'function') {\n extension = this.invoke(extension, {containerBuilder: this, config: this._.params[name] || {}});\n\n } else if (typeof extension === 'string') {\n extension = this._expandEntity(this._toEntity(extension), null, {containerBuilder: this, config: this._.params[name] || {}});\n\n }\n\n if (!(extension instanceof BuilderExtension)) {\n throw new Error('Extension \"' + name + '\" is not an instance of Nittro.DI.BuilderExtension');\n\n }\n\n this._.extensions[name] = extension;\n\n }\n },\n\n _loadExtensions: function () {\n for (var name in this._.extensions) {\n this._.extensions[name].load();\n\n }\n },\n\n _setupExtensions: function () {\n for (var name in this._.extensions) {\n this._.extensions[name].setup();\n\n }\n }\n });\n\n _context.register(ContainerBuilder, 'ContainerBuilder');\n\n});\n","_context.invoke('Nittro.Ajax', function (Nittro, Url, undefined) {\n\n var Request = _context.extend('Nittro.Object', function(url, method, data) {\n this._ = {\n url: Url.from(url),\n method: (method || 'GET').toUpperCase(),\n data: data || {},\n headers: {},\n normalized: false,\n dispatched: false,\n deferred: {\n fulfill: null,\n reject: null,\n promise: null\n },\n abort: null,\n aborted: false,\n response: null\n };\n\n this._.deferred.promise = new Promise(function (fulfill, reject) {\n this._.deferred.fulfill = fulfill;\n this._.deferred.reject = reject;\n }.bind(this));\n }, {\n getUrl: function () {\n this._normalize();\n return this._.url;\n },\n\n getMethod: function () {\n return this._.method;\n },\n\n isGet: function () {\n return this._.method === 'GET';\n },\n\n isPost: function () {\n return this._.method === 'POST';\n },\n\n isMethod: function (method) {\n return method.toUpperCase() === this._.method;\n },\n\n getData: function () {\n this._normalize();\n return this._.data;\n },\n\n getHeaders: function () {\n return this._.headers;\n },\n\n setUrl: function (url) {\n this._updating('url');\n this._.url = Url.from(url);\n return this;\n },\n\n setMethod: function (method) {\n this._updating('method');\n this._.method = method.toLowerCase();\n return this;\n },\n\n setData: function (k, v) {\n this._updating('data');\n\n if (k === null) {\n this._.data = {};\n\n } else if (v === undefined && typeof k === 'object') {\n for (v in k) {\n if (k.hasOwnProperty(v)) {\n this._.data[v] = k[v];\n\n }\n }\n } else {\n this._.data[k] = v;\n\n }\n\n return this;\n },\n\n setHeader: function (header, value) {\n this._updating('headers');\n this._.headers[header] = value;\n return this;\n },\n\n setHeaders: function (headers) {\n this._updating('headers');\n\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n this._.headers[header] = headers[header];\n\n }\n }\n\n return this;\n },\n\n setDispatched: function(abort) {\n if (this._.dispatched) {\n throw new Error('Request has already been dispatched');\n } else if (typeof abort !== 'function') {\n throw new Error('\"abort\" must be a function');\n }\n\n this._.dispatched = true;\n this._.abort = abort;\n return this;\n },\n\n isDispatched: function () {\n return this._.dispatched;\n },\n\n setFulfilled: function (response) {\n if (response) {\n this.setResponse(response);\n }\n\n this._.deferred.fulfill(this.getResponse());\n return this;\n },\n\n setRejected: function (reason) {\n this._.deferred.reject(reason);\n return this;\n },\n\n then: function (onfulfilled, onrejected) {\n return this._.deferred.promise.then(onfulfilled, onrejected);\n },\n\n abort: function () {\n if (this._.abort && !this._.aborted) {\n this._.abort();\n }\n\n this._.aborted = true;\n return this;\n\n },\n\n isAborted: function () {\n return this._.aborted;\n },\n\n setResponse: function(response) {\n this._.response = response;\n return this;\n },\n\n getResponse: function () {\n return this._.response;\n },\n\n _normalize: function() {\n if (this._.normalized || !this.isFrozen()) {\n return;\n }\n\n this._.normalized = true;\n\n if (this._.method === 'GET' || this._.method === 'HEAD') {\n this._.url.addParams(Nittro.Forms && Nittro.Forms.FormData && this._.data instanceof Nittro.Forms.FormData ? this._.data.exportData(true) : this._.data);\n this._.data = {};\n }\n }\n });\n\n _context.mixin(Request, 'Nittro.Freezable');\n _context.register(Request, 'Request');\n\n}, {\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Ajax', function () {\n\n var Response = _context.extend(function(status, payload, headers) {\n this._ = {\n status: status,\n payload: payload,\n headers: headers\n };\n }, {\n getStatus: function () {\n return this._.status;\n\n },\n\n getPayload: function () {\n return this._.payload;\n\n },\n\n getHeader: function (name) {\n return this._.headers[name.toLowerCase()];\n\n },\n\n getAllHeaders: function () {\n return this._.headers;\n\n }\n });\n\n _context.register(Response, 'Response');\n\n});\n","_context.invoke('Nittro.Ajax', function (Request, Arrays, Url) {\n\n var Service = _context.extend('Nittro.Object', function (options) {\n Service.Super.call(this);\n\n this._.options = Arrays.mergeTree({}, Service.defaults, options);\n this._.transport = null;\n\n if (!this._.options.allowOrigins) {\n this._.options.allowOrigins = [];\n } else if (!Array.isArray(this._.options.allowOrigins)) {\n this._.options.allowOrigins = this._.options.allowOrigins.split(/\\s*,\\s*/g);\n }\n\n this._.options.allowOrigins.push(Url.fromCurrent().getOrigin());\n }, {\n STATIC: {\n defaults: {\n allowOrigins: null\n }\n },\n\n setTransport: function (transport) {\n this._.transport = transport;\n return this;\n },\n\n addTransport: function (transport) {\n console.log('The Nittro.Ajax.Service.addTransport() method is deprecated, please use setTransport instead');\n return this.setTransport(transport);\n },\n\n supports: function (url, method, data) {\n return this._.transport.supports(url, method, data);\n },\n\n isAllowedOrigin: function(url) {\n return this._.options.allowOrigins.indexOf(Url.from(url).getOrigin()) > -1\n },\n\n 'get': function (url, data) {\n return this.dispatch(this.createRequest(url, 'get', data));\n },\n\n post: function (url, data) {\n return this.dispatch(this.createRequest(url, 'post', data));\n },\n\n createRequest: function (url, method, data) {\n if (!this.isAllowedOrigin(url)) {\n throw new Error('The origin of the URL \"' + url + '\" is not in the list of allowed origins');\n } else if (!this.supports(url, method, data)) {\n throw new Error('The request with the specified URL, method and data isn\\'t supported by the AJAX transport');\n }\n\n var request = new Request(url, method, data);\n this.trigger('request-created', {request: request});\n return request;\n },\n\n dispatch: function (request) {\n request.freeze();\n return this._.transport.dispatch(request);\n }\n });\n\n _context.register(Service, 'Service');\n\n}, {\n Arrays: 'Utils.Arrays',\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Ajax.Transport', function (Nittro, Response, Url) {\n\n var Native = _context.extend(function() {\n\n }, {\n STATIC: {\n createXhr: function () {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n } else if (window.ActiveXObject) {\n try {\n return new ActiveXObject('Msxml2.XMLHTTP');\n } catch (e) {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n }\n }\n },\n\n supports: function (url, method, data) {\n if (data && Nittro.Forms && data instanceof Nittro.Forms.FormData && data.isUpload() && !window.FormData) {\n return false;\n }\n\n if ((!window.XMLHttpRequest || !('withCredentials' in XMLHttpRequest.prototype)) && Url.fromCurrent().compare(url) >= Url.PART.PORT) {\n return false;\n }\n\n return true;\n },\n\n dispatch: function (request) {\n var xhr = Native.createXhr(),\n adv = this._checkSupport(request, xhr),\n abort = xhr.abort.bind(xhr);\n\n if (request.isAborted()) {\n request.setRejected(this._createError(request, xhr, {type: 'abort'}));\n return request;\n }\n\n this._bindEvents(request, xhr, adv);\n\n xhr.open(request.getMethod(), request.getUrl().toAbsolute(), true);\n\n var data = this._formatData(request, xhr);\n this._addHeaders(request, xhr);\n xhr.send(data);\n\n request.setDispatched(abort);\n\n return request;\n\n },\n\n _checkSupport: function (request, xhr) {\n var adv;\n\n if (!(adv = 'addEventListener' in xhr) && !('onreadystatechange' in xhr)) {\n throw new Error('Unsupported XHR implementation');\n }\n\n return adv;\n\n },\n\n _bindEvents: function (request, xhr, adv) {\n var self = this,\n done = false;\n\n function onLoad(evt) {\n if (done) return;\n done = true;\n\n if (xhr.status >= 200 && xhr.status < 300) {\n request.setFulfilled(self._createResponse(xhr));\n } else {\n request.setRejected(self._createError(request, xhr, evt));\n }\n }\n\n function onError(evt) {\n if (done) return;\n done = true;\n\n request.setRejected(self._createError(request, xhr, evt));\n }\n\n function onProgress(evt) {\n request.trigger('progress', {\n lengthComputable: evt.lengthComputable,\n loaded: evt.loaded,\n total: evt.total\n });\n }\n\n if (adv) {\n xhr.addEventListener('load', onLoad, false);\n xhr.addEventListener('error', onError, false);\n xhr.addEventListener('abort', onError, false);\n\n if ('upload' in xhr) {\n xhr.upload.addEventListener('progress', onProgress, false);\n }\n } else {\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n onLoad();\n } else {\n onError();\n }\n }\n };\n\n if ('ontimeout' in xhr) {\n xhr.ontimeout = onError;\n }\n\n if ('onerror' in xhr) {\n xhr.onerror = onError;\n }\n\n if ('onload' in xhr) {\n xhr.onload = onLoad;\n }\n }\n },\n\n _addHeaders: function (request, xhr) {\n var headers = request.getHeaders(),\n h;\n\n for (h in headers) {\n if (headers.hasOwnProperty(h)) {\n xhr.setRequestHeader(h, headers[h]);\n }\n }\n\n if (!headers.hasOwnProperty('X-Requested-With')) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n },\n\n _formatData: function (request, xhr) {\n var data = request.getData();\n\n if (Nittro.Forms && data instanceof Nittro.Forms.FormData) {\n data = data.exportData(request.isGet() || request.isMethod('HEAD'));\n\n if (!window.FormData || !(data instanceof window.FormData)) {\n data = Url.buildQuery(data, true);\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n } else {\n data = Url.buildQuery(data);\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n return data;\n },\n\n _createResponse: function (xhr) {\n var payload,\n headers = {};\n\n (xhr.getAllResponseHeaders() || '').trim().split(/\\r\\n/g).forEach(function(header) {\n if (header && !header.match(/^\\s*$/)) {\n header = header.match(/^\\s*([^:]+):\\s*(.+?)\\s*$/);\n headers[header[1].toLowerCase()] = header[2];\n }\n });\n\n if (headers['content-type'] && headers['content-type'].split(/;/)[0] === 'application/json') {\n payload = JSON.parse(xhr.responseText || '{}');\n } else {\n payload = xhr.responseText;\n }\n\n return new Response(xhr.status, payload, headers);\n },\n\n _createError: function (request, xhr, evt) {\n if (xhr.readyState === 4 && xhr.status !== 0) {\n request.setResponse(this._createResponse(xhr));\n }\n\n if (evt && evt.type === 'abort') {\n return {\n type: 'abort',\n status: null,\n request: request\n };\n } else if (xhr.status === 0) {\n return {\n type: 'connection',\n status: null,\n request: request\n };\n } else if (xhr.status < 200 || xhr.status >= 300) {\n return {\n type: 'response',\n status: xhr.status,\n request: request\n };\n }\n\n return {\n type: 'unknown',\n status: xhr.status,\n request: request\n };\n }\n });\n\n _context.register(Native, 'Native');\n\n}, {\n Url: 'Utils.Url',\n Response: 'Nittro.Ajax.Response'\n});\n","_context.invoke('Nittro.Page', function (DOM, undefined) {\n\n var Snippet = _context.extend(function (id, phase) {\n this._ = {\n id: id,\n container: false,\n phase: typeof phase === 'number' ? phase : Snippet.INACTIVE,\n data: {},\n handlers: [\n [], [], [], []\n ]\n };\n }, {\n STATIC: {\n INACTIVE: -1,\n PREPARE_SETUP: 0,\n RUN_SETUP: 1,\n PREPARE_TEARDOWN: 2,\n RUN_TEARDOWN: 3\n },\n\n getId: function () {\n return this._.id;\n\n },\n\n setup: function (prepare, run) {\n if (prepare && !run) {\n run = prepare;\n prepare = null;\n\n }\n\n if (prepare) {\n if (this._.phase === Snippet.PREPARE_SETUP) {\n prepare(this.getElement());\n\n } else {\n this._.handlers[Snippet.PREPARE_SETUP].push(prepare);\n\n }\n }\n\n if (run) {\n if (this._.phase === Snippet.RUN_SETUP) {\n run(this.getElement());\n\n } else {\n this._.handlers[Snippet.RUN_SETUP].push(run);\n\n }\n }\n\n return this;\n\n },\n\n teardown: function (prepare, run) {\n if (prepare && !run) {\n run = prepare;\n prepare = null;\n\n }\n\n if (prepare) {\n if (this._.phase === Snippet.PREPARE_TEARDOWN) {\n prepare(this.getElement());\n\n } else {\n this._.handlers[Snippet.PREPARE_TEARDOWN].push(prepare);\n\n }\n }\n\n if (run) {\n if (this._.phase === Snippet.RUN_TEARDOWN) {\n run(this.getElement());\n\n } else {\n this._.handlers[Snippet.RUN_TEARDOWN].push(run);\n\n }\n }\n\n return this;\n\n },\n\n runPhase: function (phase) {\n if (phase === Snippet.INACTIVE) {\n this._.phase = phase;\n\n this._.handlers.forEach(function (queue) {\n queue.splice(0, queue.length);\n\n });\n\n } else if (phase - 1 === this._.phase) {\n this._.phase = phase;\n\n var elm = this.getElement();\n\n this._.handlers[this._.phase].forEach(function (handler) {\n handler(elm);\n\n });\n\n this._.handlers[this._.phase].splice(0, this._.handlers[this._.phase].length);\n\n }\n\n return this;\n\n },\n\n getPhase: function () {\n return this._.phase;\n\n },\n\n getData: function (key, def) {\n return key in this._.data ? this._.data[key] : (def === undefined ? null : def);\n\n },\n\n setData: function (key, value) {\n this._.data[key] = value;\n return this;\n\n },\n\n setContainer: function () {\n this._.container = true;\n return this;\n\n },\n\n isContainer: function () {\n return this._.container;\n\n },\n\n getElement: function () {\n return DOM.getById(this._.id);\n\n }\n });\n\n _context.register(Snippet, 'Snippet');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Page', function(DOM) {\n\n var Helpers = {\n buildContent: function(elem, html) {\n elem = elem.split(/\\./g);\n elem[0] = DOM.create(elem[0]);\n\n if (elem.length > 1) {\n DOM.addClass.apply(DOM, elem);\n }\n\n elem = elem[0];\n DOM.html(elem, html);\n\n return elem;\n\n },\n\n prepareDynamicContainer: function (snippet) {\n var elem = snippet.getElement(),\n params = {\n id: snippet.getId(),\n mask: new RegExp('^' + DOM.getData(elem, 'dynamic-mask') + '$'),\n element: DOM.getData(elem, 'dynamic-element') || 'div',\n sort: DOM.getData(elem, 'dynamic-sort') || 'append',\n sortCache: DOM.getData(elem, 'dynamic-sort-cache') === false ? false : null\n };\n\n snippet.setContainer();\n snippet.setData('_snippet_container', params);\n return params;\n\n },\n\n computeSortedSnippets: function (container, snippets, changeset) {\n var sortData = Helpers._getSortData(container.getData('_snippet_container'), container.getElement(), changeset);\n Helpers._mergeSortData(sortData, snippets);\n return Helpers._applySortData(sortData);\n },\n\n applySortedSnippets: function (container, ids, snippets) {\n var i = 0, n = ids.length, tmp;\n\n tmp = container.firstElementChild;\n\n while (i < n && ids[i] in snippets && !snippets[ids[i]].element) {\n container.insertBefore(snippets[ids[i]].content, tmp);\n i++;\n\n }\n\n while (n > i && ids[n - 1] in snippets && !snippets[ids[n - 1]].element) {\n n--;\n\n }\n\n for (; i < n; i++) {\n if (ids[i] in snippets) {\n if (snippets[ids[i]].element) {\n if (snippets[ids[i]].element.previousElementSibling !== (i > 0 ? DOM.getById(ids[i - 1]) : null)) {\n container.insertBefore(snippets[ids[i]].element, i > 0 ? DOM.getById(ids[i - 1]).nextElementSibling : container.firstElementChild);\n\n }\n } else {\n container.insertBefore(snippets[ids[i]].content, DOM.getById(ids[i - 1]).nextElementSibling);\n\n }\n }\n }\n\n while (n < ids.length) {\n container.appendChild(snippets[ids[n]].content);\n n++;\n\n }\n },\n\n _applySortData: function (sortData) {\n var sorted = [],\n id;\n\n for (id in sortData.snippets) {\n if (sortData.snippets.hasOwnProperty(id)) {\n sorted.push({id: id, values: sortData.snippets[id]});\n\n }\n }\n\n sorted.sort(Helpers._compareSnippets.bind(null, sortData.descriptor));\n return sorted.map(function(snippet) { return snippet.id; });\n\n },\n\n _compareSnippets: function (descriptor, a, b) {\n var i, n, v;\n\n for (i = 0, n = descriptor.length; i < n; i++) {\n v = a.values[i] < b.values[i] ? -1 : (a.values[i] > b.values[i] ? 1 : 0);\n\n if (v !== 0) {\n return v * (descriptor[i].asc ? 1 : -1);\n\n }\n }\n\n return 0;\n\n },\n\n _getSortData: function (params, elem, changeset) {\n var sortData = params.sortCache;\n\n if (!sortData) {\n sortData = Helpers._buildSortData(params, elem, changeset);\n\n if (params.sortCache !== false) {\n params.sortCache = sortData;\n\n }\n } else {\n for (var id in sortData.snippets) {\n if (sortData.snippets.hasOwnProperty(id) && (id in changeset.remove || !DOM.getById(id))) {\n delete sortData.snippets[id];\n\n }\n }\n }\n\n return sortData;\n\n },\n\n _buildSortData: function (params, elem, changeset) {\n var sortData = {\n descriptor: params.sort.trim().split(/\\s*,\\s*/g).map(Helpers._parseDescriptor.bind(null, params.id)),\n snippets: {}\n };\n\n var children = {};\n\n DOM.getChildren(elem).forEach(function(child) {\n if (!(child.id in changeset.remove || child.id in changeset.update)) {\n children[child.id] = {\n content: child\n };\n }\n });\n\n Helpers._mergeSortData(sortData, children);\n\n return sortData;\n\n },\n\n _mergeSortData: function (sortData, snippets) {\n for (var id in snippets) {\n if (snippets.hasOwnProperty(id)) {\n sortData.snippets[id] = Helpers._extractSortData(snippets[id].content, sortData.descriptor);\n\n }\n }\n },\n\n _extractSortData: function (elem, descriptor) {\n return descriptor.map(function (field) {\n return field.extractor(elem);\n\n });\n },\n\n _parseDescriptor: function (id, descriptor) {\n var m = descriptor.match(/^(.+?)(?:\\[(.+?)\\])?(?:\\((.+?)\\))?(?:\\s+(.+?))?$/),\n sel, attr, prop, asc;\n\n if (!m) {\n throw new Error('Invalid sort descriptor: ' + descriptor);\n\n }\n\n sel = m[1];\n attr = m[2];\n prop = m[3];\n asc = m[4];\n\n if (sel.match(/^[^.]|[\\s#\\[>+:]/)) {\n throw new TypeError('Invalid selector for sorted insert mode in container #' + id);\n\n }\n\n sel = sel.substr(1);\n asc = asc ? /^[1tay]/i.test(asc) : true;\n\n if (attr) {\n return {extractor: Helpers._getAttrExtractor(sel, attr), asc: asc};\n\n } else if (prop) {\n return {extractor: Helpers._getDataExtractor(sel, prop), asc: asc};\n\n } else {\n return {extractor: Helpers._getTextExtractor(sel), asc: asc};\n\n }\n },\n\n _getAttrExtractor: function (sel, attr) {\n return function (elem) {\n elem = elem.getElementsByClassName(sel);\n return elem.length ? elem[0].getAttribute(attr) || null : null;\n };\n },\n\n _getDataExtractor: function (sel, prop) {\n return function (elem) {\n elem = elem.getElementsByClassName(sel);\n return elem.length ? DOM.getData(elem[0], prop, null) : null;\n };\n },\n\n _getTextExtractor: function (sel) {\n return function (elem) {\n elem = elem.getElementsByClassName(sel);\n return elem.length ? elem[0].textContent : null;\n };\n }\n };\n\n _context.register(Helpers, 'SnippetManagerHelpers');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Page', function (Helpers, Snippet, DOM, Arrays, undefined) {\n\n var SnippetManager = _context.extend('Nittro.Object', function() {\n SnippetManager.Super.call(this);\n\n this._.snippets = {};\n this._.containerCache = null;\n this._.currentPhase = Snippet.INACTIVE;\n\n }, {\n getSnippet: function (id) {\n if (!this._.snippets[id]) {\n this._.snippets[id] = new Snippet(id, this._.currentPhase);\n\n }\n\n return this._.snippets[id];\n\n },\n\n isSnippet: function (elem) {\n return (typeof elem === 'string' ? elem : elem.id) in this._.snippets;\n\n },\n\n setup: function() {\n this.trigger('after-update');\n this._runSnippetsPhase(this._.snippets, Snippet.PREPARE_SETUP);\n this._runSnippetsPhase(this._.snippets, Snippet.RUN_SETUP);\n },\n\n getRemoveTargets: function (elem) {\n var sel = DOM.getData(elem, 'dynamic-remove');\n return sel ? DOM.find(sel) : [];\n\n },\n\n computeChanges: function (snippets, removeTargets) {\n this._clearDynamicContainerCache();\n\n var changeset = {\n remove: {},\n update: {},\n add: {},\n containers: {}\n };\n\n this._resolveRemovals(removeTargets, changeset);\n this._resolveUpdates(snippets, changeset);\n this._resolveDynamicSnippets(changeset);\n\n return changeset;\n\n },\n\n applyChanges: function (changeset) {\n var teardown = Arrays.mergeTree({}, changeset.remove, changeset.update);\n\n this._runSnippetsPhase(teardown, Snippet.PREPARE_TEARDOWN);\n this._runSnippetsPhase(teardown, Snippet.RUN_TEARDOWN);\n this._runSnippetsPhase(teardown, Snippet.INACTIVE);\n\n this.trigger('before-update', changeset);\n\n this._applyRemove(changeset.remove);\n this._applyUpdate(changeset.update);\n this._applyAdd(changeset.add, changeset.containers);\n this._applyDynamic(changeset.containers, Arrays.mergeTree({}, changeset.update, changeset.add));\n\n this.trigger('after-update', changeset);\n\n return this._runSnippetsPhaseOnNextFrame(this._.snippets, Snippet.PREPARE_SETUP)\n .then(function () {\n this._runSnippetsPhase(this._.snippets, Snippet.RUN_SETUP);\n\n }.bind(this));\n },\n\n cleanupDescendants: function(elem, changeset) {\n var id, snippet,\n snippets = changeset ? changeset.remove : {};\n\n for (id in this._.snippets) {\n if (this._.snippets.hasOwnProperty(id) && !(id in snippets)) {\n snippet = this._.snippets[id].getElement();\n\n if (snippet !== elem && DOM.contains(elem, snippet)) {\n snippets[id] = {\n element: snippet,\n isDescendant: true\n };\n }\n }\n }\n\n if (!changeset) {\n this._runSnippetsPhase(snippets, Snippet.PREPARE_TEARDOWN);\n this._runSnippetsPhase(snippets, Snippet.RUN_TEARDOWN);\n this._runSnippetsPhase(snippets, Snippet.INACTIVE);\n }\n },\n\n _resolveRemovals: function(removeTargets, changeset) {\n removeTargets.forEach(function(elem) {\n changeset.remove[elem.id] = {\n element: elem\n };\n\n this.cleanupDescendants(elem, changeset);\n\n }.bind(this));\n },\n\n _resolveUpdates: function(snippets, changeset) {\n var id, elem, params;\n\n for (id in snippets) {\n if (snippets.hasOwnProperty(id)) {\n elem = DOM.getById(id);\n\n if (elem) {\n this.cleanupDescendants(elem, changeset);\n\n if (id in changeset.remove && (params = this._resolveAddition(id, snippets[id]))) {\n changeset.add[id] = params;\n\n } else {\n changeset.update[id] = this._resolveUpdate(elem, snippets[id]);\n\n }\n } else if (params = this._resolveAddition(id, snippets[id])) {\n changeset.add[id] = params;\n\n }\n }\n }\n },\n\n _resolveDynamicSnippets: function(changeset) {\n var id, type, cid, params;\n\n for (type in {update: 1, add: 1}) {\n for (id in changeset[type]) {\n if (changeset[type].hasOwnProperty(id) && (cid = changeset[type][id].container)) {\n params = this._getDynamicContainerParams(cid);\n\n if (params.sort !== 'prepend' && params.sort !== 'append') {\n changeset.containers[cid] || (changeset.containers[cid] = {});\n changeset.containers[cid][id] = changeset[type][id];\n\n } else {\n changeset[type][id].action = params.sort;\n\n }\n }\n }\n }\n\n for (cid in changeset.containers) {\n if (changeset.containers.hasOwnProperty(cid)) {\n changeset.containers[cid] = Helpers.computeSortedSnippets(this.getSnippet(cid), changeset.containers[cid], changeset);\n\n }\n }\n },\n\n _resolveUpdate: function(elem, content) {\n return {\n element: elem,\n content: Helpers.buildContent(elem.tagName, content),\n container: DOM.hasClass(elem.parentNode, 'nittro-snippet-container') ? elem.parentNode.id : null\n };\n },\n\n _resolveAddition: function(id, content) {\n var params = this._getDynamicContainerParamsForId(id),\n elem;\n\n if (!params) {\n return null;\n }\n\n elem = Helpers.buildContent(params.element, content);\n elem.id = id;\n\n return {\n content: elem,\n container: params.id\n };\n },\n\n _runSnippetsPhase: function (snippets, phase) {\n this._.currentPhase = phase;\n\n for (var id in snippets) {\n if (snippets.hasOwnProperty(id)) {\n this.getSnippet(id).runPhase(phase);\n\n }\n }\n },\n\n _runSnippetsPhaseOnNextFrame: function(snippets, phase) {\n return new Promise(function(fulfill) {\n window.requestAnimationFrame(function() {\n this._runSnippetsPhase(snippets, phase);\n fulfill();\n\n }.bind(this));\n }.bind(this));\n },\n\n _applyRemove: function(snippets) {\n for (var id in snippets) {\n if (snippets.hasOwnProperty(id)) {\n if (!snippets[id].isDescendant && snippets[id].element.parentNode) {\n snippets[id].element.parentNode.removeChild(snippets[id].element);\n }\n\n if (id in this._.snippets) {\n delete this._.snippets[id];\n }\n }\n }\n },\n\n _applyUpdate: function(snippets) {\n for (var id in snippets) {\n if (snippets.hasOwnProperty(id)) {\n DOM.empty(snippets[id].element);\n DOM.append(snippets[id].element, Arrays.createFrom(snippets[id].content.childNodes));\n\n }\n }\n },\n\n _applyAdd: function(snippets, containers) {\n for (var id in snippets) {\n if (snippets.hasOwnProperty(id) && !(snippets[id].container in containers)) {\n if (snippets[id].action === 'prepend') {\n DOM.prepend(snippets[id].container, snippets[id].content);\n\n } else {\n DOM.append(snippets[id].container, snippets[id].content);\n\n }\n }\n }\n },\n\n _applyDynamic: function(containers, snippets) {\n for (var cid in containers) {\n if (containers.hasOwnProperty(cid)) {\n Helpers.applySortedSnippets(this.getSnippet(cid).getElement(), containers[cid], snippets);\n\n }\n }\n },\n\n _getDynamicContainerCache: function () {\n if (this._.containerCache === null) {\n this._.containerCache = DOM.getByClassName('nittro-snippet-container')\n .map(function (elem) {\n return elem.id;\n });\n }\n\n return this._.containerCache;\n\n },\n\n _clearDynamicContainerCache: function () {\n this._.containerCache = null;\n\n },\n\n _getDynamicContainerParams: function (id) {\n var container = this.getSnippet(id),\n params = container.isContainer() ? container.getData('_snippet_container') : null;\n\n if (!params || params.sortCache === false) {\n return Helpers.prepareDynamicContainer(container);\n } else {\n return params;\n }\n },\n\n _getDynamicContainerParamsForId: function (id) {\n var cache = this._getDynamicContainerCache(),\n i, n, params;\n\n for (i = 0, n = cache.length; i < n; i++) {\n params = this._getDynamicContainerParams(cache[i]);\n\n if (params.mask.test(id)) {\n return params;\n\n }\n }\n\n if (window.console) {\n console.error('Dynamic snippet #' + id + ' has no container');\n }\n\n return null;\n }\n });\n\n _context.register(SnippetManager, 'SnippetManager');\n\n}, {\n Helpers: 'Nittro.Page.SnippetManagerHelpers',\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Page', function() {\n\n var SnippetAgent = _context.extend(function(page, snippetManager) {\n this._ = {\n page: page,\n snippetManager: snippetManager\n };\n\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n _initTransaction: function(evt) {\n var data = {\n removeTargets: 'remove' in evt.data.context\n ? evt.data.context.remove || []\n : (evt.data.context.element ? this._.snippetManager.getRemoveTargets(evt.data.context.element) : [])\n };\n\n evt.data.transaction.on('ajax-response', this._handleResponse.bind(this, data));\n },\n\n _handleResponse: function(data, evt) {\n var payload = evt.data.response.getPayload(),\n changeset;\n\n if (payload.snippets || data.removeTargets.length) {\n changeset = this._.snippetManager.computeChanges(payload.snippets || {}, data.removeTargets);\n evt.waitFor(this._applyChangeset(evt.target, changeset));\n }\n },\n\n _applyChangeset: function (transaction, changeset) {\n return Promise.resolve().then(this._doApplyChangeset.bind(this, transaction, changeset));\n },\n\n _doApplyChangeset: function (transaction, changeset) {\n return transaction.trigger('snippets-apply', { changeset: changeset })\n .then(function() {\n this._.snippetManager.applyChanges(changeset)\n }.bind(this));\n }\n });\n\n _context.register(SnippetAgent, 'SnippetAgent');\n\n});\n","_context.invoke('Nittro.Page', function(Arrays) {\n\n var AjaxAgent = _context.extend(function(page, ajax, options) {\n this._ = {\n page: page,\n ajax: ajax,\n options: Arrays.mergeTree({}, AjaxAgent.defaults, options)\n };\n\n this._.page.on('before-transaction', this._checkTransaction.bind(this));\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n STATIC: {\n defaults: {\n whitelistRedirects: false\n }\n },\n\n _checkTransaction: function (evt) {\n if (!this._.ajax.isAllowedOrigin(evt.data.url) || !this._.ajax.supports(evt.data.url, evt.data.context.method, evt.data.context.data)) {\n evt.preventDefault();\n }\n },\n\n _initTransaction: function(evt) {\n var data = {\n request: this._.ajax.createRequest(evt.data.transaction.getUrl(), evt.data.context.method, evt.data.context.data)\n };\n\n evt.data.transaction.on('dispatch', this._dispatch.bind(this, data));\n evt.data.transaction.on('abort', this._abort.bind(this, data));\n },\n\n _dispatch: function(data, evt) {\n evt.waitFor(Promise.resolve().then(this._doDispatch.bind(this, evt.target, data)));\n },\n\n _doDispatch: function (transaction, data) {\n return transaction.trigger('ajax-request', { request: data.request })\n .then(this._.ajax.dispatch.bind(this._.ajax, data.request))\n .then(this._handleResponse.bind(this, transaction, data));\n },\n\n _abort: function(data) {\n data.request.abort();\n },\n\n _handleResponse: function (transaction, data, response) {\n return Promise.resolve().then(this._doHandleResponse.bind(this, transaction, data, response));\n },\n\n _doHandleResponse: function(transaction, data, response) {\n return transaction.trigger('ajax-response', { response: response })\n .then(function() {\n var payload = response.getPayload();\n\n if (payload.postGet) {\n transaction.setUrl(payload.url);\n }\n\n if ('redirect' in payload) {\n if ((!this._.options.whitelistRedirects ? payload.allowAjax !== false : payload.allowAjax) && this._.ajax.isAllowedOrigin(payload.redirect)) {\n transaction.setUrl(payload.redirect);\n data.request = this._.ajax.createRequest(payload.redirect);\n return this._doDispatch(transaction, data);\n\n } else {\n document.location.href = payload.redirect;\n return new Promise(function() {});\n }\n } else {\n return data.request;\n }\n }.bind(this));\n }\n });\n\n _context.register(AjaxAgent, 'AjaxAgent');\n\n}, {\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Page', function(Arrays, DOM, Url) {\n\n var HistoryAgent = _context.extend(function(page, history, options) {\n this._ = {\n page: page,\n history: history,\n options: Arrays.mergeTree({}, HistoryAgent.defaults, options)\n };\n\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n STATIC: {\n defaults: {\n whitelistHistory: false\n }\n },\n\n _initTransaction: function (evt) {\n if (evt.data.context.fromHistory) {\n evt.data.transaction.setIsFromHistory();\n } else if ('history' in evt.data.context) {\n evt.data.transaction.setIsHistoryState(evt.data.context.history);\n } else if (evt.data.context.element) {\n evt.data.transaction.setIsHistoryState(DOM.getData(evt.data.context.element, 'history', !this._.options.whitelistHistory));\n } else {\n evt.data.transaction.setIsHistoryState(!this._.options.whitelistHistory);\n }\n\n var data = {\n title: document.title\n };\n\n evt.data.transaction.on('dispatch', this._dispatch.bind(this, data));\n evt.data.transaction.on('ajax-response', this._handleResponse.bind(this, data));\n },\n\n _dispatch: function (data, evt) {\n evt.target.then(this._saveState.bind(this, evt.target, data), function () { /* noop on transaction error */ });\n },\n\n _handleResponse: function (data, evt) {\n var payload = evt.data.response.getPayload();\n\n if (payload.title) {\n data.title = payload.title;\n }\n },\n\n _saveState: function (transaction, data) {\n if (transaction.getUrl().getOrigin() !== Url.fromCurrent().getOrigin() || transaction.isBackground()) {\n transaction.setIsHistoryState(false);\n } else if (transaction.isHistoryState()) {\n data.state = {};\n\n if (!transaction.trigger('history-save', data).isDefaultPrevented()) {\n this._.history.push(transaction.getUrl().toAbsolute(), data.title, data.state);\n }\n }\n\n if (data.title) {\n document.title = data.title;\n }\n }\n });\n\n _context.register(HistoryAgent, 'HistoryAgent');\n\n}, {\n Arrays: 'Utils.Arrays',\n DOM: 'Utils.DOM',\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Page', function (DOM, Arrays) {\n\n var location = window.history.location || window.location; // support for HTML5 history polyfill\n\n var History = _context.extend('Nittro.Object', function () {\n History.Super.call(this);\n this._.state = null;\n DOM.addListener(window, 'popstate', this._handleState.bind(this));\n }, {\n init: function () {\n if (window.history.state && window.history.state._nittro) {\n this._.state = window.history.state.data;\n } else {\n this._.state = {};\n this.update();\n }\n },\n\n push: function (url, title, data) {\n this._saveState(url, title, data, false);\n },\n\n replace: function (url, title, data) {\n this._saveState(url, title, data, true);\n },\n\n update: function (data) {\n Arrays.mergeTree(this._.state, data);\n window.history.replaceState({_nittro: true, data: this._.state}, document.title, location.href);\n },\n\n getState: function () {\n return this._.state;\n },\n\n _saveState: function (url, title, data, replace) {\n data = data || {};\n this.trigger('before-savestate', data);\n\n this._.state = data;\n\n if (replace) {\n window.history.replaceState({_nittro: true, data: data}, title || document.title, url);\n } else {\n window.history.pushState({_nittro: true, data: data}, title || document.title, url);\n }\n\n title && (document.title = title);\n\n this.trigger('savestate', {\n title: title,\n url: url,\n data: data,\n replace: replace\n });\n },\n\n _handleState: function (evt) {\n if (!evt.state || !evt.state._nittro) {\n return;\n }\n\n this._.state = evt.state.data;\n\n this.trigger('popstate', {\n title: document.title,\n url: location.href,\n data: evt.state.data\n });\n }\n });\n\n _context.register(History, 'History');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Page', function (DOM, Arrays, CSSTransitions, undefined) {\n\n var TransitionAgent = _context.extend('Nittro.Object', function(page, options) {\n TransitionAgent.Super.call(this);\n\n this._.page = page;\n this._.options = Arrays.mergeTree({}, TransitionAgent.defaults, options);\n\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n STATIC: {\n defaults: {\n defaultSelector: '.nittro-transition-auto'\n }\n },\n\n _initTransaction: function(evt) {\n var data = {\n elements: this._getTransitionTargets(evt.data.context),\n removeTargets: this._getRemoveTargets(evt.data.context)\n };\n\n evt.data.transaction.on('dispatch', this._dispatch.bind(this, data));\n evt.data.transaction.on('abort', this._abort.bind(this, data));\n evt.data.transaction.on('snippets-apply', this._handleSnippets.bind(this, data));\n },\n\n _dispatch: function(data, evt) {\n evt.target.on('error', this._handleError.bind(this, data));\n evt.target.then(this._transitionIn.bind(this, data, false), this._transitionIn.bind(this, data, true));\n\n if (data.elements.length || data.removeTargets.length) {\n DOM.addClass(data.removeTargets, 'nittro-dynamic-remove');\n data.transitionOut = this._transitionOut(data);\n evt.waitFor(data.transitionOut);\n }\n },\n\n _abort: function(data) {\n if (data.elements.length || data.removeTargets.length) {\n this._transitionIn(data, true);\n }\n },\n\n _handleSnippets: function(data, evt) {\n var changeset = evt.data.changeset,\n id;\n\n for (id in changeset.add) {\n if (changeset.add.hasOwnProperty(id)) {\n DOM.addClass(changeset.add[id].content, 'nittro-dynamic-add', 'nittro-transition-middle');\n data.elements.push(changeset.add[id].content);\n }\n }\n\n if (data.transitionOut) {\n evt.waitFor(data.transitionOut);\n }\n },\n\n _handleError: function (data, evt) {\n if (data.transitionOut) {\n evt.waitFor(data.transitionOut);\n }\n },\n\n _transitionOut: function (data) {\n return this._transition(data.elements.concat(data.removeTargets), 'out');\n },\n\n _transitionIn: function (data, aborting) {\n var elements = aborting ? data.elements.concat(data.removeTargets) : data.elements;\n\n if (elements.length) {\n return this._transition(elements, 'in')\n .then(function () {\n DOM.removeClass(elements, 'nittro-dynamic-add', 'nittro-dynamic-remove');\n });\n\n }\n },\n\n _transition: function(elements, dir) {\n return CSSTransitions.run(elements, {\n add: 'nittro-transition-active nittro-transition-' + dir,\n remove: 'nittro-transition-middle',\n after: dir === 'out' ? 'nittro-transition-middle' : null\n }, dir === 'in');\n },\n\n _getTransitionTargets: function(context) {\n var sel, targets;\n\n if (context.transition !== undefined) {\n sel = context.transition;\n } else {\n sel = context.element ? DOM.getData(context.element, 'transition') : undefined;\n }\n\n if (sel === undefined && (!context.element || !DOM.getData(context.element, 'dynamic-remove'))) {\n sel = this._.options.defaultSelector;\n }\n\n targets = sel ? DOM.find(sel) : [];\n\n this.trigger('prepare-transition-targets', {\n element: context.element,\n targets: targets\n });\n\n return targets;\n\n },\n\n _getRemoveTargets: function (context) {\n if (!context.element) {\n return [];\n }\n\n var sel = DOM.getData(context.element, 'dynamic-remove'),\n targets = sel ? DOM.find(sel) : [];\n\n if (targets.length) {\n this.trigger('prepare-remove-targets', {\n targets: targets.slice()\n });\n }\n\n return targets;\n\n }\n });\n\n _context.register(TransitionAgent, 'TransitionAgent');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n CSSTransitions: 'Utils.CSSTransitions'\n});\n","_context.invoke('Nittro.Page', function (DOM, Arrays) {\n\n var ScrollAgent = _context.extend(function (page, history, options) {\n this._ = {\n page: page,\n history: history,\n anchor: DOM.create('div'),\n options: Arrays.mergeTree({}, ScrollAgent.defaults, options)\n };\n\n this._.anchor.style.position = 'absolute';\n this._.anchor.style.left = 0;\n this._.anchor.style.top = 0;\n this._.anchor.style.width = '100%';\n this._.anchor.style.height = '1px';\n this._.anchor.style.marginTop = '-1px';\n\n window.history.scrollRestoration = 'manual';\n this._.page.on('ready', this._init.bind(this));\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n STATIC: {\n defaults: {\n target: null,\n margin: 30,\n scrollDown: false,\n duration: 400\n }\n },\n\n _init: function () {\n var state = this._.history.getState();\n\n if ('scrollAgent' in state) {\n this._scrollTo(state.scrollAgent.target, true);\n }\n },\n\n _initTransaction: function (evt) {\n if (evt.data.transaction.isBackground()) {\n return;\n }\n\n var rect = document.body.getBoundingClientRect(),\n data = {\n previous: window.pageYOffset,\n target: this._.options.target\n };\n\n this._.anchor.style.top = data.previous + rect.bottom + 'px';\n document.body.appendChild(this._.anchor);\n evt.data.transaction.on('dispatch', this._dispatch.bind(this, data));\n evt.data.transaction.on('abort error', this._cleanup.bind(this));\n evt.data.transaction.on('ajax-response', this._handleResponse.bind(this, data));\n evt.data.transaction.on('snippets-apply', this._handleSnippets.bind(this, data));\n evt.data.transaction.on('history-save', this._handleHistory.bind(this, data));\n\n if ('scrollTo' in evt.data.context) {\n data.target = evt.data.context.scrollTo;\n } else if (evt.data.context.element && evt.data.context.element.hasAttribute('data-scroll-to')) {\n data.target = DOM.getData(evt.data.context.element, 'scroll-to', null);\n }\n },\n\n _dispatch: function (data, evt) {\n var state = this._.history.getState();\n\n if (data.target === null && evt.target.isFromHistory() && state && 'scrollAgent' in state) {\n data.target = state.scrollAgent.target;\n }\n\n evt.target.then(this._apply.bind(this, data, evt.target), this._cleanup.bind(this));\n },\n\n _cleanup: function () {\n if (this._.anchor.parentNode) {\n this._.anchor.parentNode.removeChild(this._.anchor);\n this._.anchor.style.top = 0;\n }\n },\n\n _handleResponse: function (data, evt) {\n var payload = evt.data.response.getPayload();\n\n if ('scrollTo' in payload) {\n data.target = payload.scrollTo;\n }\n },\n\n _handleSnippets: function (data, evt) {\n if (data.target === null) {\n data.target = [];\n\n var id, params;\n\n for (id in evt.data.changeset.add) if (evt.data.changeset.add.hasOwnProperty(id)) {\n params = evt.data.changeset.add[id];\n\n if (!DOM.getData(params.container, 'scroll-ignore')) {\n data.target.push('#' + id);\n }\n }\n\n for (id in evt.data.changeset.update) if (evt.data.changeset.update.hasOwnProperty(id)) {\n if (!DOM.getData(id, 'scroll-ignore')) {\n data.target.push('#' + id);\n }\n }\n }\n },\n\n _apply: function (data, transaction) {\n if (this._resolveTarget(data)) {\n this._scrollTo(data.target, transaction.isFromHistory());\n } else {\n this._cleanup();\n }\n },\n\n _scrollTo: function (to, force) {\n var y0 = window.pageYOffset,\n dy = to - y0,\n t0 = Date.now(),\n dt = this._.options.duration,\n a = this._.anchor;\n\n if (force || this._.options.scrollDown || dy < 0) {\n window.requestAnimationFrame(step);\n }\n\n function step() {\n var x = (Date.now() - t0) / dt,\n y;\n\n if (x <= 1) {\n window.requestAnimationFrame(step);\n\n y = y0 + dy * (-0.5 * Math.cos(Math.PI * x) + 0.5);\n window.scrollTo(null, y);\n } else if (a.parentNode) {\n a.parentNode.removeChild(a);\n a.style.top = 0;\n }\n }\n },\n\n _handleHistory: function (data, evt) {\n this._.history.update({\n scrollAgent: {\n target: data.previous\n }\n });\n\n this._resolveTarget(data);\n\n evt.data.state.scrollAgent = {\n target: data.target\n };\n },\n\n _resolveTarget: function(data) {\n if (data.target === false) {\n return false;\n } else if (data.target === null) {\n data.target = 0;\n } else if (typeof data.target !== 'number') {\n if (Array.isArray(data.target)) {\n data.target = data.target.join(',');\n }\n\n data.target = DOM.find(data.target).map(function (elem) {\n return elem.getBoundingClientRect().top;\n });\n\n data.target = data.target.length\n ? Math.min.apply(null, data.target) + window.pageYOffset - this._.options.margin\n : 0;\n }\n\n return true;\n }\n });\n\n _context.register(ScrollAgent, 'ScrollAgent');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Page', function(Url) {\n\n var Transaction = _context.extend('Nittro.Object', function (url) {\n Transaction.Super.call(this);\n\n this._.url = Url.from(url);\n this._.history = true;\n this._.fromHistory = false;\n this._.background = false;\n\n this._.promise = new Promise(function(fulfill, reject) {\n this._.fulfill = fulfill;\n this._.reject = reject;\n }.bind(this));\n }, {\n STATIC: {\n createRejected: function (url, reason) {\n var self = new Transaction(url);\n self._.reject(reason);\n return self;\n }\n },\n\n getUrl: function() {\n return this._.url;\n },\n\n setUrl: function(url) {\n this._.url = Url.from(url);\n return this;\n },\n\n isHistoryState: function() {\n return this._.history;\n },\n\n setIsHistoryState: function(value) {\n this._.history = value;\n return this;\n },\n\n isFromHistory: function() {\n return this._.fromHistory;\n },\n\n setIsFromHistory: function() {\n this._.fromHistory = true;\n this._.history = false;\n },\n\n isBackground: function() {\n return this._.background;\n },\n\n setIsBackground: function(value) {\n this._.background = value;\n return this;\n },\n\n dispatch: function() {\n this.trigger('dispatch')\n .then(this._.fulfill, this._handleError.bind(this));\n\n return this;\n },\n\n abort: function() {\n this._.reject({type: 'abort'});\n this.trigger('abort');\n return this;\n },\n\n then: function(onfulfilled, onrejected) {\n return this._.promise.then(onfulfilled, onrejected);\n },\n\n _handleError: function (err) {\n this.trigger('error')\n .then(function () {\n this._.reject(err);\n }.bind(this));\n }\n });\n\n _context.register(Transaction, 'Transaction');\n\n}, {\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Page', function () {\n\n var CspAgent = _context.extend(function(page, nonce) {\n this._ = {\n page: page,\n nonce: nonce\n };\n\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n _initTransaction: function (evt) {\n var data = {\n nonce: null,\n pending: null\n };\n\n evt.data.transaction.on('ajax-response', this._handleResponse.bind(this, data));\n evt.data.transaction.on('snippets-apply', this._handleSnippets.bind(this, data));\n },\n\n _handleResponse: function (data, evt) {\n if ('redirect' in evt.data.response.getPayload()) {\n return;\n }\n\n var h = evt.data.response.getHeader('Content-Security-Policy') || evt.data.response.getHeader('Content-Security-Policy-Report-Only') || '',\n m = /(?:^|;\\s*)script-src\\s[^;]*'nonce-([^']+)'/.exec(h);\n\n if (m) {\n data.nonce = m[1];\n } else {\n data.nonce = false;\n }\n },\n\n _handleSnippets: function (data, evt) {\n this._handleChangeset(evt.data.changeset, data.nonce);\n },\n\n _handleChangeset: function (changeset, nonce) {\n if (!nonce) {\n return;\n }\n\n var id;\n\n for (id in changeset.add) {\n if (changeset.add.hasOwnProperty(id)) {\n this._fixNonce(changeset.add[id].content, nonce);\n }\n }\n\n for (id in changeset.update) {\n if (changeset.update.hasOwnProperty(id)) {\n this._fixNonce(changeset.update[id].content, nonce);\n }\n }\n },\n\n _fixNonce: function (elem, nonce) {\n var scripts = elem.getElementsByTagName('script'),\n i;\n\n for (i = 0; i < scripts.length; i++) {\n if (scripts.item(i).nonce === nonce) {\n scripts.item(i).setAttribute('nonce', this._.nonce || '');\n }\n }\n }\n });\n\n _context.register(CspAgent, 'CspAgent');\n\n});\n","_context.invoke('Nittro.Page', function (Url) {\n\n var GoogleAnalyticsHelper = _context.extend(function (history) {\n this._ = {\n history: history\n };\n\n this._.history.on('savestate popstate', this._handleState.bind(this));\n }, {\n _handleState: function (evt) {\n if (typeof window.ga === 'function' && !evt.data.replace) {\n window.ga('set', {\n page: Url.from(evt.data.url).setHash(null).toLocal(),\n title: evt.data.title\n });\n\n window.ga('send', 'pageview');\n }\n }\n });\n\n _context.register(GoogleAnalyticsHelper, 'GoogleAnalyticsHelper');\n\n}, {\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Page', function (Transaction, DOM, Arrays, Url) {\n\n var Service = _context.extend('Nittro.Object', function (snippetManager, history, options) {\n Service.Super.call(this);\n\n this._.snippetManager = snippetManager;\n this._.history = history;\n this._.options = Arrays.mergeTree({}, Service.defaults, options);\n this._.setup = false;\n this._.currentTransaction = null;\n this._.currentUrl = Url.fromCurrent();\n\n this._.history.on('popstate', this._handleState.bind(this));\n DOM.addListener(document, 'click', this._handleLinkClick.bind(this));\n\n this._checkReady();\n\n }, {\n STATIC: {\n defaults: {\n whitelistLinks: false,\n backgroundErrors: false\n }\n },\n\n open: function (url, method, data, context) {\n try {\n context || (context = {});\n context.method = method;\n context.data = data;\n\n var evt = this.trigger('before-transaction', {\n url: url,\n context: context\n });\n\n if (evt.isDefaultPrevented()) {\n return this._createRejectedTransaction(url, {type: 'abort'});\n }\n\n context.event && context.event.preventDefault();\n\n return evt.then(function () {\n if (evt.isDefaultPrevented()) {\n return this._createRejectedTransaction(url, {type: 'abort'});\n } else {\n return this._createTransaction(url, context);\n }\n }.bind(this));\n } catch (e) {\n return this._createRejectedTransaction(url, e);\n }\n },\n\n openLink: function (link, evt) {\n return this.open(link.href, 'get', null, {\n event: evt,\n element: link\n });\n },\n\n getSnippet: function (id) {\n return this._.snippetManager.getSnippet(id);\n },\n\n isSnippet: function (elem) {\n return this._.snippetManager.isSnippet(elem);\n },\n\n _handleState: function (evt) {\n if (!this._checkUrl(null, this._.currentUrl)) {\n return;\n }\n\n var url = Url.from(evt.data.url);\n this._.currentUrl = url;\n\n this.open(url, 'get', null, {fromHistory: true})\n .then(null, function () {\n document.location.href = url.toAbsolute();\n });\n },\n\n _checkReady: function () {\n if (document.readyState === 'loading') {\n DOM.addListener(document, 'readystatechange', this._checkReady.bind(this));\n return;\n }\n\n if (!this._.setup) {\n this._.setup = true;\n\n Promise.resolve().then(function () {\n this._.history.init();\n this._.snippetManager.setup();\n this.trigger('ready');\n }.bind(this));\n }\n },\n\n _handleLinkClick: function(evt) {\n if (evt.defaultPrevented || evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey || evt.button > 0) {\n return;\n }\n\n var link = DOM.closest(evt.target, 'a');\n\n if (!link || !this._checkLink(link) || !this._checkUrl(link.href)) {\n return;\n }\n\n this.openLink(link, evt);\n },\n\n _createTransaction: function(url, context) {\n var transaction = new Transaction(url);\n\n this._initTransaction(transaction, context);\n\n this.trigger('transaction-created', {\n transaction: transaction,\n context: context\n });\n\n return this._dispatchTransaction(transaction);\n },\n\n _createRejectedTransaction: function (url, reason) {\n var transaction = Transaction.createRejected(url, reason);\n return transaction.then(null, this._handleError.bind(this, transaction));\n },\n\n _initTransaction: function (transaction, context) {\n if ('background' in context) {\n transaction.setIsBackground(context.background);\n } else if (context.element) {\n transaction.setIsBackground(DOM.getData(context.element, 'background', false));\n }\n },\n\n _dispatchTransaction: function(transaction) {\n if (!transaction.isBackground()) {\n if (this._.currentTransaction) {\n this._.currentTransaction.abort();\n }\n\n this._.currentTransaction = transaction;\n }\n\n return transaction.dispatch().then(\n this._handleSuccess.bind(this, transaction),\n this._handleError.bind(this, transaction)\n );\n },\n\n _checkUrl: function(url, current) {\n url = url ? Url.from(url) : Url.fromCurrent();\n current = current ? Url.from(current) : Url.fromCurrent();\n return url.compare(current) !== Url.PART.HASH;\n },\n\n _checkLink: function (link) {\n return !link.hasAttribute('target') && link.hasAttribute('href') && DOM.getData(link, 'ajax', !this._.options.whitelistLinks);\n },\n\n _handleSuccess: function(transaction) {\n if (!transaction.isBackground()) {\n this._.currentTransaction = null;\n }\n\n if (transaction.isHistoryState()) {\n this._.currentUrl = transaction.getUrl();\n }\n },\n\n _handleError: function (transaction, err) {\n if (transaction === this._.currentTransaction) {\n this._.currentTransaction = null;\n }\n\n if (!transaction.isBackground() || this._.options.backgroundErrors) {\n this.trigger('error', err);\n }\n }\n });\n\n _context.register(Service, 'Service');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n Url: 'Utils.Url'\n});\n","/**\r\n * NetteForms - simple form validation.\r\n *\r\n * This file is part of the Nette Framework (https://nette.org)\r\n * Copyright (c) 2004 David Grudl (https://davidgrudl.com)\r\n */\r\n\r\n(function(global, factory) {\r\n\tif (!global.JSON) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(function() {\r\n\t\t\treturn factory(global);\r\n\t\t});\r\n\t} else if (typeof module === 'object' && typeof module.exports === 'object') {\r\n\t\tmodule.exports = factory(global);\r\n\t} else {\r\n\t\tvar init = !global.Nette || !global.Nette.noInit;\r\n\t\tglobal.Nette = factory(global);\r\n\t\tif (init) {\r\n\t\t\tglobal.Nette.initOnLoad();\r\n\t\t}\r\n\t}\r\n\r\n}(typeof window !== 'undefined' ? window : this, function(window) {\r\n\r\n\t'use strict';\r\n\r\n\tvar Nette = {};\r\n\r\n\tNette.formErrors = [];\r\n\tNette.version = '2.4';\r\n\r\n\r\n\t/**\r\n\t * Attaches a handler to an event for the element.\r\n\t */\r\n\tNette.addEvent = function(element, on, callback) {\r\n\t\tif (on === 'DOMContentLoaded' && element.readyState !== 'loading') {\r\n\t\t\tcallback.call(this);\r\n\t\t} else if (element.addEventListener) {\r\n\t\t\telement.addEventListener(on, callback);\r\n\t\t} else if (on === 'DOMContentLoaded') {\r\n\t\t\telement.attachEvent('onreadystatechange', function() {\r\n\t\t\t\tif (element.readyState === 'complete') {\r\n\t\t\t\t\tcallback.call(this);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\telement.attachEvent('on' + on, getHandler(callback));\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tfunction getHandler(callback) {\r\n\t\treturn function(e) {\r\n\t\t\treturn callback.call(this, e);\r\n\t\t};\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns the value of form element.\r\n\t */\r\n\tNette.getValue = function(elem) {\r\n\t\tvar i;\r\n\t\tif (!elem) {\r\n\t\t\treturn null;\r\n\r\n\t\t} else if (!elem.tagName) { // RadioNodeList, HTMLCollection, array\r\n\t\t\treturn elem[0] ? Nette.getValue(elem[0]) : null;\r\n\r\n\t\t} else if (elem.type === 'radio') {\r\n\t\t\tvar elements = elem.form.elements; // prevents problem with name 'item' or 'namedItem'\r\n\t\t\tfor (i = 0; i < elements.length; i++) {\r\n\t\t\t\tif (elements[i].name === elem.name && elements[i].checked) {\r\n\t\t\t\t\treturn elements[i].value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\r\n\t\t} else if (elem.type === 'file') {\r\n\t\t\treturn elem.files || elem.value;\r\n\r\n\t\t} else if (elem.tagName.toLowerCase() === 'select') {\r\n\t\t\tvar index = elem.selectedIndex,\r\n\t\t\t\toptions = elem.options,\r\n\t\t\t\tvalues = [];\r\n\r\n\t\t\tif (elem.type === 'select-one') {\r\n\t\t\t\treturn index < 0 ? null : options[index].value;\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = 0; i < options.length; i++) {\r\n\t\t\t\tif (options[i].selected) {\r\n\t\t\t\t\tvalues.push(options[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn values;\r\n\r\n\t\t} else if (elem.name && elem.name.match(/\\[\\]$/)) { // multiple elements []\r\n\t\t\telements = elem.form.elements[elem.name].tagName ? [elem] : elem.form.elements[elem.name];\r\n\t\t\tvalues = [];\r\n\r\n\t\t\tfor (i = 0; i < elements.length; i++) {\r\n\t\t\t\tif (elements[i].type !== 'checkbox' || elements[i].checked) {\r\n\t\t\t\t\tvalues.push(elements[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn values;\r\n\r\n\t\t} else if (elem.type === 'checkbox') {\r\n\t\t\treturn elem.checked;\r\n\r\n\t\t} else if (elem.tagName.toLowerCase() === 'textarea') {\r\n\t\t\treturn elem.value.replace('\\r', '');\r\n\r\n\t\t} else {\r\n\t\t\treturn elem.value.replace('\\r', '').replace(/^\\s+|\\s+$/g, '');\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Returns the effective value of form element.\r\n\t */\r\n\tNette.getEffectiveValue = function(elem) {\r\n\t\tvar val = Nette.getValue(elem);\r\n\t\tif (elem.getAttribute) {\r\n\t\t\tif (val === elem.getAttribute('data-nette-empty-value')) {\r\n\t\t\t\tval = '';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn val;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Validates form element against given rules.\r\n\t */\r\n\tNette.validateControl = function(elem, rules, onlyCheck, value, emptyOptional) {\r\n\t\telem = elem.tagName ? elem : elem[0]; // RadioNodeList\r\n\t\trules = rules || Nette.parseJSON(elem.getAttribute('data-nette-rules'));\r\n\t\tvalue = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value;\r\n\r\n\t\tfor (var id = 0, len = rules.length; id < len; id++) {\r\n\t\t\tvar rule = rules[id],\r\n\t\t\t\top = rule.op.match(/(~)?([^?]+)/),\r\n\t\t\t\tcurElem = rule.control ? elem.form.elements.namedItem(rule.control) : elem;\r\n\r\n\t\t\trule.neg = op[1];\r\n\t\t\trule.op = op[2];\r\n\t\t\trule.condition = !!rule.rules;\r\n\r\n\t\t\tif (!curElem) {\r\n\t\t\t\tcontinue;\r\n\t\t\t} else if (rule.op === 'optional') {\r\n\t\t\t\temptyOptional = !Nette.validateRule(elem, ':filled', null, value);\r\n\t\t\t\tcontinue;\r\n\t\t\t} else if (emptyOptional && !rule.condition && rule.op !== ':filled') {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tcurElem = curElem.tagName ? curElem : curElem[0]; // RadioNodeList\r\n\t\t\tvar curValue = elem === curElem ? value : {value: Nette.getEffectiveValue(curElem)},\r\n\t\t\t\tsuccess = Nette.validateRule(curElem, rule.op, rule.arg, curValue);\r\n\r\n\t\t\tif (success === null) {\r\n\t\t\t\tcontinue;\r\n\t\t\t} else if (rule.neg) {\r\n\t\t\t\tsuccess = !success;\r\n\t\t\t}\r\n\r\n\t\t\tif (rule.condition && success) {\r\n\t\t\t\tif (!Nette.validateControl(elem, rule.rules, onlyCheck, value, rule.op === ':blank' ? false : emptyOptional)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (!rule.condition && !success) {\r\n\t\t\t\tif (Nette.isDisabled(curElem)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (!onlyCheck) {\r\n\t\t\t\t\tvar arr = Nette.isArray(rule.arg) ? rule.arg : [rule.arg],\r\n\t\t\t\t\t\tmessage = rule.msg.replace(/%(value|\\d+)/g, function(foo, m) {\r\n\t\t\t\t\t\t\treturn Nette.getValue(m === 'value' ? curElem : elem.form.elements.namedItem(arr[m].control));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tNette.addError(curElem, message);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (elem.type === 'number' && !elem.validity.valid) {\r\n\t\t\tif (!onlyCheck) {\r\n\t\t\t\tNette.addError(elem, 'Please enter a valid value.');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Validates whole form.\r\n\t */\r\n\tNette.validateForm = function(sender, onlyCheck) {\r\n\t\tvar form = sender.form || sender,\r\n\t\t\tscope = false;\r\n\r\n\t\tNette.formErrors = [];\r\n\r\n\t\tif (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {\r\n\t\t\tvar scopeArr = Nette.parseJSON(form['nette-submittedBy'].getAttribute('data-nette-validation-scope'));\r\n\t\t\tif (scopeArr.length) {\r\n\t\t\t\tscope = new RegExp('^(' + scopeArr.join('-|') + '-)');\r\n\t\t\t} else {\r\n\t\t\t\tNette.showFormErrors(form, []);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar radios = {}, i, elem;\r\n\r\n\t\tfor (i = 0; i < form.elements.length; i++) {\r\n\t\t\telem = form.elements[i];\r\n\r\n\t\t\tif (elem.tagName && !(elem.tagName.toLowerCase() in {input: 1, select: 1, textarea: 1, button: 1})) {\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\t} else if (elem.type === 'radio') {\r\n\t\t\t\tif (radios[elem.name]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tradios[elem.name] = true;\r\n\t\t\t}\r\n\r\n\t\t\tif ((scope && !elem.name.replace(/]\\[|\\[|]|$/g, '-').match(scope)) || Nette.isDisabled(elem)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!Nette.validateControl(elem, null, onlyCheck) && !Nette.formErrors.length) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar success = !Nette.formErrors.length;\r\n\t\tNette.showFormErrors(form, Nette.formErrors);\r\n\t\treturn success;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Check if input is disabled.\r\n\t */\r\n\tNette.isDisabled = function(elem) {\r\n\t\tif (elem.type === 'radio') {\r\n\t\t\tfor (var i = 0, elements = elem.form.elements; i < elements.length; i++) {\r\n\t\t\t\tif (elements[i].name === elem.name && !elements[i].disabled) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn elem.disabled;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Adds error message to the queue.\r\n\t */\r\n\tNette.addError = function(elem, message) {\r\n\t\tNette.formErrors.push({\r\n\t\t\telement: elem,\r\n\t\t\tmessage: message\r\n\t\t});\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Display error messages.\r\n\t */\r\n\tNette.showFormErrors = function(form, errors) {\r\n\t\tvar messages = [],\r\n\t\t\tfocusElem;\r\n\r\n\t\tfor (var i = 0; i < errors.length; i++) {\r\n\t\t\tvar elem = errors[i].element,\r\n\t\t\t\tmessage = errors[i].message;\r\n\r\n\t\t\tif (!Nette.inArray(messages, message)) {\r\n\t\t\t\tmessages.push(message);\r\n\r\n\t\t\t\tif (!focusElem && elem.focus) {\r\n\t\t\t\t\tfocusElem = elem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (messages.length) {\r\n\t\t\talert(messages.join('\\n'));\r\n\r\n\t\t\tif (focusElem) {\r\n\t\t\t\tfocusElem.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Expand rule argument.\r\n\t */\r\n\tNette.expandRuleArgument = function(form, arg) {\r\n\t\tif (arg && arg.control) {\r\n\t\t\tvar control = form.elements.namedItem(arg.control),\r\n\t\t\t\tvalue = {value: Nette.getEffectiveValue(control)};\r\n\t\t\tNette.validateControl(control, null, true, value);\r\n\t\t\targ = value.value;\r\n\t\t}\r\n\t\treturn arg;\r\n\t};\r\n\r\n\r\n\tvar preventFiltering = false;\r\n\r\n\t/**\r\n\t * Validates single rule.\r\n\t */\r\n\tNette.validateRule = function(elem, op, arg, value) {\r\n\t\tvalue = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value;\r\n\r\n\t\tif (op.charAt(0) === ':') {\r\n\t\t\top = op.substr(1);\r\n\t\t}\r\n\t\top = op.replace('::', '_');\r\n\t\top = op.replace(/\\\\/g, '');\r\n\r\n\t\tvar arr = Nette.isArray(arg) ? arg.slice(0) : [arg];\r\n\t\tif (!preventFiltering) {\r\n\t\t\tpreventFiltering = true;\r\n\t\t\tfor (var i = 0, len = arr.length; i < len; i++) {\r\n\t\t\t\tarr[i] = Nette.expandRuleArgument(elem.form, arr[i]);\r\n\t\t\t}\r\n\t\t\tpreventFiltering = false;\r\n\t\t}\r\n\t\treturn Nette.validators[op]\r\n\t\t\t? Nette.validators[op](elem, Nette.isArray(arg) ? arr : arr[0], value.value, value)\r\n\t\t\t: null;\r\n\t};\r\n\r\n\r\n\tNette.validators = {\r\n\t\tfilled: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number' && elem.validity.badInput) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn val !== '' && val !== false && val !== null\r\n\t\t\t\t&& (!Nette.isArray(val) || !!val.length)\r\n\t\t\t\t&& (!window.FileList || !(val instanceof window.FileList) || val.length);\r\n\t\t},\r\n\r\n\t\tblank: function(elem, arg, val) {\r\n\t\t\treturn !Nette.validators.filled(elem, arg, val);\r\n\t\t},\r\n\r\n\t\tvalid: function(elem) {\r\n\t\t\treturn Nette.validateControl(elem, null, true);\r\n\t\t},\r\n\r\n\t\tequal: function(elem, arg, val) {\r\n\t\t\tif (arg === undefined) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfunction toString(val) {\r\n\t\t\t\tif (typeof val === 'number' || typeof val === 'string') {\r\n\t\t\t\t\treturn '' + val;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn val === true ? '1' : '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tval = Nette.isArray(val) ? val : [val];\r\n\t\t\targ = Nette.isArray(arg) ? arg : [arg];\r\n\t\t\tloop:\r\n\t\t\tfor (var i1 = 0, len1 = val.length; i1 < len1; i1++) {\r\n\t\t\t\tfor (var i2 = 0, len2 = arg.length; i2 < len2; i2++) {\r\n\t\t\t\t\tif (toString(val[i1]) === toString(arg[i2])) {\r\n\t\t\t\t\t\tcontinue loop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\tnotEqual: function(elem, arg, val) {\r\n\t\t\treturn arg === undefined ? null : !Nette.validators.equal(elem, arg, val);\r\n\t\t},\r\n\r\n\t\tminLength: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.tooShort) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn val.length >= arg;\r\n\t\t},\r\n\r\n\t\tmaxLength: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.tooLong) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn val.length <= arg;\r\n\t\t},\r\n\r\n\t\tlength: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.tooShort || elem.validity.tooLong) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\targ = Nette.isArray(arg) ? arg : [arg, arg];\r\n\t\t\treturn (arg[0] === null || val.length >= arg[0]) && (arg[1] === null || val.length <= arg[1]);\r\n\t\t},\r\n\r\n\t\temail: function(elem, arg, val) {\r\n\t\t\treturn (/^(\"([ !#-[\\]-~]|\\\\[ -~])+\"|[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*)@([0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)+[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?$/i).test(val);\r\n\t\t},\r\n\r\n\t\turl: function(elem, arg, val, value) {\r\n\t\t\tif (!(/^[a-z\\d+.-]+:/).test(val)) {\r\n\t\t\t\tval = 'http://' + val;\r\n\t\t\t}\r\n\t\t\tif ((/^https?:\\/\\/((([-_0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]+\\.)*[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)?[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[[0-9a-f:]{3,39}\\])(:\\d{1,5})?(\\/\\S*)?$/i).test(val)) {\r\n\t\t\t\tvalue.value = val;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tregexp: function(elem, arg, val) {\r\n\t\t\tvar parts = typeof arg === 'string' ? arg.match(/^\\/(.*)\\/([imu]*)$/) : false;\r\n\t\t\ttry {\r\n\t\t\t\treturn parts && (new RegExp(parts[1], parts[2].replace('u', ''))).test(val);\r\n\t\t\t} catch (e) {} // eslint-disable-line no-empty\r\n\t\t},\r\n\r\n\t\tpattern: function(elem, arg, val, value, caseInsensitive) {\r\n\t\t\tif (typeof arg !== 'string') {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar regExp = new RegExp('^(?:' + arg + ')$', caseInsensitive ? 'ui' : 'u');\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tregExp = new RegExp('^(?:' + arg + ')$', caseInsensitive ? 'i' : '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (window.FileList && val instanceof FileList) {\r\n\t\t\t\t\tfor (var i = 0; i < val.length; i++) {\r\n\t\t\t\t\t\tif (!regExp.test(val[i].name)) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn regExp.test(val);\r\n\t\t\t} catch (e) {} // eslint-disable-line no-empty\r\n\t\t},\r\n\r\n\t\tpatternCaseInsensitive: function(elem, arg, val) {\r\n\t\t\treturn Nette.validators.pattern(elem, arg, val, null, true);\r\n\t\t},\r\n\r\n\t\tinteger: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number' && elem.validity.badInput) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn (/^-?[0-9]+$/).test(val);\r\n\t\t},\r\n\r\n\t\t'float': function(elem, arg, val, value) {\r\n\t\t\tif (elem.type === 'number' && elem.validity.badInput) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tval = val.replace(/ +/g, '').replace(/,/g, '.');\r\n\t\t\tif ((/^-?[0-9]*\\.?[0-9]+$/).test(val)) {\r\n\t\t\t\tvalue.value = val;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tmin: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.rangeUnderflow) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn arg === null || parseFloat(val) >= arg;\r\n\t\t},\r\n\r\n\t\tmax: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.rangeOverflow) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn arg === null || parseFloat(val) <= arg;\r\n\t\t},\r\n\r\n\t\trange: function(elem, arg, val) {\r\n\t\t\tif (elem.type === 'number') {\r\n\t\t\t\tif (elem.validity.rangeUnderflow || elem.validity.rangeOverflow) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else if (elem.validity.badInput) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Nette.isArray(arg) ?\r\n\t\t\t\t((arg[0] === null || parseFloat(val) >= arg[0]) && (arg[1] === null || parseFloat(val) <= arg[1])) : null;\r\n\t\t},\r\n\r\n\t\tsubmitted: function(elem) {\r\n\t\t\treturn elem.form['nette-submittedBy'] === elem;\r\n\t\t},\r\n\r\n\t\tfileSize: function(elem, arg, val) {\r\n\t\t\tif (window.FileList) {\r\n\t\t\t\tfor (var i = 0; i < val.length; i++) {\r\n\t\t\t\t\tif (val[i].size > arg) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\timage: function (elem, arg, val) {\r\n\t\t\tif (window.FileList && val instanceof window.FileList) {\r\n\t\t\t\tfor (var i = 0; i < val.length; i++) {\r\n\t\t\t\t\tvar type = val[i].type;\r\n\t\t\t\t\tif (type && type !== 'image/gif' && type !== 'image/png' && type !== 'image/jpeg') {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t'static': function (elem, arg) {\r\n\t\t\treturn arg;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Process all toggles in form.\r\n\t */\r\n\tNette.toggleForm = function(form, elem) {\r\n\t\tvar i;\r\n\t\tNette.toggles = {};\r\n\t\tfor (i = 0; i < form.elements.length; i++) {\r\n\t\t\tif (form.elements[i].tagName.toLowerCase() in {input: 1, select: 1, textarea: 1, button: 1}) {\r\n\t\t\t\tNette.toggleControl(form.elements[i], null, null, !elem);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i in Nette.toggles) {\r\n\t\t\tNette.toggle(i, Nette.toggles[i], elem);\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Process toggles on form element.\r\n\t */\r\n\tNette.toggleControl = function(elem, rules, success, firsttime, value) {\r\n\t\trules = rules || Nette.parseJSON(elem.getAttribute('data-nette-rules'));\r\n\t\tvalue = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value;\r\n\r\n\t\tvar has = false,\r\n\t\t\thandled = [],\r\n\t\t\thandler = function () {\r\n\t\t\t\tNette.toggleForm(elem.form, elem);\r\n\t\t\t},\r\n\t\t\tcurSuccess;\r\n\r\n\t\tfor (var id = 0, len = rules.length; id < len; id++) {\r\n\t\t\tvar rule = rules[id],\r\n\t\t\t\top = rule.op.match(/(~)?([^?]+)/),\r\n\t\t\t\tcurElem = rule.control ? elem.form.elements.namedItem(rule.control) : elem;\r\n\r\n\t\t\tif (!curElem) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tcurSuccess = success;\r\n\t\t\tif (success !== false) {\r\n\t\t\t\trule.neg = op[1];\r\n\t\t\t\trule.op = op[2];\r\n\t\t\t\tvar curValue = elem === curElem ? value : {value: Nette.getEffectiveValue(curElem)};\r\n\t\t\t\tcurSuccess = Nette.validateRule(curElem, rule.op, rule.arg, curValue);\r\n\t\t\t\tif (curSuccess === null) {\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t} else if (rule.neg) {\r\n\t\t\t\t\tcurSuccess = !curSuccess;\r\n\t\t\t\t}\r\n\t\t\t\tif (!rule.rules) {\r\n\t\t\t\t\tsuccess = curSuccess;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ((rule.rules && Nette.toggleControl(elem, rule.rules, curSuccess, firsttime, value)) || rule.toggle) {\r\n\t\t\t\thas = true;\r\n\t\t\t\tif (firsttime) {\r\n\t\t\t\t\tvar oldIE = !document.addEventListener, // IE < 9\r\n\t\t\t\t\t\tname = curElem.tagName ? curElem.name : curElem[0].name,\r\n\t\t\t\t\t\tels = curElem.tagName ? curElem.form.elements : curElem;\r\n\r\n\t\t\t\t\tfor (var i = 0; i < els.length; i++) {\r\n\t\t\t\t\t\tif (els[i].name === name && !Nette.inArray(handled, els[i])) {\r\n\t\t\t\t\t\t\tNette.addEvent(els[i], oldIE && els[i].type in {checkbox: 1, radio: 1} ? 'click' : 'change', handler);\r\n\t\t\t\t\t\t\thandled.push(els[i]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (var id2 in rule.toggle || []) {\r\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(rule.toggle, id2)) {\r\n\t\t\t\t\t\tNette.toggles[id2] = Nette.toggles[id2] || (rule.toggle[id2] ? curSuccess : !curSuccess);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn has;\r\n\t};\r\n\r\n\r\n\tNette.parseJSON = function(s) {\r\n\t\treturn (s || '').substr(0, 3) === '{op'\r\n\t\t\t? eval('[' + s + ']') // backward compatibility with Nette 2.0.x\r\n\t\t\t: JSON.parse(s || '[]');\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Displays or hides HTML element.\r\n\t */\r\n\tNette.toggle = function(id, visible, srcElement) { // eslint-disable-line no-unused-vars\r\n\t\tvar elem = document.getElementById(id);\r\n\t\tif (elem) {\r\n\t\t\telem.style.display = visible ? '' : 'none';\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Setup handlers.\r\n\t */\r\n\tNette.initForm = function(form) {\r\n\t\tNette.toggleForm(form);\r\n\r\n\t\tif (form.noValidate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tform.noValidate = true;\r\n\r\n\t\tNette.addEvent(form, 'submit', function(e) {\r\n\t\t\tif (!Nette.validateForm(form)) {\r\n\t\t\t\tif (e && e.stopPropagation) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t} else if (window.event) {\r\n\t\t\t\t\tevent.cancelBubble = true;\r\n\t\t\t\t\tevent.returnValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tNette.initOnLoad = function() {\r\n\t\tNette.addEvent(document, 'DOMContentLoaded', function() {\r\n\t\t\tfor (var i = 0; i < document.forms.length; i++) {\r\n\t\t\t\tvar form = document.forms[i];\r\n\t\t\t\tfor (var j = 0; j < form.elements.length; j++) {\r\n\t\t\t\t\tif (form.elements[j].getAttribute('data-nette-rules')) {\r\n\t\t\t\t\t\tNette.initForm(form);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tNette.addEvent(document.body, 'click', function(e) {\r\n\t\t\t\tvar target = e.target || e.srcElement;\r\n\t\t\t\twhile (target) {\r\n\t\t\t\t\tif (target.form && target.type in {submit: 1, image: 1}) {\r\n\t\t\t\t\t\ttarget.form['nette-submittedBy'] = target;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttarget = target.parentNode;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Determines whether the argument is an array.\r\n\t */\r\n\tNette.isArray = function(arg) {\r\n\t\treturn Object.prototype.toString.call(arg) === '[object Array]';\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Search for a specified value within an array.\r\n\t */\r\n\tNette.inArray = function(arr, val) {\r\n\t\tif ([].indexOf) {\r\n\t\t\treturn arr.indexOf(val) > -1;\r\n\t\t} else {\r\n\t\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\t\tif (arr[i] === val) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Converts string to web safe characters [a-z0-9-] text.\r\n\t */\r\n\tNette.webalize = function(s) {\r\n\t\ts = s.toLowerCase();\r\n\t\tvar res = '', i, ch;\r\n\t\tfor (i = 0; i < s.length; i++) {\r\n\t\t\tch = Nette.webalizeTable[s.charAt(i)];\r\n\t\t\tres += ch ? ch : s.charAt(i);\r\n\t\t}\r\n\t\treturn res.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\r\n\t};\r\n\r\n\tNette.webalizeTable = {\\u00e1: 'a', \\u00e4: 'a', \\u010d: 'c', \\u010f: 'd', \\u00e9: 'e', \\u011b: 'e', \\u00ed: 'i', \\u013e: 'l', \\u0148: 'n', \\u00f3: 'o', \\u00f4: 'o', \\u0159: 'r', \\u0161: 's', \\u0165: 't', \\u00fa: 'u', \\u016f: 'u', \\u00fd: 'y', \\u017e: 'z'};\r\n\r\n\treturn Nette;\r\n}));\r\n","_context.invoke('Nittro.Forms', function () {\n\n if (!window.Nette || !window.Nette.validators) {\n throw new Error('netteForms.js asset from Nette/Forms has not been loaded');\n }\n\n _context.register(window.Nette, 'Vendor');\n\n});\n","_context.invoke('Nittro.Forms', function(undefined) {\n\n var FormData = _context.extend(function() {\n this._ = {\n dataStorage: [],\n upload: false\n };\n }, {\n append: function(name, value) {\n if (value === undefined || value === null) {\n return this;\n\n }\n\n if (this._isFile(value)) {\n this._.upload = true;\n\n } else if (typeof value === 'object' && 'valueOf' in value && /string|number|boolean/.test(typeof value.valueOf()) && !arguments[2]) {\n return this.append(name, value.valueOf(), true);\n\n } else if (!/string|number|boolean/.test(typeof value)) {\n throw new Error('Only scalar values and File/Blob objects can be appended to FormData, ' + (typeof value) + ' given');\n\n }\n\n this._.dataStorage.push({ name: name, value: value });\n\n return this;\n\n },\n\n isUpload: function() {\n return this._.upload;\n\n },\n\n _isFile: function(value) {\n return window.File !== undefined && value instanceof window.File || window.Blob !== undefined && value instanceof window.Blob;\n\n },\n\n mergeData: function(data) {\n for (var i = 0; i < data.length; i++) {\n this.append(data[i].name, data[i].value);\n\n }\n\n return this;\n\n },\n\n exportData: function(forcePlain) {\n if (!forcePlain && this.isUpload() && window.FormData !== undefined) {\n var fd = new window.FormData(),\n i;\n\n for (i = 0; i < this._.dataStorage.length; i++) {\n if (typeof this._.dataStorage[i].value === 'boolean') {\n fd.append(this._.dataStorage[i].name, this._.dataStorage[i].value ? 1 : 0);\n } else {\n fd.append(this._.dataStorage[i].name, this._.dataStorage[i].value);\n }\n }\n\n return fd;\n\n } else {\n return this._.dataStorage.filter(function(e) {\n return !this._isFile(e.value);\n\n }, this);\n\n }\n }\n });\n\n _context.register(FormData, 'FormData');\n\n});\n","_context.invoke('Nittro.Forms', function (DOM, Arrays, DateTime, FormData, Vendor, undefined) {\n\n var FileList = window.FileList || function() {};\n\n var Form = _context.extend('Nittro.Object', function (form) {\n Form.Super.call(this);\n\n this._.submittedBy = null;\n this._.inLiveValidation = false;\n this._.errorRenderer = null;\n this._handleSubmit = this._handleSubmit.bind(this);\n this._handleReset = this._handleReset.bind(this);\n\n this.setElement(form);\n\n this.on('error:default', this._handleError.bind(this));\n this.on('blur:default', this._handleBlur.bind(this));\n\n }, {\n setErrorRenderer: function (renderer) {\n this._.errorRenderer = renderer;\n },\n\n setElement: function (form) {\n if (typeof form === 'string') {\n form = DOM.getById(form);\n }\n\n if (!form || !(form instanceof HTMLFormElement)) {\n throw new TypeError('Invalid argument, must be a HTMLFormElement');\n }\n\n this._.form = form;\n this._.form.noValidate = 'novalidate';\n this._.validationMode = DOM.getData(form, 'validation-mode');\n\n if (this._.submittedBy) {\n this._.form['nette-submittedBy'] = this.getElement(this._.submittedBy);\n }\n\n DOM.addListener(this._.form, 'submit', this._handleSubmit);\n DOM.addListener(this._.form, 'reset', this._handleReset);\n\n return this;\n },\n\n getElement: function (name) {\n return name ? this._.form.elements.namedItem(name) : this._.form;\n },\n\n getElements: function () {\n return this._.form.elements;\n },\n\n setSubmittedBy: function (value) {\n if (value) {\n this._.submittedBy = value;\n this._.form['nette-submittedBy'] = this.getElement(value);\n } else {\n this._.submittedBy = this._.form['nette-submittedBy'] = null;\n }\n\n return this;\n },\n\n validate: function (sender) {\n this._.errorRenderer.cleanupErrors(this._.form);\n\n if (!Vendor.validateForm(sender || this._.form)) {\n return false;\n }\n\n var evt = this.trigger('validate', {\n sender: sender\n });\n\n return !evt.isDefaultPrevented();\n },\n\n setValues: function (values, reset) {\n var names = this._getFieldNames(),\n name, value, i;\n\n values || (values = {});\n\n for (i = 0; i < names.length; i++) {\n name = names[i];\n value = undefined;\n\n if (name.indexOf('[') > -1) {\n value = values;\n\n name.replace(/]/g, '').split(/\\[/g).some(function (key) {\n if (key === '') {\n return true;\n } else if (!(key in value)) {\n value = undefined;\n return true;\n } else {\n value = value[key];\n return false;\n }\n });\n } else if (name in values) {\n value = values[name];\n }\n\n if (value === undefined) {\n if (reset) {\n value = null;\n } else {\n continue;\n }\n }\n\n this.setValue(name, value);\n }\n },\n\n setValue: function (elem, value) {\n if (typeof elem === 'string') {\n elem = this._.form.elements.namedItem(elem);\n }\n\n var i,\n toStr = function(v) { return '' + v; };\n\n if (!elem) {\n throw new TypeError('Invalid argument to setValue(), must be (the name of) an existing form element');\n } else if (!elem.tagName) {\n if ('length' in elem) {\n for (i = 0; i < elem.length; i++) {\n this.setValue(elem[i], value);\n }\n }\n } else if (elem.type === 'radio') {\n elem.checked = value !== null && elem.value === toStr(value);\n } else if (elem.type === 'file') {\n if (value === null) {\n value = elem.parentNode.innerHTML;\n DOM.html(elem.parentNode, value);\n }\n } else if (elem.tagName.toLowerCase() === 'select') {\n var single = elem.type === 'select-one',\n arr = Array.isArray(value),\n v;\n\n if (arr) {\n value = value.map(toStr);\n } else {\n value = toStr(value);\n }\n\n for (i = 0; i < elem.options.length; i++) {\n v = arr ? value.indexOf(elem.options.item(i).value) > -1 : value === elem.options.item(i).value;\n elem.options.item(i).selected = v;\n\n if (v && single) {\n break;\n }\n }\n } else if (elem.type === 'checkbox') {\n elem.checked = Array.isArray(value) ? value.map(toStr).indexOf(elem.value) > -1 : !!value;\n } else if (elem.type === 'date') {\n elem.value = value ? DateTime.from(value).format('Y-m-d') : '';\n } else if (elem.type === 'datetime-local' || elem.type === 'datetime') {\n elem.value = value ? DateTime.from(value).format('Y-m-d\\\\TH:i:s') : '';\n } else {\n elem.value = value !== null ? toStr(value) : '';\n }\n\n return this;\n },\n\n getValue: function (name) {\n return Vendor.getEffectiveValue(this.getElement(name));\n },\n\n serialize: function () {\n var elem, i,\n data = new FormData(),\n names = this._getFieldNames(true),\n value;\n\n if (this._.submittedBy) {\n names.push(this._.submittedBy);\n }\n\n for (i = 0; i < names.length; i++) {\n elem = this._.form.elements.namedItem(names[i]);\n value = Vendor.getEffectiveValue(elem);\n\n if (Array.isArray(value) || value instanceof FileList) {\n for (var j = 0; j < value.length; j++) {\n data.append(names[i], value[j]);\n }\n } else {\n data.append(names[i], value);\n }\n }\n\n this.trigger('serialize', data);\n\n return data;\n },\n\n submit: function (by) {\n if (by) {\n var btn = this._.form.elements.namedItem(by);\n\n if (btn && btn.type === 'submit') {\n DOM.trigger(btn, 'click');\n } else {\n throw new TypeError('Unknown element or not a submit button: ' + by);\n }\n } else {\n DOM.trigger(this._.form, 'submit');\n }\n\n return this;\n },\n\n reset: function () {\n this._.form.reset();\n return this;\n },\n\n destroy: function () {\n this.trigger('destroy');\n this.off();\n DOM.removeListener(this._.form, 'submit', this._handleSubmit);\n DOM.removeListener(this._.form, 'reset', this._handleReset);\n this._.form = null;\n },\n\n _handleSubmit: function (evt) {\n if (this.trigger('submit').isDefaultPrevented()) {\n evt.preventDefault();\n return;\n }\n\n var sender = this._.submittedBy ? this.getElement(this._.submittedBy) : null;\n\n if (!this.validate(sender)) {\n evt.preventDefault();\n }\n },\n\n _handleReset: function (evt) {\n if (evt.target !== this._.form) {\n return;\n }\n\n var elem, i;\n\n for (i = 0; i < this._.form.elements.length; i++) {\n elem = this._.form.elements.item(i);\n\n if (elem.type === 'hidden' && elem.hasAttribute('data-default-value')) {\n this.setValue(elem, DOM.getData(elem, 'default-value'));\n } else if (elem.type === 'file') {\n this.setValue(elem, null);\n }\n }\n\n this._.submittedBy = this._.form['nette-submittedBy'] = null;\n\n this.trigger('reset');\n },\n\n _handleError: function (evt) {\n this._.errorRenderer && this._.errorRenderer.addError(this._.form, evt.data.element, evt.data.message);\n\n if (!this._.inLiveValidation && evt.data.element && typeof evt.data.element.focus === 'function') {\n evt.data.element.focus();\n }\n },\n\n _handleBlur: function (evt) {\n this._.errorRenderer && this._.errorRenderer.cleanupErrors(this._.form, evt.data.element);\n\n if (DOM.getData(evt.data.element, 'validation-mode', this._.validationMode) === 'live') {\n this._.inLiveValidation = true;\n Vendor.validateControl(evt.data.element);\n this._.inLiveValidation = false;\n }\n },\n\n _getFieldNames: function (enabledOnly) {\n var elem, i,\n names = [];\n\n for (i = 0; i < this._.form.elements.length; i++) {\n elem = this._.form.elements.item(i);\n\n if (elem.name && (!enabledOnly || !elem.disabled) && names.indexOf(elem.name) === -1 && !(elem.type in {submit: 1, button: 1, reset: 1})) {\n names.push(elem.name);\n }\n }\n\n return names;\n }\n });\n\n _context.register(Form, 'Form');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n DateTime: 'Utils.DateTime'\n});\n","_context.invoke('Nittro.Forms', function (Form, Vendor, DOM, Arrays) {\n\n var anonId = 0;\n\n var Locator = _context.extend('Nittro.Object', function (formErrorRenderer) {\n this._ = {\n errorRenderer: formErrorRenderer || null,\n registry: {}\n };\n\n Vendor.addError = this._forwardError.bind(this);\n DOM.addListener(document, 'blur', this._handleBlur.bind(this), true);\n\n }, {\n getForm: function (id) {\n var elem;\n\n if (typeof id !== 'string') {\n elem = id;\n\n if (!elem.getAttribute('id')) {\n elem.setAttribute('id', 'frm-anonymous' + (++anonId));\n }\n\n id = elem.getAttribute('id');\n\n }\n\n if (!(id in this._.registry)) {\n this._.registry[id] = new Form(elem || id);\n this._.registry[id].setErrorRenderer(this._.errorRenderer);\n this.trigger('form-added', { form: this._.registry[id] });\n }\n\n return this._.registry[id];\n\n },\n\n removeForm: function (id) {\n if (typeof id !== 'string') {\n id = id.getAttribute('id');\n }\n\n if (id in this._.registry) {\n this.trigger('form-removed', { form: this._.registry[id] });\n this._.registry[id].destroy();\n delete this._.registry[id];\n }\n },\n\n refreshForms: function () {\n var elem, id;\n\n for (id in this._.registry) {\n if (this._.registry.hasOwnProperty(id)) {\n elem = DOM.getById(id);\n\n if (elem) {\n if (elem !== this._.registry[id].getElement()) {\n this._.registry[id].setElement(elem);\n }\n } else {\n this.removeForm(id);\n }\n }\n }\n\n Arrays.createFrom(document.getElementsByTagName('form'))\n .forEach(this.getForm.bind(this));\n },\n\n _forwardError: function (elem, msg) {\n this.getForm(elem.form).trigger('error', {element: elem, message: msg});\n },\n\n _handleBlur: function (evt) {\n if (evt.target.form && evt.target.form instanceof HTMLFormElement) {\n this.getForm(evt.target.form).trigger('blur', { element: evt.target });\n }\n }\n });\n\n _context.register(Locator, 'Locator');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Forms', function (DOM) {\n\n var DefaultErrorRenderer = _context.extend(function () {\n\n }, {\n addError: function (form, element, message) {\n var container = this._getErrorContainer(form, element),\n elem;\n\n if (container) {\n if (element && element.parentNode === container) {\n elem = DOM.create('span', {'class': 'error'});\n } else {\n elem = DOM.create(container.tagName.match(/^(ul|ol)$/i) ? 'li' : 'p', {'class': 'error'});\n }\n\n elem.textContent = message;\n container.appendChild(elem);\n }\n },\n\n cleanupErrors: function (form, element) {\n var container = element ? this._getErrorContainer(form, element) : form;\n\n if (container) {\n DOM.getByClassName('error', container)\n .forEach(function (elem) {\n elem.parentNode.removeChild(elem);\n });\n }\n },\n\n _getErrorContainer: function (form, elem) {\n var container = elem && elem.id ? DOM.getById(elem.id + '-errors') : null;\n return container || DOM.getById(form.id + '-errors') || (elem ? elem.parentNode : null);\n }\n });\n\n _context.register(DefaultErrorRenderer, 'DefaultErrorRenderer');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Flashes', function (DOM) {\n\n var Helpers = {\n hasFixedParent: function (elem) {\n do {\n if (DOM.getStyle(elem, 'position', false) === 'fixed') return true;\n elem = elem.offsetParent;\n\n } while (elem && elem !== document.documentElement && elem !== document.body);\n\n return false;\n\n },\n\n getRect: function (elem) {\n var rect = elem.getBoundingClientRect();\n\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: 'width' in rect ? rect.width : (rect.right - rect.left),\n height: 'height' in rect ? rect.height : (rect.bottom - rect.top)\n };\n },\n\n tryFloatingPosition: function (elem, target, placement, positioner) {\n DOM.addClass(elem, 'nittro-flash-floating');\n DOM.setStyle(elem, {\n position: 'absolute',\n opacity: 0\n });\n\n var fixed = Helpers.hasFixedParent(target),\n elemRect = Helpers.getRect(elem),\n targetRect = Helpers.getRect(target),\n style = {},\n order = positioner.getDefaultOrder(),\n force = false,\n position;\n\n if (fixed) {\n style.position = 'fixed';\n\n }\n\n if (placement) {\n var m = placement.match(/^(.+?)(!)?(!)?$/);\n\n if (!positioner.supports(m[1])) {\n throw new Error(\"Placement '\" + m[1] + \"' isn't supported\");\n }\n\n force = !!m[3];\n order = m[2] ? [m[1]] : [m[1]].concat(order);\n }\n\n for (var i = 0; i < order.length; i++) {\n placement = order[i];\n\n if (position = positioner[placement].call(positioner, targetRect, elemRect, force)) {\n break;\n }\n }\n\n if (position) {\n style.left = position.left;\n style.top = position.top;\n\n if (!fixed) {\n style.left += window.pageXOffset;\n style.top += window.pageYOffset;\n }\n\n style.left += 'px';\n style.top += 'px';\n style.opacity = '';\n\n DOM.setStyle(elem, style);\n return placement;\n\n } else {\n DOM.removeClass(elem, 'nittro-flash-floating');\n DOM.setStyle(elem, {\n position: '',\n opacity: ''\n });\n\n return null;\n }\n }\n };\n\n _context.register(Helpers, 'Helpers');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Flashes', function (DOM, Arrays, CSSTransitions, Helpers) {\n\n var Message = _context.extend('Nittro.Object', function (service, content, options) {\n Message.Super.call(this);\n\n this._doDismiss = this._doDismiss.bind(this);\n\n this._.service = service;\n this._.options = Arrays.mergeTree({}, Message.defaults, options);\n this._.visible = false;\n\n if (this._.service === null) {\n this._.elem = content;\n this._.visible = true;\n this._normalizeDismissTime();\n this._scheduleDismiss();\n return;\n }\n\n var target = this._getTarget(),\n tag = 'div';\n\n if (target) {\n this._.options.classes === null && (this._.options.classes = DOM.getData(target, 'flash-classes'));\n this._.options.inline === null && (this._.options.inline = DOM.getData(target, 'flash-inline'));\n this._.options.rich === null && (this._.options.rich = DOM.getData(target, 'flash-rich'));\n\n if (this._.options.inline) {\n tag = target.tagName.match(/^(?:ul|ol)$/i) ? 'li' : 'p';\n }\n } else {\n this._.options.inline = false;\n }\n\n this._.elem = DOM.create(tag, {\n 'class': 'nittro-flash nittro-flash-' + this._.options.type,\n 'data-flash-dynamic': 'true'\n });\n\n if (this._.options.classes) {\n DOM.addClass(this._.elem, this._.options.classes.replace(/%type%/g, this._.options.type));\n }\n\n if (this._.options.rich) {\n DOM.html(this._.elem, content);\n } else {\n DOM.addClass(this._.elem, 'nittro-flash-plain');\n this._.elem.textContent = content;\n }\n\n this._normalizeDismissTime();\n }, {\n STATIC: {\n wrap: function (elem) {\n return new Message(null, elem);\n },\n defaults: {\n type: 'info',\n target: null,\n classes: null,\n inline: null,\n placement: null,\n rich: null,\n dismiss: null\n }\n },\n\n getElement: function () {\n return this._.elem;\n },\n\n show: function () {\n if (this._.visible !== false) {\n return Promise.resolve(this);\n }\n\n this._.visible = null;\n\n var target = this._getTarget();\n\n if (target) {\n if (this._.options.inline) {\n target.appendChild(this._.elem);\n return this._show('inline');\n } else {\n this._.service.getLayer().appendChild(this._.elem);\n\n var placement = Helpers.tryFloatingPosition(this._.elem, target, this._.options.placement, this._.service.getPositioner());\n\n if (placement) {\n return this._show(placement);\n }\n }\n }\n\n this._.service.getGlobalHolder().appendChild(this._.elem);\n return this._show('global');\n },\n\n hide: function () {\n if (this._.visible !== true) {\n return Promise.resolve(this);\n }\n\n this._.visible = null;\n\n DOM.addClass(this._.elem, 'nittro-flash-hide');\n this.trigger('hide');\n\n return CSSTransitions.run(this._.elem).then(function () {\n this._.visible = false;\n this._.elem.parentNode.removeChild(this._.elem);\n DOM.removeClass(this._.elem, 'nittro-flash-hide');\n this.trigger('hidden');\n return this;\n }.bind(this));\n },\n\n dismiss: function () {\n return this.hide().then(function () {\n this.off();\n this._.elem = this._.options = this._.service = null;\n }.bind(this));\n },\n\n _show: function (placement) {\n DOM.toggleClass(this._.elem, 'nittro-flash-prepare nittro-flash-' + placement, true);\n this.trigger('show');\n this.one('hidden', function() { DOM.toggleClass(this._.elem, 'nittro-flash-' + placement, false); });\n\n return CSSTransitions.run(this._.elem, {remove: 'nittro-flash-prepare'}, true).then(function () {\n this._.visible = true;\n this.trigger('shown');\n this._scheduleDismiss();\n return this;\n }.bind(this));\n },\n\n _normalizeDismissTime: function () {\n if (this._.options.dismiss !== false) {\n if (typeof this._.options.dismiss !== 'number') {\n this._.options.dismiss = Math.max(5000, Math.round(this._.elem.textContent.split(/\\s+/).length / 0.003));\n }\n }\n },\n\n _scheduleDismiss: function () {\n if (this._.options.dismiss === false) {\n return;\n }\n\n DOM.addListener(document, 'mousemove', this._doDismiss);\n DOM.addListener(document, 'mousedown', this._doDismiss);\n DOM.addListener(document, 'keydown', this._doDismiss);\n DOM.addListener(document, 'touchstart', this._doDismiss);\n },\n\n _doDismiss: function () {\n DOM.removeListener(document, 'mousemove', this._doDismiss);\n DOM.removeListener(document, 'mousedown', this._doDismiss);\n DOM.removeListener(document, 'keydown', this._doDismiss);\n DOM.removeListener(document, 'touchstart', this._doDismiss);\n\n window.setTimeout(this.dismiss.bind(this), this._.options.dismiss);\n },\n\n _getTarget: function () {\n return typeof this._.options.target === 'string' ? DOM.getById(this._.options.target) : this._.options.target;\n }\n });\n\n _context.register(Message, 'Message');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n CSSTransitions: 'Utils.CSSTransitions'\n});\n","_context.invoke('Nittro.Flashes', function () {\n\n var DefaultPositioner = _context.extend(function (margin, defaultOrder) {\n this._ = {\n margin: typeof margin === 'number' ? margin : 20,\n defaultOrder: defaultOrder || 'above,rightOf,below,leftOf'\n };\n\n if (typeof this._.defaultOrder === 'string') {\n this._.defaultOrder = this._.defaultOrder.split(/\\s*,\\s*/g);\n }\n }, {\n supports: function (placement) {\n return placement === 'above' || placement === 'below' || placement === 'leftOf' || placement === 'rightOf';\n },\n\n getDefaultOrder: function () {\n return this._.defaultOrder;\n },\n\n above: function (target, elem, force) {\n var res = {\n left: target.left + (target.width - elem.width) / 2,\n top: target.top - elem.height\n };\n\n if (force || res.left > this._.margin && res.left + elem.width < window.innerWidth - this._.margin && res.top > this._.margin && res.top + elem.height < window.innerHeight - this._.margin) {\n return res;\n\n }\n },\n below: function(target, elem, force) {\n var res = {\n left: target.left + (target.width - elem.width) / 2,\n top: target.bottom\n };\n\n if (force || res.left > this._.margin && res.left + elem.width < window.innerWidth - this._.margin && res.top + elem.height < window.innerHeight - this._.margin && res.top > this._.margin) {\n return res;\n\n }\n },\n leftOf: function (target, elem, force) {\n var res = {\n left: target.left - elem.width,\n top: target.top + (target.height - elem.height) / 2\n };\n\n if (force || res.top > this._.margin && res.top + elem.height < window.innerHeight - this._.margin && res.left > this._.margin && res.left + elem.width < window.innerWidth - this._.margin) {\n return res;\n\n }\n },\n rightOf: function (target, elem, force) {\n var res = {\n left: target.right,\n top: target.top + (target.height - elem.height) / 2\n };\n\n if (force || res.top > this._.margin && res.top + elem.height < window.innerHeight - this._.margin && res.left + elem.width < window.innerWidth - this._.margin && res.left > this._.margin) {\n return res;\n\n }\n }\n });\n\n\n _context.register(DefaultPositioner, 'DefaultPositioner');\n\n});\n","_context.invoke('Nittro.Flashes', function (Message, DOM, Arrays) {\n\n var Service = _context.extend(function (positioner, options) {\n this._ = {\n positioner: positioner,\n options: Arrays.mergeTree({}, Service.defaults, options),\n globalHolder: DOM.create('div', {'class': 'nittro-flash-global-holder'})\n };\n\n if (typeof this._.options.layer === 'string') {\n this._.options.layer = DOM.getById(this._.options.layer);\n } else if (!this._.options.layer) {\n this._.options.layer = document.body;\n }\n\n this._.options.layer.appendChild(this._.globalHolder);\n\n if (!this._.options.classes) {\n this._.options.classes = DOM.getData(this._.options.layer, 'flash-classes');\n }\n\n Message.defaults.classes = this._.options.classes;\n\n this._removeStatic();\n }, {\n STATIC: {\n defaults: {\n layer: null,\n classes: null\n }\n },\n\n create: function (content, options) {\n return new Message(this, content, options);\n },\n\n add: function (content, type, target, rich) {\n var options;\n\n if (type && typeof type === 'object') {\n options = type;\n } else {\n options = {\n type: type || 'info',\n target: target,\n rich: rich\n };\n }\n\n return this.create(content, options).show();\n },\n\n getGlobalHolder: function () {\n return this._.globalHolder;\n },\n\n getLayer: function () {\n return this._.options.layer;\n },\n\n getPositioner: function () {\n return this._.positioner;\n },\n\n _removeStatic: function () {\n DOM.getByClassName('nittro-flash')\n .forEach(function (elem) {\n if (!DOM.getData(elem, 'flash-dynamic')) {\n Message.wrap(elem);\n }\n }.bind(this));\n }\n });\n\n _context.register(Service, 'Service');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n CSSTransitions: 'Utils.CSSTransitions'\n});\n","_context.invoke('Nittro.Routing', function (Strings, Arrays) {\n\n var URLRoute = _context.extend('Nittro.Object', function (mask) {\n URLRoute.Super.call(this);\n this._.mask = this._prepareMask(mask);\n\n }, {\n STATIC: {\n styles: {\n 'int': parseInt,\n 'float': parseFloat,\n 'bool': function(v) { return !v.match(/^(?:0|false|)$/); }\n }\n },\n\n match: function (url) {\n var params = this.tryMatch(url);\n\n if (params) {\n Arrays.mergeTree(params, url.getParams());\n this.trigger('match', params);\n\n }\n },\n\n tryMatch: function (url) {\n var match = this._.mask.pattern.exec(url.getPath().replace(/^\\/|\\/$/g, ''));\n\n if (!match) {\n return null;\n\n }\n\n var params = {},\n i, n, p, v;\n\n match.shift();\n\n for (i = 0, n = this._.mask.map.length; i < n; i++) {\n p = this._.mask.map[i];\n v = decodeURIComponent(match[i]);\n\n if (p.style) {\n params[p.name] = URLRoute.styles[p.style].call(null, v);\n\n } else {\n params[p.name] = v;\n\n }\n }\n\n return params;\n\n },\n\n _prepareMask: function (mask) {\n var reTop = /^([<\\[\\]\\(])|^([^<\\[\\]\\(]+)/,\n reParam = /^([^ #>]+)(?: +([^ #>]+))?(?: +#([^ >]+))? *>/,\n reParen = /\\((?!\\?:)/g,\n reOptional = /^\\?:/,\n match, param,\n map = [],\n pattern = ['^'];\n\n mask = mask.replace(/^\\/|\\/$/g, '');\n\n while (mask.length) {\n match = reTop.exec(mask);\n\n if (!match) {\n throw new Error('Invalid mask, error near ' + mask.substr(0, 10));\n\n }\n\n mask = mask.substr(match[0].length);\n\n if (match[1] === '<') {\n param = reParam.exec(mask);\n\n if (!param) {\n throw new Error('Invalid mask, error near ' + mask.substr(0, 10));\n\n }\n\n mask = mask.substr(param[0].length);\n\n if (param[2]) {\n param[2] = param[2].replace(reParen, '(?:');\n\n } else {\n param[2] = '[^/]+';\n\n }\n\n pattern.push('(', param[2], ')');\n\n if (param[3] && !(param[3] in URLRoute.styles)) {\n throw new Error('Unknown parameter style: ' + param[3]);\n\n }\n\n map.push({\n name: param[1],\n style: param[3] || null\n });\n\n } else if (match[1] === '[') {\n pattern.push('(?:');\n\n } else if (match[1] === ']') {\n pattern.push(')?');\n\n } else if (match[1] === '(') {\n pattern.push(reOptional.test(mask) ? '(' : '(?:');\n\n } else {\n pattern.push(Strings.escapeRegex(match[2]));\n\n }\n }\n\n pattern.push('$');\n\n return {\n pattern: new RegExp(pattern.join('')),\n map: map\n };\n }\n });\n\n _context.register(URLRoute, 'URLRoute');\n\n}, {\n Strings: 'Utils.Strings',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Routing', function (DOM) {\n\n var DOMRoute = _context.extend('Nittro.Object', function (selector) {\n DOMRoute.Super.call(this);\n this._.selector = selector;\n\n }, {\n match: function () {\n var matches = DOM.find(this._.selector);\n\n if (matches.length) {\n this.trigger('match', matches);\n\n }\n }\n });\n\n _context.register(DOMRoute, 'DOMRoute');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Routing', function (DOMRoute, URLRoute, Url) {\n\n var Router = _context.extend('Nittro.Object', function (basePath) {\n Router.Super.call(this);\n\n this._.basePath = '/' + basePath.replace(/^\\/|\\/$/g, '');\n this._.routes = {\n dom: {},\n url: {}\n };\n }, {\n getDOMRoute: function (selector) {\n if (!(selector in this._.routes.dom)) {\n this._.routes.dom[selector] = new DOMRoute(selector);\n\n }\n\n return this._.routes.dom[selector];\n\n },\n\n getURLRoute: function (mask) {\n if (!(mask in this._.routes.url)) {\n this._.routes.url[mask] = new URLRoute(mask);\n\n }\n\n return this._.routes.url[mask];\n\n },\n\n matchDOM: function () {\n for (var k in this._.routes.dom) {\n if (this._.routes.dom.hasOwnProperty(k)) {\n this._.routes.dom[k].match();\n\n }\n }\n\n return this;\n },\n\n matchURL: function () {\n var k, url = Url.fromCurrent();\n\n if (url.getPath().substr(0, this._.basePath.length) === this._.basePath) {\n url.setPath(url.getPath().substr(this._.basePath.length));\n\n for (k in this._.routes.url) {\n if (this._.routes.url.hasOwnProperty(k)) {\n this._.routes.url[k].match(url);\n\n }\n }\n }\n\n return this;\n },\n\n matchAll: function () {\n this.matchURL();\n this.matchDOM();\n return this;\n }\n });\n\n _context.register(Router, 'Router');\n\n}, {\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Extras.CheckList', function(DOM, Arrays) {\n\n var CheckList = _context.extend('Nittro.Object', function (options) {\n this._ = {\n options: Arrays.mergeTree({}, CheckList.defaults, options),\n scrolling: false\n };\n\n if (typeof this._.options.container === 'string') {\n this._.options.container = DOM.getById(this._.options.container);\n }\n\n if (typeof this._.options.scroll === 'string') {\n this._.options.scroll = {\n container: this._.options.scroll\n };\n } else if (this._.options.scroll === true) {\n this._.options.scroll = {\n container: null\n };\n }\n\n if (this._.options.scroll) {\n if (!this._.options.scroll.speed) {\n this._.options.scroll.speed = 3;\n }\n\n if (!this._.options.scroll.zoneSize) {\n this._.options.scroll.zoneSize = 0.1;\n }\n }\n\n this._handleMouseDown = this._handleMouseDown.bind(this);\n this._handleClick = this._handleClick.bind(this);\n DOM.addListener(this._.options.container, 'mousedown', this._handleMouseDown);\n DOM.addListener(this._.options.container, 'click', this._handleClick);\n\n }, {\n STATIC: {\n defaults: {\n container: null, // ID or DOM element\n items: null, // null = input[type=\"checkbox\"], string = class name\n target: null, // null = evt.target.control || evt.target, otherwise provide callback which gets passed evt.target\n boundary: 'parent', // null = self, \"parent\" = parent element, other string = tag.class selector for DOM.closest\n horizontal: false,\n scroll: true\n }\n },\n\n destroy: function () {\n DOM.removeListener(this._.options.container, 'mousedown', this._handleMouseDown);\n DOM.removeListener(this._.options.container, 'click', this._handleClick);\n },\n\n _handleClick: function(evt) {\n var target = this._getTarget(evt.target),\n items = this._getItems();\n\n if (items.indexOf(target) !== -1 && !(evt.screenX === 0 && evt.screenY === 0)) {\n // \"click\" with screenX == screenY == 0 is triggered by space press and we want to allow that\n evt.preventDefault();\n }\n },\n\n _handleMouseDown: function (mdevt) {\n var target = this._getTarget(mdevt.target),\n items = this._getItems(),\n start = target ? items.indexOf(target) : -1;\n\n if (start === -1) {\n return;\n }\n\n mdevt.preventDefault();\n\n this.trigger('start', { target: target });\n\n var originalStates = items.map(this._getItemState.bind(this)),\n states,\n state = !originalStates[start],\n pos = this._.options.horizontal ? mdevt.clientX : mdevt.clientY;\n\n this._setItemState(target, state);\n\n states = originalStates.slice();\n states[start] = state;\n\n var handleMove = this._getMoveHandler(items, originalStates, states, start, state, pos);\n\n var end = function (muevt) {\n var endTgt;\n\n if (muevt) {\n muevt.preventDefault();\n endTgt = this._getTarget(muevt.target);\n }\n\n DOM.removeListener(document, 'mousemove', handleMove);\n DOM.removeListener(document, 'mouseup', end);\n this._.scrolling = false;\n\n if (endTgt === target || states.some(function(s, i) { return i !== start && s !== originalStates[i]; })) {\n this.trigger('change');\n\n } else {\n this._setItemState(target, !state);\n\n }\n\n this.trigger('end');\n\n if (endTgt && typeof endTgt.focus === 'function') {\n endTgt.focus();\n }\n }.bind(this);\n\n DOM.addListener(document, 'mousemove', handleMove);\n DOM.addListener(document, 'mouseup', end);\n\n },\n\n _getMoveHandler: function(items, originalStates, states, start, state, prev) {\n var scroll = this._getScrollInfo(),\n boundaryElems = this._getBoundaryElements(items),\n boundaries = this._getBoundaries(boundaryElems, start, scroll.window.offset),\n horiz = this._.options.horizontal,\n pos, offs, coffs,\n n = items.length;\n\n if (scroll.container && scroll.container.offset > 0) {\n boundaries = boundaries.map(function(b) {\n return b + scroll.container.offset;\n });\n }\n\n var check = function(offs) {\n coffs = scroll.container ? scroll.container.offset : 0;\n\n for (var i = 0; i < n; i++) {\n if (i !== start && originalStates[i] !== state) {\n if (i < start && offs < boundaries[i] - coffs || i > start && offs > boundaries[i] - coffs) {\n if (states[i] !== state) {\n this._setItemState(items[i], state);\n states[i] = state;\n\n }\n } else if (states[i] !== !state) {\n this._setItemState(items[i], !state);\n states[i] = !state;\n\n }\n }\n }\n }.bind(this);\n\n return function (evt) {\n evt.preventDefault();\n\n pos = horiz ? evt.clientX : evt.clientY;\n offs = scroll.window.offset + pos;\n check(offs);\n\n if (!this._.scrolling) {\n if (pos < prev && (pos < scroll.window.prevThreshold || scroll.container && offs < scroll.container.prevThreshold)) {\n this._startScrolling(scroll, -1, pos, check);\n } else if (pos > prev && (pos > scroll.window.nextThreshold || scroll.container && offs > scroll.container.nextThreshold)) {\n this._startScrolling(scroll, 1, pos, check);\n }\n } else if (this._.scrolling.direction === -1 ? (pos > prev) : (pos < prev)) {\n this._.scrolling = false;\n } else {\n this._.scrolling.lastMousePosition = pos;\n }\n\n prev = pos;\n\n }.bind(this);\n },\n\n _getTarget: function (target) {\n if (this._.options.target) {\n return this._.options.target.call(null, target);\n } else {\n return target.control || target;\n }\n },\n\n _setItemState: function (item, state) {\n item.checked = state;\n },\n\n _getItemState: function (item) {\n return item.checked;\n },\n\n _getItems: function () {\n if (this._.options.items === null) {\n return Arrays.createFrom(this._.options.container.getElementsByTagName('input'))\n .filter(function(elem) { return elem.type === 'checkbox'; });\n\n } else {\n return DOM.getByClassName(this._.options.items, this._.options.container);\n\n }\n },\n\n _getBoundaryElements: function (items) {\n if (!this._.options.boundary) {\n return items;\n } else if (this._.options.boundary === 'parent') {\n return items.map(function(elem) { return elem.parentNode; });\n } else {\n var sel = this._.options.boundary.split(/\\./);\n return DOM.closest(items, sel[0], sel[1]);\n }\n },\n\n _getBoundaries: function (elements, start, offset) {\n if (this._.options.horizontal) {\n return elements.map(function (elem, i) {\n var rect = elem.getBoundingClientRect();\n return i < start ? offset + rect.right : (i > start ? offset + rect.left : null);\n });\n } else {\n return elements.map(function (elem, i) {\n var rect = elem.getBoundingClientRect();\n return i < start ? offset + rect.bottom : (i > start ? offset + rect.top : null);\n });\n }\n },\n\n _startScrolling: function (info, dir, pos, check) {\n this._.scrolling = {\n direction: dir,\n lastMousePosition: pos\n };\n\n function canScroll(target, dir) {\n return dir < 0 ? target.offset > 0 : (target.offset < target.max);\n }\n\n if (!canScroll(info.window, dir) && (!info.container || !canScroll(info.container, dir))) {\n return;\n }\n\n var doScroll = function() {\n if (info.container && canScroll(info.container, dir)) {\n info.container.scrollBy(dir * this._.options.scroll.speed);\n\n } else if (canScroll(info.window, dir)) {\n info.window.scrollBy(dir * this._.options.scroll.speed);\n\n } else {\n return;\n }\n\n if (this._.scrolling) {\n check(this._.scrolling.lastMousePosition + info.window.offset);\n window.requestAnimationFrame(doScroll);\n }\n }.bind(this);\n\n window.requestAnimationFrame(doScroll);\n\n },\n\n _getScrollInfo: function () {\n var container = this._getScrollContainerInfo(),\n body = document.body || {},\n html = document.documentElement || {},\n win = {},\n size, zone;\n\n if (this._.options.horizontal) {\n size = Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n zone = this._getScrollZoneSize(window.innerWidth);\n win.max = Math.max(0, size - window.innerWidth);\n win.offset = window.pageXOffset;\n win.offsetCross = window.pageYOffset;\n win.prevThreshold = zone;\n win.nextThreshold = window.innerWidth - zone;\n\n win.scrollBy = function(v) {\n win.offset = Math.max(0, Math.min(win.max, win.offset + v));\n window.scrollTo(win.offset, win.offsetCross);\n };\n } else {\n size = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n zone = this._getScrollZoneSize(window.innerHeight);\n win.max = Math.max(0, size - window.innerHeight);\n win.offset = window.pageYOffset;\n win.offsetCross = window.pageXOffset;\n win.prevThreshold = zone;\n win.nextThreshold = window.innerHeight - zone;\n\n win.scrollBy = function (v) {\n win.offset = Math.max(0, Math.min(win.max, win.offset + v));\n window.scrollTo(win.offsetCross, win.offset);\n };\n }\n\n if (container) {\n zone = this._getScrollZoneSize(container.size);\n container.prevThreshold = win.offset + container.position + zone;\n container.nextThreshold = win.offset + container.position + container.size - zone;\n\n container.scrollBy = function (v) {\n container.offset = Math.max(0, Math.min(container.max, container.offset + v));\n container.element[container.prop] = container.offset;\n };\n }\n\n return {\n window: win,\n container: container\n };\n },\n\n _getScrollZoneSize: function (size) {\n return this._.options.scroll.zoneSize < 1 ? this._.options.scroll.zoneSize * size : this._.options.scroll.zoneSize;\n },\n\n _getScrollContainerInfo: function () {\n var elem, sel, overflow,\n props = this._.options.horizontal\n ? {scrollProp: 'scrollLeft', scrollSize: 'scrollWidth', clientSize: 'clientWidth', offsetSize: 'offsetWidth', overflow: 'overflowX', position: 'left'}\n : {scrollProp: 'scrollTop', scrollSize: 'scrollHeight', clientSize: 'clientHeight', offsetSize: 'offsetHeight', overflow: 'overflowY', position: 'top'},\n scrollable = {scroll: 1, auto: 1};\n\n function isScrollable(elem, overflow) {\n return elem[props.scrollSize] > elem[props.clientSize] && overflow in scrollable;\n }\n\n function createInfo(elem) {\n var rect = elem.getBoundingClientRect();\n\n return {\n element: elem,\n offset: elem[props.scrollProp],\n prop: props.scrollProp,\n max: elem[props.scrollSize] - elem[props.clientSize],\n size: elem[props.offsetSize],\n position: rect[props.position]\n };\n }\n\n if (typeof this._.options.scroll.container === 'string') {\n sel = this._.options.scroll.container.split(/\\./);\n elem = DOM.closest(this._.options.container, sel[0], sel[1]);\n overflow = DOM.getStyle(elem, 'overflow', false);\n return isScrollable(elem, overflow) ? createInfo(elem) : null;\n\n } else if (this._.options.scroll.container) {\n elem = this._.options.scroll.container;\n overflow = DOM.getStyle(elem, 'overflow', false);\n return isScrollable(elem, overflow) ? createInfo(elem) : null;\n\n } else {\n elem = this._.options.container;\n\n do {\n overflow = DOM.getStyle(elem, 'overflow', false);\n\n if (isScrollable(elem, overflow)) {\n return createInfo(elem);\n }\n\n elem = elem.parentNode;\n } while (elem && elem !== document.body);\n }\n\n return null;\n }\n });\n\n _context.register(CheckList, 'CheckList');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Extras.Keymap', function () {\n\n var Keymap = _context.extend(function() {\n this._ = {\n map: {}\n };\n }, {\n STATIC: {\n MAC: /mac/i.test(navigator.platform),\n ACTION: 'Control'\n },\n\n add: function (key, handler) {\n key = key.replace(/\\baction\\b/ig, Keymap.ACTION);\n this._.map[key] = handler;\n return this;\n },\n\n remove: function (key) {\n delete this._.map[key];\n },\n\n get: function (key) {\n return this._.map[key] || null;\n }\n });\n\n if (Keymap.MAC) {\n Keymap.ACTION = 'Meta';\n }\n\n _context.register(Keymap, 'Keymap');\n\n}, {\n\n});\n","_context.invoke('Nittro.Extras.Keymap', function (Arrays, DOM, undefined) {\n\n var anonId = 0;\n\n var TabContext = _context.extend('Nittro.Object', function() {\n TabContext.Super.call(this);\n\n this._.items = [];\n this._.handlers = [];\n this._.lastFocused = null;\n\n }, {\n add: function (items) {\n if (!Array.isArray(items)) {\n items = Arrays.createFrom(arguments);\n }\n\n return this.insert(items);\n\n },\n\n addFromContainer: function (container, links, index) {\n var elements = Arrays.createFrom(container.getElementsByTagName('input'))\n .concat(Arrays.createFrom(container.getElementsByTagName('select')))\n .concat(Arrays.createFrom(container.getElementsByTagName('textarea')))\n .concat(Arrays.createFrom(container.getElementsByTagName('button')));\n\n if (links) {\n elements = elements.concat(Arrays.createFrom(container.getElementsByTagName('a')));\n }\n\n var radios = {};\n\n elements = elements.filter(function (elem) {\n if (elem.tagName === 'INPUT') {\n if (elem.type === 'radio') {\n if (radios[elem.name]) {\n return false;\n } else {\n radios[elem.name] = true;\n }\n } else if (elem.type === 'hidden') {\n return false;\n }\n }\n\n return elem.tabIndex !== -1;\n });\n\n elements.sort(function (a, b) {\n if (a.tabIndex > 0 && b.tabIndex > 0) {\n return a.tabIndex - b.tabIndex || ((a.compareDocumentPosition(b) & 4) ? -1 : 1);\n } else if (a.tabIndex > 0) {\n return -1;\n } else if (b.tabIndex > 0) {\n return 1;\n } else {\n return (a.compareDocumentPosition(b) & 4) ? -1 : 1;\n }\n });\n\n return this.insert(elements, index);\n },\n\n remove: function (items) {\n if (!Array.isArray(items)) {\n items = Arrays.createFrom(arguments);\n }\n\n items.forEach(function (item) {\n var index = this._.items.indexOf(item);\n\n if (index > -1) {\n if (item instanceof Element) {\n DOM.removeListener(item, 'focus', this._.handlers[index]);\n\n } else if (typeof item.off === 'function') {\n item.off('focus', this._.handlers[index]);\n\n }\n\n this._.items.splice(index, 1);\n this._.handlers.splice(index, 1);\n\n if (this._.lastFocused >= index) {\n this._.lastFocused--;\n }\n }\n }.bind(this));\n\n if (this._.lastFocused && this._.lastFocused < 0) {\n this._.lastFocused = null;\n }\n\n return this;\n },\n\n insert: function (items, index) {\n if (!Array.isArray(items)) {\n items = [items];\n }\n\n if (typeof index !== 'number') {\n index = this._.items.length;\n }\n\n var handlers = [];\n\n items = items.map(function (item) {\n if (typeof item.focus !== 'function') {\n throw new TypeError(\"Invalid item: doesn't have a focus() method\");\n }\n\n var handler = null,\n id = null;\n\n if (item instanceof Element) {\n if (!item.hasAttribute('id')) {\n item.setAttribute('id', 'tabContext-item' + (++anonId));\n }\n\n id = item.getAttribute('id');\n handler = this._handleFocus.bind(this, id);\n DOM.addListener(item, 'focus', handler);\n\n } else if (typeof item.on === 'function') {\n handler = this._handleFocus.bind(this, item);\n item.on('focus', handler);\n }\n\n handlers.push(handler);\n return id || item;\n\n }.bind(this));\n\n items.unshift(index, 0);\n handlers.unshift(index, 0);\n\n this._.items.splice.apply(this._.items, items);\n this._.handlers.splice.apply(this._.handlers, handlers);\n\n return this;\n\n },\n\n isDisabled: function () {\n return this._.items.some(function (item, index) {\n return this._getItem(item) && this._isDisabled(index);\n }.bind(this));\n },\n\n focus: function () {\n if (this._.items.length) {\n this._.lastFocused = 0;\n\n while (this._isDisabled(this._.lastFocused)) {\n this._.lastFocused++;\n\n if (this._.lastFocused >= this._.items.length) {\n this._.lastFocused = null;\n return;\n }\n }\n\n this._getItem(this._.items[this._.lastFocused]).focus();\n\n }\n },\n\n next: function (cycle) {\n var count = this._.items.length;\n\n if (!count) {\n return;\n }\n\n var index = this._.lastFocused,\n start = index,\n cycled = false;\n\n if (index === null) {\n index = -1;\n start = 0;\n\n } else if (this._.items[index] instanceof TabContext && this._.items[index].next(false)) {\n return true;\n\n }\n\n do {\n index++;\n\n if (index >= count) {\n if (cycle === false) {\n return false;\n } else {\n index %= count;\n cycled = true;\n }\n } else if (cycled && index >= start) {\n return false;\n\n }\n } while (this._isDisabled(index));\n\n this._.lastFocused = index;\n this._getItem(this._.items[index]).focus();\n return true;\n\n },\n\n prev: function (cycle) {\n var count = this._.items.length;\n\n if (!count) {\n return;\n }\n\n var index = this._.lastFocused,\n start = index,\n cycled = false;\n\n if (index === null) {\n index = this._.items.length;\n start = index - 1;\n\n } else if (this._.items[index] instanceof TabContext && this._.items[index].prev(false)) {\n return true;\n\n }\n\n do {\n index--;\n\n if (index < 0) {\n if (cycle === false) {\n return false;\n } else {\n index += count;\n cycled = true;\n }\n } else if (cycled && index <= start) {\n return false;\n\n }\n } while (this._isDisabled(index));\n\n this._.lastFocused = index;\n this._getItem(this._.items[index]).focus();\n return true;\n },\n\n clear: function () {\n this._.items.forEach(function (item, index) {\n if (typeof item === 'string') {\n DOM.removeListener(item, 'focus', this._.handlers[index]);\n\n } else if (typeof item.off === 'function') {\n item.off('focus', this._.handlers[index]);\n\n }\n\n if (item instanceof TabContext) {\n item.destroy();\n }\n }.bind(this));\n\n this._.items = [];\n this._.handlers = [];\n this._.lastFocused = null;\n return this;\n },\n\n destroy: function () {\n return this.clear();\n },\n\n _getItem: function (item) {\n return typeof item === 'string' ? DOM.getById(item) : item;\n },\n\n _isDisabled: function (index) {\n var item = this._getItem(this._.items[index]);\n\n if (!item) {\n return true;\n }\n\n return item instanceof Element ? item.disabled : (typeof item.isDisabled === 'function' ? item.isDisabled() : false);\n },\n\n _handleFocus: function (item) {\n this._.lastFocused = this._.items.indexOf(item);\n this.trigger('focus');\n }\n });\n\n _context.register(TabContext, 'TabContext');\n\n}, {\n Arrays: 'Utils.Arrays',\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Extras.Keymap', function () {\n\n var Keys = {\n modifiers: {\n Shift: 'shiftKey',\n Control: 'ctrlKey',\n Alt: 'altKey',\n Meta: 'metaKey'\n },\n modifierOrder: [\n 'Control',\n 'Alt',\n 'Shift',\n 'Meta'\n ],\n codes: {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Control',\n 18: 'Alt',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 91: 'Meta',\n 93: 'Meta',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 224: 'Meta',\n 225: 'AltGraph'\n }\n };\n\n var i;\n\n for (i = 0; i < 10; i++) {\n Keys.codes[i + 48] = i + '';\n }\n\n for (i = 65; i < 91; i++) {\n Keys.codes[i] = String.fromCharCode(i);\n }\n\n _context.register(Keys, 'Keys');\n\n});\n","_context.invoke('Nittro.Extras.Keymap', function (DOM, Keymap, TabContext, Keys) {\n\n var Manager = _context.extend(function() {\n this._ = {\n keymaps: [],\n tabContexts: []\n };\n\n DOM.addListener(document, 'keydown', this._handleKeyDown.bind(this));\n DOM.addListener(document, 'keyup', this._handleKey.bind(this));\n DOM.addListener(document, 'keypress', this._handleKey.bind(this));\n\n }, {\n STATIC: {\n RE_TAB: /^(?:Shift\\+)?Tab$/\n },\n\n push: function (map) {\n for (var a = 0; a < arguments.length; a++) {\n if (!arguments[a]) {\n // noop\n } else if (arguments[a] instanceof Keymap) {\n this._.keymaps.unshift(arguments[a]);\n } else if (arguments[a] instanceof TabContext) {\n this._.tabContexts.unshift(arguments[a]);\n } else {\n throw new TypeError('Invalid argument, must be an instance of Keymap or TabContext');\n }\n }\n\n return this;\n },\n\n pop: function (map) {\n var target, a, i;\n\n for (a = 0; a < arguments.length; a++) {\n if (!arguments[a]) {\n continue;\n } else if (arguments[a] instanceof Keymap) {\n target = this._.keymaps;\n } else if (arguments[a] instanceof TabContext) {\n target = this._.tabContexts;\n }\n\n if ((i = target.indexOf(arguments[a])) > -1) {\n target.splice(i, 1);\n }\n }\n\n return this;\n\n },\n\n _handleKeyDown: function (evt) {\n if (!this._.keymaps.length && !this._.tabContexts.length) {\n return;\n }\n\n var key = this._extractKey(evt),\n handler;\n\n if (key) {\n if (this._.keymaps.length) {\n handler = this._.keymaps[0].get(key);\n\n if (handler) {\n if (handler.call(null, key, evt) !== false) {\n evt.preventDefault();\n }\n\n return;\n }\n }\n\n if (this._.tabContexts.length && Manager.RE_TAB.test(key)) {\n evt.preventDefault();\n\n if (key === 'Tab') {\n this._.tabContexts[0].next();\n\n } else {\n this._.tabContexts[0].prev();\n\n }\n }\n }\n },\n\n _handleKey: function (evt) {\n if (this._.keymaps.length || this._.tabContexts.length) {\n var key = this._extractKey(evt);\n\n if (this._.keymaps.length && this._.keymaps[0].get(key) || this._.tabContexts.length && Manager.RE_TAB.test(key)) {\n evt.preventDefault();\n }\n }\n },\n\n _extractKey: function (evt) {\n var key = Keys.codes[evt.which || evt.keyCode];\n\n if (key) {\n if (key in Keys.modifiers) {\n return key;\n\n } else {\n var modifiers = [];\n\n Keys.modifierOrder.forEach(function (modifier) {\n if (evt[Keys.modifiers[modifier]]) {\n modifiers.push(modifier);\n }\n });\n\n modifiers.push(key);\n return modifiers.join('+');\n\n }\n }\n }\n });\n\n _context.register(Manager, 'Manager');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Extras.Dialogs', function(DOM, CSSTransitions, Arrays, ReflectionClass) {\n\n var Dialog = _context.extend('Nittro.Object', function(name, options) {\n Dialog.Super.call(this);\n\n this._.name = name;\n this._.options = Arrays.mergeTree({}, Dialog.getDefaults(this.constructor), options);\n\n this._.state = {\n visible: false,\n destroying: false,\n current: 'hidden',\n scrollLock: false,\n next: null,\n promise: null,\n cancel: null\n };\n\n this._.scrollPosition = null;\n this._.keyMap = null;\n this._.tabContext = null;\n this._.origFocusTarget = null;\n this._.ios = /ipod|ipad|iphone/i.test(navigator.userAgent);\n\n this._.elms = {\n holder : DOM.createFromHtml(this._.options.templates.holder),\n wrapper : DOM.createFromHtml(this._.options.templates.wrapper),\n content : null,\n buttons : null\n };\n\n this._.elms.holder.appendChild(this._.elms.wrapper);\n\n if (this._.ios) {\n DOM.addClass(this._.elms.holder, 'nittro-dialog-ios');\n }\n\n if (this._.options.classes) {\n DOM.addClass(this._.elms.holder, this._.options.classes);\n }\n\n if (this._.options.content) {\n this._.elms.content = this._.options.content;\n DOM.toggleClass(this._.elms.content, 'nittro-dialog-content', true);\n this._.options.content = null;\n\n } else if (this._.options.text) {\n this._.elms.content = DOM.createFromHtml(this._.options.templates.content);\n\n var content = DOM.create('p');\n content.textContent = this._.options.text;\n this._.elms.content.appendChild(content);\n\n } else if (this._.options.html) {\n this._.elms.content = DOM.createFromHtml(this._.options.templates.content);\n DOM.html(this._.elms.content, this._.options.html);\n }\n\n if (this._.elms.content) {\n this._.elms.wrapper.appendChild(this._.elms.content);\n }\n\n if (this._.options.buttons) {\n if (this._.options.buttons instanceof HTMLElement) {\n this._.elms.buttons = this._.options.buttons;\n DOM.toggleClass(this._.elms.buttons, 'nittro-dialog-buttons', true);\n this._.options.buttons = null;\n } else {\n this._.elms.buttons = DOM.createFromHtml(this._.options.templates.buttons);\n this._createButtons();\n }\n\n this._.elms.wrapper.appendChild(this._.elms.buttons);\n }\n\n try {\n var keymap = ReflectionClass.from('Nittro.Extras.Keymap.Keymap'),\n tabContext = ReflectionClass.from('Nittro.Extras.Keymap.TabContext');\n\n this._.keyMap = keymap.newInstance();\n this._.tabContext = tabContext.newInstance();\n } catch (e) {}\n\n\n if (this._.keyMap && this._.options.keyMap) {\n this._handleKey = this._handleKey.bind(this);\n\n for (var key in this._.options.keyMap) {\n if (this._.options.keyMap.hasOwnProperty(key)) {\n this._.keyMap.add(key, this._handleKey);\n }\n }\n }\n\n if (this._.tabContext && this._.elms.buttons) {\n this._.tabContext.addFromContainer(this._.elms.buttons, true);\n }\n\n this.on('button:default', this.hide.bind(this));\n this.on('show', this._saveFocusedElement.bind(this));\n this.on('hide', this._restoreFocusedElement.bind(this));\n\n DOM.addListener(this._.elms.wrapper, 'click', this._handleClick.bind(this));\n this._handleScroll = this._handleScroll.bind(this);\n\n }, {\n STATIC: {\n defaults: {\n classes: null,\n content: null,\n html: null,\n text: null,\n buttons: null,\n keyMap: {\n 'Escape': 'close'\n },\n templates: {\n holder : '',\n wrapper : '',\n content : '',\n buttons : '',\n button : ''\n }\n },\n getDefaults: function (type) {\n var defaults = {},\n k;\n\n do {\n if (type.defaults) {\n for (k in type.defaults) {\n if (type.defaults.hasOwnProperty(k) && !defaults.hasOwnProperty(k)) {\n defaults[k] = type.defaults[k];\n }\n }\n }\n } while ((type = type.Super) && type !== Dialog.Super);\n\n return defaults;\n },\n setDefaults: function(options) {\n Arrays.mergeTree(Dialog.defaults, options);\n }\n },\n\n getName: function () {\n return this._.name;\n },\n\n isVisible: function(next) {\n return this._.state.current === 'visible' && !this._.state.next\n || next && this._.state.next === 'visible';\n },\n\n show: function() {\n return this._setState('visible', function (done) {\n this._lockScrolling();\n this._setVisible(true);\n\n DOM.toggleClass(this._.elms.holder, 'visible', true);\n DOM.toggleClass(this._.elms.holder, 'busy', false);\n\n CSSTransitions.run(this._.elms.wrapper)\n .then(done.bind(this, 'shown'));\n });\n },\n\n hide: function() {\n return this._setState('hidden', function (done) {\n this._unlockScrolling();\n this._setVisible(false);\n\n DOM.toggleClass(this._.elms.holder, 'visible', false);\n DOM.toggleClass(this._.elms.holder, 'busy', false);\n\n CSSTransitions.run(this._.elms.wrapper)\n .then(done.bind(this, 'hidden'));\n });\n },\n\n isBusy: function (next) {\n return this._.state.current === 'busy' && !this._.state.next\n || next && this._.state.next === 'busy';\n },\n\n setBusy: function () {\n return this._setState('busy', function (done) {\n this._lockScrolling();\n this._setVisible(true);\n\n DOM.toggleClass(this._.elms.holder, 'visible', true);\n DOM.toggleClass(this._.elms.holder, 'busy', true);\n\n CSSTransitions.run(this._.elms.wrapper)\n .then(done.bind(this, 'busy'));\n });\n },\n\n getElement: function () {\n return this._.elms.holder;\n },\n\n getContent: function() {\n return this._.elms.content;\n },\n\n getButtons: function() {\n return this._.elms.buttons;\n },\n\n getKeyMap: function () {\n return this._.keyMap;\n },\n\n getTabContext: function () {\n return this._.tabContext;\n },\n\n destroy: function () {\n if (this._.state.destroying) {\n return this._.state.promise || Promise.resolve(null);\n }\n\n this._.state.destroying = true;\n this.trigger('destroy');\n\n if (this._.state.current !== 'hidden') {\n return this.hide().then(this._doDestroy.bind(this));\n } else {\n return this._doDestroy();\n }\n },\n\n _doDestroy: function () {\n if (this._.state.cancel) {\n this._.state.cancel();\n }\n\n this.trigger('destroyed');\n\n if (this._.elms.holder.parentNode) {\n this._.elms.holder.parentNode.removeChild(this._.elms.holder);\n }\n\n this.off();\n\n this._.state = null;\n\n for (var k in this._.elms) if (this._.elms.hasOwnProperty(k)) {\n this._.elms[k] = null;\n }\n\n return Promise.resolve(null);\n },\n\n _setState: function (state, init, cancel) {\n if (this._.state.current === state) {\n return Promise.resolve();\n } else if (this._.state.next === state) {\n return this._.state.promise;\n } else if (this._.state.cancel) {\n this._.state.cancel();\n }\n\n this._.state.next = state;\n\n return this._.state.promise = new Promise(function (fulfill) {\n var resolved = null;\n\n this._.state.cancel = function () {\n if (resolved === null) {\n resolved = false;\n this._.state.next = null;\n this._.state.promise = null;\n this._.state.cancel = null;\n cancel && cancel.call(this);\n fulfill();\n }\n }.bind(this);\n\n init.call(this, function(evt) {\n if (resolved === null) {\n resolved = true;\n this._.state.current = state;\n this._.state.next = null;\n this._.state.promise = null;\n this._.state.cancel = null;\n evt && this.trigger(evt);\n fulfill();\n }\n }.bind(this));\n }.bind(this));\n },\n\n _setVisible: function (state) {\n if (this._.state.visible !== state) {\n this._.state.visible = state;\n this.trigger(state ? 'show' : 'hide');\n }\n },\n\n _saveFocusedElement: function () {\n this._.origFocusTarget = document.activeElement;\n this._.origFocusTarget && this._.origFocusTarget.blur();\n },\n\n _restoreFocusedElement: function () {\n this._.origFocusTarget && DOM.contains(document, this._.origFocusTarget) && this._.origFocusTarget.focus();\n this._.origFocusTarget = null;\n },\n\n _lockScrolling: function () {\n if (this._.state.scrollLock) {\n return;\n }\n\n this._.state.scrollLock = true;\n\n if (this._.ios) {\n this._.scrollPosition = window.pageYOffset;\n window.scrollTo(0, 0);\n } else {\n this._.scrollLock = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n\n DOM.addListener(window, 'scroll', this._handleScroll);\n }\n },\n\n _unlockScrolling: function () {\n if (!this._.state.scrollLock) {\n return;\n }\n\n this._.state.scrollLock = false;\n\n if (this._.ios) {\n window.scrollTo(0, this._.scrollPosition);\n this._.scrollPosition = null;\n } else {\n DOM.removeListener(window, 'scroll', this._handleScroll);\n this._.scrollLock = null;\n }\n },\n\n _createButtons: function () {\n var action, btn, def;\n\n for (action in this._.options.buttons) {\n if (this._.options.buttons.hasOwnProperty(action)) {\n btn = DOM.createFromHtml(this._.options.templates.button);\n\n def = this._.options.buttons[action];\n\n if (typeof def === 'string') {\n def = {label: def, type: 'button'};\n }\n\n DOM.setData(btn, 'action', action);\n DOM.addClass(btn, 'nittro-dialog-button', def.type && def.type !== 'button' ? 'nittro-dialog-button-' + def.type : '');\n btn.textContent = def.label;\n\n this._.elms.buttons.appendChild(btn);\n }\n }\n },\n\n _handleClick: function (evt) {\n var action = DOM.getData(evt.target, 'action');\n\n if (action) {\n evt.preventDefault();\n\n this.trigger('button', {\n action: action\n });\n }\n },\n\n _handleKey: function (key, evt) {\n if (evt.target && evt.target.tagName && evt.target.tagName.match(/^(input|button|textarea|select)$/i) && DOM.contains(this._.elms.wrapper, evt.target)) {\n return false;\n } else {\n this.trigger('button', {\n action: this._.options.keyMap[key]\n });\n }\n },\n\n _handleScroll: function (evt) {\n if (evt.target === window || evt.target === document) {\n window.scrollTo(this._.scrollLock.left, this._.scrollLock.top);\n }\n }\n });\n\n _context.register(Dialog, 'Dialog');\n\n}, {\n DOM: 'Utils.DOM',\n CSSTransitions: 'Utils.CSSTransitions',\n Arrays: 'Utils.Arrays',\n ReflectionClass: 'Utils.ReflectionClass'\n});\n","_context.invoke('Nittro.Extras.Dialogs', function (Dialog, DOM, Arrays, Url) {\n\n var IFrameDialog = _context.extend(Dialog, function (name, url, options) {\n IFrameDialog.Super.call(this, name, options);\n\n this._.current = null;\n\n DOM.addClass(this._.elms.holder, 'nittro-dialog-iframe');\n this._.elms.content = document.createElement('iframe');\n this._.elms.content.name = name;\n DOM.addClass(this._.elms.content, 'nittro-dialog-content');\n DOM.addListener(this._.elms.content, 'load', this._handleLoad.bind(this));\n this._.elms.wrapper.insertBefore(this._.elms.content, this._.elms.wrapper.firstChild);\n\n if (url) {\n this.setUrl(url);\n }\n }, {\n STATIC: {\n defaults: {\n allowFullscreen: null,\n allowPaymentRequest: null,\n autoHeight: null,\n lazy: true,\n buttons: {\n 'close': 'Close'\n }\n },\n setDefaults: function(defaults) {\n Arrays.mergeTree(IFrameDialog.defaults, defaults);\n }\n },\n\n getContentDocument: function () {\n return this._.elms.content.contentDocument;\n },\n\n setUrl: function (url, external) {\n var o = this._.options;\n url = Url.from(url);\n\n this._.current = {\n url: url,\n allowFullscreen: o.allowFullscreen === null ? url.isLocal() : o.allowFullscreen,\n allowPaymentRequest: o.allowPaymentRequest === null ? url.isLocal() : o.allowPaymentRequest,\n autoHeight: o.autoHeight !== false && url.isLocal(),\n ready: false,\n external: external,\n onload: null\n };\n\n var promise, busy;\n\n if ((busy = this.isBusy(true)) || this.isVisible(true)) {\n promise = this.setBusy()\n .then(this._load.bind(this));\n\n return busy ? promise : promise.then(this.show.bind(this));\n } else if (!this._.options.lazy) {\n return this._load();\n } else {\n return Promise.resolve();\n }\n },\n\n getUrl: function () {\n return this._.current ? Url.from(this._.current.url) : null;\n },\n\n isCurrent: function (url, ignoreHash) {\n return this._.current !== null && this._.current.url.compare(url) < (ignoreHash === false ? Url.PART.HASH : Url.PART.QUERY);\n },\n\n show: function () {\n if (!this._.current || this._.current.ready) {\n return IFrameDialog.Super.prototype.show.call(this);\n }\n\n if (!this.isBusy()) {\n return this.setBusy()\n .then(this._load.bind(this))\n .then(this.show.bind(this));\n } else {\n return this._load()\n .then(this.show.bind(this));\n }\n },\n\n _load: function () {\n return this._setState('loaded', function (done) {\n this._.current.onload = function () {\n this._.current.onload = null;\n done('loaded');\n }.bind(this);\n\n if (!this._.current.external) {\n this._.elms.content.src = this._.current.url.toAbsolute();\n }\n\n this._.elms.content.allowFullscreen = this._.current.allowFullscreen;\n this._.elms.content.allowPaymentRequest = this._.current.allowPaymentRequest;\n }, function () {\n this._.current.onload = null;\n }).then(this._applyAutoHeight.bind(this));\n },\n\n _applyAutoHeight: function () {\n var height = null;\n\n try {\n height = this.getContentDocument().documentElement.offsetHeight;\n } catch (e) {\n height = null;\n } finally {\n if (!height) {\n this._.current.autoHeight = false;\n }\n\n DOM.toggleClass(this._.elms.holder, 'nittro-dialog-iframe-auto', this._.current.autoHeight);\n this._.elms.content.style.height = this._.current.autoHeight\n ? height + 'px'\n : '';\n }\n },\n\n _handleLoad: function () {\n if (this._.current && !this._.current.ready && this.isCurrent(this._.elms.content.src)) {\n this._.current.ready = true;\n this._.current.onload && this._.current.onload();\n }\n }\n });\n\n _context.register(IFrameDialog, 'IFrameDialog');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays',\n Url: 'Utils.Url'\n});\n","_context.invoke('Nittro.Extras.Dialogs', function (Dialog, IFrameDialog, DOM) {\n\n var Manager = _context.extend('Nittro.Object', function(baseZ) {\n Manager.Super.call(this);\n\n this._.registry = {};\n this._.stack = [];\n this._.zIndex = baseZ || 1000;\n\n this._handleShow = this._handleShow.bind(this);\n this._handleHide = this._handleHide.bind(this);\n this._handleDestroy = this._handleDestroy.bind(this);\n\n }, {\n createDialog: function (name, options) {\n var dlg = new Dialog(name, options);\n this._setup(dlg);\n return dlg;\n },\n\n createIFrameDialog: function (name, url, options) {\n var dlg = new IFrameDialog(name, url, options);\n this._setup(dlg);\n return dlg;\n },\n\n hasOpenDialog: function () {\n return this._.stack.length > 0;\n },\n\n getTopmostOpenDialog: function () {\n return this._.stack.length ? this._.stack[0] : null;\n },\n\n getOpenDialogs: function () {\n return this._.stack.slice();\n },\n\n getDialog: function (name) {\n return this._.registry[name] || null;\n },\n\n registerDialog: function (dialog) {\n if (dialog.getName() in this._.registry) {\n throw new Error('A dialog named \"' + dialog.getName() + '\" already exists');\n }\n\n this._.registry[dialog.getName()] = dialog;\n return this;\n },\n\n unregisterDialog: function (name) {\n if (name in this._.registry) {\n delete this._.registry[name];\n }\n\n return this;\n },\n\n _setup: function (dialog) {\n this.registerDialog(dialog);\n dialog.on('show', this._handleShow);\n dialog.on('hide', this._handleHide);\n dialog.on('destroy', this._handleDestroy);\n this.trigger('setup', {dialog: dialog});\n document.body.appendChild(dialog.getElement());\n },\n\n _handleShow: function (evt) {\n if (this._.stack.length) {\n DOM.toggleClass(this._.stack[0].getElement(), 'topmost', false);\n }\n\n DOM.toggleClass(evt.target.getElement(), 'topmost', true);\n evt.target.getElement().style.zIndex = this._.zIndex + this._.stack.length;\n this._.stack.unshift(evt.target);\n },\n\n _handleHide: function (evt) {\n DOM.toggleClass(evt.target.getElement(), 'topmost', false);\n\n var index = this._.stack.indexOf(evt.target);\n\n if (index > -1) {\n this._.stack.splice(index, 1);\n }\n\n if (this._.stack.length) {\n DOM.toggleClass(this._.stack[0].getElement(), 'topmost', true);\n }\n },\n\n _handleDestroy: function (evt) {\n this.unregisterDialog(evt.target.getName());\n }\n });\n\n _context.register(Manager, 'Manager');\n\n}, {\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Extras.Confirm', function (Dialog, Arrays, ReflectionClass) {\n\n var id = 0;\n\n\tvar Confirm = _context.extend(Dialog, function (options) {\n\t\tif (!(this instanceof Confirm)) {\n\t\t\tvar dlg = ReflectionClass.from(Confirm).newInstanceArgs(arguments);\n\t\t\twindow.setTimeout(function() { dlg.show(); }, 1);\n\t\t\treturn dlg;\n\t\t}\n\n\t\tConfirm.Super.call(this, 'nittro-confirm-' + (++id), this._prepareOptions(arguments));\n\n\t\tthis._.promise = new Promise(function (fulfill) {\n this.on('button', function(evt) {\n this.destroy();\n fulfill(evt.data.action === 'confirm');\n });\n }.bind(this));\n\n\t}, {\n STATIC: {\n defaults: {\n classes: 'nittro-dialog-confirm',\n buttons: {\n confirm: 'OK',\n cancel: {label: 'Cancel', type: 'text'}\n },\n keyMap: {\n 'Enter': 'confirm',\n 'Escape': 'cancel'\n }\n },\n setDefaults: function(defaults) {\n Arrays.mergeTree(Confirm.defaults, defaults);\n }\n },\n\n\t\t_prepareOptions: function (args) {\n\t\t\tvar options = args[0];\n\n\t\t\tif (typeof options === 'string') {\n\t\t\t\toptions = {\n\t\t\t\t\ttext: options\n\t\t\t\t};\n\n\t\t\t\tif (args.length > 1) {\n\t\t\t\t\toptions.buttons = {\n\t\t\t\t\t\tconfirm: args[1]\n\t\t\t\t\t};\n\n\t\t\t\t\tif (args.length > 2) {\n\t\t\t\t\t\tif (typeof args[2] === 'string') {\n\t\t\t\t\t\t\toptions.buttons.cancel = {label: args[2], type: 'text'};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toptions.buttons.cancel = args[2];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.buttons.cancel = {label: 'Cancel', type: 'text'};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn options;\n\t\t},\n\n\t\tthen: function (onfulfill, onreject) {\n return this._.promise.then(onfulfill, onreject);\n }\n\t});\n\n _context.register(Confirm, 'Confirm');\n\n}, {\n Dialog: 'Nittro.Extras.Dialogs.Dialog',\n\tReflectionClass: 'Utils.ReflectionClass',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Extras.Confirm', function (Manager, Confirm) {\n\n var ConfirmMixin = {\n createConfirm: function (options) {\n var dlg = Confirm.apply(null, arguments);\n this._setup(dlg);\n return dlg;\n }\n };\n\n _context.mixin(Manager, ConfirmMixin);\n\n}, {\n Manager: 'Nittro.Extras.Dialogs.Manager'\n});\n","_context.invoke('Nittro.Extras.DropZone', function(Form, Vendor, DOM, Arrays, Strings) {\n\n var anonId = 0,\n zones = [],\n state = null;\n\n function register(zone) {\n if (zones.indexOf(zone) < 0) {\n zones.push(zone);\n }\n\n if (zones.length === 1) {\n DOM.addListener(document, 'dragenter', handleDragEnter);\n DOM.addListener(document, 'dragover', handleDragOver);\n DOM.addListener(document, 'dragleave', handleDragLeave);\n DOM.addListener(document, 'drop', handleDrop);\n }\n }\n\n function unregister(zone) {\n var i = zones.indexOf(zone);\n\n if (i > -1) {\n zones.splice(i, 1);\n }\n\n if (!zones.length) {\n DOM.removeListener(document, 'dragenter', handleDragEnter);\n DOM.removeListener(document, 'dragover', handleDragOver);\n DOM.removeListener(document, 'dragleave', handleDragLeave);\n DOM.removeListener(document, 'drop', handleDrop);\n }\n }\n\n function findValidZones(evt) {\n if (!evt.dataTransfer.items) {\n return zones;\n }\n\n var items = evt.dataTransfer.items,\n types = [],\n i, n = items.length;\n\n for (i = 0; i < n; i++) {\n if (items[i].kind === 'file') {\n if (items[i].type === 'application/x-moz-file') {\n return zones; // damn firefox\n } else if (types.indexOf(items[i].type) < 0) {\n types.push(items[i].type);\n }\n }\n }\n\n return !types.length ? zones : zones.filter(function (zone) {\n return zone.hasAllowedType(types);\n });\n }\n\n function findTargetZones(zones, target) {\n return zones.filter(function (zone) {\n return zone.hasTarget(target);\n });\n }\n\n function handleDrop(evt) {\n if (evt.defaultPrevented) {\n state = null;\n return;\n }\n\n evt.preventDefault();\n state = null;\n\n zones.forEach(function(zone) {\n var target = zone.getTarget(evt.target),\n e;\n\n if (target) {\n e = zone.trigger('drop', {\n files: evt.dataTransfer.files,\n target: target\n });\n\n if (!e.isDefaultPrevented()) {\n zone.addFiles(evt.dataTransfer.files);\n }\n }\n });\n }\n\n function handleDragEnter(evt) {\n evt.preventDefault();\n\n var s = getState(evt),\n n = s.path.length,\n elem, i, j, p;\n\n if (!n) {\n trigger(s.validZones, 'body-enter');\n }\n\n for (i = 0; i < n; i++) {\n if (evt.target === s.path[i] || DOM.contains(s.path[i], evt.target)) {\n break;\n }\n }\n\n if (i > 0) {\n for (j = 0; j < i; j++) {\n trigger(findTargetZones(s.validZones, s.path[j]), 'zone-leave', {\n target: s.path[j]\n });\n }\n\n s.path.splice(0, i);\n }\n\n if (s.path[0] !== evt.target) {\n elem = evt.target;\n p = [elem];\n i = 0;\n\n for (; elem.parentNode && elem.parentNode !== s.path[0]; i++) {\n p.push(elem = elem.parentNode);\n }\n\n for (; i >= 0; i--) {\n trigger(findTargetZones(s.validZones, p[i]), 'zone-enter', {\n target: p[i]\n });\n }\n\n p.unshift(0, 0);\n s.path.splice.apply(s.path, p);\n }\n }\n\n function handleDragLeave(evt) {\n evt.preventDefault();\n\n if (evt.target === document.body || evt.target === document.documentElement) {\n leaveAll(getState(evt));\n }\n }\n\n function handleDragOver(evt) {\n evt.preventDefault();\n\n if (state) {\n state.tmr && window.clearTimeout(state.tmr);\n state.tmr = window.setTimeout(handleDragOverTimeout, 250);\n }\n }\n\n function handleDragOverTimeout() {\n if (state) {\n state.tmr && window.clearTimeout(state.tmr);\n leaveAll(state);\n }\n }\n\n function leaveAll(s) {\n var n = s.path.length,\n i;\n\n for (i = 0; i < n; i++) {\n trigger(findTargetZones(s.validZones, s.path[i]), 'zone-leave', {\n target: s.path[i]\n });\n }\n\n trigger(s.validZones, 'body-leave');\n state = null;\n }\n\n function getState(evt) {\n return state || (state = {\n path: [],\n validZones: findValidZones(evt),\n tmr: null\n });\n }\n\n function trigger(zones, evt, data) {\n zones.forEach(function(zone) {\n zone.trigger(evt, data);\n });\n }\n\n\n\n var DropZone = _context.extend('Nittro.Object', function(form, elem, options) {\n DropZone.Super.call(this);\n\n this._.form = form || null;\n this._.elems = [];\n this._.rules = null;\n this._.files = [];\n this._.options = Arrays.mergeTree({}, DropZone.defaults, options);\n\n this._.allow = {\n types: null,\n extensions: null\n };\n\n this.validate = this.validate.bind(this);\n this.reset = this.reset.bind(this);\n this._serialize = this._serialize.bind(this);\n this._handleFieldChange = this._handleFieldChange.bind(this);\n\n if (this._.form) {\n this._.form.on('validate', this.validate);\n this._.form.on('serialize', this._serialize);\n this._.form.on('reset', this.reset);\n\n this.on('error:default', function(evt) {\n this._.form.trigger('error', {\n element: this._getField() || this.getElement(),\n message: evt.data.message\n });\n }.bind(this));\n }\n\n if (this._.options.allowedTypes) {\n this.setAllowedTypes(this._.options.allowedTypes);\n }\n\n if (this._.options.maxSize) {\n this._.options.maxSize = this._normalizeMaxSize(this._.options.maxSize);\n }\n\n if (this._.options.field) {\n this._.rules = DOM.getData(this._.options.field, 'nette-rules');\n this._.options.fieldName = this._.options.field.name;\n this._.options.required = this._.options.field.required;\n this._.options.multiple = this._.options.field.multiple;\n\n if (this._.options.field.accept) {\n this.setAllowedTypes(this._.options.field.accept);\n } else if (this._.options.allowedTypes) {\n this._.options.field.accept = this._formatAccept(this._.options.allowedTypes);\n }\n\n this._.options.field.required = false;\n this._.options.field.removeAttribute('data-nette-rules');\n\n if (!this._.options.field.hasAttribute('id')) {\n this._.options.field.setAttribute('id', 'dropzone-field' + (++anonId));\n }\n\n this._.options.field = this._.options.field.getAttribute('id');\n\n DOM.addListener(document, 'change', this._handleFieldChange);\n }\n\n if (elem) {\n this.attach(elem);\n }\n }, {\n STATIC: {\n create: function(formLocator, from) {\n if (!(from instanceof HTMLInputElement) || from.type !== 'file') {\n throw new Error('Invalid argument, must be a file input');\n }\n\n var form = from.form ? formLocator.getForm(from.form) : null;\n\n return new DropZone(form, null, {\n field: from\n });\n },\n\n TYPES: {\n\n },\n\n defaults: {\n field: null,\n fieldName: null,\n required: false,\n allowedTypes: null,\n maxSize: null,\n multiple: true,\n netteValidate: {\n perFile: true,\n onSubmit: true\n },\n\n messages: {\n empty: 'This field is required.',\n invalidType: 'File %s isn\\'t an allowed kind of file',\n exceededSize: 'File %s is too large.'\n }\n }\n },\n\n attach: function(elem) {\n this._.elems.push(elem);\n register(this);\n return this;\n },\n\n detach: function() {\n this._.elems = [];\n unregister(this);\n return this;\n },\n\n isAttached: function () {\n return this._.elems.length > 0;\n },\n\n getElement: function () {\n return this._.elems.length ? this._.elems[0] : null;\n },\n\n getElements: function() {\n return this._.elems;\n },\n\n setAllowedTypes: function(allowedTypes) {\n this._.options.allowedTypes = allowedTypes ? this._normalizeTypes(allowedTypes) : null;\n\n var types = [],\n extensions = [],\n t, i, n = this._.options.allowedTypes.length;\n\n for (i = 0; i < n; i++) {\n t = this._.options.allowedTypes[i];\n\n if (t.charAt(0) === '.') {\n extensions.push(Strings.escapeRegex(t.substr(1)));\n } else {\n types.push(Strings.escapeRegex(t).replace(/\\/\\\\\\*$/, '/.+'));\n }\n }\n\n this._.allow.types = types.length ? new RegExp('^(' + types.join('|') + ')$', 'i') : null;\n this._.allow.extensions = extensions.length ? new RegExp('\\\\.(' + extensions.join('|') + ')$', 'i') : null;\n return this;\n },\n\n setMaxSize: function(size) {\n this._.options.maxSize = size ? this._normalizeMaxSize(size) : null;\n return this;\n },\n\n setRequired: function(required) {\n this._.options.required = required !== false;\n return this;\n },\n\n setMultiple: function(multiple) {\n this._.options.multiple = multiple !== false;\n return this;\n },\n\n setFieldName: function(fieldName) {\n this._.options.fieldName = fieldName;\n return this;\n },\n\n hasFiles: function() {\n return this._.files.length > 0;\n },\n\n getFiles: function() {\n return this._.files.slice();\n },\n\n getFile: function(index) {\n return this._.files[index] || null;\n },\n\n isImage: function(file) {\n return /^image\\/.+$/i.test(file.type);\n },\n\n loadImages: function() {\n var queue = [];\n\n this._.files.forEach(function(file) {\n if (file.type.match(/^image\\/.+$/i)) {\n queue.push(this.loadImage(file));\n }\n }.bind(this));\n\n return Promise.all(queue);\n },\n\n loadImage: function(file) {\n return new Promise(function(fulfill, reject) {\n var reader = new FileReader(),\n image = new Image();\n\n reader.onload = function() {\n image.src = reader.result;\n fulfill(image);\n };\n\n reader.onerror = function() {\n reject();\n };\n\n reader.readAsDataURL(file);\n });\n },\n\n addFiles: function(files) {\n var i = 0,\n n = this._.options.multiple ? files.length : 1;\n\n if (!this._.options.multiple) {\n this._.files = [];\n }\n\n for (; i < n; i++) {\n this.addFile(files instanceof FileList ? files.item(i) : files[i]);\n }\n\n this.trigger('files-added');\n\n return this;\n },\n\n addFile: function (file) {\n try {\n this._validateFile(file);\n\n var evt = this.trigger('file', {\n file: file,\n index: this._.files.length\n });\n\n if (!evt.isDefaultPrevented()) {\n this._.files.push(file);\n }\n } catch (e) {\n if (e instanceof ValidationError) {\n this.trigger('error', {\n message: e.message,\n file: file\n });\n } else if (!(e instanceof NetteValidationError)) {\n throw e;\n }\n }\n\n return this;\n },\n\n removeFile: function(file) {\n if (typeof file !== 'number') {\n file = this._.files.indexOf(file);\n }\n\n if (file >= 0 && file < this._.files.length) {\n this._.files.splice(file, 1);\n }\n\n return this;\n\n },\n\n reset: function() {\n this._.files = [];\n return this;\n },\n\n destroy: function() {\n this.trigger('destroy');\n\n this.detach();\n this.off();\n this._.files = [];\n\n if (this._.form) {\n this._.form.off('validate', this.validate);\n this._.form.off('serialize', this._serialize);\n this._.form.off('reset', this.reset);\n }\n\n this._.form = null;\n\n if (this._hasField()) {\n DOM.removeListener(document, 'change', this._handleFieldChange);\n }\n },\n\n validate: function(evt) {\n if (this._.options.netteValidate.onSubmit && this._hasField() && this._.rules && !Vendor.validateControl(this._getField(), this._.rules, false, { value: this._.files })) {\n evt.preventDefault();\n } else if (this._.options.required && !this._.files.length) {\n evt.preventDefault();\n this.trigger('error', { message: this._formatErrorMessage('empty') });\n }\n },\n\n formatSize: function(bytes) {\n var units = ['kB', 'MB', 'GB', 'TB'],\n unit = 'B';\n\n while (bytes > 1024 && units.length) {\n unit = units.shift();\n bytes /= 1024;\n }\n\n return (unit === 'B' ? bytes : bytes.toFixed(2)) + ' ' + unit;\n },\n\n hasTarget: function (elem) {\n return this._.elems.indexOf(elem) > -1;\n },\n\n getTarget: function (elem) {\n for (var i = 0, n = this._.elems.length; i < n; i++) {\n if (this._.elems[i] === elem || DOM.contains(this._.elems[i], elem)) {\n return this._.elems[i];\n }\n }\n\n return null;\n },\n\n hasAllowedType: function (types) {\n return !this._.allow.types || types.some(function(type) {\n return this._.allow.types.test(type);\n }.bind(this));\n },\n\n _hasField: function () {\n return !!this._.options.field;\n },\n\n _getField: function () {\n return this._.options.field ? DOM.getById(this._.options.field) : null;\n },\n\n _validateFile: function(file, onlyCheck) {\n if (this._.options.netteValidate.perFile && this._hasField() && this._.rules && !Vendor.validateControl(this._getField(), this._.rules, onlyCheck === true, { value: [file] })) {\n throw new NetteValidationError();\n } else if (!this._validateType(file.name, file.type)) {\n throw new ValidationError(this._formatErrorMessage('invalidType', [file.name, file.type]));\n } else if (!this._validateSize(file.size)) {\n throw new ValidationError(this._formatErrorMessage('exceededSize', [file.name, this.formatSize(file.size), this.formatSize(this._.options.maxSize)]));\n }\n },\n\n _validateType: function(name, type) {\n return !(\n this._.allow.types && type && !this._.allow.types.test(type)\n || this._.allow.extensions && name && !this._.allow.extensions.test(name)\n );\n },\n\n _validateSize: function(size) {\n return !this._.options.maxSize || size <= this._.options.maxSize;\n },\n\n _handleFieldChange: function(evt) {\n if (this._hasField() && evt.target === this._getField()) {\n if (evt.target.files.length) {\n this.addFiles(evt.target.files);\n\n if (this._.form) {\n this._.form.setValue(this._.options.fieldName, null);\n } else {\n var html = evt.target.parentNode.innerHTML;\n DOM.html(evt.target.parentNode, html);\n }\n }\n }\n },\n\n _serialize: function(evt) {\n for (var i = 0; i < this._.files.length; i++) {\n evt.data.append(this._.options.fieldName, this._.files[i]);\n }\n },\n\n _formatAccept: function(allowedTypes) {\n return allowedTypes.join(',');\n },\n\n _normalizeTypes: function(allowedTypes) {\n if (typeof allowedTypes === 'string') {\n return allowedTypes.trim().split(/\\s*,\\s*/g);\n }\n\n return allowedTypes;\n },\n\n _normalizeMaxSize: function(size) {\n if (typeof size === 'string') {\n var unit;\n\n if (unit = size.match(/(k|M|G|T)?B$/)) {\n unit = unit[1];\n size = size.replace(/(k|M|G|T)?B$/, '');\n } else {\n unit = 'B';\n }\n\n size = parseFloat(size.trim());\n\n switch (unit) {\n case 'T': size *= 1024;\n case 'G': size *= 1024;\n case 'M': size *= 1024;\n case 'k': size *= 1024;\n }\n }\n\n return size;\n },\n\n _formatErrorMessage: function(type, params) {\n var message = this._.options.messages[type];\n\n if (params) {\n message = Strings.vsprintf(message, params);\n }\n\n return message;\n }\n });\n\n var ValidationError = _context.extend(function(message) {\n this.message = message;\n });\n\n var NetteValidationError = _context.extend(function() {\n\n });\n\n _context.register(DropZone, 'DropZone');\n\n}, {\n Form: 'Nittro.Forms.Form',\n Vendor: 'Nittro.Forms.Vendor',\n Arrays: 'Utils.Arrays',\n Strings: 'Utils.Strings',\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Extras.Paginator', function (Arrays, Strings, DOM, undefined) {\n\n var Paginator = _context.extend('Nittro.Object', function(ajax, history, options) {\n Paginator.Super.call(this);\n\n this._.ajax = ajax;\n this._.history = history;\n this._.options = Arrays.mergeTree({}, Paginator.defaults, options);\n this._.container = this._.options.container;\n this._.viewport = this._resolveViewport(this._.options.container, this._.options.viewport);\n this._.currentRequest = null;\n\n if (this._.options.pageSize === null) {\n throw new Error('You must specify the page size (number of items per page)');\n }\n\n if (this._.options.pageCount === null) {\n throw new Error('You must specify the page count');\n }\n\n if (this._.options.disablePreviousPages === null) {\n this._.options.disablePreviousPages = this._.options.currentPage === 1;\n }\n\n if (this._.options.margin === null) {\n this._.options.margin = this._computeMargin();\n }\n\n if (this._.options.history === null) {\n this._.options.history = !!this._.options.url;\n }\n\n if (typeof this._.options.itemRenderer === 'string') {\n this._.template = DOM.getById(this._.options.itemRenderer).innerHTML;\n } else if (typeof this._.options.template === 'string') {\n this._.template = this._.options.template;\n }\n\n if (this._.options.responseProcessor === null) {\n this._.options.responseProcessor = this._processResponse.bind(this);\n }\n\n this._.firstPage = this._.lastPage = this._.currentPage = this._.options.currentPage;\n this._.lock = false;\n this._.nextThreshold = this._computeNextThreshold();\n this._.handleScroll = this._handleScroll.bind(this);\n\n if (!this._.options.disablePreviousPages) {\n var prevElem = this._.container.tagName.toLowerCase();\n this._.prevContainer = DOM.create(prevElem, {'class': 'nittro-paginator-previous'});\n this._.container.insertBefore(this._.prevContainer, this._.container.firstChild);\n\n this._.previousItems = null;\n this._.previousLock = {\n time: Date.now() + 1000,\n threshold: this._computeElemOffset(this._getFirstItem())\n };\n\n this._.previousThreshold = this._computePreviousThreshold();\n }\n\n this._.pageThresholds = [\n {\n page: this._.currentPage,\n threshold: this._computeElemOffset(this._getFirstItem()) + this._getScrollTop()\n }\n ];\n\n if (Array.isArray(this._.options.items)) {\n this._getItems(this._.options.currentPage);\n }\n\n if (!this._.options.disablePreviousPages) {\n this._preparePreviousPage();\n }\n\n DOM.addListener(this._.viewport, 'scroll', this._.handleScroll);\n\n }, {\n STATIC: {\n defaults: {\n container: null,\n viewport: null,\n itemRenderer: null,\n template: null,\n items: null,\n url: null,\n responseProcessor: null,\n history: null,\n margin: null,\n currentPage: 1,\n pageCount: null,\n pageSize: null,\n disablePreviousPages: null\n }\n },\n\n destroy: function () {\n if (this._.prevContainer) {\n this._.prevContainer.parentNode.removeChild(this._.prevContainer);\n }\n\n if (this._.currentRequest) {\n this._.currentRequest.abort();\n }\n\n DOM.removeListener(this._.viewport, 'scroll', this._.handleScroll);\n this._.container = this._.prevContainer = this._.viewport = this._.options = this._.currentRequest = null;\n this._.lock = false;\n },\n\n _handleScroll: function () {\n if (this._.lock) {\n return;\n }\n\n this._.lock = true;\n\n window.requestAnimationFrame(function() {\n if (!this._.lock) {\n return;\n }\n\n this._.lock = false;\n\n var top = this._getScrollTop(),\n i, t, p, n;\n\n if (this._.nextThreshold !== null && top > this._.nextThreshold) {\n this._.nextThreshold = null;\n this._renderNextPage();\n\n } else if (this._.previousLock) {\n if (this._.previousLock.time < Date.now() && top > this._.previousLock.threshold) {\n this._.previousLock = null;\n\n }\n } else if (this._.previousThreshold !== null && top < this._.previousThreshold) {\n this._.previousThreshold = null;\n this._renderPreviousPage();\n\n }\n\n if ((!this._.previousLock || this._.previousLock.time < Date.now()) && this._.options.history) {\n for (i = 1, t = this._.pageThresholds.length; i <= t; i++) {\n p = this._.pageThresholds[i - 1];\n n = this._.pageThresholds[i];\n\n if (top > p.threshold && (!n || top < n.threshold) && p.page !== this._.currentPage) {\n this._.currentPage = p.page;\n this._.history.replace(this._getPageUrl(p.page, true));\n break;\n\n }\n }\n }\n }.bind(this));\n },\n\n _getPageUrl: function(page, history) {\n var url = history && typeof this._.options.history !== 'boolean' ? this._.options.history : this._.options.url;\n\n if (typeof url === 'function') {\n return url.call(null, page);\n } else {\n return url.replace(/%page%/g, page);\n }\n },\n\n _getItems: function(page) {\n if (Array.isArray(this._.options.items)) {\n var args = new Array(this._.options.pageSize),\n items;\n\n args.unshift((page - 1) * this._.options.pageSize, this._.options.pageSize);\n items = this._.options.items.splice.apply(this._.options.items, args);\n return Promise.resolve(items);\n\n } else {\n var url = this._getPageUrl(page);\n\n this._.currentRequest = this._.ajax.get(url);\n\n return this._.currentRequest\n .then(function(response) { this._.currentRequest = null; return response; }.bind(this))\n .then(this._.options.responseProcessor)\n .then(function(items) { return Array.isArray(items) ? items : []; });\n }\n },\n\n _processResponse: function(response) {\n return response.getPayload().items || [];\n },\n\n _preparePreviousPage: function() {\n if (this._.firstPage > 1) {\n this._.previousItems = this._getItems(this._.firstPage - 1)\n .then(function(items) {\n items = items\n .map(this._createItem.bind(this))\n .map(function(elem) {\n this._.prevContainer.appendChild(elem);\n return elem;\n }.bind(this));\n\n this.trigger('page-prepared', {\n items: items\n });\n\n return items;\n }.bind(this), function() { return null; });\n } else {\n this._.previousItems = Promise.resolve(null);\n }\n },\n\n _renderPreviousPage: function() {\n return this._.previousItems.then(function(items) {\n if (!items) {\n return;\n }\n\n this._.firstPage--;\n\n var scrollTop = this._getScrollTop(),\n style = window.getComputedStyle(this._.prevContainer),\n first = items[0],\n existing = this._.prevContainer.nextElementSibling || null,\n itemStyle = window.getComputedStyle(first),\n pt = parseFloat(style.paddingTop.replace(/px$/, '')),\n pb = parseFloat(style.paddingBottom.replace(/px$/, '')),\n m = 0,\n delta,\n i;\n\n if (!style.display.match(/flex$/) && itemStyle.float === 'none') {\n m = Math.max(parseFloat(itemStyle.marginTop.replace(/px$/, '')), parseFloat(itemStyle.marginBottom.replace(/px$/, '')));\n }\n\n delta = this._.prevContainer.clientHeight - pt - pb - m;\n scrollTop += delta;\n\n for (i = 0; i < items.length; i++) {\n this._.container.insertBefore(items[i], existing);\n }\n\n this.trigger('page-rendered', { items: items });\n\n window.requestAnimationFrame(function() {\n this._setScrollTop(scrollTop);\n\n this._.pageThresholds.forEach(function(t) {\n t.threshold += delta\n });\n\n this._.pageThresholds.unshift({\n page: this._.firstPage,\n threshold: this._computeElemOffset(first) + scrollTop\n });\n\n }.bind(this));\n\n this._preparePreviousPage();\n this._.previousThreshold = this._computePreviousThreshold();\n\n }.bind(this));\n },\n\n _renderNextPage: function() {\n return this._getItems(this._.lastPage + 1).then(function(items) {\n this._.lastPage++;\n\n items = items.map(this._createItem.bind(this));\n\n for (var i = 0; i < items.length; i++) {\n this._.container.appendChild(items[i]);\n }\n\n this.trigger('page-rendered', { items: items });\n\n this._.nextThreshold = this._computeNextThreshold();\n\n this._.pageThresholds.push({\n page: this._.lastPage,\n threshold: this._computeElemOffset(items[0]) + this._getScrollTop()\n });\n\n }.bind(this), function() { return null; });\n },\n\n _createItem: function(data) {\n var item = this._renderItem(data);\n\n if (typeof item === 'string') {\n item = DOM.createFromHtml(item);\n }\n\n if (Array.isArray(item)) {\n throw new Error(\"Rendered item contains more than one root HTML element\");\n }\n\n return item;\n\n },\n\n _renderItem: function(data) {\n if (typeof data === 'string') {\n return data;\n\n } else if (this._.template) {\n return this._.template.replace(/%([a-z0-9_.-]+)%/gi, function () {\n var path = arguments[1].split(/\\./g),\n cursor = data,\n i, p, n = path.length;\n\n for (i = 0; i < n; i++) {\n p = path[i];\n\n if (Array.isArray(cursor) && p.match(/^\\d+$/)) {\n p = parseInt(p);\n }\n\n if (cursor[p] === undefined) {\n return '';\n }\n\n cursor = cursor[p];\n }\n\n return Strings.escapeHtml(cursor + '');\n });\n } else {\n return this._.options.itemRenderer.call(null, data);\n }\n },\n\n _getFirstItem: function () {\n return this._.options.disablePreviousPages ? this._.container.firstElementChild : this._.prevContainer.nextElementSibling;\n },\n\n _computePreviousThreshold: function() {\n return this._.firstPage > 1 ? this._.options.margin : null;\n },\n\n _computeNextThreshold: function() {\n if (!this._.container.lastElementChild || this._.lastPage >= this._.options.pageCount) {\n return null;\n }\n\n var ofs = this._computeElemOffset(this._.container.lastElementChild, 'bottom');\n return Math.max(0, ofs + this._getScrollTop() - this._getViewportHeight() - this._.options.margin);\n },\n\n _computeElemOffset: function(elem, edge) {\n var offset = elem.getBoundingClientRect()[edge || 'top'];\n\n if (this._.viewport !== window) {\n offset -= this._.viewport.getBoundingClientRect().top;\n }\n\n return offset;\n\n },\n\n _computeMargin: function () {\n return this._getViewportHeight() / 2;\n },\n\n _getViewportHeight: function() {\n return this._.viewport.clientHeight || this._.viewport.innerHeight;\n },\n\n _getScrollTop: function() {\n return this._.viewport === window ? window.pageYOffset : this._.viewport.scrollTop;\n },\n\n _setScrollTop: function(to) {\n if (this._.viewport === window) {\n window.scrollTo(0, to);\n } else {\n this._.viewport.scrollTop = to;\n }\n },\n\n _resolveViewport: function (elem, viewport) {\n if (viewport === 'auto') {\n viewport = elem;\n\n function isScrollable(elem) {\n var style = window.getComputedStyle(elem);\n return style.overflow === 'auto' || style.overflow === 'scroll'\n || style.overflowY === 'auto' || style.overflowY === 'scroll';\n }\n\n while (viewport && viewport !== document.body && !isScrollable(viewport)) {\n viewport = viewport.parentNode;\n }\n } else if (viewport === null) {\n return window;\n }\n\n return viewport && DOM.contains(document.body, viewport) ? viewport : window;\n }\n });\n\n _context.register(Paginator, 'Paginator');\n\n}, {\n Arrays: 'Utils.Arrays',\n Strings: 'Utils.Strings',\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Extras.Storage', function() {\n\n var Storage = _context.extend(function(namespace, persistent) {\n this._.persistent = persistent;\n this._.engine = persistent ? window.localStorage : window.sessionStorage;\n this._.items = {};\n this._.namespace = namespace || '';\n this._.filters = {\n 'in': [],\n out: []\n };\n\n }, {\n STATIC: {\n NAMESPACE_SEPARATOR: '/',\n FILTER_IN : 'in',\n FILTER_OUT : 'out'\n },\n\n getItem: function(key, need) {\n var value = this._.engine.getItem(this._formatKey(key));\n\n if (value === null) {\n if (need) {\n throw new Error();\n\n }\n\n return null;\n\n }\n\n return this._applyFilters(this._parseValue(value), Storage.FILTER_OUT);\n\n },\n\n setItem: function(key, value) {\n value = this._stringifyValue(this._applyFilters(value, Storage.FILTER_IN));\n this._.engine.setItem(this._formatKey(key), value);\n\n return this;\n\n },\n\n hasItem: function(key) {\n return this._.engine.getItem(this._formatKey(key)) !== null;\n\n },\n\n removeItem: function(key) {\n this._.engine.removeItem(this._formatKey(key));\n return this;\n\n },\n\n clear: function() {\n var ns = this._.namespace + Storage.NAMESPACE_SEPARATOR,\n nsl = ns.length,\n rem = [];\n\n for (var i = 0; i < this._.engine.length; i++) {\n var k = this._.engine.key(i);\n\n if (k.substr(0, nsl) === ns) {\n rem.push(k);\n\n }\n }\n\n while (rem.length) {\n this._.engine.removeItem(rem.shift());\n\n }\n\n return this;\n\n },\n\n walk: function(callback) {\n var ns = this._.namespace + Storage.NAMESPACE_SEPARATOR,\n nsl = ns.length;\n\n for (var i = 0; i < this._.engine.length; i++) {\n var k = this._.engine.key(i);\n\n if (k.substr(0, nsl) === ns) {\n k = k.substr(nsl);\n var v = this.getItem(k);\n callback.call(v, k, v);\n\n }\n }\n },\n\n getNamespace: function(namespace) {\n return new this.constructor((this._.namespace ? this._.namespace + Storage.NAMESPACE_SEPARATOR : '') + namespace, this._.persistent);\n\n },\n\n addFilter: function(callback, type) {\n this._.filters[type].push(callback);\n return this;\n\n },\n\n _formatKey: function(key) {\n return this._.namespace + Storage.NAMESPACE_SEPARATOR + key;\n\n },\n\n _parseValue: function(value) {\n return JSON.parse(value);\n\n },\n\n _stringifyValue: function(value) {\n return JSON.stringify(value);\n\n },\n\n _applyFilters: function(value, type) {\n for (var i = 0; i < this._.filters[type].length; i++) {\n value = this._.filters[type][i](value);\n\n }\n\n return value;\n\n }\n });\n\n _context.register(Storage, 'Storage');\n\n});\n","_context.invoke('Nittro.Ajax.Bridges.AjaxDI', function(Nittro) {\n\n var AjaxExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n AjaxExtension.Super.call(this, containerBuilder, config);\n }, {\n STATIC: {\n defaults: {\n allowOrigins: null\n }\n },\n load: function() {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(AjaxExtension.defaults);\n\n builder.addServiceDefinition('ajax', {\n factory: 'Nittro.Ajax.Service()',\n args: {\n options: config\n },\n run: true,\n setup: [\n '::setTransport(Nittro.Ajax.Transport.Native())'\n ]\n });\n }\n });\n\n _context.register(AjaxExtension, 'AjaxExtension')\n\n});\n","_context.invoke('Nittro.Page.Bridges.PageDI', function (Nittro) {\n\n var PageExtension = _context.extend('Nittro.DI.BuilderExtension', function (containerBuilder, config) {\n PageExtension.Super.call(this, containerBuilder, config);\n }, {\n STATIC: {\n defaults: {\n whitelistHistory: false,\n whitelistLinks: false,\n whitelistRedirects: false,\n backgroundErrors: false,\n csp: null,\n transitions: {\n defaultSelector: '.nittro-transition-auto'\n },\n i18n: {\n connectionError: 'There was an error connecting to the server. Please check your internet connection and try again.',\n unknownError: 'There was an error processing your request. Please try again later.'\n },\n scroll: {\n target: null,\n margin: 30,\n scrollDown: false,\n duration: 500\n }\n }\n },\n load: function () {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(PageExtension.defaults);\n\n builder.addServiceDefinition('page', {\n factory: 'Nittro.Page.Service()',\n args: {\n options: {\n whitelistLinks: config.whitelistLinks,\n backgroundErrors: config.backgroundErrors\n }\n },\n run: true\n });\n\n builder.addServiceDefinition('ajaxAgent', {\n factory: 'Nittro.Page.AjaxAgent()',\n args: {\n options: {\n whitelistRedirects: config.whitelistRedirects\n }\n },\n run: true\n });\n\n builder.addServiceDefinition('historyAgent', {\n factory: 'Nittro.Page.HistoryAgent()',\n args: {\n options: {\n whitelistHistory: config.whitelistHistory\n }\n },\n run: true\n });\n\n builder.addServiceDefinition('scrollAgent', {\n factory: 'Nittro.Page.ScrollAgent()',\n args: {\n options: config.scroll\n },\n run: true\n });\n\n builder.addServiceDefinition('snippetAgent', 'Nittro.Page.SnippetAgent()!');\n builder.addServiceDefinition('snippetManager', 'Nittro.Page.SnippetManager()');\n builder.addServiceDefinition('history', 'Nittro.Page.History()');\n\n if (typeof window.ga === 'function') {\n builder.addServiceDefinition('googleAnalyticsHelper', 'Nittro.Page.GoogleAnalyticsHelper()!');\n }\n\n if (config.transitions) {\n builder.addServiceDefinition('transitionAgent', {\n factory: 'Nittro.Page.TransitionAgent()',\n args: {\n options: {\n defaultSelector: config.transitions.defaultSelector\n }\n },\n run: true\n });\n }\n\n if (config.csp !== false) {\n var scripts = document.getElementsByTagName('script'),\n i, n, nonce = null;\n\n for (i = 0, n = scripts.length; i < n; i++) {\n if (/^((text|application)\\/javascript)?$/i.test(scripts.item(i).type) && scripts.item(i).nonce) {\n nonce = scripts.item(i).nonce;\n break;\n }\n }\n\n if (config.csp || nonce) {\n builder.addServiceDefinition('cspAgent', {\n factory: 'Nittro.Page.CspAgent()',\n args: {\n nonce: nonce\n },\n run: true\n });\n }\n }\n },\n\n setup: function() {\n var builder = this._getContainerBuilder(),\n config = this._getConfig();\n\n if (builder.hasServiceDefinition('flashes')) {\n builder.addServiceDefinition('flashAgent', 'Nittro.Page.Bridges.PageFlashes.FlashAgent()!');\n\n builder.getServiceDefinition('page')\n .addSetup(function(flashes) {\n this.on('error:default', function (evt) {\n if (evt.data.type === 'connection') {\n flashes.add(config.i18n.connectionError, 'error');\n\n } else if (evt.data.type !== 'abort') {\n flashes.add(config.i18n.unknownError, 'error');\n\n }\n });\n });\n }\n }\n });\n\n _context.register(PageExtension, 'PageExtension');\n\n});\n","_context.invoke('Nittro.Page.Bridges.PageFlashes', function () {\n\n var FlashAgent = _context.extend(function(page, flashes) {\n this._ = {\n page: page,\n flashes: flashes\n };\n\n this._handleResponse = this._handleResponse.bind(this);\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n _initTransaction: function (evt) {\n evt.data.transaction.on('ajax-response', this._handleResponse);\n },\n\n _handleResponse: function (evt) {\n var payload = evt.data.response.getPayload();\n\n if (!payload.redirect && payload.flashes) {\n this._showFlashes(payload.flashes);\n }\n },\n\n _showFlashes: function (flashes) {\n var id, i;\n\n for (id in flashes) {\n if (flashes.hasOwnProperty(id) && flashes[id]) {\n for (i = 0; i < flashes[id].length; i++) {\n this._.flashes.add(flashes[id][i].message, flashes[id][i].type, id + 'es');\n\n }\n }\n }\n }\n });\n\n _context.register(FlashAgent, 'FlashAgent');\n\n});\n","_context.invoke('Nittro.Forms.Bridges.FormsDI', function(Nittro) {\n\n var FormsExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n FormsExtension.Super.call(this, containerBuilder, config);\n }, {\n STATIC: {\n defaults: {\n whitelistForms: false,\n autoResetForms: true\n }\n },\n\n load: function() {\n var builder = this._getContainerBuilder();\n builder.addServiceDefinition('formLocator', 'Nittro.Forms.Locator()');\n\n },\n\n setup: function () {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(FormsExtension.defaults);\n\n if (builder.hasServiceDefinition('page')) {\n builder.getServiceDefinition('page')\n .addSetup(function (formLocator) {\n this.initForms(formLocator, config);\n });\n }\n\n if (!builder.hasServiceDefinition('formErrorRenderer')) {\n builder.addServiceDefinition('formErrorRenderer', 'Nittro.Forms.DefaultErrorRenderer()');\n }\n }\n });\n\n _context.register(FormsExtension, 'FormsExtension')\n\n});\n","_context.invoke('Nittro.Forms.Bridges.FormsPage', function(Service, DOM) {\n\n var FormsMixin = {\n initForms: function (formLocator, options) {\n this._.formLocator = formLocator;\n this._.options.whitelistForms = options.whitelistForms;\n this._.options.autoResetForms = options.autoResetForms;\n\n DOM.addListener(document, 'submit', this._handleSubmit.bind(this));\n DOM.addListener(document, 'click', this._handleButtonClick.bind(this));\n this._.snippetManager.on('after-update', this._refreshForms.bind(this));\n this.on('transaction-created', this._initFormTransaction.bind(this));\n },\n\n sendForm: function (form, evt) {\n var frm = this._.formLocator.getForm(form);\n\n return this.open(form.action, form.method, frm.serialize(), {\n event: evt,\n element: form\n })\n .then(this._handleFormSuccess.bind(this, frm));\n },\n\n _initFormTransaction: function (evt) {\n if (evt.data.context.element && evt.data.context.element instanceof HTMLFormElement) {\n var data = {\n form: this._.formLocator.getForm(evt.data.context.element),\n allowReset: true\n };\n\n evt.data.transaction.on('ajax-response', this._handleFormResponse.bind(this, data));\n evt.data.transaction.then(this._handleFormSuccess.bind(this, data), function() { /* noop on transaction error */ });\n }\n },\n\n _handleFormResponse: function (data, evt) {\n var payload = evt.data.response.getPayload();\n\n if ('allowReset' in payload) {\n data.allowReset = payload.allowReset;\n }\n },\n\n _handleFormSuccess: function (data) {\n if (data.allowReset && data.form.getElement() && DOM.getData(data.form.getElement(), 'reset', this._.options.autoResetForms)) {\n data.form.reset();\n }\n },\n\n _handleSubmit: function (evt) {\n if (evt.defaultPrevented || !(evt.target instanceof HTMLFormElement) || !this._checkForm(evt.target)) {\n return;\n }\n\n this.sendForm(evt.target, evt);\n\n },\n\n _handleButtonClick: function (evt) {\n if (evt.defaultPrevented || evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey || evt.button > 0) {\n return;\n\n }\n\n var btn = DOM.closest(evt.target, 'button') || DOM.closest(evt.target, 'input'),\n frm;\n\n if (!btn || btn.type !== 'submit' || !btn.form || !this._checkForm(btn.form)) {\n return;\n\n }\n\n frm = this._.formLocator.getForm(btn.form);\n frm.setSubmittedBy(btn.name || null);\n\n },\n\n _checkForm: function (form) {\n if (form.getAttribute('target')) {\n return false;\n }\n\n return DOM.getData(form, 'ajax', !this._.options.whitelistForms);\n\n },\n\n _refreshForms: function() {\n this._.formLocator.refreshForms();\n }\n };\n\n _context.register(FormsMixin, 'FormsMixin');\n _context.mixin(Service, FormsMixin);\n\n Service.defaults.whitelistForms = false;\n Service.defaults.autoResetForms = true;\n\n}, {\n Service: 'Nittro.Page.Service',\n DOM: 'Utils.DOM'\n});\n","_context.invoke('Nittro.Flashes.Bridges.FlashesDI', function(Neon, NeonEntity, HashMap) {\n\n var FlashesExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n FlashesExtension.Super.call(this, containerBuilder, config);\n\n }, {\n STATIC: {\n defaults: {\n layer: null,\n classes: null,\n positioner: {\n defaultOrder: null,\n margin: null\n }\n }\n },\n load: function() {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(FlashesExtension.defaults);\n\n var positioner;\n\n if (typeof config.positioner === 'string') {\n positioner = config.positioner.match(/^@[^(]+$/) ? config.positioner : Neon.decode('[' + config.positioner + ']').shift();\n } else {\n positioner = new NeonEntity('Nittro.Flashes.DefaultPositioner', HashMap.from(config.positioner));\n }\n\n builder.addServiceDefinition('flashes', {\n factory: 'Nittro.Flashes.Service()',\n args: {\n positioner: positioner,\n options: {\n layer: config.layer,\n classes: config.classes\n }\n },\n run: true\n });\n }\n });\n\n _context.register(FlashesExtension, 'FlashesExtension');\n\n}, {\n Neon: 'Nittro.Neon.Neon',\n NeonEntity: 'Nittro.Neon.NeonEntity',\n HashMap: 'Utils.HashMap'\n});\n","_context.invoke('Nittro.Routing.Bridges.RoutingDI', function(Nittro) {\n\n var RoutingExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n RoutingExtension.Super.call(this, containerBuilder, config)\n }, {\n STATIC: {\n defaults: {\n basePath: ''\n }\n },\n\n load: function () {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(RoutingExtension.defaults);\n\n builder.addServiceDefinition('router', {\n factory: 'Nittro.Routing.Router()',\n args: config,\n run: true\n });\n },\n\n setup: function () {\n var builder = this._getContainerBuilder();\n\n if (builder.hasServiceDefinition('snippetManager')) {\n builder.getServiceDefinition('snippetManager')\n .addSetup(function(router) {\n this.on('after-update', router.matchDOM.bind(router));\n });\n }\n\n if (builder.hasServiceDefinition('history')) {\n builder.getServiceDefinition('history')\n .addSetup(function (router) {\n this.on('savestate popstate', router.matchURL.bind(router));\n });\n }\n }\n });\n\n _context.register(RoutingExtension, 'RoutingExtension');\n\n});\n","_context.invoke('Nittro.Extras.CheckList.Bridges.CheckListDI', function () {\n\n var CheckListExtension = _context.extend('Nittro.DI.BuilderExtension', function (containerBuilder, config) {\n CheckListExtension.Super.call(this, containerBuilder, config);\n }, {\n load: function () {\n this._getContainerBuilder().addFactory('checkList', 'Nittro.Extras.CheckList.CheckList()');\n\n }\n });\n\n _context.register(CheckListExtension, 'CheckListExtension');\n\n});\n","_context.invoke('Nittro.Extras.Keymap.Bridges.KeymapDI', function () {\n\n var KeymapExtension = _context.extend('Nittro.DI.BuilderExtension', function (containerBuilder, config) {\n KeymapExtension.Super.call(this, containerBuilder, config);\n }, {\n load: function () {\n var builder = this._getContainerBuilder();\n\n builder.addServiceDefinition('keymapManager', 'Nittro.Extras.Keymap.Manager()');\n builder.addFactory('keymap', 'Nittro.Extras.Keymap.Keymap()');\n builder.addFactory('tabContext', 'Nittro.Extras.Keymap.TabContext()');\n\n }\n });\n\n _context.register(KeymapExtension, 'KeymapExtension');\n\n});\n","_context.invoke('Nittro.Extras.Dialogs.Bridges.DialogsPage', function (DOM, Url, Arrays, undefined) {\n\n var anonId = 0;\n\n var DialogAgent = _context.extend('Nittro.Object', function (page, dialogManager, snippetManager, options) {\n DialogAgent.Super.call(this);\n this._.page = page;\n this._.dialogManager = dialogManager;\n this._.snippetManager = snippetManager;\n this._.formLocator = null;\n this._.options = Arrays.mergeTree({}, DialogAgent.defaults, options);\n\n this._.page.on('before-transaction', this._setupTransactionContext.bind(this));\n this._.page.on('transaction-created', this._initTransaction.bind(this));\n }, {\n STATIC: {\n defaults: {\n whitelistHistory: true,\n disableDefaultTransitions: true,\n disableDefaultScroll: true\n }\n },\n\n setFormLocator: function (formLocator) {\n this._.formLocator = formLocator;\n return this;\n },\n\n _setupTransactionContext: function (evt) {\n if (evt.isDefaultPrevented()) {\n return;\n }\n\n var ctx = evt.data.context,\n def = ctx.element ? DOM.getData(ctx.element, 'dialog', null) : null,\n current = this._.dialogManager.getTopmostOpenDialog(),\n dialogs = {},\n active, iframe, name;\n\n if (def !== null) {\n this._mergeDefinitions(dialogs, def);\n }\n\n if (ctx.dialogs) {\n this._mergeDefinitions(dialogs, ctx.dialogs);\n }\n\n for (name in dialogs) if (dialogs.hasOwnProperty(name)) {\n def = dialogs[name];\n\n if (name === 'current' || name === 'self') {\n delete dialogs[name];\n\n if (current && (name === 'current' || ctx.element && DOM.contains(current.getContent(), ctx.element))) {\n name = current.getName();\n dialogs[name] = def;\n\n if (typeof def === 'object') {\n def.name = name;\n }\n } else {\n continue;\n }\n }\n\n if (typeof def === 'object') {\n active = true;\n\n if (def.type === 'iframe') {\n iframe = name;\n }\n }\n }\n\n if (current) {\n if (!(current.getName() in dialogs)) {\n dialogs[current.getName()] = false;\n } else if (dialogs[current.getName()] === true) {\n delete dialogs[current.getName()];\n }\n }\n\n ctx.dialogs = dialogs;\n\n if (active) {\n if (this._.options.whitelistHistory && !('history' in ctx) && (!ctx.element || !ctx.element.hasAttribute('data-history'))) {\n ctx.history = false;\n }\n\n if (this._.options.disableDefaultTransitions && !('transition' in ctx) && (!ctx.element || !ctx.element.hasAttribute('data-transition'))) {\n ctx.transition = false;\n }\n\n if (this._.options.disableDefaultScroll && !('scrollTo' in ctx) && (!ctx.element || !ctx.element.hasAttribute('data-scroll-to'))) {\n ctx.scrollTo = false;\n }\n }\n\n if (iframe) {\n evt.preventDefault();\n ctx.event && ctx.event.preventDefault();\n def = dialogs[iframe];\n def.source || def.source === '' || (def.source = evt.data.url);\n this._openIframeDialog(def, ctx.element);\n }\n },\n\n _initTransaction: function (evt) {\n var data = {\n pending: [],\n dialogs: evt.data.context.dialogs\n };\n\n evt.data.transaction.on('dispatch', this._dispatch.bind(this, data));\n evt.data.transaction.on('ajax-response', this._handleResponse.bind(this, data));\n evt.data.transaction.on('snippets-apply', this._handleSnippets.bind(this, data));\n },\n\n _openIframeDialog: function (def, elem) {\n var dlg = this._createDialog(def.name, def);\n\n if (elem && this._.formLocator && elem instanceof HTMLFormElement) {\n var frm = this._.formLocator.getForm(elem),\n external = true,\n tmp;\n\n if (/^get$/i.test(elem.method)) {\n def.source = Url.from(def.source)\n .addParams(frm.serialize().exportData(true))\n .toAbsolute();\n\n external = false;\n }\n\n dlg.setUrl(def.source, external);\n\n if (external) {\n tmp = elem.target;\n elem.target = def.name;\n frm.submit();\n window.setTimeout(function() { elem.target = tmp; }, 1);\n }\n } else {\n dlg.setUrl(def.source);\n }\n\n dlg.show();\n },\n\n _dispatch: function (data, evt) {\n var name, promise;\n\n for (name in data.dialogs) if (data.dialogs.hasOwnProperty(name)) {\n if (promise = this._processDialog(name, data.dialogs[name], data, evt.target)) {\n evt.waitFor(promise);\n }\n }\n },\n\n _handleResponse: function (data, evt) {\n var payload = evt.data.response.getPayload(),\n merged, i, n;\n\n if ('dialogs' in payload) {\n merged = this._mergeDefinitions(data.dialogs, payload.dialogs);\n\n for (i = 0, n = merged.length; i < n; i++) {\n this._processDialog(merged[i], data.dialogs[merged[i]], data, evt.target);\n }\n }\n },\n\n _handleSnippets: function (data, evt) {\n var changeset = evt.data.changeset;\n\n evt.waitFor(Promise.all(data.pending));\n data.pending = [];\n\n var name, def, id, dlg, snippet, content;\n\n for (name in data.dialogs) if (data.dialogs.hasOwnProperty(name) && (def = data.dialogs[name]) && this._isSnippetType(def)) {\n dlg = this._.dialogManager.getDialog(name);\n snippet = changeset.update[def.source];\n\n if (snippet) {\n if (snippet.container) {\n throw new Error('Dialogs from dynamic snippets aren\\'t supported');\n }\n\n for (id in changeset.remove) if (changeset.remove.hasOwnProperty(id)) {\n if (changeset.remove[id].isDescendant && DOM.contains(snippet.element, changeset.remove[id].element)) {\n delete changeset.remove[id];\n }\n }\n\n id = def.source.replace(/^snippet-/, 'dlg-');\n delete changeset.update[def.source];\n\n if (dlg) {\n changeset.update[id] = snippet;\n content = dlg.getContent();\n content.id = id;\n snippet.element = content;\n\n if (this._.formLocator && def.type === 'form') {\n evt.target.then(this._injectForm.bind(this, dlg));\n }\n\n evt.target.then(dlg.show.bind(dlg));\n }\n } else {\n dlg && evt.waitFor(dlg.destroy());\n }\n }\n },\n\n _isSnippetType: function (def) {\n return !def.type || def.type === 'form';\n },\n\n _mergeDefinitions: function (dialogs, defs) {\n var merged = [],\n name, m, def;\n\n if (typeof defs === 'string') {\n defs = { '': defs };\n } else if ('source' in defs || 'type' in defs) {\n defs = { '': defs };\n }\n\n for (name in defs) if (defs.hasOwnProperty(name)) {\n def = defs[name];\n\n if (typeof def === 'string') {\n m = /^keep-current(?:;\\s*|$)/.exec(def);\n\n if (m) {\n def = def.substr(m[0].length);\n dialogs.current = true;\n }\n\n if (!def) {\n continue;\n }\n\n def = this._parseDescriptor(def);\n }\n\n if (typeof def === 'object') {\n if (!def.name && name) {\n def.name = name;\n }\n\n if (!def.name || !def.source) {\n throw new Error('Invalid dialog definition: must be an object with the keys \"name\" and \"source\" and optionally \"type\" and / or \"options\"');\n }\n\n dialogs[def.name] = def;\n merged.push(def.name);\n } else if (name) {\n dialogs[name] = def;\n merged.push(name);\n }\n }\n\n return merged;\n },\n\n _parseDescriptor: function (descriptor) {\n var m = /^(?:(self|current)|(?:(form|iframe)(?=[\\s:]))?\\s*([^:]+?)?)\\s*:\\s*(.+)$/.exec(descriptor);\n\n if (!m) {\n window.console && console.warn(\n 'Construction of dialogs using data-dialog=\"\" is deprecated, please update '\n + 'your code to use data-dialog=\"([ ]|self): (|)\".'\n );\n\n return {\n name: 'dlg-anonymous-' + (++anonId),\n source: descriptor\n };\n } else if (m[1]) {\n return {\n name: m[1],\n source: m[4]\n };\n } else {\n return {\n name: m[3],\n type: m[2] || null,\n source: m[4]\n };\n }\n },\n\n _processDialog: function (name, def, data, transaction) {\n var dlg = this._.dialogManager.getDialog(name),\n promise = null;\n\n if (!def) {\n if (dlg) {\n promise = dlg.destroy();\n }\n } else {\n if (!dlg) {\n dlg = this._createDialog(name, def);\n }\n\n promise = dlg.setBusy();\n\n if (def.type === 'iframe') {\n dlg.setUrl(def.source);\n transaction.then(dlg.show.bind(dlg));\n }\n }\n\n promise && data.pending.push(promise);\n return promise;\n },\n\n _createDialog: function (name, def) {\n def.options || (def.options = {});\n\n if (this._isSnippetType(def)) {\n def.options.content = DOM.create('div');\n def.options.buttons = null;\n }\n\n var dlg;\n\n if (def.type === 'form' && this._.formLocator) {\n dlg = this._.dialogManager.createFormDialog(name, def.options);\n } else if (def.type === 'iframe') {\n dlg = this._.dialogManager.createIFrameDialog(name, null, def.options);\n } else {\n dlg = this._.dialogManager.createDialog(name, def.options);\n }\n\n dlg.one('hidden', dlg.destroy.bind(dlg));\n\n if (this._isSnippetType(def)) {\n dlg.on('destroyed', this._cleanupDialog.bind(this));\n }\n\n return dlg;\n },\n\n _injectForm: function (dlg) {\n var frm = dlg.getContent().getElementsByTagName('form').item(0);\n dlg.setForm(frm ? this._.formLocator.getForm(frm) : null);\n },\n\n _cleanupDialog: function (evt) {\n this._.snippetManager.cleanupDescendants(evt.target.getElement());\n }\n });\n\n _context.register(DialogAgent, 'DialogAgent');\n\n}, {\n DOM: 'Utils.DOM',\n Url: 'Utils.Url',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Extras.Dialogs', function(Dialog, DOM, Arrays) {\n\n var FormDialog = _context.extend(Dialog, function(name, options, form) {\n FormDialog.Super.call(this, name, options);\n\n this._.form = null;\n\n this.on('button', this._handleButton.bind(this));\n\n if (this._.options.autoFocus) {\n this.on('shown', this._autoFocus.bind(this));\n }\n\n if (this._.options.resetOnHide) {\n this.on('hidden', this._autoReset.bind(this));\n }\n\n if (form) {\n this.setForm(form);\n }\n }, {\n STATIC: {\n defaults: {\n classes: 'nittro-dialog-form',\n resetOnHide: true,\n autoFocus: true\n },\n setDefaults: function(defaults) {\n Arrays.mergeTree(FormDialog.defaults, defaults);\n }\n },\n\n setForm: function (form) {\n this._.form = form;\n\n if (form && this._.tabContext) {\n this._.tabContext.clear().addFromContainer(form.getElement(), false, 0);\n }\n\n return this;\n },\n\n setValues: function(values) {\n this._.form.setValues(values);\n return this;\n },\n\n reset: function() {\n this._.form && this._.form.reset();\n return this;\n },\n\n getForm: function() {\n return this._.form;\n },\n\n _handleButton: function(evt) {\n if (evt.data.action === 'submit') {\n evt.preventDefault();\n this._.form.submit();\n }\n },\n\n _autoFocus: function () {\n if (this._.form) {\n try {\n for (var elems = this._.form.getElements(), i = 0, n = elems.length; i < n; i++) {\n if (!/^(?:button|submit|reset|hidden)$/i.test(elems.item(i).type || '') && elems.item(i).tabIndex >= 0) {\n elems.item(i).focus();\n break;\n }\n }\n } catch (e) { /* noop */ }\n }\n },\n\n _autoReset: function () {\n if (this._.form && this._.form.getElement() && DOM.getData(this._.form.getElement(), 'reset', true)) {\n this.reset();\n }\n }\n });\n\n _context.register(FormDialog, 'FormDialog');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Extras.Dialogs.Bridges.DialogsForms', function (Manager, FormDialog) {\n\n var FormDialogMixin = {\n setFormLocator: function (formLocator) {\n this._.formLocator = formLocator;\n return this;\n },\n\n createFormDialog: function (name, options) {\n var dlg = new FormDialog(name, options);\n this._setup(dlg);\n\n dlg.on('destroyed', this._removeDialogForm.bind(this));\n\n var frm = dlg.getContent().getElementsByTagName('form').item(0);\n dlg.setForm(frm ? this._.formLocator.getForm(frm) : null);\n\n return dlg;\n },\n\n _removeDialogForm: function (evt) {\n var form = evt.target.getForm();\n\n if (form) {\n if (form.getElement()) {\n this._.formLocator.removeForm(form.getElement());\n }\n\n evt.target.setForm(null);\n }\n }\n };\n\n _context.mixin(Manager, FormDialogMixin);\n\n}, {\n Manager: 'Nittro.Extras.Dialogs.Manager',\n FormDialog: 'Nittro.Extras.Dialogs.FormDialog'\n});\n","_context.invoke('Nittro.Extras.Dialogs.Bridges.DialogsKeymap', function (Manager) {\n\n var KeymapMixin = {\n setKeymapManager: function (keymapManager) {\n this._.keymapManager = keymapManager;\n this.on('setup', this._setupKeymap.bind(this));\n this._pushKeymap = this._pushKeymap.bind(this);\n this._popKeymap = this._popKeymap.bind(this);\n return this;\n },\n\n _setupKeymap: function (evt) {\n evt.data.dialog.on('show', this._pushKeymap);\n evt.data.dialog.on('hide', this._popKeymap);\n },\n\n _pushKeymap: function (evt) {\n this._.keymapManager.push(evt.target.getKeyMap(), evt.target.getTabContext());\n },\n\n _popKeymap: function (evt) {\n this._.keymapManager.pop(evt.target.getKeyMap(), evt.target.getTabContext());\n }\n };\n\n _context.mixin(Manager, KeymapMixin);\n\n}, {\n Manager: 'Nittro.Extras.Dialogs.Manager'\n});\n","_context.invoke('Nittro.Extras.Dialogs.Bridges.DialogsDI', function() {\n\n var DialogsExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n DialogsExtension.Super.call(this, containerBuilder, config);\n }, {\n STATIC: {\n defaults: {\n baseZ: 1000,\n whitelistHistory: true,\n disableDefaultTransitions: true\n }\n },\n\n load: function () {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(DialogsExtension.defaults);\n\n builder.addServiceDefinition('dialogManager', {\n factory: 'Nittro.Extras.Dialogs.Manager()',\n args: {\n baseZ: config.baseZ\n }\n });\n\n builder.addFactory('dialog', '@dialogManager::createDialog()');\n builder.addFactory('iframeDialog', '@dialogManager::createIFrameDialog()');\n },\n\n setup: function() {\n var builder = this._getContainerBuilder(),\n config = this._getConfig(),\n def = builder.getServiceDefinition('dialogManager');\n\n if (builder.hasServiceDefinition('formLocator')) {\n def.addSetup('::setFormLocator()');\n builder.addFactory('formDialog', '@dialogManager::createFormDialog()');\n }\n\n if (builder.hasServiceDefinition('keymapManager')) {\n def.addSetup('::setKeymapManager()');\n }\n\n if (builder.hasServiceDefinition('page')) {\n builder.addServiceDefinition('dialogAgent', {\n factory: 'Nittro.Extras.Dialogs.Bridges.DialogsPage.DialogAgent()',\n args: {\n options: {\n whitelistHistory: config.whitelistHistory,\n disableDefaultTransitions: config.disableDefaultTransitions\n }\n },\n run: true\n });\n\n if (builder.hasServiceDefinition('formLocator')) {\n builder.getServiceDefinition('dialogAgent')\n .addSetup('::setFormLocator()');\n }\n }\n }\n });\n\n _context.register(DialogsExtension, 'DialogsExtension')\n\n});\n","_context.invoke('Nittro.Extras.Confirm.Bridges.ConfirmDI', function() {\n\n var ConfirmExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n ConfirmExtension.Super.call(this, containerBuilder, config);\n }, {\n setup: function() {\n var builder = this._getContainerBuilder();\n\n if (builder.hasServiceDefinition('dialogManager')) {\n builder.addFactory('confirm', '@dialogManager::createConfirm()');\n }\n\n if (builder.hasServiceDefinition('page')) {\n builder.addServiceDefinition('autoConfirm', {\n factory: 'Nittro.Extras.Confirm.Bridges.ConfirmPage.AutoConfirm()',\n args: {\n options: this._getConfig()\n },\n run: true\n });\n\n builder.getServiceDefinition('page')\n .addSetup(function(autoConfirm) {\n this.on('before-transaction', autoConfirm.handleTransaction.bind(autoConfirm))\n });\n }\n\n }\n });\n\n _context.register(ConfirmExtension, 'ConfirmExtension')\n\n});\n","_context.invoke('Nittro.Extras.Confirm.Bridges.ConfirmPage', function (DOM, Arrays) {\n\n var AutoConfirm = _context.extend(function(dialogManager, options) {\n this._ = {\n dialogManager: dialogManager,\n options: Arrays.mergeTree(true, {}, AutoConfirm.defaults, options)\n };\n }, {\n STATIC: {\n defaults: {\n prompt: 'Are you sure?',\n confirm: 'Yes',\n cancel: 'No'\n }\n },\n\n handleTransaction: function (evt) {\n var elem = evt.data.context.element || null,\n prompt = elem ? DOM.getData(elem, 'prompt') : null;\n\n if (!prompt) {\n return;\n }\n\n if (typeof prompt !== 'string') {\n prompt = this._.options.prompt;\n }\n\n var confirm = DOM.getData(elem, 'confirm') || this._.options.confirm,\n cancel = DOM.getData(elem, 'cancel') || this._.options.cancel;\n\n evt.waitFor(\n this._.dialogManager.createConfirm(prompt, confirm, cancel)\n .then(function(result) { result || evt.preventDefault(); })\n );\n }\n });\n\n _context.register(AutoConfirm, 'AutoConfirm');\n\n}, {\n DOM: 'Utils.DOM',\n Arrays: 'Utils.Arrays'\n});\n","_context.invoke('Nittro.Extras.DropZone.Bridges.DropZoneDI', function() {\n\n var DropZoneExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n DropZoneExtension.Super.call(this, containerBuilder, config);\n }, {\n load: function() {\n this._getContainerBuilder().addFactory('dropZone', 'Nittro.Extras.DropZone.DropZone::create()');\n }\n });\n\n _context.register(DropZoneExtension, 'DropZoneExtension')\n\n});\n","_context.invoke('Nittro.Extras.Paginator.Bridges.PaginatorDI', function() {\n\n var PaginatorExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n PaginatorExtension.Super.call(this, containerBuilder, config);\n }, {\n load: function() {\n this._getContainerBuilder().addFactory('paginator', 'Nittro.Extras.Paginator.Paginator()');\n }\n });\n\n _context.register(PaginatorExtension, 'PaginatorExtension')\n\n});\n","_context.invoke('Nittro.Extras.Storage.Bridges.StorageDI', function() {\n\n var StorageExtension = _context.extend('Nittro.DI.BuilderExtension', function(containerBuilder, config) {\n StorageExtension.Super.call(this, containerBuilder, config);\n }, {\n load: function () {\n var builder = this._getContainerBuilder();\n\n builder.addServiceDefinition('persistentStorage', 'Nittro.Extras.Storage.Storage(namespace: null, persistent: true)');\n builder.addServiceDefinition('sessionStorage', 'Nittro.Extras.Storage.Storage(namespace: null, persistent: false)');\n\n }\n });\n\n _context.register(StorageExtension, 'StorageExtension');\n\n});\n","_context.invoke(function(Nittro) {\n var builder = new Nittro.DI.ContainerBuilder({\n \"params\": {},\n \"extensions\": {\n \"ajax\": \"Nittro.Ajax.Bridges.AjaxDI.AjaxExtension()\",\n \"page\": \"Nittro.Page.Bridges.PageDI.PageExtension()\",\n \"forms\": \"Nittro.Forms.Bridges.FormsDI.FormsExtension()\",\n \"flashes\": \"Nittro.Flashes.Bridges.FlashesDI.FlashesExtension()\",\n \"routing\": \"Nittro.Routing.Bridges.RoutingDI.RoutingExtension()\",\n \"checklist\": \"Nittro.Extras.CheckList.Bridges.CheckListDI.CheckListExtension()\",\n \"keymap\": \"Nittro.Extras.Keymap.Bridges.KeymapDI.KeymapExtension()\",\n \"dialogs\": \"Nittro.Extras.Dialogs.Bridges.DialogsDI.DialogsExtension()\",\n \"confirm\": \"Nittro.Extras.Confirm.Bridges.ConfirmDI.ConfirmExtension()\",\n \"dropzone\": \"Nittro.Extras.DropZone.Bridges.DropZoneDI.DropZoneExtension()\",\n \"paginator\": \"Nittro.Extras.Paginator.Bridges.PaginatorDI.PaginatorExtension()\",\n \"storage\": \"Nittro.Extras.Storage.Bridges.StorageDI.StorageExtension()\"\n },\n \"services\": {},\n \"factories\": {}\n });\n\n this.di = builder.createContainer();\n this.di.runServices();\n\n});","window._stack || (window._stack = []);\n\n(function(stack) {\n function exec(f) {\n if (typeof f === 'function') {\n _context.invoke(f);\n\n } else if (typeof f === 'object' && typeof f.load !== 'undefined') {\n var q = _context.load.apply(_context, f.load);\n\n if (typeof f.then === 'function') {\n q.then(f.then);\n\n } else if (f.then && f.then instanceof Array) {\n q.then.apply(_context, f.then);\n\n }\n } else {\n _context.invoke.apply(_context, f);\n\n }\n }\n\n while (stack.length) {\n exec(stack.shift());\n\n }\n\n stack.push = function() {\n for (var i = 0; i < arguments.length; i++) {\n exec(arguments[i]);\n\n }\n };\n})(window._stack);\n"]}