// groessenwahn.com dhtml- und andere javascript-funktionen
// © heinrichs/kannenberg gbr, 2002
// verwendung fuer private zwecke frei.

// probleme:
// Netscape -> divs muessen einen rahmen haben, sonst werden sie nicht korrekt gerendert.
// Opera: sublayer ragen ueber die uebergeordneten layer hinaus und werden nicht abgeschnitten

// getestet mit (win): IE 5.50, Mozilla 0.9.7, NN 4.75, Opera 5.12, Opera 6.0
//              (linux): Konqueror 2.2.2, Netscape 4.77, Opera 5.0

// Browserabfrage
var dom0 = false;
var dom1 = false;
var dom2 = false;
var isop = false; // Opera
var iskq = false; // Konqueror
browser=navigator.userAgent;
if(browser.indexOf("Konq")>-1){
 iskq = true;
}
if(browser.indexOf("Opera")>-1){
 isop = true;
} else {
 if(document.all && !iskq){
  // IE 4.x/5.x
  dom1=true;
 } else if(document.getElementById){
  // W3C-Conforme Browser
  var dom2 = true;
 } else {
  // Netscape 4.x
  var dom0=(document.layers)? true:false;
 }
}
// MouseOvers
// die jeweiligen bildquellen muessen als bildname_In.src bzw _Out.src definiert werden
// und als name bzw id bildname_but
function Over(bild_id,layer_id){
 if(dom2||isop){
  dapic=document.getElementById(bild_id);
  dapic.src=eval(bild_id+"_In.src");
 }
 if(dom1){
  dapic = bild_id;
  document[dapic].src=eval(bild_id + "_In.src");
 }
 if (dom0){
   if(layer_id!=null){
    eval(layer_id+'div.doc.images["'+bild_id+'"].src = '+bild_id+'_In.src');
   } else {
    eval('document.images["'+bild_id+'"].src = '+bild_id+'_In.src');
   }
 }
}
function Out(bild_id,layer_id){
 if(dom2||isop){
  dapic=document.getElementById(bild_id);
  dapic.src=eval(bild_id+"_Out.src");
 }
 if(dom1){
  dapic = bild_id;
  document[dapic].src=eval(bild_id + "_Out.src");
 }
 if (dom0){
   if(layer_id!=null){
    eval(layer_id+'div.doc.images["'+bild_id+'"].src = '+bild_id+'_Out.src');
   } else {
    eval('document.images["'+bild_id+'"].src = '+bild_id+'_Out.src');
   }
 }
}
// mouseover variante 2
function Over2(BildName,bild2){
 if(dom2){
  dapic=document.getElementById(BildName)
  if(bild2!=null) dapic.src=eval(bild2+"_In.src");
  else dapic.src=eval(BildName+"_In.src")
 }
 if(dom1){
  if(bild2!=null) document[BildName].src=eval(bild2 + "_In.src");
  else document[BildName].src=eval(BildName + "_In.src");
 }
 if (dom0){
  if(bild2!=null) eval('document.images["'+BildName+'"].src = '+bild2+'_In.src');
  else eval('document.images["'+BildName+'"].src = '+BildName+'_In.src');
 }
}
function Out2(BildName,bild2){
 if(dom2) {
  dapic=document.getElementById(BildName)
  if(bild2!=null) dapic.src=eval(bild2+"_Out.src");
  else dapic.src=eval(BildName+"_Out.src")
 }
 if(dom1){
   if(bild2!=null) document[BildName].src=eval(bild2 + "_Out.src");
   else document[BildName].src=eval(BildName + "_Out.src");
 }
 if (dom0){
  if(bild2!=null) eval('document.images["'+BildName+'"].src = '+bild2+'_Out.src');
  else eval('document.images["'+BildName+'"].src = '+BildName+'_Out.src');
 }
}
// fenster-hoehe/breite
function Fhoch(){
 if (dom1) return document.body.clientHeight;
 else return window.innerHeight;
}
function Fbreit(){
  if (dom1) return document.body.clientWidth;
  else return window.innerWidth;
}
// position links setzen
function LayerObjsetLeft(links){
 if(isop||dom1){
  this.css.pixelLeft = links;
 } else {
  if(dom0){
   this.css.left = links;
  } else {
   this.css.left = links+"px" ;
  }
 }
 this.links=links;
}
// position oben setzen
function LayerObjsetTop(oben){
 if(isop||dom1){
  this.css.pixelTop = oben;
 } else {
  if(dom0){
   this.css.top = oben;
  } else {
   this.css.top = oben+"px" ;
  }
 }
 this.oben=oben;
}
// breite setzen
function LayerObjsetWidth(breite){
 if(isop||dom1){
  this.css.pixelWidth = breite;
 } else {
  if(dom0){
   this.css.clip.width = breite;
  } else {
   this.css.width = breite+"px" ;
  }
 }
 this.breite=breite;
}
// hoehe setzen
function LayerObjsetHeight(hoehe){
 if(isop||dom1){
  this.css.pixelHeight = hoehe;
 } else {
  if(dom0){
   this.css.clip.height = hoehe;
  } else {
   this.css.height = hoehe+"px" ;
  }
 }
 this.hoehe=hoehe;
}
// groesse aendern
function LayerObjResize(breite,hoehe){
 this.setWidth(breite);
 this.setHeight(hoehe);
}
// position aendern
function LayerObjBewegeZu(x,y){
 this.setLeft(x);
 this.setTop(y);
}
// position relativ aendern
function LayerObjMoveBy(x,y) {
	this.BewegeZu(this.getLeft()+x,this.getTop()+y);
}
// Ebene anzeigen bzw verstecken
function LayerObjShow() {
 this.css.visibility = "visible";
}
function LayerObjHide() {
 this.css.visibility = "hidden";
}
// soweit die basis-funktionen
// jetzt ein paar "gimmicks"

// ebene sichtbar verschieben
function LayerObjSlideTo(endx,endy,inc,speed,fn) {
	if (endx==null) endx = this.getLeft();
	if (endy==null) endy = this.getTop();
	var distx = endx-this.getLeft();
	var disty = endy-this.getTop();
	this.slideStart(endx,endy,distx,disty,inc,speed,fn);
}
function LayerObjSlideBy(distx,disty,inc,speed,fn) {
	var endx = this.getLeft() + distx;
	var endy = this.getTop() + disty;
	this.slideStart(endx,endy,distx,disty,inc,speed,fn);
}
function LayerObjSlideStart(endx,endy,distx,disty,inc,speed,fn) {
	if (this.slideActive) return;
	if (!inc) inc = 10;
	if (!speed) speed = 5;
	var num = Math.sqrt(Math.pow(distx,2) + Math.pow(disty,2))/inc;
	if (num==0) return;
	var dx = distx/num;
	var dy = disty/num;
	if (!fn) fn = null;
	this.slideActive = true;
	this.slide(dx,dy,endx,endy,num,1,speed,fn);
}
function LayerObjSlide(dx,dy,endx,endy,num,i,speed,fn) {
	if (!this.slideActive) return;
	if (i++ < num) {
		this.MoveBy(dx,dy);
		this.onSlide();
		if (this.slideActive) setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+num+","+i+","+speed+",\""+fn+"\")",speed);
		else this.onSlideEnd();
	}
	else {
		this.slideActive = false;
		this.BewegeZu(endx,endy);
		this.onSlide();
		this.onSlideEnd();
		eval(fn);
	}
}
// einen layer dynamisch vergroessern/verkleinern
function LayerObjSmoothSize(x,y) {
 this.Show();
 this.breite=this.getWidth();
 this.hoehe=this.getHeight();
 hdist = x - this.breite;
 vdist = y - this.hoehe;
 leftsize = (this.breite!=x)? ((this.breite % 10)!=0)? this.breite+(10-(this.breite % 10)):((this.breite<x)? this.breite+10 : this.breite-10) : x;
 topsize = (this.hoehe!=y)? ((this.hoehe % 10)!=0)? this.hoehe+(10-(this.hoehe % 10)):((this.hoehe<y)? this.hoehe+10 : this.hoehe-10) : y;
 this.Resize(leftsize,topsize);
 if (this.breite!=x||this.hoehe!=y) setTimeout(this.obj+".SmoothSize("+x+","+y+")",25);
}

// Initialisieren der layer und variablen
function init_all(funktion){
 this.hoch = Fhoch();
 this.breit = Fbreit();
 // alle Divs zusammenstellen
 var dieDIVs = (dom0)?document.layers:(dom1)?document.all.tags("DIV"):document.getElementsByTagName("DIV");
 // nach den ids suchen
 for (i=0; i<dieDIVs.length; i++){
  // hier dann initialisieren
  this.divname = dieDIVs[i].id+"div";
  if(this.divname.length>3){
   eval(this.divname+"= new LayerObj(dieDIVs[i].id,false)");
   if(dom0){
    lname = dieDIVs[i].id;
    var subDIVs = eval("document."+lname+".document.layers");
    for (j=0; j<subDIVs.length; j++){
     this.divname = subDIVs[j].id+"div";
     // nach evtl sub-subdivs suchen...
     subdivfinder("document."+lname+".document."+subDIVs[j].id);
    }
   }
  }
 }
 eval(funktion+"()");
 fensterbreite = Fbreit();
 fensterhoehe = Fhoch();
 setTimeout("resized()",1000);
}
function resized(){
 if(fensterbreite!=Fbreit() || fensterhoehe!=Fhoch()){
  window.location.reload();
 }
 setTimeout("resized()",1000);
}
function subdivfinder(was){
 eval(this.divname+"= new LayerObj(was,true)");
 var subDIVs = eval(was+".document.layers");
   for (j=0; j<subDIVs.length; j++){
    this.divname = subDIVs[j].id+"div";
    if(this.divname.length>3){
     tmpid = was +".document."+ subDIVs[j].id;
     eval(this.divname+"= new LayerObj(tmpid,true)");
     var subsubDIVs=eval(tmpid+".document.layers");
     if(subsubDIVs.length>0){
      subdivfinder(tmpid);
     }
    }
   }
}
function LayerObj(id,sublayer){
  if(dom0 && sublayer){
      this.css = eval(id);
      this.doc = eval(id);
  } else {
      this.css = (dom1)?document.all[id].style:(dom0)?document.layers[id]:document.getElementById(id).style;
      this.doc = (dom1)?document.all[id]:(dom0)?this.css.document:document.getElementById(id);
  }
  this.id = id;
  this.obj = id + "LayerObj";
  eval(this.obj + "=this");
  this.links = (dom0)?this.css.left:(dom1||isop)?this.css.pixelLeft:this.css.left;
  this.oben = this.getTop();
  this.breite = this.getWidth();
  this.hoehe = this.getHeight();
}

// position links ermitteln
 function LayerObjgetLeft(){
    var links = 0;
    links = (dom1)?document.all[this.id].offsetLeft:(dom2||isop)?document.getElementById(this.id).offsetLeft:(dom0)?this.css.left:0;
    return links;
  }
// position oben ermitteln
 function LayerObjgetTop(){
    var oben = 0;
    oben = (dom1)?document.all[this.id].offsetTop:(dom2||isop)?document.getElementById(this.id).offsetTop:(dom0)?this.css.top:0;
    return oben;
  }
 // breite ermitteln
 function LayerObjgetWidth(){
// opera 5 macht probs
    var breite = 0;
    breite = (dom1)?document.all[this.id].offsetWidth:(dom2)?document.getElementById(this.id).offsetWidth:(dom0)?this.css.clip.width:this.css.pixelWidth;
    return breite;
  }
 // hoehe ermitteln
 function LayerObjgetHeight(){
    var hoehe = 0;
    hoehe = (dom1)?document.all[this.id].offsetHeight:(dom2)?document.getElementById(this.id).offsetHeight:(dom0)?this.css.clip.height:this.css.pixelHeight;
    return hoehe;
  }
// layer in die ecken/seiten stellen
function LayerObjLineUp(wohin){
 // tr = obenrechts  tl = obenlinks  br = untenrechts
 // bl = untenlinks  cc = mittemitte tc = obenmitte
 // bc = untenmitte  lc = linksmitte rc = rechtsmitte
 this.breite = this.getWidth();
 this.hoehe = this.getHeight();
 switch(wohin){
  case "tr" :
   x = Fbreit()-this.breite;
   y = 0;
   break;
  case "tl" :
   x = 0;
   y = 0;
   break;
  case "br" :
   x = Fbreit()-this.breite;
   y = Fhoch()-this.hoehe;
   break;
  case "bl" :
   x = 0;
   y = Fhoch()-this.hoehe;
   break;
  case "cc" :
   x = Math.round((Fbreit()/2)-(this.breite/2));
   y = Math.round((Fhoch()/2)-(this.hoehe/2));
   break;
  case "tc" :
   x = Math.round((Fbreit()/2)-(this.breite/2));
   y = 0;
   break;
  case "bc" :
   x = Math.round((Fbreit()/2)-(this.breite/2));
   y = Fhoch()-this.hoehe;
   break;
  case "lc" :
   x = 0;
   y = Math.round((Fhoch()/2)-(this.hoehe/2));
   break;
  case "rc" :
   x = Fbreit()-this.breite;
   y = Math.round((Fhoch()/2)-(this.hoehe/2));
   break;
 }
 this.BewegeZu(x,y);
} 
//positioniert einen layer relativ zu einem anderen
function LayerObjAlignL(layer,wohin) {
 // wohin: links, rechts, oben, unten
 switch(wohin){
  case "links" :
   x= parseInt(layer.links)-parseInt(this.breite);
   y = parseInt(layer.oben);
   break;
  case "rechts" :
   x = parseInt(layer.links)+parseInt(layer.breite);
   y = parseInt(layer.oben);
   break;
  case "oben" :
   x = parseInt(layer.links);
   y = parseInt(layer.oben) - parseInt(this.hoehe);
   break;
  case "unten" : x = parseInt(layer.links);
   y = parseInt(layer.oben)+parseInt(layer.hoehe);
   break;
 }
 this.BewegeZu(x,y);
}
// eine art innerhtml-funktion
function LayerObjsetContent(inhalt){
	if (dom0) {
		this.doc.open();
		this.doc.write(inhalt);
		this.doc.close();
	}
	if (dom1) {
		this.doc.innerHTML = inhalt;
	}
    if(dom2) {
        while(this.doc.hasChildNodes()) this.doc.removeChild(this.doc.lastChild);
        var range=document.createRange();
        range.selectNodeContents(this.doc);
        range.collapse(true);
        var cf = range.createContextualFragment(inhalt);
        this.doc.appendChild(cf);
    }   
}

function LayerObjSlideInit() {}
//LayerObj.prototype.slideInit = LayerObjSlideInit
LayerObj.prototype.slideTo = LayerObjSlideTo;
LayerObj.prototype.slideBy = LayerObjSlideBy;
LayerObj.prototype.slideStart = LayerObjSlideStart;
LayerObj.prototype.slide = LayerObjSlide;
LayerObj.prototype.onSlide = new Function();
LayerObj.prototype.onSlideEnd = new Function();
LayerObj.prototype.getLeft = LayerObjgetLeft;
LayerObj.prototype.getTop = LayerObjgetTop;
LayerObj.prototype.getWidth = LayerObjgetWidth;
LayerObj.prototype.getHeight = LayerObjgetHeight;
LayerObj.prototype.setLeft = LayerObjsetLeft;
LayerObj.prototype.setTop = LayerObjsetTop;
LayerObj.prototype.setWidth = LayerObjsetWidth;
LayerObj.prototype.setHeight = LayerObjsetHeight;
LayerObj.prototype.Resize = LayerObjResize;
LayerObj.prototype.BewegeZu = LayerObjBewegeZu;
LayerObj.prototype.MoveBy = LayerObjMoveBy;
LayerObj.prototype.SlideTo = LayerObjSlideTo;
LayerObj.prototype.Show = LayerObjShow;
LayerObj.prototype.Hide = LayerObjHide;
LayerObj.prototype.SmoothSize = LayerObjSmoothSize;
LayerObj.prototype.LineUp = LayerObjLineUp;
LayerObj.prototype.LayerObjAlignL = LayerObjAlignL;
LayerObj.prototype.setContent = LayerObjsetContent;

