(function (e) {
    var c = tbwa.application,
        a = tbwa.getConstant,
        d = "",
        i, g, b, h, f = null,
        j = false;
    tbwa.application.extend({
        offices: {
            init: function (z) {
                var q = "Contact Us\\" + a("OFFICE_MATCH_TERM"),
                    v = "TBWA\\Directory",
                    s = 0,
                    p = 1,
                    o = 2,
                    A = 3,
                    r = {
                        full: 11,
                        compact: 5
                    },
                    u = e("#content_area"),
                    t, B, C, l, k;
                c.header.titleBar.setTitle("navigation", true, z.breadcrumbs);
                c.setCurrentMode(a("LINEAR_MODE"));
                e(".view_panel").makeVisible().find(".selected").removeClass();
                e(".view_panel").find(".grid_view").addClass("disabled").end().find(".full_screen").addClass("disabled").end().find(".slide_view a").addClass("selected");
                e(".title_bar").one("click", function () {
                    e("#content_area").removeClass("offices");
                    e(".view_panel .disabled").removeClass("disabled")
                });
                u.children().remove();
                u.append(c.htmlTemplates.linearTemplate, c.htmlTemplates.slideInfoTemplate, c.htmlTemplates.paginateTemplate);
                u.addClass("offices");
                if (screen.availWidth <= 800) {
                    u.addClass("compact");
                    j = true
                }
                k = location.hash;
                f = k.match(/si00\d+/);
                f = (f !== null) ? parseInt(f[0].replace("si00", ""), 10) : null;
                c.activeSlide.id = 0;
                c.activeSlide.index = 0;
                c.activeSlide.relativePosition = 0;
                c.updateHash();
                B = u.find(".slides").html();
                C = e(B);
                d = z.slides[0].image_name;
                l = String(z.slides[0].tags + "," + z.container[0].tags).split(",").unique();
                for (var w = 0, x = l.length; w < x; w++) {
                    if (l[w] === "") {
                        l.splice(w, 1);
                        w = 0;
                        x = l.length
                    }
                }
                C.find(".slide").attr({
                    "data-slideindex": 0,
                    "data-index": 0,
                    "data-id": 0,
                    "data-title": q,
                    "data-tags": l.join(", ")
                }).addClass("active").find(".shell_contents").append("<img class='shell_img' src='" + tbwa.getURL(tbwa.getConstant("LINEAR_MODE")) + d + "' />").end().end().appendTo(u.find(".slides")).makeVisible();
                C.find(".shell_loader").remove().end().find("img").fadeIn();
                tbwa.offices.htmlTemplates.blankSlide = u.find(".slide:first").parent().outerHTML();
                u.find(".slide:first").remove();
                B = tbwa.offices.htmlTemplates.blankSlide;
                C = e(B);
                C.find(".slide").attr({
                    "data-slideindex": 1,
                    "data-index": 1,
                    "data-id": 1,
                    "data-title": v,
                    "data-tags": "none"
                }).attr("id", "tbwa_offices").show().end().appendTo(u.find(".slides")).makeVisible();
                C.bind("mousemove", function (D) {
                    D.preventDefault();
                    D.stopPropagation()
                });
                g = e(this.htmlTemplates.filterColumns);
                for (var m = 0; m < A; m++) {
                    var y = g.find("ul").eq(m);
                    for (var n = 0; n < r[j ? "compact" : "full"]; n++) {
                        y.append("<li></li>")
                    }
                }
                C.find(".slide").append(g);
                if (typeof iScroll !== "undefined") {
                    g.find("ul").each(function () {
                        var E = e(this),
                            D;
                        E.wrap('<div class="wrapper"></div>');
                        D = new iScroll(this, {
                            hScrollbar: false
                        });
                        E.data("scroller", D)
                    })
                }
                if (j) {
                    g.wrap("<div></div>");
                    t = g.parent().addClass("filterWrapper");
                    b = e('<a href="#"></a>').css("opacity", 0).addClass("prevColumn").click(function (D) {
                        D.preventDefault();
                        tbwa.offices.focusColumn(h - 1)
                    }).appendTo(t)
                }
                e(".slide_container").makeVisible();
                this.loadFilter(s);
                C.find(".shell_logo, .shell_loader").remove();
                C.find("ul").makeVisible();
                c.events.viewport.bindLinearEvents();
                e(".slide_container").unbind("loadSlideFromIndex").bind("loadSlideFromIndex", function (F, E, D) {
                    tbwa.offices.loadSlideFromIndex(E, D)
                }).unbind("slideclick").bind("slideclick", function (K, L) {
                    var M = e(".slide_container").find(".snapped").attr("data-index"),
                        G, E, H;
                    if (L.target) {
                        G = e(L.target);
                        E = G.closest(".slide");
                        H = L.target.tagName.toLowerCase()
                    }
                    K.stopPropagation();
                    if ((E.is("#tbwa_offices") || E.is("#business-card")) && !E.hasClass("active") && /shell/.test(G.attr("class"))) {
                        index = parseInt(E.attr("data-index"), 10);
                        tbwa.offices.loadSlideFromIndex(E.attr("data-slideindex"), L);
                        return
                    }
                    switch (H) {
                    case "img":
                        var J = e(L.target).parents(".slide").attr("data-index");
                        if (J != M) {
                            tbwa.offices.loadSlideFromIndex(J, L)
                        }
                        break;
                    case "a":
                    case "div":
                        var D = e(L.target),
                            I = D.parents(".slide"),
                            J = I.attr("data-index"),
                            F = e(".slide_container");
                        if (I.length) {
                            if (D.hasClass("next")) {
                                J = parseInt(I.attr("data-slideindex"), 10);
                                index = parseInt(I.attr("data-index"), 10);
                                J++;
                                index++;
                                tbwa.offices.loadSlideFromIndex(J, L);
                                break
                            } else {
                                if (D.hasClass("prev")) {
                                    J = parseInt(I.attr("data-slideindex"), 10);
                                    index = parseInt(I.attr("data-index"), 10);
                                    J--;
                                    index--;
                                    tbwa.offices.loadSlideFromIndex(J, L);
                                    break
                                }
                            }
                        }
                        break;
                    default:
                        break
                    }
                });
                c.activeSlide.relativePosition = 0;
                c.viewport.entranceAnimation();
                c.viewport.resizeGrid();
                tbwa.offices.paginate.init();
                if (f !== null) {
                    c.XHR.cacheJSON("http://projeqt.com/api/offices/get_agency/id/" + f, false, "getAgency", function (D) {
                        tbwa.offices.paginate.reset();
                        tbwa.offices.loadSlides(D);
                        e(".thumb:eq(2)").find("a").trigger("click")
                    })
                } else {
                    window.setTimeout(function () {
                        var D = e(".slide.active"),
                            E = D.attr("data-title");
                        if (typeof E === "string") {
                            E = E.replace(/&nbsp;/g, " ").replace(/&#92;/g, "\\")
                        }
                        //c.tracker.recordView("Slide View - Linear", e.trim(e(".title_bar").text()), E)
                    }, 500)
                }
            },
            clearColumn: function (l) {
                var m = 10;
                l = l - 1;
                var k = e("#tbwa_offices ul");
                k = k.filter(":gt(" + l + ")");
                k.find("li:gt(" + m + ")").remove();
                k.find("li").empty().removeClass("row");
                k.find(".selected").removeClass("selected");
                e(".slide_container").find(".business_card").fadeOut("normal", function () {
                    e(this).remove()
                });
                e(".pagination .thumb").filter(":gt(0)").removeClass("text_slide");
                e("#tbwa_offices").find(".filters > div").filter(":gt(" + l + ")").removeClass("selected")
            },
            data: {
                initialFilters: null
            },
            htmlTemplates: {
                blankSlide: null,
                filterColumns: "<div class='filters'><div class='filter1'><h1>Location:</h1><ul></ul></div><div class='filter2'><h1>Disciplines:</h1><ul></ul></div><div class='filter3'><h1>Results:</h1><ul></ul></div></div>",
                thumbnail: null,
                vCard: '<div class="vcard template"> <h1 class="office_name"> <span class="fn org">{office.name}</span>,&nbsp;<span class="locality">{city}</span> </h1> <div class="office_address"> <p> <span class="street-address">{address}</span> </p> <p> <span class="locality">{city}</span>, <span class="region">{state}</span>&nbsp;<span class="postal-code">{postcode}</span> </p> </div> <div class="office_numbers"> <p class="office_tele"> <span>t:</span> <span class="tel"> <span class="type hideText">work</span> <span class="value">{telephone}</span> </span> </p> <p class="office_fax"> <span>f:</span> <span class="tel"> <span class="type hideText">fax</span> <span class="value">{fax}</span> </span> </p> </div> <div> <a class="url" href="#">{url}</a> </div> <ul class="note"> <li> <span class="title">{title}:</span> <span class="fn">{contact.name}</span> <a href="#" class="email hideText">{email}</a> </li> </ul> </div>'
            },
            updateTags: function (m) {
                var k = e(m.target),
                    n, l;
                if (!k.closest(".slide").hasClass("active") || !k.hasClass("row")) {
                    return
                }
                if (m.target.tagName == "LI") {
                    n = e(".slide_info .tag:eq(0)");
                    l = k.attr("data-tags");
                    n.text(l)
                }
            },
            focusColumn: function (k) {
                if (!j || typeof k !== "number" || (typeof k === "number" && k < 0)) {
                    return
                }
                var l = i.find(">div").eq(k);
                if (!l || !l.length) {
                    return
                }
                g.animate({
                    left: -parseInt(l.css("left"), 10)
                }, {
                    speed: 400,
                    easing: "easeOutCirc"
                });
                if (k > 0) {
                    b.text("Back to " + ((k === 1) ? "Locations" : "Disciplines")).css("opacity", 1)
                } else {
                    b.css("opacity", 0)
                }
                h = k
            },
            loadFilter: function (o) {
                i = e("#tbwa_offices .filters");
                var r = 0,
                    q = 1,
                    p = 2,
                    k = e("#tbwa_offices"),
                    l = e(".slide_container"),
                    C = i.find(".filter1"),
                    B = i.find(".filter2"),
                    z = i.find(".filter3"),
                    w, v, t = "",
                    u, m, D = k.attr("data-index"),
                    x = k.attr("data-tags");
                switch (o) {
                case r:
                    c.XHR.cacheJSON("http://projeqt.com/api/offices/", false, "offices", function (G) {
                        var K = 0;
                        tbwa.offices.data.initialFilters = G;
                        v = C.find("li");
                        w = G.headquarters.length + G.locations.length;
                        if (v.length < w) {
                            for (var M = 0, L = w - v.length, I = ""; M < L; M++) {
                                I += "<li></li>"
                            }
                            C.find("ul").append(I)
                        }
                        for (var H = 0, F = G.headquarters.length, N, E, J; H < F; H++) {
                            J = G.headquarters[H];
                            E = J.name.substring(0, 1).toUpperCase() + J.name.substring(1);
                            N = C.find("li:eq(" + K + ")").addClass("row").attr({
                                "data-agencyid": J.agency_id,
                                "data-tags": "Headquarters, " + E
                            }).text(E);
                            K++
                        }
                        for (H = 0, F = G.locations.length, E; H < F; H++) {
                            J = G.locations[H];
                            E = J.country.substring(0, 1).toUpperCase() + J.country.substring(1);
                            N = C.find("li:eq(" + K + ")").addClass("row").attr({
                                "data-serverkey": J.country,
                                "data-tags": "Country, " + E
                            }).text(E);
                            K++
                        }
                    });
                    e("#tbwa_offices").bind("click", function (E) {
                        E.stopPropagation()
                    });
                    C.bind("click", function (J) {
                        J.preventDefault();
                        J.stopPropagation();
                        var F = e(J.target),
                            E, I = "selected",
                            H, G;
                        if (!k.hasClass("active")) {
                            tbwa.offices.loadSlideFromIndex(D);
                            return
                        }
                        switch (J.target.tagName.toLowerCase()) {
                        case "li":
                            E = F;
                            break;
                        case "h1":
                            tbwa.offices.loadSlideFromIndex(D);
                            break;
                        default:
                            return
                        }
                        if (E.length) {
                            C.addClass(I);
                            C.find("." + I).removeClass(I);
                            E.addClass(I);
                            H = E.attr("data-serverkey") || "#" + E.attr("data-agencyid") || false;
                            if (H && H.substring(0, 1) === "#") {
                                c.XHR.cacheJSON("http://projeqt.com/api/offices/get_agency/id/" + H.substring(1), false, "getAgency", function (K) {
                                    tbwa.offices.clearColumn(q);
                                    l.find(".business_card").remove();
                                    tbwa.offices.paginate.reset();
                                    tbwa.offices.loadSlides(K)
                                })
                            } else {
                                c.XHR.cacheJSON("http://projeqt.com/api/offices/get_disciplines/" + encodeURIComponent(H), false, "getDisciplines", function (K) {
                                    tbwa.offices.loadFilter(q, K);
                                    if (K.disciplines && e.isArray(K.disciplines) && !K.disciplines.length) {
                                        tbwa.offices.focusColumn(p)
                                    }
                                    c.XHR.cacheJSON("http://projeqt.com/api/offices/get_agencies/" + encodeURIComponent(H), false, "getAgencies", function (L) {
                                        tbwa.offices.loadFilter(p, L, false);
                                        tbwa.offices.paginate.reset()
                                    })
                                });
                                tbwa.offices.focusColumn(q)
                            }
                        }
                    }).bind("mouseover", tbwa.offices.updateTags);
                    B.bind("click", function (L) {
                        var F = e(L.target),
                            E, J = "selected",
                            I, G;
                        if (!k.hasClass("active")) {
                            tbwa.offices.loadSlideFromIndex(D);
                            return
                        }
                        switch (L.target.tagName.toLowerCase()) {
                        case "li":
                            E = F;
                            break;
                        case "h1":
                            tbwa.offices.loadSlideFromIndex(D);
                            break;
                        default:
                            return
                        }
                        if (!E.length) {
                            return
                        }
                        var K = e("#tbwa_offices .filter1 .selected"),
                            H = F,
                            I = H.attr("data-serverkey");
                        B.addClass(J);
                        B.find("." + J).removeClass(J);
                        H.addClass(J);
                        c.XHR.cacheJSON("http://projeqt.com/api/offices/discipline_filter/" + encodeURIComponent(K.text()) + "/" + I, false, "disciplineFilter", function (M) {
                            tbwa.offices.loadFilter(p, M);
                            tbwa.offices.paginate.reset()
                        });
                        tbwa.offices.focusColumn(p)
                    }).bind("mouseover", tbwa.offices.updateTags);
                    z.bind("click", function (J, K) {
                        var F = e(J.target),
                            E, I = "selected",
                            H, G;
                        if (!k.hasClass("active")) {
                            tbwa.offices.loadSlideFromIndex(D);
                            return
                        }
                        switch (J.target.tagName.toLowerCase()) {
                        case "li":
                            E = F;
                            break;
                        case "h1":
                            tbwa.offices.loadSlideFromIndex(D);
                            break;
                        default:
                            return
                        }
                        if (!E.length) {
                            return
                        }
                        l.find(".business_card").remove();
                        tbwa.offices.paginate.reset();
                        z.removeClass("active").addClass(I);
                        z.find("." + I).removeClass(I);
                        F.addClass(I);
                        H = F.attr("data-agencyid");
                        c.XHR.cacheJSON("http://projeqt.com/api/offices/get_agency/agency_id/" + H, false, "getAgency", function (L) {
                            tbwa.offices.loadSlides(L)
                        })
                    }).bind("mouseover", tbwa.offices.updateTags);
                    break;
                case q:
                    w = arguments[1].disciplines;
                    v = B.find("li");
                    i.find("div.active").removeClass("active");
                    B.addClass("active");
                    tbwa.offices.clearColumn(q);
                    if (v.length < w.length) {
                        var A = w.length - v.length;
                        for (var n = 0; n < A; n++) {
                            t += "<li></li>"
                        }
                        B.find("ul").append(t);
                        v = e(".filter2 li")
                    }
                    for (var y = 0, s = w.length; y < s; y++) {
                        v.eq(y).addClass("row").attr({
                            "data-serverkey": w[y].service_id,
                            "data-tags": "Discipline, " + w[y].service
                        }).text(w[y].service)
                    }
                    break;
                case p:
                    w = arguments[1].offices;
                    m = (typeof m === "undefined") ? arguments[2] : true;
                    v = z.find("li");
                    i.find("div.active").removeClass("active");
                    z.addClass("active");
                    tbwa.offices.clearColumn(p);
                    if (v.length < w.length) {
                        var A = w.length - v.length;
                        for (var n = 0; n < A; n++) {
                            t += "<li></li>"
                        }
                        z.find("ul").append(t);
                        v = e(".filter3 li")
                    }
                    for (var y = 0, s = w.length; y < s; y++) {
                        v.eq(y).addClass("row").attr({
                            "data-agencyid": w[y].agency_id,
                            "data-tags": w[y].name + ", " + w[y].city
                        }).text(w[y].name)
                    }
                    if (m) {
                        if (w.length == 1) {
                            v.eq(0).trigger("click");
                            tbwa.offices.loadSlideFromIndex(e(".business_card .slide").attr("data-slideindex"))
                        }
                    }
                    break
                }
            },
            loadSlides: function (r) {
                var u = e(".slides"),
                    l = tbwa.offices.htmlTemplates.blankSlide,
                    s, w, n, o = tbwa.offices.htmlTemplates.vCard,
                    m = e(".pagination .thumb"),
                    k = "Contact Us\\";
                for (var q = 0, t = 2, y = r.offices.length; q < y; q++, t++) {
                    var p, z = r.offices[q],
                        o;
                    z.name = z.name.replace(/\\/g, "&nbsp;&#92;&nbsp;");
                    p = e(o.replaceVars({
                        address: z.address,
                        city: z.city,
                        country: z.country,
                        fax: z.fax,
                        "office.name": z.name,
                        postcode: z.postcode,
                        state: z.state,
                        telephone: z.telephone,
                        url: z.url
                    }));
                    p.find(".url").attr({
                        href: z.url,
                        target: "_blank"
                    });
                    w = p.find(".note li").outerHTML();
                    p.find(".note li:first").remove();
                    if (z.contacts.length) {
                        for (var v = 0, x = z.contacts.length; v < x; v++) {
                            n = e(w.replaceVars({
                                email: z.contacts[v].email,
                                "contact.name": z.contacts[v].name,
                                title: z.contacts[v].title
                            }));
                            if (z.contacts[v].email === null || z.contacts[v].email === "") {
                                n.find(".email").remove()
                            } else {
                                n.find(".email").attr("href", "mailto:" + z.contacts[v].email)
                            }
                            if (z.contacts[v].title === null || z.contacts[v].title === "") {
                                n.find(".title").remove()
                            }
                            p.find(".note").append(n)
                        }
                    }
                    if (z.telephone === "") {
                        p.find(".office_tele").remove()
                    }
                    if (z.fax === "") {
                        p.find(".office_fax").remove()
                    }
                    if (!z.contacts.length) {
                        p.find(".note").remove()
                    }
                    if (z.url === "") {
                        p.find(".url").remove()
                    }
                    s = e(l);
                    s.addClass("business_card").find(".slide").attr({
                        "data-slideindex": t,
                        "data-index": t,
                        "data-id": t,
                        "data-title": k + z.name,
                        "data-tags": z.name + ", " + z.city,
                        "data-agencyid": z.id
                    }).removeAttr("style").attr("id", "business-card").append(p);
                    u.append(s);
                    m.eq(q + 2).addClass("text_slide").removeClass("blank")
                }
                e("#tbwa_offices").find(".next, .prev").makeVisible();
                e(".slide_container").find(".business_card").filter(":lt(" + a("NUM_SLIDES_TO_LOAD") + ")").fadeIn();
                if (e("#tbwa_offices").hasClass("active")) {
                    tbwa.offices.loadSlideFromIndex(e(".business_card .slide").attr("data-slideindex"))
                } else {
                    tbwa.offices.updateBusinessCardHash(z.id)
                }
            },
            updateBusinessCardHash: function (k) {
                k = k || e(".business_card .active").attr("data-agencyid");
                if (k) {
                    c.activeSlide.id = "00" + k;
                    c.updateHash()
                }
            },
            loadSlideFromIndex: function (m, k) {
                var l = e(".slide_container").find(".slide:eq(" + m + ")");
                if (!l.length) {
                    m = k = 1
                }
                if (m < 0) {
                    m = k = -1
                }
                if (!l.hasClass("active")) {
                    c.events.viewport.slide.loadSlideIndex(m, tbwa.offices.updateBusinessCardHash)
                }
                window.setTimeout(function () {
                    var n = l.attr("data-title");
                    if (typeof n === "string") {
                        n = n.replace(/&nbsp;/g, " ").replace(/&#92;/g, "\\")
                    }
                   // c.tracker.recordView("Slide View - Linear", e.trim(e(".title_bar").text()), n)
                }, 500)
            },
            paginate: {
                init: function () {
                    var k = e(".pagination"),
                        l = k.find(".thumb:first");
                    l.addClass("blank").find("img").remove();
                    tbwa.offices.htmlTemplates.thumbnail = l.outerHTML();
                    l.remove();
                    l = undefined;
                    this.reset();
                    this.bindEvents()
                },
                bindEvents: function () {
                    e(".pagination .thumb a, .pagination .arrow a").unbind("click");
                    e(".pagination").bind("click", function (o) {
                        o.preventDefault();
                        var n = e(o.target).parents(".thumb").get(0).className.toLowerCase();
                        if (n.indexOf("arrow") != -1) {
                            return
                        } else {
                            if (n.indexOf("blank") != -1) {
                                return
                            } else {
                                if (n.indexOf("thumb") != -1) {
                                    var l = e(this).find(".thumb");
                                    var m = e(o.target).parent(".thumb");
                                    var k = l.index(m.get(0));
                                    tbwa.offices.loadSlideFromIndex(k)
                                }
                            }
                        }
                    })
                },
                reset: function () {
                    var k = e(".pagination"),
                        n = e(tbwa.offices.htmlTemplates.thumbnail),
                        m = 36,
                        p = 3,
                        o = m * p;
                    k.find(".thumb").remove();
                    k.find(".thumbWrapper ul").append(n);
                    for (var l = 0; l < p; l++) {
                        n.after(n.clone())
                    }
                    n.remove();
                    k.width(o);
                    k.find(".thumb:eq(0)").removeClass("blank").find("a").append("<img src='" + tbwa.getURL("thumb") + d + "' />");
                    k.find(".thumb:eq(1)").removeClass("blank").addClass("text_slide")
                }
            }
        }
    })
})(jQuery);
