UNPKG

spallinsonjs

Version:

A Web App Framework

2 lines 50.8 kB
var _A_={Container:null,Content:null,DebugConsole:null,Controllers:{},Services:{},Singletons:{},_R_:{},_I_:{},Setup:{init:function(){_A_.Setup.createAppContainer(),_A_.Setup.createAppContentContainer(),_A_.Setup.verifyCssTransitionSupport(),_A_.Debug.Console.init(),_A_.Debug.validateAppVariables()&&(_A_.Setup.setDefaultSettingsValues(),_A_.Splash.init(function(){_A_.Setup.performInitialRouting()}))},createAppContainer:function(){_A_.Container=document.createElement("SPAllinsonJS-App"),document.body.appendChild(_A_.Container)},createAppContentContainer:function(){_A_.Content=document.createElement("SPAllinsonJS-Content"),_A_.Content.setAttribute("id","_A_Content"),_A_.Content.className="_A_Content",_A_.Container.appendChild(_A_.Content)},verifyCssTransitionSupport:function(){_A_.Utils.isCssFeatureSupported("transition")||(_A_.Router.cssTransitionSupport=!1,_A_.Settings.splash&&(_A_.Settings.splash.doesFadeOut=!1))},setDefaultSettingsValues:function(){if(void 0===_A_.Settings.appRoot&&(_A_.Settings.appRoot="./"),void 0===_A_.Settings.splash&&(_A_.Settings.splash={enabled:!1}),void 0===_A_.Settings.fadeSpeedMills)_A_.Settings.fadeSpeedMills=500;else if(500!=_A_.Settings.fadeSpeedMills){var e=_A_.Settings.fadeSpeedMills/1e3,n=document.styleSheets[document.styleSheets.length-1];n.insertRule("._A_Fade_In { visibility: visible; opacity: 1; transition: visibility 0.0s, opacity "+e+"s; }",0),n.insertRule("._A_Fade_Out { visibility: hidden; opacity: 0; transition: visibility 0.0s "+e+"s, opacity "+e+"s; }",0)}void 0===_A_.Settings.historyEnabled&&(_A_.Settings.historyEnabled=!0),void 0===_A_.Settings.scriptManagementEnabled&&(_A_.Settings.scriptManagementEnabled=!1),void 0===_A_.Settings.routeRules&&(_A_.Settings.routeRules=[]),void 0===_A_.Settings.services&&(_A_.Settings.services={}),void 0===_A_.Settings.singletons&&(_A_.Settings.singletons={})},performInitialRouting:function(){var e;if(window.location.hash)e=window.location.hash;else{if(!_A_.Settings.initialRoute)return;e="#/"+_A_.Settings.initialRoute}_A_.Router.doReplaceHistoryItem=!0,_A_.Router.routeToHash(e,function(){_A_.Setup.cleanup()})},cleanup:function(){delete _A_.Preloader,delete _A_.Splash,delete _A_.Setup}}};_A_.Debug={Console:{Container:null,Panel:null,LogsTab:null,LogsPane:null,WarningsTab:null,WarningsPane:null,ErrorsTab:null,ErrorsPane:null,buttonRadius:50,buttonMoved:!1,init:function(){_A_.Debug.Console.Container=document.createElement("SPAllinsonJS-Debug-Console"),_A_.Debug.Console.Container.setAttribute("id","_A_.DebugConsole"),_A_.Debug.Console.Container.className="_A_DebugConsole",_A_.Debug.Console.Container.innerHTML='<div id="_A_.DebugConsolePanel" class="panel up left"><span class="console-title">SPAllinsonJS Debug Console</span><div class="tabs-container"><a id="_A_.DebugConsoleLogsTab" class="logs active" onclick="_A_.Debug.Console.tabPressed(\'logs\')">Logs</a><a id="_A_.DebugConsoleWarningsTab" class="warnings" onclick="_A_.Debug.Console.tabPressed(\'warnings\')">Warnings</a><a id="_A_.DebugConsoleErrorsTab" class="errors" onclick="_A_.Debug.Console.tabPressed(\'errors\')">Errors</a></div><div id="_A_.DebugConsoleLogsPane" class="content-pane"></div><div id="_A_.DebugConsoleWarningsPane" class="content-pane _A_Display_None"></div><div id="_A_.DebugConsoleErrorsPane" class="content-pane _A_Display_None"></div><div class="action-bar"><a onclick="_A_.Debug.Console.clearPressed()">Clear</a></div></div><div id="_A_.DebugConsoleButton" class="button" onclick="_A_.Debug.Console.buttonPressed()" onmousedown="_A_.Debug.Console.buttonDown()" onmouseup="_A_.Debug.Console.buttonUp()">DEBUG</div>',_A_.Container.appendChild(_A_.Debug.Console.Container),_A_.Debug.Console.setOutlets()},buttonPressed:function(){return _A_.Debug.Console.buttonMoved?void(_A_.Debug.Console.buttonMoved=!1):void(_A_.Debug.Console.Panel.classList.contains("_A_Display_None")?_A_.Debug.Console.Panel.classList.remove("_A_Display_None"):_A_.Debug.Console.Panel.classList.add("_A_Display_None"))},buttonDown:function(){window.addEventListener("mousemove",_A_.Debug.Console.mouseMoved,!1)},buttonUp:function(){window.removeEventListener("mousemove",_A_.Debug.Console.mouseMoved,!1)},mouseMoved:function(e){e.preventDefault(),_A_.Debug.Console.buttonMoved=!0,_A_.Debug.Console.Container.style.top=e.clientY-_A_.Debug.Console.buttonRadius/2+"px",_A_.Debug.Console.Container.style.left=e.clientX-_A_.Debug.Console.buttonRadius/2+"px",_A_.Debug.Console.Panel.classList.contains("up")?_A_.Debug.Console.Panel.classList.remove("up"):"",_A_.Debug.Console.Panel.classList.contains("down")?_A_.Debug.Console.Panel.classList.remove("down"):"",_A_.Debug.Console.Panel.classList.contains("left")?_A_.Debug.Console.Panel.classList.remove("left"):"",_A_.Debug.Console.Panel.classList.contains("right")?_A_.Debug.Console.Panel.classList.remove("right"):"",e.clientY<window.innerHeight/2?_A_.Debug.Console.Panel.classList.add("down"):_A_.Debug.Console.Panel.classList.add("up"),e.clientX<window.innerWidth/2?_A_.Debug.Console.Panel.classList.add("right"):_A_.Debug.Console.Panel.classList.add("left")},tabPressed:function(e){switch(_A_.Debug.Console.LogsTab.classList.contains("active")?_A_.Debug.Console.LogsTab.classList.remove("active"):"",_A_.Debug.Console.LogsPane.classList.contains("_A_Display_None")?"":_A_.Debug.Console.LogsPane.classList.add("_A_Display_None"),_A_.Debug.Console.WarningsTab.classList.contains("active")?_A_.Debug.Console.WarningsTab.classList.remove("active"):"",_A_.Debug.Console.WarningsPane.classList.contains("_A_Display_None")?"":_A_.Debug.Console.WarningsPane.classList.add("_A_Display_None"),_A_.Debug.Console.ErrorsTab.classList.contains("active")?_A_.Debug.Console.ErrorsTab.classList.remove("active"):"",_A_.Debug.Console.ErrorsPane.classList.contains("_A_Display_None")?"":_A_.Debug.Console.ErrorsPane.classList.add("_A_Display_None"),e){case"logs":_A_.Debug.Console.LogsTab.classList.add("active"),_A_.Debug.Console.LogsPane.classList.remove("_A_Display_None");break;case"warnings":_A_.Debug.Console.WarningsTab.classList.add("active"),_A_.Debug.Console.WarningsPane.classList.remove("_A_Display_None");break;case"errors":_A_.Debug.Console.ErrorsTab.classList.add("active"),_A_.Debug.Console.ErrorsPane.classList.remove("_A_Display_None")}},clearPressed:function(){_A_.Debug.Console.LogsTab.classList.contains("active")?_A_.Debug.Console.LogsPane.innerHTML="":"",_A_.Debug.Console.WarningsTab.classList.contains("active")?_A_.Debug.Console.WarningsPane.innerHTML="":"",_A_.Debug.Console.ErrorsTab.classList.contains("active")?_A_.Debug.Console.ErrorsPane.innerHTML="":""},setOutlets:function(){_A_.Debug.Console.Panel=document.getElementById("_A_.DebugConsolePanel"),_A_.Debug.Console.LogsTab=document.getElementById("_A_.DebugConsoleLogsTab"),_A_.Debug.Console.LogsPane=document.getElementById("_A_.DebugConsoleLogsPane"),_A_.Debug.Console.WarningsTab=document.getElementById("_A_.DebugConsoleWarningsTab"),_A_.Debug.Console.WarningsPane=document.getElementById("_A_.DebugConsoleWarningsPane"),_A_.Debug.Console.ErrorsTab=document.getElementById("_A_.DebugConsoleErrorsTab"),_A_.Debug.Console.ErrorsPane=document.getElementById("_A_.DebugConsoleErrorsPane")},record:function(e,n){for(var o='<div class="record">',t=0;t<n.length;t++){var r;switch(t){case 0:r="title";break;case 1:r="description first";break;default:r="description"}o+='<span class="'+r+'">'+n[t]+"</span>"}o+="</div>",e.innerHTML+=o},log:function(e){_A_.Debug.Console.record(_A_.Debug.Console.LogsPane,e)},warning:function(e){_A_.Debug.Console.record(_A_.Debug.Console.WarningsPane,e)},error:function(e){_A_.Debug.Console.record(_A_.Debug.Console.ErrorsPane,e)}},validateAppVariables:function(){var e=!0;if(void 0===_A_.Settings&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings does not exist"]),e=!1),void 0===_A_.Settings.appRoot&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.appRoot does not exist"]),void 0===_A_.Settings.initialRoute&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.initialRoute does not exist"]),e=!1),void 0===_A_.Settings.splash&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.splash does not exist"]),void 0!==_A_.Settings.splash&&(void 0===_A_.Settings.splash.enabled&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.splash.enabled does not exist"]),e=!1),void 0===_A_.Settings.splash.view&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.splash.view does not exist"]),e=!1),void 0===_A_.Settings.splash.doesFadeOut&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.splash.doesFadeOut does not exist"]),e=!1),void 0===_A_.Settings.splash.showForAtLeastMills&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.splash.showForAtLeastMills does not exist"]),e=!1),void 0===_A_.Settings.splash.imageSuffixForDevicePixelRatio&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.splash.imageSuffixForDevicePixelRatio does not exist"]),e=!1)),void 0===_A_.Settings.historyEnabled&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.historyEnabled does not exist"]),void 0===_A_.Settings.scriptManagementEnabled&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.scriptManagementEnabled does not exist"]),void 0===_A_.Settings.components&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.components does not exist"]),e=!1),void 0===_A_.Settings.fallbackRoute&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.fallbackRoute does not exist"]),void 0===_A_.Settings.routes&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routes does not exist"]),e=!1),void 0===_A_.Settings.routeRules)_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.routeRules does not exist"]);else if(_A_.Settings.routeRules instanceof Array)for(var n=0;n<_A_.Settings.routeRules.length;n++)_A_.Settings.routeRules[n].condition||(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules["+n+"].condition does not exist"]),e=!1),"function"!=typeof _A_.Settings.routeRules[n].condition&&(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules["+n+"].condition is not a function"]),e=!1),_A_.Settings.routeRules[n].fallback||(e=!1,_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules["+n+"].fallback does not exist"])),_A_.Settings.routeRules[n].routes||(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules["+n+"].routes does not exist"]),e=!1),_A_.Settings.routeRules[n].routes instanceof Array||(_A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules["+n+"].routes is not a function"]),e=!1);else _A_.Debug.Console.error(["_A_.Settings","_A_.Settings.routeRules is not an array"]),e=!1;return void 0===_A_.Settings.services&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.services does not exist"]),void 0===_A_.Settings.singletons&&_A_.Debug.Console.warning(["_A_.Settings","_A_.Settings.singletons does not exist"]),e}},_A_.Splash={callback:null,view:null,startPreloadTimestamp:null,init:function(e){_A_.Splash.callback=e,_A_.Settings.splash&&_A_.Settings.splash.enabled?_A_.Splash.create(function(){_A_.Splash.load(function(){_A_.Preloader.ServicesSingletons.preload(function(){_A_.Preloader.Components.preload(function(){_A_.Splash.applyShowForAtLeast(function(){_A_.Splash.dismiss(function(){_A_.Splash.callback()})})})})})}):_A_.Preloader.ServicesSingletons.preload(function(){_A_.Splash.callback()})},create:function(e){_A_.Splash.view=document.createElement("SPAllinsonJS-Splash"),_A_.Splash.view.className="_A_Splash",_A_.Container.appendChild(_A_.Splash.view),e()},load:function(e){_A_.Ajax.get(_A_.Settings.appRoot+_A_.Settings.splash.view,null,null,function(n){if(_A_.Settings.splash.imageSuffixForDevicePixelRatio){var o=String(window.devicePixelRatio),t=_A_.Settings.splash.imageSuffixForDevicePixelRatio[o];null!=t&&(n=n.replace(/.png/g,t+".png"),n=n.replace(/.jpg/g,t+".jpg"),n=n.replace(/.jpeg/g,t+".jpeg"),n=n.replace(/.gif/g,t+".gif"),n=n.replace(/.bmp/g,t+".bmp"))}return n.indexOf("_A_.Splash.loaded()")==-1?(_A_.Debug.Console.error(["_A_.Splash.load()","_A_.Splash.loaded() not found in Splash view"]),_A_.Splash.view.innerHTML=n,_A_.Splash.startPreloadTimestamp=new Date,void e()):(n=n.replace("_A_.Splash.loaded()","_A_.Splash.loaded("+e+")"),void(_A_.Splash.view.innerHTML=n))},function(n){_A_.Debug.Console.error(["_A_.Splash.load()",n.response]),_A_.Splash.startPreloadTimestamp=new Date,e()},null)},loaded:function(e){_A_.Splash.startPreloadTimestamp=new Date,e()},applyShowForAtLeast:function(e){if(!_A_.Settings.splash.showForAtLeastMills)return void e();var n=(new Date).getTime()-_A_.Splash.startPreloadTimestamp.getTime(),o=_A_.Settings.splash.showForAtLeastMills-n;o<0&&(o=0),setTimeout(function(){e()},o)},dismiss:function(e){_A_.Settings.splash.doesFadeOut?(_A_.Splash.view.classList.add("_A_Fade_Out"),setTimeout(function(){_A_.Splash.remove(e)},_A_.Settings.fadeSpeedMills)):_A_.Splash.remove(e)},remove:function(e){_A_.Container.removeChild(_A_.Splash.view),e()}},_A_.Preloader={ServicesSingletons:{preloadedCount:0,preload:function(e){for(var n=[],o=Object.keys(_A_.Settings.services),t=Object.keys(_A_.Settings.singletons),r=0;r<o.length;r++)n.push(_A_.Settings.services[o[r]]);for(var r=0;r<t.length;r++)n.push(_A_.Settings.singletons[t[r]]);if(0==n.length)return void e();_A_.Debug.Console.log(["Preloading Singletons & Services"]);for(var r=0;r<n.length;r++)_A_.Preloader.ServicesSingletons.worker(n[r],n.length,t,e)},worker:function(e,n,o,t){_A_.MemoryManagement.Script.load(e,function(){_A_.Preloader.ServicesSingletons.preloadedCount+=1,_A_.Preloader.ServicesSingletons.preloadedCount==n&&(_A_.Preloader.ServicesSingletons.createSingletonInstances(o),t())},function(){_A_.Preloader.ServicesSingletons.preloadedCount+=1,_A_.Preloader.ServicesSingletons.preloadedCount==n&&(_A_.Preloader.ServicesSingletons.createSingletonInstances(o),t())})},createSingletonInstances:function(e){if(e)for(var n=0;n<e.length;n++)window[e[n]]=new _A_.Singletons[e[n]]}},Components:{componentsToPreload:[],preloadedCount:0,preload:function(e){for(var n=[],o=Object.keys(_A_.Settings.components),t=0;t<o.length;t++)_A_.Settings.components[o[t]].preload&&n.push(o[t]);if(0==n.length)return void e();_A_.Debug.Console.log(["Preloading Components"]);for(var t=0;t<n.length;t++)_A_.Preloader.Components.worker(n[t],t,n.length,e)},worker:function(e,n,o,t){_A_.Debug.Console.log(["Preloading",e]),_A_.Preloader.Components.componentsToPreload[n]=document.createElement("SPAllinsonJS-Preloader"),_A_.Preloader.Components.componentsToPreload[n].className="_A_Preloader",_A_.Splash.view.appendChild(_A_.Preloader.Components.componentsToPreload[n]);var r=function(){_A_.Settings.components[e].controller?_A_.MemoryManagement.Script.loadController(e,function(){_A_.Debug.Console.log(["Preloaded",e]),_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==o&&t()},function(){_A_.Debug.Console.log(["Preload","error loading controller script",e]),_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==o&&t()}):(_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==o&&t())},_=_A_.Settings.components[e].bundledView;if(_){var a=_A_.Ajax.decodedViewCache[_.key];if(a)return _A_.Preloader.Components.componentsToPreload[n].innerHTML=decodedView,void r();var s=_.json;_A_.Ajax.get(s,null,null,function(e){var o=JSON.parse(e),t=o[_.key],a=_A_.Utils.decodeHTML(t);_A_.Ajax.decodedViewCache[_.key]=a,_A_.Preloader.Components.componentsToPreload[n].innerHTML=a,r()},function(n){_A_.Debug.Console.error(["Preloading",e]),_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==o&&t()},"cache")}else{var i=_A_.Settings.components[e].view;"function"==typeof i&&(i=i()),_A_.Ajax.get(_A_.Settings.appRoot+i,null,null,function(e){_A_.Preloader.Components.componentsToPreload[n].innerHTML=e,r()},function(n){_A_.Debug.Console.error(["Preloading",e]),_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==o&&t()},"cache")}}}},_A_.Window={handleResize:function(){_A_.Content.style.width="100%",_A_.Content.style.height="100%"},handleHashChange:function(){_A_.Router.isHashChangeWarm||_A_.Settings.historyEnabled&&(_A_.Router.doReplaceHistoryItem=!0,_A_.Router.routeToHash(window.location.hash)),_A_.Router.isHashChangeWarm=!1},handlePopState:function(e){if(e.state&&_A_.Settings.historyEnabled){var n=e.state.replace("#/","");_A_.Go(n,function(){setTimeout(function(){_A_.Note.fire("_A_HISTORY_TRAVERSED",e.state)},0)})}}},window.addEventListener("load",_A_.Setup.init,!1),window.addEventListener("resize",_A_.Window.handleResize,!1),window.addEventListener("hashchange",_A_.Window.handleHashChange,!1),window.addEventListener("popstate",function(e){_A_.Window.handlePopState(e)},!1),_A_.Router={count:0,cssTransitionSupport:!0,currentHash:null,currentRoute:null,currentQueryString:null,doReplaceHistoryItem:!0,isHashChangeWarm:!1,isRouting:!1,callbackArray:[],workerArray:[],lazyFadeArray:[],forceReloadDict:{},goHelper:function(e,n){var o=e.split("?"),t=_A_.Utils.stripTrailingSlash(o[0]),r=o[1];if("./"==t.substr(0,2)){var _=window.location.hash.replace("#/","").split("?")[0];_=_A_.Utils.stripTrailingSlash(_),t=_+t.substr(1)}else if("../"==t.substr(0,3)){var _=window.location.hash.replace("#/","").split("?")[0];_=_A_.Utils.stripTrailingSlash(_);var a=_.split("/");_="";for(var s=0;s<a.length-1;s++)_+="/"+a[s];t=_+t.substr(2)}t=_A_.Utils.stripLeadingSlash(t);var a=t.split("/");if(_A_.Router.validateRoutesOrFallback(a)&&_A_.Router.performRouteRulesValidation(a,n)){var _="#/"+t+(r?"?"+r:"");_A_.Debug.Console.log(["_A_.Go()","routing: "+_.replace("#/","")]),_A_.Settings.historyEnabled&&(_A_.Router.isHashChangeWarm=!0,window.location.hash=_,window.location.hash!=_A_.Router.currentHash&&(_A_.Router.doReplaceHistoryItem=!0)),_A_.Router.routeToHash(_,n)}},routeToHash:function(e,n){var o=e.replace("#/",""),t=o.split("?"),r=_A_.Utils.stripTrailingSlash(t[0]),_=t[1],a=r.split("/");if(_A_.Router.handleForceReload(a),_A_.Router.validateRoutesOrFallback(a)&&_A_.Router.performRouteRulesValidation(a,n)){for(var s=[],i=0;i<a.length;i++)s.push.apply(s,_A_.Settings.routes[a[i]]);_A_.Router.currentHash="#/"+r+(_?"?"+_:""),_A_.Router.currentRoute=r,_A_.Router.currentQueryString=_?_:null,_A_.Router.routeTo(s,null,n)}},routeTo:function(e,n,o){if(o&&_A_.Router.callbackArray.push(o),!e||0==e.length){if(1!=n){var t=e?"EmptyArray":"NullArray";_A_.Debug.Console.error(["Routing",t])}_A_.Router.resetVariables(),_A_.Router.isHashChangeWarm=!1;for(var r=0;r<_A_.Router.callbackArray.length;r++)_A_.Router.callbackArray[r]({error:t});return void(_A_.Router.callbackArray=[])}if(_A_.Router.isRouting)for(var _=e.length,r=0;r<_;r++)_A_.Router.workerArray.push(e[r]);else{if(_A_.Router.isRouting=!0,0==_A_.Router.workerArray.length&&(_A_.Router.workerArray=e.slice(0)),!_A_.Router.workerArray[_A_.Router.count])return _A_.Debug.Console.error(["Routing","null array element"]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);_A_.Debug.Console.log(["Routing",_A_.Router.workerArray[_A_.Router.count]]);var a,s;if(_A_.Router.workerArray[_A_.Router.count][0].constructor===Array?(a=_A_.Router.workerArray[_A_.Router.count][0][0],s=_A_.Router.workerArray[_A_.Router.count][0][1]):(a=_A_.Router.workerArray[_A_.Router.count][0],s=null),!a)return _A_.Debug.Console.error(["Routing","Can't find ComponentName in: _A_.Settings.routes."+_A_.Router.workerArray[_A_.Router.count]]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);var i=_A_.Settings.components[a];if(!i)return _A_.Debug.Console.error(["Routing","Can't find Component named: "+a]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);var l=_A_.Router.workerArray[_A_.Router.count][1];if(!l)return _A_.Debug.Console.error(["Routing","Can't find DivId in: _A_.Settings.routes."+_A_.Router.workerArray[_A_.Router.count]]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);"app"!=l&&""!=l||(l="_A_Content");var u=_A_.Router.workerArray[_A_.Router.count][2],A=!1;if(_A_._R_[l])if(_A_.Router.forceReloadDict[l]&&_A_.Router.forceReloadDict[l]==a)A=!0;else if(_A_._R_[l].componentName==a)return _A_.Debug.Console.log(["Routing","Skipping: "+a+" into: "+l]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);var c=document.getElementById(l);if(!c)return _A_.MemoryManagement.deregisterComponent(l),_A_.Router.end(_A_.Router.workerArray,n);var g=function(e,n){_A_.MemoryManagement.deregisterComponent(e),A&&(n.innerHTML="",_A_.MemoryManagement.garbageCollection())},p=function(o){if(null!=u&&_A_.Router.cssTransitionSupport)"fade"==u&&(c.classList.remove("_A_Fade_In"),c.classList.add("_A_Fade_Out"),setTimeout(function(){var t=function(){_A_.MemoryManagement.registerComponent(l,a,s,function(t){if(t){var r=_A_.Inject.init(o,t,e);o=r[0],_A_.Router.workerArray=r[1]}c.innerHTML=o,_A_.Router.lazyFadeArray.push(c),_A_.Utils.setPageTitle(_A_.Settings.components[a].pageTitle),t&&t.viewDidAppear&&"function"==typeof t.viewDidAppear&&t.viewDidAppear(),_A_.Router.end(_A_.Router.workerArray,n)})};g(l,c),_A_.Settings.components[a].controller?_A_.Router.loadControllerScript(a,t):t()},_A_.Settings.fadeSpeedMills));else{var t=function(){_A_.MemoryManagement.registerComponent(l,a,s,function(t){if(t){var r=_A_.Inject.init(o,t,e);o=r[0],_A_.Router.workerArray=r[1]}c.innerHTML=o,_A_.Utils.setPageTitle(_A_.Settings.components[a].pageTitle),t&&t.viewDidAppear&&"function"==typeof t.viewDidAppear&&t.viewDidAppear(),_A_.Router.end(_A_.Router.workerArray,n)})};g(l,c),_A_.Settings.components[a].controller?_A_.Router.loadControllerScript(a,t):t()}},d=i.bundledView;if(d){var m=_A_.Ajax.decodedViewCache[d.key];if(m)return void p(m);var f=d.json;_A_.Ajax.get(f,null,null,function(e){var n=JSON.parse(e),o=n[d.key],t=_A_.Utils.decodeHTML(o);_A_.Ajax.decodedViewCache[d.key]=t,p(t)},function(e){_A_.Debug.Console.error(["Routing","Ajax error"])},"cache")}else{var C=i.view;if(!C)return _A_.Debug.Console.error(["Routing","Can't find: _A_.Settings.components."+a+".view"]),_A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,n);"function"==typeof C&&(C=C());var f=_A_.Settings.appRoot+C;_A_.Ajax.get(f,null,null,function(e){p(e)},function(e){_A_.Debug.Console.error(["Routing","Ajax error"])},"cache")}}},end:function(e,n){if(_A_.Router.count<e.length-1)_A_.Router.count+=1,_A_.Router.isRouting=!1,_A_.Router.routeTo(e,n);else{if(!n){for(var o=0;o<e.length;o++){var t=String(e[o][1]);"R_"!=t.substring(0,2)&&"C_"!=t.substring(0,2)||(e.splice(o,1),o--)}if(e.length>0)if(_A_.Settings.historyEnabled){var r=_A_.Router.currentHash?_A_.Settings.appRoot+_A_.Router.currentHash:_A_.Settings.appRoot;_A_.Router.doReplaceHistoryItem?window.history.replaceState(_A_.Router.currentHash,document.title,r):window.history.pushState(_A_.Router.currentHash,document.title,r)}else window.history.replaceState(_A_.Router.currentHash,document.title,_A_.Settings.appRoot)}_A_.Router.fadeInComponents(function(){_A_.MemoryManagement.garbageCollection(),_A_.Router.resetVariables(),_A_.Router.isHashChangeWarm=!1,setTimeout(function(){for(var e=0;e<_A_.Router.callbackArray.length;e++)_A_.Router.callbackArray[e]({});_A_.Router.callbackArray=[],_A_.Note.fire("_A_ROUTING_COMPLETED")},0)})}},handleForceReload:function(e){for(var n=0;n<e.length;n++)if(e[n].indexOf("!")!=-1){e[n]=e[n].replace("!","");for(var o=_A_.Settings.routes[e[n]],t=0;t<o.length;t++){var r=o[t][1],_=o[t][0];_A_.Router.forceReloadDict[r]=_}}},validateRoutesOrFallback:function(e){for(var n=0;n<e.length;n++){var o=e[n].replace("!","");if(!_A_.Settings.routes[o]){if(_A_.Debug.Console.error(["Routing","route not found","route: "+e[n]]),_A_.Settings.fallbackRoute){for(var t=_A_.Settings.fallbackRoute.split("/"),r=0;r<t.length;r++){var _=_A_.Settings.routes[t[r]];if(!_)return _A_.Debug.Console.error(["Routing","error with fallbackRoute"]),!1}_A_.Go(_A_.Settings.fallbackRoute)}return!1}}return!0},performRouteRulesValidation:function(e,n){if(_A_.Settings.routeRules.length>0)for(var o=0;o<e.length;o++)for(var t=0;t<_A_.Settings.routeRules.length;t++)for(var r=0;r<_A_.Settings.routeRules[t].routes.length;r++)if(_A_.Settings.routeRules[t].routes[r]==e[o]){var _;try{_=_A_.Settings.routeRules[t].condition()}catch(a){_A_.Debug.Console.error(["RouteRules","error in condition","RouteRule number: "+t]);continue}if(!_){_A_.Router.doReplaceHistoryItem=!0;var s="#/"+_A_.Settings.routeRules[t].fallback;return _A_.Debug.Console.log(["RouteRules","fallback","RouteRule number: "+t]),_A_.Router.routeToHash(s,n),!1}}return!0},loadControllerScript:function(e,n){_A_.MemoryManagement.Script.loadController(e,function(){n()},function(){n()})},fadeInComponents:function(e){return 0==_A_.Router.lazyFadeArray.length?void e():void _A_.Router.fadeInComponent(e,0)},fadeInComponent:function(e,n){var o=_A_.Router.lazyFadeArray[n];o.classList.remove("_A_Fade_Out"),o.classList.add("_A_Fade_In"),setTimeout(function(){if(n<_A_.Router.lazyFadeArray.length-1){var o=n+1;_A_.Router.fadeInComponent(e,o)}else e()},_A_.Settings.fadeSpeedMills)},resetVariables:function(){_A_.Router.isRouting=!1,_A_.Router.count=0,_A_.Router.doReplaceHistoryItem=!1,_A_.Router.workerArray=[],_A_.Router.lazyFadeArray=[],_A_.Router.forceReloadDict={};for(var e=Object.keys(_A_.RepaintHelper),n=0;n<e.length;n++)_A_.RepaintHelper[e[n]].isRepainting=!1}},_A_.Utils={isCssFeatureSupported:function(e){var n=document.createElement("div");if(void 0!==n.style[e])return!0;for(var o="Webkit Moz ms O".split(" "),t=e.charAt(0).toUpperCase()+e.substr(1),r=0;r<o.length;r++)if(void 0!==n.style[o[r]+t])return!0;return!1},setPageTitle:function(e){e&&(document.title=e)},stripLeadingSlash:function(e){return"/"==e.substr(0,1)?e.substr(1):e},stripTrailingSlash:function(e){return"/"==e.substr(e.length-1,1)?e.substr(0,e.length-1):e},anchorLink:function(e){if(!e)return void _A_.Debug.Console.error(["Anchor Link","null anchorId"]);var n=document.getElementById(e);return n?(_A_.Debug.Console.log(["Anchor Link","anchorId: "+e]),void n.scrollIntoView()):void _A_.Debug.Console.error(["Anchor Link","anchorId: "+e,"anchor not found"])},decodeHTML:function(e){return e=e.replace(/&amp;/g,"&"),e=e.replace(/&lt;/g,"<"),e=e.replace(/&gt;/g,">"),e=e.replace(/&#39;/g,"'"),e=e.replace(/&quot;/g,'"'),e=e.replace(/&#58;/g,":")}},_A_.Ajax={cache:{},decodedViewCache:{},get:function(e,n,o,t,r,_){_A_.Ajax.request("GET",e,n,o,t,r,_)},post:function(e,n,o,t,r,_){_A_.Ajax.request("POST",e,n,o,t,r,_)},put:function(e,n,o,t,r,_){_A_.Ajax.request("PUT",e,n,o,t,r,_)},"delete":function(e,n,o,t,r,_){_A_.Ajax.request("DELETE",e,n,o,t,r,_)},patch:function(e,n,o,t,r,_){_A_.Ajax.request("PATCH",e,n,o,t,r,_)},request:function(e,n,o,t,r,_,a){if(_A_.Debug.Console.log(["_A_.Ajax()","method: "+e,"url: "+n,"headers:",o,"body:",t,"cache: "+a]),!e)return void _A_.Debug.Console.error(["_A_.Ajax()","null method"]);if(!n)return void _A_.Debug.Console.error(["_A_.Ajax()","null url"]);if(!r)return void _A_.Debug.Console.error(["_A_.Ajax()","null success callback"]);if(!_)return void _A_.Debug.Console.error(["_A_.Ajax()","null error callback"]);if("cache"!=a&&"update-cache"!=a&&"clear-cache"!=a&&null!=a)return void _A_.Debug.Console.error(["_A_.Ajax()","cache is not a valid option","cache: "+a]);var s=0;if(a)if(_A_.Ajax.cache[n]){for(var i=!1,l=0;l<_A_.Ajax.cache[n].length;l++){var u=_A_.Ajax.cache[n][l],A=u[0],c=u[1],g=u[2];if(e==A&&JSON.stringify(o)==JSON.stringify(c)&&JSON.stringify(t)==JSON.stringify(g)){if("cache"==a){try{r(u[3])}catch(p){_A_.Debug.Console.error(["_A_.Ajax()","success callback error"])}return null}if("update-cache"==a){s=l,i=!0;break}if("clear-cache"==a){_A_.Ajax.cache[n].splice(l,1),i=!0;break}}}i||"cache"!=a&&"update-cache"!=a||(s=_A_.Ajax.cache[n].length,_A_.Ajax.cache[n].push([]))}else"cache"!=a&&"update-cache"!=a||(_A_.Ajax.cache[n]=[[]]);var d=n;!a||"update-cache"!=a&&"clear-cache"!=a||(d+="?"+(new Date).getTime());var m=new XMLHttpRequest;if(m.open(e,d),m.onreadystatechange=function(){if(4==m.readyState&&m.status>0&&m.status<400){var i;i=void 0===m.response?m.responseText:m.response,"cache"!=a&&"update-cache"!=a||(_A_.Ajax.cache[n][s]=[e,o,t,i]);try{r(i)}catch(l){_A_.Debug.Console.error(["_A_.Ajax()","success callback error"])}}else if(4==m.readyState&&m.status>=400&&m.status<500){var i;i=void 0===m.response?m.responseText:m.response;try{_({status:m.status,statusText:m.statusText,response:i})}catch(l){_A_.Debug.Console.error(["_A_.Ajax()","400 error callback error"])}}else if(4==m.readyState&&0==m.status)try{_({status:500,statusText:"",response:""})}catch(l){_A_.Debug.Console.error(["_A_.Ajax()","500 error callback error"])}},null!=o)for(var l=0;l<o.length;l++)m.setRequestHeader(o[l].key,o[l].value);return m.send(t),m}},_A_.MemoryManagement={Script:{load:function(e,n,o){if(e){n||_A_.Debug.Console.warning(["_A_.MemoryManagement.Script.load()","success callback is null",e]),o||_A_.Debug.Console.warning(["_A_.MemoryManagement.Script.load()","error callback is null",e]);for(var t=document.getElementsByTagName("head")[0].getElementsByTagName("script"),r=0;r<t.length;r++){var _=t[r];if(_.getAttribute("src")==e){if(_A_.Debug.Console.log(["_A_.MemoryManagement.Script.load()","skipping",e]),n)try{n()}catch(a){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","success callback error",e])}return}}_A_.Debug.Console.log(["_A_.MemoryManagement.Script.load()","loading",e]);var s=document.createElement("script");s.type="text/javascript",s.readyState?s.onreadystatechange=function(){if("loaded"==s.readyState||"complete"==s.readyState)if(s.onreadystatechange=null,this.status>=200&&this.status<400){if(_A_.Debug.Console.log(["_A_.MemoryManagement.Script.load()","loaded",e]),n)try{n()}catch(t){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","success callback error",e])}}else if(_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","error loading script",e]),o)try{o()}catch(t){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","error callback error",e])}}:(s.onload=function(){if(_A_.Debug.Console.log(["_A_.MemoryManagement.Script.load()","loaded",e]),n)try{n()}catch(o){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","success callback error",e])}},s.onerror=function(n){if(_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","error loading script",e]),o)try{o()}catch(n){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","error callback error",e])}}),s.src=e,document.getElementsByTagName("head")[0].appendChild(s)}else if(_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","url is null"]),o)try{o()}catch(a){_A_.Debug.Console.error(["_A_.MemoryManagement.Script.load()","error callback error",e])}},unload:function(e){if(!e)return void _A_.Debug.Console.error(["_A_.MemoryManagement.Script.unload()","url is null"]);for(var n=document.getElementsByTagName("head")[0].getElementsByTagName("script"),o=0;o<n.length;o++){var t=n[o];if(t.getAttribute("src")==e){_A_.Debug.Console.log(["_A_.MemoryManagement.Script.unload()",e]),document.getElementsByTagName("head")[0].removeChild(t);break}}},loadController:function(e,n,o){if(!e)return void o();if(!_A_.Settings.components[e])return void o();var t=_A_.Settings.components[e].controller;_A_.MemoryManagement.Script.load(t,n,o)},unloadController:function(e){if(e&&_A_.Settings.components[e]){var n=_A_.Settings.components[e].controller;_A_.MemoryManagement.Script.unload(n)}}},registerComponent:function(divId,componentName,componentData,callback){_A_._R_[divId]||(_A_._R_[divId]={});var controllerDefinition=_A_.Settings.components[componentName].controller,controllerImport=_A_.Controllers[componentName]; if(controllerDefinition||controllerImport){_A_._I_[componentName]||(_A_._I_[componentName]={});var componentIndex=1,instancesDict=_A_._I_[componentName],noKeys=Object.keys(instancesDict).length,lastInstance=instancesDict[Object.keys(instancesDict)[noKeys-1]];if(lastInstance){var tempArray=lastInstance.me.split("'");componentIndex=parseInt(tempArray[3])+1}var tempMe="_A_._I_['"+componentName+"']['"+componentIndex+"']";_A_._R_[divId].componentName=componentName,_A_._R_[divId].componentIndex=componentIndex,_A_.RepaintHelper[tempMe]={},_A_.RepaintHelper[tempMe].divId=divId;var tempServiceInstanceArray=[],tempServicesArray=_A_.Settings.components[componentName].services;if(tempServicesArray)for(var i=0;i<tempServicesArray.length;i++){var tempInstance;try{tempInstance=new _A_.Services[tempServicesArray[i]],tempServiceInstanceArray.push(tempInstance)}catch(e){_A_.Debug.Console.error(["Register Component","service not found","service name: "+tempServicesArray[i],"component name: "+componentName])}}for(var tempString="new _A_.Controllers['"+componentName+"'](",i=0;i<tempServiceInstanceArray.length;i++)tempString+="tempServiceInstanceArray["+i+"]",i!=tempServiceInstanceArray.length-1&&(tempString+=",");tempString+=");";var instance=eval(tempString);_A_._I_[componentName][componentIndex.toString()]=instance,instance.me=tempMe,instance.model=componentData?componentData:{},instance.init&&"function"==typeof instance.init&&instance.init(),callback(instance)}else _A_._R_[divId].componentName=componentName,callback(null)},deregisterComponent:function(e){if(_A_._R_[e]){var n=_A_._R_[e].componentName,o=_A_.Settings.components[n].controller,t=_A_.Controllers[n];if(!o&&!t)return void delete _A_._R_[e];var r=_A_._R_[e].componentIndex,_="_A_._I_["+n+"]["+r+"]";delete _A_.RepaintHelper[_],delete _A_._R_[e];var a=_A_._I_[n][r],s=function(){if(delete _A_._I_[n][r],0==Object.keys(_A_._I_[n])&&delete _A_._I_[n],_A_.Settings.scriptManagementEnabled){var e=_A_.Settings.components[n].controller;for(var o in _A_._R_){if(n==_A_._R_[o].componentName)return;var t=_A_.Settings.components[_A_._R_[o].componentName].controller;if(e&&t&&e==t)return}_A_.MemoryManagement.Script.unloadController(n)}};a.dealloc&&"function"==typeof a.dealloc?a.dealloc(s):s()}},garbageCollection:function(){var e=[];for(var n in _A_._R_){var o=document.getElementById(n);o||(e.push(n),_A_.MemoryManagement.deregisterComponent(n))}_A_.Debug.Console.log(["Performing Garbage Collection",e])}},_A_.Inject={init:function(e,n,o){if(null!=_A_.Locale.localizations&&(e=_A_.Locale.apply(e)),n){var t=_A_.Inject.component(e,n);e=t[0];for(var r=0;r<t[1].length;r++)o.splice(o.length+r,0,t[1][r]);var _=_A_.Inject.repeat(e,n);e=_[0];for(var r=0;r<_[1].length;r++)o.splice(o.length+r,0,_[1][r]);e=_A_.Inject.bind(e,n)}return e=_A_.Inject.eval(e,n),n&&(e=e.replace(/_C_/g,n.me)),[e,o]},component:function(response,instance){var arrayOfRoutesToReturn=[],injectionArray=response.match(/\[C:(.*?)\]/g);if(!injectionArray)return[response,arrayOfRoutesToReturn];for(var i=0;i<injectionArray.length;i++){var htmlString="",tempValue=injectionArray[i].replace(/ /g,"").replace("[C:","").replace("]",""),tempArray=tempValue.split(","),tempComponentName=tempArray[0],tempComponentData=tempArray[1];if(tempComponentName)if(_A_.Settings.components[tempComponentName]){var meComponentCount=instance._A_Component_Count,componentCount=meComponentCount?meComponentCount:1,tempId="C_"+componentCount+"_."+instance.me;if(tempComponentData){var tempData;try{tempData=eval(instance.me+"."+tempComponentData)}catch(e){}if(void 0===tempData){_A_.Debug.Console.error(["[C: ]","error in data","component name: "+tempComponentName]),response=response.replace(injectionArray[i],htmlString);continue}arrayOfRoutesToReturn.push([[tempComponentName.toString(),tempData],tempId.toString()])}else arrayOfRoutesToReturn.push([tempComponentName.toString(),tempId.toString()]);htmlString+='<component id="'+tempId+'"></component>',componentCount+=1,instance._A_Component_Count=componentCount,response=response.replace(injectionArray[i],htmlString)}else _A_.Debug.Console.error(["[C: ]","component not found","component name: "+tempComponentName]),response=response.replace(injectionArray[i],htmlString);else _A_.Debug.Console.error(["[C: ]","null component name"]),response=response.replace(injectionArray[i],htmlString)}return[response,arrayOfRoutesToReturn]},repeat:function(response,instance){var arrayOfRoutesToReturn=[],injectionArray=response.match(/\[R:(.*?)\]/g);if(!injectionArray)return[response,arrayOfRoutesToReturn];for(var i=0;i<injectionArray.length;i++){var tempValue=injectionArray[i].replace(/ /g,"").replace("[R:","").replace("]",""),tempArray=tempValue.split(","),tempComponentName=tempArray[0],tempComponentData=tempArray[1];if(tempComponentName)if(tempComponentData)if(_A_.Settings.components[tempComponentName]){var tempDataArray;try{tempDataArray=eval(instance.me+"."+tempComponentData)}catch(e){}if(void 0!==tempDataArray)if(tempDataArray){for(var meDivCount=instance._A_Repeat_Count,divCount=meDivCount?meDivCount:1,htmlString="",ii=0;ii<tempDataArray.length;ii++){var tempId="R_"+divCount+"_."+instance.me;htmlString+='<repeat id="'+tempId+'"></repeat>',arrayOfRoutesToReturn.push([[tempComponentName.toString(),tempDataArray[ii]],tempId.toString()]),divCount+=1}instance._A_Repeat_Count=divCount,response=response.replace(injectionArray[i],htmlString)}else _A_.Debug.Console.warning(["[R: ]","null array","component name: "+tempComponentName]),response=response.replace(injectionArray[i],"");else _A_.Debug.Console.error(["[R: ]","error in data","component name: "+tempComponentName]),response=response.replace(injectionArray[i],"")}else _A_.Debug.Console.error(["[R: ]","component not found","component name: "+tempComponentName]),response=response.replace(injectionArray[i],"");else _A_.Debug.Console.error(["[R: ]","null data","component name: "+tempComponentName]),response=response.replace(injectionArray[i],"");else _A_.Debug.Console.error(["[R: ]","null component name"]),response=response.replace(injectionArray[i],"")}return[response,arrayOfRoutesToReturn]},bind:function(response,instance){var bindingArray=response.match(/\[B:(.*?)\]/g);if(!bindingArray)return response;instance._A_Bind_Array||(instance._A_Bind_Array=[]);for(var divCount=0,workerArray=[],i=0;i<bindingArray.length;i++){var propertyAddress=bindingArray[i].replace(/ /g,"").replace("[B:","").replace("]","");if(propertyAddress){var tempValue;try{tempValue=eval(instance.me+"."+propertyAddress)}catch(e){}if(void 0!==tempValue){var tempId="B_"+divCount+"_."+instance.me;response=null==tempValue?response.replace(bindingArray[i],'<bind id="'+tempId+'"></bind>'):response.replace(bindingArray[i],'<bind id="'+tempId+'">'+tempValue+"</bind>"),instance._A_Bind_Array.push(propertyAddress),divCount+=1}else _A_.Debug.Console.error(["[B: ]","error in data","property: "+propertyAddress]),response=response.replace(bindingArray[i],"")}else _A_.Debug.Console.error(["[B: ]","data not specified","component: "+instance.me]),response=response.replace(bindingArray[i],"")}return response},eval:function(response,instance){var evalArray=response.match(/\[E:(.*?)\]/g);if(!evalArray)return response;for(var i=0;i<evalArray.length;i++){var toBeEvaluated=evalArray[i].replace("[E:","").replace("]","");if(toBeEvaluated){var usingController=toBeEvaluated.match(/\_C_/g);if(!usingController||instance.me){usingController&&(toBeEvaluated=toBeEvaluated.replace(/_C_/g,instance.me));var tempData;try{tempData=eval(toBeEvaluated)}catch(e){}void 0!==tempData?response=response.replace(evalArray[i],tempData):(_A_.Debug.Console.error(["[E: ]","error in data","data: "+toBeEvaluated]),response=response.replace(evalArray[i],""))}else _A_.Debug.Console.error(["[E: ]","No controller found for view","expression: "+evalArray[i]]),response=response.replace(evalArray[i],"")}else _A_.Debug.Console.error(["[E: ]","null data"]),response=response.replace(evalArray[i],"")}return response}},_A_.Note={notes:{},register:function(e,n,o){return e?n?n.me?o?(_A_.Debug.Console.log(["_A_.Note.register()","name: "+e,"component: "+n.me,"handler: "+o]),_A_.Note.notes[e]||(_A_.Note.notes[e]={}),void(_A_.Note.notes[e][n.me]=o)):void _A_.Debug.Console.error(["_A_.Note.register()","name: "+e,"component: "+n.me,"null handler"]):void _A_.Debug.Console.error(["_A_.Note.register()","name: "+e,"null component.me"]):void _A_.Debug.Console.error(["_A_.Note.register()","name: "+e,"null component"]):void _A_.Debug.Console.error(["_A_.Note.register()","null notification name"])},deregister:function(e,n){return e?n?n.me?_A_.Note.notes[e]?(_A_.Debug.Console.log(["_A_.Note.deregister()","name: "+e,"component: "+n.me]),_A_.Note.notes[e][n.me]?delete _A_.Note.notes[e][n.me]:_A_.Debug.Console.warning(["_A_.Note.deregister()","name: "+e,"component not registered"]),void(0==Object.keys(_A_.Note.notes[e])&&delete _A_.Note.notes[e])):void _A_.Debug.Console.warning(["_A_.Note.deregister()","name: "+e,"name not found"]):void _A_.Debug.Console.error(["_A_.Note.deregister()","name: "+e,"null component.me"]):void _A_.Debug.Console.error(["_A_.Note.deregister()","name: "+e,"null component"]):void _A_.Debug.Console.error(["_A_.Note.deregister()","null name"])},deregisterFromAll:function(e){if(!e)return void _A_.Debug.Console.error(["_A_.Note.deregisterFromAll()","null component"]);if(!e.me)return void _A_.Debug.Console.error(["_A_.Note.deregisterFromAll()","null component.me"]);_A_.Debug.Console.log(["_A_.Note.deregisterFromAll()","component: "+e.me]);for(var n=Object.keys(_A_.Note.notes),o=0;o<n.length;o++)_A_.Note.notes[n[o]][e.me]&&(delete _A_.Note.notes[n[o]][e.me],0==Object.keys(_A_.Note.notes[n[o]])&&delete _A_.Note.notes[n[o]])},fire:function(e,n){if(!e)return void _A_.Debug.Console.error(["_A_.Note.fire()","null name"]);_A_.Debug.Console.log(["_A_.Note.fire()","name: "+e,"data: "+n]);var o=_A_.Note.notes[e];if(o)for(var t=Object.keys(o),r=0;r<t.length;r++){var _=o[t[r]];if(n)try{_(n)}catch(a){_A_.Debug.Console.error(["_A_.Note.fire()","name: "+e,"invalid handler"])}else try{_()}catch(a){_A_.Debug.Console.error(["_A_.Note.fire()","name: "+e,"invalid handler"])}}}},_A_.Locale={defaultLanguage:null,localizations:null,getLang:function(){return void 0===navigator.languages?navigator.language:navigator.languages[0]},apply:function(e){var n=e.match(/\[L:(.*?)\]/g);if(!n)return e;for(var o=0;o<n.length;o++){var t=n[o].replace(/ /g,"").replace("[L:","").replace("]","");if(t){var r=_A_.Locale.get(t);r?e=e.replace(n[o],r):(_A_.Debug.Console.error(["[L: ]","key not found","key: "+t]),e=e.replace(n[o],""))}else _A_.Debug.Console.error(["[L: ]","null key"]),e=e.replace(n[o],"")}return e},get:function(e){if(!e)return _A_.Debug.Console.error(["_A_.Locale.get()","null key"]),null;if(!_A_.Locale.localizations)return _A_.Debug.Console.error(["_A_.Locale.get()","_A_.Locale.localizations not found"]),null;_A_.Debug.Console.log(["_A_.Locale.get()","key: "+e]);var n,o=_A_.Locale.getLang();if(n=_A_.Locale.localizations[o]){var t=n[e];if(t)return t}var r=o.split("-");if(n=_A_.Locale.localizations[r[0]]){var t=n[e];if(t)return t}if(_A_.Locale.defaultLanguage&&(n=_A_.Locale.localizations[_A_.Locale.defaultLanguage])){var t=n[e];if(t)return t}return _A_.Locale.defaultLanguage||_A_.Debug.Console.warning(["_A_.Locale.get()","_A_.Locale.defaultLanguage not found"]),_A_.Debug.Console.error(["_A_.Locale.get()","key: "+e]),null}},_A_.Go=function(e,n){return e?""==e?(_A_.Debug.Console.error(["_A_.Go()","empty route"]),void(n&&n({error:"EmptyRoute"}))):void _A_.Router.goHelper(e,n):(_A_.Debug.Console.error(["_A_.Go()","null route"]),void(n&&n({error:"NullRoute"})))},_A_.Get=function(e){if(!e)return _A_.Debug.Console.error(["_A_.Get()","_A_.Get(null)"]),null;if(e.constructor===Array){if(0==e.length)return _A_.Debug.Console.error(["_A_.Get()","empty array"]),null;for(var n=[],o=0;o<e.length;o++){var t=_A_.GetHelper(e[o]);t&&n.push(t)}return 0==n.length?(_A_.Debug.Console.error(["_A_.Get()","no components","div ids: "+e]),null):n}var r=_A_.GetHelper(e);return r?r:(_A_.Debug.Console.error(["_A_.Get()","no components","div ids: "+e]),null)},_A_.GetHelper=function(e){if(!e)return _A_.Debug.Console.error(["_A_.Get()","null div id"]),null;var n=_A_._R_[e];if(!n)return _A_.Debug.Console.error(["_A_.Get()","no component","div id: "+e]),null;var o=n.componentName;if(!o)return _A_.Debug.Console.error(["_A_.Get()","no component","div id: "+e]),null;var t=n.componentIndex;if(!t)return _A_.Debug.Console.error(["_A_.Get()","no component","div id: "+e]),null;var n=_A_._I_[o][t.toString()];return n?n:(_A_.Debug.Logger.error(["_A_.Get()","no component","div id: "+e]),null)},_A_.Component=function(e,n,o,t,r){if(!e)return _A_.Debug.Console.error(["_A_.Component()","null component name"]),null;if(!_A_.Settings.components[e])return _A_.Debug.Console.error(["_A_.Component()","_A_.Settings.components[componentName] does not contain component","component: "+e]),null;if(!n)return _A_.Debug.Console.error(["_A_.Component()","null div id"]),null;var _=document.getElementById(n);if(!_)return _A_.Debug.Console.error(["_A_.Component()","div does not exist"]),null;if(!t)return _A_.Debug.Console.error(["_A_.Component()","null instance"]),null;if(!t.me)return _A_.Debug.Console.error(["_A_.Component()","null instance.me"]),null;var a=t._A_Component_Count,s=a?a:1,i="",l=[],u="C_"+s+"_."+t.me;return i+='<component id="'+u+'"></component>',o?l.push([[e,o],u.toString()]):l.push([e,u.toString()]),s+=1,t._A_Component_Count=s,_.innerHTML=i,_A_.Router.routeTo(l,null,function(){if(r){var e=_A_.Get(u);try{r(e)}catch(n){_A_.Debug.Console.error(["_A_.Component()","callback error","component: "+t.me])}}}),u},_A_.Repeat=function(e,n,o,t,r){if(!e)return _A_.Debug.Console.error(["_A_.Repeat()","null component"]),null;if(!_A_.Settings.components[e])return _A_.Debug.Console.error(["_A_.Repeat()","_A_.Settings.components[componentName] does not contain component","component: "+e]),null;if(!n)return _A_.Debug.Console.error(["_A_.Repeat()","null div id"]),null;var _=document.getElementById(n);if(!_)return _A_.Debug.Console.error(["_A_.Repeat()","div does not exist"]),null;if(!o)return _A_.Debug.Console.error(["_A_.Repeat()","null data"]),null;if(0==o.length&&_A_.Debug.Console.warning(["_A_.Repeat()","empty array"]),!t)return _A_.Debug.Console.error(["_A_.Repeat()","instance is null"]),null;if(!t.me)return _A_.Debug.Console.error(["_A_.Repeat()","instance.me is null"]),null;for(var a=t["_A_Repeat_Count_"+n],s=a?a:1,i="",l=[],u=[],A=0;A<o.length;A++){var c="R_"+s+"_."+n;l.push(c),i+='<repeat id="'+c+'"></repeat>',u.push([[e,o[A]],c.toString()]),s+=1}return t["_A_Repeat_Count_"+n]=s,_.innerHTML=i,_A_.Router.routeTo(u,null,function(){if(r){var e=_A_.Get(l);try{r(e)}catch(n){_A_.Debug.Console.error(["_A_.Repeat()","callback error","component: "+t.me])}}}),l},_A_.Append=function(e,n,o,t,r){if(!e)return _A_.Debug.Console.error(["_A_.Append()","null component"]),null;if(!_A_.Settings.components[e])return _A_.Debug.Console.error(["_A_.Append()","_A_.Settings.components does not contain component","component: "+e]),null;if(!n)return _A_.Debug.Console.error(["_A_.Append()","null div id"]),null;var _=document.getElementById(n);if(!_)return _A_.Debug.Console.warning(["_A_.Append()","div does not exist"]),null;if(!o)return _A_.Debug.Console.error(["_A_.Append()","null data"]),null;if(0==o.length)return _A_.Debug.Console.error(["_A_.Append()","empty array"]),null;if(!t)return _A_.Debug.Console.error(["_A_.Append()","null instance"]),null;if(!t.me)return _A_.Debug.Console.error(["_A_.Append()","null instance.me"]),null;for(var a=t["_A_Repeat_Count_"+n],s=a?a:1,i="",l=[],u=[],A=0;A<o.length;A++){var c="R_"+s+"_."+n;u.push(c),i+='<repeat id="'+c+'"></repeat>',l.push([[e,o[A]],c.toString()]),s+=1}t["_A_Repeat_Count_"+n]=s;var g=document.createElement("div");for(g.innerHTML=i;g.firstChild;)_.appendChild(g.firstChild);return _A_.Router.routeTo(l,null,function(){if(r){var e=_A_.Get(u);try{r(e)}catch(n){_A_.Debug.Console.error(["_A_.Append()","callback error","component: "+t.me])}}}),u},_A_.Rebind=function(instance){if(!instance)return void _A_.Debug.Console.error(["_A_.Rebind()","null instance"]);if(!instance.me)return void _A_.Debug.Console.error(["_A_.Rebind()","null instance.me"]);var instanceArray=instance._A_Bind_Array;if(!instanceArray||0==instanceArray.length)return void _A_.Debug.Console.warning(["_A_.Rebind()","instance has no bindings","component: "+instance.me]);_A_.Debug.Console.log(["_A_.Rebind()","component: "+instance.me]);for(var i=0;i<instanceArray.length;i++){var tempDiv=document.getElementById("B_"+i+"_."+instance.me);if(tempDiv){var tempData=eval(instance.me+"."+[instanceArray[i]]);if(!tempData)return void _A_.Debug.Console.error(["_A_.Rebind()","error in data","component: "+instance.me]);tempDiv.innerHTML=tempData}else _A_.Debug.Console.error(["_A_.Rebind()","div does not exist"])}},_A_.Repaint=function(e,n){if(!e)return void _A_.Debug.Console.error(["_A_.Repaint()","null instance"]);if(!e.me)return void _A_.Debug.Console.error(["_A_.Repaint()","null instance.me"]);var o=_A_.RepaintHelper[e.me].divId;if(void 0===o)return void _A_.Debug.Console.error(["_A_.Repaint()","component error","component: "+e.me]);if(_A_.RepaintHelper[e.me].isRepainting)return void _A_.Debug.Console.error(["_A_.Repaint()","Repaint already in progress","component: "+e.me]);_A_.Debug.Console.log(["_A_.Repaint()","component: "+e.me]),_A_.RepaintHelper[e.me].isRepainting=!0;var t=document.getElementById(o),r=_A_._R_[o].componentName,_=function(o){var r=!0;_A_.Router.isRouting&&(r=!1);var _=_A_.Inject.init(o,e,[]);if(o=_[0],0!=_[1].length){_A_.Router.workerArray||(_A_.Router.workerArray=[]);for(var a=0;a<_[1].length;a++)_A_.Router.workerArray.push(_[1][a])}if(t.innerHTML="",_A_.MemoryManagement.garbageCollection(),t.innerHTML=o,e.viewDidAppear&&"function"==typeof e.viewDidAppear&&e.viewDidAppear(),_A_