// Namespace object for multichannel functions
var multiChannel = new Object();
multiChannel.url = new Object();

// blacklisted for layer redirect
multiChannel.blacklisted_locations = ['LogonForm'];
multiChannel.blacklisted_parameters = ['layer'];

multiChannel.abbreviate = function(string, length, suffix) {

	if (string && length && suffix) {
		if (string.length > length) {
			return string.substring(0, length - suffix.length) + suffix;
		} else {
			return string;
		}
	} else {
		return string;
	}
}

// show Layer
multiChannel.showLayer = function(elementId){
	$(elementId).show();
};

// hide Layer
multiChannel.hideLayer = function(elementId){
	$(elementId).hide();
};

// topnav timer
multiChannel.timer = new Object();
multiChannel.timer.showTime = 300;
multiChannel.timer.hideTime = 500;
multiChannel.timer.showTimer = null;
multiChannel.timer.hideTimer = null;

//***************
// Layer Handling
//***************
multiChannel.layer = new Object();
multiChannel.layerParameters;
multiChannel.layer.callback;

multiChannel.layerRedirectInit = function(){
	window.addEvent('domready', function(){
		var uri = new URI();
		if(!multiChannel.isBlacklistedLocation(uri.get('file')) && $defined(multiChannel.getParameter('layer'))){
			var layerId = multiChannel.getParameter('layer');
			var exportName = multiChannel.getParameter('exportName');
			multiChannel.setParameter('krypto', '', uri);
			if (layerId=='flyer' && $defined(exportName)){
				multiChannel.openLayer(layerId, multiChannel.getParameters(uri), function(){multiChannel.flyer.showFlyer(exportName);});
			} else {
				multiChannel.openLayer(layerId, multiChannel.getParameters(uri));
			}
		}
	});
};

multiChannel.isBlacklistedLocation = function(loc){
	return multiChannel.blacklisted_locations.contains(loc);
};

multiChannel.removeBlacklistedParametersFromURI = function(uri){
	var params = new Object();
	$each(multiChannel.blacklisted_parameters, function(p){
		multiChannel.setParameter(p, '', uri);
	});
	return uri;
};

multiChannel.openLayer = function(layerId, parameters, callback, layerProvider){
	multiChannel.layerParameters = parameters;
	var layerUrl = multiChannel.context.layer;
	if (layerProvider != null) {
		layerUrl = layerProvider.providerUrl;
	}
	if ((layerId != null && layerId.length > 0)){
		if (!$defined(callback)) {
			if (layerId == 'flyer') {
				var outletId;
				if(!$defined(multiChannel.context.localStoreId) && !$defined(multiChannel.flyer.loaded)){
					multiChannel.flyer.loaded = true;
					outletId = multiChannel.context.nationalOutletId;
					callback = function() {
						if ($defined(multiChannel.flyer.infos[multiChannel.context.assetStoreId])) {
							multiChannel.flyer.show(multiChannel.context.nationalOutletId);
						} else {
							$('layer_flyer_outlet_select').show();
							$('flyerwrapper').hide();
							$('closeX').addEvent('click', function(){
								multiChannel.openLayer('flyer');
							});
							$('closeText').addEvent('click', function(){
								multiChannel.openLayer('flyer');
							});
							multiChannel.fitLayer();
						}
					};
				}else{
					if ($defined(multiChannel.flyer.infos[multiChannel.context.localStoreId])) {
						outletId = multiChannel.flyer.extendedInfos[multiChannel.context.localStoreId][0].outletId;
					} else {
						outletId = multiChannel.context.nationalOutletId;
					}
					callback = function() {
						multiChannel.flyer.show(multiChannel.context.localStoreId);
					};
				}
				if (!$defined(parameters)) {
					parameters = new Object();
				}
				if (!$defined(parameters.outletId)) {
					parameters.outletId = outletId;
				}
			} else if (layerId == 'productreview') {
				callback = function() {
					multiChannel.review.initRating('reviewStarsInput');
					multiChannel.review.initDefaultInputValues();
				};
			} else if (layerId == 'comparison') {
				callback = function() {
					multiChannel.compRemoveAllChecks();
				};
			} else if (layerId == 'marketpickup') {
				callback = function() {
					$('overlay').hide();
					$('layer-container').hide();
					$('layer-container-iframe').hide();
					var storeId = Cookie.read('MC_STORE_ID');
					$('storeSelect').value = storeId;
					var storeSelectEl = $('storeSelect');
					storeSelectEl.addEvent('scroll', function() {return false;});
					storeSelectEl.addEvent('mousewheel', function() {return false;});
					multiChannel.marketpickup.checkProductAvailability();
				}
			}
		}
		if (!$defined(multiChannel.layer[layerId])) {
			multiChannel.layer[layerId] = new Object();
		}
		multiChannel.layer[layerId].callback = callback;

		if (!$defined(multiChannel.layer[layerId].content)) {
			var uri = new URI(layerUrl);
			var layerParameters = new Object();
			layerParameters['layer'] = layerId;
			//Safari Cache Bugfix
			layerParameters['r'] = $random(1, 99999999);
			multiChannel.setParameters(layerParameters, uri);

			if (parameters){
				multiChannel.setParameters(parameters, uri);
			}
			var caller = new URI();
			uri.set('scheme', caller.get('scheme'));
			uri.set('port', caller.get('port'));

			multiChannel.addJavaScript('jsLayer', uri.toString());
		} else {
			multiChannel.renderLayer(layerId);
		}
	}
};

multiChannel.gotoMyAccountMasterdata = function() {
	var masterDataURI = new URI(multiChannel.context.masterdata);
	window.location.href = masterDataURI.toString();
};

multiChannel.closeLayer = function(){
	var body = $(document.body);
	var overlay = $('overlay');
	var layer = $('layer-container');
	var iframe = $('layer-container-iframe');

	if (body != undefined && overlay != undefined)
		body.removeChild(overlay);

	if (body != undefined && layer != undefined)
		body.removeChild(layer);

	if (body != undefined && iframe != undefined)
		body.removeChild(iframe);
};

multiChannel.closeAndRemoveLayer = function(layerId){
	if ($defined(multiChannel.layer[layerId])) {
		multiChannel.layer[layerId].content = undefined;
	}
	multiChannel.closeLayer();
};

multiChannel.closeAndReopenLayer = function(layerId, options, callback){
	if ($defined(multiChannel.layer[layerId])) {
		multiChannel.layer[layerId].content = undefined;
	}
	multiChannel.openLayer(layerId, options, callback);

};

multiChannel.renderLayer = function(layerId){
	multiChannel.closeLayer();

	var content = multiChannel.layer[layerId].content;

	var body = $(document.body);

	// overlay container (modal)
	var overlay = new Element('div', {'id': 'overlay', styles: {height: $('site').getScrollSize().y + 'px' } });
	body.appendChild(overlay);

	// layer container (center)
	var container = new Element('div', {'id': 'layer-container'});
	body.appendChild(container);

	// layer container (shadow)
	var layer = new Element('div', {'id': 'layer'});
	layer.innerHTML = content;
	if (multiChannel.layerParameters != null && multiChannel.layerParameters['layerClass']){
		layer.className = multiChannel.layerParameters['layerClass'];
	}
	if (multiChannel.layerParameters != null && multiChannel.layerParameters['layerWidth']){
		layer.style.width = multiChannel.layerParameters['layerWidth'];
	}
	container.appendChild(layer);

	// layer container iframe (center)
	var container2 = new Element('div', {'id': 'layer-container-iframe'});
	body.appendChild(container2);

	// iframe fix for IE6
	var iframe = new Element('iframe', {'id': 'layer-iframe'});
	iframe.frameborder = '0px';
	iframe.src = '';
	container2.appendChild(iframe);

	// Update iframe
	multiChannel.fitLayer();

	// Scroll to top
	self.scrollTo(0, 0);

	// Init faq layer (if needed)
	if (layerId == 'faq'){
		var anchor;
		if (multiChannel.layerParameters != null){
			anchor = multiChannel.layerParameters['anchor'];
		}
		faq.init(anchor);
	}

	// Init financing layer
	if (layerId == 'financingsamples'){
		var amount = multiChannel.layerParameters['amount'];
		var percentagerate = multiChannel.layerParameters['percentagerate'];
		var minorderamountvalue = multiChannel.layerParameters['minorderamountvalue'];
		var maxorderamountvalue = multiChannel.layerParameters['maxorderamountvalue'];
		var campaignduration = multiChannel.layerParameters['campaignduration'];
		financingsamples.init(amount,percentagerate,minorderamountvalue,maxorderamountvalue,campaignduration);
	}

	if ($defined(multiChannel.layer[layerId].callback)) {
		multiChannel.layer[layerId].callback();
		multiChannel.layer[layerId].callback = undefined;
	}
};

multiChannel.fitLayer = function(){
	var layer = $('layer');
	var iframe = $('layer-iframe');
	if($defined(layer) && $defined(iframe)) {
	iframe.style.width = layer.offsetWidth + 'px';
	iframe.style.height = layer.offsetHeight + 'px';
	}
};

multiChannel.setRedirectCategoryUrl = function(url) {
	var element = $('redirectCategoryUrl');
	var uri = new URI(element.href);
	multiChannel.setParameter('redirectURL', url, uri);
	element.href = uri.toString();
}

// **************************
// get and set URL-parameters
// **************************
multiChannel.getPathInfoMappingBySeoPath = function(seoPath) {
    var result = null;
	var seoQueryString = null;
	if($defined(multiChannel.context)){
		multiChannel.context.seo.pathInfoMappings.each(function(pathInfoMapping) {
			var match = seoPath.match(new RegExp(pathInfoMapping.extractSeoQueryString));
			if ($defined(match)) {
				if (match.length == 1) {
					result = pathInfoMapping;
					seoQueryString = '';
				} else if (seoQueryString == null || match[1].length < seoQueryString.length) {
					result = pathInfoMapping;
					seoQueryString = match[1];
				}
			}
		});
	}
    return result;
}

multiChannel.getParameter = function(name, uri) {
	var parameters = multiChannel.getParameters(uri);
	return parameters[name];
}

multiChannel.getParameters = function(uri) {
	var uriDefined = $defined(uri);
	uri = new URI(uri);
	var seoPath = uri.get('directory') + uri.get('file');
	var pathInfoMapping = multiChannel.getPathInfoMappingBySeoPath(seoPath);

	if ($defined(pathInfoMapping) && pathInfoMapping.parameters.length > 0) {
		var match = seoPath.match(new RegExp(pathInfoMapping.extractSeoQueryString));

		if (match.length > 1) {
			var seoParameters = match[1].split(multiChannel.context.seo.separator);
			var seoQueryString = '';
			var parameters = new Object();

			pathInfoMapping.parameters.each(function(name, index) {
				parameters[name] = seoParameters[index];
			});
			uri.setData(parameters, true);
		}
	}

	if (!uriDefined && $chk(multiChannel.krypto)) {
		var queryString = uri.get('query');
		queryString += $chk(queryString) ? ('&' + multiChannel.krypto) : multiChannel.krypto;
		uri.set('query', queryString);
	}
	return uri.getData();
};

multiChannel.setParameter = function(name, value, uri) {
	var parameters = new Object();
	parameters[name] = value;
	multiChannel.setParameters(parameters, uri);
};

multiChannel.setParameters = function(parametersOrg, uri) {
	var uriDefined = $defined(uri);

	if (!uriDefined) {
		uri = new URI();
	}
	var seoPath = uri.get('directory') + uri.get('file');
	var pathInfoMapping = multiChannel.getPathInfoMappingBySeoPath(seoPath);
	var parameters = new Object();

	$each(parametersOrg, function(value, name) {
		parameters[name] = value;
	});

	if ($defined(pathInfoMapping) && pathInfoMapping.parameters.length > 0) {
		var match = seoPath.match(new RegExp(pathInfoMapping.extractSeoQueryString));

		if (match.length > 1) {
			var seoParameters = match[1].split(multiChannel.context.seo.separator);
			var deleteParameters = new Array();
			var seoQueryString = '';

			pathInfoMapping.parameters.each(function(name, index) {

				if ($defined(parameters[name])) {
					deleteParameters.push(name);
					seoParameters[index] = parameters[name];
				}
			});

			seoParameters.each(function(value) {
				seoQueryString += value + multiChannel.context.seo.separator;
			});
			seoQueryString = seoQueryString.substring(0, seoQueryString.length - 1);
			seoPath = pathInfoMapping.seoPath.replace(/\${seoQueryString}/, seoQueryString);
			var seoUri = new URI(seoPath);
			uri.set('directory', seoUri.get('directory'));
			uri.set('file', seoUri.get('file'));

			deleteParameters.each(function(name) {
				delete parameters[name];
			});
		}
	}
	uri.setData(parameters, true);
	uri.set('query', uri.get('query').cleanQueryString());

	if (!uriDefined) {
		uri = multiChannel.removeBlacklistedParametersFromURI(uri);
		uri.go();
	}
};

multiChannel.isSecure = function() {
	var uri = new URI();
	return uri.get('scheme') == 'https';
}

multiChannel.getCurrentScheme = function() {
	var uri = new URI();
	return uri.get('scheme');
}

// ********************
// Create a link to an image on the pixelboxx
// ********************

multiChannel.createPixelboxxLink = function(doi, scaleParam) {
	var isSSL = multiChannel.isSecure();
	var baseUrl;
	if (isSSL) {
		baseUrl = multiChannel.context.imageServerUrl.replace(/^http:/, "https:");
	} else {
		baseUrl = multiChannel.context.imageServerUrl;
	}
	return baseUrl + "doi/" + doi + "/" + scaleParam + "/";
};

multiChannel.setNavigationLeftManual = function(id){

	if ($defined($(id))) {
		var navigationLeftManualElement = $(id);
		var navigationLeftElement = $('navigationLeft');
		var blockTagsElement = $('block_tags');
		navigationLeftManualElement.show();

		if ($defined(blockTagsElement)) {
			blockTagsElement.getChildren('div.box1')[0].getChildren('div.container').setStyle('padding-bottom', 0);
			navigationLeftManualElement.getChildren('ul.level0')[0].setStyle('padding-top', 0);
		}
	}

	window.addEvent('domready', function() {
		$$('div.navigationLeft').filter(function(element) {
			return element.isVisible();
		}).each(function(element, index, leftNavigations) {

			if (index > 0) {
				leftNavigations[index - 1].setStyle('padding-bottom', 0);
				element.getChildren('ul.level0')[0].setStyle('padding-top', 0);
			}
		});
	});
};

multiChannel.setNavigationLeft = function(id) {
	multiChannel.setNavigationLeftManual('navigationLeft_' + multiChannel.getParameter('navigationId'));

	if(!$defined(id)) {
		// Product area
		var searchCategoryId = multiChannel.getParameter('categoryId');
		var leftNavId = multiChannel.getParameter('leftNavId');
		if (searchCategoryId != null) {
			var id = 'left_' + searchCategoryId;
		} else {
			var id = 'left_' + leftNavId;
		}
	}

	var selectedElement = $(id);

	if ($defined(selectedElement)) {
		selectedElement.addClass('selected');

		selectedElement.getParents('ul').each(function(item) {
			item.addClass('selected');

			if ($defined(item.getPrevious('a'))) {
				item.getPrevious('a').addClass('selected');

				if ($defined(searchCategoryId)) {
					searchCategoryId = item.getPrevious('a').id.replace(/left_/, '');
				}
			}
		});

		selectedElement.getParents('li').each(function(item) {
			item.addClass('selected');
		});

		if ($defined(selectedElement.getNext('ul'))) {
			selectedElement.getNext('ul').addClass('selected');
		}

		var navroot = $('navigationLeft');
		if ($defined(navroot)) {
			var level0root = navroot.getFirst('ul.level0 selected');
			if ($defined(level0root)) {
				var level0liselected = level0root.getFirst('li.selected');
				if ($defined(level0liselected)) {
					var level1root = level0liselected.getFirst('ul.level1 selected');
					if ($defined(level1root)) {
						var level1liselected = level1root.getFirst('li.selected');
						if ($defined(level1liselected)) {
							var level2root = level1liselected.getFirst('ul.level2 selected');
							if ($defined(level2root)) {
								var level2liselected = level2root.getFirst('li.selected');
								if ($defined(level2liselected)) {
									level1root.addClass('notActive');
								}
							}
						}
					}
				}
			}
		}

		var element = selectedElement.getParent('div').getFirst('ul').getFirst('li.selected');

		if ($defined(element)) {
			multiChannel.setNavigationSub('top_' + element.getFirst('a').id.replace(/[^0-9]*([0-9]*)/, '$1'));

			if ($defined(element.getFirst('ul.selected'))) {

				while ($defined(element.getFirst('ul.selected')) && $defined(element.getFirst('ul.selected').getLast('li'))) {
					element = element.getFirst('ul.selected').getLast('li');
				}

				if ($defined(element.getFirst('a'))) {
					element.getFirst('a').addClass('last');
				}
			}
		}
	}
};

multiChannel.processSlider = function() {

	$$('div .sliderToggle').each(function(toggleElement) {
		var contentElement = toggleElement.getNext('div .sliderContent');

		if (contentElement) {
			var togglerElement = new Element('div', {
				'class': 'boxCollapse'
			});
			var targetElement = new Element('div', {
				'class': 'sliderTarget',
				'styles': {
					'height': contentElement.offsetHeight
				}
			});

			toggleElement.grab(togglerElement);
			targetElement.wraps(contentElement);

			var fx = new Fx.Slide(
					targetElement,
					{
						duration: contentElement.offsetHeight * 5,
						transition: Fx.Transitions.Bounce.easeOut,
						onStart: function() {
						if(togglerElement.hasClass('boxExpand')){
							targetElement.setStyles({'visibility': 'visible'});
						}
						togglerElement.toggleClass('boxCollapse');
						togglerElement.toggleClass('boxExpand');
					},
					onComplete: function() {
						if(togglerElement.hasClass('boxExpand')){
							targetElement.setStyles({'visibility': 'hidden'});
						}
					}
					});

			//Fix Fx.Slide-bug not setting height initially
			targetElement.parentNode.setStyle('height', contentElement.offsetHeight);

			//Fix IE6 misbehaviour
			if (Browser.Engine.trident && Browser.Engine.version == 4) {
				contentElement.setStyle('top', 0);
			}

			togglerElement.addEvent('click', function(e) {
				e = new Event(e);
				fx.toggle();
				e.stop();
			});
		}
	});
};

/**
 * executes a store change by a store drop down box
 */
multiChannel.changeStoreCallback = multiChannel.setParameters;
multiChannel.changeStoreDoRedirect = true;

multiChannel.getDomain = function(uri){
	var uri = $defined(uri) ? new URI(uri): new URI();
	return uri.get('host').substring(uri.get('host').indexOf('.') + 1);
};


multiChannel.changeStore = function (storeId, url) {
	if (storeId != -1) {
		var uri = url == null ? new URI() : new URI(url);
		var domain = multiChannel.getDomain(uri);
		Cookie.write('MC_STORE_ID', storeId, { 'domain': domain, 'path': '/', 'duration': 30 });
		multiChannel.changeStoreCallback({'storeId': storeId}, uri);
		if (multiChannel.changeStoreDoRedirect) {
			uri.go();
		}
	}
};

multiChannel.removeStoreSelection = function () {
	var domain = multiChannel.getDomain();
	Cookie.dispose('MC_STORE_ID', { 'domain': domain, 'path': '/'});
};

multiChannel.setNavigation = function(id) {
	$('navigationList').getElements('li').each(function(element) {
		if ($defined(element.id)) {
			element.removeClass(element.id + 'Selected');
			element.addClass(element.id);
			if (element.id == id) {
				element.removeClass(element.id);
				element.addClass(element.id + 'Selected');
			}
		}
	});
};

multiChannel.setNavigationSub = function(id) {
	if ($(id) != null) {
		$(id).addClass('selected');
	}
};

multiChannel.restoreNavigation = function(event, id) {
	event = event || window.event || false;
	var element = event.relatedTarget || event.toElement || false;
	if ($(element) != $('navigation') &&  !$('navigation').hasChild($(element)) && ( !$defined($('topnavlayer_' + id))  || $(element) != $('topnavlayer_' + id) && !$('topnavlayer_' + id).hasChild($(element)))) {
		multiChannel.clearShowTimer();
		multiChannel.clearHideTimer();
		multiChannel.timer.hideTimer = function(){
			multiChannel.resetTopnav();
			multiChannel.setNavigation(multiChannel.navigationId);
		}.delay(multiChannel.timer.hideTime);

	}
};

multiChannel.setNavigationInit = function(id) {

	if ($defined($(id))) {

		if ($(id).getParents('div.sub').length > 0) {
			multiChannel.navigationId = $(id).getParents('div.sub')[0].getParent('div').id;
			multiChannel.setNavigationSub(id);
		} else {
			multiChannel.navigationId = id;
		}

		multiChannel.setNavigation(multiChannel.navigationId);

		if (multiChannelTemplate.campaignSkin[multiChannel.navigationId] != null) {
			var campaignSkin = multiChannelTemplate.campaignSkin[multiChannel.navigationId].campaignSkin;

			$$('link[title=theme]').each(function(item) {
				item.href = item.href.replace(multiChannelTemplate.defaultCampaignSkin, campaignSkin);
			});
		}
	}
};

//topnav
multiChannel.clearShowTimer = function(){
	multiChannel.timer.showTimer = $clear(multiChannel.timer.showTimer);
};

multiChannel.clearHideTimer = function(){
	multiChannel.timer.hideTimer = $clear(multiChannel.timer.hideTimer);
};

multiChannel.topnavLayerInit = function(){
	window.addEvent('domready', function(){
		if($defined($('topnavlayer-container'))) {
			$('topnavlayer-container').getChildren().each(function(item){
				item.onmouseout = function(event) {
					event = event || window.event || false;
					var element = event.relatedTarget || event.toElement || false;
					if (element != null) {
						multiChannel.clearShowTimer();
						multiChannel.clearHideTimer();
						multiChannel.timer.hideTimer = function(){
							multiChannel.closeTopnavLayer(element, item.get('id'));
						}.delay(multiChannel.timer.hideTime);
					}
				};
			});

			$$('#navigation ul li').each(function(item){
				if(!item.hasClass('separator')){
					item.addEvent('mouseover', function(){
						multiChannel.clearShowTimer();
						multiChannel.clearHideTimer();
						multiChannel.timer.showTimer = function(){
							multiChannel.resetTopnav();
							if(!multiChannel.bigStartLayer.sliding){
								var navId = item.get('id');
								if($defined($('topnavlayer_' + navId))) {
									var layer = $('topnavlayer_' + navId);
									layer.show().addClass('active');
									multiChannel.fitTopnavLayer(navId);
									$('navigationTopnavLink').focus();
								}

							}
							multiChannel.setNavigation(navId);

						}.delay(multiChannel.timer.showTime);
					});

					item.addEvent('mouseout', function(event){
						var navId = item.get('id');
						multiChannel.restoreNavigation(event, navId);
					});

				}

			});
		}
	});
};

multiChannel.resetTopnav = function(){
	$('topnavlayer-container').getChildren().each(function(item){
		item.hide().removeClass('active');
	});
	multiChannel.removeTopnavIframe();
};

multiChannel.fitTopnavLayer = function(navId){
	var layer = $('topnavlayer_' + navId);
	if($defined($(layer))){
		//topnav arrow position
		var topnavArrowImagePositionDefault = 729;
		var topnavArrowPositionDefault = 30;

		var containerY = parseInt($('header').getPosition().y + $('header').getDimensions().height - 6);

		var windowWidth = window.getSize().x;
		var layerWidth = layer.getDimensions().width;
		var containerX = parseInt((windowWidth - layerWidth) / 2);

		$('topnavlayer-container').setStyle('top', containerY);
		$('topnavlayer-container').setStyle('left', containerX);

		// setting arrow position
		var x = parseInt( $('topnavlayer_' + navId).getPosition().x + topnavArrowImagePositionDefault);
		var x2 = parseInt( $(navId).getPosition().x );
		var arrowPositionX = parseInt(x-x2);

		// special case: arrow cannot point to top nav element because layer width is too small
		var topNavItemPositionX = $(navId).getPosition().x;
		var nextTopNavItemPositionX = parseInt(topNavItemPositionX + $(navId).getDimensions().width);
		var topNavLayerPositionX = containerX;

		if( parseInt(topNavLayerPositionX  + topnavArrowPositionDefault) >  nextTopNavItemPositionX) {
			$('topnavlayer-container').setStyle('left', parseInt(nextTopNavItemPositionX - topnavArrowPositionDefault));

			// changing arrow position
			arrowPositionX = topnavArrowImagePositionDefault;
		}

		if(arrowPositionX > topnavArrowImagePositionDefault) arrowPositionX = topnavArrowImagePositionDefault;

		$('topnavlayer-arrow_' + navId).setStyle('backgroundPosition', '-' + arrowPositionX + 'px 0px');


		var layer_content = $('topnavlayer-content_' + navId);
		if($defined($(layer_content))){
			var iframe = $('topnavlayer-iframe');
			iframe.style.width = layer_content.offsetWidth + 'px';
			iframe.style.height = layer_content.offsetHeight + 'px';
		}
		var iframe_container = $('topnavlayer-container-iframe');
		iframe_container.setStyle('top', containerY + 16);
		iframe_container.show();
	}
};

multiChannel.removeTopnavIframe = function(){
	var iframe = $('topnavlayer-iframe');
	iframe.style.width = 0;
	iframe.style.height = 0;
	$('topnavlayer-container-iframe').hide();
};

multiChannel.closeTopnavLayer = function(element, id){

	if(!$(id).hasChild($(element))){
		$(id).hide().removeClass('active');
		multiChannel.removeTopnavIframe();
		multiChannel.setNavigation(multiChannel.navigationId);
	}

};

multiChannel.allOutlets =  new Hash();
// Get all outlets
multiChannel.loadOutlets = function(tableId) {
		var tableEl = $(tableId);
		var childElements = tableEl.getElements('a');
		for (var i=0; i<childElements.length; i++) {
			var outletLinkEl=childElements[i];
			// Key: Outletname, Value: Url
			multiChannel.allOutlets.set(outletLinkEl.innerHTML, outletLinkEl.href);
		}
};

multiChannel.showOutlets = function(firstToken, tableId) {
	if($defined(tableId)) {
		var outlets = new Hash();
		var tableEl = $(tableId);
		// Collect all possible outlets
		outlets = multiChannel.allOutlets.filter(function(value, key){
			return key.test('^' + firstToken) || firstToken=='all';
		});

		// Remove the content of our outlet table
		tableEl.deleteRow(0);
		tableEl.insertRow(-1);
		var counter = 0;
		var newCell;
		var redirectURL = multiChannel.getParameter('redirectURL') == null ? new URI(multiChannel.context.mystore):multiChannel.getParameter('redirectURL');
		outlets.each(function(value, key){
			// Insert 6 outlets per column
			if(counter == 0 || counter % 6 == 0) {
				newCell = tableEl.rows[0].insertCell(-1);
				newCell.className = "tableCell";
			}
			counter++;
			var uri = new URI(value);
			var storeId = multiChannel.getParameter('storeId', uri);
			var aLink = new Element('a', {
				'href': value,
				'onclick': 'multiChannel.changeStore(' + storeId + ', redirectURL); return false;',
				'html': key,
				'class' : 'outletlink'
			});
			var divEl = new Element('div', {
				'class': 'outletRow go-red'
			});
			divEl.grab(aLink);
			$(newCell).grab(divEl);
		});

	}
};

// Add javascript to our head element
multiChannel.addJavaScript = function(elementId, src) {
	var headElement = document.getElementsByTagName("head")[0];
	var scriptElement = document.createElement('script');
	scriptElement = new Element('script', {
												'id':elementId,
												'type':'text/javascript',
												'src':src
		});
	scriptElement.type = 'text/javascript';
	scriptElement.src = src;
	headElement.appendChild(scriptElement);
};

/**************************************************
MultiChannel External SSO Functions
**************************************************/

multiChannel.sso = new Object();

// TEST: This method should be implemented by our partner
multiChannel.myCallBack = function() {
	alert('this is my callback function');
};

multiChannel.sso.extractCookieName = function(cookie) {
	var pos = cookie.indexOf("=");
	if (pos > -1) {
		return cookie.substr(0, pos);
	} else {
		return cookie;
	}
};

// Resets the password and informs the customer by email
multiChannel.sso.forgotPassword = function(logonId, captchaInput, callbackFunction, params) {
	var url = multiChannel.context.ssoForgotPassword + '&logonId=' + logonId+ '&captchaInput=' + captchaInput + '&captchaContext=FORGETPASSWORD';
	// Set our callbackFunction. This function will be called after we got our response from backend.
	multiChannel.sso.setCallbackFunction(callbackFunction);
	// Add to header
	multiChannel.addJavaScript('ssoResponseScript', url);
};

// This function loads all user infos into our json object. Precondition: User must be logged in.
multiChannel.sso.getUserInfos = function(callbackFunction, params) {
	var url = multiChannel.context.ssoUserInfos;
	// Set our callbackFunction. This function will be called after we got our response from backend.
	multiChannel.sso.setCallbackFunction(callbackFunction);
	// Add to header
	multiChannel.addJavaScript('ssoResponseScript', url);
};

// This functions refreshed the basket of our current user
multiChannel.sso.refreshBasket = function(provider, count, basketURL, callbackFunction, params) {
	var url = multiChannel.context.ssoRefreshBasket + '&provider=' + provider + '&count=' + count + '&basketURL=' + escape(basketURL);
	// Update our basket
	multiChannel.sso.setMCCallbackFunction(multiChannel.basket.updateBasket);
	// Set our callbackFunction. This function will be called after we got our response from backend.
	multiChannel.sso.setCallbackFunction(callbackFunction);
	// Add to header
	multiChannel.addJavaScript('ssoResponseScript', url);
};

// Accept the terms and conditions permanently
multiChannel.sso.updateTACState = function(state, callbackFunction, params) {
	var url = multiChannel.context.ssoUpdateTACState + '&state=' + state;
	// Set our callbackFunction. This function will be called after we got our response from backend.
	multiChannel.sso.setCallbackFunction(callbackFunction);
	// Add to header
	multiChannel.addJavaScript('ssoResponseScript', url);
};

// Logout user
multiChannel.sso.logoutUser = function(callbackFunction, params) {
	var url = multiChannel.context.ssoLogoutUser;
	// Rewrite cookies as callback
	multiChannel.sso.setMCCallbackFunction(multiChannel.user.writeCookies);
	// Set our callbackFunction. This function will be called after we got our response from backend.
	multiChannel.sso.setCallbackFunction(callbackFunction);
	// Add to header
	multiChannel.addJavaScript('ssoResponseScript', url);
};

// Function to refresh the user infos and hold the session
multiChannel.sso.periodicalUserRefreshFunction = function() {
	var headElement = document.getElementsByTagName("head")[0];
	var scriptElement = headElement.getElementById("userJS");
	if(scriptElement) {
		var userJSSrc = scriptElement.get("src");
		scriptElement.destroy();
		multiChannel.addJavaScript("userJS", userJSSrc);
	}
};

/**************************************************
MultiChannel SSO functions (internal use only)
**************************************************/

multiChannel.sso.jsonObject = {};

// Method will be called by our sso response to provide the results to our partner
multiChannel.sso.setSSOJSONObject = function(jsonObject) {
	multiChannel.sso.jsonObject = jsonObject;
	// remove created script of our sso response
	var ssoScriptEl = $(document.head).getElementById('ssoResponseScript');
	if($defined(ssoScriptEl)) {
		ssoScriptEl.destroy();
	}

	// Call our own callback if defined (updateBasket() or writeCookies())
	if(multiChannel.sso.mcCallbackFunction && multiChannel.sso.requestSuccessful()) {
		multiChannel.sso.mcCallbackFunction();
	}

	// Call the callback function of our partner
	if(multiChannel.sso.callbackFunction) {
		multiChannel.sso.callbackFunction();
	} else {
		alert('Partner: No callback Function defined!');
	}

};

// Sets an internal callback to update cookies or basket
multiChannel.sso.setMCCallbackFunction = function(callback) {
	multiChannel.sso.mcCallbackFunction = callback;
};

// Sets the callback function of our partner. Will be used by our sso functions.
multiChannel.sso.setCallbackFunction = function(callback) {
	multiChannel.sso.callbackFunction = callback;
};

/**************************************************
MultiChannel External SSO functions (response)
**************************************************/

// Service method for our partner
multiChannel.sso.getJSON = function() {
	return multiChannel.sso.jsonObject;
};

// Service method for our partner
multiChannel.sso.getStatusCode = function() {
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.state && multiChannel.sso.jsonObject.state.code)
		return multiChannel.sso.jsonObject.state.code;
	return 'SSO_NO_REQUEST';
};

// Service method for our partner
multiChannel.sso.requestSuccessful = function() {
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.state && multiChannel.sso.jsonObject.state.code)
		return multiChannel.sso.jsonObject.state.code == 'SSO_SUCCESS';
	return false;
};

// Service method for our partner
multiChannel.sso.getUserToken = function() {
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.userToken)
		return multiChannel.sso.jsonObject.userToken;
	return false;
};

// Service method for our partner
multiChannel.sso.getJSONUserInfos = function() {
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.userinformationlist) {
		return multiChannel.sso.jsonObject.userinformationlist[0]
	} else {
		return null;
	}
};

// Service method for our partner
multiChannel.sso.getErrorText = function() {
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.state && multiChannel.sso.jsonObject.state.text) {
		return multiChannel.sso.jsonObject.state.text;
	} else {
		return 'No error';
	}
};

// Service method for our partner
multiChannel.sso.getSSOToken = function() {
	var ssoToken;
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.userToken && multiChannel.sso.jsonObject.userToken[1]) {
		ssoToken = multiChannel.sso.jsonObject.userToken[1];
	}
	return ssoToken;
};

// Service method for our partner
multiChannel.sso.getRegisterType = function() {
	var regType;
	if(multiChannel.sso.jsonObject && multiChannel.sso.jsonObject.userToken && multiChannel.sso.jsonObject.userToken[0]) {
		regType = multiChannel.sso.jsonObject.userToken[0];
	}
	return regType;
};
/**************************************************
END SSO Functions
**************************************************/

multiChannel.removeLastOptionalElement = function(element) {
	var lastElement = element.getLast('div.optional');

	if (lastElement != null) {

		if (lastElement.getPrevious().hasClass('separator')) {
			lastElement.getPrevious().dispose();
		}
		lastElement.dispose();
	}
};

multiChannel.getInnerHeight = function(element) {
	var result = 0;
	lastElement = element.getLast('div');

	if (lastElement != null) {
		result = lastElement.offsetTop + lastElement.offsetHeight;
	}
	return result;
}

multiChannel.getOptionalElementCount = function(element) {
	var result = 0;

	element.getChildren('div.optional').each(function(optionalElement) {

		if (optionalElement.isDisplayed()) {
			result++;
		}
	});
	return result;
}

multiChannel.adjustLoginPageHeights = function() {

	var loginDiv = $('myAccountLogin');
	var registerDiv = $('myAccountRegister');
	loginDiv.erase('style');
	registerDiv.erase('style');

	//var additionalButtonDivHeight = $$('#myAccountRegister div.submit');
	var additionalButtonDivHeight = $$('#myAccountLogin div.submit')[0].getSize().y;
	var maxActualHeight = Math.max(loginDiv.getSize().y, registerDiv.getSize().y);
	var resultingHeight = maxActualHeight + additionalButtonDivHeight;

	[loginDiv, registerDiv].each(function(item) {
		item.setStyle('height', resultingHeight)
	});
}

multiChannel.fitSite = function() {
	var contentMiddle = $('contentMiddle');
	var contentLeft = $('contentLeft');
	var contentRight = $('contentRight');
	var content = $('content');
	var contentFlashstage = $('flashstage');
	var contentHeight = 0;
	var contentFlashstageHeight = 0;
	if(contentFlashstage!=null){
		contentFlashstageHeight = contentFlashstage.offsetHeight;
	}
	if (contentMiddle != null && contentLeft != null && contentRight != null) {
		var middleHeight = multiChannel.getInnerHeight(contentMiddle)+contentFlashstageHeight;
		if(contentLeft.getLast('div') != null){
			if (contentLeft.getLast('div').hasClass('separator')) {
				contentLeft.getLast('div').dispose();
			}
		}
		if(contentLeft.getLast('div') != null){
			contentLeft.getLast('div').setStyle('margin-bottom', 0);
		}
		if(contentRight.getLast('div') != null){
			contentRight.getLast('div').setStyle('margin-bottom', 0);
		}
		var leftHeight = multiChannel.getInnerHeight(contentLeft);
		var leftOptionalCount = multiChannel.getOptionalElementCount(contentLeft);
		var rightHeight = multiChannel.getInnerHeight(contentRight)+contentFlashstageHeight;
		var rightOptionalCount = multiChannel.getOptionalElementCount(contentRight);
		while (leftHeight > middleHeight || rightHeight > middleHeight) {
			if (leftHeight > rightHeight && leftOptionalCount > 0) {
				multiChannel.removeLastOptionalElement(contentLeft);
				leftHeight = multiChannel.getInnerHeight(contentLeft);
				leftOptionalCount--;
				if(contentLeft.getLast('div') != null){
					contentLeft.getLast('div').setStyle('margin-bottom', 0);
				}
			} else if (rightHeight > leftHeight && rightOptionalCount > 0) {
				multiChannel.removeLastOptionalElement(contentRight);
				rightHeight = multiChannel.getInnerHeight(contentRight)+contentFlashstageHeight;
				rightOptionalCount--;
				if(contentRight.getLast('div') != null){
					contentRight.getLast('div').setStyle('margin-bottom', 0);
				}
			} else if (leftHeight > rightHeight && leftOptionalCount > 0 && rightOptionalCount > 0) {
				multiChannel.removeLastOptionalElement(contentLeft);
				leftHeight = multiChannel.getInnerHeight(contentLeft);
				leftOptionalCount--;
				if(contentLeft.getLast('div') != null){
					contentLeft.getLast('div').setStyle('margin-bottom', 0);
				}
				multiChannel.removeLastOptionalElement(contentRight);
				rightHeight = multiChannel.getInnerHeight(contentRight)+contentFlashstageHeight;
				rightOptionalCount--;
				if(contentRight.getLast('div') != null){
					contentRight.getLast('div').setStyle('margin-bottom', 0);
				}
			} else {
				break;
			}
		}
		if(content!=null){
			contentHeight = content.offsetHeight;
			contentMiddle.setStyle('height', (contentHeight-contentFlashstageHeight)+'px');
		}
	}
};

multiChannel.submitenter = function(e, callBack) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13) {
		// f.e. submit()
		callBack();
		return false;
	}
	else
		 return true;
};

//*********************************
//** Userdata handling functions **
//*********************************

multiChannel.setPhone = function(phoneEl, prefixEl, numberEl) {
	var prefix = prefixEl.get('value');
	var number = numberEl.get('value');
	if(phoneEl && prefix && number) {
		phoneEl.setProperty('value', prefix + '-' + number);
	}
};

multiChannel.setBirthday = function(birthdayEl, dayEl, monthEl, yearEl) {
	var day = dayEl.get('value');
	var month = monthEl.get('value');
	var year = yearEl.get('value');
	if(birthdayEl && day && month && year) {
		birthdayEl.setProperty('value', day + '.' + month + '.' + year);
	}
};

//*********************
//** Validator **
//*********************
multiChannel.validator = new Object();

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

//Uses same implementation as backend java
multiChannel.validator.EMailValidator = function () {
	this.emailPat = /^(.+)@(.+)$/;
	this.specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	this.validChars = "\[^\\s" + this.specialChars + "\]";
	this.quotedUser = "(\"[^\"]*\")";
	this.ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	this.atom = this.validChars + '+';
	this.word = "(" + this.atom + "|" + this.quotedUser + ")";
	this.userPat = new RegExp("^" + this.word + "(\\." + this.word + ")*$");
	this.domainPat = new RegExp("^" + this.atom + "(\\." + this.atom +")*$");
	this.isValid = function(emailStr) {
		var matchArray = emailStr.match(this.emailPat);

		if (matchArray == null) {

		/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */
			multiChannel.validator.log("Email address seems incorrect (check @ and .'s)");
			return false;
		}
		var user = matchArray[1];
		var domain = matchArray[2];

		// check valid chars
		for (i=0; i < user.length; i++) {
			if (user.charCodeAt(i) > 127) {
				return false;
		   }
		}
		for (i=0; i < domain.length; i++) {
			if (domain.charCodeAt(i) > 127) {
				return false;
		   }
		}

		// check user
		if (user.match(this.userPat) == null) {
			// user is not valid
			return false;
		}

		// check ip address
		var IPArray = domain.match(this.ipDomainPat);
		if (IPArray!=null) {
			// this is an IP address
			for (var i=1; i <= 4; i++) {
				if (IPArray[i] > 255) {
					return false;
				}
			}
			return true;
		}

		// check symbolic domain
		var atomPat = new RegExp("^" + this.atom + "$");
		var domArr = domain.split(".");
		var len = domArr.length;
		for (i=0; i < len; i++) {
			if (domArr[i].search(atomPat) == -1) {
				return false;
		   }
		}

		// check domain ending
		if (domArr[domArr.length-1].length < 2) {
			return false;
		}

		// check host name
		if (len < 2) {
			return false;
		}
		return true;
	}
}

multiChannel.validator.FormValidator = new Class({
  Implements: [Options, Events],

  options: {
    requiredSpan: new Element('span', { 'class': 'red'}),
    requiredSpanText: '*',
    onFormValidate: function(isValid, form){},
    onElementValidate: function(isValid, field){}
  },

  initialize: function(form, formFieldoptions, errorBox, globalErrorMessage, globalErrorsMessage){
    this.formFieldoptions = formFieldoptions;
    try {
      if(errorBox){
        this.errorBox = $(errorBox);
      }
      else{
        this.errorBox = $('errorBox');
      }
      if(globalErrorMessage) {
      	this.globalErrorMessage = globalErrorMessage;
      }
      if(globalErrorsMessage) {
      	this.globalErrorsMessage = globalErrorsMessage;
      }
      this.form = $(form);
      this.watchFields();
    }
    catch(e){
      multiChannel.validator.log(e);
    }
  },

  watchFields: function(){
    try{
      for(fieldId in this.formFieldoptions){
        var el = $(fieldId);
        if(this.formFieldoptions[fieldId].required){
          this.initRequired(fieldId);
        }
      };
    }
    catch(e){
      multiChannel.validator.log(e);
    }
  },

  initRequired: function(fieldId){
    var tmpId = fieldId;
    if(this.formFieldoptions[fieldId].destination){
      tmpId = this.formFieldoptions[fieldId].destination;
    }
    if($('t_' + tmpId)){
    var descrElem = $('t_' + tmpId);
      var tmpEL = this.options.requiredSpan.clone();
      tmpEL.set('html', this.options.requiredSpanText);
      tmpEL.injectInside(descrElem);
    }
  },

  validate: function(force, clear) {
  	if (! $defined(clear) || clear){
	    this.clearGlobalError();
	}
//    this.clearLocalErrors();
    var result = true;
    var count = 0;
    for(fieldId in this.formFieldoptions){
      var el = $(fieldId);
      if(!this.validateField(el, force, true)){
        result = false;
				count++;
        if(!force)
          break;
      }else if(el.hasClass('error')){
				el.removeClass('error');
				el.removeClass('error_text');
			}
    };
    /*if(!result && this.globalErrorMessage){
			var message;
			if(count > 1)
				message = this.globalErrorsMessage.replace('{0}', count);
			else
				message = this.globalErrorMessage;
      //this.addGlobalError(message);
    }*/
    return result;
  },

  validateField: function(field, force, full){
    //alert(field.id + '|' + force + '|' + full)
    if(this.paused) return true;
    field = $(field);
    var result = false;

    result = this.formFieldoptions[field.id].validators.some(function(validatorObj){
      var depends = false;
      if(this.formFieldoptions[field.id].dependsSrc){
        var tmpButtons = $('input[name='+this.formFieldoptions[field.id].dependsSrc+']', this.form.id);
        if(tmpButtons && tmpButtons.length>0) {
          for (var i = 0; i < tmpButtons.length; i++) {
            if(tmpButtons[i].value == this.formFieldoptions[field.id].dependsVal && tmpButtons[i].checked){
              depends = true;
            }
          }
        }

        tmpButtons = $(this.formFieldoptions[field.id].dependsSrc, this.form.id);

        if (tmpButtons.value == this.formFieldoptions[field.id].dependsVal){
         depends = true;
        }

        if(tmpButtons && tmpButtons.length > 0) {
          for (var i = 0; i < tmpButtons.length; i++) {
            if(tmpButtons[i].selected && tmpButtons[i].value == this.formFieldoptions[field.id].dependsVal){
              depends = true;
            }
          }
        }


      }

      var tmpResult = true;
      field.removeClass('error_text');
      if((field.get('value') != '' || full) && !this.formFieldoptions[field.id].dependsField){
        var tmpValidator = this.validators[validatorObj.name];

        if(depends || !this.formFieldoptions[field.id].dependsSrc){
          tmpResult = tmpValidator.test(field, this.formFieldoptions[field.id]);

          if(!tmpResult || validatorObj.name == 'Valid'){
            if(force){
            	//this.addLocalError(validatorObj.msg + "<br />", field);
							this.addGlobalError(validatorObj.msg + "<br />", field);
            }
          }
        }

       //control payment data with depends field
       } else if ((field.get('value') != '' || full) && this.formFieldoptions[field.id].dependsField){
         element = field.get('value');
         options = $(this.formFieldoptions[field.id].dependsField).get('value');
         srcval = $(this.formFieldoptions[field.id].dependsSrc).get('value');
         dpval = this.formFieldoptions[field.id].dependsVal;

         if (srcval == dpval){

           if($(this.formFieldoptions[field.id].fieldpair1)){
             fieldpairvalue = $(this.formFieldoptions[field.id].fieldpair1).get('value');
             if ((element == '' && fieldpairvalue != '')){
               //this.addLocalError(validatorObj.msg2 + "<br />", field);
							 this.addGlobalError(validatorObj.msg2 + "<br />", field);
              return tmpResult;
           }
         }

         if(element.length == 0 && options.length == 0){
           //this.addLocalError(validatorObj.msg2 + "<br />", field);
					 this.addGlobalError(validatorObj.msg2 + "<br />", field);
           return tmpResult;
         }

        }

       }

      return !tmpResult;

    }, this);

    if(!full) {
      this.validate(false);
    }
    return !result;
  },

  validatePassword: function(infoboxId, passwordFieldId, passwordRepeatFieldId) {
	    var result = true;
	    var count = 0;
	    var infobox = $(infoboxId);
	    for(fieldId in this.formFieldoptions){
	      var el = $(fieldId);
		  var pw = $(passwordFieldId);
		  var pwr = $(passwordRepeatFieldId);
	      if(el != null && ((pw!=null && pw.get('value')!='')||(pwr!=null && pwr.get('value')!=''))){
		      if(!this.validatePasswordField(el)){
		        result = false;
						count++;
		      }else if(el.hasClass('error')){
						el.removeClass('error');
						el.removeClass('error_text');
		      }
		      infobox.setStyle('display','block');
	      }else{
	    	  infobox.setStyle('display','none');
	      }
	    };
	    return result;
	  },

	  validatePasswordField: function(field){
	    field = $(field);
	    var result = true;
	    var criteriaClass ='notOk';
	    this.formFieldoptions[field.id].validators.each(function(validatorObj){
	      var depends = false;
	      var tmpResult = true;
	      if(field != null){
	        var tmpValidator = this.validators[validatorObj.name];
	        tmpResult = tmpValidator.test(field, this.formFieldoptions[field.id]);
	        tmpResult == true ? criteriaClass ='ok':criteriaClass ='notOk';
	        $(validatorObj.criteriaId).setProperty('class',criteriaClass);
	      } else {
	    	  tmpResult=false;
	      }
	      result = result && tmpResult;
	    }, this);
	    return result;
	  },

	addGlobalError: function(message, theField){
	    if (this.errorBox.hasClass('globalErrorBoxHideout')){
	      this.errorBox.removeClass('globalErrorBoxHideout');
	    }

		var error;
	    if (this.errorBox.getElementById(this.errorBox.id + '_messages')){
	    	error = this.errorBox.getElementById(this.errorBox.id + '_messages');
	    }

	    // Check if this error message exists already
	    var messageExists = false;
			var currentErrorElements = error.getChildren('li');
			currentErrorElements.each(function(errorElement) {
				var errorMessage = errorElement.get('text');
				if(message.contains(errorMessage)) {
					messageExists = true;
				}
			});

	    if(error){
	    	if(!messageExists) {
					var tmpEL = new Element('li');
					tmpEL.set('html', message);
					tmpEL.addClass('error_text');
					tmpEL.injectInside(error);
		    }
		    if(theField){
					theField.addClass('error_text');
					theField.addClass('error');
		    }
	    }
	},

  // Injects a new table row with an error message
	addLocalError: function(message, theField){
		// Inject error message before error
		var parent = theField.getParent('tr');
		// Get the number of cells
		var childCells = parent.getChildren();
		var rowClassname = parent.className;
		var cellClassname = childCells[0].className;
		var colSpan = 0;
		childCells.each(function(childCell, index) {
			if(childCell.get('colspan')) {
				colSpan += childCell.get('colspan');
			}
		});
		// Create new row
		var errorRow = new Element('tr');
		errorRow.addClass('error_text');
		// Assing row style to our new row
		if(rowClassname)
			errorRow.addClass(rowClassname);
		// Create cell
		var errorCell = new Element('td');
		// Assing cell style to our new cell
		if(cellClassname)
			errorCell.addClass(cellClassname);
		errorCell.set('colspan', colSpan);
		//errorCell.innerHTML = message;
		errorCell.set('html', message);
		// Inject cell into row
		errorCell.inject(errorRow);
		// Inject row before error row
		errorRow.inject(parent, 'before');
		theField.addClass('error_text');
		if(theField.match('select')) {
			var followingSelectBoxes = theField.getAllNext('select');
			followingSelectBoxes.each(function(selectBox, index) {
					selectBox.addClass('error_text');
			});
			var previousSelectBoxes = theField.getAllPrevious('select');
			previousSelectBoxes.each(function(selectBox, index) {
					selectBox.addClass('error_text');
			});
		}
	},

	clearGlobalError: function(){
		if(!this.errorBox.hasClass('globalErrorBoxHideout'))
			this.errorBox.addClass('globalErrorBoxHideout')
		if(this.errorBox.getElementById(this.errorBox.id + '_messages'))
			this.errorBox.getElementById(this.errorBox.id + '_messages').set('html', '');
	},

	clearLocalErrors: function(){
			if(this.form) {
				var tbody = this.form.getChildren('tbody');
				var errorRows = tbody[0].getChildren('tr');
				errorRows.each(function(errorRow, index){
					if(errorRow.hasClass('error_text'))
						errorRow.destroy();
				});
			}
  },

  stop: function(){
    this.paused = true;
  },

  start: function(){
    this.paused = false;
  },


  validators: {
    IsEmpty: {
      test: function(element, options) {
        if(element.type == "select-one"||element.type == "select")
          return (element.selectedIndex >= 0 && element.options[element.selectedIndex].value != "");
        else
		  return !((element.get('value') == null) || (element.get('value').trim().length == 0));
      }
    },

    IsChecked: {
      test: function(element) {
        return (element.checked);
      }
    },

	IsOneChecked: {
		test: function(element, options) {
			if(element.checked || options.dependingCheckbox.checked)
				return true;
		}
    },

    IsNumber: {
      test: function (element) {
        if(!((element.get('value') == null) || (element.get('value').length == 0)))
          return (/^[0-9]+$/.test(element.get('value')));
          return true;
      }
    },

    IsNoNumber: {
    	test: function (element) {
    	  if(!((element.get('value') == null) || (element.get('value').length == 0)))
	          return (/^[^0-9]+$/.test(element.get('value')));
	          return true;
    	}
    },

    IsValidPhoneNumber: {
      test: function (element) {
        return /^[0-9\-\/ ]*$/.test(element.get('value'));
      }
    },

    IsValidPhoneAreaCode: {
      test: function (element) {
      	if(!((element.get('value') == null) || (element.get('value').length == 0)))
        	return /^0[0-9]*$/.test(element.get('value'));
        return true;
      }
    },

    IsValidEmail: {
      test: function (element) {
      	if(!((element.get('value') == null) || (element.get('value').length == 0)))
      		return new multiChannel.validator.EMailValidator().isValid(element.get('value'));
        return true;
      }
    },

    IsEqualField1: {
      test: function (element, options) {
        return element.get('value').trim() == options.field1.get('value').trim();
      }
    },

    IsNotEqualField1: {
      test: function (element, options) {
      	var result = element.get('value').trim() != options.field1.get('value').trim();
        return result;
      }
    },

    IsNotEqualField1AndField1NotEmpty: {
      test: function (element, options) {
      	var result = (element.get('value').trim() != options.field1.get('value').trim()) && (options.field1.get('value').trim().length > 0);
        return result;
      }
    },

    IsDependsField1: {
      // Checks if both fields are empty
      test: function (element, options) {
        if (!((element.get('value') == null || (element.get('value').length == 0)) && (options.field1.get('value') == null || (options.field1.get('value').length == 0)))){
          return true;
        }
      }
    },

    FieldPairs: {
      // if  exactly one field (of two) is not empty
      test: function (element, options) {
        if (!(element.get('value').length == 0 && options.fieldpair1.get('value').length > 0) || element.get('value').length > 0 && options.fieldpair1.get('value').length == 0){
          return true;
        }
      }
    },


    IsValidLength: {
      test: function (element, options) {
    	var emptyResult = true;
    	if($defined(options.falseOnEmpty) || options.falseOnEmpty) emptyResult=false;
        if(!((element.get('value') == null) || (element.get('value').length == 0)))
          return element.get('value').length >= options.minLength;
        return emptyResult;
      }
    },

    IsValidMaxLength: {
      test: function (element, options) {
        if(!((element.get('value') == null) || (element.get('value').length == 0)))
          return element.get('value').length <= options.maxLength;
        return true;
      }
    },

    IsValidMaxConsecutive: {
      test: function (element, options) {
    	var emptyResult = true;
    	if($defined(options.falseOnEmpty) || options.falseOnEmpty) emptyResult=false;
        if(!((element.get('value') == null) || (element.get('value').length == 0))){
        	var reg = eval('/([^.])\\1{'+options.maxConsecutive+',}/');
        	return !reg.test(element.get('value'));
        }
        return emptyResult;
      }
    },

    IsValidMaxSameCharacter: {
        test: function (element, options) {
    	  var emptyResult = true;
    	  if($defined(options.falseOnEmpty) || options.falseOnEmpty) emptyResult=false;
          if(!((element.get('value') == null) || (element.get('value').length == 0))) {
  			var text=element.get('value');
  			var characterList = new Array();
  			var max=0;
  			characterList[0] = new Object();
  			for(var i=0;i<text.length;i++){
  				var tmpChar=text.charAt(i);
  				if(characterList[0][tmpChar]){
  					characterList[0][tmpChar]=characterList[0][tmpChar]+1;
  					if(characterList[0][tmpChar]>max) max=characterList[0][tmpChar];
  				}else{
  					characterList[0][tmpChar]=1;
  				}
  			}
  			return options.maxSameCharacter >= max;
  		}
          return emptyResult;
        }
      },

      IsValidHasCharacter: {
    	  test: function (element, options) {
    	    var emptyResult = true;
    	    if($defined(options.falseOnEmpty) || options.falseOnEmpty) emptyResult=false;
          	if(!((element.get('value') == null) || (element.get('value').length == 0)))
          		return /[^\d\s]/.test(element.get('value'));
          	return emptyResult;
          }
      },

      IsEqualField2: {
          test: function (element, options, falseOnEmpty) {
            return element.get('value').trim() == options.field2.get('value').trim();
          }
        },

    // File type validator (use with eg. filetypes:['txt','doc']  )

    IsValidUnsolicitedFileType: {
      test: function (element, options) {
        var result = true;
        if(!((element.get('value') == null) || (element.get('value').length == 0))){
          var filename=element.get('value').toLowerCase();
          var filetype = filename.substring(filename.lastIndexOf('.')+1);
          result = options.filetypes.contains(filetype);
        }
        return result;
      }
    },

    // Date validators for separate fields for day, month and year

    IsValidSepDate: {
      test: function (element, options) {
        var day = options.dayField.get('value');
        var month = options.monthField.get('value');
        var year = options.yearField.get('value');

        if (!options.required && (year == null || year.length == 0) && (month == null || month.length == 0) && (day == null || day.length == 0)){
        	return true;
        }

        var result = false;
        if(year.length == 4 && month.length <= 2 && day.length <= 2){
          var date = new Date(year, month - 1, day);
          result = ((day == date.getDate()) && ((month - 1) == date.getMonth()) && (year == date.getFullYear()));
        }
        return result;
      }
    },

    IsSepDateLowerThen: {
      test: function (element, options) {
        var day = options.dayField.get('value');
        var month = options.monthField.get('value');
        var year = options.yearField.get('value');
        var date = new Date(year, month - 1, day);
        return date.getTime() >= options.minDate.getTime();
      }
    },

    IsSepDateGreaterThen: {
      test: function (element, options) {
        var day = options.dayField.get('value');
        var month = options.monthField.get('value');
        var year = options.yearField.get('value');
        var date = new Date(year, month - 1, day);
        return date.getTime() <= options.maxDate.getTime();
      }
    },

    SpecialChars: {
      test: function(element) {
        return (/^[-a-zA-Z0-9äöüÄÖÜß .`/]*$/.test(element.get('value')));
      }
    }
  }
});
//*********************
//** END Validator **
//*********************

/**************************************************
START Internal user functions
**************************************************/
// Login/Logoff and redirect to current page
multiChannel.logon = function(redirect) {
	var rParameter = multiChannel.getParameter('redirectURL');

	if (rParameter) {
		window.location.href = multiChannel.context.getLogonURL(rParameter, '', redirect);
	} else {
		window.location.href = multiChannel.context.getLogonURL(document.URL, '', redirect);
	}
};

multiChannel.register = function(redirect) {
	var rParameter = multiChannel.getParameter('redirectURL');
	if (rParameter) {
		window.location.href = multiChannel.context.getRegisterURL(rParameter, '', redirect);
	} else {
		window.location.href = multiChannel.context.getRegisterURL(document.URL, '', redirect);
	}
};

multiChannel.logout = function() {
	multiChannel.sso.logoutUser(multiChannel.evaluateLogout);
};

multiChannel.submitLogin = function(trackLogin) {
	if (multiChannelLogon.validator.validate(true)) {
		if(trackLogin){
			multiChannel.etracker.trackCheckoutTarget('Login');
		}
		document.Logon.submit();
	} else {
		if($defined($('captchaImage')) && $defined($('captchaInput'))){
			multiChannel.loadNewCaptcha($('captchaImage'), $('captchaInput'));
			if($defined($('errInvalidLoginTry'))){
				var list = $('errorBox_messages');
				var elem = new Element('li', { text: $('errInvalidLoginTry').value });
				elem.inject(list);
				multiChannel.fitSite();
			}
		}
		multiChannel.adjustLoginPageHeights();
		return false;
	}
};

multiChannel.submitResetPasswordConfirmation = function() {
	if (multiChannelConfirmPw.validator.validate(true)) {
		document.ResetPassword.submit();
	} else {
		if($defined($('captchaImage'))){
			multiChannel.loadNewCaptcha($('captchaImage'), $('captchaInput'));
		}
		return false;
	}
};

// START Logout handling
// Callback after logout
multiChannel.evaluateLogout = function() {
	if(multiChannel.sso.requestSuccessful()) {
		var redirectUrl;
		var rUrl = document.URL;
		var anchorIndex = rUrl.indexOf('#');
		if(anchorIndex != -1) {
			rUrl = rUrl.substring(0, anchorIndex);
		}
		redirectUrl =  new URI(rUrl);
		var parameters = new Object();
		// Remove krypto to prevent IE errors.
		parameters['krypto'] = '';
		if (redirectUrl.get('host') != multiChannel.context.domain) {
			var userTokenArray = multiChannel.sso.getUserToken();

			if (userTokenArray) {
				parameters['userType'] = userTokenArray[0];
				parameters['ssoToken'] = userTokenArray[1];
			}
		}
		multiChannel.setParameters(parameters);
		redirectUrl = multiChannel.removeBlacklistedParametersFromURI(redirectUrl);
		multiChannel.setParameter('krypto', '', redirectUrl);
		redirectUrl.go();
	}
};
// END Logout handling

// Jump to registration
multiChannel.jumpToRegistration = function(){
    var urlParameter = multiChannel.getParameter('URL');
    var tpParameter = multiChannel.getParameter('tpOrigin');
    var rParameter = multiChannel.getParameter('redirectURL');
    var redirect = multiChannel.getParameter('redirect');
    if($defined($('registerjsp'))){
    	$('loginjsp').hide();
    	$('registerjsp').show();
    	$('checkoutHeadlineLogonOrRegister').hide();
    	$('checkoutHeadlineRegister').show();
    }else{
	    if(tpParameter && rParameter) {
	            var url = multiChannel.context.register;
	            url += '&redirectURL=' + escape(rParameter);
	            url += '&tpOrigin=' + tpParameter;
	            window.location.href = url;
	    } else if(urlParameter) {
	            window.location.href = multiChannel.context.getRegisterURL( multiChannel.getParameter('redirectURL'), multiChannel.getParameter('URL').split('?')[0], redirect);
	    } else {
	            window.location.href = multiChannel.context.getRegisterURL( multiChannel.getParameter('redirectURL'), '', redirect);
	    }
    }
};

// Registration go back
multiChannel.registrationGoBack = function(){
    if($defined($('registerjsp'))){
    	$('loginjsp').show();
    	$('registerjsp').hide();
    	$('checkoutHeadlineRegister').hide();
    	$('checkoutHeadlineLogonOrRegister').show();

    }else{
    	history.back();
    }
};

// START Registration handling
multiChannel.submitRegistration = function() {
	if (multiChannelRegister.validator.validate(true)) {
		document.MultiChannelUserRegistrationAdd.submit();
	} else {
		multiChannel.loadNewCaptcha($('captchaImage'), $('registrationCaptchaInput'));
		return false;
	}
};
// END Registration handling

multiChannel.loadNewCaptcha = function(imageElement, inputElement) {
	var uri = new URI(imageElement.src);
	multiChannel.setParameters({'refresh': $random(100000, 999999)}, uri);
	imageElement.src = uri.toString();
	inputElement.value = '';
}

// START Wishlist
multiChannel.wishlist = new Object();

// Select all checkboxes
multiChannel.wishlist.selectAll = function(element) {
	var isChecked = element.checked;
	multiChannel.wishlist.checkAll(document.wishlist_form.select_all, isChecked);
	if (document.wishlist_form.select_catentry) {
		multiChannel.wishlist.checkAll(document.wishlist_form.select_catentry, isChecked);
	}
	if (document.wishlist_form.compare_catentry) {
		multiChannel.wishlist.checkAll(document.wishlist_form.wishlist_compare_catentry, isChecked);
	}
};

// Check all fields
multiChannel.wishlist.checkAll = function(field, isChecked) {

	if (field.length) {
		for (i = 0; i < field.length; i++) {
			field[i].checked = isChecked;
		}
	} else {
		field.checked = isChecked;
	}
};

// Perform an action for all checked wishlist items
multiChannel.wishlist.updateAll = function(field) {
	var actionType = field.value;

	if (actionType == 'delete') {
		var allCatentries = document.wishlist_form.select_catentry;

		if (allCatentries) {
			var uri = new URI(multiChannel.context.wishlistdelete);
			var checkedFound =false;
			var viewurl = new URI();
			var parameters1 = multiChannel.getParameters(viewurl);
			var parameters2 = new Object();
			parameters2['oldlayer'] = parameters1['layer'];
			parameters2['layer'] = '';

			var page = multiChannel.getParameter('page');
			if($defined(page)){
				if($defined(document.wishlist_form.select_all) && document.wishlist_form.select_all[0].checked && document.wishlist_form.select_all[1].checked) {
					page--;
				}
				parameters2['page'] = page;
			}
			multiChannel.setParameters(parameters2, viewurl);

			multiChannel.setParameters({'URL': viewurl.toString()}, uri);
			var url = uri.toString();

			if (allCatentries.length) {
				for (var i = 0; i < allCatentries.length; i++) {
					if (allCatentries[i].checked) {
						var catentryId = allCatentries[i].getAttribute('value');
						url += (url.indexOf('?') == -1 ? '?' : '&') + 'catEntryId=' + catentryId;
						checkedFound = true;
					}
				}
			} else {
				var catentryId = allCatentries.getAttribute('value');

				url += (url.indexOf('?') == -1 ? '?' : '&') + 'catEntryId=' + catentryId;
				checkedFound = true;
			}

			if(checkedFound){
				window.location.href = url;
			}
		}
	} else if (actionType == 'compare') {
		var dummyCompareCategory = 99999;
		var allCatentries = $$('#wishlist_form input[name=wishlist_compare_catentry]:checked');

		if (allCatentries) {
			for (var i = 0; i < allCatentries.length; i++) {
				var catentry = allCatentries[i];
				var catentrysDefaultCategoryDiv = $('defcat_' + catentry.value);
				if ($defined(catentrysDefaultCategoryDiv) && catentrysDefaultCategoryDiv.get('text') != '') {
					multiChannel.updateCompProducts(catentrysDefaultCategoryDiv.get('text'), catentry.value, {async: false});
				} else {
					multiChannel.updateCompProducts(dummyCompareCategory, catentry.value, {async: false});
				}
			}
			multiChannel.etracker.clickEvent('Product Comparison Layer');
			if (allCatentries.length < 5) {
				multiChannel.openLayer('comparison');
			}
		}
	}
};

multiChannel.addToWishList = function(catEntryId) {

	if (!$defined(catEntryId) || isNaN(catEntryId)) {
		return false;
	}
	var isSecure = multiChannel.isSecure();

	if (Cookie.read('MC_USERTYPE') == 'R') {
		var uri = new URI(isSecure ? multiChannel.context.wishlistaddSSL : multiChannel.context.wishlistadd);
		var uri2 = new URI(multiChannel.context.ajaxresponse);
		uri2.set('scheme', isSecure ? 'https' : 'http');
		uri2.set('port', isSecure ? 443 : 80);

		var parameters = {
			'catEntryId': catEntryId,
			'URL': uri2.toString()
		};
		multiChannel.setParameters(parameters, uri);
		var onsuccess = function() {
			multiChannel.openLayer('addedtowishlist', { 'catEntryId': catEntryId });
		};

		var request = new Request({
			method: 'post',
			url: uri.toString(),
			onSuccess: onsuccess
		});
		request.send();
	} else {
		var uri = new URI();
		multiChannel.setParameters({ 'wishlistEntry': catEntryId, 'layer': 'addedtowishlist' }, uri);
		var wishlistURI = new URI(isSecure ? multiChannel.context.wishlistaddSSL : multiChannel.context.wishlistadd);
		multiChannel.setParameters({ 'catEntryId': catEntryId, 'URL': uri.toString() }, wishlistURI);
		multiChannel.openLayer('loginforwishlist');
		multiChannel.wishlistLogin = function() {
			window.location.href = multiChannel.context.getLogonURL(wishlistURI.toString(), '', true);
		};
	}
};

// END Wishlist

/**************************************************
END Internal user functions
**************************************************/

/**************************************************
START basket functions
**************************************************/

multiChannel.basket = new Object();
// Updates the basket
multiChannel.basket.updateBasket = function() {
	if(multiChannel.sso.getJSON() && multiChannel.sso.getJSON().basket) {
		var basketUpdate = multiChannel.sso.getJSON().basket;
		multiChannel.basket.addBasketEntry(basketUpdate[0], basketUpdate[1], basketUpdate[2]);
	}
};

multiChannel.basket.addBasketEntry = function(id, count, basketURL) {
	if(id && count) {
		var shoppingCartContent = $('shoppingCartContent');
		if(shoppingCartContent) {
      // Possible elements are predefined (24-7 or CEWE)
      var basketEntry = shoppingCartContent.getElementById(id);
      if(basketEntry) {
        if(count > 0 && basketURL) {
          // Show basket entry
          if(basketEntry && basketEntry.hasClass('hideContent')) {
            basketEntry.removeClass('hideContent');
          }
          // Update basket url
          var anchorEl = basketEntry.getElement('a');
          var urlUnescapedURL = unescape(basketURL)
          var htmlUnescapedURL = multiChannel.unescapeHTML(urlUnescapedURL);
          anchorEl.set('href', htmlUnescapedURL);
        } else {
          // Remove the link from the basket url
          var anchorEl = basketEntry.getElement('a');
          anchorEl.set('href', 'javascript:void(0);');
        }
        // Set the right count
        var countSpan = anchorEl.getElements('span')[1];
        countSpan.set('text', '(' + count + ')');
      }
      // Reformat all active entries and set total count
      multiChannel.basket.formatBasketEntries();
    }
  }
};

// Adds the right styles to our basket entries
multiChannel.basket.formatBasketEntries = function() {
		// Return if shopping cart is not displayed
		if ($('shoppingCartBox').getStyle('display') == 'none')
			return;

		// Add right css styles to basketEntries
		var shoppingCartContent = $('shoppingCartContent');
		var basketRows = shoppingCartContent.getElements('td');
		var counter = 0;
		var totalCount = 0;
		basketRows.each(function(basketRow, index){
			if(!basketRow.hasClass('hideContent')) {
				if(counter == 0) {
				 basketRow.removeProperties('class');
				 basketRow.addClass('tableBorderFirst');
				} else {
				 basketRow.removeProperties('class');
				 basketRow.addClass('tableBorder');
				}
				var countText = basketRow.getElements('span')[1].get('text');
				var count = countText.replace('(', '').replace(')', '');
				if(count && count.length > 0){
					var quantity = parseInt(count);
					// if quantity is 0, hide the basket row
					if (quantity > 0) {
						basketRow.removeClass('hideout');
					} else {
						basketRow.addClass('hideout');
					}
					totalCount += quantity;
				}
				counter++;
			}
		});
		var basketTotalCount = $('shoppingCartCounterText');
		if(!totalCount) totalCount = 0;
		basketTotalCount.set('text', totalCount);
		multiChannel.basket.processBasketSlider(totalCount);
};

multiChannel.basket.processBasketSlider = function(totalCount) {
		var toggleElement = $('shoppingCartBox');
		// Check if shopping cart is in use
		if (toggleElement.getStyle('display') == 'none')
			return;

		// dispose diret link
		var parentElement = toggleElement.getParent('#directBasketLink');

		if(parentElement != null) {
			parentElement.getChildren().inject(parentElement,'before');
			parentElement.dispose();
		}

		var contentElement = toggleElement.getNext('div');

		// Effect exists. Remove it first!
		if(contentElement.get('id') != 'shoppingCartContent') {
			contentElement = $('shoppingCartContent').clone(true, true);
			// Remove effect style
			contentElement.erase('style');
			var targetEl = $('shoppingCartContent').getParent();
			var effectEl = targetEl.getParent();
			targetEl.dispose();
			effectEl.dispose();
			var toggler = $('shoppingCartToggler');
			toggler.dispose();
			contentElement.inject(toggleElement, 'after');
		}
		var togglerElement = new Element('div', {
			'id': 'shoppingCartToggler',
			'class': 'boxCollapse'
		});
		toggleElement.grab(togglerElement);

		var targetElement = new Element('div', {
			'class': 'sliderTarget',
			'styles': {
				'height': contentElement.offsetHeight
			}
		});

		targetElement.wraps(contentElement);

		var fx = new Fx.Slide(
			contentElement,
			{
				duration: contentElement.offsetHeight * 5,
				transition: Fx.Transitions.Bounce.easeOut,
				onStart: function() {
					togglerElement.toggleClass('boxCollapse');
					togglerElement.toggleClass('boxExpand');
				},
				onComplete: function() {
					if(togglerElement.hasClass('boxExpand')){
						targetElement.setStyles({'display': 'none'});
						targetElement.setStyles({'visibility': 'hidden'});
					}
				}

			});

		//Fix Fx.Slide-bug not setting height initially
		targetElement.setStyle('height', contentElement.offsetHeight);

		//Fix IE6 misbehaviour
		if (Browser.Engine.trident && Browser.Engine.version == 4) {
			contentElement.setStyle('top', 0);
		}


		togglerElement.removeEvent('click');
		var togglerElement2 = $('shoppingCartBox');
		togglerElement2.removeEvent('click');
		// if the total count is 0, don't add click - function
		// and remove pointer cursor
		if (totalCount > 0){

			// check if there are more baskets filled
			var basketRows = contentElement.getElements('td');
			var url = '';
			var basketEntries = 0;
			basketRows.each(function(basketRow, index){

				if(basketEntries > 1)
					return;

				if(!basketRow.hasClass('hideout')){
					basketEntries++;
					var anchorEl = basketRow.getElement('a');
					url = anchorEl.get('href');
				}

			});

			// if only one basket is filled,
			// put a link around the basket button
			if (basketEntries == 1) {
				var linkElement = new Element('a', {
					'id': 'directBasketLink',
					'href': url,
					'styles': {
						'text-decoration': 'none',
						'display': 'block',
						'height': '100%'
					}

				});
				linkElement.addEvent('mousedown', function(e) {
					multiChannel.etracker.clickEvent('Top Navigation > Basket');
				});
				linkElement.wraps(togglerElement2);

			} else {
				togglerElement2.addEvent('click', function(e) {
					e = new Event(e);
					if(targetElement.getStyle('display') == 'none'){
						targetElement.setStyles({'display': ''});
						targetElement.setStyles({'visibility': 'visible'});
					}
					fx.toggle();
					e.stop();
				});
				togglerElement2.addEvent('mousedown', function(e) {
					multiChannel.etracker.clickEvent('Top Navigation > Basket PullDown');
				});
			}
			togglerElement2.setStyles({'cursor': 'pointer'});
			togglerElement.setStyles({'cursor': 'pointer'});
		} else {
			togglerElement2.setStyles({'cursor': 'default'});
			togglerElement.setStyles({'cursor': 'default'});
		}

/*
		$('shoppingCartLink').removeEvent('click');
		$('shoppingCartLink').addEvent('click', function(e) {
			e = new Event(e);
			if(targetElement.getStyle('display') == 'none'){
				targetElement.setStyles({'display': ''});
				targetElement.setStyles({'visibility': 'visible'});
			}
			fx.toggle();
			e.stop();
		});
*/

		// Close this slider
		fx.toggle();
};

multiChannel.minibasket = new Object();

multiChannel.minibasket.addToBasket = function(catEntryId, quantity, wishlist){

	if (catEntryId == null || isNaN(catEntryId)) {
		return false;
	}

	var addToBasketURI = new URI(multiChannel.context.ordercatalogentryadd);
	var isSecure = multiChannel.isSecure();
	addToBasketURI.set('scheme', isSecure ? 'https' : 'http');
	addToBasketURI.set('port', isSecure ? 443 : 80);

	if (isNaN(quantity)) {
	  quantity = 1;
	}

	var catentryServiceId = null;
	$$('#servicesTableContainer .services_' + catEntryId).each(function(item) {
		if (item.checked) {
			catentryServiceId = item.get('value');
		}
	});

	var pickUpStoreId = $defined($('marketpickup')) ? $('storeSelect').value : null;

	var state = $defined($('miniBasketState')) ? $('miniBasketState').get('value') : 'in';
	var parameters = {
		quantity : quantity,
		catEntryId: catEntryId,
		catEntryServiceId: catentryServiceId,
		isWishList: (wishlist ? 'true' : 'false'),
		state: state,
		pickUpStoreId: pickUpStoreId
	}

	options = false;
	if (wishlist) {
		options = {
			'onsuccess': multiChannel.minibasket.removeItemFromWishlist(catEntryId)
		}
	}
	multiChannel.setParameters(parameters, addToBasketURI);
	multiChannel.minibasket.request(addToBasketURI, options);
};

multiChannel.minibasket.removeItemFromWishlist = function(catEntryId){

	$('wishlist_form').getChildren('div.catalogEntry.' + catEntryId).each(function(divElement) {
		divElement.dispose();
		$('pagedInterestListCount').value = ($('pagedInterestListCount').value - 1);
	});

	if ($('pagedInterestListCount').value < 1) {
		$('pagedInterestList').style.display = 'none';
		$('pagedInterestListEmpty').style.display = '';
	}
};

multiChannel.minibasket.updateSSOEntry = function(totalItemsCount){

	if(totalItemsCount != null) {
		var isSecure = multiChannel.isSecure();
		var uri2 = new URI(multiChannel.context.redirect);
		uri2.set('scheme', isSecure ? 'https' : 'http');
		uri2.set('port', isSecure ? 443 : 80);
		var parameters2 = {
			'destination' : 'basket'
		}
		multiChannel.setParameters(parameters2, uri2);
		multiChannel.sso.refreshBasket(
			'onlineshop',
			totalItemsCount,
			uri2.toString(),
			function() {}
		);
	}
};

multiChannel.minibasket.updateBasket = function(orderItemId, quantity){

	if (!isNaN(orderItemId) &&quantity && quantity > 0) {
		var isSecure = multiChannel.isSecure();

		var updateURI = new URI(multiChannel.context.ordercatalogentryupdate);
		updateURI.set('scheme', isSecure ? 'https' : 'http');
		updateURI.set('port', isSecure ? 443 : 80);

		var responseURI = new URI(multiChannel.context.ajaxviewbasket);
		responseURI.set('scheme', isSecure ? 'https' : 'http');
		responseURI.set('port', isSecure ? 443 : 80);

		var basketState = $defined($('miniBasketState')) ? $('miniBasketState').get('value') : 'in';
		var parameters = {
			URL: responseURI.toString(),
			quantity : quantity,
			orderItemId: orderItemId,
			state: basketState
		}
		multiChannel.setParameters(parameters, updateURI);
		multiChannel.minibasket.request(updateURI);
	}
};

multiChannel.minibasket.deleteFromBasket = function(orderItemId){
	if (!multiChannel.doubleclickhandler.firstclick() || isNaN(orderItemId)) {
		return false;
	}
	var deleteURI = new URI(multiChannel.context.ordercatalogentrydelete);
	var isSecure = multiChannel.isSecure();
	deleteURI.set('scheme', isSecure ? 'https' : 'http');
	deleteURI.set('port', isSecure ? 443 : 80);

	var responseURI = new URI(multiChannel.context.ajaxviewbasket);
	responseURI.set('scheme', isSecure ? 'https' : 'http');
	responseURI.set('port', isSecure ? 443 : 80);

	var basketState = $defined($('miniBasketState')) ? $('miniBasketState').get('value') : 'in';
	var parameters = {
		URL: responseURI.toString(),
		orderItemId: orderItemId,
		state: basketState
	}
	multiChannel.setParameters(parameters, deleteURI);
	multiChannel.minibasket.request(deleteURI);
};

multiChannel.minibasket.request = function(uri, options){
	var onsuccess = function(response){};
	if(options){
		if(options.onsuccess) onsuccess = options.onsuccess;
	}

	new Request.HTML({
		method: 'post',
		url: uri.toString(),
		update: $('shoppingBasketContent'),
		onRequest: function(){},
		onSuccess: onsuccess
	}).send();
};

/**************************************************
END basket functions
**************************************************/

multiChannel.initServiceCheckboxes = function(){
	window.addEvent('domready', function(){
		$$('#catalogEntry .services input[type=checkbox]').each(function(item){
			item.addEvent('click', function(){
				$$('#catalogEntry .services input[type=checkbox]').each(function(item2){
					if(item.value != item2.value){
						item2.checked = false;
					}
				});
			});
		});
	});
};

multiChannel.counterUrl = '';

multiChannel.processCounter = function() {
	if ($defined($('content'))) {
		var counterId = '';
		var cmsCountId = '';
		if (!$chk(multiChannel.counterUrl)) {
			var uri = new URI(multiChannel.context.counterinc);
			var isSecure = multiChannel.isSecure();
			uri.set('scheme', isSecure ? 'https' : 'http');
			uri.set('port', isSecure ? 443 : 80);
			multiChannel.counterUrl = uri.toString();
		}
		$('content').getElements('div[class*=counterId]').each(function(element) {
			counterId += element.className.replace(/^.*counterId([0-9]*).*$/, '$1') + ',';
		});
		if (counterId.length > 0) {
			counterId = counterId.substring(0, counterId.length - 1);
			var counterRequest = new Request({method: 'get', url: multiChannel.counterUrl});
			counterRequest.send('counterId=' + counterId);
		}
	}
};

multiChannel.showPrintView = function() {
	$('contentMiddle').addClass('print');
};

multiChannel.addPaginatorInfoCatalogEntry = function(associationType) {
	// we used to have input[name=categoryId] as a selector, but this caused a bug in IE7.
	var categoryIdValue = null;
	var inputElements = $('facetNavigationForm' + associationType).getElements('input');

	for (var i = 0; i < inputElements.length; i++) {
		if (inputElements[i].name == 'categoryId') {
			categoryIdValue = inputElements[i].value;
			break;
		}
	}

	$('facetFilterResult' + associationType).getElements('div.catalogEntry').each(function(catalogEntryElement) {

		catalogEntryElement.getElements('a').each(function(aElement) {
			var uri = new URI(aElement.href);
			var redirectUrl = multiChannel.getParameter('redirectURL', uri);

			if (aElement.href.indexOf('#') == -1 && !$defined(redirectUrl)) {
				multiChannel.setParameter('categoryId', categoryIdValue, uri);
				aElement.href = uri.toString();
			}
		});
	});
};

multiChannel.addPaginatorInfoMyStoreRedirect = function(url) {
	var displayValue = multiChannel.getParameter('display');

	$('contentMiddle').getElements('div.catalogEntry').each(function(catalogEntryElement) {

		catalogEntryElement.getElements('a[href^=' + url + ']').each(function(aElement) {
			var href = new URI(aElement.href);
			var redirectUrl = multiChannel.getParameter('redirectURL', href);

			if($defined(redirectUrl)){
				var redirectURI = new URI(redirectUrl);
				multiChannel.setParameters({'display': displayValue}, redirectURI);
				multiChannel.setParameters({redirectURL: redirectURI.toString()}, href);
				aElement.href = href.toString();
			}
		});
	});
};

multiChannel.addToBasketComparisonLayer = function(cId){
	multiChannel.closeAndRemoveLayer('comparison');
	multiChannel.minibasket.addToBasket(cId);
	return false;
};

multiChannel.changeCompProduct = function(checked, eId, cId) {
	var catId = cId;
	if(!$defined(cId) || cId.length == 0){
		catId = multiChannel.getParameter('categoryId');
	}

	if (catId && catId.length > 0 && eId && eId.length > 0) {

		if (checked) {
			multiChannel.updateCompProducts(catId, eId);
		} else {
			multiChannel.updateCompProducts(catId, eId, {mode:'delete'});
		}
	}
};

multiChannel.updateComparisonProductsWithCallback = function(display,callback, cId) {
	var categoryId = cId;
	var catEntryId = multiChannel.getParameter('catEntryId');
	var options = new Object();
	if (callback == 'empty'){
		options.fn = function(){multiChannel.openLayer('comparison', {'categoryId': categoryId, display: display} );};
	}else{
		options.fn = function(){multiChannel.openLayer('comparison', {'categoryId': categoryId, display: display} , callback);};
	}
	if($defined(categoryId) && $defined(catEntryId)) multiChannel.updateCompProducts(categoryId, catEntryId, options);
};

multiChannel.updateComparisonProducts = function() {
	var categoryId = multiChannel.getParameter('categoryId');
	var catEntryId = multiChannel.getParameter('catEntryId');
	var options = new Object();
	options.fn = function(){multiChannel.openLayer('comparison', {'categoryId': categoryId});};
	if($defined(categoryId) && $defined(catEntryId)) multiChannel.updateCompProducts(categoryId, catEntryId, options);
};

multiChannel.updateCompProducts = function(catId, entries, options) {
	var isSecure = multiChannel.isSecure();
	var uri = new URI(multiChannel.context.updatecompproducts);
	uri.set('scheme', isSecure ? 'https' : 'http');
	uri.set('port', isSecure ? 443 : 80);
	var sendAsynchronously = (options && options.async != undefined) ? options.async : true;
	var req = new Request.JSON({
		method: 'get',
		async: sendAsynchronously,
		url: uri.toString(),
		onSuccess: function(request){
			if (request.selected) {
				$('contentMiddle').getElements('input.comparable[value=' + entries + ']').each(function(inputElement) {
					inputElement.checked = false;
				});
				multiChannel.openLayer('comparison', {'showWarning':true});
			} else {
				if(options && options.fn) options.fn(request);
			}
		}
	});
	var sendStr = "entryIds=" + entries;
	if(catId) sendStr +="&catId=" + catId;
	if(options && options.mode) sendStr += "&mode=" + options.mode;
	req.send(sendStr);

};

multiChannel.replaceCompProduct = function (delEntryId,insCatId,insEntryId,storeId) {
	$('contentMiddle').getElements('input.comparable[value=' + delEntryId + ']').each(function(inputElement) {
		inputElement.checked = false;
	});

	$('contentMiddle').getElements('input.comparable[value=' + insEntryId + ']').each(function(inputElement) {
		inputElement.checked = true;
	});
	multiChannel.closeAndRemoveLayer('comparison');
	var isSecure = multiChannel.isSecure();
	var uri = new URI(multiChannel.context.updatecompproducts);
	uri.set('scheme', isSecure ? 'https' : 'http');
	uri.set('port', isSecure ? 443 : 80);
	var req = new Request.JSON({
		method: 'get',
		url: uri.toString(),
		onSuccess: function(){}
		});
	var sendStr = "delEntryId=" + delEntryId + "&insCatId=" + insCatId+"&insEntryId="+insEntryId;
	sendStr += "&mode=insertandreplace";
	req.send(sendStr);
	multiChannel.openLayer('comparison', {});
};

multiChannel.removeAProducts = function(catId,lastEntryID,newEntryID) {

	multiChannel.updateCompProducts(catId, newEntryID, {mode:'lreplace'});

	$('contentMiddle').getElements('input.comparable[value=' + lastEntryID + ']').each(function(inputElement) {
		inputElement.checked = false;
	});

	$('contentMiddle').getElements('input.comparable[value=' + newEntryID + ']').each(function(inputElement) {
		inputElement.checked = true;
	});
	multiChannel.closeAndRemoveLayer('comparison');
	multiChannel.openLayer('comparison', {'categoryId': catId, 'showWarning':false});
};

multiChannel.removeAllCompProducts = function(catId) {
	multiChannel.removeCompProduct(catId);
};

multiChannel.removeCompProduct = function(catId, entryId, display, storeId) {
	var eId = '';
	var options = new Object();
	options.mode = 'delete_all';
	options.fn = multiChannel.closeAndRemoveLayer('comparison');
	if(entryId && entryId.length > 0) {
		eId = entryId;

		if ($defined($('contentMiddle'))) {

			$('contentMiddle').getElements('input.comparable[value=' + entryId + ']').each(function(inputElement) {
				inputElement.checked = false;
			});
		}

		options.mode = 'delete';
		options.fn = function(request){
			if(request && request.entries && request.entries.length > 0) {
				multiChannel.closeAndReopenLayer('comparison', {'categoryId':catId,'display':display,'storeId':storeId});
			}
		}
	} else {
		if($defined($('contentMiddle'))) {
			$$('#contentMiddle .catalogEntryList .catalogEntry .comparable',
			   '#contentMiddle #myAccountWishlist .comparable',
			   '#contentMiddle #myAccountWishlist .catentrySelect'
			).each(function(item){
				item.checked = false;
			});
		}
	}
	if (document.wishlist_form && document.wishlist_form.select_all) {
		multiChannel.wishlist.checkAll(document.wishlist_form.select_all, false);
	}

	multiChannel.updateCompProducts(catId, eId, options);
};

multiChannel.selectCompareProducts = function(catalogEntryIds, categoryId) {

	if ($defined($('contentMiddle')) && $defined(categoryId)) {

		$('contentMiddle').getElements('.catalogEntryList.' + categoryId).each(function(divElement) {

			divElement.getElements('input.comparable').each(function(inputElement) {
				inputElement.checked = catalogEntryIds.contains(parseInt(inputElement.value));
			});
		});
	}
};

multiChannel.compRemoveAllChecks = function () {
	if( !$defined( $('productInfos') )) {

		if ($defined($('contentMiddle'))) {
			$('contentMiddle').getElements('input').each(function(inputElement) {
				inputElement.checked = false;
			});
		}
		if ($defined($('myAccountWishlist'))) {
			$('myAccountWishlist').getElements('input').each(function(inputElement){
				inputElement.checked = false;
			});
		}
	}
};

multiChannel.wishlist.updateCheckbox = function (element) {

	if (element) {
		$(element).getSiblings().each(function(sibling){
			if (sibling) {
				sibling.checked = element.checked;
			}
		});
	}
}


multiChannel.wishlist.updateCheckboxes = function() {

	var selectedOption = $('select_action_top').get('value');
	if (selectedOption == 'compare') {
		$$('#wishlist_form input.catentrySelect').each(function(element){element.hide();});
		$$('#wishlist_form input.comparable.wishlist').each(function(element){
			element.show();
		});
	} else {
		$$('#wishlist_form input.comparable.wishlist').each(function(element){element.hide();});
		$$('#wishlist_form input.catentrySelect').each(function(element){element.show();});
	}
}

multiChannel.selectReviewsAuthorText = function(reviewsUserId){

	if (multiChannel.user.isLoggedIn()) {
		$$('#reviewsContentContainer td.review_' + reviewsUserId + ' div.otherIsAuthorText').each(function(elem){
			elem.hide();
		});
		$$('#reviewsContentContainer td.review_' + reviewsUserId + ' div.iAmTheAuthorText').each(function(elem){
			elem.show();
		});
	}
};

//***************
// Events Handling
//***************
multiChannel.event_detail_id = null;

multiChannel.expandEvent = function(id){
	if (multiChannel.event_detail_id != null){
		multiChannel.setEventVisible(multiChannel.event_detail_id, false)
	}
	multiChannel.setEventVisible(id, true);
	multiChannel.event_detail_id = id;
};

multiChannel.setEventVisible = function (id, visible){
	var event_detail = $('event_detail_' + id);
	var event_summary = $('event_summary_' + id);
	if (visible){
		event_detail.style.visibility = 'visible';
		event_detail.style.display = 'block';
		event_summary.style.visibility = 'hidden';
		event_summary.style.display = 'none';
	} else {
		event_detail.style.visibility = 'hidden';
		event_detail.style.display = 'none';
		event_summary.style.visibility = 'visible';
		event_summary.style.display = 'block';
	}
};

// ******************************************************************
// MyAccount MasterData stuff
// ******************************************************************

multiChannel.masterData = new Object();

multiChannel.masterData.removeShippingAddress = function(address) {
	var table = $(address + '_table');
	table.setStyle('display', 'none');
	table.removeClass('temporaryAddress');
	$(address + '_ignore').set('value', 'true');
	multiChannel.masterData.updateAddressNumbers(address);
};

multiChannel.masterData.updateAddressNumbers = function(address) {

	var searchString = '#RegistrationUpdateForm .ADDRESS_table';
	var cnt = 1;
	var aType = address.indexOf('shipping') != -1 ? 'shipping' : 'packstation';
	searchString = searchString.replace(/ADDRESS/,aType);
	$$(searchString).each(function(item){
		if(item.isDisplayed()){
			numberElement = item.getElement('.' + aType + 'Number');
			if(numberElement != null){
				numberElement.set('text', cnt);
				cnt++;
			}

		}
	});
};

multiChannel.masterData.setAge = function(target, ageYear, ageMonth, ageDay) {
	var dateString = "" + ageYear.get('value') + ageMonth.get('value') + ageDay.get('value');
	if (dateString.match("^[A-Za-z]+$")) {
		target.set('value', '0');
	} else {
		target.set('value', dateString);
	}
};

multiChannel.masterData.setFields = function() {
	multiChannel.masterData.setAge($('age'), $('masterdata_birthday_year'), $('masterdata_birthday_month'), $('masterdata_birthday_day'));
	var rememberMe = $('rememberMe');
	if(rememberMe) {
	  $('demographicField4').set('value', rememberMe.checked ? '1' : '0');
	}
};

multiChannel.masterData.clearErrorClassesBelow = function(node) {
	if (node.hasClass('error')) {
		node.removeClass('error');
	}
	var elements = node.getChildren();
	elements.each(multiChannel.masterData.clearErrorClassesBelow);
};

multiChannel.masterData.clearErrorClasses = function() {
	multiChannel.masterData.clearErrorClassesBelow($('RegistrationUpdateForm'));
	multiChannel.fitSite();
};

multiChannel.masterData.fieldErrorTable = new Hash({
	'age': function(value) {
		$('masterdata_birthday_day').addClass('error');
		$('masterdata_birthday_month').addClass('error');
		$('masterdata_birthday_year').addClass('error');
	}
});

multiChannel.masterData.displayFieldErrors = function(errors) {
	$each(errors, function(value, key) {
		if (multiChannel.masterData.fieldErrorTable.has(key)) {
			(multiChannel.masterData.fieldErrorTable.get(key))(value);
		} else {
			var field = $(key);
			if (field != null) {
				field.addClass('error');
			}
		}
	});
};

multiChannel.masterData.displayErrorBox = function(errors) {
	var list = $('errorBox_messages');
	list.empty();
	$each(errors, function(value) {
		var elem = new Element('li', { text: value });
		elem.inject(list);
	});
	$('errorBox').removeClass('globalErrorBoxHideout');
	multiChannel.fitSite();
};

multiChannel.masterData.removeExistingShippingAddressResponse = function(response, address) {
	if (response != null && response.success == 'false') {
		multiChannel.masterData.displayErrorBox(response.errors);
	} else {
		multiChannel.masterData.removeShippingAddress(address);
		var parameters = multiChannel.getParameters();
		var newParameters = new Object();

		$each(parameters, function(value, name) {
			newParameters[name] = name == 'storeId' ? value : '';
		});
		multiChannel.setParameters(newParameters);
	}
};

multiChannel.masterData.removeExistingShippingAddress = function(address) {
	var element = $(address + '_id');
	if (element != null) {
		var id = element.get('value');
		if (id != null) {
			var request = new Request({
				url: multiChannel.context.mamasterdataremoveaddress,
				onSuccess: function(response) {
					multiChannel.masterData.removeExistingShippingAddressResponse(response, address);
				}
			});
			var uri = new URI(multiChannel.context.mamasterdataremoveaddress);
			multiChannel.setParameters({'URL': multiChannel.context.mamasterdataremoveaddress, 'addressId': id}, uri);
			var queryString = uri.toString().substring(uri.toString().indexOf('?') + 1);
			request.send({
				data: queryString
			});
		}
	}
};

multiChannel.masterData.replaceShippingAddressIds = function(element) {
	var elements = element.getChildren();
	elements.each(multiChannel.masterData.replaceShippingAddressIds);
	var addressCount = multiChannel.masterData.shippingAddressCount;
	var id = element.get('id');
	if (id != null) {
		element.set('id', id.substitute({ IDX: addressCount }));
		if (id.test('_remove$')) {
			element.addEvent('click', function() {
				multiChannel.masterData.removeShippingAddress('shipping' + addressCount);
				return false;
			});
		}
	}
	var name = element.get('name');
	if (name != null) {
		element.set('name', name.substitute({ IDX: addressCount }));
	}
	if (elements.length == 0) {
		var text = element.get('text');
		if (text != null && text.length > 0) {
			element.set('text', text.substitute({ IDX: addressCount }));
		}
	}
};

multiChannel.masterData.replacePackstationAddressIds = function(element) {
	var elements = element.getChildren();
	elements.each(multiChannel.masterData.replacePackstationAddressIds);
	var addressCount = multiChannel.masterData.packstationAddressCount;
	var id = element.get('id');
	if (id != null) {
		element.set('id', id.substitute({ IDX: addressCount }));
		if (id.test('_remove$')) {
			element.addEvent('click', function() {
				multiChannel.masterData.removeShippingAddress('packstation' + addressCount);
				return false;
			});
		}
	}
	var name = element.get('name');
	if (name != null) {
		element.set('name', name.substitute({ IDX: addressCount }));
	}
	if (elements.length == 0) {
		var text = element.get('text');
		if (text != null && text.length > 0) {
			element.set('text', text.substitute({ IDX: addressCount }));
		}
	}
};

multiChannel.masterData.addressAddAllowed = function(address){
	return $('RegistrationUpdateForm').getElement('div.temporaryAddress') == null;
};

multiChannel.masterData.addShippingAddress = function() {
	if(multiChannel.masterData.addressAddAllowed()){
		var elem = $('masterdata_extra_shipping');
		var cloned = elem.clone(true, true);
		cloned.set('id', 'shipping' + multiChannel.masterData.shippingAddressCount + '_table');
		cloned.addClass('temporaryAddress');
		cloned.addClass('shipping_table');
		multiChannel.masterData.replaceShippingAddressIds(cloned);
		cloned.setStyle('display', 'block');
		cloned.injectBefore('masterdata_submit_button');
		multiChannel.masterData.shippingAddressCount++;
		multiChannel.masterData.updateAddressNumbers('shipping');
		multiChannel.fitSite();
	}
};

multiChannel.masterData.addPackstationAddress = function() {
	if(multiChannel.masterData.addressAddAllowed()){
		var elem = $('masterdata_extra_packstation');
		var cloned = elem.clone(true, true);
		cloned.set('id', 'packstation' + multiChannel.masterData.packstationAddressCount + '_table');
		cloned.addClass('temporaryAddress');
		cloned.addClass('packstation_table');
		multiChannel.masterData.replacePackstationAddressIds(cloned);
		cloned.setStyle('display', 'block');
		cloned.injectBefore('masterdata_submit_button');
		multiChannel.masterData.packstationAddressCount++;
		multiChannel.masterData.updateAddressNumbers('packstation');
		multiChannel.fitSite();
	}
};

multiChannel.masterData.updateIds = function(data) {
	if (data != null) {
		$each(data, function(value, key) {
			var elem = $(key);
			if (elem != null) {
				elem.set('value', value);
			}
		});
	}
};

multiChannel.masterData.handleResponse = function(rsp) {
	var response = JSON.decode(rsp);
	multiChannel.masterData.clearErrorClasses();
	if (response != null && response.success == "true") {
		$('errorBox').addClass('globalErrorBoxHideout');
		multiChannel.masterData.updateIds(response.data);
		var parameters = new Object();
		if (response.langId != null) {
			multiChannel.setParameters({ 'langId': response.langId, 'openLayer': 'personaldatasaved' });
		} else {
			multiChannel.setParameters({ 'openLayer': 'personaldatasaved' });
		}
	} else if (response != null && response.errors != null) {
		multiChannel.masterData.displayFieldErrors(response.errors);
		multiChannel.masterData.displayErrorBox(response.errors);
	} else {
		errors = new Hash({ 'error': 'An application error has occurred.' });
		multiChannel.masterData.displayErrorBox(errors);
	}
	multiChannel.fitSite();
};

multiChannel.masterData.addressFieldMapping = {
	'shipping1_firstname': 'firstName',
	'shipping1_lastname': 'lastName',
	'shipping1_street': 'address1',
	'shipping1_housenumber': 'address3',
	'shipping1_zip': 'zipCode',
	'shipping1_city': 'city',
	'shipping1_address2': 'address2'
};

multiChannel.masterData.handleSameAddressCheckbox = function() {
	var elem = $('masterdata_same_address');
	if (elem != null) {
		var mapping = multiChannel.masterData.addressFieldMapping;
		if (elem.checked) {
			for (id in mapping) {
				var source = $(mapping[id]);
				var target = $(id);
				target.setProperty('readonly', 'readonly');
				target.set('value', source.get('value'));
				target.addClass('inp-disabled');
			}
		} else {
			for (id in mapping) {
				var target = $(id);
				target.removeProperty('readonly');
				target.removeClass('inp-disabled');
			}
		}
	}
};

multiChannel.masterData.updateData = function(event) {
	multiChannel.masterData.setFields();

	var sameAddress = $('masterdata_same_address');
	if (sameAddress != null && sameAddress.checked) {
		var mapping = multiChannel.masterData.addressFieldMapping;
		for (id in mapping) {
			var source = $(mapping[id]);
			var target = $(id);
			target.set('value', source.get('value'));
		}
	}
	var form = $('RegistrationUpdateForm');
	form.set('send', { onComplete: multiChannel.masterData.handleResponse });
	form.send();
	return false;
};

// ******************************************************************
// Contact form
// ******************************************************************
multiChannel.contact = new Object();
multiChannel.contact.product = '';

multiChannel.contact.init = function() {
	var contactType = document.getElementsByName('contact_type');
	for (var i = 0; i < contactType.length; i++){
		var parent = $(contactType[i].parentNode);
		if (parent.isDisplayed()){
			contactType[i].checked = true;
			break;
		}
	}
}

multiChannel.contact.preselect = function(id) {
	if ($defined($(id))) {
		$(id).checked = true;
	}
}

multiChannel.contact.preselectmarket = function(storeId) {
	if ($defined($('contact_store_entity_id'))) {
		for (var i = 0; i < $('contact_store_entity_id').options.length; i++){
			if ($('contact_store_entity_id').options[i].value == storeId)
				$('contact_store_entity_id').options[i].selected = true;;
		}
	}
}

multiChannel.contact.setProduct = function(product){
	multiChannel.contact.product = product;
}

multiChannel.contact.send = function() {
	var view = $('view');
	var form = new Element('form');
	form.method = 'post';
	form.action = multiChannel.context.contact;
	form.target = 'contact_sender';
	form.enctype = 'multipart/form-data';
	view.appendChild(form);

	multiChannel.contact.values.each(function(value, key){
		multiChannel.contact.createInputHidden(form, key, value);
	});

	form.submit();
};

multiChannel.contact.submit = function() {
	var addressPart = $('contact_part_address');
	var addressPartVisible = addressPart.style.display == 'inline';
	var messagePart = $('contact_part_message');
	var storePart = $('contact_part_store');
	var productPart = $('contact_part_product');
	var orderPart = $('contact_part_order');
	var downloadOrderPart = $('contact_part_download');
	var successPart = $('contact_part_success');
	var type = multiChannel.contact.getRadioButtonValue(document.getElementsByName('contact_type'));
	if (addressPartVisible && multiChannel.contact.validateAddress()){
		multiChannel.contact.showMessagePart(type, addressPart, messagePart, storePart, productPart, orderPart, downloadOrderPart);
	} else if (!addressPartVisible ){
		var valid = true;
		if(type == 'download'){
			valid= multiChannel.contact.validateDownload(downloadOrderPart, productPart);
		}else{
			valid = multiChannel.contact.validateVisibleParts(type, storePart,orderPart,productPart);
		}
		if($defined($('captchaInputContact'))){
			var clear = valid;
			valid= multiChannel.contact.validateCaptchaInput(clear, valid, successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart) &&valid;
			if(valid==false){
				multiChannel.loadNewCaptcha($('captchaImageContact'), $('captchaInputContact'));
			}
		}else{
			if (valid) {
				multiChannel.contact.showSuccessAndSend(successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart);
			}
		}
	}
};

multiChannel.contact.showSuccessAndSend = function(successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart){
	multiChannel.contact.showSuccessPart(successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart);
	multiChannel.contact.send();
};

multiChannel.contact.validateVisibleParts = function(type, storePart,orderPart,productPart){
			var valid = true;
			var clear = true;

			if (multiChannel.contact.storeSelections[type]){
				valid= multiChannel.contact.validateStore(storePart,clear) && valid;
				clear = false;
			}
			if (multiChannel.contact.productSelections[type]){
				valid= multiChannel.contact.validateProduct(productPart,clear) && valid;
				clear = false;
			}

			if (multiChannel.contact.orderSelections[type]){
				valid= multiChannel.contact.validateOrder(orderPart, clear) && valid;
				clear = false;
			}
			valid= multiChannel.contact.validateMessage(clear) &&valid;
			return valid;
};

multiChannel.contact.showMessagePart = function(type, addressPart, messagePart, storePart, productPart, orderPart, downloadOrderPart){
	// Hide address part
	addressPart.style.display = 'none';
	$('btn_contact_submit').style.display = 'none';
	$('btn_contact_send').style.display = 'block';

	// Change title
	var title = $('contact_title');
	title.innerHTML = multiChannel.contact.titles[type];

	if (multiChannel.contact.downloadOrderSelections[type]){
		// Enable Download Order Selection
		downloadOrderPart.style.display = 'inline';
	}else{
		// Enable store selection (if needed)
		if (multiChannel.contact.storeSelections[type]){
			storePart.style.display = 'inline';
		}
		if (multiChannel.contact.orderSelections[type]){
			// Enable Order Selection
			orderPart.style.display = 'inline';
		}
		if (multiChannel.contact.productSelections[type]){
			productPart.style.display = 'inline';
		}
		// Enable message part
		messagePart.style.display = 'inline';
	}
	// Update iframe
	multiChannel.fitLayer();
};

multiChannel.contact.showSuccessPart = function(successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart){
	// Hide store part, category part and order part
	storePart.style.display = 'none';
	productPart.style.display = 'none';
	orderPart.style.display = 'none';
	downloadOrderPart.style.display = 'none';

	// Hide message part
	messagePart.style.display = 'none';

	// Hide submit part
	var submitPart = $('contact_submit_part');
	submitPart.style.display = 'none';

	// Change title
	var title = $('contact_title');
	title.style.display = 'none';

	var successTitle = $('contact_success_title');
	successTitle.style.display = 'block';

	// Enable success part
	successPart.style.display = 'inline';

	// Enable redirect to home button
	$('contact_redirect_home').style.display = 'block';

	// Update iframe
	multiChannel.fitLayer();
};

multiChannel.contact.validateAddress = function() {
	var validator = new multiChannel.validator.FormValidator('contact_table', multiChannel.contact.fieldOptions, 'errorBoxContact', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true)){
		multiChannel.contact.values = new Hash();
		multiChannel.contact.values['title'] = multiChannel.contact.getRadioButtonValue(document.getElementsByName('contact_title'));
		multiChannel.contact.values['firstName'] = $('contact_firstname').value;
		multiChannel.contact.values['lastName'] = $('contact_lastname').value;
		multiChannel.contact.values['phoneAreaCode'] = $('contact_phone_area_code').value;
		multiChannel.contact.values['phoneNumber'] = $('contact_phone_number').value;
		multiChannel.contact.values['email'] = $('contact_email').value;
		multiChannel.contact.values['type'] = multiChannel.contact.getRadioButtonValue(document.getElementsByName('contact_type'));
		return true;
	}
	return false;
};

multiChannel.contact.validateMessage = function(clear) {
	var validator = new multiChannel.validator.FormValidator('contact', multiChannel.contact.messageFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if(validator.validate(true, clear)){
		multiChannel.contact.values['message'] = $('contact_message').value;

		return true;
	}
	return false;
};

multiChannel.contact.validateStore = function(storePart,clear) {
	var validator = new multiChannel.validator.FormValidator('contact', multiChannel.contact.messageStoreFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true,clear)){
		multiChannel.contact.values['message'] = $('contact_message').value;
		if (storePart.style.display == 'inline') {
			multiChannel.contact.values['storeEntityId'] = multiChannel.contact.getSelectValue($('contact_store_entity_id'));
		} else {
			multiChannel.contact.values['storeEntityId'] = '';
		}
		return true;
	}

	return false;
};

multiChannel.contact.validateDownload= function(downloadOrderPart, productPart){
	var validator = new multiChannel.validator.FormValidator('contact_download_order_table', multiChannel.contact.messageDownloadFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true)){
		multiChannel.contact.values['message'] = $('contact_download_message').value;
		if (downloadOrderPart.style.display == 'inline') {
			multiChannel.contact.values['orderEntityId'] = $('contact_download_order_input').value;
		} else {
			multiChannel.contact.values['orderEntityId'] = '';
		}
		if (productPart.style.display == 'inline') {
			multiChannel.contact.values['categoryEntityId'] = $('contact_download_category_entity_id').value;
		} else {
			multiChannel.contact.values['categoryEntityId'] = '';
		}

		return true;
	}

	return false;
};

multiChannel.contact.validateProduct = function(productPart,clear){
	var validator = new multiChannel.validator.FormValidator('contact', multiChannel.contact.messageProductFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true,clear)){
		multiChannel.contact.values['message'] = $('contact_message').value;
		if (productPart.style.display == 'inline'){
			multiChannel.contact.values['categoryEntityId'] = multiChannel.contact.getSelectValue($('contact_category_entity_id'));
		}else{
			multiChannel.contact.values['categoryEntityId'] = '';
		}
		return true;
	}
	return false;
};

multiChannel.contact.validateOrder = function(orderPart,clear){
	var validator = new multiChannel.validator.FormValidator('contact', multiChannel.contact.messageOrderFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true,clear)){
		multiChannel.contact.values['message'] = $('contact_message').value;
		if (orderPart.style.display == 'inline'){
			multiChannel.contact.values['orderEntityId'] = $('contact_order_input').value;
		}else{
			multiChannel.contact.values['orderEntityId'] = '';
		}
		return true;
	}

	return false;
};

multiChannel.contact.validateCaptchaInput = function(clear, valid, successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart){
	var validator = new multiChannel.validator.FormValidator('contact', multiChannel.contact.messageCaptchaFieldOptions, 'errorBoxContactMessage', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);
	if (validator.validate(true,clear)){
		var captchaInputEle =$('captchaInputContact');
		var captchaInput = captchaInputEle.value;
		var errorBoxContact = $('errorBoxContactMessage');
		if(captchaInput && captchaInput.length > 0){
			var isSecure = multiChannel.isSecure();
			var uri = new URI(multiChannel.context.captchainputcorrect);
			uri.set('scheme', isSecure ? 'https' : 'http');
			uri.set('port', isSecure ? 443 : 80);
			uri.setData({'captchaInput' : captchaInput}, true);
			uri.setData({'captchaContext' : 'CONTACTLAYER'}, true);
			var req = new Request.JSON({
				method: 'get',
				url: uri.toString(),
				onSuccess: function(request){
					if(request.correct==true){
						if(valid == true){
							multiChannel.contact.showSuccessAndSend(successPart, messagePart, storePart, productPart, orderPart, downloadOrderPart);
						}
					}else{
						var list = $('errorBoxContactMessage_messages');
						var elem = new Element('li', { text: multiChannel.contact.messageCaptchaNotCorrect });
						elem.inject(list);
						if(!captchaInputEle.hasClass('error')){
							captchaInputEle.addClass('error_text');
							captchaInputEle.addClass('error');
						}
						if (errorBoxContact.hasClass('globalErrorBoxHideout')){
					      errorBoxContact.removeClass('globalErrorBoxHideout');
					    }
						multiChannel.fitSite();
					}
				}
			});
			req.send();
		}
	}
	return false;
};

multiChannel.contact.getRadioButtonValue = function(radioButton) {
	for (var i = 0; i < radioButton.length; i++){
		if (radioButton[i].checked)
			return radioButton[i].value;
	}
	return null;
};

multiChannel.contact.getSelectValue = function(select) {
	for (var i = 0; i < select.options.length; i++){
		if (select.options[i].selected)
			return select.options[i].value;
	}
	return null;
};

multiChannel.contact.createInputHidden = function(form, key, value){
	var hidden = new Element('input');
	hidden.type = 'hidden';
	hidden.name = key;
	hidden.value = value;

	form.appendChild(hidden);
};

multiChannel.initErrorBox = function(errorProductsNotAvailable, errorSearchResultsNotAvailable) {

	if (errorProductsNotAvailable && $defined($('categoryErrorBox'))) {
		$('categoryErrorBox').show();
	}

	if (errorSearchResultsNotAvailable && $defined($('searchErrorBox'))) {
			$('searchErrorBox').show();
	}
}

multiChannel.redirectWishlist = function (storeId,setCookie) {
	if (storeId != -1) {
		var uri=new URI(document.URL.replace(/storeId=\d*/, "storeId="+storeId));

		if (setCookie==true) {
			var domain = multiChannel.getDomain(uri);
			Cookie.write('MC_STORE_ID', storeId, { 'domain': domain, 'path': '/', 'duration': 30 });
		}
		uri.go();
	}
};

multiChannel.showProductDetailTab = function(id) {

	if ($defined($(id))) {

		multiChannel.tooltips.close();

		$(id).getSiblings('.selected').each(function(item) {
			item.removeClass('selected');
		});

		$$('#infoTabContent .catalogEntryTab').each(function(item) {
			item.addClass('hideout');
		});
		$(id).addClass('selected');
		$(id.replace(/ref_/, 'tab_')).removeClass('hideout');
	}
};

multiChannel.fitProductDetailTabs = function() {

	if ($defined($('infoTabNav')) && $defined($('infoTabContent'))) {
		var maxWidth = $('infoTabContent').getSize().x;
		var colElements = $('infoTabNav').getElements('col');
		var tdElements = $('infoTabNav').getElements('td');
		var optionalElements;

		while ($('infoTabNav').getSize().x > maxWidth && (optionalElements = $('infoTabNav').getElements('.optional')).length > 0) {
			var optionalElement = optionalElements.getLast();
			var index = tdElements.indexOf(optionalElement);
			var colElement = colElements[index];
			colElement.getPrevious('col').dispose();
			colElement.dispose();
			optionalElement.getPrevious('td').dispose();
			optionalElement.dispose();
		}
	}
};

multiChannel.search = new Object();

multiChannel.search.defaultQuery = '';

multiChannel.search.initDefaultQuery = function(defaultQuery) {
	multiChannel.search.defaultQuery = defaultQuery;
	multiChannel.search.setDefaultQuery();
}

multiChannel.search.removeDefaultQuery = function() {

		if ($('searchQuery').value == multiChannel.search.defaultQuery) {
			$('searchQuery').value = '';
		}
}

multiChannel.search.setDefaultQuery = function() {

	if ($('searchQuery').value.length == 0) {
		$('searchQuery').value = multiChannel.search.defaultQuery;
	}
}

multiChannel.search.checkSubmitSearchQuery = function(autoCompletion) {
	var searchText = $('searchQuery').value;

	if (searchText.length > 0 && searchText != multiChannel.search.defaultQuery) {
		var searchCategoryValues = $('searchCategory').value.split(';');
		var storeId = multiChannel.context.assetStoreId;
		var searchProfileShort = searchCategoryValues[0];

		switch (searchProfileShort) {
		case 'onlineshop':

			if ($defined(multiChannel.context.onlineshopStoreId)) {
				storeId = multiChannel.context.onlineshopStoreId;
			}
			break;
		case 'marketshop':

			if ($defined(multiChannel.context.localStoreId)) {
				storeId = multiChannel.context.localStoreId;
			}
			break;
		}
		multiChannel.etracker.trackSearchQuery(autoCompletion);

		var url = multiChannel.context.search.toURI();
		multiChannel.setParameters({
				'storeId': storeId,
				'searchProfile': searchCategoryValues[0],
				'path': searchCategoryValues[2],
				'query': searchText
			}, url);
		url.go();
	} else {
		multiChannel.openLayer('missingsearchquery');
	}
};

multiChannel.search.addAutoCompletion = function() {

	if ($defined($('searchQuery'))) {
		var searchAutoCompletion = new URI(multiChannel.context.searchAutoCompletion);
		searchAutoCompletion.set('scheme', new URI().get('scheme'));
		searchAutoCompletion.set('port', new URI().get('port'));

		var searchRequestPrepare = function(el, req, data, queryValue) {
			var searchCategoryValues = $('searchCategory').value.split(';');
			data['storeId'] = multiChannel.context.storeId;
			data['c'] = searchCategoryValues[1];
		};

		window.addEvent('domready', function() {
			multiChannel.search.autocompleter = new Autocompleter.Request.JSON(
				$('searchQuery'), $('searchCategory'), $('autoCompReplaceCat'), searchAutoCompletion.toString(), {
				'postVar': 'q',
				'multiple': false,
				'width': 'auto',
				'onRequest': searchRequestPrepare,
				'onSelection': function(){multiChannel.search.checkSubmitSearchQuery(true)},
				'minLength': 3
			});
		});
	}
};

multiChannel.search.invalidateAutocompletion = function() {
	if ($defined(multiChannel.search.autocompleter)) {
		// this circumvents the autocompletion's cacheing mechanism
		multiChannel.search.autocompleter.queryValue = null;
	}
};

multiChannel.search.addSelectWorkaround = function() {
	var searchCategory = $('searchCategory');
	var searchCategoryContainer = $('searchCategory-container');

	if (Browser.Engine.trident && $defined(searchCategory) && $defined(searchCategoryContainer)) {
		var searchCategory2 = $('searchCategory').clone();
		searchCategory2.id = 'searchCategory2';
		searchCategory2.name = 'searchCategory2';
		searchCategory2.style.top = '0';
		searchCategory2.hide();
		searchCategory2.inject(searchCategoryContainer);

		var searchCategory3 = $('searchCategory').clone();
		searchCategory3.id = 'searchCategory3';
		searchCategory3.name = 'searchCategory3';
		searchCategory3.size = Math.min(searchCategory.getChildren('option').length, 20);
		searchCategory3.style.width = 'auto';
		searchCategory3.style.visibility = 'hidden';
		searchCategory3.inject(searchCategoryContainer);

		var openSelectEvent = function() {
			multiChannel.search.addSelectWorkaround.posistion();
			$('searchCategory2').selectedIndex = $('searchCategory').selectedIndex;
			$('searchCategory3').selectedIndex = $('searchCategory').selectedIndex;
			$('searchCategory').hide();
			$('searchCategory2').show();
			$('searchCategory3').show();
			$('searchCategory3').focus();

			var addBlurEvent = function() {
				$('searchCategory3').addEvent('blur', function(event) {
					$('searchCategory').show();
					$('searchCategory2').hide();
					$('searchCategory3').hide();
					$('searchCategory3').removeEvents('blur');
				});
			};
			window.setTimeout(addBlurEvent, 0);
		};
		searchCategory.addEvent('mousedown', openSelectEvent);
		searchCategory.addEvent('dblclick', openSelectEvent);

		var closeSelectEvent = function() {
			$('searchCategory').show();
			$('searchCategory2').hide();
			$('searchCategory3').hide();
			$('searchCategory3').removeEvents('blur');
			$('searchCategory').focus();
		};
		searchCategory2.addEvent('mousedown', closeSelectEvent);
		searchCategory2.addEvent('dblclick', closeSelectEvent);

		var selectEvent = function() {
			$('searchCategory').selectedIndex = $('searchCategory3').selectedIndex;
			$('searchCategory').show();
			$('searchCategory2').hide();
			$('searchCategory3').hide();
			$('searchCategory3').removeEvents('blur');
			$('searchCategory').focus();
		};
		searchCategory3.addEvent('click', selectEvent);

		searchCategory3.addEvent('keydown', function(event) {

			switch (event.key) {
			case 'enter':
				selectEvent();
				break;
			case 'up':

				if ($('searchCategory3').selectedIndex > 0) {
					$('searchCategory').selectedIndex = $('searchCategory3').selectedIndex - 1;
					$('searchCategory2').selectedIndex = $('searchCategory3').selectedIndex - 1;
				}
				break;
			case 'down':

				if ($('searchCategory3').selectedIndex < $('searchCategory3').size - 1) {
					$('searchCategory').selectedIndex = $('searchCategory3').selectedIndex + 1;
					$('searchCategory2').selectedIndex = $('searchCategory3').selectedIndex + 1;
				}
				break;
			}
		});

		window.addEvent('domready', function() {
			$('searchCategory3').hide();
			$('searchCategory3').style.visibility = '';
		});
	}
};

multiChannel.search.addSelectWorkaround.posistion = function() {
	var searchCategoryContainer = $('searchCategory-container');
	// IE6 Hack
	var mod_x = 0;
	var mod_y = 0;
	if($('searchCategory').getPosition().x > 0) mod_x = $('searchCategory').getPosition().x;
	if($('searchCategory').getPosition().y > 0) mod_y = $('searchCategory').getPosition().y;

	searchCategoryContainer.setStyle('top',  mod_y);
	searchCategoryContainer.setStyle('left', mod_x);
}

multiChannel.search.setSearchCategory = function() {
	if ($defined($('searchCategory'))) {
		var searchProfile = multiChannel.getParameter('searchProfile');
		var path = multiChannel.getParameter('path');

		if ($defined(searchProfile) && searchProfile.length > 0 && $('searchCategory').selectedIndex == 0 && $('searchCategory').getChildren('option[value*=' + searchProfile + ']').length > 0) {
			$('searchCategory').value = $('searchCategory').getChildren('option[value*=' + searchProfile + ']')[0].value;
		}

		if ($defined(path) && path.length > 0) {

			$('searchCategory').getChildren('option').each(function(optionElement) {

				if (optionElement.value.search(/;$/) == -1 && path.indexOf(optionElement.value.split(';')[2]) != -1) {
					$('searchCategory').value = optionElement.value;
				}
			});
		}
	}
};

//globally accessible variables for search hash modification
multiChannel.search.initial = true;
multiChannel.search.history = false;
multiChannel.search.setparamCalled = false;
multiChannel.search.prevHash = '_';

/*
 * This function works similar to multiChannel.setParameters() without
 * the URI parameter given: It replaces the "search parameters" given in the
 * current search query with those in the "params" parameter, and refreshes
 * the affected content areas.
 */
multiChannel.search.setParameters = function(params) {
	multiChannel.search.setparamCalled = true;
	var currentTab = multiChannel.search.searchTab;

	if (multiChannel.search.parameters == undefined) {
		multiChannel.search.parameters = new Object();
	}

	if (multiChannel.search.parameters[currentTab] == undefined) {
		multiChannel.search.parameters[currentTab] = new Object();
		for (param in multiChannel.search.initialParameters) {
			multiChannel.search.parameters[currentTab][param] =
				multiChannel.search.initialParameters[param];
		}
	}

	for(param in multiChannel.search.parameters[currentTab]) {
		multiChannel.search.parameters[currentTab][param] =
			multiChannel.search.parameters[currentTab][param];
	}

	currentParams = multiChannel.search.parameters[currentTab];

	if($('afterSearchFacetNavigation') != undefined) {
		var facets = '';
		if($('priceMin') != undefined && $('priceMin').value>=0) {
			params['priceMin'] = $('priceMin').value;
		}

		if($('priceMax') != undefined && $('priceMax').value>=0) {
			params['priceMax'] = $('priceMax').value;
		}

		var facetCheckboxes = $('afterSearchFacetNavigation').getElements('[type=checkbox]');
		for(i=0;i<facetCheckboxes.length;i++){
			if(facetCheckboxes[i].checked == true) {
				facets = facets + ':' + facetCheckboxes[i].value;
			}
		}
		if(facets.length>0) {
			params['facetIDandTypeList'] = facets.substring(1, facets.length);
		}

	}

	// if the search profile is changed, we'll need to update the tab display.
	if (params != undefined && params.searchProfile != undefined
			&& params.searchProfile != currentTab) {
		multiChannel.search.setSelectedTab(params.searchProfile);
		multiChannel.search.searchTab = params.searchProfile;
		if (multiChannel.search.parameters[params.searchProfile] == undefined ) {
			var newParams = new Object();
			newParams.searchProfile = params.searchProfile;
			newParams.page = '1';
			newParams.query = multiChannel.search.initialParameters.query;
			newParams.path = multiChannel.search.paths[params.searchProfile];
			multiChannel.search.parameters[params.searchProfile] = newParams;
		}
		currentParams = multiChannel.search.parameters[params.searchProfile];
	}

	if (params != undefined && params.searchProfile == 'onlineshop' && currentParams.storeId == undefined) {
		if (multiChannel.context.onlineshopStoreId != undefined) {
			currentParams.storeId = multiChannel.context.onlineshopStoreId;
		} else {
			currentParams.storeId = multiChannel.context.assetStoreId;
		}
	} else if (params != undefined && params.searchProfile == 'marketshop') {
		var storeId = Cookie.read('MC_STORE_ID');
		if (storeId != undefined) {
			currentParams.storeId = storeId;
		}
	}
	// update current parameters
	for (param in params) {
		currentParams[param] = params[param];
	}


	if (currentParams.storeId == undefined || currentParams.storeId == null) {
		currentParams.storeId = multiChannel.context.storeId;
	}
	currentParams.tabsWithResults = multiChannel.search.searchTabsWithResults;

	//initialize mixed object in hash & set initial tab
	if(multiChannel.search.parameters.mixed == undefined) {
		multiChannel.search.parameters.mixed = new Object();
	}
	multiChannel.search.parameters.mixed.tab = currentParams.searchProfile;


	if((!multiChannel.search.initial || (multiChannel.search.initial && Browser.Engine.trident)) &&
			multiChannel.search.prevHash != multiChannel.search.encodeHash(multiChannel.search.parameters) && multiChannel.search.history != true) {

		multiChannel.search.changeHash(multiChannel.search.parameters);
	}
	else {
		multiChannel.search.setparamCalled = false;
	}

	multiChannel.search.initial = false;

	var uri = new URI(multiChannel.context.searchAjax);
	var req = new Request.JSON({
		url: uri.toString(),
		onSuccess: multiChannel.search.handleJSONResponse
	});
	req.post(currentParams);

	multiChannel.search.updateLinks(currentParams);

	//copy hash
	if(location.hash.length > 0) {
		multiChannel.search.prevHash = '' + multiChannel.search.decodeHash(location.hash);
	}
	multiChannel.search.history = false;
};

//setting the financing rate on search page because direct js does not work
multiChannel.search.setFinancingRate = function() {	
	$$('#searchResult .catalogEntry .financing_search_marker').each(
			function(el) {
				var a=el.getProperty('id');
				var b = a.split("|");
					if(b.length==5){
						multiChannel.financingCFG.getLowestInstalment(''+b[0], ''+b[1], ''+b[2], ''+b[3], ''+b[4]);
					}
			}
	);
}



multiChannel.search.onHashChange = function() {

	//hash to object
	if(multiChannel.search.hashParams == undefined) {
		multiChannel.search.hashParams = new Object();
	}
	if (window.location.href.split("#")[1] != undefined && window.location.href.split("#")[1] != "" && multiChannel.search.setparamCalled != true) {
		var newHash = multiChannel.search.decodeHash(decodeURIComponent(window.location.href.split("#")[1]));
		newHash = newHash.split("&");
	    for (i = 0; i < newHash.length; i++)
	    {
	    	var entry = newHash[i].split("=");
	    	var brack1 = entry[0].indexOf('[');
	    	var brack2 = entry[0].indexOf(']');

	    	var subString1 = entry[0].substring(0, brack1);

	    	if(subString1 != '') {
	    		if(multiChannel.search.hashParams[subString1] == undefined) {
		    		multiChannel.search.hashParams[subString1] = new Object();
		    	}

		    	var subString2 = entry[0].substring(brack1 + 1, brack2);
		    	multiChannel.search.hashParams[subString1][subString2] = entry[1];
	    	}
	    }

	    //clone object
	    multiChannel.search.parameters = multiChannel.cloneObj(multiChannel.search.hashParams);

	    //include the jump back from any page to the search page using the 'Back, Forward' browser buttons
	    if(!multiChannel.search.initial || (multiChannel.search.initial && location.hash.length > 0)) {
				multiChannel.search.history = true;
				//set tab on history back & call the ajax search
				if(multiChannel.search.hashParams.mixed != undefined) {
					multiChannel.search.setPriceSliderValues(multiChannel.search.hashParams.mixed.tab);
					multiChannel.search.setFacets(multiChannel.search.hashParams.mixed.tab);
					multiChannel.search.history = true;
					multiChannel.search.setParameters({'searchProfile' : multiChannel.search.hashParams.mixed.tab});
				}

				//clone object
				multiChannel.search.parameters = multiChannel.cloneObj(multiChannel.search.hashParams);


				if(multiChannel.search.hashParams.mixed == undefined) {
					multiChannel.search.history = true;
					multiChannel.search.setParameters(multiChannel.search.hashParams);
				}
	    }

	} //else in the case you land on the starting page
	else {

		if((!multiChannel.search.initial && multiChannel.search.setparamCalled != true) ||
				(Browser.Engine.trident && multiChannel.search.initial)) {

			if(location.hash.length == 0) {
				if(multiChannel.search.parameters == undefined) {
					multiChannel.search.parameters = new Object();
				}
				multiChannel.search.parameters[multiChannel.search.initialParameters['searchProfile']] = new Object;
				for (param in multiChannel.search.initialParameters) {
					multiChannel.search.parameters[multiChannel.search.initialParameters['searchProfile']][param] =
						multiChannel.search.initialParameters[param];
				}
			}
			multiChannel.search.initial = true;
			multiChannel.search.history = true;
			multiChannel.search.setParameters({'searchProfile': multiChannel.search.initialParameters['searchProfile']});

		}
		multiChannel.search.setparamCalled = false;
	}

	var params = new Object();
	if(multiChannel.search.initial) {
		multiChannel.search.initial = false;
	}
	else {
		var hashTmp = multiChannel.search.parameters;

		params = multiChannel.cloneObj(hashTmp);
		if(params != undefined && params != null) {
			multiChannel.search.hashParams = multiChannel.cloneObj(params);
		}

		if(multiChannel.search.hashParams.mixed != undefined) {
			multiChannel.search.searchTab = multiChannel.search.hashParams.mixed.tab;
		}
	}

};

multiChannel.search.initSearchHashHistory = function(iframeId) {
	window.addEvent('domready', function() {
		HashHandler.init(multiChannel.search.onHashChange, $(iframeId));
	});
};

multiChannel.search.encodeHash = function(object) {
	if (object) {
		var uri = new URI('http://example.com');
		uri.setData(object);
		return encodeURIComponent(uri.get('query'));
	} else {
		return null;
	}
};

multiChannel.search.decodeHash = function(hash) {
	if (hash != null && hash != undefined) {
		try {
			return decodeURIComponent(hash);
		} catch (e) {
			return null;
		}
	} else {
		return null;
	}
};

multiChannel.search.changeHash = function(newHash) {
	location.hash = multiChannel.search.encodeHash(newHash);
};

multiChannel.search.updateLinks = function(currentParams) {
	var breadcrumb = $('globalsearch_breadcrumb');
	if (breadcrumb != undefined) {
		var uri = new URI(breadcrumb.get('href'));
		uri.setData(currentParams);
		breadcrumb.set('href', uri.toString());
	}
	var afterSearchLink = $('aftersearch_removecategories_link');
	if (afterSearchLink != undefined) {
		var uri = new URI(afterSearchLink.get('href'));
		uri.setData(currentParams);
		uri.setData('path', '');
		afterSearchLink.set('href', uri.toString());
	}
};

multiChannel.search.setSelectedTab = function(searchProfile) {
	var tabs = $$('#searchResultTabs td');
	tabs.each(function(td) {
		var id = td.get('id');
		if (id == 'searchTab_' + searchProfile) {
			td.addClass('selected');
		} else {
			td.removeClass('selected');
		}
	});
};

multiChannel.search.setPriceSliderValues = function(searchProfile) {
	if($('priceMin') != undefined && multiChannel.search.hashParams[searchProfile]['priceMin'] != undefined) {
		$('priceMin').set('value', multiChannel.search.hashParams[searchProfile]['priceMin']);
	}
	if($('priceMax') != undefined && multiChannel.search.hashParams[searchProfile]['priceMax'] != undefined) {
		$('priceMax').set('value', multiChannel.search.hashParams[searchProfile]['priceMax']);
	}
};

multiChannel.search.setFacets = function(searchProfile){
	if($('afterSearchFacetNavigation') != undefined && multiChannel.search.hashParams[searchProfile]['path'] != undefined) {
		$each(multiChannel.search.hashParams[searchProfile]['path'].split('~~'), function(facet){
			var inputName = 'topFacet_' + facet.replace('||','_');
			if($defined($(inputName))){
				$(inputName).checked = true;
			}
		});
	}
};

multiChannel.search.isJSONResponseValid = function(response) {
	return response != undefined
		&& response.content_middle != undefined
		&& response.searchProfile != undefined
		&& response.navigation != undefined
		&& response.facet != undefined
		&& response.count != undefined
		&& response.name != undefined
		&& response.path != undefined
		&& response.mystore != undefined;
};

multiChannel.search.renderContentMiddle = function(middle) {
	var searchResult = $('searchResult');
	if (searchResult != undefined) {
		searchResult.set('html', middle);
	}
};

multiChannel.search.updateMyStore = function(myStore) {
	if (myStore.length > 0) {
		var myStoreTeaser = $('mystoreTeaser');
		if (myStoreTeaser != undefined) {
			// inject the new mystore HTML into a new element.
			// replace the current mystore teaser with the new element's
			// myStore child div.
			var element = new Element('div');
			element.set('html', myStore);
			var children = element.getChildren('div');
			if (children.length >= 1) {
				myStoreTeaser.set('id', 'unusedId');
				children[0].replaces(myStoreTeaser);
				multiChannel.processSlider();
			}
		}
	}
};

multiChannel.search.updateFacet = function(facet) {
	if (facet.length > 0) {
		var element = $('afterSearchFacetNavigation');
		if (facet != undefined) {
			//alert(facet);
			// inject the new facet HTML into a new element.
			// replace the current facet with the new element's
			// facet.
			element.set('html', facet);
			if ($defined($('slide_container'))) {
				multiChannel.afterSearchFacetNavigation.init();
				multiChannel.afterSearchFacetNavigation.priceSlider.init(parseInt($('stepCount').value), parseInt($('step').value), parseInt($('priceMin').value), parseInt($('priceMax').value));
			}
		}
	}
};

multiChannel.search.updateAfterSearchNavigation = function(searchProfile, navigation, path, count) {
	var element = $('aftersearch_profile_' + searchProfile);
	var removeSelected = function(el) { el.removeClass('selected'); };
	var setDisplayNone = function(el) { el.setStyle('display', 'none'); };
	if (element != undefined) {
		$$('#afterSearchNavigation .selected').each(removeSelected);
		$$('.aftersearch_category').each(setDisplayNone);
		element.setStyle('display', 'block');
		element.set('html', navigation);
		// the element containing the category title is the previous one.
		// within this one, the count is contained in an "em".
		var previous = element.getPrevious();
		previous.addClass('selected');
		var previousChildren = previous.getChildren();
		if (previousChildren.length > 0) {
			var text = (count.length > 0) ? '(' + count + ')' : '';
			// this contains the count
			previousChildren[0].set('text', text);
		}
	}
	// add or remove the "last" class on the lowest category link.
	var lastLink = $('aftersearch_last_link');
	if (lastLink != undefined && lastLink.getNext() != undefined) {
		if (lastLink.getNext().getChildren().length == 0) {
			lastLink.addClass('last');
		} else {
			lastLink.removeClass('last');
		}
	}
};

multiChannel.search.setAfterSearchHeader = function() {
	var removeCategoriesElement = $('aftersearch_removecategories');
	var textElement = $('aftersearch_text');
	if (removeCategoriesElement != undefined && textElement != undefined) {
		// check if there is any tab that contains a result in a subcategory
		var hasSubcategory = multiChannel.search.isAnyCategorySelected();
		if (hasSubcategory) {
			removeCategoriesElement.removeClass('hideout');
			textElement.addClass('hideout');
		} else {
			removeCategoriesElement.addClass('hideout');
			textElement.removeClass('hideout');
		}
	}
};

multiChannel.search.updateSearchTab = function(searchProfile, name, count) {
	var tab = $('searchTab_' + searchProfile);
	if (tab != undefined) {
		var tabChildren = tab.getChildren();
		if (tabChildren.length == 1) {
			var children = tabChildren[0].getChildren();
			if (children.length == 2) {
				children[0].set('text', name);
				children[1].set('text', count.length > 0 ? '(' + count + ')' : '');
			}
		}
	}
};

multiChannel.search.updateTabsWithResults = function(searchProfile, count) {
	if (count > 0) {
		var allTabs = multiChannel.search.searchTabs.split(',');
		var tabsWithResults = multiChannel.search.searchTabsWithResults.split(',');
		var result = [];

		for (var i = 0; i < allTabs.length; i++) {
			var tab = allTabs[i];
			if (searchProfile == tab || tabsWithResults.contains(tab)) {
				result.push(tab);
			}
		}
		var newTabsWithResults = '';
		for (var i = 0; i < result.length; i++) {
			if (i > 0) newTabsWithResults += ',';
			newTabsWithResults += result[i];
		}
		multiChannel.search.searchTabsWithResults = newTabsWithResults;
	}
};

multiChannel.search.handleJSONResponse = function(response) {
	if (multiChannel.search.isJSONResponseValid(response)) {
		var middle = response.content_middle;
		var searchProfile = response.searchProfile;
		var navigation = response.navigation;
		var facet = response.facet;
		var count = response.count;
		var name = response.name;
		var path = response.path;
		var myStore = response.mystore;

		multiChannel.search.renderContentMiddle(middle);
		multiChannel.search.updateAfterSearchNavigation(searchProfile, navigation, path, count);
		multiChannel.search.updateFacet(facet);
		multiChannel.search.setAfterSearchHeader();
		multiChannel.search.updateMyStore(myStore);
		multiChannel.search.updateSearchTab(searchProfile, name, count);
		multiChannel.search.updateTabsWithResults(searchProfile, count);
		if(response.afterSearchCategoryPath != undefined){
			multiChannel.etracker.afterSearchCategoryPath = response.afterSearchCategoryPath;
		}

		multiChannel.mpNoResultPrepare(searchProfile, count);

		multiChannel.etracker.initSearchCatalogEntryTracking();
		window.scrollTo(0, 0);
	}
	multiChannel.shortCutCategoryEntryDescription();
	multiChannel.search.setFinancingRate();

};

multiChannel.search.setSearchTab = function(searchProfile) {
	if (multiChannel.search.searchTab != searchProfile) {
		multiChannel.search.setParameters({'searchProfile': searchProfile});
	}
};

multiChannel.search.setAfterSearchTab = function(searchProfile, path) {
	if (multiChannel.search.searchTab != searchProfile) {
		multiChannel.search.setParameters({'searchProfile': searchProfile});
	} else {
		multiChannel.search.setParameters({'path': path});
	}
};

multiChannel.search.isAnyCategorySelected = function() {
	for (profile in multiChannel.search.parameters) {
		if(multiChannel.search.parameters[profile] != undefined) {
			var path = multiChannel.search.parameters[profile].path;
			if (path != undefined && path.length > 0) {
				return true;
			}
		}
	}
	return false;
};

multiChannel.bigStartLayer = new Object();

multiChannel.bigStartLayer.sliding = false;

multiChannel.bigStartLayer.slideOut = function(){
	var openLayerDiv = $('bigStartLayerOpenLayer');
	var sld=new Fx.Slide('layer_content',
		{
			duration: 1000,
			transition: Fx.Transitions.Bounce.easeOut,
			onStart: function() {
				multiChannel.bigStartLayer.sliding = true;
			},
			onComplete: function() {
				openLayerDiv.setStyles({'display': 'block'});
				multiChannel.bigStartLayer.sliding = false;
			}
		});
		$('layer_content').parentNode.setStyle('height', $('layer_content').offsetHeight);
		sld.slideOut();
		multiChannel.bigStartLayer.moveUp();
};

multiChannel.bigStartLayer.moveUp = function() {
	var container = $('big_flash_layer_container');
	if (container != null) {
		var top = container.getStyle('top').toInt();
		var offset = $('layer_content').offsetHeight.toInt();
		var difference = top - offset;
		var tween = new Fx.Tween(container,
			{
				duration: 1000,
				transition: Fx.Transitions.Bounce.easeOut,
				onStart: function() {},
				onComplete: function() {}
			}
		);
		tween.start('top', top + 'px', difference + 'px');
	}
};

multiChannel.bigStartLayer.slideIn = function(){
	var openLayerDiv = $('bigStartLayerOpenLayer');
	var sld=new Fx.Slide('layer_content',
		{
			duration: 1000,
			transition: Fx.Transitions.Bounce.easeOut,
			onStart: function() {
				openLayerDiv.setStyles({'display': 'none'});
				multiChannel.bigStartLayer.sliding = true;
			},
			onComplete: function() {
				multiChannel.bigStartLayer.sliding = false;
			}
		}
	);
	sld.slideIn();
	multiChannel.bigStartLayer.moveDown();
};

multiChannel.bigStartLayer.moveDown = function() {
	var container = $('big_flash_layer_container');
	if (container != null) {
		var top = container.getStyle('top').toInt();
		var offset = $('layer_content').offsetHeight.toInt();
		var sum = top + offset;
		var tween = new Fx.Tween(container,
			{
				duration: 1000,
				transition: Fx.Transitions.Bounce.easeOut,
				onStart: function() {},
				onComplete: function() {}
			}
		);
		tween.start('top', top + 'px', sum + 'px');
	}
};

multiChannel.bigStartLayer.checkAndSetCookie = function(){
	var mcscookie = Cookie.read('mcsstatusbsl');
	if(mcscookie == null){
		Cookie.write('mcsstatusbsl', 'bsl=0');
		window.addEvent('domready', multiChannel.bigStartLayer.adjustLayer);
	}else{
		var openLayerDiv = $('bigStartLayerOpenLayer');
	    if($defined(openLayerDiv)) {
	      var sld=new Fx.Slide('layer_content',
	        {
	          duration: 1,
	          onStart: function() {
	          },
	          onComplete: function() {
	            openLayerDiv.setStyles({'display': 'block'});
	          }
	        }
	      );
	      $('layer_content').parentNode.setStyle('height', $('layer_content').offsetHeight);
	      sld.slideOut();
	    }
	}
};

multiChannel.bigStartLayer.adjustLayer = function() {
	var container = $('big_flash_layer_container');
	if (container != null) {
		var top = container.getStyle('top').toInt();
		var offset = $('layer_content').offsetHeight.toInt();
		var sum = top + offset;
		container.setStyle('top', sum + 'px');
	}
};

multiChannel.bigFlashLayer = new Object();

multiChannel.bigFlashLayer.checkAndSetCookie = function(){
	var mcscookie = Cookie.read('mcsstatusbfl');
	if (mcscookie == null) {
		$('big_flash_layer_container').show();
		Cookie.write('mcsstatusbfl', 'bfl=0');
	}
};

/**************************************************
account functions
**************************************************/
multiChannel.account = new Object();



multiChannel.account.formatLinkEntries = function(){
	if ($defined($('links'))) {
			var links_registered = $('trlinks_registered');
			var children = links_registered.getElements('td');
		children[0].addClass('first');
		children[children.length - 1].addClass('last');
			var links_guest = $('trlinks_guest');
			var children = links_guest.getElements('td');
		children[0].addClass('first');
		children[children.length - 1].addClass('last');
	}
};

multiChannel.productzoom = new Object();

multiChannel.productzoom.show = function(partNumber) {
	if ($defined(partNumber)) {
		var uri = new URI(multiChannel.context.getScene7ProductZoomURL(partNumber));
		s7loadViewer(uri, 755, 411, multiChannel.getParameter('instanceName', uri), '#FFFFFF', 'opaque', 'productzoomcontent');
	}
};

multiChannel.autoEllipseText = function(element, text, width)
{
   element.innerHTML = '<span id="ellipsisSpan" style="white-space:nowrap;">' + text + '</span>';
   var inSpan = document.getElementById('ellipsisSpan');
   if(inSpan.offsetWidth > width)
   {
      var i = 1;
      inSpan.innerHTML = '';
      while(inSpan.offsetWidth < (width) && i < text.length)
      {
         inSpan.innerHTML = text.substr(0,i) + '...';
         i++;
      }

      element.innerHTML = '';
      return text.substr(0,i-1)+'...';
   }
   return text;

};

multiChannel.unescapeHTML = function(string) {
    var temp = document.createElement("div");
    temp.innerHTML = string;
    var result = temp.childNodes[0].nodeValue;
    temp.removeChild(temp.firstChild)
    return result;
};

multiChannel.showProductDetailTabAndLocate = function(tab) {
	multiChannel.showProductDetailTab(tab);
	window.location.href = '#infoTabNav';
};

multiChannel.shortCutCategoryEntryDescriptionPrint = function() {
	multiChannel.shortCutCategoryEntryDescription('#printContent ');
};

multiChannel.shortCutCategoryEntryDescription = function(prefix) {
	var pref = '#contentMiddle ';
	if($defined(prefix)) pref = prefix;
	window.addEvent('domready', function(){
		$$(pref + '.catalogEntry .description div').each(function(item){
			var articleLongDescription = item;
			var articleDescription = articleLongDescription.getParent();
			articleDescription.setStyle('height', '60px');
			var text = articleLongDescription.innerHTML;
			while(articleLongDescription.offsetHeight > 60){
				var lastspace = text.lastIndexOf(' ');
				if(lastspace != -1){
					text = text.substring(0, lastspace);
				}else{
					text = text.substring(0, text.length - 5);
				}
				newtext = text + '... ';
				articleLongDescription.innerHTML = newtext;
			}
			if($defined(articleDescription) && articleDescription.hasClass('description')) articleDescription.setStyle('height', 'auto');
		});
	});
};

multiChannel.setArticleLongDescription = function(linktext) {
	var articleLongDescription = $('articleDescriptionContentPD');
	var articleDescription = articleLongDescription.getParent();
	articleDescription.setStyle('height', '61px');
	var text = articleLongDescription.innerHTML;
	if(articleLongDescription.offsetHeight > 60){
		while(articleLongDescription.offsetHeight > 60){
			var lastspace = text.lastIndexOf(' ');
			if(lastspace != -1){
			text = text.substring(0, lastspace);
			}else{
				text = text.substring(0, text.length - 5);
			}
			newtext = text + '... ';
			articleLongDescription.innerHTML = newtext;
		}

		newtext = text + '... ';
		articleLongDescription.innerHTML = newtext;

		var arrowSpan = new Element('span', {'class': 'raise2', 'text': '\u00BB\u00A0'});
		var moreDetailsLink = new Element('span', {'class': 'salesline_font_color link noprint', 'style' : 'margin-right: 5px;', 'text': linktext, 'events': {'click': function(){multiChannel.showProductDetailTabAndLocate('ref_catalogEntryDetails');}}});
		arrowSpan.inject(moreDetailsLink, 'top')
		moreDetailsLink.inject($('articleDescriptionLinks'));
		$('articleDescriptionLinks').setStyle('padding-top', '2px');
	}
	if($defined(articleDescription) && articleDescription.hasClass('articleDescription')) articleDescription.setStyle('height', 'auto');
};

multiChannel.setEnergyEfficiencyLink = function(linktext, linktarget) {
	var energyEfficiencyDetailLink = new Element('span', {'id': 'energyEfficiencyLink', 'class': 'salesline_font_color link noprint', 'events': {'click': function() {multiChannel.showProductDetailTab('ref_catalogEntryDetails');window.location.href='#feature_' + linktarget;}}});
	var energyEfficiencyDetailArrow = new Element('span', {'class': 'raise2', 'text': '\u00BB\u00A0'});
	energyEfficiencyDetailArrow.inject(energyEfficiencyDetailLink);
	energyEfficiencyDetailLink.appendText(linktext);

	energyEfficiencyDetailLink.inject($('articleDescriptionLinks'));
	$('articleDescriptionLinks').setStyle('padding-top', '2px');
};

multiChannel.hideBlock = function (type){
	$$(type).each(function(item){
		item.style.display= 'none';
	});
};

multiChannel.showBlock = function (type){
	$$(type).each(function(item){
		item.style.display = '';
	});
};

multiChannel.openWishlistPrintView = function(printurl){
	var storefilter = $('storefilter');
	var uri = new URI(printurl);
	if($defined(storefilter)){
		var display = $('locationOnline').checked ? 'online' : 'local';
		multiChannel.setParameters({display:display}, uri);
	}
	window.open(uri.toURI(),'_blank','width=660,height=800,scrollbars=1');
};

multiChannel.changeStoreAndShowCompareLayer = function (storeId) {
	if (storeId != -1) {
		var redirectUrl =  multiChannel.getParameter('redirectURL');
		var uri = redirectUrl == null ? new URI() : new URI(redirectUrl);
		var domain = multiChannel.getDomain(uri);
		Cookie.write('MC_STORE_ID', storeId, { 'domain': domain, 'path': '/', 'duration': 30 });
		multiChannel.setParameters({'layer': 'comparison', 'localStoreId': storeId}, uri);
		uri.go();
	}
};

multiChannel.setLangCookie = function () {
	Cookie.write('MCS_LANG_SELECTED', '1', { 'path': '/' });
};

multiChannel.changeCompareLayerStore = function (storeId) {
	if (storeId != -1) {
		multiChannel.closeAndRemoveLayer('comparison');
		multiChannel.openLayer('comparison', {'showWarning':false,'storeId':storeId} );
	}
};


multiChannel.openProductComparePrintView = function(printurl, storeId) {
	var uri = new URI(printurl);
	multiChannel.setParameters({'storeId':storeId}, uri);
	window.open(uri.toURI(),'_blank','width=800,height=840,scrollbars=1');
};

multiChannel.isWishlistView = function(){
	return $defined($('myAccountWishlist'));
};

multiChannel.autofitBreadcrumb = function() {
	if($defined($('breadcrumb')) && $defined($('breadcrumbfitter'))){
		var tmp = $('breadcrumb').getElements('a');
		var invtmp = new Array(tmp.length);
		$each(tmp, function(ele, index){
			invtmp[tmp.length-1-index]=ele;
		});
		$each(invtmp, function(ele, index){
			if($('breadcrumbfitter').offsetWidth > 525){
				if(ele.innerHTML.length>5){
					ele.innerHTML = ele.innerHTML.substring(0,3)+'...';
				}
		  }
		});
	}
};

multiChannel.fitTesteoLogo = function() {
	window.addEvent('domready', function(){
		if($defined($('catalogEntry')) && $defined($('testeoplaceholder')) && $defined($('testeo'))){
			var y1 = $('catalogEntry').getPosition().y;
			var y2 = $('testeoplaceholder').getPosition().y;
			$('testeo').setStyle('top', (y2-y1).toInt());
		}
	});
};

multiChannel.loadCatalogEntryAssociations = function(associationType, parameters) {
	var associationTab = $('tab_' + associationType.capitalize());

	if ($defined(associationTab) && ('' == associationTab.get('html').trim() || $defined(parameters))) {
		var associationUri = new URI(multiChannel.context.catentryassociationlist);
		multiChannel.setParameters({
				'catEntryId': multiChannel.getParameter('catEntryId'),
				'associationType': associationType
			}, associationUri);

		if ($defined(parameters)) {
			multiChannel.setParameters(parameters, associationUri);
		}
		var associationRequest = new Request.HTML({
				'url': associationUri.toString(),
				'method': 'get',
				'update': associationTab
			});
		associationRequest.send();
	}
};

multiChannel.jumpToTab = function(){
	window.addEvent('domready', function(){
		var uri = new URI();
		var fragment = uri.get('fragment');
		if($defined(fragment)){
		 	if(fragment == 'reviewTab')
				multiChannel.review.jumpToReviewTab();
		}
	})
};

multiChannel.checkMaxTextLength = function(id, max){
	if($defined($(id)) && $defined(max)){
		var text = $(id).get('value');
		if(text.length > max) $(id).set('value', text.substring(0, max));
	}
};

multiChannel.setDefaultInputValue = function(id, value) {
  if($defined( $(id))){
	var element = $(id);
	element.addEvents({
        'focus': function(){
            if( element.get('value') == '' || element.get('value') == value ) element.set('value','');
            else element.select();
        },
        'blur': function(){
            if( element.get('value') == '' ) element.set('value', value);
        }
    });
    if( element.get('value')=='' ) element.set('value', value);
  }
};

multiChannel.flyerRedirectStorelocation = function(){
	var url1 = new URI();
	var parameters = multiChannel.getParameters();
	parameters['layer'] = 'flyer';
	parameters['redirectURL'] = '';
	multiChannel.setParameters(parameters, url1);
	var url2 = new URI(multiChannel.context.mystoreselection);
	multiChannel.setParameters({redirectURL: url1.toString(), 'deferRedirect': true}, url2);
	url2.go();
};

/*******************/
/* Reviews */
/*******************/

multiChannel.review = new Object();
multiChannel.review.star_width = 13;

multiChannel.review.initRating = function(id){

	window.addEvent('domready', function(){
		if($defined($(id)) && $defined($(id).getElement('.redstarmap'))
			&& $defined($(id).getElement('.graystarmap'))){

			var redStarMap = $(id).getElement('.redstarmap');
			var grayStarMap = $(id).getElement('.graystarmap');

			var posElement = $(id).getElement('.currentRating');
			var posElement_x = posElement.getPosition().x;
			var posStarmap_x = grayStarMap.getPosition().x;
			var widthStarmap = posElement_x - posStarmap_x;
			var widthStar = widthStarmap / 5;

			var ratingMouseClick = function(event, element){
				var posEvent_x = event.page.x;
				var diff_x = (posEvent_x-posStarmap_x);

				if(diff_x <= widthStar){
					element.setStyle('left', '-' + multiChannel.review.star_width*4 + 'px');
					posElement.set('title', '1');
				}
				else if(diff_x <= (widthStar*2)){
					element.setStyle('left', '-' + multiChannel.review.star_width*3 + 'px');
					posElement.set('title', '2');
				}
				else if(diff_x <= (widthStar*3)){
					element.setStyle('left', '-' + multiChannel.review.star_width*2 + 'px');
					posElement.set('title', '3');
				}
				else if(diff_x <= (widthStar*4)){
					element.setStyle('left', '-' + multiChannel.review.star_width + 'px');
					posElement.set('title', '4');
				}
				else {
					element.setStyle('left', '0px');
					posElement.set('title', '5');
				}
			}

			var ratingMouseOver = function(event, element){
				var posEvent_x = event.page.x;
				var diff_x = (posEvent_x-posStarmap_x);
				if(diff_x <= widthStar){
					element.setStyle('left', '-' + multiChannel.review.star_width*4 + 'px');
				}
				else if(diff_x <= (widthStar*2)){
					element.setStyle('left', '-' + multiChannel.review.star_width*3 + 'px');
				}
				else if(diff_x <= (widthStar*3)){
					element.setStyle('left', '-' + multiChannel.review.star_width*2 + 'px');
				}
				else if(diff_x <= (widthStar*4)){
					element.setStyle('left', '-' + multiChannel.review.star_width + 'px');
				}
				else {
					element.setStyle('left', '0px');
				}
			}

			var ratingMouseMove = function(event, element) {
				var posEvent_x = event.page.x;
				var diff_x = (posEvent_x-posStarmap_x);
				if(diff_x <= widthStar){
					element.setStyle('left', '-' + multiChannel.review.star_width*4 + 'px');
				}
				else if(diff_x <= (widthStar*2)){
					element.setStyle('left', '-' + multiChannel.review.star_width*3 + 'px');
				}
				else if(diff_x <= (widthStar*3)){
					element.setStyle('left', '-' + multiChannel.review.star_width*2 + 'px');
				}
				else if(diff_x <= (widthStar*4)){
					element.setStyle('left', '-' + multiChannel.review.star_width + 'px');
				}
				else {
					element.setStyle('left', '0px');
				}
			}

			var ratingMouseOut = function(event, element) {
				var current = posElement.get('title');
				if(current == '0'){
					element.setStyle('left', '-' + multiChannel.review.star_width*5 + 'px');
				} else if(current == '1'){
					element.setStyle('left', '-' + multiChannel.review.star_width*4 + 'px');
				} else if(current == '2') {
					element.setStyle('left', '-' + multiChannel.review.star_width*3 + 'px');
				} else if(current == '3') {
					element.setStyle('left', '-' + multiChannel.review.star_width*2 + 'px');
				} else if(current == '4') {
					element.setStyle('left', '-' + multiChannel.review.star_width*1 + 'px');
				} else if(current == '5') {
					element.setStyle('left', '0px');
				}
			};

			grayStarMap.addEvent('click', function(event){
				ratingMouseClick(event, redStarMap);
			});

			redStarMap.addEvent('click', function(event){
				ratingMouseClick(event, this);
			});

			grayStarMap.addEvent('mouseover', function(event){
				ratingMouseOver(event, redStarMap);
			});

			redStarMap.addEvent('mouseover', function(event){
				ratingMouseOver(event, this);
			});

			grayStarMap.addEvent('mousemove', function(event){
				ratingMouseMove(event, redStarMap);
			});

			redStarMap.addEvent('mousemove', function(event){
				ratingMouseMove(event, redStarMap);
			});

			grayStarMap.addEvent('mouseout', function(event){
				ratingMouseOut(event, redStarMap);
			});

			redStarMap.addEvent('mouseout', function(event){
				ratingMouseOut(event, this);
			});
		}
	});
};

multiChannel.review.reviewProduct = function(catEntryId, reviewId) {

	if(!$defined(catEntryId) || isNaN(catEntryId)) return false;

	if (Cookie.read('MC_USERTYPE') == 'R') {
		if($defined(reviewId)){
			multiChannel.openLayer('productreview', { 'catEntryId': catEntryId, 'reviewId': reviewId}, function(){multiChannel.review.initRating('reviewStarsInput');multiChannel.review.setReviewText();multiChannel.review.initDefaultInputValues();});
		} else {
			multiChannel.openLayer('productreview', { 'catEntryId': catEntryId }, function(){multiChannel.review.initRating('reviewStarsInput');multiChannel.review.initDefaultInputValues();});
		}
	} else {
		var logonURI = new URI(multiChannel.context.logon);
		var redirectURI = new URI();
		multiChannel.setParameters({ 'catEntryId': catEntryId, 'layer': 'productreview' }, redirectURI);
		logonURI.setData({'redirectURL':redirectURI.toString(), redirect: '1'}, true);

		multiChannel.openLayer('loginforreview');
		multiChannel.review.reviewLogin = function() {
			window.location.href = logonURI.toString();
		};
	}
};

multiChannel.review.setCurrentRating = function(id, amount) {

	if($defined(id) && $defined(amount)){
		var a = amount.toInt();
		if(a > 5) a = 5;
		var current = $(id).getElement('.currentRating');
		var starMap = $(id).getElement('.redstarmap');
		switch (a){
			case 1:
				starMap.setStyle('left', '-' + multiChannel.review.star_width*4 + 'px');
				current.set('title', '1');
				break;
			case 2:
				starMap.setStyle('left', '-' + multiChannel.review.star_width*3 + 'px');
				current.set('title', '2');
				break;
			case 3:
				starMap.setStyle('left', '-' + multiChannel.review.star_width*2 + 'px');
				current.set('title', '3');
				break;
			case 4:
				starMap.setStyle('left', '-' + multiChannel.review.star_width + 'px');
				current.set('title', '4');
				break;
			case 5:
				starMap.setStyle('left', '0px');
				current.set('title', '5');
				break;
			default:
				starMap.setStyle('left', '-' + multiChannel.review.star_width*5 + 'px');
				current.set('title', '0');
				break;
		}
	};
};

multiChannel.review.getCurrentRating = function(id){
	if($defined(id)){
		var element = $(id).getElement('.currentRating');
		return $defined(element) ? element.get('title') : 0;
	};
};

multiChannel.review.switchTo = function(type){

	if(type == 'reviewPartPreview'){
		if( $defined($('reviewTitle')) && $defined($('previewTitle')) ) $('previewTitle').set('text', $('reviewTitle').get('value'));
		if( $defined($('reviewText')) && $defined($('previewText')) ) {
			var text = $('reviewText').value.replace(/\r?\n|\r/g, "<BR>");
			$('previewText').empty();
			$each(text.split('<BR>'), function(part){
				var div = new Element('div');
				div.set('text', part);
				div.inject($('previewText'));
			});
		}
		if( $defined($('reviewStarsInput')) && $defined($('reviewStarsPreview')) )
			multiChannel.review.setCurrentRating('reviewStarsPreview', multiChannel.review.getCurrentRating('reviewStarsInput'));
	}

	multiChannel.review.hideErrors();
	$('buttonSendReview').show();
	$('buttonBackToReview').show();
	$('buttonSendReviewInactive').hide();
	$('buttonBackToReviewInactive').hide();

	$$('#layer #review .part').each(function(part){
		part.hide();
		if($defined($(type))) $(type).show();
	});
	multiChannel.fitLayer();

	/*ie7 bug*/
	if(type == 'reviewPartInput') {
		$('reviewPartInput').set('class', 'part');
	}
};

multiChannel.review.submitReview = function(catEntryId, reviewId){

	var eId = '';
	var entryId = multiChannel.getParameter('catEntryId');
	if(catEntryId  && !isNaN(catEntryId)) eId = catEntryId;
	else if(entryId != null && !isNaN(entryId)) eId = entryId;
	else return false;

	$('buttonSendReview').hide();
	$('buttonBackToReview').hide();
	$('buttonSendReviewInactive').show();
	$('buttonBackToReviewInactive').show();

	var uri = new URI();
	if($defined(reviewId) && reviewId != ''){
		if (!$defined(multiChannel.updateProductReviewSSLUri)) {
			multiChannel.updateProductReviewSSLUri = new URI(multiChannel.context.updateproductreview);
		}
		uri = new URI(multiChannel.updateProductReviewSSLUri);
	} else {
		if (!$defined(multiChannel.addProductReviewUri)) {
			multiChannel.addProductReviewUri = new URI(multiChannel.context.addproductreview);
		}
		uri = new URI(multiChannel.addProductReviewUri);
	}

	var rating = '';
	if($defined($('reviewStarsInput'))) {
		rating = multiChannel.review.getCurrentRating('reviewStarsInput');
	}

	var title = '';
	if($defined($('reviewTitle'))) {
		title = $('reviewTitle').get('value');
	}

	var content = '';
	if($defined($('reviewText'))) {
		content = $('reviewText').value;
	}

	var parameters = {
		'catEntryId': catEntryId,
		'title': title,
		'content': content,
		'rating': rating,
		'reviewId' : reviewId
	};
	multiChannel.setParameters(parameters, uri);

	var onsuccess = multiChannel.review.checkResponse;

	var data = uri.get('query');
	var url = uri.set('query', '').toString();

	var request = new Request.JSON({
		method: 'post',
		url: url,
		encoding: 'utf-8',
		data: data,
		onSuccess: onsuccess
	});
	request.send();
};

multiChannel.review.hideErrors = function(type) {
	$$('#reviewErrorBoxMessage_messages li').each(function(item){
		item.hide();
	});
	$('reviewErrorBox').hide();
};

multiChannel.review.checkInputs = function(){

	multiChannel.review.removeDefaultValues();

	multiChannel.review.hideErrors();

	var showErrorBox = false;
	if($('reviewTitle').get('value') == ''){
		$('reviewError_TitleMissing').show();
		showErrorBox = true;
	}
	if($('reviewText').get('value') == ''){
		$('reviewError_ContentMissing').show();
		showErrorBox = true;
	}
	if(multiChannel.review.getCurrentRating('reviewStarsInput') == 0){
		$('reviewError_RatingMissing').show();
		showErrorBox = true;
	}

	if(showErrorBox){
	 	$('reviewErrorBox').show();
	}	else {
		multiChannel.review.switchTo('reviewPartPreview');
	}
};


multiChannel.review.checkResponse =  function(response) {
	var status = response.status;
	if(status == 'ok') {
		multiChannel.review.switchTo('reviewPartSuccess');
		multiChannel.review.loadUserReviews();
	} else {
		multiChannel.review.switchTo('reviewPartInput');
		$('reviewErrorBox').show();
		var prefix = 'reviewError_';
		$each(response.errors, function(e){
			if( $defined( $(prefix + e.name) ) ){
				$(prefix + e.name).show();
			}
		});
	}
};

multiChannel.review.showReview = function(id){

	if($defined(id)){
		var reviewId = 'review_' + id;
		var reviewTextId = 'reviewText_' + id;
		var reviewCompleteTextId = 'reviewTextComplete_' + id;

		$$('#reviewsContentContainer .reviewBox').each(function(item){
			item.hide();
		});

		$(reviewTextId).hide();
		if($defined($('catalogEntryReviewsSpacer'))){
			$('catalogEntryReviewsSpacer').hide();
		}
		$(reviewCompleteTextId).show();
		$(reviewId).removeClass('reviewBackground').addClass('reviewBoxExpanded');
		$('reviewsContentContainer').setStyles({'overflow-y':'hidden', 'height':'auto'});
		$(reviewId).show();

		if($defined($('reviewButtonBack_' + id))) $('reviewButtonBack_' + id).show();
		if($defined($('reviewButtonExpand_' + id))) $('reviewButtonExpand_' + iId).hide();
		if($defined($('reviewButtonReadOn_' + id))) $('reviewButtonReadOn_' + id).hide();
		if($defined($('reviewButtonRemove_' + id))) $('reviewButtonRemove_' + id).hide();
		if($defined($('reviewButtonEdit_' + id))) $('reviewButtonEdit_' + id).hide();

	}
};

multiChannel.review.expandReview = function(id){

	if($defined(id)){
		var reviewId = 'review_' + id;
		var reviewTextId = 'reviewText_' + id;
		var reviewCompleteTextId = 'reviewTextComplete_' + id;
		$(reviewTextId).hide();
		$(reviewCompleteTextId).show();
		$(reviewId).show();

		if($defined($('reviewButtonBack_' + id))) $('reviewButtonBack_' + id).show();
		if($defined($('reviewButtonRemove_' + id))) $('reviewButtonRemove_' + id).show();
		if($defined($('reviewButtonEdit_' + id))) $('reviewButtonEdit_' + id).show();
		if($defined($('reviewButtonReadOn_' + id))) $('reviewButtonReadOn_' + id).hide();
		if($defined($('reviewButtonExpand_' + id))) $('reviewButtonExpand_' + id).hide();

		$$('#reviewsContentContainer .reviewBox').each(function(item){
			var itemId = item.get('id').split('_')[1];
			if(itemId != id){
				multiChannel.review.closeReview(itemId);
			}
		});
	}
};

multiChannel.review.backToReviewList = function(id, isMyAccount){
	if($defined(id)){
		var reviewId = 'review_' + id;
		var reviewTextId = 'reviewText_' + id;
		var reviewCompleteTextId = 'reviewTextComplete_' + id;

		$(reviewCompleteTextId).hide();
		$(reviewTextId).show();

		if($defined($('reviewsContentContainer'))) {
			if(!$defined(isMyAccount) || !isMyAccount){
				$('reviewsContentContainer').setStyle('height', 223);
				$('reviewsContentContainer').setStyle('overflow-y','scroll');
			}
		}

		if($defined($('catalogEntryReviewsSpacer'))){
			$('catalogEntryReviewsSpacer').show();
		}

		if($(reviewId).hasClass('reviewBoxExpanded')) $(reviewId).removeClass('reviewBoxExpanded');
		$(reviewId).addClass('reviewBackground');

		if($defined($('reviewButtonBack_' + id))) $('reviewButtonBack_' + id).hide();
		if($defined($('reviewButtonReadOn_' + id))) $('reviewButtonReadOn_' + id).show();
		if($defined($('reviewButtonRemove_' + id))) $('reviewButtonRemove_' + id).show();
		if($defined($('reviewButtonEdit_' + id))) $('reviewButtonEdit_' + id).show();
		if($defined($('reviewButtonExpand_' + id))) $('reviewButtonExpand_' + id).show();

		$$('#reviewsContentContainer .reviewBox').each(function(item){
			item.show();
		});

	}
};

multiChannel.locateAndNavigateToReviewTab = function(catalogEntryID, catalogEntryUrl) {
	multiChannel.closeLayer();
	if (catalogEntryID == multiChannel.getParameter('catEntryId')) {
		multiChannel.review.jumpToReviewTab();
	} else {
		window.location.href= catalogEntryUrl + '#reviewTab';
	}
}

multiChannel.review.jumpToReviewTab = function(){
	if($defined(multiChannel.getParameter('catEntryId'))){
		multiChannel.review.loadCatalogEntryReviews(multiChannel.getParameter('catEntryId'));
	}
	multiChannel.showProductDetailTabAndLocate("ref_catalogEntryReviews");
};

multiChannel.review.loadCatalogEntryReviews = function(catEntryId) {
	var reviewsTabContent = $('catalogEntryReviewsContent');

	if ($defined(reviewsTabContent) && !multiChannel.review.catalogEntryReviewsAlreadyLoaded) {
		multiChannel.review.catalogEntryReviewsAlreadyLoaded = true;

		if (!$defined(multiChannel.loadCatalogEntryReviewsUri)) {
			multiChannel.loadCatalogEntryReviewsUri = new URI(multiChannel.context.reviewlist);
		}
		var uri = multiChannel.loadCatalogEntryReviewsUri;

		var parameters = {
			'catEntryId': catEntryId
		};
		multiChannel.setParameters(parameters, uri);
		var request = new Request.HTML({
			url: uri.toString(),
			method: 'get',
			update: reviewsTabContent
		});
		request.send();
	}
};

multiChannel.review.closeReview = function(id){
	if($defined(id)){
		var reviewId = 'review_' + id;
		var reviewTextId = 'reviewText_' + id;
		var reviewCompleteTextId = 'reviewTextComplete_' + id;

		$(reviewCompleteTextId).hide();
		$(reviewTextId).show();

		$(reviewId).removeClass('reviewBoxExpanded').addClass('reviewBackground');

		if($defined($('reviewButtonBack_' + id))) $('reviewButtonBack_' + id).hide();
		if($defined($('reviewButtonRemove_' + id))) $('reviewButtonRemove_' + id).show();
		if($defined($('reviewButtonEdit_' + id))) $('reviewButtonEdit_' + id).show();
		if($defined($('reviewButtonExpand_' + id))) $('reviewButtonExpand_' + id).show();
	}
};

multiChannel.review.loadUserReviews = function(pageSize, pageNumber) {

	if ($defined($('userReviewsContent')) ) {

		if (!$defined(multiChannel.loadCatalogEntryReviewsSSLUri)) {
			multiChannel.loadCatalogEntryReviewsSSLUri = new URI(multiChannel.context.reviewlistssl);
		}
		var uri = multiChannel.loadCatalogEntryReviewsSSLUri;

		var parameters = {
			mode: 'myreviews'
		};

		if ($defined(pageSize)) {
			parameters.reviewsPerPage = pageSize;
		}
		if ($defined(pageNumber)) {
			parameters.page = pageNumber;
		}
		multiChannel.setParameters(parameters, uri);

		uri.set('query', uri.get('query').cleanQueryString());
		var request = new Request.HTML({
			url: uri.toString(),
			method: 'get',
			update: $('userReviewsContent'),
			onComplete: function() {
				$('resultsPerPage').getSelected().each(function(element){element.erase('selected');});
				if ($defined(pageSize)) {
					$$('#resultsPerPage option[value=' + pageSize + ']')
						.each(function(element) {element.set('selected', 'selected');})
				}
			}
		});
		request.send();
	}
};

multiChannel.review.deleteReview = function(reviewId) {

	if(!$defined(reviewId)) return false;

	if (Cookie.read('MC_USERTYPE') == 'R') {

		if (!$defined(multiChannel.removeProductReviewUri)) {
			multiChannel.removeProductReviewUri = new URI(multiChannel.context.removeproductreview);
		}
		var uri = multiChannel.removeProductReviewUri;

		var parameters = {
			'reviewId': reviewId
		};
		multiChannel.setParameters(parameters, uri);

		var onsuccess = function(response){
			var status = response.status;
			if(status == 'ok' && $defined($('review_' + reviewId))){
				$('review_' + reviewId).dispose();
			}
			multiChannel.review.loadUserReviews();
		};

		uri.set('query', uri.get('query').cleanQueryString());
		var request = new Request.JSON({
			url: uri.toString(),
			method: 'post',
			onSuccess: onsuccess
		});
		request.send();
	} else {
		var uri = new URI();
		multiChannel.openLayer('loginforreview');
		multiChannel.review.reviewLogin = function() {
			window.location.href = multiChannel.context.getLogonURL(uri.toString(), '', true);
		};
	}
};

multiChannel.review.setReviewText = function(){
	if($defined($('reviewText')) && $defined($('reviewTextHidden'))){
		$('reviewText').value = $('reviewTextHidden').get('text').replace(/<LINEBREAK>/g, '\n');
	}
};

// START CHECKOUT
multiChannel.checkout = new Object();

multiChannel.checkout.fitSite = function(){
	if($defined($('checkout-left-holder')) && $defined($('checkout-right-holder'))){
		$('checkout-left-holder').set('style','');
		var offsetHeightLeft = $('checkout-left-holder').offsetHeight;
		var offsetHeightRight = $('checkout-right-holder').offsetHeight;
		if (offsetHeightLeft < offsetHeightRight) {
			var divHeight = offsetHeightRight-2 + 'px';
			$('checkout-left-holder').style.height = divHeight;
		}
	}
};

multiChannel.checkout.basket = new Object();

multiChannel.checkout.basket.deleteItemFromBasket = function(orderItemId, redirectUrl){
	if (!multiChannel.doubleclickhandler.firstclick() || isNaN(orderItemId)) {
		return false;
	}

	var deleteURI = new URI(multiChannel.context.ordercatalogentrydelete);

	var responseURI = new URI(redirectUrl);
	var parameters = {
		URL: responseURI.toString(),
		orderItemId: orderItemId
	}
	multiChannel.setParameters(parameters, deleteURI);
	deleteURI.go();
};

multiChannel.checkout.basket.deleteServiceFromBasket = function(orderItemId, redirectUrl){
	if (!multiChannel.doubleclickhandler.firstclick() || isNaN(orderItemId)) {
		return false;
	}

	var deleteServiceURI = new URI(multiChannel.context.ordercatalogentryservicedelete);
	var isSecure = multiChannel.isSecure();
	deleteServiceURI.set('scheme', isSecure ? 'https' : 'http');
	deleteServiceURI.set('port', isSecure ? 443 : 80);

	var responseURI = new URI(redirectUrl);
	var parameters = {
		URL: responseURI.toString(),
		orderItemId: orderItemId
	}
	multiChannel.setParameters(parameters, deleteServiceURI);
	deleteServiceURI.go();
};

multiChannel.checkout.basket.updateItemBasket = function(orderItemId, newQuantity, redirectUrl){
	if (!isNaN(orderItemId) && newQuantity && newQuantity > 0) {

		var updateURI = new URI(multiChannel.context.ordercatalogentryupdate);
		var isSecure = multiChannel.isSecure();
		updateURI.set('scheme', isSecure ? 'https' : 'http');
		updateURI.set('port', isSecure ? 443 : 80);
		var responseURI = new URI(redirectUrl);

		var parameters = {
			orderItemId: orderItemId,
			quantity : newQuantity,
			URL: responseURI.toString()
		}
		multiChannel.setParameters(parameters, updateURI);
		updateURI.go();
	}
};

multiChannel.checkout.basket.updateServiceBasket = function(orderItemId, catEntryServiceId, checked, redirectUrl){
	if (!isNaN(orderItemId)) {
		var updateURI = new URI(multiChannel.context.ordercatalogentryserviceupdate);
		var isSecure = multiChannel.isSecure();
		updateURI.set('scheme', isSecure ? 'https' : 'http');
		updateURI.set('port', isSecure ? 443 : 80);

		var responseURI = new URI(redirectUrl);

		if (!checked) {
			catEntryServiceId = null;
		}

		var parameters = {
			orderItemId: orderItemId,
			catEntryServiceId: catEntryServiceId,
			URL: responseURI.toString()
		}
		multiChannel.setParameters(parameters, updateURI);

		$$('.services .services_' + orderItemId).each(function(item) {
			var catentryServiceItemId = item.get('value');
			if (catentryServiceItemId != catEntryServiceId) {
				item.checked = false;
			}
		});

		updateURI.go();
	}
};

multiChannel.checkout.shipment = new Object();

multiChannel.checkout.shipment.switchShipTo = function(newShipTo) {
	multiChannel.checkout.shipment.hideAllShipTo();
	// Hide the error box
	if($('errorBoxShipping')) {
		$('errorBoxShipping').set('style', 'display:none;');
	}
	$(newShipTo).set('style', 'display:block;');
};
multiChannel.checkout.shipment.switchGroupingText = function(newShipTo) {
	if (newShipTo.contains('store')) {
		$$('.deliveryOption').each(function(element){element.hide();});
		$$('.pickupOption').each(function(element){element.setStyle('display', 'inline');});
	} else {
		$$('.pickupOption').each(function(element){element.hide();});
		$$('.deliveryOption').each(function(element){element.setStyle('display', 'inline');});
	}
};

multiChannel.checkout.shipment.hideAllShipTo = function() {
	$('shipToBillingContent').set('style', 'display:none;');
	$('shipToShippingContent').set('style', 'display:none;');
	if($defined($('shipToPackstationContent'))) $('shipToPackstationContent').set('style', 'display:none;');
	$('shipToStoreContent').set('style', 'display:none;');

	if ($('ship_to_billing').checked) {
		$('shipToBillingContent').set('style', 'display:block;');
		// IE6 Bug: Hide select box of ship to store
		$('outlet').setStyle('visibility', 'hidden');
	} else if ($('ship_to_shipping').checked) {
		$('shipToShippingContent').set('style', 'display:block;');
		// IE6 Bug: Hide select box of ship to store
		$('outlet').setStyle('visibility', 'hidden');
	} else if ($defined($('ship_to_packstation')) && $('ship_to_packstation').checked) {
		$('shipToPackstationContent').set('style', 'display:block;');
		// IE6 Bug: Hide select box of ship to store
		$('outlet').setStyle('visibility', 'hidden');
	} else if ($('ship_to_store').checked) {
		$('shipToStoreContent').set('style', 'display:block;');
		$('outlet').setStyle('visibility', 'visible');
		$('delivery_mode_fewest').checked = true;
		$('fewestgrouping').show();
		$('soonestgrouping').hide();
		$('shippingChargePreview').hide();
	}
	if (!$('ship_to_store').checked) {
		$('shippingChargePreview').show();
	}
};

//Displays a selected shipping address to our input fields
multiChannel.checkout.shipment.transferShippingAddress = function(checkbox) {
	var index = checkbox.value;
	var personTitle = $('personTitle_' + index);
	var businessTitle = $('businessTitle_' + index);
	var firstName = $('firstName_' + index);
	var lastName = $('lastName_' + index);
	var address1 = $('address1_' + index);
	var address2 = $('address2_' + index);
	var address3 = $('address3_' + index);
	var zipCode = $('zipCode_' + index);
	var city = $('city_' + index);

	// Radios are special cases which will be handled manually
	if($defined(personTitle)) {
		var mrCheckbox = $('shippingaddress_persontitle_mr');
		var mrsCheckbox = $('shippingaddress_persontitle_mrs');
		if(personTitle.get('text').trim() == 'Mr') {
			mrsCheckbox.set('checked', 'false');
			mrCheckbox.set('checked', 'true');
		} else {
			mrCheckbox.set('checked', 'false');
			mrsCheckbox.set('checked', 'true');
		}
	}

	multiChannel.checkout.shipment.updateInputField(businessTitle, $('shippingaddress_businesstitle'));
	multiChannel.checkout.shipment.updateInputField(firstName, $('shippingaddress_firstname'));
	multiChannel.checkout.shipment.updateInputField(lastName, $('shippingaddress_lastname'));
	multiChannel.checkout.shipment.updateInputField(address1, $('shippingaddress_address1'));
	multiChannel.checkout.shipment.updateInputField(address2, $('shippingaddress_address2'));
	multiChannel.checkout.shipment.updateInputField(address3, $('shippingaddress_address3'));
	multiChannel.checkout.shipment.updateInputField(zipCode, $('shippingaddress_zipcode'));
	multiChannel.checkout.shipment.updateInputField(city, $('shippingaddress_city'));

	$$('#shipToShippingContent input').each(function(inp){
		inp.removeClass('error');
	});
};

//Displays a selected packstation address to our input fields
multiChannel.checkout.shipment.transferPackstationAddress = function(checkbox) {
	var index = checkbox.value;
	var firstName = $('firstName_' + index);
	var lastName = $('lastName_' + index);
	var no = $('no_' + index);
	var postno = $('postno_' + index);
	var zipCode = $('zipCode_' + index);
	var city = $('city_' + index);

	multiChannel.checkout.shipment.updateInputField(firstName, $('packstationaddress_firstname'));
	multiChannel.checkout.shipment.updateInputField(lastName, $('packstationaddress_lastname'));
	multiChannel.checkout.shipment.updateInputField(no, $('packstationaddress_no'));
	multiChannel.checkout.shipment.updateInputField(postno, $('packstationaddress_postno'));
	multiChannel.checkout.shipment.updateInputField(zipCode, $('packstationaddress_zipcode'));
	multiChannel.checkout.shipment.updateInputField(city, $('packstationaddress_city'));

	$$('#shipToPackstationContent input').each(function(inp){
		inp.removeClass('error');
	});
};

multiChannel.checkout.shipment.updateInputField = function (sourceElId, targetElId) {
	if($defined(sourceElId)) {
		var inputText = sourceElId.get('text').trim();
		targetElId.set('value', inputText);
	}
};

multiChannel.checkout.shipment.group1 = ['billing', 'shipping', 'packstation'];
multiChannel.checkout.shipment.group2 = ['store', 'store_sameday'];
multiChannel.checkout.shipment.currentShipTo = null;
multiChannel.checkout.shipment.currentGrouping = 'fewest';

multiChannel.checkout.shipment.shippingChargesChanged = function(currentShipTo, newShipTo) {

	var group1 = multiChannel.checkout.shipment.group1;
	var group2 = multiChannel.checkout.shipment.group2;
	return group1.contains(currentShipTo) && group2.contains(newShipTo)
			|| group1.contains(newShipTo) & group2.contains(currentShipTo);
}

multiChannel.checkout.shipment.checkShippingCharges = function(newShipto, payMode, fewestgrouping) {

	if (multiChannel.checkout.shipment.shippingChargesChanged(multiChannel.checkout.shipment.currentShipTo, newShipto)) {
		multiChannel.checkout.shipment.updateShippingCharges(newShipto, payMode, fewestgrouping);
	}
}

multiChannel.checkout.shipment.updateShippingCharges = function(newShipto, payMode, fewestgrouping) {
	if (!newShipto.contains('store')) {
		multiChannel.hideBlock('#checkoutShipment .shipToMarket');
		multiChannel.showBlock('#checkoutShipment .shipToCustomer');
	} else {
		multiChannel.hideBlock('#checkoutShipment .shipToCustomer');
		multiChannel.showBlock('#checkoutShipment .shipToMarket');
	}

	if(fewestgrouping) {
		multiChannel.hideBlock('#checkoutShipment .soonestDelivery');
		multiChannel.showBlock('#checkoutShipment .fewestDelivery');
	} else {
		multiChannel.hideBlock('#checkoutShipment .fewestDelivery');
		multiChannel.showBlock('#checkoutShipment .soonestDelivery');
	}

	var shippingTotalAmount = null;
	if(newShipto.contains('store')) {
		if(fewestgrouping) {
			shippingTotalAmount = multiChannel.checkout.shipment.totalOrderFewestShippingChargeToMarket;
		} else {
			shippingTotalAmount = multiChannel.checkout.shipment.totalOrderSoonestShippingChargeToMarket;
		}
	}

	if(newShipto.contains('store') && payMode == 'cashondelivery') {
		multiChannel.openLayer('cashondeliverypickup');
	} else if(newShipto.contains('store') && shippingTotalAmount == 0) {
		// Display special layer content if we haven't any shipping charges
		multiChannel.openLayer('shippingchargesrecalculated', {layerId: 'shippingchargesrecalculated'}, function(){multiChannel.checkout.shipment.displayShippingChargesChangedLayerText('freestoredelievery');});
	} else {
		// callback implementieren!
		multiChannel.openLayer('shippingchargesrecalculated', {layerId: 'shippingchargesrecalculated'}, function(){multiChannel.checkout.shipment.displayShippingChargesChangedLayerText('chargeschanged');});
	}
};

multiChannel.checkout.shipment.displayShippingChargesChangedLayerText = function(layertext) {
	if (layertext == 'freestoredelievery') {
		multiChannel.showBlock('#layer .freestoredelievery');
	} else {
		multiChannel.hideBlock('#layer .freestoredelievery');
	}

	if (layertext == 'chargeschanged') {
		multiChannel.showBlock('#layer .chargeschanged');
	} else {
		multiChannel.hideBlock('#layer .chargeschanged');
	}
};

multiChannel.checkout.shipment.outletAddress = new Object();
multiChannel.checkout.shipment.outletAddress.outlet = '';
multiChannel.checkout.shipment.outletAddress.street = '';
multiChannel.checkout.shipment.outletAddress.zipCity = '';

multiChannel.checkout.shipment.addAddress = function(storeId, outlet, street1, street2, zipCity) {
	multiChannel.checkout.shipment.outletAddress[storeId] = new Object();
	multiChannel.checkout.shipment.outletAddress[storeId].outlet = outlet;
	multiChannel.checkout.shipment.outletAddress[storeId].street1 = street1;
	multiChannel.checkout.shipment.outletAddress[storeId].street2 = street2;
	multiChannel.checkout.shipment.outletAddress[storeId].zipCity = zipCity;
};


multiChannel.checkout.shipment.showAddress = function(storeId) {
	if(storeId == -1) {
		$('pickUpBox').setStyle('display', 'none');
		$('pickUpStoreSelectTitle').innerHTML = multiChannel.checkout.shipment.pickUpStoreSelectTitleSelect;
	} else {
		// shippingAddress object will be created dynamically
		if($defined(multiChannel.checkout.shipment.outletAddress[storeId])) {
			if($defined(multiChannel.checkout.shipment.outletAddress[storeId].outlet))
				$('pickUpAddressOutlet').innerHTML = multiChannel.checkout.shipment.outletAddress[storeId].outlet;
			if($defined(multiChannel.checkout.shipment.outletAddress[storeId].street1)) {
				var street = multiChannel.checkout.shipment.outletAddress[storeId].street1;
				if ($defined(multiChannel.checkout.shipment.outletAddress[storeId].street2)) {
					street = street + ' ' +  multiChannel.checkout.shipment.outletAddress[storeId].street2;
				}
				$('pickUpAddressStreet').innerHTML = street;
			}
			if($defined(multiChannel.checkout.shipment.outletAddress[storeId].zipCity))
				$('pickUpAddressZipCity').innerHTML = multiChannel.checkout.shipment.outletAddress[storeId].zipCity;
			$('pickUpBox').setStyle('display', 'block');
		}
		$('pickUpStoreSelectTitle').innerHTML = multiChannel.checkout.shipment.pickUpStoreSelectTitleChange;
	}
};

multiChannel.checkout.paymentMethod = new Object();

multiChannel.checkout.paymentMethod.hideAllPaymentMethodHTML = function() {
	$$('.paymentcontent').each(function(el){
			el.hide();
	});
};

// END CHECKOUT

//START AFTER SEARCH FACET NAVIGATION
multiChannel.afterSearchFacetNavigation = new Object();

multiChannel.afterSearchFacetNavigation.showAllFilters = function(id) {
	if ($defined($('topFacetElement' + id)) && $defined($('fullFacetElement' + id))) {
		$('topFacetElement' + id).hide();
		$('fullFacetElement' + id).show();
	}
};

multiChannel.afterSearchFacetNavigation.showOnlyTopFilters = function(id) {
		$('topFacetElement' + id).show();
		$('fullFacetElement' + id).hide();
};


multiChannel.afterSearchFacetNavigation.init = function() {

	if ($defined($('afterSearchFacetNavigation'))) {
		$('afterSearchFacetNavigation').show();
	}
}

//START FACET NAVIGATION

multiChannel.facetNavigation = new Object();

multiChannel.facetNavigation.init = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		$('facetNavigation' + associationType).show();

		if (Cookie.read('MC_FACET_NAVIGATION') == '1') {
			multiChannel.facetNavigation.expand(associationType);
		};
	}
}

multiChannel.facetNavigation.expand = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		$('facetNavigation' + associationType).getChildren('div.collapsed')[0].hide();
		$('facetNavigation' + associationType).getChildren('div.expanded')[0].show();
		Cookie.write('MC_FACET_NAVIGATION', '1', { 'path': '/' });
	}
}

multiChannel.facetNavigation.collapse = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		$('facetNavigation' + associationType).getChildren('div.collapsed')[0].show();
		$('facetNavigation' + associationType).getChildren('div.expanded')[0].hide();
		Cookie.write('MC_FACET_NAVIGATION', '0', { 'path': '/' });
	}
}

multiChannel.facetNavigation.setParameters = function(associationType, parameters, changeHash) {
	if ($defined($('facetNavigation' + associationType))) {
		var form = $('facetNavigationForm' + associationType);
		$each(parameters, function(value, key) {
			if (form[key]) {
				form[key].value = value;
			} else {
				var newInputElement = new Element('input');
				newInputElement.set('type', 'hidden');
				newInputElement.set('name', key);
				newInputElement.set('value', value);
				newInputElement.inject($('facetNavigationForm' + associationType));
			}
		});
	}
	multiChannel.facetNavigation.submit(associationType, changeHash);
};

multiChannel.facetNavigation.showAllBrands = function(associationType) {

	if ($defined($('brandFacet' + associationType)) && $defined($('manufacturerFacet' + associationType))) {
		$('brandFacet' + associationType).hide();
		$('manufacturerFacet' + associationType).show();
	}
};

multiChannel.facetNavigation.showOnlyTopBrands = function(associationType) {
		$('brandFacet' + associationType).show();
		$('manufacturerFacet' + associationType).hide();
};

multiChannel.facetNavigation.updateCheckBox = function(id, checked) {
	if (id.search(/^manufacturer[^_]*_/) != -1) {
		id = id.replace(/^manufacturer([^_]*_)/, 'brand$1');
	} else if (id.search(/^brand[^_]*_/) != -1) {
		id = id.replace(/^brand([^_]*_)/, 'manufacturer$1');
	}

	if ($defined($(id))) {
		$(id).checked = checked;
	}
};

multiChannel.facetNavigation.collect = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		multiChannel.facetNavigation.resetForm(associationType);

		if ($defined($('brandFacet' + associationType)) && $('brandFacet' + associationType).getStyle('display')=='block') {
			$('facetNavigation' + associationType).getElements('input[name=brandfilter]').each(function(inputElement) {
				if (inputElement.checked) {
					var newInputElement = new Element('input');
					newInputElement.set('type', 'hidden');
					newInputElement.set('name', 'filter');
					newInputElement.set('value', inputElement.get('value'));
					newInputElement.inject($('facetNavigationForm' + associationType));
				}
			});
		} else if($defined($('manufacturerFacet' + associationType)) && $('manufacturerFacet' + associationType).getStyle('display')=='block') {
			$('facetNavigation' + associationType).getElements('input[name=manufacturerfilter]').each(function(inputElement) {
				if (inputElement.checked) {
					var newInputElement = new Element('input');
					newInputElement.set('type', 'hidden');
					newInputElement.set('name', 'filter');
					newInputElement.set('value', inputElement.get('value'));
					newInputElement.inject($('facetNavigationForm' + associationType));
				}
			});
		}

		$('facetNavigation' + associationType).getElements('input[name=filter]').each(function(inputElement) {
			if (inputElement.checked) {
				var newInputElement = new Element('input');
				newInputElement.set('type', 'hidden');
				newInputElement.set('name', 'filter');
				newInputElement.set('value', inputElement.get('value'));
				newInputElement.inject($('facetNavigationForm' + associationType));
			}
		});

		$('facetNavigation' + associationType).getElements('select[name=filter]').each(function(selectElement) {

			if (selectElement.selectedIndex > 0) {
				var newInputElement = new Element('input', { 'type': 'hidden', 'name': 'filter', 'value': selectElement.value });
				newInputElement.inject($('facetNavigationForm' + associationType));
			}
		});

		if ($defined($('priceMin' + associationType)) && $('priceMin' + associationType).value != '') {
			$('priceMin' + associationType).clone().inject($('facetNavigationForm' + associationType));
		}

		if ($defined($('priceMax' + associationType)) && $('priceMax' + associationType).value != '') {
			$('priceMax' + associationType).clone().inject($('facetNavigationForm' + associationType));
		}
		$('facetNavigationForm' + associationType).page.value = '';
	}
};

multiChannel.facetNavigation.reset = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		multiChannel.facetNavigation.resetForm(associationType);

		$('facetNavigation' + associationType).getElements('input[name=filter]').each(function(inputElement) {
			inputElement.checked = false;
		});

		$('facetNavigation' + associationType).getElements('input[name=none]').each(function(inputElement) {
			inputElement.checked = false;
		});

		$('facetNavigation' + associationType).getElements('select[name=filter]').each(function(selectElement) {
			selectElement.selectedIndex = 0;
		});

		if ($defined($('priceMin' + associationType)) && $('priceMin' + associationType).value.length > 0) {
			$('priceMin' + associationType).value = '';
		}

		if ($defined($('priceMax' + associationType)) && $('priceMax' + associationType).value.length > 0) {
			$('priceMax' + associationType).value = '';
		}
	}
};

multiChannel.facetNavigation.resetForm = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {

		$('facetNavigationForm' + associationType).getElements('input').each(function(inputElement) {
			if(inputElement.get('name') == null) inputElement.dispose();
		});

		$('facetNavigationForm' + associationType).getElements('input[name=filter]').each(function(inputElement) {
			inputElement.dispose();
		});

		$('facetNavigationForm' + associationType).getElements('input[name=priceMin]').each(function(inputElement) {
			inputElement.dispose();
		});

		$('facetNavigationForm' + associationType).getElements('input[name=priceMax]').each(function(inputElement) {
			inputElement.dispose();
		});
	}
};

multiChannel.facetNavigation.submit = function(associationType, changeHash) {
	if ($defined($('infieldNavi'))) {
		$('infieldNavi').style.display='none';
	}

	if ($defined($('facetNavigation' + associationType))) {
		var formRequest = new Form.Request($('facetNavigationForm' + associationType), $('facetFilterResult' + associationType), { 'resetForm': false });
		formRequest.addEvent('success', function() { window.scrollTo(0, 0);});
		formRequest.send();
	}
	if (associationType.length == 0) {
		if (changeHash == undefined) {
			changeHash = true;
		}
		if (changeHash) {
			var allParameters = multiChannel.facetNavigation.extractParameters();
			var hash = multiChannel.facetNavigation.encodeHash(allParameters);
			if (hash) {
				multiChannel.facetNavigation.changeHash(hash);
			}
		}
	}
};

multiChannel.facetNavigation.wrapCatalogEntryList = function(associationType) {

	if ($defined($('facetNavigation' + associationType))) {
		var element = $('facetNavigation' + associationType).getNext('.facetNavigationWrap');

		if ($defined(element)) {
			$('facetFilterResult' + associationType).wraps(element);
		}
	}
};

multiChannel.facetNavigation.checkForShowAllFilters = function(associationType, selectElement, selectAllElementId) {

	if ($defined($('facetNavigation' + associationType))) {

		if (selectElement.value == 'showAll') {
			selectElement.style.display = 'none';
			selectElement.selectedIndex = 0;
			var selectAllElement = $(selectAllElementId);
			selectAllElement.style.display = 'inline';
			selectAllElement.selectedIndex = 0;
			selectAllElement.focus();
		}

	}
};

multiChannel.facetNavigation.encodeHash = function(object) {
	if (object) {
		var uri = new URI('http://example.com');
		uri.setData(object);
		return uri.get('query');
	} else {
		return null;
	}
};

multiChannel.facetNavigation.decodeHash = function(hash) {
	if (hash) {
		// we encode our parameters like we encode url parameters
		var uri = new URI('http://example.com');
		uri.set('query', hash);
		try {
			return uri.getData();
		} catch (e) {
			return null;
		}
	} else {
		return null;
	}
};

multiChannel.facetNavigation.suppressHashEvaluation = false;

multiChannel.facetNavigation.changeHash = function(hash) {
	multiChannel.facetNavigation.suppressHashEvaluation = true;
	location.hash = hash;
};

multiChannel.facetNavigation.extractParameters = function() {
	var form = $('facetNavigationForm');
	if (form) {
		var params = new Object();
		var inputElements = form.getElements('input');
		for (var i = 0; i < inputElements.length; i++) {
			var element = inputElements[i];
			var key = element.name;
			if (key != 'seo' && key != 'ajax' && key != undefined) {
				var value = element.value;
				if (key == 'filter') {
					var currentFilter = params[key];
					if (currentFilter) {
						value = currentFilter + ',,' + value;
					}
				}
				params[key] = value;
			}
		}
		return params;
	}
};

multiChannel.facetNavigation.addInputElement = function(name, value, target) {
	var newInputElement = new Element('input');
	newInputElement.set('type', 'hidden');
	newInputElement.set('name', name);
	newInputElement.set('value', value);
	newInputElement.inject(target);
	return newInputElement;
};

multiChannel.facetNavigation.setParametersFromHash = function(params) {
	var form = $('facetNavigationForm');
	if ($defined(form) && params.categoryId != undefined && params.categoryId.length > 0) {
		form.getElements('input').each(function(element) { element.dispose(); });
		params.seo = 'false';
		params.ajax = 'true';
		for (var name in params) {
			var value = params[name];
			if (name == 'filter') {
				var filters = value.split(',,');
				for (var i = 0; i < filters.length; i++) {
					multiChannel.facetNavigation.addInputElement(name, filters[i], form);
				}
			} else {
				multiChannel.facetNavigation.addInputElement(name, value, form);
			}
		}
		multiChannel.facetNavigation.submit('', false);
	}
};

multiChannel.facetNavigation.handleHashChange = function(newHash, initial) {
	if (!multiChannel.facetNavigation.suppressHashEvaluation) {
		if (newHash != undefined) {
			if (newHash.length > 0) {
				var decoded = multiChannel.facetNavigation.decodeHash(newHash);
				if (decoded) {
					if(decoded.categoryId != undefined && decoded.categoryId.length > 0){
						multiChannel.facetNavigation.reset('');
						multiChannel.facetNavigation.collect('');
						multiChannel.facetNavigation.setParametersFromHash(decoded);
					}
				}
			} else if (!initial) {
				multiChannel.facetNavigation.reset('');
				multiChannel.facetNavigation.collect('');
				multiChannel.facetNavigation.setParametersFromHash(multiChannel.facetNavigation.initialParameters);
			}
		}
	} else {
		multiChannel.facetNavigation.suppressHashEvaluation = false;
	}
};

multiChannel.facetNavigation.initProductHashHistory = function(iframeId) {
	window.addEvent('domready', function() {
		multiChannel.facetNavigation.initialParameters =
			multiChannel.facetNavigation.extractParameters();
		if (multiChannel.facetNavigation.initialParameters) {
			HashHandler.init(multiChannel.facetNavigation.handleHashChange, $(iframeId));
		}
	});
};

multiChannel.facetNavigation.searchOnKeyPressReturn = function(e, associationType) {
	$('priceMin'+associationType).value = parseInt($('slider_minmax_min'+associationType).value)!=0 ? $('slider_minmax_min'+associationType).value : '';
	$('priceMax'+associationType).value = parseInt($('slider_minmax_max'+associationType).value)!='' ? $('slider_minmax_max'+associationType).value : '';
	var charCode;
	if(e && e.which){
		charCode = e.which;
	}else if(window.event){
		e = window.event;
		charCode = e.keyCode;
	}
	if(charCode == 13) {
		multiChannel.etracker.clickEvent('Facet Filter > Submit');
		multiChannel.facetNavigation.priceSlider.update(associationType);
		multiChannel.facetNavigation.collect(associationType);
		multiChannel.facetNavigation.submit(associationType);
		return false;
	}
};

multiChannel.Slider = new Class({

	stepval:10,
	steps:10,
	steppos_a:0,
	steppos_b:0,
	lowHighSteps:true,
	stepwidth:0,
	stepwidthfirst:0,
	knob_divId_a:null,
	knob_divId_b:null,
	minpos:0,
	maxpos:0,
	sliderareawidth:0,
	x_pos_a:0,
	x_pos_b:0,
	knob_spacer:0,
	drag_a:null,
	drag_b:null,
	currentPriceMin:0,
	currentPriceMax:0,
	maxValue:999999,

	initialize: function(associationType, steps, stepvalue, currentPriceMin, currentPriceMax) {
		this.steps = steps;
		this.stepval = stepvalue;
		this.currentPriceMin = currentPriceMin;
		this.currentPriceMax = currentPriceMax;
		this.knob_divId_a = 'slider_minmax_minKnobA' + associationType;
		this.knob_divId_b = 'slider_minmax_maxKnobA' + associationType;
		var knob_width = $(this.knob_divId_a).offsetWidth;
		this.knob_spacer = knob_width + 2;
		this.minpos = 0;
		this.sliderareawidth = $('slider_bkg_img' + associationType).offsetWidth;
		this.maxpos = this.sliderareawidth - knob_width;

		this.x_pos_a = this.minpos;
		this.x_pos_b = this.maxpos;
		if (this.lowHighSteps) {
			this.steps = this.steps + 2;
		}
		this.stepwidth = Math.floor((this.maxpos - this.minpos) / this.steps);
		this.stepwidthfirst = this.stepwidth + Math.floor((this.maxpos - this.minpos - this.stepwidth * this.steps) / 2);
		this.steppos_b = this.steps - 1;
		xposMin=0;
		xposMax=0;
		if(this.currentPriceMin != null && this.currentPriceMin > 0) {
			xposMin = this.toposition(currentPriceMin);
		}

		if(this.currentPriceMax != null && this.currentPriceMax > 0) {
			xposMax = this.toposition(currentPriceMax);

			if(xposMax<this.maxpos) {
				if(xposMax<(xposMin+this.knob_spacer+4)) {
					xposMax=(xposMin+this.knob_spacer+4);
					if(xposMax>this.maxpos) {
						xposMin=xposMax-(this.knob_spacer+4);
						xposMax=0;
					}
				}
			} else {
				if(xposMin>(xposMax-(this.knob_spacer+4))) {
					xposMin=xposMax-(this.knob_spacer+4);
				}
				xposMax=0;
			}
		}

		if(xposMin>0) {
			this.x_pos_a=xposMin;
			this.adjustSliderLayout(associationType, $(this.knob_divId_a).id, xposMin);
		}

		if(xposMax>0) {
			this.x_pos_b=xposMax
			this.adjustSliderLayout(associationType, $(this.knob_divId_b).id, xposMax);
		}

		this.drag_a = new Drag($(this.knob_divId_a), {
			style: false,
			onDrag: function(ele,e){
			this.drag(associationType, ele, e);
			}.bind(this)
		});
		this.drag_b = new Drag($(this.knob_divId_b), {
			style: false,
			onDrag: function(ele,e){
			this.drag(associationType, ele, e);
			}.bind(this)
		});
	},

	drag: function(associationType, obj, e) {
		var xpos;
		var minpos_offset_left=$('slider_minmax_gutter_m' + associationType).getPosition().x+Math.floor($(this.knob_divId_a).offsetWidth/2);
		xpos = parseInt(e.page.x) - minpos_offset_left;
		if($(obj).id==this.knob_divId_a && xpos>=0 && xpos+this.knob_spacer<this.x_pos_b && this.tostep(xpos)<this.steppos_b){
			this.x_pos_a=xpos;
			this.steppos_a=this.tostep(xpos);
			this.adjustSliderLayout(associationType, $(obj).id, xpos);
			$('slider_minmax_min' + associationType).value=this.getPriceText(this.steppos_a, false);
			$('priceMin' + associationType).value=this.getPriceValue(this.steppos_a);
		}
		if($(obj).id==this.knob_divId_b && xpos>this.x_pos_a+this.knob_spacer && xpos<=this.maxpos && this.tostep(xpos)>this.steppos_a){
			this.x_pos_b=xpos;
			this.steppos_b=this.tostep(xpos);
			this.adjustSliderLayout(associationType,$(obj).id,xpos);
			$('slider_minmax_max' + associationType).value=this.getPriceText(this.steppos_b, true);
			$('priceMax' + associationType).value=this.getPriceValue(this.steppos_b);
		}
		return false;
	},

	adjustSliderLayout: function(associationType, elementId, xpos) {
		$('slider_bkg_img' + associationType).setStyle('clip','rect(0px '+  this.x_pos_b + 'px 10px '+ this.x_pos_a + 'px)');
		$(elementId).setStyle('position', 'absolute').setStyle('left', xpos);
		return false;
	},

	tostep: function(xpos) {
		if(xpos<this.stepwidthfirst){
			return 0;
		}
		var tmp=xpos-this.stepwidthfirst-1;
		var tmpstep= Math.floor(tmp/this.stepwidth)+1;
		if(tmpstep>this.steps-1){
			tmpstep=tmpstep-1;
		}
		return tmpstep;
	},

	toposition: function(currentValue) {
		var tmpStep = Math.ceil(currentValue/this.stepval);
		var tmpPosition = ((tmpStep-1)*this.stepwidth)+this.stepwidthfirst+1;
		var tmpReduce = ((((tmpStep*this.stepval)-currentValue)*100)/this.stepval)*(this.stepwidth/100);
		tmpPosition =  Math.ceil(tmpPosition - tmpReduce);

		if(currentValue>=this.maxValue) {
			return this.maxpos;
		}
		if(tmpPosition>this.maxpos){
			return this.maxpos-this.stepwidth;
		}
		if(tmpPosition<0){
			return 0;
		}
		return tmpPosition;
	},

	getPriceText: function(step_now, withGt) {
		var tmp=step_now*this.stepval;
		if(step_now>=this.steps-1 && this.lowHighSteps==true){
			if(withGt) {
				tmp='';
			} else {
				tmp=((step_now-1)*this.stepval);
			}
		}
		if(this.lowHighSteps==false){
			tmp=(step_now+1)*this.stepval;
		}

		return tmp;
	},

	getPriceValue: function(step_now) {
		var result = '';

		if (!this.lowHighSteps || (step_now > 0 && step_now < this.steps - 1)) {
			result = step_now * this.stepval;
		}
		return result;
	}
});

multiChannel.afterSearchFacetNavigation.priceSlider = new Object();

multiChannel.afterSearchFacetNavigation.priceSlider.init = function(steps, stepvalue, currentPriceMin, currentPriceMax) {
	multiChannel.afterSearchFacetNavigation.priceSlider.steps = steps;
	multiChannel.afterSearchFacetNavigation.priceSlider.stepvalue = stepvalue;

	if ($defined($('slide_container'))) {
		window.addEvent('domready', function() {
			multiChannel.afterSearchFacetNavigation.priceSlider.instance = new multiChannel.Slider('', steps, stepvalue, currentPriceMin, currentPriceMax);
		});
	}
};

multiChannel.afterSearchFacetNavigation.searchOnKeyPressReturn = function(e, params){
	$('priceMin').value = parseInt($('slider_minmax_min').value)!=0 ? $('slider_minmax_min').value : '';
	$('priceMax').value = parseInt($('slider_minmax_max').value)!='' ? parseInt($('slider_minmax_max').value) : '';
	var charCode;
	if(e && e.which){
		charCode = e.which;
	}else if(window.event){
		e = window.event;
		charCode = e.keyCode;
	}
	if(charCode == 13) {
		multiChannel.etracker.clickEventAfterSearchFacet('Price');
		multiChannel.search.setParameters(params);
	}
};

multiChannel.facetNavigation.priceSlider = new Object();

multiChannel.facetNavigation.priceSlider.init = function(associationType, steps, stepvalue) {
	multiChannel.facetNavigation.priceSlider.steps = steps;
	multiChannel.facetNavigation.priceSlider.stepvalue = stepvalue;

	if ($defined($('slide_container' + associationType))) {
		window.addEvent('domready', function() {
			multiChannel.facetNavigation.priceSlider.instance = new multiChannel.Slider(associationType, steps, stepvalue, null, null);
		});
	}
};

multiChannel.facetNavigation.priceSlider.reinit = function(associationType) {

	if ($defined($('slide_container' + associationType))) {
		multiChannel.facetNavigation.priceSlider.instance = new multiChannel.Slider(associationType, multiChannel.facetNavigation.priceSlider.steps, multiChannel.facetNavigation.priceSlider.stepvalue, null, null);
		$('slider_bkg_img' + associationType).setStyle('clip','rect(0px 196px 10px 0px)');
		$('slider_minmax_minKnobA' + associationType).setStyle('left','0px');
		$('slider_minmax_maxKnobA' + associationType).setStyle('left','196px');
		$('slider_minmax_min' + associationType).value = '0';
		$('slider_minmax_max' + associationType).value = '';
	}
};

multiChannel.facetNavigation.priceSlider.update = function(associationType) {

	if ($defined($('slide_container' + associationType))) {
		multiChannel.facetNavigation.priceSlider.instance = new multiChannel.Slider(associationType, multiChannel.facetNavigation.priceSlider.steps, multiChannel.facetNavigation.priceSlider.stepvalue, $('slider_minmax_min' + associationType).value, $('slider_minmax_max' + associationType).value);

	}
};

// END FACET NAVIGATION

// START TOOLTIPS
multiChannel.tooltips = new Object();

multiChannel.tooltips.delays = {
	functionStore : [],
	add :  function(delayedFunction) {
		this.functionStore.push(delayedFunction);
	},
	clear: function() {
		this.functionStore.each(function(item){
			$clear(item);
		});
		this.functionStore.empty();
	}
};

multiChannel.tooltips.generateLink = function(entryId) {
	var uri = new URI(multiChannel.context.displayarticle);
	multiChannel.setParameters({'entryId': entryId}, uri);
	return uri.toString();
};

multiChannel.tooltips.mouseout = function() {
	multiChannel.tooltips.delays.clear();
	multiChannel.tooltips.delays.add(multiChannel.tooltips.close.delay(1000));
};

multiChannel.tooltips.show = function(tooltipElement, position) {

	return function() {
		tooltipElement.setStyle('top', position.y + 'px');
		tooltipElement.setStyle('left', position.x + 'px');
		tooltipElement.setStyle('visibility', 'visible');
	};
};

multiChannel.tooltips.close = function() {
	$('tooltipLayer').setStyle('visibility', 'hidden');
};

multiChannel.tooltips.initTooltips = function() {
	window.addEvent('domready', function() {
		var tooltipLayer = $('tooltipLayer');
		var reference = $('contentMiddle');

		$$('#tab_catalogEntryDetails .tooltip').each(function(tooltipElement){
			var tooltipValueElement = tooltipElement.getElement('.tooltip_value');
			var tooltipContentElement = tooltipElement.getElement('.tooltip_content');
			var tooltipElementId = tooltipContentElement.get('title');
			var link = multiChannel.tooltips.generateLink(tooltipElementId);
			tooltipElement.addEvent('mouseover', function(){
				multiChannel.tooltips.delays.clear();
				$('tooltipLayer_title').set('text', tooltipValueElement.get('html'));
				$('tooltipLayer_text').set('text', tooltipContentElement.get('html'));
				$('tooltipLayer_link').set('href', link);
				var pos = multiChannel.tooltips.getTooltipPosition(tooltipLayer, tooltipElement, tooltipValueElement, reference);

				var showDelay = multiChannel.tooltips.show(tooltipLayer, pos).delay(500);
				var closeDelay = multiChannel.tooltips.close.delay(10000);
				[showDelay, closeDelay].each(function(delayItem) {
					multiChannel.tooltips.delays.add(delayItem);
				});
			});
			tooltipElement.addEvent('click', function() {
				multiChannel.tooltips.delays.clear();
				multiChannel.tooltips.close();
				window.location.href = link;
			});
			tooltipElement.addEvent('mouseout', multiChannel.tooltips.mouseout);
		});
		tooltipLayer.addEvent('mouseover', function() {
			multiChannel.tooltips.delays.clear();
			multiChannel.tooltips.delays.add(multiChannel.tooltips.close.delay(10000));
		});
		tooltipLayer.addEvent('mouseout', multiChannel.tooltips.mouseout);
	});
};

multiChannel.tooltips.getTooltipPosition = function(tooltipLayer, tooltipElement, tooltipValueElement, reference) {
	var size = tooltipLayer.getSize();
	var xoffset = -size.x + 26;
	var yoffset = -size.y + -4;

	tooltipValueElement.getSize();
	xoffset += (tooltipValueElement.getSize().x / 2);

	var position = tooltipElement.getPosition(reference);
	position.x += xoffset;
	position.y += yoffset;

	return position;
};
// END TOOLTIPS

multiChannel.flyerteaser = new Object();

multiChannel.flyerteaser.areWeLocalised = function() {
	return $defined(multiChannel.context.localStoreId);
};

multiChannel.flyerteaser.getNationalTeaser = function() {
	return multiChannel.flyer.extendedInfos[multiChannel.context.assetStoreId];
};

multiChannel.flyerteaser.getLocalTeaser = function() {
	return multiChannel.flyer.extendedInfos[multiChannel.context.localStoreId];
};

multiChannel.flyerteaser.areLocalTeasersAvailable = function() {
	if (multiChannel.flyerteaser.areWeLocalised()) {
		return $defined(multiChannel.flyerteaser.getLocalTeaser());
	} else {
		for (storeId in multiChannel.flyer.extendedInfos) {
			if (storeId != multiChannel.context.assetStoreId) {
				return true;
			}
		}
		return false;
	}
};

multiChannel.flyerteaser.getLocalTeasers = function() {
	var localTeasers = new Array();
	for (storeId in multiChannel.flyer.extendedInfos) {
		if (storeId != multiChannel.context.assetStoreId) {
			localTeasers = localTeasers.combine(multiChannel.flyer.extendedInfos[storeId]);
		}
	}
	return localTeasers;
};

multiChannel.flyerteaser.displayImage = function(flyer) {
	var teaserImage = $('flyerTeaserImage');
	if ($defined(teaserImage)) {
		if ($defined(flyer)) {
			if ($defined(flyer.image) && flyer.image.length > 0) {
				teaserImage.setStyle('background', "url('" + flyer.image + "') no-repeat");
			} else {
				teaserImage.addClass('flyerTeaserImageFallback');
			}
			teaserImage.setStyle('cursor','pointer').removeEvents('click').addEvent('click', multiChannel.flyerteaser.generateOnClickHandler(flyer));
			//teaserImage.addEvent('mousedown', multiChannel.etracker.trackFlyer(flyer));
		} else {
			teaserImage.addClass('flyerTeaserImageFallback');
		}
	}
};

multiChannel.flyerteaser.displayNewsletterButton = function() {
	var newsletterButton = $('flyerTeaserNewsletterButton');
	var newsletterText = $('flyerTeaserNewsletterText');
	if ($defined(newsletterButton) && $defined(newsletterText)) {
		newsletterButton.removeClass('hideout');
		newsletterText.removeClass('hideout');
		multiChannel.flyerteaser.displayImage();
	}
};

multiChannel.flyerteaser.generateOnClickHandler = function(flyer) {
	return function() {
		var params = { 'outletId': flyer.outletId };
		multiChannel.openLayer('flyer', params, function() { multiChannel.flyer.showFlyer(flyer.exportName,flyer.outletName ); });
	};
};

multiChannel.flyerteaser.addTextLink = function(text, flyer) {
	var target = $('flyerTeaserLocalise');
	if ($defined(target)) {
		// take the flyerTeaserLocalise element as a template for the text link...
		var listElement = target.clone();
		var textElements = listElement.getChildren('.right');
		if (textElements.length > 0) {
			textElements[0].set('text', text);
		}
		listElement.setStyle('cursor','pointer').addEvent('click', multiChannel.flyerteaser.generateOnClickHandler(flyer));
		//listElement.addEvent('mousedown', multiChannel.etracker.trackFlyer(flyer));
		listElement.removeClass('hideout');
		// ... and as a target
		listElement.inject(target, 'before');
	}
};

multiChannel.flyerteaser.displayTeaser = function(teaserArray) {
	var flyerTeaser = $('flyerTeaser');
	var teaserText = $('flyerTeaserAdditional');
	if ($defined(flyerTeaser) && $defined(teaserText)) {
		if ($defined(teaserArray) && teaserArray.length > 0) {
			var mainTeaser = teaserArray[0];
			multiChannel.flyerteaser.displayImage(mainTeaser);
			teaserText.removeClass('hideout');
			for (var i = 0; i < teaserArray.length; i++) {
				var name;
				if ($defined(teaserArray[i].name) && teaserArray[i].name.length > 0) {
					name = teaserArray[i].name;
				} else {
					var startDate = teaserArray[i].startDate;
					var endDate = teaserArray[i].endDate;
					name = multiChannel.flyer.defaultAdvertisingMessage + " " + startDate + " - " + endDate;
				}
				multiChannel.flyerteaser.addTextLink(name, teaserArray[i]);
			}
		} else {
			multiChannel.flyerteaser.displayImage();
		}
	}
};

multiChannel.flyerteaser.displayLocalisationRequest = function() {
	var teaserText = $('flyerTeaserAdditional');
	var teaserLocalise = $('flyerTeaserLocalise');
	var teaserImage = $('flyerTeaserImage');
	if ($defined(teaserText) && $defined(teaserLocalise) && $defined(teaserImage)) {
		teaserText.removeClass('hideout');
		teaserLocalise.removeClass('hideout');
		teaserLocalise.setStyle('cursor','pointer').addEvent('click', multiChannel.flyerRedirectStorelocation);
		teaserImage.setStyle('cursor','pointer').addEvent('click', multiChannel.flyerRedirectStorelocation);
	}
};

multiChannel.flyerteaser.load = function() {
	var nationalTeaser = multiChannel.flyerteaser.getNationalTeaser();
	var localTeaser = multiChannel.flyerteaser.getLocalTeaser();
	var teaserList;
	if ($defined(nationalTeaser)) {
		if ($defined(localTeaser)) {
			teaserList = nationalTeaser.combine(localTeaser);
		} else if (multiChannel.flyerteaser.areLocalTeasersAvailable()) {
			teaserList = nationalTeaser;
			multiChannel.flyerteaser.displayLocalisationRequest();
		} else {
			teaserList = nationalTeaser;
		}
	} else {
		if ($defined(localTeaser)) {
			teaserList = localTeaser;
		} else if (multiChannel.flyerteaser.areLocalTeasersAvailable()) {
			multiChannel.flyerteaser.displayLocalisationRequest();
		} else {
			multiChannel.flyerteaser.displayNewsletterButton();
		}
	}
	multiChannel.flyerteaser.displayTeaser(teaserList);
};

multiChannel.doubleclickhandler = new Object();

multiChannel.doubleclickhandler.clicked = false;

multiChannel.doubleclickhandler.firstclick = function(anchor) {
  if (!multiChannel.doubleclickhandler.clicked ) {
	if($defined(anchor)) {
		var url = anchor.get('href');
		anchor.set('href', 'javascript:void(0);');
		new URI(url).go();
	}
	multiChannel.doubleclickhandler.clicked  = true;
	return true;
  }
  return false;
};

multiChannel.printRetoure = function(orderReturnId, mode, newWindow) {
	var uri = new URI(multiChannel.context.printretoure);
	multiChannel.setParameters({ 'orderReturnId': orderReturnId, 'mode': mode }, uri);

	if (newWindow) {
		multiChannel.openLayer('myorderretourethanks');
		window.open(uri.toString(), '_blank', 'scrollbars=yes');
	} else {
		multiChannel.openLayer('myorderretourethanks', null, function() { uri.go(); });
	}
}

/***********************************/
/* function called from flash file */
/***********************************/
function closeBigFlashLayer() {
	$('big_flash_layer_container').hide();
}

/*******************/
/* MediaPedia */
/*******************/
multiChannel.mediapedia = new Object();

multiChannel.mediapedia.initWriteArticle = function() {
	multiChannel.mediapedia.switchWriteArticleButtons(false);
	$('writeArticleTerms').checked = false;
};

multiChannel.mediapedia.switchWriteArticleButtons = function(checked){
	if (checked){
		$('writeArticleForm_submit_inactive').hide();
		$('writeArticleForm_submit').show();
	} else{
		$('writeArticleForm_submit_inactive').show();
		$('writeArticleForm_submit').hide();
	}
};

multiChannel.mediapedia.startWriteArticleCheck = function(valObj) {
	if(!valObj.validator.validate(true)) {
		multiChannel.fitSite();
		return false;
	}
	$('writeArticleAjaxLoader').show();
	multiChannel.mediapedia.switchWriteArticleButtons(false);
	multiChannel.mediapedia.submitArticle();
};

multiChannel.mediapedia.submitArticle = function() {
	var form = $('writeArticleForm');
	form.submit();
};

multiChannel.mediapedia.parseWriteArticleResult = function(result){
	if(result && result.status && result.status == 'ok'){
		$('writeArticle').hide();
		$('writeArticleSuccess').show();
	} else {
		multiChannel.mediapedia.writeArticleValidator.validator.clearGlobalError();
		for(i=0;i<result.errors.length;i++){
			var elementId = result.formId + '_' + result.errors[i].name;
			multiChannel.mediapedia.writeArticleValidator.validator.addGlobalError(result.errors[i].message, $(elementId));
		}
		multiChannel.mediapedia.switchWriteArticleButtons(true);
		$('writeArticleAjaxLoader').hide();
	}
};

multiChannel.mediapedia.setInputDefaultValue = function(targetId, value) {
  if($defined( $(targetId))){
  	window.addEvent('domready', function(){
		var t = $(targetId);
		t.addEvents({
	        'focus': function(){
	            if( t.get('value') == "" || t.get('value') == value ) t.set('value','');
	            else t.select();
	            t.setStyle('color', 'gray').removeClass("error_text");
	        },
	        'blur': function(){
	            if( t.get('value') == "" ) t.set('value', value).setStyle('color', 'gray')
	        }
	    });
	    if( t.get('value')=='' ) t.set('value', value).setStyle('color', 'gray')
	});
  }
};

multiChannel.scrollToElement = function(elementId) {
	var curtop = 0;
	var element = $(elementId);
	if (element.offsetParent) {
		do {
			curtop += element.offsetTop;
		} while (element = element.offsetParent);
	window.scroll(0, curtop);
	}
};

multiChannel.updateMarketInfo = function(uri, localStoreId,options){

	if (localStoreId == -1) {
		//no outlet selected
		return;
	}

	var onsuccess = function(response){};
	if(options){
		if(options.onsuccess) onsuccess = options.onsuccess;
	}

	var url=uri+"&localStoreId="+localStoreId;

	$('stat-marketinfo').style.visibility = 'visible';
	$('stat-marketinfo').style.display = 'block';

	new Request.HTML({
		method: 'post',
		url: url,
		update: $('stat-marketinfo'),
		onRequest: function(){},
		onSuccess: onsuccess
	}).send();
};

multiChannel.hideMarketInfo = function(){
	$('stat-marketinfo').style.visibility = 'hidden';
	$('stat-marketinfo').style.display = 'none';
};

multiChannel.showMarketInfo = function(){
	$('stat-marketinfo').style.visibility = 'visible';
	$('stat-marketinfo').style.display = 'block';
};

multiChannel.marketpickup = new Object();
multiChannel.marketpickup.storeSelected = false;
multiChannel.marketpickup.lastTimer = null;
multiChannel.marketpickup.request = null;

//ajax call for product search in the local market
multiChannel.marketpickup.checkProductAvailability = function() {
	var storeId = $('storeSelect').value;
	//store selected else no store selected

	if ($defined(storeId) && (!isNaN(storeId)) &&  (Number(storeId) > 0)) {
		multiChannel.marketpickup.storeSelected = true;
		$('marketpickupInfoSign').show();
		$('noStoreSelected').hide();
		$('storeSelected').show();
		$('marketpickupFooter').show();
	} else {
		multiChannel.marketpickup.storeSelected = false;
		$('noStoreSelected').show();
		$('storeSelected').hide();
		$('marketpickupInfoSign').hide();
		$('marketpickupContent').hide();
		$('marketpickupFooter').hide();
		$('marketPickupTextWrapper').show();
		$('overlay').show();
		$('layer-container').show();
		$('layer-container-iframe').show();
		return;
	}	
	var catEntryId = multiChannel.getParameter('catEntryId');
	var uri = new URI(multiChannel.context.checkproductavailability);
	multiChannel.setParameters({ 'selectedStoreId': storeId, 'currentProductId': catEntryId }, uri);
	var req = new Request.JSON({
		method: 'get',
		url: uri.toString(),
		onSuccess: multiChannel.marketpickup.checkAvailabilityResult
	});
	if(multiChannel.marketpickup.lastTimer != null){
		window.clearTimeout(multiChannel.marketpickup.lastTimer);
	}
	multiChannel.marketpickup.request = req;
	multiChannel.marketpickup.lastTimer = window.setTimeout('multiChannel.marketpickup.request.send()',500);
}

//show/hide layers after the ajax call was made
multiChannel.marketpickup.checkAvailabilityResult = function(response) {
	if(multiChannel.marketpickup.storeSelected){
		if (response) {
			multiChannel.showLayer('marketpickupContent');
			multiChannel.showLayer('marketpickupStore');
	
			multiChannel.marketpickup.containerSettings(response.result);
			multiChannel.marketpickup.setStoreAndProduct(response.result);
		}
		$('overlay').show();
		$('layer-container').show();
		$('layer-container-iframe').show();
	}
}

multiChannel.marketpickup.containerSettings = function(result) {

	if (result && result.toLowerCase() == 'true') {
		multiChannel.showLayer('immedAvailable');
		multiChannel.hideLayer('inXDaysAvailable');
		multiChannel.hideLayer('notAvailable');
		multiChannel.showLayer('marketPickupTextWrapper');
	} else {
		multiChannel.showLayer('inXDaysAvailable');
		multiChannel.hideLayer('notAvailable');
		multiChannel.hideLayer('immedAvailable');
		multiChannel.hideLayer('marketPickupTextWrapper');
	}
}

multiChannel.marketpickup.setStoreAndProduct = function(result) {
	var mpProductNameVal = $('productName').get('text');
	var mpStoreNameVal = $('storeSelect').getSelected()[0].get('text');

	$$('#marketpickupContent span.mpProductName').each(function(elem) {
		elem.set('text', mpProductNameVal);
	});

	$$('#marketpickupContent span.mpStoreName').each(function(elem) {
		elem.set('text', mpStoreNameVal);
	});

	if (result && result.toLowerCase() == 'false'){
		var mpAvailabilityVal = $('pickupTimeText').get('text');
		$$('#marketpickupContent span.mpAvailability').each(function(elem) {
			elem.set('text', mpAvailabilityVal);
		});
	}
}

multiChannel.search.resetSelected = function() {
	$('storeSelect').selectedIndex = 0;
}

multiChannel.marketpickup.checkoutStoreSelected = false;
multiChannel.marketpickup.checkoutLastTimer = null;
multiChannel.marketpickup.checkoutRequest = null;

multiChannel.marketpickup.checkSDPOption = function(storeId, orderId) {
	multiChannel.marketpickup.hideSDP();
	$('ship_to_store').set('value', 'store');	
		//no store selected
		if(storeId == -1) {
			multiChannel.marketpickup.checkoutStoreSelected = false;
			multiChannel.marketpickup.showDeliveryGrouping();
			return;
		}
		multiChannel.marketpickup.checkoutStoreSelected = true;
		var uri = new URI(multiChannel.context.checkorderpickup);
		multiChannel.setParameter('orderId', orderId, uri);
		multiChannel.setParameter('selectedId', storeId, uri);
		var updateSDPOption = function(response) { multiChannel.marketpickup.updateSDPOption(response, orderId);};
		var req = new Request.JSON({
			url: uri.toString(),
			onSuccess: updateSDPOption,
			onError: multiChannel.marketpickup.revertSDPOption
		});		
		if(multiChannel.marketpickup.checkoutLastTimer != null){
			window.clearTimeout(multiChannel.marketpickup.checkoutLastTimer);
		}
		multiChannel.marketpickup.checkoutRequest = req;
		multiChannel.marketpickup.checkoutLastTimer = window.setTimeout('multiChannel.marketpickup.checkoutRequest.post()',500);
}

multiChannel.marketpickup.revertSDPOption = function() {
	multiChannel.marketpickup.hideSDP();
	$('ship_to_store').set('value', 'store');	
}

multiChannel.marketpickup.updateSDPOption = function(response, orderId) {
	if(multiChannel.marketpickup.checkoutStoreSelected){	
		var storeList = response.storesWithStock;
		var withoutStockList = response.storesWithoutStock;	
		var currentOutlet = $('outlet').value;
		if (storeList.contains($('outlet').value)) {
			$('pickUpSameDayPossible').show();
			$('delivery_mode_fewest').checked = true;
			$('ship_to_store').set('value', 'store_sameday');
			if ($('ship_to_store').checked) {
				multiChannel.marketpickup.hideDeliveryGrouping();
			}
		} else {
			$('pickUpSameDayNotPossible').set('text', $('CHECKOUT.COLUMNTITLE.FEWEST_PICKUP').get('text'));
			$('pickUpSameDayNotPossible').show();
			$('ship_to_store').set('value', 'store');
			if ($('ship_to_store').checked) {
				multiChannel.marketpickup.showDeliveryGrouping();
			}
		}	
		var table = multiChannel.marketpickup.buildOtherStoresLinksTable(currentOutlet, orderId, storeList, withoutStockList);
		if (table != undefined) {
			table.inject($('otherStoresWithStockLinks'));
			$('otherStoresWithStockInfo').show();
			$('otherStoresWithStockLinks').show();
			$('otherStoresWithStockContainer').show();
		}
	}
}

multiChannel.marketpickup.buildOtherStoresLinksTableRows = function(target, currentStore, storeList, hasStock, createOutletSelectFunction) {
	var total = 0;
	for (var i = 0; i < storeList.length; i++) {
		var storeId = storeList[i];
		if (storeId != currentStore && multiChannel.checkout.shipment.outletAddress[storeId]) {
			var address = multiChannel.checkout.shipment.outletAddress[storeId];
			var tableRow = new Element('tr');
			var outlet = new Element('td', {id: 'sdptoutlet'});
			var availability = new Element('td');
			outlet.set('text', address.outlet + ':');
			availability.set('text', hasStock ? multiChannel.checkout.shipment.pickUpStoreAvailable : $('CHECKOUT.COLUMNTITLE.FEWEST_PICKUP').get('text'));
			outlet.inject(tableRow);
			availability.inject(tableRow);
			tableRow.addEvent('click', createOutletSelectFunction(storeId));
			tableRow.inject(target);
			++total;
		}
	}
	return total;
};

multiChannel.marketpickup.buildOtherStoresLinksTable = function(currentStore, orderId, storesWithStock, storesWithoutStock) {
	var table = new Element('table');
	var tableBody = new Element('tbody', {id: 'sdptbody'});
	var createOutletSelectFunction = function(storeId) {
		return function(){
			multiChannel.marketpickup.outletSelected(storeId, orderId);
		};
	};

	var total = multiChannel.marketpickup.buildOtherStoresLinksTableRows(tableBody, currentStore, storesWithStock, true, createOutletSelectFunction);
	total += multiChannel.marketpickup.buildOtherStoresLinksTableRows(tableBody, currentStore, storesWithoutStock, false, createOutletSelectFunction);

	if (total > 0) {
		tableBody.inject(table);
		return table;
	} else {
		return null;
	}
};

multiChannel.marketpickup.outletSelected = function(storeId, orderId){}
multiChannel.marketpickup.initOutletSelectedFunction = function(doBusinessCard, doSDPCheck) {

	multiChannel.marketpickup.outletSelected = function(storeId, orderId) {
		var outletSelectBox = $('outlet');
		outletSelectBox.set('value', storeId);
		if (doBusinessCard) {
			multiChannel.updateMarketInfo(multiChannel.context.ajaxmarketinfo,storeId);
		}
		if (doSDPCheck) {
			multiChannel.marketpickup.checkSDPOption(storeId, orderId);
		} else {
			multiChannel.marketpickup.showDeliveryGrouping();
		}
		multiChannel.checkout.shipment.showAddress(storeId);
	}
}

multiChannel.marketpickup.hideDeliveryGrouping = function() {
	$('deliveryOptionsContainer').hide();
}

multiChannel.marketpickup.showDeliveryGrouping = function() {
	$('deliveryOptionsContainer').show();
}

multiChannel.marketpickup.hideSDP = function() {
	$('otherStoresWithStockLinks').empty();
	$('otherStoresWithStockContainer').hide();
	$('pickUpSameDayPossible').hide();
	$('pickUpSameDayNotPossible').hide();
}

multiChannel.compareObj = function(obj1, obj2) {
	if((obj1 != undefined && obj2 == undefined) ||
			(obj1 == undefined && obj2 != undefined)) {
		return false;
	}
	for(var i in obj1){
		if(obj1[i] != obj2[i]){
			return false;
		}
	}
	for(var i in obj2){
		if(obj1[i] != obj2[i]){
			return false;
		}
	}
	return true;
}

multiChannel.cloneObj = function(obj) {

	if(typeof(obj) != 'object') return obj;
    if(obj == null) return obj;

	var newObj = new Object();

    for(var i in obj) {
    	if(obj.hasOwnProperty(i)) {
    		newObj[i] = multiChannel.cloneObj(obj[i]);
    	}
    }
    return newObj;

}

/*******************/
/* Career */
/*******************/
multiChannel.career = new Object();

multiChannel.career.openURL = function(sURL) {
    window.open(sURL, "Window2", "width=690,height=880,scrollbars=yes,location=yes");
};

multiChannel.career.submitForm = function(id){
	$(id).submit();
};

/*******************/
/* FinancingCFG */
/*******************/
multiChannel.financingCFG = new Object();



multiChannel.financingCFG.formatCurrency = function(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10) cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
      num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + ',' + cents);
}

multiChannel.financingCFG.formatGesamt = function(gesamtbetrag, summa){
    if (gesamtbetrag >= summa) return "&euro; " + multiChannel.financingCFG.formatCurrency(gesamtbetrag);
                      else return "&euro; " + multiChannel.financingCFG.formatCurrency(summa);
}

multiChannel.financingCFG.getCalculatedValueTable = function(summa, zins, campaignduration, minSum){
  var faktoren0 = new Array(0.10000000,0.08333333,0.05555556,0.04166667);
  var faktoren9 = new Array(0.10439501,0.08767297,0.05981669,0.04590405,0.03756884,0.03202234,0.02806935,0.0251123,0.02099077,0.01826333);
  var sollzins0 = new Array('0.00 %','0.00 %','0.00 %','0.00 %');
  var sollzins9 = new Array('9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %');
  var laufzeit = new Array(10,12,18,24,30,36,42,48,60,72);

    var gesamtbetrag = 0;
    var anzahl = 0;
    if (zins == 0 && (campaignduration == "99" || campaignduration == "")) anzahl = 4;
    else anzahl = 10;
    var result = new Array(anzahl);

    for (i=0; i<anzahl; i++){
      var show = false;
      var sz = '', gesamt = '', res = '';

      if (parseFloat(summa*faktoren0[i]) < 9 || parseFloat(summa*faktoren9[i]) < 9 || parseFloat(summa) < minSum) show = false;
      else show = true;

      if (zins == 9.9) {
        res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren9[i]);
        gesamtbetrag = ((Math.floor((summa*faktoren9[i])*100))/100)*laufzeit[i];
        gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
        arr2 = new Array(res, gesamt, sollzins9[i], '9,90 %', show);
      } else {
        switch (campaignduration) {
          case "0":
            /* show all lz incl. 0% */
            if (i <= 3) {
              res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren0[i]);
              gesamtbetrag = summa;
              gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
              arr2 = new Array(res, gesamt, sollzins0[i], '0.00 %', show);
            }
            else  {
              res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren9[i]);
              gesamtbetrag = ((Math.floor((summa*faktoren9[i])*100))/100)*laufzeit[i];
              gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
              arr2 = new Array(res, gesamt, sollzins9[i], '9.90 %', show);
            }
            break;
          case "99": ;
          case "":
            /* show only 0% lz */
            res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren0[i]);
            gesamtbetrag = summa;
            gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
            arr2 = new Array(res, gesamt, sollzins0[i], '0.00 %', show);
            break;
          default:
            /* check lz 0% */
            if (laufzeit[i] == campaignduration && sollzins0[i] != null){
              res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren0[i]);
              gesamtbetrag = summa;
              gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
              arr2 = new Array(res, gesamt, sollzins0[i], '0.00 %', show);
            } else {
              res = "&euro; " + multiChannel.financingCFG.formatCurrency(summa*faktoren9[i]);
              gesamtbetrag = ((Math.floor((summa*faktoren9[i])*100))/100)*laufzeit[i];
              gesamt = multiChannel.financingCFG.formatGesamt(gesamtbetrag, summa);
              arr2 = new Array(res, gesamt, sollzins9[i], '9.90 %', show);
            }
            break;
        }
      }
      result[i] = new Array(laufzeit[i],arr2);
    }
    return result;
}

multiChannel.financingCFG.getLowestInstalment = function(financingItemId, summa, zins, campaignduration, minSum) {
	var result = multiChannel.financingCFG.getCalculatedValueTable(summa, zins, campaignduration, minSum);
	var arr = new Array();
	var minRate = 0;

	for (var i=0; i<result.length; i++){
		var rates = result[i][1];
		if(rates[4]) {
			var tmp = parseFloat(rates[0].substring(7, rates[0].length).replace(",","."));
			if(i==0 || tmp < minRate) {
				minRate = tmp
			}
		}
	}
	if(minRate != 0) {
		var strMinRate = ""+minRate;
		if(strMinRate.indexOf(".")==-1) {
			strMinRate += ".00";
		} else if(strMinRate.substring(strMinRate.indexOf(".")+1,strMinRate.length).length == 1) {
			strMinRate += "0";
		}
		if($$('span.'+financingItemId)) {
			$$('span.'+financingItemId).set('html', strMinRate.replace(".",","));
		}
	}
}

multiChannel.financingCFG.determineRecoTeaserFinancing = function(cssSelector) {
	$$(''+cssSelector +' div.financingInstalmentInfo').each(function(el) {
		if(el.getParent().getParent('div./^recommendation*/').hasClass('recoFinancing') == false) {
			el.getParent().getParent('div./^recommendation*/').addClass('recoFinancing');
		}
	});
}

/**
multiChannel.financingCFG.formatCurrency = function(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10) cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
      num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + ',' + cents);
}

multiChannel.financingCFG.getCalculatedValueTable = function(summa, zins, minSum){
	var faktoren0 = new Array(0.10000000,0.08333333,0.05555556,0.04166667);
	var faktoren9 = new Array(0.10439501,0.08333333,0.05981669,0.04590405,0.03756884,0.03202234,0.0251123,0.02099077,0.01826333);
	var sollzins0 = new Array('0.00 %','0.00 %','0.00 %','0.00 %');
	var sollzins9 = new Array('9.47 %','0.00 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %','9.47 %');
	var laufzeit = new Array(10,12,18,24,30,36,48,60,72);

	var gesamtbetrag = 0;
	var anzahl = 4;
	if (zins != 0) anzahl = 9
	var result = new Array(anzahl);

	for (i=0; i<anzahl; i++){
		var resultat = 0;
		if (zins == 0) resultat = multiChannel.financingCFG.formatCurrency(summa/laufzeit[i]);
		else resultat = multiChannel.financingCFG.formatCurrency(summa*faktoren9[i]);
		if (zins == 0) gesamtbetrag = summa;
		else gesamtbetrag = ((Math.floor((summa*faktoren9[i])*100))/100)*laufzeit[i];

		var show = false;
		var sz = '', gesamt = '', res = '';

		if (parseFloat(resultat) < 9 || parseFloat(summa) < minSum) show = false;
		else show = true;

		res = "&euro; "+resultat;
		if (zins == 0) sz = sollzins0[i];
		else sz = sollzins9[i];
		if (gesamtbetrag >= summa) gesamt = "&euro; " + multiChannel.financingCFG.formatCurrency(gesamtbetrag);
		else gesamt = "&euro; " + multiChannel.financingCFG.formatCurrency(summa);

		if (zins == 0) arr2 = new Array(res, gesamt, sz, '0.00 %', show);
		else {
			if (i == 1) arr2 = new Array(res, gesamt, sz, '0.00 %', show);
			else arr2 = new Array(res, gesamt, sz, '9.90 %', show);
		}
		result[i] = new Array(laufzeit[i],arr2);
	}
	return result;
}

**/

multiChannel.financingCFG.loadCatalogEntryFinancingCFG = function(amount, prate, minsum, maxsum, campaignduration) {
	var financingCFGTabContent = $('catalogEntryFinancingCFGContent');

	if ($defined(financingCFGTabContent) && !multiChannel.financingCFG.catalogEntryFinancingCFGAlreadyLoaded) {
		multiChannel.financingCFG.catalogEntryFinancingCFGAlreadyLoaded = true;

		if (!$defined(multiChannel.loadCatalogEntryFinancingCFGUri)) {
			multiChannel.loadCatalogEntryFinancingCFGUri = new URI(multiChannel.context.financingCFGTab);
		}
		var uri = multiChannel.loadCatalogEntryFinancingCFGUri;

		var parameters = {
			'amount': amount,'prate': prate,'minsum': minsum, 'maxsum': maxsum, 'campaignduration': campaignduration
		};
		multiChannel.setParameters(parameters, uri);
		var request = new Request.HTML({
			url: uri.toString(),
			method: 'get',
			update: financingCFGTabContent
		});
		request.send();
	}
};

multiChannel.financingCFG.jumpToFinancingCFGTab = function(amount, prate, minsum, maxsum, campaignduration) {
	multiChannel.financingCFG.loadCatalogEntryFinancingCFG(amount, prate, minsum, maxsum, campaignduration);
	multiChannel.showProductDetailTabAndLocate('ref_catalogEntryFinancingCFG');
};

/*******************/
/* etracker START */
/*******************/

et_eC_Wrapper = function() {};
et_eC = function() {};
var ET_Event = { link: function() { }, eventStart: function() { } };

multiChannel.etracker = new Object();

multiChannel.etracker.mouseOverEvent = function(source, destination) {
	var s = source != undefined ?  source : '';
	s += destination != undefined ? ' > ' + destination : '';
	if (multiChannel.etracker.categoryName != undefined && s.length > 0) {
		ET_Event.eventStart(multiChannel.etracker.categoryName, s, 'MouseOver', '');
	}
};

multiChannel.etracker.clickEvent = function(source, category) {
	var c = category != undefined ? category : multiChannel.etracker.categoryName;
	if (source != undefined && source.length > 0 && c != undefined && c.length > 0) {
		ET_Event.eventStart(c, source, 'Klick', '');
	}
};

multiChannel.etracker.clickEventFlyoutNavigation = function(layerId, event) {
	event = event || window.event || false;
	var element = $(event.target || event.srcElement || false);

	if (element.match('a')) {
		multiChannel.etracker.clickEvent('Flyout Navigation > ' + layerId, multiChannel.etracker.eventCategoryNavigation);
	}
};

multiChannel.etracker.clickEventLeftNavigation = function(event) {
	event = event || window.event || false;
	var element = $(event.target || event.srcElement || false);

	if (element.match('a')) {
		var categoryName = 'Store Selection';

		if (element.get('href').indexOf('javascript') == -1) {
			categoryName = element.get('html').replace(/,/g, '');
			categoryName = categoryName.substring(0, Math.min(categoryName.length, 30));
		}
		multiChannel.etracker.clickEvent('Left Navigation > ' + categoryName, multiChannel.etracker.eventCategoryNavigation);
	}
};

multiChannel.etracker.clickEventManualLeftNavigation = function(navigationId, event) {
	event = event || window.event || false;
	var element = $(event.target || event.srcElement || false);

	if (element.match('a') && element.get('href').length > 0) {
		var categoryName = element.get('html').replace(/,/g, '');

		element.getParents('ul').each(function(item) {
			var aElement = item.getPrevious('a');

			if ($defined(aElement)) {
				categoryName = aElement.get('html').replace(/,/g, '') + ' > ' + categoryName;
			}
		});
		multiChannel.etracker.clickEvent('Manual Left Navigation [' + navigationId + '] > ' + categoryName, multiChannel.etracker.eventCategoryNavigation);
	}
};

multiChannel.etracker.clickEventNavigation = function(source) {
	multiChannel.etracker.clickEvent(source, multiChannel.etracker.eventCategoryNavigation);
};

multiChannel.etracker.clickEventMiniBasket = function(source) {
	multiChannel.etracker.clickEvent(source, multiChannel.etracker.eventCategoryShop);
};

multiChannel.etracker.clickEventAfterSearchFacet = function(source){
	multiChannel.etracker.clickEvent(multiChannel.etracker.afterSearchCategoryPath + source);
};

multiChannel.etracker.clickEventBasket = function(obj) {
	multiChannel.etracker.clickEventCategory(obj, 'Basket Add');
};

multiChannel.etracker.clickEventComparison = function(obj) {
	multiChannel.etracker.clickEventCategory(obj, 'Product Comparison layer');
};


multiChannel.etracker.clickEventCategory = function(obj, source) {
	if(obj != undefined && source != undefined){
		var obj = $(obj);
		var cn = multiChannel.etracker.categoryName;
		if(obj.getParent('#infoTabContent') != null) {
			cn = multiChannel.etracker.eventCategoryShop + '/' + 'Accessory Tab';
		} else if (obj.getParent('#comparison') != null) {
			cn = multiChannel.etracker.eventCategoryShop + '/' + 'Product Comparison layer';
		} else if (obj.getParent('#shopProductTeaser') != null) {
			cn = multiChannel.etracker.eventCategoryMediaPedia;
		} else if (obj.getParent('#searchResultInner') != null) {
			cn = multiChannel.etracker.eventCategoryShop + '/Search' ;
		} else if (obj.getParent('#wishlist_form') != null) {
			cn = multiChannel.etracker.eventCategoryShop + '/Wishlist' ;
		}
		multiChannel.etracker.clickEvent(source, cn);
	}
};

multiChannel.etracker.clickEventCheckout = function(destination) {
	if (multiChannel.etracker.categoryName != undefined) {
		multiChannel.etracker.clickEvent(multiChannel.etracker.categoryName + ' > ' + destination);
	}
};

multiChannel.etracker.trackCheckoutTarget = function(areaName){
	if (multiChannel.etracker.domainKey != undefined && multiChannel.etracker.masterKey != undefined) {
		var an = areaName ? '/' + areaName : '';
		et_eC_Wrapper(multiChannel.etracker.domainKey,multiChannel.etracker.pageNameCheckout,'','','',multiChannel.etracker.trackingPath + an);
		et_eC_Wrapper(multiChannel.etracker.masterKey,multiChannel.etracker.pageNameCheckout,'','','',multiChannel.etracker.trackingPath + an);
	}
};

multiChannel.etracker.trackCheckoutDelivery = function(){
	var shipTo = 'ship_to_billing';
	$$('#checkoutShipment .shipto').each(function(item) {
		if(item.checked) {
			shipTo = item.get('value');
		}
	});
	multiChannel.etracker.trackCheckoutTarget(shipTo);
};

multiChannel.etracker.trackCheckoutDeliveryAndSubmit = function(){
	multiChannel.etracker.trackCheckoutDelivery();
	setTimeout(function(){
		$('orderDeliveryUpdateForm').submit();
	},400);
};

multiChannel.etracker.trackCheckoutPayment = function(){
	var payMode = '';
	$$('#payment_box_methods .radio').each(function(item) {
		if(item.checked) {
			payMode = item.get('value');
		}
	});
	if(payMode.length > 0){
		multiChannel.etracker.trackCheckoutTarget(payMode);
	}
};

multiChannel.etracker.trackCheckoutPaymentTransactionAndSubmit = function(){
	multiChannel.etracker.trackCheckoutTarget('Payment Transaction');
	setTimeout(function(){
		$('MultiChannelCheckBeforeSubmitOrderCmd').submit();
	},400);
};

multiChannel.etracker.trackFlyer = function(flyer) {
	if(flyer != undefined){
		return function() {
			var etrackerString = 'Flyer ' + flyer.exportName;
			etrackerString += flyer.outletName != undefined ? ' [' + flyer.outletName + ']':'';
			multiChannel.etracker.clickEvent(etrackerString);
		};
	} else {
		return function() {
			multiChannel.etracker.clickEvent('Flyer Not Available');
		};
	}
};

multiChannel.etracker.trackFlyerByName = function(exportName, outletName) {
	if(exportName != undefined){
		var on = outletName != undefined && outletName.length > 0 ? outletName :'National';
		multiChannel.etracker.clickEvent('Flyer ' + exportName + ' [' + on + ']');
	} else {
		multiChannel.etracker.clickEvent('Flyer Not Available');
	}
};

multiChannel.etracker.trackSearchPage = function(page){
	if(multiChannel.etracker.searchPageTrackingEnabled && page != undefined){
		multiChannel.etracker.clickEvent('Paginator ' + page);
	}
};

multiChannel.etracker.initSearchCatalogEntryTracking = function(){
	if(multiChannel.etracker.domainKey != undefined && multiChannel.etracker.domainKey.length > 0
			&& multiChannel.etracker.masterKey != undefined && multiChannel.etracker.masterKey.length > 0){
		window.addEvent('domready', function(){
			var entryCounter = 1;
			var mpCounter = 1;
			var uri = new URI();
			var productDetailShortLink = uri.get('scheme') + '://' + uri.get('host') + '/mcs/catentry';
			var mediaPediaArticleLink = uri.get('scheme') + '://' + uri.get('host') + '/mp/article';
			var etrackerOnsiteCampaignString = '_COUNT_MAXCOUNT';
			var etrackerString = '[SEARCHPROFILE|PAGE|COUNT|SEARCHTERM]';
			var etrackerSearchCampaingPrefix = multiChannel.etracker.searchCampaignPrefix + ' ';
			var searchProfile;
			var page;
			var searchTerm = '';
			if(multiChannel.search.parameters != undefined && multiChannel.search.parameters[multiChannel.search.searchTab] != undefined){
				searchProfile = multiChannel.search.parameters[multiChannel.search.searchTab].searchProfile;
				page = multiChannel.search.parameters[multiChannel.search.searchTab].page;
				searchTerm = multiChannel.search.parameters[multiChannel.search.searchTab].query;
			} else {
				searchProfile = multiChannel.search.initialParameters.searchProfile;
				page = multiChannel.search.initialParameters.page;
				searchTerm = multiChannel.search.initialParameters.query;
			}
			etrackerString = etrackerString.replace('SEARCHPROFILE', searchProfile);
			etrackerString = etrackerString.replace('PAGE', page);
			etrackerString = etrackerString.replace('SEARCHTERM', searchTerm.substring(0,30));
			$$('#searchResultInner .catalogEntryList .catalogEntry').each(function(item){
				item.getElements('a[href^=' + productDetailShortLink + ']').each(function(link){
					var cString = etrackerSearchCampaingPrefix + etrackerString.replace('COUNT', entryCounter);
					link.removeEvents('mousedown');
					link.removeProperty('onmousedown');
					link.addEvent('mousedown', function(){
						multiChannel.etracker.clickEvent('Product Detail');
						if(multiChannel.etracker.onsite.search.domain_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.domainKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.domain_lpage,'','',cString);
						}
						if(multiChannel.etracker.onsite.search.master_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.masterKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.master_lpage,'','',cString);
						}
				    });
				})
				item.getElements('a[class=wlsLink]').each(function(link){
					var cString = etrackerSearchCampaingPrefix + etrackerString.replace('COUNT', entryCounter);
					link.addEvent('mousedown', function(){
						if(multiChannel.etracker.onsite.search.domain_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.domainKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.domain_lpage,'','',cString);
						}
						if(multiChannel.etracker.onsite.search.master_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.masterKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.master_lpage,'','',cString);
						}
				    });
				})
				entryCounter++;
			});
			$$('#searchResultInner .catalogEntryList .globalsearch_result_entry').each(function(item){
				item.getElements('a[href^=' + mediaPediaArticleLink + ']').each(function(link){
					var cString = etrackerSearchCampaingPrefix + etrackerString.replace('COUNT', mpCounter);
					link.addEvent('mousedown', function(){
						if(multiChannel.etracker.onsite.search.domain_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.domainKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.domain_lpage,'','',cString);
						}
						if(multiChannel.etracker.onsite.search.master_lpage != undefined){
							et_eC_Wrapper(multiChannel.etracker.masterKey,multiChannel.etracker.pageNameSearchCampaign,'','','','','','','','','',multiChannel.etracker.onsite.search.master_lpage,'','',cString);
						}
				    });
				})
				mpCounter++;
			});

		});
	}
};

multiChannel.etracker.trackSearchQuery = function(autoCompletion){
	var etrackerString = autoCompletion != undefined && autoCompletion ? 'Top Navigation > Auto Completion' : 'Top Navigation > Search';
	multiChannel.etracker.clickEvent(etrackerString);
};

/*******************/
/* etracker END */
/*******************/

multiChannel.getCutPosition = function(text) {
	var result = text.length - 1;
	var seperatorsArray = new Array(' ', ':', ',', '.', '\\', '/', '-', '@');

	for (var i = 0; i < seperatorsArray.length; i++) {
		var index = text.lastIndexOf(seperatorsArray[i]);

		if (index != -1) {
			result = index;
			break;
		}
	}
	return result;
}

multiChannel.setTextMaxRows = function(blockElementSelector, textElementSelector, maxRows) {

	$(window).addEvent('domready', function() {
		var measureText = '.';

		for (var i = 1; i < maxRows; i++) {
			measureText += '<br/>.';
		}

		$$(blockElementSelector).each(function(blockElement) {
			var textElement;

			if (textElementSelector != null) {
				textElement = blockElement.getElements(textElementSelector)[0];
			} else {
				textElement = blockElement;
			}
			var text = textElement.get('html');
			textElement.set('html', measureText);
			var targetDimensions = blockElement.getDimensions();
			textElement.set('html', text);

			while (blockElement.getDimensions().height > targetDimensions.height) {
				text = text.substr(0, multiChannel.getCutPosition(text));
				textElement.set('html', text + '...');
			}

			while (textElement.getDimensions().width > targetDimensions.width) {
				text = text.substr(0, multiChannel.getCutPosition(text));
				textElement.set('html', text + '...');
			}
		});
	});
}


//Prepare the form on MP result page if
//the user is logged in & result count == 0
multiChannel.mpNoResultPrepare = function(searchProfile, count) {
	var usrType = Cookie.read("MC_USERTYPE");
	if(usrType != undefined && usrType == 'R' && searchProfile == 'other' && count == 0) {
		window.addEvent('domready', function(){

			multiChannel.mediapedia.setInputDefaultValue('writeArticleForm_entry_title', $('mpWriteArticleTitle').innerHTML);
		  	multiChannel.mediapedia.setInputDefaultValue('writeArticleForm_entry_content', $('mpWriteArticleContent').innerHTML);

		  	multiChannel.mediapedia.initWriteArticle();

			multiChannel.mediapedia.writeArticleValidator = new Object();
			multiChannel.mediapedia.writeArticleValidator.fieldOptions = {
				writeArticleForm_entry_title: {
					required: true,
					validators: [
						{ name: 'IsEmpty',
							msg: $('mpWriteArticleErrorMsgTitle').innerHTML}
						]
				},
				writeArticleForm_entry_content: {
					required: true,
					validators: [
							{	name: 'IsEmpty',
								msg: $('mpWriteArticleErrorMsgContent').innerHTML}
						]
				}
			};
			multiChannel.mediapedia.writeArticleValidator.validator = new multiChannel.validator.FormValidator('writeArticleForm_table', multiChannel.mediapedia.writeArticleValidator.fieldOptions, 'errorBox', multiChannel.global.errorMessage1, multiChannel.global.errorMessageN);


			$('writeArticleForm_submit').addEvent('click', function(){
				multiChannel.mediapedia.startWriteArticleCheck(multiChannel.mediapedia.writeArticleValidator);
				return false;
			});

		});
	}
}

multiChannel.changeLanguage = function (languageId) {
	var uri = new URI();
	multiChannel.setParameter('langId', languageId, uri);
	uri.go();
};

multiChannel.search.changeLanguage = function (languageId) {
	var uri = new URI();
	multiChannel.setParameter('langId', languageId, uri);
	multiChannel.setParameter('fragment', null, uri);
	multiChannel.setParameter('hits', null, uri);
	multiChannel.setParameter('page', null, uri);
	multiChannel.setParameter('sort', null, uri);
	multiChannel.setParameter('tabsWithResults', null, uri);
	uri.go();
};


multiChannel.toggleLanguageMenu = function (status) {
	if ($(status+'_se_all').style.display=='none') {
		$(status+'_se_all').style.display='block';
		$(status+'_lang_sel').style.borderColor = '#3c3c3c';
	} else {
		$(status+'_se_all').style.display='none';
		$(status+'_lang_sel').style.borderColor = 'transparent';
	}
};

multiChannel.metaNavigation = new Object();

multiChannel.metaNavigation.addLanguagePickerIFrame = function (element) {

	var iFrame = new Element('iframe', {
	    'id': 'shim',
	    'scrolling': 'no',
	    'frameborder': 0,
	    'styles': {
			'position': 'absolute',
	        'width': '100%',
	        'height': '100%',
	        'filter': 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)',
	        'z-index': '1'
	    }
	}).inject(element,'after'); //this automatically injects the shim after the element.

	$$('div.languageSelectBox').each(function(selectBox) {
		selectBox.getElements('div').each(function(el){el.setStyle('z-index', '2')});
	});
}

multiChannel.hidePullDownLanguageMenu = function (status) {
	$(status+'_lang_sel').onmouseout = function(event) {
		event = event || window.event || false;
		var element = event.relatedTarget || event.toElement || false;
			if (!$(status+'_lang_sel').hasChild(element) && this!=element) {
				$(status+'_se_all').hide();
				$(status+'_lang_sel').style.borderColor = 'transparent';
			}
	};
};

multiChannel.selectLanguage = function (status,languageId) {
		$(status+'_se_all').getElements('div[id^='+status+'_se_]').each(function(inputElement) {
			inputElement.show();
		});
		$(status+'_ch_all').getElements('div[id^='+status+'_ch_]').each(function(inputElement) {
			inputElement.hide();
		});
		$(status+'_ch_'+languageId).show();
		$(status+'_se_'+languageId).hide();
		$(status+'_se_all').hide();

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

multiChannel.showLanguageSelector =function (status) {
	$(status+'_lang_sel').show();
	$(status+'_lang_sep').style.display="";
};

/* START shop2market */

multiChannel.shop2market = new Object();

// Workaround for shop2market javascript library bug expecting this variable to exist instead of setting it just like shop code.
__s2m_host = "track.shop2market.com";

multiChannel.shop2market.visitTag = function(shopCode) {
	var shop2marketUri = new URI(multiChannel.getCurrentScheme() + '://' + __s2m_host + '/track_visit.js');
	var parameters = new Object({
		'shop_code': shopCode,
		'v': '2.0.20110811'
	});
	shop2marketUri.setData(parameters);
	var scriptElement = new Element('script', {
		'type': 'text/javascript',
		'src': shop2marketUri.toString(),
		'async': true
	});
	scriptElement.addEvent('load', function() {
	    multiChannel.shop2market.hideIframe();
	});
	$(document.head).grab(scriptElement);
}

multiChannel.shop2market.transactOrderTag = function(shopCode, transId, amount1, amount2, amount3, currency) {
    var s2m_shop = S2MOrderTransaction(shopCode, '4.0.20110811');
    s2m_shop.set_order_info({
        'trans_id': transId,
        'amount_1': amount1,
        'amount_2': amount2,
        'amount_3': amount3,
        'currency': currency
    });
    s2m_shop.transact();
}

multiChannel.shop2market.orderTag = function(shopCode, transId, amount1, amount2, amount3, currency) {
	var shop2marketUri = new URI(multiChannel.getCurrentScheme() + '://' + __s2m_host + '/javascripts/s2m.js');
	var parameters = new Object({
		'shop_code': multiChannel.shop2market.shopCode,
		'v': '4.0.20110811'
	});
	shop2marketUri.setData(parameters);
	var scriptElement = new Element('script', {
		'type': 'text/javascript',
		'src': shop2marketUri.toString(),
		'async': true
	});
	scriptElement.addEvent('load', function() {
		multiChannel.shop2market.transactOrderTag(shopCode, transId, amount1, amount2, amount3, currency);
	    multiChannel.shop2market.hideIframe();
	});
	scriptElement.addEvent('readystatechange', function() {
		if (this.readyState == 'complete'|| this.readyState == 'loaded') {
			multiChannel.shop2market.transactOrderTag(shopCode, transId, amount1, amount2, amount3, currency);
		    multiChannel.shop2market.hideIframe();
		}
    });
	$(document.head).grab(scriptElement);
}

// Workaround for shop2market iframe rendering a little visible box
multiChannel.shop2market.hideIframe = function() {
    $$('iframe[src*=' + __s2m_host + ']').each(function(iframeElement) {
    	iframeElement.setStyle('position', 'absolute');
    	iframeElement.setStyle('top', '0');
    	iframeElement.setStyle('visibility', 'hidden');
    });
}

/* END shop2market */

/* START Google remarketing */
multiChannel.googleremarketing = new Object();
multiChannel.googleremarketing.google_conversion_id = null;
multiChannel.googleremarketing.google_conversion_language = null;
multiChannel.googleremarketing.google_conversion_format = null;
multiChannel.googleremarketing.google_conversion_color = null;
multiChannel.googleremarketing.google_conversion_label = null;
multiChannel.googleremarketing.google_conversion_value = null;

multiChannel.googleremarketing.scriptTag = function(label) {

		var googleremarketingUri = new URI(multiChannel.getCurrentScheme() + '://www.googleadservices.com/pagead/conversion.js');
		google_conversion_id = multiChannel.googleremarketing.google_conversion_id;

		google_conversion_language = multiChannel.googleremarketing.google_conversion_language;
		google_conversion_format = multiChannel.googleremarketing.google_conversion_format;
		google_conversion_color = multiChannel.googleremarketing.google_conversion_color;
		google_conversion_label = label;
		google_conversion_value = multiChannel.googleremarketing.google_conversion_value;

		document.write('<script type="text/javascript" src="' + googleremarketingUri.toString() + '"></script>');
}

/* END Google remarketing */

multiChannel.switchRememberMe = function (status) {
	if(status){
		$('rememberMeDisabled').setStyle('display', 'none');
		$('rememberMeEnabled').setStyle('display', 'block');
	}else{
		$('rememberMeEnabled').setStyle('display', 'none');
		$('rememberMeDisabled').setStyle('display', 'block');
	}
	var uri = new URI(multiChannel.context.mamasterdataRememberMe);
	var parameters = {
		'rememberMe': status,
		'persistRememberMe': true
	};
	multiChannel.setParameters(parameters, uri);
	var request = new Request.HTML({
		url: uri.toString(),
		method: 'get'
	});
	request.send();
};

multiChannel.checkRememberMe = function () {
	if ($defined(multiChannel.getParameter('rememberMe'))) {
		var rememberMe = multiChannel.getParameter('rememberMe');
		if (rememberMe == 'false') {
			var uri = new URI(multiChannel.context.mamasterdataRememberMe);
			var parameters = {
				'rememberMe': false,
				'persistRememberMe': false
			};
			multiChannel.setParameters(parameters, uri);
			var request = new Request.HTML({
				url: uri.toString(),
				method: 'get'
			});
			request.send();
		}
	}
};

multiChannel.trackKeys = function(evnt) {
	var keyCode = evnt.keyCode ? evnt.keyCode : evnt.which;
	return !!String.fromCharCode(keyCode).match(/[0123456789]/) || keyCode>36 && keyCode<41 || keyCode==8 || keyCode==46;
};

/* returns an js-object created from 2 arrays */
/* this function is used in the openLayer tag */
multiChannel.createObjectFromArrays = function (paramkeyarray, paramvaluearray) {
	var paramobject = new Object();
	if ($defined(paramkeyarray) && $defined(paramvaluearray) && (paramkeyarray.length==paramvaluearray.length)) {
	    paramobject = paramvaluearray.associate(paramkeyarray);
	}
	return paramobject
};

/* this String must contain key=value pairs separated by ;*/
multiChannel.createObjectFromParamString = function (paramString) {
	var result = new Object();
	var paramkeyarray = [];
	var paramvaluearray = [];
	if ($defined(paramString) && (paramString.length > 0)) {
	    var params = paramString.split(";");
	    for(var i=0;params.length>i;i++){
	    	var keyValuePair = params[i].split("=");
	    	if(keyValuePair.length==2){
	    		paramkeyarray = paramkeyarray.extend([keyValuePair[0]]);
	    		paramvaluearray = paramvaluearray.extend([keyValuePair[1]]);
	    	}
	    }
	    result = multiChannel.createObjectFromArrays(paramkeyarray, paramvaluearray);
	}
	return result;
};





