/*
* jQuery Address Plugin v1.1
* http://www.asual.com/jquery/address/
*
* Copyright (c) 2009 Rostislav Hristov
* Dual licensed under the MIT and GPL licenses.
* http://docs.jquery.com/License
*
* Date: 2009-12-09 00:30:03 +0200 (Wed, 09 Dec 2009)
*/
(function(a) { a.address = (function() { var c = function(i) { a(this).trigger(a.extend(a.Event(i), (function() { var ah = { value: this.value(), path: this.path(), pathNames: this.pathNames(), parameterNames: this.parameterNames(), parameters: {}, queryString: this.queryString() }; for (var ag = 0, p = ah.parameterNames.length; ag < p; ag++) { ah.parameters[ah.parameterNames[ag]] = this.parameter(ah.parameterNames[ag]) } return ah }).call(this))) }; var V = function() { c.call(a.address, "init") }; var o = function() { c.call(a.address, "change") }; var P = function() { var i = U.href.indexOf("#"); return i != -1 ? ae(q(U.href.substr(i + 1))) : "" }; var h = function() { try { return top.document != undefined ? top : window } catch (i) { return window } }; var F = function(p, i) { if (C.strict) { p = i ? (p.substr(0, 1) != "/" ? "/" + p : p) : (p == "" ? "/" : p) } return p }; var r = function(i, p) { return (j && U.protocol == "file:") ? (p ? Q.replace(/\?/, "%3F") : Q.replace(/%253F/, "?")) : i }; var af = function(ai) { for (var ag = 0, p = ai.childNodes.length, ah; ag < p; ag++) { if (ai.childNodes[ag].src) { l = String(ai.childNodes[ag].src) } if (ah = af(ai.childNodes[ag])) { return ah } } }; var X = function() { if (!t) { var p = P(); var i = !(Q == p); if (u && s < 523) { if (E != Y.length) { E = Y.length; if (typeof z[E - 1] != G) { Q = z[E - 1] } T(false) } } else { if (j && s < 7 && i) { U.reload() } else { if (i) { Q = p; T(false) } } } } }; var T = function(i) { o(); if (i) { c.call(a.address, "internalChange") } else { c.call(a.address, "externalChange") } n(w, 10) }; var w = function() { var p = (U.pathname + (/\/$/.test(U.pathname) ? "" : "/") + D.value()).replace(/\/\//, "/").replace(/^\/$/, ""); var i = window[C.tracker]; if (typeof i == g) { i(p) } else { if (typeof pageTracker != G && typeof pageTracker._trackPageview == g) { pageTracker._trackPageview(p) } else { if (typeof urchinTracker == g) { urchinTracker(p) } } } }; var e = function() { var i = f.contentWindow.document; i.open(); i.write("<html><head><title>" + ac.title + "</title><script>var " + x + ' = "' + P() + '";<\/script></head></html>'); i.close() }; var N = function() { if (!S) { S = B; if (j && s < 8) { var i = ac.getElementsByTagName("frameset")[0]; f = ac.createElement((i ? "" : "i") + "frame"); if (i) { i.insertAdjacentElement("beforeEnd", f); i[i.cols ? "cols" : "rows"] += ",0"; f.src = "javascript:false"; f.noResize = true; f.frameBorder = f.frameSpacing = 0 } else { f.src = "javascript:false"; f.style.display = "none"; ac.body.insertAdjacentElement("afterBegin", f) } n(function() { a(f).bind("load", function() { var p = f.contentWindow; var ag = p.location.href; Q = (typeof p[x] != G ? p[x] : ""); if (Q != P()) { T(false); U.hash = r(Q, B) } }); if (typeof f.contentWindow[x] == G) { e() } }, 50) } else { if (u) { if (s < 418) { a(ac.body).append('<form id="' + x + '" style="position:absolute;top:-9999px;" method="get"></form>'); J = ac.getElementById(x) } if (typeof U[x] == G) { U[x] = {} } if (typeof U[x][U.pathname] != G) { z = U[x][U.pathname].split(",") } } } n(function() { V(); T(false) }, 1); if (j && s >= 8) { ac.body.onhashchange = X } else { v(X, 50) } a("a[rel*=address:]").address() } }; var D = { baseURL: function() { var i = U.href; if (i.indexOf("#") != -1) { i = i.substr(0, i.indexOf("#")) } if (i.substr(i.length - 1) == "/") { i = i.substr(0, i.length - 1) } return i }, strict: function() { return C.strict }, history: function() { return C.history }, tracker: function() { return C.tracker }, title: function() { return ac.title }, value: function() { if (!ab) { return null } return q(F(r(Q, Z), Z)) }, path: function() { var i = this.value(); return (i.indexOf("?") != -1) ? i.split("?")[0] : i }, pathNames: function() { var p = this.path(); var i = p.split("/"); if (p.substr(0, 1) == "/" || p.length == 0) { i.splice(0, 1) } if (p.substr(p.length - 1, 1) == "/") { i.splice(i.length - 1, 1) } return i }, queryString: function() { var p = this.value(); var i = p.indexOf("?"); if (i != -1 && i < p.length) { return p.substr(i + 1) } }, parameter: function(am) { var aj = this.value(); var ag = aj.indexOf("?"); if (ag != -1) { aj = aj.substr(ag + 1); var al = aj.split("&"); var ak, ah = al.length, ai = []; while (ah--) { ak = al[ah].split("="); if (ak[0] == am) { ai.push(ak[1]) } } if (ai.length != 0) { return ai.length != 1 ? ai : ai[0] } } }, parameterNames: function() { var ah = this.value(); var p = ah.indexOf("?"); var ai = []; if (p != -1) { ah = ah.substr(p + 1); if (ah != "" && ah.indexOf("=") != -1) { var aj = ah.split("&"); var ag = 0; while (ag < aj.length) { ai.push(aj[ag].split("=")[0]); ag++ } } } return ai } }; var H = { strict: function(i) { C.strict = i }, history: function(i) { C.history = i }, tracker: function(i) { C.tracker = i }, title: function(i) { i = q(i); n(function() { I = ac.title = i; if (K && f && f.contentWindow && f.contentWindow.document) { f.contentWindow.document.title = i; K = Z } if (!M && aa) { U.replace(U.href.indexOf("#") != -1 ? U.href : U.href + "#") } M = Z }, 50) }, value: function(ag) { ag = ae(q(F(ag, B))); if (ag == "/") { ag = "" } if (Q == ag) { return } M = B; Q = ag; t = B; T(true); z[Y.length] = Q; if (u) { if (C.history) { U[x][U.pathname] = z.toString(); E = Y.length + 1; if (s < 418) { if (U.search == "") { J.action = "#" + Q; J.submit() } } else { if (s < 523 || Q == "") { var i = ac.createEvent("MouseEvents"); i.initEvent("click", B, B); var p = ac.createElement("a"); p.href = "#" + Q; p.dispatchEvent(i) } else { U.hash = "#" + Q } } } else { U.replace("#" + Q) } } else { if (Q != P()) { if (C.history) { U.hash = "#" + r(Q, B) } else { U.replace("#" + Q) } } } if ((j && s < 8) && C.history) { n(e, 50) } if (u) { n(function() { t = Z }, 1) } else { t = Z } } }; var x = "jQueryAddress", g = "function", G = "undefined", B = true, Z = false, A = a.browser, s = parseFloat(a.browser.version), aa = A.mozilla, j = A.msie, L = A.opera, u = A.safari, ab = Z, O = h(), ac = O.document, Y = O.history, U = O.location, v = setInterval, n = setTimeout, q = decodeURI, ae = encodeURI, ad = navigator.userAgent, f, J, l, I = ac.title, E = Y.length, t = Z, S = Z, M = B, K = B, z = [], y = {}, Q = P(), k = {}, C = { history: B, strict: B }; if (j) { s = parseFloat(ad.substr(ad.indexOf("MSIE") + 4)); if (ac.documentMode && ac.documentMode != s) { s = ac.documentMode != 8 ? 7 : 8 } } ab = (aa && s >= 1) || (j && s >= 6) || (L && s >= 9.5) || (u && s >= 312); if (ab) { for (var W = 1; W < E; W++) { z.push("") } z.push(P()); if (j && U.hash != P()) { U.hash = "#" + r(P(), B) } if (L) { history.navigationMode = "compatible" } af(document); var b = l.indexOf("?"); if (l && b > -1) { var m, d = l.substr(b + 1).split("&"); for (var W = 0, R; R = d[W]; W++) { m = R.split("="); if (/^(history|strict)$/.test(m[0])) { C[m[0]] = (isNaN(m[1]) ? /^(true|yes)$/i.test(m[1]) : (parseInt(m[1]) != 0)) } if (/^tracker$/.test(m[0])) { C[m[0]] = m[1] } } } a(N) } else { if ((!ab && U.href.indexOf("#") != -1) || (u && s < 418 && U.href.indexOf("#") != -1 && U.search != "")) { ac.open(); ac.write('<html><head><meta http-equiv="refresh" content="0;url=' + U.href.substr(0, U.href.indexOf("#")) + '" /></head></html>'); ac.close() } else { w() } } a.each(("init,change,internalChange,externalChange").split(","), function(ag, p) { k[p] = function(ah, i) { a(a.address).bind(p, i || ah, i && ah); return this } }); a.each(("strict,history,tracker,title,value").split(","), function(ag, p) { k[p] = function(i) { if (typeof i != "undefined") { if (ab) { H[p](i) } return a.address } else { return D[p]() } } }); a.each(("baseURL,path,pathNames,queryString,parameter,parameterNames").split(","), function(ag, p) { k[p] = function(i) { return D[p](i) } }); return k })(); a.fn.address = function(b) { a(this).click(function() { var c = b ? b.call(this) : /address:/.test(a(this).attr("rel")) ? a(this).attr("rel").split("address:")[1].split(" ")[0] : a(this).attr("href").replace(/^#/, ""); a.address.value(c); return false }) } } (jQuery));

