var currentDateFilter = null;

var actionsMap = {
    "RANK" : "doRank",
    "REACH" : "doReach",
    "PAGE_VIEWS" : "doPageViews",
    "TIME_ON_SITE" : "doTimeOnSite",
    "SEARCH_ENGINE_PERCENT" : "doSearchPercent",
    "BOUNCE" : "doBounce",
    "PAGE_VIEWS_PER_USER" : "doPageViewsPerUser",
    "ESTIMATE_PAGE_VIEWS" : "doEstimatePageViews",
    "ESTIMATE_REACH" : "doEstimateReach"
}

var actionsGraphicsMap = {
    "RANK" : "doGraphicsRank",
    "REACH" : "doGraphicsReach",
    "PAGE_VIEWS" : "doGraphicsPageViews",
    "TIME_ON_SITE" : "doGraphicsTimeOnSite",
    "SEARCH_ENGINE_PERCENT" : "doGraphicsSearchPercent",
    "BOUNCE" : "doGraphicsBounce",
    "PAGE_VIEWS_PER_USER" : "doGraphicsPageViewsPerUser",
    "ESTIMATE_PAGE_VIEWS" : "doGraphicsEstimatePageViews",
    "ESTIMATE_REACH" : "doGraphicsEstimateReach"
}

var currentCode;

function estimateTrigger(name) {
    $("#estimateTriggerReach").hide();
    $("#estimateTriggerViewsPerUser").hide();
    if (name == "REACH") {
        $("#estimateTriggerReach .estimateTriggerEstimate").hide();
        $("#estimateTriggerReach .estimateTriggerRaw").show();
        $("#estimateTriggerReach").show();
    } else if (name == "PAGE_VIEWS") {
        $("#estimateTriggerViewsPerUser").show();
        $("#estimateTriggerViewsPerUser .estimateTriggerEstimate").hide();
        $("#estimateTriggerViewsPerUser .estimateTriggerRaw").show();
    } else if (name == "ESTIMATE_REACH") {
        $("#estimateTriggerReach .estimateTriggerEstimate").show();
        $("#estimateTriggerReach .estimateTriggerRaw").hide();
        $("#estimateTriggerReach").show();
    } else if (name == "ESTIMATE_PAGE_VIEWS") {
        $("#estimateTriggerViewsPerUser").show();
        $("#estimateTriggerViewsPerUser .estimateTriggerEstimate").show();
        $("#estimateTriggerViewsPerUser .estimateTriggerRaw").hide();
    }
}

function updateGraphicStats(code, siteIds, dateFilter, checkedSiteIds) {

    if(!code) {
        code = currentCode;
    } else {
        currentCode = code;
    }
    var url = contextPath + "/graphisc!" + actionsMap[code] + ".html"
    var data = {};
    data.siteId = siteId;
    if (!siteIds && !checkedSiteIds) {
        checkedSiteIds = [];
        siteIds = [];
        jQuery.each($("input[type='checkbox']"), function () {
            siteIds.push(this.value);
            if (this.checked) {
                checkedSiteIds.push(this.value);
            }
        });
    }
    data.siteIds = siteIds;
    data.checkedSiteIds = checkedSiteIds;
    if (!dateFilter) {
        if (!currentDateFilter) {
            dateFilter = "MONTH";
        } else {
            dateFilter = currentDateFilter;
        }
    }
    data.dateFilter = dateFilter;
    $("#domainStats").load(url, data, function() {
        var graphicsUrl = contextPath + "/graphisc!" + actionsGraphicsMap[code] + ".html"
        $.post(graphicsUrl, data,
            function(data1) {
                switch (currentCode) {
                    case "REACH":
                    case "SEARCH_ENGINE_PERCENT":
                    case "PAGE_VIEWS":
                    case "BOUNCE":
                        chartController.measurement = "<span class=\"procent\">%</span>"
                        break;
                    case "TIME_ON_SITE":
                        chartController.measurement = " " + timeText;
                        break;
                    case "PAGE_VIEWS_PER_USER":
                        chartController.measurement = " " + pagesText;
                        break;
                    default:
                        chartController.measurement = "";
                }
                chartController.intValue = chartController.inverse = currentCode == "RANK";
                chartController.chartsBeanMap = data1.chartsBeanMap;
                chartController.startTime = data1.startTime;
                chartController.endTime = data1.endTime;
                chartController.init(true);
                chartController.paintGraphics();
            }, "json");
    });
}

function addDomainStatistics() {
    var url = contextPath + "/domainStats!" + actionsMap[currentCode] + ".html";
    var dataToSend = {};
    dataToSend.domen = document.getElementById('addToStat').value;
    dataToSend.dateFilter = currentDateFilter;

    $.post(url, dataToSend,
        function(data) {
            if (data.stats && data.chartsBean) {
                if ($("input[type='checkbox'][value='" + data.stats.siteId + "']").length > 0
                    || $("input[type='checkbox']").length > 4) {
                    return;
                }
                var style = "style='color: " + chartController.colors[$("input[type='checkbox']").length] + "'";
                switch (currentCode) {
                    case "REACH":
                    case "SEARCH_ENGINE_PERCENT":
                    case "PAGE_VIEWS":
                    case "BOUNCE":
                        var row='<tr><td><input ' + style + ' onclick="updateGraphicStatsByDomain();" type="checkbox" checked value="' + data.stats.siteId + '" id="' + data.stats.domainName + '"  /><label for="' + data.stats.domainName + '"><a ' + style + ' href="http://'+ data.stats.domainName +'">' + data.stats.domainName + '</a></label></td><td>' + data.stats.yesterdayStats.toPrecision(3).toString().replace(".", ",") + '<span class="procent">%</span></td><td>' + data.stats.weekStats.toPrecision(3).toString().replace(".", ",") + '<span class="procent">%</span></td><td>' + data.stats.monthStats.toPrecision(3).toString().replace(".", ",") + '<span class="procent">%</span></td><td><span ' + (data.stats.deltaPositive ? 'class="up"' : 'class="bot"') + '>' + data.stats.deltaByMonth + '<span class="procent">%</span></span></td></tr>';
                        break;
                    case "TIME_ON_SITE":
                        var row='<tr><td><input ' + style + ' onclick="updateGraphicStatsByDomain();" type="checkbox" checked value="' + data.stats.siteId + '" id="' + data.stats.domainName + '"  /><label for="' + data.stats.domainName + '"><a ' + style + ' href="http://'+ data.stats.domainName +'">' + data.stats.domainName + '</a></label></td><td>' + data.stats.yesterdayStats.toPrecision(3).toString().replace(".", ",") + ' ' + timeText + '</td><td>' + data.stats.weekStats.toPrecision(3).toString().replace(".", ",") + ' ' + timeText + '</td><td>' + data.stats.monthStats.toPrecision(3).toString().replace(".", ",") + ' ' + timeText + '</td><td><span ' + (data.stats.deltaPositive ? 'class="up"' : 'class="bot"') + '>' + data.stats.deltaByMonth + '<span class="procent">%</span></span></td></tr>';
                        break;
                    case "PAGE_VIEWS_PER_USER":
                        var row='<tr><td><input ' + style + ' onclick="updateGraphicStatsByDomain();" type="checkbox" checked value="' + data.stats.siteId + '" id="' + data.stats.domainName + '"  /><label for="' + data.stats.domainName + '"><a ' + style + ' href="http://'+ data.stats.domainName +'">' + data.stats.domainName + '</a></label></td><td>' + data.stats.yesterdayStats.toPrecision(3).toString().replace(".", ",") + '&nbsp;' + pagesText + '</td><td>' + data.stats.weekStats.toPrecision(3).toString().replace(".", ",") + '&nbsp;' + pagesText + '</td><td>' + data.stats.monthStats.toPrecision(3).toString().replace(".", ",") + '&nbsp;' + pagesText + '</td><td><span ' + (data.stats.deltaPositive ? 'class="up"' : 'class="bot"') + '>' + data.stats.deltaByMonth + '<span class="procent">%</span></span></td></tr>';
                        break;
                    default:
                        var row='<tr><td><input ' + style + ' onclick="updateGraphicStatsByDomain();" type="checkbox" checked value="' + data.stats.siteId + '" id="' + data.stats.domainName + '"  /><label for="' + data.stats.domainName + '"><a ' + style + ' href="http://'+ data.stats.domainName +'">' + data.stats.domainName + '</a></label></td><td>' + roundToDigit(Math.round(data.stats.yesterdayStats), 3) + '</td><td>' + roundToDigit(Math.round(data.stats.weekStats), 3) + '</td><td>' + roundToDigit(Math.round(data.stats.monthStats), 3) + '</td><td><span ' + (data.stats.deltaPositive ? 'class="up"' : 'class="bot"') + '>' + data.stats.deltaByMonth + '<span class="procent">%</span></span></td></tr>';
                }
                if (chartController.inverse) {
                    for (var i in data.chartsBean.data) {
                        data.chartsBean.data[i][1] = -1 * data.chartsBean.data[i][1];
                    }
                }
                chartController.chartsBeanMap[data.stats.siteId] = data.chartsBean;
                $('table.comparison').append( $(row) );
                $("table.comparison tr:even").addClass("even");
                updateGraphicStatsByDomain();
            }
        }, "json");
}

var initGraphicStats = false;

function initFirstGraphicStats() {
    if (initGraphicStats) {
        chartController.init();
        return;
    }
    var siteIds = [siteId];
    if (compareSiteIds) {
        for (var i in compareSiteIds) {
            siteIds.push(compareSiteIds[i]);
        }
    }
    var initCode = "RANK";
    if (currentCode) {
        initCode = currentCode;
    }
    updateGraphicStats(initCode, siteIds, "MONTH", siteIds);
    initGraphicStats = true;
}

function updateGraphicStatsByDomain() {
    var siteIds = []
    jQuery.each($("input[type='checkbox']"), function () {
        if (this.checked) {
            siteIds.push(this.value);
        }
    });
    if (siteIds.length == 1) {
        jQuery.each($("input[type='checkbox']"), function () {
            if (this.checked) {
                $(this).attr("disabled", "disabled");
            }
        });
    } else {
        $("input[type='checkbox']").removeAttr("disabled");
    }
    if (siteIds.length > 0) {
        chartController.selected = siteIds;
        chartController.init();
        chartController.paintGraphics();
    }

}

function upplyDateFilter(code) {
    updateGraphicStats(null, null, code);
}

function changeNearestCompetitors(categoryId, domains, text) {

    var colors = ["red", "yellow", "green"];

    var html = text + " ";
    for (var i in domains) {
        if (i > 3) {
            break;
        }
        html += "<span class='" + colors[i] + "'>" + domains[i] + "</span>" + (i < 3 && i != domains.length - 1 ? ", " : "");
    }
    $("#nearestCompetitors").html(html);


    linearChartsController.paintCharts(categoryId);
}