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