/*
    Authior : D.Akinshin
    E-Mail  : ada3000@yandex.ru
    Date    : 2009.04.16
    
    Args
    mode        - способ выбора подсказки 'attr' - атрибут эл-та,
                    'child' - селектор на дочерний эл-т.
    selector    - название атрибута или селектор, с.м. mode
    boxClass    - css клас рамки
    topPlus     - прибавка с верху от курсора в пикселах
    leftPlus    - прибавка с слева от курсора в пикселах
    showSpeed   - скорость показа
    hideSpeed   - скорость скрытия
    
    join        - привязка к курсору или эл-ту(def=cursor) cursor|element
    
    Пример использования:
    
    $("* [title_ex]").aidaTooltip({
        selector:'title_ex',
        topPlus:10,
        leftPlus:10,
        showSpeed:0,
        hideSpeed:'fast',
        boxClass:'tool_tip_box'                
    });
    
*/

jQuery.fn.aidaTooltip=function(Args)
{
    this.each(function() { $(this).aidaTooltipForOne(Args) });
    return this;
}
jQuery.fn.aidaTooltipForOne = function(Args)
{

    if (Args == undefined) return;
    if (this.size == undefined) return;
    var menuHandler = this;
    var fn = new Object();

    var mode = Args.mode == undefined ? "attr" : Args.mode;
    var selector = Args.selector == undefined ? "title" : Args.selector;
    var boxClass = Args.boxClass == undefined ? "aida_tooltip_box" : Args.boxClass;
    var topPlus = Args.topPlus == undefined ? 10 : Args.topPlus;
    var leftPlus = Args.leftPlus == undefined ? 10 : Args.leftPlus;
    var showSpeed = Args.showSpeed == undefined ? 'normal' : Args.showSpeed;
    var hideSpeed = Args.hideSpeed == undefined ? 'normal' : Args.hideSpeed;
    var join = Args.join == undefined ? 'cursor' : Args.join;

    var menuContent = "";

    if (mode == "attr")
        menuContent = menuHandler.attr(selector);
    else
        menuContent = menuHandler.find(selector).html();

    var BaseContainer = document.createElement('DIV');
    var Visible = false;

    BaseContainer.style.position = 'absolute';
    BaseContainer.style.display = 'none';
    BaseContainer.className = boxClass;
    document.body.appendChild(BaseContainer);
    BaseContainer = $(BaseContainer);
    BaseContainer.html(menuContent);

    fn.showTooltipEnd = function()
    {
        Visible = true;
    }

    fn.fillContent = function()
    {
        if (mode == "attr")
            menuContent = menuHandler.attr(selector);
        else
            menuContent = menuHandler.find(selector).html();

        BaseContainer.html(menuContent);
    }

    fn.showTooltip = function(e)
    {
        fn.fillContent();
        if (join == "cursor")
        {
            BaseContainer.css("top", e.pageY + topPlus);
            BaseContainer.css("left", e.pageX + leftPlus);
        }
        else
        {

            var pos = $(this).position();
            var pageX = pos.left + $(this).width();
            var pageY = pos.top + $(this).height();
            BaseContainer.css("top", pageY + topPlus);
            BaseContainer.css("left", pageX + leftPlus);
        }
        BaseContainer.slideDown(showSpeed, fn.showTooltipEnd);
        return false;
    }
    fn.hideTooltip = function()
    {
        BaseContainer.slideUp(hideSpeed);
    }
    fn.mouseMove = function(e)
    {
        if (!Visible) return;
        if (join != "cursor") return;
        BaseContainer.css("top", e.pageY + topPlus);
        BaseContainer.css("left", e.pageX + leftPlus);
    }
    fn.Init = function()
    {
        //alert("Init Start");
        menuHandler.mousemove(fn.mouseMove);
        menuHandler.mouseover(fn.showTooltip);
        menuHandler.mouseout(fn.hideTooltip);
        //alert("Init End");
    }
    fn.Init();

    return this;
}

