




var customers, resultGraphData,
    servicesGrid, feedbackGrid, documentGrid, 

    eventsLoaded = false,
    servicesLoaded = false,
    customersLoaded = false,
    role_admin, menu, role_community = false,
    popupGrid, w1;
var sessionTimeOut;

var application = (function($, undefined) {
    var events = {
        "searchStart": []
    }

    var application = {
        on: function(eventName, handler) {
            events[eventName].push(handler);
        },
        trigger: function(eventName, args) {
            var handlers = events[eventName];
            for(var i = 0; i < handlers.length; ++i) {
                handlers[i].apply(application, args);
            }
        }
    };
    return application;
})($);

function initialize() {
    $('#myTab a:first').tab('show');

    
    KendoComponents.init(role_community);

    Map.init(function() { 
        KendoComponents.sendInvoicesToMap();
        KendoComponents.sendCustomersToMap();
    });

    /*----------------------------*/
    menu = new dhtmlXMenuObject(null, "dhx_black");

    menu.setIconsPath(baseurl + "/images/icons/");
    menu.renderAsContextMenu();
    menu.setOpenMode("web");
    menu.attachEvent("onClick", onButtonClick);
    menu.loadStruct(baseurl + "/js/reporting/menu.xml");

    

    // Keep the services-header visible when scrolling
    function fixTableHeader($root) {
        return function() {
            var headerTopOriginal = $root.offset().top;
            var header = $root.find('.xhdr');
            var headerTop = header.offset().top;
            var scrollTop = $(window).scrollTop();
            
            if(scrollTop > headerTopOriginal) {
                header.css("top", scrollTop - headerTopOriginal - 1);
                header.css("z-index", 10);
            } else {
                header.css("top", 0);
            }
        }
    }

    
    servicesGrid = new dhtmlXGridObject("services-gridbox");
    // servicesGrid.selMultirow-fluids = true;
    servicesGrid.imgURL = baseurl + "/images/dhtmlx/";
    servicesGrid.enableSmartRendering(true);
    servicesGrid.enableAutoHeight(true);
    servicesGrid.enableColumnAutoSize(true);
    servicesGrid._in_header_tooltipamount = function(tag, index, data) { // the name contains "_in_header_"+shortcut_name
        tag.title = ""; // set tooltip for the header
        tag.innerHTML = data[0] + ""; //
    }
    servicesGrid._in_header_followingdischarge = function(tag, index, data) { // the name contains "_in_header_"+shortcut_name
        tag.title = "Huomioithan arkipyhät jotka voivat vaikuttaa tyhjennyspäivään."; // set tooltip for the header
        tag.innerHTML = data[0] + ""; //
    }

    servicesGrid.init();
    servicesGrid.setSkin("dhx_skyblue");
    servicesGrid.attachEvent("onXLE", function(grid_obj, count) {
        $("#services-gridbox").show();
        $("#services-loading").hide();

        // Emty row has only one column
        if(servicesGrid.getColumnsNum() > 1) {
            

            

            
            
            
            

            
            
            
            
            
        }
    });
    servicesGrid.attachEvent("onXLS", function(grid_obj) {
        $("#services-gridbox").hide();
        $("#services-loading").show();
    });

    $(window).scroll(fixTableHeader($('#services-gridbox'))); // Pidetään otsikko mukana kun skrollataan
    servicesGrid.attachEvent('onXLE', fixTableHeader($('#services-gridbox'))); // Korjataan otsikon sijainti, jos käyttäjä menee tabille ennen kuin lataus valmistuu
    $('#myTab a[data-toggle="tab"]').on('shown.bs.tab', fixTableHeader($('#services-gridbox'))); // Korjataan sijainti, kun käyttäjä avaa tabin
    

    

    
    documentGrid = new dhtmlXGridObject("document-gridbox");
    // documentGrid.selMultirow-fluids = true;
    documentGrid.imgURL = baseurl + "/images/dhtmlx/";
    documentGrid.enableSmartRendering(true);
    documentGrid.enableAutoHeight(true);
    documentGrid.init();
    documentGrid.setSkin("dhx_skyblue");
    documentGrid.attachEvent("onXLE", function(grid_obj, count) {
        $("#document-gridbox").show();
        $("#document-loading").hide();
    });
    documentGrid.attachEvent("onXLS", function(grid_obj) {
        $("#document-gridbox").hide();
        $("#document-loading").show();
    });
    

    

    

    $("#search-alert").hide();

    /** Chart tabs **/
    $("#chart-div").hide();
    $("#chart-loading").hide();

    $("#trend-div").hide();
    $("#trend-loading").hide();

    $("#result-map-container").hide();
    $("#result-map-loading").hide();

    /** Gridboxes **/

    
    $("#services-gridbox").hide();
    $("#services-loading").hide();
    

    

    $("#events-gridbox").hide();
    $("#events-loading").hide();

    
    $("#feedback-gridbox").hide();
    $("#feedback-loading").hide();

    $("#production-feedback-gridbox").hide();
    $("#production-feedback-loading").hide();
    

    
    $("#document-gridbox").hide();
    $("#document-loading").hide();
    

    $("#modal-loading").hide();
    $("#modal-content").show();

    // Export options data. Title and the request URL.
    var exportOptions = [
    
    {
        text: "Kuukausiraportti",
        action: "csv",
        help: "Kuukausiraportti-ohje"
    }, 
    
    
    {
        text: "Kuukausiraportti, vain jakeiden painot",
        action: "csv_ytv",
        help: "Painot-ohje"
    }, 
    
    
    {
        text: "XLS Tiivistetty",
        action: "csv_pg",
        help: "XLS Tiivistetty-ohje"
    }, 
    
    
    {
        text: "XLS Tiivistetty tuotteittain",
        action: "csv_pgsum",
        help: "XLS Tiivistetty tuotteittain-ohje"
    }, 
    
    
    {
        text: "XLS Eritelty",
        action: "csv_p",
        help: "XLS Eritelty"
    }, 
    
    
    {
        text: "XLS Painot kuukausittain",
        action: "csv_tk",
        help: "XLS Painot kuukausittain-ohje"
    }, 
    
    
    {
        text: "Jätemääräraportti PDF",
        action: "pdf",
        help: "Jätemääräraportti PDF-tiedostossa"
    },
    
    
    {}
    ];
    exportOptions = exportOptions.splice(0, exportOptions.length - 1);
    // Export options dropwdown component initialization.
    $("#export-options-dropdown").kendoDropDownList({
        dataTextField: "text",
        dataValueField: "action",
        dataSource: exportOptions,
        height: 200
    });

    $("#button-export").click(function() {
        var value = $("#export-options-dropdown").data("kendoDropDownList").value();
        updateTreeGrid(value, KendoComponents.getPeriodString(), KendoComponents.getProductIds(),
            KendoComponents.getConcernIds(), KendoComponents.getManagerIds(), KendoComponents.getInvoiceIds(),
            KendoComponents.getConsumerIds());
    });

    //$("#concern-multiselect-tooltip-icon").tooltip();
    //$("#manager-multiselect-tooltip-icon").tooltip();
    //$("#invoice-multiselect-tooltip-icon").tooltip();
    $("#consumer-multiselect-tooptip-icon").tooltip();
    $("#products-multiselect-tooltip-icon").tooltip();

    if (!role_community) {
        $("#concern-multiselect-tooltip-icon").tooltip();
        $("#manager-multiselect-tooltip-icon").tooltip();
        $("#invoice-multiselect-tooltip-icon").tooltip();
    } else {
        /*************************************
         * Community user UI initialization. *
         **************************************/
        CommunitySearch.openCommunitySearch();

        

        $("#modal-search-alert").hide();
    }

    // IF browser IE7 or IE8
    if ($('html').hasClass('ie7') || $('html').hasClass('ie8')) {
        $('#print-button-1').remove();
        $('#print-button-2').remove();
        $('#printTrendButton').remove();
        $('#resultGraphPrintButton1').remove();
        $('#resultGraphPrintButton2').remove();
        $('#resultGraphPrintButton3').remove();
    }

    // Trigger search when 'Search' button is clicked
    // prevent page being refreshed
    $("#button-search").on("click", function(event) {
        event.preventDefault();
        search();
    });

    $("#button-clear-selections").on("click", function(event) {
        event.preventDefault();
        KendoComponents.clearSelections();
    });

    


    $(".back-to-search").on('click', function(e) {
        if(window.location.pathname.indexOf('reportsearch.do') !== -1) {
            e.preventDefault();
            $('#search-tab-link').click();
        }
    });

    
    
    (function initializeMainTabHistory($tabList, $searchButton) {
        function pushState(e) {
            console.log($(this).attr('href'));
            window.history.pushState({
                tab: $(this).attr('href')
            }, '');
        }
        
        function enablePushState() {
            $tabList.on('show.bs.tab', 'a[data-toggle="tab"]', pushState);
        }
        
        function disablePushState() {
            $tabList.off('show.bs.tab', 'a[data-toggle="tab"]', pushState);
        }
        
        window.history.replaceState({
            tab: '#search-tab'
        }, '');
        
        enablePushState();
        
        $(window).on('popstate', function(e) {
            var state = e.originalEvent.state;
            console.log(state);
            disablePushState();
            var $tab = $tabList.find('[href="' + state.tab + '"]');
            if(!$tab.closest('li').is('.disabled')) {
                $tab.tab('show');
            } 
            enablePushState();
        });
    })($('#myTab'), $('#button-search'));
}

function getActiveTabId() {
    return $("#myTab li.active a").attr("href");
}

function getFilteredInvoices() {
    return KendoComponents.getSelectedInvoices();
}

function getFilteredConsumers() {
    return KendoComponents.getSelectedConsumers();
}

function updateTreeGrid(target, periods, productIds, concernIds, managerIds,
    invoiceIds, consumerIds, cum) {
    if (typeof cum === "undefined") {
        cum = false;
    }

    var exportUrl = $('#export-xlsx').prop('checked') ? '/secure/xlsxexport.do' : '/secure/csvexport.do';

    var parameters = {
        "concernid" : concernIds,
        "managerid": managerIds,
        "invid" : invoiceIds,
        "customerid" : consumerIds,
        "communityid" : null,
        "groupid" : productIds,
        "period" : periods,
        "cum" : cum
    };

    switch (target) {
        case "event":
            EventView.load({
                concernIds: concernIds,
                managerIds: managerIds,
                invoiceIds: invoiceIds,
                customerIds:  consumerIds,
                productgroupIds: productIds,
                start: KendoComponents.getSearchStartDateValue('yyyy-MM-dd'),
                end: KendoComponents.getSearchEndDateValue('yyyy-MM-dd')
            });
            break;

        

        
        case "service":
            servicesGrid.clearAll(true);
            parameters.type = "service";
            parameters.time = getTimeStamp();
            servicesGrid.load(Common.getUrl("/secure/customersearch.do", parameters));
            servicesGrid.enableColSpan(true);
            servicesGrid.attachFooter("<a href='#' id='service_csv_link' onclick='gridExportServiceToCsv()'>Vie csv-tiedostoon</a>&nbsp;,#cspan,#cspan,#cspan,#cspan");
            break;
        

        

        

        case "popupservice":

            // TODO!
            w1 = dhxWins.createWindow("w1", 0, 0, 805, 300);
            if (target == "popupservice")
                w1.setText('PALVELUT:     ' + name);
            else
                w1.setText('PALAUTTEET:     ' + name);
            w1.show();
            w1.center();

            popupGrid = w1.attachGrid();
            popupGrid.imgURL = baseurl + "/images/dhtmlx/";
            popupGrid.enableSmartRendering(true);
            popupGrid.enableAutoHeight(true);
            popupGrid._in_header_tooltipamount = function(tag, index, data) { // the name contains "_in_header_"+shortcut_name
                tag.title = "Tähän tekstiä määräsarakkeen käyttäytymisestä!"; // set tooltip for the header
                tag.innerHTML = data[0] + ""; //
            }
            popupGrid.init();
            popupGrid.setSkin("dhx_skyblue");
            parameters.type = target.substring(5);
            parameters.time = getTimeStamp();
            popupGrid.load(Common.getUrl("/secure/customersearch.do", parameters));
            popupGrid.attachFooter("<a href='#' id='popupservice_csv_link' onclick='gridExportPopupToCsv()'>Vie csv-tiedostoon</a>,#cspan,#cspan,#cspan,#cspan");

            break;

        
        case "document":
            documentGrid.clearAll(true);
            parameters.type = "document";
            parameters.time = getTimeStamp();
            documentGrid.load(Common.getUrl("/secure/customersearch.do", parameters));
            break;
        

        

        case "csv":
            parameters.type = "csv";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this authaor wasn't set");

            break;
        case "csv_ytv":
            parameters.type = "csv_ytv";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "csv_tk":
            parameters.type = "csv_tk";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "csv_p":
            parameters.type = "csv_p";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "csv_pg":
            parameters.type = "csv_pg";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "csv_pgsum":
            parameters.type = "csv_pgsum";
            parameters.time = getTimeStamp();
            var url = Common.getUrl(exportUrl, parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "pdf":
            parameters.type = "pdf";
            parameters.time = getTimeStamp();
            var url = Common.getUrl("/secure/export.do", parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;
        case "xls":
            parameters.type = "xls";
            parameters.time = getTimeStamp();
            var url = Common.getUrl("/secure/export.do", parameters);
            if (url)
                window.open(url);
            else
                alert("Page for this author wasn't set");

            break;

        
    }

}

var concerns = "";
var managers = "";
var invoices = "";
var consumers = "";

function searchForTrend(trend, periodString) {
    var parameters = {
        "type" : null,
        "concernid" : concerns,
        "managerid" : managers,
        "invid" : invoices,
        "customerid" : consumers,
        "communityid" : null,
        "groupid" : KendoComponents.getProductIds(),
        "period" : periodString,
        "cum" : false,
        "trend" : trend
    };

    return $.ajax({
        url: Common.getUrl("/secure/searchfortrend.do", parameters),
        contentType: 'application/json; charset=utf-8'
    });
}

// Tekee haun, sulkee haku-välilehden ja avaa hakutulos-välilehden

function search() {
    var error = false;
    
    /** Check validation on UI **/
    if (validateDates()) {
        $("#date-error-label").hide();
        document.getElementById("date-selectors").style.backgroundColor = "transparent";
    } else {
        $("#date-error-label").show();
        document.getElementById("date-selectors").style.backgroundColor = "rgb(247, 233, 233)";
        error = true;
    }

    

    if (validateCustomersSelection()) {
        $("#search-alert").hide();
    } else {
        $("#search-alert").show();
        error = true;
    }

    if (error)
        return true;
    /** End validation check **/

    application.trigger("searchStart", []);

    enableTab("myTab-li-graph");
    enableTab("myTab-li-trend");
    enableTab("myTab-li-map");
    
    enableTab("myTab-li-services");
    
    
    enableTab("myTab-li-events");
    enableTab("myTab-li-invoices");
    
    enableTab("myTab-li-feedback");
    enableTab("myTab-li-prod-feedback");
    
    
    enableTab("myTab-li-documents");
    
    enableTab("myTab-li-export");
    enableTab("myTab-li-wells");
    enableTab("myTab-li-composts");
    enableTab("myTab-li-history");

    toggleTabs();

    /** Hide/show loading signs etc. **/
    $('#myTab a[href="#graph-tab"]').tab('show');

    $("#chart-div").hide();
    $("#chart-loading").show();
    $("#chart-empty").hide();
    $("#trend-div").hide();
    $("#trend-loading").show();
    $("#trend-empty").hide();
    $("#trend-chart").empty();
    
    $("#services-gridbox").hide();
    $("#services-loading").show();
    
    
    $("#events-gridbox").hide();
    $("#events-loading").show();

    
    $("#document-gridbox").hide();
    $("#document-loading").show();
    

    /** Read selected Ids **/
    concerns = "";
    managers = "";
    invoices = "";
    consumers = "";

    consumers = KendoComponents.getConsumerIds();

    if (consumers.length == 0) {
        invoices = KendoComponents.getInvoiceIds();
    }
    if (consumers.length == 0 && invoices.length == 0) {
        managers = KendoComponents.getManagerIds();
    }
    if (consumers.length == 0 && invoices.length == 0 && managers.length == 0) {
        concerns = KendoComponents.getConcernIds();
    }

    if (consumers.length == 0 && invoices.length == 0 && managers.length == 0 && concerns.length == 0) {
        // TODO herjaa
    }

    /** End read **/

    /** Start searches --> **/

    function searchCommon() {
        // when graphs are loaded start the larger search
        updateTreeGrid("event", KendoComponents.getPeriodString(), KendoComponents.getProductIds(), concerns, managers, invoices, consumers);
        updateTreeGrid("service", KendoComponents.getPeriodString(), KendoComponents.getProductIds(), concerns, managers, invoices, consumers);
        
        

        

        

        
        updateTreeGrid("document", KendoComponents.getPeriodString(), KendoComponents.getProductIds(), concerns, managers, invoices, consumers);
        

        

        

        

        
        MapView.load({
            concernIds: concerns,
            managerIds: managers,
            invoiceIds: invoices,
            customerIds:  consumers,
            productgroupIds: KendoComponents.getProductIds(),
            start: KendoComponents.getSearchStartDateValue('yyyy-MM-dd'),
            end: KendoComponents.getSearchEndDateValue('yyyy-MM-dd')
        });
        
    } // End of searchCommon

    if(!role_community) {
        searchCommon();

        searchForTrend(false, KendoComponents.getPeriodString())
        .done(function(data) {
            $("#chart-empty").hide();
            $("#chart-loading").hide();
            $("#chart-div").show();
            $("#chart-empty").hide();
            if (!data[0]) {
                $("#chart-div").hide();
                $("#chart-empty").show();
            }
            KendoComponents.resultGraphData = data;

            if(!$.isEmptyObject(data)) {
                KendoComponents.updateDropdownDataSource("business-unit-dashboard-dropdown-2", KendoComponents.resultGraphData);

                
            
                KendoComponents.updateSearchResultGraphs(KendoComponents.resultGraphData[0]);
            }
        });

        searchForTrend(true, KendoComponents.getPeriodString())
        .done(function(data) {
            $("#trend-loading").hide();
            $("#trend-div").show();

            TrendView.setTrendData(data);
        })
        .fail(function(request, status, error) {
            $("#trend-div").hide();
            $("#trend-loading").hide();
        });
    } else {
        $('#myTab a[href="#service-tab"]').tab('show');
        searchCommon();
    }

    return false;
}

function containsObject(searchTerm, object, list) {
    for (var i = 0; i < list.length; i++) {
        if (list[i][searchTerm] == object[searchTerm]) {
            return true;
        }
    }
    return false;
}

function sumArrayValues(array) {
    var value = 0;
    for (var i = 0; i < array.length; i++) {
        value += array[i];
    }

    return value;
}


function gridExportFeedbackToCsv() {
    feedbackGrid.csv.cell = ";";
    // grid1.csv.row-fluid="\f";
    feedbackGrid.enableCSVHeader(true);
    feedbackGrid.enableCSVAutoID(true);

    var serializableColumns = 'true,false,true,true,false,false,false,false,false,false,true,false';
    feedbackGrid.setSerializableColumns(serializableColumns);

    var csv = feedbackGrid.serializeToCSV(true);

    document.formstyle.csvBuffer.value = csv;
    document.formstyle.method = 'POST';
    document.formstyle.action = baseurl + "/secure/simplecsvexport.do";
    document.formstyle.target = '_blank';
    document.formstyle.submit();
    return;
}


function gridExportPopupToCsv() {
    popupGrid.csv.cell = ";";
    // grid1.csv.row-fluid="\f";
    popupGrid.enableCSVHeader(true);
    popupGrid.enableCSVAutoID(true);
    var csv = popupGrid.serializeToCSV(true);

    document.formstyle.csvBuffer.value = csv;
    document.formstyle.method = 'POST';
    document.formstyle.action = baseurl + "/secure/simplecsvexport.do";
    document.formstyle.target = '_blank';
    document.formstyle.submit();
    return;

}


function gridExportServiceToCsv() {
    servicesGrid.csv.cell = ";";
    // grid1.csv.row-fluid="\f";
    servicesGrid.enableCSVHeader(true);
    servicesGrid.enableCSVAutoID(true);

    var serializableColumns = 'true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true';
    servicesGrid.setSerializableColumns(serializableColumns);

    var csv = servicesGrid.serializeToCSV(true);

    document.formstyle.csvBuffer.value = csv;
    document.formstyle.method = 'POST';
    document.formstyle.action = baseurl + "/secure/simplecsvexport.do";
    document.formstyle.target = '_blank';
    document.formstyle.submit();
    return;
}



function gridExportFeedbackToExcel() {
    var url = baseurl + "/XML2Excel/generate";
    feedbackGrid.toPDF(url, 'color');
    return;
}


function gridExportPopupToExcel() {
    var url = baseurl + "/XML2Excel/generate";
    popupGrid.toPDF(url, 'color');
    return;
}


function gridExportServiceToExcel() {
    var url = baseurl + "/XML2Excel/generate";
    servicesGrid.toPDF(url, 'color');
    return;
}



function gridExportFeedbackToPDF() {
    var url = baseurl + "/XML2PDF/generate";
    // var url = "http://localhost:8080/XML2PDF/XML2PDF/generate";
    feedbackGrid.toPDF(url, 'color', 'landscape', true);
    return;
}



function gridExportServiceToPDF() {
    var url = baseurl + "/XML2PDF/generate";
    // var url = "http://localhost:8080/XML2PDF/XML2PDF/generate";
    servicesGrid.toPDF(url, 'color', 'landscape', true);
    return;
}


function gridExportPopupToPDF() {
    var url = baseurl + "/XML2PDF/generate";
    // var url = "http://localhost:8080/XML2PDF/XML2PDF/generate";
    popupGrid.toPDF(url, 'color', 'landscape', true);
    return;
}

function elementShowing(elementId) {
    if ($("#" + elementId).is(":visible"))
        return false;

    return true;
}


function filterDepartments(baseData, selectedIds, propertyKey, manager) {
    var matches = [];
    for (var i = 0; i < baseData.length; i++) {
        if (baseData[i] !== undefined) {
            for (var j = 0; j < selectedIds.length; j++) {
                // check that property exists.
                if (!baseData[i].hasOwnProperty(propertyKey)) continue;
                if (manager) {
                    if ("mana".concat(baseData[i][propertyKey]) == selectedIds[j]) matches.push(baseData[i]);
                } else {
                    if (baseData[i][propertyKey] == selectedIds[j]) matches.push(baseData[i]);
                }
            }
        }
    }
    return matches;
}

function validateDates() {
    var startValue = KendoComponents.getSearchStartDateValue();
    var endValue = KendoComponents.getSearchEndDateValue();

    if (startValue == null || endValue == null) return false;
    return startValue <= endValue;
}

function validateCustomersSelection() {
    if (role_community &&
        KendoComponents.getConsumerIds().length > 0) {
        return true;
    } else {
        if (KendoComponents.getConcernIds().length > 0) return true;
        if (KendoComponents.getManagerIds().length > 0) return true;
        if (KendoComponents.getInvoiceIds().length > 0) return true;
        if (KendoComponents.getConsumerIds().length > 0) return true;
        return false;
    }
}

function sendData() {
    myDataProcessor.sendData();
}

function myErrorHandlerDataProcessor(obj) {
    alert("Error occured.\n" + obj.firstChild.nodeValue);
    myDataProcessor.stopOnError = true;
    return false;
}

// extended simple editor (with number format support) to use color for numbers;
function eXcell_edncl(cell) {
    if(cell) {
        this.cell = cell;
        this.grid = this.cell.parentNode.grid;
        eXcell_ed.call(this);
    }

    this.setValue = function(val) {
        if (!val || val.toString()._dhx_trim() == "")
            val = "0";
        if (val >= 0)
            this.cell.style.color = "green";
        else
            this.cell.style.color = "red";
        this.cell.innerHTML = this.grid._aplNF(val, this.cell._cellIndex);
    };
}
eXcell_edncl.prototype = new eXcell;

function greater_0(value) {
    return value > 0;
}

function getSelectedDatasetName() {
    var buttons = document.getElementById('datasetButtonGroup').getElementsByTagName('button');
    for (var i = 0; i < buttons.length; i++) {
        if (buttons[i].className == 'btn btn-primary') {
            return buttons[i].id;
        }
    }
    return buttons[0].id;
}



function doOnEnter(rowId, cellInd) {
    return false;
}

function onShowMenu(rowId, celInd) {
    // TODO!
    /*var cell10 = eventsTreeGrid.cells(rowId, 10).getValue(); // invid
    var cell11 = eventsTreeGrid.cells(rowId, 11).getValue(); // customerid
    var arr = ['info', 'services', 'feedback'];
    for (var i = 0; i < arr.length; i++) {
        menu.hideItem(arr[i]);
    }
    if (cell10 != '' || cell11 != '') {
        menu.showItem('info');
    }
    menu.showItem('services');
    
    menu.showItem('feedback');
    
    return true;*/
}

function onButtonClick(menuitemId, rowId, celInd) {
    // TODO!
    /*
    var data = eventsTreeGrid.contextID.split('_'); //rowId_colInd
    var rId = data[0]; //+'_'+data[1];

    var name = eventsTreeGrid.cells(rId, 0).getValue(); //nimi
    var period = eventsTreeGrid.cells(rId, 1).getValue(); //period
    var concerns = eventsTreeGrid.cells(rId, 8).getValue(); //concernid
    var managers;
    if (eventsTreeGrid.cells(rId, 9).getValue() != '')
        managers = 'mana' + eventsTreeGrid.cells(rId, 9).getValue(); //managerid

    var managers2 = managers; //managerid (service/feedback)
    var invoices = eventsTreeGrid.cells(rId, 10).getValue(); //invid

    var customers;
    if (eventsTreeGrid.cells(rId, 11).getValue() != '')
        customers = 'cust' + eventsTreeGrid.cells(rId, 11).getValue(); //customerid

    var productGroupIds = eventsTreeGrid.cells(rId, 15).getValue(); //group

    if (invoices == '' && customers != '') invoices = customers;
    var cum = '';
    updateTreeGrid(menuitemId, period,
        productGroupIds, concerns, managers,
        invoices, customers);

    return true
    */
}

function printChart(containerName) {

    var $original = $('#' + containerName + ' svg');
    var $data = $original.clone();
    $data.attr({
        width: $original.width() + 'px',
        height: $original.height() + 'px'
    });

    var data = $('<div>').append($data).html();

    
    data = data.replace(/rgba\((\d+), (\d+), (\d+), ([\d.]+)\)/g, 'rgb($1, $2, $3)');

    document.formstyle2.data.value = data;
    document.formstyle2.type.value = '';
    document.formstyle2.time.value = getTimeStamp();
    document.formstyle2.method = 'POST';
    document.formstyle2.action = baseurl + '/secure/getimage.do';
    //document.formstyle2.target = '_blank';
    document.formstyle2.submit();
    return;
}

function getTimeStamp() {
    return '' + new Date().getTime();
}

function enableTab(tabId) {
    $('#' + tabId).removeClass();
    $('#' + tabId).children('a').attr('data-toggle', 'tab');
}

function toggleTabs() {
    $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
        
        if (e.target.toString().split("#")[1] == "map-tab" && !$('#result-map-container').is(':hidden')) {
            MapView.refresh();
        } else if($(this).attr('id') === 'graph-tab-link') {
            KendoComponents.resizeGraphs();
        }
    });
}

function createTextElement(str, x, y) {
    var text_element = document.createElementNS('http://www.w3.org/2000/svg', 'text');
    text_element.setAttribute('fill', '#232323');
    text_element.setAttribute('fill-opacity', '1');
    text_element.setAttribute('style', 'font: 12px Arial,Helvetica,sans-serif;');
    text_element.setAttribute('x', x);
    text_element.setAttribute('y', y);

    var text = document.createTextNode(str);
    text_element.appendChild(text);

    return text_element;
}

function createPathElement(x1, x2, y1, y2, color) {
    var path_element = document.createElementNS('http://www.w3.org/2000/svg', 'path');
    // M1187.5 14.5 1195.5 14.5 1195.5 21.5 1187.5 21.5 z
    //   0      1     2     3     4     5     6     7   8
    path_element.setAttribute('d', 'M' + x1 + ' ' + y1 + ' ' + x2 + ' ' + y1 + ' ' + x2 + ' ' + y2 + ' ' + x1 + ' ' + y2 + ' z');
    path_element.setAttribute('fill', color);
    path_element.setAttribute('fill-opacity', '1');
    path_element.setAttribute('stroke', color);
    path_element.setAttribute('stroke-linecap', 'square');
    path_element.setAttribute('stroke-linejoin', 'round');
    path_element.setAttribute('stroke-opacity', '1');
    path_element.setAttribute('stroke-width', '1');
    path_element.setAttribute('style', 'display: block;');

    return path_element;
}

function createHelperTextElement(str, x, y) {
    var text_element = document.createElementNS('http://www.w3.org/2000/svg', 'text');
    text_element.setAttribute('fill', '#4F4F4F');
    text_element.setAttribute('fill-opacity', '1');
    text_element.setAttribute('style', 'font: 9px Arial,Helvetica,sans-serif;');
    text_element.setAttribute('x', x);
    text_element.setAttribute('y', y);

    var text = document.createTextNode(str);
    text_element.appendChild(text);

    return text_element;
}

function isBrowserCompatible() {
    // Some reason this works for IE9 in sahas, but not in asrap (it shouldn't propably work at all because this function is supported at IE10+)
    var hasCheckValidity = typeof HTMLInputElement.prototype.checkValidity === 'function';
    if (!hasCheckValidity)
    {
        var ua = navigator.userAgent;
        if(ua != null)
        {
            return ua.indexOf("MSIE 9") != -1;
        }

    }
    return hasCheckValidity;
}