define([],function(){var e,t,n=[".json",".string",".number",".function",".boolean"],r="",i={useSession:function(t){e=t?window.sessionStorage:window.localStorage},useMemory:function(n){n&&!t?(t=e,e={_data:{},setItem:function(e,t){return this._data[e]=String(t)},getItem:function(e){return e in this._data?this._data[e]:void 0},removeItem:function(e){return delete this._data[e]},clear:function(){return this._data={}}}):(e=t,t=!1)},events:[],on:function(e,t,n){this.events[e]||(this.events[e]=[]),n?this.events[e][n+"-key"]=t:this.events[e].push(t)},off:function(e,t){t?this.events[e][t+"-key"]&&delete this.events[e][t+"-key"]:delete this.events[e]},trigger:function(e){if(this.events[e]){var t=arguments;for(var n in this.events[e]){var r=this.events[e][n].apply(this,t);if(this.events[e][n].prototype.once&&delete this.events[e][n],void 0!==r&&!1===r)break}}},one:function(e,t){this.on(e,t),this.events[e][this.events[e].length-1].prototype.once=!0},set:function(t,o,a){var s=t,c=o,u="";if("expirations"==t)return!1;switch(t=r+t,typeof o){case"object":o=JSON.stringify(o),u=n[0];break;case"function":o=o.toString(),u=n[3];break;case"number":o=o.toString(),u=n[2];break;case"boolean":o=o.toString(),u=n[4];break;default:u=n[1]}for(var f=0;f<n.length;f++)if(e.getItem(t+n[f])){e.removeItem(t+n[f]);break}e.setItem(t+u,o),a&&i.expireKey(s,a),this.trigger("valuechange",s,c,a)},get:function(t){var o,a=t;t=r+t;for(var s=0;s<n.length;s++)if(e.getItem(t+n[s])){if(i.isExpired(a))return void e.removeItem(t+n[s]);switch(n[s]){case n[0]:o=JSON.parse(e.getItem(t+n[s]));break;case n[1]:o=e.getItem(t+n[s]);break;case n[2]:o=parseFloat(e.getItem(t+n[s]));break;case n[3]:o=new Function(e.getItem(t+n[s]));break;case n[4]:o=JSON.parse(e.getItem(t+n[s]))}break}return"undefined"==o||void 0==o?void 0:"true"==o||"false"!=o&&o},remove:function(t){var i=t;t=r+t;for(var o=0;o<n.length;o++)e.getItem(t+n[o])&&e.removeItem(t+n[o]);this.trigger("valuedelete",i)},group:function(e){if(void 0==e)return r;!1===e&&(r=""),r=e+"_",this.trigger("groupchange",r)},isGroup:function(t){var n=e;for(var r in n)if(0===r.indexOf(t))return!0;return!1},renameGroup:function(t,n,i){i=i||{};var o=t+"_"||r,a={async:i.async||!1,callback:i.callback||!1},s=Object.keys?Object.keys(e):[],c=function(e,t){for(var n in t)t[n]&&t[n].constructor&&t[n].constructor===Object?(e[n]=e[n]||{},arguments.callee(e[n],t[n])):e[n]=t[n];return e}({},e);if(r=n+"_",a.async&&Object.keys)return function(){if(ix>=s.length)return a.callback?a.callback():null;var t=s[ix];0===t.indexOf(o)&&(e.setItem(r+t.substring(o.length),c[t]),delete e[t]),ix++}();for(var u in c)0===u.indexOf(o)&&(e.setItem(r+u.substring(o.length),c[u]),delete e[u]);this.trigger("groupchange",r)},removeGroup:function(t,n){t=t?t+"_":r;var i={async:(n=n||{}).async||!1,callback:n.callback||!1,exclude:n.exclude||!1},o=e,a=Object.keys?Object.keys(e):[],s=0;if(asyncDelete=function(){if(s>=a.length)return i.callback?i.callback():null;var n=a[s],r=!1;if(0===n.indexOf(t)){if(i.exclude)for(var o in i.exclude){var c=t+i.exclude[o];if(0===n.indexOf(c+".")){r=!0;break}}r||e.removeItem(n)}s++,setTimeout(asyncDelete)},i.async&&Object.keys)return asyncDelete();for(var c in o){var u=!1;if(0===c.indexOf(t)){if(i.exclude)for(var f in i.exclude){var v=t+i.exclude[f];if(0===c.indexOf(v+".")){u=!0;break}}u||e.removeItem(c)}}},expireKey:function(t,n){var i=e.getItem("_expirations.json")||!1;try{(i=JSON.parse(i))||(i={})}catch(e){i={}}i[r+t]={in:n,since:(new Date).getTime()};e.setItem("_expirations.json",JSON.stringify(i))},isExpired:function(t){var n=e.getItem("_expirations.json")||!1;if(!n)return!1;try{if(!(n=JSON.parse(n)))return!1}catch(e){return!1}var i=n[r+t]||!1;if(!i)return!1;return(new Date).getTime()-i.since>=i.in},getExpiration:function(t){var n=e.getItem("_expirations.json")||!1;if(!n)return!1;try{if(!(n=JSON.parse(n)))return!1}catch(e){return!1}if(!n)return!1;var i=n[r+t]||!1;return i||!1}};!function(){var t;try{(e=window.localStorage).setItem("test","test"),e.removeItem("test")}catch(e){t=!0}var n={setItem:function(e,t,n){var r=new Date;r.setTime(r.getTime()+(n||2592e6));var i="expires="+r.toUTCString();document.cookie=e+"="+t+"; "+i+"; path=/; secure"},removeItem:function(e){document.cookie=e+"=;expires=Thu, 01 Jan 1970 00:00:01 GMT;"},getItem:function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r<n.length;r++){for(var i=n[r];" "==i.charAt(0);)i=i.substring(1);if(0==i.indexOf(t))return i.substring(t.length,i.length)}}};i.setCookie=function(e,t,i){n.setItem(e=r+e,t,i)},i.removeCookie=function(e){n.removeItem(e=r+e)},i.getCookie=function(e){var t=n.getItem(e=r+e);return null!=t&&("undefined"==t||void 0==t?void 0:"true"==t||"false"!=t&&t)},i.expireCookie=function(e,t){var i=n.getItem(e=r+e);void 0!==i&&null!==i&&n.setItem(e,i,t)},t&&(!function(){var e=!!navigator.cookieEnabled;return void 0!==navigator.cookieEnabled||e||(document.cookie="testcookie",e=-1!=document.cookie.indexOf("testcookie")),!!e}()?i.useMemory(!0):(i.set=function(e,t,n){i.setCookie(e,t,n),this.trigger("valuechange",e,t,n),n&&i.expireKey(e,n)},i.get=i.getCookie,i.expireKey=function(e,t){var o=n.getItem("_expirations.json")||!1;try{(o=JSON.parse(o))||(o={})}catch(e){o={}}o[r+e]={in:t,since:(new Date).getTime()};n.setItem("_expirations.json",JSON.stringify(o)),i.expireCookie(e,t)},i.getExpiration=function(e){var t=n.getItem("_expirations.json")||!1;if(!t)return!1;try{if(!(t=JSON.parse(t)))return!1}catch(e){return!1}if(!t)return!1;var i=t[r+e]||!1;return i||!1},i.remove=function(e){i.removeCookie(e),this.trigger("valuedelete",e)},i.removeGroup=function(e){var t=function(){for(var e=document.cookie.split(";"),t="",n=1;n<=e.length;n++)t+=n+" "+e[n-1]+"\n";return t}();for(var r in t)0==(""+t[r]).indexOf(e+"_")&&n.removeItem(r)},i.isExpired=function(){console.warn("not available for cookies")},i.renameGroup=function(){console.warn("not available for cookies")}))}(),i.getKey=i.get,i.setKey=i.set,i.removeKey=i.remove;var o=e.getItem("_expirations.json")||!1;if(o)try{var a=JSON.parse(o);o=JSON.parse(o);var s=new Date;for(var c in o){var u=o[c]||!1;if(!u)return!1;if(s.getTime()-u.since>=u.in)for(var f=0;f<n.length;f++)e.getItem(c+n[f])&&(e.removeItem(c+n[f]),delete a[c])}e.setItem("_expirations.json",JSON.stringify(a))}catch(e){}return i});