if (Modernizr.hashchange) {
  (function(a,b){"use strict";var c=a.console||b,d=a.document,e=a.navigator,f=a.amplify||!1,g=a.setTimeout,h=a.clearTimeout,i=a.setInterval,j=a.JSON,k=a.alert,l=a.History=a.History||{},m=a.history;j.stringify=j.stringify||j.encode,j.parse=j.parse||j.decode;if(typeof l.init!="undefined")throw new Error("History.js Core has already been loaded...");l.init=function(){if(typeof l.Adapter=="undefined")return!1;typeof l.initCore!="undefined"&&l.initCore(),typeof l.initHtml4!="undefined"&&l.initHtml4();return!0},l.initCore=function(){if(typeof l.initCore.initialized!="undefined")return!1;l.initCore.initialized=!0;var n,o;l.options=l.options||{},l.options.hashChangeInterval=l.options.hashChangeInterval||100,l.options.safariPollInterval=l.options.safariPollInterval||500,l.options.doubleCheckInterval=l.options.doubleCheckInterval||500,l.options.storeInterval=l.options.storeInterval||1e3,l.options.busyDelay=l.options.busyDelay||250,l.options.debug=l.options.debug||!1,l.options.initialTitle=l.options.initialTitle||d.title,l.temp={internal:!1,expectedStateId:!1,ignore:0,same:!1,anchor:!1},l.debug=function(){(l.options.debug||!1)&&l.log.apply(l,arguments)},l.log=function(){var a=typeof c!="undefined"&&typeof c.log!="undefined"&&typeof c.log.apply!="undefined",b=d.getElementById("log"),e,f,g,h,i;a?(h=Array.prototype.slice.call(arguments),e=h.shift(),typeof c.debug!="undefined"?c.debug.apply(c,[e,h]):c.log.apply(c,[e,h])):e="\n"+arguments[0]+"\n";for(f=1,g=arguments.length;f<g;++f){i=arguments[f];if(typeof i=="object"&&typeof j!="undefined")try{i=j.stringify(i)}catch(l){}e+="\n"+i+"\n"}b?(b.value+=e+"\n-----\n",b.scrollTop=b.scrollHeight-b.clientHeight):a||k(e)},l.getInternetExplorerMajorVersion=function(){var a=l.getInternetExplorerMajorVersion.cached=typeof l.getInternetExplorerMajorVersion.cached!="undefined"?l.getInternetExplorerMajorVersion.cached:function(){var a=3,b=d.createElement("div"),c=b.getElementsByTagName("i");while((b.innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]-->")&&c[0]);return a>4?a:!1}();return a},l.isInternetExplorer=function(){var a=l.isInternetExplorer.cached=typeof l.isInternetExplorer.cached!="undefined"?l.isInternetExplorer.cached:Boolean(l.getInternetExplorerMajorVersion());return a},l.emulated={pushState:!Boolean(a.history&&a.history.pushState&&a.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),hashChange:Boolean(!("onhashchange"in a||"onhashchange"in d)||l.isInternetExplorer()&&l.getInternetExplorerMajorVersion()<8)},l.bugs={},l.bugs.safariIFrame=Boolean(!l.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)&&a.parent!==a),l.bugs.safariHash=Boolean(!l.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),l.bugs.safariPoll=Boolean(!l.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),l.bugs.noHashPopState=Boolean(!l.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),l.bugs.noInitialPopState=Boolean(!l.emulated.pushState&&(e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)||/Gecko\//.test(e.userAgent))),l.bugs.ieDoubleCheck=Boolean(l.isInternetExplorer()&&l.getInternetExplorerMajorVersion()<8),l.bugs.hashEscape=Boolean(l.isInternetExplorer()&&l.getInternetExplorerMajorVersion()<7),l.enabled=!l.emulated.pushState,l.isEmptyObject=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},l.cloneObject=function(a){var b,c;a?(b=j.stringify(a),c=j.parse(b)):c={};return c},l.getRootUrl=function(){var a=d.location.protocol+"//"+(d.location.hostname||d.location.host);if(d.location.port||!1)a+=":"+d.location.port;a+="/";return a},l.getBaseHref=function(){var a=d.getElementsByTagName("base"),b=null,c="";a.length===1&&(b=a[0],c=b.href.replace(/[^\/]+$/,"")),c=c.replace(/\/+$/,""),c&&(c+="/");return c},l.getBaseUrl=function(){var a=l.getBaseHref()||l.getBasePageUrl()||l.getRootUrl();return a},l.getPageUrl=function(){var a=l.getState(!1,!1),b=(a||{}).url||d.location.href,c;c=b.replace(/\/+$/,"").replace(/[^\/]+$/,function(a,b,c){return/\./.test(a)?a:a+"/"});return c},l.getBasePageUrl=function(){var a=d.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(a,b,c){return/[^\/]$/.test(a)?"":a}).replace(/\/+$/,"")+"/";return a},l.getFullUrl=function(a,b){var c=a,d=a.substring(0,1);b=typeof b=="undefined"?!0:b,/[a-z]+\:\/\//.test(a)||(d==="/"?c=l.getRootUrl()+a.replace(/^\/+/,""):d==="#"?c=l.getPageUrl().replace(/#.*/,"")+a:d==="?"?c=l.getPageUrl().replace(/[\?#].*/,"")+a:b?c=l.getBaseUrl()+a.replace(/^(\.\/)+/,""):c=l.getBasePageUrl()+a.replace(/^(\.\/)+/,""));return c.replace(/\#$/,"")},l.getShortUrl=function(a){var b=l.getFullUrl(a),c=b,d=l.getBaseUrl(),e=l.getRootUrl();l.emulated.pushState&&(c=c.replace(d,"")),c=c.replace(e,"/"),/^\.?\.?\//.test(c)===!1&&(e+c===b?c="/"+c:c="./"+c),c=c.replace(/^(\.\/)+/g,"./").replace(/\#$/,"");return c},l.store=f?f.store("History.store")||{}:{},l.store.idToState=l.store.idToState||{},l.store.urlToId=l.store.urlToId||{},l.store.stateToId=l.store.stateToId||{},l.idToState=l.idToState||{},l.stateToId=l.stateToId||{},l.urlToId=l.urlToId||{},l.storedStates=l.storedStates||[],l.savedStates=l.savedStates||[],l.getState=function(a,b){typeof a=="undefined"&&(a=!0),typeof b=="undefined"&&(b=!0);var c=l.getLastSavedState();!c&&b&&(c=l.createStateObject()),a&&(c=l.cloneObject(c),c.url=c.cleanUrl||c.url,c.internal=l.temp.internal,c.same=l.temp.same,c.anchor=c.anchor||l.temp.anchor);return c},l.getIdByState=function(a){var b=l.extractId(a.url),c;if(!b){c=l.getStateString(a);if(typeof l.stateToId[c]!="undefined")b=l.stateToId[c];else if(typeof l.store.stateToId[c]!="undefined")b=l.store.stateToId[c];else{for(;;){b=String(Math.floor(Math.random()*1e3));if(typeof l.idToState[b]=="undefined"&&typeof l.store.idToState[b]=="undefined")break}l.stateToId[c]=b,l.idToState[b]=a}}return b},l.normalizeState=function(a){var b,c;if(!a||typeof a!="object")a={};if(typeof a.normalized!="undefined")return a;if(!a.data||typeof a.data!="object")a.data={};b={},b.normalized=!0,b.title=a.title||"",b.url=l.getFullUrl(l.unescapeString(a.url||d.location.href)),b.data=l.cloneObject(a.data),b.anchor=l.extractAnchor(b.url),b.hash=l.getShortUrl(b.url),b.id=l.getIdByState(b),b.cleanUrl=b.url.replace(/\??\&_anchor.*/,"").replace(/\??\&_suid.*/,"").replace(/#.*/,""),b.url=b.cleanUrl,c=!l.isEmptyObject(b.data);if(b.title||c)b.hash=l.getShortUrl(b.url),/\?/.test(b.hash)||(b.hash+="?"),b.hash+="&_suid="+b.id;b.anchor&&(/\?/.test(b.hash)||(b.hash+="?"),l.emulated.pushState&&(b.hash+="&_anchor="+b.anchor),b.url+="#"+b.anchor),b.hashedUrl=l.getFullUrl(b.hash),(l.emulated.pushState||l.bugs.safariPoll)&&l.hasUrlDuplicate(b)&&(b.url=b.hashedUrl);return b},l.createStateObject=function(a,b,c){var d={data:a,title:b,url:c};d=l.normalizeState(d);return d},l.getStateById=function(a){a=String(a);var c=l.idToState[a]||l.store.idToState[a]||b;return c},l.getStateString=function(a){var b=l.normalizeState(a),c,d;c={data:b.data,title:a.title,url:a.url},d=j.stringify(c);return d},l.getStateId=function(a){var b=l.normalizeState(a),c;c=b.id;return c},l.getHashByState=function(a){var b,c=l.normalizeState(a);b=c.hash;return b},l.extractAnchor=function(a){var b,c,d;b=a.replace(/^[^#]+#?/,""),b||(c=/(.*)\&_anchor=([a-zA-Z0-9_\-]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"");return b||!1},l.extractId=function(a){var b,c,d;c=/(.*)\&_suid=([0-9]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"";return b||!1},l.isTraditionalAnchor=function(a){var b=!/[^a-zA-Z0-9_\-]/.test(a);return b},l.extractState=function(a,b,c){var d=null,e,f,g;b=b||!1,c=typeof c=="undefined"?!0:c,a=a,e=l.extractId(a),e&&(d=l.getStateById(e)),d||(f=l.getFullUrl(a),e=l.getIdByUrl(f)||!1,e&&(d=l.getStateById(e)),!d&&b&&(!!c||!l.isTraditionalAnchor(a))&&(d=l.createStateObject(null,null,f)));return d},l.getIdByUrl=function(a){var c=l.urlToId[a]||l.store.urlToId[a]||b;return c},l.getLastSavedState=function(){return l.getStateById(l.savedStates[l.savedStates.length-1])},l.getLastStoredState=function(){return l.getStateById(l.storedStates[l.storedStates.length-1])},l.hasUrlDuplicate=function(a){var b=!1,c;c=l.extractState(a.url),b=c&&c.id!==a.id;return b},l.storeState=function(a){if(l.isLastStoredState(a))return a;l.urlToId[a.url]=a.id,l.storedStates.push(a.id);return a},l.isLastStoredState=function(a){var b=!1,c,d,e;l.storedStates.length&&(c=l.getLastStoredState(),d=a.id,e=c.id,b=d===e);return b},l.isLastSavedState=function(a,b){var c=!1,d,e,f,g,h;l.savedStates.length&&(d=l.getLastSavedState(),b?(g={data:a.data,title:a.title,url:a.cleanUrl},h={data:d.data,title:d.title,url:d.cleanUrl},c=j.stringify(g)===j.stringify(h)):(e=a.id,f=d.id,c=e===f));return c},l.saveState=function(a){if(l.isLastSavedState(a))return a;l.savedStates.push(a.id);return a},l.getStateByIndex=function(a){var b=null,c;typeof a=="undefined"?c=l.savedStates[l.savedStates.length-1]:a<0?c=l.savedStates[l.savedStates.length+a]:c=l.savedStates[a],b=l.getStateById(c);return b},l.getHash=function(){var a=l.unescapeHash(d.location.hash);return a},l.unescapeString=function(b){var c=b,d;for(;;){d=a.decodeURI(c);if(d===c)break;c=d}return c},l.unescapeHash=function(a){var b=l.normalizeHash(a);b=l.unescapeString(b);return b},l.normalizeHash=function(a){var b=a.replace(/[^#]*#/,"").replace(/#.*/,"");return b},l.setHash=function(a,b){if(b!==!1&&l.busy()){l.debug("History.setHash: we must wait",arguments),l.pushQueue({scope:l,callback:l.setHash,args:arguments,queue:b});return!1}l.debug("History.setHash: called",a);var c=l.escapeHash(a),e,f,g;l.busy(!0),e=l.extractState(a,!0,!1),e&&!l.emulated.pushState?(l.debug("History.setHash: Hash is a state so skipping the hash set with a direct pushState call",arguments),l.pushState(e.data,e.title,e.url,!1)):d.location.hash!==c&&(l.bugs.safariHash?(f=l.getPageUrl(),g=l.extractState(f.replace(/#.*/,"")),g?l.pushState(g.data,g.title,g.url+"#"+c,!1):l.pushState(null,null,f+"#"+c,!1)):d.location.hash=c);return l},l.escapeHash=function(b){var c=l.normalizeHash(b);c=a.encodeURI(c),l.bugs.hashEscape||(c=c.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?"));return c},l.getHashByUrl=function(a){var b=String(a).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");b=l.unescapeHash(b);return b},l.setTitle=function(a){var b=typeof a=="string"?a:a.title,c;b||(c=l.getStateByIndex(0),c&&c.url===(a.url||d.location.href)&&(b=c.title||l.options.initialTitle));try{d.getElementsByTagName("title")[0].innerHTML=b.replace("<","&lt;").replace(">","&gt;").replace(" & "," &amp; ")}catch(e){}d.title=b;return l},l.queues=[],l.busy=function(a){typeof a!="undefined"?(l.debug("History.busy: changing ["+(l.busy.flag||!1)+"] to ["+(a||!1)+"]",l.queues.length),l.busy.flag=a):typeof l.busy.flag=="undefined"&&(l.busy.flag=!1);var b,c,d,e;l.busy.flag||(h(l.busy.timeout),b=function(){if(!l.busy.flag)for(c=l.queues.length-1;c>=0;--c){d=l.queues[c];if(d.length===0)continue;e=d.shift(),l.fireQueueItem(e),l.busy.timeout=g(b,l.options.busyDelay)}},l.busy.timeout=g(b,l.options.busyDelay));return l.busy.flag},l.fireQueueItem=function(a){return a.callback.apply(a.scope||l,a.args||[])},l.pushQueue=function(a){l.queues[a.queue||0]=l.queues[a.queue||0]||[],l.queues[a.queue||0].push(a);return l},l.queue=function(a,b){typeof a=="function"&&(a={callback:a}),typeof b!="undefined"&&(a.queue=b),l.busy()?l.pushQueue(a):l.fireQueueItem(a);return l},l.clearQueue=function(){l.busy.flag=!1,l.queues=[];return l},l.stateChanged=!1,l.doubleChecker=!1,l.doubleCheckComplete=function(){l.stateChanged=!0,l.doubleCheckClear();return l},l.doubleCheckClear=function(){l.doubleChecker&&(h(l.doubleChecker),l.doubleChecker=!1);return l},l.doubleCheck=function(a){l.stateChanged=!1,l.doubleCheckClear(),l.bugs.ieDoubleCheck&&(l.doubleChecker=g(function(){l.doubleCheckClear(),l.stateChanged||(l.debug("History.doubleCheck: State has not yet changed, trying again",arguments),a());return!0},l.options.doubleCheckInterval));return l},l.safariStatePoll=function(){var b=l.extractState(d.location.href),c;if(b&&!l.isLastSavedState(b))c=b;else return;c||(l.debug("History.safariStatePoll: new"),c=l.createStateObject()),l.debug("History.safariStatePoll: trigger"),l.Adapter.trigger(a,"popstate");return l},l.back=function(a){l.debug("History.back: called",arguments);if(a!==!1&&l.busy()){l.debug("History.back: we must wait",arguments),l.pushQueue({scope:l,callback:l.back,args:arguments,queue:a});return!1}l.busy(!0),l.doubleCheck(function(){l.back(!1)}),m.go(-1);return!0},l.forward=function(a){l.debug("History.forward: called",arguments);if(a!==!1&&l.busy()){l.debug("History.forward: we must wait",arguments),l.pushQueue({scope:l,callback:l.forward,args:arguments,queue:a});return!1}l.busy(!0),l.doubleCheck(function(){l.forward(!1)}),m.go(1);return!0},l.go=function(a){l.debug("History.go: called",arguments);var b,c;c=(a<0?a*-1:a)-1,c&&l.queue(function(){l.temp.ignore=c,l.busy(!1)});if(a>0)for(b=1;b<=a;++b)l.forward();else{if(!(a<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(b=-1;b>=a;--b)l.back()}return l},l.saveState(l.storeState(l.extractState(d.location.href,!0))),f&&(l.onUnload=function(){var a=f.store("History.store")||{},b;a.idToState=a.idToState||{},a.urlToId=a.urlToId||{},a.stateToId=a.stateToId||{};for(b in l.idToState)l.idToState.hasOwnProperty(b)&&(a.idToState[b]=l.idToState[b]);for(b in l.urlToId)l.urlToId.hasOwnProperty(b)&&(a.urlToId[b]=l.urlToId[b]);for(b in l.stateToId)l.stateToId.hasOwnProperty(b)&&(a.stateToId[b]=l.stateToId[b]);l.store=a,f.store("History.store",a)},i(l.onUnload,l.options.storeInterval),l.Adapter.bind(a,"beforeunload",l.onUnload),l.Adapter.bind(a,"unload",l.onUnload)),l.emulated.pushState?(o=function(){},l.pushState=l.pushState||o,l.replaceState=l.replaceState||o):(l.onPopState=function(b,c){var e,f,g,h=!1,i=!1,j=!1;l.doubleCheckComplete(),e=l.getHash();if(e){f=l.extractState(e||d.location.href,!0,!1);if(f){l.debug("History.onPopState: state anchor",e,f),l.replaceState(f.data,f.title,f.url,!1);return!1}l.debug("History.onPopState: traditional anchor",e)}i=l.Adapter.extractEventData("state",b,c)||!1,i?h=l.getStateById(i):l.temp.expectedStateId?h=l.getStateById(l.temp.expectedStateId):h=l.extractState(d.location.href),h||(e&&(g=l.extractState(d.location.href.replace(/#.*/,"")),g&&(h=l.createStateObject(g.data,g.title,d.location.href))),h||(h=l.createStateObject(null,null,d.location.href)));if(l.temp.ignore){--l.temp.ignore,l.busy(!1);return!1}if(l.temp.internal==="hashchange"){if(l.isLastSavedState(h)){l.busy(!1);return!1}l.temp.internal=!1}l.temp.expectedStateId||(l.temp.internal=!1),l.temp.expectedStateId=!1,l.temp.same=l.isLastSavedState(h,!0),l.storeState(h),l.saveState(h),l.setTitle(h),l.Adapter.trigger(a,"statechange"),l.busy(!1);return!0},l.Adapter.bind(a,"popstate",l.onPopState),l.pushState=function(b,c,d,e){l.debug("History.pushState: called",arguments);if(e!==!1&&l.busy()){l.debug("History.pushState: we must wait",arguments),l.pushQueue({scope:l,callback:l.pushState,args:arguments,queue:e});return!1}l.busy(!0);var f=l.createStateObject(b,c,d),g;e!==!1&&(l.temp.internal="pushState"),l.temp.same=l.isLastSavedState(f,!0),l.isLastSavedState(f)?(l.Adapter.trigger(a,"statechange"),l.busy(!1)):(l.storeState(f),m.pushState(f.id,f.title,f.url),l.temp.expectedStateId=f.id,l.Adapter.trigger(a,"popstate"));return!0},l.replaceState=function(b,c,d,e){l.debug("History.replaceState: called",arguments);if(e!==!1&&l.busy()){l.debug("History.replaceState: we must wait",arguments),l.pushQueue({scope:l,callback:l.replaceState,args:arguments,queue:e});return!1}l.busy(!0);var f=l.createStateObject(b,c,d),g;e!==!1&&(l.temp.internal="replaceState"),l.temp.same=l.isLastSavedState(f,!0),l.isLastSavedState(f)?(l.Adapter.trigger(a,"statechange"),l.busy(!1)):(l.storeState(f),m.replaceState(f.id,f.title,f.url),l.temp.expectedStateId=f.id,l.Adapter.trigger(a,"popstate"));return!0},++l.temp.ignore,l.bugs.safariPoll&&i(l.safariStatePoll,l.options.safariPollInterval),l.bugs.safariIFrame&&(n=l.getState(),m.pushState(n.data,n.title,n.url)),l.bugs.noHashPopState&&(l.Adapter.bind(a,"hashchange",function(){l.temp.internal="hashchange",l.Adapter.trigger(a,"popstate")}),l.getHash()&&l.bugs.noInitialPopState&&l.Adapter.onDomLoad(function(){l.Adapter.trigger(a,"popstate")})),l.bugs.noInitialPopState&&l.Adapter.trigger(a,"popstate"))},l.init()})(window)
}
