/// prointernet Grid Site Search
/// Version: 1.8.6166.30335

/*
    Events: 
        beforeQuery, afterQuery, onItemClick, onClose, onKeyPress, onEnterClick, onChange

    Using: $(..).on("eventName", function(e) { ... });
*/

function siteSearch() {

    this.config = {
        layerTarget: "",
        clearTarget: false,
        emptyText: "Keine Ergebnisse gefunden",
        title: "Suchergebnisse",
        cssClass: "",
        showTitle: true,
        useFontAwesome: true,
        closable: true,
        closeText: "Suchergebnisse ausblenden",
        moreText: "weitere Ergebnisse",
        templatePath: "/frontend/composite/grid/siteSearch/sitesearch.html",
        autoAlign: true,
        origin: "desktop",
        imageWidth: 200,
        delay: 400,
        searchOnFocus: false,
        cache: true,
        queryParameters: [],    // { Key: "yourkey", Value: "xxx" {} }   ... use DynamicValue for a function value
        renderHelpers: {

        }
    };

    this.id = "q";
    this.key = "sq";
    this.searchTimeout = null;
    this.txt = $(this);
    this.searchLayer = null;
    this.selectedIndex = -1;
    this.selectedItem = $();
    this.activeQuery = "";
    this.activeEvents = {};
    this.activeResults = [];
    this.scrollToAfterQuery = null;
}

// Init
siteSearch.prototype.init = function (config) {
    var s = this;

    s.config = $.extend(s.config, config);

    if (s.config.txt) {
        s.txt = s.config.txt;
    }

    if (s.config.control) {
        s.txt = s.config.control;
    }

    // Font Awesome
    if (s.config.useFontAwesome) {
        if ($("link[href*='font-awesome.css']").length == 0) {
            $("head").append('<link rel="stylesheet" href="//c1cdn.prointernet.com/icons/awesome/font-awesome.css" type="text/css" media="all" />');
        }
    }

    var activeSearchsCount = $(".siteSearch-control").length;
    if (activeSearchsCount > 0) {
        // Suche bereits aktiv, Key erweitern
        s.id += (activeSearchsCount + 1);
    }

    // Events initialisieren
    if (s.config.events) {
        for (var eventName in s.config.events) {
            s.on(eventName, s.config.events[eventName]);
        }
    }

    // Suche erst nach X Millisekunden ausführen
    var searchTimer = function () {
        clearTimeout(s.searchTimeout);

        s.searchTimeout = setTimeout(function () {
            var currentQuery = s.txt.val();

            // Value in Input gesetzt, mit diesem Wert suchen
            if (s.txt.attr("data-value")) {
                currentQuery = s.txt.attr("data-value");
            }

            s.doSearch({
                query: currentQuery
            });

        }, s.config.delay);
    }

    // Textbox Keyboard Nav
    s.txt.bind("keydown", function (e) {
        if (s.keyNav(e)) {
            e.preventDefault();
            return false;
        } else {
            s.txt.removeAttr("data-value");
            searchTimer();
        }
    });

    // Textbox Focus / Blur Placeholder Text
    s.txt.bind("focus", function () {
        var input = $(this);

        if (s.searchLayer && s.searchLayer.is(":hidden")) {
            s.show();
        }
    });

    s.txt.attr("autocomplete", "off");
    s.txt.attr("autocapitalize", "off");
    s.txt.attr("autocorrect", "off");

    // Bei SearchOnFocus InitValue zurücksetzen
    if (s.config.searchOnFocus) {
        s.activeQuery = "searchOnFocus";
    }

    // Wenn ClientQuery aktiv (z.B. sq=... dann Suche öffnen)
    // wird bei history.back() verwendet
    s.bindToState();
}

siteSearch.prototype.goToNextPage = function (groupId, previous) {
    var s = this;
    var state = AjaxNav.getState();

    var pageIndizies = [];
    for (var gIdx in s.activeResults) {
        var group = s.activeResults[gIdx];

        if (group.id == groupId) {
            state["p-" + group.id] = group.currentPageIndex + (previous ? -1 : 1);
        } else {
            if (group.currentPageIndex > 1) {
                state["p-" + group.id] = group.currentPageIndex;
            }
        }
    }

    this.doSearch(state);
}

siteSearch.prototype.bindToState = function () {
    var s = this;

    AjaxNav.setClientParams(s.key);

    AjaxNav.bind("siteSearchQuery" + s.id, "statechanged", function (e) {
        if (e.state) {

            var targetKey = (e.state.target ? e.state.target : s.id);
            var targetSearchControl = $("[data-search-id='" + targetKey + "']");
            if (targetSearchControl.length > 0) {

                var targetInstance = targetSearchControl.data("siteSearch");

                // Key von ClientKey in Query Key ädnern
                e.state.query = e.state[s.key];
                delete e.state[s.key];


                targetInstance.doSearchBase(e.state);
            }

        }
    });
}

// Template laden
siteSearch.prototype.getTemplate = function (callback) {
    var s = this;

    // Template laden
    if (!s.template) {
        $.get(s.config.templatePath, function (tmplContent) {
            s.template = $.templates(tmplContent);
            callback(s.template);
        });
    } else {
        callback(s.template);
    }

}

// Global Search
siteSearch.prototype.doSearch = function (state) {
    var s = this;

    var hasQuery = (state.query);

    state[s.key] = state.query;
    delete state.query;

    if (s.id != "q") {
        state.target = s.id;
    } else {
        var navState = AjaxNav.getState();
        if (navState["target"]) {
            state.target = s.id;
        }
    }

    AjaxNav.pushState(state, { replace: hasQuery });
}

siteSearch.prototype.doSearchBase = function (state) {
    var s = this;

    var query = state.query;

    s.fireEvent("beforeQuery", {
        query: query,
        search: s
    });

    if (!this.isValidSearchString(query)) {
        return;
    }

    if (s.activeQuery == query) {
        return;
    }

    s.activeQuery = query;

    // Daten laden via Service
    this.callService(state, function (results) {

        // Results rendern
        s.renderResults(results, query);

        // ActiveQuery (Schutz vor Stackoverflow) zurücksetzen
        setTimeout(function () {
            s.activeQuery = "";
        }, 500);
    });


}

siteSearch.prototype.renderResults = function (results, query) {
    var s = this;

    // Target
    var layer = s.getLayer();

    // Render Template
    s.getTemplate(function (template) {

        var layerInnerRendered = template.render({
            groupCount: results.length,
            search: s,
            groups: results
        }, s.getRenderHelpers());

        layer.html(layerInnerRendered);

        // Cls "loaded" fallback
        layer.addClass("loaded");

        s.fireEvent("afterQuery", {
            query: query,
            search: s,
            data: results
        });

        // Scrolling
        if (s.scrollToAfterQuery) {
            var scrollTarget = $(s.scrollToAfterQuery);
            if (scrollTarget.length > 0) {
                scrollTarget.scrollToWhenNotVisible();
            }
        }
        s.scrollToAfterQuery = null;

        s.show();

    });

}

siteSearch.prototype.getRenderHelpers = function () {
    var s = this;

    var helpers = {

        stringify: function () {
            return JSON.stringify(this.data);
        }

    };

    return $.extend(helpers, this.config.renderHelpers);
}

// Layer
siteSearch.prototype.getLayer = function () {
    var s = this;

    var layerTarget = s.getLayerTarget();
    var layer = layerTarget.find(".siteSearch");

    if (layer.length == 0) {

        // Vorhandenen Content im Target löschen
        if (s.config.clearTarget) {
            layerTarget.empty();
        }

        // Layer zu Target hinzufügen
        layer = $("<div class='siteSearch' style='display:none;'></div>").appendTo(layerTarget.first());

        // Layer Class
        if (s.config.cssClass != "") {
            layer.addClass(s.config.cssClass);
        }

        // Item Click
        layer.on("click", ".item", function (e) {
            var item = $(this);

            s.fireEvent("onItemClick", { search: s, item: item });

            var url = item.find("a").attr("href");
            if (url && url.length > 0) {
                AjaxNav.go(url);
            }

            e.preventDefault();
            return false;
        });

        if (s.config.closable) {

            // Body Click = Layer hide
            $("body").on("click tap", function (e) {
                if (!$(e.target).isInPath(".siteSearch,#mobilenavButton,#" + s.txt.attr("id")) && !$("body").hasClass("navOpen")) {
                    s.hide();
                }
            });
        }

        // Close Click
        layer.on("click", "a.close", function (e) {
            s.hide();
        });

        // Paging Clickhandlers
        layer.on("click", ".pager a", function (e) {

            var lnk = $(this);
            var groupContainer = lnk.parentsUntil(".group").parent();
            var groupData = groupContainer.data("data");

            var groupId = groupContainer.attr("data-id");

            s.scrollToAfterQuery = "[data-group='" + groupContainer.attr("data-group") + "']";

            if (lnk.hasClass("pager-previous")) {
                s.goToNextPage(groupId, true);
            }

            if (lnk.hasClass("pager-next")) {
                s.goToNextPage(groupId);
            }

            lnk.addClass("clicked");
            groupContainer.addClass("clicked");

            return false;
        });

        s.searchLayer = layer;
    }

    return layer;
}

// Layer Target
siteSearch.prototype.getLayerTarget = function () {
    var s = this;

    var layerTarget = s.txt.parent();

    if (s.config.layerTarget != "") {
        if ($(s.config.layerTarget).length > 0) {
            layerTarget = $(s.config.layerTarget);
        }
    }

    layerTarget.addClass("siteSearch-target");

    return layerTarget;
}

// Show Searchlayer
siteSearch.prototype.show = function () {
    var s = this;

    var layer = s.searchLayer;

    if (!layer || layer.length == 0) {
        return;
    }

    if (s.config.autoAlign && !s.aligned) {
        layer.css("top", (s.txt.offset().top + s.txt.outerHeight()) + 5);
        s.aligned = true;
    }

    if (!s.firstTimeOpened) {
        layer.show();

        s.firstTimeOpened = true;
    } else {
        layer.show();
    }

    $("html").addClass("siteSearch-visible");
}

// Hide Searchlayer
siteSearch.prototype.hide = function () {
    var s = this;

    if (s.searchLayer) {
        s.searchLayer.hide();
    }

    s.fireEvent("onClose", { search: s });

    $("html").removeClass("siteSearch-visible");
}

// JSON ServiceRequest
siteSearch.prototype.callService = function (state, callback) {
    var s = this;

    $("html").addClass("siteSearch-loading");

    var query = state.query;

    if (s.lastQueryState == state) {
        callback(s.lastQueryResults)
        return;
    }

    // Query Parameter Function Values in statische Objekte umwandeln
    if (s.config.queryParameters != null) {
        $.each(s.config.queryParameters, function (pIdx, p) {
            if (p.DynamicValue) {
                p.Value = p.DynamicValue();
            }
        });
    }

    state.origin = s.config.origin;
    state.parameters = s.config.queryParameters;
    state.imageWidth = s.config.imageWidth;

    $.ajax({
        type: "POST",
        url: "/liveSearch/DoSearch",
        dataType: "json",
        contentType: "application/json",
        data: JSON.stringify(state),
        headers: {
            "Culture": s.getCulture()
        },
        success: function (results) {

            $("html").removeClass("siteSearch-loading");

            // LastQuery
            s.lastQueryState = state;
            s.activeResults = results

            // Google Analytics
            var trackingUrl = "/?q=" + escape(query) + "&c=" + s.config.origin + (results.length == 0 ? "-noresults" : "");
            if (typeof _gaq != "undefined") _gaq.push(["_trackPageview", trackingUrl]);

            callback(results);
        },
        error: function (r) {
            alert("Ihre Suchanfrage konnte nicht bearbeitet werden. Bitte versuchen Sie es später nocheinmal oder wenden Sie sich an unseren Support. (" + r.statusText + ")");
        }
    });
}

// KeyNav
siteSearch.prototype.keyNav = function (e) {
    var s = this;

    if (s.searchLayer) {

        var itemCount = (s.searchLayer.find(".item").length - 1);

        // Up
        if (e.which == 38) {
            if (s.selectedIndex > 0) {
                s.setSelectedIndex(s.selectedIndex - 1);
            } else {
                s.setSelectedIndex(itemCount);
            }

            return true;
        }

        // Down
        if (e.which == 40) {

            if (s.selectedIndex < itemCount) {
                s.setSelectedIndex(s.selectedIndex + 1);
            } else {
                s.setSelectedIndex(0);
            }

            return true;
        }

    }

    // Enter
    if (e.which == 13) {

        if (s.getSelectedItem()) {
            s.getSelectedItem().trigger("click");
        }

        s.fireEvent("onEnterPress");

        return true;
    }

    s.fireEvent("onKeyPress", e);

    return false;
}

// Validates for an valid search query (no empty, placeholdertext ...)
siteSearch.prototype.isValidSearchString = function (query) {
    if (this.config.searchOnFocus) {
        return true;
    }

    return (query && query != "" && query != this.txt.attr("placeholder"));
}

siteSearch.prototype.on = function (event, func) {
    if (!this.activeEvents[event]) {
        this.activeEvents[event] = [];
    }

    this.activeEvents[event].push(func);
}

siteSearch.prototype.fireEvent = function (event, e) {
    if (e) {
        e.context = this;
    }

    var eventArray = this.activeEvents[event];
    if (eventArray) {

        for (var eventFuncIdx in eventArray) {
            eventArray[eventFuncIdx](e);
        }
    }

    var txtEvents = this.txt.data("events");
    if (txtEvents && txtEvents[event]) {
        this.txt.trigger(event);
    }

}

siteSearch.prototype.setSelectedIndex = function (index) {
    this.selectedIndex = index;
    this.searchLayer.find(".item").removeClass("selected");
    var selectedItem = this.getSelectedItem();
    selectedItem.addClass("selected");
}

siteSearch.prototype.getSelectedIndex = function () {
    return this.selectedIndex;
}

siteSearch.prototype.getSelectedItem = function () {
    if (this.searchLayer && this.selectedIndex > -1) {
        return this.searchLayer.find(".item:eq(" + this.selectedIndex + ")");
    }
    return null;
}

siteSearch.prototype.getSelectedData = function () {
    var selectedItem = this.getSelectedItem();
    if (selectedItem && selectedItem.attr("data-source")) {
        return JSON.parse(selectedItem.attr("data-source"));
    }
    return null;
}

siteSearch.prototype.getValue = function () {
    var selectedData = this.getSelectedData();
    if (selectedData && selectedData.Value && selectedData.Value != "") {
        return selectedData.Value;
    } else {
        return this.txt.val();
    }
}

siteSearch.prototype.getCulture = function () {
    return $("meta[name='language']").attr("content");
}

$.fn.isInPath = function (selector) {
    var target = $(this);
    var isInPath = false;
    while (target.length > 0 && !target.is("body")) {
        if (target.is(selector)) {
            isInPath = true;
            break;
        }
        target = target.parent();
    }
    return isInPath;
}

// Converts a JSON ISO or MSAJAX string into a date object  
$.fn.JSONDate = function (jsonDate) {
    if (jsonDate) {
        var date = new Date(parseInt(jsonDate.substr(6)));
        return date.toLocaleDateString();
    }
    return null;
}

// siteSearch jQuery Plugin
$.fn.siteSearch = function (config) {
    var txt = $(this).first();

    if (!txt.hasClass("siteSearch-control")) {
        var sManager = new siteSearch();
        sManager.txt = txt;
        sManager.init(config);

        txt.data("siteSearch", sManager);
        txt.attr("data-search-id", sManager.id);

        txt.addClass("siteSearch-control");
        txt.parent().addClass("siteSearch-control-container");
    }

    return txt;
}

/*! JsRender v0.9.75 (Beta): http://jsviews.com/#jsrender */
/*! **VERSION FOR WEB** (For NODE.JS see http://jsviews.com/download/jsrender-node.js) */
!function (e, t) { var n = t.jQuery; "object" == typeof exports ? module.exports = n ? e(t, n) : function (n) { if (n && !n.fn) throw "Provide jQuery or null"; return e(t, n) } : "function" == typeof define && define.amd ? define(function () { return e(t) }) : e(t, !1) }(function (e, t) { "use strict"; function n(e, t) { return function () { var n, r = this, i = r.base; return r.base = e, n = t.apply(r, arguments), r.base = i, n } } function r(e, t) { return W(t) && (t = n(e ? e._d ? e : n(o, e) : o, t), t._d = 1), t } function i(e, t) { for (var n in t.props) Ce.test(n) && (e[n] = r(e[n], t.props[n])) } function a(e) { return e } function o() { return "" } function s(e) { try { throw console.log("JsRender dbg breakpoint: " + e), "dbg breakpoint" } catch (t) { } return this.base ? this.baseApply(arguments) : e } function d(e) { this.name = (t.link ? "JsViews" : "JsRender") + " Error", this.message = e || this.name } function l(e, t) { var n; for (n in t) e[n] = t[n]; return e } function u(e, t, n) { return e ? (ie.delimiters = [e, t, pe = n ? n.charAt(0) : pe], se = e.charAt(0), de = e.charAt(1), le = t.charAt(0), ue = t.charAt(1), e = "\\" + se + "(\\" + pe + ")?\\" + de, t = "\\" + le + "\\" + ue, P = "(?:(\\w+(?=[\\/\\s\\" + le + "]))|(\\w+)?(:)|(>)|(\\*))\\s*((?:[^\\" + le + "]|\\" + le + "(?!\\" + ue + "))*?)", re.rTag = "(?:" + P + ")", P = new RegExp("(?:" + e + P + "(\\/)?|\\" + se + "(\\" + pe + ")?\\" + de + "(?:(?:\\/(\\w+))\\s*|!--[\\s\\S]*?--))" + t, "g"), Z = new RegExp("<.*>|([^\\\\]|^)[{}]|" + e + ".*" + t), oe) : ie.delimiters } function p(e, t) { t || e === !0 || (t = e, e = void 0); var n, r, i, a, o = this, s = !t || "root" === t; if (e) { if (a = t && o.type === t && o, !a) if (n = o.views, o._.useKey) { for (r in n) if (a = t ? n[r].get(e, t) : n[r]) break } else for (r = 0, i = n.length; !a && i > r; r++) a = t ? n[r].get(e, t) : n[r] } else if (s) for (; o.parent;) a = o, o = o.parent; else for (; o && !a;) a = o.type === t ? o : void 0, o = o.parent; return a } function c() { var e = this.get("item"); return e ? e.index : void 0 } function f() { return this.index } function g(t) { var n, r = this, i = r.linkCtx, a = (r.ctx || {})[t]; return void 0 === a && i && i.ctx && (a = i.ctx[t]), void 0 === a && (a = te[t]), a && W(a) && !a._wrp && (n = function () { return a.apply(this && this !== e ? this : r, arguments) }, n._wrp = r, l(n, a)), n || a } function v(e) { return e && (e.fn ? e : this.getRsc("templates", e) || Y(e)) } function m(e, t, n, r) { var a, o, s = "number" == typeof n && t.tmpl.bnds[n - 1], d = t.linkCtx; return void 0 !== r ? n = r = { props: {}, args: [r] } : s && (n = s(t.data, t, re)), o = n.args[0], (e || s) && (a = d && d.tag, a || (a = l(new re._tg, { _: { inline: !d, bnd: s, unlinked: !0 }, tagName: ":", cvt: e, flow: !0, tagCtx: n }), d && (d.tag = a, a.linkCtx = d), n.ctx = O(n.ctx, (d ? d.view : t).ctx)), a._er = r && o, i(a, n), n.view = t, a.ctx = n.ctx || {}, n.ctx = void 0, o = a.cvtArgs(a.convert || "true" !== e && e)[0], o = s && t._.onRender ? t._.onRender(o, t, a) : o), void 0 != o ? o : "" } function h(e) { var t = this, n = t.tagCtx, r = n.view, i = n.args; return e = t.convert || e, e = e && ("" + e === e ? r.getRsc("converters", e) || N("Unknown converter: '" + e + "'") : e), i = i.length || n.index ? e ? i.slice() : i : [r.data], e && (e.depends && (t.depends = re.getDeps(t.depends, t, e.depends, e)), i[0] = e.apply(t, i)), i } function w(e, t) { for (var n, r, i = this; void 0 === n && i;) r = i.tmpl && i.tmpl[e], n = r && r[t], i = i.parent; return n || G[e][t] } function x(e, t, n, r, a, o) { t = t || z; var s, d, l, u, p, c, f, g, v, m, h, w, x, b, _, y, k, j, C, T = "", A = t.linkCtx || 0, R = t.ctx, $ = n || t.tmpl, M = "number" == typeof r && t.tmpl.bnds[r - 1]; for ("tag" === e._is ? (s = e, e = s.tagName, r = s.tagCtxs, l = s.template) : (d = t.getRsc("tags", e) || N("Unknown tag: {{" + e + "}} "), l = d.template), void 0 !== o ? (T += o, r = o = [{ props: {}, args: [] }]) : M && (r = M(t.data, t, re)), g = r.length, f = 0; g > f; f++) m = r[f], (!A || !A.tag || f && !A.tag._.inline || s._er) && ((w = $.tmpls && m.tmpl) && (w = m.content = $.tmpls[w - 1]), m.index = f, m.tmpl = w, m.render = V, m.view = t, m.ctx = O(m.ctx, R)), (n = m.props.tmpl) && (m.tmpl = t.getTmpl(n)), s || (s = new d._ctr, x = !!s.init, s.parent = c = R && R.tag, s.tagCtxs = r, C = s.dataMap, A && (s._.inline = !1, A.tag = s, s.linkCtx = A), (s._.bnd = M || A.fn) ? s._.arrVws = {} : s.dataBoundOnly && N("{^{" + e + "}} tag must be data-bound")), r = s.tagCtxs, C = s.dataMap, m.tag = s, C && r && (m.map = r[f].map), s.flow || (h = m.ctx = m.ctx || {}, u = s.parents = h.parentTags = R && O(h.parentTags, R.parentTags) || {}, c && (u[c.tagName] = c), u[s.tagName] = h.tag = s); if (!(s._er = o)) { for (i(s, r[0]), s.rendering = {}, f = 0; g > f; f++) m = s.tagCtx = r[f], k = m.props, y = s.cvtArgs(), (b = k.dataMap || C) && (y.length || k.dataMap) && (_ = m.map, (!_ || _.src !== y[0] || a) && (_ && _.src && _.unmap(), _ = m.map = b.map(y[0], k, void 0, !s._.bnd)), y = [_.tgt]), s.ctx = m.ctx, f || (x && (j = s.template, s.init(m, A, s.ctx), x = void 0), A && (A.attr = s.attr = A.attr || s.attr), p = s.attr, s._.noVws = p && p !== Ve), v = void 0, s.render && (v = s.render.apply(s, y)), y.length || (y = [t]), void 0 === v && (v = m.render(y[0], !0) || (a ? void 0 : "")), T = T ? T + (v || "") : v; s.rendering = void 0 } return s.tagCtx = r[0], s.ctx = s.tagCtx.ctx, s._.noVws && s._.inline && (T = "text" === p ? ee.html(T) : ""), M && t._.onRender ? t._.onRender(T, t, s) : T } function b(e, t, n, r, i, a, o, s) { var d, l, u, p = this, f = "array" === t; p.content = s, p.views = f ? [] : {}, p.parent = n, p.type = t || "top", p.data = r, p.tmpl = i, u = p._ = { key: 0, useKey: f ? 0 : 1, id: "" + Ae++, onRender: o, bnds: {} }, p.linked = !!o, n ? (d = n.views, l = n._, l.useKey ? (d[u.key = "_" + l.useKey++] = p, p.index = Ee, p.getIndex = c) : d.length === (u.key = p.index = a) ? d.push(p) : d.splice(a, 0, p), p.ctx = e || n.ctx) : p.ctx = e } function _(e) { var t, n, r, i, a, o, s; for (t in Ue) if (a = Ue[t], (o = a.compile) && (n = e[t + "s"])) for (r in n) i = n[r] = o(r, n[r], e, 0), i._is = t, i && (s = re.onStore[t]) && s(r, i, o) } function y(e, t, n) { function i() { var t = this; t._ = { inline: !0, unlinked: !0 }, t.tagName = e } var a, o, s, d = new re._tg; if (W(t) ? t = { depends: t.depends, render: t } : "" + t === t && (t = { template: t }), o = t.baseTag) { t.flow = !!t.flow, t.baseTag = o = "" + o === o ? n && n.tags[o] || ne[o] : o, d = l(d, o); for (s in t) d[s] = r(o[s], t[s]) } else d = l(d, t); return void 0 !== (a = d.template) && (d.template = "" + a === a ? Y[a] || Y(a) : a), d.init !== !1 && ((i.prototype = d).constructor = d._ctr = i), n && (d._parentTmpl = n), d } function k(e) { return this.base.apply(this, e) } function j(e, n, r, i) { function a(n) { var a, s; if ("" + n === n || n.nodeType > 0 && (o = n)) { if (!o) if (/^\.\/[^\\:*?"<>]*$/.test(n)) (s = Y[e = e || n]) ? n = s : o = document.getElementById(n); else if (t.fn && !Z.test(n)) try { o = t(document).find(n)[0] } catch (d) { } o && (i ? n = o.innerHTML : (a = o.getAttribute(Me), a ? a !== Ne ? (n = Y[a], delete Y[a]) : t.fn && (n = t.data(o)[Ne]) : (e = e || (t.fn ? Ne : n), n = j(e, o.innerHTML, r, i)), n.tmplName = e = e || a, e !== Ne && (Y[e] = n), o.setAttribute(Me, e), t.fn && t.data(o, Ne, n))), o = void 0 } else n.fn || (n = void 0); return n } var o, s, d = n = n || ""; return 0 === i && (i = void 0, d = a(d)), i = i || (n.markup ? n : {}), i.tmplName = e, r && (i._parentTmpl = r), !d && n.markup && (d = a(n.markup)) && d.fn && (d = d.markup), void 0 !== d ? (d.fn || n.fn ? d.fn && (s = d) : (n = T(d, i), S(d.replace(xe, "\\$&"), n)), s || (_(i), s = l(function () { return n.render.apply(n, arguments) }, n)), e && !r && e !== Ne && (Se[e] = s), s) : void 0 } function C(e) { function t(t, n) { this.tgt = e.getTgt(t, n) } return W(e) && (e = { getTgt: e }), e.baseMap && (e = l(l({}, e.baseMap), e)), e.map = function (e, n) { return new t(e, n) }, e } function T(e, n) { var r, i = ae._wm || {}, a = l({ tmpls: [], links: {}, bnds: [], _is: "template", render: V }, n); return a.markup = e, n.htmlTag || (r = ye.exec(e), a.htmlTag = r ? r[1].toLowerCase() : ""), r = i[a.htmlTag], r && r !== i.div && (a.markup = t.trim(a.markup)), a } function A(e, t) { function n(i, a, o) { var s, d, l, u; if (i && typeof i === $e && !i.nodeType && !i.markup && !i.getTgt) { for (l in i) n(l, i[l], a); return G } return void 0 === a && (a = i, i = void 0), i && "" + i !== i && (o = a, a = i, i = void 0), u = o ? o[r] = o[r] || {} : n, d = t.compile, null === a ? i && delete u[i] : (a = d ? d.call(u, i, a, o, 0) : a, i && (u[i] = a)), d && a && (a._is = e), a && (s = re.onStore[e]) && s(i, a, d), a } var r = e + "s"; G[r] = n } function R(e) { oe[e] = function (t) { return arguments.length ? (ie[e] = t, oe) : ie[e] } } function V(e, t, n, r, i, a) { var o, s, d, l, u, p, c, f, g = r, v = ""; if (t === !0 ? (n = t, t = void 0) : typeof t !== $e && (t = void 0), (d = this.tag) ? (u = this, g = g || u.view, l = g.getTmpl(d.template || u.tmpl), arguments.length || (e = g)) : l = this, l) { if (!g && e && "view" === e._is && (g = e), g && e === g && (e = g.data), p = !g, fe = fe || p, g || ((t = t || {}).root = e), !fe || ae.useViews || l.useViews || g && g !== z) v = $(l, e, t, n, g, i, a, d); else { if (g ? (c = g.data, f = g.index, g.index = Ee) : (g = z, g.data = e, g.ctx = t), X(e) && !n) for (o = 0, s = e.length; s > o; o++) g.index = o, g.data = e[o], v += l.fn(e[o], g, re); else g.data = e, v += l.fn(e, g, re); g.data = c, g.index = f } p && (fe = void 0) } return v } function $(e, t, n, r, i, a, o, s) { function d(e) { _ = l({}, n), _[x] = e } var u, p, c, f, g, v, m, h, w, x, _, y, k = ""; if (s && (w = s.tagName, y = s.tagCtx, n = n ? O(n, s.ctx) : s.ctx, e === i.content ? m = e !== i.ctx._wrp ? i.ctx._wrp : void 0 : e !== y.content ? e === s.template ? (m = y.tmpl, n._wrp = y.content) : m = y.content || i.content : m = i.content, y.props.link === !1 && (n = n || {}, n.link = !1), (x = y.props.itemVar) && ("~" !== x.charAt(0) && E("Use itemVar='~myItem'"), x = x.slice(1))), i && (o = o || i._.onRender, n = O(n, i.ctx)), a === !0 && (v = !0, a = 0), o && (n && n.link === !1 || s && s._.noVws) && (o = void 0), h = o, o === !0 && (h = void 0, o = i._.onRender), n = e.helpers ? O(e.helpers, n) : n, _ = n, X(t) && !r) for (c = v ? i : void 0 !== a && i || new b(n, "array", i, t, e, a, o), i && i._.useKey && (c._.bnd = !s || s._.bnd && s), x && (c.it = x), x = c.it, u = 0, p = t.length; p > u; u++) x && d(t[u]), f = new b(_, "item", c, t[u], e, (a || 0) + u, o, m), g = e.fn(t[u], f, re), k += c._.onRender ? c._.onRender(g, f) : g; else x && d(t), c = v ? i : new b(_, w || "data", i, t, e, a, o, m), s && !s.flow && (c.tag = s), k += e.fn(t, c, re); return h ? h(k, c) : k } function M(e, t, n) { var r = void 0 !== n ? W(n) ? n.call(t.data, e, t) : n || "" : "{Error: " + e.message + "}"; return ie.onError && void 0 !== (n = ie.onError.call(t.data, e, n && r, t)) && (r = n), t && !t.linkCtx ? ee.html(r) : r } function N(e) { throw new re.Err(e) } function E(e) { N("Syntax error\n" + e) } function S(e, t, n, r, i) { function a(t) { t -= f, t && v.push(e.substr(f, t).replace(he, "\\n")) } function o(t, n) { t && (t += "}}", E((n ? "{{" + n + "}} block has {{/" + t + " without {{" + t : "Unmatched or missing {{/" + t) + ", in template:\n" + e)) } function s(s, d, c, h, w, x, b, _, y, k, j, C) { (b && d || y && !c || _ && ":" === _.slice(-1) || k) && E(s), x && (w = ":", h = Ve), y = y || n && !i; var T = (d || n) && [[]], A = "", R = "", V = "", $ = "", M = "", N = "", S = "", F = "", U = !y && !w; c = c || (_ = _ || "#data", w), a(C), f = C + s.length, b ? p && v.push(["*", "\n" + _.replace(/^:/, "ret+= ").replace(we, "$1") + ";\n"]) : c ? ("else" === c && (_e.test(_) && E('for "{{else if expr}}" use "{{else expr}}"'), T = m[7] && [[]], m[8] = e.substring(m[8], C), m = g.pop(), v = m[2], U = !0), _ && J(_.replace(he, " "), T, t).replace(be, function (e, t, n, r, i, a, o, s) { return r = "'" + i + "':", o ? (R += a + ",", $ += "'" + s + "',") : n ? (V += r + a + ",", N += r + "'" + s + "',") : t ? S += a : ("trigger" === i && (F += a), A += r + a + ",", M += r + "'" + s + "',", u = u || Ce.test(i)), "" }).slice(0, -1), T && T[0] && T.pop(), l = [c, h || !!r || u || "", U && [], I($ || (":" === c ? "'#data'," : ""), M, N), I(R || (":" === c ? "data," : ""), A, V), S, F, T || 0], v.push(l), U && (g.push(m), m = l, m[8] = f)) : j && (o(j !== m[0] && "else" !== m[0] && j, m[0]), m[8] = e.substring(m[8], C), m = g.pop()), o(!m && j), v = m[2] } var d, l, u, p = ie.allowCode || t && t.allowCode || oe.allowCode === !0, c = [], f = 0, g = [], v = c, m = [, , c]; return p && (t.allowCode = p), n && (void 0 !== r && (e = e.slice(0, -r.length - 2) + ue), e = se + e + ue), o(g[0] && g[0][2].pop()[0]), e.replace(P, s), a(e.length), (f = c[c.length - 1]) && o("" + f !== f && +f[8] === f[8] && f[0]), n ? (d = K(c, e, n), F(d, [c[0][7]])) : d = K(c, t), d } function F(e, t) { var n, r, i = 0, a = t.length; for (e.deps = []; a > i; i++) { r = t[i]; for (n in r) "_jsvto" !== n && r[n].length && (e.deps = e.deps.concat(r[n])) } e.paths = r } function I(e, t, n) { return [e.slice(0, -1), t.slice(0, -1), n.slice(0, -1)] } function U(e, t) { return "\n	" + (t ? t + ":{" : "") + "args:[" + e[0] + "]" + (e[1] || !t ? ",\n	props:{" + e[1] + "}" : "") + (e[2] ? ",\n	ctx:{" + e[2] + "}" : "") } function J(e, t, n) { function r(r, h, w, x, b, _, y, k, j, C, T, A, R, V, $, M, N, F, I, U) { function J(e, n, r, o, s, d, p, c) { var f = "." === r; if (r && (b = b.slice(n.length), /^\.?constructor$/.test(c || b) && E(e), f || (e = (o ? 'view.hlp("' + o + '")' : s ? "view" : "data") + (c ? (d ? "." + d : o ? "" : s ? "" : "." + r) + (p || "") : (c = o ? "" : s ? d || "" : r, "")), e += c ? "." + c : "", e = n + ("view.data" === e.slice(0, 9) ? e.slice(5) : e)), l)) { if (q = "linkTo" === i ? a = t._jsvto = t._jsvto || [] : u.bd, B = f && q[q.length - 1]) { if (B._jsv) { for (; B.sb;) B = B.sb; B.bnd && (b = "^" + b.slice(1)), B.sb = b, B.bnd = B.bnd || "^" === b.charAt(0) } } else q.push(b); m[g] = I + (f ? 1 : 0) } return e } x = l && x, x && !k && (b = x + b), _ = _ || "", w = w || h || A, b = b || j, C = C || N || ""; var K, O, q, B, L; if (!y || d || s) { if (l && M && !d && !s && (!i || o || a) && (K = m[g - 1], U.length - 1 > I - (K || 0))) { if (K = U.slice(K, I + r.length), O !== !0) if (q = a || p[g - 1].bd, B = q[q.length - 1], B && B.prm) { for (; B.sb && B.sb.prm;) B = B.sb; L = B.sb = { path: B.sb, bnd: B.bnd } } else q.push(L = { path: q.pop() }); M = de + ":" + K + " onerror=''" + le, O = f[M], O || (f[M] = !0, f[M] = O = S(M, n, !0)), O !== !0 && L && (L._jsv = O, L.prm = u.bd, L.bnd = L.bnd || L.path && L.path.indexOf("^") >= 0) } return d ? (d = !R, d ? r : A + '"') : s ? (s = !V, s ? r : A + '"') : (w ? (m[g] = I++, u = p[++g] = { bd: [] }, w) : "") + (F ? g ? "" : (c = U.slice(c, I), (i ? (i = o = a = !1, "\b") : "\b,") + c + (c = I + r.length, l && t.push(u.bd = []), "\b")) : k ? (g && E(e), l && t.pop(), i = b, o = x, c = I + r.length, x && (l = u.bd = t[i] = []), b + ":") : b ? b.split("^").join(".").replace(ve, J) + (C ? (u = p[++g] = { bd: [] }, v[g] = !0, C) : _) : _ ? _ : $ ? (v[g] = !1, u = p[--g], $ + (C ? (u = p[++g], v[g] = !0, C) : "")) : T ? (v[g] || E(e), ",") : h ? "" : (d = R, s = V, '"')) } E(e) } var i, a, o, s, d, l = t && t[0], u = { bd: l }, p = { 0: u }, c = 0, f = n ? n.links : l && (l.links = l.links || {}), g = 0, v = {}, m = {}, h = (e + (n ? " " : "")).replace(me, r); return !g && h || E(e) } function K(e, t, n) { var r, i, a, o, s, d, l, u, p, c, f, g, v, m, h, w, x, b, _, y, k, j, C, A, R, V, $, M, N, S, I = 0, J = ae.useViews || t.useViews || t.tags || t.templates || t.helpers || t.converters, O = "", q = {}, B = e.length; for ("" + t === t ? (b = n ? 'data-link="' + t.replace(he, " ").slice(1, -1) + '"' : t, t = 0) : (b = t.tmplName || "unnamed", t.allowCode && (q.allowCode = !0), t.debug && (q.debug = !0), f = t.bnds, x = t.tmpls), r = 0; B > r; r++) if (i = e[r], "" + i === i) O += '\n+"' + i + '"'; else if (a = i[0], "*" === a) O += ";\n" + i[1] + "\nret=ret"; else { if (o = i[1], k = !n && i[2], s = U(i[3], "params") + "}," + U(v = i[4]), M = i[5], S = i[6], j = i[8] && i[8].replace(we, "$1"), (R = "else" === a) ? g && g.push(i[7]) : (I = 0, f && (g = i[7]) && (g = [g], I = f.push(1))), J = J || v[1] || v[2] || g || /view.(?!index)/.test(v[0]), (V = ":" === a) ? (o && (a = o === Ve ? ">" : o + a), S = i[6] || ie.trigger) : (k && (_ = T(j, q), _.tmplName = b + "/" + a, _.useViews = _.useViews || J, K(k, _), J = _.useViews, x.push(_)), R || (y = a, J = J || a && (!ne[a] || !ne[a].flow), A = O, O = ""), C = e[r + 1], C = C && "else" === C[0]), N = M ? ";\ntry{\nret+=" : "\n+", m = "", h = "", V && (g || S || o && o !== Ve)) { if ($ = "return {" + s + "};", w = 'c("' + o + '",view,', $ = new Function("data,view,j,u", " // " + b + " " + I + " " + a + "\n" + $), $._er = M, m = w + I + ",", h = ")", $._tag = a, n) return $; F($, g), c = !0 } if (O += V ? (n ? (M ? "\ntry{\n" : "") + "return " : N) + (c ? (c = void 0, J = p = !0, w + (g ? (f[I - 1] = $, I) : "{" + s + "}") + ")") : ">" === a ? (l = !0, "h(" + v[0] + ")") : (u = !0, "((v=" + v[0] + ')!=null?v:"")')) : (d = !0, "\n{view:view,tmpl:" + (k ? x.length : "0") + "," + s + "},"), y && !C) { if (O = "[" + O.slice(0, -1) + "]", w = 't("' + y + '",view,this,', n || g) { if (O = new Function("data,view,j,u", " // " + b + " " + I + " " + y + "\nreturn " + O + ";"), O._er = M, O._tag = y, g && F(f[I - 1] = O, g), n) return O; m = w + I + ",undefined,", h = ")" } O = A + N + w + (I || O) + ")", g = 0, y = 0 } M && (J = !0, O += ";\n}catch(e){ret" + (n ? "urn " : "+=") + m + "j._err(e,view," + M + ")" + h + ";}\n" + (n ? "" : "ret=ret")) } O = "// " + b + "\nvar v" + (d ? ",t=j._tag" : "") + (p ? ",c=j._cnvt" : "") + (l ? ",h=j._html" : "") + (n ? ";\n" : ',ret=""\n') + (q.debug ? "debugger;" : "") + O + (n ? "\n" : ";\nreturn ret;"), ie.debugMode !== !1 && (O = "try {\n" + O + "\n}catch(e){\nreturn j._err(e, view);\n}"); try { O = new Function("data,view,j,u", O) } catch (L) { E("Compiled template code:\n\n" + O + '\n: "' + L.message + '"') } return t && (t.fn = O, t.useViews = !!J), O } function O(e, t) { return e && e !== t ? t ? l(l({}, t), e) : e : t && l({}, t) } function q(e) { return Re[e] || (Re[e] = "&#" + e.charCodeAt(0) + ";") } function B(e) { var t, n, r = []; if (typeof e === $e) for (t in e) n = e[t], n && n.toJSON && !n.toJSON() || W(n) || r.push({ key: t, prop: n }); return r } function L(e, n, r) { var i = this.jquery && (this[0] || N('Unknown template: "' + this.selector + '"')), a = i.getAttribute(Me); return V.call(a ? t.data(i)[Ne] : Y(i), e, n, r) } function Q(e) { return void 0 != e ? je.test(e) && ("" + e).replace(Te, q) || e : "" } var H = t === !1; t = t && t.fn ? t : e.jQuery; var D, P, Z, z, G, W, X, Y, ee, te, ne, re, ie, ae, oe, se, de, le, ue, pe, ce, fe, ge = "v0.9.75", ve = /^(!*?)(?:null|true|false|\d[\d.]*|([\w$]+|\.|~([\w$]+)|#(view|([\w$]+))?)([\w$.^]*?)(?:[.[^]([\w$]+)\]?)?)$/g, me = /(\()(?=\s*\()|(?:([([])\s*)?(?:(\^?)(!*?[#~]?[\w$.^]+)?\s*((\+\+|--)|\+|-|&&|\|\||===|!==|==|!=|<=|>=|[<>%*:?\/]|(=))\s*|(!*?[#~]?[\w$.^]+)([([])?)|(,\s*)|(\(?)\\?(?:(')|("))|(?:\s*(([)\]])(?=\s*[.^]|\s*$|[^([])|[)\]])([([]?))|(\s+)/g, he = /[ \t]*(\r\n|\n|\r)/g, we = /\\(['"])/g, xe = /['"\\]/g, be = /(?:\x08|^)(onerror:)?(?:(~?)(([\w$_\.]+):)?([^\x08]+))\x08(,)?([^\x08]+)/gi, _e = /^if\s/, ye = /<(\w+)[>\s]/, ke = /[\x00`><"'&]/g, je = /[\x00`><\"'&]/, Ce = /^on[A-Z]|^convert(Back)?$/, Te = ke, Ae = 0, Re = { "&": "&amp;", "<": "&lt;", ">": "&gt;", "\x00": "&#0;", "'": "&#39;", '"': "&#34;", "`": "&#96;" }, Ve = "html", $e = "object", Me = "data-jsv-tmpl", Ne = "jsvTmpl", Ee = "For #index in nested block use #getIndex().", Se = {}, Fe = e.jsrender, Ie = Fe && t && !t.render, Ue = { template: { compile: j }, tag: { compile: y }, helper: {}, converter: {} }; if (G = { jsviews: ge, sub: { View: b, Err: d, tmplFn: S, parse: J, extend: l, extendCtx: O, syntaxErr: E, onStore: {}, addSetting: R, settings: { allowCode: !1 }, advSet: o, _ths: i, _tg: function () { }, _cnvt: m, _tag: x, _er: N, _err: M, _html: Q }, settings: { delimiters: u, advanced: function (e) { return e ? (l(ae, e), re.advSet(), oe) : ae } }, map: C }, (d.prototype = new Error).constructor = d, c.depends = function () { return [this.get("item"), "index"] }, f.depends = "index", b.prototype = { get: p, getIndex: f, getRsc: w, getTmpl: v, hlp: g, _is: "view" }, !(Fe || t && t.render)) { for (D in Ue) A(D, Ue[D]); Y = G.templates, ee = G.converters, te = G.helpers, ne = G.tags, re = G.sub, oe = G.settings, re._tg.prototype = { baseApply: k, cvtArgs: h }, z = re.topView = new b, t ? (t.fn.render = L, t.observable && (l(re, t.views.sub), G.map = t.views.map)) : (t = {}, H && (e.jsrender = t), t.renderFile = t.__express = t.compile = function () { throw "Node.js: use npm jsrender, or jsrender-node.js" }, t.isFunction = function (e) { return "function" == typeof e }, t.isArray = Array.isArray || function (e) { return "[object Array]" === {}.toString.call(e) }, re._jq = function (e) { e !== t && (l(e, t), t = e, t.fn.render = L, delete t.jsrender) }, t.jsrender = ge), ie = re.settings, ie.allowCode = !1, W = t.isFunction, X = t.isArray, t.render = Se, t.views = G, t.templates = Y = G.templates; for (ce in ie) R(ce); (oe.debugMode = function (e) { return void 0 === e ? ie.debugMode : (ie.debugMode = e, ie.onError = e + "" === e ? new Function("", "return '" + e + "';") : W(e) ? e : void 0, oe) })(!1), ae = ie.advanced = { useViews: !1, _jsv: !1 }, ne({ "if": { render: function (e) { var t = this, n = t.tagCtx, r = t.rendering.done || !e && (arguments.length || !n.index) ? "" : (t.rendering.done = !0, t.selected = n.index, n.render(n.view, !0)); return r }, flow: !0 }, "for": { render: function (e) { var t, n = !arguments.length, r = this, i = r.tagCtx, a = "", o = 0; return r.rendering.done || (t = n ? i.view.data : e, void 0 !== t && (a += i.render(t, n), o += X(t) ? t.length : 1), (r.rendering.done = o) && (r.selected = i.index)), a }, flow: !0 }, props: { baseTag: "for", dataMap: C(B), flow: !0 }, include: { flow: !0 }, "*": { render: a, flow: !0 }, ":*": { render: a, flow: !0 }, dbg: te.dbg = ee.dbg = s }), ee({ html: Q, attr: Q, url: function (e) { return void 0 != e ? encodeURI("" + e) : null === e ? e : "" } }), oe.delimiters("{{", "}}", "^") } return Ie && Fe.views.sub._jq(t), t || Fe }, window);
//# sourceMappingURL=jsrender.min.js.map