/**
 * Einblenden von Suchvorschlägen
 */ 
function searchProposal()
{
    // PHP-Skript welches die Suchvorschläge erstellt
    this.searchScript       = 'searchproposal.php';
    // Name des Formulars das bei einer auswahl abgeschickt werden soll
    this.formId             = 'sform';
    // Maximale Anzahl an Einträgen, wonach andere Kunden gesucht haben 
    this.maxSearch          = 5;
    // Maximale Anzahl an Vorschlägen
    this.maxProposal        = 10;
    // Maximale Anzahl an Arikeln
    this.maxArtikel         = 5;
    // CSS-Class welche dem Fenster zugeordnet werden soll
    this.divClass           = 'searchproposal';
    // Breite des Fensters
    this.divWidth           = 300;
    // Höhe des Fensters
    this.divHeight          = 390;
    // ID des Suchfeldes in welchem der Suchbegriff eingegeben wird
    this.searchFieldId      = 'sb';
    // Anzahl an Zeichen die erreicht sein muß, bevor nach Vorschlägen 
    // gesucht werden soll
    this.minSearchLen       = 4;
    // Default-Text welcher im Suchfeld stehen soll
    this.defSearchString    = 'Suchbegriff eingeben';
    
    
    /*********************** AN HIER NICHTS MEHR ÄNDERN ***********************/
    
    // ID des Fensters
    this.divId       
    // MouseOver Window
    this.moWindow       = false;
    // FensterElement 
    this.div            = new Object();
    // Aktueller Eintrag im Suchfeld
    this.searchString   = '';
    // Element des Suchfeldes
    this.searchField    = new Object();
    // Timer
    this.timer          = null;
    // 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        = '';    
    
    

    /**
     * Initialisierung
     * 
     * Hier wird das Element des Suchfeldes ermittelt und das aufbau des Fenster
     * aufgerufen      
     */                   
    this.init = function()
    {
        this.debug("init()", '');
            
        // Suchfeld festlegen
        this.searchField    = getElem(this.searchFieldId);
        
        // Ein Rahmen wird benötigt, um beim Blinken einen Stylefehler
        // zu beheben
        getElem(this.searchFieldId).style.border       = '1px solid #999';
        getElem(this.searchFieldId).style.marginBottom = '3px';
        
        this.createWindow();        
    };
    
    /**
     * Erstellen des Fensters
     * 
     * Es wird ein div-Element erstellt, welches dem übergeordnetem Element des
     * Suchfeldes, untergeordnet wird.      
     */              
    this.createWindow = function()
    {
        this.debug("createWindow()", '');
        
        var div;
        div                         = document.createElement('div');
        div.id                      = this.divId;
        div.className               = this.divClass;
        div.style.display           = 'none';
        
        div.setAttribute("onmouseover", "sPro.moWindow = true;");
        div.setAttribute("onmouseout", "sPro.moWindow = false;");

        // Übergeordnetes Element des Suchfeldes suchen
        var target = getElem(this.searchFieldId).parentNode;
        
        // Fenster dem Elternelement des Suchfeldes unterordnen
        target.appendChild(div);
    };
    
    /**
     * Aktionen die beim Fokusieren des Suchfeldes ausgeführt werden
     */         
    this.focus = function()
    {
        this.debug("focus()", 'Aktueller Feldinhalt: <u>'+getElem(this.searchFieldId).value.trim()+'</u>');
        
        // Ist der vorhergehende Suchstring gleich dem DefaultWert des Feldes
        // So wird das Feld geleert andernfalls wird das Fenster eingeblendet
        if(getElem(this.searchFieldId).value.trim() == this.defSearchString)
            getElem(this.searchFieldId).value = '';
        else
            this.slideIn();
                    
        // Feldüberwachung starten
        this.timer = window.setInterval("sPro.checkField();", 150);
    };
    
    /**
     * Aktionen die beim Verlassen des Suchfeldes ausgeführt werden
     */     
    this.blur = function()
    {
        this.debug("blur()", 'Aktueller Feldinhalt: <u>'+getElem(this.searchFieldId).value.trim()+'</u><br>MoWindow: '+this.moWindow);
       
        // Wird das Feld verlassen und es nichts im Feld eingetragen, so wird
        // der DefaultWert eingetragen 
        if(getElem(this.searchFieldId).value.trim() == '')
            getElem(this.searchFieldId).value = this.defSearchString;
        
        // Feldüberwachung beenden
        if(this.timer != null)
            clearInterval(this.timer);
        
        // Fenster ausblenden
        if(this.moWindow == false)
            window.setTimeout("sPro.slideOut();", 50);
        else
            window.setTimeout("sPro.blur();", 800);
    };
    
    /**
     * Aktuellen Feldwert prüfen
     */         
    this.checkField = function()
    {
        // Aktuellen FeldWert ermitteln
        var fieldVal = getElem(this.searchFieldId).value.trim();
        
        // Wenn der Aktuelle FeldWert leer ist und der FeldWertSpeicher nicht 
        // leer ist, dann den FeldWertSpeicher leeren und das Fenster ausblenden
        // und die Funktion verlassen
        if(fieldVal == '' && this.searchString != '')
        {
            this.searchString = '';
            this.slideOut();
            return;
        }
        
        // Wenn der Aktuelle FeldWert gleich dem vorhergehenden ist, 
        // oder die minimale länge zum Suchen noch nicht erreicht ist, dann 
        // nichts machen
        if(fieldVal == this.searchString || fieldVal == '' || 
            fieldVal.length < this.minSearchLen)
        {

            return;
        }      
        
        this.debug("checkField()", fieldVal);      
        this.searchString = fieldVal;
        
        // Der Feldwert ist geändert worden, also neue Vorschläge 
        // abfragen lassen
        this.getProposals();
    };

    /**
     * Vorschläge einblenden
     */         
    this.viewProposal = function()
    {
        this.debug("viewProposal()", this.returned.substr(0,20));
        
        // Wenn das PHP-Skript "null" zurückgibt, so wurde nichts zum Anzeigen
        // gefunden. Dann das Fenster ausblenden und die Funktion verlassen
        if(this.returned == 'null')
        {
            this.slideOut();
            return;
        }
        
        // Vorschläge in das Fenster eintragen
        getElem(this.divId).innerHTML = this.returned;
    
        // Wenn das Fenster einblenden wenn es noch ausgeblendet ist
        if(getElem(this.divId).style.display == 'none')
            this.slideIn();
    };

    /**
     * Fenster auffahren
     */         
    this.slideIn = function()
    {
        // Overflow auf hidden setzen damit beim aufscrollen keine 
        // ScrollBalken angezeigt werden        
        getElem(this.divId).style.overflow = 'hidden';
        // Breite des Fensters setzen 
        getElem(this.divId).style.width     = this.divWidth+'px';
        // Höhe auf 0px setzen
        getElem(this.divId).style.height    = '0px';
        // Nach 1/100 Sekunde das aufscrollen beginnen
        window.setTimeout("scrollElement('"+this.divId+"', 0, "+this.divHeight+", 50, true)", 10);
        // Nach dem Aufscrollen müssen die Scrollbalken im Fenser wieder 
        // aktiviert werden
        window.setTimeout("getElem(sPro.divId).style.overflow = 'auto';", 700);
    };

    /**
     * Fenster zufahren
     */         
    this.slideOut = function()
    {
        // Wenn das Fenster nicht eingeblendet ist, dann hier abbrechen
        if(getElem(this.divId).style.display == 'none')
            return; 
            
        // Overflow auf hidden setzen damit beim zuscrollen keine 
        // ScrollBalken angezeigt werden        
        getElem(this.divId).style.overflow = 'hidden'; 
        
        // Element zuscrollen lassen
        scrollElement(this.divId, this.divHeight, 0, 50, true);
    };

    /**
     * Wert in das Suchfeld schreiben
     */         
    this.setSearchValue = function(val)
    {
        this.debug('setSearchValue()', 'Neuer Wert: '+val);
        // Wert in das Feld schreiben
        getElem(this.searchFieldId).value = val;
        
        // Formular senden
        getElem(this.formId).submit();
        
        this.slideOut();
        
        // Das Feld Blinken lassen, damit sichtbar wird, das der Wert 
        // eingetragen wurde
//         blinkBackground(getElem(this.searchFieldId).id, 1500, "#cce6ff", "#fff");        
    };




    /**
     * AJAX Funktionen
     **************************************************************************/
    
    
    /**
     * AjaxFunktionen ausführen
     */
    this.getProposals = function(sec)
    {
        this.debug('getProposals('+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('getProposals('+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("sPro.getProposals("+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('getProposals()', '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 = this.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 += '&searchStr='+this.searchString;
        // ID des Suchfeldes
        param += '&searchFieldId='+this.searchFieldId;
        // Anzahl für die maximalen Ergebnisse für die Suche "Andere Kunden ..." 
        param += '&maxSearch='+this.maxSearch;
        // Anzahl für die maximalen Ergebnisse für die Suche "Vorschläge"
        param += '&maxProposal='+this.maxProposal;
        // Anzahl für die maximalen Ergebnisse für die Artikel
        param += '&maxArtikel='+this.maxArtikel;
        // Schalter für das PHP-Script das es die Suche ausführt
        param += '&searchProposal=search';
        // 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(sPro.conn.readyState == 4)
        { 
            // Status Prüfen
            if(sPro.conn.status == 200)
            {
                // Rückgabe abfangen
                sPro.returned = sPro.conn.responseText;
                
                // Merker das zur Zeit eine Abfrage läuft zurücksetzen
                sPro.running = false;
                
                // Ergebnisse anzeigen lassen
                sPro.viewProposal();
            }
            else
            {
                // Beim Abfragen der Daten ist ein Fehler aufgetreten
                sPro.debug('changeState()', 'Bei dem Request ist ein Problem aufgetreten. '+sPro.conn.status);
                
                // Merker das zur Zeit eine Abfrage läuft zurücksetzen
                sPro.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>"+name+"</b><br>"+str+"<hr>"+getElem('debug').innerHTML;
    };
}

var sPro = new searchProposal();


function setKauferSchutz(sessNr, artikelId, set)
{
    if(set == undefined)
    {
        window.setTimeout("setKauferSchutz('"+sessNr+"', '"+artikelId+"', true);", 100);
        return;
    }
    var link = "include/modifybasket.php";
    var opt = {};
    opt['artikelid']    = artikelId;
    opt['sessionnr']    = sessNr;
    opt['gotourl']     = 'warenkorbcontent.php?reload=true';
    
    if($('trustedShopsAktivierung').checked == false)
    {
        opt['RemoveFrom']   = 'true';
        opt['varid']        = '-1';
    }
    else
    {        
        opt['varid']        = $('varid_'+artikelId+'').value;
        opt['AddTo']        = 'true';
        opt['menge']        = '1';
        
    }
    
    $('fullPageOverlay').setOpacity(0);
    $('fullPageOverlay').style.backgroundColor = '#999999';
    $('fullPageOverlay').style.display = 'block';
    $('fullPageOverlay').fade({'duration': 0.3, 'from': 0, 'to': 0.7});
    $('fullPageOverlay').style.height = $('body').offsetHeight+'px';
    new Ajax.Request(link, {
        method:     'post',
        parameters: opt,
        onSuccess:  function(ret) {
            $('warenkorbContent').innerHTML = ret.responseText;     
            $('fullPageOverlay').fade({'duration': 0.3, 'from': 0.7, 'to': 0});
            window.setTimeout("$('fullPageOverlay').style.display = 'none';", 400);
        }
    });
}


function changeKauferschutz(varId, artikelId, sessNr)
{
    if($('trustedShopsAktivierung').checked == false)
    {
        $('trustedShopsAktivierung').checked = true;
    }
    if($('tsshops_warenkorbId') != null)
        warenkorbId = $('tsshops_warenkorbId').value;
    else
        warenkorbId = 0;
    
    
    if(warenkorbId == undefined || warenkorbId == 0 || warenkorbId == null)
    {
        setKauferSchutz(sessNr, artikelId, true);
        return;
    }   
    var link = "include/modifybasket.php";
    var opt = {};
    opt['sessionnr']    = sessNr;
    opt['gotourl']     = 'warenkorbcontent.php?reload=true';
    opt['updateID']    = warenkorbId;
    
    opt['Update']               = 'true';
    opt['varid_'+warenkorbId]   = varId;
    
    $('fullPageOverlay').setOpacity(0);
    $('fullPageOverlay').style.backgroundColor = '#999999';
    $('fullPageOverlay').style.display = 'block';
    $('fullPageOverlay').fade({'duration': 0.3, 'from': 0, 'to': 0.7});
    $('fullPageOverlay').style.height = $('body').offsetHeight+'px';
    
    new Ajax.Request(link, {
        method:     'post',
        parameters: opt,
        onSuccess:  function(ret) {
            $('warenkorbContent').innerHTML = ret.responseText;     
            $('fullPageOverlay').fade({'duration': 0.3, 'from': 0.7, 'to': 0});
            window.setTimeout("$('fullPageOverlay').style.display = 'none';", 400);
        }
    });
}
