//
//-------------------------------------------------------------------
// Saturn-Projekt Javascript-Functions
//-------------------------------------------------------------------
//

// ******************************************************************
// Setzt die Hoehe eines Divs in Relation zu seinem Parent-Div
// ******************************************************************
function setDivHeight(divSrc, divDest, minHeight){
  if(document.getElementById(divDest) != null){
    if(document.getElementById(divSrc).offsetHeight > minHeight)
      document.getElementById(divDest).style.height=document.getElementById(divSrc).offsetHeight + "px";
    else
      document.getElementById(divDest).style.height= minHeight + "px";
  }
}

function setDivHeightFromParentToChilds(parentId, childsTagName, minheight) {
  var parent = document.getElementById(parentId);
  var maxHeight = parent.offsetHeight < minheight ? minheight : parent.offsetHeight;
  childsTagName = childsTagName.toUpperCase();

  for (var i = 0; i < parent.childNodes.length; i++) {

    if (parent.childNodes[i].tagName == childsTagName && parent.childNodes[i].offsetHeight > maxHeight) {
      maxHeight = parent.childNodes[i].offsetHeight;
    }
  }
  parent.style.height = maxHeight + 'px';

  for (var i = 0; i < parent.childNodes.length; i++) {

    if (parent.childNodes[i].tagName == childsTagName && parent.childNodes[i].className.toLowerCase() != 'break') {
      parent.childNodes[i].style.height = maxHeight + 'px';
    }
  }
}

// ******************************************************************
// Oeffnet einen link in einem neuen Fenster
// ******************************************************************
function openWindow(link, width, height) {
  var load = window.open(link, "", "menubar=0,toolbar=0,resizable=1,location=0,status=1,scrollbars=1,width=" + width + ",height=" + height);
  load.moveTo(0,0);
}

// ******************************************************************
// Nach Wahl einer Option in einer Selectbox wird die (als 'value'
// definierte) Url im selben Fenster geoeffnet
// ******************************************************************
function saturn_goAfterSelection (select) {
  var wert = select.options[select.options.selectedIndex].value;
  if (wert == "leer") {
    select.form.reset();
    return;
  } else {
    window.open(wert, "_self" );
  }
}

// ******************************************************************
// Entfernt Doubletten aus einem Array, liefert Array mit unique
// Elementen zurueck
// ******************************************************************
function saturn_uniqueArray(a) {
  tmp = new Array(0);
  for(i=0;i<a.length;i++){
    if(!saturn_arrayContains(tmp, a[i])){
      tmp.length+=1;
      tmp[tmp.length-1]=a[i];
    }
  }
  return tmp;
}

// ******************************************************************
// Entfernt Doubletten aus einem Array, liefert Array mit unique
// Elementen zurueck ignoriert dabei den letzten Eintrag für Anzahl
// ******************************************************************
function saturn_uniqueArrayQuantity(a) {
  tmp = new Array(0);
  for(i=0;i<a.length;i++){
    if(!saturn_arrayContains(tmp, a[i])){
      tmp.length+=1;
      tmp[tmp.length-1]=a[i];
    }
  }
  return tmp;
}

// ******************************************************************
// Entfernt Element aus einem Array
// ******************************************************************
function saturn_removeFromArray(a,e) {
  tmp = new Array(0);
  for(i=0;i<a.length;i++){
    if(a[i] != e){
      tmp.length+=1;
      tmp[tmp.length-1]=a[i];
    }
  }
  return tmp;
}

// ******************************************************************
// Gibt true zurueck, wenn Array 'a' den Wert 'e' enthaelt
// ******************************************************************
function saturn_arrayContains(a, e) {
  for(j=0;j<a.length;j++){
    var a1 = a[j].split('@');
    var a2 = e.split('@');
    a1.splice(a1.length - 1, 1);
    a2.splice(a2.length - 1, 1);
    if(a1.join('@') == a2.join('@'))return true;
  }
  return false;
}

// ******************************************************************
//
// ******************************************************************
/*
function saturn_createProductCompareList(formObj, checkBoxObjName, prevCompareList, maxItems){
  var counter=0;
  var compareList='';
  var compareArray = new Array(0);
  var prevCompareArray = new Array(0);
  if(prevCompareList.length > 0) {
    prevCompareArray = prevCompareList.toString().split(',');
  }
  if(formObj.elements[checkBoxObjName].type == 'checkbox') {
    compareArray = compareArray.concat(formObj.elements[checkBoxObjName].value);
  } else {
    for (i=0;i<formObj.elements[checkBoxObjName].length;i++){
      if (formObj.elements[checkBoxObjName][i].checked && counter < maxItems){
        compareArray = compareArray.concat(formObj.elements[checkBoxObjName][i].value);
      }
    }
  }
  compareArray = saturn_uniqueArray(compareArray.concat(prevCompareArray));
  if(compareArray.length > 10) {
    compareArray = compareArray.splice(0,10);
  }
  return compareArray.join(',');
}
*/

// ******************************************************************
// Wird beim Click auf die 'zum Vergleich hinzufuegen' - Checkbox
// ausgeloest. Fuegt dem Hidden-Field hiddenCompareList, welches eine
// kommaseparierte Liste aller Ids der bisher zum Vergleich ausgewaehlten
// Produkte als Value enthaelt, die entsprechende ProduktID hinzu bzw.
// entfernt die ProduktId aus der Liste.
// ******************************************************************
function saturn_onClickCompareCheckbox(checkbox, hiddenCompareList, maxLength, tooMuchMessage) {
  var compareArray = new Array(0);
  if(hiddenCompareList.value.length > 0) {
    compareArray = hiddenCompareList.value.toString().split(',');
  }
  if(checkbox.checked) {
    // Id hinzufuegen
    if(compareArray.length == maxLength) {
      // Maximale Produktanzahl wurde erreicht...
      alert(tooMuchMessage);
      checkbox.checked = false;
    } else {
      compareArray[compareArray.length] = checkbox.value;
    }
  } else {
    // Id entfernen
    var arTemp = new Array(0);
    for(var i=0; i<compareArray.length; i++) {
      if(checkbox.value != compareArray[i]) {
        arTemp[arTemp.length] = compareArray[i];
      }
    }
    compareArray = arTemp;
  }
  // neue Liste setzen
  hiddenCompareList.value = compareArray.join(",");
  //alert("checked: " + checkbox.checked + " prodID: " + checkbox.value + " comparelist " + hiddenCompareList.value);
}
// ******************************************************************
// Fuegt einer Url die Produktvergleichliste (kommasepariert) hinzu.
// Wird fuer die Pager-Urls ('zurueck', 'weiter', Selectbox) auf
// der Prodkat-Seite verwendet.
// ******************************************************************
function saturn_appendProductCompareListToUrl(url, compareList) {
  return url + "&compareList=" + compareList;
}

function CompareList() {

  var list = new Array();

  this.add = function(id) {

    if (!this.contains(id)) {
      list.push(id);
    }
  }

  this.remove = function(id) {

    if (this.contains(id)) {
      var newList = Array();

      for (var i = 0; i < list.length; i++) {

        if (list[i] != id) {
          newList.push(list[i]);
        }
      }
      list = newList;
    }
  }

  this.contains = function(id) {
    var result = false;

    for (var i = 0; i < list.length; i++) {

      if (list[i] == id) {
        result = true;
        break;
      }
    }
    return result;
  }

  this.size = function() {
    return list.length;
  }

  this.set = function(id, checked) {

    if (checked) {
      this.add(id);
    } else {
      this.remove(id);
    }
  }

  this.getFromUrl = function(url) {
    list = new Array();
    var compareParam = url.match(/(\?|\&)compareList=([^\&]*)/);

    if (compareParam) {
      var tmpList = decodeURI(compareParam[2]).split(',');

      for (var i = 0; i < tmpList.length; i++) {
        this.add(tmpList[i]);
      }
    }
  }

  this.setToUrl = function(url) {
    var newUrl = url.replace(/(\?|\&)compareList=([^\&]*)/g, '')

    if (newUrl.indexOf('?') == -1 && newUrl.indexOf('&') != -1) {
      newUrl = newUrl.replace(/\&/, '?');
    }
    newUrl += newUrl.indexOf('?') == -1 ? '?' : '&';
    newUrl += encodeURI('compareList=' + list);
    return newUrl;
  }

  this.setCompareCheckboxes = function(checkboxesList) {

      for (var i = 0; i < checkboxesList.length; i++) {
        var checkbox = checkboxesList[i];

        if (checkbox.checked) {
          this.add(checkbox.value);
        } else if (this.contains(checkbox.value)) {
          checkbox.checked = true;
        }
      }
    }

  this.toString = function() {
    return 'compareList=' + list;
  }

}

// ******************************************************************
// Loescht alle Cookies, wenn der Store Offline ist
// ******************************************************************
function saturn_onStoreOffline (cookieName, outletIdCookieName, shoppingListCookieName, sharedDomain){
  deleteAllDomainCookies();
  createCookie(outletIdCookieName, "", -1, sharedDomain);
}


// ******************************************************************
// Erzeugt einen Cookie
// ******************************************************************
function createCookie(name,value,days,domain) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  if (domain) {
    var dom = "; domain=" + domain;
  }
  else var dom = "";
  document.cookie = name+"="+value+expires+dom+"; path=/";
}

// ******************************************************************
// Liest einen Cookie, gibt den Cookiewert bzw. null zurueck
// ******************************************************************
function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0){
      return c.substring(nameEQ.length,c.length);
    }
  }
  return null;
}

// ******************************************************************
// Loescht alle Cookies dieser Domain
// ******************************************************************
function deleteAllDomainCookies() {
  var ca = document.cookie.split(';');
  // ueber alle Cookies iterieren
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    // Namen extrahieren
    var fields = c.split("=");
    // Cookie loeschen
    createCookie(fields[0], "", -1);
  }
  return null;
}
// ******************************************************************
// fuegt ein Produkt dem  Shoppinglist-Cookie hinzu
// ******************************************************************
function addToShoppinglistCookie(name,days,topCatId,parCatId,catId,prodId, maxItems, tooMuchMsg, okMsg, articlenumber, manufacturername) {
  var shoppingList = readCookie(name);
  var arShoppingList = Array(0);
  var newEntry = topCatId + '@' + parCatId + '@' + catId + '@' + prodId;
  if(!shoppingList) {
    createCookie(name,newEntry, days);
  } else {
    arShoppingList =   shoppingList.toString().split('|');
    if(arShoppingList.length >= maxItems) {
    } else {
      arShoppingList = saturn_uniqueArray(arShoppingList.concat(newEntry));
      shoppingList = arShoppingList.join('|');
      createCookie(name,shoppingList, days);
    }
  }
  var listitems = change_Merkzettel(name);
  var elementName = document.getElementById(name);
  
  if (elementName)
    elementName.innerHTML = listitems + ' Artikel auf Ihrem Merkzettel';
  document.getElementById('product_detail_list').style.display = 'block';
  if(articlenumber) {
    dcsMultiTrack('WT.cg_s','einkaufsliste_hinzufuegen',  'WT.pn_ma' , manufacturername, 'WT.pn_sku', articlenumber);
  } else {
    dcsMultiTrack('WT.cg_s','einkaufsliste_hinzufuegen');
  }
}

// ******************************************************************
// entfernt ein Produkt aus dem  Shoppinglist-Cookie
// ******************************************************************
function removeFromShoppinglistCookie(name,days,topCatId,parCatId,catId,prodId,link,articlenumber, manufacturername, categoryName, parentCategoryName, topCategoryName) {
  var shoppingList = readCookie(name);
  var arShoppingList = Array(0);
  var rmEntry = topCatId + '@' + parCatId + '@' + catId + '@' + prodId;
  //alert("removing entry: " + rmEntry);
  if(shoppingList) {
    arShoppingList =   shoppingList.toString().split('|');
    arShoppingList = saturn_removeFromArray(arShoppingList, rmEntry);
    shoppingList = arShoppingList.join('|');
    createCookie(name,shoppingList, days);
    if(link != null) {
      window.open(link, '_self');
    }
  }
  if(articlenumber) {
    dcsMultiTrack('WT.cg_s','einkaufsliste_entfernen', 'WT.pn_ma' , manufacturername, 'WT.pn_sku', articlenumber,  'WT.pn_gr', categoryName,  'WT.pn_fa', parentCategoryName, 'WT.pn_sc', topCategoryName);
  }
}

// ******************************************************************
// wechselt in der Zeitungsbeilagen-Ansicht das Bild der jeweiligen
// Seite (z.B. beim Klicken auf ein Thumbnail)
// ******************************************************************
function saturn_newspaper_switchimage(pagenoId, pageno, formName, imageCount, imgNameFrom, imgNameTo, currentPagenoName) {
  document.getElementById(pagenoId).firstChild.nodeValue = pageno;
  document.images[imgNameTo].src = document.forms[formName].elements[imgNameFrom].value;
  document.forms[formName].elements[currentPagenoName].value = pageno;
  pno = parseInt(pageno);
  max = parseInt(document.forms[formName].elements[imageCount].value);

  var pdfElement = document.getElementById(formName + "_" + pageno);
  document.getElementById('pagePdfUrl').href = pdfElement.value;

  // Ausblenden des zurueck-Links, wenn Seite 1 angezeigt wird
  if(pno == 1) {
    document.getElementById('prevpage').style.visibility = 'hidden';
  } else {
    document.getElementById('prevpage').style.visibility = 'visible';
  }
  // Ausblenden des weiter-Links, wenn die letzte Seite  angezeigt wird
  if(pno == max) {
    document.getElementById('nextpage').style.visibility = 'hidden';
  } else {
    document.getElementById('nextpage').style.visibility = 'visible';
  }
}

// ******************************************************************
// wechselt in der Zeitungsbeilagen-Ansicht auf das Bild der
// vorigen bzw naechsten Seite (beim Klicken auf den zurueck bzw.
// weiter-Link)
// ******************************************************************
function saturn_newspaper_switchimage_prevnext(pagenoId, formName, imageCount, imgNameFromPrefix, imgNameTo, currentPagenoName, increment) {
  curr = parseInt(document.forms[formName].elements[currentPagenoName].value);
  max = parseInt(document.forms[formName].elements[imageCount].value);
  curr = curr + increment;
  if(curr > max) curr = max;
  if(curr < 1) curr = 1;
  document.forms[formName].elements[currentPagenoName].value = curr.toString();
  saturn_newspaper_switchimage(pagenoId,curr.toString(),formName,imageCount,imgNameFromPrefix + curr.toString(),imgNameTo,currentPagenoName);
}

// ******************************************************************
// entfernt aus aValue alle Leerraeume, wie z.B. Leerzeichen,
// Tabulatoren usw.
// ******************************************************************
function trimAllWhitespaces(aValue) {
  aValue = aValue.replace(/\s/g,"");
  return aValue;
}

// ******************************************************************
// entfernt aus aValue alle fuehrenden und endenden Leerraeume, wie
// z.B. Leerzeichen, Tabulatoren usw.
// ******************************************************************
function trimWhitespaces(aValue) {
  aValue = aValue.replace(/^\s*/,"");
  aValue = aValue.replace(/\s*$/,"");
  return aValue;
}

// ******************************************************************
// Regulaere Ausdruecke zum validieren von Eingaben in Formularen
// ******************************************************************
  regExNames = /^([A-Za-zÃ¼Ã¶Ã¤ÃŸ]+ *-? *)+[A-Za-zÃ¤Ã¼Ã¶ÃŸ]+$/;
  regExStreet = /^([0-9A-Za-zÃ¼Ã¶Ã¤ÃŸ]+ *-? *)+[0-9A-Za-zÃ¤Ã¶Ã¼ÃŸ]+.?( *\d*)$/;
  regExPostalCode = /^[0-9]\d*$/;
  regExTel = /^[0-9\(\)\-\/]+$/;
  //regExTel = /^0[1-9][0-9]{1,3} *(-|\/| *) *[1-9][-0-9]*$/;
  regExEmail = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([a-z]{2,3})|(aero|coop|info|museum|name))$/;
  regExNotEmpty = /.+/;
  regExAmount = /(^[1-9][0-9]{0,2}(\.[0-9]{3})*$)|(^[1-9]\d*$)/;
  // ******************************************************************
  // schreibt und loescht default Werte in Eingabefeldern
  // ******************************************************************
  function onFocus(element,text) {
    if(document.getElementById(element).value!="" && document.getElementById(element).value!=text) return;
     document.getElementById(element).value="";

    }
  function onBlur(element,text) {
    if(document.getElementById(element).value!="" && document.getElementById(element).value!=text) return;
        document.getElementById(element).value=text;
    }

  function change_Merkzettel(check_name) {
  var a_all_cookies = document.cookie.split( ';' );
  var a_temp_cookie = '';
  var cookie_name = '';
  var cookie_value = '';
  var b_cookie_found = false; // set boolean t/f default f
  for ( i = 0; i < a_all_cookies.length; i++ )
  {
    a_temp_cookie = a_all_cookies[i].split( '=' );
      cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
    if ( cookie_name == check_name ){
      b_cookie_found = true;
      if ( a_temp_cookie.length > 1 ){ cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );}
        var length = 0;
        if (cookie_value){
          var cookie_value_array = cookie_value.split("|");
          length = cookie_value_array.length;
        }
        return length;
              break;
      }
      a_temp_cookie = null;
      cookie_name = '';
   }
   if ( !b_cookie_found ){
           return 0;
         }
  }

function getMail(url) {
  if (!(regExEmail.exec(document.getElementById("emailinput").value))){
    alert("Bitte geben Sie eine g" + unescape("%FC") + "ltige Emailadresse ein!\nZ.B.: max.mustermann@ihr-mail-provider.de");
    return;
  }
  url = url + "&mail=" + document.getElementById("emailinput").value;
  window.open(url, '_self');
}

// ******************************************************************
// Hilfsmethode zum Herausfiltern von childNodes, die nicht dem
// gewünschten nodeName (Tag) entsprechen.
// ******************************************************************
function getChildNodesWithNodeName(parentNode, nodeName) {
  var result = new Array();
  var childNodes = parentNode.childNodes;
  nodeName = nodeName.toLowerCase();

  for (var i = 0; i < childNodes.length; i++) {

    if (childNodes[i].nodeName.toLowerCase() == nodeName) {
      result.push(childNodes[i]);
    }
  }
  return result;
}

// ******************************************************************
// Hilfsmethode zum Sortieren eines NodeArrays nach OffsetWidth
// von childDivNodes.
// ******************************************************************
function sortChildDivOffsetWidth(node1, node2) {
  node1 = getChildNodesWithNodeName(node1, 'div')[0];
  node2 = getChildNodesWithNodeName(node2, 'div')[0];
  return node1.offsetWidth - node2.offsetWidth;
}

// ******************************************************************
// Hilfsmethode zum Tauschen eines CSS-Attributs zweier Elemente.
// ******************************************************************
function swapStyle(id1, id2, attribute) {
  var result = false;
  var e1 = document.getElementById(id1);
  var e2 = document.getElementById(id2);

  if (e1 != null && e2 != null) {
    var value = e1.style[attribute];
    e1.style[attribute] = e2.style[attribute];
    e2.style[attribute] = value;
    result = true;
  }
  return result;
}

// ******************************************************************
// Hilfsmethode zum Setzen eines CSS-Attributs eines Elements.
// ******************************************************************
function setStyle(id, attribute, value) {
  var element = document.getElementById(id);

  if (element) {
    element.style[attribute] = value;
  }
  return element != null;
}

// ******************************************************************
// Hilfsmethode zum Ermitteln eines URL-Parameters.
// ******************************************************************
function getParameter(parameterName) {
  var parameter = null;
  var parameters = document.location.search.substring(1, document.location.search.length).split("&");

  for (var i = 0; i < parameters.length; i++) {

    if (parameters[i].indexOf(parameterName + '=') == 0) {
      parameter = parameters[i].substr((parameterName + '=').length);
      break;
    }
  }
  return parameter;
}

// ******************************************************************
// Hilfsmethode zum Hinzufuegen eines Events.
// ******************************************************************
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

// ******************************************************************
// Hilfsmethode zum Entfernen eines Html-Elements.
// ******************************************************************
function removeElement(id) {
  var element = document.getElementById(id);

  if (element != null) {
    element.parentNode.removeChild(element);
  }
}

// ******************************************************************
// Hilfsmethode zum (Er)Setzen eines meta-Tags im head einer Seite.
// ******************************************************************
function setMetaTag(name, content) {
  var metaElement = null;
  var metaElements = document.getElementsByTagName('meta');
  
  for (var i = 0; i < metaElements.length; i++) {
    
    if (metaElements[i].name == name) {
      metaElement = metaElements[i];
      break;
    }
  }
  
  if (metaElement == null) {
    metaElement = document.createElement('meta');
    metaElement.name = name;
    document.getElementsByTagName('head')[0].appendChild(metaElement);
  }
  metaElement.content = content;
}


// ******************************************************************
// helper-method to test, if a meta-tag exists
// ******************************************************************
function existsMetaTag(name) {
  var metaElements = document.getElementsByTagName('meta');
  
  for (var i = 0; i < metaElements.length; i++) {
    
    if (metaElements[i].name == name) {
      return true;
    }
  }
  return false;
}

// ******************************************************************
// helper-method to add contents to a webtrends-meta-tag contents
// ******************************************************************
function addContentToWtMetaTag(name, content) {
  var metaElement = null;
  var metaElements = document.getElementsByTagName('meta');
  var ct = null;
  var se =';';
  
  for (var i = 0; i < metaElements.length; i++) {
    
    if (metaElements[i].name == name) {
      metaElement = metaElements[i];
      break;
    }
  }
  if (metaElement == null) {
    metaElement = document.createElement('meta');
    metaElement.name = name;
    document.getElementsByTagName('head')[0].appendChild(metaElement);
    metaElement.content = '';
    se='';
  }
  ct = content;
  if (ct != '') {  
    ct = ct.replace(/&/g, "+");
    ct = ct.replace(/=/g, ":");
    ct = ct.replace(/;/g, ":");
    if(ct.length>64) {
      ct = ct.substr(0, 64);
    }
  }
  metaElement.content = metaElement.content + se + ct;  
}

// ******************************************************************
// helper-method to change imageMap area tags
// ******************************************************************
function changeAreaHrefsOfImageMap(mapName, wtac) {
  var mapElement = document.getElementsByName(mapName);
  var areaElements = mapElement[0].areas;
  var areaLength = mapElement[0].areas.length;
  for(var i=0;i<areaLength;i++){
    if(areaElements[i].href.length>0){  	  
      if(areaElements[i].href.indexOf("?") !=-1){
        areaElements[i].href=areaElements[i].href+'&'+wtac;
      }else{
        areaElements[i].href=areaElements[i].href+'?'+wtac;
      }
    }
  }
}

// ******************************************************************
// helper-method to check if the rightbar is visible / 
// requires rightbar-element with id-attribute with value 'bt1s' 
// ******************************************************************
function rightbarIsVisible() {

  var boxElement = document.getElementById('bt1s');
  var elementHeight;
  var elementWidth;
  if(boxElement != null){
    elementHeight = boxElement.clientHeight;
    elementWidth = boxElement.clientWidth;
    if(elementHeight == 0 && elementWidth == 0){
     return false;
    }
  }
  return true;
}

