﻿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 explorerVersion = getIEVersion(agt);
var isOpera = ((agt.indexOf('opera') != -1)) ? true : false;
// var g_BasketHoverTimeout = 1800; // Millisekunden (3000 Millisekunden sind 3 Sek.)
var g_BasketHoverTimeout = 300;
var g_BasketAddHoverTimeout = 3000;
var g_runOnceBasketAdd = false;

var g_infoLayerOverrideHandleOverLap = true; // handle infolayer overlaps for IE.

// Variables for product page
currentProductNumber = "";
currentProductInfoTextId = "";
defaultProductImageUrl = "";
defaultProductPrice = "";
defaultProductPriceNet = "";

//$(document).ready(function() {
//  initAll();
//});

function initAll() {
  // Falls es schon aufgerufen wurde kehre zurück.
  if (arguments.callee.done) return;

  // Damit jemand *IE6 schief anguckt*  nicht versucht diese Funktion zweimal aufzurufen flagge es..
  arguments.callee.done = true;

  // Die png Bilder für IE6 darstellbar machen
  //processShopPngForIE6();
  
  // Feststellen, ob das aufgerufene Produkt zur White Collection gehört
  //checkForCollection();

  FillPreviewBasket();
  
  //initPDSFAQ();  
  //LoadFiles();

  LoadPersonalizedContent();
}


/* Personalized Content */

var usePersonalizedContent = false;

var currentPool = null;
var currentLanguage = null;
var currentProduct = null;
var useRecentProducts = false;
var useExtendedBasket = false;

// wird für PDS2 definitiv benötigt
function LoadPersonalizedContent() {
  if (usePersonalizedContent) {

    //url zusammenfuegen

    var url = "/PersonalizedContent.aspx?sitemappool=" + currentPool + "&sitemaplanguage=" + currentLanguage;

    if (currentProduct)
      url += "&recentarticleadd=" + escape(currentProduct);

    if (useRecentProducts)
      url += "&showrecentarticlelist=true";

    if (useExtendedBasket)
      url += "&showbasketinfo=true";

    // dieser Parameter ist immer da. Server-Code kuemmert sich darum, ob die Knote "basketadd" geschrieben werden muss.
    url += "&showbasketadd=true";

    //personalized Content laden
    ProcessPersonalizedContent(url);

  }
}



function positionFooter() {
  var footer = document.getElementById("footer");

  // setDocumentSize();
  if (footer) {
    footer.innerHTML = footer.innerHTML;
  }
}


function containsStr(s, find) {
  return (s.indexOf(find) != -1);
}

// wird für PDS2 definitiv benötigt
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;
}

// wird für PDS2 definitiv benötigt
function FillPreviewBasket() {
  var articlecount = GetCookieValue("shop-basket-articlecount");
  var price = GetCookieValue("shop-basket-price");
  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("basketcheckout");
    if (proceedtocashierLink) proceedtocashierLink.style.display = "block";

  }	
	Cufon.refresh("#basketHeader");
}

// wird für PDS2 definitiv benötigt
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));
}

// wird für PDS2 definitiv benötigt
function SubmitBasketForm(inputfield) {
  if (inputfield.value != "") {
    var editbasketscript = document.getElementById("editbasketscript");
    editbasketscript.value = "true";

    var basket = document.getElementById("formcontrol");
    basket.submit();
  }
}

// wird für PDS2 definitiv benötigt
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");
  if (value == 'delete') {
    // delete function is currently only in Porsche Design Shop available.
    var currentAmount = document.forms['basketform'].elements[position + '-amount'].value;
    if (!isNaN(currentAmount))
      plusminusvalue.value = 0 - currentAmount;
    else
      plusminusvalue.value = 0;
  }
  else
    plusminusvalue.value = value;
}

function GoArticleReminder(url) {
  var elmProductIDInputField = document.getElementById("ProductID");
  url += "&article_variantid=" + encodeURI(elmProductIDInputField.value);

  location.href = url;
}

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");
}




/* 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;
  }
};


// wird für PDS2 definitiv benötigt
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);
}

// wird für PDS2 definitiv benötigt
function setupPersonalizedContent() {

	FillPreviewBasket();
  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;

    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("basket");

    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;

    // Filter für transparente PNG einsetzen
    //processPngForIE6(basketLayer ? basketLayer : getBasketHoverLayer());

    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.
    }
  }

}

/* Damit der IE6 PNG mit Alphakanal im Warenkorb-Layer korrekt anzeigt, einen Filter einsetzen */
function processPngForIE6(element) {
  var basketImages = element.getElementsByTagName("img");
  if (6 == explorerVersion) { //
    for (var index = basketImages.length - 1; 0 <= index; index--) {
      // Das Bild selbst nicht anzeigen. Stattdessen wird in den Parent die Ausgabe eines Filters ausgegeben
      var source = basketImages[index].getAttribute("src");
      if (-1 != source.indexOf("filestore")) {
        addIE6Filter(basketImages[index], source);
      }
    }
  }
}

/* Damit der IE6 PNG mit Alphakanal auf der Übersichtsseite im Shop korrekt anzeigt, einen Filter einsetzen */
function processShopPngForIE6() {
  var parent = document.getElementById("shoppingBasketLarge");
  if (parent) {
    processPngForIE6(parent);
  }
}

function addIE6Filter(element, source) {
  var thisParent = element.parentNode;
  thisParent.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + source + "', sizingMethod='image');";

  // Bild konnte mit Hilfe von CSS nicht ausgeblendet werden.
  thisParent.removeChild(element);

  // Damit der IE die Änderungen übernimmt
  thisParent.innerHTML = thisParent.innerHTML;
}

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) {
    if (g_runOnceBasketAdd) {
      basketAdd.style.display = 'block';
    }
    else {
      items.style.display = 'block';
      if (basketAdd) basketAdd.style.display = 'none';
    }
  }
  else {
    if (g_runOnceBasketAdd) {
      basketAdd.style.display = 'none';
      g_runOnceBasketAdd = false;
    }
    else {
      items.style.display = 'none';
    }
  }
}

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;
}


function changeZIndexMenu(idx) {
  elem = document.getElementById("menu");
  if (elem) {
    var newIndex = (idx == 1) ? 20 : 0;
    elem.style.display = "none";
    elem.style.zIndex = newIndex;
    elem.style.display = "block";
  }

}

function LoadFiles() {
  var el = document.createElement('link');
  el.rel = 'stylesheet';
  el.type = 'text/css';
  el.href = '/Styles/PDS/thickbox.css';
  document.getElementsByTagName('head')[0].appendChild(el);

  var el2 = document.createElement('script');
  el2.src = '/Script/PDS/thickbox.js';
  el2.type = 'text/javascript';
  document.getElementsByTagName('head')[0].appendChild(el2);
}

function getWinSize(win) {
  if (!win) win = window;
  var pos = { x: 0, y: 0 };
  if (typeof win.innerWidth != 'undefined') {
    pos.w = win.innerWidth;
    pos.h = win.innerHeight;
  }
  else if (win.document.body) {
    pos.w = parseInt(win.document.body.clientWidth) + 30;
    pos.h = parseInt(win.document.body.clientHeight);
  }
  return pos;
}


/* Ermittelt die Version des IE. von http://msdn.microsoft.com/library/?url=/workshop/author/dhtml/overview/browserdetection.asp?frame=true */
function getIEVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer') {
    var ua = navigator.userAgent;
    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat(RegExp.$1);
  }
  return rv;
}

function prepareFillKbase(sUrl)
{
    if(sUrl.indexOf('?') > -1)sUrl += "&" + getCachePrevent();
    else sUrl += "?" + getCachePrevent();
    if (window.XMLHttpRequest) {
        g_req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        g_req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    g_req.onreadystatechange = fillKbase;
    g_req.open("GET", sUrl, true);
    g_req.send(null);  
		
}

function getCachePrevent()
{
    return "rand=" + escape( Math.round( Math.random() * 10000 ) );
}

function fillKbase()
{
    if (g_req.readyState == 4)
    {
        // IE hack to prevent dropdowns to stay in view (which will then be visible within the popup layer).
        ieToggleDropDowns(getListIEDropDowns(), true);
    	
        if (g_req.status == 200)
        {
            if (g_is_safari) {
                var introElm = document.getElementById("introImage");
                if (introElm) {
                    introElm.style.visibility = "hidden";
                }
            }

            var s = "";
        
            var elmKB = document.getElementById("knowledgeBase");

            s += "";
            s += "<div class=\"closeButton\" id=\"closeButtonKbase\" onclick=\"closeKnowledgebase()\"><img src=\"/Images/close-button.gif\" alt=\"[X]\" title=\"Close\" /></div>";
            s += addKnowledgebasePrevNextButtons(); // STV
            s += g_req.responseText;
            s = replStr(s, "<content>", "");
            s = replStr(s, "</content>", "");

            var sRun = getTextBetween(s, "// <![CDATA[", "// ]]>");
            sRun = replStr(sRun, ",wmode=opaque", ",");

            elmKB.innerHTML = s;
            
            //addKnowledgebasePrevNextButtons(elmKB) // STV

            var elmShade = document.getElementById("knowledgeBaseShade");
            var elmKB = document.getElementById("knowledgeBase");

            if (screen.width <= 800) {
                var imgHeight = 350;
                var elmWrapper = document.getElementById("knowledgebaseWrapper");
                elmWrapper.style.height = (imgHeight - 80) + "px";
            }

            elmKB.style.display = "block";
            elmShade.style.display = "block";

            if (sRun != "") { eval(sRun); }
         
            //if(getPoolName() == 'usa')
                toggleMilkyBackground("on");

            moveKbButtons(); // STV
            
            
        }
        else
        {
            alert("Can't retrieve XML: " + g_req.statusText);
        }
    }
}

/* dummy functions to sink pdds info functions  */
function showInfo(dummy) { }
function hideInfo(dummy) { }