/*
 * Draeger Address Selector 
 * created by Christian Beyer (e7)
 * updated 091001
 */

// LH URL (Proxy zum lokalen Testen)
var proxy=false;
var actHost=draeger.SEND_PATH;

// globale Variablen
//var historyLimit=true;
var historyAction=false;
var historykeys=new Array();
var ajaxLocationFinished=true;
var ajaxSellerFinished=true;
var lastQuery='';
var selectHtml=new Array("","","");
var selectSelected=new Array("","","");
var reqType="";
var size="6";

// Servlet URLs von LH
var urlLocation="";
var urlSeller="";
var urlResults="";
var urlSearchResults="";

// Servlet URLS werden gesetzt    
if (proxy){
  urlLocation="../../Proxy?mimeType=text/plain&url="+actHost+"as/getCityFilterJSON.action";
  urlSeller="../../Proxy?mimeType=text/plain&url="+actHost+"as/getContactTypeFilterJSON.action";
  urlResults="../../Proxy?mimeType=text/plain&url="+actHost+"as/getAddressesJSON.action";
  urlSearchResults="../../Proxy?mimeType=text/plain&url="+actHost+"as/getAddressesJSON.action";
} else {
  urlLocation=actHost+"as/getCityFilterJSON.action";
  urlSeller=actHost+"as/getContactTypeFilterJSON.action";
  urlResults=actHost+"as/getAddressesJSON.action";
  urlSearchResults=actHost+"as/getAddressesJSON.action";
}

/*
 *  Ajax Eventhandler (mit Requesturl und Callbackfunktion als Parameter)
 */  
function ajaxEventHandler(url,params,callbackFunc) {
    $.ajax({
           type: "GET",
           url: encodeURI(url+params),
           dataType: "json",
           timeout: 20000,
           error: function (XMLHttpRequest, textStatus, errorThrown) {noResult("The Webservice is temporarily not available.","Error");hideOverlay();},
           success: function(data,textStatus){
                if (textStatus!="error"){
                      // Bei fehlerhafter Suche
                      if (data.Message && data.Message.Type =="Error"){
                          noResult(data.Message.Value,lastQuery);
                          searchTracking('false',lastQuery);
                          hideOverlay();
                      } else {   
                         $(".addressControls div").attr("style","display:block;"); 
                         callbackFunc(data);            
                      }
                            
                   }
           },
           complete: function (XMLHttpRequest, textStatus) { }
     });
}


/*
 * URL für Ajax Request wird anhand von Parametern gesetzt und zurückgegeben
 * 
 */
function getParams(qType){
    var params='';  
    switch (qType) {
       case "location"  : params="?country="+country+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                          break;
       case "seller"    : params="?country="+country+"&city="+loc+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                          break;
       case "results"   : params="?country="+country+"&city="+loc+"&contactType="+seller+"&page="+page+"&size="+size+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                          break;
       case "search"    : lastQuery=query;
                          params="?query="+query+"&country="+country+"&city="+loc+"&contactType="+seller+"&page="+page+"&size="+size+"&lang="+draeger.LANGUAGE+"&"+Math.random(9999);
                          break;
    }
    return params;   
}
          
/*
 * Vorstufe vor dem Ajaxcall
 * 
 * Per Parameter werden Aufrufe und Callbackfunktionen gesetzt 
 */
function updateAddressSelector(params){
    // Overlay wird angezeigt
    showOverlay();
    //for history last Request Typ
    reqType=params;
    // Wenn Suchfeld befüllt, wird Suchwort eingelesen
    if (params=="search" || (params=="results" && $("#search input").attr("value")!="") ){
        params="search";
        query= $("#search input").attr("value");
        //neues Suchwort
        if ((query!=lastQuery)&& !historyAction ){
            page=1;
        }
    }
    ajaxLocationFinished=true;
    ajaxSellerFinished=true;

    // Parameter regelt den Aufruf
     switch (params) {
       case "location" :    ajaxLocationFinished=false;ajaxSellerFinished=false;
                            ajaxEventHandler(urlLocation,getParams("location"),updateLocation);
                            ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
                            ajaxEventHandler(urlResults,getParams("results"),updateResults);
                            break;
       case "seller" :      ajaxSellerFinished=false;
                            ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
                            ajaxEventHandler(urlResults,getParams("results"),updateResults);
                            break;                            
       case "results"   :   ajaxEventHandler(urlResults,getParams("results"),updateResults);
                            break;
       case "search"   :    lastQuery=query;
                            country="all";
                            loc="all";
                            seller="all";
                            ajaxSellerFinished=false;
                            ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
                            ajaxEventHandler(urlSearchResults,getParams("search"),updateResults);
                            setStateSearchSelector();
                            break;    
     }                             
} 

                
/*
 * Country gewählt, Locationdropdown wird gesetzt
 */
function updateLocation(jsonObj){
     //Dropdownfeld Location wird gesetzt
     $("#cat2 .selectCat").remove();
     //Location enabled
     $("#cat2 div").html('<select class="cat2" name="cat2"><option lang="'+draeger.LABEL_TRACK_ALL_CITYOPTION+'" id="allLocation">'+draeger.LABEL_ALL_CITYOPTION+'</option></select>');
     var actSelect= $(".cat2");
     // Daten aus JSON Objekt eingesetzt
     $.each(jsonObj.Cities, function(j,value){
             //bei History Back/Forward  wird select gesetzt
              if (historyAction && (selectSelected[1]==value.id)){
                actSelect.append("<option selected='selected' id='"+value.id+"'>"+value.name+"</option>");
              } else {
                  actSelect.append("<option id='"+value.id+"'>"+value.name+"</option>");
              }
     });
     // abschliesend wieder neuinitialisiert     
     actSelect.selectBox({css:'selectCat'});  
     $("#cat2 .selectCat ul").click(function(){whichDropdown($(this));return false;});
     
     ajaxLocationFinished=true;
}     

/*
 * Location gewählt, Sellerdropdown wird gesetzt
 */
function updateSeller(jsonObj){
     //Dropdownfeld Location wird gesetzt
     $("#cat3 .selectCat").remove();
     //Location enabled
     $("#cat3 div").html('<select class="cat3" name="cat3"><option lang="'+draeger.LABEL_TRACK_ALL_CONTACTTYPEOPTION+'" id="allSeller">'+draeger.LABEL_ALL_CONTACTTYPEOPTION+'</option></select>');
     var actSelect= $(".cat3");
     // Daten aus JSON Objekt eingesetzt
     $.each(jsonObj.contactTypes, function(j,value){ 
              //bei History Back/Forward  wird select gesetzt
              if (historyAction && (selectSelected[2]==value.id)){
                  if(value.interName){
                    actSelect.append("<option lang='"+value.interName+"' selected='selected' id='"+value.id+"'>"+value.name+"</option>");
                  }else{
                    actSelect.append("<option selected='selected' id='"+value.id+"'>"+value.name+"</option>");
                  }
              } else {
                  if(value.interName){
                    actSelect.append("<option lang='"+value.interName+"' id='"+value.id+"'>"+value.name+"</option>");
                  }else{
                    actSelect.append("<option id='"+value.id+"'>"+value.name+"</option>");
                  }
              }
     });
     // abschliesend wieder neuinitialisiert     
     actSelect.selectBox({css:'selectCat'});  
     $("#cat3 .selectCat ul").click(function(){whichDropdown($(this));return false;});
    
     ajaxSellerFinished=true;
}  

 /*
 * Gelieferte Händler Results vom Ajax Request werden ausgegeben
 */
function updateResults(jsonObj){

   if(lastQuery != ''){
        searchTracking('true',lastQuery);
   }
   // Adressliste wird geleert
   $(".addressList").html("");  
   // Html für die einzelnen Angebote(aus JSON) wird erstellt und an die Ergebnisliste angehängt
   var actResult='';
   $.each(jsonObj.Addresses, function(i,seller){
       if (((i+1)==1)||((i)%3==0)){
           actResult+='<div class="address tables m-tablocation m-tablocationwide clearfix"><div class="left">'; 
       } else {
           actResult+='<div class="right">';
       }
       // Check Belegung Rückgabewerte
       if(seller.addressLine1==null)seller.addressLine1="";else seller.addressLine1+='<br/>';
       if(seller.addressLine2==null)seller.addressLine2="";else seller.addressLine2+='<br/>';
       if(seller.city==null)seller.city="";else seller.city+='<br/>';
       if(seller.region==null)seller.region="";else seller.region+='<br/>';
       if(seller.postalCode==null)seller.postalCode="";else seller.postalCode+='<br/>';
       if(seller.country==null)seller.country="";else seller.country+='<br/>';
       if(seller.phone==null)seller.phone="";else seller.phone='<span class="phone">'+seller.phone+'</span>';
       if(seller.fax==null)seller.fax="";else seller.fax='<span class="fax">'+seller.fax+'</span>';
       if(seller.email==null)seller.email="";else seller.email='<a  href="mailto:'+seller.email+'" class="lnkinternal mail">'+seller.email+'</a>';
       if(seller.pdfLink==null){
           //seller.pdfLink="";
           // Dräger Maps
           seller.pdfLink ='<a class="maps lnkexternal" href="http://campaigns.draeger.com/maps/map/directions?name='+checkForRegExp(seller.fullname)+'&contacttype='+checkForRegExp(seller.contactType)+'&address1='+checkForRegExp(seller.addressLine1)+'&address2='+checkForRegExp(seller.addressLine2)+'&city='+checkForRegExp(seller.city)+'&postalcode='+checkForRegExp(seller.postalCode)+'&region='+checkForRegExp(seller.region)+'&country='+checkForRegExp(seller.country)+'&email='+checkForRegExp(seller.email)+'&phone='+checkForRegExp(seller.phone)+'&fax='+checkForRegExp(seller.fax)+'&mapsize=lightbox&lang='+checkForRegExp(draeger.LANGUAGE)+'">'+draeger.LABEL_DRAEGER_MAPS+'</a>';
           if($('#draegerMaps').length == 0){
            $(".addressList").after('<div id="draegerMaps" class="jsdisplay"><div class="lightbox-content"><a href="/" class="close">'+draeger.LABEL_CLOSE_DRAEGER_MAPS+'</a><h2>&nbsp;</h2><div class="draegerMapsLightbox"></div></div></div>');
           }
   } else if(seller.pdfLink.toLowerCase() == 'nomap'){
           seller.pdfLink= "";
       } else {
           //if (seller.pdfLink.substr(0,4)=="www."){
                    seller.pdfLink='<a target="_blank" href="http://'+seller.pdfLink+'" class="lnkinternal anfahrt">'+draeger.LABEL_DIRECTION+'</a>';
                //} else {
                  //  seller.pdfLink='<a target="_blank" href="'+draeger.DOCROOT+'/media/addressSelector/'+seller.pdfLink+'" class="lnkinternal anfahrt">'+draeger.LABEL_DIRECTION+'</a>';
                //}
       }
       if(seller.businessActivities1==null)seller.businessActivities1="";else seller.businessActivities1+='<br/>';
       if(seller.businessActivities2==null)seller.businessActivities2="";else seller.businessActivities2+='<br/>';
       if(seller.businessActivities3==null)seller.businessActivities3="";else seller.businessActivities3+='<br/>';
       if(seller.businessActivities4==null)seller.businessActivities4="";else seller.businessActivities4+='<br/>';
       if(seller.businessActivities5==null)seller.businessActivities5="";else seller.businessActivities5+='<br/>';
       //Adress HTML mit Daten aus JSON versehen 
       actResult+='  <div>\n\
                        <h5>'+seller.contactType+'</h5>\n\
                        <h3>'+seller.fullname+'</h3>\n\
                        <p class="txsmall anschrift">'+seller.addressLine1+seller.addressLine2+seller.city+seller.region+seller.postalCode+seller.country+'</p>\n\
                        <p class="txsmall">'+seller.phone+seller.fax+'</p>\n\
                        <p class="txsmall">'+seller.email+seller.pdfLink+'</p>\n\
                        <p class="txsmall">\n\
                        <div class="specs">\n\
                          <h3>'+draeger.LABEL_BUSINESS_ACTIVITIES+'</h3>\n\
                          <p class="txsmall">'+seller.businessActivities1+seller.businessActivities2+seller.businessActivities3+seller.businessActivities4+seller.businessActivities5+'</p>\n\
                        </div>\n\
                      </div>\n\
                   </div>';            
       if ((i+1)%3==0||(i+1)==jsonObj.Addresses.length){
           actResult+='</div>'; 
       }  
   });
   //Result an Liste angehängt
   $(".addressList").append(actResult);

   
   //Eventanzahl aus JSON Objekt übernommen
   addressCounter=jsonObj.Total;
   //Produktanzahl ins HTML geschrieben
   $(".prodCounter").html(addressCounter);
   // Anzahl Ergebniseiten ermittelt
   pageCounter=Math.ceil((parseInt(addressCounter)/parseInt(size)));

   $('.txsmall .maps').click(function(){
       tb_show('Locator', '#TB_inline?height=510&width=944&inlineId=draegerMaps', false);
       $(".draegerMapsLightbox").html('<iframe src="'+$(this).attr("href")+'" scrolling="no"  frameborder="0" width="925" height="440" name="MapsIFrameContext"></iframe>');
       // Tracking
       var contactName = $(this).parent().siblings('h3').text()
       clickTracking('maps', contactName);
       return false;
   });

   $('.lightbox-content .close').click(function(){
      tb_remove();
      return false;
   });

   $('.txsmall .mail').click(function(){
       // Tracking
       var contactName = $(this).parent().siblings('h3').text()
       clickTracking('mailto', contactName);
   });

   
   
   // Pagecontrol aktualisieren
   pageControl();
    // wait finishing all Ajax Events to go further
   var time=0;
   var ajaxInterval=window.setInterval(function(){
         if (ajaxLocationFinished&&ajaxSellerFinished){
               // 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(calInterval);
         }
     }, 100);
     
     dropdownTracking();
}

function checkForRegExp(string){
   string = string.replace(/<br\/>/g, '');
   string = string.replace(/[*#?!$§%&/()='"\\{}|\[\]+°]/g, ' ');
   return encodeURI(string);
}

/*
 * Pagingmechanismus für die Seitenauswahl
 */
function pageControl(){
   $(".addressControls .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('');
   } 
}   


/*
 *  "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"});
}

/*
 * Callback bei Klick auf Selektor Dropdowns
 */
function whichDropdown(elem){
    
    page=1;
    // Suchfeld wird geleert bei Selektorclick
    $("#search input").attr("value","");
    query="";
    lastQuery="";
    // gewünschte ID der Kategorie wird ermittelt
    var actCat= elem.parent().prev("div").children("p").attr("class");
    var actSelect=elem.parent().prevAll("select");
   // welches Dropdown wurde geklickt?
        switch (actSelect.attr("class")){
                     case "cat1"    : country=actCat;
                                      loc="all";
                                      seller="all";
                                      if (country=="allCountry"){
                                          country="all";                                   
                                          // Selektor wird aktualisiert (Ajax)
                                          updateAddressSelector("seller");
                                          disableSelector("2");
                                          //disableSelector("3");
                                      } else {
                                          // Selektor wird aktualisiert (Ajax)
                                          updateAddressSelector("location"); 
                                      }               
                                      break;
                     case "cat2"    : loc=actCat;
                                      seller="all";
                                      if (loc=="allLocation"){
                                          loc="all";
                                      }
                                      updateAddressSelector("seller");
                                      break;
                     case "cat3"    : seller=actCat;
                                      if (seller=="allSeller"){
                                          seller="all";
                                      }
                                      // Jobselektor wird aktualisiert (Ajax)
                                      updateAddressSelector("results");
                                      break;
            }
            
            
}


/*
 * 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;
    }
    // Selektor wird aktualisiert (Ajax)
    updateAddressSelector('results');
  }
}

/*
 * Inhalte der Dropdowns werden gespeichert und ins Historyobjekt eingetragen
 */
function saveHistory(){
       jQuery.each($(".selectCat").children("div").children("p"),function(index){
               selectSelected[index]="";
               selectSelected[index]=$(this).attr("class");
      });

  /*    jQuery.each($(".selectCat").children("select"),function(index){
                 selectHtml[index]="<select class='cat"+(index+1)+"'>";
                 jQuery.each($(this).children("option"),function(){
                    if ($(this).attr("selected")){
                        selectHtml[index]+="<option selected='selected' id='"+$(this).attr("id")+"'>"+$(this).html()+"</option>";
                    } else {
                        selectHtml[index]+="<option id='"+$(this).attr("id")+"'>"+$(this).html()+"</option>";
                    }
                });
                selectHtml[index]+="</select>";
      });*/
      // 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,"country":country,"location":loc,"seller":seller,"query":query,"page":page,"size":size,"selectSelected":[selectSelected[0],selectSelected[1],selectSelected[2]]};
        // JSON Objekt zuordbar mittels Millisekunden seit 1970 an URL 
        dhtmlHistory.add(hKey,jsonobj);
}


function historyChange(newLocation, historyData) {
      // Wenn Historyobjekt befüllt...
      if (historyData){
          //JSON Objekt wird ausgelesen und Parameter befüllt
          country=historyData.country;
          loc=historyData.location;
          seller=historyData.seller;
          query=historyData.query;
          lastQuery=query;
          page=historyData.page;
          size=historyData.size;
          selectSelected[0]=historyData.selectSelected[0];
          selectSelected[1]=historyData.selectSelected[1];
          selectSelected[2]=historyData.selectSelected[2];
          // Historyvariable auf true, damit beim Update kein erneuter Historypunkt im Browser gesetzt wird
          historyAction=true;
          // Wenn es sich um eine Suche handelt, wird der Suchbegriff wieder ins Suchfeld eingetragen
          if (query!=""){
              $("#search input").attr("value",query);
                  updateAddressSelector("search");
          } else {
              $("#search input").attr("value","");
              //first dropdown new initialized
              var firstSelect=$(".cat1");
              firstSelect.clone().insertBefore(firstSelect.parent());
              firstSelect.parent().remove();
              firstSelect=$(".cat1");
              if (selectSelected[0]!=""){
                firstSelect.children().each(function (i) {
                    $(this).removeAttr("selected");
                    if ($(this).attr("id")==selectSelected[0]){
                        $(this).attr("selected","selected");
                    }
                });
              }
              firstSelect.selectBox({css:'selectCat'});
              $("#cat1 .selectCat ul").click(function(){whichDropdown($(this));return false;});
              if (country=="all"){
                       // Selektor wird aktualisiert (Ajax)
                       updateAddressSelector("seller");
                       disableSelector("2");
              } else {
                      // Selektor wird aktualisiert (Ajax)
                      updateAddressSelector("location");
              }
          }
 
        }
};
/*
 *   Ausgabe bei keinen gefundenen Händlerresultaten
 */        
function noResult(message,headline){
    // Controls werden ausgeblendet
    $(".addressControls div").attr("style","display:none;");
    // Counter genullt
    $(".prodCounter").html("0");
    // Errortext ausgegeben
    $(".addressList").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;
   }
}

/*
 * Leeres "Dropdown" wird disabled 
 */
function disableSelector(dropdownNumber){
      //Dropdownfeld wird gelöscht/neuinitialisiert
      $("#cat"+dropdownNumber+" .selectCat").remove();
      $("#cat"+dropdownNumber+" div").html('<select class="cat'+dropdownNumber+'" name="cat'+dropdownNumber+'"></select>');
      $(".cat"+dropdownNumber).selectBox({css:'selectCat'});
      var temp=$(".cat"+dropdownNumber).next('div');
      temp.css({'background-color':'#fff'});
      switch (dropdownNumber) {
          //Location
          case "2" : temp.children('p').html(draeger.LABEL_EMPTY_CITYDROPDOWN).attr('rel', draeger.LABEL_TRACK_ALL_CITYOPTION);
                     break;
          //Seller           
          case "3" : temp.children('p').html(draeger.LABEL_EMPTY_CONTACTTYPEDROPDOWN).attr('rel', draeger.LABEL_TRACK_ALL_CITYOPTION);
                     break;                      
      }   
}

/*
 * Selektoren werden bei Suche in Initialisierungszustand gebracht
 */
function setStateSearchSelector(){ 
     // bei Suche werden die ersten beiden Dropdowns in den Ausgangszustand gebracht
      for (var i = 1; i <= 2; i++){
        var delAct= $(".cat"+i);   
        delAct.clone().insertBefore(delAct.parent());
        delAct.parent().remove();
      }
      $("#cat1 div select").children().removeAttr("selected");
      //Dropdownfeld Location und Seller wird geleert
      $("#cat2 div").html('<select class="cat2" name="cat2"></select>');
      //$("#cat3 div").html('<select class="cat3" name="cat3"></select>');
      $(".cat1").selectBox({css:'selectCat'});
      $(".cat2").selectBox({css:'selectCat'});
      $("#cat1 .selectCat ul").click(function(){ whichDropdown($(this));return false;});
      //$("#cat2 .selectCat ul").click(function(){ whichDropdown($(this));return false;});
      var temp=$(".cat2").next('div');
      temp.children('p').html(draeger.LABEL_EMPTY_CITYDROPDOWN).attr('rel', draeger.LABEL_TRACK_ALL_CITYOPTION);;
      temp.css({'background-color':'#fff'});
}

  
/*
 * Selektoren werden per Javascript initialisert und mit Events versehen
 */
function initSelectors(){
    $(".cat1").selectBox({css:'selectCat'});
    $(".cat2").selectBox({css:'selectCat'});
    $(".cat3").selectBox({css:'selectCat'});
    $("#cat1 .selectCat ul").click(function(){ whichDropdown($(this));return false;});
    $("#cat3 .selectCat ul").click(function(){ whichDropdown($(this));return false;});
    var temp="";
    //Nichtaktive Dropdowns disablen
    if (country=="all"){
           //location disabled
           temp=$(".cat2").next('div');
           temp.children('p').html(draeger.LABEL_EMPTY_CITYDROPDOWN).attr('rel', draeger.LABEL_TRACK_ALL_CITYOPTION);;;
           temp.css({'background-color':'#fff'});
           //Seller Dropdown disabled
         /*  temp=$(".cat3").next('div');
           temp.children('p').html(draeger.LABEL_EMPTY_CONTACTTYPEDROPDOWN);
           temp.css({'background-color':'#fff'});*/
    } else {
       $("#cat2 .selectCat ul").click(function(){ whichDropdown($(this));return false;}); 
      // $("#cat3 .selectCat ul").click(function(){ whichDropdown($(this));return false;});
    }
    
}

/*
 * 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 = 'address search';
        s.eVar3 = searchTerm; // = s.prop2
        s.eVar12 = 'address search'; // = s.prop9
    } else { /* Suche erfolgreich */
        s.prop1 = searchTerm;
        s.prop2 = "";
        s.prop3 = searchTerm;
        s.prop9 = 'address search';
        s.eVar2 = searchTerm; // = s.prop1
        s.eVar12 = 'address search'; // = s.prop9
    }

    s.linkTrackVars = 'prop1,prop2,prop3,prop9,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','address selector');
}

/*
 * Tracking-Variablen befüllen und abschicken
 * type = "maps", "mailto"
 * contact = Headline des Kontakts
 */
function clickTracking(type, contact){
    //var s=s_gi('your_report_suite_here');
    var trackPath = buildTrackPath();

    if(type == "maps") {
        s.prop1 = "";
        s.prop2 = "";
        s.prop3 = "";
        s.prop9 = "address selector";
        s.prop35 = trackPath; // Dropdowns
        s.prop36 = type+":"+contact; // Clicked contact
        s.eVar2 = ""; // = s.prop1
        s.eVar3 = ""; // = s.prop2
        s.eVar12 = "address selector"; // = s.prop9
        s.eVar26 = trackPath;
        s.eVar27 = type+":"+contact;

    }else if (type == "mailto") {
        s.prop1 = "";
        s.prop2 = "";
        s.prop3 = "";
        s.prop9 = "address selector";
        s.prop35 = trackPath; // Dropdowns
        s.prop36 = type+":"+contact; // Clicked contact
        s.eVar2 = ""; // = s.prop1
        s.eVar3 = ""; // = s.prop2
        s.eVar12 = "address selector"; // = s.prop9
        s.eVar26 = trackPath;
        s.eVar27 = type+":"+contact;
    }
    s.linkTrackVars = 'prop1,prop2,prop3,prop9,prop35,prop36,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', 'address selector');
}

/*
 * Tracking-Variablen befüllen und abschicken
 * Dropdowns
 */
function dropdownTracking(){
    var trackPath = buildTrackPath();

    s.prop1 = trackPath;
    s.prop2 = "";
    s.prop3 = trackPath;
    s.prop9 = "address search";
    s.eVar2 = ""; // = s.prop1
    s.eVar3 = ""; // = s.prop2
    s.eVar12 = "address search"; // = s.prop9
    s.linkTrackVars = 'prop1,prop2,prop3,prop9,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', 'address selector');
}

/*
 * Erstellt Tracking-String aus den rel-Attributen
 * der angezeigten Werte in den Dropdowns
 */
function buildTrackPath(){
    var path = new Array();
    $('.selectArea div .selectCat p').each(function(index,elem){
        if($(elem).attr('rel') != ''){
            path.push($(elem).attr('rel'));
        }else{
            path.push($(elem).attr('class'));
        }
        
    });
    path = path.join(':');
    return path;
}

/*
 *   Init Application Address Selector
 */
$().ready(function() {
        $(".cats").removeClass("jsdisplay");
        //Applikation aktiv
        draeger.ADDRESSSELECTOR_ACTIVE=true;
        lastQuery=query;
        // Kategorieselektor wird initialisiert
        initSelectors();
        // Events an Links gehängt   
        // Pagingmechanismus
        $(".pageControl a").click(function(){whichControl($(this));return false;});
        // Suchfeld (Mausklick und Enter)
        $("#search a").click(function(){updateAddressSelector('search');return false;});
        $("#search input").keydown(function(event){if(event.keyCode=="13"){updateAddressSelector('search');/*addHistoryEvent();*/return false;}return true;});    
        // Initialisierung der History Funktion
        dhtmlHistory.initialize();
        //Subscribe Listener für Browser Back/Forward
        dhtmlHistory.addListener(historyChange);
        // erster Historypunkt wird gesetzt (unter Umständen nicht nötig)
        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);

        // DraegerMaps Link wird erst nach AJAX-Call gebaut
        // deshalb nach dem Laden der Seite AJAX-Requests machen
        
        if(country == 'all'){
            ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
            ajaxEventHandler(urlResults,getParams("results"),updateResults);
        }else {
            if(loc != 'all'){
                ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
                ajaxEventHandler(urlResults,getParams("results"),updateResults);
            }else{
                ajaxEventHandler(urlLocation,getParams("location"),updateLocation);
                ajaxEventHandler(urlSeller,getParams("seller"),updateSeller);
                ajaxEventHandler(urlResults,getParams("results"),updateResults);
            }
        }
        
});

    
    
  



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() {

                 actHeight+=parseInt($(this).height().replace('px',""))+3;//+3;
            });

            if (actHeight <= 200){
                actElem.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',function() {});
            scrollPane.slideUp('fast',function() {});
        }
    });
                
    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'){
            enterButton=(key=="13");
            setValue(enterButton,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).html(jQuery(o).text());
                jQuery("div p",oContainer).removeClass();
                jQuery("div p",oContainer).addClass(jQuery(o).attr("id"));
                if(jQuery(o).attr("id") == "allCountry"){
                    jQuery("div p",oContainer).attr("rel",jQuery(o).attr("id"));
                }else{
                    jQuery("div p",oContainer).attr("rel",jQuery(o).attr("lang"));
                }
                // Tracking-Test
                //jQuery("div p",oContainer).attr("rel",jQuery(o).attr("id"));
                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){
            jQuery("div p",oContainer).html(val);
            if (jQuery(oThis)[0].selectedIndex>0){
                jQuery("div p",oContainer).attr("class",elem.attr("id"));
                
            }
            if(elem.attr("id") == "allCountry"){
               jQuery("div p",oContainer).attr('rel',elem.attr("id"));
            }else{
               jQuery("div p",oContainer).attr('rel',elem.attr("lang"));
            }
            // Tracking-Test
            //jQuery("div p",oContainer).attr('rel',elem.attr("id"));
        } 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);
                // console.log("selectedElem"+oSelected.html()+" "+newSelectedPos);
                jQuery("ul",oContainer)[0].scrollTo(jQuery(oThis)[0].selectedIndex*20);
            } else {
                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"));
            }
            if(elem.attr("id") == "allCountry"){
               jQuery("div p",oContainer).attr("rel",elem.attr("id"));
            }else{
               jQuery("div p",oContainer).attr("rel",elem.attr("lang"));
            }
            // Tracking-Test
            //jQuery("div p",oContainer).attr("rel",elem.attr("id"));
            //console.log(oSelected);
            oSelected.parent().click();
            jQuery("div",oContainer).trigger("click");
        }
    };
               
    setValue(false,true);
                 
    positionListElement();

    //jQuery(window).resize(positionListElement);

    });
};
