// 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': ''});
}

/* @@@ mglw. nicht notwendig ... */
ggobj.showInfoArea = function(){
		document.getElementById("zoomArea").style.display = "none";
		document.getElementById("infoArea").style.display = "block";
}

ggobj.showZoomArea = function(){
		document.getElementById("infoArea").style.display = "none";
		document.getElementById("zoomArea").style.display = "block";
}
/* @@@ ... mglw.  nicht notwendig*/

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);
  if(browserIsIE() && (getIEVersionNumber() <= 6)) {
    var el = $$("a.poplight[href=#?w=500]")[0];
   	popID = el.get('rel'); //Get Popup Name
    popURL = el.get('href'); //Get Popup href to define size
		
    //Pull Query & Variables from href URL
    query= popURL.split('?');
    dim= query[1].split('&');
    popWidth = dim[0].split('=')[1]; //Gets the first query string value
    
    var myAnchor = new Element('a', {
      href: '#',
      'class': 'close',
      html: '<img src="/images_shop/storefront/close_pop.gif" class="btn_close" title="Close Window" alt="Close" />'
    });

    //Fade in the Popup and add close button
    $(popID).setStyles({'width': Number(popWidth), 'display' : 'block'}).fade('in').grab(myAnchor, 'top');//.inject(myAnchor, 'after');//.prepend('<a href="#" class="close"><img src="images/close_pop.gif" class="btn_close" title="Close Window" alt="Close" /></a>');

    //Define margin for center alignment (vertical + horizontal) - we add 80 to the height/width to accomodate for the padding + border width defined in the css
    var popMargTop = ($(popID).getStyle('height').toInt() + 80) / 2;
    var popMargLeft = ($(popID).getStyle('width').toInt() + 80) / 2;

    //Apply Margin to Popup
    $(popID).setStyles({ 
      'margin-top' : -popMargTop,
      'margin-left' : -popMargLeft
    });
		
    //Fade in Background
    var fadeDiv = new Element('div', {id: 'fade'});

	$$('body')[0].grab(fadeDiv); //Add the fade layer to bottom of the body tag.
	fadeDiv.setStyles({'display' : 'block', 'height' : document.body.offsetHeight}).fade(0.8); //Fade in the fade layer 

    //Close Popups and Fade Layer
    $$('a.close, #fade').each(function(e) {
      e.addEvent('click', function() { //When clicking on the close or fade layer...
        $$('#fade , .popup_block').each(function(e2) {
          e2.fade('out'); //fade them both out
          e2.destroy();
          return false;
        });
	  });
	});
  }
});

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;
    } 
  }
});

    function getIEVersionNumber() {
        var ua = navigator.userAgent;
        var MSIEOffset = ua.indexOf("MSIE ");
        
        if (MSIEOffset == -1) {
            return 0;
        } else {
            return parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset)));
        }
    }

    function browserIsIE(){
    	if (0 < getIEVersionNumber()){
    		return true;
    	}
    	return false;
    }
    
    function updateMiniCart() {
    	ggobj.ajaxRequest('/webapp/wcs/stores/servlet/Minicart', 'minicartwrapper', true, null, true);
    }

	// used in components/checkout/coupon.jsp
    function sendAddCoupon(storeId, langId, catalogId, orderId, couponCode) {
    	internalSendCoupon(storeId, langId, catalogId, orderId, couponCode, false);
    }

    function sendDeleteCoupon(storeId, langId, catalogId, orderId, couponCode) {
    	internalSendCoupon(storeId, langId, catalogId, orderId, couponCode, true);
    }

    function internalSendCoupon(storeId, langId, catalogId, orderId, couponCode, deleteCoupon) {
	    var targetDiv = $('coupon');
	    var command = 'CheckoutCouponAddCmd';
	    if (deleteCoupon) {
	    	command = 'CheckoutCouponDeleteCmd';
	    }
	    this.request = new Request.HTML({
	      url        : command,
	      update     : targetDiv,
	      evalScripts: true,
	      onComplete : function() {
	        targetDiv.setStyles({opacity: 0.0, background: '', width: 'auto', height: 'auto'});
	        new Fx.Tween(targetDiv, {
	              property  : 'opacity',
	              duration  : 300,
	              onStart   : function () {
	                            new Fx.Tween(targetDiv, {property : 'opacity', duration: 300}).start(1.0);
	                          },
	              onComplete: function () {
	                            targetDiv.setStyles({opacity: 1.0});
	                          }}
	       ).start(1.0);
	      },
	      onRequest  : function() {
	        targetDiv.set('html', '');
	        targetDiv.setStyles({background: 'url(/images_shop/storefront/ajax_loader.gif) no-repeat center', width: '350px', height: '165px'});
	      }
	    });
	    this.request.send("storeId=" + storeId + "&langId=" + langId + "&catalogId=" + catalogId + "&orderId=" + orderId + "&couponCode=" + couponCode);
    }
    
    function updateCouponInBasket(orderPositionCouponElement, couponPriceElement, couponPriceString, orderGrandTotalElement, grandTotalString) {
    	if (!$(orderPositionCouponElement)) {
    		return;
    	}
    	if (couponPriceString && couponPriceString.length > 0) {
	    	$(orderPositionCouponElement).setStyles({display: ''});
	    	$(couponPriceElement).set('html', couponPriceString);
	    } else {
	    	$(orderPositionCouponElement).setStyles({display: 'none'});
	    	$(couponPriceElement).set('html', '');
	    }
	    $(orderGrandTotalElement).set('html', grandTotalString);
    }

	// used in components/checkout/coupon.jsp
    function setCouponAsterisksVisibility(couponMsg) {
    	var couponAsterisks = $('coupon_asterisks_first_coupon');
    	if (!couponAsterisks) {
    		return;
    	}
    	var asterisks1 = couponMsg.indexOf("*");
    	var asterisks2 = couponMsg.indexOf("**");
		if (asterisks1 >= 0 && (asterisks2 < 0 || asterisks1 != asterisks2)) {
			// show * section
			couponAsterisks.setStyles({display: ''});
		} else {
			// hide * section
	        couponAsterisks.setStyles({display: 'none'});
		}
    }
    

