/**
 * ToolTips      
 */ 
function toolTips()
{
    // ID des Fensters
    this.divId              = 'tTipsWindow';
    // Verzeichnis in welchem die Tooltips liegen
    this.tooltipDir         = 'tooltips/';
    // PHP-Skript welches die Suchvorschläge erstellt
    this.searchScript       = 'tooltip.php';
    
    
    
    
    /*********************** AN HIER NICHTS MEHR ÄNDERN ***********************/
    
        
    // Timer für das Ausblenden
    this.timer              = null;
    // Timer für das Einblenden des Fensters
    this.timer2             = null;
    // Timer für das Einblenden des Schatten des Fensters
    this.timer3             = null;
    // Aktuelle Mouseposition X
    this.mouseposX          = 0;
    // Aktuelle Mouseposition Y
    this.mouseposY          = 0;    
    // Gibt an ob der Tooltip gerade eingeblendet ist
    this.visible            = false;       

    // Merker ob gerade eine Ajax-Abfrage läuft 
    this.running            = false;
    // Ajax-Verbindung
    this.conn               = null;
    // Userdefiniert Parameter, welche beim Abfragen der Suchvorschläge 
    // mitgesendet werden
    // Diese Werte lassen sich mit der Funktion addParam(name, wert)
    // hinzufügen
    this.addParamStr        = '';   
    // Gibt an, ob das Fenster schnell angezeigt werden soll (true == schnell) 
    this.viewFast           = false;
    // Ausrichtung des Tooltips
    this.tipAlign           = 'right'
    this.width              = 0;
    this.mouseFollow        = false;




    /**
     * Initialisieren
     */     
    this.init = function()
    {
        this.debug("init()", "");
        this.createWindow();
    };
    
    
    
    /**
     * Erstellen des Fensters
     */         
    this.createWindow = function()
    {
        this.debug("createWindow()", "");
        
        if(getElem(this.divId))
            return;
                
        var div;
        // Fenster 
        div  = '<div id="'+this.divId+'" onmouseover="tTip.mOver();" ';
        div += 'onmouseout="tTip.mOut();"></div>';
        // Fensterschatten
        div += '<div id="'+this.divId+'Shaddow"></div>';
        // Fenster in die Seite eintragen
        document.getElementsByTagName('body')[0].innerHTML += div;
    };
        
    /**
     * Einstellungen für den Tooltip ermitteln Fenstereinstellungen setzen
     *  @var el object           
     */         
    this.view = function(el)
    {       
        // timer4 wieder löschen
        if(this.timer4 != null)
        { 
            clearTimeout(this.timer4);
            this.timer4 = null;
        }
        
        
        // Datei welche für den Tooltip genutzt werden soll ermitteln
        var file    = el.getAttribute('tTipFile');
        // Breite des Fensters ermitteln
        var w       = el.getAttribute('tTipWidth');
        tTip.width  = parseInt(w);
        
        // Höhe des Fensters ermitteln
        var h       = el.getAttribute('tTipHeight');
        // Soll das Fenster große Inhalte Scrollbar machen
        var oflow = 'true';
        if(el.getAttribute('tTipScroll')) 
            oflow   = el.getAttribute('tTipScroll').toLowerCase();
        // Ausrichtung des Fensters (left oder default right)
        if(el.getAttribute('tTipAlign') && el.getAttribute('tTipAlign').toLowerCase() == 'left')
            this.tipAlign = 'left';
        else
            this.tipAlign = 'right';
            
        // Soll das Fenster Schnell oder langsam eingeblendet werden
        if(el.getAttribute('tTipViewFast') && el.getAttribute('tTipViewFast').toLowerCase() == 'true')
            this.viewFast = true;
        else
            this.viewFast = false;
            
            
        // Soll das Fenster Schnell oder langsam eingeblendet werden
        if(el.getAttribute('tTipMouseFollow') && el.getAttribute('tTipMouseFollow').toLowerCase() == 'true')
            this.mouseFollow = true;
        else
            this.mouseFollow = false;
            
            

        this.debug("view()", file+"<br>"+oflow+"<br>"+w+"<br>"+h);
        
        
        // Wenn eine Größe fehlt, dann abbrechen        
        if(w == undefined || h == undefined)
            return;
        
        // Größen für IE anpassen
        if(navigator.appName != 'Netscape')
        {
//             w  = parseInt(w) + 8;
//             h  = parseInt(h) + 8;
        }
        
        // Breite des Fensters setzen
        getElem(this.divId).style.width     = w+'px';
        // Höhe des Fensters setzen
        getElem(this.divId).style.height    = h+'px';
        
        // Position des Fensters von links setzen
        var posX = (this.mouseposX+5);
        var posY = (this.mouseposY+5);
        
        if(this.tipAlign == 'left')
        {
            posX = parseInt(parseInt(posX)-(parseInt(w)+30));
        }
        
        getElem(this.divId).style.left      = posX+'px';
        // Position des Fensters von oben setzen
        getElem(this.divId).style.top       = posY+'px';
        
        // Breite des Schattens setzen
        getElem(this.divId+'Shaddow').style.width     = w+'px';
        // Höhe des Schattens setzen
        getElem(this.divId+'Shaddow').style.height    = h+'px';
        // Position von links des Schattens setzen
        getElem(this.divId+'Shaddow').style.left      = (posX+5)+'px';
        // Position von rechts des Schattens setzen
        getElem(this.divId+'Shaddow').style.top       = (posY+5)+'px';
        
        // Fenster Scrollbar oder auf Inhalt abschneiden setzen
        if(oflow == 'true')
            getElem(this.divId).style.overflow  = 'auto';
        else
            getElem(this.divId).style.overflow  = 'hidden';

    
        file = file.replace(/&amp;/g, '¤');
        file = file.replace(/&/g, '¤');

        
        // Wenn das zu ladene Template gleich dem alten ist, dann den Tooltip 
        // nur wieder einblenden, ohne die Daten erneut abzufragen
        if(this.tooltipDir+file == this.tpl)
        {
            this.viewWindow();
            return;
        }
        
        // TemplateOrdner vor die TemplateDatei setzen
        this.tpl                            = this.tooltipDir+file;
        
        // Inhalt des Fensters abfragen
        this.getToolTip();
    };
    
    /**
     * Fensterinhalt setzen und einblenden
     */         
    this.viewWindow = function()
    {       
        // Wenn Ajax "null" zurückgibt, dann Abbrechen
        if(this.returned == 'null')
        {
            this.debug("viewWindow()", "returned = null");
            return;
        }
        
        // Fensterinhalt setzen
        getElem(this.divId).innerHTML = this.returned;
        
        var tWait = 1;
        var tFade = 200;
        
        if(this.viewFast != true)
        {
            tWait = 300;
            tFade = 50;
        }

        // Fenster einblenden
        this.timer2 = window.setTimeout("fadeElement('"+this.divId+"', 0, 100, "+tFade+", true)", tWait);
        
        // Schatten einblenden
        this.timer3 = window.setTimeout("fadeElement('"+this.divId+"Shaddow', 0, 40, "+tFade+", true)", tWait);
        this.debug("viewWindow()", "2");
        // Merker setzen (Fenster eingeblendet)
        this.visible = true;
    };
    
    /**
     * Button wurde nur kurz überfahren, Timer uzm einblenden wieder löschen
     */         
    this.bOut = function()
    {
        this.debug("bOut()", "");
        
        // Wenn der timer2 nicht aktiviert wurde, dann abbrechen
//         if(this.timer2 == null)
//             return;
        
        // timer2 wieder löschen (button wurde nur kurz überfahren)
        clearTimeout(this.timer2);
        this.timer2 = null;
        
        // timer3 wieder löschen 
        clearTimeout(this.timer3);
        this.timer3 = null;
        
        // timer4 tooltipp ausblenden
        this.timer4 = window.setTimeout("tTip.hide();", 200);
        
    };
        
    /**
     * Fenseter ausblenden
     */             
    this.hide = function()
    {
        this.debug("hide()", "");
                
        
        // Schatten ausblenden
        window.setTimeout("fadeElement('"+this.divId+"Shaddow', 40, 0, 50, true);", 100);
        
        // Etwas Zeitversetzt das Fenster ausblenden
        window.setTimeout("fadeElement('"+this.divId+"', 100, 0, 100, true);", 150);
        
        // Merker setzen (Fenster eingeblendet)
        this.visible = false;
    };

    /**
     * Beim überfahren des Fensters
     */         
    this.mOver = function()
    {
        this.debug("mOver()", "");
        
        // Wenn der Timer zum Ausblenden nicht gesetzt ist, dann abbrechen 
        if(this.timer == null)
            return;
        
        // timer4 wieder löschen
        if(this.timer4 != null)
        { 
            clearTimeout(this.timer4);
            this.timer4 = null;
        }
        
        // Timer zum Ausblenden löschen
        clearTimeout(this.timer);
        this.timer = null;
    };

    /**
     * Timer zum Ausblenden setzen wenn man mit der Mouse den Tooltip verlässt
     */          
    this.mOut = function()
    {
        this.debug("mOut()", "");
        
        var tWait = 800;
        if(this.viewFast == true)
            tWait = 1;
        
        // Timer zum auusblenden setzen
        this.timer = setTimeout("tTip.hide();", tWait);
    };
    
    /**
     * Mouseposition merken
     */         
    this.registerMousePos = function(e)
    {
        // Funktionen für Mozilla, Netscape ect.
        if(navigator.appName == 'Netscape')
        {
           tTip.mouseposX = e.pageX;
           tTip.mouseposY = e.pageY;
        }
        else
        {
            // Funktionen für Internet Exploror
           tTip.mouseposX = window.event.x;
           tTip.mouseposY = parseInt(window.event.y);
           tTip.mouseposY += parseInt(document.documentElement.scrollTop);
        }
        
        if(tTip.mouseFollow == false)
            return;
        
        // Position des Fensters von links setzen
        var posX = (tTip.mouseposX-10);
        var posY = (tTip.mouseposY-10);
        
        if(tTip.tipAlign == 'left')
        {
            posX = parseInt(parseInt(posX)-(parseInt(tTip.width)+30));
        }
        
        getElem(tTip.divId).style.left      = posX+'px';
        // Position des Fensters von oben setzen
        getElem(tTip.divId).style.top       = posY+'px';
        
        // Position von links des Schattens setzen
        getElem(tTip.divId+'Shaddow').style.left      = (posX+5)+'px';
        // Position von rechts des Schattens setzen
        getElem(tTip.divId+'Shaddow').style.top       = (posY+5)+'px';
    };
    
    
    
    
    
    
    
    
    
    
    /**
     * AJAX Funktionen
     **************************************************************************/
    
    
    /**
     * AjaxFunktionen ausführen
     */
    this.getToolTip = function(sec)
    {
        this.debug('getToolTip('+sec+')', '');
       
        // Beim ersten aufruf den Aufrufzähler auf 0 setzen 
        if(sec == undefined)
            sec = 0;
        
        // Wenn die Funktion 3 mal aufgerufen wurde, ohne das die Abfrage 
        // Gesendet wurde, dann abbrechen
        if(sec == 3)
        {
            this.debug('getToolTip('+sec+')', '! ! ! TIMEOUT ! ! !');
            return;
        }

        // Wenn zur zeit noch eine Abfrage läuft, dann 0,2 sekunden warten und
        // die Funktion erneut aufrufen
        if(this.running == true)
        {
            sec++;
            window.setTimeout("tTip.getToolTip("+sec+")", 200);       
            return;
        }
                
        // Verbindung initialisieren
        if(window.XMLHttpRequest)
        {        
            this.conn = new XMLHttpRequest();
        }
        else if(window.ActiveXObject)
        {
            // IE
            try
            {
                this.conn = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e)
            {
                try
                {
                    this.conn = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e)
                { }
            }
        }

        // Prüfen ob eine Verbindung hergestellt wurde
        if(!this.conn)
        {
            this.debug('getToolTip()', 'Es konnte keine Verbindung hergestellt werden');
            return false;
        }
        
        // Merker setzen, das zur Zeit eine Abfrage läuft
        this.running = true;
        
        // Funktion zum abfragen der Antwort setzen
        this.conn.onreadystatechange = tTip.changeState;
        
        // POST-Verbindung erstellen
        this.conn.open('POST', this.searchScript, true);
        
        // Header der Verbindung setzen (Daten werden als post gesendet)
        this.conn.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        
        // Parameterliste erstellen
        var param  = '';
        
        // Aktueller Wert nach dem gesucht wird
        param += '&tpl='+this.tpl;
        // Weitere Userdefinierte Parameter noch anhängen
        param += this.addParamStr;

        // Skript aufrufen
        this.conn.send(param);

        return true;       
    };

    /** 
     * Antworten der Verbindung abfragen
     */         
    this.changeState = function()
    {
        // Prüfen welcher readyState vorliegt       
        if(tTip.conn.readyState == 4)
        { 
            // Status Prüfen
            if(tTip.conn.status == 200)
            {
                // Rückgabe abfangen
                tTip.returned = tTip.conn.responseText;
                
                // Merker das zur Zeit eine Abfrage läuft zurücksetzen
                tTip.running = false;
                
                // Ergebnisse anzeigen lassen
                tTip.viewWindow();
            }
            else
            {
                // Beim Abfragen der Daten ist ein Fehler aufgetreten
                tTip.debug('changeState()', 'Bei dem Request ist ein Problem aufgetreten. '+tTip.conn.status);
                
                // Merker das zur Zeit eine Abfrage läuft zurücksetzen
                tTip.running = false;
            }
        }
    };
    
    /**
     * Parameter hinzufügen, welcher bei der Abfrage mitgesendet werden
     */             
    this.addParam = function(name, wert)
    {
        this.debug('addRequestParameter()', name+"="+wert);
        this.addParamStr += "&"+name+"="+wert;
    };
    
    

    
    /** 
     * Hinzufügen von Debugzeilen
     */         
    this.debug = function(name, str)
    {
        // Wenn das Element mit der ID "debug" existiert, dann wird dort die 
        // neue Zeile eingetragen
        if(getElem('debug'))
            getElem('debug').innerHTML = "<b>tTip."+name+"</b><br>"+str+"<hr>"+getElem('debug').innerHTML;
    };
}

