// DHTML Basisfunktionen

// Funktions- und Environmet-Variablen
var _ALVINE_DHTML = false;
var _ALVINE_DOM = false;
var _ALVINE_IE = false;
var _ALVINE_NS = false;
var _ALVINE_OP = false;
var _ALVINE_MAC = false;

// Initialisieren der Environmet-Variablen
function initLib() {
  if(document.getElementById) {
    _ALVINE_DHTML = true;
    _ALVINE_DOM = true;
  }
  
  if(window.opera) {
    _ALVINE_OP = true;
  }

  if(document.all && !_ALVINE_OP) {
    _ALVINE_DHTML = true;
    _ALVINE_IE = true;
  };
 
  if(document.layers && !_ALVINE_OP) {
    _ALVINE_DHTML = true;
    _ALVINE_NS = true; 
  };
  
  if(navigator.userAgent.indexOf("Mac") != -1) {
    _ALVINE_MAC = true;
  };

};

// System- und browserunabhägige Funktion um ein
// Element (Objekt) zu holen
// @param type Auswahl aus: id, name, tagname
// @param ptr ID oder Name des Elements
// @param index Nur bei Verwendung des Typ tagname
function getElement(type, ptr, index) {

  if(_ALVINE_DOM) { 
    if(type.toLowerCase()=="id") { 
      if(typeof document.getElementById(ptr) == "object") {
        return document.getElementById(ptr);
      };
      return void(0);

    } else if(type.toLowerCase()=="name") {
      if(typeof document.getElementsByName(ptr) == "object") {
        return document.getElementsByName(ptr)[index];
      };
      return void(0);

    } else if(type.toLowerCase()=="tagname") {
      if(typeof document.getElementsByTagName(ptr) == "object" || (_ALVINE_OP && typeof document.getElementsByTagName(ptr) == "function")) {
        return document.getElementsByTagName(ptr)[index];
      };
      return void(0);
    } else {
      return void(0);
    };

  } else if(_ALVINE_IE) {

    if(type.toLowerCase()=="id") {
      if (typeof document.all[ptr] == "object") {
        return document.all[ptr];
      };
      return void(0);

    } else if(type.toLowerCase()=="tagname") {
      if(typeof document.all.tags(ptr) == "object") {
        return document.all.tags(ptr)[index];
      };
      return void(0);

    } else if(type.toLowerCase()=="name") {
      if(typeof document[ptr] == "object") {
        return document[ptr];
      };
      return void(0);
    } else {
      return void(0);
    };

  } else if(_ALVINE_NS) {   

    if(type.toLowerCase()=="id" || type.toLowerCase()=="name") {
      if (typeof document[ptr] == "object") {
        return document[ptr];
      };
      return void(0);

    } else if(type.toLowerCase()=="index") {
      if (typeof document.layers[ptr] == "object") {
        return document.layers[ptr];
      };
      return void(0);
    } else {
      return void(0);
    };
  };
  return void(0);
}

// Browserunabhängig Inhalte in die Seite einfügen
//Eine Funktion zum ersetzen von Inhalten eines Kind-Objektes durch Zugriff über das Eltern-Element.
//Achtung: Innerhalb das Kind-Element sollte den gesamten zu ersetzenden Content umfassen. Ein anderes Element, 
//         wie zum Beipsiel ein <b> ist bereits ein Element für sich und würde als solches auch interpretiert werden.
//         Lösung: Umfassende Elemente, wie SPAN,DIV,P drum herum verwenden.
// @param obj Zeiger auf Objekt
// @param content Zu schreibender Inhalt
// @param container umfassender Container, der den Inhalt umfasst

function replaceContent(obj, head, content, container){
  if(container!=undefined) container = 'div';

  var box = document.createElement(container);
  var textnode; 
  
  if(head!=undefined){
    textnode = document.createTextNode(head);
    var headtext = document.createElement('strong');
    headtext.appendChild(textnode); 

  }
  box.appendChild(headtext);
  
  textnode = document.createTextNode(content);
  var contenttext = document.createElement('p');
  contenttext.style.margin = '0px 0px 50px 0px';
  contenttext.appendChild(textnode); 
  
  box.appendChild(contenttext); 
  
  obj.removeChild(obj.firstChild);
  obj.appendChild(box);
}


// Browserunabhängig Inhalte in die Seite einfügen
// @param obj Zeiger auf Objekt
// @param content Zu schreibender inhalt (nur Text)
function writeContent(obj, content) {

   if(!obj) return void(0);  
   if(_ALVINE_OP) {

     // nicht implementiert
   
   } else if(_ALVINE_DOM) {  
     if(obj.firstChild) { 
       obj.firstChild.nodeValue = content;
     };

   } else if(_ALVINE_IE) {
     obj.innerText = content;

   } else if(_ALVINE_NS) { 
     obj.document.open();
     obj.document.write(content);
     obj.document.close();
   };
};

// Diese Funktion verschiebt ein Objekt 
// an die angegebenen koordinaten
function moveElementTo(obj, x, y) {

  if(_ALVINE_DOM || _ALVINE_OP) { 
    obj.style.left = x+'px';
    obj.style.top = y+'px'; 
  } else if(_ALVINE_NS) { 
    obj.moveTo(x, y);
  };

 };

// Sichtbarkeit von Elementen ändern.
// @param obj Zeiger auf Element
// @param flag true: sichtbar, false: unsichtbar
function setVisibility(obj, flag) {

   if(!obj) return void(0);

   if(_ALVINE_DOM || _ALVINE_OP) { 
     if(flag) { 
       obj.style.visibility = "visible";
     } else {
       obj.style.visibility = "hidden";
     };

   } else if(_ALVINE_IE) {
     if(flag) { 
       obj.style.visibility = "visible";
     } else {
       obj.style.visibility = "hidden";
     };
   
   } else if(_ALVINE_NS) { 
     if(flag) { 
       obj.visibility="show";
     } else {
       obj.visibility="hide";
     };
   };
};

// Position eines Elements ermitteln
// Diese Funktion arbeitet mit dem Offset eines Elements
// und arbeitet sich rekursiv durch das DOM
// Ist eine AbbruchsID angegeben und trift
// die Funktion auf dieses Element so wird der
// Wert zurückgegeben
// @param obj Zeiger auf Element
// @param id AbbruchsID
function getLeftOfElement(obj, id) {

  if(_ALVINE_NS) return obj.pageX;

  if(!id) id = "noid"; 
  var left = obj.offsetLeft;
  if(obj.id==id) return left;

  if(obj.offsetParent!=null && obj.offsetParent.tagName!="HTML") {
    left += getLeftOfElement(obj.offsetParent);
  };
  return left;
}

// Identische Funktion für die Y-Koordinate
// @param obj Zeiger auf Element
// @param id AbbruchsID
function getTopOfElement(obj, id) {

  if(_ALVINE_NS) return obj.pageY;
  if(!id) id = "noid"; // dummywert!
  var top = obj.offsetTop; 

//alert(obj.tagName + " / " + obj.id + " = "+top);
  if(obj.id==id) return top;
  if(obj.offsetParent!=null && obj.offsetParent.tagName!="HTML") {
    top += getTopOfElement(obj.offsetParent);
  };
  
  // to: add padding
  
  return top;
}

// Höhe eines Objektes zurückgeben
function getHeightOfElement(obj) {
  if(_ALVINE_NS) return obj.height;
  return obj.offsetHeight;
};

// Breite eines Objektes zurückgeben
function getWidthOfElement(obj) {
  if(_ALVINE_NS) return obj.width;
  return obj.offsetWidth;
};

// Umgebungsvariablen initialisieren
initLib();
//alert('FLAGS \nIE ' + _ALVINE_IE + " \nDOM " + _ALVINE_DOM + " \nNS "+ _ALVINE_NS + " \nOP " +_ALVINE_OP + " \nMAC " + _ALVINE_MAC);
