
/**
 * 
 * Copyright (C) Die Randgruppe GmbH
 * 
 * http://www.randshop.com
 * http://www.dierandgruppe.com
 * 
 * Unter der Lizenz von Die Randgruppe GmbH:
 * http://www.randshop.com/Lizenz
 *  
 * $Author$
 * $Date$
 * $Revision$
 * 
 */

function GetSearchResult(e) {

    var KeyCode;

    if (window.event) KeyCode = window.event.keyCode;
    else if (e) KeyCode = e.which;

    // Pfeiltaste nach unten
    if (KeyCode == 40) {

        document.getElementById('focuscatcher').focus();
//        if (SearchResultObject.ProductArray) {
//            HighlightContainer(SearchResultObject.ProductArray[0]['artikel_id']);
//        }

    // restliche Tasteneingaben
    } else {

        if (document.getElementById('ajaxsearch_searchstring').value.length >= SearchResultObject.BeginnAbZeichen) {

	        SearchResultObject.ActHightlightContainerID = false;
	
	        resObject = GetAjaxObject();
	
	        resObject.open('POST', URLPFAD + AJAXSEARCH_PHP, true);
	        resObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	        resObject.send('formaction=search&searchstring=' + document.getElementById('ajaxsearch_searchstring').value);
	
	        resObject.onreadystatechange = function() { HandleAjaxResponse('RenderSearchResult'); };
	        
        } else {
        	
        	SearchResultObject.HideSearchResultDiv();
        	
        }

    }

}

function SearchResultClass() {

    this.ProductArray;
    this.ShowMoreResult;
    this.NoResult;
    this.SearchString;

    this.ActHightlightContainerID;
    this.ActHightlightShowMore;

    this.ArtikelnummerAnzeigen;
    this.ArtikelnameAnzeigen;
    this.KurzbeschreibungAnzeigen;
    this.ArtikelbeschreibungAnzeigen;
    this.PreisAnzeigen;
    this.ArtikelbildAnzeigen;
    this.MaximaleArtikelbildBreite;
    this.MaximaleArtikelbildHoehe;
    this.MaximaleSuchergebnisBreite;
    this.BegrenzungSuchergebnisHoeheAnArtikelbild;
    this.BeginnAbZeichen;
    
    this.SearchOnKeyUp = true;

    this.ParseSearchResult = function(ResponseText) {

        var SearchResult = JSON.parse(ResponseText);

        this.ProductArray = SearchResult.ArtikelArray;
        this.ShowMoreResult = SearchResult.ShowMoreResult;
        this.NoResult = SearchResult.NoResult;
        this.SearchString = SearchResult.SearchString;

    }

    this.RenderSearchResault = function() {

        this.ShowSearchResultDiv();

        if (!this.NoResult) {

            this.HideNoSearchResultDiv();
            this.ShowListContainerDiv();
            this.ShowSearchHeadlineDiv();

            ListContainerElement = document.getElementById('ajaxsearchresult_list_container');
            ListContainerElement.innerHTML = '';

            for (var ArtikelCounter = 0; ArtikelCounter < this.ProductArray.length; ArtikelCounter++) {

                ProductElement = this.ProductArray[ArtikelCounter];

                SearchResultElement = this.RenderSearchResultElement(ProductElement['artikel_id'], ProductElement['artikel_name'], ProductElement['artikel_nr'], ProductElement['kurz_beschreibung'], ProductElement['beschreibung'], ProductElement['image'], ProductElement['image_width'], ProductElement['image_height'], ProductElement['preis_format']);            

                ListContainerElement.appendChild(SearchResultElement);

            }

            if (this.ShowMoreResult) {
                this.ShowMoreSearchResultDiv();
            } else {
                this.HideMoreSearchResultDiv();
            }

        } else {
            this.HideMoreSearchResultDiv();
            this.HideListContainerDiv();
            this.HideSearchHeadlineDiv();
            this.ShowNoSearchResultDiv();
        }

    }

    this.RenderSearchResultElement = function (ArtikelID, Artikelname, Artikelnummer, Kurzbeschreibung, Artikelbeschreibung, Artikelbild, ArtikelbildBreite, ArtikelbildHoehe, Preis) {

        var ProductContainer = document.createElement('div');
        ProductContainer.onmouseover = function() { HighlightContainer(ArtikelID) };
        ProductContainer.onmouseout = function() { HighlightReset(); }
        ProductContainer.onclick = function() { document.location.href = URLPFAD + 'themes/kategorie/detail.php?artikelid=' +  ArtikelID + '&refertype=16'; } 
        ProductContainer.onkeypress = function() { MoveHighlight(); } 
        ProductContainer.className = 'ajaxsearchresult_productcontainer';
        ProductContainer.setAttribute('id', 'ajaxsearchresult_productcontainer_' + ArtikelID);

        if (this.BegrenzungSuchergebnisHoeheAnArtikelbild == 1) {
            ProductContainer.style.height = this.MaximaleArtikelbildHoehe + 'px';
        }

        // Artikelbild
        if (this.ArtikelbildAnzeigen) {
        	
            var ProductImageMainContainer = document.createElement('div');
            ProductImageMainContainer.className = 'ajaxsearchresult_productimagemaincontainer';
            ProductImageMainContainer.style.width = this.MaximaleArtikelbildBreite + 'px';
            ProductImageMainContainer.style.height = this.MaximaleArtikelbildHoehe + 'px';

	        var ProductImageContainer = document.createElement('div');
	        ProductImageContainer.className = 'ajaxsearchresult_productimagecontainer';
	
	        var ProductImage = document.createElement('img');
	        ProductImage.id = 'ajaxsearchresult_productimage_' + ArtikelID;
	        ProductImage.setAttribute('src', URLPFAD + 'images/dbimages/' + Artikelbild);
	        ProductImage.setAttribute('width', ArtikelbildBreite);
	        ProductImage.setAttribute('height', ArtikelbildHoehe);
	
            ProductImageContainer.appendChild(ProductImage);

            var ProductImageTransContainer = document.createElement('div');
            ProductImageTransContainer.className = 'ajaxsearchresult_productimagetranscontainer';

            var ProductImageTrans = document.createElement('img');
            ProductImageTrans.id = 'ajaxsearchresult_productimage_trans_' + ArtikelID;
            ProductImageTrans.setAttribute('src', URLPFAD + 'images/alpha50.png');
            ProductImageTrans.setAttribute('width', this.MaximaleArtikelbildBreite);
            ProductImageTrans.setAttribute('height', this.MaximaleArtikelbildHoehe);

	        ProductImageTransContainer.appendChild(ProductImageTrans);
	        
            ProductImageMainContainer.appendChild(ProductImageContainer);
            ProductImageMainContainer.appendChild(ProductImageTransContainer);

        }

        // Artikelname
        var ProductNameContainer = document.createElement('div');
        ProductNameContainer.className = 'ajaxsearchresult_productnamecontainer';
        ProductNameContainer.style.width = (this.MaximaleSuchergebnisBreite - this.MaximaleArtikelbildBreite - 90) + 'px';

        if (this.ArtikelnameAnzeigen) {

            var ArtikelNameElement = document.createElement('h1');
            ArtikelNameElement.innerHTML = Artikelname;

            ProductNameContainer.appendChild(ArtikelNameElement);

        }

        if (this.KurzbeschreibungAnzeigen) {

            var KurzbeschreibungElement = document.createElement('p');
            KurzbeschreibungElement.innerHTML = Kurzbeschreibung
    
            ProductNameContainer.appendChild(KurzbeschreibungElement);

        }

        if (this.ArtikelbeschreibungAnzeigen) {

	        var ArtikelBeschreibungElement = document.createElement('p');
	        ArtikelBeschreibungElement.innerHTML = Artikelbeschreibung
	
	        ProductNameContainer.appendChild(ArtikelBeschreibungElement);

        }

        // Artikelinformation
        var ProductInformationContainer = document.createElement('div');
        ProductInformationContainer.className = 'ajaxsearchresult_productinformationcontainer';

        if (this.ArtikelnummerAnzeigen) {
        	
	        var ArtikelNrElement = document.createElement('i');
	        ArtikelNrElement.innerHTML = Artikelnummer;
	        
            ProductInformationContainer.appendChild(ArtikelNrElement);
            ProductInformationContainer.appendChild(document.createElement('br'));
            
        }

        if (this.PreisAnzeigen) {

	        var ArtikelPreisElement = document.createElement('b');
	        var ArtikelPreis = document.createTextNode(Preis);
	        ArtikelPreisElement.appendChild(ArtikelPreis);
	
	        ProductInformationContainer.appendChild(document.createElement('br'));
	        ProductInformationContainer.appendChild(ArtikelPreisElement);

        }


        // Box komplett
        if (this.ArtikelbildAnzeigen) {
            ProductContainer.appendChild(ProductImageMainContainer);
        }
        ProductContainer.appendChild(ProductNameContainer);
        ProductContainer.appendChild(ProductInformationContainer);

        return ProductContainer;

    }

    this.ShowSearchResultDiv = function() {
        document.getElementById('ajaxsearchresult_container').style.width = this.MaximaleSuchergebnisBreite + 'px';
        document.getElementById('ajaxsearchresult_container').style.display = 'block';
    }

    this.HideSearchResultDiv = function() {

        document.getElementById('ajaxsearchresult_container').style.display = 'none';

        SearchResultObject.ProductArray = null;
        SearchResultObject.ActHightlightContainerID = null;

//        document.getElementById('ajaxsearch_searchstring').value = '';

    }

    this.ShowMoreSearchResultDiv = function() {
        document.getElementById('ajaxsearchresult_searchmore').style.display = 'block';
        document.getElementById('ajaxsearchresult_searchmore_link').href = URLPFAD + 'themes/suche/index.php?suchekategorie=&sucheallgemein=' + this.SearchString;
    }

    this.HideMoreSearchResultDiv = function() {
        document.getElementById('ajaxsearchresult_searchmore').style.display = 'none';
    }

    this.ShowSearchHeadlineDiv = function() {
        document.getElementById('ajaxsearchresult_searchheadline').style.display = 'block';
    }

    this.HideSearchHeadlineDiv = function() {
        document.getElementById('ajaxsearchresult_searchheadline').style.display = 'none';
    }

    this.ShowNoSearchResultDiv = function() {
        document.getElementById('ajaxsearchresult_noresult').style.display = 'block';
    }

    this.HideNoSearchResultDiv = function() {
        document.getElementById('ajaxsearchresult_noresult').style.display = 'none';
    }

    this.ShowListContainerDiv = function() {
        document.getElementById('ajaxsearchresult_list_container').style.display = 'block';
    }

    this.HideListContainerDiv = function() {
        document.getElementById('ajaxsearchresult_list_container').style.display = 'none';
    }

}

function HighlightShowMore() {

	SearchResultObject.ActHightlightShowMore = true;
	document.getElementById('ajaxsearchresult_searchmore').className = 'ajaxsearchresult_searchmore ajaxsearchresult_searchmore_highlight';

}

function HighlightResetShowMore() {

    SearchResultObject.ActHightlightShowMore = false;
    document.getElementById('ajaxsearchresult_searchmore').className = 'ajaxsearchresult_searchmore';

}

function HighlightContainer(ArtikelID) {

    HighlightReset();
    HighlightResetShowMore();

    SearchResultObject.ActHightlightContainerID = ArtikelID;

    if (document.getElementById('ajaxsearchresult_productcontainer_' + SearchResultObject.ActHightlightContainerID)) {

        ProductContainerElement = document.getElementById('ajaxsearchresult_productcontainer_' + SearchResultObject.ActHightlightContainerID);
        ProductContainerElement.style.backgroundColor = '#FFDAAA';

        if (document.getElementById('ajaxsearchresult_productimage_trans_' + SearchResultObject.ActHightlightContainerID)) {
	        ImageElement = document.getElementById('ajaxsearchresult_productimage_trans_' + SearchResultObject.ActHightlightContainerID);
	        ImageElement.src = URLPFAD + 'images/trans.gif';
        }

        document.getElementById('focuscatcher').focus();
    
    }

}

function HighlightReset() {

    if ((SearchResultObject.ActHightlightContainerID) && (document.getElementById('ajaxsearchresult_productcontainer_' + SearchResultObject.ActHightlightContainerID))) {
    
        ProductContainerElement = document.getElementById('ajaxsearchresult_productcontainer_' + SearchResultObject.ActHightlightContainerID);
        ProductContainerElement.style.backgroundColor = '#FFFFFF';
        
        if (document.getElementById('ajaxsearchresult_productimage_trans_' + SearchResultObject.ActHightlightContainerID)) {
	        ImageElement = document.getElementById('ajaxsearchresult_productimage_trans_' + SearchResultObject.ActHightlightContainerID);
	        ImageElement.src = URLPFAD + 'images/alpha50.png';
        }

    }
    
}

function MoveHighlight(e) {
    
    if (!SearchResultObject.ProductArray) {
        return;
    }
    
    var KeyCode;
    
    if (window.event) KeyCode = window.event.keyCode;
    else if (e) KeyCode = e.which;

    var NewHighlightContainer;

    // Pfeiltaste nach unten
    if (KeyCode == 40) {

        if (!SearchResultObject.ActHightlightContainerID && !SearchResultObject.ActHightlightShowMore) {
            HighlightContainer(SearchResultObject.ProductArray[0]['artikel_id']);
        } else {
        
            for (var ArtikelCounter = 0; ArtikelCounter < (SearchResultObject.ProductArray.length - 1); ArtikelCounter++) {
            
                ProductElement = SearchResultObject.ProductArray[ArtikelCounter];
                
                if ((ProductElement['artikel_id'] == SearchResultObject.ActHightlightContainerID) &&
                    (ArtikelCounter < SearchResultObject.ProductArray.length)) {
                    
                    NewHighlightContainer = SearchResultObject.ProductArray[ArtikelCounter + 1]['artikel_id'];
                    
                }

            }
            
	        if (!NewHighlightContainer) {
	            HighlightReset();
	            HighlightShowMore();
                SearchResultObject.ActHightlightContainerID = 0;
	        }
            
        }
        
    // Pfeiltaste nach oben
    } else if (KeyCode == 38) {
        
        if (SearchResultObject.ActHightlightShowMore) {
            
            SearchResultObject.ActHightlightShowMore = false;
            document.getElementById('ajaxsearchresult_searchmore').className = 'ajaxsearchresult_searchmore';

            NewHighlightContainer = SearchResultObject.ProductArray[SearchResultObject.ProductArray.length - 1]['artikel_id'];

        } else {

	        for (var ArtikelCounter = 0; ArtikelCounter < SearchResultObject.ProductArray.length; ArtikelCounter++) {
	        
	            ProductElement = SearchResultObject.ProductArray[ArtikelCounter];
	            
	            if ((ProductElement['artikel_id'] == SearchResultObject.ActHightlightContainerID) &&
	                (ArtikelCounter != 0)) {
	                
	                NewHighlightContainer = SearchResultObject.ProductArray[ArtikelCounter - 1]['artikel_id'];
	                
	            }
	            
	        }
	        
        }

        if (!NewHighlightContainer) {
        	SearchResultObject.ActHightlightContainerID = 0
        	HighlightReset();
        	document.getElementById('ajaxsearch_searchstring').select();
            document.getElementById('ajaxsearch_searchstring').focus();
        }

    // Return
    } else if (KeyCode == 13) {

        if (SearchResultObject.ActHightlightContainerID) {
            document.location.href = URLPFAD + 'themes/kategorie/detail.php?artikelid=' +  SearchResultObject.ActHightlightContainerID + '&refertype=16';
        } 

        if (SearchResultObject.ActHightlightShowMore) {
            document.location.href = URLPFAD + 'themes/suche/index.php?suchekategorie=&sucheallgemein=' + SearchResultObject.SearchString;
        }

    } else {
        
        return;
        
    }
    
    if (NewHighlightContainer) {
        HighlightContainer(NewHighlightContainer);
    }

}

function CloseAjaxSearch(e) {

    if (!e) e = window.event;

    var obj = (e.target) ? e.target : e.srcElement ? e.srcElement : null;

    if ((obj.id != 'ajaxsearch_searchstring') && 
        (obj.id != 'ajaxsearchresult_searchheadline') && 
        (obj.id != 'ajaxsearchresult_list_container') && 
        (obj.id != 'ajaxsearchresult_searchmore')) {

        SearchResultObject.HideSearchResultDiv();

    }
            
}
    
