﻿/* GORDIC GINIS loader */
"use strict";

function GINISLoader(queryObject) {
    var _this = this;

    if (window.__GINISLoader) throw "GINIS is already initialized!!!"
    this.initialized = false;

    this.query = queryObject;

    this.gup = function (name, url) { 
        if (!url) url = location.href;
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(url);
        return results == null ? null : results[1];
    }

    window.gjqServiceName = "gin/webservices/GJQuery.asmx";

    if (_this.check()) {
        _this.startPage();
        _this.initScripts("gin/gui/loader.ashx?v=2"); 
    }
}

GINISLoader.prototype.initScripts = function (url) {
    var _this = this; 

    var onError = function (xhr) {
        _this.failedPage({ title: "Loader: " + xhr.status + " - " + xhr.statusText, htmlSafe: true, message: "<a href='"+url+"'>Application Loader</a> failed. Check server connection.", completeMessage: "<iframe src='about:blank' id='errorFrame' style='width:100%' onload=\"this.style.height=(this.contentWindow.document.body.scrollHeight+30)+'px';\" />" });
        var frameDoc = document.getElementById("errorFrame").contentWindow.document;
        frameDoc.open();
        frameDoc.write(xhr.response);
        frameDoc.close();
    }

    var xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.onload = function () {
        if (xhr.status >= 200 && xhr.status < 300) {
            try {
                var scripts = JSON.parse(xhr.responseText);
                _this.load(scripts);
            } catch (exc) {
                _this.failedPage({ title: "Loader: " + exc.name, message: exc.message, completeMessage: xhr.response });
            }
        } else onError(xhr);
    };
    xhr.onerror = function () { onError(xhr); }
    xhr.send();
}

GINISLoader.prototype.load = function (obj) {
    this.scriptsToLoad = [];
    document.documentElement.setAttribute("lang", obj.lang);

    var min = this.gup("jsmin");
    for (var i = 0; i < obj.scripts.length; i++)
        this.scriptsToLoad.push(obj.scripts[i] + (min ? (obj.scripts[i].indexOf('?') >= 0 ? "&min=" + min : "?min=" + min) : ""));

    window.addEventListener("error", this.scriptSyntaxError, true);
    this.loadNextScript();

    for (var i = 0; i < obj.styles.length; i++)
        this.loadCss(obj.styles[i]);
}

GINISLoader.prototype.loadScript = function (js, done) {
    var _this = this; 

    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = js;
    script.onload = script.onreadystatechange = function () {
        if (!script.done && (!this.readyState ||
            this.readyState === "loaded" || this.readyState === "complete")) {
            script.done = true;
            if (done) done();
            
            // Handle memory leak in IE
            script.onload = script.onreadystatechange = script.onerror = null;
            if (document.head && script.parentNode) { 
                document.head.removeChild(script);
            }
        }
    };
    script.onerror = function (ev) {
        _this.scriptLoadFailed = true;
        _this.failedPage({ title: "LoadScript: " + js, htmlSafe: true, message: "<a href='" + js + "'>Track error</a>", completeMessage: "<iframe src='" + js +"' style='width:100%' onload=\"this.style.height=(this.contentWindow.document.body.scrollHeight+30)+'px';\"/>" });
    };
    document.head.appendChild(script);
}
GINISLoader.prototype.scriptSyntaxError = function (ev) {
    var _this = window.__GINISLoader; // kvuli addEvent/removeEvent je pouzivano jako instance (nelze pouzit bind) a vola se s contextem window
    _this.scriptLoadFailed = true;
    _this.failedPage({ title: "ExecuteScript: " + ev.filename, message: ev.message, completeMessage: ev.message + "\n  at: " + ev.filename + ":" + ev.lineno + "," + ev.colno });
    ev.preventDefault(); 
}
GINISLoader.prototype.loadNextScript = function () {
    var _this = this;
    if (this.scriptLoadFailed === true) {
        window.removeEventListener("error", this.scriptSyntaxError, true);
        return;
    }

    if (this.scriptsToLoad.length)
        this.loadScript(this.scriptsToLoad.shift(), function () { _this.loadNextScript(); });
    else {
        window.removeEventListener("error", this.scriptSyntaxError, true);
        this.initialized = true;
        this.ready();
    }
}

GINISLoader.prototype.loadCss = function (css) {
  var script = document.createElement("link");
  script.rel = "stylesheet";
  script.type = "text/css";
  script.href = css;
  document.head.appendChild(script);
}

GINISLoader.prototype.check = function () {
  if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { //test for MSIE x.x;
    var ieversion = new Number(RegExp.$1) // capture x.x portion and store as a number
    if (ieversion <= 8) {
      window.alert("Je potřeba minimálně IE9 (máte IE" + ieversion + "). Pokud již máte novější IE, vypněte režim kompatibility.");
      return false; 
    }
  }
  return true; 
}

GINISLoader.prototype.startPage = function () {
    //document.body.innerHTML = "<h1>Loading...</h1>";
    // Na poz. hl. architekta:
    // TEN BASE64 ZPUSOBUJE KOLAPS HIGHLIGHTING SERVICE + CLIPBOARDU!!!
    document.body.innerHTML = "<div style='height: calc(100vh - 16px); position: relative;'><img style='position: absolute; top: 50%; left:50%; margin: -18px -34px; border: 2px solid gray; border-radius: 20px;' alt='Loading' src='data:image/gif;base64,R0lGODlhQAAgAMQAAOYzKgcROnojMjcYN4wlMagpLxQTOdkxK1McNWshM0UbNiMVOAgROhoUOV4eNGEfM7osLQwSOsovLC4XN7ArLuQzKkwcNcUuLJYnMOEyKpsoL9MwKykWOCUWOM4vLAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZGE0YTg0Ni1hYjU1LWNjNGQtODRiOC1mNDM3MTk1ODg2YjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTc0NDBCMTg1RkJBMTFFNzg4OUFGMzJBNzY4Mzg5NEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTc0NDBCMTc1RkJBMTFFNzg4OUFGMzJBNzY4Mzg5NEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTBmZTFkODctMDFmMi00MDQyLWIzMDAtYmRiYzZjODdhNmVjIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmNkYTRhODQ2LWFiNTUtY2M0ZC04NGI4LWY0MzcxOTU4ODZiNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUDAB8ALAAAAABAACAAAAWB4CeOZGmeaKqubOu+cCzPdG3feK7vfK8HwOAOQCzegkihrcg0zpLQQK1JBcii0Vm1CsNiY9vty5uFhbkt8td1FrPU5VYbvYJDX3Nq2o7E55l7fEB+f0SBgoSFLoJSZoqLiI5/XXZaeVdqU200ZDdnR0lDTT6kpaanqKmqq6ytrqchACH5BAUDAB8ALAAAAAABAAEAAAUD4BcCACH5BAkDAB8ALAcABwAHABIAAAUO4CeOZGmeaKqubOu+ZggAIfkECQMAHwAsCAAHABIAEgAABTPgJ47kF5RlcKIrqb5sK75yOtK1jeeuuce3H3DHcwmHxxgR6Uv2mjBlMMoyUp8pXhFYCgEAIfkECQMAHwAsCQAHABIAEgAABSngJ45BaY4oaa5l+rFwi8axSsPvXes77//AoLAXFAltvJnPlaMxkTJUCAAh+QQJAwAfACwKAAcAEgASAAAFKuAnjkFpjihprmUqsnCrxuxM199N53rv/8DgjxckAo0+my41ZN5cKJgrBAAh+QQJAwAfACwMAAcAEgASAAAFKeAnjkxpjihprmUqsjCTxrFKw+9d63zv/8DfJygjDoE23kzp0rlQuFQIACH5BAkDAB8ALA8ABwAaABIAAAU64CeORmmOaKqa7Km+bVy+qWzTpB3jn36/AJ8MJxzCii0VoIdkKZnN2TFKjBpoSypPuy3yarrv1CUOAQAh+QQJAwAfACwRAAcAGQASAAAFUuAnjl1pjmiamuypvm1cvqhsv8Bn72mu77JBggDJ+IAyRQJTzCFlluXF+HuyEALN1Gm9SivcbsmSbYrEJSWTWu0KiWx0p0fq4upI2oqnh7X6IyEAIfkECQMAHwAsFAAHABcAEgAABV/gJ45DaY5oSppsqapt7KaAKMuIgF1H/d0xhUNQkGR8wJYigaFsALVkK4eBHKNSE/VSgf6ypWGxiwUPNVwvuLQlf8FUq/ctXRKc87WQMO7a4Ew8Pn9SKoN0MS+KiYoiIQAh+QQJAwAfACwXAAcAFQASAAAFZeAnjkppjmj6mWxpqQDZskhCFNIRizNrPQINRLfr0WwUSQYQM9KCwwpz5SwBNZfltFqy4bRNrjfLDFfHZbPzQcBKt1yHoAABU6tyTHR6N9ZuHnZ9Mz9QRChVf0mHMj0IMCozKiMhACH5BAkDAB8ALBkABwAVABIAAAV94CeOCOKUzjOuwGqWr5MIGuQdrXvu5kNTElxO9EKhEoQCRDj8wE4ox8+TAVhJvOKsxhwWoSdk4VK1er8oQVJSMefQsQQG6H5DiyY1vU688/RkfE4xT2KBfHg8M0pdOnh5c1SCRjEySUttTYNZKVONJE9HNDZMKyJgPaYiACEAIfkECQMAHwAsHAAHABIAEgAABXHgJ45JmQhEMVbA+CUPfKaQl92tKMcJodU4QE5mQlEuB5awtZP5gEvhyxRDFZBRYRMmwByDy2ZVQ7FlAdvTz5wl8nzlM3rbjZ95pfH3/IrxrFhZfXklT2xLOjxjV0lRJHg9a41SjzIokoguUyVdKiIsIQAh+QQJAwAfACweAAcAEAASAAAFYOAnjoJAaNTlHRkwfqWJFWoLuGIszJBn37nYKcW6AXW7AqRodCFRF6YxlpD1flMdQelr3kpVE9f71Y7J4NL2itaiul6YDio9CsK8TSUuV7/rJDF5WC9CMzV7OIUyKSstIQAh+QQJAwAfACwgAAcADgASAAAFWuAnjlhBXdtRAeNHYNq5ZSsrEq9MA/z9FhDPjsciCHKoYQ9HAEqUPOMvCAUwS0kiURqjaqM4rOprPWIo3u8VOCN/js3gWOsK676+Upo4smf5fTB3PS0fGiZ/IQAh+QQJAwAfACwiAAcADAASAAAFSeAnjpB0ZOj4UeWJAqJWtC8AfwW71fYn07YgRqPj2TC5i8cIQFKUwSgSGG0mXVXnBStN7qpNYonpm5kqVZHXGDN/gyp3TSWihgAAIfkECQMAHwAsIwAHAAsAEgAABT3gJ47ekZ3jd5UnAIwQ67pivLXzR63mTEMr3IwC7PkARNlxJzH6ks6h7eiCCn9Bqo6n/RSvMCVtxK2MU8oQACH5BAkDAB8ALCQABwAKABIAAAU44CeOR1YB47eZJypuJSC7XjyjEnzLX87ePdvtotsBiMIZ0nisMYMtoM/YW0V50OuoOEtZWymRLQQAIfkECQMAHwAsJQAHAAkAEgAABS3gJ45ZBYxfaZ6iCrzisb6n7MI2jev0dve/V47nm9E+w2Ny94s1WzdUFJUyhQAAIfkECQMAHwAsJgAHAAgAEgAABSLgJ44AMH5VaYqpyqol2roznNl4ru+8Wcc32wtGIhZjJ1kIACH5BAkDAB8ALCcABwAHABIAAAUZ4CeOwPgBqIiu6lq6cCzPdG2nccuerrn7IQAh+QQJAwAfACwnAAcABwASAAAFHeAnjsD4ASiJludauin8ynRtr62b47IIqymgyRcCACH5BAUDAB8ALCgABwAGABIAAAUY4CeKwAic5FmqKOu+cCzP7OfaNY6m5WiHACH5BAUDAB8ALAAAAAABAAEAAAUD4BcCACH5BAUDAB8ALAAAAAABAAEAAAUD4BcCACH5BAUDAB8ALAAAAAABAAEAAAUD4BcCACH5BAUDAB8ALAAAAAABAAEAAAUD4BcCACH5BAUDAB8ALCcACwACAAoAAAUJ4AeI4miSqBgCACH5BAUDAB8ALCcADQABAAYAAAUGIPCNHxACACH5BAUDAB8ALCYABwAHABIAAAUY4CeOwPiVJkqaJ9u6rLrGrgzPKWyL+1uHACH5BAUDAB8ALCYABwAGABIAAAUV4CeKwGh+5Zie6rmycOzOMsm+NRACACH5BAUDAB8ALCUACAAFABAAAAUU4Cd+gFiO6Emm7KiubmuiMB3TQAgAIfkEBQMAHwAsJAAHAAcAEgAABRrgJ47A+JWkeaKpybauuqqvWM+xfAO7bPunEAAh+QQFAwAfACwiAAcACAASAAAFHOAnjgAwfuWJqquaumx7vrPp2nWM57ceyz0dIAQAIfkEBQMAHwAsIQAHAAcAEgAABRvgJ47A+JUmSponC6ji67pwTNO1PLMtX9u8UwgAIfkEBQMAHwAsHwAHAAgAEgAABR7gJ44AMH7liZpn2rKv6sYyTNrifMur2vu6HRB3CwEAIfkECQMAHwAsHQAHABAAEgAABSbgJ45ASY6omaKkyrLum8aySNc3nr873886YLA1tP2ExSOyBsuFAAAh+QQJAwAfACwbAAcAEwASAAAFKOAnjkBpAmNKniy7tvALx3Mt1niu79/u+sCgrickBm9HJC8FVBlPzhAAIfkECQMAHwAsGAAHABYAEgAABUXgJ45HaR5jqn5nW2YwIAOke8bVTLO2ieu7nu834wmJOmMPWRS+mADnMweMSqG0K1Rpw3K7TJG2GhwDa8swOk2VrWyrUQgAIfkECQMAHwAsFgAHABgAEgAABVPgJ45XaY5oiprsqQIw2c7edmRwLs60jVc5wIfXuwGDQyLL9wsql7Wm82liBmHUUs14BWQvW2nuK7FeyWbk18ZVZ8Pd3butkz/Z4pVS9anrWXwpIQAh+QQJAwAfACwTAAcAGwASAAAFW+AnjlRpjmiqfmZ7riMAkG5NrbIs2jwU5zpeT7LJVIAzYQ1yIRqRLGWL6TkckVIX1YoEZKeXDRf7LW273jLl3I1+2VA1HOh+h5/0utQnau+yODkoSjA/KjWFKiEAIfkECQMAHwAsEQAHAB0AEgAABVjgJ4pYaWJjqq7j6aKsCgDk+8bjTNs8ru882+o3CwZTxKLRVqBcDknAkgl5RqevpgSaxLoKVS7RewJbu+SSVvxLl5DJT3pIlHt9utoSJ8q3jnx9NClCgSohACH5BAkDAB8ALA4ABwAgABIAAAVQ4CeOQmmOaKqqZnuuMACQbg2r8vzVvHCPuVmv9wsKh7aYEUlcGQFMnjIYTeKW1dY0l9U6sV3fN7jr3p7lbJGcZv5E7Hbz/cmhkHSUjOXKr0IAIfkECQMAHwAsDAAHACIAEgAABVLgJ45PaY5oqq6f6Z5sDADka8frTLd2j6M6Wm/4+H2CQuLth1T6cEiA88mKTpfV5tUF1W5L3eAXHNbxtkbk+ZoOitDGo/ntjI/m9KEduENh9yghACH5BAkDAB8ALAoABwAkABIAAAVU4C" +
        "eOSmmOaKqupOmWbDwCQPu+MkvX3+0rudSu9vsFRUNi8Xb8JJfGXBIA9QWnVab0mXVduV3Ydhg+jXe9cDOZ7q6HInfTiY5D5zMaaolH6VNafSkhACH5BAkDAB8ALAkABwAxABIAAAVd4CeOU2mOaKquLGu+Zyt/QD2LcF7ea23PuiAP5fvJgrqhqGh0IZND5u0JvTGbK2ouKgVqYbzr9PsKd4/knfnsTHPZ2fRECW9rlbS6yo3X7+94S1heQoEjg2NlhoYhACH5BAkDAB8ALAgABwAyABIAAAVn4CeOTWmOaKquH+C+rGjOZ2yLbw6ndF/eLJ3QhfIZgarhkGTsIVFK5ad5fEalVN+zdRVOs05kdwgOA8fCMs2Kzqln7Lbr/Yu3v++tnIgHb3FyMmp/gGNFfoRcXStUiVBRNmaOjzkqIQAh+QQJAwAfACwHAAcAMgASAAAFZuAnjlFpjmiqrh/gvqxozmdsi28Oq3Qf3TGdEJDy+YCq4ZBkPCJxyuWn6XxGlVTjs3UVZqu37vDbs4p1ZJr5/ErP1myAu4aMu6buLTeOT+vtTF96UGJFWYMjhTxNiChXNmWNSToqIQAh+QQJAwAfACwHAAcAMQASAAAFZeAnjkFpjmiqrkDrrqQpl3CNuvirznxg17lgC9Xr/VRCYazIO46SSRHT6PxAk9Ni9SrMUn/crnfmDAfH5KM5h5aV16726Q3/yKtWOMDexuuXWXgiaylegk9hO0yHN1A2TYxIOSohACH5BAkDAB8ALAcABwAwABIAAAVk4CeOQWmOaKqqQOuupCmXcD26+KvOfGDDuSAg1ev9UkJhrMg7ipJJEdPohCqnxaM1iaXatsJu8wcOimfaMu4sS6tb7BP53frEnR+6lI3X77t4T2VEWIE3WytThihWNmOLSDkqIQAh+QQJAwAfACwHAAcALgASAAAFY+AnjkFpjmiqokDrrqQpl3D9ufirznxgq7lgC9Xr/UZCYazIO96SQRHT+IMmp8WqNYilwrbCbrMG5opltnLujCarXexT+g34xI/0+h2vXmKdT2ApXYAiZTtMhUhQNmOKLDkqIQAh+QQJAwAfACwHAAcALAASAAAFYOAnjkFpjmiqikDrrqQplzDs3q8670Gd4sAWisfzsYLAGHFnRAZFy2LNiYwSp1SgVarKBrfMlVcLltnGt7JZjHapT+f25+1rC+l1tNJq/OiHfH1+XjpLgiNUPmGHKEkpIQAh+QQJAwAfACwHAAcAKgASAAAFZuAnjkFpjmiqHmyromZ8vmtrs6+sBzR6/4fUbtf7AIGkIfF1PIqUw1rz94EqfdOjdThxECBZ7VY38ILDvzHZjE6rY91v+/aOYee4OkPafr5peElbRX0wVkUiYTlXiIlNRTqNfDgpIQAh+QQJAwAfACwHAAcAJwASAAAFeeAnjkFpjmg6SmwrqaQplzDq3qw670H94UAUb6gCGkXD4UIh0FyMx0+SN0E0n1DgdGcYOAgFbPa2nXUfBIp43CrLGgq0mk12lxqDRJpet5/3fG12AWcCc4EvgxFVAmGIiYNLCU6IMW5FfEJbPnQ6ST4iYz47oClBKCEAIfkECQMAHwAsBwAHACUAEgAABXvgJ45BaY5o+kFsq6JmfL5ra7OvrDNNev842E7WUSQIBaCSNIwZJgiBhqJcfpqxxuCBrC6xsYWx6wWCTRxLAkMt/86MyEQ9db/hc2nb3oLLjWx8Nn5iR3uCV2daXEmCECJwT1GBiJBnRYyVTFg9KHY5TTQ1VjQ6op43KiEAIfkECQMAHwAsBwAHACIAEgAABYjgJ45BaY7oWFDrmqZmXBoc2t73+8nyMjgCTGHIwhUpKF6sMbEkCMSokShSLhVAjXR6rFoZNMVzuD1uv7OmADpts9ABwwARJJu5K3jjV7/77Xp8Wn9ugXRChH9wNAgJQm5tO2hNY2WWLnA+WXacUyRfTE5skF2fVpp1l6VJVjQ2iTqmJ7EfWy8hACH5BAkDAB8ALAcABwAgABIAAAV54CeOQWmO6KetbJqa8DJZj0BgbN66sGl0CodNR1y9eqXGAJG4FYskJOMXFOCe0I90OmtesTrtVokYgotbxmIg/J5z6UXV/V7F53VdnG3Nw8dLZn4aYkgGXU5+ImkceIqLhmReeUc9VEKJYC6FMA0zNZlZm5xTo0QuIQAh+QQJAwAfACwHAAcAHgASAAAFeOAnjkFpLJP1iETrtmNMlkzUpI8gvDwsfzQTR+FI9I4EWbC0GCASO2RvFjQMHVHpFLi8WaDaI3fZfIbFS+ageD6mI9ds2/XuKBDyOaHuNOrpaWV+fyJpXmCEYzRWRHlnVDSCjlJKVVeDYT+KNjg6mZqFJigqLGIyIQAh+QQJAwAfACwHAAcAHAASAAAFb+AnjozRTAqSJELrtmNMBtGZsm8Oyx8dGJ2BCqfLyXy1geJBLBpFSKCw6XxGUQ5q1dVDNpSPrbPrW0zFTiTDrEIX1WytGy4Mu3Pqr8V+312XcltQSBxnfQIzNHpZfUc0Um1uPGQ2kYKTUCYoQ2MyIQAh+QQJAwAfACwHAAcAGgASAAAFaeAnjk03WMiTrOw6vmNkLKejtngCi0y0TApEbqh7BWScQYo4jB0bA4WDSeQFZjVq83jlBLVEbgMoBOfEZPP5CZyqW+jvm4VWzlkfbtJye1t9bXdOM0FuZjA9P3JgO3lYKIyNIiUnS00wIQAh+QQJAwAfACwHAAcAGAASAAAFXOAnjtxgIYijrs7ojk15srT6isYyKGntu5EYz0dsfRi5Xa9IEwUnJiYx8BxKa9SO8nGlIXVWbteR3Y5X30n4nFUvz8dY9Gz7mt7XUdVCdyXXTDdyM4E3JHd4Ni8hACH5BAkDAB8ALAcABwAXABIAAAVS4CeOg6JYSKoiYztyJSqvqit28Uyv7jLFuyBLZMCdhEJR46dD8opMpxB6lO6KQCuN2tRiq1qVYTnoWj9ks5MIA2tHvrJ618tKbZ/2PIUnmcw2IQAh+QQJAwAfACwHAAcAFgASAAAFQ+AnjoNinueojlOJvuYqtnCtrNzg2u+40LzabBK0fRq5ovC3U6KYThg0+kxST8hmdHiNfaZUli6sAiplHzMPTdKmViEAIfkECQMAHwAsBwAHABUAEgAABTvgJ45DaZpjOk5ni6of686qPNMiZ99uzvOfxe53Cg6Jps4ROVAyXc7nSSh9caql3PK3qtaesBgyTLrBQgAh+QQJAwAfACwHAAcAFAASAAAFN+AnjtxkntOokmhrrmLpuqs807F9t/k+fwvfriO8EYuuIxKlXJqCztNHh+w5WctaFUbFwawoWAgAIfkECQMAHwAsBwAHABMAEgAABSngJ45LaS5jSp4sqn5t7IpyvNYtje987//AoJAFCxZ/N57K99q9UjZVCAAh+QQJAwAfACwHAAcAEwASAAAFKeAnjk1pNmNKniyqfm2sxvRKy/At6zXv/8Cg8CcaFoU230z54r1SuFQIACH5BAkDAB8ALAcABwASABIAAAUo4CeORmkaYyqebKm2MErG7UrX363vfO//QGDuN+zNeEedqhhbJk2qEAAh+QQJAwAfACwHAAcAEgASAAAFJ+AnjlFpjihprmX6sfCpxuxM1zf95nzv/8CgMCgiFn2onyvnStZSIQAh+QQFAwAfACwHAAcAEgASAAAFJ+AnikxpMmM6niyqtvALt+sc2/OH73zv/8BgkPSr8VI9FTGnXJ6UIQAh+QQJAwAfACwHAAcAEgASAAAFJuAnikFpBmM6niyqtnAKz+sc2zSu73zv/0AgyTfkyXaqYiypNCVDACH5BAkDAB8ALAcABwASABIAAAUn4CeKQWkGYzqeLKq28Au36xzb84fvfO//wGCQ9KvxUj0VMadcnpQhACH5BAkDAB8ALAcABwASABIAAAUn4CeOQWmOKGmuZfqx8KnG7EzXN/3mfO//wKAwKCIWfaifK+dK1lIhACH5BAUDAB8ALAcABwASABIAAAUn4CeOQWkGYyqebKl+bZzG9ErL8K3vfO//wKAsmPORjMfdS/mysVQhACH5BAUDAB8ALBgACwACAAoAAAUJYPCNpGh+YvmFACH5BAUDAB8ALBQABwAGABIAAAUUYPCNZFmKJpqea+u+nzrKqUyTdAgAIfkEBQMAHwAsFgAIAAUAEAAABRJg8I1kaY7iSaZoyX5vrMLzWoYAIfkEBQMAHwAsFQAHAAcAEgAABRhg8I3kKJYmmqpn2bpsjL4rbN91/r30FwIAIfkEBQMAHwAsFgAHAAcAEgAABRhg8I3kKJYmmqpn2bpsjL4rbN91/r30FwIAIfkEBQMAHwAsFwAHAAcAEgAABRpg8I3kKJbmWQYq2abo98rxbNcom+et7q6xEAAh+QQFAwAfACwYAAcACAASAAAFHmAQfGRJiqY5pif7oeyawqpc0rd96i/v+7GZDUcKAQAh+QQFAwAfACwNAAcAFQASAAAFLOAnfkxpnsyoimhrrqQrr3I91jaLz/He9r6gcEgsCnVF5FCVvC1pQZjSBQsBACH5BAkDAB8ALAwABwAYABIAAAU+4CcyZGScaGqILFuaany2Y2TLePvivHvzuRoMKBMSc7ujLKlUMZuoJ3RFmqaMVqr06PtBdV4lbRsck1G0TwgAIfkECQMAHwAsDAAHABoAEgAABVXgF4yk8Z1np64dipKl0Sw0a7cvHMnz7eexXs3HOul4xKQoOEzaloydrOlkwabUqioo1FqZXtu1G96Cy+bojuyFRrFot5TtNB7pRCA3+3Tpdi4fP4EhACH5BAkDAB8ALAwABwAcABIAAAVT4BeM5Gee56CuqEm+kdEs02rfKEzOXH3/KpdO1gMahTCecSmCEX1L4FAZlTppVeOQBs2utkWvDSy+gbviKbasUofFTSfVi0xy4XH5OtrStVA/fyEAIfkECQMAHwAsDAAHAB8AEgAABWngF4zkZ56oaa1sKpJw4H5sXaNx3HSDotjA1SlHMjQmvaDSRGREdhOfctl8In/T4CtnvGaVTcMiiv3awmOp+UwUk9ds7ngAj8e69DqrekzqtzlQanCAd3NlZkx8PINZQ00zXyk5MylALiEAIfkECQMAHwAsDAAHACIAEgAABW3gF4zkZ55o+qxsKpJw4KpsvaJxPtv8bea5xalHfPyAJMNioHAUe0cko8EZWJxP3ktKVSCw2doWuZh4w1opI1I+o21qtvn7rsW79LrxPtff+FZgb2NASkyCYVFcQ3WKQDuJjjAzKE8pOpQuWikhACH5BAkDAB8ALAwABwAkABIAAAVi4BeM5GeeaGoKbKuS8KjObe2ecTyjdi/gOdju4/OZgjpVsShCJldLoxNmmCgciWhxSqpetVsuo2HFgnvicfmMFnvN7Fb6Ha/NefXmlBbXI4dsR05DUFFAQYQnhig5iUo2KiEAIfkECQMAHwAsDAAHACcAEgAABXrgF4zkZ55omhJsq5LwqM5nixH3TaBxTK+4YGt46vl+pmEwJzQZjzShUolxPktR21S7u8KizKXY5cWqqFtxWTbjjnWtdQDsltrkWTs8TMC392gsNyJlP258cIReSIGCNlZXSElwjpWQRpJJY5U7l1CZH3U4KT2gbWIqIQAh+QQJAwAfACwMAAcAKQASAAAFeOAXjORnnmiqfkXrqmQ8rvTpai3eorJcrznXbWfq+X42YUGnLBpjSNYySGWKniWkcju8Ymc1oW5MbX2ztCl3izuD0+Jq2R34lddCul1JVuv0YXd4BW5RbHJLXliGfXiKRlEmh34FTk+RNkxcJ4uYSX04KT2eQE0pIQAh+QQJAwAfACwMAAcAKwASAAAFX+AXjORnnmiqnlDrqmQ8rnTq3u8pyzWN/y3dLtZTAYGmIa9oOh5FyhLT+YwSi1SkVdrLArczrBcHDkzHt/IZ3VKL2VAr88MOgud0+BbfHCejfH1ZQkOBKFQpO4YrPyohACH5BAkDAB8ALAwABwAsABIAAAVh4BeM5GeeaKqiUuuqZDyutOre7ynLdY//Et0u1lsBgaYhr3g6HkXKEtPkREaJzOrxKi1qgdxZ9osLB6bkchiddpnZbcl6+olDr/R6+67MU8lJUX5NWkJDgyxOKTuIRjgqIQAh+QQJAwAfACwMAAcALQASAAAFY+AXjORnnmiqpkfrqmQ8rvTq3u8py3X/4cCDbhfz2YJAE5FnPCGRomWpaXoGo9JZ04rMTo3coFcLDuPGAar5PFavXWj3+9Cm/t5Yqf2+zhP3VWZKeoCBVkN/hU5PKTuKRzcqIQAh+QQJAwAfACwMAAcALgASAAAFY+AXjORnnmiqqlnrqmQ8rjTt3u8py3X/4cCWbhfz2YJAE5FnRCGRomWpaXpCpUWqNRjFBqi/LdA704px5K/57EqD2Tf3mt2VgsPw+vKOP+t3fFV+f1mBg4RlgSdWKYCKK0kpIQAh+QQFAwAfACwMAAcALgASAAAFZOAXjORnnmiqqkDrqmQ8rjTt3u8py3Vv4kCAbhfz2YJAE5FnRCGRomWpeXoGo9IZ1YrMTpvcoFcLDuPGAerHfB6r2Tf0G95yq9dwrPSOZ+uJfD9mSnuBglZDgIZVTyk7iytJKSEAOw=='></div>";
}

GINISLoader.prototype.failedPage = function (exc) {
//    return; 
    var sanitize = exc && exc.htmlSafe !== true && typeof htmlEncode !== "undefined" ? htmlEncode : function (i) { return i; };
    if (exc && exc.handled !== true) {
        if (typeof exc === "string")
            document.body.innerHTML = "<h1>Failed - " + sanitize(exc) + "</h1>";
        else if (exc.nonFatalMessage)
            document.body.innerHTML = "<h1>" + sanitize(exc.nonFatalMessage, true) + "</h1>";
        else if (exc.errorType == "info")
            document.body.innerHTML = "<h1>" + sanitize(exc.message, true) + "</h1>";
        else
            document.body.innerHTML = "<h1>Failed</h1>" + (exc.title ? "<b>" + sanitize(exc.title) + "</b><br><br>" : "") + (exc.message ? sanitize(exc.message, true) + "<br><br>" : "") + (exc.completeMessage ? sanitize(exc.completeMessage, true) : "");
        exc && (exc.handled = true);
    } else if (!exc)
        document.body.innerHTML = "<h1>Failed</h1>"
}
GINISLoader.prototype.logoutPage = function (opts) {
    window.__GINISLoader = undefined; 
    window.gjqServiceName = undefined; 
    window.gstor = undefined; 
    window.gscript = undefined;
    window.GDlg = undefined;
    window.GContent = undefined; 
    window.Gordic = undefined;
    var highestId = window.setTimeout(function() { }, 0); 
    for (var i = highestId; i >= 0; i--) window.clearInterval(i); // zastaveni vsech timeru

    opts = opts || {};
    document.body.innerHTML = "<h1 class='g-state-"+(opts.status||"success")+" g-state-lightbackground'>" + (opts.reason || "") + "</h1>" + (opts.backText && opts.backScript ? "<a id='backlink' href='" + opts.backScript + "'>" + opts.backText + "</a>" : "");
    $(document).trigger("applicationclosed", [opts]);

    if (opts.backAuto===true)
        window.setTimeout(function () { var a = document.getElementById("backlink"); a && a.click(); }, 2000);
}

GINISLoader.prototype.ready = function () {
    var $this = this;
    $("body").addClass("gwebapp");
    var queryObj = queryStringToObj(); 
    queryObj.starting = true;
    if (typeof queryObj.jsmin !== "undefined" && window.gscript && window.gscript.urlParams) window.gscript.urlParams.push("min=" + queryObj.jsmin);
    $("<div id='main' class='main'></div>")
        .gcontent("Gordic.Gui.WebApp.GWebAppBase:CreateMainApp", {
            userSettings: false, loginDialogCreator: function () { return $("<div>").dialog({ modal: false }).dialog("dock").attr('role', 'main'); } // prvni login je fullscreen
        })  // pro jistotu vypneme US, globalni gstor se nacita az v onloadu
        //        .on("loginopen.main", function (ev, obj) { obj.loginWindow.dialog("dock"); })
        .on("contentloaded.main", function () { $(this).off(".main"); $.content(this).loginDialogCreator = null; $("body").html(this); })
        .on("contentworking", function (ev, working, status, content) {
            if (ev.isDefaultPrevented() || ev.target !== this) return; 

            if (working === false && $(this).is(".gcover")) $(this).gcover("destroy").removeAttr('aria-busy');
            else if (working === true) $(this).gcover(status).attr('aria-busy', 'true');

            ev.preventDefault();
        })
        .on("closed", function (ev, result) { if (ev.target === this && ev.content.loaded === true) $this.logoutPage(result); })
        .gcontent("load", queryObj, queryObj.c != null ? [queryObj.c, queryObj, false] : null)
        .fail(function (jqXHR, type) { // TODO: vygenerovat vyjimky z beznych status kodu az bude funkcni exceptionInfo
            if (type != "exception" && jqXHR && jqXHR.status && !(jqXHR instanceof GError)) // uz by nemelo nastavat. Regulerni fail content.load by mel vzdycky vratit Error a ten by mel byt uz zobrazen dialogem
                $this.failedPage(jqXHR.statusCode ? { title: jqXHR.status + " - " + jqXHR.statusText, message: jqXHR.url || "" } : type);
            else if (jqXHR instanceof GError) {
                $("body").removeClass("gwebapp");
                $this.failedPage(jqXHR);
            }
        }); 
}


if (document.readyState != 'loading') 
    window.__GINISLoader = new GINISLoader();
else document.addEventListener("DOMContentLoaded", function () {
    window.__GINISLoader = new GINISLoader();
});

