//==================================================================================
//==================================================================================
// 
// TOOLS-MODUL
// AUTOR: DF
// ERSTELLT: 18.03.2004
//
//==================================================================================
//==================================================================================

// ============================================================
// Globale Deklarationen
// ============================================================

// den undefinierten Wert deklarieren
var undefined;


// ============================================================
// Klasse Tools
// ============================================================

// ------------------------------------------------------------
// Konstruktor
// ------------------------------------------------------------

// ---------------------------------------
// Tools()
// ---------------------------------------
//
// Beispiel:
// ---------
// new Tools()
//
function Tools() {
}

// ------------------------------------------------------------
// Zugriffsfunktionen
// ------------------------------------------------------------

// ------------------------------------------------------------
// Öffentliche Instanzmethoden
// ------------------------------------------------------------

// ------------------------------------------------------------
// Private Instanzmethoden
// ------------------------------------------------------------

// ------------------------------------------------------------
// Öffentliche Klasseneigenschaften
// ------------------------------------------------------------

// ------------------------------------------------------------
// Private Klasseneigenschaften
// ------------------------------------------------------------

// ------------------------------------------------------------
// Öffentliche Klassenmethoden
// ------------------------------------------------------------

// -------------------------------------------
// Tools.checkNumber()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode prüft Argument auf type Number
//
// Beispiel:
// ---------
// Tools.checkNumber(n);

Tools.checkNumber = function(n){
  if (!arguments.length){
    return false;
  }
  if (n == undefined){
    return false;
  }
  n = n.toString();
  if (n == '0'){
    return n;
  }
  if (!n.length){
    return false;
  }
  n = n.replace(/,/g,'.');
  if (isNaN(n)){
    return false;
  }
  if (!isFinite(n)) {
    return false;
  }
  n = parseFloat(n);
  return n;
}

// -------------------------------------------
// Tools.divAbrunden()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode führt eine division durch und rundet Ergebnis ab.
//
// Beispiel:
// ---------
// Tools.divAbrunden(dividend, divisor);

Tools.divAbrunden = function(dividend, divisor){
  return Math.floor (dividend / divisor);
}

// -------------------------------------------
// Tools.checkWertInArrayVorhanden(str, arr)
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode prüft ob ein Wert in einem Array vorhanden ist.
// Argument = wert und jeweiliges Array
//
// Beispiel:
// ---------
// Tools.checkWertinArrayVorhanden(str, arr);

Tools.checkWertInArrayVorhanden = function(){
  var str = arguments[0];
  var arr = new Array();
  arr = arguments[1];
  for (var i in arr){
    if (arr[i] == str){
      return true;
    } 
  }
  return false;
}


// -------------------------------------------
// Tools.getAssArrayFromArgArr(assArr, argArr)
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode extrahiert aus einem ArgumentArray die AssoziativenArray und überschreibt das mitgelieferte AssoziativeArray,
// welches zurückgegeben wird.
//
// Beispiel:
// ---------
// Tools.getArgumentsAssArray(assArr, argArr);

Tools.getArgumentsAssArray = function(){
  var assArr = {};
  var argArr = [];
  assArr = arguments[0];
  argArr = arguments[1];
  if (argArr.length){
    var tempAssArr = [];
    for (var i=0; i<argArr.length; i++){
      tempAssArr[i] = {};
      tempAssArr[i] = argArr[i];
      for (var k in tempAssArr[i]){
        assArr[k] = tempAssArr[i][k];
      }
    }
  }  
  return assArr;
}

// -------------------------------------------
// Tools.gibBundesland(n)
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode gibt ein dt. Bundesland zurück
//
// Beispiel:
// ---------
// Tools.gibBundesland(n);

Tools.gibBundesland = function(n){
  var bundesland = [];
  bundesland[0] = 'Baden-Württemberg';
  bundesland[1] = 'Bayern';
  bundesland[2] = 'Berlin';
  bundesland[3] = 'Brandenburg';
  bundesland[4] = 'Bremen';
  bundesland[5] = 'Hamburg';
  bundesland[6] = 'Hessen';
  bundesland[7] = 'Mecklenburg-Vorpommern';
  bundesland[8] = 'Niedersachsen';
  bundesland[9] = 'Nordrhein-Westfalen';
  bundesland[10] = 'Rheinland-Pfalz';
  bundesland[11] = 'Saarland';
  bundesland[12] = 'Sachsen';
  bundesland[13] = 'Sachsen-Anhalt';
  bundesland[14] = 'Schleswig-Holstein';
  bundesland[15] = 'Thüringen';
  
  if(bundesland[n]){
    return bundesland[n];
  }
  return undefined;
}

// -------------------------------------------
// Tools.gibBundeslaender()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode gibt eine Liste der dt. Bundesländer zurück
//
// Beispiel:
// ---------
// Tools.gibBundeslaender();

Tools.gibBundeslaender = function(){
  var bundesland = [];
  bundesland[0] = 'Baden-Württemberg';
  bundesland[1] = 'Bayern';
  bundesland[2] = 'Berlin';
  bundesland[3] = 'Brandenburg';
  bundesland[4] = 'Bremen';
  bundesland[5] = 'Hamburg';
  bundesland[6] = 'Hessen';
  bundesland[7] = 'Mecklenburg-Vorpommern';
  bundesland[8] = 'Niedersachsen';
  bundesland[9] = 'Nordrhein-Westfalen';
  bundesland[10] = 'Rheinland-Pfalz';
  bundesland[11] = 'Saarland';
  bundesland[12] = 'Sachsen';
  bundesland[13] = 'Sachsen-Anhalt';
  bundesland[14] = 'Schleswig-Holstein';
  bundesland[15] = 'Thüringen';
  return bundesland;
}

// ------------------------------------------------------------
// Private Klassenmethoden
// ------------------------------------------------------------

// ------------------------------------------------------------
// toString()
// ------------------------------------------------------------

Tools.prototype.toString = function() {
  // zunaechst an Methode der Basisklasse weiterleiten
  return Object.prototype.toString.apply(this);
}


//***************************************************************************************************
//***************************************************************************************************
//**
//** RELATIVE POSITIONS-ERMITTLUNG VON DIV-ELEMENTEN
//** Autor: DF
//** Erstellung: 24.05.2004
//** © rdts AG
//**
//***************************************************************************************************
//***************************************************************************************************


var undefined;


function ElementProps(id, idParentElement) {  
  // Attribute
  this._id = undefined;
  this._idParentElement = undefined;
  this._positionTop = undefined;  
  this._positionLeft = undefined;  
  this._width = undefined; 
  this._height = undefined; 
  this._positionBottom = undefined; 
  this._positionRight = undefined; 
  // Initialisierungen
  this.id(id);
  this.idParentElement(idParentElement);
  this.positionTop(this._getPositionTop());
  this.positionLeft(this._getPositionLeft());
  this.width(this._getWidth());
  this.height(this._getHeight());
  this.positionBottom(this._getPositionBottom());
  this.positionRight(this._getPositionRight());
}

// ------------------------------------------------------------
// Zugriffsfunktionen
// ------------------------------------------------------------

// -----------
// id(string)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.id = function(str) {
  if (arguments.length) {
    if (typeof str != "string") {
      focus();
      throw new Error("ArgumentError:noString!");
    }
    this._id = str;
  }
  return this._id;
}

// -----------
// idParentElement(string)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.idParentElement = function(str) {
  if (arguments.length) {
    if (typeof str != "string") {
      focus();
      throw new Error("ArgumentError:noString!");
    }
    this._idParentElement = str;
  }
  return this._idParentElement;
}

// -----------
// positionTop(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.positionTop = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._positionTop = n;
  }
  return this._positionTop;
}

// -----------
// positionLeft(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.positionLeft = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._positionLeft = n;
  }
  return this._positionLeft;
}

// -----------
// positionBottom(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.positionBottom = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._positionBottom = n;
  }
  return this._positionBottom;
}

// -----------
// positionRight(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.positionRight = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._positionRight = n;
  }
  return this._positionRight;
}

// -----------
// width(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.width = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._width = n;
  }
  return this._width;
}

// -----------
// height(number)
// -----------
//
// Beschreibung:
// -------------
//

ElementProps.prototype.height = function(n) {
  if (arguments.length) {
    if (!Tools.checkNumber(n)) {
      focus();
      throw new Error("ArgumentError:noNumber!");
    }
    this._height = n;
  }
  return this._height;
}

// ------------------------------------------------------------
// Private Instanzmethoden
// ------------------------------------------------------------

// -------------------------------------------
// _getPositionTop()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt relative Top-Position zu einem bestimmten Eltern-Element.
//
// Beispiel:
// ---------
// _getPositionTop();
//

ElementProps.prototype._getPositionTop = function() {
  if (this._existsElement(this.id())){
    var parentDiv = document.getElementById(this.id());
    var topPosition = 0;
    if (this._existsElement(this.idParentElement())){
      while (parentDiv && parentDiv.id != this.idParentElement()){
        if (parentDiv.nodeType == 1){
          topPosition += parseFloat(parentDiv.offsetTop);
        }  
        parentDiv = parentDiv.offsetParent;
      }
    }
    else{
      while (parentDiv){
        if (parentDiv.nodeType == 1){
          topPosition += parseFloat(parentDiv.offsetTop);
        }  
        parentDiv = parentDiv.offsetParent;
      }
    }  
    return parseFloat(topPosition);
  }
  return undefined;
}

// -------------------------------------------
// _getPositionLeft()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt relative Left-Position zu einem bestimmten Eltern-Element.
//
// Beispiel:
// ---------
// _getPositionLeft();
//

ElementProps.prototype._getPositionLeft = function() {
  if (this._existsElement(this.id())){
    var parentDiv = document.getElementById(this.id());
    var leftPosition = 0;
    if (this._existsElement(this.idParentElement())){
      while (parentDiv && parentDiv.id != this.idParentElement()){
        if (parentDiv.nodeType == 1){
          leftPosition += parseFloat(parentDiv.offsetLeft);
        }  
        parentDiv = parentDiv.offsetParent;
      }
    }
    else{
      while (parentDiv){
        if (parentDiv.nodeType == 1){
          leftPosition += parseFloat(parentDiv.offsetLeft);
        }  
        parentDiv = parentDiv.offsetParent;
      }
    }
    return parseFloat(leftPosition);
  }
  return undefined;
}

// -------------------------------------------
// _getPositionBottom()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt relative Bottom-Position zu einem bestimmten Eltern-Element.
//
// Beispiel:
// ---------
// _getPositionBottom();
//

ElementProps.prototype._getPositionBottom = function() {
  if (this._existsElement(this.id())){
    var bottomPosition = parseFloat(this.positionTop() +  this.height());
    return parseFloat(bottomPosition);
  }
  return undefined;
}

// -------------------------------------------
// _getPositionRight()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt relative Right-Position zu einem bestimmten Eltern-Element.
//
// Beispiel:
// ---------
// _getPositionRight();
//

ElementProps.prototype._getPositionRight = function() {
  if (this._existsElement(this.id())){
    var rightPosition = parseFloat(this.positionLeft() + this.width());
    return parseFloat(rightPosition);
  }
  return undefined;
}

// -------------------------------------------
// _getWidth()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt width des Elements.
//
// Beispiel:
// ---------
// _getWidth();
//

ElementProps.prototype._getWidth = function() {
  if (this._existsElement(this.id())){
    var width = parseFloat(document.getElementById(this.id()).offsetWidth);
    return parseFloat(width);
  }
  return undefined;
}

// -------------------------------------------
// _getHeight()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt height des Elements.
//
// Beispiel:
// ---------
// _getHeight();
//

ElementProps.prototype._getHeight = function() {
  if (this._existsElement(this.id())){
    var height = parseFloat(document.getElementById(this.id()).offsetHeight);
    return parseFloat(height);
  }
  return undefined;
}

// -------------------------------------------
// _existsElement()
// -------------------------------------------
//
// Beschreibung:
// -------------
// Methode ermittelt relative Right-Position zu einem bestimmten Eltern-Element.
//
// Beispiel:
// ---------
// _existsElement();
//

ElementProps.prototype._existsElement = function(id) {
  if (document.getElementById(id) != undefined){
    return true;
  }
  return false;
}

// ------------------------------------------------------------
// Öffentliche Klassenmethoden
// ------------------------------------------------------------

// -------------------------------------------
// ElementProps.createElementProps()
// -------------------------------------------
//
// Beschreibung:
// -------------
//   ...
//
// Beispiel:
// ---------
// ElementProps.createElementProps(id, idParentElement);
//

ElementProps.createElementProps = function(id, idParentElement) { 
  return new ElementProps(id, idParentElement);
}

// ------------------------------------------------------------
// toString()
// ------------------------------------------------------------

ElementProps.prototype.toString = function() {
  // zunaechst an Methode der Basisklasse weiterleiten
  return Object.prototype.toString.apply(this);
}



////////////////////////////////////////////////////////////////////////////////////

var layerAnzahl = 7;
var activeLayer = 0;

function startMenu(id){
  closeAllSubMenu();
  rePositioningMainMenu(activeLayer);  
  parent.fbs_oben.oben_mausklick(0);
  parent.fbs_oben.schliesse_alles_oben();
  if (id != activeLayer){
    if (document.getElementById('untermen' + id)){
      var subElemProps = ElementProps.createElementProps('untermen' + id, '');
      for (var i=id+1; i<=layerAnzahl; i++){
        if (document.getElementById('linksmen' + i)){
          var elemProps  = ElementProps.createElementProps('linksmen' + i, '');
          document.getElementById('linksmen' + i).style.top = parseFloat(elemProps.positionTop() + subElemProps.height());
        }
      }
      var elemProps  = ElementProps.createElementProps('linksmen' + id, '');
      document.getElementById('untermen' + id).style.top = parseFloat(elemProps.positionTop() + 20);
    }
    showSubMenu(id);
    links_mausweg2(activeLayer);
    activeLayer = id;
  }  
  else{
    activeLayer = 0;
  }
}

function startMenuVonOben(){
  closeAllSubMenu();
  if (activeLayer != 0){
    rePositioningMainMenu(activeLayer); 
  }  
  activeLayer = 0;
}

function showSubMenu(id){
  if (document.getElementById('untermen' + id)){
    document.getElementById('untermen' + id).style.visibility = 'visible';
  }
}

function closeAllSubMenu(){
  for (var i=1; i<=layerAnzahl; i++){
    if (document.getElementById('untermen' + i)){
      document.getElementById('untermen' + i).style.visibility = 'hidden';
    }  
  }
}

function rePositioningMainMenu(id){
  if (document.getElementById('untermen' + id)){
    var subElemProps = ElementProps.createElementProps('untermen' + id, '');
    if (id != 0){
      for (var i=id+1; i<=layerAnzahl; i++){
        if (document.getElementById('linksmen' + i)){
          var elemProps  = ElementProps.createElementProps('linksmen' + i, '');
          document.getElementById('linksmen' + i).style.top = parseFloat(elemProps.positionTop() - subElemProps.height());
        }
      }
    }  
  }  
}

var menuPic = [];
for (var i=1; i<=layerAnzahl; i++){
  menuPic[i] = [];
  menuPic[i][0] = new Image();
  menuPic[i][0].src = 'navigation/lm_'+ i +'_.gif';
  menuPic[i][1] = new Image();
  menuPic[i][1].src = 'navigation/lm_'+ i +'.gif';
}

function links_mausueber(id){
  if (document.images['punkt' + id]){
    document.images['punkt' + id].src = menuPic[id][0].src;
  }
}

function links_mausweg(id){
  if (document.images['punkt' + id]){
    if (id != activeLayer){
      document.images['punkt' + id].src = menuPic[id][1].src;
    }
  }
}

function links_mausweg2(id){
  if (document.images['punkt' + id]){
    document.images['punkt' + id].src = menuPic[id][1].src;
  }
}

function links_mauswegAll(){
  for (var i=1; i<=layerAnzahl; i++){
    if (document.images['punkt' + i]){
      document.images['punkt' + i].src = menuPic[i][1].src;
    }
  }
}

// Hilfsfunktionen

function aktuelles_datum(){
  heute=new Date();
  wotag=heute.getDay();
  tag=heute.getDate();
  mo=heute.getMonth();
  mo=mo+1;

  jahr=heute.getYear();
  jahrkorr=parseInt(jahr);
  jahrkorr2=""+jahrkorr;
  laenge=jahrkorr2.length;
  jahrkorr3="20"+jahrkorr2.substr(laenge-2, laenge-1);

  if (mo < 10){
    mo="0"+mo;
  }
  if (tag < 10){
    tag="0"+tag;
  }

  var datumaktuell=jahrkorr3+mo+tag;
  return datumaktuell;
}



