if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt /*, from*/) {
    var len = this.length >>> 0;
    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++) {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

EMT = function() {

  var $E  = YAHOO.util.Event;
  var $D  = YAHOO.util.Dom;
  var $   = YAHOO.util.Dom.get;

  function inArray(needle, haystack) {
    for (var i = 0; i < haystack.length; i++) {
       if (haystack[i] === needle) {
          return true;
       }
    }
    return false;
  }

  function createCookie(name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  }

  function eraseCookie(name) {
    createCookie(name,"",-1);
  }

  function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  }

  function trim(str) {
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  }

  return {

    init: function() {

      $E.onAvailable('order', function() {
        if(readCookie('index')) {
          $D.addClass(this, 'active');
        } else {
          $D.removeClass(this, 'active');
        }
      });

      $E.onAvailable('products-table', function() {

        var tr = this.getElementsByTagName('tr');
        
        var idx = readCookie('index');
        if(idx) {
          var arts = idx.split('|');
        }

        for(var i = 0; i < tr.length; i++) {
          if(i % 2 == 0 && i > 0) {
            $D.addClass(tr[i], 'even');
          }
          var article = trim($D.getFirstChild(tr[i]).innerHTML);
          if(arts && inArray(article, arts)) {
            var img = tr[i].getElementsByTagName('img')[0];
            img.src = img.src.replace('plus', 'check');
          }
        }

        $E.on(this.getElementsByTagName('img'), 'click', function(e) {
          var ths = this.parentNode.parentNode.parentNode.getElementsByTagName('th');
          var tds = this.parentNode.parentNode.getElementsByTagName('td');
          var d = '';
          var article = '';
          for(var i = 0; i < tds.length; i++) {
            if(i == 0) {
              article = trim(tds[i].innerHTML);
            } else if (i == tds.length - 2) {
              d += '|'+trim(tds[i].innerHTML).replace(/[^0-9\.\,]+/, '');
            } else if(i < tds.length - 1) {
              d += trim(ths[i].innerHTML)+': '+trim(tds[i].innerHTML)+' ';
            }
          }
          this.src = this.src.replace('plus', 'check');
          d = trim(d);
          createCookie(article, d);
          $D.addClass('order', 'active');
          var idx = readCookie('index');
          if(idx) {
            idx = idx.split('|');
            if(idx.length && !inArray(article, idx)) {
              idx.push(article);
              createCookie('index', idx.join('|'));
            } else if (!idx) {
              createCookie('index', article);
            }
          } else {
            createCookie('index', article);
          }

        });

        if($('technical-tables')) {
          $D.addClass($('technical-tables'), 'hidden');
        }

        if($('technical-illustrations')) {
          $D.addClass($('technical-illustrations'), 'hidden');
        }

        $E.on(['material', 'a', 'b', 'c', 'd', 'e'], 'change', function(e) {

          var m = $('material') ? $('material').value : null;
          var a = $('a') ? $('a').value : null;
          var b = $('b') ? $('b').value : null;
          var c = $('c') ? $('c').value : null;
          var d = $('d') ? $('d').value : null;
          var e = $('e') ? $('e').value : null;

          var rows = $D.getElementsByClassName('row', 'tr', $('products-table'));
          var m_cells = $D.getElementsByClassName('material', 'td', $('products-table'));
          var a_cells = $D.getElementsByClassName('a', 'td', $('products-table'));
          var b_cells = $D.getElementsByClassName('b', 'td', $('products-table'));
          var c_cells = $D.getElementsByClassName('c', 'td', $('products-table'));
          var d_cells = $D.getElementsByClassName('d', 'td', $('products-table'));
          var e_cells = $D.getElementsByClassName('e', 'td', $('products-table'));

          $D.removeClass(rows, 'even');
          var displayed = new Array;
          displayed = [];

          // Start at 1, because we ignore the <th> row
          for(var i = 0; i < rows.length; i++) {
            var show = true;
            if($('material') && m != null && m != '' && m_cells[i] && trim(m_cells[i].innerHTML) != m) {
              show = false;
            } else if($('a') && a != null && a != '' && a_cells[i] && trim(a_cells[i].innerHTML) != a) {
              show = false;
            } else if($('b') && b != null && b != '' && b_cells[i] && trim(b_cells[i].innerHTML) != b) {
              show = false;
            } else if($('c') && c != null && c != '' && c_cells[i] && trim(c_cells[i].innerHTML) != c) {
              show = false;
            } else if($('d') && d != null && d != '' && d_cells[i] && trim(d_cells[i].innerHTML) != d) {
              show = false;
            } else if($('e') && e != null && e != '' && e_cells[i] && trim(e_cells[i].innerHTML) != e) {
              show = false;
            }

            if(show == false) {
              $D.setStyle(rows[i], 'display', 'none');
            } else {
              if(YAHOO.env.ua.ie == 6 || YAHOO.env.ua.ie == 7) {
                $D.setStyle(rows[i], 'display', 'block');
              } else {
                $D.setStyle(rows[i], 'display', 'table-row');
              }
              displayed.push(rows[i]);
            }
          }

          for(var i = 0; i < displayed.length; i++) {
            if(i % 2 == 0) {
              $D.addClass(displayed[i], 'even');
            }
          }

        });

      });

      $E.onAvailable('extra', function() {

        var ex = $D.getElementsByClassName('extra', 'div', 'page');
        $D.setStyle(ex, 'display', 'none');

        $E.on('extra', 'click', function(e) {
          $E.stopEvent(e);
          var ul = $D.getElementsByClassName('categories', 'ul', 'page')[0];
          var ex = $D.getElementsByClassName('extra', 'div', 'page')[0];
          if($D.getStyle(ex, 'display') == 'none') {
            $D.setStyle(ex, 'display', 'block');
            $D.setStyle(ul, 'display', 'none');
            $D.addClass(this, 'active');
          } else {
            $D.setStyle(ex, 'display', 'none');
            $D.setStyle(ul, 'display', 'block');
            $D.removeClass(this, 'active');
          }
        });

      });


      $E.on('tech-switch', 'click', function(e) {

        $E.stopEvent(e);

        var a = this.getElementsByTagName('a');
        for(var i = 0; i < a.length; i++) {
          if($D.hasClass(a[i], 'hidden')) {
            $D.removeClass(a[i], 'hidden');
          } else {
            $D.addClass(a[i], 'hidden');
          }
        }
        if($D.hasClass(this, 'active')) {
          $D.removeClass(this, 'active');
          $D.removeClass([$('products'), $('filter'), $('products-table'), $('description')], 'hidden');
          if($('technical-illustrations')) {
            $D.addClass($('technical-illustrations'), 'hidden');
          }
          if($('technical-tables')) {
            $D.addClass($('technical-tables'), 'hidden');
          }
        } else {
          $D.addClass(this, 'active');
          $D.addClass([$('products'), $('filter'), $('products-table'), $('description')], 'hidden');
          if($('technical-tables')) {
            $D.removeClass($('technical-tables'), 'hidden');
          }
          if($('technical-illustrations')) {
            $D.removeClass($('technical-illustrations'), 'hidden');
          }
        }
      });

      $E.onAvailable('technical-tables', function() {
        var tables = this.getElementsByTagName('table');
        for(var i = 0; i < tables.length; i++) {
          var tr = tables[i].getElementsByTagName('tr');
          for(var j = 0; j < tr.length; j++) {
            if(j % 2 == 0) {
              $D.addClass(tr[j], 'even');
            }
          }
        }
      });

      $E.onAvailable(['warning-en', 'warning-de'], function() { 
        $D.setStyle(this, 'display', 'none');
      });

      $E.onAvailable('order-table', function() {

        var idx = readCookie('index');
        var tbl = this.getElementsByTagName('table')[0];
        var tblbody = $D.getFirstChild(tbl);
        var processed = [];

        if(idx) {
          var arts = idx.split('|');
          for(var i = 0; i < arts.length; i++) {

            if(inArray(arts[i], processed)) {
              continue;
            }

            var article = readCookie(arts[i]);
            if(article) {
              var data = article.split('|');
            }

            if(!data) {
              continue;
            }

            var tr = document.createElement('tr');
            var td_art = document.createElement('td');
            var td_des = document.createElement('td');
            var td_prc = document.createElement('td');
            var td_del = document.createElement('td');
            var img = document.createElement('img');
            img.src = '../assets/i/minus.gif';
            td_del.appendChild(img);

            td_art.appendChild(document.createTextNode(arts[i]));
            td_des.appendChild(document.createTextNode(data[0]));
            if(data[1]) {
              td_prc.appendChild(document.createTextNode(data[1]+' \u20AC'));
            }

            $D.addClass(tr, 'row');
            $D.addClass(td_art, 'article');
            $D.addClass(td_prc, 'price');

            tr.appendChild(td_art);
            tr.appendChild(td_des);
            tr.appendChild(td_prc);
            tr.appendChild(td_del);
            tblbody.appendChild(tr);

            processed.push(arts[i]);

          }

        }

        var tables = this.getElementsByTagName('table');
        for(var i = 0; i < tables.length; i++) {
          var tr = tables[i].getElementsByTagName('tr');
          for(var j = 1; j < tr.length; j++) {
            if(j % 2 == 0) {
              $D.addClass(tr[j], 'even');
            }
          }
        }

        $E.on(tbl.getElementsByTagName('img'), 'click', function(e) {

          var idx = readCookie('index');
          if(idx) {
            idx = idx.split('|');
          }

          var tr = this.parentNode.parentNode;
          var art = $D.getFirstChild(tr).innerHTML;

          if(inArray(art, idx)) {
            idx.splice(idx.indexOf(art), 1);
          }

          if(idx.length == 0) {
            eraseCookie('index');
            $D.removeClass('order', 'active');
          } else {
            createCookie('index', idx.join('|'));
          }

          eraseCookie(art);
          tr.parentNode.removeChild(tr);

        });
        
      });

    }
  }

}();

YAHOO.util.Event.onDOMReady(EMT.init);

