window.Modernizr = function (a, b, c) { function z(a) { j.cssText = a } function A(a, b) { return z(m.join(a + ";") + (b || "")) } function B(a, b) { return typeof a === b } function C(a, b) { return !!~("" + a).indexOf(b) } function D(a, b) { for (var d in a) { var e = a[d]; if (!C(e, "-") && j[e] !== c) return b == "pfx" ? e : !0 } return !1 } function E(a, b, d) { for (var e in a) { var f = b[a[e]]; if (f !== c) return d === !1 ? a[e] : B(f, "function") ? f.bind(d || b) : f } return !1 } function F(a, b, c) { var d = a.charAt(0).toUpperCase() + a.slice(1), e = (a + " " + o.join(d + " ") + d).split(" "); return B(b, "string") || B(b, "undefined") ? D(e, b) : (e = (a + " " + p.join(d + " ") + d).split(" "), E(e, b, c)) } var d = "2.8.3", e = {}, f = !0, g = b.documentElement, h = "modernizr", i = b.createElement(h), j = i.style, k, l = {}.toString, m = " -webkit- -moz- -o- -ms- ".split(" "), n = "Webkit Moz O ms", o = n.split(" "), p = n.toLowerCase().split(" "), q = {}, r = {}, s = {}, t = [], u = t.slice, v, w = function (a, c, d, e) { var f, i, j, k, l = b.createElement("div"), m = b.body, n = m || b.createElement("body"); if (parseInt(d, 10)) while (d--) j = b.createElement("div"), j.id = e ? e[d] : h + (d + 1), l.appendChild(j); return f = ["&#173;", '<style id="s', h, '">', a, "</style>"].join(""), l.id = h, (m ? l : n).innerHTML += f, n.appendChild(l), m || (n.style.background = "", n.style.overflow = "hidden", k = g.style.overflow, g.style.overflow = "hidden", g.appendChild(n)), i = c(l, a), m ? l.parentNode.removeChild(l) : (n.parentNode.removeChild(n), g.style.overflow = k), !!i }, x = {}.hasOwnProperty, y; !B(x, "undefined") && !B(x.call, "undefined") ? y = function (a, b) { return x.call(a, b) } : y = function (a, b) { return b in a && B(a.constructor.prototype[b], "undefined") }, Function.prototype.bind || (Function.prototype.bind = function (b) { var c = this; if (typeof c != "function") throw new TypeError; var d = u.call(arguments, 1), e = function () { if (this instanceof e) { var a = function () { }; a.prototype = c.prototype; var f = new a, g = c.apply(f, d.concat(u.call(arguments))); return Object(g) === g ? g : f } return c.apply(b, d.concat(u.call(arguments))) }; return e }), q.backgroundsize = function () { return F("backgroundSize") }, q.borderradius = function () { return F("borderRadius") }; for (var G in q) y(q, G) && (v = G.toLowerCase(), e[v] = q[G](), t.push((e[v] ? "" : "no-") + v)); return e.addTest = function (a, b) { if (typeof a == "object") for (var d in a) y(a, d) && e.addTest(d, a[d]); else { a = a.toLowerCase(); if (e[a] !== c) return e; b = typeof b == "function" ? b() : b, typeof f != "undefined" && f && (g.className += " " + (b ? "" : "no-") + a), e[a] = b } return e }, z(""), i = k = null, function (a, b) { function l(a, b) { var c = a.createElement("p"), d = a.getElementsByTagName("head")[0] || a.documentElement; return c.innerHTML = "x<style>" + b + "</style>", d.insertBefore(c.lastChild, d.firstChild) } function m() { var a = s.elements; return typeof a == "string" ? a.split(" ") : a } function n(a) { var b = j[a[h]]; return b || (b = {}, i++, a[h] = i, j[i] = b), b } function o(a, c, d) { c || (c = b); if (k) return c.createElement(a); d || (d = n(c)); var g; return d.cache[a] ? g = d.cache[a].cloneNode() : f.test(a) ? g = (d.cache[a] = d.createElem(a)).cloneNode() : g = d.createElem(a), g.canHaveChildren && !e.test(a) && !g.tagUrn ? d.frag.appendChild(g) : g } function p(a, c) { a || (a = b); if (k) return a.createDocumentFragment(); c = c || n(a); var d = c.frag.cloneNode(), e = 0, f = m(), g = f.length; for (; e < g; e++) d.createElement(f[e]); return d } function q(a, b) { b.cache || (b.cache = {}, b.createElem = a.createElement, b.createFrag = a.createDocumentFragment, b.frag = b.createFrag()), a.createElement = function (c) { return s.shivMethods ? o(c, a, b) : b.createElem(c) }, a.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + m().join().replace(/[\w\-]+/g, function (a) { return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")' }) + ");return n}")(s, b.frag) } function r(a) { a || (a = b); var c = n(a); return s.shivCSS && !g && !c.hasCSS && (c.hasCSS = !!l(a, "article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")), k || q(a, c), a } var c = "3.7.0", d = a.html5 || {}, e = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i, f = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i, g, h = "_html5shiv", i = 0, j = {}, k; (function () { try { var a = b.createElement("a"); a.innerHTML = "<xyz></xyz>", g = "hidden" in a, k = a.childNodes.length == 1 || function () { b.createElement("a"); var a = b.createDocumentFragment(); return typeof a.cloneNode == "undefined" || typeof a.createDocumentFragment == "undefined" || typeof a.createElement == "undefined" }() } catch (c) { g = !0, k = !0 } })(); var s = { elements: d.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video", version: c, shivCSS: d.shivCSS !== !1, supportsUnknownElements: k, shivMethods: d.shivMethods !== !1, type: "default", shivDocument: r, createElement: o, createDocumentFragment: p }; a.html5 = s, r(b) }(this, b), e._version = d, e._prefixes = m, e._domPrefixes = p, e._cssomPrefixes = o, e.testProp = function (a) { return D([a]) }, e.testAllProps = F, e.testStyles = w, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (f ? " js " + t.join(" ") : ""), e }(this, this.document), function (a, b, c) { function d(a) { return "[object Function]" == o.call(a) } function e(a) { return "string" == typeof a } function f() { } function g(a) { return !a || "loaded" == a || "complete" == a || "uninitialized" == a } function h() { var a = p.shift(); q = 1, a ? a.t ? m(function () { ("c" == a.t ? B.injectCss : B.injectJs)(a.s, 0, a.a, a.x, a.e, 1) }, 0) : (a(), h()) : q = 0 } function i(a, c, d, e, f, i, j) { function k(b) { if (!o && g(l.readyState) && (u.r = o = 1, !q && h(), l.onload = l.onreadystatechange = null, b)) { "img" != a && m(function () { t.removeChild(l) }, 50); for (var d in y[c]) y[c].hasOwnProperty(d) && y[c][d].onload() } } var j = j || B.errorTimeout, l = b.createElement(a), o = 0, r = 0, u = { t: d, s: c, e: f, a: i, x: j }; 1 === y[c] && (r = 1, y[c] = []), "object" == a ? l.data = c : (l.src = c, l.type = a), l.width = l.height = "0", l.onerror = l.onload = l.onreadystatechange = function () { k.call(this, r) }, p.splice(e, 0, u), "img" != a && (r || 2 === y[c] ? (t.insertBefore(l, s ? null : n), m(k, j)) : y[c].push(l)) } function j(a, b, c, d, f) { return q = 0, b = b || "j", e(a) ? i("c" == b ? v : u, a, b, this.i++, c, d, f) : (p.splice(this.i++, 0, a), 1 == p.length && h()), this } function k() { var a = B; return a.loader = { load: j, i: 0 }, a } var l = b.documentElement, m = a.setTimeout, n = b.getElementsByTagName("script")[0], o = {}.toString, p = [], q = 0, r = "MozAppearance" in l.style, s = r && !!b.createRange().compareNode, t = s ? l : n.parentNode, l = a.opera && "[object Opera]" == o.call(a.opera), l = !!b.attachEvent && !l, u = r ? "object" : l ? "script" : "img", v = l ? "script" : u, w = Array.isArray || function (a) { return "[object Array]" == o.call(a) }, x = [], y = {}, z = { timeout: function (a, b) { return b.length && (a.timeout = b[0]), a } }, A, B; B = function (a) { function b(a) { var a = a.split("!"), b = x.length, c = a.pop(), d = a.length, c = { url: c, origUrl: c, prefixes: a }, e, f, g; for (f = 0; f < d; f++) g = a[f].split("="), (e = z[g.shift()]) && (c = e(c, g)); for (f = 0; f < b; f++) c = x[f](c); return c } function g(a, e, f, g, h) { var i = b(a), j = i.autoCallback; i.url.split(".").pop().split("?").shift(), i.bypass || (e && (e = d(e) ? e : e[a] || e[g] || e[a.split("/").pop().split("?")[0]]), i.instead ? i.instead(a, e, f, g, h) : (y[i.url] ? i.noexec = !0 : y[i.url] = 1, f.load(i.url, i.forceCSS || !i.forceJS && "css" == i.url.split(".").pop().split("?").shift() ? "c" : c, i.noexec, i.attrs, i.timeout), (d(e) || d(j)) && f.load(function () { k(), e && e(i.origUrl, h, g), j && j(i.origUrl, h, g), y[i.url] = 2 }))) } function h(a, b) { function c(a, c) { if (a) { if (e(a)) c || (j = function () { var a = [].slice.call(arguments); k.apply(this, a), l() }), g(a, j, b, 0, h); else if (Object(a) === a) for (n in m = function () { var b = 0, c; for (c in a) a.hasOwnProperty(c) && b++; return b }(), a) a.hasOwnProperty(n) && (!c && !--m && (d(j) ? j = function () { var a = [].slice.call(arguments); k.apply(this, a), l() } : j[n] = function (a) { return function () { var b = [].slice.call(arguments); a && a.apply(this, b), l() } }(k[n])), g(a[n], j, b, n, h)) } else !c && l() } var h = !!a.test, i = a.load || a.both, j = a.callback || f, k = j, l = a.complete || f, m, n; c(h ? a.yep : a.nope, !!i), i && c(i) } var i, j, l = this.yepnope.loader; if (e(a)) g(a, 0, l, 0); else if (w(a)) for (i = 0; i < a.length; i++) j = a[i], e(j) ? g(j, 0, l, 0) : w(j) ? B(j) : Object(j) === j && h(j, l); else Object(a) === a && h(a, l) }, B.addPrefix = function (a, b) { z[a] = b }, B.addFilter = function (a) { x.push(a) }, B.errorTimeout = 1e4, null == b.readyState && b.addEventListener && (b.readyState = "loading", b.addEventListener("DOMContentLoaded", A = function () { b.removeEventListener("DOMContentLoaded", A, 0), b.readyState = "complete" }, 0)), a.yepnope = k(), a.yepnope.executeStack = h, a.yepnope.injectJs = function (a, c, d, e, i, j) { var k = b.createElement("script"), l, o, e = e || B.errorTimeout; k.src = a; for (o in d) k.setAttribute(o, d[o]); c = j ? h : c || f, k.onreadystatechange = k.onload = function () { !l && g(k.readyState) && (l = 1, c(), k.onload = k.onreadystatechange = null) }, m(function () { l || (l = 1, c(1)) }, e), i ? k.onload() : n.parentNode.insertBefore(k, n) }, a.yepnope.injectCss = function (a, c, d, e, g, i) { var e = b.createElement("link"), j, c = i ? h : c || f; e.href = a, e.rel = "stylesheet", e.type = "text/css"; for (j in d) e.setAttribute(j, d[j]); g || (n.parentNode.insertBefore(e, n), m(c, 0)) } }(this, document), Modernizr.load = function () { yepnope.apply(window, [].slice.call(arguments, 0)) };

var _lscroll = 0;


function buildSubmenu() {
    //only ie8
    if ($("html").hasClass("no-borderradius")) {
        var sep = $(".item1 .submenu ul li").size();
        if (sep)
            sep = Math.ceil(sep / 3);
        //if (typeof console !== "undefined" || typeof console.log !== "undefined")
        //console.log("SIZE:" + sep);
        if (sep > 5) {
            $(".item1 .submenu ul li").eq((2 * sep)).insertAfter('</ul><ul class="sub-group">');
            $(".item1 .submenu ul li").eq(sep).insertAfter('</ul><ul class="sub-group">');

        }
    }
}

function cookiesScroll() {
    if ($('.cc_banner-wrapper').length > 0) {
        $('header.top').css('margin-top', '70px');
        $('body').css('margin-top', '70px');
        $('.search-panel').css('margin-top', '70px');
    } else {
        $('header.top').css('margin-top', '0');
        $('body').css('margin-top', '0');
    }

    if ($('.top-header-menu').length == 0) {
        $('.search-panel').css('margin-top', '0');
    }
}

function go() {
    $('a.cc_btn.cc_btn_accept_all').click(function () {

        setTimeout(function () {
            cookiesScroll();
        }, 200);
    });
}

function setQuizFontSize() {
    var array = $('.quizz-container h1').text().split(' ');

    for (var i = 0; i < array.length; i++) {
        //console.log(array[i]);

        var number = array[i].length;

        if (number > 15) {
            $('.quizz-container h1').css("font-size", "18px");
        }

        if (number > 18) {
            $('.quizz-container h1').css("font-size", "16px");
        }

        if (number > 20) {
            $('.quizz-container h1').css("font-size", "14px");
        }
    }
}

function setPronunciationStyle() {

    // var pronuncModal = $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children('div');
    // var pronuncModalElement  = $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children('div').children();

    // //modal
    // pronuncModalElement.css({'height': '100px', 'top': '30%'});
    // //line
    // pronuncModalElement.children().children('.description').children('.line').css('display', 'none');
    // //text
    // pronuncModalElement.children('.description').children('h3').css({'margin': '-16px 0 0 150px', 'font-size': '20px'});

    //modal
    $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children('div').children().children('.description').children('h3').css({ 'margin': '-16px 0 0 150px', 'font-size': '20px' })
    //line
    $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children('div').children().children('.description').children('.line').css('display', 'none')
    //modal 
    $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children('div').children().css({ 'height': '100px', 'top': '30%' })
    //close
    $('.ptables').parent().parent().siblings('.audio-player-modal.media-modal').children().children('a.modal-close').css('top', '31%')
}

function addMenuActions() {
    if (window.innerHeight < 500) {
        $(".megamenu").addClass("short");
        $(".megamenu").css('max-height', (window.innerHeight - 65) + "px");
    }

    if($(".megamenu > ul > li").hasClass("header_hat")){
        $(".megamenu .main-menu").addClass("hasHat");
    }

    $(".megamenu > ul > li").click(function () {
        $(this).toggleClass("show");
        $(".megamenu > ul > li").removeClass("active");
        $(this).addClass("active");
        return true;
    });

    $(".megamenu > ul .header_hat").mouseover(function () {
        $(this).toggleClass("show");
        $(".megamenu > ul .header_hat").removeClass("active");
        $(this).addClass("active");
        return true;
    });

    $(".megamenu > ul .header_hat").mouseout(function () {
        $(this).toggleClass("show");
        $(".megamenu > ul .header_hat").removeClass("active");
        return true;
    });

    $(".mobile-menu a.mobile-nav-link").click(function () {
        if ($(this).is("[href]")) {
            $(".mobile-menu").hide(200);
        } else {
            $(this).toggleClass("show");
            $(this).next().slideToggle(500);
        }
    });
}

function setHatHeader() {
    if ($('header.top.fixed').hasClass('opened')) {
        $('.desktop .main-menu-item.header_hat').show();
    }
}

function bold() {
    $('.submenu.symptoms ul li').last().children().children().css('font-weight', 'bold');
};

setHatHeader();

function hideMenu() {
    $("header.top").removeClass("opened");
}

function tablePopUp() {
    var height = $(Window).height - 100;
    $('.table .table-box.show .TableFullPage table').height(height);
}

function toggleMenu() {

    $("header.top").removeClass("searching");
    $("header.top").toggleClass("opened");

    if ($("header.top").hasClass("opened")) {
        if (window.innerWidth < 720) {
            $("body").addClass("popup");
        }
    } else {
        $("body").removeClass("popup");
    }

    $(".megamenu > ul > li").removeClass("active");
    $(".megamenu > ul > li:first-child").addClass("active");

    return false;
}
function setView() {
    $("body").removeClass("mobile tablet desktop");
    if (window.innerWidth < 720) {
        $("body").addClass("mobile");
    } else if ((window.innerWidth < 1024) || ((window.innerWidth < 1280) && (window.devicePixelRatio > 1))) {
        $("body").addClass("tablet");
    } else {
        if ($("body").hasClass("fixed") || $("body").hasClass("fixedNarrowHeader")) {
            $("body").addClass("tablet");
        } else {
            $("body").addClass("desktop");
            menuHoverDelay();
        }
    }

    cookiesScroll();
    go();
}

function printPopupContent() {
    var item = null;
    $("#printContent").html(" ");
    if ($(".media-modal.show").length > 0)
        item = $(".media-modal.show").first();
    else {
        item = $(".table-box.show").first();
    }

    $("#printContent").append($(item).clone());
    window.print();
}

function checkGenericDrugAttr() {

    $('span.genericDrug').filter(function () { return $(this).attr('data-showrollover').toLowerCase() == "false"; }).each(function (index, element) {

        removeDrugFromDrugTable(element);

        $(element).children('span').removeClass('resolvedDrug');
        $(element).children('span').off();
    });

    redrawResourceTable($('.drugs.in-article ul'));
}

function removeDrugFromDrugTable(drug) {
    var drugName = "";
    if ($(drug).children('span').length > 0) {
        drugName = $(drug).children('span').text();
    } else {
        drugName = $(drug).text();
    }

    if (drugName != "") {
        $('.drugs.in-article ul li:contains("' + drugName + '")').remove();
    }
}

function redrawResourceTable(table) {

    if (tableContainsElement(table) == false) {
        $(table).parent().remove();
        return;
    }

    $(table).find('li:even:gt(0)').attr('class', 'odd');
    $(table).find('li:odd').attr('class', 'even');
}

function tableContainsElement(table) {
    if ($(table).find('li').length > 0)
        return true;

    return false;
}

function openSearch() {
    $("#search-header").show().addClass("search-open");
    $('.header-panel .btn-nav').addClass('submit-search');
}

function closeSearch() {
    $("header.top").removeClass("searching");
    $('.header-panel .btn-nav').removeClass('submit-search');
    $("#search-header").hide();
}

function openMobileSearch() {
    $("#search-header").show().addClass("search-open");
}

function closeMobileSearch() {
    $("#search-header").removeClass("search-open").hide();
}

function loseSearchFocus() {
    $(document).on('blur', "#search-header", function (el) {
        if ($(el.target).val() === "" && $(window).width() > 720) {
            closeSearch();
        }
    });
}
function resetSearch() {
    closeMobileSearch();
    closeSearch();
}
function searchToggle() {
    $(document).on('click', '.header-panel .btn-nav', function (e) {
        if ($("header.top").hasClass("opened")) {
            $("header.top").removeClass("opened");
        }
        $("header.top").toggleClass("searching");
        console.log("Search Toggle");
        if ($("header.top").hasClass("searching")) {
            if ($(window).width() > 720) {
                openSearch();
            } else {
                openMobileSearch();
            }
            $("#search-header").focus();
        } else {
            resetSearch();
        }
    });
}

function toggleFilters() {
    $(document).on('click', ".filters h3", function (e) {
        $(e.target).next('form').slideToggle(200);
        $(this).toggleClass("show");
    });
}

function getRelatedItemsMaxHeight() {
    var $relatedItems = $('.related-items .item');
    var relatedElementHeight = $relatedItems.map(function () {
        return $(this).outerHeight();
    }).get();

    var relatedElementMaxHeight = Math.max.apply(null, relatedElementHeight);

    $relatedItems.height(relatedElementMaxHeight);
}
function doMobileCarousels() {
    if (window.innerWidth <= 720) {
        if (!$(".related-items").hasClass("slick-slider")) {
            var countItems = $(".related-items").children().length;
            var loop;
            if (countItems > 2) {
                loop = "true";
            }
            else {
                loop = "false";
            }
            $(".related-items").slick({ autoplay: true, autoplaySpeed: 15000, dots: true, slide: '.item', adaptiveHeight: true, infinite: loop });
            $(".related-items").height(Math.max.apply(null, $(".related-items .item").map(function () {
                return $(this).height();
            }).get()) + 30 + 'px');
            
        }


        if (!$(".featured-articles").hasClass("slick-slider")) {
            $(".featured-articles").height(Math.max.apply(null, $(".featured-articles li").map(function () {
                return $(this).height();            
            }).get()) + 30 + 'px');
            $(".featured-articles").slick({ autoplay: true, autoplaySpeed: 15000, dots: true, slide: 'li', adaptiveHeight: true });
        }
        if (!$(".connect-blocks").hasClass("slick-slider")) {
            $(".connect-blocks").height(Math.max.apply(null, $(".connect-block").map(function () {
                return $(this).height();
            }).get()) + 'px');
            $(".connect-blocks").slick({ autoplay: true, autoplaySpeed: 3500, dots: true });
        }
    } else {
        $(".connect-blocks").unslick();
        $(".featured-articles").height('auto');
        $(".featured-articles").height('auto');
        $(".featured-articles").unslick();
        $(".related-items").height('auto');
        $(".related-items").unslick();
    }
}

function setDesktopSubmenuPosition() {
    var menuHeight = $('.desktop .megamenu').outerHeight();
    var $desktopSubmenu = $('.desktop .megamenu .submenu');
    $desktopSubmenu.css({
        top: menuHeight + 'px'
    });

    var desktopItems = $('.desktop .main-menu > .main-menu-item:not(.header_hat)');
    var elementPosition = 1;
    desktopItems.each(function () {
        var submenu = $(this).children(".submenu");
        if ($(this).hasClass("menuEdge")) {
            if ($(this).hasClass("leftSide")) {
                submenu.css({ left: 0 });
                elementPosition++;
            }
            if ($(this).hasClass("rightSide")) {
                submenu.css({ right: 0 });
                elementPosition++;
            }
            
        }
        else if ($(this).hasClass("itemEdge")) {
            if ($(this).hasClass("leftSide")) {
                submenu.css({ left: $(this).position().left + "px" });
                elementPosition++;
            }
            if ($(this).hasClass("rightSide")) {

                /* Recalculate the right for the submenu element when we introduce the Home Icon to main menu: -1 for Home icon width and -2 for border of Home icon */
                submenu.css({ right: (($('.desktop .main-menu > .main-menu-item:not(.header_hat)').size() - (elementPosition + 1)) * $(this).outerWidth()) - ($(".main-menu-item.home-page").outerWidth() + 2) });
                elementPosition++;
            }
}
    });
}
/* lazyLoad for images
function lazyLoad(image) {
    var element;
    if (image) {
        element = image;
        if($(element).hasClass("lazyImage")){
            $(element).unveil(0, function () {
                $(this).css("opacity", "1");
                $(this).removeClass("lazyImage");
            });
        }
    }
    else{
        element = "img.lazyImage"; 
        $(element).unveil(0, function () {
            $(this).css("opacity", "1");
            $(this).removeClass("lazyImage");
        });
    }


}   
*/
    

function setQuizContainerHeight() {
    var $quizWrapper = $('.quiz-wrapper');
    var quizWrapperHeight = $quizWrapper.outerHeight();
    var quizHeaderHeight = $('.quiz-title-container').outerHeight();
    var quizHeaderHeightWithMargin = $('.quiz-title-container').outerHeight({ margin: true });
    var $quizContainer = $('.quiz-container');

    if ($quizWrapper.hasClass("item")) {
        $quizContainer.css({
            height: (quizWrapperHeight - quizHeaderHeight) + 'px'
        });
    } else {
        $quizContainer.css({
            height: (quizWrapperHeight - quizHeaderHeightWithMargin) + 'px'
        });
    }
}

function getCorrectQuizzesUrlWithLanguages(mediaUrl, hostUrl) {
    var lang = window.location.pathname.split("/")[1];
    if (hostUrl.indexOf("vetmanual") < 0) {
        if (lang !== "home" && lang !== "professional") {
            mediaUrl = window.location.origin.indexOf("msdmanuals.cn") < 0 ? hostUrl + "/" + lang + "&language=" + lang : hostUrl + "&language=" + lang;
        }
        else {
            mediaUrl = window.location.origin.indexOf("msdmanuals") < 0 ? hostUrl + "&language=en-us" : hostUrl + "&language=en";
        }
    }
    else {
        mediaUrl = lang.indexOf("en-") < 0 ? hostUrl + "&language=" + lang : hostUrl + "/" + lang + "&language=" + lang;
    }
    return mediaUrl;
}

function openMenu() {
    $(this).find('.submenu').css('display', 'block');
};
function closeMenu() {
    $(this).find('.submenu').hide();
};
    
function menuHoverDelay() {
    var $mainMenuItem = $('.main-menu-item');
    if (!$('header.top').hasClass('fixed')) {
        $mainMenuItem.hoverIntent(openMenu, closeMenu);
    }   
}
function removeHoverIntent() {
    var $mainMenuItem = $('.main-menu-item');
    $mainMenuItem.unbind("mouseenter").unbind("mouseleave");
    $mainMenuItem.removeProp('hoverIntent_t');
    $mainMenuItem.removeProp('hoverIntent_s');
}
function setIphoneFixedFix() {
    var pixelRatio = window.devicePixelRatio || 1;
    var iPhone = /iPhone/i.test(navigator.userAgent);
    var iPhone4 = (iPhone && pixelRatio == 2);
    var iPhone5 = /iPhone OS 5_0/i.test(navigator.userAgent);
    if (iPhone5 || iPhone4) {
        /* some ipone ugly hacks */
        $(document)
        .on('focus', 'input', function () {
            $("html").addClass('fixfixed');
            MManual.scroll.saveScroll();
            setTimeout(function () { $(window).scrollTop(0) }, 200);
        })
        .on('blur', 'input', function () {
            $("html").removeClass('fixfixed');
            MManual.scroll.bringScroll();
        });
    }

}

function loadPrintPreview() {
    var links = document.getElementsByTagName('link');
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        if (link.getAttribute('media') === 'screen') {
            link.setAttribute('media', 'screen and print');
        }
        if (link.getAttribute('media') === 'print' && link.getAttribute('href').indexOf("mmanualcssprint") > 0) {
            link.setAttribute('media', 'all');
        }
    }
}

function printOutputInfobutton() {
    var requestUrl = window.location.href;
    if (requestUrl.indexOf("?media=print") > 0) {
        window.loadPrintPreview();
    }
}

$(document).ready(function () {

    $(".menu-hide-overlay").click(hideMenu);
    setView();
    go();
    addMenuActions();
    doMobileCarousels();
    searchToggle();
    loseSearchFocus();
    getRelatedItemsMaxHeight();
    setQuizContainerHeight();
    setDesktopSubmenuPosition();
    //toggleFilters();
    bold();
    setIphoneFixedFix();
    printOutputInfobutton();
    prepareLangUrl();
    $(window).on("scroll", function () {
        if (window.innerWidth >= 1024) {
            if (($(window).scrollTop() > 146) && !$("body").hasClass("fixedNarrowHeader") && ($(document).height() > window.innerHeight + 184)) {
                removeHoverIntent();
                $("header.top").addClass("fixed");
                $(".top-header-menu").hide();
                $("body").addClass("fixed");
                if ($("body").hasClass("desktop")) {
                    $("body").removeClass("desktop");
                    $("body").addClass("tablet");
                }
            } else {
                setView();
                $("header.top").removeClass("fixed");
                $(".top-header-menu").show();
                $("body").removeClass("fixed");
                $("header.top").removeClass("opened");
                setTimeout(setView, 50);
            }
            setDesktopSubmenuPosition();
        }
        else if ($(window).scrollTop() < _lscroll) {
            $("header.top").addClass("fixed");
            $("body").addClass("fixed");
        }
        _lscroll = $(window).scrollTop();
    });

    $(window).on("resize", function () {
        setView();
        doMobileCarousels();
        getRelatedItemsMaxHeight();
        setQuizContainerHeight();
        setDesktopSubmenuPosition();
    });
    $(window).on("orientationchange", function (event) {
        if ($(".featured-articles").hasClass("slick-slider")) {
                $(".featured-articles").height(Math.max.apply(null, $(".featured-articles li").map(function () {
                
                return $(this).height();

            }).get()) + 30 + 'px');
            $(".featured-articles").slick({ autoplay: true, autoplaySpeed: 15000, dots: true, slide: 'li', adaptiveHeight: true });
        }
    });
   
    $("#content a[href^='http://']").attr("target", "_blank");

    $(document).keydown(function (e) {
        if (e.keyCode == 27) {
            hideMenu();
        }
    });

    setQuizFontSize();

    MManual.lists.makeCollapsable();

    $("#languageSelector").selectbox({
        onOpen: function (inst) {
            //console.log("open", inst);
        },
        onClose: function (inst) {
            //console.log("close", inst);
        },
        onChange: function (val, inst) {
            window.languageSelector.redirect(val);
        },
        effect: "slide"
    });
    $(".globe-icon").prependTo('.sbHolder');

});

setView();

addMenuActions();

function removePreloader(element) {
    $(element).removeClass('has-preloader');
}
function prepareLangUrl() {
    var regex = /^\/\w{2}\//;
    if ($('#currentLanguage').val() !== undefined) {
        var siteLang = $('#currentLanguage').val().toLowerCase();
        if (siteLang.match("[a-z]{2}-[a-z]{2}")
            && siteLang !== 'zh-cn'
            && siteLang !== 'en-us'
            && siteLang !== 'en') {
            $('.content a').each(function () {
                $(this).attr('href', function (index, value) {
                    if (value !== undefined && value.substr(0, 1) == "/" && !value.substr(1, 5).match("[a-z]{2}-[a-z]{2}")) {
                        return "/" + siteLang + value.replace(regex, "/");
                    }
                });
            });
        }
    }
};
/*** Define splash screen utility class ***/

var SplashScreenManager = function () {
    var splashSelector = '.splash-screen';
    var delayMillisecons = 150;
    var fadeInMilliseconds = 50;
    var fadeOutMilliseconds = 50;

    var counter = 0;

    this.show = function () {
        if (++counter > 1) {
            // already visible
            return;
        }

        setTimeout(function() {
            if (counter > 0) {
                // if still should show the splash screen
                $(splashSelector).fadeIn(fadeInMilliseconds);
            }
        }, delayMillisecons);
    }

    this.hide = function(forceHide) {
        if (counter > 0) {
            counter = forceHide ? 0 : counter - 1;
            if (counter == 0) {
                $(splashSelector).fadeOut(fadeOutMilliseconds);
            }
        }
    }
};

/*** Register globally available object ***/

(function (mManual) {
    mManual.splashScreen = new SplashScreenManager();
}(window.MManual = window.MManual || {}));

/*** Register handlers ***/

$(document).ajaxSend(function (event, jqxhr, settings) {
    if (settings.showSplashScreen === true) {
        window.MManual.splashScreen.show();
    }
});

$(document).ajaxComplete(function (event, jqxhr, settings) {
    if (settings.showSplashScreen === true) {
        window.MManual.splashScreen.hide(false);
    }
});

$(document).ajaxStop(function () {
    window.MManual.splashScreen.hide(true);
});;
/* 
  * To Title Case 2.1 – http://individed.com/code/to-title-case/
  * Copyright © 2008–2013 David Gouch. Licensed under the MIT License.
 */
String.prototype.toTitleCase = function () {
    var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i;

    return this.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function (match, index, title) {
        if (index > 0 && index + match.length !== title.length &&
          match.search(smallWords) > -1 && title.charAt(index - 2) !== ":" &&
          (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') &&
          title.charAt(index - 1).search(/[^\s-]/) < 0) {
            return match.toLowerCase();
        }

        if (match.substr(1).search(/[A-Z]|\../) > -1) {
            return match;
        }

        return match.charAt(0).toUpperCase() + match.substr(1);
    });
};


if (!Date.prototype.toISOString) {
    (function () {
        function pad(number) {
            var r = String(number);
            if (r.length === 1) {
                r = '0' + r;
            }
            return r;
        }
        Date.prototype.toISOString = function () {
            return this.getUTCFullYear()
                + '-' + pad(this.getUTCMonth() + 1)
                + '-' + pad(this.getUTCDate())
                + 'T' + pad(this.getUTCHours())
                + ':' + pad(this.getUTCMinutes())
                + ':' + pad(this.getUTCSeconds())
                + '.' + String((this.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5)
                + 'Z';
        };
    }());
}

(function (MManual) {

    MManual.utils = {

        addDaysToDate: function(date, days) {
            var value = date.valueOf();
            value += 86400000 * days;
            return new Date(value);
        },

        /** Returns currently executing script **/
        getCurrentScript: function() {
            var currentScript = document.currentScript;
            if (!currentScript) {
                // IE workaround
                var scripts = document.getElementsByTagName("script");
                currentScript = scripts[scripts.length - 1];
            }
            return currentScript;
        },

        getCurrentEdition: function() {
            var editionMetaTag = $("meta[name='edition']").attr('content');
            return editionMetaTag;
        },

        getUrlParameter: function (paramName) {
            if (!paramName) {
                return null;
            }

            paramName = paramName.toLowerCase();
            var uri = new URI(window.location.href.toLowerCase());
            var params = uri.search(true);
            if (!params || !params[paramName]) {
                return null;
            }
            return params[paramName];
        },

        updateURLParameter: function  (url, param, paramVal) {
            var TheAnchor = null;
            var newAdditionalURL = "";
            var tempArray = url.split("?");
            var baseURL = tempArray[0];
            var additionalURL = tempArray[1];
            var temp = "";
            if (additionalURL) 
            {
                var tmpAnchor = additionalURL.split("#");
                var TheParams = tmpAnchor[0];
                TheAnchor = tmpAnchor[1];
                if(TheAnchor)
                    additionalURL = TheParams;

                tempArray = additionalURL.split("&");

                for (i=0; i<tempArray.length; i++)
                {
                    if(tempArray[i].split('=')[0] != param)
                    {
                        newAdditionalURL += temp + tempArray[i];
                        temp = "&";
                    }
                }        
            }
            else
            {
                var tmpAnchor = baseURL.split("#");
                var TheParams = tmpAnchor[0];
                TheAnchor  = tmpAnchor[1];

                if(TheParams)
                    baseURL = TheParams;
            }
            if(TheAnchor)
                paramVal += "#" + TheAnchor;

            var rows_txt = temp + "" + param + "=" + paramVal;
            return baseURL + "?" + newAdditionalURL + rows_txt;
        },

        replaceState: function (data, clearIfFalsyValue) {
            if (!data || !history || !history.replaceState) {
                return;
            }

            var uri = new URI(window.location.href.toLowerCase());
            for (var p in data) {
                if (p && data.hasOwnProperty(p)) {
                    var value = data[p];
                    p = p.toLowerCase();
                    if (value || !clearIfFalsyValue) {
                        if (typeof value === "string") {
                            value = value.toLowerCase();
                        }
                        uri.setSearch(p, value);
                    } else {
                        uri.removeSearch(p);
                    }
                }
            }

            try {
                var currentState = history.state;
                history.replaceState(currentState, '', uri.href());
            } catch (e) {
                if (console && console.error) {
                    console.error(e);
                }
            }
        },

        getInnerWidth: function () {
            var width = window.innerWidth || document.documentElement.clientWidth;
            return width;
        },

        getInnerHeight: function () {
            var height = window.innerHeight || document.documentElement.clientHeight;
            return height;
        },
        getMaxWidth: function() {
            var width = window.innerWidth || document.documentElement.clientWidth;
            if (width > 1200) {
                return 1200;
            }
            return width - 28;
        },
        getVideoWidth: function () {
            var width = window.innerWidth || document.documentElement.clientWidth;
            if (width > 1200) {
                return 700;
            }
            if (window.innerHeight > window.innerWidth) {
                return Math.floor(width * 0.9);
            }
            return Math.floor(width*0.55);
        },




        setHttpsProtocolIfSecureConnection: function (url) {
            //return url;

            // TODO: Uncomment when https fixed

            if (!url || window.location.protocol.toLowerCase() != "https:") {
                return url;
            }
            // HTTPS
            var startIndex = url.indexOf('://');
            if (startIndex < 0) {
                return url;
            }
            var result = 'https' + url.substr(startIndex);
            return result;
        }
    };

    MManual.lists = {
        makeCollapsable: function () {
            $(".content").on('click', '.list-view li.has-children > span,.list-view li.has-children > i', function (e) {
                $(this).parent().toggleClass("open");
                            e.preventDefault();
            });
        }
    }

    MManual.scroll = {
        scrollPosition: 0,
        bringScroll: function () {
            $(document).scrollTop(MManual.scroll.scrollPosition);
        },

        saveScroll: function () {
            if (!$("body").hasClass("popup")) {
                MManual.scroll.scrollPosition = (window.pageYOffset || document.documentElement.scrollTop) - (document.documentElement.clientTop || 0);;
            }
        },

    };
    MManual.letterPaginator = {

        ChangeLetter: function (letterObject) {
            $(letterObject).siblings()
                $(".letter-pager a").removeClass("active");
                $(letterObject).addClass("active");
                $('html, body').animate({ scrollTop: 0 }, '1000');

                var element = $(".letter-pager a");
                var index = element.index(letterObject);

                if (index < numberOfLetters) {
                    var nextElement = element.eq(index + numberOfLetters);

                    nextElement.addClass("active");

                } else {

                    var nextElement = element.eq(index - numberOfLetters);

                    nextElement.addClass("active");
                }
            },
        create: function(elem) {
            var innerHtml = "";
            for (var i = 0; i < alphabet.length; i++) {
                innerHtml += '<a >' + alphabet[i] + '</a>';
            }
            $(elem).html(innerHtml);
            $(elem).find("a").click(function () {
                ChangeLetter(this);
            });
        },



    };

}(window.MManual = window.MManual || {}));

$.fn.hasAttr = function (name) {
    return this.attr(name) !== undefined;
};

function ValidUrl(url) {
    var jqxhr = $.ajax({
        type: "GET",
        url: url,
        cache: false,
        async: false
    });

    if (jqxhr.status === 200)
        return true;

    return false;
}
;
$().ready(function () {
    var searchAdress = $(".search-panel").attr("searchAdress");
    $("#search-input, #search-header").each(function () {
        $(this).autocomplete({
            source: function (request, response) {
                jQuery.get(searchAdress, {
                    query: request.term
                }, function (data) {
                    var json = jQuery.parseJSON(data);
                    response(json);
                });
            },
            minLength: 3,
            open: function () { $(".ui-autocomplete").width($(this).outerWidth()); },
            select: function (event, ui) {
                if (ui.item) {
                    $(event.target).val(ui.item.value);
                }
                $(event.target.form).submit();
            }
        });
    });

});;
var RecentNewsWidgetViewModel = function (initialItems, lazyLoadItems, lazyLoadSteps, recentNewsServiceUrl, viewAllUrl, campaignSourceParamName, campaignSource, cacheResponse) {
    var self = this;

    var notInitializedStepNumber = -1;
    var resetStepNumber = -2;

    var currentStepUrlParam = 'newspage';
    var selectedTypeUrlParam = 'newstype';
    var selectedTimeRangeUrlParam = 'newsrange';

    var originalSelectedTypeFromUrl = MManual.utils.getUrlParameter(selectedTypeUrlParam) || '';
    var originaltSelectedTimeRangeFromUrl = MManual.utils.getUrlParameter(selectedTimeRangeUrlParam) || '';

    self.viewAllUrl = viewAllUrl;
    self.items = ko.observableArray([]);
    self.hasMore = ko.observable(true);
    self.currentStep = ko.observable(notInitializedStepNumber);
    self.selectedType = ko.observable(originalSelectedTypeFromUrl);
    self.selectedTimeRange = ko.observable(originaltSelectedTimeRangeFromUrl);

    self.loading = ko.observable(true);
    self.error = ko.observable(false);

    self.showMoreVisible = ko.pureComputed(function() {
        return self.hasMore() && (!lazyLoadSteps || lazyLoadSteps < 0 || self.currentStep() < lazyLoadSteps);
    }, self);

    var resetProgress = function () {
        self.items.removeAll();
        self.hasMore(true);
        self.currentStep(resetStepNumber);
    };

    var getStartIndex = function () {
        var currentStep = self.currentStep();
        return currentStep < 0 ? 0 : (initialItems + currentStep * lazyLoadItems);
    };

    var getItemsToLoad = function() {
        var currentStep = self.currentStep();
        if (currentStep == notInitializedStepNumber) {
            // check url parameter
            var queryStep = MManual.utils.getUrlParameter(currentStepUrlParam);
            if (queryStep) {
                var queryStepNum = parseInt(queryStep);
                queryStepNum = (!lazyLoadSteps || lazyLoadSteps < 0) ? queryStepNum : ((queryStepNum < lazyLoadSteps) ? queryStepNum : lazyLoadSteps);
                if (queryStepNum >= 0) {
                    self.currentStep(queryStepNum - 1);
                    return initialItems + (queryStepNum * lazyLoadItems);
                }
            }
        }

        return currentStep < 0 ? initialItems : lazyLoadItems;
    };

    var updateCurrentStep = function () {
        var currentStep = self.currentStep();
        var newStep = (currentStep == notInitializedStepNumber || currentStep == resetStepNumber) ? 0 : (currentStep + 1);
        self.currentStep(newStep);

        var param = {};
        param[currentStepUrlParam] = self.currentStep();
        MManual.utils.replaceState(param, true);
    };

    var prepareResultItem = function (item) {
        item.Date = (item.PublishDate) ? moment(item.PublishDate).format('MMM Do, YYYY') : '';
        if (campaignSource && item.PublicUrl) {
            var uri = new URI(item.PublicUrl);
            uri.setSearch(campaignSourceParamName, campaignSource);
            item.PublicUrl = uri.href();
        }
        return item;
    };

    var getStartDateIsoString = function () {
        var date = new Date();
        var selectedTimeRange = self.selectedTimeRange();
        switch (selectedTimeRange) {
            case 'day':
                return MManual.utils.addDaysToDate(date, -1).toISOString();
            case 'week':
                return MManual.utils.addDaysToDate(date, -7).toISOString();
            case 'month':
                return MManual.utils.addDaysToDate(date, -31).toISOString();
        }
        return null;
    }

    var getEndDateIsoString = function () {
        var selectedTimeRange = self.selectedTimeRange();
        if (!selectedTimeRange) {
            return null;
        }
        return (new Date()).toISOString();
    }

    self.load = function () {
        self.loading(true);

        $.ajax({
            showSplashScreen: true,
            type: 'GET',
            dataType: 'json',
            cache: false,
            url: recentNewsServiceUrl,
            data: {
                startIndex: getStartIndex(),
                itemsToLoad: getItemsToLoad(),
                type: self.selectedType(),
                from: getStartDateIsoString(),
                to: getEndDateIsoString(),
                cacheResponse: cacheResponse
            }
        }).done(function (data) {
            self.hasMore(data.HasMore);

            var itemsToAdd = [];
            for (var i = 0; i < data.Items.length; i++) {
                var item = prepareResultItem(data.Items[i]);
                itemsToAdd.push(item);
            }
            self.items.push.apply(self.items, itemsToAdd);

            updateCurrentStep();
            self.error(false);
            
        }).fail(function (jqxhr, textStatus) {
            // TODO: Nicer error handling
            self.error(true);
        }).always(function () {
            self.loading(false);
           
        });
    };
    self.chackIconographics = function() {
        if ($(".latest-news.homepage .cross-promo").length > 0 && $(".latest-news.homepage .news-list").length > 0) {
            $(".latest-news.homepage .cross-promo figure").css("max-height", $(".latest-news.homepage .news-list").height() + "px");
        }

    };
    self.selectedType.subscribe(function (newValue) {
        var param = {};
        param[selectedTypeUrlParam] = newValue;
        MManual.utils.replaceState(param, true);

        resetProgress();
        self.load();
    });

    self.selectedTimeRange.subscribe(function (newValue) {
        var param = {};
        param[selectedTimeRangeUrlParam] = newValue;
        MManual.utils.replaceState(param, true);

        resetProgress();
        self.load();
    });
};
var MediaWidgetViewModel2 = function (mediaServiceUrl, mediaTypes, contentTypes, campaignSourceUrlParam, campaignSource, externalPageUrl) {
    var self = this;

    var constants = {
        campaignSourceUrlParam: campaignSourceUrlParam,
        externalPageUrl: externalPageUrl
    };

    var urlParams = {
        keyword: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.keywordUrlParam),
        section: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.sectionUrlParam),
        viewMode: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.viewModeUrlParam),
        sortOrder: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.sortOrderUrlParam),
        pageNumber: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.pageNumberUrlParam),
        pageSize: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.pageSizeUrlParam),
        selectedContentTypes: MManual.utils.getUrlParameter(window.MediaWidgetSettings.urlParams.selectedContentTypesUrlParam)
    };

    self.originalValues = {
        mediaServiceUrl: mediaServiceUrl,
        mediaTypes: mediaTypes,
        contentTypes: contentTypes,
        campaignSource: campaignSource,
        keyword: urlParams.keyword ? urlParams.keyword.toLowerCase() : null,
        section: urlParams.section ? urlParams.section.toLowerCase() : null,
        viewMode: window.MediaWidgetSettings.getViewMode(urlParams.viewMode, window.MediaWidgetSettings.urlParams.viewModeUrlParam),
        sortOrder: window.MediaWidgetSettings.getSortOrder(urlParams.sortOrder),
        pageNumber: !urlParams.pageNumber || isNaN(urlParams.pageNumber) || parseInt(urlParams.pageNumber) <= 0 ? 1 : parseInt(urlParams.pageNumber),
        pageSize: window.MediaWidgetSettings.getPageSize(!urlParams.pageSize || isNaN(urlParams.pageSize) ? null : parseInt(urlParams.pageSize)),
        selectedContentTypes: !urlParams.selectedContentTypes ? [] : (typeof urlParams.selectedContentTypes === "string" ? [urlParams.selectedContentTypes.toLowerCase()] : Enumerable.From(urlParams.selectedContentTypes).Where(function(x) { return !!x; }).Select(function(x) { return x.toLowerCase(); }).ToArray())
    };

    self.mediaServiceUrl = self.originalValues.mediaServiceUrl;
    self.mediaTypes = self.originalValues.mediaTypes;
    self.contentTypes = self.originalValues.contentTypes;
    self.campaignSource = self.originalValues.campaignSource;
    self.keyword = ko.observable(self.originalValues.keyword);
    self.section = ko.observable(self.originalValues.section);
    self.viewMode = ko.observable(self.originalValues.viewMode);
    self.sortOrder = ko.observable(self.originalValues.sortOrder);
    self.pageNumber = ko.observable(self.originalValues.pageNumber);
    self.pageSize = ko.observable(self.originalValues.pageSize);
    self.selectedContentTypes = ko.observableArray(self.originalValues.selectedContentTypes);
    self.selectedContentTypes.subscribe(function () {
        self.loadAllContentTypes(self.selectedContentTypes().length === 0);
    });
    self.loadAllContentTypes = ko.observable(self.selectedContentTypes().length === 0);
    self.loadAllContentTypes.subscribe(function (newValue) {
        if (newValue) {
            self.selectedContentTypes.removeAll();
        }
        if (self.selectedContentTypes().length === 0) {
            self.loadAllContentTypes(true);
        }
    });

    self.totalNumberOfItems = ko.observable(0);
    self.totalNumberOfPages = ko.observable(0);
    var loadedItems = [];
    self.pageItems = ko.observableArray([]);
    self.columnItems = [
        ko.observableArray([]),
        ko.observableArray([]),
        ko.observableArray([])
    ];

    self.loading = ko.observable(false);
    self.error = ko.observable(false);

    self.pager = ko.observableArray([]);

    var setupPager = function () {
        // Update page number
        var currentPageNumber = self.pageNumber();
        var numberOfPages = (self.totalNumberOfItems() % self.pageSize()) === 0
            ? Math.floor(self.totalNumberOfItems() / self.pageSize())
            : (Math.floor(self.totalNumberOfItems() / self.pageSize()) + 1);
        self.totalNumberOfPages(numberOfPages);
        if (currentPageNumber > numberOfPages) {
            currentPageNumber = numberOfPages;
            self.pageNumber(numberOfPages);
        }

        self.pager.removeAll();
        if (self.pageSize() === window.MediaWidgetSettings.allValue || self.pageSize() >= self.totalNumberOfItems()) {
            return;
        }

        var pagerTemp = [];
        // Add first and last page
        pagerTemp.push({ type: "page", value: 1, isCurrentPage: currentPageNumber === 1 });
        pagerTemp.push({ type: "page", value: numberOfPages, isCurrentPage: currentPageNumber === numberOfPages });
        // Add current page
        pagerTemp.push({ type: "page", value: currentPageNumber, isCurrentPage: true });
        // Add previous and next page
        if (currentPageNumber - 1 > 1) {
            pagerTemp.push({ type: "page", value: currentPageNumber - 1, isCurrentPage: false });
        }
        if (currentPageNumber + 1 < numberOfPages) {
            pagerTemp.push({ type: "page", value: currentPageNumber + 1, isCurrentPage: false });
        }

        // Sort and remove duplicates
        pagerTemp = Enumerable.From(pagerTemp).GroupBy(function (x) { return x.value }, null, function(key, g) { return g.First() }).OrderBy(function (x) { return x.value }).ToArray();

        // Insert separators
        var nextPage = pagerTemp[pagerTemp.length - 1];
        for (var i = pagerTemp.length - 2; i >= 0; i--) {
            var currentPage = pagerTemp[i];
            if (currentPage.value < nextPage.value - 1) {
                // Insert separator
                pagerTemp.splice(i + 1, 0, { type: "separator" });
            }
            nextPage = currentPage;
        }

        // Replace pager
        self.pager(pagerTemp);
    };

    var goToPage = function(number) {
        self.pageNumber(number);
        self.submit(true);
    }

    self.loadPage = function (data) {
        goToPage(data.value);
    };

    self.loadPreviousPage = function() {
        goToPage(self.pageNumber() - 1);
    };

    self.loadNextPage = function () {
        goToPage(self.pageNumber() + 1);
    };

    var pagingUnavalilable = function (vMode) {
        var vm = vMode || self.viewMode();
        return vm === window.MediaWidgetSettings.viewModeSection || vm === window.MediaWidgetSettings.viewModeList;
    };

    var propagateParam = function (uri, isClientSideUpdate, newViewMode, paramName, paramValue) {
        var param = {};
        var validParams = window.MediaWidgetSettings.validParams[newViewMode];
        if (!validParams || !validParams[paramName]) {
            // Remove just in case
            if (isClientSideUpdate) {
                param[paramName] = null;
                MManual.utils.replaceState(param, true);
            } else {
                uri.removeSearch(paramName);
            }
            return;
        }
        if (paramValue) {
            if (isClientSideUpdate) {
                param[paramName] = paramValue;
                MManual.utils.replaceState(param, true);
            } else {
                uri.setSearch(paramName, paramValue);
            }
        } else {
            if (isClientSideUpdate) {
                param[paramName] = null;
                MManual.utils.replaceState(param, true);
            } else {
                uri.removeSearch(paramName);
            }
        }
    };

    var propagateAllParams = function (uri, isClientSideUpdate, newViewMode, skipPageNumberReset) {
        propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.viewModeUrlParam, newViewMode);
        propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.sortOrderUrlParam, self.sortOrder());
        propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.sectionUrlParam, self.section());
        propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.keywordUrlParam, self.keyword());
        propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.selectedContentTypesUrlParam, self.selectedContentTypes());
        if (pagingUnavalilable()) {
            propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.pageNumberUrlParam, null);
            propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.pageSizeUrlParam, null);
        } else {
            var shouldLoadAllItems = self.pageSize() === window.MediaWidgetSettings.allValue;
            if (skipPageNumberReset) {
                propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.pageNumberUrlParam, shouldLoadAllItems ? null : self.pageNumber());
            } else {
                propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.pageNumberUrlParam, shouldLoadAllItems ? null : 1);
            }
            propagateParam(uri, isClientSideUpdate, newViewMode, window.MediaWidgetSettings.urlParams.pageSizeUrlParam, self.pageSize());
        }
    }

    self.setViewMode = function(viewMode) {
        viewMode = window.MediaWidgetSettings.getViewMode(viewMode);
        if (viewMode === self.viewMode()) {
            return;
        }

        window.MediaWidgetSettings.saveViewModePreference(viewMode);

        var uri = new URI(window.location.href).search("");
        propagateAllParams(uri, false, viewMode, false);

        window.location.href = uri.href();
    };

    self.isPagerVisible = function() {
        return !pagingUnavalilable();
    }

    var shouldGroupBySection = function () {
        return self.viewMode() === window.MediaWidgetSettings.viewModeSection || self.sortOrder() === window.MediaWidgetSettings.sortOrderBySection;
    };

    var shouldUseClientSideFilters = function() {
        return self.viewMode() === window.MediaWidgetSettings.viewModeSection;
    };

    var getPageIndexToLoad = function() {
        return pagingUnavalilable() ? null : self.pageNumber() - 1;
    }

    var getPageSizeToLoad = function () {
        return pagingUnavalilable() ? null : self.pageSize();
    }

    var getSectionToLoad = function () {
        return shouldUseClientSideFilters() ? null : self.section();
    }

    var getKeywordToLoad = function () {
        return shouldUseClientSideFilters() ? null : self.keyword();
    }

    var getSelectedContentTypesToLoad = function() {
        return shouldUseClientSideFilters() ? null : self.selectedContentTypes();
    }

    var getSortOrder = function () {
        return self.viewMode() === window.MediaWidgetSettings.viewModeSection ? window.MediaWidgetSettings.sortOrderBySection : self.sortOrder();
    }

    var prepareResultsGroupedBySection = function (rawItems) {
        var selectedSection = self.section();
        var result = [];
        var groups = {};
        var itemsWithoutSection = [];
        for (var i = 0; i < rawItems.length; i++) {
            var item = rawItems[i];
            if (!item.Sections || item.Sections.length === 0) {
                itemsWithoutSection.push(item);
            } else {
                for (var s = 0; s < item.Sections.length; s++) {
                    var section = item.Sections[s];
                    if (selectedSection && selectedSection.toLowerCase() !== section.Key.toLowerCase()) {
                        // If a section filter is applied, do not display other sections
                        continue;
                    }

                    if (!groups[section.Key]) {
                        groups[section.Key] = { sectionName: section.Value, items: [] };
                    }
                    groups[section.Key].items.push(item);
                }
            }
        }

        for (var prop in groups) {
            if (groups.hasOwnProperty(prop)) {
                var g = groups[prop];
                result.push({ sectionName: g.sectionName, items: Enumerable.From(g.items).OrderBy(function (x) { return !!x ? x.Title.toLowerCase() : ""; }).ToArray() });
            }
        }
        if (itemsWithoutSection.length > 0) {
            result.push({ sectionName: window.MediaWidgetSettings.noGroup, items: Enumerable.From(itemsWithoutSection).OrderBy(function (x) { return !!x ? x.Title.toLowerCase() : ""; }).ToArray() });
        }

        return result.sort(languageAwareSectionSort);
        // return Enumerable.From(result).OrderBy(function (x) { return x.sectionName === window.MediaWidgetSettings.noGroup ? "洖洖洖" : x.sectionName; }).ToArray();
    }

    var languageAwareSectionSort = function (a, b) {
        if (a.sectionName === window.MediaWidgetSettings.noGroup) {
            // Always sort last 
            return 1;
        } else if (b.sectionName === window.MediaWidgetSettings.noGroup) {
            // Always sort last 
            return -1;
        } else {
            if (typeof Intl !== 'undefined' && typeof Intl.Collator !== 'undefined' && document.documentElement.lang) { // Language aware sorting is supported by browser
                var language = document.documentElement.lang;
                return new Intl.Collator(language).compare(a.sectionName, b.sectionName);
            } else {
                // Default to the localCompare that comes in browser
                return a.sectionName.localeCompare(b.sectionName);
            }
        }
    }

    var prepareResults = function (rawItems) {
        var items = [];
        for (var i = 0; i < rawItems.length; i++) {
            var item = rawItems[i];
            items.push(item);
        }

        return [{ sectionName: window.MediaWidgetSettings.noGroup, items: items }];
    }

    var populateColumns = function (items) {
        self.columnItems[0]([]);
        self.columnItems[1]([]);
        self.columnItems[2]([]);

        if (!items || items.length === 0) {
            return;
        }
        if (items.length === 1) {
            self.columnItems[0](items[0]);
            return;
        }
        var columnSize = Math.round(items.length / 3);

        self.columnItems[0](items.slice(0, columnSize));
        self.columnItems[1](items.slice(columnSize, 2 * columnSize));
        self.columnItems[2](items.slice(2 * columnSize, items.length));
    }

    var applyServerSideFilters = function(skipPageNumberReset) {
        var uri = new URI(window.location.href).search("");
        propagateAllParams(uri, false, self.viewMode(), skipPageNumberReset);

        window.location.href = uri.href();
    };

    var applyClientSideFilters = function () {
        var kw = self.keyword();
        kw = !kw ? null : kw.toLowerCase();
        var sec = self.section();
        sec = !sec ? null : sec.toLowerCase();
        var contentTypes = Enumerable.From(self.selectedContentTypes() || []).Select(function (ct) { return ct.toLowerCase() }).ToArray();
        var contentTypesEnumerable = Enumerable.From(contentTypes);
        var filteredItems = !loadedItems ? [] : Enumerable.From(loadedItems)
            .Where(function(x) { return !kw || (!!x.Title && x.Title.toLowerCase().indexOf(kw) >= 0) })
            .Where(function (x) { return !sec || (!!x.Sections && Enumerable.From(x.Sections).Any(function (s) { return !!s && s.toLowerCase() === sec; })); })
            .Where(function(x) { return !contentTypes || contentTypes.length === 0 || contentTypesEnumerable.Any(function(ct) { return !!x.ContentType && ct === x.ContentType.toLowerCase() })})
            .ToArray();

        var items = shouldGroupBySection()
                ? prepareResultsGroupedBySection(filteredItems)
                : prepareResults(filteredItems);

        propagateAllParams(null, true, self.viewMode(), true);
        self.pageItems(items);
        populateColumns(items);
        self.totalNumberOfItems(Enumerable.From(items).Sum(function(x) {return x.items.length}));
    }

    self.submit = function (skipPageNumberReset) {
        if (shouldUseClientSideFilters()) {
            applyClientSideFilters();
        } else {
            applyServerSideFilters(skipPageNumberReset);
        }
    }

    self.reset = function() {
        self.keyword("");
        self.section("");
        self.sortOrder(window.MediaWidgetSettings.defaultSortOrder);
        self.pageNumber(1);
        self.pageSize(window.MediaWidgetSettings.defaultPageSize);
        self.selectedContentTypes.removeAll();
    }

    var prepareResultItem = function(item) {
        if (self.campaignSource) {
            var uri = null;
            if (item.MediaType === "ExternalPage") {
                uri = new URI(constants.externalPageUrl);
                uri.setSearch("frameUrl", item.MediaUrl);
            } else if (item.MediaType !== "Video") {
                uri = new URI(item.MediaUrl);
            }
            if (uri) {
                uri.setSearch(constants.campaignSourceUrlParam, self.campaignSource);
                item.MediaUrl = uri.href();
            }
        }
        var vm = self.viewMode();
        var templateName = "mediawidget-" + item.MediaType.toLowerCase()
            + (vm === window.MediaWidgetSettings.viewModeSection || vm === window.MediaWidgetSettings.viewModeList ? "-list" : "")
            + "-template";
        //change to provide language in base URL for Quizzes under resources page
        SetQuizzesLinksPerLanguages (item,templateName) ;
        return item;
    };
    function SetQuizzesLinksPerLanguages(item, templateName) {
        item.TemplateName = templateName;
        var hostUrl = item.MediaUrl.split("=")[0] + "=" + window.location.origin;
        if (item.TemplateName === "mediawidget-quiz-template" || item.TemplateName === "mediawidget-quiz-list-template") {
           item.MediaUrl = getCorrectQuizzesUrlWithLanguages(item.MediaUrl, hostUrl);
        }
    }
    self.load = function () {
        self.loading(true);

        $.ajax({
            showSplashScreen: true,
            type: "GET",
            dataType: "json",
            url: self.mediaServiceUrl,
            data: {
                mediaTypes: self.mediaTypes,
                contentTypes: self.contentTypes,
                selectedContentTypes: getSelectedContentTypesToLoad(),
                keyword: getKeywordToLoad(),
                tagName: getSectionToLoad(),
                order: getSortOrder(),
                pageIndex: getPageIndexToLoad(),
                pageSize: getPageSizeToLoad()
            },
            traditional: true
        }).done(function (data) {
            self.totalNumberOfItems(data.TotalNumberOfItems);

            loadedItems = (!data.Items) ? [] : Enumerable.From(data.Items).Select(function(x) { return prepareResultItem(x); }).ToArray();

            if (shouldUseClientSideFilters()) {
                applyClientSideFilters();
            } else {
                var items = shouldGroupBySection()
                    ? prepareResultsGroupedBySection(loadedItems)
                    : prepareResults(loadedItems);
                self.pageItems(items);
                populateColumns(items);
                setupPager();
            }

            self.error(false);
        }).fail(function (jqxhr, textStatus) {
            self.error(true);
        }).always(function () {
            self.loading(false);
        });
    };
};
function VideoPlayerComponentViewModel(params) {
    var self = this;
    var modelType = "Videos";

    self.itemId = params.itemId;
    self.loadLocations = params.loadLocations;
    self.videoId = params.videoId;
    self.playerId = params.playerId;
    self.imageUrl = params.imageUrl;
    self.title = params.title;
    self.caption = params.caption;
    self.description = params.description;
    self.credits = params.credits;
    self.other = params.other;
    self.hideTitle = params.hideTitle;
    self.hideFigure = params.hideFigure;
    self.hideCaption = params.hideCaption;
    self.hideDescription = params.hideDescription;
    self.hideCredits = params.hideCredits;
    self.hideOther = params.hideOther;
    self.listview = params.listview;

    self.showPlayer = function () {
        MManual.videoplayer.show(self);
        $("body").addClass("popup");
        MManual.analytics.notifyOpenModal(modelType, self.title);
    };

    self.hidePlayer = function () {
        MManual.videoplayer.hide();
    };
};

function AudioPlayerComponentViewModel(params) {
    var self = this;
    var modelType = "Audios";

    self.itemId = params.itemId;
    self.loadLocations = params.loadLocations;
    self.audioUrl = params.audioUrl;
    self.mimeType = params.mimeType;
    self.title = params.title;
    self.caption = params.caption;
    self.description = params.description;
    self.credits = params.credits;
    self.other = params.other;
    self.hideTitle = params.hideTitle;
    self.hideCaption = params.hideCaption;
    self.hideDescription = params.hideDescription;
    self.hideCredits = params.hideCredits;
    self.hideOther = params.hideOther;
    self.playerClass = params.playerClass;
    self.listview = params.listview;

    self.showPlayer = function () {
        MManual.audioplayer.show(self);
        $("body").addClass("popup");
        MManual.analytics.notifyOpenModal(modelType, self.title);
    };
    self.hidePlayer = function () {
        if (!$("body").hasClass("table-on")) {
            $("body").removeClass("popup");
        }
        MManual.audioplayer.hide();

    };
};

function ImagePlayerComponentViewModel(params) {
    var self = this;
    var modelType = "Images";

    self.itemId = params.itemId;
    self.loadLocations = params.loadLocations;
    //self.thumbnailUrl = MManual.imageplayer.removeLeadingSlash(params.thumbnailUrl);
    self.thumbnailUrl = params.thumbnailUrl;
    //self.imageUrl = MManual.imageplayer.removeLeadingSlash(params.imageUrl);
    self.imageUrl = params.imageUrl;
    self.title = params.title;
    self.caption = params.caption;
    self.description = params.description;
    self.credits = params.credits;
    self.other = params.other;
    self.hideTitle = params.hideTitle;
    self.hideCaption = params.hideCaption;
    self.hideFigure = params.hideFigure;
    self.hideDescription = params.hideDescription;
    self.hideCredits = params.hideCredits;
    self.hideOther = params.hideOther;
    self.fullSize = false;
    self.listview = params.listview;

    self.showPlayer = function () {
        MManual.imageplayer.show(self);
        $("body").addClass("popup");
        MManual.analytics.notifyOpenModal(modelType, self.title);
    };
    self.hidePlayer = function () {
        if (!$("body").hasClass("table-on")) {
            $("body").removeClass("popup");
        }
        MManual.imageplayer.hide();

    };
};

function HtmlImagePromoComponentViewModel(params) {
    var self = this;

    self.description = params.description;
    self.title = params.title;
    self.showWidget = params.showWidget;
    self.thumbnailUrl = params.imageUrl;
}

function HtmlImagePromotopComponentViewModel(params) {
    var self = this;

    self.description = params.description;
    self.title = params.title;
    self.showWidget = params.showWidget;
    self.thumbnailUrl = params.imageUrl;
}

function HtmlImagePromobottomComponentViewModel(params) {
    var self = this;

    self.description = params.description;
    self.title = params.title;
    self.showWidget = params.showWidget;
    self.thumbnailUrl = params.imageUrl;
}

function IconographicPlayerComponentViewModel(params) {
    var self = this;
    var modelType = "Images";

    self.itemId = params.itemId;
    self.loadLocations = params.loadLocations;
    self.thumbnailUrl = params.thumbnailUrl;
    self.imageUrl = params.imageUrl;
    self.title = params.caption;
    self.promo = params.title;
    self.citationLink = params.citationLink;
    self.citationText = params.citationText;
    self.caption = false;
    self.description = false;
    self.credits = false;
    self.other = false;
    self.hideTitle = params.hideTitle;
    self.hideCaption = true;
    self.hideDescription = true;
    self.hideCredits = true;
    self.hideOther = true;
    self.fullSize = true;
    self.maximized = true;

    self.lazy = function (image) {
        lazyLoad(image);
    };

    self.showPlayer = function () {
        MManual.imageplayer.show(self);
        $("body").addClass("popup");
        MManual.analytics.notifyOpenModal(modelType, self.title);
    };
    self.hidePlayer = function () {
        MManual.imageplayer.hide();
    };
}

function InlineAudioViewModel(params) {
    var self = this;

    var playIcon = 'fa-volume-up';
    var stopIcon = 'fa-stop';

    self.description = function () {
        if (params.description)
            return params.description;

        return '';
    };

    var setPlayIcon = function (element) {
        var jElement = $(element);
        var audioElement = jElement.hasClass('inline-audio') ? jElement : jElement.closest('.inline-audio');
        var icon = audioElement.find('i');

        icon.removeClass(stopIcon);
        icon.addClass(playIcon);
    };

    var setStopIcon = function (element) {
        var jElement = $(element);
        var audioElement = jElement.hasClass('inline-audio') ? jElement : jElement.closest('.inline-audio');
        var icon = audioElement.find('i');

        icon.removeClass(playIcon);
        icon.addClass(stopIcon);
    };

    var getCurrentIcon = function (element) {
        var jElement = $(element);
        var audioElement = jElement.hasClass('inline-audio') ? jElement : jElement.closest('.inline-audio');
        var icon = audioElement.find('i');

        if (icon.hasClass(stopIcon)) {
            return stopIcon;
        }
        return playIcon;
    };

    var checkMovAvailability = function () {
        var audio = document.createElement('audio');
        var movAvailable = true;
        //var canPlayMp3 = !!(audio.canPlayType && audio.canPlayType('audio/mpeg;').replace(/no/, ''));
        var canPlayAudio = !!(audio.canPlayType);
        var canPlayWav = !!(audio.canPlayType && audio.canPlayType('audio/wav; codecs="1"').replace(/no/, ''));
        if (canPlayAudio && !(canPlayWav)) {
            movAvailable = false;
        }

        return movAvailable;
    };

    self.isMovAvailable = checkMovAvailability();
    var currentPlayingAudio = null;
    var currentAudioTarget = null;
    self.playPause =
        self.isMovAvailable
        ? function (data, event) {
            // function used by inline audio player built from inline-audio-template
            var target = (event.currentTarget) ? $(event.currentTarget) : $(event.srcElement);
            var panel = target.closest('.inline-audio');
            var audio = panel.find('.main_audio').get(0);
            var isPlaying = function (a) { return !a.paused; }
            // Check if the CurrentAudio is click or not, if not then stop the currentAudio and play the other then reset the currentAudio
            if (currentPlayingAudio != null && !currentPlayingAudio.paused && currentPlayingAudio != audio) {
                currentPlayingAudio.pause();
                setPlayIcon(currentAudioTarget);
            }
            if (isPlaying(audio)) {
                setPlayIcon(target);
                audio.pause();
            } else {
                setStopIcon(target);
                audio.play();
                currentPlayingAudio = audio;
                currentAudioTarget = target;
            }
        }
        : function (data, event) {

            var isPlaying = function (a) { return (getCurrentIcon(a) == stopIcon); }
            var target = (event.currentTarget) ? $(event.currentTarget) : $(event.srcElement);
            var panel = target.closest('.inline-audio');
            var sound = panel.find('bgsound').get(0);

            if (currentPlayingAudio != null && !currentPlayingAudio.paused && currentPlayingAudio != sound) {
                currentPlayingAudio.src = '';
                setPlayIcon(currentAudioTarget);
            }

            if (isPlaying(panel)) {
                setPlayIcon(target);
                sound.src = '';
            } else {
                setStopIcon(target);
                sound.onchange = function () { alert('changed!'); };
                sound.src = $.isFunction(data.url) ? data.url() : data.url;
                currentPlayingAudio = sound;
                currentAudioTarget = target;
            }
        };

    self.stop =
        self.isMovAvailable
        ? function (inlineAudioElement) {
            var audio = inlineAudioElement.find('.main_audio').get(0);
            if (audio) {
                audio.pause();
            }
        }
        : function (inlineAudioElement) {
            var sound = inlineAudioElement.find('bgsound').get(0);
            if (sound) {
                sound.src = '';
            }
        };

    self.ended = function (element) {
        setPlayIcon(element);
    };
};

(function (MManual) {

    MManual.getTopicsForResource = function (itemId, resultObservableArray, loadingFlagObservable) {
        if (!itemId) {
            return;
        }

        var serviceUrl = $("#resourceServiceUrl").val();

        loadingFlagObservable(true);
        resultObservableArray.removeAll();

        $.ajax({
            showSplashScreen: false,
            type: "GET",
            dataType: "json",
            url: serviceUrl,
            data: {
                resourceId: itemId
            },
            traditional: true
        }).done(function (data) {
            if (!data || !data.Items) {
                return;
            }

            for (var i = 0; i < data.Items.length; i++) {
                var item = data.Items[i];
                resultObservableArray.push(item);
            }
        }).fail(function (jqxhr, textStatus) {
            console.log("Error loading topics for resource " + itemId);
        }).always(function () {
            loadingFlagObservable(false);
        });
    };

    MManual.inlineaudio = new InlineAudioViewModel();

    MManual.audioplayer = {
        model: {
            itemId: ko.observable(''),
            loadLocations: ko.observable(false),
            audioUrl: ko.observable(''),
            mimeType: ko.observable(''),
            title: ko.observable(''),
            caption: ko.observable(''),
            description: ko.observable(''),
            credits: ko.observable(''),
            other: ko.observable(''),
            playerClass: ko.observable(''),
            playerVisible: ko.observable(false),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            topicsWithResource: ko.observableArray([]),
            topicsWithResourceLoading: ko.observable(),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px')
        },
        show: function (data) {
            var model = MManual.audioplayer.model;
            MManual.scroll.saveScroll();
            model.topicsWithResource.removeAll();
            if (data.loadLocations && data.itemId) {
                MManual.getTopicsForResource(data.itemId, model.topicsWithResource, model.topicsWithResourceLoading);
            }
            model.itemId(data.itemId || '');
            model.loadLocations(!!data.loadLocations);
            model.audioUrl(data.audioUrl || '');
            model.mimeType(data.mimeType || '');
            model.title(data.title || '');
            model.caption(data.caption || '');
            model.description(data.description || '');
            model.credits(data.credits || '');
            model.other(data.other || '');
            model.playerClass(data.playerClass || '');
            model.playerVisible(true);
            return false;
        },
        hide: function () {
            var model = MManual.audioplayer.model;
            var audioPlayerModal = $('.audio-player-modal');
            if (audioPlayerModal) {
                var inlineAudioElement = audioPlayerModal.find('.inline-audio');
                if (inlineAudioElement) {
                    MManual.inlineaudio.stop(inlineAudioElement);
                }
            }

            model.playerVisible(false);
            model.topicsWithResource.removeAll();
            model.topicsWithResourceLoading(false);
            model.itemId('');
            model.loadLocations(false);
            model.audioUrl('');
            model.mimeType('');
            model.title('');
            model.caption('');
            model.description('');
            model.credits('');
            model.other('');
            model.playerClass('');
            if (!$("body").hasClass("table-on")) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }
            return false;
        }
    };

    MManual.videoplayer = {
        model: {
            itemId: ko.observable(''),
            loadLocations: ko.observable(false),
            videoId: ko.observable(''),
            playerId: ko.observable(''),
            imageUrl: ko.observable(''),
            title: ko.observable(''),
            caption: ko.observable(''),
            description: ko.observable(''),
            credits: ko.observable(''),
            other: ko.observable(''),
            noDescription: ko.observable(false),
            itemHeight: ko.observable(MManual.utils.getInnerHeight() * 0.75 + 'px'),
            playerVisible: ko.observable(false),
            objectWidth: ko.observable(MManual.utils.getVideoWidth()),
            objectHeight: ko.observable(Math.ceil(MManual.utils.getVideoWidth() * 0.75)),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            topicsWithResource: ko.observableArray([]),
            topicsWithResourceLoading: ko.observable(),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px')
        },
        show: function (data) {
            var model = MManual.videoplayer.model;
            MManual.scroll.saveScroll();
            model.topicsWithResource.removeAll();
            if (data.loadLocations && data.itemId) {
                MManual.getTopicsForResource(data.itemId, model.topicsWithResource, model.topicsWithResourceLoading);
            }
            model.itemId(data.itemId || '');
            model.loadLocations(!!data.loadLocations);
            model.videoId(data.videoId || '');

            // Until all topics get re-imported we have to map old player IDs to the new ones
            var oldRestrictedPlayer = $('#oldRestrictedBrightcovePlayer').val();
            var restrictedPlayer = $('#restrictedBrightcovePlayer').val();
            var shareablePlayer = $('#shareableBrightcovePlayer').val();
            var playerId = data.playerId || '';
            if (playerId.toLowerCase() === oldRestrictedPlayer.toLowerCase() ||
                playerId.toLowerCase() === restrictedPlayer.toLowerCase()) {
                playerId = restrictedPlayer;
            } else {
                playerId = shareablePlayer;
            }

            model.playerId(playerId);
            model.title(data.title || '');
            model.caption(data.caption || '');
            model.description(data.description || '');
            model.credits(data.credits || '');
            model.other(data.other || '');

            if ((model.description() + model.credits() + model.other()).length > 3 || model.loadLocations()) {
                model.noDescription(false);
            } else {
                model.noDescription(true);
            }

            model.playerVisible(true);
            model.windowHeight(MManual.utils.getInnerHeight() + 'px');
            return false;
        },
        hide: function () {
            var model = MManual.videoplayer.model;

            if (!$("body").hasClass("table-on")) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }
            model.playerVisible(false);
            model.topicsWithResource.removeAll();
            model.topicsWithResourceLoading(false);
            model.itemId('');
            model.loadLocations(false);
            model.videoId('');
            model.playerId('');
            model.title('');
            model.caption('');
            model.description('');
            model.credits('');
            model.other('');
            return false;
        }
    };

    MManual.imageplayer = {
        model: {
            itemId: ko.observable(''),
            loadLocations: ko.observable(false),
            imageUrl: ko.observable(''),
            title: ko.observable(''),
            caption: ko.observable(''),
            description: ko.observable(''),
            credits: ko.observable(''),
            other: ko.observable(''),
            noDescription: ko.observable(false),
            fullSize: ko.observable(false),
            itemHeight: ko.observable('auto'),
            itemWidth: ko.observable('auto'),
            playerVisible: ko.observable(false),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px'),
            topicsWithResource: ko.observableArray([]),
            topicsWithResourceLoading: ko.observable(),
            maximized: false
        },
        show: function (data) {
            var model = MManual.imageplayer.model;
            MManual.scroll.saveScroll();
            model.topicsWithResource.removeAll();
            if (data.loadLocations && data.itemId) {
                MManual.getTopicsForResource(data.itemId, model.topicsWithResource, model.topicsWithResourceLoading);
            }
            model.itemId(data.itemId || '');
            model.loadLocations(!!data.loadLocations);
            //model.imageUrl(MManual.imageplayer.removeLeadingSlash(data.imageUrl) || '');
            model.imageUrl(data.imageUrl || '');
            model.title(data.title || '');
            model.caption(data.caption || '');
            model.description(data.description || '');
            model.credits(data.credits || '');
            model.other(data.other || '');
            model.fullSize(data.fullSize);
            model.maximized = data.maximized;

            if ((model.description() + model.credits() + model.other()).length > 3 || model.loadLocations()) {
                model.noDescription(false);
            } else {
                model.noDescription(true);
            }
            model.itemHeight('auto');
            model.itemWidth('auto');
            model.playerVisible(true);
            model.windowHeight(MManual.utils.getInnerHeight() + 'px');
            return false;
        },
        hide: function () {
            var model = MManual.imageplayer.model;
            $(".img-toolbox").hide();
            $('.image-sizer').removeClass("zoom-out");
            model.playerVisible(false);
            model.topicsWithResource.removeAll();
            model.topicsWithResourceLoading(false);
            model.itemId('');
            model.loadLocations(false);
            model.imageUrl('');
            model.title('');
            model.caption('');
            model.description('');
            model.credits('');
            model.other('');
            model.fullSize(false);
            if (!$("body").hasClass("table-on")) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }

            return false;
        },
        toggleZoom: function (el) {
            $('.image-sizer').toggleClass("zoom-out");
            MManual.imageplayer.toggleNoCopy();
        },
        
        toggleNoCopy: function(el) {
            var $zoomOutPresent = $('.image-sizer').hasClass('zoom-out');
            var $noCopy = $('.image-sizer .no-copy');

            if (!$zoomOutPresent) {
                var $image = $('.image-sizer .image-player__image');
                var noCopyHeight = $image.height();
                
                $noCopy.height(noCopyHeight);
            } else {
                $noCopy.height('');
            }
        },

        checkSize: function (el) {
            var model = MManual.imageplayer.model;
            var imgHeight = $("img#fullImage").height();
            var imgWidth = $("img#fullImage").width();
            var maxImgWidth = MManual.utils.getMaxWidth() - 20;
            if (model.description().length > 3 && !model.hideDescription) {
                if (window.innerWidth > 720) {
                    maxImgWidth = MManual.utils.getMaxWidth() * 0.7;
                    maxImgWidth = maxImgWidth + 25;
                } else {
                    maxImgWidth = MManual.utils.getMaxWidth() - 38;
                }

            }

            if (imgHeight > (MManual.utils.getInnerHeight() * 0.72)) {
                //$("img#fullImage").addClass("limit-height");
                model.itemHeight(MManual.utils.getInnerHeight() * 0.78 + 'px');
                $(".img-toolbox").show();
            } else {
                $("img#fullImage").removeClass("limit-height");
                model.itemHeight('auto');
            }

            if (document.getElementById("fullImage").parentElement.style.height === 'auto') {
                model.itemWidth(imgWidth + 'px');
            } else {
                model.itemWidth((imgWidth / imgHeight) * MManual.utils.getInnerHeight() * 0.78 + 'px');
            }

            if (imgWidth > maxImgWidth) {
                $(".img-toolbox").show();
            }

            if (!model.maximized) {
                $('.image-sizer').addClass("zoom-out");
            }
        }//,

        //removeLeadingSlash: function (url) {
        //    var mediaPattern = /^\/[~|-]\/media/i;
        //    if (mediaPattern.test(url)) {
        //        return url.slice(1, url.length); // Remove leading slash
        //    }
        //    var previewMediaPattern = /^\/sitecore\/shell\/[~|-]\/media/i;
        //    if (previewMediaPattern.test(url)) {
        //        return url.slice(16, url.length); // Remove leading slash
        //    }
        //    return url;
        //}
    };

    MManual.iframeplayer = {
        model: {
            itemId: ko.observable(''),
            itemType: ko.observable(''), // (optional) lowercase value from MManual.Manuals.Domain.MediaType, i.e. quiz, clinicalcalculator, etc.
            loadLocations: ko.observable(false),
            src: ko.observable(''),
            playerVisible: ko.observable(false),
            itemHeight: ko.observable(Math.round(MManual.utils.getInnerHeight() * 0.8) + "px"),
            itemWidth: 'auto',
            iframeWidth: (Math.round(MManual.utils.getInnerWidth() * 0.94) > 1200) ? '100%' : Math.round(MManual.utils.getInnerWidth() * 0.94),
            iframeHeight: Math.round(MManual.utils.getInnerHeight() * 0.8),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            topicsWithResource: ko.observableArray([]),
            topicsWithResourceLoading: ko.observable(),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px')
        },
        show: function (data, analyticsEventType) {
            if (window.matchMedia('print').matches) {
                return false;
            }

            var model = MManual.iframeplayer.model;
            var src = MManual.utils.setHttpsProtocolIfSecureConnection(data.src);
            MManual.scroll.saveScroll();
            model.topicsWithResource.removeAll();
            if (data.loadLocations && data.itemId) {
                MManual.getTopicsForResource(data.itemId, model.topicsWithResource, model.topicsWithResourceLoading);
                model.itemHeight(Math.round(MManual.utils.getInnerWidth()) <= 480 ? Math.round(MManual.utils.getInnerHeight() * 0.7) + "px" : Math.round(MManual.utils.getInnerHeight() * 0.7) - 150 + "px");
            }
            model.itemId(data.itemId || '');
            model.itemType(data.itemType ? data.itemType.trim().toLowerCase() : '');
            model.src(src || '');
            model.loadLocations(!!data.loadLocations);
            model.playerVisible(true);
            analyticsEventType = typeof analyticsEventType !== 'undefined' ? analyticsEventType : MManual.analytics.eventNone;
            MManual.analytics.trigger(analyticsEventType);
            $("body").addClass("popup");
            return false;
        },
        hide: function () {
            var model = MManual.iframeplayer.model;
            model.playerVisible(false);
            model.topicsWithResource.removeAll();
            model.topicsWithResourceLoading(false);
            model.itemId('');
            model.itemType('');
            model.src('');
            model.loadLocations(false);

            if (!$("body").hasClass("table-on")) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }
            return false;
        }
    };

    MManual.htmlplayer = {
        model: {
            title: ko.observable(''),
            html: ko.observable(''),
            playerVisible: ko.observable(false),
            itemHeight: ko.observable(Math.round(MManual.utils.getInnerHeight() * 0.7) + "px"),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px')
        },
        show: function (data) {
            var model = MManual.htmlplayer.model;
            MManual.scroll.saveScroll();
            model.title(data.title || '');
            model.html(data.html || '');
            model.playerVisible(true);
            $("body").addClass("popup");
            return false;
        },
        hide: function () {
            var model = MManual.htmlplayer.model;
            model.playerVisible(false);
            model.title('');
            model.html('');
            if (!$(".table-box.show").length) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }
            return false;
        }
    };

    MManual.carouselplayer = {
        model: {
            items: ko.observable(''),
            playerVisible: ko.observable(false),
            title: ko.observable(''),
            windowHeight: ko.observable(MManual.utils.getInnerHeight() + 'px'),
            maxWidth: ko.observable(MManual.utils.getMaxWidth() + 'px')
        },
        show: function (data, initialSlide, title) {
            var model = MManual.carouselplayer.model;
            MManual.scroll.saveScroll();
            model.items(data.items() || '');
            model.title(title || '');
            model.playerVisible(true);
            $("body").addClass("popup");

            $('.carousel-modal-view').slick({
                slidesToShow: 1,
                slidesToScroll: 1,
                arrows: false,
                fade: true,
                initialSlide: initialSlide,
                asNavFor: '.carousel-modal-nav'
            });
            $('.carousel-modal-nav').slick({
                slidesToShow: 3,
                slidesToScroll: 1,
                asNavFor: '.carousel-modal-view',
                initialSlide: initialSlide,
                arrows: true,
                dots: false,
                centerMode: true,
                focusOnSelect: true
            });
            return false;
        },
        hide: function () {
            var model = MManual.carouselplayer.model;
            model.playerVisible(false);
            thumbnailUrl: ko.observable('');
            imageUrl: ko.observable('');
            description: ko.observable('');
            template: ko.observable('');
            model.playerVisible(false);
            if (!$(".table-box.show").length) {
                $("body").removeClass("popup");
                MManual.scroll.bringScroll();
            }
            return false;
        }
    };

}(window.MManual = window.MManual || {}));

$().ready(function () {
    $(window).on("resize orientationchange", function () {
        //MManual.iframeplayer.itemHeight = Math.round(MManual.utils.getInnerWidth()) <= 480 ? Math.round(MManual.utils.getInnerHeight() * 0.7) + "px" : Math.round(MManual.utils.getInnerHeight() * 0.7) - 150 + "px";
        MManual.iframeplayer.model.itemHeight(Math.round(MManual.utils.getInnerHeight() * 0.8) + "px");
        MManual.iframeplayer.model.windowHeight(MManual.utils.getInnerHeight() + "px");
        MManual.iframeplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
        MManual.imageplayer.model.windowHeight(MManual.utils.getInnerHeight() + "px");
        MManual.imageplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
        MManual.carouselplayer.model.windowHeight(MManual.utils.getInnerHeight() + "px");
        MManual.carouselplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
        MManual.videoplayer.model.windowHeight(MManual.utils.getInnerHeight() + "px");
        MManual.videoplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
        MManual.htmlplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
        MManual.htmlplayer.model.itemHeight(Math.round(MManual.utils.getInnerHeight() * 0.7) + "px");
        MManual.audioplayer.model.maxWidth(MManual.utils.getMaxWidth() + "px");
    });

});;
var SearchResultsController = function() {
    var self = this;

    var immediateItemsDeferred = $.Deferred();
    var immediateItemsReady = 0;

    var immediateItems = [];
    var nextOrderItems = [];

    self.register = function(viewModel, loadImmediately) {
        if (loadImmediately) {
            immediateItems.push(viewModel);
        } else {
            nextOrderItems.push(viewModel);
        }
    };

    immediateItemsDeferred.always(function() {
        for (var i = 0; i < nextOrderItems.length; i++) {
            nextOrderItems[i].load();
        }
    });

    $(document).ready(function () {
        if (immediateItems.length == 0) {
            immediateItemsDeferred.resolve();
        }

        for (var i = 0; i < immediateItems.length; i++) {
            immediateItems[i].load().always(function() {
                if (++immediateItemsReady == immediateItems.length) {
                    immediateItemsDeferred.resolve();
                }
            });
        }
    });
};

(function (MManual) {
    MManual.searchController = new SearchResultsController();
}(window.MManual = window.MManual || {}));

var SearchResultsViewModel = function (showSplashScreen, data, initialItems, lazyLoadItems, searchServiceUrl) {

    var self = this;

    self.loading = ko.observable(true);
    self.error = ko.observable(false);

    self.query = ko.observable('');
    
    self.query_showPronDef = ko.observable(false);
    self.query_pron = ko.observable('');
    self.query_url = ko.observable('');
    self.query_def = ko.observable('');

    self.filtersData = ko.observableArray([]);
    self.currentFilters = [];
    self.results = ko.observableArray([]);
    self.totalResults = ko.observable(-1);
    self.redirecting = ko.observable(false);
    self.isCleanSearch = false;

    if (typeof data.oldQuery != 'undefined') {
        self.oldQuery = data.oldQuery;
        self.queryLink = MManual.utils.updateURLParameter(data.queryLink, "query", self.oldQuery);
        self.queryLink = MManual.utils.updateURLParameter(self.queryLink, "force", "true");
    }


    self.hasMore = ko.pureComputed(function () {
        return self.totalResults() > self.results().length;
    }, self);

    var getItemsToLoad = function() {
        return self.results().length == 0 ? initialItems : lazyLoadItems;
    };

    var readFilters = function (formElements) {
        var filters = [];
        for (var i = 0; i < formElements.length; i++) {
            if (formElements[i].checked)
                filters.push(formElements[i].name);
        }
        return filters;
    };

    var resetModel = function () {
        self.filtersData([]);
        self.results([]);
        self.totalResults(-1);
        self.redirecting(false);
    };

    var handleSearchResults = function (resultData) {
        self.query(resultData.query);
        self.filtersData(resultData.filters || []);
        var lastIndex = self.results().length;
        for (var i = 0; i < resultData.results.length; i++) {
            self.results.push(resultData.results[i]);
        }

        // scroll to the top of the new results added
        //var nextResultIndex = $(".public-search-results li")[lastIndex];
        //if (nextResultIndex != null) {
        //    nextResultIndex.scrollIntoView();
        //    scrollBy(0, -$("header.top").height() - 20);
        //    if ($('body').hasClass('mobile')) {
        //        scrollBy(0, -60);
        //    }
        //}
        self.totalResults(resultData.totalSearchResults || 0);
    };

    self.load = function (formElements) {
        self.redirecting(false);
        self.loading(true);

        if (formElements && formElements != self) {
            // Fresh search
            self.isCleanSearch = true;
            self.currentFilters = readFilters(formElements);
        }

        data = data || {};
        data.selectedFilters = self.currentFilters;
        data.skipItems = self.isCleanSearch ? 0 : self.results().length;
        data.itemsToLoad = getItemsToLoad();
        // Add referer to make ajax see difference between home and pro editions (may be useful when cache is enabled)
        data.referrer = window.location.href;

        var deferred = $.ajax({
            showSplashScreen: showSplashScreen,
            type: 'GET',
            dataType: 'json',
            url: searchServiceUrl,
            data: data,
            traditional: true,
            cache: false
        }).done(function (resultData) {
            self.redirecting(false);

            if (!resultData) {
                self.error(true);
            }
            else if (resultData.redirectUrl) {
                self.redirecting(true);
                window.location.href = resultData.redirectUrl;
                return;
            }
            if (self.isCleanSearch) {
                resetModel();
                self.isCleanSearch = false;
            }

            handleSearchResults(resultData);
            self.error(false);
        }).fail(function(jqxhr, textStatus) {
            self.error(true);
        }).always(function() {
            self.loading(false);
        });

        return deferred;

    };

    self.showLexicompMonograph = function (item, event) {
        ShowLexicompMonograph($(event.target));
    };
}

function makeToggle2(el, data) {   
    $(".submatches-toggle").click(function () {
        $(this).toggleClass("hide");
        //console.log(".submatches-toggle hide");
    });
}

function checkToDisableSumbitForSearch() {
    if ($('#search-header').val() !== "") {
        $('.search button.btn-nav').attr('type', 'submit');
    } else {
        $('.search button.btn-nav').attr('type', 'button');
    }
}

function stickyFilters(filterOfsset) {
    if (window.scrollY > filterOfsset) {
        $(".filters").addClass('sticky');
    }
    if ($(".filters.sticky").length > 0 && $(".filters.sticky").offset().top < filterOfsset) {
        $(".filters.sticky").removeClass('sticky');
    }
}

function validateAndSubmitSearchQuery() {
    return validateAndSubmitSearchQueryImpl(document.forms["searchForm"]["query"]);
}

function validateAndSubmitSearchQueryForMagnifying() {
    return validateAndSubmitSearchQueryImpl(document.forms["searchFormHeader"]["query"]);
}

function validateAndSubmitSearchQueryImpl(queryInput) {
    var queryValue = queryInput.value;
    if (queryValue == null || queryValue.length === 0 || !queryValue.trim()) {
        return false;
    }

    var encodedQuery = htmlEncode(queryValue);
    $(queryInput).val(encodedQuery);
    return true;
}


function htmlEncode(value) {
    return $('<div/>').text(value).html();
}

var filterOfsset = 100;
$().ready(function () {
    //prepareLangUrlForSearch();
    if ($(".filters").length > 0)  {
        filterOfsset = $(".filters").offset().top + 20;
        $(document).on("touchmove touchend scroll mousewheel tap", function () {
            if (window.scrollY > filterOfsset) {
                $(".filters").addClass('sticky');
            }
            if ($(".filters.sticky").length > 0 && $(".filters.sticky").offset().top < filterOfsset) {
                $(".filters.sticky").removeClass('sticky');
            }
            setTimeout(function() { stickyFilters(filterOfsset); }, 200);
        });
        $(window).on("scroll mousewheel tap", function () {
            if (window.scrollY > filterOfsset) {
                $(".filters").addClass('sticky');
            }
            if ($(".filters.sticky").length > 0 && $(".filters.sticky").offset().top < filterOfsset) {
                $(".filters.sticky").removeClass('sticky');
            }
        });
    }

    checkToDisableSumbitForSearch();
    $("#search-header").keyup(function () {
        checkToDisableSumbitForSearch();
    });
});


//function prepareLangUrlForSearch() {
//    var siteLang = window.location.pathname.substr(0, 6);
//    if (siteLang.match("[a-z]{2}-[a-z]{2}")) {
//        $(".search form").each(function () {
//            $(this).attr('action', function (index, value) {
//                if (value !== undefined && value.substr(0, 1) == "/" && !value.substr(1, 5).match("[a-z]{2}-[a-z]{2}")) {
//                    return siteLang + value;
//                }
//            });
//        });
//    }
//};
(function (MManual) {

    MManual.social = {
        show: {
            mail: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'mail');
                var subject = args.subject.replace("{title}", $.parseHTML(document.title)[0].textContent);
                var body = args.text.replace("{title}", $.parseHTML(document.title)[0].textContent);

                body = body.replace("{link}", urlToShare.href());
                body = body.replace("+", " ");

                var url = 'mailto:?subject=' + encodeURIComponent(subject) + '&body=' + body;

                document.location.href = url;
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleMail);
                return false;
            },
            facebook: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'facebook');
                var url = 'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(urlToShare.href());

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleFb);
                window.open(url, 'facebook', windowFeatures, true);

                return false;
            },
            twitter: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'twitter');
                var url = 'http://twitter.com/share?text=' +
                    encodeURIComponent(args.text + ' ' + document.title) + '&url=' + encodeURIComponent(urlToShare.href());
                if (args.via) {
                    url+= ('&via=' + encodeURIComponent(args.via));
                }

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleTw);
                window.open(url, 'twitter', windowFeatures, true);

                return false;
            },
            googleplus: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'googleplus');
                var url = 'https://plus.google.com/share?url=' + encodeURIComponent(urlToShare.href());

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleGp);
                window.open(url, 'googleplus', windowFeatures, true);

                return false;
            },
            linkedin: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'linkedin');
                var url = 'http://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(urlToShare.href())
                    + '&title=' + encodeURIComponent(document.title)
                    + '&source=' + args.source + '&summary=';

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleLi);
                window.open(url, 'linkedin', windowFeatures, true);

                return false;
            },
            weibo: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'weibo');
                var url = 'http://service.weibo.com/share/share.php?url=' + encodeURIComponent(urlToShare.href())
                 + '&title=' + encodeURIComponent(document.title);

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleWb);
                window.open(url, 'weibo', windowFeatures, true);

                return false;
            },
            qq: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'qq');
                var url = 'http://v.t.qq.com/share/share.php?url=' + encodeURIComponent(urlToShare.href())
                 + '&title=' + encodeURIComponent(document.title);

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleQQ);
                window.open(url, 'qq', windowFeatures, true);

                return false;
            },
            vk: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'vk');
                var url = 'https://vk.com/share.php?url=' + encodeURIComponent(urlToShare.href());

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleVk);
                window.open(url, 'vk', windowFeatures, true);

                return false;
            },
            odnoklassniki: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'odnoklassniki');
                var url = 'https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=' + encodeURIComponent(urlToShare.href());

                var windowFeatures = 'width=800, height=600, toolbars=no, titlebar=no, status=no, menubar=no, location=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleOk);
                window.open(url, 'odnoklassniki', windowFeatures, true);

                return false;
            },
            wechat: function (args) {
                var urlToShare = new URI(window.location.href);
                urlToShare.setSearch('tag', 'wechat');

                var windowFeatures = 'width=400, height=400, toolbars=no, titlebar=no, status=no, menubar=no, location=no, resizable=no';
                MManual.analytics.trigger(MManual.analytics.eventShareAnArticleOk);
                $("#wechat_share_div").dialog({
                    autoOpen: true,
                    dialogClass: "wechatDialog",
                    width: windowFeatures.width,
                    resizable: true,
                    modal: true,
                    open: function () {
                        $("wechat_share_div").show();
                        $('#qr_div_id').empty();
                        $('#qr_div_id').qrcode({ text: window.location.href });
                    }
                });

                return false;
            }
        }
    };
}(window.MManual = window.MManual || {}));


!function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https'; if (!d.getElementById(id)) { js = d.createElement(s); js.id = id; js.src = p + "://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); } }(document, "script", "twitter-wjs");
!function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https'; if (!d.getElementById(id)) { js = d.createElement(s); js.id = id; js.src = p + "://vk.com/js/api/openapi.js?121"; fjs.parentNode.insertBefore(js, fjs); } }(document, "script", "vk-wjs");
;
function ShowLexicompMonograph(link) {
    var drugName = $(link).attr("drug-title");
    if (!drugName) {
        drugName = link.innerText || link.innerHTML;
    }
    $('.splash-screen').css({ 'display': 'block' });
    $.ajax({
        url: $("#lexicompMonographUrl").val(),
        type: 'GET',
        data: { name: drugName },
        dataType: 'json',
        success: function (data) {   
            MManual.htmlplayer.show({ title: drugName, html: data });
            $('.splash-screen').css({ 'display': 'none' });
        },
        error: function (jqxhr, textStatus, errorThrown) {
            console.error(errorThrown);
        }
    });
}

function SetLexicompLinkActive() {
    $(".LexicompLink_active").click(function() {
        ShowLexicompMonograph(this);
    });
    $(".resolvedDrug").click(function() {
        ShowLexicompMonograph(this);
    });
    //$(".table-box .resolvedDrug").off("click");

    $(".monographLink").click(function () {
        ShowLexicompMonograph(this);
    });
}

jQuery(document).ready(function () {
    SetLexicompLinkActive();
});

;
(function (MManual) {
    MManual.Tables = {
        tableTHeadSpacing: 0,
        fixedHeaderHeight: 63,/*63*/
        tableHeaders: null,
        doMeATable: function () {

            $(".table .table-box").click(MManual.Tables.openTable);
            $(".drugtable .table-box").click(MManual.Tables.openTable);
            //Add specific close functionality - fix for something?

        },
        loadFixedHeaders: function () {
            if (MManual.Tables.tableHeaders == null) return;
            MManual.Tables.tableHeaders.each(function () {
                var thisSticky = jQuery(this);

                sizeElement(thisSticky);
                jQuery.data(thisSticky[0], 'pos', thisSticky.offset().top);
                thisSticky.find("td").each(function () {
                    $(this).width($(this).outerWidth());
                });

            });

            jQuery(".table-box.show").off("scroll.stickies").on("scroll.stickies", function () {
                MManual.Tables.scrollFixedHeaders();
            });
        },
        scrollFixedHeaders: function () {
            if (MManual.Tables.tableHeaders == null) return;
            MManual.Tables.tableHeaders.each(function (i) {
                var thisSticky = jQuery(this);
                var nextSticky = MManual.Tables.tableHeaders.eq(i + 1);
                var prevSticky = MManual.Tables.tableHeaders.eq(i - 1);
                var pos = jQuery.data(thisSticky[0], 'pos');

                if (pos <= jQuery(".table-box.show").scrollTop() + MManual.Tables.tableTHeadSpacing + MManual.Tables.fixedHeaderHeight) {
                    if (!thisSticky.hasClass("fixed")) {
                        var header = thisSticky.clone().addClass("no-fixed-copy");
                        thisSticky.after(header);
                        MManual.Tables.fixedHeaderHeight = header.outerHeight() - 40;
                    }
                    thisSticky.css('top', MManual.Tables.tableTHeadSpacing + 'px');
                    thisSticky.addClass("fixed");
                    if (nextSticky.length > 0 && thisSticky.offset().top >= jQuery.data(nextSticky[0], 'pos') - thisSticky.outerHeight()) {
                        thisSticky.addClass("absolute").css("top", jQuery.data(nextSticky[0], 'pos') - thisSticky.outerHeight());
                    }

                } else {
                    if (thisSticky.hasClass("fixed")) {
                        thisSticky.removeClass("fixed");
                        thisSticky.next().remove();
                    }


                    if (prevSticky.length > 0 && jQuery(".table-box.show").scrollTop() <= jQuery.data(thisSticky[0], 'pos') - prevSticky.outerHeight()) {

                        prevSticky.removeClass("absolute");
                    }
                }
            });
        },

        openTable: function (event) {
            if (!$(this).hasClass("show")) {
                MManual.scroll.saveScroll();
                $(".table-box .resolvedDrug").on("click", function () {
                    ShowLexicompMonograph(this);
                });
                $(this).toggleClass("show");
                $(this).addClass("clicked");
                $("body").addClass("popup table-on");
                //setTableHeight();??

                var tableHeight = $(this).find("table").outerHeight();
                var tableWidth = $(this).find("table").outerWidth();
                var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
                var titleElem = $(".table-box h3.title");
                var tableMarginLeft = $(".table-box table").css("margin-left");
                var tableMarginRight = $(".table-box table").css("margin-right");


                titleElem.css("margin-left", tableMarginLeft);
                titleElem.css("margin-right", tableMarginRight);
                titleElem.css("width", tableWidth);

                if (is_firefox) {
                    var tableLeft = $(".table-box table").position().left;
                    titleElem.css("left", tableLeft);
                } else {
                    titleElem.css("left", "auto");
                }
                if (window.innerWidth <= 1024) {

                    titleElem.css("margin-left", 0);
                }

                MManual.Tables.postionTitleElement();
                titleElem.addClass("fixed");
                var tableTitleHeight = $(this).find(" h3.title").outerHeight();
                $(this).find("table").css("marginTop", tableTitleHeight + 'px');
                var thElem = $(this).find("table > thead");
                var thHeight = $(thElem).outerHeight();
                var thWidth = $(thElem).outerWidth();
                MManual.Tables.tableTHeadSpacing = thHeight + tableTitleHeight;
                $("table > thead td").each(function () {
                    $(this).width($(this).width());
                });
                thElem.after(thElem.clone().addClass("no-fixed-copy"));
                $(thElem).addClass("fixed");
                $(thElem).width(thWidth);
                $(thElem).css('top', tableTitleHeight + 'px');

                if ((true) && (window.innerWidth < (tableWidth))) {
                    $(this).find("table").on('touchmove', function () {

                        if ($(this).offset().left <= 0) {
                            $(this).find("thead.fixed").css("left", $(this).offset().left + "px");
                        }
                    });

                    $(this).find("table").on('touchend', function () {

                        $(this).find("thead.fixed").css("left", $(this).offset().left + "px");
                        setTimeout(function () {
                            $("thead.fixed").css("left", $(".clicked .TableFullPage table").offset().left + "px");
                        }, 800);

                    });
                }
                //close and reopen table for Orientation, rezise change
                var doResize;

                function resizedw() {
                    MManual.Tables.closeTableForOrientationChange();
                    $(".table .clicked").click();
                }
                window.onresize = function () {
                    clearTimeout(doResize);
                    doResize = setTimeout(function () {
                        resizedw();
                    }, 100);
                };

                $(window).on("orientationchange", function () {
                    MManual.Tables.closeTableForOrientationChange();
                    $(".table .clicked").click();

                });

                // do not glue the header if it is too big
                if ((tableTitleHeight + thHeight) > window.innerHeight * 0.6) {
                    //$(thElem).css('position', 'relative');
                    $(thElem).css('display', 'none');
                }
                //if we had tableHead1 we use them if not than tableHead2 if thableHead are siblinks - no fixing.
                if ($(this).find("tr.tableHead1").size() > 1) {
                    if ($(this).find("tr.tableHead1").first().next().hasClass("tableHead1")) {
                        return;
                    }
                    MManual.Tables.tableHeaders = $(this).find("tr.tableHead1");
                }
                else if ($(this).find("tr.tableHead2").size() > 1) {
                    if ($(this).find("tr.tableHead2").first().next().hasClass("tableHead2")) {
                        return;
                    }
                    MManual.Tables.tableHeaders = $(this).find("tr.tableHead2");
                }

                //excluding fixing theaders if there are rowspan in headers.
                if (MManual.Tables.tableHeaders !== null && MManual.Tables.tableHeaders.find("td[rowspan]").size() > 0) {
                    MManual.Tables.tableHeaders = null;
                }
                MManual.Tables.loadFixedHeaders();

            } else {

                if ((event.target === this) || (event.target.className == "btn show-tab") || (event.target.className == "fa fa-times")) {
                    MManual.Tables.closeTable();
                }
                return true;
            }
            MManual.Tables.refreshAfterScroll();
        },
        refreshAfterScroll: function (event) {
            var openedTable = $(".table-box.show");
            if (openedTable.length === 0)
                return;

            MManual.Tables.postionTitleElement();
            MManual.Tables.postionTableHeader();
        },

        postionTitleElement: function () {
            var titleElem = $(".table-box.show h3.title");
            var tableMarginLeft = $(".table-box.show table").css("margin-left");
            var tableMarginRight = $(".table-box.show table").css("margin-right");
            var tableWidth = $(".table-box.show table").outerWidth();
            titleElem.css("margin-left", tableMarginLeft);
            titleElem.css("margin-right", tableMarginRight);
            titleElem.css("left", "auto");
            titleElem.css("width", tableWidth);
            if (window.innerWidth < (tableWidth)) {
                titleElem.css("width", window.innerWidth);
            }
        },

        postionTableHeader: function () {
            var tableWidth = $(".table-box.show table").outerWidth();
            var tableHeaderElem = $(".table-box.show thead.fixed");
            tableHeaderElem.css("width", tableWidth);
            tableHeaderElem.css("min-width", tableWidth);
        },

        closeTableForOrientationChange: function (event) {
            $(".table-box.show").scrollLeft(0);
            $(".table-box.show").scrollTop(0);
            $(".table-box.show *").removeAttr("style");
            $(".table-box h3.title").removeAttr("style");
            $(".table-box.show .no-fixed-copy").remove();
            $("table > thead td").removeAttr("style");
            $(".table-box.show .fixed").removeClass("fixed");
            $(".table-box.show").off("scroll.stickies");
            $(".table-box.show").removeClass("show");
            $("body").removeClass("popup table-on");
            MManual.scroll.bringScroll();
            return false;
        },

        closeTable: function (event) {
            $(".table-box.clicked").removeClass("clicked");
            MManual.Tables.closeTableForOrientationChange();
        }
    };

    function sizeElement(elem) {
        if (!(elem instanceof jQuery)) {
            elem = $(elem);
        }
        elem.width(elem.outerWidth());
        elem.height(elem.outerHeight());
    }

}(window.MManual = window.MManual || {}));


/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */


function attachTableLinkLogic() {
    $(".TableFullPage a[href*=#], .TableHalfPage a[href*=#]").children().not(".TableFullPage figure a[href*=#],.TableHalfPage figure a[href*=#]").click(function (e) {
        e.preventDefault();
        clickOnLink(this);
    });
}

function clickOnLink(link) {
    var hashInLink = getHashFromUrl(link.href);

    if (checkIfTablesContainsHash(hashInLink)) {
        return;
    }

    closeTable();
    window.location.href = link.href;
}

function getHashFromUrl(url) {
    return $("<a />").attr("href", url)[0].hash;
}

function checkIfTablesContainsHash(hash) {
    if (hash && $('.TableFullPage,.TableHalfPage').has(hash).length > 0) {
        return true;
    }
    return false;
}

;
var dtabs = new Array(2);
var currentTable;
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numberOfLetters = alphabet.length;

if (typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    }
}

function MakeLetterPaginator() {
    var innerHtml = "";
    for (var i = 0; i < alphabet.length; i++) {
        innerHtml += '<a >' + alphabet[i] + '</a>';
    }
    $(".letter-pager").html(innerHtml);
    $(".letter-pager a").click(function () {
        ChangeLetter(this);
    });
}

function ChangeLetter(letterObject) {
    var letter = $(letterObject).text().toLowerCase();
    dtabs[currentTable].search('^' + letter + '.*', true, true).draw();
    $(".letter-pager a").removeClass("active");
    $(letterObject).addClass("active");
    $('html, body').animate({ scrollTop: 0 }, '1000');

    var element = $(".letter-pager a");
    var index = element.index(letterObject);

    if (index < numberOfLetters) {
        var nextElement = element.eq(index + numberOfLetters);

        nextElement.addClass("active");

    } else {

        var nextElement = element.eq(index - numberOfLetters);

        nextElement.addClass("active");
    }

    ////
    var param = {};
    param["startswith"] = letter;
    MManual.utils.replaceState(param, true);
}

function MakeViewSelector() {
    $('.select-tab a').click(function () {
        $('.select-tab a').removeClass('active');
        $(this).addClass('active');
        $(".drug-table").hide();
        var item = $(this).attr("href").replace("#", ".");
        //if (typeof console !== "undefined" || typeof console.log !== "undefined")
            //console.log(item);
        if (item == ".intro") {
            $(".letter-pager").hide();
        } else {
            $(".letter-pager").show();
            currentTable = item.trim();
            dtabs[currentTable].search('^' + $(".letter-pager a.active").first().text() + '.*', true, true).draw();
        }
        $(item).show();
    });

}

function SetDefaultViewForEdition() {
    var mManualEdition = MManual.utils.getCurrentEdition();
    if (mManualEdition == "Professional") {
        $("a[href*='#drugDrugTitleTrade']").click();
    } else {
        $("a[href*='#drugTitleGenericTable']").click();
    }
}

function PrepareDrugTables() {
    MakeLetterPaginator();
    dtabs['.drugDrugTitleTrade'] = $(".drugDrugTitleTrade  table").DataTable({
        paging: false,
        "search": {
            "search": '^A.*',
            "regex": true,
            'aoColumnDefs': [{
                'bSortable': false,
                'aTargets': [-1] 
            }]
        }
    });
    dtabs['.drugTitleGenericTable'] = $(".drugTitleGenericTable  table").DataTable({
        paging: false,
        "search": {
            "search": '^A.*',
            "regex": true,
            'aoColumnDefs': [{
                'bSortable': false,
                'aTargets': [-1] 
            }]
        }
    });

    $(".drug-table").hide();
    $(".letter-pager").hide();
    $(".letter-pager > a:first-child").addClass('active');
    $(".intro").show();
    MakeViewSelector();

}

$().ready(function () {
    if ($(".dtables").length > 0) {
        PrepareDrugTables();
        SetDefaultViewForEdition();

        var letterParam = MManual.utils.getUrlParameter("startswith");
        var letter = letterParam ? letterParam.toUpperCase() : null;
        if (letter != null) {
            if (letter.length == 1) {
                var letterObject = $(".letter-pager a:contains('" + letter + "')").first();
                ChangeLetter(letterObject);
            }
        } else {
            var param = {};
            param["startswith"] = "a";
            MManual.utils.replaceState(param, true);
        }
    }
});
;
(function (MManual) {
    MManual.quizzes = {

        openPopup: function (link) {
            var validLink = $(link).prev();
            var url = validLink.attr("href");
            var lang = window.location.pathname.split("/")[1];
            var quizzesBaseUrl = url.substr(0, url.indexOf("base_url")) + "base_url=" + encodeURIComponent(window.location.origin);
            url = getCorrectQuizzesUrlWithLanguages(url, quizzesBaseUrl);
            MManual.iframeplayer.show({ src: url }, MManual.analytics.eventParticipateInQuizz);

            return false;
        },


    };

}(window.MManual = window.MManual || {}));
;
(function (MManual) {
    MManual.externalLink = {

        openPopup: function (link) {
            var validLink = $(link).prev();
            var url = validLink.attr("href");

            MManual.iframeplayer.show({ src: url }, MManual.analytics.eventParticipateInQuizz);

            return false;
        },


    };

}(window.MManual = window.MManual || {}));
;
(function(MManual) {
    MManual.analytics = {
        eventParticipateInQuizz: "ParticipateInAQuiz",        
        eventUseCalculator: "UseACalculator",
        eventToggleEditions: "ToggleEditions",
        eventShareAnArticleMail: "ShareAnArticleMail",
        eventShareAnArticleFb: "ShareAnArticleFb",
        eventShareAnArticleTw: "ShareAnArticleTw",
        eventShareAnArticleGp: "ShareAnArticleGp",
        eventShareAnArticleLi: "ShareAnArticleLi",
        eventShareAnArticleWb: "ShareAnArticleWb",
        eventShareAnArticleQQ: "ShareAnArticleQQ",
        eventShareAnArticleOk: "ShareAnArticleOk",
        eventShareAnArticleVk: "ShareAnArticleVk",
        eventPrintAnArticle: "PrintAnArticle",
        eventRateATopic: "RateATopic",
        eventVideoStarted: "VideoStarted",
        eventVideoCompleted: "VideoCompleted",
        eventNone: "None",
        
        trigger: function (eventName) {
            //if (eventName == MManual.analytics.eventNone)
            //    return;

            //$.ajax({
            //    url: '/Custom/Analytics/TriggerGoalByName',
            //    type: "POST",
            //    dataType: "json",
            //    data: {
            //        goalname: eventName
            //    },
            //    error: function(jqxhr, textStatus, errorThrown) {
            //        console.error(errorThrown);
            //    }
            //});
        },
        notifyOpenModal: function (modalType, title) {
            var currentLanguage = $("#currentLanguage").val().toLowerCase();
            var analyticPathWithNoLanguage = ($("#currentEdition").val() + "/" + modalType + "/" + title.replace(/\s+/g, '-')).toLowerCase();
            var analyticPath = window.location.pathname.toLowerCase().indexOf("/" + currentLanguage) > -1 ? currentLanguage + "/" + analyticPathWithNoLanguage: analyticPathWithNoLanguage;
		
            if (window.dataLayer) {
                dataLayer.push({
                    'event':'VirtualPageview',
                    'virtualPageURL': analyticPath,
                    'virtualPageTitle' : modalType + " - " + title
                });
            }  
            else {
                console.log("Google Analytic is not enable on the site and for Media with Path:  " + analyticPath);
            }
        }
    };

}(window.MManual = window.MManual || {}));;
// Brightcove namespace
var MManualBrightcove = {};

MManualBrightcove.onTemplateLoad = function(experienceID) {
    // get references to the player and API Modules and Events
    MManualBrightcove.player = brightcove.api.getExperience(experienceID);
    MManualBrightcove.APIModules = brightcove.api.modules.APIModules;
    MManualBrightcove.adEvent = brightcove.api.events.AdEvent;
    MManualBrightcove.captionsEvent = brightcove.api.events.CaptionsEvent;
    MManualBrightcove.contentEvent = brightcove.api.events.ContentEvent;
    MManualBrightcove.cuePointEvent = brightcove.api.events.CuePointEvent;
    MManualBrightcove.mediaEvent = brightcove.api.events.MediaEvent;
};

        // logging
MManualBrightcove.log = function(message) {
    if (window["console"] && console["log"]) {
        var d = new Date();
        console.log(d + ": ");
        console.log(message);
    }
};


        // template ready event handler
MManualBrightcove.onTemplateReady = function(evt) {
    MManualBrightcove.videoPlayer = MManualBrightcove.player.getModule(MManualBrightcove.APIModules.VIDEO_PLAYER);
    MManualBrightcove.videoPlayer.addEventListener(brightcove.api.events.MediaEvent.COMPLETE, MManualBrightcove.onMediaComplete);
    MManualBrightcove.videoPlayer.addEventListener(brightcove.api.events.MediaEvent.BEGIN, MManualBrightcove.onMediaStarted);
};


MManualBrightcove.onMediaComplete = function() {
    MManual.analytics.trigger(MManual.analytics.eventVideoCompleted);
};

MManualBrightcove.onMediaStarted = function() {
    MManual.analytics.trigger(MManual.analytics.eventVideoStarted);
};

;
(function (MManual) {
    MManual.navigationHistory = {
        cookieName: "MManualNavigationHistory",

        getHistory: function () {
            return amplify.store(MManual.navigationHistory.cookieName);
        },

        storeHistory: function (historyData) {
            amplify.store(MManual.navigationHistory.cookieName, historyData);
        },

        updateMManualNavigationHistory: function (itemData) {
            var historyData = MManual.navigationHistory.getHistory();
            if (!historyData) {
                historyData = {
                    current: itemData,
                    previous: null
                }
            } else {
                if (!historyData.previous || (historyData.current.itemId != itemData.itemId)) {
                    historyData.previous = historyData.current;
                    historyData.current = itemData;
                }
            }

            MManual.navigationHistory.storeHistory(historyData);
        }
    }

}(window.MManual = window.MManual || {}));
;
var accessConfirmationPopup = {
    cookieName: "",
    popupMessage: "",
    logoText: "",
    dialogYesText: "",
    dialogNoText: "",
    checkIfAlreadyConfirmed: function () {
        var cookieValue = this.readCookie();
        if (cookieValue) {
            $('.wrapper').removeClass('blur');
            $('.search-panel').removeClass('blur');
            $('header.top').removeClass('blur');
            return true;
        }
        else {
            $('.wrapper').addClass('blur');
            $('.search-panel').addClass('blur');
            $('header.top').addClass('blur');
            return false;
        }
        
    },

    removeTrailingSlash: function(url)     
    {   
        return url.replace(/\/$/, "");
    }, 

    isChina: function(urls) {
        return urls.indexOf("msdmanuals/zh") > 0 || urls.indexOf("msdmanuals.cn") > 0 || urls.indexOf("msdmanuals.com/zh") > 0;
    },

    showConfirmationModal: function (cookieName) {
        var self = this;
        $.Zebra_Dialog(this.popupMessage, {
            'type': 'question',
            'title': this.logoText,
            'overlay_close': false,
            'show_close_button': false,
            'buttons': [
                {
                    caption: this.dialogYesText,
                    callback: function () {
                        document.cookie = cookieName + "=true;path=/";
                        accessConfirmationPopup.checkIfAlreadyConfirmed();
                    }
                },
                {
                    caption: this.dialogNoText,
                    callback: function () {
                        var windowLocation = window.location;
                        var windowHistory = window.history;
                        var windowUrls = window.location.href;
                        var previousPageUrls = self.removeTrailingSlash(document.referrer);
                        var landingPageUrl = self.removeTrailingSlash($('#landingPageUrl').val());

                        if (self.isChina(windowUrls)) {
                            if (windowHistory.length > 1 && previousPageUrls !== landingPageUrl && (self.isChina(previousPageUrls))) {
                                windowHistory.back();
                            }
                            else {
                                window.location.href = $('.editionSwitch.view-edition').attr('href');
                            }
                        }
                        else {
                            if (windowHistory.length > 1) {
                                windowHistory.back();
                            }
                            else {
                                window.location.href = landingPageUrl;
                            }
                        }
                        $(".ZebraDialog").hide();
                        return false;
                    }
                }
            ]
        });

    },
    readCookie: function () {
        var nameEQ = this.cookieName + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }
};
(function (MManual) {
    MManual.pageStateStore = {
        cookieName: "MManualPageStateStore",
        expirationTime: 3600000, //1 hour

        getAllPagesState: function () {
            return amplify.store(MManual.pageStateStore.cookieName);
        },

        getPageState: function () {
            var statesData = MManual.pageStateStore.getAllPagesState();
            var key = window.location.href;
            if (!statesData) {
                return null;
            }
            return statesData[key];
        },

        storePageState: function (state) {
            amplify.store(MManual.pageStateStore.cookieName, state, {
                expires: this.expirationTime
            });
        },

        updatePageState: function (state) {
            var statesData = MManual.pageStateStore.getAllPagesState();
            var key = window.location.href;
            if (!statesData) {
                statesData = {};
            }
            statesData[key] = state;

            MManual.pageStateStore.storePageState(statesData);
        }
    }

}(window.MManual = window.MManual || {}));
;
