
/* 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;
 }

};

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 - 23;
    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;
 }
}