var g_pageWidth = 839;
var g_personalizedContentXML;

var agt=navigator.userAgent.toLowerCase();
var isMac = ((agt.indexOf('macintosh')!=-1))?true:false;
var isExplorer = ((agt.indexOf('msie')!=-1))?true:false;
var isIE6 = ((navigator.userAgent.indexOf("MSIE 6.") != -1) && (navigator.userAgent.indexOf("Opera") == -1));
var isOpera = ((agt.indexOf('opera')!=-1))?true:false;
// var g_BasketHoverTimeout = 1800; // Millisekunden (3000 Millisekunden sind 3 Sek.)
var g_BasketHoverTimeout = 1;
var g_BasketAddHoverTimeout = 3000;
var g_runOnceBasketAdd = false;


// Variables for product page
currentProductNumber = "";
currentProductInfoTextId = "";
defaultProductImageUrl = "";
defaultProductPrice = "";
defaultProductPriceNet = "";



window.onload = function ()
{
    initAll();
};



function initAll()
{
	FillPreviewBasket();
    positionFooter();    

    HideIfLoggedIn("ifLoggedOut");
    ShowIfLoggedIn("ifLoggedIn");
    
    LoadPersonalizedContent();
	TurnHoverInfoScriptingOn();
}

/* Flash Homepage Banner*/

var flashFallbackImage = null;
var flashHomepageBanner = null;
var flashHomepageBannerLink = null;

function ShowFlashHomepageBanner()
{
    if (flashHomepageBanner != null && flashHomepageBanner != "")
    {        
        var requiredMajorVersion = 8;        
        var requiredMinorVersion = 0;        
        var requiredRevision = 0;

        var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

        if (hasRequestedVersion && !isMac) 
        {
            var rootPath = "/all/media/flash/shop/homepagebanner/";
            var params = flashHomepageBanner.split(";");
        
	        var so = new SWFObject(rootPath + params[0], "main", "839", "359", "8", "#FFFFFF",false); 
	        so.addParam("loop","true");
	        so.addParam("menu","true");
	        so.addParam("quality","high");
	        so.addParam("wmode","opaque");
	        so.addVariable("xmlPath",rootPath + params[1]);	        
	        if (flashHomepageBannerLink != null)
	        {
	            so.addVariable("targetLink",flashHomepageBannerLink);
	        }
	        so.write("flashhomepagebanner");        	
        } 
        else 
        {  
            ShowFlashFallback();
        }
    }
    else 
    {  
       ShowFlashFallback();
    }
}

function ShowFlashFallback()
{
    var element = document.getElementById("flashhomepagebanner");
    if (element)
    {
        var alternateContent = '<img src="'+flashFallbackImage+'" alt="" id=\"flashfallbackimage\" style=\"display:block;\"/>';	     
      
        if (flashHomepageBannerLink != null && flashHomepageBannerLink != '')	            
            alternateContent = '<a href="' + flashHomepageBannerLink + '">' + alternateContent + '</a>';	            

        element.innerHTML = alternateContent;
    }
}


/* Personalized Content */

var usePersonalizedContent = false;

var currentPool = null;
var currentLanguage = null;
var currentProduct = null;
var useRecentProducts = false;
var useExtendedBasket = false;

function LoadPersonalizedContent()
{
    if (usePersonalizedContent)
    {
   
        //url zusammenfuegen
		
        var url = "/PersonalizedContent.aspx?sitemappool=" + currentPool + "&sitemaplanguage=" + currentLanguage;
        
		if (currentProduct) 
		{
			url += "&recentarticleadd=" + escape(currentProduct);
			
			// dieser Parameter ist immer da. Server-Code kuemmert sich darum, ob die Knote "basketadd" geschrieben werden muss.
			// BUGFIX 2007-12-10 : Zeige kein Layer beim Artikel in den WK stellen, falls currentProduct nicht ausgefüllt wurde. 
			// Das führt zum fehlerhaften Verhalten beim großen Warenkorb (Bestellschritt 1), wenn die Anzahl des Artikels durch + und - geändert wird, 
			// wird immer das zuletzt hinzugefügte Produkt angezeigt, und nicht das gerade bearbeitete.
			url += "&showbasketadd=true";
		}
         
        if (useRecentProducts)
			url += "&showrecentarticlelist=true";
         
		if (useExtendedBasket)
			url += "&showbasketinfo=true";

        //personalized Content laden
        ProcessPersonalizedContent(url);
		
    }
}


/* Mausbewegung */
var mouseX = 0, mouseY = 0;
var considerOffset = true;

function GetMouseXY(e)
{
	if (window.event)
	{
	    considerOffset = false;
		mouseX = window.event.clientX;
		mouseY = window.event.clientY;
	}
	else
	{
		mouseX = e.pageX;
		mouseY = e.pageY;
	}		
    
    moveHoverInfo();
}

// document.onmousemove = GetMouseXY;

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

/* HoverInfo */

var currentHoverInfo = null;
function showHoverInfo(e)
{    
    if (currentHoverInfo && currentHoverInfo != document.getElementById(e))
        hideHoverInfo(currentHoverInfo);
    
    currentHoverInfo = document.getElementById(e);

    if (currentHoverInfo)
    {
        moveHoverInfo();
        currentHoverInfo.style.display = "block";
    }
}

function hideHoverInfo(e)
{
    if (currentHoverInfo)
    {
        currentHoverInfo.style.display = "none";
        currentHoverInfo = null;        
    }
}

function moveHoverInfo()
{
    if (currentHoverInfo)
    {		
        var offsetY = 0;
        var offsetX = 0;
        
        if (isExplorer || isOpera)
        {
           offsetY = GetScrollOffsetY();
        }    
    
		currentHoverInfo.style.top = ( mouseY + 15 + offsetY) + "px";
		currentHoverInfo.style.left = ( mouseX - 120 + offsetX) + "px";		
    }
}

function GetScrollOffsetY()
{
    var offsetY = 0;    
    if (self.pageYOffset) // all except Explorer
    {        
        offsetY = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)
        // Explorer 6 Strict
    {        
        offsetY = document.documentElement.scrollTop;
    }
    else if (document.body) // all other Explorers
    {        
        offsetY = document.body.scrollTop;
    }
    
    return offsetY;
}

function GetScrollOffsetX()
{    
    var offsetX = 0;
    if (self.pageYOffset) // all except Explorer
    {
        offsetX = self.pageXOffset; 
    }
    else if (document.documentElement && document.documentElement.scrollTop)
        // Explorer 6 Strict
    {
        offsetX = document.documentElement.scrollLeft;        
    }
    else if (document.body) // all other Explorers
    {
        offsetX= document.body.scrollLeft;
    }
    
    return offsetX;
}

/* Navigation */
var nav = new Array();
nav[0] = null;
nav[1] = null;

var overNav = false;

function checkNav(setTimer)
{
    if (setTimer)
    {
        overNav = false;
        setTimeout('checkNav(false)',0);        
    }
    else
    {
        if (!overNav)
        {
            outNav0(nav[0]);
        }
    }
}

function overNav0(e)
{
	
    if (nav[0])
       outNav0(nav[0]);

    nav[0] = e;
    
    var sub = e.getElementsByTagName("span");
    for(var i=0; i< sub.length; i++)
    {
        sub[i].style.display = "block";
		XXX.style.display = "";
		Layer7.style.display = "none";
    }
    
    overNav = true;

}

function outNav0(e)
{
	XXX.style.display = "none";
    if (e)
    {
        var sub = e.getElementsByTagName("span");
        for(var i=0; i< sub.length; i++)
        {
            sub[i].style.display = "none";
			Layer7.style.display = "";
        }
    }
    
    nav[0] = null;
}

function overNav1(e)
{
    nav[1] = e;   
    overNav = true;
}

function outNav1(e)
{
    nav[1] = null;
    overNav = false;
}

/**/

function positionFooter()
{
    var footer = document.getElementById("footer");
    var shippingpriceinfo = document.getElementById("shippingpriceinfo");
    var search = document.getElementById("search");
    
   setDocumentSize();

    if (footer) { footer.style.bottom = "-1px"; }
    if (search) { search.style.bottom = "-1px"; }
    if (shippingpriceinfo) { shippingpriceinfo.style.bottom = "26px"; }
}

function setDocumentSize() {
	var size = 500; //160 + 105 + 85;

	var elm = document.getElementsByTagName("a");
	
	if (elm) {
		for (i = 0; i < elm.length; i++){
			var className = elm[i].className;
			
			switch (true) {
				case containsStr(className, "navigationBelowHome"):
					size += 24;
				break;
				case containsStr(className, "subNavigationChapter"):
				case containsStr(className, "subSubNavigation"):
				case containsStr(className, "subSubNavigationActive"):			
				    if (document.body.className != "home")					
					    size += 20; // 1 line: 16, 2 lines: 31;					
				break;		
			}
		}
	}	
	
	var elm = document.getElementById("categoryItems");
	
	if (elm != null) {
		elm = elm.getElementsByTagName("div");
		var countCateroryItems = Math.ceil(elm.length/2);
		
		var heightOfCategoryItem = 128;
		var offset = 184;
		if (((countCateroryItems * heightOfCategoryItem)+offset)>size)
		{
			size = (countCateroryItems * heightOfCategoryItem);
			size += offset; // Offset
		}
		
	}
	
	/* Homepage Thumbnails (highlights */
	var elm = document.getElementById("homepageProductThumbnails");
	
	if (elm != null) {
		elm = elm.getElementsByTagName("a");
		var countThumbsPerRow = 6;
		var countThumbnailItems = elm.length;
		var countThumbnailRows = Math.ceil(countThumbnailItems/countThumbsPerRow);
		
		var heightOfThumbnailItem = 128;
		var offset = 159;
		if (document.body.className == "home" && document.getElementById('shippingpriceinfo'))
		{
			offset += 240;
		}
		
		// debug
		if (((countThumbnailRows * heightOfThumbnailItem)+offset)>size)
		{
			size = (countThumbnailRows * heightOfThumbnailItem);
			size += offset; // Offset
		}
		
	}
	
	var elm = document.getElementById('productDescription');
	if(elm && elm.innerHTML.length > 120)
	{	   
	    var textHeight = ((elm.innerHTML.length / 60) -2) * 15;	    
	    size += textHeight;
	}

	var elm = document.getElementsByTagName("div");
	
	if (elm) {
		for (i = 0; i < elm.length; i++){
			if (elm[i].className == "content") {
				//elm[i].style.border = "1px solid red";
				elm[i].style.minHeight = size + "px";
				elm[i].style.height = size + "px";
				break;			
			}
		}
	}
}

function ShowIfLoggedIn(id)
{
    if ( isLoggedIn() ) {
        var elm = document.getElementById(id);
        if (elm) {
            elm.style.display = "inline";
        }
    }
}

function HideIfLoggedIn(id)
{
    if ( isLoggedIn() ) {
        var elm = document.getElementById(id);
        if (elm) {
            elm.style.display = "none";
        }
    }
}

function isLoggedIn()
{
    var status = GetCookieValue("SSO_LOGIN");
    if (status == null || status=='false') { status = false; }
    return status;
}

function containsStr(s, find) {
	return (s.indexOf(find) != -1);
}

function selectAllInput(elm)
{
    if (elm)
    {
        elm.focus();
        elm.select();
    }
}

function showProductImageLayer()
{
	ieToggleDropDowns(getListIEDropDowns(), true);
	
	var elmShade = document.getElementById("productImageLayerShade");
    var elmContent = document.getElementById("productImageLayer");
	
	currentImage = 0;
	
	switchProductImage(currentImage);

    elmShade.style.display = "block";
    elmContent.style.display = "block";

}

function hideProductImageLayer()
{
	// IE Hack for dropdowns
	ieToggleDropDowns(getListIEDropDowns(), false);
	
	var elmShade = document.getElementById("productImageLayerShade");
    var elmContent = document.getElementById("productImageLayer");

    elmShade.style.display = "none";
    elmContent.style.display = "none";
}

function switchProductImage(index)
{
	// Check borders
	if (index >= productImageList.length) index = productImageList.length-1;
	if (index < 0) index = 0;
		
	// Define elements
	var elmBtnLeft = document.getElementById("btnLeft");
	var elmBtnRight = document.getElementById("btnRight");
	var elmImage = document.getElementById("productImageMore");
	var elmCaption = document.getElementById("captionCount");
	
	// Change image source
	if (elmImage) {
		var regAmperson = new RegExp("&amp;", "gi");
		var imageUrl = productImageList[index].replace(regAmperson, "&");
		elmImage.src = imageUrl;
	}
	
	// Set left/right buttons
	if (index > 0 && elmBtnLeft != null)
	{
		elmBtnLeft.style.display = "block";
	}
	else if (elmBtnLeft != null)
	{
		elmBtnLeft.style.display = "none";
	}

	if (index < (productImageList.length-1) && elmBtnRight != null)
	{
		elmBtnRight.style.display = "block";
	}
	else if (elmBtnRight != null)
	{
		elmBtnRight.style.display = "none";
	}
	
	// update position display
	if (elmCaption != null)
	{
		elmCaption.innerHTML = (index+1) + "/" + productImageList.length;
	}
	
	
}


function switchProductImageLeft()
{
	currentImage = currentImage-1;
	switchProductImage(currentImage);
}

function switchProductImageRight()
{
	currentImage = currentImage+1;
	switchProductImage(currentImage);
}


function showProductInfoLayer()
{
	ieToggleDropDowns(getListIEDropDowns(), true);
	
	var elmShade = document.getElementById("productInfoLayerShade");
    var elmContent = document.getElementById("productInfoLayer");

    elmShade.style.display = "block";
    elmContent.style.display = "block";
	
	var elmInnerContent;
	if (currentProductInfoTextId != "") elmInnerContent = document.getElementById(currentProductInfoTextId);
	else elmInnerContent = document.getElementById("productinfo_default");
	
	if (elmInnerContent != null) elmInnerContent.style.display = "block";

}

function hideProductInfoLayer()
{
	// IE Hack for dropdowns
	ieToggleDropDowns(getListIEDropDowns(), false);
	
	var elmShade = document.getElementById("productInfoLayerShade");
    var elmContent = document.getElementById("productInfoLayer");

    elmShade.style.display = "none";
    elmContent.style.display = "none";
	
	var elmInnerContent;
	if (currentProductInfoTextId != "") elmInnerContent = document.getElementById(currentProductInfoTextId);
	else elmInnerContent = document.getElementById("productinfo_default");
	
	if (elmInnerContent != null) elmInnerContent.style.display = "none";

}


function changeVariantSelection(elmCalling)
{
	var elmFields = new Array(variantTypes.length);
	var values = new Array(variantTypes.length);
	var elmProductIDField = document.getElementById("ProductID");
	elmProductIDField.value = "";


	for (i=0; i<variantTypes.length; i++)
	{
		elmFields[i] = document.getElementById(variantTypes[i]);
		values[i] = elmFields[i].value;
	}

	for(i=0;i<variantList.length;i++)
	{
		// The first option field was changed, fill the second one (if any)
		if (variantList[i][0] == values[0])
		{
			// Changed the first level
			if (elmCalling == elmFields[0])			
			{
				// There is a second level, which now is to be filled
				if(isArray(variantList[i][1]) && elmFields[1] != null)
				{
					emptySelectList(elmFields[1]);
					for (j=1; j<variantList[i].length; j++) 
					{
						appendOption(elmFields[1], variantList[i][j][0], variantList[i][j][0]);
						// Pre-select the first product (if available)
						if (j == 1)
						{
							showVariant(variantList[i][j]) ;
						}		
					}
				}
				// there is no second level
				else
				{
					showVariant(variantList[i]) ;
				}
			}
			// Changed the second level
			else 
			{
				if(isArray(variantList[i][1]) && elmFields[1] != null)
				{
					for (j=1; j<variantList[i].length; j++) 
					{
						if (variantList[i][j][0] == values[1])
						{
							showVariant(variantList[i][j]) ;
						}
					}
				}
			}
		}
	}
}

function initVariantSelection()
{
	var elmFields = new Array(variantTypes.length);
	var elmProductIDInputField = document.getElementById("ProductID");
	var elmPrice = document.getElementById("price");
	var elmPriceNet = document.getElementById("netprice");
	var elmProductImage = document.getElementById("productimage");
	
	// Save the default values for elements likely to change
	if(elmProductImage && elmProductImage.src)defaultProductImageUrl = elmProductImage.src;
	defaultProductPrice = elmPrice.innerHTML;
	defaultProductPriceNet = elmPriceNet.innerHTML;
	
	// Reset the default fields
	elmProductIDInputField.value = "";
	currentProductInfoTextId = "";

	for (i=0; i<variantTypes.length; i++)
	{
		elmFields[i] = document.getElementById(variantTypes[i]);
		emptySelectList(elmFields[i]);
	}

	if (elmFields.length > 0 && elmFields[0] != null)
	{	
		for (i=0; i<variantList.length; i++)
		{
			// Add first level variants
			appendOption(elmFields[0], variantList[i][0], variantList[i][0]);
			
			// Check for second level variants
			if(isArray(variantList[i][1]) && elmFields[1] != null && (i == 0))
			{
				for (j=1; j<variantList[i].length; j++) 
				{	
					// Add second level variants
					appendOption(elmFields[1], variantList[i][j][0], variantList[i][j][0]);
					
					// Pre-select first variant
					if (j == 1)
					{
						showVariant(variantList[i][j]);
					}		
				}
			}
			// There is no second level
			else
			{
				if (i == 0) 
				{
					showVariant(variantList[i]);
				}
			}
		}
	}
}

function showVariant(arrCurrentVariant)
{
	var elmPrice = document.getElementById("price");
	var elmPriceNet = document.getElementById("netprice");
	var elmProductImage = document.getElementById("productimage");
	var elmArticlenumber = document.getElementById("articlenumber");
	var elmProductIDInputField = document.getElementById("ProductID");

	if (isArray(arrCurrentVariant))
	{
		// Product is available
		if (arrCurrentVariant[2]) 
		{
			elmProductIDInputField.value = arrCurrentVariant[1];
			currentProductNumber = arrCurrentVariant[1];
			switchAvailability(true);
		}
		else 
		{
			//elmProductIDInputField.value = "";
      elmProductIDInputField.value = arrCurrentVariant[1];
			currentProductNumber = arrCurrentVariant[1];
			switchAvailability(false);
		}
		
		// article Number
		elmArticlenumber.innerHTML = currentProductNumber;
		
		// price
		if (arrCurrentVariant[3] != null && arrCurrentVariant[3] != "") elmPrice.innerHTML = arrCurrentVariant[3];
		else elmPrice.innerHTML = defaultProductPrice;

		// netprice
		if (arrCurrentVariant[4] != null && arrCurrentVariant[4] != "") elmPriceNet.innerHTML = arrCurrentVariant[4];
		else elmPriceNet.innerHTML = defaultProductPriceNet;

		// imageUrl
		var imageUrl = defaultProductImageUrl;
		if(arrCurrentVariant[5] != null && arrCurrentVariant[5] != "")
		{
			var regAmperson = new RegExp("&amp;", "gi");
			imageUrl = arrCurrentVariant[5].replace(regAmperson, "&");
		}
		if(elmProductImage && elmProductImage.src)elmProductImage.src = imageUrl;

		// description
		if (arrCurrentVariant[6] != null && arrCurrentVariant[6] != "") currentProductInfoTextId = arrCurrentVariant[6];
		else currentProductInfoTextId = "";
		

	}
}



function switchAvailability(available)
{
	var elmLabelAvailability = document.getElementById("availability");
	var elmAddToBasket = document.getElementById("addtobasket");
	
	if(available)
	{
		elmLabelAvailability.style.display = "none";
		if(elmAddToBasket!=null)
			elmAddToBasket.style.display = "block";
	}
	else
	{
		elmLabelAvailability.style.display = "block";
		if(elmAddToBasket!=null)
			elmAddToBasket.style.display = "none";
	}
}

function showPrebookMessage()
{
	alert(currentProductNumber);
}

function appendOption(elmSelect, text, value)
{
  var elmOptNew = document.createElement('option');
  elmOptNew.text = text;
  elmOptNew.value = value;

  try {
    elmSelect.add(elmOptNew, null); // standards compliant; doesn't work in IE
  }
  catch(ex) {
    elmSelect.add(elmOptNew); // IE only
  }
}

function emptySelectList(elmSelect)
{
  while (elmSelect.length > 0)
  {
    elmSelect.remove(elmSelect.length - 1);
  }
}

function setPaymentFormTarget(form, ccMode, creditcardUrl, defaultUrl)
{
	// more than one payment type is available as a choice.
	if(form.paymentmethod[1])
	{
		if(form.paymentmethod[1].checked || ccMode=="direct" || form.sfpCardNumber == null) 
		{
			form.action = defaultUrl;
		}
		else
		{
			form.action = creditcardUrl;
		}
	}
  else
  {
	// this is the case where we have only one payment type.
	// and thus no radio buttons for the payment types to choose from.
	if(form.paymentmethod.value == "cc")
	{
		// credit card url to check.
		form.action = creditcardUrl;
	}
	else
	{
		// bank account
		form.action = defaultUrl;
	}
  }
	return true;
}


function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}

//
// Function ieToggleDropDowns: 
//
// Description: Toggles dropdown visibility in case of a dynamic layer 
// covering them pops up, and has a z-index higher than these. IE does not handle them correctly.
//
// Input: 
// 		strAttr: String Array, whose elements are the <DIV> id's to toggle. See function: getListIEDropDowns() 
//		boolHide: Boolean toggle. true, if the layer should be made visible, false otherwise.
// Returns : none.
function ieToggleDropDowns(strArr, boolHide) {
	// collection of dropdowns
	
	if (strArr.length > 0) {
		for (i=0; i < strArr.length; i++) {
			dd = document.getElementById(strArr[i]);
			if (dd) 
				if (boolHide) 
				{
					dd.style.visibility = 'hidden'
				}
				else
				{
					dd.style.visibility = 'visible';
				}
		}
	}
}

//
// Function getListIEDropDowns():
//
// Description: Builds an array of Dropdowns whose visibility should be toggled 
// in case of a dynamic layer covering them.
// Input: none.
// Returns: String array of <DIV> id's.
function getListIEDropDowns() {
	return (new Array("size","color"));
}



function FillPreviewBasket()
{
	var articlecount = GetCookieValue("shop-basket-articlecount");
    var price = GetCookieValue("shop-basket-price");
	
	// Check if this is the homepage
	var isHomepage = false;
	
	var elm = document.getElementsByTagName("body");
	if (elm) 
	{
		for (i = 0; i < elm.length; i++)
		{
			if (elm[i].className == "home")
			{
				isHomepage = true;
				break;
			}
		}
	}

	if (articlecount == "") {
		articlecount = 0; // IE and maybe other browsers misses cookie information on first start.
	}
	
	if (articlecount == 0)
	{
		WriteHtmlContent("shop-basket-articlecount-inactive", articlecount);
		WriteHtmlContent("shop-basket-price-inactive", price);
		var spanBasket = document.getElementById("previewShoppingBasketInactive");
		if (spanBasket) spanBasket.style.display = "block";
	}

	else if (articlecount > 0)
	{
		var spanBasket = document.getElementById("previewShoppingBasketInactive");
		if (spanBasket) spanBasket.style.display = "none";
		
		WriteHtmlContent("shop-basket-articlecount-active", articlecount);
		WriteHtmlContent("shop-basket-price-active", price);
		var spanBasket = document.getElementById("previewShoppingBasketActive");
		if (spanBasket) spanBasket.style.display = "block";

		var proceedtocashierLink = document.getElementById("proceedtocashierLink");
		if (proceedtocashierLink) proceedtocashierLink.style.display = "block";

	}
		
}

function GetCookieValue(name)
{
	var i=0;
    var suche = name + "=";
	var basketText = "";
	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);
			basketText = unescape(cook);
			i = document.cookie.length;
		}
		i++;
	}
	return basketText;
}

function WriteHtmlContent(name, value)
{
	var divText = document.getElementById(name);
	if (divText)
	{
		divText.innerHTML = value;
	}
}

function gotoUrlNewWinSimple(s)
{
    newWin = window.open(s, "newWin" + getRandomInt(10000));
}


function gotoUrlNewWinDefaultSize(s)
{
    sWidth = 570;
    sHeight = 610;

    sWidth += 20;
    sHeight += 25;
    newWin = window.open(s, "newWin" + getRandomInt(10000), "width=" + sWidth + ",height=" + sHeight + ",left=40,top=40,dependent=yes,location=no,resizable=no,scrollbars=no,status=no");
}

function getRandomInt(max)
{
    return Math.round( Math.random() * (max-1) );
}


function SubmitBasketForm(inputfield)
{
	if(inputfield.value!="")
	{
		var editbasketscript = document.getElementById("editbasketscript"); 
		editbasketscript.value = "true";
		
		var basket = document.getElementById("formcontrol"); 
		basket.submit();
	}
}

function SubmitBasketFormPlusMinus(position, value)
{
	var editbasketscript = document.getElementById("editbasketscript"); 
	editbasketscript.value = "true";
	var plusminusposition = document.getElementById("plusminusposition"); 
	plusminusposition.value = position;
	var plusminusvalue = document.getElementById("plusminusvalue"); 
	plusminusvalue.value = value;
}

function GoArticleReminder(url)
{
	var elmProductIDInputField = document.getElementById("ProductID");
	url += "&article_variantid=" + encodeURI(elmProductIDInputField.value);

	location.href = url;
}

function openLuggageCombinations(url)
{
	var sWidth, sHeight;
	sWidth = 615;
	sHeight = 743;

	var luggComb = gotoUrlNewWinSizeScrollable(s, sWidth, sHeight);
}


function gotoUrlNewWinSizeScrollable(s, sWidth, sHeight)
{
    sWidth += 20;
    sHeight += 25;
    newWin = window.open(s, "newWin" + getRandomInt(10000), "width=" + sWidth + ",height=" + sHeight + ",left=40,top=40,dependent=yes,menubar=no,toolbar=no,location=no,resizable=no,scrollbars=yes,status=no");
}

function gotoUrlNewWinSizeScrollableResizeable(s, sWidth, sHeight)
{
    sWidth += 20;
    sHeight += 25;
    newWin = window.open(s, "newWin" + getRandomInt(10000), "width=" + sWidth + ",height=" + sHeight + ",left=40,top=40,dependent=yes,location=no,resizable=yes,scrollbars=yes,status=no");
}


/* Expandables block (flipflop) */

function expandCollapse(id)
{
    var elm = document.getElementById("expandable_" + id);

    if (elm)
    {
        /* Hack alert -- footer will be hidden temporarily
        to recalculate bottom position correctly.
        */

        var footer = document.getElementById("footer");
        footer.style.display = "none";

        if (elm.style.height != "auto")
        {
            collapseAllElements();
            showElement(id);        
        }
        else
        {
            collapseElement(id);
        }

        positionFooter();
        footer.style.display = "block";
    }
}

function showElement(id) {
    var elm = document.getElementById("expandable_" + id);
    elm.style.height = "auto";

    var h3 = document.getElementById("expandableHead_" + id);
    if (h3) {                
        h3.style.backgroundColor = "rgb(102,102,102)";                 
        h3.style.color = "rgb(255,255,255)";              
        h3.style.backgroundImage = "url(/Images/arrow-lightgray-down.gif)";            
        h3.style.backgroundPosition = "9px 9px";
    }
}

function collapseElement(id) {
    var elm = document.getElementById("expandable_" + id);
    elm.style.height = "19px";

    var h3 = document.getElementById("expandableHead_" + id);
    if (h3) {
        h3.style.backgroundColor = "rgb(204,204,204)";                
        h3.style.color = "rgb(0,0,0)";
        h3.style.backgroundImage = "url(/Images/arrow-gray.gif)";          
        h3.style.backgroundPosition = "11px 7px";
    }
}

function collapseAllElements() {
    var i=1;
    do {
        var elm = document.getElementById("expandable_" + i);
        if (elm) collapseElement(i);
        i++;
    } while(elm);
}



/* is this stuff defined? */
if (!document.ELEMENT_NODE) {
	document.ELEMENT_NODE = 1;
	document.ATTRIBUTE_NODE = 2;
	document.TEXT_NODE = 3;
	document.CDATA_SECTION_NODE = 4;
	document.ENTITY_REFERENCE_NODE = 5;
	document.ENTITY_NODE = 6;
	document.PROCESSING_INSTRUCTION_NODE = 7;
	document.COMMENT_NODE = 8;
	document.DOCUMENT_NODE = 9;
	document.DOCUMENT_TYPE_NODE = 10;
	document.DOCUMENT_FRAGMENT_NODE = 11;
	document.NOTATION_NODE = 12;
}
// ** IE import node Implementierung **


document._importNode = function(node, allChildren) {
	/* find the node type to import */
	switch (node.nodeType) {
		case document.ELEMENT_NODE:
			/* create a new element */
			var newNode = document.createElement(node.nodeName);
			/* does the node have any attributes to add? */
			if (node.attributes && node.attributes.length > 0)
				/* add all of the attributes */
				for (var i = 0, il = node.attributes.length; i < il;)
					newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i++].nodeName));
			/* are we going after children too, and does the node have any? */
			if (allChildren && node.childNodes && node.childNodes.length > 0)
				/* recursively get all of the child nodes */
				for (var i = 0, il = node.childNodes.length; i < il;)
					newNode.appendChild(document._importNode(node.childNodes[i++], allChildren));
			return newNode;
			break;
		case document.TEXT_NODE:
		case document.CDATA_SECTION_NODE:
		case document.COMMENT_NODE:
			return document.createTextNode(node.nodeValue);
			break;
	}
};


function ProcessPersonalizedContent(url)
{
	var req = createXMLHTTPObject();
	if (req.overrideMimeType) req.overrideMimeType('text/xml');
	// else alert("overrideMimeType nicht verfuegbar"); //debug
	
    if (!req) return;
	
	req.open("GET",url,true);	
	//req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
			return;
		}
		
		g_personalizedContentXML = req.responseXML;
		setupPersonalizedContent();
	}
	if (req.readyState == 4) return;
	req.send(null);
}

function setupPersonalizedContent()
{

	var noRecentArticles = false;
	var noBasket = false;
	var basketAdd = false;
	
	// return immediately if the personalized content could not be read.
	if (!g_personalizedContentXML) return;
	
	// Don't go further if the list of recent items is empty.
	if (!(g_personalizedContentXML.documentElement.getElementsByTagName("recentProducts")[0]))
		noRecentArticles = true;
		
	if (!(g_personalizedContentXML.documentElement.getElementsByTagName("baskethover")[0]))
		noBasket = true;
	
	if (g_personalizedContentXML.documentElement.getElementsByTagName("basketadd")[0])
		basketAdd = true;
	
	
	// alert("noRecentArticles: " + noRecentArticles + "\nnoBasket: " + noBasket); //debug
	// alert(g_personalizedContentXML.documentElement.getElementsByTagName("baskethover")[0]); // debug
	
	if (!noRecentArticles)
	{
		var recentProductsTemp = g_personalizedContentXML.documentElement.getElementsByTagName("recentProducts")[0].childNodes[0];
		var hoversRecentPrdTemp =  g_personalizedContentXML.documentElement.getElementsByTagName("recentProductsInfo")[0];
		
		// ** recent product Artikel (hover) ** //
		if (recentProductsTemp.nodeName != "div")
			recentProductsTemp = recentProductsTemp.nextSibling;
		var recentPrdContainer = document.getElementById("containerRecentProducts");
		if (!recentPrdContainer) return;
		var recentProducts = document._importNode(recentProductsTemp, true);
		// var recentProducts = recentProductsTemp.cloneNode(true);	
		recentPrdContainer.appendChild(recentProducts);
		// hack for IE.
		if (isExplorer || isMac) 
		{
			//if (isExplorer ) alert("Explorer hier.");
			//if (isMac ) alert("Mac hier.");
			
			recentPrdContainer.innerHTML = recentPrdContainer.innerHTML;
		}
		//Mac / Safari does not show the images right away.
		
		// ** recent Product info layers **//
		var containerHoverInfo = document.getElementById("containerHoverInfo");	
		if (!containerHoverInfo) return;

		// alert(hoversRecentPrdTemp.childNodes.length);
		for (i=0; i<hoversRecentPrdTemp.childNodes.length; i++)
		{
			if (hoversRecentPrdTemp.childNodes[i].nodeType != document.ELEMENT_NODE) 
				continue;
			var hoversRecentPrd = document._importNode(hoversRecentPrdTemp.childNodes[i], true);
			containerHoverInfo.appendChild(hoversRecentPrd);		
		}
		// hack for IE.
		if (!document.importNode) containerHoverInfo.innerHTML = containerHoverInfo.innerHTML;
		
		// show the complete layer only if there are recent items in it,
		// and only if we have come clean so far (no problems with the connection, imported elements, all nodes found etc.)
		recentPrdContainer.style.visibility = 'visible';
		recentPrdContainer.style.display = 'block';
	}
			

	
	// setup basket hover layer
	if (!noBasket)	
	{
		var hoverBasketTemp = g_personalizedContentXML.documentElement.getElementsByTagName("baskethover")[0].childNodes[0];
		if (hoverBasketTemp.nodeType != document.ELEMENT_NODE)
			hoverBasketTemp = hoverBasketTemp.nextSibling;
		
		var hoverElem = document.getElementById("previewShoppingBasketActive");
		
		if (!hoverElem) return;

		var hoverBasket = document._importNode(hoverBasketTemp, true);
		hoverElem.appendChild(hoverBasket);

		//  the recently (just) added item
		if (basketAdd)
		{
			var hoverBasketAddTemp = g_personalizedContentXML.documentElement.getElementsByTagName("basketadd")[0].childNodes[0];
			if (hoverBasketAddTemp.nodeType != document.ELEMENT_NODE)
				hoverBasketAddTemp = hoverBasketAddTemp.nextSibling;
				
			var hoverBasketAdd = document._importNode(hoverBasketAddTemp, true);
			hoverElem.appendChild(hoverBasketAdd);
			
		}
		
		if (isExplorer) hoverElem.innerHTML = hoverElem.innerHTML;
		
		if (basketAdd)
		{			
			g_runOnceBasketAdd = true; // ensure that the just added item will be shown only once.
			enlargeBasket();  // fire both events back to back.
			condenseBasket(); // settimeout and cleartimeout routines will manage the timings anyway.
		}
	}
	
}


var basketLayer;
var basketLayerActive; // timeout-event 

function enlargeBasket()
{
	if (!basketLayer) basketLayer = getBasketHoverLayer();
	window.clearTimeout(basketLayerActive);
	setBasketSize(basketLayer, true);
}

function condenseBasket()
{
	if (!basketLayer) basketLayer = getBasketHoverLayer();
	var timeOut = g_BasketHoverTimeout;
	if (g_runOnceBasketAdd) timeOut = g_BasketAddHoverTimeout;
	basketLayerActive = window.setTimeout('setBasketSize(basketLayer, false)', timeOut);	
}

function getBasketHoverLayer()
{
	return document.getElementById("previewShoppingBasketActive");
}

function setBasketSize(elm, enlarge)
{
	if (!elm) return;

	var items = document.getElementById("hoverBasketDetailedItems"); // table of items in shopping cart
	var basketAdd = document.getElementById("basketadditem"); // block showing the just added item.
	if (!items) return;
	if (g_runOnceBasketAdd && !basketAdd) return;
	
	if (enlarge)
	{
		setClassName(elm, 'previewShoppingBasket hoverBasketDetailed');
		if (g_runOnceBasketAdd)
		{
			basketAdd.style.display = 'block';
		}
		else
		{
			items.style.display = 'block';
			if (basketAdd) basketAdd.style.display = 'none';
		}
	}
	else
	{
		setClassName(elm, 'previewShoppingBasket');
		if (g_runOnceBasketAdd)
		{
			basketAdd.style.display = 'none';
			g_runOnceBasketAdd = false;
		}
		else
		{
			items.style.display = 'none';			
		}
	}
}

function setClassName(elm, cn)
{
	if (elm) elm.className = cn;
}









var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}


var info;
function TurnHoverInfoScriptingOn()
{
        if (document.layers) {
            document.captureEvents(Event.MOUSEMOVE);
        }
        document.onmousemove = moveDiv;


}

function showInfo(elem)
{
  if(info == null)initInfo();
  info.show(elem);
}

function hideInfo(elem)
{
  if(info == null)initInfo();
  info.hide(elem);
}

function initInfo()
{
  info = new InfoDiv();
  info.setClipping(0,0,-1,-1);
  info.enableFollowMouse(true);
}

function moveDiv(e)
{
	var eventX = (document.all) ? event.clientX : e.pageX;
	var eventY = (document.all) ? event.clientY : e.pageY;
	if(document.all) {
		eventX += getScrollLeft()
		eventY += getScrollTop()
	}
	if(info!=null)info.moveVisible(eventX, eventY)
}

function insertPDSImage(elemId, imagePath)
{
	container = getElementsByClassName("page", "div")[0];
	// container = document.body;
	var img = document.createElement("img");
	var imgSrc = document.createAttribute("src");
	imgSrc.nodeValue = imagePath;
	var imgId = document.createAttribute("id");
	imgId.nodeValue = elemId;	
	img.setAttributeNode(imgSrc);
	img.setAttributeNode(imgId);

	try
	{
		var imgStyle = document.createAttribute("style");
		imgStyle.nodeValue="position:absolute;right:0pt;bottom:22px;display:none";
		img.setAttributeNode(imgStyle);
	}
	catch(e)
	{
		
		img.style.position = "absolute";
		if (isIE6)
		{
			img.style.right = "-1px";
			img.style.bottom = "21px";
		}
		else
		{
			img.style.right = "0px";
			img.style.bottom = "22px";
		}
		img.style.display = "none";
		img.style.border = "none";
	}

	container.appendChild(img);
	return img;
}

function highlightPDSImage(show)
{
	elmId = "pdsHighlightImage";
	imagePath = "/images/shop/pds-berlin.jpg";
	var elm = document.getElementById(elmId);
	if (!elm) elm = insertPDSImage(elmId, imagePath);
	
	if (show)
		elm.style.display = "block";
	else
		elm.style.display = "none";
}

// Courtesy of getElementsBy.com
function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value) {
  this[this.length] = value;
}
