/*
* jQuery Address Plugin v1.4
* http://www.asual.com/jquery/address/
*
* Copyright (c) 2009-2010 Rostislav Hristov
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Date: 2011-04-01 00:14:00 +0300 (Fri, 01 Apr 2011)
*/
(function (c) {
    c.address = function () {
        var v = function (a) { c(c.address).trigger(c.extend(c.Event(a), function () { for (var b = {}, e = c.address.parameterNames(), f = 0, q = e.length; f < q; f++) b[e[f]] = c.address.parameter(e[f]); return { value: c.address.value(), path: c.address.path(), pathNames: c.address.pathNames(), parameterNames: e, parameters: b, queryString: c.address.queryString()} } .call(c.address))) }, w = function (a, b, e) { c(c.address).bind(a, b, e); return c.address }, r = function () { return M.pushState && d.state !== k }, s = function () {
            return ("/" +
g.pathname.replace(new RegExp(d.state), "") + g.search + (D() ? "#" + D() : "")).replace(U, "/")
        }, D = function () { var a = g.href.indexOf("#"); return a != -1 ? B(g.href.substr(a + 1), l) : "" }, u = function () { return r() ? s() : D() }, ga = function () { return "javascript" }, N = function (a) { a = a.toString(); return (d.strict && a.substr(0, 1) != "/" ? "/" : "") + a }, B = function (a, b) { if (d.crawlable && b) return (a !== "" ? "!" : "") + a; return a.replace(/^\!/, "") }, x = function (a, b) { return parseInt(a.css(b), 10) }, V = function (a) {
            for (var b, e, f = 0, q = a.childNodes.length; f < q; f++) {
                try {
                    if (a.childNodes[f].src) b =
String(a.childNodes[f].src)
                } catch (J) { } if (e = V(a.childNodes[f])) b = e
            } return b
        }, F = function () { if (!K) { var a = u(); if (h != a) if (y && p < 7) g.reload(); else { y && p < 8 && d.history && t(O, 50); h = a; E(l) } } }, E = function (a) { v(W); v(a ? X : Y); t(Z, 10) }, Z = function () {
            if (d.tracker !== "null" && d.tracker !== null) {
                var a = c.isFunction(d.tracker) ? d.tracker : j[d.tracker], b = (g.pathname + g.search + (c.address && !r() ? c.address.value() : "")).replace(/\/\//, "/").replace(/^\/$/, ""); if (c.isFunction(a)) a(b); else if (c.isFunction(j.urchinTracker)) j.urchinTracker(b);
                else if (j.pageTracker !== k && c.isFunction(j.pageTracker._trackPageview)) j.pageTracker._trackPageview(b); else j._gaq !== k && c.isFunction(j._gaq.push) && j._gaq.push(["_trackPageview", decodeURI(b)])
            } 
        }, O = function () { var a = ga() + ":" + l + ";document.open();document.writeln('<html><head><title>" + o.title.replace("'", "\\'") + "</title><script>var " + C + ' = "' + encodeURIComponent(u()) + (o.domain != g.hostname ? '";document.domain="' + o.domain : "") + "\";<\/script></head></html>');document.close();"; if (p < 7) m.src = a; else m.contentWindow.location.replace(a) },
aa = function () { if (G && $ != -1) { var a, b = G.substr($ + 1).split("&"); for (i = 0; i < b.length; i++) { a = b[i].split("="); if (/^(autoUpdate|crawlable|history|strict|wrap)$/.test(a[0])) d[a[0]] = isNaN(a[1]) ? /^(true|yes)$/i.test(a[1]) : parseInt(a[1], 10) !== 0; if (/^(state|tracker)$/.test(a[0])) d[a[0]] = a[1] } G = null } h = u() }, ca = function () {
    if (!ba) {
        ba = n; aa(); var a = function () { ha.call(this); ia.call(this) }, b = c("body").ajaxComplete(a); a(); if (d.wrap) {
            c("body > *").wrapAll('<div style="padding:' + (x(b, "marginTop") + x(b, "paddingTop")) + "px " +
(x(b, "marginRight") + x(b, "paddingRight")) + "px " + (x(b, "marginBottom") + x(b, "paddingBottom")) + "px " + (x(b, "marginLeft") + x(b, "paddingLeft")) + 'px;" />').parent().wrap('<div id="' + C + '" style="height:100%;overflow:auto;position:relative;' + (H && !window.statusbar.visible ? "resize:both;" : "") + '" />'); c("html, body").css({ height: "100%", margin: 0, padding: 0, overflow: "hidden" }); H && c('<style type="text/css" />').appendTo("head").text("#" + C + "::-webkit-resizer { background-color: #fff; }")
        } if (y && p < 8) {
            a = o.getElementsByTagName("frameset")[0];
            m = o.createElement((a ? "" : "i") + "frame"); if (a) { a.insertAdjacentElement("beforeEnd", m); a[a.cols ? "cols" : "rows"] += ",0"; m.noResize = n; m.frameBorder = m.frameSpacing = 0 } else { m.style.display = "none"; m.style.width = m.style.height = 0; m.tabIndex = -1; o.body.insertAdjacentElement("afterBegin", m) } t(function () { c(m).bind("load", function () { var e = m.contentWindow; h = e[C] !== k ? decodeURIComponent(e[C]) : ""; if (h != u()) { E(l); g.hash = B(h, n) } }); m.contentWindow[C] === k && O() }, 50)
        } t(function () { v("init"); E(l) }, 1); if (!r()) if (y && p > 7 || !y && "on" +
I in j) if (j.addEventListener) j.addEventListener(I, F, l); else j.attachEvent && j.attachEvent("on" + I, F); else ja(F, 50)
    } 
}, ha = function () { var a, b = c("a"), e = b.size(), f = -1; t(function () { if (++f != e) { a = c(b.get(f)); a.is('[rel*="address:"]') && a.address(); t(arguments.callee, 1) } }, 1) }, ka = function () { if (h != u()) { h = u(); E(l) } }, la = function () { if (j.removeEventListener) j.removeEventListener(I, F, l); else j.detachEvent && j.detachEvent("on" + I, F) }, ia = function () {
    if (d.crawlable) {
        var a = g.pathname.replace(/\/$/, ""); c("body").html().indexOf("_escaped_fragment_") !=
-1 && c('a[href]:not([href^=http]), a[href*="' + document.domain + '"]').each(function () { var b = c(this).attr("href").replace(/^http:/, "").replace(new RegExp(a + "/?$"), ""); if (b === "" || b.indexOf("_escaped_fragment_") != -1) c(this).attr("href", "#" + b.replace(/\/(.*)\?_escaped_fragment_=(.*)$/, "!$2")) })
    } 
}, k, C = "jQueryAddress", I = "hashchange", W = "change", X = "internalChange", Y = "externalChange", n = true, l = false, d = { autoUpdate: n, crawlable: l, history: n, strict: n, wrap: l }, z = c.browser, p = parseFloat(c.browser.version), da = z.mozilla,
y = z.msie, ea = z.opera, H = z.webkit || z.safari, P = l, j = function () { try { return top.document !== k ? top : window } catch (a) { return window } } (), o = j.document, M = j.history, g = j.location, ja = setInterval, t = setTimeout, U = /\/{2,9}/g; z = navigator.userAgent; var m, G = V(document), $ = G ? G.indexOf("?") : -1, Q = o.title, K = l, ba = l, R = n, fa = n, L = l, h = u(); if (y) {
            p = parseFloat(z.substr(z.indexOf("MSIE") + 4)); if (o.documentMode && o.documentMode != p) p = o.documentMode != 8 ? 7 : 8; c(document).bind("propertychange", function () {
                if (o.title != Q && o.title.indexOf("#" + u()) !=
-1) o.title = Q
            })
        } if (P = da && p >= 1 || y && p >= 6 || ea && p >= 9.5 || H && p >= 523) { if (ea) history.navigationMode = "compatible"; if (document.readyState == "complete") var ma = setInterval(function () { if (c.address) { ca(); clearInterval(ma) } }, 50); else { aa(); c(ca) } c(window).bind({ popstate: ka, unload: la }) } else !P && D() !== "" ? g.replace(g.href.substr(0, g.href.indexOf("#"))) : Z(); return { bind: function (a, b, e) { return w(a, b, e) }, init: function (a) { return w("init", a) }, change: function (a) { return w(W, a) }, internalChange: function (a) { return w(X, a) }, externalChange: function (a) {
            return w(Y,
a)
        }, baseURL: function () { var a = g.href; if (a.indexOf("#") != -1) a = a.substr(0, a.indexOf("#")); if (/\/$/.test(a)) a = a.substr(0, a.length - 1); return a }, autoUpdate: function (a) { if (a !== k) { d.autoUpdate = a; return this } return d.autoUpdate }, crawlable: function (a) { if (a !== k) { d.crawlable = a; return this } return d.crawlable }, history: function (a) { if (a !== k) { d.history = a; return this } return d.history }, state: function (a) {
            if (a !== k) {
                d.state = a; var b = s(); if (d.state !== k) if (M.pushState) b.substr(0, 3) == "/#/" && g.replace(d.state.replace(/^\/$/,
"") + b.substr(2)); else b != "/" && b.replace(/^\/#/, "") != D() && t(function () { g.replace(d.state.replace(/^\/$/, "") + "/#" + b) }, 1); return this
            } return d.state
        }, strict: function (a) { if (a !== k) { d.strict = a; return this } return d.strict }, tracker: function (a) { if (a !== k) { d.tracker = a; return this } return d.tracker }, wrap: function (a) { if (a !== k) { d.wrap = a; return this } return d.wrap }, update: function () { L = n; this.value(h); L = l; return this }, title: function (a) {
            if (a !== k) {
                t(function () {
                    Q = o.title = a; if (fa && m && m.contentWindow && m.contentWindow.document) {
                        m.contentWindow.document.title =
a; fa = l
                    } if (!R && da) g.replace(g.href.indexOf("#") != -1 ? g.href : g.href + "#"); R = l
                }, 50); return this
            } return o.title
        }, value: function (a) {
            if (a !== k) {
                a = N(a); if (a == "/") a = ""; if (h == a && !L) return; R = n; h = a; if (d.autoUpdate || L) {
                    E(n); if (r()) M[d.history ? "pushState" : "replaceState"]({}, "", d.state.replace(/\/$/, "") + (h === "" ? "/" : h)); else {
                        K = n; if (H) if (d.history) g.hash = "#" + B(h, n); else g.replace("#" + B(h, n)); else if (h != u()) if (d.history) g.hash = "#" + B(h, n); else g.replace("#" + B(h, n)); y && p < 8 && d.history && t(O, 50); if (H) t(function () { K = l }, 1);
                        else K = l
                    } 
                } return this
            } if (!P) return null; return N(h)
        }, path: function (a) { if (a !== k) { var b = this.queryString(), e = this.hash(); this.value(a + (b ? "?" + b : "") + (e ? "#" + e : "")); return this } return N(h).split("#")[0].split("?")[0] }, pathNames: function () { var a = this.path(), b = a.replace(U, "/").split("/"); if (a.substr(0, 1) == "/" || a.length === 0) b.splice(0, 1); a.substr(a.length - 1, 1) == "/" && b.splice(b.length - 1, 1); return b }, queryString: function (a) {
            if (a !== k) { var b = this.hash(); this.value(this.path() + (a ? "?" + a : "") + (b ? "#" + b : "")); return this } a =
h.split("?"); return a.slice(1, a.length).join("?").split("#")[0]
        }, parameter: function (a, b, e) {
            var f, q; if (b !== k) { var J = this.parameterNames(); q = []; b = b ? b.toString() : ""; for (f = 0; f < J.length; f++) { var S = J[f], A = this.parameter(S); if (typeof A == "string") A = [A]; if (S == a) A = b === null || b === "" ? [] : e ? A.concat([b]) : [b]; for (var T = 0; T < A.length; T++) q.push(S + "=" + A[T]) } c.inArray(a, J) == -1 && b !== null && b !== "" && q.push(a + "=" + b); this.queryString(q.join("&")); return this } if (b = this.queryString()) {
                e = []; q = b.split("&"); for (f = 0; f < q.length; f++) {
                    b =
q[f].split("="); b[0] == a && e.push(b.slice(1).join("="))
                } if (e.length !== 0) return e.length != 1 ? e : e[0]
            } 
        }, parameterNames: function () { var a = this.queryString(), b = []; if (a && a.indexOf("=") != -1) { a = a.split("&"); for (var e = 0; e < a.length; e++) { var f = a[e].split("=")[0]; c.inArray(f, b) == -1 && b.push(f) } } return b }, hash: function (a) { if (a !== k) { this.value(h.split("#")[0] + (a ? "#" + a : "")); return this } a = h.split("#"); return a.slice(1, a.length).join("#") } 
        }
    } (); c.fn.address = function (v) {
        if (!c(this).attr("address")) {
            var w = function (r) {
                if (r.shiftKey ||
r.ctrlKey || r.metaKey) return true; if (c(this).is("a")) { var s = v ? v.call(this) : /address:/.test(c(this).attr("rel")) ? c(this).attr("rel").split("address:")[1].split(" ")[0] : c.address.state() !== undefined && c.address.state() != "/" ? c(this).attr("href").replace(new RegExp("^(.*" + c.address.state() + "|\\.)"), "") : c(this).attr("href").replace(/^(#\!?|\.)/, ""); c.address.value(s); r.preventDefault() } 
            }; c(this).click(w).live("click", w).live("submit", function (r) {
                if (c(this).is("form")) {
                    var s = c(this).attr("action"); s = v ? v.call(this) :
(s.indexOf("?") != -1 ? s.replace(/&$/, "") : s + "?") + c(this).serialize(); c.address.value(s); r.preventDefault()
                } 
            }).attr("address", true)
        } return this
    } 
})(jQuery);

