
window.onresize = checkSubnavPos;

//mouseover function for graphic links
function showLinkHilite(whichImgObj) {
  try {
    whichImgObj.src = whichImgObj.onimg.src;
  }
  catch (e) {
    // ignore
  }
}

//mouseout function for graphic links
function resetLinkHilite(whichImgObj) {
  try {
    whichImgObj.src = whichImgObj.offimg.src;
  }
  catch (e) {
    // ignore
  }
}

//constructor for image objects of graphic links
function createGraphicLink(whichImg,lowsrc,hisrc) {
  //erzeugen der mouseover-Images
  if (!whichImg.counter) {
    whichImg.counter = 1;
    whichImg.offimg = new Image();
    whichImg.offimg.src = lowsrc;
    whichImg.onimg = new Image();
    whichImg.onimg.src = hisrc;
  }
}

// Mouseover function for model metanav and teaser
function showModelHilite(pName, pImgObj) {
  if (pImgObj) {
    showLinkHilite(pImgObj);
  }
  // aoa multi purpose flash hook
  if (typeof aoa_multipurposeflash_setCarlineGroup == 'function') {
    aoa_multipurposeflash_setCarlineGroup(pName);
  }
}

//================================================================
//Scripts for Subnav-Menu
//===============================================================

//Variable f&uuml;r den popup-timer
var zu;

var subMenuActivated = 0;

//creating Subnav-SubMenu (dropdownbox)
function subMenu(whichMenu,whichLevel) {
  //props for checking subnav-submenu-position
  if (whichLevel == 2) {
    this.top = 8;
  } else {
    this.top = 28;
  }
  //reading Menu-Array, writing HTML-Codes
  this.activeMenu = eval(whichMenu);

  this.subMenuItemsList = "";
  if (this.activeMenu != 0) {
    for (var i = 0; i < this.activeMenu.length; i+=2) {
      this.subMenuItemsList +=  this.activeMenu[i+1] + this.activeMenu[i] + "</a>";
    }
    this.subMenuItemsList = "<div id='subnav_sub_list'>" + this.subMenuItemsList + "</div>";
  }

}

//function for subnav-submenu-popup (dropdownbox)
//args = name of menuset

function showSubMenu(whichMenu) {
  //workaround mozilla menuwidth bug
  if (navigator.appVersion.indexOf("MSIE") != -1) {
    document.getElementById("subnav_submenu").style.width = 155 + "px";
  } else {
    //document.getElementById("subnav_submenu").style.width = "auto";
    document.getElementById("subnav_submenu").style.width = 155 + "px";
    //mozilla clipping workaround
    document.getElementById("subnav").style.clip = "rect(auto,auto,800px,0px)";
  }
  document.getElementById("subnav_submenu").style.visibility = "hidden";
  document.getElementById("subnav_submenu").style.display = "none";
  //writing html-strings
  if (whichMenu.activeMenu != 0) {
    document.getElementById("subnav_submenu").innerHTML = whichMenu.subMenuItemsList;
    document.getElementById("subnav_submenu").style.display = "block";
  }
  //positioning menu-layers
  if (whichMenu.activeMenu != 0) {
    document.getElementById("subnav_submenu").style.top = whichMenu.top + "px";
    document.getElementById("subnav_submenu").style.visibility = "visible";
    document.getElementById("subnav_submenu").style.display = "block";
    document.getElementById("subnav_submenu").style.backgroundImage = "url(" + global_staticpath_images + "/bg_subnav_submenu.gif)";
  }
  //if there is no submenu
  else if (whichMenu.activeMenu == 0) {
    document.getElementById("subnav_submenu").style.visibility = "hidden";
    document.getElementById("subnav_submenu").style.display = "none";
  }
  //reset timeout
  window.clearTimeout(zu);
}


function submenuCollaps() {
  //verstecken des popup-menues
  window.clearTimeout(zu);
  document.getElementById("subnav_submenu").style.visibility="hidden";
  document.getElementById("subnav_submenu").style.display="none";
}

//************************************************************//
//functions for subnavigation fold show/hide
var subnavzu;
var subnavauf;
var slidetimer;
slidetoggle = false;
var isIE = '';
if (navigator.appVersion.indexOf("MSIE") != -1)  isIE = true;

function subnavTimer() {
  if (!document.getElementById('subnav'))  return;
  window.clearTimeout(subnavzu);
  try {
    if (parseInt(currSubnavLeft) < cms4imp_fullStageWidth) {
      subnavauf = window.setTimeout("showSubnav()",50);
    }
  }
  catch (e) {
    // ignore
  }
}

function showSubnav() {
  var subnavContent = document.getElementById("subnav_content");
  if (slidetoggle || !subnavContent || !subnavContent.getElementsByTagName || subnavContent.getElementsByTagName('a').length == 0) return;

  slidetoggle = true;

  var flashContainer = document.getElementById("stage_flash_container");
  if (flashContainer && flashContainer.className != "non_resizable") {
    if (!flashContainer.originalWidth) flashContainer.originalWidth = flashContainer.style.width;
    flashContainer.style.width = currSubnavLeft;
  }

  // We need to give IE time for an internal re-layout
  window.setTimeout(showSubnavDeferred, 1);
}

function showSubnavDeferred() {
  window.clearTimeout(subnavauf);

  var subNav = document.getElementById("subnav");
  subNav.style.visibility = "visible";
  subNav.style.display = "block";
  subNav.style.clip = "rect(auto,160px,auto,160px)";

  mycurrentwidth = 160;
  slidecount = 4;
  slideSubnavOn();
}


function subnavCollaps() {
  if (!document.getElementById('subnav') || !slidetoggle)  return;
  try {
    if (parseInt(currSubnavLeft) < cms4imp_fullStageWidth) {

      var flashContainer = document.getElementById("stage_flash_container");
      if (flashContainer && flashContainer.className != "non_resizable") {
        flashContainer.style.width = flashContainer.originalWidth;
      }

      window.clearTimeout(subnavauf);
      window.clearTimeout(subnavzu);
      slidecount = 8;
      mycurrentwidth=0;
      //window.clearTimeout(slidetimer);
      slideSubnavOff();
      slidetoggle = false;
    }
  }
  catch (e) {
    // ignore
  }
}
function dropdown_subnavmouseEnter() {
  window.clearTimeout(subnavzu);
  window.clearTimeout(slidetimer);
}

//**************************************************************//
function dropdown_mouseEnter() {
  window.clearTimeout(zu);
}

function dropdown_mouseLeave(whichMenu) {
  switch (whichMenu) {
  case 'main':
    zu = window.setTimeout("menuCollaps()",50);
    break;
  case 'sub':
    zu = window.setTimeout("submenuCollaps()",300);
    break;
  case 'subnav':
    subnavzu = window.setTimeout("subnavCollaps()",500);
    break;
  }
}

//===================================================
//functions for subnav-positioning
//===================================================

// allows to be overriden by templates with extra-wide stages
cms4imp_fullStageWidth = 640;
cms4imp_foldMinHeight = 300;

//detect mouse-over image position for correct layer positioning

function findPosX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  } else if (obj.x) {
    curleft += obj.x;
  }
  return curleft;
}

function findPosY(obj) {
  var curtop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  } else if (obj.y) {
    curtop += obj.y;
  }
  return curtop;
}

function getElementByClass(pClassName) {
  elements = window.document.getElementsByTagName('*');
  var element;
  for (i=0; i<elements.length; i++) {
    if (elements[i].className == pClassName) {
      element = elements[i];
    }
  }
  return element;
}

function checkSubnavPos() {
  // Do nothing if there's no mainnav
  if (!document.getElementById('mainnav')) return;

  // Stretch the content frame at least as high as the mainnav
  var frame = getElementByClass("screen_4");
  var mainnav_end = document.getElementById("mainnav_end");
  if (frame && mainnav_end) {
    var posY = findPosY(mainnav_end);
    if ((findPosY(frame) + frame.offsetHeight) < posY) {
      var height = posY - findPosY(frame);
      if (navigator.appVersion.indexOf("MSIE") != -1 && !window.XMLHttpRequest) {
        frame.style.height = height + "px";
      } else {
        frame.style.minHeight = height + "px";
      }
    }
  }

  var currLeft = findPosX(document.getElementById('mainnav'));
  var currWidth = currLeft - cms4imp_fullStageWidth;
  var currBrowserWidth = currLeft + 140;

  if (!document.getElementById('subnav')) {
    // Set the background unconditionally if there's no subnav
    if (document.body.background && document.body.background.indexOf("/bg.gif") == -1) {
      document.body.background = global_staticpath_images + "/bg.gif";
    }
    return;
  }

  if (currWidth > 160) {
    document.getElementById("subnav").style.left = (currLeft - currWidth) + "px";
    document.getElementById("subnav").style.width = currWidth + "px";
  } else {
    document.getElementById("subnav").style.left = (currLeft - 160) + "px";
    document.getElementById("subnav").style.width = 160 + "px";
  }
  currSubnavLeft = document.getElementById("subnav").style.left;
  if (parseInt(currSubnavLeft) < cms4imp_fullStageWidth) {
    document.getElementById("subnav").style.visibility = "hidden";
  } else {
    document.getElementById("subnav").style.visibility = "visible";
    document.getElementById("subnav").style.display = "block";
    document.getElementById("subnav").style.clip = "rect(auto,auto,auto,0px)";
  }

  // resize the fold and set the background image depending on the subnav height
  var mysubnavheight = document.getElementById("subnav").offsetHeight;
  if (mysubnavheight < cms4imp_foldMinHeight) {
    document.getElementById("subnav").style.height = cms4imp_foldMinHeight + "px";
    if (document.body.background && document.body.background.indexOf("/bg.gif") == -1) {
      document.body.background = global_staticpath_images + "/bg.gif";
    }
  } else if (mysubnavheight > cms4imp_foldMinHeight && mysubnavheight < 468) {
    document.getElementById("subnav").style.height = 468 + "px";
    if (document.body.background && document.body.background.indexOf("/bg_long.gif") == -1) {
      document.body.background = global_staticpath_images + "/bg_long.gif";
    }
  } else if (cms4imp_foldMinHeight == 492) {
    if (document.body.background && document.body.background.indexOf("/bg_long2.gif") == -1) {
      document.body.background = global_staticpath_images + "/bg_long2.gif";
    }
  }

}

//slide function for subnav fold
function slideSubnavOn() {
  slidecount = slidecount*2;
  mycurrentwidth = (mycurrentwidth - slidecount);
  var mycurrentrect = "rect(auto,160px,auto," + mycurrentwidth + "px)";
  if (isIE) {
    document.getElementById("subnav").style.clip = mycurrentrect;
  } else {
    document.getElementById("subnav").style.visibility = "hidden";
    document.getElementById("subnav").style.clip = "rect(auto,160px,auto,0px)";
    document.getElementById("subnav").style.clip = mycurrentrect;
    document.getElementById("subnav").style.visibility = "visible";
  }
  if (mycurrentwidth<=0) {
    window.clearTimeout(slidetimer);slidetimer=0;
  } else {
    slidetimer = window.setTimeout("slideSubnavOn()",5);
  }
}

function slideSubnavOff() {
  slidecount = slidecount*3;
  mycurrentwidth = mycurrentwidth + slidecount;
  var mycurrentrect = "rect(auto,160px,auto," + mycurrentwidth + "px)";
  if (isIE) {
    document.getElementById("subnav").style.clip = mycurrentrect;
  } else {
    document.getElementById("subnav").style.visibility = "hidden";
    document.getElementById("subnav").style.clip = "rect(auto,160px,auto,0px)";
    document.getElementById("subnav").style.clip = mycurrentrect;
    document.getElementById("subnav").style.visibility = "visible";
  }
  if (mycurrentwidth>=160) {
    window.clearTimeout(slidetimer);slidetimer=0;
  } else {
    slidetimer = window.setTimeout("slideSubnavOff()",1);
  }
}


//===============================
//image hilite without submenu-popup
//==============================
function mainButton(whichImg,offsrc,onsrc) {
  this.imgname = new Object(whichImg);
  this.imgname.createHiliteImages = createImgObjs;
  this.imgname.createHiliteImages(offsrc,onsrc,'');
}

//function for module m581
function stageButton(whichImg,offsrc,onsrc,hisrc) {
  this.imgname = new Object(whichImg);
  this.imgname.createHiliteImages = createImgObjs;
  this.imgname.createHiliteImages(offsrc,onsrc,hisrc);
}

//hilite-image method
function createImgObjs(offsrc,onsrc,hisrc,midsrc,big800,big1024,big1280) {
  this.offimg = new Image();
  this.offimg.src = offsrc;
  this.onimg = new Image();
  this.onimg.src = onsrc;
  this.hiliteimg = new Image();
  this.hiliteimg.src = hisrc;
  if (arguments.length > 3) {
    this.midimg = midsrc;
    this.big800 = big800;
    if (big1024) this.big1024 = big1024;
    if (big1280) this.big1280 = big1280;
  }
}

function showHigh(whichButton,whichPic) {
  if (whichPic == 0) document.images[whichButton.imgname].src = whichButton.imgname.onimg.src;
}

function resetHigh(whichButton,whichPic) {
  if (whichPic == 0) document.images[whichButton.imgname].src = whichButton.imgname.offimg.src;
}

/**
 * Functions for m581 highlighting
 */

var activeStagePic;

function changeStageHigh (pButton, pURL, pCacheKiller) {
  var stageId = "gallery_media";
  var stageImg = document.getElementById(stageId + '_container');
  if (!stageImg) {
    stageImg = document.getElementById(stageId);
  }
  if (!stageImg) {
    return;
  }
  var iFrame = document.createElement('iframe');
  iFrame.setAttribute('width', 479);
  iFrame.setAttribute('height', 300);
  iFrame.setAttribute('frameBorder', '0');
  iFrame.setAttribute('scrolling', 'no');
  iFrame.setAttribute('id', stageId);
  if (pCacheKiller) {
    iFrame.setAttribute('src', pURL + "?" + pCacheKiller);
  } else {
    iFrame.setAttribute('src', pURL);
  }
  iFrame.setAttribute('align', 'middle');
  stageImg.parentNode.replaceChild(iFrame, stageImg);
  if (activeStagePic && activeStagePic != pButton.imgname) {
    document.images[activeStagePic].src = activeStagePic.offimg.src;
  }
  activeStagePic = pButton.imgname;
}

function showStageHigh(whichButton,whichPic) {
  if (whichPic == 0) {
    document.images[whichButton.imgname].src = whichButton.imgname.onimg.src;
  }
}

function resetStageHigh(whichButton,whichPic) {
  if (whichPic == 0 && activeStagePic != whichButton.imgname) {
    document.images[whichButton.imgname].src = whichButton.imgname.offimg.src;
  }
}

function setOffStage(whichImg) {
  stageimgsrc = whichImg;
}

/**
 * Functions for m614_linkbox_gallery_1col
 */

// Constructor for objects that contain all information about the available download versions
// of a Media Gallery Item
function MediaDownloadVersions() {
  this.smallUrl = null
  this.smallWidth = 0;
  this.smallHeight = 0;
  this.smallSize = 0;

  this.mediumUrl = null;
  this.mediumWidth = 0;
  this.mediumHeight = 0;
  this.mediumSize = 0;

  this.largeUrl = null;
  this.largeWidth = 0;
  this.largeHeight = 0;
  this.largeSize = 0;
}

// an instance of MediaDownloadVersions containing the download versions of the currently selected Media Gallery Item
var selectedDownloadVersions = null;

// update the automatic linkbox module and optionally switch the currently selected GalleryItem
function updateLinkBox(downloadVersions) {
  if (downloadVersions) {
    selectedDownloadVersions = downloadVersions;
  }
  var linkboxDiv = document.getElementById('imagegallery_linkbox_div');
  if (!linkboxDiv) {
    // do nothing if the div does not exist
    // alert("failed to access element with id 'imagegallery_linkbox_div'");
    return;
  }

  if (!selectedDownloadVersions) {
    linkboxDiv.innerHTML = '';
    return;
  }

  var newHTML = '';
  if (selectedDownloadVersions.smallUrl) {
    newHTML+= constructMediaDownloadLink(selectedDownloadVersions.smallUrl, selectedDownloadVersions.smallWidth, selectedDownloadVersions.smallHeight, selectedDownloadVersions.smallSize);
  }
  if (selectedDownloadVersions.mediumUrl) {
    newHTML+= constructMediaDownloadLink(selectedDownloadVersions.mediumUrl, selectedDownloadVersions.mediumWidth, selectedDownloadVersions.mediumHeight, selectedDownloadVersions.mediumSize);
  }
  if (selectedDownloadVersions.largeUrl) {
    newHTML+= constructMediaDownloadLink(selectedDownloadVersions.largeUrl, selectedDownloadVersions.largeWidth, selectedDownloadVersions.largeHeight, selectedDownloadVersions.largeSize);
  }
  linkboxDiv.innerHTML = newHTML;

}

function constructMediaDownloadLink(url, width, height, size) {
  return '<div class="box_link">' +
  '<a href="'+url+'" target="_blank"><img src="' + global_staticpath_images + '/arrow_orange.gif" alt="&gt;" class="arrow" height="9" width="9"></a>' +
  '<a href="'+url+'" target="_blank">' + width + ' x ' + height + '</a>'+
  '</div>';
}

//=========================================
//functions for crossbox
//=========================================

var inactiveEntry = '';
var activeEntry = '';
var activeEntryContent = '';
tabArray = new Array();

function switchBox(whichBox) {

  if (activeEntry) {
    document.getElementById(activeEntry).style.visibility = "hidden";
    document.getElementById(activeEntry).style.display = "none";
    document.getElementById(activeEntryContent).style.visibility = "hidden";
    document.getElementById(activeEntryContent).style.display = "none";
    if (activeEntry.indexOf("worldwide")!= -1) {
      document.getElementById('crossbox_world').style.visibility = "hidden";
      document.getElementById('crossbox_world').style.display = "none";
    }
    document.getElementById(inactiveEntry).style.visibility = "visible";
    document.getElementById(inactiveEntry).style.display = "block";
    if (navigator.appVersion.indexOf("MSIE") == -1) {
      document.getElementById(inactiveEntry).style.height = 17 + "px";
      document.getElementById(inactiveEntry).style.borderTop = "solid 1px #262626";
      document.getElementById(inactiveEntry).style.paddingTop = "2px";
    }
  }
  var myEntry = whichBox + "_a";
  var myEntryContent = whichBox + "_b";
  activeEntry = myEntry;
  activeEntryContent = myEntryContent;
  inactiveEntry = whichBox;
  if (navigator.appVersion.indexOf("MSIE") == -1) {
    document.getElementById(whichBox).style.height = 0 + "px";
    document.getElementById(whichBox).style.border = 0 + "px";
    document.getElementById(whichBox).style.padding = 0 + "px";
  } else {
    document.getElementById(whichBox).style.visibility = "hidden";
    document.getElementById(whichBox).style.display = "none";
  }
  document.getElementById(activeEntry).style.visibility = "visible";
  document.getElementById(activeEntry).style.display = "block";
  document.getElementById(activeEntryContent).style.visibility = "visible";
  document.getElementById(activeEntryContent).style.display = "block";
  if (whichBox.indexOf("worldwide")!= -1) {
    document.getElementById('crossbox_world').style.visibility = "visible";
    document.getElementById('crossbox_world').style.display = "block";
  }

}

var crossboxInitialized = false;

function initCrossbox(whichCB) {

  var CBnum = tabArray.length;
  for (i=0;i<CBnum;i++) {
    var myEntry = tabArray[i] + "_a";
    var myEntryContent = tabArray[i] + "_b";
    document.getElementById(myEntry).style.visibility = "hidden";
    document.getElementById(myEntry).style.display = "none";
    document.getElementById(myEntryContent).style.visibility = "hidden";
    document.getElementById(myEntryContent).style.display = "none";
  }

  if (document.getElementById(whichCB)) {
    var myEntry = whichCB + "_a";
    var myEntryContent = whichCB + "_b";
    activeEntry = myEntry;
    activeEntryContent = myEntryContent;
    inactiveEntry = whichCB;
    document.getElementById(whichCB).style.visibility = "hidden";
    document.getElementById(whichCB).style.display = "none";
    document.getElementById(activeEntry).style.visibility = "visible";
    document.getElementById(activeEntry).style.display = "block";
    document.getElementById(activeEntryContent).style.visibility = "visible";
    document.getElementById(activeEntryContent).style.display = "block";
  }
  //special case for worldwide
  if (whichCB == "worldwide") {
    document.getElementById('crossbox_world').style.visibility = "visible";
    document.getElementById('crossbox_world').style.display = "block";
  }

  crossboxInitialized = true;
}

//counting tabs for default ibox display
function countTab(whichTab) {
  tabArray[tabArray.length] = whichTab;
}

/**
 * Defines a link reference.
 * @param pTitle Link title.
 * @param pURL for link. Can be URL or javascript: call (optional).
 */
var crossbox_link = function(pTitle, pURL) {
  this.title = pTitle;
  this.url = pURL;
}

function renderLoginArea(pLoggedOutLinks, pLoggedInLinks, pText) {
  var name = getCookie("myAudi.name");
  if (name != null) {
    pText = pText.replace(/\{0\}/, name);
    document.write("<div class=\"crossbox_text\">");
    document.write(pText);
    document.write("</div>");
    for (var i = 0; i < pLoggedInLinks.length; i++) {
      renderLink(pLoggedInLinks[i]);
    }
    initCrossbox('login');
  } else {
    for (var i = 0; i < pLoggedOutLinks.length; i++) {
      renderLink(pLoggedOutLinks[i]);
    }
  }
}

function renderLink(pLink) {
  document.write("<div class=\"crossbox_link\">");
  if (pLink.url.length > 0) {
    document.write("<a href=\"" + pLink.url + "\">");
  }
  document.write("<img src=\"" + global_staticpath_images + "/arrow_orange.gif\" width=\"9\" height=\"9\" alt=\"&gt;\" class=\"crossbox_arrow\">");
  if (pLink.url.length > 0) {
    document.write("</a>");
  }
  if (pLink.url.length > 0) {
    document.write("<a href=\"" + pLink.url + "\">");
  }
  document.write(pLink.title);
  if (pLink.url.length > 0) {
    document.write("</a>");
  }
  document.write("</div>");
}

/** This variable can be overriden to provide an alternative redirect URL */
var cms4imp_base_sso_redirect_url = location.href;

/**
 * Constructs a SSO redirect URL from the given standard login
 * URL and the contents of cms4imp_base_sso_redirect_url.
 * @param pLoginURL Login URL
 */
function getLoginURL(pLoginURL, pRedirectParam) {
  var redirectRegExp = new RegExp(pRedirectParam, "g");
  var matches = pLoginURL.match(redirectRegExp);
  var encodingDepth = matches ? matches.length - 1 : 0;
  var loginURL = pLoginURL.substring(0, pLoginURL.lastIndexOf(pRedirectParam) + pRedirectParam.length);
  var redirectValue = "=" + cms4imp_base_sso_redirect_url;
  while (encodingDepth > 0) {
    redirectValue = encodeURIComponent(redirectValue);
    encodingDepth--;
  }
  return loginURL + redirectValue;
}

/**
 * Functions for the route tab of the crossbox.
 */
function openRoute(pURL, pPartnerID, pStreetDummy, pZipDummy, pCityDummy, pNewWindow) {
  var street  = document.forms["routeform"]["street"].value;
  var zip    = document.forms["routeform"]["zip"].value;
  var city  = document.forms["routeform"]["city"].value;

  if (street == pStreetDummy) street = "";
  if (zip == pZipDummy) zip = "";
  if (city == pCityDummy) city = "";

  var params = "ID=" + pPartnerID;
  if (street || zip || city) {
    params += "&ZS=" + street;
    params += "&ZP=" + zip;
    params += "&ZO=" + city;
    params += "&BUTTON=SEARCH";
  }

  var targetUrl = pURL;
  if (targetUrl.indexOf("?") > 0) {
    targetUrl += "&" + params;
  }
  else {
    targetUrl += "?" + params;
  }

  if (pNewWindow) {
    fenster=window.open(targetUrl,"Anfahrtsroute","width=639,height=545,top=120,left=210");
    if (typeof(fenster.focus) == "function" || typeof(fenster.focus) == "object"){
      fenster.focus();
    }
  }
  else {
    window.location = targetUrl;
  }
}

function crossboxRouteSubmitEnter(pField, pEvent, pURL, pPartnerID, pStreetDummy, pZipDummy, pCityDummy, pNewWindow) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (pEvent) keycode = pEvent.which;
  else return true;
  if (keycode == 13) {
    openRoute(pURL, pPartnerID, pStreetDummy, pZipDummy, pCityDummy);
    return false;
  } else {
    return true;
  }
}

//=========================================
//functions for item_select
//=========================================
function handleSelection(whichForm) {
  try {
    eval(whichForm.item_select.options[whichForm.item_select.selectedIndex].value);
  }
  catch (ex) {
    // Ignore
  }
  return false;
}

//=========================================
//functions for popups
//=========================================

function isBlockedByCookie(pSrcHandle) {
  if (document.cookie) {
    if (document.cookie.lastIndexOf(pSrcHandle) >= 0) {
      return true;
    }
  }
  return false;
}

/**
 * This method is kept only for backwards compatibility.
 * Use cms_openWindow instead.
 */
function openWindow(pUrl, pTarget, pParameter, pSrcHandle, pWidth, pHeight) {
  return cms_openWindow(pUrl, pTarget, pParameter, pSrcHandle, pWidth, pHeight);
}

/**
 * Open a popup window with the given parameters
 * @param pUrl URL to open
 * @param pTarget Window target
 * @param pParameter Window parameter string
 * @param pSrcHandle Handle of the popup source page (if set popups with same handle are opened only once)
 * @param pWidth Width of the window
 * @param pHeight Height of the window
 * @return Window handle for the new window or null if the window could not be opened
 */
function cms_openWindow(pUrl, pTarget, pParameter, pSrcHandle, pWidth, pHeight) {
  if (pSrcHandle && isBlockedByCookie(pSrcHandle)) {
    // open once per session only.
    return;
  }

  // center popup on screen
  if (pWidth) {
    var winX = (screen.availWidth/2)-(pWidth/2);
    pParameter += ",width=" + pWidth + ",left=" + winX + ",scrX=" + winX;
  }

  if (pHeight) {
    var winY = (screen.availHeight/2)-(pHeight/2);
    pParameter += ",height=" + pHeight + ",top=" + winY + ",scrY=" + winY;
  }

  var win = null;
  var isPopup = false;
  if (pTarget==null || pTarget=="" || pTarget=="_self") {
    document.location = pUrl;
    win = window;
  }
  else {
    win = window.open(pUrl, pTarget, pParameter);
    isPopup = true;
  }
  try {
    if (isPopup) {
      if (pSrcHandle && document.cookie) {
        // set cookie
        document.cookie = pSrcHandle + "=true; Path=/";
      }
      win.focus();
    }
  }
  catch (e) {
    // ignore
  }

  return win;
}

//=========================================
//functions for timeline modules
//=========================================

function showTimelineLayer(pLayerIndex, pMediaURL1, pMediaURL2) {
  var index = 0;
  while (layer = document.getElementById("timeline_layer_" + index)) {
    if (index == pLayerIndex) {
      layer.style.visibility = "visible";
    } else {
      layer.style.visibility = "hidden";
    }
    index++;
  }

  var imgElement = document.getElementById("m625_img");
  if (imgElement && pMediaURL1) {
    imgElement.src = pMediaURL1;
  }

  imgElement = document.getElementById("m626_img");
  if (imgElement && pMediaURL2) {
    imgElement.src = pMediaURL2;
  }

}

//=========================================
// image popup
//=========================================

function showImagePopup(pImageURL, pWidth, pHeight, pTitle) {
  if (!pImageURL) {
    return;
  }
  var windowFeatures = 'toolbar=no,directories=no,location=no,status=no,menubar=no,resizable=no,scrollbars=no,'
  + 'width=' + pWidth + ',height=' + pHeight;
  if (!pTitle || pTitle=='') {
    pTitle = 'Audi';
  }
  var popup = window.open('', 'imagePopup', windowFeatures);
  if (popup) {
    popup.document.clear();
    popup.focus();
    popup.document.writeln('<html><head><title>' + pTitle + '</title></head>');
    popup.document.writeln('<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="margin:0px">');
    popup.document.writeln('<center><img src="' + pImageURL + '" border="0" alt=""></center>');
    popup.document.writeln('</body>');
    popup.document.writeln('</html>');
    popup.document.close();
    popup.focus();
  }
}

/**
 * Gets the value of the specified cookie.
 * @param pName Name of the desired cookie
 * @return A string containing value of specified cookie, or
 * null if cookie does not exist.
 */
function getCookie(pName) {
  var dc = document.cookie;
  var prefix = pName + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0)  return null;
  } else {
    begin += 2;
  }
  var end = document.cookie.indexOf(";", begin);
  if (end == -1) {
    end = dc.length;
  }
  return unescape(dc.substring(begin + prefix.length, end));
}

/**
 * Functions for MOS
 */

function postMosForm(pAddSelection) {
  var mosForm = document.forms.form_mos_download;
  var selection = mosForm.selected_item;
  if (selection && pAddSelection) {
    var selectedItem = selection.value;
    if (selectedItem != "") {
      mosForm.action += escape ("&selected_item=" + selectedItem);
    }
  }
  mosForm.submit();
}

function registerLink(pURL) {
  var mosForm = document.forms.form_mos_download;
  var selection = mosForm.selected_item;
  if (selection) {
    var selectedItem = selection.value;
    if (selectedItem != "") {
      pURL += escape ("?selected_item=" + selectedItem);
    }
  }
  document.location = pURL;
}

/**
 * Functions for surveys
 */

function checkSurvey() {
  var sessionCookieName = "cms4imp_session_survey";
  var cookiePrefix = "survey_";

  if ((typeof surveys == "undefined") || isBlockedByCookie(sessionCookieName)) {
    return;
  }

  for (var i=0; i < surveys.length; i++) {
    var survey = surveys[i];
    var name = survey[0];
    var frequency = survey[1];
    var linkMethod = survey[2];
    var startDate = new Date(survey[3]);
    var endDate = new Date(survey[4]);
    var rand = Math.random() * frequency;
    var cookieName = cookiePrefix + name;
    var now = new Date();

    if (startDate && (startDate > now))  continue; // Not active yet
    if (endDate && (endDate < now))  continue;      // Not active anymore

    if (rand < 1 && !isBlockedByCookie(cookieName)) {
      if (eval(linkMethod) && name && document.cookie) {
        // Sticky Cookie for this specific survey
        var exp = new Date();
        var oneYearFromNow = exp.getTime() + (365 * 24 * 60 * 60 * 1000);
        exp.setTime(oneYearFromNow);
        document.cookie = cookieName + "=true; Path=/ ;expires=" + exp.toGMTString();
        // Session Cookie
        document.cookie = sessionCookieName  + "=true; Path=/";
      }
      break;
    }
  }
}

/**
 * SSO Cookie Management
 */

var COOKIE_MYAUDI  = "myAudi";
var COOKIE_EXPIRES = "myAudi.expires";
var PARAM_LIFETIME = "c_lifetime";

function getSearchData() {
    var results = new Object( );
    if (location.search.substr) {
        var input = unescape(location.search.substr(1));
        if (input) {
            var srchArray = input.split("&");
            var tempArray = new Array( );
            for (var i = 0; i < srchArray.length; i++) {
                tempArray = srchArray[i].split("=");
                results[tempArray[0]] = tempArray[1];
            }
        }
    }
    return results;
}

function setTimestampCookie (pLifetime) {
  var now = new Date();
  expDate = new Date(now.getTime() + (pLifetime * 1000));
  document.cookie = COOKIE_EXPIRES + "=" + expDate + "; Path=/ ;";
}

function validateSSOCookie(pLifetime, pAgentURLs) {
  var sessionID = getCookie(COOKIE_MYAUDI);
  if (!sessionID) return;

  var lifetime = pLifetime;
  var searchData = getSearchData();
  if (searchData[PARAM_LIFETIME]) {
    lifetime = searchData[PARAM_LIFETIME];
  }

  var timestamp = getCookie(COOKIE_EXPIRES);
  if (!timestamp) {
    setTimestampCookie(lifetime);
    return;
  }

  var expDate = new Date(timestamp);
  if (!expDate) return;

  var threshold = expDate.getTime() - ((lifetime/8) * 1000);
  var now = new Date();

  if (now.getTime() > threshold) {
    var agentParameters = "?" + PARAM_LIFETIME + "=" + lifetime + "&c_session=" + sessionID;

    for (var i = 0; i < pAgentURLs.length; i++) {
      var agentURL = pAgentURLs[i];
      if (agentURL) {
        // Refresh cookie via SSO agent
        var agentImage = new Image();
        agentImage.src = agentURL + agentParameters;
        // Refresh Timestamp Cookie
        setTimestampCookie(lifetime);
      }
    }
  }
}

/**
 * Log a tracking event with activated user tracking tool.
 * @param pLogData Data to log
 */
function cms4imp_log(pLogData) {
  if (typeof cms_UserTracking_sendCustomEvent == 'function') {
    cms_UserTracking_sendCustomEvent(pLogData);
  }
}
