window.JSON || (window.JSON = {}), function () { function f(a) { return a < 10 ? "0" + a : a } function quote(a) { return escapable.lastIndex = 0, escapable.test(a) ? '"' + a.replace(escapable, function (a) { var b = meta[a]; return typeof b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + a + '"' } function str(a, b) { var c, d, e, f, g = gap, h, i = b[a]; i && typeof i == "object" && typeof i.toJSON == "function" && (i = i.toJSON(a)), typeof rep == "function" && (i = rep.call(b, a, i)); switch (typeof i) { case "string": return quote(i); case "number": return isFinite(i) ? String(i) : "null"; case "boolean": case "null": return String(i); case "object": if (!i) return "null"; gap += indent, h = []; if (Object.prototype.toString.apply(i) === "[object Array]") { f = i.length; for (c = 0; c < f; c += 1) h[c] = str(c, i) || "null"; return e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]", gap = g, e } if (rep && typeof rep == "object") { f = rep.length; for (c = 0; c < f; c += 1) d = rep[c], typeof d == "string" && (e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e)) } else for (d in i) Object.hasOwnProperty.call(i, d) && (e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e)); return e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}", gap = g, e } } "use strict", typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function (a) { return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) { return this.valueOf() }); var JSON = window.JSON, cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, rep; typeof JSON.stringify != "function" && (JSON.stringify = function (a, b, c) { var d; gap = "", indent = ""; if (typeof c == "number") for (d = 0; d < c; d += 1) indent += " "; else typeof c == "string" && (indent = c); rep = b; if (!b || typeof b == "function" || typeof b == "object" && typeof b.length == "number") return str("", { "": a }); throw new Error("JSON.stringify") }), typeof JSON.parse != "function" && (JSON.parse = function (text, reviver) { function walk(a, b) { var c, d, e = a[b]; if (e && typeof e == "object") for (c in e) Object.hasOwnProperty.call(e, c) && (d = walk(e, c), d !== undefined ? e[c] = d : delete e[c]); return reviver.call(a, b, e) } var j; text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function (a) { return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) })); if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), typeof reviver == "function" ? walk({ "": j }, "") : j; throw new SyntaxError("JSON.parse") }) } (), function (a, b) { "use strict"; var c = a.History = a.History || {}, d = a.jQuery; if (typeof c.Adapter != "undefined") throw new Error("History.js Adapter has already been loaded..."); c.Adapter = { bind: function (a, b, c) { d(a).bind(b, c) }, trigger: function (a, b, c) { d(a).trigger(b, c) }, extractEventData: function (a, c, d) { var e = c && c.originalEvent && c.originalEvent[a] || d && d[a] || b; return e }, onDomLoad: function (a) { d(a) } }, typeof c.init != "undefined" && c.init() } (window), function (a, b) { "use strict"; var c = a.document, d = a.setTimeout || d, e = a.clearTimeout || e, f = a.setInterval || f, g = a.History = a.History || {}; if (typeof g.initHtml4 != "undefined") throw new Error("History.js HTML4 Support has already been loaded..."); g.initHtml4 = function () { if (typeof g.initHtml4.initialized != "undefined") return !1; g.initHtml4.initialized = !0, g.enabled = !0, g.savedHashes = [], g.isLastHash = function (a) { var b = g.getHashByIndex(), c; return c = a === b, c }, g.saveHash = function (a) { return g.isLastHash(a) ? !1 : (g.savedHashes.push(a), !0) }, g.getHashByIndex = function (a) { var b = null; return typeof a == "undefined" ? b = g.savedHashes[g.savedHashes.length - 1] : a < 0 ? b = g.savedHashes[g.savedHashes.length + a] : b = g.savedHashes[a], b }, g.discardedHashes = {}, g.discardedStates = {}, g.discardState = function (a, b, c) { var d = g.getHashByState(a), e; return e = { discardedState: a, backState: c, forwardState: b }, g.discardedStates[d] = e, !0 }, g.discardHash = function (a, b, c) { var d = { discardedHash: a, backState: c, forwardState: b }; return g.discardedHashes[a] = d, !0 }, g.discardedState = function (a) { var b = g.getHashByState(a), c; return c = g.discardedStates[b] || !1, c }, g.discardedHash = function (a) { var b = g.discardedHashes[a] || !1; return b }, g.recycleState = function (a) { var b = g.getHashByState(a); return g.discardedState(a) && delete g.discardedStates[b], !0 }, g.emulated.hashChange && (g.hashChangeInit = function () { g.checkerFunction = null; var b = "", d, e, h, i; return g.isInternetExplorer() ? (d = "historyjs-iframe", e = c.createElement("iframe"), e.setAttribute("id", d), e.style.display = "none", c.body.appendChild(e), e.contentWindow.document.open(), e.contentWindow.document.close(), h = "", i = !1, g.checkerFunction = function () { if (i) return !1; i = !0; var c = g.getHash() || "", d = g.unescapeHash(e.contentWindow.document.location.hash) || ""; return c !== b ? (b = c, d !== c && (h = d = c, e.contentWindow.document.open(), e.contentWindow.document.close(), e.contentWindow.document.location.hash = g.escapeHash(c)), g.Adapter.trigger(a, "hashchange")) : d !== h && (h = d, g.setHash(d, !1)), i = !1, !0 }) : g.checkerFunction = function () { var c = g.getHash(); return c !== b && (b = c, g.Adapter.trigger(a, "hashchange")), !0 }, g.intervalList.push(f(g.checkerFunction, g.options.hashChangeInterval)), !0 }, g.Adapter.onDomLoad(g.hashChangeInit)), g.emulated.pushState && (g.onHashChange = function (b) { var d = b && b.newURL || c.location.href, e = g.getHashByUrl(d), f = null, h = null, i = null, j; return g.isLastHash(e) ? (g.busy(!1), !1) : (g.doubleCheckComplete(), g.saveHash(e), e && g.isTraditionalAnchor(e) ? (g.Adapter.trigger(a, "anchorchange"), g.busy(!1), !1) : (f = g.extractState(g.getFullUrl(e || c.location.href, !1), !0), g.isLastSavedState(f) ? (g.busy(!1), !1) : (h = g.getHashByState(f), j = g.discardedState(f), j ? (g.getHashByIndex(-2) === g.getHashByState(j.forwardState) ? g.back(!1) : g.forward(!1), !1) : (g.pushState(f.data, f.title, f.url, !1), !0)))) }, g.Adapter.bind(a, "hashchange", g.onHashChange), g.pushState = function (b, d, e, f) { if (g.getHashByUrl(e)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); if (f !== !1 && g.busy()) return g.pushQueue({ scope: g, callback: g.pushState, args: arguments, queue: f }), !1; g.busy(!0); var h = g.createStateObject(b, d, e), i = g.getHashByState(h), j = g.getState(!1), k = g.getHashByState(j), l = g.getHash(); return g.storeState(h), g.expectedStateId = h.id, g.recycleState(h), g.setTitle(h), i === k ? (g.busy(!1), !1) : i !== l && i !== g.getShortUrl(c.location.href) ? (g.setHash(i, !1), !1) : (g.saveState(h), g.Adapter.trigger(a, "statechange"), g.busy(!1), !0) }, g.replaceState = function (a, b, c, d) { if (g.getHashByUrl(c)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); if (d !== !1 && g.busy()) return g.pushQueue({ scope: g, callback: g.replaceState, args: arguments, queue: d }), !1; g.busy(!0); var e = g.createStateObject(a, b, c), f = g.getState(!1), h = g.getStateByIndex(-2); return g.discardState(f, e, h), g.pushState(e.data, e.title, e.url, !1), !0 }), g.emulated.pushState && g.getHash() && !g.emulated.hashChange && g.Adapter.onDomLoad(function () { g.Adapter.trigger(a, "hashchange") }) }, typeof g.init != "undefined" && g.init() } (window), function (a, b) { "use strict"; var c = a.console || b, d = a.document, e = a.navigator, f = a.sessionStorage || !1, g = a.setTimeout, h = a.clearTimeout, i = a.setInterval, j = a.clearInterval, k = a.JSON, l = a.alert, m = a.History = a.History || {}, n = a.history; k.stringify = k.stringify || k.encode, k.parse = k.parse || k.decode; if (typeof m.init != "undefined") throw new Error("History.js Core has already been loaded..."); m.init = function () { return typeof m.Adapter == "undefined" ? !1 : (typeof m.initCore != "undefined" && m.initCore(), typeof m.initHtml4 != "undefined" && m.initHtml4(), !0) }, m.initCore = function () { if (typeof m.initCore.initialized != "undefined") return !1; m.initCore.initialized = !0, m.options = m.options || {}, m.options.hashChangeInterval = m.options.hashChangeInterval || 100, m.options.safariPollInterval = m.options.safariPollInterval || 500, m.options.doubleCheckInterval = m.options.doubleCheckInterval || 500, m.options.storeInterval = m.options.storeInterval || 1e3, m.options.busyDelay = m.options.busyDelay || 250, m.options.debug = m.options.debug || !1, m.options.initialTitle = m.options.initialTitle || d.title, m.intervalList = [], m.clearAllIntervals = function () { var a, b = m.intervalList; if (typeof b != "undefined" && b !== null) { for (a = 0; a < b.length; a++) j(b[a]); m.intervalList = null } }, m.debug = function () { (m.options.debug || !1) && m.log.apply(m, arguments) }, m.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 k != "undefined") try { i = k.stringify(i) } catch (j) { } e += "\n" + i + "\n" } return b ? (b.value += e + "\n-----\n", b.scrollTop = b.scrollHeight - b.clientHeight) : a || l(e), !0 }, m.getInternetExplorerMajorVersion = function () { var a = m.getInternetExplorerMajorVersion.cached = typeof m.getInternetExplorerMajorVersion.cached != "undefined" ? m.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 }, m.isInternetExplorer = function () { var a = m.isInternetExplorer.cached = typeof m.isInternetExplorer.cached != "undefined" ? m.isInternetExplorer.cached : Boolean(m.getInternetExplorerMajorVersion()); return a }, m.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) || m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8) }, m.enabled = !m.emulated.pushState, m.bugs = { setHash: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)), safariPoll: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)), ieDoubleCheck: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8), hashEscape: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 7) }, m.isEmptyObject = function (a) { for (var b in a) return !1; return !0 }, m.cloneObject = function (a) { var b, c; return a ? (b = k.stringify(a), c = k.parse(b)) : c = {}, c }, m.getRootUrl = function () { var a = d.location.protocol + "//" + (d.location.hostname || d.location.host); if (d.location.port || !1) a += ":" + d.location.port; return a += "/", a }, m.getBaseHref = function () { var a = d.getElementsByTagName("base"), b = null, c = ""; return a.length === 1 && (b = a[0], c = b.href.replace(/[^\/]+$/, "")), c = c.replace(/\/+$/, ""), c && (c += "/"), c }, m.getBaseUrl = function () { var a = m.getBaseHref() || m.getBasePageUrl() || m.getRootUrl(); return a }, m.getPageUrl = function () { var a = m.getState(!1, !1), b = (a || {}).url || d.location.href, c; return c = b.replace(/\/+$/, "").replace(/[^\/]+$/, function (a, b, c) { return /\./.test(a) ? a : a + "/" }), c }, m.getBasePageUrl = function () { var a = d.location.href.replace(/[#\?].*/, "").replace(/[^\/]+$/, function (a, b, c) { return /[^\/]$/.test(a) ? "" : a }).replace(/\/+$/, "") + "/"; return a }, m.getFullUrl = function (a, b) { var c = a, d = a.substring(0, 1); return b = typeof b == "undefined" ? !0 : b, /[a-z]+\:\/\//.test(a) || (d === "/" ? c = m.getRootUrl() + a.replace(/^\/+/, "") : d === "#" ? c = m.getPageUrl().replace(/#.*/, "") + a : d === "?" ? c = m.getPageUrl().replace(/[\?#].*/, "") + a : b ? c = m.getBaseUrl() + a.replace(/^(\.\/)+/, "") : c = m.getBasePageUrl() + a.replace(/^(\.\/)+/, "")), c.replace(/\#$/, "") }, m.getShortUrl = function (a) { var b = a, c = m.getBaseUrl(), d = m.getRootUrl(); return m.emulated.pushState && (b = b.replace(c, "")), b = b.replace(d, "/"), m.isTraditionalAnchor(b) && (b = "./" + b), b = b.replace(/^(\.\/)+/g, "./").replace(/\#$/, ""), b }, m.store = {}, m.idToState = m.idToState || {}, m.stateToId = m.stateToId || {}, m.urlToId = m.urlToId || {}, m.storedStates = m.storedStates || [], m.savedStates = m.savedStates || [], m.normalizeStore = function () { m.store.idToState = m.store.idToState || {}, m.store.urlToId = m.store.urlToId || {}, m.store.stateToId = m.store.stateToId || {} }, m.getState = function (a, b) { typeof a == "undefined" && (a = !0), typeof b == "undefined" && (b = !0); var c = m.getLastSavedState(); return !c && b && (c = m.createStateObject()), a && (c = m.cloneObject(c), c.url = c.cleanUrl || c.url), c }, m.getIdByState = function (a) { var b = m.extractId(a.url), c; if (!b) { c = m.getStateString(a); if (typeof m.stateToId[c] != "undefined") b = m.stateToId[c]; else if (typeof m.store.stateToId[c] != "undefined") b = m.store.stateToId[c]; else { for (; ; ) { b = (new Date).getTime() + String(Math.random()).replace(/\D/g, ""); if (typeof m.idToState[b] == "undefined" && typeof m.store.idToState[b] == "undefined") break } m.stateToId[c] = b, m.idToState[b] = a } } return b }, m.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 = m.getFullUrl(m.unescapeString(a.url || d.location.href)), b.hash = m.getShortUrl(b.url), b.data = m.cloneObject(a.data), b.id = m.getIdByState(b), b.cleanUrl = b.url.replace(/\??\&_suid.*/, ""), b.url = b.cleanUrl, c = !m.isEmptyObject(b.data); if (b.title || c) b.hash = m.getShortUrl(b.url).replace(/\??\&_suid.*/, ""), /\?/.test(b.hash) || (b.hash += "?"), b.hash += "&_suid=" + b.id; return b.hashedUrl = m.getFullUrl(b.hash), (m.emulated.pushState || m.bugs.safariPoll) && m.hasUrlDuplicate(b) && (b.url = b.hashedUrl), b }, m.createStateObject = function (a, b, c) { var d = { data: a, title: b, url: c }; return d = m.normalizeState(d), d }, m.getStateById = function (a) { a = String(a); var c = m.idToState[a] || m.store.idToState[a] || b; return c }, m.getStateString = function (a) { var b, c, d; return b = m.normalizeState(a), c = { data: b.data, title: a.title, url: a.url }, d = k.stringify(c), d }, m.getStateId = function (a) { var b, c; return b = m.normalizeState(a), c = b.id, c }, m.getHashByState = function (a) { var b, c; return b = m.normalizeState(a), c = b.hash, c }, m.extractId = function (a) { var b, c, d; return c = /(.*)\&_suid=([0-9]+)$/.exec(a), d = c ? c[1] || a : a, b = c ? String(c[2] || "") : "", b || !1 }, m.isTraditionalAnchor = function (a) { var b = !/[\/\?\.]/.test(a); return b }, m.extractState = function (a, b) { var c = null, d, e; return b = b || !1, d = m.extractId(a), d && (c = m.getStateById(d)), c || (e = m.getFullUrl(a), d = m.getIdByUrl(e) || !1, d && (c = m.getStateById(d)), !c && b && !m.isTraditionalAnchor(a) && (c = m.createStateObject(null, null, e))), c }, m.getIdByUrl = function (a) { var c = m.urlToId[a] || m.store.urlToId[a] || b; return c }, m.getLastSavedState = function () { return m.savedStates[m.savedStates.length - 1] || b }, m.getLastStoredState = function () { return m.storedStates[m.storedStates.length - 1] || b }, m.hasUrlDuplicate = function (a) { var b = !1, c; return c = m.extractState(a.url), b = c && c.id !== a.id, b }, m.storeState = function (a) { return m.urlToId[a.url] = a.id, m.storedStates.push(m.cloneObject(a)), a }, m.isLastSavedState = function (a) { var b = !1, c, d, e; return m.savedStates.length && (c = a.id, d = m.getLastSavedState(), e = d.id, b = c === e), b }, m.saveState = function (a) { return m.isLastSavedState(a) ? !1 : (m.savedStates.push(m.cloneObject(a)), !0) }, m.getStateByIndex = function (a) { var b = null; return typeof a == "undefined" ? b = m.savedStates[m.savedStates.length - 1] : a < 0 ? b = m.savedStates[m.savedStates.length + a] : b = m.savedStates[a], b }, m.getHash = function () { var a = m.unescapeHash(d.location.hash); return a }, m.unescapeString = function (b) { var c = b, d; for (; ; ) { d = a.unescape(c); if (d === c) break; c = d } return c }, m.unescapeHash = function (a) { var b = m.normalizeHash(a); return b = m.unescapeString(b), b }, m.normalizeHash = function (a) { var b = a.replace(/[^#]*#/, "").replace(/#.*/, ""); return b }, m.setHash = function (a, b) { var c, e, f; return b !== !1 && m.busy() ? (m.pushQueue({ scope: m, callback: m.setHash, args: arguments, queue: b }), !1) : (c = m.escapeHash(a), m.busy(!0), e = m.extractState(a, !0), e && !m.emulated.pushState ? m.pushState(e.data, e.title, e.url, !1) : d.location.hash !== c && (m.bugs.setHash ? (f = m.getPageUrl(), m.pushState(null, null, f + "#" + c, !1)) : d.location.hash = c), m) }, m.escapeHash = function (b) { var c = m.normalizeHash(b); return c = a.escape(c), m.bugs.hashEscape || (c = c.replace(/\%21/g, "!").replace(/\%26/g, "&").replace(/\%3D/g, "=").replace(/\%3F/g, "?")), c }, m.getHashByUrl = function (a) { var b = String(a).replace(/([^#]*)#?([^#]*)#?(.*)/, "$2"); return b = m.unescapeHash(b), b }, m.setTitle = function (a) { var b = a.title, c; b || (c = m.getStateByIndex(0), c && c.url === a.url && (b = c.title || m.options.initialTitle)); try { d.getElementsByTagName("title")[0].innerHTML = b.replace("<", "&lt;").replace(">", "&gt;").replace(" & ", " &amp; ") } catch (e) { } return d.title = b, m }, m.queues = [], m.busy = function (a) { typeof a != "undefined" ? m.busy.flag = a : typeof m.busy.flag == "undefined" && (m.busy.flag = !1); if (!m.busy.flag) { h(m.busy.timeout); var b = function () { var a, c, d; if (m.busy.flag) return; for (a = m.queues.length - 1; a >= 0; --a) { c = m.queues[a]; if (c.length === 0) continue; d = c.shift(), m.fireQueueItem(d), m.busy.timeout = g(b, m.options.busyDelay) } }; m.busy.timeout = g(b, m.options.busyDelay) } return m.busy.flag }, m.busy.flag = !1, m.fireQueueItem = function (a) { return a.callback.apply(a.scope || m, a.args || []) }, m.pushQueue = function (a) { return m.queues[a.queue || 0] = m.queues[a.queue || 0] || [], m.queues[a.queue || 0].push(a), m }, m.queue = function (a, b) { return typeof a == "function" && (a = { callback: a }), typeof b != "undefined" && (a.queue = b), m.busy() ? m.pushQueue(a) : m.fireQueueItem(a), m }, m.clearQueue = function () { return m.busy.flag = !1, m.queues = [], m }, m.stateChanged = !1, m.doubleChecker = !1, m.doubleCheckComplete = function () { return m.stateChanged = !0, m.doubleCheckClear(), m }, m.doubleCheckClear = function () { return m.doubleChecker && (h(m.doubleChecker), m.doubleChecker = !1), m }, m.doubleCheck = function (a) { return m.stateChanged = !1, m.doubleCheckClear(), m.bugs.ieDoubleCheck && (m.doubleChecker = g(function () { return m.doubleCheckClear(), m.stateChanged || a(), !0 }, m.options.doubleCheckInterval)), m }, m.safariStatePoll = function () { var b = m.extractState(d.location.href), c; if (!m.isLastSavedState(b)) c = b; else return; return c || (c = m.createStateObject()), m.Adapter.trigger(a, "popstate"), m }, m.back = function (a) { return a !== !1 && m.busy() ? (m.pushQueue({ scope: m, callback: m.back, args: arguments, queue: a }), !1) : (m.busy(!0), m.doubleCheck(function () { m.back(!1) }), n.go(-1), !0) }, m.forward = function (a) { return a !== !1 && m.busy() ? (m.pushQueue({ scope: m, callback: m.forward, args: arguments, queue: a }), !1) : (m.busy(!0), m.doubleCheck(function () { m.forward(!1) }), n.go(1), !0) }, m.go = function (a, b) { var c; if (a > 0) for (c = 1; c <= a; ++c) m.forward(b); else { if (!(a < 0)) throw new Error("History.go: History.go requires a positive or negative integer passed."); for (c = -1; c >= a; --c) m.back(b) } return m }; if (m.emulated.pushState) { var o = function () { }; m.pushState = m.pushState || o, m.replaceState = m.replaceState || o } else m.onPopState = function (b, c) { var e = !1, f = !1, g, h; return m.doubleCheckComplete(), g = m.getHash(), g ? (h = m.extractState(g || d.location.href, !0), h ? m.replaceState(h.data, h.title, h.url, !1) : (m.Adapter.trigger(a, "anchorchange"), m.busy(!1)), m.expectedStateId = !1, !1) : (e = m.Adapter.extractEventData("state", b, c) || !1, e ? f = m.getStateById(e) : m.expectedStateId ? f = m.getStateById(m.expectedStateId) : f = m.extractState(d.location.href), f || (f = m.createStateObject(null, null, d.location.href)), m.expectedStateId = !1, m.isLastSavedState(f) ? (m.busy(!1), !1) : (m.storeState(f), m.saveState(f), m.setTitle(f), m.Adapter.trigger(a, "statechange"), m.busy(!1), !0)) }, m.Adapter.bind(a, "popstate", m.onPopState), m.pushState = function (b, c, d, e) { if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); if (e !== !1 && m.busy()) return m.pushQueue({ scope: m, callback: m.pushState, args: arguments, queue: e }), !1; m.busy(!0); var f = m.createStateObject(b, c, d); return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), m.expectedStateId = f.id, n.pushState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0 }, m.replaceState = function (b, c, d, e) { if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); if (e !== !1 && m.busy()) return m.pushQueue({ scope: m, callback: m.replaceState, args: arguments, queue: e }), !1; m.busy(!0); var f = m.createStateObject(b, c, d); return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), m.expectedStateId = f.id, n.replaceState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0 }; if (f) { try { m.store = k.parse(f.getItem("History.store")) || {} } catch (p) { m.store = {} } m.normalizeStore() } else m.store = {}, m.normalizeStore(); m.Adapter.bind(a, "beforeunload", m.clearAllIntervals), m.Adapter.bind(a, "unload", m.clearAllIntervals), m.saveState(m.storeState(m.extractState(d.location.href, !0))), f && (m.onUnload = function () { var a, b; try { a = k.parse(f.getItem("History.store")) || {} } catch (c) { a = {} } a.idToState = a.idToState || {}, a.urlToId = a.urlToId || {}, a.stateToId = a.stateToId || {}; for (b in m.idToState) { if (!m.idToState.hasOwnProperty(b)) continue; a.idToState[b] = m.idToState[b] } for (b in m.urlToId) { if (!m.urlToId.hasOwnProperty(b)) continue; a.urlToId[b] = m.urlToId[b] } for (b in m.stateToId) { if (!m.stateToId.hasOwnProperty(b)) continue; a.stateToId[b] = m.stateToId[b] } m.store = a, m.normalizeStore(), f.setItem("History.store", k.stringify(a)) }, m.intervalList.push(i(m.onUnload, m.options.storeInterval)), m.Adapter.bind(a, "beforeunload", m.onUnload), m.Adapter.bind(a, "unload", m.onUnload)); if (!m.emulated.pushState) { m.bugs.safariPoll && m.intervalList.push(i(m.safariStatePoll, m.options.safariPollInterval)); if (e.vendor === "Apple Computer, Inc." || (e.appCodeName || "") === "Mozilla") m.Adapter.bind(a, "hashchange", function () { m.Adapter.trigger(a, "popstate") }), m.getHash() && m.Adapter.onDomLoad(function () { m.Adapter.trigger(a, "hashchange") }) } }, m.init() } (window)
