
/* Filenames - keep sync with libFilename.ds */
var filenameTranslateMap = { '&':'and',' ':'_','\\t':'_','\\r':'_','ä':'ae','ö':'oe','ü':'ue','ß':'ss' };
var filenameKeep = "abcdefghijklmnopqrstuvwxyz0123456789_";
var __filenameTranslateRegexp;
var __filenameKeepRegexp;

function __filenameTranslateFunc( match ) {
	return match in filenameTranslateMap ? filenameTranslateMap[match] : '';
}
function __filenameInit() {
	var keys = [];
	for( var key in filenameTranslateMap ) keys.push( key );
	__filenameTranslateRegexp = new RegExp( '[' + keys.join('') + ']', 'g' );
	__filenameKeepRegexp = new RegExp( '[^' + filenameKeep + ']', 'g' );
}
__filenameInit();

/**
 * convert a given free form text into a valid and yet readable ascii-filename
**/
function labelToFilename( label ) {
	return label.toLowerCase().replace( __filenameTranslateRegexp, __filenameTranslateFunc ).replace( __filenameKeepRegexp, '' );
}

/* Main Navigation */

var active_submenu = null;
var active_submenu_hide = null;

var MAX_HEIGHT_NAVI = 269;
var MAX_HEIGHT_FILTER = 249;

function empty(obj)
{
 return (typeof obj)=="undefined" || obj==null || obj=="" || obj==[];
}

function getSubmenuId( id ) {
  if( empty(id) ) {
    var result = event.srcElement;
    while( empty(result.id) ) result = result.parentElement;
    id = result.id;
  }
  return id;
}

var main_navigation = {

 init: function() {
   var entries = $$('#categorymenu li.entry');
   var webtrekkDiv = $$('#homepage_webtrekk');
   for( var i=0; i<entries.length; i++ )
   {
    var entry = entries[i];
    var submenu = $(entry.id+'_submenu');
    if( null!=submenu ){
     entry.observe('mouseover', main_navigation.__onmouseover.bindAsEventListener(entry) );
     entry.observe('mouseout', main_navigation.__onmouseout.bindAsEventListener(entry) );
     entry.observe('click', main_navigation.__onclick.bindAsEventListener(entry) );
     submenu.observe('mouseout', main_navigation.__onmouseout.bindAsEventListener(entry) );
     if ( webtrekkDiv != "" ) {
     	active_submenu = entry;
     	active_submenu_hide = main_navigation.hideSubmenu.bind(this, active_submenu);
     	main_navigation.showSubmenu(entry);
     }
   	}
   }
   
   Element.extend( document.body ).observe( 'click', main_navigation.__onBodyClick.bindAsEventListener() );
 }
 
 ,__onBodyClick: function( ev ) {
 	if( active_submenu ) active_submenu_hide();
 	active_submenu = null;
 }
 
 ,showSubmenu: function(entry){
	var layer_id = 'categorySubmenus';
	var content = $(entry.id+'_submenu');

	var submenu;

	if( content ) submenu = Element.extend(content.parentNode);
	var layer = submenu.parentNode;
	
	// default width (current using in IE7
	var styles = { position:'absolute' };
	if( layer.id!=layer_id ) {
		layer = $(layer_id);
		submenu = layer.insertBefore( submenu.remove(), null );
		content = submenu.select('ul')[0];

		var subdim = content.getDimensions();
		if ( subdim.width <= 0 ) {
			submenu.show();
			subdim = content.getDimensions();
		}

		if ( Element.getHeight( submenu ) > MAX_HEIGHT_NAVI ) {
			content.style.height = MAX_HEIGHT_NAVI + 'px';
		}

		var dim = entry.getDimensions();
		w = dim.width;

		if ( subdim.width > 0 ) {
			w = Math.max( subdim.width, w ); 
			content.style.width = (w-2) + 'px';
		}
		styles['width'] = w + 'px';
	}
	var l = layer.cumulativeOffset();
	var p = entry.cumulativeOffset();
	styles['left'] = (p[0] - l[0]) + 'px';
	styles['top'] = (p[1] - l[1] + entry.getHeight()) + 'px';
	submenu.setStyle( styles );
	submenu.show();
	if( -1==entry.className.indexOf('_hover') ) entry.className = entry.className+'_hover';
 }
 ,hideSubmenu: function(entry){
  var submenu = $(entry.id+'_submenu');
  if( submenu ) submenu = Element.extend(submenu.parentNode);
  if( submenu ) submenu.hide();
  var j;
  if( -1!=(j=entry.className.indexOf('_hover')) ) entry.className = entry.className.slice(0,j);
 }
 
 ,__onmouseover: function(ev){
  if( active_submenu ) return;
  main_navigation.showSubmenu(this);
 }
 
 ,__onmouseout: function(ev){
  if( active_submenu ) return;
  var tmp = ev.toElement || ev.relatedTarget;
  while(tmp && tmp.id=='' && tmp.parentNode) tmp = tmp.parentNode;
  if(tmp && ('id' in tmp) && -1!=tmp.id.indexOf(this.id) )
   return;
  main_navigation.hideSubmenu(this);
 }
 
 ,__onclick: function(ev){
  if( active_submenu ) active_submenu_hide();
  if( active_submenu != this ){
   active_submenu = this;
   active_submenu_hide = main_navigation.hideSubmenu.bind(this, active_submenu);
   main_navigation.showSubmenu(this);
  }
  else
   active_submenu = null;
  ev.stop();
  return false;
 }
};

var filter_navigation = {
 init: function() {
   var entries = $$('#refineNav .filter');
   for( var i=0; i<entries.length; i++ )
   {
    var entry = entries[i];
    var submenu = $(entry.id+'_submenu');
    if( null!=submenu ){
     entry.observe('mouseover', filter_navigation.__onmouseover.bindAsEventListener(entry) );
     entry.observe('mouseout', filter_navigation.__onmouseout.bindAsEventListener(entry) );
     entry.observe('click', filter_navigation.__onclick.bindAsEventListener(entry) );
     submenu.observe('mouseout', filter_navigation.__onmouseout.bindAsEventListener(entry) );
	}
   }
 }
 
 ,showSubmenu: function(entry){
  var layer_id = 'filterSubmenus';
  var content = $(entry.id+'_submenu');

  var submenu;
  if( content ) submenu = Element.extend(content.parentNode);

  var layer = submenu.parentNode; 
  var styles = { position:'absolute' };
  if( layer.id!=layer_id ) {
    layer = $(layer_id);
	submenu = layer.insertBefore( submenu.remove(), null );
	content = submenu.select('div')[0];

  	var subdim = content.getDimensions();
  	if( subdim.width <= 0 ) {
  		submenu.show();
  		subdim = content.getDimensions();
  	}

	if ( Element.getHeight( submenu ) > MAX_HEIGHT_FILTER ) {
	  content.style.height = MAX_HEIGHT_FILTER + 'px';
	}

    var dim = entry.getDimensions();
    w = dim.width;
    if ( subdim.width > 0 ) {
      w = Math.max( subdim.width, w ); 
  	  content.style.width = (w-2) + 'px';
    }
    styles['width'] = w + 'px';
  }
  var l = layer.cumulativeOffset();
  var p = entry.cumulativeOffset();
  styles['left'] = (p[0] - l[0]) + 'px';
  styles['top'] = (p[1] - l[1] + entry.getHeight()) + 'px';
  submenu.setStyle( styles );
  submenu.show();
  if( -1==entry.className.indexOf('_hover') ) entry.className = entry.className+'_hover';
 }
 ,hideSubmenu: function(entry){
  var submenu = $(entry.id+'_submenu');
  if( submenu ) submenu = Element.extend(submenu.parentNode);
  if( submenu ) submenu.hide();
  var j;
  if( -1!=(j=entry.className.indexOf('_hover')) ) entry.className = entry.className.slice(0,j);
 }
 
 ,__onmouseover: function(ev){
  if( active_submenu ) return;
  filter_navigation.showSubmenu(this);
 }
 
 ,__onmouseout: function(ev){
  if( active_submenu ) return;
  var tmp = ev.toElement || ev.relatedTarget;
  while(tmp && (!('id' in tmp) || -1==tmp.id.indexOf('filt_')) && tmp.parentNode) tmp = tmp.parentNode;
  if(tmp && ('id' in tmp) && -1!=tmp.id.indexOf(this.id) )
   return;
  filter_navigation.hideSubmenu(this);
 }
 
 ,__onclick: function(ev){
  if( active_submenu ) active_submenu_hide();
  if( active_submenu != this ){
   active_submenu = this;
   active_submenu_hide = filter_navigation.hideSubmenu.bind(this, active_submenu);
   filter_navigation.showSubmenu(this);
  }
  else
   active_submenu = null;
  ev.stop();
  return false;
 }
 
 
 ,buildMobileSelectNavigation: function  () {
	 	entry = $('cat_Brands');
		entry.stopObserving('mouseover');
		entry.stopObserving('mouseout');
		entry.stopObserving('click');
		
		entry.observe('click',function(){
		 	window.console && console.log('filter_navigation.buildMobileSelectNavigation() -- 2')
			location.href = $(entry.id+'_submenu').select('a')[0].readAttribute('href');
		});
		
		var filters = $$('#refineNav .filter');
		for	(var i=0;i<filters.length;i++) {
	    	var filter = filters[i];
	    	
	    	var actFilter = filter.select('.selected');
	    	
	    	dropDown = new Element('select',{id:filter.id+'_select'});
	    	dropDown.setStyle({
	    		'width':'98px', 'paddingLeft':'12px', 'paddingRight':'0',
	    		'borderRadius':'0px', 'border':'0px',
	    		'height':'25px', 'width':'110px',
	    		'fontWeight':'bold'
	    	});
	    	if (actFilter.length < 2) {
	    		// Default CSS
			 	dropDown.setStyle({ 'backgroundImage':"url('"+ $('mobileFilter').value + "')" });
	    	} else {
	    		// Active CSS
			 	dropDown.setStyle({ 'backgroundImage':"url('" + $('mobileFilter').value + "')" });			 	
	    			    		
	    	}
	    	
	    	dropDownElements = $(filter.id+'_submenu').select('a');
	    	
			for	(var k=0;k<dropDownElements.length;k++) {
				var itemText = (dropDownElements[k].innerText ||dropDownElements[k].textContent);
				itemText = itemText.replace (/^\s+/, '').replace(/\s+$/, '');
				if ((itemText == 'Alle') && (actFilter.length < 2)) {
					itemText = (filter.select('.text')[0].innerText || filter.select('.text')[0].textContent);
				}
				itemText = itemText.replace (/^\s+/, '').replace(/\s+$/, '');
				
				dropDownItem = new Element('option', {
					'value': dropDownElements[k].readAttribute('href')
				}).update(itemText);

				
				if (dropDownElements[k].up('div').hasClassName('selected')) {
					dropDownItem.update(itemText.toUpperCase());
					dropDownItem.selected = true;	
				}
				
				dropDown.appendChild(dropDownItem);
			}
			
			dropDown.observe('change',function(){
				options = $(this).select('option');
				for (l=0;l<options.length;l++) {
					if (options[l].selected) {
						location.href = options[l].value;
					}
				}
			})
	    	$(filter.id).appendChild(dropDown);
	    	
			filter.select('h2')[0].setStyle({'display':'none'});
		}
	}

};

minisitemap = {
  visible: null

 ,init: function() {
   var radios = $$('#minisitemap .headline .checked, #minisitemap .headline .unchecked');
   for( var i=0; i<radios.length; i++ ){
    var radio = radios[i];
    radio.observe('click', minisitemap.__onclick.bindAsEventListener(radio) );
    if( radio.className=='checked' ) visible = radio.id;
   }
  }
 
 ,__onclick: function(ev) {
  if( visible!=this.id ) {
    if( visible ) {
    	var radio = $(visible);
    	var old = $(visible+'_div');
    	if( null!=radio ) radio.className = 'unchecked';
    	if( null!=old ) old.style.display = 'none';
    }
  	visible = this.id;
  	var radio = $(visible);
	var group = $(visible+'_div');
  	if( null!=radio ) radio.className = 'checked';
  	if( null!=group ) group.style.display = 'block';
  }
 }
};

var product_mini_show = {
	init: function() {
	}
	
	,show: function( elem ) {
		
		if ( iBox.is_ie6 ) {
			
			var elems = elem.getElementsByTagName( 'span' );
			for(i=0;i<elems.length;i++) {			
				if ( elems[i].className == 'description' ) elems[i].style.display='block';
			}			
		} 			
	}
	
	,hide: function( elem ) {
					
		if ( iBox.is_ie6 ) {
			
			var elems = elem.getElementsByTagName( 'span' );
			for(i=0;i<elems.length;i++) {			
				if ( elems[i].className == 'description' ) elems[i].style.display='none';
			}
		}  		
	}
};

styled_select = {
	handler: {} // id => Array of handlers
	,layers: {} // id => layer_id
	
	,init: function( base, layer_id ) {
		if( empty(base) ) base = '';
		if( empty(layer_id) ) layer_id = 'styledselectOptions';
		
		selects = $$(base + '.styledselect');
		for( var i=0; i < selects.length; i++ ) {
			var select = selects[i];
			if( !(select.id in styled_select.handler) ) styled_select.handler[select.id] = [];
			if( !(select.id in styled_select.layers) ) styled_select.layers[select.id] = layer_id;
     		select.observe('click', styled_select.__onclick.bindAsEventListener(select) );
		}
		
		if( !$('ibox_styledselectOptions') ) {
			var ibox = $('ibox_wrapper');
			if( ibox ) {
				var container = document.createElement('div');
				container.id = 'ibox_styledselectOptions';
				ibox.appendChild( container );
			}
		} 
	}
	
	,dispose: function( base ) {
		if( active_submenu ) active_submenu_hide();
		selects = $$(base + '.styledselect');
		for( var i=0; i < selects.length; i++ ) {
			var select = selects[i];
			if( select.id in styled_select.handler ) delete styled_select.handler[select.id];
			if( select.id in styled_select.layers ) delete styled_select.layers[select.id];
		}		
	}
	
 ,addHandler: function( id, func ) {
 	if( !(id in styled_select.handler ) ) styled_select.handler[id] = [];
 	styled_select.handler[id].push( func );
 }
	
 ,showOptions: function(entry){
  var layer_id = styled_select.layers[entry.id];
  var content = $(entry.id+'_options');

  var submenu;
  if( content ) submenu = Element.extend(content.parentNode);

  var layer = submenu.parentNode;
  var styles = { position:'absolute' };
  if( layer.id!=layer_id ) {
    layer = $(layer_id);
	submenu = layer.insertBefore( submenu.remove(), null );
	content = submenu.select('div')[0];

  	var subdim = content.getDimensions();
  	if( subdim.width <= 0 ) {
  		submenu.show();
  		subdim = content.getDimensions();
  	}

	if ( Element.getHeight( submenu ) > MAX_HEIGHT_FILTER ) {
	  content.style.height = MAX_HEIGHT_FILTER + 'px';
	}

    var dim = entry.getDimensions();
    var w = dim.width ;
    if ( subdim.width > 0 ) {
      w = Math.max( subdim.width, w ); 
  	  content.style.width = (w-2) + 'px';
    }
    styles['width'] = w + 'px';
  }
  var l = layer.cumulativeOffset();
  var p = entry.cumulativeOffset();
  styles['left'] = (p[0] - l[0]) + 'px';
  styles['top'] = (p[1] - l[1] + entry.getHeight()) + 'px';
  submenu.setStyle( styles );

  var links = content.select('a'); 
  for( var i=0; i<links.length; i++ ) {
  	var link = links[i];
  	link.observe('click', styled_select.__onLinkClick.bindAsEventListener(link) );
  }
  
  submenu.show();
 }
 
 ,hideOptions: function(entry){
  var options = $(entry.id+'_options');
  if( options ) options = Element.extend(options.parentNode);
  if( options ) {
  	options.hide();
  	var links = options.select('a'); 
  	for( var i=0; i<links.length; i++ ) {
  		var link = links[i];
  		link.stopObserving('click');
  	}
  }
 }

 ,__onclick: function( ev ) {
  if( active_submenu ) active_submenu_hide();
  if( active_submenu != this ){
   active_submenu = this;
   active_submenu_hide = styled_select.hideOptions.bind(this, active_submenu);
   styled_select.showOptions(this);
  }
  else
   active_submenu = null;
  ev.stop();
  return false;
 }
 
 ,__onLinkClick: function( ev ) {
  var option = Element.extend(this.parentNode);
  var url = option.select('.url');
  if( 1==url.length ) {
  	url = DOM_getText( url[0] );
  	if( !empty(url) ) {
  		window.location.href = url;
  		ev.stop();
  		return false;
  	}
  }
  var options = option.parentNode;
  var id = options.id.split('_')[0];
  var handlers = styled_select.handler[id];
  for( var i=0; i<handlers.length; i++ )
   handlers[i].call( window, option );
  styled_select.hideOptions( $(id) );
  active_submenu = null;
 }
};

/* Check customer-email-input on register-forms against availability - ajax-login-popup, if not available */
var findEmail = {
	//fields: ['dwfrm_profile_register_base_email', 'dwfrm_profile_registerLight_base_email']
	fields: ['dwfrm_profile_register_base_email']
	
	,init: function() {
		for( var i=0; i < findEmail.fields.length; i++ ) {
			if( $(findEmail.fields[i]) != null ) {
				$(findEmail.fields[i]).observe('change', findEmail.sendEmail);
			}
		}
	}
	
	,sendEmail: function() {
		for( var i=0; i < findEmail.fields.length; i++ ) {
			if( $(findEmail.fields[i]) != null ) {
				var email = $(findEmail.fields[i]).value;
				if( email.length > 3) {
					var ajaxUrl = DOM_getText($('emailFinderAjax_url'));
					if( empty(ajaxUrl) ) return;
					var ajaxData = {
							method: 'post',
							parameters: {email: email},
							onSuccess: findEmail.success.bind(this),
							onFailure: findEmail.failure.bind(this)
					};
					new Ajax.Request( ajaxUrl, ajaxData );
				}	
			}
		}	
	}
	
	,success: function(req) {
		for( var i=0; i < findEmail.fields.length; i++ ) {
			if( $(findEmail.fields[i]) != null ) {
				var email = $(findEmail.fields[i]).value;
				var isCustomer = req.responseText;
				if( isCustomer.length > 5 ) {	
					$(findEmail.fields[i]).value = '';
					var url =  ajaxUrl = DOM_getText($('loginIboxUrl'));												
					iBox.showURL(url+ "?email=" + email + "&trigger=register" , null,{width: '500', height: '300'});
				}
			}
		}
	}
	
	,failure: function(req) {		
		//alert('Error: ' + req.responseText);
		return;
	}
	
};

/* check country and display gateway ibox, if other than locale */
var GEOIP_url;
var countrySwitch = {
	init: function() {	
		// show switch only if no cookie is set
		if( cookieUtil.get('countryCheck') == null ) {
			
			// disable the switch for 1 Days
			cookieUtil.set('countryCheck', 'set', '1');			
			
			//get the Siteconfiguration for the gateway
			var config = ('undefined' != typeof SITE_configuration) ? SITE_configuration : null;
			
			//find the local url for GEOIP countryCode 
			var localSites = config.sites;
			localSites = $A(localSites);
			var localSite = localSites.find( function(site){
				return( site.id == GEOIP_countryCode );
			});
			GEOIP_url = localSite.hostname;
			
			if( config.activeSiteId != GEOIP_countryCode ) {
				callBackInterval = setInterval( "countrySwitch.show()", 100 );
			}			 
		}		
	},
	show: function() {
		//wait until iBox-Div is rendered
		if( null != document.getElementById('ibox_wrapper') ){ 
			clearInterval( callBackInterval );
			var url = countryIboxUrl;		
			iBox.showURL(url + '?geourl=' + GEOIP_url, null,{width: '400', height: '240'});
		}			
	}
};

// benefit tooltips
var BenefitsNS = {
	BenefitsHandler : function () {
		this.benefitsContainerID = null;
		this.benefitsContainer = null;
		this.benefitEntries = null;
		this.tooltipcontainer = null;

		this.init = function(benefitsContainer){
			this.benefitsContainerID = benefitsContainer;
			this.benefitsContainer = $(this.benefitsContainerID);
			//get the entries
			this.__getEntries();
			this._getTooltipContainer();
			this.__addHoverEvents();
		};
	
		this._getTooltipContainer = function(){
			this.tooltipcontainer =  $('benefit-tooltip');
		};
		
		this.__getEntries = function(){
			this.benefitEntries = this.benefitsContainer.select('div.benefit-entry','span');
		};
		
		this.__addHoverEvents = function(){
			for(var i = 0; i < this.benefitEntries.length ; i++ ){
				this.benefitEntries[i].observe('mouseover', this.__showBenefitTooltip.bind(this));
				this.benefitEntries[i].observe('mouseout',  this.__hideBenefitTooltip.bind(this));
			}
		};
		
		this.__showBenefitTooltip = function(e){
			var entry = $(Event.element(e));
			var inTop = '';
			var inLeft = '';
			if(entry.nodeName != 'SPAN') {
				inTop  = Position.positionedOffset(entry)[1];
				inLeft = Position.positionedOffset(entry)[0];
			}else{
				inTop  = Position.positionedOffset(entry.up())[1]+1;
				inLeft = Position.positionedOffset(entry.up())[0];				
			}
		
			// get the field size
			var inHeight = entry.getHeight();
			var inWidth = entry.getWidth();
			
			if(entry.nodeName != 'SPAN') {
				this.tooltipcontainer.childElements()[1].childElements()[2].innerHTML = $(Event.element(e)).readAttribute('rel');
			}else{
				this.tooltipcontainer.childElements()[1].childElements()[2].innerHTML = $(Event.element(e)).up().readAttribute('rel');				
			}
			
			this.tooltipcontainer.style.position = 'absolute';
			this.tooltipcontainer.style.left = inLeft  -8 + 'px' ; 
			this.tooltipcontainer.style.top = inTop + inHeight   -2 + 'px';
			this.tooltipcontainer.style.zindex = '9999';
			this.tooltipcontainer.style.display = 'block';
		};
	 
		this.__hideBenefitTooltip = function(e){
			 this.tooltipcontainer.style.display = 'none';
		};
	}
};
