
//  CLIENT_SIDE SNIFFER CODE

// convert all characters to lowercase to simplify testing 
var agt=navigator.userAgent.toLowerCase(); 

//BROWSER VERSION
// Note: On IE5, these return 4, so use is_ie5up to detect IE5. 
var is_major = parseInt(navigator.appVersion); 
var is_minor = parseFloat(navigator.appVersion); 

//BROWSER TYPE 
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 
            && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 
            && (agt.indexOf('webtv')==-1));
var is_nav4up = (is_nav && (is_major >= 4));  
var is_ie   = (agt.indexOf("msie") != -1); 
var is_ie3  = (is_ie && (is_major < 4)); 
var is_ie4  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")==-1) );
var is_ie4up  = (is_ie  && (is_major >= 4));
var is_ie5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );  
var is_ie5up  = (is_ie  && !is_ie3 && !is_ie4);  
var is_dom = (document.getElementById);

//PLATFORM 
var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_mac    = (agt.indexOf("mac")!=-1);
var is_sun   = (agt.indexOf("sunos")!=-1);
var is_irix  = (agt.indexOf("irix") !=-1);    // SGI
var is_hpux  = (agt.indexOf("hp-ux")!=-1);
var is_aix   = (agt.indexOf("aix") !=-1);      // IBM
var is_linux = (agt.indexOf("inux")!=-1);
var is_sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
var is_unixware = (agt.indexOf("unix_system_v")!=-1); 
var is_mpras    = (agt.indexOf("ncr")!=-1); 
var is_reliant  = (agt.indexOf("reliantunix")!=-1);
var is_dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || 
       (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || 
       (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
var is_sinix = (agt.indexOf("sinix")!=-1);
var is_freebsd = (agt.indexOf("freebsd")!=-1);
var is_bsd = (agt.indexOf("bsd")!=-1);
var is_unix  = ((agt.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux || 
             is_sco ||is_unixware || is_mpras || is_reliant || 
             is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

var myLayers = new Object();
var resizeDaten = new Object();
resizeDaten.NullPunkt = new Object();
resizeDaten.Groesse = new Object();
var navNestedLayers = false;
var visibleLayers = [];
var preDoneLayers = [];
var initLayersDone = false;

// Define genObj and genStyle in order to handle layer actions
if (is_ie)
  {
    genObj="document.all";
    genStyle=".style";
    genX=".offsetLeft";
    genY=".offsetTop";
  }
if (is_nav)
  {
    genObj="document.layers";
    genStyle="";
    genX=".x";
    genY=".y";
}

  function showProps(obj)
    {
      if (!obj)
        {
          alert("Kein Objekt!");
          return(false);
      }
      
      if (typeof obj != "object")
        {
          alert(obj)
          return(false);
      }
      var count = 0;
      var Text = "";
      for (var i in obj)
        {
//          Text += i + "\n";
          Text += i  + " = " + obj[i] + "\n";
          count++; 
          if (count == 1)
            {
              ok = confirm(Text);
              if (!ok) return(false);
              count = 0;
              Text = "";
          }
      }
//      alert(Text);
    return(1);
  }


// Resize functions
function nsResize()
  {
    if (resizeDaten.Groesse.Breite != window.innerWidth || resizeDaten.Groesse.Hoehe != window.innerHeight)
      {
        if (is_dom)
          {
            resizeDaten.NullPunkt.x = document.getElementById('pointerTable').offsetLeft;
            resizeDaten.NullPunkt.y = document.getElementById('pointerTable').offsetTop;
        }
        else
          {
			      if (navNestedLayers) history.go(0);
            else
              {
                resizeDaten.NullPunkt.x = document.pointerImage.x;
                resizeDaten.NullPunkt.y = document.pointerImage.y + 1;
            }
        }
        resizeDaten.Groesse.Breite = window.innerWidth;
        resizeDaten.Groesse.Hoehe  = window.innerHeight;
        for (var i = 0; i < myLayers.length; i++)
          {
            var tempName = myLayers.layernames[i];
            setLayerX(tempName, (resizeDaten.NullPunkt.x + myLayers.positions[tempName][0]));
            setLayerY(tempName, (resizeDaten.NullPunkt.y + myLayers.positions[tempName][1]));
        }
    }
}

function ieResize()
  {
    if (resizeDaten.Groesse.Breite != document.body.offsetWidth || resizeDaten.Groesse.Hoehe != document.body.offsetHeight)
      {
		    resizeDaten.NullPunkt.x = document.all.pointerTable.offsetLeft;
        resizeDaten.NullPunkt.y = document.all.pointerTable.offsetTop + 1;
        resizeDaten.Groesse.Breite = document.body.offsetWidth;
        resizeDaten.Groesse.Hoehe  = document.body.offsetHeight;
        for (var i = 0; i < myLayers.length; i++)
          {
            var tempName = myLayers.layernames[i];
            if ((tempName != "scroll0Div") && (tempName != "scroll1Div") && (tempName != "ScrollAbschn1"))
              {
                setLayerX(tempName, (resizeDaten.NullPunkt.x + myLayers.positions[tempName][0]));
                setLayerY(tempName, (resizeDaten.NullPunkt.y + myLayers.positions[tempName][1]));
            }
        }
    }
}



function findAllLayersPos()
  {
    myLayers.layernames = findLayers();
    myLayers.positions = new Array();
    myLayers.sizes = new Array();
    myLayers.length = 0;
    for (var name in myLayers.layernames)
      {
        var tempName = myLayers.layernames[name];
        myLayers.positions[tempName] = getLayerPos(tempName);
        myLayers.positions[tempName][0] -= resizeDaten.NullPunkt.x;
        myLayers.positions[tempName][1] -= resizeDaten.NullPunkt.y;
        myLayers.sizes[tempName] = getLayerSize(tempName);
        myLayers.length++;
    }
}


// x-y Pos fuer Layerpositionierung
function initLayers()
  {
    if(is_ie)
      { 
		    resizeDaten.NullPunkt.x = document.all.pointerTable.offsetLeft;
        resizeDaten.NullPunkt.y = document.all.pointerTable.offsetTop + 1;
        window.onresize = ieResize;
        resizeDaten.Groesse.Breite = document.body.offsetWidth;
        resizeDaten.Groesse.Hoehe  = document.body.offsetHeight;
    }
    if(is_nav)
      {
        if(is_dom)
          {
            resizeDaten.NullPunkt.x = document.getElementById('pointerTable').offsetLeft;
            resizeDaten.NullPunkt.y = document.getElementById('pointerTable').offsetTop + 1;
            window.onresize = nsResize;
            resizeDaten.Groesse.Breite = window.innerWidth;
            resizeDaten.Groesse.Hoehe  = window.innerHeight;
        }
        else
          {
			      resizeDaten.NullPunkt.x = document.pointerImage.x;
            resizeDaten.NullPunkt.y = document.pointerImage.y + 1;
            window.onresize = nsResize;
            resizeDaten.Groesse.Breite = window.innerWidth;
            resizeDaten.Groesse.Hoehe  = window.innerHeight;
        }
    }
    moveAllLayersBy(resizeDaten.NullPunkt.x, resizeDaten.NullPunkt.y);
    findAllLayersPos();
    initLayersDone = true;
}  
             

// VARIABLENDEFINITION
imgArray = new Array();                               // enthaelt die Bilder im Dokument
bilder_Anzahl = 0;                                    // enthaelt die Anzahl aller Bilder im Dokument
act_nav="";
level1_selection="";       
superPic = -1;

  count = 0;
  lastEvent = "";
  x = 0; y = 0;             

//PRELOAD-FUNKTIONEN
// Funktion: erstellt ein neues Objekt, das zwei Bildobjekte enthaelt; aufgerufen in searchImages();
function entry(layer, name, src1, src2)
{
  this.layer = layer;           
  this.name = name;
  this.normal = new Image()     
//  this.normal.name = name;      
  this.normal.src = src1;       
  this.hilite = new Image();    
//  this.hilite.name = name;      
  this.hilite.src = src2;       
      
  return (this);
}

    
// gueltiges bild fuer hilite?; aufgerufen in searchImages(); 
function isValidImage(name)
{
  return(name.indexOf("_off.") > 0);
}
    

// Umwandlung _off- in _on-bild
function convertToHilite(src)
{
  var fileType = src.substring(src.lastIndexOf("."), src.length); 
  var endOfPath = src.lastIndexOf("/") + 1;                       
  var path = src.substring(0, endOfPath);                         
  var fileName = src.substring(endOfPath, src.length);            
  var endOfFileName = fileName.lastIndexOf("_");                
  fileName = fileName.substring(0, endOfFileName);              
  fileName = path + fileName + "_on" + fileType;                  
  return (fileName);
}
    
// sucht _off-bilder; ruft convertToHilite(); und isValidImage(); und entry(); und searchImagesInLayers(); auf
function searchImages()
{
  var anzahl_der_Bilder = document.images.length;
  for (var img = 0; img < anzahl_der_Bilder; img++)
  {
    var name = document.images[img].name;             
    var nsrc = document.images[img].src;              
    var hsrc = convertToHilite(nsrc);                 
    if (isValidImage(nsrc))
    {
      imgArray[bilder_Anzahl] = new entry("", name, nsrc, hsrc);  // das gefundene Bild in das Array eintragen
      bilder_Anzahl++;
    }
  }
  if (is_nav && !is_dom) searchImagesInLayers();      
}
    

// gueltig ab NN4; dasselbe wie searchImages();
function searchImagesInLayers()
{
  var layers = document.layers;
  for (var l = 0; l < layers.length; l++)
  {
    doc2 = layers[l].document;
    for (var d = 0; d < doc2.images.length; d++)
    {
      var name = doc2.images[d].name;
      var nsrc = doc2.images[d].src;
      var hsrc = convertToHilite(nsrc);
      if (isValidImage(nsrc))
      {
        imgArray[bilder_Anzahl] = new entry(layers[l].name, name, nsrc, hsrc);
        bilder_Anzahl++;
      }
    }
  }
}
  
  
// Hauptfunktion des Preload: im body-Tag mit dem onLoad-Event aufgerufen  
function mystic()
  {
    searchImages();
    
    // alle bisher aufgerufenen Layeraktivitaeten ausfuehren
    if (preDoneLayers.length > 0)
      for (var i in preDoneLayers)
        {
          var action = preDoneLayers[i].split('_')[0];
          var divName = preDoneLayers[i].split('_')[1];
          switch (action)
            {
              case 's': show(divName); break;
              case 'h': hide(divName); break;
          }
      }
}
  
  
  
// Funktion: Ermittelt die Position eines Bildes im imgArray anhand des Namens und liefert dessen Position zurueck.
function getPos(name)
{
  var retValue = -1;
  for (var p = 0; p < imgArray.length; p++)
  {
    if (imgArray[p].name == name) retValue = p;
  }
  return (retValue);
}
  
  
// _on-zustand der navi-images at OnMouseOver/OnMouseOut
function imgOn(name)
{
  if(level1_selection!=""){
  //alert(level1_selection);
   imgOff(level1_selection);
  }
  var nr = getPos(name);
  if (nr != -1)
  {
    var bild = imgArray[nr];
    if ((is_nav) && (bild.layer != ""))
    {
      document.layers[bild.layer].document.images[name].src = bild.hilite.src;
    }
    else
    {
      document.images[name].src = bild.hilite.src;
    }
  }
}


// _off-zustand der navi-images at OnMouseOver/OnMouseOut
function imgOff(name)
{
  
    var nr = getPos(name);
   
    if (nr != -1)
    {
      var bild = imgArray[nr];
      if ((is_nav) && (bild.layer != ""))
      {
        document.layers[bild.layer].document.images[name].src = bild.normal.src;
      }
      else
      {
        document.images[name].src = bild.normal.src;
      }
    }
 
}
  
//zeigt on-zustand beim laden der passenden seite, in globals.inc. eingebaut, aufgerufen beim onload im header 
function onloadLevel1(imgNam)
{
  imgOn(imgNam);
  level1_selection=imgNam;
  hiding();
}
  
  
//initialisierung fuer die layers
function init() 
{
  if(is_ie)
  {
	  genObj="document.all"
	  genStyle=".style"
  }

  if(is_nav) 
  {
	  genObj="document.layers"
	  genStyle=""
  }
}
 
init();
 
//show and hide layer at OnMouseOver/OnMouseOut 
function createObj(divName) 
  {
    if (is_dom)
      {
	      stand_obj=document.getElementById(divName);
    	  if ((stand_obj) && (stand_obj.style)) obj=stand_obj.style;
          else obj = '';
    }
  else
    {
	    obj=eval(genObj+"['"+divName+"']"+genStyle);
  }  
  return obj; 
}

function opened(divName)
  {
    var retValue = 0;
    for (var i in visibleLayers)
      if (visibleLayers[i] == divName) retValue = 1;
    return(retValue);
}

function addLayer(divName, visibleLayers)
  {
    visibleLayers[visibleLayers.length] = divName;
    return(visibleLayers);
}

function removeLayer(divName, visibleLayers)
  {
    tempVisibleLayers = [];
    for (var i in visibleLayers)
      if (visibleLayers[i] != divName) tempVisibleLayers[tempVisibleLayers.length] = divName;
    return (tempVisibleLayers);
}

function closeOtherNaviLayers(divName)
  {
    for (var i in visibleLayers)
      if (visibleLayers[i] != divName) hide(visibleLayers[i]);
}

function show(divName) {
    if (!initLayersDone)
      {
        preDoneLayers = addLayer('s_' + divName, preDoneLayers);
        return(1);
    }
  if ((typeof divName == "undefined") || (divName == "")) return (-1);
  var obj = createObj(divName);
  if ((typeof obj == "undefined") || (obj == "")) return (-1);
  if (divName.indexOf("navi") != -1) closeOtherNaviLayers(divName);
  if (!opened(divName))
    {
      if (divName.indexOf('navi') != -1) visibleLayers = addLayer(divName, visibleLayers)
      obj.visibility='visible';
      obj.zIndex = 20;
  }
	return(1);
}

// hide a given layer
function hide(divName) {
    if (!initLayersDone)
      {
        preDoneLayers = addLayer('h_' + divName, preDoneLayers);
        return(1);
    }
  if ((typeof divName == "undefined") || (divName == "")) return (-1);
  var obj = createObj(divName);
  if ((typeof obj == "undefined") || (obj == "")) return (-1);
  //alert ('sdf'+divName);
  if (opened(divName))
    {
      if (divName.indexOf('navi') != -1) visibleLayers = removeLayer(divName, visibleLayers);
      obj.visibility='hidden';
      obj.zIndex = 1;
  }
  return(1);
}

function show2(showName, hideArray)
  {
    show(showName);
//		actlay = showName;
    for (var i = 0; i < hideArray.length; i++) 
      if (showName != hideArray[i]) hide(hideArray[i]);
}


function setLayerX(layerName, myX)
  {
    if (setLayerX.arguments.length < 2) return (-1);
    var obj = null;
    var add = 0;
    if (is_dom)
      {
        obj = document.getElementById(layerName).style;
    }
    else
      {
        if (is_nav) { obj = document.layers[layerName]; myX = parseInt(myX); add = 0; }
        if (is_ie) obj = document.all[layerName].style;
    }
    if (obj != null) obj.left = myX;
  return(1);
}
    
function setLayerY(layerName, myY)
  {
    if (setLayerY.arguments.length < 2) return (-1);
    var obj = null;
    var add = 0;
    if (is_dom)
      {
        obj = document.getElementById(layerName).style;
    }
    else
      {
        if (is_nav) { obj = document.layers[layerName]; myY = parseInt(myY); add = 0; }
        if (is_ie) obj = document.all[layerName].style;
    }
    if (obj != null) obj.top = myY;
  return(1);
}

function getLayerPos(layerName)
  {
    if (getLayerPos.arguments.length < 1) return (-1);
    var obj = null;
    var retValue = -1;
    if (is_ie) obj = document.all[layerName].style;
      else if (is_dom) obj = document.getElementById(layerName).style; 
        else if (is_nav) obj = document.layers[layerName]; 
//    alert("layerName: " + layerName);
//    showProps(document.layers[layerName]);
    if (obj != null) retValue = new Array(parseInt(obj.left), parseInt(obj.top));
    return (retValue);
}

function getLayerSize(layerName)
  {
    if (getLayerSize.arguments.length < 1) return (-1);
    var obj = null;
    var retValue = -1;
    if (is_ie) obj = document.all[layerName].style;
      else if (is_dom) obj = document.getElementById(layerName).style; 
        else if (is_nav) obj = document.layers[layerName]; 
//    alert("layerName: " + layerName);
//    showProps(obj.clip);
    if (obj != null) retValue = new Array(parseInt(obj.left), parseInt(obj.top));
    return (retValue);
}

function findDOMLayers()
  {
    var dummyArray = document.getElementsByTagName("DIV");
    var DOMLayers = new Array();
    var objs = 0;
    for (var i = 0; i < dummyArray.length; i++)
      {
        if (dummyArray[i] != "length") DOMLayers[objs++] = dummyArray[i].id;
    }
    return (DOMLayers);
}

function findIELayers()
  {
    var ieLayers = new Array();
    var objs = 0;
    for (var p = 0; p < document.all.length; p++)
      {
        if ((document.all[p].tagName) && (document.all[p].id))
          {
            if ((document.all[p].tagName == "DIV") && (document.all[p].id != ""))
              {
                ieLayers[objs++] = document.all[p].id;
            }
        }
    }
    return (ieLayers);
}

function findNavLayers()
  {
    var navLayers = new Array();
    var objs = 0;
    for (var p = 0; p < document.layers.length; p++)
      {
        navLayers[objs++] = document.layers[p].name;
        if (document.layers[p].document.layers.length != 0) navNestedLayers = true;
    }
    return (navLayers);
}

function findLayers()
  {
    if (is_nav)
      if (is_dom) return(findDOMLayers())
        else return(findNavLayers());
    else return(findIELayers());
}

function moveAllLayersTo()
  {
    args = moveAllLayersTo.arguments;
    if (args.length == 0) return (-1);
    var toX = args[0];
    var toY = "";
    var layers = -1;
    if (args.length > 1) toY = args[1];
    
    if (is_dom) {layers = findDOMLayers();}
    else
      {
        if (is_ie) layers = findIELayers();
        if (is_nav) layers = findNavLayers();
    }
    if (layers != -1)
      {
        for (var l = 0; l < layers.length; l++)
          {
            if (toX != "") setLayerX(layers[l], toX);
            if (toY != "") setLayerY(layers[l], toY);
        }
    }
  return(1);
}

function moveAllLayersBy()
  {
    args = moveAllLayersBy.arguments;
    if (args.length == 0) return (-1);
    var byX = args[0];
    var byY = 0;
    var layers = -1;
    if (args.length > 1) byY = args[1];

    if (is_ie)
      {
        var tempLayers = findIELayers();
        layers = new Array();
        for (var name in tempLayers)
          if ((tempLayers[name] != "scroll0Div") && (tempLayers[name] != "scroll1Div") && (tempLayers[name] != "ScrollAbschn1")) layers[layers.length] = tempLayers[name];
    }
    else 
      {
        if (is_dom) {layers = findDOMLayers();}
        else if (is_nav) layers = findNavLayers();
    }
    
    if (layers != -1)
      {
        for (var l = 0; l < layers.length; l++)
          {
            var pos = getLayerPos(layers[l]);
            if (byX != 0) setLayerX(layers[l], (pos[0] + byX));
//            alert("2");
//            if (layers[l] == "wait") alert(layers[l] + ".x = " + pos[0] + " + " + byX + "\r" + layers[l] + ".y = " + pos[1] + " + " + byY);
            if (byY != 0) setLayerY(layers[l], (pos[1] + byY));
//            alert("3");
        }
    }
  return(1);
}


//versteckt activen layer, zeigt neuen layer + zeigt passendes _on-gif
function set_layer(Name) 
{ 
  if(act_nav!="")
	{
    //alert(act_nav);
	  //hide("navi"+act_nav);
		imgOff(act_nav);
   
  }
  imgOn(Name);
  show("navi"+Name);
 	act_nav=Name;
     
}


//versteckt aktuellen layer, aufgerufen beim onload im header
function hiding()
{
  if(act_nav!="")
	{
	  hide("navi"+act_nav);
		if (act_nav!=level1_selection)
    imgOff(act_nav);
	}
}



//-- ScrollContainer -----------------------------------------------------------------------

var scrollSpeed = 70;
var scrollTimeout;
var scrollText;

function initScrollContainer(height) {
  if (!height) height = 249;
	scrollText = new ScrollContainer('ScrollAbschn1', 'FormatContainer2', height);
	scrollText.jumpTop();
	scrollText.css.visibility='visible';
  show('FormatContainer');
	}


function ScrollContainer(Objekt, Formatierung, height) {
  var help = Formatierung;
	Formatierung = (!Formatierung) ? '' : 'document.'+Formatierung+'.';
	
	if(is_ie) { // fuer ie
		this.css = eval('document.all.'+Objekt+'.style');
		this.height = eval('document.all.'+Objekt+'.offsetHeight');
    eval('document.all.' + help + '.style.height = ' + this.height);
		}

	if(is_nav) {
		if(is_dom) { // fuer ns >= 6
			this.css = document.getElementById(Objekt).style;
			this.height = document.getElementById(Objekt).offsetHeight;
      eval('document.getElementById("' + help + '").style.height = "' + this.height + 'px";');
			}
		else { // fuer ns < 5
			this.css = eval(Formatierung+'document.'+Objekt);
			this.height = this.css.document.height;
			}
		}			
	this.jumpTop = jumpTop;
	this.jumpBottom = jumpBottom;
	this.moveTopBy = moveTopBy;
  this.down = down;
  this.up = up;
  this.stop = stopScrolling;
  this.myHeight = height;
  this.obj = this.name + "Object";
  eval(this.obj + " = this;");
// alert(this.myHeight);
	}

function jumpTop() {
	this.css.top = 0;
	}

function jumpBottom() {
	this.css.top = -(scrollText.height - this.myHeight);
	}

function moveTopBy(movePX) {
	this.css.top = (parseInt(this.css.top) + movePX);
	}

function down(movePX) {
	if(parseInt(scrollText.css.top) > -(scrollText.height - this.myHeight)) {
		scrollText.moveTopBy(-movePX);
		scrollTimeout = setTimeout(this.obj + ".down(" + movePX + ")", scrollSpeed);
    //alert(scrollTimeout);
		}
	}

function up(movePX) {
	if(parseInt(scrollText.css.top) <= -movePX) {
		scrollText.moveTopBy(movePX);
		scrollTimeout = setTimeout(this.obj + ".up(" + movePX + ")", scrollSpeed);
    //alert(scrollTimeout);
		}
	}
	
function stopScrolling() {
	clearTimeout(scrollTimeout);
	}

//behindert den scrollbalken im browser, dass er immer top bleibt
function setScrollTop() {
  window.scrollTo(0, 0);
  setTimeout("setScrollTop();", 250);
}
  

// oeffnet pop up - fenster mit def. hoehe, breite und vorgegebener position
function fenster(ort,w,h) 
{
  win = window.open(ort, 'Neues_Fenster', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width='+w+',height='+h+',screenX=20,screenY=200,left=20,top=200');
}

   
//avoid resize problems with Netscape 4
if (is_nav4up) 
{
  origWidth = innerWidth;
  origHeight = innerHeight;
}

function reDo() 
{
  if (innerWidth != origWidth || innerHeight != origHeight) 
  history.go(0);
}

if (is_nav4up) onresize = reDo;

function tuNix()
  {
}

