﻿if (!window.FSN) {
    FSN = {};
}


(function() {
    var PATTERNS = {
        HJELPEIKON: "<a target='_blank' href='{0}' class='help'><img style='border-width: 0px;' title='Klikk for å gå til informasjonsside' src='/gui/gfx/icon_qmark.gif' /></a>",
        HJELPUTENLINK: "<span class='help'><img style='border-width: 0px;' title='{0}' src='/gui/gfx/icon_qmark.gif' /></span>",
        OVERSKRIFT: {
            RAD_START: "<tr>",
            RAD_SLUTT: "</tr>",
            BEHANDLINGSSTED: "<th class='colBehandlingssted'><div><a class='headertext' href='#'>Behandlingssted ({0})</a></div></th>",
            BESOEKSSTED: "<th class='colSted'><div><a class='headertext' href='#'>Sted</a></div></th>",
            VANLIG: "<th><div class='h'><a class='headertext' href='#'>{0}</a> {1}</div></th>",
            TOM: "<th><div class='h'></div></th>"
        },
        INNHOLD: {
            RAD_START: "<tr>",
            RAD_SLUTT: "</tr>",
            BEHANDLINGSSTED: "<th class='even'><a href='/sidemaler/BehEnhetInfo.aspx?id=2065&BehEnhetId={0}' onclick='FSN.visBehandlingssted({0});return(false);'>{1}</a></th>",
            BESOEKSSTED: "<td class='odd'>{0}</td>",
            VENTETIDER: {
                INFO_HOVER: "<img src='/gui/gfx/icon_info.gif' alt='{0}' title='{0}' />",
                INGEN_DATA_UTEN_LINK: "<span class='notApplicable'>-</span>",
                DATO: "<span class='{0}'>{1}</span>",
                CELLE: "<td class='{0}'>{1}</td>"
            },
            VOLUM: "<span class='volum'>{0}</span>",
            MIDTSTILLT: "<span class='midtstillt'>{0}</span>",
            INDIKATORER: {
                NUMMER: "<td class='{0}'><a href='#' onclick='FSN.byttTabellvisning();'><span title='Landgjennomsnitt: {1}<br/><br/>Klikk for å gå tilbake til kvalitetsindikatorer' class='kiIntervall'>{2}</span></a></td>",
                TALL: "<td class='{0}'><a href='#' onclick='FSN.byttTabellvisning();'><span title='Landgjennomsnitt: {1}%<br/><br/>Klikk for å gå tilbake til kvalitetsindikatorer' class='kiIntervall'>{2}%</span></a></td>",
                IKON: "<td class='{0}'><a href='#' onclick='FSN.byttTabellvisning();'><div align='center'><img title='{1}' src='/gui/gfx/{2}.gif' alt='{2}' /></div></a></td>",
                INGEN_DATA: "<td class='{0}'><a href='#' onclick='FSN.byttTabellvisning();'><span class='notApplicable kiIntervall' title='Det foreligger ikke erfaringsdata for dette behandlingsstedet.'>-</span></a></td>"
            }
        }
    };
    var FORELDET_OPPDATERING_MILLISEKUNDER = 38 * 24 * 60 * 60 * 1000;

    FSN.visTall = false;
    FSN.resultat = null;

    FSN.byttTabellvisning = function() {
        if (FSN.opplysning == "samlet") {
            jQuery("#opplysninger input[value='indikatorer']").click()
        }
        else if (FSN.opplysning == "indikatorer" || FSN.opplysning == "erfaringer") {
            FSN.visTall = !FSN.visTall;
            fyllTabell();
        }
    }

    var hjelpeIkon = function(url) {
        if (url) {
            if (url.substring(0, 1) == '/') {
                return $.format(PATTERNS.HJELPEIKON, url);
            }
            else {
                return $.format(PATTERNS.HJELPUTENLINK, url);
            }
        }
        else {
            return "";
        }
    }

    var fyllTabell = function() {
        var tabell = jQuery("#tabell");

        tabell.attr("summary", FSN.resultat.Sammendrag);
        var thead = $("thead", tabell);
        thead.empty();
        var overskriftsrad = PATTERNS.OVERSKRIFT.RAD_START
                                + $.format(PATTERNS.OVERSKRIFT.BEHANDLINGSSTED, FSN.resultat.Innhold.length)
                                + PATTERNS.OVERSKRIFT.BESOEKSSTED;
        for (var i = 0; i < FSN.resultat.Overskrifter.length; i++) {
            if (FSN.resultat.Overskrifter[i]) {
                overskriftsrad += $.format(PATTERNS.OVERSKRIFT.VANLIG, FSN.resultat.Overskrifter[i], hjelpeIkon(FSN.resultat.Hjelpelinker[i]));
            }
            else {
                overskriftsrad += PATTERNS.OVERSKRIFT.TOM;
            }
        }
        overskriftsrad += PATTERNS.OVERSKRIFT.RAD_SLUTT;
        thead.append(overskriftsrad);

        var tbody = $("tbody", tabell);
        tbody.empty();
        for (var i = 0; i < FSN.resultat.Innhold.length; i++) {
            tbody.append(hentRad(FSN.resultat.Innhold[i], FSN.resultat.Feltnavn, FSN.resultat.Visningstyper, FSN.resultat.Hjelpetekster, FSN.resultat.Landsgjennomsnitt));
        }

        tabell.tablesorter({
            textExtraction: fsnTextExtraction,
            widgets: ['zebra', 'hover']
        });

        tabell.trigger("tableReady");

        initTooltip(tbody);
    }

    var initTooltip = function(tbody) {
        jQuery("td img, td span.kiIntervall", tbody).tooltip({
            track: false,
            delay: 0,
            bodyHandler: function() { return this.tooltipText; },
            showURL: false,
            showBody: " - ",
            extraClass: "helpTable"
        });
    }

    var oddOrEven = function(even) {
        return even ? "even" : "odd";
    }

    var GenererDatoKlasse = function(datoSomStreng) {
        if (datoSomStreng == null) {
            return "";
        }
        var day = parseInt(datoSomStreng.substring(0, 2), 10);
        var month = parseInt(datoSomStreng.substring(3, 5), 10);
        var year = parseInt(datoSomStreng.substring(6, 10));

        var datoMillisekunder = new Date(year, month - 1, day).getTime();
        var time = new Date().getTime();
        var timeOffset = time - datoMillisekunder;
        if (timeOffset > FORELDET_OPPDATERING_MILLISEKUNDER) {
            return "redText";
        }
        else {
            return "";
        }
    }

    var hentRad = function(ventetid, feltnavn, visningstyper, hjelpetekster, landsgjennomsnitt) {
        var ingenData = function(isEven) { return $.format(PATTERNS.INNHOLD.INDIKATORER.INGEN_DATA, oddOrEven(isEven)); };

        var string = PATTERNS.INNHOLD.RAD_START
                        + $.format(PATTERNS.INNHOLD.BEHANDLINGSSTED, ventetid.BehandlingsstedId, ventetid.BehandlingsstedNavn)
                        + $.format(PATTERNS.INNHOLD.BESOEKSSTED, ventetid.Besoekssted);

        if (!ventetid.Tallverdier) {
            for (var i = 0; i < feltnavn.length; i++) {
                var raadata;
                if (feltnavn[i].substring(0, 11) == "Ventetider_") {
                    var indeks = parseInt(feltnavn[i].substring(11));
                    raadata = ventetid.Ventetider[indeks];
                }
                else {
                    raadata = ventetid[feltnavn[i]];
                }
                var celleinnhold = "";
                switch (visningstyper[i]) {
                    case "tekst":
                        celleinnhold = raadata;
                        break;
                    case "dato":
                        celleinnhold = $.format(PATTERNS.INNHOLD.VENTETIDER.DATO, GenererDatoKlasse(raadata), raadata);
                        break;
                    case "volum":
                        if (raadata) {
                            celleinnhold = $.format(PATTERNS.INNHOLD.VOLUM, raadata);
                        }
                        else {
                            celleinnhold = PATTERNS.INNHOLD.VENTETIDER.INGEN_DATA_UTEN_LINK;
                        }
                        break;
                    case "uker":
                        if (raadata) {
                            celleinnhold = raadata + (raadata == "1" ? " uke" : " uker");
                        }
                        else {
                            celleinnhold = PATTERNS.INNHOLD.VENTETIDER.INGEN_DATA_UTEN_LINK;
                        }
                        break;
                    case "volumKreft":
                        if (raadata) {
                            celleinnhold = $.format(PATTERNS.INNHOLD.MIDTSTILLT, raadata);
                        }
                        else {
                            celleinnhold = $.format(PATTERNS.INNHOLD.MIDTSTILLT, '-');
                        }
                        break;
                    case "dager":
                        if (raadata) {
                            celleinnhold = $.format(PATTERNS.INNHOLD.MIDTSTILLT, raadata + (raadata == "1" ? " dag" : " dager"));
                        }
                        else {
                            celleinnhold = $.format(PATTERNS.INNHOLD.MIDTSTILLT, '-');
                        }
                        break;
                    case "hover":
                        if (raadata && $.trim(raadata)) {
                            celleinnhold = $.format(PATTERNS.INNHOLD.VENTETIDER.INFO_HOVER, raadata);
                        }
                        break;
                }
                string += $.format(PATTERNS.INNHOLD.VENTETIDER.CELLE, oddOrEven(i % 2 == 0), celleinnhold);
            }
        }
        // Eneste måten å vite hvilken tab vi er på. Sammendrag-tabben skal aldri vise prosent-tall. 
        else if (FSN.visTall && FSN.resultat.Sammendrag != "Oversikt over samlet kvalitet for sykehuset") {
            for (var i = 0; i < ventetid.Tallverdier.length; i++) {
                if (ventetid.Tallverdier[i]) {
                    if (FSN.resultat.Sammendrag == "Oversikt over pasienterfaringer")
                        string += $.format(PATTERNS.INNHOLD.INDIKATORER.NUMMER, oddOrEven(i % 2 == 0), landsgjennomsnitt[i], ventetid.Tallverdier[i]);
                    else
                        string += $.format(PATTERNS.INNHOLD.INDIKATORER.TALL, oddOrEven(i % 2 == 0), landsgjennomsnitt[i], ventetid.Tallverdier[i]);
                }
                else {
                    string += ingenData(i % 2 == 0);
                }
            }
        }
        else {
            for (var i = 0; i < ventetid.Tekstverdier.length; i++) {
                if (ventetid.Tekstverdier[i] == "ingen") {
                    string += ingenData(i % 2 == 0);
                }
                else {
                    string += $.format(PATTERNS.INNHOLD.INDIKATORER.IKON, oddOrEven(i % 2 == 0), hjelpetekster[i], ventetid.Tekstverdier[i]);
                }
            }
        }
        return string + PATTERNS.INNHOLD.RAD_SLUTT;
    }


    var getVentetider = function() {
        var url = "/FSN_Webservices.svc/HentVentetider?behandlingId=" + FSN.behandlingId + "&fagomraadeId=" + FSN.fagomraadeId + "&prosedyreId=" + FSN.tjenesteId + "&regionIder=" + FSN.regionIder;
        FSN.sendAjaxRequest(url, function(res) { FSN.resultat = res; fyllTabell(); });
    };

    var getSamletKvalitet = function() {
        var url = "/FSN_Webservices.svc/HentSamletKvalitetForBehandlingssteder?fagomraadeId=" + FSN.fagomraadeId + "&prosedyreId=" + FSN.tjenesteId + "&regionIder=" + FSN.regionIder;
        FSN.sendAjaxRequest(url, function(res) { FSN.resultat = res; fyllTabell(); });
    };

    var getIndikatorer = function() {
        var url = "/FSN_Webservices.svc/HentIndikatorer?behandlingId=" + FSN.behandlingId + "&fagomraadeId=" + FSN.fagomraadeId + "&prosedyreIder=" + FSN.tjenesteId + "&regionIder=" + FSN.regionIder;
        FSN.sendAjaxRequest(url, function(res) { FSN.resultat = res; fyllTabell(); });
    };

    var getErfaringer = function() {
        var url = "/FSN_Webservices.svc/HentPasienterfaringer?behandlingId=" + FSN.behandlingId + "&fagomraadeId=" + FSN.fagomraadeId + "&prosedyreIder=" + FSN.tjenesteId + "&regionIder=" + FSN.regionIder;
        FSN.sendAjaxRequest(url, function(res) { FSN.resultat = res; fyllTabell(); });
    };




    var fsnTextExtraction = function(domElement) {
        var text = domElement.innerHTML.toLowerCase();
        var spanNode = jQuery("span", domElement);

        var prosentMatch = text.match(/.*>(\d+(,\d+)?)\s*%<.*/);
        if (prosentMatch) {
            return prosentMatch[1].replace(",", ".");
        }

        if (spanNode.hasClass("volum")) {
            var tallMatch = spanNode.html().match(/(\d+)/);
            if (tallMatch) {
                return String(1000 - tallMatch[1]);
            }
        }
        if (spanNode.hasClass("notApplicable")) {
            return '10000';
        }

        var ukeMatch = text.match(/(\d+) uker?/);
        if (ukeMatch) {
            return ukeMatch[1];
        }

        var dateMatch = text.match(/(\d{2})\.(\d{2})\.(\d{4})/);
        if (dateMatch) {
            return dateMatch[3] + dateMatch[2] + dateMatch[1];
        }

        var linkMatch = jQuery("a", domElement);
        if (linkMatch.length != 0 && linkMatch.children().length == 0) {
            return linkMatch.text();
        }

        var imageNode = jQuery("a>div>img", domElement)
        if (imageNode.length == 1) {
            switch (imageNode.attr("alt")) {
                case "positiv":
                    return '10';
                case "blandet":
                    return '20';
                case "noytral":
                    return '30';
                case "negativ":
                    return '40';
                default:
                    break;
            }
        }

        return text.replace('null', '10000');
    }

    FSN.lagForsideTabell = function(behandlingId, fagomraadeId, tjenesteId, regionIder, opplysning) {
        jQuery("#tabell").trigger("tableLoading");
        FSN.behandlingId = behandlingId;
        FSN.fagomraadeId = fagomraadeId;
        FSN.tjenesteId = tjenesteId;
        FSN.regionIder = regionIder;
        FSN.opplysning = opplysning;
        switch (opplysning) {
            case "ventetider":
                getVentetider();
                break;
            case "samlet":
                getSamletKvalitet();
                break;
            case "indikatorer":
                getIndikatorer();
                break;
            case "erfaringer":
                getErfaringer();
                break;
        }
    };

    jQuery(document).ready(function() {
        $.tablesorter.addWidget({
            id: "hover",

            format: function(table) {
                $('tr', $(table)).mouseover(function() {
                    $(this).addClass('gridHover');
                }).mouseout(function() {
                    $(this).removeClass('gridHover');
                });
            }
        });
    });
})();

