/** Funktionserweiterungen Fu Dao 
  *
  * @date       23.05.2008   
  * @version    0.001
  * @author     Bernd Göbel <web@strich-komma.de>
  * @depend     xlib_prototype.js, xlib_functions.js  
  *   
  */


  /** Positioniert die Symbole am Fuß der Seite **/
  function fudao_signs_obj (){
    var topPos       = 150 // padding-top der NavBox
    var bottomValue  = 0 //padding pagewrapper abziehen 
    var thisObject = this;
    
    this.init = function() {
      var docHeight = get_documentHeight();
      var scrollTop = get_scrollTop();
      set_fudao_signs(docHeight, scrollTop);
      //self.onresize = thisObject.init();
    };
    /** **/
    var set_fudao_signs = function( docHeight, scrollTop ) {
      docHeight -= topPos;
      docHeight -= bottomValue;
      //IE Abzug
      var ieDif = (document.uniqueID && window.createPopup ) ? 40 : 0;
      if( document.getElementById('mainNavigation') ){
        var e = document.getElementById('mainNavigation');
        e.style.height = docHeight + scrollTop - ieDif + 'px';
        e.className = 'mainNavigationImage';
      }
      if( document.getElementById('subNavigation') ){
        var e = document.getElementById('subNavigation');
        e.style.height = docHeight + scrollTop - ieDif  + 'px';
        e.className = 'subNavigationImage';
      }
    };
    /** Dokumentenhöhe **/
    var get_documentHeight = function () {
      var output_Integer = 0;
      if( document.documentElement.clientHeight ){
        output_Integer = parseInt(document.documentElement.clientHeight);
      }
      if( window.innerHeight ){
        output_Integer = parseInt( window.innerHeight );
      }
      return output_Integer;
    };
    
    var get_scrollTop = function () {
      var output_Integer = 0;
      if(typeof self.pageYOffset != 'undefined'){
        output_Integer = parseInt(self.pageYOffset);
      }
      else{
        var obj = (self.document.compatMode && self.document.compatMode == "CSS1Compat") ?
        self.document.documentElement : self.document.body || null;
        output_Integer = parseInt(obj.scrollTop);
      }
      return output_Integer;
    }
  }

/* -------------------------------------------------------------------------- 
  * Slide Show for the Product Site
 -------------------------------------------------------------------------- */
  function fudao_slideShow_obj(){
    var viewBoxID     = 'image_slideShow';
    var navBoxID      = 'nav_image_slideShow';
    var currentFolder = 'popup_images';
    var newFolder     = 'info_images';
    var thisObject    = this;
    
    this.init = function() {
      if ( !document.getElementById(navBoxID) ) return false;
      var e = document.getElementById(navBoxID);
      for ( var i = 0, elements = e.getElementsByTagName('a'), l = elements.length; i < l ; i++ ){
        element = elements[i];
        element.onclick = function () {
          thisObject.change_image(this);
          return false;
        }
      }
      if ( i > 1 ) e.style.display = 'inline';
    }
    this.change_image = function ( e ) {
      if ( !document.getElementById(viewBoxID) ) return false;
      var tmp_src = e.getElementsByTagName('img')[0].src;
      var myRegEx = new RegExp(currentFolder, "g");
      tmp_src = tmp_src.replace(myRegEx, newFolder);
      document.getElementById(viewBoxID).getElementsByTagName('img')[0].src = tmp_src;
    }
  }

  /* -------------------------------------------------------------------------- 
  * filter Teapropertys
   ------------------------------------------------------------------------- */
 
   function fudao_filter_obj(){
    var thisObject         = this;
    var filterBoxID        = 'filterBox';
    var filterBox          = false;
    var filterListID       = 'filterList';
    var filterList         = false;
    var filterQualityListID= 'filter_quality';
    var filterQualityList  = false;
    var filterMoodListID   = 'filter_mood';
    var filterMoodList     = false;
    var productListID      = 'productList';
    var productList        = false;
    var resetButtonID      = 'reset';
    var resetButton        = false;
    
    
    var selectedFilter = { quality: 'quality',
                           mood   : 'mood'
                          }
    
    this.init = function() {
      if ( !document.getElementById(filterBoxID) ) return false;
      filterBox = document.getElementById(filterBoxID);
      if ( !document.getElementById(filterListID) ) return false;
      filterList = document.getElementById(filterListID);
      if ( !document.getElementById(filterQualityListID) ) return false;
      filterQualityList = document.getElementById(filterQualityListID);
      if ( !document.getElementById(filterMoodListID) ) return false;
      filterMoodList = document.getElementById(filterMoodListID);
      if ( !document.getElementById(productListID) ) return false;
      productList = document.getElementById(productListID);
      if ( !document.getElementById(resetButtonID) ) return false;
      resetButton = document.getElementById(resetButtonID);
      
      filterBox.style.display = 'block';
      thisObject.initialise();
    }
    
    this.initialise = function(){
      var tmp_array = new Array();
      for ( var i= 0, elements = filterQualityList.getElementsByTagName('ul')[0].getElementsByTagName('li'), l = elements.length; i < l; i++){
        tmp_array.push(elements[i]);
      }
      for ( var i= 0, elements = filterMoodList.getElementsByTagName('ul')[0].getElementsByTagName('li'), l = elements.length; i < l; i++){
        tmp_array.push(elements[i]);
      }
      for ( var i= 0, elements = tmp_array, l = elements.length; i < l; i++){
        element = elements[i];
        element.onclick = function() {
          thisObject.set_filter(this);
          return false;
        }
      }
      resetButton.onclick = function (){
        thisObject.reset_filter();
        return false;
      }
    }
    
    this.set_filter = function ( me ){
      var tmp_filter = me.id.split('_');
      var parent     = me.parentNode;
      for ( var i= 0, elements = parent.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        element.getElementsByTagName('a')[0].className = '';
      }
      me.getElementsByTagName('a')[0].className = 'current';
      tmp_filter     = tmp_filter[0];
      selectedFilter[tmp_filter] = me.id;
      for ( var i= 0, elements = productList.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        element.className = '';
        var product = element.getElementsByTagName('dl')[0];
        if( product.className.indexOf( selectedFilter.quality ) > -1 &&  product.className.indexOf( selectedFilter.mood )> -1  ){
        }
        else{
           element.className = 'passiv';
        }
      }
    }
    this.reset_filter = function(){
      for ( var i= 0, elements = filterList.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        element.getElementsByTagName('a')[0].className = '';
      }
       for ( var i= 0, elements = productList.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        element.className = '';
      }
      selectedFilter = { quality: 'quality',
                           mood   : 'mood'
                          }
    }
  }
  
  /* -------------------------------------------------------------------------- 
  * SlideShow Frontpage 1. Version
    ------------------------------------------------------------------------ */
 
   function fudao_productShow_obj(){
    var thisObject       = this;
    var imageBoxID       = 'productBoxHome';
    var imageBox         = false;
    var imageBoxWidth    = false;
    var moveElementID    = 'productListHome';
    var moveElement      = false;
    var button_goNextID  = 'go_next';
    var button_goNext    = false;
    var button_goPreviousID = 'go_previous';
    var button_goPrevious   = false;
    var newListWidth        = 0; // breite der Produkliste, wird aus dem Listen Offsset errechnet
    /** move Element **/
    var movement      = false;
    var moving        = false;
    var distance      = 350;
    var interval      =  10;

    var final_x       = false;
    
    this.init = function() {
      if ( !document.getElementById(imageBoxID) ) return false;
      if ( !document.getElementById(moveElementID) ) return false;
      if ( !document.getElementById(button_goNextID) ) return false;
      if ( !document.getElementById(button_goPreviousID) ) return false;
      imageBox          = document.getElementById(imageBoxID);
      moveElement       = document.getElementById(moveElementID);
      button_goNext     = document.getElementById(button_goNextID);
      button_goPrevious = document.getElementById(button_goPreviousID);
      imageBoxWidth     = parseInt(imageBox.offsetWidth);
      thisObject.normalise_listWidth();
      if (!moveElement.style.left) {
        moveElement.style.left = "0px";
      }
      button_goPrevious.className     = 'go_previousPassive';
      button_goNext.style.display     = 'block';
      button_goPrevious.style.display = 'block';
      
      button_goNext.getElementsByTagName('a')[0].onclick = function (){
        thisObject.go_next();
        return false;
      }
      button_goPrevious.getElementsByTagName('a')[0].onclick = function (){
        thisObject.go_previous();
        return false;
      }
    }
    
    this.normalise_listWidth = function (){
      for ( var i= 0, elements = moveElement.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        newListWidth += parseInt(element.offsetWidth);
      }
      moveElement.style.width = newListWidth + 'px';
    }
    
    /** Initialise go left/right**/
    this.go_previous = function (){
      if ( moving == true ) return false;
        final_x = parseInt(moveElement.style.left) + distance;
        if( final_x > 0 )  {
          final_x = 0 ; 
          button_goPrevious.className = 'go_previousPassive';
        }
        if( parseInt(moveElement.style.left) < 0) {
          thisObject.move_element();
          moving = true;
          button_goNext.className = '';
        }
        else {
          button_goPrevious.className = 'go_previousPassive';
        }
        if( parseInt(moveElement.style.left) > ( newListWidth*-1 + imageBoxWidth ) ) {
        }
      }
      
    this.go_next = function (){
      if ( moving == true ) return false;
      final_x = parseInt(moveElement.style.left) - distance;
      if( final_x < newListWidth*-1 + imageBoxWidth)  {
        final_x = ( newListWidth*-1 + imageBoxWidth ) ; 
        button_goNext.className = 'go_nextPassive';
      }
      if( parseInt(moveElement.style.left) > ( newListWidth*-1 + imageBoxWidth ) ) {
        button_goPrevious.className = '';
        thisObject.move_element();
        moving = true;
      }
    }

    /** Moving **/
    this.move_element = function () {
      if (movement) {
        clearTimeout(movement);
      }
      var xPos = parseInt(moveElement.style.left);
      if (xPos == final_x) {
        moving = false;
      }
      
      if (xPos < final_x) {
        var dist = Math.ceil((final_x - xPos)/10);
        xPos = xPos + dist;
      }
      if (xPos > final_x) {
        var dist = Math.ceil((xPos - final_x)/10);
        xPos = xPos - dist;
      }
      moveElement.style.left = xPos + "px";
      movement = window.setTimeout(thisObject.move_element,interval);
    }
  }
  
  /* -------------------------------------------------------------------------- 
  * SlideShow Frontpage 2. Version
    ------------------------------------------------------------------------ */
 
   function fudao_productSlide_obj(){
    var thisObject       = this;
    var imageBoxID       = 'productBoxHome';
    var imageBox         = false;
    var imageBoxWidth    = false;
    var moveElementID    = 'productListHome';
    var moveElement      = false;
    var moveElementsWidth   = 0;
    var thumbnailElementID    = 'productListHomeThumb';
    var thumbnailElement      = false;
    var newListWidth        = 0; // breite der Produkliste, wird aus dem Listen Offsset errechnet
    /** move Element **/
    var movement      = false;
    var moving        = false;
    var distance      = 350;
    var interval      =  10;

    var final_x       = 0;
    
    this.init = function() {
      if ( !document.getElementById(imageBoxID) ) return false;
      if ( !document.getElementById(moveElementID) ) return false;
      if ( !document.getElementById(thumbnailElementID) ) return false;
      
      imageBox          = document.getElementById(imageBoxID);
      moveElement       = document.getElementById(moveElementID);
      moveElementsWidth = moveElement.getElementsByTagName('li')[0].offsetWidth;
      thumbnailElement  = document.getElementById(thumbnailElementID);
      imageBoxWidth     = parseInt(imageBox.offsetWidth);
      thisObject.normalise_listWidth();
      if (!moveElement.style.left) {
        moveElement.style.left = "0px";
      }

      
      for ( var i = 0, elements = thumbnailElement.getElementsByTagName('a'), l = elements.length; i < l; i++ ){
        elements[i].onmouseover = function() {
          thisObject.go_parent(this);
        }
      }
     
      if (!moveElement.style.left) {
        moveElement.style.left = "0px";
      }
      
      thumbnailElement.style.display = 'block';
    }
    
    this.normalise_listWidth = function (){
      for ( var i= 0, elements = moveElement.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        newListWidth += parseInt(element.offsetWidth);
      }
      moveElement.style.width = newListWidth + 'px';
    }
    
    this.go_parent = function (me){
      var tmp_href = me.href; 
      for ( var i = 0, elements = thumbnailElement.getElementsByTagName('a'), l = elements.length; i < l; i++ ){
        if( me.href == elements[i].href ){
          var position = i;
          if( i == l-1 ) 
          position--;
          break;
          }
        }
        final_x = position*moveElementsWidth*-1;
         if (movement) {
          clearTimeout(movement);
        }
        thisObject.move_element();
    }
    
    this.normalise_listWidth = function (){
      for ( var i= 0, elements = moveElement.getElementsByTagName('li'), l = elements.length; i < l; i++){
        element = elements[i];
        newListWidth += parseInt(element.offsetWidth);
      }
      moveElement.style.width = newListWidth + 'px';
    }
    
   
    /** Moving **/
    this.move_element = function () {
      if (movement) {
        clearTimeout(movement);
      }
      var xPos = parseInt(moveElement.style.left);
      if (xPos == final_x) {
        moving = false;
      }
      
      if (xPos < final_x) {
        var dist = Math.ceil((final_x - xPos)/10);
        xPos = xPos + dist;
      }
      if (xPos > final_x) {
        var dist = Math.ceil((xPos - final_x)/10);
        xPos = xPos - dist;
      }
      moveElement.style.left = xPos + "px";
      movement = window.setTimeout(thisObject.move_element,interval);
    }
  }
  
  /* -------------------------------------------------------------------------- 
  * Cart
    ------------------------------------------------------------------------ */
  function fudao_cart_obj(){
    var thisObject       = this;
    
    this.remove_entry = function (me){
      if ( getNextNode( me.parentNode,'td').getElementsByTagName('input')[0] ){
        getNextNode( me.parentNode,'td').getElementsByTagName('input')[0].checked = true;
        //me.parentNode.parentNode.className = 'remove';
        document.forms[0].submit();
      };
      return false;
    }
  }
  
  /* -------------------------------------------------------------------------- 
  * Produktinfo Beschreibungen einblenden
    ------------------------------------------------------------------------ */
  function fudao_manage_description_obj(){
    var thisObject       = this;
    var bodyClass        = 'products_info';
    var headTag          = 'h3';
    var p_array          = new Array();
    
    this.init = function (){
      if (document.getElementsByTagName('body')[0].className != bodyClass ) return false;
      for ( var i = 0, elements = document.getElementsByTagName('h3'), l = elements.length; i < l; i++){
        element = elements[i];
        if( element.className != 'order' ){
          element.onclick = function ( ){
            thisObject.manage_description( this );
          }
          element.style.cursor = 'pointer';
        }
      }
    }
    this.manage_description = function ( me ){
      thisObject.grab_p_tag( me )
      for (var i = 0, elements = p_array, l = elements.length; i < l; i++){
        element = elements[i];
        if( element.style.display == 'block'){
          element.style.display = 'none';
        }
        else {
          element.style.display = 'block';
        }
      }
    }
    this.grab_p_tag = function (me){
      p_array = [];
      count = 0;
      var nextNode = me.nextSibling;
      while (nextNode != null && count < 100 ) {
        if ( nextNode.nodeType == 1 ){
          if ( nextNode.tagName.toLowerCase() != 'h3' && nextNode.id != 'shopping_info'){
            p_array.push(nextNode);
          }
          else {
            break;
          }
        }
        nextNode = nextNode.nextSibling;
        count++;
      }
    }
  }
  
 /* -------------------------------------------------------------------------- 
  * Intialise
 -------------------------------------------------------------------------- */
  // Positionierhilfe für das Layout, zeichen in den Farbbalken
  fudao_signs       = new fudao_signs_obj();
  // Produktbildergallerie Produktdetail
  fudao_slideShow   = new fudao_slideShow_obj();
  // Qualitätsfilter Übersichtsseite
  fudao_filter      = new fudao_filter_obj();
  // Slideshow Startseite
  //fudao_productShow = new fudao_productShow_obj();
  fudao_productShow = new fudao_productSlide_obj();
  
  
  // entfernt u.a. Einträge aus Cart
  fudao_cart        = new fudao_cart_obj();
  // ein- und ausblenden der Beschreibungen
  fudao_manageDescription = new fudao_manage_description_obj(); 
  
  window.onresize = fudao_signs.init;
  window.onscroll = fudao_signs.init;

  addLoadEvent ( fudao_signs.init );
  addLoadEvent ( fudao_slideShow.init );
  addLoadEvent ( fudao_filter.init );
  addLoadEvent ( fudao_productShow.init );
  addLoadEvent ( fudao_manageDescription.init );
  
  (function(){ /*Use Object Detection to detect IE6*/ var m = document.uniqueID /*IE*/ && document.compatMode /*>=IE6*/ && !window.XMLHttpRequest /*<=IE6*/ && document.execCommand ; try{ if(!!m){ m("BackgroundImageCache", false, true) /* = IE6 only */ } }catch(oh){}; })();

