/**
 * namespacing our functions
 */

var BRAUN = {
		
		// generic layer settings
		GENERIC_LAYER_ID : "braun-layer-generic",
		GENERIC_LAYER_CONTENT_CLASS : "braun-layer-genericContent",
		GENERIC_LAYER_TEMP_CONTENT_ID : "braun-tempLayerContent",
		GENERIC_LAYER_TEXT_MAXWIDTH : 430,
		GENERIC_LAYER_TEXT_MAXHEIGHT : 500,
	/**
	 * Initialize
	 */
	init: function() {
		// Initialize the slider
		//BRAUN.initSlider();

		// initialise interface elements
		// add abbr element in IE 6-7
		document.createElement('abbr');

		// add event listener to skip link
		$('ul#skip a').focus(function(){
			$(this).addClass('focused');
		});

		$('ul#skip a').blur(function(){
			$(this).removeClass('focused');
		});

		// clear search field when focussed on
		$('input#inputSearch').focus(function(){
			$(this).val('');
		});

		/**
		 * displays the category dropdown in the header
 		 */
		$('div#categorySelect ul.complete').width(Math.max(200, $('div#categorySelect').width()));
		$('div#categorySelect a.current').click(function(){
			$('div#categorySelect ul.complete').show();

			$('#global').mouseover( function(e) {
					var elem = document.getElementById("categorySelect").getElementsByTagName("ul")[0];
					if (e.target != elem && !isChild(elem, e.target)) {
						$('#global').unbind("mouseover");
						$('div#categorySelect ul.complete').hide();
					}
				return false;
				}
				);

			return false
		});

		/**
		 * hides the category dropdown in the header
 		 */
		$('div#categorySelect ul.complete li a').click(function(){
			$('div#categorySelect ul.complete').hide();
			return true;
		});

		// removes 360 degree link in basicversion and on compare
		var cookiename = "braunbasicversioncookie";
		var cookiewert = "true";
		if(window.getCookie && getCookie(cookiename) == cookiewert){
			// switch from BasicVersion to BasicVersionOff
			$('#basicVersion').css('display', 'none');
			$('#basicVersionOff').css('display', 'block');

			// 360 degree
			$('#removeLayerLinkMarker').parent('li').css('display', 'none');
			// comparetable layer
			$('#comparetbody tr.highlight th h3 a').each( function () {
				$(this).parent('h3').html($(this).html());
			});
			$('#comparetbody tr.highlight th a img').each( function () {
				$(this).parent('a').replaceWith($(this).parent('a').html());
			});
		}


		// toggles dropdown in the footer
		$('a.showDropdown').click(function(){
			$(this).parent('li').children('div.footerDropdown').toggle();

			var id = ( $(this).parent('li').children('#dropdownPandG').html() ) ? 'dropdownPandG' : 'dropdownLanguages';
			var elem = document.getElementById( id );
			if ( id === 'dropdownPandG' ) {
				var size800correction = ( $( elem ).width() > $(this).parent('li').width() ) ? 16 : 0;
				$( elem ).css( 'left', ( Math.floor( ( $(this).parent('li').width() + $( this ).width() + 25 + 32 ) / 2 - $( elem ).width() + 10 - size800correction ) ) + 'px' );
			}
			$( '#global' ).mouseover( function(e) {
				if ( e.target != elem && !isChild( elem, e.target ) ) {
					$( '#global' ).unbind( 'mouseover' );
					$( elem ).hide();
				}
				return false;
			});
			return false;
		}
		);


		/**
		 * In some browsers the dropdown covers and blocks the link, which is why we have a
		 * blank link above, so the user can still close the dropdown
 		 */
		$('#dropdownLanguages').mouseout(function(e){
			var elem = document.getElementById("dropdownLanguages");
			if (!isChild(elem, e.target.parentNode)) {
				$('#dropdownLanguages').hide();
			}
		});


		/**
		 * layer functionality
 		 */
 		 $('div.layer a.close').click(function(){
		 	$("a[idlayer="+$(this).parents().filter('div.layer').attr('id')+"]").focus();
 		 	$(this).parents().filter('div.layer').hide();
 		 	return false;
 		 });

 		 /**
 		  * Model-Compare layer functionality
 		  */
 		 $('tr.highlight th.first h3 a, tr.highlight th.first > a > img, #mainContent a.openInLayer').click( BRAUN.initLayer );

		/***
		 * Buy Now layer functionality
		*/

		$('span.buyNowButton').click( BRAUN.initBuyNow );
		$('div.buyNow a.close').click(function(){
 		 	$(this).parents().filter('div.layer').hide();
 		 	return false;
 		 });

		 /***
		 * product review layer functionality
		*/

		$('a.review').click( BRAUN.initProductReview );
		$('div.writeReview a.close').click(function(){
 		 	$(this).parents().filter('div.layer').hide();

 		 	return false;
 		 });

		/**
		 * onchange select lists: wheretobuy, consumerservice
		 */
		$('#selection form.onchange select').change(function() {
			if(this.options[this.selectedIndex].value) {
				this.form.submit();
			}
		});

		$('ul.locationTitles li a').click(function() {
			if($('#saveLanguageChoice input').attr('checked') && isAuthor !== true){
				var name = "braunlanguageselection";
				var wert = $(this).attr('href');
				var cook = name+"="+unescape(wert);
   				document.cookie = cook;
			}
		});

		$('#result a.location').each(function(){
			var wert = $(this).attr('href');
			wert = wert.replace(/gc=true/g, "gc=false");
			wert = wert.replace(/subAction=static/g, "subAction=js");
			$(this).attr('href',wert);
		});
		//check if we got googlemaps on the page. If so, add GUnload() method to unload-event for preventing memoryleaks
		if('undefined' != typeof GUnload) {
			$(window).unload(function() { GUnload();} );
		}

		/** Init terms and conditions layer */
		$("#legalLinks a").click( BRAUN.showTermsConditions1 );

		/** Init forms and set form validation **/
		if($("#braunForm")) {
			BRAUN.initForm();
		}
		$("#braunForm").submit( BRAUN.validateForm );
		
		
		/**
		 * Init generic layers, if layer html is available
		 * Links that already have an onclick event will be skipped.
		 */
		
		// load generic layer html
		if($("a[class^='genLayer']").length != 0){
				if(window.genLayer) {
					$("#stageVisual").append(window.genLayer);
					$("a[class^='genLayerText']").filter(BRAUN.hasNoClickEvent).click( BRAUN.showGenLayerText );
					$("a[class^='genLayerFlash']").filter(BRAUN.hasNoClickEvent).click( BRAUN.showGenLayerFlash );
					$("a[class^='genLayerText']").css( "visibility", "visible" );
					$("a[class^='genLayerFlash']").css( "visibility", "visible" );
					$("div.layer a.close").click(function(){
						$(this).parents().filter('div.layer').hide();
						/* remove body CSS class to print layer only */
			 			$("body").removeClass('printLayer');
						BRAUN.resetGenLayer();
			 		 	return false;
					});
					$("div.layer a.print").click(function(){
						window.print();
					});
				}
		}

	},
	
	hasNoClickEvent: function() {
		for(var evnt in $(this).data('events')) {
			if("click" == evnt) {
				return false;
			}
		}
		return true;
	},

	initProductReviewRating: function() {
		$('#maprating').mouseout(function(){
			$('#starsSelected').attr("className", "star-" + $('#hiddenRating').attr("value"));
		});

		$('#maprating area').mouseover(function(){
			$('#starsSelected').attr("className", "star-"+(5-$(this).nextAll().length));
		});
		$('#maprating area').click(function(){
			$('#hiddenRating').attr("value", 5-$(this).nextAll().length);
			$('#starsSelected').attr("className", "star-" + $('#hiddenRating').attr("value"))
			return false;
		});
	},
	
	resetGenLayer: function() {
		var genLayer = $("#" + BRAUN.GENERIC_LAYER_ID);
		var genLayerContent = $("div." + BRAUN.GENERIC_LAYER_CONTENT_CLASS, genLayer);
		genLayerContent.empty();
		$("div.menutop h2", genLayer).remove();
		if ($.browser.msie && $.browser.version=='6.0') {
			$("#" + BRAUN.GENERIC_LAYER_ID + " div.menutop a.close").removeClass("closeRight");
		}
		genLayer.css("width", "auto");
		$("div.middle", genLayer).css("width", "auto");
		genLayerContent.css("width", "auto");
		genLayerContent.css("height", "auto");
		genLayerContent.removeAttr("xml:lang");
		genLayerContent.removeAttr("lang");
		$("div.waitAni", genLayer).show();
	},
	
	showGenLayer: function(type, objLink, e) {
		var selType = type == "text" ? 1 : 2;
		BRAUN.resetGenLayer();
		var genLayer = $("#" + BRAUN.GENERIC_LAYER_ID);
		var genLayerContent = $("div." + BRAUN.GENERIC_LAYER_CONTENT_CLASS, genLayer);
		var genLayerContentTemp = $("#" + BRAUN.GENERIC_LAYER_TEMP_CONTENT_ID);
		
		// set lang if available
		var lang = $(objLink).attr("xml:lang");
		if(lang) {
			genLayerContent.attr("xml:lang", lang);
			genLayerContent.attr("lang", lang);
		}

		// set initial position
		var offset = $(objLink).offset();
		var left = offset.left += $(objLink).width();
		var wrapper = $("#wrapper");
		var offsetWrapper = wrapper.offset();
		var layerTop = e.pageY - 10;
		var layerLeft = Math.min(left + 5, offsetWrapper.left + wrapper.width() - genLayer.width());
		genLayer.css("top", layerTop);
		genLayer.css("left", layerLeft);
		
		$("div.waitAni", genLayer).show();
		genLayer.show();
		$.get(objLink.name, function(data){
			if(selType == 1) {
				genLayerContent.css("overflow", "visible");
			}
			if(data) {
				var heading = data.match(/.{0,10}<h2[^>]*>[^<]+<\/h2>/);
				if(heading) {
					data = data.substring(heading[0].length);
					$("#" + BRAUN.GENERIC_LAYER_ID + " div.menutop").append(heading[0]);
				}
				$("div.waitAni", genLayer).hide();
				genLayer.css("left", Math.min(layerLeft, offsetWrapper.left + wrapper.width() - BRAUN.GENERIC_LAYER_TEXT_MAXWIDTH - 104));
				genLayerContentTemp.html(data);

				if(selType == 1) {
					if(genLayerContentTemp.width() > BRAUN.GENERIC_LAYER_TEXT_MAXWIDTH) {
						genLayerContentTemp.width(BRAUN.GENERIC_LAYER_TEXT_MAXWIDTH);
					}
					if(genLayerContentTemp.height() > BRAUN.GENERIC_LAYER_TEXT_MAXHEIGHT) {
						genLayerContentTemp.height(BRAUN.GENERIC_LAYER_TEXT_MAXHEIGHT);
					}
					
					$("#" + BRAUN.GENERIC_LAYER_ID + " div.menutop").width('auto');
					genLayerContent.css("overflow", "auto");
					genLayerContent.parent().width(genLayerContentTemp.width());
					genLayerContent.height(genLayerContentTemp.height());					
				} else {
					var flashWidth = $("embed", genLayerContentTemp).width();
					if(!flashWidth) {
						flashWidth = $("object", genLayerContentTemp).width();
					}
					genLayerContent.parent().width(flashWidth);
					$("#" + BRAUN.GENERIC_LAYER_ID + " div.menutop").width(flashWidth);
				}
				
				if ($.browser.msie && $.browser.version=='6.0') {
					$("#" + BRAUN.GENERIC_LAYER_ID + " div.menutop a.close").addClass("closeRight");
				}
				
				// set final position
				genLayer.css("top", Math.min(layerTop, offsetWrapper.top + wrapper.height() - (genLayerContentTemp.height() + 74 )));
				genLayer.css("left", Math.min(layerLeft, offsetWrapper.left + wrapper.width() - (genLayerContentTemp.width() + 74)));
				genLayerContent.html(data);
				genLayerContentTemp.html("");
			}
		});
		return false;
	},
	
	showGenLayerText: function(e) {
		/* add body CSS class to print layer only */
		$("body").addClass('printLayer');
		$("div.layer a.print").show();
		return BRAUN.showGenLayer("text", this, e);
	},
	
	showGenLayerFlash: function(e) {
		/* remove body CSS class to print layer only */
		$("body").removeClass('printLayer');
		$("div.layer a.print").hide();
		return BRAUN.showGenLayer("flash", this, e);
	},

	initProductReviewSettings: function() {
		/* reset star selection to none */
		$("#hiddenRating").attr("value", "0");
		$('#starsSelected').removeClass();

		$('#writeReviewForm').resetForm();
		BRAUN.resetErrorMessage();
		
		var selectedProd = ($("#prProduct > option:selected").text()=='')? $("#prProduct > option:first"):$("#prProduct > option:selected"); // :selected is initially not set in IE
		$("#prProductId").attr("value", selectedProd.attr("value"));
		$("#prProductName").attr("value", selectedProd.text());

		$('#writeReviewInput').show();
		$('#writeReviewSent').hide();
		$('#writeReviewError').hide();

		/* set new captcha */
		var x = Math.floor(Math.random() * 9 + 1 );
		var y = Math.floor(Math.random() * 9 + 1 );
		$("#captcha").text(x+" + "+y+" =");
		$("#captchaSum1").attr('value', x);
		$("#captchaSum2").attr('value', y);

		$("#captcha").css("top",$("#captchaInput").offset()["top"]-$("#captchaInput").parents().filter("div.wrapper").offset()["top"])
		$("#captcha").css("left",$("#captchaInput").offset()["left"]-$("#captchaInput").parents().filter("div.wrapper").offset()["left"]-55);

		$("#reviewLegalLinks a").click( BRAUN.showTermsConditions );
		$("#prProduct").change ( function(){
			$("#prProductId").attr("value", $("#prProduct option:selected").attr("value"));
			$("#prProductName").attr("value", $("#prProduct option:selected").text());
		} );
	},

	/* N E W S   R O O M */
	initForm: function() {
		/* set new captcha */
		var x = Math.floor(Math.random() * 9 + 1 );
		var y = Math.floor(Math.random() * 9 + 1 );
		$("#captcha").text(x+" + "+y+" =");
		$("#captchaSum1").attr('value', x);
		$("#captchaSum2").attr('value', y);
	},
	
	showTermsConditions1: function() {
		try {
			var layer = $("#layer-TermsConditions");
			
			if(!layer.attr('namics_init')) {
				layer.appendTo("#stageVisual");
				layer.attr("namics_init", "true");
				// ie6-fix: iframe keeps selectboxes from showing on top of the layer
				if ($.browser.msie && $.browser.version=='6.0') layer.prepend('<iframe></iframe>');
			}

			var pos = $(this).offset();
			layer.css("left", pos.left - 100);
			layer.css("top", pos.top - 200);
			
			$.ajax({
				url: $(this).attr('name'),
				cache: false,
				success: function(html){
					var bodyStart = html.indexOf("<body");
					if (bodyStart== -1){
						$("#layer-TermsConditionsContent").html(html);
					} else {
						$("#layer-TermsConditionsContent").html("<p><strong>Not found</strong></p>");
					}
					$("#layer-TermsConditions").show();
				},
				error: function(event, request, settings){

				}
			});
		} catch (error) {

		}
		//$("#"+curId).focus();
		return false;
	},

	validateReview: function(formData, jqForm, options){
		// RAH 15.06.09 - urchin tracking is deactivated
		// comment this in..
	 	var urchinurl = escape($('#writeReviewForm').attr('urchinurl'));
		// comment this out
		//var urchinurl;
		// END: RAH 15.06.09 - urchin tracking is deactivated 
		var missingFields = new Array();
		//var formChildren = $("#writeReviewForm :input").not(":button, #prEmail, #prProduct");
		var formChildren = $("#writeReviewForm :input").not(":button, #prEmail, :hidden");
		var captchaSum = eval($("#captcha").text().substr(0, 5));

		BRAUN.resetErrorMessage();

		for (var i=0; i < formChildren.length; i++) {
			if (!formChildren[i].value || formChildren[i].value <= "0" || (formChildren[i].id == "prConsent" && !formChildren[i].checked) || (formChildren[i].id == "captchaInput" && formChildren[i].value != captchaSum)) {
				missingFields.push(formChildren[i].id);
	        }
	    }
		if (missingFields.length > 0){
			var text;
		 	if(urchinurl!='undefined' && !urchinurl=='') {
		 		try {
		 			urchinTracker(urchinurl + "/error");
		 		    } catch (err) {
		 		     // Errorhandling no needed at this point
		 		    }		 		
		 	}
			for (var i=0; i < missingFields.length; i++) {
				$("#"+missingFields[i]).addClass("error");
				text = " '"+$("#writeReviewForm [for="+missingFields[i]+"]").text();
				text += (i==missingFields.length-1)?"'.":"',";
				$(document.createElement("a"))
					.attr("href", "#"+missingFields[i])
					.append(text)
					.appendTo("#errorMessageFields")
					.click(function(){
						var id = this.href.match(/[^#]\w*$/);
						if(id=="hiddenRating") $("#maprating area:first-child").focus();
						else $("#"+id).focus();
						return false;
					})
				;
				$("#writeReviewForm > span.errorIcon").clone().prependTo("#writeReviewForm [for="+missingFields[i]+"]").show();
			}
			$("#writeReviewForm div.errorMessage").show().attr("tabindex", "-1");
			// MSIE can not manage to focus the field without timeout
			window.setTimeout('$("#writeReviewForm div.errorMessage").focus();', 100);
			return false;
		}
	 	if(urchinurl!='undefined' && !urchinurl=='') {
 		try {
 			urchinTracker(urchinurl + "/sent");
 		    } catch (err) {
 		     // Errorhandling no needed at this point
 		    }
	 	}
	    // var queryString = $.param(formData);
	    // alert('About to submit: \n\n' + queryString);
	},

	validateForm: function() {
		try {
			$("#errorMessageFields").empty();
			$("#" + $(this).attr("id") + " div.errorMessage").removeAttr("tabindex").hide();
			$("#" + $(this).attr("id") + " fieldset span.errorIcon").remove();
			$("#" + $(this).attr("id") + " :input").removeClass("error");
			$("#" + $(this).attr("id") + " select").removeClass("error");

			var missingFields = new Array();
			$.each($("#" + $(this).attr("id") + " [aria-required='true']"), function() {
					if(($(this).is("input[type='checkbox']") && !$(this).is(":checked")) || $(this).val().length == 0){
						missingFields.push($(this));
					} else if($(this).attr("id") == "captchaInput" && eval($("#captcha").text().substr(0, 5)) != $(this).val()) {
						missingFields.push($(this));
					}
				});

			if (missingFields.length > 0){
				var text;
				for (var i=0; i < missingFields.length; i++) {
					missingFields[i].addClass("error");
					text = " '"+$("#" + $(this).attr("id") + " [for="+missingFields[i].attr("id")+"]").text();
					text += (i==missingFields.length-1)?"'.":"',";
					$(document.createElement("a"))
						.attr("href", "#"+missingFields[i].attr("id"))
						.append(text)
						.appendTo("#errorMessageFields")
						.click(function(){
							var id = this.href.match(/[^#]\w*$/);
							if(id=="hiddenRating") $("#maprating area:first-child").focus();
							else $("#"+id).focus();
							return false;
						})
					;
					$("#" + $(this).attr("id") + " > span.errorIcon").clone().insertBefore(missingFields[i]).show();
				}
				$("#" + $(this).attr("id") + " div.errorMessage").show().attr("tabindex", "0");
				// MSIE can not manage to focus the field without timeout
				curBraunForm = $(this).attr("id"); // needs to be global for window.timeout
				window.setTimeout('$("#" + curBraunForm + " div.errorMessage").focus();delete curBraunForm;', 100);
				return false;
			}
			return true;
		} catch(e) {
			alert(e);
		}
		return false;
	},
	
	resetErrorMessage: function(){
		$("#errorMessageFields").empty();
		$("#writeReviewForm div.errorMessage").removeAttr("tabindex").hide();
		$("#writeReviewForm label span.errorIcon").remove();
		$("#writeReviewForm :input").removeClass("error");
	},

	reviewSent: function(responseText, statusText){
		$('#writeReviewInput').hide();
		if(statusText == 'success' && responseText == 'true') {
			$('#writeReviewSent').show();
		} else {
			$('#writeReviewError').show();
		}
		$("#writeReview").focus();
	},

	showTermsConditions: function() {
		var curId = $(this).attr("id").substr(0,$(this).attr("id").length-4);
		if($("#"+curId).length){
			$("#"+curId).show();
			$("#writeReview").hide();
		} else {
			$("#writeReview").clone().attr("id",curId).attr("tabindex","-1").appendTo("#stageVisual");
			$("#"+curId+" .middle div[id]").remove();
			$("#"+curId+" .middle").append('<div id="'+curId+'Text"></div>');

			$("#"+curId+" a.close").click(function(){
	 		 	$("#writeReview").show();
				$(this).parents().filter('div.layer').hide();
				$("#"+curId+"Link").focus();
	 		 	return false;
	 		 });

			try {
				$.ajax({
					url: $(this).attr('name'),
					cache: false,
					success: function(html){
						if (html.indexOf("<body>")== -1){
							$("#"+curId+"Text").append(html);
							$("#writeReview").hide();
						} else {
							$("#"+curId).remove();
							$("#"+curId+"Link").focus();
						}
					},
					error: function(event, request, settings){
						$("#"+curId).remove();
						$("#"+curId+"Link").focus();
					}
				});
			} catch (error) {
				$("#"+curId).remove();
				$("#"+curId+"Link").focus();
			}
		}
		$("#"+curId).focus();
		return false;
	},

	initProductReview: function() {
		var layerX;
	 	var layerY;
	 	var layerObj = $(this).parents().filter('li, td.compare').children('div.layer');
		// RAH 15.06.09 - urchin tracking is deactivated
		// comment this in..
	 	var urchinurl = escape($(this).attr('urchinurl'));
		// comment this out
		//var urchinurl;
		// END: RAH 15.06.09 - urchin tracking is deactivated 

	 	if(urchinurl!='undefined' && !urchinurl=='') {
			try {
				urchinTracker(urchinurl);
			} catch (err) {
				// Errorhandling no needed at this point
			}
	 	}

	 	if(layerObj.hasClass('layer')) {
	 		var curId = 'writeReview';
	 		layerObj.attr('id', curId);
	 		$(this).attr('idlayer', curId);
	 		layerObj.appendTo("#stageVisual");
	 	} else {
			layerObj = $(document.getElementById($(this).attr('idlayer')));
	 	}

		$('div.layer').hide();

		layerObj.attr("aria-live","assertive").show().attr("tabindex", "-1").focus();

		//BRAUN.initProductReviewSettings();
		$('#writeReviewForm').ajaxForm( { beforeSubmit: BRAUN.validateReview, success: BRAUN.reviewSent, error: BRAUN.reviewSent} );

		if ($(this).parents("#sidebar").length > 0) {
			layerX = $(this).offset().left - layerObj.width() - 11;

			if($(this).offset().left < layerObj.width() + 31)
				layerX = 20;
		}else {
			layerX = $(this).offset()['left'] + $(this).width()+ 40;

			if(layerX + layerObj.width() > $("#wrapper").width() + $("#wrapper").offset().left)
				layerX = $("#wrapper").width() + $("#wrapper").offset().left - layerObj.width() - 20;
		}

		layerY = $(this).offset()['top'] - 55;

		layerObj.css('top',layerY).css('left',layerX);
		
		// init after positioning of layer, to get captcha in right position
		BRAUN.initProductReviewSettings();

		if ($(document).scrollTop()>=layerObj.offset()['top']) {
			var diff = layerObj.offset()['top']-$(document).scrollTop();
			$(document).scrollTop($(document).scrollTop()+diff);
		} else if (($(document).scrollTop()+$(window).height())<=(layerObj.offset()['top']+layerObj.height())) {
			var diff = (layerObj.offset()['top']+layerObj.height())-($(document).scrollTop()+$(window).height());
			$(document).scrollTop($(document).scrollTop()+diff);
		}

		if(!layerObj.attr('namics_init')) {
			// only init the 'star' events, when needed (not above in init section)
			BRAUN.initProductReviewRating();

			if($(this).parents("#sidebar").length > 0){
				layerObj.addClass("right");
			}

 			layerObj.attr("namics_init", "true");
		}

		return false;
	},

	initBuyNow: function() {

		if (!$(this).attr('rel') || !$(this).attr('rel').length)
			return true;
		else {
			var layerX;
			var layerY;
			var urchinBuyNowUrl;
			
			var requestURL = document.location.href.split(/\.html/);
			
			var layerObj = $(this).parents().filter('td.compare, div.buyNow').children('div.layer');

			
			if (layerObj.hasClass('layer')) {
				var curId = '@' + new Date().getTime();
				layerObj.attr('id', curId);
				$(this).attr('idlayer', curId);
				layerObj.appendTo("#stageVisual");
			}
			else {
				layerObj = $(document.getElementById($(this).attr('idlayer')));
			}

			var urchinId = layerObj.attr('rel');
			
			if(urchinId!='undefined' && urchinId!='') {
				urchinBuyNowUrl = requestURL[0] + "/layer-buynow-" + urchinId; 
			}			
			
			$('div.layer').hide();
			
			if(urchinBuyNowUrl!='undefined' && urchinBuyNowUrl!='') {
				try {
					urchinTracker(urchinBuyNowUrl);
				} catch (err) {
					// Errorhandling no needed at this point
				}
		 	}
		 	
			layerObj.show();

			if (!layerObj.attr('namics_init')) {

				layerMiddleW = 362;
				layerW = layerMiddleW + 75;

				layerObj.find('div.middle').width(layerMiddleW);

				//layerX = $("#wrapper").offset().left+340;
				layerX = $(this).offset()['left'] - Math.floor(layerObj.width() / 2) + 46;
				layerY = $(this).offset()['top'] - 80;

				if (layerX + layerObj.width() > +$("#wrapper").width() + $("#wrapper").offset().left) {
					layerX = ($("#wrapper").width() - layerObj.width()) + $("#wrapper").offset().left - 20;
				}
				layerObj.css('top', layerY).css('left', layerX);


				layerObj.attr("namics_init", "true");

				if ($(document).scrollTop() >= layerObj.offset()['top']) {
					var diff = layerObj.offset()['top'] - $(document).scrollTop();
					$(document).scrollTop($(document).scrollTop() + diff);
				}
				else
					if (($(document).scrollTop() + $(window).height()) <= (layerObj.offset()['top'] + layerObj.height())) {
						var diff = (layerObj.offset()['top'] + layerObj.height()) - ($(document).scrollTop() + $(window).height());
						$(document).scrollTop($(document).scrollTop() + diff);
					}
			}
			
			$('div.buyNowAnswer > *', layerObj).remove();
			$('p.buyNowError', layerObj).hide();
			$('div.buyNowWait', layerObj).show();
			

			try {
				$.ajax({
					url: requestURL[0] + ".buynowrequest.html?" + $(this).attr('rel'),
					cache: false,
					success: function(html){
						$('div.buyNowWait', layerObj).hide();
						if (html.indexOf('<html') == -1 && html.indexOf('id="onlineShops"') > 0) {
							$('div.buyNowAnswer', layerObj).append(html);
						}
						else {
							$('div.buyNowWait').prev().hide();							
						}
					},
					error: function(event, request, settings){
						$('div.buyNowWait', layerObj).hide().prev().hide();
					}
				});
			}
			catch (error) {
				$('div.buyNowWait', layerObj).hide().prev().hide();
			}

			return false;
		}
	},

	initLayer: function() {
		var arrowY;
	 	var layerX;
	 	var layerY;

	 	var layerObj = $(this).parents().filter('th.first, li').children('div.layer');
		// RAH 15.06.09 - urchin tracking is deactivated
		// comment this in..
	 	var urchinurl = escape($(this).attr('urchinurl'));
		// comment this out
		//var urchinurl;
		// END: RAH 15.06.09 - urchin tracking is deactivated 
	 	if(urchinurl!='undefined' && !urchinurl=='') {
	 		try {
	 			urchinTracker(urchinurl);
	 		    } catch (err) {
	 		     // Errorhandling no needed at this point
	 		    }
	 	}

	 	if(layerObj.attr('class') == 'layer') {
	 		var curId = '@' + new Date().getTime();
	 		layerObj.attr('id', curId);
	 		$(this).attr('idlayer', curId);
	 		layerObj.appendTo("#stageVisual");
	 	} else {
	 		layerObj = $(document.getElementById($(this).attr('idlayer')));
	 	}


	 	$('div.layer').hide();

	 	layerObj.show();


		if(!layerObj.attr('namics_init')) {
 		 	// position the arrow
 			arrowY = Math.floor(layerObj.height()/2)-13;
 			layerObj.find('div.arrow').css('top',arrowY);

 			// position the layer. layerX is a constant.
 			var thisParents = $(this).parents();

 		 	//layerX = 340;
 		 	layerX = $("#wrapper").offset().left + 340;
 		 	layerY = $(this).offset()['top'] - Math.floor(layerObj.height()/2)+9;


			// if there is a flash element
			if (layerObj.find('embed').width()) layerMiddleW = layerObj.find('embed').width() + 1;
			// if there is an image
			else if (layerObj.find('img').width()) layerMiddleW = layerObj.find('img').width() + 1;
			// if there is no element set fix width
			else layerMiddleW = 356;
			layerMiddleW = Math.max(230, layerMiddleW);
			// check for too wide inline element
			if (layerMiddleW>580) layerMiddleW = 580;
			layerW = layerMiddleW + 75;


			// !! >> do not set css width to the layerObj -> IE6 will crash
			//layerObj.css('top',layerY).css('left',layerX).css('width',layerW);

			layerObj.find('div.middle').width(layerMiddleW);
			if(layerX + layerObj.width() >  + $("#wrapper").width() + $("#wrapper").offset().left) {
				layerX = ($("#wrapper").width() - layerObj.width()) + $("#wrapper").offset().left - 20;
			}
 			if(layerY < 0) layerY = 0;
			
			layerObj.css('top',layerY).css('left',layerX);

 			layerObj.attr("namics_init", "true");

			if ($(document).scrollTop()>=layerObj.offset()['top']) {
				var diff = layerObj.offset()['top']-$(document).scrollTop();
				$(document).scrollTop($(document).scrollTop()+diff);
			} else if (($(document).scrollTop()+$(window).height())<=(layerObj.offset()['top']+layerObj.height())) {
				var diff = (layerObj.offset()['top']+layerObj.height())-($(document).scrollTop()+$(window).height());
				$(document).scrollTop($(document).scrollTop()+diff);
			}
		}
		return false;
	},

	// Slider for large amout of products to display
	initSlider: function() {
		if ($('div.sliderGallery').length) {
			var container = $('div.sliderGallery');
			var ul = $('ul', container);
			ul.width($(ul).children().size() * $('li', ul).innerWidth());
			
			var diff = $('div.sliderGallery ul').width() - $('div.sliderGallery').width();
			 $('div.handle', container).slider({
				 animate: true,
				 min: 0,
				 max: diff,
				 change: function(e, ui) { ul.css('left', ui.value * -1 - 26); },
				 slide: function(e, ui) { ul.css('left', ui.value * -1 -26 );}
			});
			 
			var handleOffset = $('div.handle', container).offset();
			$('div.slider', container).click( function(e) {
				if(e.pageX < handleOffset.left) {
					ul.css('left', -26 );
					$('div.handle a', container).css('left', 0);
				} else {
					ul.css('left', diff * -1 -26 );
					$('div.handle a', container).css('left', '100%');
				}
			});
		}
	},

	// slider for tables with too much rows
	initTableSlider: function(){
		if ($('div.sliderTable table').length) {
			var container = $('div.sliderTable');
			var items = $('thead tr', container).children('th').size();
			items++; //add one more to count the label
			var maxItems = 5; // max rows to display (includes the label)
			var imgHeight = 0;
			var imgBiggest;
			if ($('div#wrapper').width()<'800') maxItems = 4; // in 800px mode show only 3 items per page
			// only if there are more than maxItems rows to display
			if (items > maxItems) {
				var hiddenCols = new Array();
				for(i=(maxItems+1);i<=items;i++) hiddenCols[i] = i;
				
				// find highest cell before hidden
				$('thead th img', container).each(function(){
					if ($(this).height()+$(this).next().height() > imgHeight) {
						imgHeight = $(this).height()+$(this).next().height();
						imgBiggest = $(this);
					} 
				});
				var imgInnerOffset = imgHeight+12+parseInt(imgBiggest.css('margin-bottom'));
				
				// hide table cols
				$('table.sliderTableContent', container).hideColumns(hiddenCols);
				// initialize last col
				$('#compare-head-'+ (maxItems-1), container).addClass('virtual-last');

				// initialize next link
				$('div.sliderTableControlls .next', container)
					.addClass('next-active')
					.click(function(){
						BRAUN.tableSliderSlide(container,items,maxItems);
					})
				;
				
				// final positioning of arrows
				var controlls = $('.sliderTableControlls');
				var imgOffset = $('thead', container).height() - imgInnerOffset;
				var newtop = Math.max(container.offset().top-10, container.offset().top + imgOffset - 21);
				var newLeft = parseInt($('div.prev', controlls).css('left'))+($('thead td.first', container).width()-287);
				$('div', controlls).css('top', newtop);
				$('div.prev', controlls).css('left', newLeft);
				
			} else {
				$('.sliderTableControlls div').hide();
			}
		}
	},
	tableSliderLastShown: function(items) {
		// get last item no which is in state display=none
		var lastShown = 1;
		// get css display property
		if ($.browser.msie) var displayProperty = 'block';
		else var displayProperty = 'table-cell';
		// loop through all cols
		for(i=1;i<items;i++) if ($('#compare-head-' + i).css('display')==displayProperty) lastShown = i;
		// return last displayed item
		return lastShown + 1; // add one to get number of id
	},
	tableSliderSlide: function(container, items, maxItems, direction){
		if (direction==undefined) direction = 'next';
		if (direction == 'next') {
			var newAfter = BRAUN.tableSliderLastShown(items) + 1;
			var newBefore = newAfter - maxItems + 1;
			var virtualLastElement = newAfter - 1;
			var virtualLastBefore = virtualLastElement - 1;
		} else {
			var newAfter = BRAUN.tableSliderLastShown(items);
			var newBefore = newAfter - maxItems + 1;
			var virtualLastElement = newAfter - 2;
			var virtualLastBefore = virtualLastElement + 1;
		}
		// if the newAfter col is the last col in the table
		if (newAfter == items && direction == 'next') {
			$('div.sliderTableControlls .next').removeClass('next-active').unbind('click');
		// if the newAfter col is the last col in the table but direction is prev
		} else if (newAfter==items && direction=='prev') {
			$('div.sliderTableControlls .next')
				.addClass('next-active')
				.bind('click', function(){
					BRAUN.tableSliderSlide(container,items,maxItems);
				})
			;
		}
		// if the newBefore col is the first col in the table
		if (newBefore == 2 && direction == 'prev') {
			$('div.sliderTableControlls .prev').removeClass('prev-active').unbind('click');
		// if the newBefore col is the first col in the table but direction is next
		} else if (newBefore==2 && direction=='next') {
			$('div.sliderTableControlls .prev')
				.addClass('prev-active')
				.bind('click', function(){
					BRAUN.tableSliderSlide(container,items,maxItems,'prev');
				})
			;
		}
		// toggle table cols
		$('table.sliderTableContent', container).toggleColumns([newAfter]);
		$('#compare-head-'+ virtualLastBefore, container).removeClass('virtual-last');
		$('#compare-head-'+ virtualLastElement, container).addClass('virtual-last');
		$('table.sliderTableContent', container).toggleColumns([newBefore]);
	},
	readLanguageSelectCookieAndRedirect : function(){
		//first check if we are on languageselect page. therefore we check if #saveLanguageChoice exists
		if($('#saveLanguageChoice').length > 0){
			var i=0;  //Suchposition im Cookie
			var name = "braunlanguageselection";
		    var suche = name+"=";
		    var value = "";
		    while (i<document.cookie.length){
		      if (document.cookie.substring(i, i+suche.length)==suche){
		         var ende = document.cookie.indexOf(";", i+suche.length);
		         ende = (ende>-1) ? ende : document.cookie.length;
		         var cook = document.cookie.substring(i+suche.length, ende);
		         value = unescape(cook);
		      }
		      i++;
		   }
		   if(value != "" && isAuthor!=true){	//if entry found in cookie, redirect
		   		document.location.href=value;
		   }
	   }
	},

	initReadMoreLinks: function(){
		$('span.fullDescription').hide();
		$('span.readMoreLink').show();

		$("span.readMoreLink a").click(function () {
      		var clickedElement = $(this).parent();
			clickedElement.prev('span.fullDescription').show();
			clickedElement.hide();
			return false;
    	});
	}
}

// execute when DOM is available
$(document).ready(function() {
	// run the PNG Fix for IE6
	if($.browser.msie && $.browser.version=='6.0'){
		$(document).pngFix();
	}
	// read cookie and redirect if we are on a languageselect page
	BRAUN.readLanguageSelectCookieAndRedirect();
	// init the slider for too large tables
	BRAUN.initTableSlider();
	BRAUN.initReadMoreLinks();

	if (resIs800) {
		if($('div.sliderGallery ul li').length > 3) {
			$('div.sliderGallery .slider').css("visibility", "visible");
			BRAUN.initSlider();
		}
	} else {
		if($('div.sliderGallery ul li').length > 5) {
			$('div.sliderGallery .slider').css("visibility", "visible");
			BRAUN.initSlider();
		}
	}

	BRAUN.init();
});

//-> wird das evtl in anderen browsern gebraucht?
//window.onload = function () {
//	BRAUN.initSlider();
	//$("#example").slider();
	//$("#ex2").slider();
//};


function isChild(objParent, objChild) {
	if(!objParent || !objChild) {
		return false;
	}
	while(true) {
		try {
			if(objChild == objParent) {
				return true;
			}
			var objChild = objChild.parentNode;
			if(!objChild) {
				return false;
			}
		} catch(e) {
			return false;
		}
	}
}
