
/* Tab-Container aufbauen **************************************************/

var a = new Array("uebersicht", "details", "zusaetze", "anlagen", "laufzettel");
var b = new Array("menueUebersicht", "menueDetails", "menueZusaetze", "menueAnlagen", "menueLaufzettel");

function show(e) {
    var i = 0;
    var j = 1;
    for (var t = 0; t < b.length; t++) {
        if (b[t] === e.id) {
            i = t;
            if (i > 0) {
                j = 0;
            } else {
                j = i + 1;
            }
            break;
        }
    }
    e.setAttribute("class", "btnAktiv");
    e.setAttribute("aria-selected", "true");
    for (var k = 0; k < b.length; k++) {
        if (k === i && (document.getElementById(a[k]) != null)) {
            document.getElementById(a[k]).style.display = "block";
            if (i === j)
                j = i + 1;
        } else {
            if (document.getElementById(a[k]) != null) {
                document.getElementById(a[j]).style.display = "none";
                document.getElementById(b[j]).setAttribute("class", "btnInaktiv");
                document.getElementById(b[j]).setAttribute("aria-selected", "false");
                j += 1;
            }
        }
    }
}

window.onload = function () {
    document.getElementById(b[0]).setAttribute("class", "btnAktiv");
    document.getElementById(b[0]).setAttribute("aria-selected", "true");
    // could be substituted by an xslt solution
    document.body.querySelectorAll('[data-title]').forEach(function(element, index) {
    element.setAttribute('title', element.getAttribute('data-title'));
    });
}

/* Eingebettete Binaerdaten runterladen   ************************************/


function base64_to_binary(data) {
    var chars = atob(data);
    var bytes = new Array(chars.length);
    for (var i = 0; i < chars.length; i++) {
        bytes[i] = chars.charCodeAt(i);
    }
    return new Uint8Array(bytes);
}

function downloadData(element_id, mimetype, filename) {    
    var data_element = document.getElementById(element_id);  
    var text = data_element.innerHTML;
    var binary = base64_to_binary(text);
    var blob = new Blob([binary], {
        type: mimetype, size: binary.length
    });

    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        // IE
        window.navigator.msSaveOrOpenBlob(blob, filename);
    } else {
        saveAs(blob, filename);       
    }
}


/* Polyfill IE atob/btoa   ************************************/

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define([], function () {
            factory(root);
        });
    } else factory(root);
    // node.js has always supported base64 conversions, while browsers that support
    // web workers support base64 too, but you may never know.
})(typeof exports !== "undefined" ? exports : this, function (root) {
    if (root.atob) {
        // Some browsers' implementation of atob doesn't support whitespaces
        // in the encoded string (notably, IE). This wraps the native atob
        // in a function that strips the whitespaces.
        // The original function can be retrieved in atob.original
        try {
            root.atob(" ");
        } catch (e) {
            root.atob = (function (atob) {
                var func = function (string) {
                    return atob(String(string).replace(/[\t\n\f\r ]+/g, ""));
                };
                func.original = atob;
                return func;
            })(root.atob);
        }
        return;
    }

    // base64 character set, plus padding character (=)
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
        // Regular expression to check formal correctness of base64 encoded strings
        b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;

    root.btoa = function (string) {
        string = String(string);
        var bitmap, a, b, c,
            result = "", i = 0,
            rest = string.length % 3; // To determine the final padding

        for (; i < string.length;) {
            if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255)
                throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");

            bitmap = (a << 16) | (b << 8) | c;
            result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63) + b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
        }

        // If there's need of padding, replace the last 'A's with equal signs
        return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
    };

    root.atob = function (string) {
        // atob can work with strings with whitespaces, even inside the encoded part,
        // but only \t, \n, \f, \r and ' ', which can be stripped.
        string = String(string).replace(/[\t\n\f\r ]+/g, "");
        if (!b64re.test(string))
            throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");

        // Adding the padding if missing, for semplicity
        string += "==".slice(2 - (string.length & 3));
        var bitmap, result = "", r1, r2, i = 0;
        for (; i < string.length;) {
            bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12 | (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++)));

            result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
        }
        return result;
    };
});
