﻿
// массив для хранения подсказок всех элементов страницы
var hintContents = new Array();

// массив для хранения ключей всех сущностей на странице
var entityKeys = new Array();

// функция для форматирования содержимого подсказки
function FormatContent(img, title, description) {
    var arrowTop = "";
    if (img == undefined) {
        arrowTop = "style='top:255px;'";
    }
    return "<div class='tooltip'><div class='arrow' " + arrowTop + "></div><h3>" + title + "</h3><div class='img'>" + img + "</div><div class='description'>" + description + "</div></div>";
}

// возвращает ключ для доступа к сущности в массиве
function GetEntityKey(entity_type, entity_id) {
    return (entity_type + "_" + entity_id);
}

// Функция для получения содержимого всех подсказок через web service
function GetAllTooltipContentFromServer() {
    ShowProgress();
    jQuery.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: "{ entitiesList: '" + entityKeys + "'}",
        url: EntityHintsUrl+ "/GetAllHint",
        dataType: "json",
        success: function(data) {
            try {
                var hints = data.d;
                for (var i = 0; i < hints.length; i++) {
                    var hint = hints[i];
                    hintContents[hint.Key] = FormatContent(hint.Img, hint.Title, hint.Description);
                }
                // вешаем подсказки на элементы
                jQuery(".with_tooltip").each(function() {
                    Tooltip(this);
                });
            } finally {
                HideProgress();
            }

        },
        error: function(e) {
            HideProgress();
            alert(e.responseText);
        }
    });
}

// Функция для получения содержимого подсказки из массива
function GetTooltipContent(entity_type, entity_id) {
    return hintContents[GetEntityKey(entity_type, entity_id)];
}

// отображает всплывающую подсказку с содержимым content для элемента element 
function ShowToolTip(element, content) {
    if (content == undefined || content.toString().length > 64) {
        var item = jQuery(element);
        var action = item.attr("action");
        if (action == undefined) {
            action = "click";
        }

        if (content != undefined) {
            item.after(content);
        }
        else {
            content = item.next()
            content.append("<div class='arrow'></div>");
        }

        item.tooltip({
            position: "center right",
            delay: 200,
            effect: "fade",
            events: {
                def: action + ', mouseleave',
                tooltip: "mouseenter, mouseleave"
            },
            onBeforeHide: function() {
                this.getTip().find("div.description").scrollTop(0);
            },
            onBeforeShow: function(e) {
                var tip = this.getTip();
                var y = (tip.height() / 2) - 10;
                tip.find("div.arrow").css("top", y);
            }
        });

    }
}

// функция для считывания EntityType из элемента
function GetEntityType(element) {
    return jQuery(element).attr("EntityType");
}

// функция для считывания EntityId из элемента
function GetEntityID(element) {
    return jQuery(element).attr("EntityID");
}

// функция отображает всплывающую подсказку для элемента element
function Tooltip(element) {
    var entity_type = GetEntityType(element);
    var entity_id = GetEntityID(element);

    var content = GetTooltipContent(entity_type, entity_id);
    ShowToolTip(element, content);
}

// функция ищет все элементы с классом with_tooltip внутри элемента selector, собирает ключи сущностей, запрашиваем сразу все подсказки и вешает их на элементы
function InitializeTooltip(selector) {
    if (selector && selector != "")
        selector = selector + " ";
    //ищем все элементы с классом with_tooltip внутри selector и собираем ключи сущностей
    jQuery(selector + ".with_tooltip").each(function() {
        var entity_type = GetEntityType(this);
        var entity_id = GetEntityID(this);
        entityKeys.push(GetEntityKey(entity_type, entity_id));
    }
    );
    // запрашиваем сразу все подсказки и вешаем их на элементы
    if (jQuery(selector + ".with_tooltip").length) GetAllTooltipContentFromServer();
}

// функция используется после PostBack
function RestoreTooltipPostBack(selector) {
    try {
        InitializeTooltip(selector);
    }
    catch (ex) {
    }
}

jQuery(document).ready(function() {
    // при загрузке документа
    InitializeTooltip("");
});
