//_______________________________________________________________________
//   |       |
//   | knipp |           Knipp Medien und Kommunikation GmbH
//    -------
//
//
//    Project: Pöppelmann Relaunch 2010
//
//    Copyright (C) 2010 by Knipp Medien und Kommunikation GmbH
//
//    initial autor:   Björn Mönikes
//    version:         $Revision: 1627 $
//                     $Date: 2012-01-31 13:30:14 +0100 (Di, 31 Jan 2012) $
//                     $Author: Bjoern.Moenikes $
//

// <div class="search level1 level 3" />
// this div would be visible for searchSetLevel(1) und ..(3)

// <a style="left: 0%;" class="ui-slider-handle ui-state-default ui-corner-all" href="#">
// <div style="position: relative; top: 15px; font-size: 10px; font-weight: bold;">1</div>
// </a>

(function ($){
  $.fn.extend ({
    searchPlugin : function (options)
    {
      if (!$.event._searchCleanup) $.event._searchCleanup = [];

      options = $.extend( {
        area : 'default',
        areaID : -1,
        level : 0
      },
      options );

      return this.each (function () {
        if (!this._searchController) {
          this._searchController = new SearchPlugin (this);
          $.event._searchCleanup[$.event.guid] = this._searchController;
          $.event._searchCleanup[$.event.guid++].init (options);
        }
      });
    },

    searchSelectBoxAction : function (evt,val,ref,$obj)
    {
      return _eachCall.call (this, 'searchSelectBoxAction', evt,val,ref,$obj);
    },


    searchSetLevel : function (level)
    {
      return _eachCall.call (this, 'setLevel', level);
    },

    searchExecuteKapstoSearch : function (uri)
    {
      if (this[0] != undefined && this[0]._searchController)
        return this[0]._searchController.executeKapstoSearch (uri);
      return false;
    },

    searchExecuteTekuSearch : function (uri)
    {
      if (this[0] != undefined && this[0]._searchController)
        return this[0]._searchController.executeTekuSearch (uri);
      return false;
    },

    searchUpdateMode : function ()
    {
      if (this[0] != undefined && this[0]._searchController)
        return this[0]._searchController.updateMode();
      return false;
    },

    searchNormalMode : function ()
    {
      if (this[0] != undefined && this[0]._searchController)
        return this[0]._searchController.normalMode();
      return false;
    },


    searchInitializeSearch : function ()
    {
      return _eachCall.call (this, 'initializeSearch');
    },

    searchSetHeight : function (id)
    {
      alert("SH");
    //      return _eachCall.call (this, 'setHeight', id);
    },

    _searchDestroy : function ()
    {
      return _eachCall.call (this, 'cleanup');
    }
  });


  var _eachCall = function (f, a1, a2, a3, a4)
  {
    return this.each (function () {
      if (this._searchController)
        this._searchController[f](a1, a2, a3, a4);
    });
  };


  $(window).bind('unload', function() {
    var els = $.event._searchCleanup || [];
    for (var i in els) {
      $(els[i].ele)._searchDestroy();
    }
  });


  function SearchPlugin(ele)
  {
    this.ele = ele;
    this.$ele = $(this.ele);
    this.$search = $(".search", this.$ele);
  };
  $.extend(SearchPlugin.prototype, {
    bindToObj: function(fn) {
      var self = this;
      return function() {
        return fn.apply(self, arguments)
      };
    },

    init : function(s)
    {
      this.areaID = s.areaID;
      this.area = s.area;
            
      
      //  $( ".slider-range" ).slider(	{ value:0, min: 0, max: 150, step: 1 }  );

      $("div.selectbox.search-plugin").selectbox({
        "onSelectCallback":function(evt,val,ref,$obj){
          $("#search_site"). searchSelectBoxAction(evt,val,ref,$obj);
        }
      });
  
      $("div.selectbox.auto-ajax-update").selectbox({
        "onSelectCallback":function(evt,val,ref,$obj){
          ajaxUpdate("/"+ evt.attr("ref"));
        }
      });
      $('div.selectbox.auto-follow-link').selectbox({
        "onSelectCallback":function($tgt, value, ref){
          C.log(".auto-follow-link found: redirecting to: "+ref);
          if (ref == "#" || ref == "/#" ) {
            C.log(".auto-follow-link found: link is #. Stopping.");
            return;
          }      
          $("#search_site").searchUpdateMode();
          window.location = "/"+ref;
        }});      
      
      // if a specific businessarea has to be preselected,
      // select it and remove option that asks the user to select an item
      if (areaID>0 && $("#search-area").is(":visible")) {
        $("#search-area div.selectbox.auto-follow-link").sbSetSelectionByValue(areaID, true);
      }      

      // configure
      this.setLevel(s.level);
    },

    cleanup : function()
    {
    },



    /* init a special search level after the side has been loaded */
    setLevel : function (level)
    {
      this.$search.hide();
      var show = [];
      switch (this.area) {
        case "kapsto":
          switch (level)
          {
            case "1":
              show = ["area","kapsto-appcase-direct", /* "kapsto-competence",*/ "kapsto-gpndirect"];
              break;
            case "2":
              show = ["area", "kapsto-appcase", "kapsto-kind", /*"kapsto-props"*/, "kapsto-gpndirect"];
              break;
            case "2-2":
              show = ["area", "kapsto-appcase", "kapsto-kind","kapsto-details", /* "kapsto-props" */ , "kapsto-gpndirect"];
              break;
            case "3":
              show = ["area", "kapsto-appcase", "kapsto-kind","kapsto-details", /* "kapsto-props" */, "kapsto-renew", "kapsto-gpndirect"];
              break;
          }
          break;
        case "ktech":
          switch (level)
          {
            case "1":
              show = ["area", "ktech-product-area","ktech-competence" ];
              break;
            case "2":
              show = ["area", "ktech-competence", "ktech-product-area"]; //"ktech-product-choice"
              break;
          }
          break;
        case "famac":
          switch (level)
          {
            case "1":
              show = ["area", "famac-product-area", "famac-competence"];
              break;
            case "2":
              show = ["area", "famac-product-choice", "famac-competence"];
              break;
          }

          break;
        case "teku":
          switch (level)
          {
            case "1":
              show = ["area", "teku-series-direct","teku-product-direct"  /*, "teku-competence" */ ];
              break;
            case "2":
              show = ["area", "teku-product","teku-series-direct", /* "teku-rad", "teku-vol", "teku-props" */];
              break;
          }
          break;
        case "default":
          show = ["competence","info","area"];
          break;
      }

      // show the desired objects
      for (i = 0; i < show.length; i++ )
        $("#search-"+show[i]).show();
      return this.$search;
    },


    // correct markup to behave like a "search result" page to prepare updates
    // via ajaxUpdate
    correctEnv : function () {
      // blue content layout
      if ($("#container_main_content").length > 0)
      {
        $("#container_main_content").attr("id","container_content");
        if ($("div.blue-content-main").length > 0) 
          $("div.blue-content-main").removeClass("blue-content-main").addClass("content-full");
        $("div.content-full").empty();
      }      
      // "2 columns" layout
      if ($("div.content-wrc").length > 0)
      {
        var $tgt = $("div.content-wrc").parent("div");
        $tgt.empty();
        $tgt.append( $("<div class='content-full'></div>") );
//        console.log($tgt);
      }      
    },

    /// this function is called whenever a select box entry (search-plugin mode) is selected
    /// used to dispatch futher actions
    searchSelectBoxAction : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      //            alert(obj);
      switch (obj) {
        case "search-kapsto-appcase-direct":
          this.correctEnv();
          this.kapstoAppCaseHandler(evt,val,ref,$obj);
          break;
        case "search-teku-product-direct":
          this.correctEnv();
          this.tekuProductHandler(evt,val,ref,$obj);
          break;
        case "search-kapsto-appcase":
          this.kapstoAppCaseHandler(evt,val,ref,$obj);
          break;
        case "search-kapsto-additional-appcase":
          this.kapstoAdditionalAppCaseHandler(evt,val,ref,$obj);
          break;
        case "search-kapsto-gewinde-innen":
          this.kapstoInnenGewindeHandler(evt,val,ref,$obj);
          break;
        case "search-kapsto-gewinde-aussen":
          this.kapstoAussenGewindeHandler(evt,val,ref,$obj);
          break;
        case "search-teku-product":
          this.tekuProductHandler(evt,val,ref,$obj);
          break;
        case "search-teku-transport-kultur":
          this.tekuTransportKulturHandler(evt,val,ref,$obj);
          break;
        case "search-teku-jungplanzen-anzucht":
          this.tekuJungAnzuchtHandler(evt,val,ref,$obj);
          break;
        case "search-teku-dekor-form":
          this.tekuDekorFormHandler(evt,val,ref,$obj);
          break;
        case "search-teku-abmessungen-dd":
          this.tekuAbmessungenHandler(evt,val,ref,$obj);
          break;
        //          ajaxUpdate($obj.attr("href"));
        default:
          alert(obj);
      }
    },
    
    updateMode : function() {
      $("#search_site .reset").hide();
      $("#search_site .update").show();
      this.mode = "update-running";
      document.body.style.cursor='wait';
    },
    
    normalMode : function() {
      $("#search_site .reset").show();
      $("#search_site .update").hide();
      this.mode = "normal";
      document.body.style.cursor='';
    },





    /* init search components */
    initializeSearch : function() {
      // init volumen slider
      var opts = {
        value: 1,
        range : false,
        min: 1,
        max: 2,
        step: 1
      };

      $( "#search_site_container .slider" ).slider(opts );


      // init volumen slider
      var optsRange = {
        min: 1,
        max: 2,
        range : true,
        values: [ 1, 2 ],
        step: 1
      };

      $( "#search_site_container .slider-range" ).slider(optsRange );

      $("#search_site_container .ui-slider-handle").append(
        $('<div class="ui-slider-contents range">1</div>')
        );
          

        // bind "return-pressed"-check to text input fields
        var $inp = $("div.detailsearch input[type*='text']");
        $inp.keypress(this.bindToObj(function(evt){
          var code = (evt.keyCode ? evt.keyCode : evt.which);
          if (code == 13) 
            {
              var id = $(evt.target).attr("id");
              if (id.indexOf("kapsto") != -1)
                $("#search_site").searchExecuteKapstoSearch();
              if (id.indexOf("teku") != -1)
                $("#search_site").searchExecuteTekuSearch();
              evt.preventDefault();
              return false;
            }
        }));
          
          
      // bind kapsto properties to search event
      $("#search-kapsto-props input").click(function(){$("#search_site").searchExecuteKapstoSearch();});
      
      // bind teku properties to search event
      $("#search-teku-props input").click(function(){$("#search_site").searchExecuteTekuSearch();});

      // restore old state
      if (getStorageVar('kapstoGroupId')>0 && $("#search-kapsto-appcase").is(":visible")) {
        $("#search-kapsto-appcase div.selectbox.auto-follow-link").sbSetSelectionByValue(getStorageVar('kapstoGroupId'), true);
        switch (getStorageVar('kapstoGroupId')) {
          case "7":   // jung anzucht
            if (getStorageVar('tekuSerienId')>0)
              $("#search-teku-jungplanzen-anzucht div.selectbox.auto-follow-link").sbSetSelectionByValue(getStorageVar('tekuSerienId'), true);
            $("#search-teku-jungplanzen-anzucht").show();
            break;
        //          default:    alert("X:" +getStorageVar('tekuGroupId'));
        }

      }

      // show kapsto infoboxes
      $("#search_site .mini-input-info").mouseenter(function(evt){
        var $tgt=$(evt.target);
        $(".mini-input-info-container", $tgt).show();
      });
      $("#search_site .mini-input-info").mouseleave(function(evt){
        var $tgt=$(evt.target);
        $(".mini-input-info-container", $tgt).hide();
      });
      //      $("#search_site .mini-input-info-container").mouseenter(function(evt){
      //        $(evt.target).show();
      //      });
      //      $("#search_site .mini-input-info-container").mouseleave(function(evt){
      //        $(evt.target).hide();
      //      });

      // bind search boxes
      $("#search-teku-execute-search").click(this.bindToObj(this.executeTekuSearch));
      $("#search-kapsto-execute-search").click(this.bindToObj(this.executeKapstoSearch));
    },

    executeTekuSearch : function(uri) {
      //      alert("teku");
//      if (uri == undefined || uri == "" || uri==null)
        uri = this.buildTekuLink(uri);
      if (uri != null) {
        ajaxUpdate("/"+ uri );
//        alert(uri);
      }
    },

    executeKapstoSearch : function(uri) {
      //      alert("kapsto");
//      if (uri == undefined || uri == "" || uri==null)
        uri = this.buildKapstoLink(uri);
      if (uri != null) {
        ajaxUpdate("/"+ uri );
//        alert(uri);
      }
    },


    buildParam : function(name, value) {
      return "&tx_kate_pi1["+name+"]="+value;
    },


    /**
     * this function is used to reinit a *slider* component
     *      id:  id of range slider
     *    text:  text used for presentation
     *   lower:  lower boundary
     *   upper:  upper boundary
     *  lookup:  lookup table used for text insertion
     */
    initSlider : function(id, text, lower, upper, lookup) {
      var opts = {
        min: lower,
        max: upper,
        range : false,
        value : lower,
        step: 1,
        slide:this.bindToObj(function(event,ui){
          var newVal = lookup[ui.value];
          $("div.ui-slider-contents",ui.handle).text(newVal);
        }),
        stop:this.bindToObj(function(event,ui){
          var val = $( "#"+id+" .slider").slider("value");
          var lower = lookup[val];
          $( "#"+id+" div.ui-slider-contents").text(lower);
        //          this.$ele.stopTime("searchTimer");
        //          this.$ele.oneTime(2000, "searchTimer", this.bindToObj(function(){
        //            ajaxUpdate(this.buildTekuLink());
        //          }));
        this.executeTekuSearch();
        })
      };
      $( "#"+id+" .slider" ).slider(opts );
      $( "#"+id+" div.ui-slider-contents").text( ""+//getText(text,
        lookup[$( ".slider", $( "#"+id) ).slider( "value")]
        )/*)*/;
    },


    /**
     * this function is used to reinit a *range slider* component
     *      id:  id of range slider
     *    text:  text used for presentation
     *   lower:  lower boundary
     *   upper:  upper boundary
     *  lookup:  lookup table used for text insertion
     */
    initRangeSlider : function(id, text, lower, upper, lookup) {
      text="plain1";
      var opts = {
        min: lower,
        max: upper,
        range : true,
        values: [ lower, upper ],
        step: 1,
        slide:this.bindToObj(function(event,ui){
          var newVal = lookup[ui.value];
          $("div.ui-slider-contents",ui.handle).text(newVal);
        }),
        stop:this.bindToObj(function(event,ui){
          var val = $( "#"+id+" .slider-range").slider("values");
          var lower = lookup[val[0]];
          var upper = lookup[val[1]];
          var $left = $( "#"+id+" a.ui-slider-handle:first div.ui-slider-contents");
          var $right = $( "#"+id+" a.ui-slider-handle:last div.ui-slider-contents");
          $left.text(getText(text,lower));
          $right.text(getText(text,upper));
          
          this.executeTekuSearch();
        //          this.$ele.stopTime("searchTimer");
        //          this.$ele.oneTime(2000, "searchTimer", this.bindToObj(function(){
        //            ajaxUpdate(this.buildTekuLink());
        //          }));
        })
      };
      $( "#"+id+" .slider-range" ).slider(opts );
      var $left = $( "#"+id+" a.ui-slider-handle:first div.ui-slider-contents");
      var $right = $( "#"+id+" a.ui-slider-handle:last div.ui-slider-contents");
      $left.text(getText(text,lookup[$( ".slider-range", $( "#"+id) ).slider( "values", 0 )]));
      $right.text(getText(text,lookup[$( ".slider-range", $( "#"+id) ).slider( "values", 1 )]));
    },




    /////////////////////////// KAPSTO ////////////////////////////////

    /**
     * build a kapsto link according to the current search configuration
     */
    buildKapstoLink : function(uri) {
      // appCase
      // metric[1-2], whitworth[1-3], unified[1-4], american[1-6]
      // innen-durchmesser, aussen-durchmesser, wandstaerke, schluesselweite
      // vierkant[1-2], nothread, thread, loop

      // get default url
      var url = "/"+$( "#search-kapsto-appcase .selectbox" ).sbGetSelectedReference();

      // shall we override via display-mode?
      var $dm = $("#display-mode");
      if ($dm.length > 0) {
        url = $dm.attr("href");
      }

      if (uri != undefined && uri.length > 1)
        url = uri;


      // appCase
      var appCaseId = $( "#search-kapsto-appcase .selectbox" ).sbGetSelectedValue();
      url += this.buildParam("appCase", appCaseId);
      url += this.buildParam("kapstoGroupId", appCaseId);

      if ($( "#search-kapsto-gewinde-innen").is(":visible")) {
        var gewindeTyp = $( "#search-kapsto-gewinde-innen .selectbox" ).sbGetSelectedValue();
        url += this.buildParam("innen-type", gewindeTyp);

      }

      if ($( "#search-kapsto-gewinde-aussen").is(":visible")) {
        gewindeTyp = $( "#search-kapsto-gewinde-aussen .selectbox" ).sbGetSelectedValue();
        url += this.buildParam("aussen-type", gewindeTyp);

      }


      // gewinde einsammeln
      if ($( "#search-kapsto-gewinde-metric").is(":visible")) {
        var m1 = $("#kapsto-metric1").val();
        if (m1 != "")
          url += this.buildParam("metric1", m1);
        var m2 = $("#kapsto-metric2").val();
        if (m2 != "")
          url += this.buildParam("metric2", m2);
      }
      if ($( "#search-kapsto-gewinde-whitworth").is(":visible")) {
        var w1 = $("#kapsto-whitworth1").val();
        if (w1 != "")
          url += this.buildParam("whitworth1", w1);
        var w2 = $("#kapsto-whitworth2").val();
        if (w2 != "")
          url += this.buildParam("whitworth2", w2);
        var w3 = $("#kapsto-whitworth3").val();
        if (w3 != "")
          url += this.buildParam("whitworth3", w3);
      }
      if ($( "#search-kapsto-gewinde-unified").is(":visible")) {
        var u1 = $("#kapsto-unified1").val();
        if (u1 != "")
          url += this.buildParam("unified1", u1);
        var u2 = $("#kapsto-unified2").val();
        if (u2 != "")
          url += this.buildParam("unified2", u2);
        var u3 = $("#kapsto-unified3").val();
        if (u3 != "")
          url += this.buildParam("unified3", u3);
        var u4 = $("#kapsto-unified4").val();
        if (u4 != "")
          url += this.buildParam("unified4", u4);
      }
      if ($( "#search-kapsto-gewinde-american").is(":visible")) {
        var a1 = $("#kapsto-american1").val();
        if (a1 != "")
          url += this.buildParam("american1", a1);
        var a2 = $("#kapsto-american2").val();
        if (a2 != "")
          url += this.buildParam("american2", a2);
        var a3 = $("#kapsto-american3").val();
        if (a3 != "")
          url += this.buildParam("american3", a3);
        var a4 = $("#kapsto-american4").val();
        if (a4 != "")
          url += this.buildParam("american4", a4);
        var a5 = $("#kapsto-american5").val();
        if (a5 != "")
          url += this.buildParam("american5", a5);
        var a6 = $("#kapsto-american6").val();
        if (a6 != "")
          url += this.buildParam("american6", a6);
      }


      if ($( "#search-kapsto-innen-durchmesser").is(":visible")) {
        var id = $("#kapsto-innen-durchmesser").val();
        if (id != "")
          url += this.buildParam("innen-durchmesser", id);
      }
      if ($( "#search-kapsto-aussen-durchmesser").is(":visible")) {
        var ad = $("#kapsto-aussen-durchmesser").val();
        if (ad != "")
          url += this.buildParam("aussen-durchmesser", ad);
      }
      if ($( "#search-kapsto-wandstaerke").is(":visible")) {
        var ws = $("#kapsto-wandstaerke").val();
        if (ws != "")
          url += this.buildParam("wandstaerke", ws);
      }
      if ($( "#search-kapsto-schluesselweite").is(":visible")) {
        var sw = $("#kapsto-schluesselweite").val();
        if (sw != "")
          url += this.buildParam("schluesselweite", sw);
      }
      if ($( "#search-kapsto-nennweite").is(":visible")) {
        var nw = $("#kapsto-nennweite").val();
        if (nw != "")
          url += this.buildParam("nennweite", nw);
      }
      if ($( "#search-kapsto-vierkant").is(":visible")) {
        var vk1 = $("#kapsto-vierkant1").val();
        if (vk1 != "")
          url += this.buildParam("vierkant1", vk1);
        var vk2 = $("#kapsto-vierkant2").val();
        if (vk2 != "")
          url += this.buildParam("vierkant2", vk2);
      }

      // kapsto properties
      if ($("#search-kapsto-props").is(":visible"))
      {
        if ($("#kapsto-nothread").is(":checked"))
          url += this.buildParam("nothread", 1);
        if ($("#kapsto-thread").is(":checked"))
          url += this.buildParam("thread", 1);
        if ($("#kapsto-loop").is(":checked"))
          url += this.buildParam("loop", 1);
      }

      return url;
    },



    kapstoAppCaseHandler : function(evt,val,ref,$obj) {
      //      alert(val);
      // update UI definition
      var updateUI = function() {
        if (val == 10) { // bohrung
          this.kapstoShow(["innen-durchmesser", "execute-search"]);
          $("#search_site").css("height","355px");
        }else if (val == 11) { // bolzen/stift
          this.kapstoShow(["aussen-durchmesser", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 8) { // innengewinde
          this.kapstoShow(["gewinde-innen","props", "execute-search"]);
          // gewinde ausgewählt?
          //          chosen = $("#search-kapsto-gewinde .selectbox").sbGetSelectedValue() != undefined;
          $("#search_site").css("height","435px");
        }
        else if (val == 9) { // aussengewinde
          this.kapstoShow(["gewinde-aussen","props", "execute-search"]);
          //          chosen = $("#search-kapsto-gewinde .selectbox").sbGetSelectedValue() != undefined;
          $("#search_site").css("height","435px");
        }
        else if (val == 18) { // sechskant aussen
          this.kapstoShow(["schluesselweite", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 17) { // sechskant innen
          this.kapstoShow(["schluesselweite", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 15) { // vierkant aussen
          this.kapstoShow(["vierkant", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 14) { // vierkant innen
          this.kapstoShow(["vierkant", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 16) { // flansch
          this.kapstoShow(["nennweite", "execute-search"]);
          $("#search_site").css("height","355px");
        }
        else if (val == 207) { // weitere
          this.kapstoShow(["additional-appcase"]);
          $("#search_site").css("height","360px");
        }
        else if (val == 13) { // rohr+schlauch aussen
          this.kapstoShow(["aussen-durchmesser", "execute-search"]);
          $("#search_site").css("height","415px");
        }
        else if (val == 12) { // rohr+schlauch innen
          this.kapstoShow(["innen-durchmesser","wandstaerke", "execute-search"]);
          $("#search_site").css("height","415px");
        }
        else if (val == 19) { // blechöffnung
          this.kapstoShow(["innen-durchmesser", "execute-search"]);
          $("#search_site").css("height","355px");
        }
      }

      // call update function
      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
      else {
        this.bindToObj(updateUI());
      //        alert($("#display-mode").attr("mode"));
      // determin ref accorting to current mode
      }

    },

    kapstoAdditionalAppCaseHandler : function(evt,val,ref,$obj) {

      // update UI definition
      var updateUI = function() {
//        if (val == 36) { // sae stecker
//        }
//        else if (val == 20) { // schmiernippel
//        }
//        else if (val == 21) { // steck/schraub
//        }
//        else if (val == 22) { // ringstutzen
//        }
//        else if (val == 23) { // wellenschutz
//        }
//        else if (val == 24) { // wellenschutz
//        }
//        else
//          alert("kapstoAdditionalAppCaseHandler, val = "+val);
      }
      
      // call update function
      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
      else {
        // determin ref accorting to current mode
        this.bindToObj(updateUI());
//        alert($("#display-mode").attr("mode"));
      }

    },

    kapstoInnenGewindeHandler : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      var gewinde = "";

      switch (""+val) {
        case "2": // feingewinde
        case "3":
          gewinde="gewinde-metric";
          $("#search_site").css("height","470px");
          break;
        case "8":
          gewinde="gewinde-whitworth";
          $("#search_site").css("height","480px");
          break;
        case "7":
          gewinde="gewinde-unified";
          $("#search_site").css("height","500px");
          break;
        case "1":
          gewinde="gewinde-american";
          $("#search_site").css("height","490px");
          break;
          default: 
          $("#search_site").css("height","475px");
          break;
      }


      this.kapstoShow(["props", "execute-search", "gewinde-innen", gewinde]);
      var updateUI = function() {
      }
      this.bindToObj(updateUI());
    //      if (ref != null) {
    //        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
    //      }
    },

    kapstoAussenGewindeHandler : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      var gewinde = "";

      switch (""+val) {
        case "2": // feingewinde
        case "3":
          gewinde="gewinde-metric";
          $("#search_site").css("height","470px");
          break;
        case "8":
          gewinde="gewinde-whitworth";
          $("#search_site").css("height","480px");
          break;
        case "7":
          gewinde="gewinde-unified";
          $("#search_site").css("height","500px");
          break;
        case "1":
          gewinde="gewinde-american";
          $("#search_site").css("height","490px");
          break;
      }


      this.kapstoShow(["props", "execute-search", "gewinde-aussen", gewinde]);
      var updateUI = function() {
      }
      this.bindToObj(updateUI());
    //      if (ref != null) {
    //        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
    //      }
    },



    kapstoShow : function(data) {
      var textWidgets=["innen-durchmesser", "aussen-durchmesser","wandstaerke",
                       "schluesselweite","vierkant","nennweite","metric1","metric2",
                       "whitworth1","whitworth2","whitworth3",
                       "unified1","unified2","unified3","unified4",                       
                       "american1","american2","american3","american4","american5","american6",
                     ];
      for (var j = 0; j<textWidgets.length; j++)
        $("#kapsto-"+textWidgets[j]).val("");

      var kapstoAllWidgets=["additional-appcase","gewinde-innen", "gewinde-aussen","gewinde-metric","gewinde-whitworth","gewinde-unified","gewinde-american","innen-durchmesser", "aussen-durchmesser","wandstaerke","schluesselweite","vierkant","nennweite","execute-search","props"];
      for (j = 0; j<kapstoAllWidgets.length; j++)
        $("#search-kapsto-"+kapstoAllWidgets[j]).hide();

      if ($.isArray(data))
        for (var i = 0; i<data.length; i++)
          $("#search-kapsto-"+data[i]).show();
    },


    /////////////////////////// TEKU ////////////////////////////////



    /**
     * build a teku link according to the current search configuration
     */
    buildTekuLink : function(uri) {
      // prodGroup
      // minDurchmesser, maxDurchmesser, minVolumen, maxVolumen
      // abmessungen-dd, dekorForm
      // etikettenschlitz, tiefgezogen, spritzguss

      // get default url
      var url = "/"+$( "#search-teku-product .selectbox" ).sbGetSelectedReference();

      // shall we override via display-mode?
      var $dm = $("#display-mode");
      if ($dm.length > 0) {
        url = $dm.attr("href");
      }

      if (uri != undefined && uri.length > 1)
        url = uri;


      // product group
      var group = $( "#search-teku-product .selectbox" ).sbGetSelectedValue();
      url += this.buildParam("prodGroup", group);


      // durchmesser range slider
      if ($( "#search-teku-durchmesser").is(":visible")) {
        url += this.buildParam("minDurchmesser",$( ".slider-range", $( "#search-teku-durchmesser") ).slider( "values", 0 ));
        url += this.buildParam("maxDurchmesser",$( ".slider-range", $( "#search-teku-durchmesser") ).slider( "values", 1 ));
      }

      // volumen range slider
      if ($( "#search-teku-volumen").is(":visible")) {
        url += this.buildParam("minVolumen",$( ".slider-range", $( "#search-teku-volumen") ).slider( "values", 0 ));
        url += this.buildParam("maxVolumen",$( ".slider-range", $( "#search-teku-volumen") ).slider( "values", 1 ));
      }

      // abmessungen range slider
      if ($( "#search-teku-abmessungen").is(":visible")) {
        url += this.buildParam("minAbmessungen",$( ".slider-range", $( "#search-teku-abmessungen") ).slider( "values", 0 ));
        url += this.buildParam("maxAbmessungen",$( ".slider-range", $( "#search-teku-abmessungen") ).slider( "values", 1 ));
      }

      // abmessungen dd
      if ($( "#search-teku-abmessungen-dd").is(":visible")) {
        var abm = $( "#search-teku-abmessungen-dd .selectbox" ).sbGetSelectedValue();
        url += this.buildParam("abmessungen", abm);
      }

      // dekor-form dd
      if ($( "#search-teku-dekor-form").is(":visible")) {
        var form = $( "#search-teku-dekor-form .selectbox" ).sbGetSelectedValue();
        url += this.buildParam("dekorForm", form);
      }

      // search-teku-geeignet-fuer
      if ($( "#search-teku-geeignet-fuer").is(":visible")) {
        url += this.buildParam("geeignet-fuer",$( ".slider", $( "#search-teku-geeignet-fuer") ).slider( "value"));
      }

      // search-teku-nutzen-volumen
      if ($( "#search-teku-nutzen-volumen").is(":visible")) {
        url += this.buildParam("nutzen-volumen-min",$( ".slider-range", $( "#search-teku-nutzen-volumen") ).slider( "values", 0 ));
        url += this.buildParam("nutzen-volumen-max",$( ".slider-range", $( "#search-teku-nutzen-volumen") ).slider( "values", 1 ));
      }

      // abmessungen range slider
      if ($( "#search-teku-toepfe-steige").is(":visible")) {
        url += this.buildParam("toepfe-steige",$( ".slider", $( "#search-teku-toepfe-steige") ).slider( "value"));
      }

      // abmessungen range slider
      if ($( "#search-teku-pflanzen-tray").is(":visible")) {
        url += this.buildParam("pflanzen-tray",$( ".slider", $( "#search-teku-pflanzen-tray") ).slider( "value"));
      }


      // teku properties
      if ($("#search-teku-props").is(":visible"))
      {
        if ($("#teku-etikettenschlitz").is(":checked"))
          url += this.buildParam("etikettenschlitz", 1);
        if ($("#teku-tiefgezogen").is(":checked"))
          url += this.buildParam("tiefgezogen", 1);
        if ($("#teku-spritzguss").is(":checked"))
          url += this.buildParam("spritzguss", 1);
      }

      return url;
    },

    /**
     * this function enables the required search box components for the teku product search box
     */
    tekuProductHandler : function(evt,val,ref,$obj) {
      var updateUI = function() {
        //        if (val == 11) { // bolzen/stift

        if (val == 1) {   // Rund & Container
          this.tekuShow(["execute-search",  "props", "durchmesser", "volumen"]);
          this.initRundContainerWidgets();
          $("#search_site").css("height","485px");
        }
        else if (val == 2) {   // Vierkant
          this.tekuShow(["execute-search",  "props", "abmessungen-dd", "volumen"]);
          this.initVierkantWidgets();
          $("#search_site").css("height","480px");
        }
        else if (val == 3) {  // Stützgitter
          this.tekuShow();
          $("#search_site").css("height","290px");
        }
        else if (val == 4) {  // Ampeln & Schalen
          this.tekuShow(["execute-search",  "abmessungen", "volumen"]);
          this.initAmpelnSchalenWidgets();
          $("#search_site").css("height","398px");
        }
        else if (val == 5) {  // Dekor
          this.tekuShow(["dekor-form"]);
          $("#search_site").css("height","320px");
        }
        else if (val == 6) {   // TRansport Kultur
          //          if (getStorageVar('tekuSerienId')>0)
          //            $("#search-teku-transport-kultur div.selectbox.auto-follow-link").sbSetSelectionByValue(getStorageVar('tekuSerienId'), true);
          this.tekuShow(["transport-kultur", "execute-search",  "geeignet-fuer","toepfe-steige"]);

          this.initTransportKulturWidgets();
          $("#search_site").css("height","445px");
        }
        else if (val == 7) {   // jung anzucht
          //          if (getStorageVar('tekuSerienId')>0)
          //            $("#search-teku-jungplanzen-anzucht div.selectbox.auto-follow-link").sbSetSelectionByValue(getStorageVar('tekuSerienId'), true);
          this.tekuShow(["jungplanzen-anzucht", "execute-search", "pflanzen-tray", "nutzen-volumen"]);
          this.initJungAnzuchtWidgets();
          $("#search_site").css("height","445px");
        }
        else if (val == 8) {   // druck & etikettierung
          this.tekuShow();
          $("#search_site").css("height","226px");
        }
      }

      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
      else {
        this.bindToObj(updateUI());
      }

    },

    tekuTransportKulturHandler : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      //      alert(obj);
      var updateUI = function() {

      }

      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
    },
    tekuJungAnzuchtHandler : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      //      alert(obj);
      var updateUI = function() {

      }

      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
    },
    
    tekuAbmessungenHandler : function(evt,val,ref,$obj) {
      var obj = $obj.sbGetId();
      //      alert(obj);
      this.executeTekuSearch();
//      var updateUI = function() {
//
//      }
//
//      if (ref != null) {
//        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
//      }
    },


    tekuDekorFormHandler : function(evt,val,ref,$obj) {
      var updateUI = function() {
        if (val == 1) {   // rund
          //          this.tekuShow(abmessungen, props, durchmesser, volumen, laenge, breite,dekor_form, transp_kultur, jung_anzucht);
          this.tekuShow(["execute-search", "dekor-form", "durchmesser", "volumen"]);
          this.initDekorWidgets();
          $("#search_site").css("height","455px");
        }
        else if (val == 2) {   // quadratisch
          this.tekuShow(["execute-search", "dekor-form", "abmessungen", "volumen"]);
          this.initDekorWidgets();
          $("#search_site").css("height","455px");
        }
      }

      if (ref != null) {
        ajaxUpdate("/"+ ref, this.bindToObj(updateUI) );
      }
      else {
        this.bindToObj(updateUI());
      }
    },


    tekuShow : function(data) {
      var tekuAllWidgets=["execute-search", "abmessungen", "abmessungen-dd", "props", "durchmesser","volumen","laenge","breite","hoehe","dekor-form",
      "transport-kultur", "jungplanzen-anzucht", "geeignet-fuer", "toepfe-steige", "steige-lage", "nutzen-volumen", "pflanzen-tray", "pflanzen-lage"];
      for (var j = 0; j<tekuAllWidgets.length; j++)
        $("#search-teku-"+tekuAllWidgets[j]).hide();

      if ($.isArray(data))
        for (var i = 0; i<data.length; i++)
          $("#search-teku-"+data[i]).show();
    },


    /**
     * initialize widgets for "Rundtöpfe und Container"
     */
    initRundContainerWidgets : function() {
      // init teku durchmesser slider
      this.tekuDurchmesserLookup = [-1,0, 8,13,22,">22"];
      this.initRangeSlider ("search-teku-durchmesser", "teku-durchmesser-span",1,5,this.tekuDurchmesserLookup );

      // init teku volumen slider
      this.tekuVolumenLookup = [-1,0, "0,2", "0,5", "1", "2", "5", ">5"];
      this.initRangeSlider ("search-teku-volumen", "teku-volumen-span",1,7,this.tekuVolumenLookup );
    },

    /**
     * initialize widgets for "Vierkanttöpfe"
     */
    initVierkantWidgets : function() {
      // init teku abmessungen
      //      this.tekuAbmessungenLookup = [-1,"7×7", "8×8; 8,5×8,5", "9×9", "10×10; 11×11; 13×13; 15×15"];
      //      this.initSlider ("search-teku-abmessungen", "teku-volumen-span",1,4,this.tekuAbmessungenLookup );

      this.tekuAbmessungenLookup = [{
        "uid": 1,
        "value":"7×7"
      },

      {
        "uid": 2,
        "value":"8×8; 8,5×8,5"
      },

      {
        "uid": 3,
        "value":"9×9"
      },

      {
        "uid": 4,
        "value":"10×10; 11×11; 13×13; 15×15"
      }];
      $("#search-teku-abmessungen-dd .selectbox.search-plugin").sbRepopulate(this.tekuAbmessungenLookup);

      // init teku volumen slider
      this.tekuVolumenLookup = [-1,0, "0.25", "0.5", ">0.5"];
      this.initRangeSlider ("search-teku-volumen", "teku-volumen-span",1,4,this.tekuVolumenLookup );
    },

    /**
     * initialize widgets for "Rundtöpfe und Container"
     */
    initAmpelnSchalenWidgets : function() {
      // init teku abmessungen
      this.tekuAbmessungenLookup = [-1,0,20,27,">27"];
      this.initRangeSlider ("search-teku-abmessungen", "teku-volumen-span",1,4,this.tekuAbmessungenLookup );

      // init teku volumen slider
      this.tekuVolumenLookup = [-1,0, 4000, 5000, 7000,  ">7000"];
      this.initRangeSlider ("search-teku-volumen", "teku-volumen-span",1,5,this.tekuVolumenLookup );
    },


    /**
     * initialize widgets for "Dekor / Rund"
     */
    initDekorWidgets : function() {
      // init teku abmessungen
      this.tekuAbmessungenLookup = [-1,0, 20,30, 40, ">40"];
      this.initRangeSlider ("search-teku-abmessungen", "teku-volumen-span",1,5,this.tekuAbmessungenLookup );

      // init teku volumen slider
      this.tekuVolumenLookup = [-1,0, 3, 5, 20,  ">20"];
      this.initRangeSlider ("search-teku-volumen", "teku-volumen-span",1,5,this.tekuVolumenLookup );

      // init teku durchmesser slider
      this.tekuDurchmesserLookup = [-1,0, 8,13,22,">22"];
      this.initRangeSlider ("search-teku-durchmesser", "teku-durchmesser-span",1,5,this.tekuDurchmesserLookup );

    },


    /**
     * initialize widgets for "Transport und Kulturtrays"
     */
    initTransportKulturWidgets : function() {
      // init teku volumen slider
      this.tekuAbmessungenLookup = [-1,0, 5,10,20];
      this.initRangeSlider ("search-teku-abmessungen", "teku-abmessungen-span",1,4,this.tekuAbmessungenLookup );

      // init geeignet fuer
      this.tekuGeeignetFuerLookup = [-1,"<=8", "8-13", "13-22", ">22"];
      this.initSlider ("search-teku-geeignet-fuer", "teku-geeignet-fuer-span",1,4,this.tekuGeeignetFuerLookup );

      // init teku toepfe-steige
      this.tekuToepfeSteigeLookup = [-1,"<8", "8-10", "10-15",">15"];
      this.initSlider ("search-teku-toepfe-steige", "teku-toepfe-steige-span",1,4,this.tekuToepfeSteigeLookup );

      // init teku durchmesser slider
      this.tekuSteigenLageLookup = [-1,"3", "4","5","6-8",">8"];
      this.initSlider ("search-teku-steige-lage", "teku-steige-lage-span",1,5,this.tekuSteigenLageLookup );

    },


    /**
     * initialize widgets for "Transport und Kulturtrays"
     */
    initJungAnzuchtWidgets : function() {
      // init teku volumen slider
      this.tekuAbmessungenLookup = [-1,0, 5,10,20];
      this.initRangeSlider ("search-teku-abmessungen", "teku-abmessungen-span",1,4,this.tekuAbmessungenLookup );

      // init teku teku-nutzen-volumen-span
      this.tekuNutzenVolumenLookup = [-1,"<50",50,100,500,">500"];
      this.initRangeSlider ("search-teku-nutzen-volumen", "teku-nutzen-volumen-span",1,5,this.tekuNutzenVolumenLookup );

      // init geeignet fuer
      this.tekuGeeignetFuerLookup = [-1,"<=8", "8-13", "13-22", ">22"];
      this.initSlider ("search-teku-geeignet-fuer", "teku-geeignet-fuer-span",1,3,this.tekuGeeignetFuerLookup );

      // init teku toepfe-steige
      this.tekuToepfeSteigeLookup = [-1,"<50", "50-100", ">100"];
      this.initSlider ("search-teku-pflanzen-tray", "teku-pflanzen-tray-span",1,3,this.tekuToepfeSteigeLookup );

      // init teku pflanzen-tray
      this.tekuSteigenLageLookup = [-1,"<200","200-500",">500"];
      this.initSlider ("search-teku-pflanzen-lage", "teku-pflanzene-lage-span",1,3,this.tekuSteigenLageLookup );

    }
  });
})(jQuery);

