/*
 * Draeger Produkt Selector
 * created by Christian Beyer (e7)
 * 091001
 */

// LH URL (Proxy zum lokalen Testen)
var proxy=false;
var actHost=draeger.SEND_PATH;

// Servlet URLs von LH
var urlSector="";
var urlCategory="";
var urlProducts="";
var urlPaging="";

// URLS werden gesetzt
if (proxy){
  urlSector="../../Proxy?mimeType=text/plain&url="+actHost+"productSelector/getCategoryTypes.action";
  urlCategory="../../Proxy?mimeType=text/plain&url="+actHost+"productSelector/getCategories.action";
  urlProducts="../../Proxy?mimeType=text/plain&url="+actHost+"productSelector/getProducts.action";
  urlPaging="../../Proxy?mimeType=text/plain&url="+actHost+"productSelector/getProducts.action";
} else {
  urlSector=actHost+"productSelector/getCategoryTypes.action";
  urlCategory=actHost+"productSelector/getCategories.action";
  urlProducts=actHost+"productSelector/getProducts.action";
  urlPaging=actHost+"productSelector/getProducts.action";
}
// globale Variablen
var historyAction=false;
var ajaxHistoryCatsFinished= new Array(false,false,false,false);
var ajaxFinished=false;
// debug Stuff
var debugMode=false;
var debugStart;
var debugEnd;


// Parameter fÃ¼r die Anwendung (benÃ¶tigt fÃ¼r History und Ajax Calls)

var lastQuery='';
var selectHtml=new Array("","","","");
//var selectSelected=new Array("","","","");
var reqType="sector";

// Init Image GrÃ¶ÃŸen
var imgWidth='135';
var imgHeight='135';

// Horizonttexte
var horizonTexts = new Object();

/*
 *  Ajax Eventhandler (mit Requesturl und Callbackfunktion als Parameter)
 */
function ajaxEventHandler(url,params,callbackFunc,historyParam) {
    $.ajax({
           type: "GET",
           url: encodeURI(url+params),
           dataType: "json",
           timeout: 20000,
           error: function (XMLHttpRequest, textStatus, errorThrown) {noResult("The Webservice is temporarily not available.","Error","Error");hideOverlay();},
           success: function(data,textStatus){
                 if (textStatus!="error"){
                     if (historyParam==""){
                         callbackFunc(data);
                     } else {
                         callbackFunc(data,historyParam);
                     }
                }
           },
           complete: function (XMLHttpRequest, textStatus) { }
     });
}


/*
 * URL fÃ¼r Ajax Request wird anhand von Parametern gesetzt und zurÃ¼ckgegeben
 */
function getParams(qType){
    var params='';
    var tempCat=cat;
    var tempSector=sector;
    if (cat.substring(0,3)=="all"){
        tempCat=cat.substring(3,cat.length);
    }
    if (sector.substring(0,3)=="all"){
        tempSector=sector.substring(3,sector.length);
    }
    switch (qType) {
       case "sector"  :     params="?cat="+tempSector+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                            break;
       case "category":     params="?cat="+tempCat+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                            break;
       case "products":     params="?cat="+tempCat+"&page="+page+"&size="+size+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                            break;
       case "search"  :     params="?cat="+tempSector+"&query="+query+"&page="+page+"&size="+size+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                            lastQuery=query;
                            break;
    }
    return params;
}

/*
 * Spezial fÃ¼r History URL fÃ¼r Ajax Request wird anhand von Parametern gesetzt und zurÃ¼ckgegeben
 */
function getHistoryParams(histCat){
    if (histCat.substring(0,3)=="all"){
        histCat=histCat.substring(3,histCat.length);
    }
    return "?cat="+histCat+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
}

/*
 * Vorstufe vor dem Ajaxcall
 *
 * Per Parameter werden Aufrufe und Callbackfunktionen gesetzt
 */
function updateProductSelector(params){
    // Debug Function
    //startTime();
    // Overlay wird angezeigt
    showOverlay();
    //for history last Request Typ
    reqType=params;
    // Wenn Suchfeld befÃ¼llt, wird Suchwort eingelesen
    if (params=="search" || (params=="products" && $("#search input").attr("value")!="" && $("#search input").attr("value")!=draeger.LABEL_SEARCH_INPUT) ){
        params="search";
        query= $("#search input").attr("value");

        //neues Suchwort
        if ((query!=lastQuery)&& !historyAction ){
            page=1;
        }
    }else{
        $("#search input").val(draeger.LABEL_SEARCH_INPUT);
    }
    //set ajax ready vars
    ajaxHistoryCatsFinished[0]=true;
    ajaxHistoryCatsFinished[1]=true;
    ajaxHistoryCatsFinished[2]=true;
    ajaxHistoryCatsFinished[3]=true;
    ajaxFinished=true;
    // Parameter regelt den Aufruf
     switch (params) {
       case "sector"     :  ajaxFinished=false;
                            ajaxEventHandler(urlSector,getParams("sector"),updateSelector,"");
                            ajaxEventHandler(urlProducts,getParams("products"),updateProducts,"");
                            break;
       case "category"   :  ajaxFinished=false;
                            ajaxEventHandler(urlCategory,getParams("category"),updateCategory,"");
                            ajaxEventHandler(urlProducts,getParams("products"),updateProducts,"");
                            break;
       case "products"   :  ajaxEventHandler(urlProducts,getParams("products"),updateProducts,"");
                            break;
       case "search"     :  cat=sector;
                            ajaxEventHandler(urlProducts,getParams("search"),updateProducts,"");
                            ajaxEventHandler(urlSector,getParams("sector"),updateSelector,"");
                            //setStateSearchSelector();
                            break;
     }
    //"Selected" Options in Selects werden entfernt
    jQuery.each($(".cats select option"), function() {
        $(this).removeAttr("selected");
        });
}

/*
 * Selektoren werden in Initialisierungszustand gebracht
 */
function setStateSearchSelector(){
     // bei Suche werden die Dropdowns in den Ausgangszustand gebracht
      var delAct= $(".cat1");
      delAct.clone().insertBefore(delAct.parent());
      delAct.parent().remove();
      for (var i = 2; i <= 4; i++){
        //Dropdownfelder 2-4 werden geleert
        $("#cat"+i+" div").html('<div class="selectCat><select class="cat'+i+'" name="cat'+i+'"></select></div>');
      }
      $(".cat1").selectBox({css:'selectCat'});
      $("#cat1 .selectCat ul").click(function(){whichCat($(this));return false;});
      disableEmptySelectors();
}

/*
 *   Ausgabe bei Fehlern
 */
function noResult(message,type,queryWord){
    // Controls werden ausgeblendet
    $(".prodControls div").attr("style","display:none;");

    // Counter genullt
    $(".prodCounter").html("0");
    // Fehler ausgegeben
    if (queryWord==""){
        $(".prodList").html("<div class='noresult'><h2>"+type+"</h2><p class='txtext'>"+message+"</p></div>");
    } else {
        $(".prodList").html("<div class='noresult'><h2>"+queryWord+"</h2><p class='txtext'>"+message+"</p></div>");
    }
    // Historypunkt gesetzt, wenn Browser Back/Forwardbutton nicht gerade gedrÃ¼ckt wurde
    if (!historyAction){
        saveHistory();
    } else {
        historyAction=false;
    }
}

/*
 *  Error Handling
 */
function noErrorOccured(type,data){
     var noError=true;
     // Parameter regelt Fehlerbearbeitung
     switch (type) {
       case "sector"     : // Fehler bei Sektor
                           if ((data.Message && data.Message.Type =="Hint") || (data.Message && data.Message.Type =="Error")){
                                noResult(data.Message.Value,data.Message.Type,"");
                                noError=false;
                           }
                           break;
       case "category"   : // Fehler in Kategorie
                           if (data.Message && data.Message.Type =="Error"){
                                noResult(data.Message.Value,data.Message.Type,"");
                                noError=false;
                           }
                           // Bei Hint wird kein Fehler angezeigt
                           if (data.Message && data.Message.Type =="Hint"){
                                noError=false;
                           }
                           break;
       case "products"   : // Fehler bei Produkten
                           if ((data.Message && data.Message.Type =="Hint") || (data.Message && data.Message.Type =="Error")){
                                 // Suchmodus aktiv
                                 if (query!=""){
                                     noResult(data.Message.Value,data.Message.Type,lastQuery);
                                     searchTracking('false',lastQuery);
                                 } else {
                                     noResult(data.Message.Value,data.Message.Type,"");
                                 }
                                 noError=false;
                           } else {
                                if(query!=""){
                                    searchTracking('true',lastQuery);
                                }
                           }
                           break;
     }
      // Fehler aufgetreten?
      if (noError){
             $(".prodControls div").attr("style","display:block;");
      } else {
              hideOverlay();
      }
      return noError;
}


/*
 * Sector aktiviert, samt Kategoriedropdowns werden befÃ¼llt (bei Click auf Sector)
 */
function updateSelector(jsonObj){
   // JSON Error Check
   if (noErrorOccured("sector",jsonObj)){
       // aktiver Sector gehighlightet
       $(".sector a").removeClass("active");
       $("#"+sector).addClass("active");
       // alte Dropdownfelder werden gelÃ¶scht
       $(".selectCat").remove();
      //console.log(jsonObj);
       for (var i=1;i<=4;i++){
          if (i==1){
             // $("#cat"+i).css({"background-color":"green"});
            // TODO: Insert Tracking Code fÃ¼r "Alle Prdodukte dieser Kategorie..." ->
            $("#cat"+i+" div").html("<select class='cat"+i+"' name='cat"+i+"'><option id='all"+sector+"' rel='"+draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()+"'>"+draeger.LABEL_ALL_PRODUCTSOPTION+"</option></select>");
            var actDrop= $(".cat"+i);
            $.each(jsonObj.CategoryTypes[0].values, function(j,value){
                var trackCode;
                if(value.interName){
                    trackCode = value.interName;
                }else{
                    trackCode = 'no_tracking_code_available';
                }
                actDrop.append("<option id='"+value.catId+"' rel='"+trackCode+"'>"+value.name+"</option>"); // rel-Attribut enthaelt internationalen Trackingnamen
            });
            if(jsonObj.name && jsonObj.shortDesc){
                updateHorizon(jsonObj.name, jsonObj.shortDesc);
            }
            actDrop.selectBox({css:'selectCat'});
            // Event gesetzt
            actDrop.nextAll("ul").click(function(){
                $('#cat1 option:first').attr('rel', draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()).text(draeger.LABEL_ALL_PRODUCTSOPTION);
                $('#cat1 ul li:first').text(draeger.LABEL_ALL_PRODUCTSOPTION);
                whichCat($(this));
                return false;
            });
            // Namen und Beschreibung im Horizont anzeigen
            if(jsonObj.CategoryTypes[0].name && jsonObj.CategoryTypes[0].shortDesc){
                updateHorizon(jsonObj.CategoryTypes[0].name, jsonObj.CategoryTypes[0].shortDesc);
            }else{
                // Horizont leeren
                updateHorizon('', '');
            }
          } else {

            $("#cat"+i+" div").html("<div class='selectCat'><select class='cat"+i+"' name='cat"+i+"'><option>empty</option></select></div>");
           // $("#cat"+i).css({"color":"red"});
          }
       }

      disableEmptySelectors();
      page="1";
    }
    // set ajax ready var
    ajaxFinished=true;
}

/*
 * Kategoriedropdowns werden befÃ¼llt (bei Click auf Kategorie)
 *
 */
function updateCategory(jsonObj){

       var actCatClass= $("#"+cat).parent().attr("class");
       var actNumber=parseInt(actCatClass.substr(3,1))+1;
       var nextCatClass= "cat"+(actNumber);

       // Wenn nicht das letzte Dropdown geklickt wird
       if (nextCatClass!="cat5"){
          // werden alle folgenden Dropdowns leer gemacht und erneut initialisiert
          for (var i = actNumber; i <= 4; i++){
            $("#cat"+i+" div").html("<div class='selectCat'><select class='cat"+i+"' name='cat"+i+"'><option rel='test'></option></select></div>");
          }
          // JSON Error Check
          if (noErrorOccured("category",jsonObj)){
              //Aktuelles Select wird mit den Daten aus dem JSON Objekt befÃ¼llt
              //$("#cat"+actNumber+" div").html("<select class='cat"+actNumber+"' name='cat"+actNumber+"'><option id='all"+cat+"' rel='"+draeger.LABEL_TRACK_REFINE_SELECTION.toLowerCase()+"'>"+draeger.LABEL_REFINE_SELECTION+"</option></select>");
              $("#cat"+actNumber+" div").html("<select class='cat"+actNumber+"' name='cat"+actNumber+"'><option id='all"+cat+"' rel='"+draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()+"'>"+draeger.LABEL_ALL_PRODUCTSOPTION+"</option></select>");
              var nextCat= $("."+nextCatClass);
              $.each(jsonObj.Categories, function(i,cat){
                    var trackCode;
                    if(cat.interName){
                        trackCode = cat.interName;
                    }else{
                        trackCode = 'no_tracking_code_available';
                    }
                    nextCat.append("<option id='"+cat.catId+"' rel='"+trackCode+"'>"+cat.name+"</option>"); // rel-Attribut enthaelt internationalen Trackingnamen

            });

          }
          // Kategorienamen und Beschreibung anzeigen
          if(jsonObj.name && jsonObj.shortDesc){
                updateHorizon(jsonObj.name, jsonObj.shortDesc);
          }else{
                // Horizont leer
                updateHorizon('', '');
          }
          //leere Dropdowns disablen
          disableEmptySelectors();
           // JSON Error Check

          if (noErrorOccured("category",jsonObj)){
              // aktuelles Select wieder initialisiert
              nextCat.selectBox({css:'selectCat'});
              // Event gesetzt
              nextCat.nextAll("ul").click(function(){
                  $('#cat'+actNumber+' option:first').attr('rel', draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()).text(draeger.LABEL_ALL_PRODUCTSOPTION);
                  $('#cat'+actNumber+' ul li:first').text(draeger.LABEL_ALL_PRODUCTSOPTION);
                  whichCat($(this));
                  return false;
              }
          );
          }
          // Globale Parameter mit Werten belegt
          page="1";
       }
  // set ajax ready var
  ajaxFinished=true;
}

/*
 * Kategoriedropdown wird bei History Back/Forward einzeln befÃ¼llt
 */
function historyCat(jsonObj,selectNumber){
  var i=selectNumber;
  // JSON Error Check
  if (noErrorOccured("category",jsonObj)){
          if (i==1){
              $("#cat"+i+" div").html("<select class='cat"+i+"' name='cat"+i+"'><option id='all"+sector+"' rel='"+draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()+"'>"+draeger.LABEL_ALL_PRODUCTSOPTION+"</option></select>"); // rel-Attribut enthaelt internationalen Trackingnamen
          } else {
              if(selectSelected[i-1]== ""){
                $("#cat"+i+" div").html("<select class='cat"+i+"' name='cat"+i+"'><option id='all"+selectSelected[i-2]+"' rel='"+draeger.LABEL_TRACK_REFINE_SELECTION.toLowerCase()+"'>"+draeger.LABEL_REFINE_SELECTION+"</option></select>"); // rel-Attribut enthaelt internationalen Trackingnamen
              }else{
                $("#cat"+i+" div").html("<select class='cat"+i+"' name='cat"+i+"'><option id='all"+selectSelected[i-2]+"' rel='"+draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()+"'>"+draeger.LABEL_ALL_PRODUCTSOPTION+"</option></select>"); // rel-Attribut enthaelt internationalen Trackingnamen
              }
          }
          $("#cat"+i).removeAttr("style");
          var actCat= $(".cat"+i);
          $.each(jsonObj.Categories, function(j,value){
            // Existiert internat. Tracking-Code?
            var trackCode;
            if(cat.interName){
                trackCode = cat.interName;
            }else{
                trackCode = 'no_tracking_code_available';
            }
            //selected option wird gesetzt
            if (selectSelected[i-1]==value.catId){
                    actCat.append("<option selected='selected' id='"+value.catId+"' rel='"+trackCode+"'>"+value.name+"</option>"); // rel-Attribut enthaelt internationalen Trackingnamen
            } else {
                    actCat.append("<option id='"+value.catId+"' rel='"+trackCode+"'>"+value.name+"</option>"); // rel-Attribut enthaelt internationalen Trackingnamen
            }
           });
          // aktuelles Select wieder initialisiert
          actCat.selectBox({css:'selectCat'});
          // Event gesetzt
          actCat.nextAll("ul").click(function(){

              $('#cat'+i+' option:first').attr('rel', draeger.LABEL_TRACK_ALL_PRODUCTSOPTION.toLowerCase()).text(draeger.LABEL_ALL_PRODUCTSOPTION);
              $('#cat'+i+' ul li:first').text(draeger.LABEL_ALL_PRODUCTSOPTION);
              whichCat($(this));
              return false;});
  } else {
      $("#cat"+i+" div").html("<div class='selectCat'><select class='cat"+i+"' name='"+i+"'><option></option></select></div>");
      $("#cat"+i).css({position:"absolute",left:"-1000px",top:"-1000px"});
  }
  // Kategorienamen und Beschreibung anzeigen
  if(jsonObj.name && jsonObj.shortDesc){
        updateHorizon(jsonObj.name, jsonObj.shortDesc);
  }else{
        // Horizont leer
        updateHorizon('', '');
  }
  // set ajax ready var
  ajaxHistoryCatsFinished[i-1]=true;
}



/*
 * Pagingmechanismus fÃ¼r die Seitenauswahl
 */
function pageControl(){
   $(".pageControl .disabled").removeClass("disabled");
   // aktuelle Seitenzahl wird ausgelesen
   page=parseInt(page);
   pageCounter=parseInt(pageCounter);
   // HTML Seitenzahlen werden aktualisiert
   $(".minus2Page").html(page-2);
   $(".minus1Page").html(page-1);
   $(".actPage").html(page);
   $(".plus1Page").html(page+1);
   $(".plus2Page").html(page+2);
   // Wenn man sich auf der letzten Seite befindet, werden Forwardbutton, nÃ¤chste Seite usw. disabled
   if (page==pageCounter){
       $(".plus1Page").addClass('disabled');
       $(".plus2Page").addClass('disabled');
       $(".plus1Page").html('');
       $(".plus2Page").html('');
       $(".lastPage").addClass('disabled');
       $(".nextPage").addClass('disabled');
   }
    // Wenn man sich auf der vorletzten Seite befindet,...
   if (page+1==pageCounter){
       $(".plus2Page").addClass('disabled');
       $(".plus2Page").html('');
   }
   // Wenn man sich auf Seite 1 befindet,...
   if (page==1){
       $(".firstPage").addClass('disabled');
       $(".prevPage").addClass('disabled');
       $(".minus2Page").addClass('disabled');
       $(".minus2Page").html('');
       $(".minus1Page").addClass('disabled');
       $(".minus1Page").html('');
   }
   // Wenn man sich auf Seite 2 befindet,...
   if (page==2){
       $(".minus2Page").addClass('disabled');
       $(".minus2Page").html('');
   }
}

/*
 * Aktuelle Bildpfade und GrÃ¶ÃŸen fÃ¼r aktive Produktansicht zurÃ¼ckgeben
 */
function sizeImages(status){
    //LH Pfad zu Bildern
    var imgSrc=draeger.DOCROOT;
    // ImagegrÃ¶ÃŸen fÃ¼r Resultviews gesetzt
    // Unterordner mit verschiedenen BildgrÃ¶ÃŸen entsprechen jetzt den Klassennamen
    imgSrc+="/media/productSelector/"+prodViewClass+"/";
    switch (prodViewClass) {
       case "m-resultview3": imgWidth='146';
                             imgHeight='126';
                             break;
       case "m-resultview2": imgWidth='333';
                             imgHeight='287';
                             break;
       case "m-resultview1": imgWidth='158';
                             imgHeight='136';
                             break;
    }
    // Wenn HTML der Produkte nicht neugeneriert wird (also Klick auf Ansichtswechel), mÃ¼ssen die aktuell angezeigten Produkte geparst werden,
    // um Imagepfad auszutauschen
    if (status == "updateImages"){
        jQuery.each($(".products img"),function(){
               $(this).attr("width",imgWidth);
               $(this).attr("height",imgHeight);
               var img= $(this).attr("src").split("/");
               $(this).attr("src",imgSrc+img[img.length-1]);
            });
            imgSrc="";
    }
    return imgSrc;
}

/*
 * Gelieferte Produkte vom Ajax Request werden ausgegeben
 */
function updateProducts(jsonObj){

 // JSON Error Check
  if (noErrorOccured("products",jsonObj)){
       // Produktliste wird geleert
       $(".prodList").html("");
       // zu benutzender Bildpfad wird ermittelt
       var imgSrc=sizeImages("newImage");
       // Html fÃ¼r die einzelnen Produkte(aus JSON) wird erstellt und an die Produktliste angehÃ¤ngt
       $.each(jsonObj.Products, function(i,prods){
           // Produkt mit Daten aus JSON versehen z.B. ID, Description, Teaser, Imagepfad, Size, Anzeigeklasse...
           var actProd="<div id='"+prods.prodId+"' class='products clearfix "+prodViewClass+"'>\n\
                      <a class='img' href='"+prods.detailUrl+"' title='"+prods.title+"'>\n\
                        <img width='"+imgWidth+"' height='"+imgHeight+"' src='"+imgSrc+prods.image+"' alt='"+prods.title+"' />\n\
                      </a>\n\
                      <div class='clearfix'>\n\
                        <h3><a href='"+prods.detailUrl+"' title='"+prods.title+"'>"+prods.title+"</a></h3>\n\
                        <p class='txusp'>"+prods.reasonWhy+"</p>\n\
                        <p class='shorttxusp'>"+resizeShortCopy(prods.reasonWhy, 55)+"</p>";
           // Test ob Features vorhanden, ansonsten Alternativbeschreibung
           if (prods.presentationType=="STD"){
                actProd+="<ul><li>"+prods.feature1Headline+"</li>\n\
                            <li>"+prods.feature2Headline+"</li>\n\
                            <li>"+prods.feature3Headline+"</li>\n\
                          </ul>";
           } else {
               actProd+="<p class='txtext'>"+resizeShortCopy(prods.shortDescription, 245)+"</p>";
           }
           // clipboard soll raus 14.9.09
           //actProd+="<a class='addClipboard clipboard' href='url?name="+prods.title+"&id="+prods.prodId+"&image="+prods.image+"'><span>"+draeger.LABEL_ADD_TO_CLIPBOARD+"</span><br/></a></div></div>";
           //Produkt an Liste angehÃ¤ngt
           $(".prodList").append(actProd);
       });


       // TODO: Einkommentieren, wenn TextkÃ¼rzung von LSY implementiert
       // USP-Copy-LÃ¤nge festlegen
       //resizeShortCopy(prodViewClass);

       // Event fÃ¼r "Clipboard HinzufÃ¼gen" setzen -> Toolbox.js 14.9.09
       //$("a.addClipboard").click(function(){addClipboard($(this));this.blur();return false;});
       // Produkt Mouse Hover for IE6
       if ($.browser.msie && parseInt($.browser.version) < 7) {
          $('.products').hover(function(){$(this).addClass('products-over')},function(){$(this).removeClass('products-over')});
          //14.9.09 $('.clipboard').hover(function(){$(this).addClass('clipboard-over')},function(){$(this).removeClass('clipboard-over')});
       }

       //Hier wird ProdcktBoxen klikbar sein und verlinkt
       linkProductboxes();

       //Produktanzahl aus JSON Objekt Ã¼bernommen
       prodCounter=jsonObj.ProductsTotal;
       //Produktanzahl ins HTML geschrieben
       $(".prodCounter").html(prodCounter);
       // Anzahl Produktseiten ermittelt
       pageCounter=Math.ceil((parseInt(prodCounter)/parseInt(size)));

       // Anzeige gehighlightet fÃ¼r derzeit angeklickte Auswahl
       $(".prodSize a").removeClass("active");
       $(".prodSize"+size).addClass("active");
       // Pagecontrol aktualisieren
       pageControl();

       // wait finishing all Ajax Events to go further
       var time=0;
       var ajaxInterval=window.setInterval(function(){
             if (ajaxFinished&&ajaxHistoryCatsFinished[0]&&ajaxHistoryCatsFinished[1]&&ajaxHistoryCatsFinished[2]&&ajaxHistoryCatsFinished[3]){
                   // Historypunkt gesetzt, wenn Browser Back/Forwardbutton nicht gerade gedrÃ¼ckt wurde
                   if (!historyAction){
                        saveHistory();
                   } else {
                        historyAction=false;
                   }
                   // Ajax Overlay verstecken
                   hideOverlay();
                   window.clearInterval(ajaxInterval);
             }
             time+=100;
             //timeout 30 sec
             if (time>=20000){
                    window.clearInterval(ajaxInterval);
             }
         }, 100);
  }
}

/*
 *  "Ajax" Overlay wird angezeigt
 */

function showOverlay(){
  var height=$("#contentContainer").innerHeight();
  $("#wait").children().css({ display:"block"});
  $("#wait").css({ opacity: "0.5",left:"0px",height:height});
}

/*
 *  "Ajax" Overlay wird wieder versteckt
 */

function hideOverlay(){
    $("#wait").css({ left:"-2000px",height:"1px"});
    $("#wait").children().css({ display:"none"});
}

/*
 * Leere "Dropdowns" werden disabled
 *
 */
function disableEmptySelectors(){
      //disabled alle nicht befÃ¼llten Dropdowns
      for (var i = 1; i <= 4; i++){
        var actCat=$(".cat"+i);
        if (actCat.children("option").length>1){
          $("#cat"+i).removeAttr("style");
        } else {
           $("#cat"+i).css({position:"absolute",left:"-1000px",top:"-1000px"});
        }
      }
}

/*
 * Selektoren werden per Javascript initialisert und mit Events versehen
 */
function initSelectors(){
    $(".cat1").selectBox({css:'selectCat'});
    $(".cat2").selectBox({css:'selectCat'});
    $(".cat3").selectBox({css:'selectCat'});
    $(".cat4").selectBox({css:'selectCat'});
    $(".selectCat ul").click(function(){whichCat($(this));return false;});
    //leere Dropdowns disablen
    disableEmptySelectors();
}


/*
 * Inhalte der Dropdowns werden gespeichert und ins Historyobjekt eingetragen
 */
function saveHistory(){
      selectSelected[0]="";selectSelected[1]="";selectSelected[2]="";selectSelected[3]="";
      jQuery.each($(".selectCat").children("div").children("p"),function(index){
               if ($(this).attr("class").substring(0,3)!="all"){
                    selectSelected[index]=$(this).attr("class");
               }
      });
      // Historyobjekt mit aktuellen Parametern befÃ¼llt
      addHistoryEvent();
}

/*
 * Event Handler fÃ¼r die Historyfunktion
 */
addHistoryEvent = function() {
        // JSON Objekt zuordbar mittels Millisekunden seit 1970 an URL
        var time = new Date();
        var hKey="e"+time.getTime();
        // aktuelle Parameter werden als JSON Objekt im Historyobjekt gespeichert
        var jsonobj={"reqType":reqType,"sector":sector,"cat":cat,"query":query,"page":page,"size":size,"viewType":prodViewClass,"selectSelected":[selectSelected[0],selectSelected[1],selectSelected[2],selectSelected[3]]};
        dhtmlHistory.add(hKey,jsonobj);
}

/*
 * Callback fÃ¼r Browser Back/Forward
 *
 * Produktfinder wird wieder mit dem vorherigen Zustand befÃ¼llt
 *
 */
function historyChange(newLocation, historyData) {
      // Wenn Historyobjekt befÃ¼llt...
      if (historyData){
           // Historyvariable auf true, damit beim Update kein erneuter Historypunkt im Browser gesetzt wird
          historyAction=true;
          //JSON Objekt wird ausgelesen und Parameter befÃ¼llt
          sector=historyData.sector;
          cat=historyData.cat;
          query=historyData.query;
          page=historyData.page;
          size=historyData.size;
          selectSelected[0]=historyData.selectSelected[0];
          selectSelected[1]=historyData.selectSelected[1];
          selectSelected[2]=historyData.selectSelected[2];
          selectSelected[3]=historyData.selectSelected[3];
          prodViewClass=historyData.viewType;
          // Klasse "active" wird an den aktuellen View Button gehÃ¤ngt
          $(".views a").removeClass("active");
          var buttonClass="";
          switch (prodViewClass) {
             case "m-resultview1" : buttonClass="prodView1_button";
                             break;
             case "m-resultview2" : buttonClass="prodView2_button";
                             break;
             case "m-resultview3" : buttonClass="prodView3_button";
                             break;
         }
         $("."+buttonClass).addClass("active");
         // Alle Produkte durchlaufen und Klasse ausgetauscht
         jQuery.each($(".prodList").children(),function(){
            $(this).attr('class','products clearfix '+prodViewClass);
         });
         // Image GrÃ¶ÃŸen werden aktualisiert
         sizeImages("updateImages");
         //aktueller Sektor wird aktiviert
         updateActiveSector($("#"+sector));
         // Wenn es sich um eine Suche handelt, wird der Suchbegriff wieder ins Suchfeld eingetragen
         if (query!=""){
              $("#search input").attr("value",query);
         } else {
              $("#search input").attr("value",draeger.LABEL_SEARCH_INPUT);
         }
         // history cats werden wieder gesetzt, ready array setzen
         for (var k=0;k<4;k++){
               //init with first sector
               if (k==0){
                   ajaxHistoryCatsFinished[0]=false;
                   ajaxEventHandler(urlCategory,getHistoryParams(sector),historyCat,1);
                } else {
                   if (selectSelected[k-1]!=""){
                          ajaxHistoryCatsFinished[k]=false;
                          ajaxEventHandler(urlCategory,getHistoryParams(selectSelected[k-1]),historyCat,k+1);
                   } else {
                          ajaxHistoryCatsFinished[k]=true;
                          $("#cat"+(k+1)+" div").html("<div class='selectCat'><select class='cat"+(k+1)+"' name='"+(k+1)+"'><option></option></select></div>");
                          $("#cat"+(k+1)).css({position:"absolute",left:"-1000px",top:"-1000px"});
                   }
               }

         }

         //aktueller Sektor wird aktiviert
         if(sector !== $('.sector a.active').attr('id')){
             var sectorChanged = true;
             for (var d=0;d<4;d++){
                 /* wenn min. eine Kategorie ausgewÃ¤hlt war,
                  * kann der Sektor nicht gewechselt worden sein*/
                 if(selectSelected[d] != ''){
                     sectorChanged = false;
                 }
             }
             if(sectorChanged == true){
                 updateProductSelector("sector");
             }
         }
         updateActiveSector($("#"+sector));

         // Aktuelle Productdaten holen (Ajax Request)
         updateProductSelector("products");

        }
 }


/*
 * Aktueller Sektor wird aktiviert
 */
function updateActiveSector(elem){
    $(".sector a").removeClass("active");
    elem.addClass("active");
}


/*
 * Text im Header austauschen
 */
function updateHorizon(headline, copy, catDiv){
	if(copy != ""){
		$('.stage').html('<h1 class="hlproduct">'+headline+'</h1><p class="txusp">'+copy+'</p>');
		// Horizonttexte der ausgewÃ¤hlten Kategorien speichern
		horizonTexts[catDiv] = '<h1 class="hlproduct">'+headline+'</h1><p class="txusp">'+copy+'</p>';
	}else{
		$('.stage').html('<img src="/static/img/application_stage_image.jpg" alt=""/>')
	}
}

/*
 * Callback bei Klick auf Sektor
 */
function whichSector(elem){

    // Suchfeld wird geleert bei Selektorclick
    $("#search input").attr("value","");
    query="";
    page=1;
    // Id wird ausgelesen
    sector=elem.attr("id");
    cat=elem.attr("id");
    // Produktselektor wird aktualisiert (Ajax)
    updateProductSelector("sector");
    // Tracking
    clickTracking(elem, 'sector');
}

/*
 * Callback bei Klick auf Kategorie Dropdown
 */
function whichCat(elem){
    // Suchfeld wird geleert bei Selektorclick
    $("#search input").attr("value","");
    query="";
    page=1;
    // gewÃ¼nschte ID der Kategorie wird ermittelt
    var actCat= elem.parent().prev("div").children("p").attr("class");

    var actSelect=elem.parent().prevAll("select");
    /* var actCat= elem.prev("div").children("p").attr("class");

    var actSelect=elem.prevAll("select");*/

    jQuery.each(actSelect.children("option"),function(){
           if ($(this).attr("id")==actCat){
               cat=$(this).attr("id");
           }
    });
    if (cat.substring(0,3)=="all"){
        var nextCatNumber=parseInt(actSelect.attr("class").substring(3,4))+1;
        for (var i = nextCatNumber; i <= 4; i++){
             $("#cat"+i+" div").html('<div class="selectCat"><select class="cat'+i+'" name="cat'+i+'"></select></div>');
        }

        disableEmptySelectors();
        updateProductSelector("products");
        // Horizonttext der Ã¼bergeordneten Kategorie anzeigen
        $('.stage').html(horizonTexts['cat'+parseInt(nextCatNumber-1)]);

    } else {

        // Produktselektor wird aktualisiert (Ajax)
        if (!actSelect.hasClass("cat4")){
            updateProductSelector("category");
        } else {
            updateProductSelector("products");
        }
    }
    // Tracking
    clickTracking(cat, 'category');
}


/*
 * Callback fÃ¼r Klick auf Anzahl angezeigter Produkte
 */
function whichSize(elem){
    // aktuelle Anzahl ermittelt und gesetzt
    size=elem.html();

    //zurÃ¼ck zu Seite 1
    page="1";
    // Produktselektor wird aktualisiert (Ajax)
    updateProductSelector('products');
}


/*
 * Callback fÃ¼r Ansichtsbuttons
 *
 * Produktkartenansicht wird verÃ¤ndert
 *
 */
function whichView(elem){
    reqType="view";
    $(".views a").removeClass("active");
    // hier war neues mapping erforderlich
    switch (elem.attr("class")) {
       case "prodView1_button" : prodViewClass="m-resultview1";
                                 break;
       case "prodView2_button" : prodViewClass="m-resultview2";
                                 break;
       case "prodView3_button" : prodViewClass="m-resultview3";
                                 break;
    }
    // Produkte geparst und neue Klasse gesetzt
    $("."+elem.attr("class")).addClass("active");
    jQuery.each($(".prodList").children(),function(i){
        $(this).attr('class','products clearfix '+prodViewClass);
    });
    // Imagepfade erneuert
    sizeImages("updateImages");
    // Aktion zum Historyobjekt hinzugefÃ¼gt
    saveHistory();
}

function resizeShortCopy(copyText,length){
    // max. 40 Zeichen
    var shortenedCopyString = copyText.substring(0, length);
    var formattedCopyString = shortenedCopyString.substring(0, shortenedCopyString.lastIndexOf(' '));
    formattedCopyString = formattedCopyString+'...';
    return formattedCopyString;
}

/*
 * Callback fÃ¼r Pagingbuttons
 */
function whichControl(elem){
  if (!elem.hasClass("disabled")){
      var pageType=elem.attr("class");
      page=parseInt(page);
      // Je nach Auswahl wird Page neugesetzt
      switch (pageType) {
       case "firstPage" : page=1;
                          break;
       case "prevPage"  : page=page-1;
                          break;
       case "minus2Page": page=page-2;
                          break;
       case "minus1Page": page=page-1;
                          break;
       case "plus1Page" : page=page+1;
                          break;
       case "plus2Page" : page=page+2;
                          break;
       case "nextPage"  : page=page+1;
                          break;
       case "lastPage"  : page=pageCounter;
                         break;
    }

    // Produktselektor wird aktualisiert (Ajax)
    updateProductSelector('products');
  }
}



/*
 * Debug Functions for LH
 */
// Startzeitpunkt ermittelt
function startTime(){
 //debugStart = new Date();
}
// Dauer in Millisekunden wird ausgegeben
function getTime(){
 // debugEnd = new Date();
 //if (debugMode)
 //    alert(debugEnd.getTime()-debugStart.getTime()+"ms");
}

/*
 *   Ausgabe bei keinen gefundenen Produkten
 */
function noResult(message,type,headline){
    // Controls werden ausgeblendet
    $(".prodControls div").attr("style","display:none;");
    // Counter genullt
    $(".prodCounter").html("0");
    // Errortext ausgegeben
    if (type=="Error"){
        $(".prodList").html("<div class='noresult'><h2>"+type+"</h2><p class='txtext'>"+message+"</p></div>");
    } else {
        $(".prodList").html("<div class='noresult'><h2>"+headline+"</h2><p class='txtext'>"+message+"</p></div>");
    }
    // Historypunkt gesetzt, wenn Browser Back/Forwardbutton nicht gerade gedrÃ¼ckt wurde
    if (!historyAction){
        saveHistory();
    } else {
        historyAction=false;
    }
}

//Effect for clickable DIVS
function linkProductboxes() {

    $(".products").mouseover(function(){
      $(this).css("cursor","pointer");
    }).mouseout(function(){
      $(this).css("cursor", "default");
    });

    $('.products').click(function() {
        window.location = $(this).children('a').attr('href')
    });
}

/*
 *   Init Application Produkt Finder
 */
$().ready(function() {
        $(".cats").removeClass("jsdisplay");
        draeger.PRODUCTSELECTOR_ACTIVE=true;
        // Debugmodus, aktiviert wenn Parameter ?debug an URL gehÃ¤ngt
        // Kategorieselektor wird initialisiert
        initSelectors();
        // Events an Links gehÃ¤ngt
        // Sektorenwahl (Produktkategorie,Branche,Anwendungen...)
        $(".sector a").click(function(){whichSector($(this));this.blur();return false;});
        // Bestimmung Anzahl gezeigter Produkte
        $(".prodSize a").click(function(){whichSize($(this));return false;});
        // Auswahl Produktansicht
        $(".views a").click(function(){whichView($(this));return false;});
        // Pagingmechanismus
        $(".pageControl a").click(function(){whichControl($(this));return false;});
        // Suchfeld (Mausklick und Enter)
        $("#search a").click(function(){
            if($("#search input.txt").attr('value') !== "" && $("#search input.txt").attr('value') !== draeger.LABEL_SEARCH_INPUT){
                updateProductSelector('search');
            }
            return false;
        });
        $("#search input").keydown(function(event){
            if(event.keyCode=="13"){
                if($("#search input.txt").attr('value') !== "" && $("#search input.txt").attr('value') !== draeger.LABEL_SEARCH_INPUT){
                    updateProductSelector('search');
                }
                return false;
            }
            return true;
        });

        if($("#search input.txt").attr('value') == ""){
            $("#search input.txt").val(draeger.LABEL_SEARCH_INPUT);
        }

        $("#search input.txt").focus(function(){
            if($("#search input.txt").attr('value') == draeger.LABEL_SEARCH_INPUT){
                $(this).val('');
            }
        });

        $("#search input.txt").blur(function(){
            if($("#search input.txt").attr('value') == ''){
                $(this).val(draeger.LABEL_SEARCH_INPUT);
            }

        });
       // Initialisierung der History Funktion
       dhtmlHistory.initialize();
       //Subscribe Listener fÃ¼r Browser Back/Forward
       dhtmlHistory.addListener(historyChange);

        //Subscribe Listener fÃ¼r Browser Back/Forward beim ersten Aufruf
       if (location.href.match("#e")==null){
           // erster Historypunkt wird gesetzt (unter UmstÃ¤nden nicht nÃ¶tig)
           saveHistory();
        }

        //Ausfaden des Sichtschutzes vor dem Selektor
        $(".blocker").fadeOut(1000);

        linkProductboxes();

});
/*
 * Tracking-Variablen befÃ¼llen und abschicken
 * success = true/false -> Suche war erfolgreich oder nicht
 * lastQuery = Suchbegriff
 */
function searchTracking(success,lastQuery) {

    var searchTerm = lastQuery.toLowerCase();


    if(success == 'false') { /* Suche nicht erfolgreich */
        s.prop1 = "";
        s.prop2 = searchTerm;
        s.prop3 = searchTerm;
        s.prop9 = 'selector search';
        s.prop13 = productSizeTracking();
        s.eVar2 = '';
        s.eVar3 = searchTerm; // = s.prop2
        s.eVars12 = 'selector search'; // = s.prop9
    } else { /* Suche erfolgreich */
        s.prop1 = searchTerm;
        s.prop2 = "";
        s.prop3 = searchTerm;
        s.prop9 = 'selector search';
        s.prop13 = productSizeTracking();
        s.eVar2 = searchTerm; // = s.prop1
        s.eVar3 = '';
        s.eVar12 = 'selector search'; // = s.prop9
    }


    s.linkTrackVars = 'prop1,prop2,prop3,prop9,prop13,eVar2,eVar3,eVar12';
    // true -> Standard wÃ¤re "this", was dem href eines Links entsprechen wÃ¼rde. Gibt es kein href, wÃ¤re this=null.
    // 'o' -> normaler Link wird getrackt (kein Download- oder Exit-Link)
    s.tl(true,'o','product selector');
}
/*
 * Tracking-Variablen befÃ¼llen und abschicken
 * element = HTML-Object oder Element-ID
 * type = "category", "sector", "search"
 */
function clickTracking(element, type){
    //var s=s_gi('your_report_suite_here');
    var trackView
    if(type == "category") {
        var trackPath = buildTrackPath(element);
        trackView = productSizeTracking();

        s.prop1 = trackPath.toLowerCase();
        s.prop2 = "";
        s.prop3 = trackPath.toLowerCase();
        s.prop9 = $('.sector .active').attr('rel').toLowerCase();
        s.prop13 = trackView;
        s.eVar2 = trackPath.toLowerCase(); // = s.prop1
        s.eVar3 = ''; // = s.prop2 Unsuccessful Search
        s.eVars12 = $('.sector .active').attr('rel').toLowerCase(); // = s.prop9

       
    }else if (type == "sector") {
        var elemId = element.attr('id');
        var sectorName = $('#'+elemId).attr('rel');
        trackView = productSizeTracking();


        s.prop1 = sectorName.toLowerCase();
        s.prop2 = "";
        s.prop3 = sectorName.toLowerCase();
        s.prop9 = sectorName.toLowerCase();
        s.prop13 = trackView;
        s.eVar2 = sectorName; // = s.prop1
        s.eVar3 = ''; // = s.prop2 Unsuccessful Search
        s.eVars12 = sectorName.toLowerCase(); // = s.prop9
    }
    s.linkTrackVars = 'prop1,prop2,prop3,prop9,prop13,eVar2,eVar3,eVar12';
    // true -> Standard wÃ¤re "this", was dem href eines Links entsprechen wÃ¼rde. Gibt es kein href, wÃ¤re this=null.
    // 'o' -> normaler Link wird getrackt (kein Download- oder Exit-Link)
    s.tl(true,'o', 'product selector');
}

function productSizeTracking(){
    var viewName;
    var viewSize;
    if($('.prodSize .active').html() !== null){
        viewSize = $('.prodSize .active').html();
    } else {
        viewSize = 10;
    }
    //console.log($('.prodSize .active').html());
    var classesArray = $('.views .active').attr('class').split(' ');
       jQuery.each(classesArray, function(index, term){
           switch (term) {
           case "prodView1_button" : viewName="one column";
                break;
           case "prodView2_button" : viewName="two columns";
                break;
           case "prodView3_button" : viewName="four columns";
                break;
            }
    });


   var trackString = viewSize + ':' + viewName;

   return trackString;
}

/*

 * "Pfad" fÃ¼rs Tracking zusammensetzen
 * elemId = Kategorie-ID
 */
function buildTrackPath(elemId){
    // Alle Category-Dropdown-Container holen
    var parentElems =  $('.cats').children();
    var categoryTitles = new Array();
    $(parentElems).each(function(i){

        // Dropdown-Container mit Kategorie-ID als Class finden
        if($(parentElems[i]).find('.'+elemId).length != 0){

            // vorherige Dropdown-Container finden und ihre Inhalte ins Array
            var prevCatElems = $(parentElems[i]).prevAll('div');

            $(prevCatElems).each(function(j){
                //categoryTitles.unshift($(prevCatElems[j]).find('p').html());
                categoryTitles.unshift($(prevCatElems[j]).find('p').attr('rel'));
                //console.log($(prevCatElems[j]).find('p').attr('rel'));
            });

            // Sektorname (blauer Tab) an den Anfang des Arrays
            categoryTitles.unshift($('.sector .active').attr('rel'));
            // Kategorietitel des angeklickten Elements hinten anhÃ¤ngen
            //categoryTitles.push($(parentElems[i]).find('.'+elemId).html());
            categoryTitles.push($(parentElems[i]).find('.'+elemId).attr('rel'));

        }

    });

    var categoriesString = categoryTitles.join(':');
    //console.log('categoriesString '+categoriesString);
    return categoriesString;
}





/*
 *
 * Modified Selectbox for Product Selector (Hilfsklasse nicht direkt relevant)
 *
 */
jQuery.fn.selectBox = function(o) {
	return this.each(function() {

        var oThis = this;
		var oSelected = null;
		var state = 'closed';
                var actHeight=0;

        //wierd
     //   var oSelectOffset = jQuery(this).offset('HTML');

                // Safari gibts keine Tastatursteuerung, deshalb, Selects verstecken
                if(jQuery.browser.safari){
                    jQuery(this).wrap('<div></div>').hide();
                } else {
                    jQuery(this).wrap('<div></div>').css({left:'-1000px',position: 'absolute'});
                }

		var oContainer = jQuery(this).parent().addClass(o.css);
                // append html inside the container
		oContainer.append('<div><p></p></div><ul class="scroll-pane"></ul>');

		jQuery("div",oContainer).toggle(function() {

                         if($(this).prev("select").children("option").length>1){

                                  state = 'opened';
                                  reentered=false;
                                  var actElem=jQuery("ul",oContainer);
                                  actHeight=0;
                                  jQuery.each(actElem.children(), function() {
                                         // versteckte Elemente nicht mitzÃ¤hlen
                                         if($(this).css('display') != 'none'){
                                            actHeight+=parseInt($(this).height().replace('px',""))+3;//+3;

                                         }
                                  });
                                  //console.log(actHeight);
                                  if (actHeight <= 200){
                                      actElem.height(actHeight);
                                      actElem.parent('.jScrollPaneContainer').css({"height":actHeight});
                                  }
                                  actElem.slideDown(5,function(){
                                    if (!$(this).parent().hasClass('jScrollPaneContainer')){
                                        $(this).jScrollPane({scrollbarWidth : 15,showArrows : true,arrowSize : 15});
                                        // ick brauch den drag scroller focus fÃ¼r IE6 !!!
                                        jQuery(".jScrollPaneTrack,.jScrollArrowUp,.jScrollArrowDown",oContainer).mouseup(function() {
                                                    jQuery(oThis)[0].focus();
                                        });

                                    } else {
                                        $(this).parent().slideDown('fast');
                                    }
                                    $(this).css({left:"0px"});
                                    $(this).css({top:"0px"});
                                    if (actHeight <= 200){
                                        $(this).parent().css({"height":actHeight});

                                    } else {
                                        $(this).css({width:"410px"});
                                    }
                                  });

                                  jQuery("li",oContainer).removeClass('active');
                                  if(oSelected == null) {
                                        jQuery("li:eq(0)",oContainer).addClass('active');
                                        oSelected = jQuery("li:eq(0)",oContainer);
                                  } else {
                                        oSelected.addClass('active');
                                  }
                       }

                 jQuery(oThis)[0].focus();

		},function() {

                       if($(this).prev("select").children("option").length>1){
                                   state = 'closed';
                                   reentered=false;
                                   var ul= $(this).parent().children().children("ul");


                                  var scrollPane= $(this).parent().children(".jScrollPaneContainer");
                                  ul.slideUp('fast');
                                  scrollPane.slideUp('fast');
                       }
		});

        jQuery("ul",oContainer).parent().bind("mouseleave",function(){
                        reentered=false;
                        window.setTimeout(function(){
                          //console.log("mouseleave: "+reentered+" state: "+state);
                          if(!reentered && state == 'opened') {
                                reentered=false;
                                jQuery("div",oContainer).trigger("click");
                          }
                        }, 1000);

        });

        jQuery("ul",oContainer).parent().bind("mouseenter",function(){
                          reentered=false;
                          if(state == 'opened') {
                                reentered=true;
                          }
        });

                // get values from the option elements and set them in the ul list.
		jQuery(this).keydown(function(e) {
                        var key = e.charCode || e.keyCode || 0;
                        // bei tab oder esc schliessen
                        if(state == 'opened' &&(key=="27"||key=="9")){
                            jQuery("div",oContainer).trigger("click");
                            return false;
                        }
		});

                // ie 6 manuell scroll
               jQuery(this).mousewheel(function(e,delta) {
                            jQuery("ul",oContainer)[0].scrollBy(-(event.wheelDelta /120)*25);//(e.wheelDelta)*((delta<=-1)?-delta:(1+delta))
                            return false;
                        }
		);


		// get values from the option elements and set them in the ul list.
		jQuery(this).keyup(function(e) {
                        var key = e.charCode || e.keyCode || 0;
                        //tab highlighting
                        if(key=="9"){
                            $(this).parent().parent().animate({backgroundColor: "#a2c9f0"}, 500, function(){$(this).animate({backgroundColor: "#D6E7F7"},500);});
                        }
                        // liste Ã¶ffnen
                        if(state == 'closed' &&(key=="40"||key=="38"||key=="39"||key=="37")){
                             jQuery("div",oContainer).trigger("click");
                              setValue(key=="13",false);
                        } else if(state == 'opened'){
                                    setValue(key=="13",false);
                                }
		});

		jQuery('option',this).each(function(i) {
			var o = this;
			jQuery(this).click(function() {
				this.selected = true;
			});

			jQuery("ul",oContainer).append('<li>' +  jQuery(this).text() + '</li>');

			jQuery("li:eq(" + i + ")",oContainer).click(function() {
				jQuery(o).click();
				jQuery("div",oContainer).trigger("click");

                                jQuery("div p",oContainer).removeClass();
                                jQuery("div p",oContainer).removeAttr('rel');
                                jQuery("div p",oContainer).addClass(jQuery(o).attr("id"));

                                if(undefined !== jQuery(o).attr("id") && jQuery(o).attr('id').substring(0,3) == 'all'){

                                    jQuery("div p",oContainer).html(draeger.LABEL_REFINE_SELECTION);
                                    jQuery("div p",oContainer).attr('rel',draeger.LABEL_TRACK_REFINE_SELECTION);

                                    jQuery("ul li:first",oContainer).css({display: 'none'});
                                    jQuery(o).css({display: 'none'});

                                    jQuery("ul li:first",oContainer).attr('rel',draeger.LABEL_TRACK_ALL_PRODUCTSOPTION);
                                    jQuery("ul li:first",oContainer).html(draeger.LABEL_ALL_PRODUCTSOPTION);
                                    jQuery(o).html(draeger.LABEL_ALL_PRODUCTSOPTION);

                                }else{
                                    jQuery("div p",oContainer).html(jQuery(o).text());
                                    jQuery("div p",oContainer).attr('rel',jQuery(o).attr("rel"));
                                    jQuery(o).css({display: 'block'});
                                    jQuery("ul li:first",oContainer).css({display: 'block'});
                                }
                                oSelected = $(this)
			}).mouseover(function() {
				jQuery(this).addClass('active');
                                // ie 6 ohne focus, dann geht scrolling nicht mehr
                                jQuery(oThis)[0].focus();

			}).mouseout(function() {
				jQuery(this).removeClass('active');
                                //jQuery(oThis)[0].blur();

			});
		});

		// set ul list position
		jQuery("ul",oContainer).hide();

		var positionListElement = function() {

                // set ul list position
                jQuery("ul",oContainer).css({
                    //left: (oOffset.left )+ 'px',
                    //top: oOffset.top + parseInt(oOffset.height) + 'px',
                    position: 'absolute',
                    width: '425px'//oOffset.width + 'px'
                });

		};
		var setValue = function(enterPressed,init) {
                        var elem =$(oThis).children("option[selected]");
                        var val = elem.text();
                        oldSelectedPos=0;
                        if (init){

                            if (jQuery(oThis)[0].selectedIndex>0){
                              jQuery("div p",oContainer).attr("class",elem.attr("id"));

                            }

                            if(undefined !== elem.attr("id") && elem.attr('id').substring(0,3) == 'all'){
                                jQuery("div p",oContainer).html(draeger.LABEL_REFINE_SELECTION);
                                jQuery("div p",oContainer).attr('rel',draeger.LABEL_TRACK_REFINE_SELECTION);
                                jQuery("ul li:first",oContainer).css({display: 'none'});

                                jQuery("ul li:first",oContainer).attr('rel',draeger.LABEL_TRACK_ALL_PRODUCTSOPTION);
                                jQuery("ul li:first",oContainer).html(draeger.LABEL_ALL_PRODUCTSOPTION);
                                elem.html(draeger.LABEL_ALL_PRODUCTSOPTION);

                                elem.css({display: 'none'});
                                //console.log('Init: '+actHeight);
                            }else{
                                jQuery("div p",oContainer).html(val);
                                jQuery("div p",oContainer).attr('rel',elem.attr("rel"));


                            }
                        } else {
                           /* if(oSelected.html()==null){
                                oldSelectedPos=0;
                            } else {
                                oldSelectedPos=oSelected.offset().top;
                            }*/
                        }


                        oSelected = jQuery("li:eq(" + jQuery(oThis)[0].selectedIndex + ")",oContainer);

                       /* if(oSelected.html()==null){
                            newSelectedPos=0;
                        } else {
                            newSelectedPos=oSelected.offset().top;
                        }*/


                        if(actHeight > 200 && jQuery("ul",oContainer).parent().hasClass('jScrollPaneContainer')){
                                 //console.log("aktuelle HÃ¶he: "+actHeight+" selected: ");
                                if(jQuery(oThis)[0].selectedIndex>1){
                                   // jQuery("ul",oContainer)[0].scrollBy(newSelectedPos-oldSelectedPos);
                                   jQuery("ul",oContainer)[0].scrollTo(jQuery(oThis)[0].selectedIndex*20);
                                } else {
                                    //console.log("aktuelle HÃ¶he: "+actHeight+" selected: ");
                                    jQuery("ul",oContainer)[0].scrollTo(0);

                                }
                        }

			jQuery("li",oContainer).removeClass('active');
			oSelected.addClass('active');
                        if (enterPressed){

                             jQuery("div p",oContainer).html(val);
                                if (jQuery(oThis)[0].selectedIndex>=0){ // hier vorher > , wegen tastatursteuerng muss hier auch erster abgecdeckt werden
                                  jQuery("div p",oContainer).attr("class",elem.attr("id"));
                                  jQuery("div p",oContainer).attr('rel',elem.attr("rel"));
                                }
                                jQuery(o).css({display: 'block'});
                                jQuery("ul li:first",oContainer).css({display: 'block'});
                            oSelected.parent().click();
                            jQuery("div",oContainer).trigger("click");
                        }
		};

		setValue(false,true);

		positionListElement();

		//jQuery(window).resize(positionListElement);

	});
};
