/*
 * Ersteller: Adam Beres-Deak
 * Erstellt am: 17.08.2007
 *
 * Klasse: ToolTip in JavaScript
 *
 * Hinweis: http://support.microsoft.com/kb/927917/de
*/

 
function YMToolTip()
{
    var Bubble = null;
    var Textdiv = null;
    var ShownID = -1;

    var TOOLTIPID = "PresseFindenToolTip";
    var TOOLTIPIMGID = "PresseFindenToolTipImage";

    this.DivSizeX = 0;
    this.DivSizeY = 0;
    
    this.Create = function(TooltipID)
    {
        Bubble = document.createElement("div");
        TOOLTIPID = TooltipID;
	    Bubble.id = TOOLTIPID;
	    Bubble.style.opacity = 1.0;
	    Bubble.style.zIndex = 1000;
	    document.body.appendChild(Bubble);
	    Bubble.style.display = "none";
    	// Falls die Mauszeiger sich bewegt, soll die Tooltip auch bewegen.
    	document.onmousemove = this.UpdatePosition;
    	Bubble.onmouseover = this.Hide;
    	Bubble.onmousemove = this.Hide;
        document.onmouseover = this.UpdatePosition;
        document.onmouseout = this.UpdatePosition;
        document.onmouseout += this.Hide;
    }
    
    
    function RefreshTextDiv(imgID)
    {
        
        Textdiv.innerHTML = "Daten werden geladen...";
        
        function GetData(doc, tagname)
        {
            try
            {
                //return doc.getElementsByTagName(tagname).item(0).firstChild.data;
                
                var fields = doc.getElementsByTagName("field");
                for (var i = 0; i < fields.length; i++)
                {
                    if (fields[i].getAttribute("n") == tagname)
                    {
                        var tx = fields[i].firstChild.data;
                        tx = "";
                        var children = fields[i].childNodes;
                        for (var j = 0; j < children.length; j++)
                        {
                            if (children[j].nodeName == "#text") tx += children[j].data;
                            else if (children[j].nodeName == "hit") tx += "<strong style=\"background-color:yellow;\">" + children[j].firstChild.data + "</strong>";
                            else tx += children[j].firstChild.data;
                        }
                        
                        tx = tx.replace(/\n\n/g, " &nbsp;<strong>|</strong>&nbsp; ");
                        tx = tx.replace(/\n/g, " &nbsp;*&nbsp; ");
                        
                        return tx;
                    }
                }
                return "";
            }
            catch(e)
            {
                return "";
            }
        }
        
        function Refresh(transfer)
        {
            var doc = transfer.responseXML.documentElement;
            var title = GetData(doc, "title");
            var subtitle = GetData(doc, "subtitle");
            var appear = GetData(doc, "interval");
            //var single = GetData(doc, "issueprice");
            var single = GetData(doc, "printissueprice");
            var singlecurr = "EUR(D)";
            var vol = GetData(doc, "number") + "/" + GetData(doc, "year");
            var actcont = GetData(doc, "cover");
            var publisher = GetData(doc, "publisher");
            var keywords = GetData(doc, "keywords");
            var category = GetData(doc, "category");
            var coverid = GetData(doc, "ebinr");
            var profile = GetData(doc, "profile");
            if (coverid == ShownID)
            {
                Textdiv.innerHTML = "";
                Textdiv.innerHTML += "<p id=\"title\" class=\"title\">" + title + "</p>";
                Textdiv.innerHTML += "<span id=\"subtitle\" class=\"subtitle\"><strong>" + subtitle + "</strong></span><br />";
                Textdiv.innerHTML += "<br /><span id=\"profile\" class=\"profile\"><strong>Profil:&nbsp;</strong>" + profile + "</span><br />";
                Textdiv.innerHTML += "<br /><strong>Aktuelle Ausgabe:&nbsp;</strong><span id=\"actcont\" class=\"actcont\">" + vol + "<br />" + actcont + "</span><br /><br/>";
                Textdiv.innerHTML += "<span id=\"appear\" class=\"appear\"><strong>Erscheint:</strong> &nbsp;" + appear + "</span><br />";
                Textdiv.innerHTML += "<span id=\"single\" class=\"single\"><strong>Einzelheft:</strong>&nbsp;" + single + "&nbsp;" + singlecurr + "</span><br />";
                Textdiv.innerHTML += "<span id=\"publisher\" class=\"publisher\"><strong>Verlag:&nbsp;</strong>" + publisher + "</span><br />";
                Textdiv.innerHTML += "<span id=\"keywords\" class=\"keywords\"><strong>Schlagwort:&nbsp;</strong>" + keywords + "</span><br />";
                Textdiv.innerHTML += "<span id=\"category\" class=\"category\"><strong>Kategorie:&nbsp;</strong>" + category + "</span><br />";
            }
        }
        
        var url = "../../Partners/PresseFinden/AjaxRequest.aspx?EBINR=";
        var url2 = encodeURIComponent(imgID) + "&PressCatchword=" + encodeURIComponent(PressCatchword);
        url += url2;
        
        new Ajax.Request(url, 
            {
                method: 'get',
                onSuccess: Refresh
                
            }
        );
    }
    
    
    this.GetImageURL = null;
    this.RefreshDiv = function(imgID)
    {
        if(this.GetImageURL)
        {
            $(TOOLTIPIMGID).src = this.GetImageURL(imgID, 1);
        }
        
	    if($(TOOLTIPID).style.visibility == "visible") return;
	    $(TOOLTIPID).style.visibility = 'visible';
	    this.SetSize(600, 400);
    }
    
    this.addClass = function(classname)
    {
        $(TOOLTIPID).className = classname;
    }
    
    this.SetBGStyle = function(bgstyle)
    {
        var style = $(TOOLTIPID).getAttribute("style");
        if(style == null) style = "";
        if(style != "") style += ";";
        style += bgstyle + ";";
        $(TOOLTIPID).setAttribute("style", style);
    }
    
    this.CreateDiv = function()
    {
        this.SetSize(0, 0);
        this.addClass("tooltip");
        this.LoadCSS("../../Partners/PresseFinden/Layout/Css/Tooltip.css");
        //this.SetBGStyle("background: url(../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_600_x_400.png) no-repeat bottom left;");
        this.SetBGStyle("background: transparent;");
        
        var bkgimg = document.createElement("img");
        bkgimg.id = "PFTooltipImg";
        //bkgimg.setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png");
        bkgimg.setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.gif");
        bkgimg.style.position = "relative";
        bkgimg.style.pixelLeft = 0;
        bkgimg.style.pixelTop = 0;
        bkgimg.style.pixelWidth = 700;
        bkgimg.style.pixelHeight = 550;
        //if (bkgimg.style.filter != null) bkgimg.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png', sizingMethod='scaling')";
        /*
        if ($(TOOLTIPID).style.filter != null)
            $(TOOLTIPID).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png', sizingMethod='scaling')";
        else
        {
            $(TOOLTIPID).appendChild(bkgimg);
        }
        */
        $(TOOLTIPID).appendChild(bkgimg);
        $(TOOLTIPID).style.pixelWidth = 700;
        $(TOOLTIPID).style.pixelHeight = 550;

        // Image auf dem Bubble
	    var img = document.createElement("img");
	    img.id = TOOLTIPIMGID;
	    img.style.pixelWidth = 200;
	    img.style.pixelHeight = 275;
	    img.style.pixelLeft = 35;
	    img.style.pixelTop = 100;
	    img.style.border = "solid 2px #99aabb";
	    img.style.position ="absolute";
        img.style.zIndex = 1001;
    	
	    // Bubble Text
	    var textdiv = document.createElement("div");
	    textdiv.id = "PFTooltipText";
	    Textdiv = textdiv;
	    textdiv.style.position = "absolute";
	    
	    if ((!Prototype.Browser.Gecko) && (Prototype.Browser.IE))
	    {
	        textdiv.style.backgroundColor = "#ffffff";
	        textdiv.style.position = "absolute";
	        textdiv.style.display = "block";
	        textdiv.style.pixelLeft = 245;
	        textdiv.style.pixelTop = 27;
	        textdiv.style.pixelWidth = 390;
	        textdiv.style.pixelHeight = 450;
	        textdiv.style.borderColor = "#99aabb";
    	    textdiv.style.borderWidth = "2px";
    	    textdiv.style.borderStyle = "solid";
    	    textdiv.style.fontColor = "#3A6D98";
            textdiv.style.overflow = "hidden";
            textdiv.style.fontColor = "#3A6D98";
            textdiv.style.marginLeft="10px";
            textdiv.style.marginRight="5px";
	        textdiv.style.paddingLeft="10px";
	        textdiv.style.paddingTop="3px";
        }
        textdiv.setAttribute("class", "tooltiptext");
        
	    // Bubble und Image zuordnen.
	    $(TOOLTIPID).appendChild(img);
	    document.body.appendChild($(TOOLTIPID));
	    $(TOOLTIPID).appendChild(textdiv);
    }
    
    var Shown = false;
    
    this.NoHide = null;
	var NoHide = this.NoHide;
    this.SetNoHide = function(func)
    {
        this.NoHide = func;
        NoHide = func;
    }
    
    this.Hide = function(evnt)
    {
        var Hiding = true;
        if((NoHide) && (NoHide(evnt))) Hiding = false;
        if(Hiding && Shown)
        {
	        $(TOOLTIPID).style.display = "none";
	        $(TOOLTIPID).style.zIndex = -1000;
    	    Shown = false;
    	}
    } 
    var Hide = this.Hide; // Variable, welche extarnal zu UpdatePosition sind.
	document.onmouseout = Hide;
	
	var upd = 0; // Variable, welche extarnal zu UpdatePosition sind.
	
	function GetItemCoords(obj)
	{
        var curleft = curtop = 0;
	    if (obj.offsetParent)
	    {
		    curleft = obj.offsetLeft
		    curtop = obj.offsetTop
		    while (obj = obj.offsetParent)
		    {
		        curleft += obj.offsetLeft
		    	curtop += obj.offsetTop
	    	}
        }
	    return [curleft, curtop];	
	}
	
	// Wird aufgerufen, wenn die Mausezeiger sich bewegt.
	this.UpdatePosition = function(e)
    {
        if(!Shown) return;
        //if ((NoHide) && (!NoHide(e))) Hide(e);
        
	    var PositionX = 0;
	    var PositionY = 0;
    	
	    if(e == null) e = window.event;
	    
	    if(e.pageX || e.pageY)
	    {
    	    PositionX = e.pageX;
    	    PositionY = e.pageY;
        }
	    else if(e.clientX || e.clientY)
	    {
    	    if(document.documentElement.scrollTop)
    	    {
        	    PositionX = e.clientX + document.documentElement.scrollLeft;
	            PositionY = e.clientY + document.documentElement.scrollTop;
            }
    	    else
    	    {
        	    PositionX = e.clientX + document.body.scrollLeft;
        	    PositionY = e.clientY + document.body.scrollTop;
            }
        }

                       
	    var trg = e.target || e.srcElement;
	    /*
	    var trgtmp = trg;
	    if(trg.id.substring(0, 11) != "PresseBild_")
	    //if($(trg) == $(TOOLTIPID))
	    {
	        var allimgs = document.getElementsByTagName("img");
	        var imgs = new Array();
	        for (var i = 0; i < allimgs.length; i++)
	        {
	            if (allimgs[i].id.substring(0,11) == "PresseBild_") imgs.push(allimgs[i]);
	        }
	        var i = 0;
	        for (i = 0; i < imgs.length; i++)
	        {
	            var coords = GetElementCoords4(imgs[i]);
	            if (PositionX > coords[0] && PositionX < coords[2] && PositionY > coords[1] && PositionY < coords[3])
	            {
	                trg = imgs[i];
	                break;
	            }
	        }
	        if (i == imgs.length) Hide();
	    }
	    */
	    
	    if(trg.id.substring(0,11) != "PresseBild_") {Hide(); return;}
	    /*{
	        trg = $("PresseBild_" + ShownID);
	    }*/
	    
	    var ImgID = trg.id.substring(11, trg.id.length);
	    ShownID = ImgID;
	    var src = PF.GetImageURL(ImgID, 1);
	    if ($(TOOLTIPIMGID).src != src)
	    {
	        $(TOOLTIPIMGID).src = src;
	        RefreshTextDiv(ImgID);
	    }
	    
	    var coords = GetItemCoords($(trg));
	    
	    var Up = true;
	    
	    var PT = PageTop();
	    var PH = document.documentElement.clientHeight;//document.body.clientHeight;
	    var XUp = coords[1];
	    var XBo = XUp + 120;//trg.getHeight();
	    
	    if ((XUp - PT) > (PH - (XBo - PT))) Up = true;
	    else Up = false;
	    
	    if (Up)
	    {
	        $(TOOLTIPID).style.pixelTop = coords[1] - $(TOOLTIPID).style.pixelHeight + 5;
    	    $(TOOLTIPID).style.pixelLeft = coords[0] - 35;
    	    $("PresseFindenToolTipImage").style.top = "100px";
    	    $("PFTooltipText").style.pixelTop = 27;
            
            /*if ($(TOOLTIPID).style.filter != null)
                $(TOOLTIPID).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png', sizingMethod='scaling')";
            else
            {
                $("PFTooltipImg").setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png");
            }
            */
            $("PFTooltipImg").setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.gif");
            //$("PFTooltipImg").setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png");
            //$("PFTooltipImg").src = "";
            //if ($("PFTooltipImg").style.filter != null) $("PFTooltipImg").style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08.png', sizingMethod='scaling')";
    	}
    	else
    	{
	        $(TOOLTIPID).style.pixelTop = XBo + 15 ;//+ $(TOOLTIPID).style.pixelHeight + 5;
    	    $(TOOLTIPID).style.pixelLeft = coords[0] - 35;
    	    
    	    $("PresseFindenToolTipImage").style.pixelTop = 140;
    	    $("PFTooltipText").style.pixelTop = 67;
            $("PFTooltipImg").setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08_mirror.gif");
            /*
            if ($(TOOLTIPID).style.filter != null)
                $(TOOLTIPID).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08_mirror.png', sizingMethod='scaling')";
            else
    	        $("PFTooltipImg").setAttribute("src", "../../Partners/PresseFinden/Layout/Images/Custom/Tooltip_700_x_550_08_mirror.png");
    	        */
    	}
    }
    
    UPDATEPOSITION = this.UpdatePosition;
    
    this.SetSize = function(XSize, YSize)
    {
        $(TOOLTIPID).style.pixelWidth = XSize;
        $(TOOLTIPID).style.pixelHeight = YSize;
    }
    
    // Fade...
	this.FadeIn = function(opacity)
    {
        function SetOpacity(element, opacity)
        {
            var style = $(element).getAttribute("style");
            if (style == null) style = ";";
            style += "opacity: " + opacity + ";";
            var opa = Math.round(opacity * 100);
            style += "filter:alpha(opacity = " + opa + ");";
            element.setAttribute("style", style);
            if($(element).style.opacity != null) $(element).style.opacity = opacity;
        }

        // Anonym Funktion fuer Rekursion...
        GUID6cdcf5b561c94ffcb59c3b58320ea1e2 = function(opacity)
        {
	        if(opacity > 1) 
	        {
	            SetOpacity($(TOOLTIPID), 1.0);
	            return;
	        }
	        SetOpacity($(TOOLTIPID), opacity);
	        opacity += 0.2;
	        setTimeout("GUID6cdcf5b561c94ffcb59c3b58320ea1e2(" + opacity + ")", 20);
	    }
	    GUID6cdcf5b561c94ffcb59c3b58320ea1e2(opacity);
    }
    
	/*
	this.FadeInOut = function(element, delta, startOpa, endOpa, delay)
    {
        var opa = $(element).getOpacity();
        opa += delta;
        //$(element).setOpacity($(element), opa);
        $(element).setStyle({opacity: opa});
        
        if ((startOpa < endOpa) && (opa >= endOpa))
        {
            $(element).setStyle({opacity: endOpa});
            return;
        }
        else if ((startOpa > endOpa) && (opa <= endOpa))
        {
            $(element).setStyle({opacity: endOpa});
            return;
        }
        else
        {
            setTimeout("Fade('" + element + "'" + "," + delta + "," + startOpa + "," + endOpa + "," + delay + ");", delay);
        }
    }
	*/
    
    
    var UP = this.UpdatePosition;
    
    this.Show = function(evnt)
    {
        if(evnt == null) evnt = window.event;
        UP(evnt);
	    //if(!Shown) this.FadeIn(0.1);
	    if(!Shown) 
	    {
	        $(TOOLTIPID).style.display = "block";
	        $(TOOLTIPID).style.zIndex = 1000;
	        Shown = true;
	    }
    }
	
	this.LoadCSS = function(FileName)
    {
	    var l=document.createElement("link");
        l.setAttribute("type","text/css");
        l.setAttribute("rel","stylesheet");
        l.setAttribute("href",FileName);
        document.getElementsByTagName("head")[0].appendChild(l);
    }
	
	this.SetTooltipDivID = function(id)
	{
	    $(TOOLTIPID).id = id;
	    TOOLTIPID = id;
	}
}


function GetElementCoords4(obj)
{
    obj = $(obj);
    var curleft = curtop = 0;
    var curright = obj.getWidth();
    var curbottom = obj.getHeight();
	if (obj.offsetParent)
	{
	    curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent)
		{
		    curleft += obj.offsetLeft;
		    curtop += obj.offsetTop;
	    }
    }
    curright += curleft;
    curbottom += curtop;
	return [curleft, curtop, curright, curbottom];   
}

function PageTop()
{
    return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : 
        document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : 
            document.body.scrollTop ? document.body.scrollTop : 
                0;
}


/*
function PageBottom()
{
    return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : 
        document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : 
            document.body.scrollTop ? document.body.scrollTop : 
                0;
}
*/