
/**
 * Passt die im Array angegebenen HTML Elemente in der ihrer Höhe an.
 * Der grösste Wert wird auf den Elementen als Inline-CSS gesetz.
 *
 */
function fitHeight(){

  var elements = new Array(document.getElementById('leftContent'), document.getElementById('rightContent'), document.getElementById('centerContent'));
  var tallestHeight = 0;

  for(var i = 0; elements.length != i; i++) {  
    if (elements[i] == null) continue; // Prüft ob das HMTL-Element existiert

    var currentBoxHeight;

    currentBoxHeight =  getComputedHeight(elements[i]);
    
    tallestHeight = Math.max(tallestHeight, currentBoxHeight);
  }

  for(var i = 0; i < elements.length; ++i) {
    if (elements[i] == null) continue;

     elements[i].style.height = tallestHeight + 'px';
  }
}



/**
 * Setzt der ImageHeaderBox eine Höhe wenn das Logo grösser ist als das Kopfbild.
 */
function fitHeaderHeight() {
  var siteId       = document.getElementById('siteId');
  var siteIdHeight = 0;
  if (siteId != null) siteIdHeight = getComputedHeight(siteId);

  var header       = document.getElementById('header');
  var headerHeight = 0;
  if (header != null) headerHeight = getComputedHeight(header);
  
  if(siteIdHeight > headerHeight) {
    var headerImageBox          = document.getElementById('headerImageBox');
    headerImageBox.style.height = siteIdHeight + 'px';
  }
}

/**
 * Der Navigation wird die Höhe des List-Items gesetzt.
 */
function setNavigationHeight() {
  var navigation           = document.getElementById('horizontalNav');
  if( navigation == null ) return;

  var navigationListItem   = navigation.getElementsByTagName("li")[0];
  var navigationItemHeight = getComputedHeight(navigationListItem);
  navigation.style.height  = navigationItemHeight + 'px';
}

/**
 * Wenn die Suche in der Navigation liegt, wird die Höhe der Suche mit den Einträgen in der Navigation gleich gesetzt.
 */
function fitSearchHeightInNavigation() {
  var search                 = document.getElementById('search');
  if( search == null ) return; // testet ob Suche existiert, damit ist auch abgedeckt ob die Navigation existiert.
  var navigation             = document.getElementById('horizontalNav');
  
  if( search.parentNode == navigation ) {
    var navigationListItem   = navigation.getElementsByTagName("li")[0];
    var navigationItemHeight = getComputedHeight(navigationListItem);
    search.style.height      = navigationItemHeight + 'px';
  }
}

/**
 * Passt die Höhe des Misc an, wenn die Suche darin enthalten ist. 
 */
function fitMiscHeight() {
  var search        = document.getElementById('search');
  if ( search == null ) return;
  var miscellaneous = document.getElementById('miscellaneous');

  if( search.parentNode == miscellaneous ) {
    miscellaneous.style.height = getComputedHeight(search) + 'px';
  }
  
  /*
  var shortcuts     = document.getElementById('shortcuts');
  
  var useSearchHeight = true;
  if( shortcuts != null && shortcuts.parentNode == miscellaneous) {
    useSearchHeight = false;
  }
  
  if (useSearchHeight) {
    miscellaneous.style.height = getComputedHeight(search) + 'px';
  }*/
}

/**
 * Gibt die Höhe des Elmentes zurück als Int.
 * @retrun Höhe des Elementes als Int.
 */
function getComputedHeight(element) {
  if( window.getComputedStyle ) {
    var elemHeight = window.getComputedStyle(element, null).height;
    return Math.ceil(separatePXFromValue(elemHeight));
  } else {
    // only for IE
    return parseInt(element.offsetHeight);
  }
}

/**
 * Wandelt den mitgegebenen PX-Wert in einen Int ohne Masseingeit um.
 * @retrun Int Wert.
 */
function separatePXFromValue(value) {
  return parseInt(value.split('px')[0]);
}

/**
 * Cross-Browser Ereignis-Registrierung
 *
 * @param eventType
 * @param eventListener   Funktion die ausgeführt werden soll
 * @param useCaption
 */
function addEvent(eventType, eventListener, useCaption) {
  if (window.addEventListener) {
    window.addEventListener(eventType, eventListener, useCaption);
    return true;
  }

  if (window.attachEvent) {
    var result = window.attachEvent("on"+eventType, eventListener);
    return result;
  }	   
  return false;
}

addEvent("load", fitHeight, false);
addEvent("load", fitHeaderHeight, false);
addEvent("load", fitSearchHeightInNavigation, false);
addEvent("load", setNavigationHeight, false);
addEvent("load", fitMiscHeight, false);
  
