// Namespace object for gebrüder götz functions

// etracker vars for DE begin
var et_ssl = 0;
var et_easy = '';
var et_pagename = '';
var et_areas = '';
var et_ilevel = '';
var et_server = '';
var et_sslserver = '';
var et_referer = '';
var et_la = '';
var et_sc ='';
var et_up='';
var ll,fl, pV, rS, qS, tt;
var tv, to,  ts,  et_tmp;
var et_a = '', et_t = '', et_p = '', et_b='', et_s='', et, et_ref, et_js='';
var et_la = '', et_js = 1, et_pl, et_co, et_iw,  et_sh, et_sw, et_ih;
    
// etracker vars for DE end

//vars for filternaviobject

var filterNaviResultView = '/webapp/wcs/stores/servlet/FilterNaviResultView';
var eshopPath = '/webapp/wcs/stores/servlet/';

var ggobj = new Object();

ggobj.validB2BCustomerNumber = function(number) {
  result = false;
  if(/^DE([0-9]{9})$/.test(number)) {
    m = 10;
    n = 11;
    s = 10;
    for(var i = 2; i < (number.length - 1); i++) {
      s = parseInt(number.charAt(i)) + s;
      s = s % m;
      if(s == 0)
        s = 10;
      s = (2 * s) % n;
    }
    
    p = n - s;
    p = p % m;
    result = (p == parseInt(number.charAt(number.length - 1)))
  }      
  return result;
}

ggobj.cutTextareaLength = function(textarea, max) {
  textarea = $(textarea);
  if(textarea.getValue() && max && textarea.getValue().length > max) {
    textarea.value = textarea.getValue().substring(0, max);
  }
}

// if open print the layer else do a normal print
ggobj.print = function() {
  if($('PageOverlay') && !$('PageOverlay').hasClass('hideout')) {
    ggobj.printLayer();
  } else
    self.print();
};

// print only the Layer
ggobj.printLayer = function() {
  if($('page'))
    $('page').addClass('dont_print');
  self.print();
};

// Simple logging with firebug or alert function
ggobj.log = function(value) {
  if (window.console) { console.log(value); } else {alert(value);}
};

/**
 * opens a given url a new window
 */
ggobj.openWindow = function(link, title, width, height, posX, posY) {
  var newWindow = window.open(link, title, "menubar=0,toolbar=0,resizable=0,location=0,status=1,scrollbars=1,width=" + width + ",height=" + height);
  if(posX> 0 && posY > 0) newWindow.moveTo(posX, posY);
}

ggobj.openSimpleWindow = function(link, title, width, height) {
  var newWindow = window.open(link, title, "menubar=0,toolbar=0,resizable=0,location=0,status=0,scrollbars=1,width=" + width + ",height=" + height);
}

ggobj.setDefaultValue = function(element, value) {
  // Remember initial default value
  element.default_value = value;
  $(element).addClass("auto_grey");
}

/**
 * added new content from newelement in element (p.e. service - directorder)
 */
ggobj.addNewValue = function(element, newelement) {
  var allOrderEntries = $$('#DirectOrderForm input.bigfield');
  var articleOrderRow = allOrderEntries.length;
  var link = "javascript:checkArticleOrderNumber($('ordernumber_"+ articleOrderRow +"').value,'checkArticleOrderNumber_"+ articleOrderRow +"','"+ articleOrderRow +"')";
  var clone = $(newelement).clone(true, false);
  var ordernumber = clone.getElement('.bigfield');
  var articleRow = clone.getElement('.articleRow');
  var articleLink = clone.getElement('.articleLink');
  var ajaxloader = clone.getElement('.ajaxloader');
  var size = clone.getElement('.smallfield');
  var quantity = clone.getElement('.small');
  clone.set('id', 'checkArticleOrderNumber_'  + (allOrderEntries.length));
  ordernumber.set('id', 'ordernumber_' + (allOrderEntries.length));
  ordernumber.set('name', 'ordernumber_' + (allOrderEntries.length));  
  ajaxloader.set('id', 'ajaxloader_' + (allOrderEntries.length));
  articleLink.set('href', link);
  clone.injectBefore($(element));
  
  var rowCount = $$('#DirectOrderForm input#rowCount')[0];
  rowCount.set('value', ''+allOrderEntries.length);
}

ggobj.addNewValue2 = function(element, newelement) {
  alert(element + ' | ' + newelement);
}

ggobj.setInputValue = function(element, value) {
  // Set default value when not overridden
  if (value == '') {
    element.value = element.default_value;
  } else {
    element.value = value;
  }

  if (element.value == element.default_value) {
    element.removeClass('active');
  } else {
    element.addClass('active');
  }
}

/**
  * Checks a Radio button on a form (with id "formId") of a button group ("name") and 
  * value ("value") and executes the onclick function if the flag ("click") is set.
  */
ggobj.checkRadioButton = function(formId, name, value, click) {    
    buttons = $ES('input[name='+name+']', formId);
    for (var i = 0; i < buttons.length; i++) {
      if(buttons[i].value == value || !value){
        buttons[i].checked = true;
        if(click){ buttons[i].onclick()};
        break;
      }   
    }
}

/**
  * Checks a Checkbox on a form (with id "formId") and ("name") and 
  * value ("value").
  */
ggobj.checkCheckbox = function(formId, name, value) {    
  checkbox = $ES('input[name='+name+']', formId);
    if (value == 'true'){
      checkbox[0].checked = true;
    } 
}

ggobj.checkCountrybox = function(formId, name, thisValue, defaultValue) {    
  checkbox = $ES('input[name='+name+']', formId);
  if(thisValue != defaultValue){
    checkbox[0].checked = false;
    checkbox[0].disabled = true;  
    $('shipping').addClass('gray');
  }else{
    checkbox[0].disabled = false;
    $('shipping').removeClass('gray');
  }
}

ggobj.CheckQuantity = function(value,lower,upper) {    
    return (lower <= upper && value >= lower && value <= upper);
}
/**
 * All input fields with class "auto_grey" will show its initial value, when clicked
 * input field is cleared and text color changes
 */
ggobj.autoGrey = function(element) {
  ggobj.setInputValue(element, element.value);

  element.addEvents({
    'focus': function() {element.addClass('active'); if (element.value == element.default_value) {element.value = '';}},
    'blur' : function() {if (element.value == '') {element.removeClass('active'); element.value = element.default_value;}}
  });
}

ggobj.defaultValueToggle = function(element, value) {
  if(element.value == value) {
    element.value = value;
    element.default_value = value;
    element.removeClass('active');
    
    element.addEvents({
      'focus': function() {element.addClass('active'); if (element.value == element.default_value) {element.value = '';}},
      'blur' : function() {if (element.value == '') {element.removeClass('active'); element.value = element.default_value;}}
    });
  }
}

/**
 * Helper to get the correct image source when the transparent png fix for IE is used
 */
ggobj.getImgSrc = function(element) {
  return element.realSrc || element.src;
}

/**
 * Mouse-Over Effect for all image tags with class "mouseover_image".
 * Image will not change when image is in "active" state!
 */
ggobj.autoMouseOver = function(element) {
  // pre-load mouse-over images for faster display

  var overImageSrc = ggobj.getImgSrc(element).replace(/_lo/g,'_hi');
  new Asset.image(overImageSrc);

  element.addEvents({
     'mouseenter': function() {element.src = ggobj.getImgSrc(element).replace(/_lo/g,'_hi'); },
     'mouseleave': function() {element.src = ggobj.getImgSrc(element).replace(/_hi/g,'_lo')}
  });
}


/**
 * Mouse-Over Effect for all image tags with class "mouseover_image".
 * Image will not change when image is in "active" state!
 */
ggobj.autoMouseOverTop = function(element) {
  // pre-load mouse-over images for faster display

  var overImageSrc = ggobj.getImgSrc(element).replace(/_lo/g,'_hi');
  new Asset.image(overImageSrc);

  element.addEvents({
     'mouseenter': function() {
                     var params = Json.evaluate(element.name);
                     if(params['sel'] == '0' ){
                       element.src = ggobj.getImgSrc(element).replace(/_lo/g,'_hi');
                       element.src = ggobj.getImgSrc(element).replace(/_cl/g,'_hi');
                     }
                     
                     if(params['next']){
                       var elem = $(params['next']);
                       elem.src = ggobj.getImgSrc(elem).replace(/_lo/g,'_cl');
                     }
                   },
     'mouseleave': function() {
                     var params = Json.evaluate(element.name);
                     if(params['sel'] == '0')
                       element.src = ggobj.getImgSrc(element).replace(/_hi/g, params['semi']);
                     if(params['next']){
                       var elem = $(params['next']);
                       if(params['sel'] == '0')
                         elem.src = ggobj.getImgSrc(elem).replace(/_cl/g,'_lo');
                     }
                   }
  });
}

/**
 * Mouse-Over Effect for all image tags within the given div and assigned class "mouseover_image_div".
 * Image will not change when image is in "active" state!
 */
ggobj.autoMouseOverDiv = function(element) {
  // pre-load mouse-over images (all image-tags of div) for faster display
  $ES('mouseover_image_div', element).forEach(
    function(imgElement){
      var overImageSrc = ggobj.getImgSrc(imgElement).replace(/_lo/g,'_hi');
      new Asset.image(overImageSrc)
    }
  );

  element.addEvents({
     'mouseenter': function(){$ES('img', element).forEach(function(imgElement){imgElement.src = ggobj.getImgSrc(imgElement).replace(/_lo/g,'_hi');});},
     'mouseleave': function(){$ES('img', element).forEach(function(imgElement){imgElement.src = ggobj.getImgSrc(imgElement).replace(/_hi/g,'_lo');});}
  });
}

ggobj.autoMouseOverText = function(element) {
  element.addEvents({
     'mouseenter': function(){
       var params = JSON.decode(element.id);
       if(params['sel'] == '0' ){
         classhover = params['classname'] + params['semi'];
         sepclasshover = params['sep'] + params['semi'];
         if(params['sepid']){
           seperator = $(params['sepid']);          
           if(seperator) seperator.addClass(sepclasshover);
         }
         element.addClass(classhover);         
       }
     },
     'mouseleave': function(){
       var params = JSON.decode(element.id);
       if(params['sel'] == '0' ){
         classhover = params['classname'] + params['semi'];
         sepclasshover = params['sep'] + params['semi'];
         if(params['sepid']){
           seperator = $(params['sepid']);    
           if(seperator) seperator.removeClass(sepclasshover);
         }
         element.removeClass(classhover)}
       }       
  });
}



/**
 * Adds an onclick-Event to all elments having class "popuplink" assigned.
 * Additional parameters are set as Json-String in the name-Attribute of the Element
 */
ggobj.addOnClick = function(element) {
  element.addEvents({
     'click': function(evt) {new Event(evt).stop(); var linkParams = Json.evaluate(element.name); ggobj.openWindow(linkParams['link'], linkParams['title'], linkParams['width'], linkParams['height'], 0, 0); return false;}
  });
}

/**
 * Grab focus for elements having class "formFocus" assigned
 */
ggobj.addFormFocus = function(element) {
  element.focus();
}


ggobj.showLoading = function(targetDiv, show) {
  if(show)
    $(targetDiv).setStyles({'background-image': 'url(/images_shop/storefront/ajax_loader.gif)', 'background-position': 'center', 'background-repeat': 'no-repeat'}); 
  else
    $(targetDiv).setStyles({'background-image': '', 'background-position': '', 'background-repeat': ''});
}

ggobj.ajaxRequest = function(url, targetDivId, show, oncomplete, showAjaxLoader) {
  var requestObj = new Request.HTML({
    url         : url,
    method      : 'post',
    evalScripts : true,
    update      : $(targetDivId),
    onRequest   : function() {
      if(showAjaxLoader && typeof showAjaxLoader == 'function'){      
        showAjaxLoader();
      }
      else if(showAjaxLoader){
        ggobj.showLoading(targetDivId, true);
      }
    },
    onComplete : function() {
      if(showAjaxLoader && typeof showAjaxLoader == 'boolean'){
        ggobj.showLoading(targetDivId, false);
      }
    },
    onError : function(){
    },
    onSuccess : function(){
      if(oncomplete) 
        oncomplete();
    }
  });
  requestObj.send();
}


/**
 * Ajax form submit which sets the response into a target div container
 */
ggobj.ajaxFormSubmit = function(formId, targetDivId, show, validator, oncomplete, showAjaxLoader, hideAjaxLoader) {
  var newsubmit = function(e) {
    $(targetDivId).set('html', '');
    if(e)
      new Event(e).stop();
    if(!validator || (validator && validator.validate(true))) {
      this.set('send', {
        evalScripts: true,
        onRequest: function() {
          if (showAjaxLoader) {
            showAjaxLoader();
          }
        },
        onSuccess: function(responseText, responseXML) {
          $(targetDivId).set('html', responseText);
          if (hideAjaxLoader) {
            hideAjaxLoader();
          }
        },
        onComplete: function() {
          if (hideAjaxLoader) {
            hideAjaxLoader();
          }
          if(oncomplete)
            oncomplete();
        }, 
        onFailure: function() {
          //ggobj.showLoading(targetDivId, false);
          if(oncomplete)
            oncomplete();
        }
      });
      this.send();
    }
  }
  var form = $(formId);
  form.addEvent('submit', newsubmit);
  form.submit = newsubmit;
}

/**
 * Shows or hides a given div container by id
 */
ggobj.showLayer = function(targetDivId, show) {
  ggobj.positionContainer(targetDivId);

  if(show){
    $(targetDivId).removeClass('hideout');
    window.addEvent('resize', ggobj.positionContainer.bind(this, targetDivId));
  }
  else
    $(targetDivId).addClass('hideout');
}

/**
 * position of a container according current position of anchor container
 */
ggobj.positionContainer = function (targetDivId) {
  if($(targetDivId + "_anchor")){
    var anchorDiv = $(targetDivId + "_anchor");
    $(targetDivId).setStyles({top: (anchorDiv.getPosition().y + 20) + 'px', left: anchorDiv.getPosition().x  + 'px'});
  }
}

ggobj.selectTab = function (tabGroupId, tabClass, tabToSelectClass){
  var allTabs = $$('#' + tabGroupId + " ." + tabClass);
  for (i = 0; i < allTabs.length; i++){
    if(allTabs[i].hasClass(tabToSelectClass)){
      allTabs[i].addClass('tab_active');
      allTabs[i].removeClass('tab_inactive');
    }
    else{
      allTabs[i].addClass('tab_inactive');
      allTabs[i].removeClass('tab_active');
    }
  }
}

// used in contactform and productdetail recommendform
ggobj.tabview = function (tabname) {
  var all_elements = document.getElementsByTagName("div");
  var tab = $('tab_'+tabname);
  var tab_info = $('infos_'+tabname);
  var counter = 0;

  //set content tabulator css
  if (tab){
    tab.removeClass('tab_inactive');
    tab.addClass('tab_active');
  }
  if (tab_info){
    tab_info.removeClass('tab_inactive');
    tab_info.addClass('tab_active');
  }
  //set old highlight back to inactive css
  for (i=0;i<all_elements.length;i++){

    var tabs = all_elements[i].id.indexOf("tab_");
    var tabs_info = all_elements[i].id.indexOf("infos_");

    //count the tabulator elements
    if(tabs == 0) counter++;

    //set content tabulator
    if(tab && all_elements[i].id != tab.id && tabs == 0){
      element_id = $(all_elements[i].id);
      element_id.removeClass('tab_active');
      element_id.addClass('tab_inactive');
    }

    //set content tabulator
    if(tab_info && all_elements[i].id != tab_info.id && tabs_info == 0){
      element_id = $(all_elements[i].id);
      element_id.removeClass('tab_active');
      element_id.addClass('tab_inactive');
    }

  }

}


ggobj.open = function(link) {
  var load = window.open(link);
  load.focus();
}

ggobj.cleanSearchTerm = function(src) {
  if (src && src.searchTerm && src.searchTerm.value) {
    src.searchTerm.value = src.searchTerm.value.replace(/'/g, " ").replace(/"/g, " ");
  }
  if (src.searchTerm.value == src.searchTerm.default_value) {
    src.searchTerm.value = '';
    src.searchTerm.focus();
    return false;
  } else {
    return true;
  }
}

window.addEvent('domready', function() {
  
});

window.addEvent('load', function() {
  $$(".auto_grey").forEach(ggobj.autoGrey);
  $$(".mouseover_image").forEach(ggobj.autoMouseOver);
  $$(".mouseover_image_top").forEach(ggobj.autoMouseOverTop);
  $$(".mouseover_text").forEach(ggobj.autoMouseOverText);
  $$(".mouseover_div").forEach(ggobj.autoMouseOverDiv);
  $$(".popuplink").forEach(ggobj.addOnClick);
  $$(".form_focus").forEach(ggobj.addFormFocus);
});

Element.extend({
    trimFormElements : function(fieldNames) {
    var formElement = this;
    fieldNames.each(function(name) {
      var fieldElement = formElement.getElement('input[name=' + name + ']');
      if (fieldElement) {
        var oldValue = fieldElement.getValue() || '';
        fieldElement.setValue(oldValue.trim());
      }
    });
  },
  setValue : function(val) {
    switch(this.getTag()) {
      case 'select':
        sel = function(option) {
          if (($type(val)=='array'&& val.contains(option.value))||(option.value==val))option.selected = true
          else option.selected = false;
        }
        $each(this.options, sel);
        break;
      case 'input': 
        if (['checkbox', 'radio'].contains(this.type))this.checked=(($type(val)=='array')?val.contains(this.value):(this.value==val));
        else if (['text'].contains(this.type))this.value=val;
        break;
      case 'textarea': this.value = val;
    } 
  }
});
