// nicht 100% NN4-kompatibel!!

RootPath = document.location.protocol+'//'+document.location.host;
if (document.location.port) RootPath += ":" + document.location.port;
RootPath += "/";  // ändern, wenn Root != "/"
JsApiPath = RootPath + "jsinc/";

var tmpArr, browserVersion = 0.0;
tmpArr = new Array();
extras = new Array(); // Wysiwyg-editor etc.

var msie = ie4 = document.all && true;
var ntsc = nn4 = document.layers && true;
var ntsc6 = w3c = (document.getElementById && !document.all);
var moz = (w3c && document.documentElement);
var gecko14comp = (w3c && document.execCommand && document.designMode);
var ie5=false, ie55=false;
if (ie4) { // kaskadierend=>Mindestanforderung
  ie5 = document.getElementById && true;
  ie55 = window.setActive && true;
  ie6 = document.implementation && true;
  tmpArr = navigator.appVersion.match(/\; *MSIE *([\d\.]+) *\;/);
  if (tmpArr.length>1) browserVersion = parseFloat(tmpArr[1]);
  else browserVersion = ie6? 6.0 : ie55? 5.5 : ie5? 5.0 : 4.0;
}else{
  browserVersion = parseFloat(navigator.appVersion);
}
var rtedit = gecko14comp || ie55;

function noop() {;}

// interne Variablen und Hilfsfunktionen
initLayerApi = noop; // wird bei Laden v. Layerapi überschrieben

var EvTunFnStrg = ""; // unmittelbar vorher belegen!
 // ... mit "%X%", "%Y%" und "%Obj%" als Platzhalter
function eventTunnel(e) { // Mouse-Events z.B.
    var fnStrg = EvTunFnStrg ? EvTunFnStrg : "";
    var posx = 0;
    var posy = 0;
    if (!e) var e = window.event;
    if (e.pageX || e.pageY) {
        posx = e.pageX;
        posy = e.pageY;
    } else if (e.clientX || e.clientY) {
        posx = e.clientX + document.body.scrollLeft;
        posy = e.clientY + document.body.scrollTop;
      }
    if (fnStrg) {
      fnStrg=fnStrg.replace("%X%",posx.toString()).replace("%Y%",posy.toString());
      fnStrg=fnStrg.replace("$Obj%","e");
      eval(fnStrg);
    }
    return [ posx, posy, e ];  // zusätzlich Rückgabe des Eventplatzes und Objekts
}

// Mouse-over-Pops neben der Maus
var POPcache, POPdiv, POPcont, POPflag; // POPdiv mit DIV belegen!
var POPdesign = '<table border="0" cellpadding="1" cellspacing="0"><tr><td>';
POPdesign += '<table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff">';
POPdesign += '<tr><td>&nbsp;<\/td><td>%TEXT%<\/td><td>&nbsp;<\/td><\/tr><\/table>';
POPdesign += '<\/td><\/tr><\/table>';
function openPOP(text) {
  POPflag=false;
  POPtext=text;
  if (document.layers) document.captureEvents(Event.MOUSEMOVE|Event.MOUSEDRAG);
  POPcont = POPdesign.replace("%TEXT%",text);
  EvTunFnStrg = "DoPOP(%X%,%Y%);";
  POPcache=document.onmousemove;
  document.onmousemove = eventTunnel;
}

function DoPOP(px,py) {
  var ds,nX,nY;
  if (document.layers) document.releaseEvents(Event.MOUSEMOVE|Event.MOUSEDRAG);
   document.onmousemove=POPcache;
  if(typeof POPdiv == "object" && POPdiv != null) {
    fillDiv (POPdiv, POPcont);
    ds = getSize(POPdiv);
    if (px+ds[0]+getScrollX+60 > getWindowWidth()) nX = px-ds[0]-10;
    else nX = px+20;
    if (py+ds[1]+getScrollY+60 > getWindowHeight()) nY = py-ds[1]-10;
    else nY = py+20;
    setPos(POPdiv,nX,nY,null,false);
    showDiv(POPdiv);
  }
}

function closePOP() {
  POPflag=true;
  if(typeof POPdiv == "object" && POPdiv != null) {
    setTimeout("if (POPflag) {hideDiv(POPdiv)}",50);
  }
}

function query2array(tmpQuery)
{   var q2oObj, q2oArr, q2oArr_i, tmpRest="";
    q2oObj = new Array();
    q2oArr = new Array();
    q2oArr_i = new Array();
    if(tmpQuery.indexOf("?")==0) tmpQuery = tmpQuery.substring(1);
    if (tmpQuery.indexOf('&') >= 0) q2oArr = tmpQuery.split('&');
    else q2oArr[0] = tmpQuery;
    for (qqq=0; qqq<=q2oArr.length-1; qqq++) {
     if (q2oArr[qqq].indexOf('=') > -1) {
        q2oArr_i = q2oArr[qqq].split('=');
        tmpRest = q2oArr_i.slice(1).join("=").trim();
        q2oObj[q2oArr_i[0]] = unescape(tmpRest);
     } else {
        if(q2oArr[qqq]!="") q2oObj[q2oArr[qqq]] = true;
     }
    }
    return q2oObj;
}

String.prototype.trim = function () {
  var ofThisStr = this;
  if (ofThisStr=="") return "";
  else {
    var flagV=true, flagR=true, qqq=0;
    var tmpInt = Math.floor(ofThisStr.length/2) // das ist noch nicht OK!
    while (qqq<tmpInt && flagV && flagR) {
      if (flagV && ofThisStr.charAt(0).search(/\s/)==0) ofThisStr = ofThisStr.substring(1);
      else flagV=false;
      if (flagR && ofThisStr.charAt(ofThisStr.length-1).search(/\s/)==0) {
         ofThisStr = ofThisStr.substring(0,ofThisStr.length-1);}
      else flagR=false;
      qqq++;
    }
    if (ofThisStr == " ") ofThisStr = "";
    return ofThisStr;
  }
}

function addslashes (arbstrg)
{  if (typeof arbstrg != 'string') return arbstrg;
   if (arbstrg.length > 0)
   {for(qqq=arbstrg.length-1; qqq>=0; qqq--)
      {hlpchr = arbstrg.charAt(qqq);
       if ((hlpchr == "\'") || (hlpchr == "\"") || (hlpchr == "\\"))
         {helpstrg = arbstrg.substring(qqq,arbstrg.length);
         arbstrg = arbstrg.substring(0,qqq);
         arbstrg = arbstrg+"\\"+helpstrg;}
       }
   }
   return arbstrg;
}

function stripslashes (arbstrg)
{  if (typeof arbstrg != 'string') return arbstrg;
    if (arbstrg.length > 1)
     {for(qqq=arbstrg.length-1; qqq>=0; qqq--)
       {if (arbstrg.charAt(qqq) == "\\")
          {helpstrg = qqq==arbstrg.length-1 ? "" : arbstrg.substring(qqq+1,arbstrg.length);
           arbstrg = arbstrg.substring(0,qqq);
           arbstrg = arbstrg+helpstrg;
       } } }
   return arbstrg;
}

function rawurlencode(tmpStrg) {
    if (typeof tmpStrg != 'string') return tmpStrg;
    tmpStrg = escape(tmpStrg);
    var set = [["\\*","\\+","\\/","\\@"],["%2A","%2B","%2F","%40"]];
    if (tmpStrg) {
      for(var j = 0; j < set[0].length; j++) {
        tmpStrg = tmpStrg.replace(new RegExp(set[0][j],"g"),set[1][j]);
      }
    }
    return tmpStrg || "";
}

rawurldecode = unescape;

function entitybust(arbstrg) {  // <...> entfernen
    return arbstrg.replace(/\x26[^\x26\x3B]*\x3B/g,'');
}
function tagbust(arbstrg) {  // &...; entfernen
    return arbstrg.replace(/\x3C[^\x3C\x3E]*\x3E/g,'');
}

function getBareText(html) {
    var set = [ ["€","°","µ","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ü","ý","þ","ÿ"],
       ["&euro;","&deg;","µ","À","Á","Â","&Atilde;","Ä","&Aring;","&AElig;","&Ccedil;","È","É","Ê","&Euml;","Ì","Í","Î","&Iuml;","&ETH;","&Ntilde;","Ò","Ó","Ô","&Otilde;","Ö",
        "&times;","&Oslash;","Ù","Ú","Û","Ü","&Yacute;","&THORN;","ß","à","á","â","&atilde;","ä","&aring;","&aelig;","&ccedil;","è","é","ê","&euml;","ì","í","î","&iuml;","&eth;","&ntilde;",
        "ò","ó","ô","&otilde;","ö","&oslash;","ù","ú","û","ü","ü","&yacute;","&thorn;","&yuml;"]
              ];
    var text = tagbust(html||"");
    if (text) {
      for(var j = 0; j < set[1].length; j++) {
        text = text.replace(eval("/"+set[1][j]+"/g"),set[0][j]);
      }
    }
    return entitybust(text);
}

function swapHTMLcode(html,directio) {
    if (typeof directio != "number")  directio=1;
    var set = [["<",">","\""],["&lt;","&gt;","&quot;"]];
    if(directio <0) {
      if (html) {
        for(var j = 0; j < set[1].length; j++) {
          html = html.replace(eval("/"+set[1][j]+"/g"),set[0][j]);
        }
        html = html.replace(eval("/&amp;/g"),"&");
      }
    }
    else {
      if (html) {
        html = html.replace(eval("/&/g"),"&amp;");
        for(var j = 0; j < set[0].length; j++) {
          html = html.replace(eval("/"+set[0][j]+"/g"),set[1][j]);
        }
      }
    }
    return html || "";
}

function striphtmlspecialchars(arbstrg) {
  return swapHTMLcode(arbstrg,1);
}
unhtmlspchr = striphtmlspecialchars;

function htmlspecialchars(arbstrg) {
  return swapHTMLcode(arbstrg,-1);
}

getHTML = function(root, outputRoot) { // statt .innerHTML
    function encode(str) {
      // we don't need regexp for that, but.. so be it for now.
      str = str.replace(/&/g, "&amp;");
      str = str.replace(/</g, "&lt;");
      str = str.replace(/>/g, "&gt;");
      str = str.replace(/\"/g, "&quot;");
      return str;
    };
    if (root.htmlText) return root.htmlText; // Range-Objekt für MSIE BNY 7.8.3
    else if(root.cloneContents) root = root.cloneContents(); // für MOZ BNY 7.8.3
    var html = "";
    switch (root.nodeType) {
      case 1: // Node.ELEMENT_NODE
      case 11: // Node.DOCUMENT_FRAGMENT_NODE
        var closed;
        var i;
        if (outputRoot) {
          closed = (!(root.hasChildNodes() || HTMLArea._needsClosingTag(root)));
          html = "<" + root.tagName.toLowerCase();
          var attrs = root.attributes;
          for (i = 0; i < attrs.length; ++i) {
            var a = attrs.item(i);
            if (!a.specified) {
              continue;
            }
            var name = a.name.toLowerCase();
            if (name.substr(0, 4) == "_moz") {
              // Mozilla reports some special tags
              // here; we don't need them.
              continue;
            }
            var value;
            if (name != 'style') {
              value = a.value;
            } else { // IE fails to put style in attributes list
              value = root.style.cssText.toLowerCase();
            }
            if (value.substr(0, 4) == "_moz") {
              // Mozilla reports some special tags
              // here; we don't need them.
              continue;
            }
            html += " " + name + '="' + value + '"';
          }
          html += closed ? " />" : ">";
        }
        for (i = root.firstChild; i; i = i.nextSibling) {
                html += getHTML(i, true);
        }
        if (outputRoot && !closed) {
                html += "</" + root.tagName.toLowerCase() + ">";
        }
        break;
      case 3: // Node.TEXT_NODE
        html = encode(root.data);
        break;
      case 8: // Node.COMMENT_NODE
        html = "<!--" + root.data + "-->";
        break;                // skip comments, for now.
      default:
        if (obj.innerHTML) html = obj.innerHTML; // patch für MSIE BNY
    }
    return html;
};

// ---- simple Dialog-Fenster-Funktion
// Bsp.: onclick="dlgWin(250,'/dlgAdminLogin.html'); return false;"
// in neuem Fenster : dlgReturn(...); close();  // wenn reFn!

dlgObj = new Array();
dlgObj["last"] = null;
dlgObj["tmp"] = null;
/*  Beispiel:
    onunload="opener.dlgObj['tmp']=self;
            opener.eval('if(dlgObj['tmp'].closed) self.focus();');"
*/

function dlgEval(fnStrg) {
  if (typeof fnStrg == "string") eval(fnStrg);
}

function dlgWin(size,theURL,reFn,canScroll,showMenu,showTools,showStatus) {
    var tmpStrg='', tmpName = "extraFenster"+Math.round(Math.random()*100000);
    var X0=0, Y0=0, breit=0, hoch=0, Xsoll=-99999, Ysoll=-99999, datFenster;
    var refL=getRightLeft();
    if (typeof size == "number") { // Breite in Pixeln
      breit = Math.round(size);
      hoch = Math.round(0.66667*size);
    } else {
      if (typeof size == "string") { // dann ist das die URL!
        showStatus = showTools; showTools = showMenu; showMenu = canScroll;
        canScroll = reFn; reFn = theURL; theURL = size;
        breit = 150;  hoch = 100;
      } else {
        breit=size[0]; hoch=size[1];
        if(size[2]) Xsoll = size[2];
        if(size[3]) Ysoll = size[3];
      }
    }
    if (typeof reFn != "function") {
      showStatus = showTools; showTools = showMenu; showMenu = canScroll; canScroll = reFn;
      reFn = self.dlgEval;
    }
    if (breit+11>screen.availWidth) breit = screen.availWidth-10;
    if (hoch+31>screen.availHeight) hoch = screen.availHeight-30;
    if (showMenu) tmpStrg += 'menubar=yes,'; else tmpStrg += 'menubar=no,';
    tmpStrg += 'location=no,directories=no,resizable=no,';
    if (canScroll) tmpStrg += 'scrollbars=yes,'; else tmpStrg += 'scrollbars=no,';
    if (showTools) tmpStrg += 'toolbar=yes,'; else tmpStrg += 'toolbar=no,';
    if (showStatus) tmpStrg += 'status=yes,'; else tmpStrg += 'status=no,';
    tmpStrg += 'width='+breit+',height='+hoch+',';
    if (Ysoll != -99999) Y0 = Ysoll;
    else Y0 = Math.round((screen.availHeight-hoch)/2); if (Y0<0) Y0=0;
    if (typeof Xsoll == "string" || Xsoll!=-99999) {
      if (typeof Xsoll == "string") X0 = refL+Y0;
      else X0 = refL+Xsoll;
    }
    else X0 = refL+Math.round((screen.availWidth-breit)/2)-10; // if (X0<0) X0=0;
    //
    tmpStrg += 'left='+X0+',top='+Y0;
    datFenster = window.open(theURL,tmpName,tmpStrg,false);
    datFenster.dlgReturn = reFn; // Rückgabe-Fn - std.: dlgEval (s.o.)
    dlgObj["last"] = datFenster;
    return datFenster;
}

// Layer-/Elemente - Inhalt ändern und Anzeigen

function fillDiv(tmpObj, newCont) { // oder Iframe
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (document.layers || tmpObj.contentWindow) {
      tmpObj.document.open();
      tmpObj.document.write(newCont);
      tmpObj.document.close();
    } else tmpObj.innerHTML = newCont;
}

function loadIframe (tmpObj, newSrc) { // oder Div bei NN4
    if (tmpObj.src) tmpObj.src = newSrc;
    else if (tmpObj.location) tmpObj.location.href = newSrc; // msie
}

function showDiv(tmpObj) {
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (document.layers) tmpObj.visibility = 'show';
    else tmpObj.style.visibility = 'visible';
}

function hideDiv(tmpObj) {
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (document.layers) tmpObj.visibility = 'hide';
    else tmpObj.style.visibility = 'hidden';
}

// --- Elemente / Variablen / Funktionen auffinden

function dynGetVar(varName,startEbene) { // geht auch für functions
  var erg=null;
  if(!startEbene) startEbene = window;
  function rekurs(varName,ebene,tiefe) {
    if (erg!=null || !ebene || tiefe>30) return;
    else {
      eval('if (ebene.'+varName+') erg = ebene.'+varName+';');
      if (ebene.parent && ebene.parent!=ebene) rekurs (varName,ebene.parent,++tiefe);
      else {
        if (typeof ebene.dialogArguments == "object" && ebene.dialogArguments != null && ebene.dialogArguments.location)
          ebene.opener = ebene.dialogArguments;
        if (ebene.opener) rekurs (varName,ebene.opener,++tiefe);
        else rekurs (varName,null);
      }
    }
  }
  rekurs (varName,startEbene,0);
  return erg;
}

function getHtmlElement(tmpID,outerID) { // äußeren Layer für NN4 (ggf. Layer-Objekt)
    var innerID=null;
    if (window.frames && window.frames[tmpID]) return window.frames[tmpID]; // Iframe
    if (document.all) return document.all[tmpID]; // MSIE
    else {
      if (document.layers) { // NN4 :
        var Layer=document;
        if (typeof outerID == "object") Layer = outerID.document;
        else if (outerID && document.layers[outerID])
            Layer = document.layers[outerID].document;
        return Layer[tmpID];
      }
      else return document.getElementById(tmpID); // W3C
    }
}

function getOuterNode(tmpType,tmpNode) { // ergibt nächst höheren Node vom gesuchten Typ oder null
    tmpType = tmpType.toLowerCase();     // MSIE & NN6 / MOZ
    if (typeof tmpNode != "object" || tmpNode == null) return null;
    if (tmpNode.nodeName.toLowerCase() == tmpType) {
        return tmpNode;
    } else {
        return getOuterNode(tmpType,tmpNode.parentNode);
    }
}

// Layer-/Elemente Positionieren / Größe verändern

function getWindowWidth() // IM BODY benutzen!
{ if (window.innerWidth) return window.innerWidth;
  else return document.body.offsetWidth;
}

function getWindowHeight() // IM BODY benutzen!
{ if (window.innerHeight) return window.innerHeight;
  else return document.body.offsetHeight;
}

function getRightLeft() // linke Kante auf 2 Bildschirmen
{ var scrX=0;
  if (window.screenX) scrX=window.screenX;
  if (window.screenLeft) scrX=window.screenLeft;
  if (scrX > screen.width-20) return Math.round(screen.width);
  else if (scrX < -400) return Math.round(screen.width*-1);
  else return 0;
}

function setPos(tmpObj,tmpX,tmpY,tmpZ,relative) {
    var relX=0, relY=0, relZ=0, tmpArr;
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (relative) {
      tmpArr = getPos(tmpObj);
      relX= tmpArr[0]; relX= tmpArr[1]; relZ= tmpArr[2];
    }
    if (tmpObj.style) {
      if (typeof tmpX == "number") tmpObj.style.left = (tmpX+relX).toString()+"px";
      if (typeof tmpY == "number") tmpObj.style.top = (tmpY+relY).toString()+"px";
      if (typeof tmpZ == "number") tmpObj.style.zIndex = tmpZ + relZ;
    } else {
      if (typeof tmpX == "number") tmpObj.left = tmpX+relX;
      if (typeof tmpY == "number") tmpObj.top = tmpY+relY;
      if (typeof tmpZ == "number") tmpObj.zIndex = tmpZ + relZ;
    }
}

function getPos(tmpObj) {
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (document.layers) return [ tmpObj.pageX , tmpObj.pageY , tmpObj.zIndex ];
    else return [ tmpObj.offsetLeft , tmpObj.offsetTop , tmpObj.style.zIndex ];
}

function setSize(tmpObj,tmpW,tmpH) { // Prozentangaben beziehen sich auf Fenstergrö.
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (typeof tmpW == "string" && tmpW.indexOf("%")==-1) tmpW = parseInt(tmpW);
    if (typeof tmpH == "string" && tmpH.indexOf("%")==-1) tmpH = parseInt(tmpH);
    if (typeof tmpW == "number") tmpObj.style.width = tmpW.toString()+"px";
    if (typeof tmpH == "number") tmpObj.style.height = tmpH.toString()+"px";
    if (typeof tmpW == "string") {
      tmpObj.style.width = (Math.round(parseFloat(tmpW)*getWindowWidth())).toString()+"px";
    }
    if (typeof tmpH == "string") {
      tmpObj.style.height = (Math.round(parseFloat(tmpH)*getWindowHeight())).toString()+"px";
    }
}
// document.getElementById(this.id).style.width = neuwert.toString()+'px'

function getSize(tmpObj) {
    if (typeof tmpObj == "string") tmpObj = getHtmlElement(tmpObj);
    if (document.layers) return [ tmpObj.clip.width , tmpObj.clip.height ];
    else return [ parseInt(tmpObj.offsetWidth.toString()) , parseInt(tmpObj.offsetHeight.toString()) ];
}

// Scrolling-Funktionen

function OnScroll() {;} // überschreibbare Funktion

var OnScrollText='', ScrollIntervalID=0;

function AutoOnScroll() {eval (OnScrollText);}

function getScrollPos()
   {if(window.pageYOffset) return window.pageYOffset;
    else
     {if (document.body.scrollWidth) return document.body.scrollTop;
      else return 0;}
}
getScrollX = getScrollPos;

function getHScrollPos()
   {if(window.pageXOffset) return window.pageXOffset;
    else
     {if (document.body.scrollHeight) return document.body.scrollLeft;
      else return 0;}
}
getScrollY = getHScrollPos;

function PreOnScroll()
   {dYScrolled=LastScrollPos-OldScrollPos;
    dXScrolled=LastVScrollPos-OldHScrollPos;
    AutoOnScroll();
    OnScroll();
    OldScrollPos=LastScrollPos;
    OldHScrollPos=LastVScrollPos;
    }

function PrePreOnScroll()
    {setTimeout('if(LastScrollPos==getScrollPos() && LastVScrollPos==getHScrollPos()) PreOnScroll();',200);
     LastScrollPos = getScrollPos();
     LastVScrollPos = getHScrollPos();
     }

function controlScroll()
{ if (ScrollIntervalID!=0) ignoreScroll();
  ScrollIntervalID=setInterval('if(LastScrollPos!=getScrollPos() || LastVScrollPos!=getHScrollPos()) PrePreOnScroll(); ',333);
}

function ignoreScroll() {clearInterval(ScrollIntervalID);}

function incLayerApi() {
  var datei="";
  if(msie) datei="layers_ie.js"
  if(nn4) datei="layers_n4.js"
  if(w3c) datei="layers_w3c.js"
  document.write('<script language="JavaScript1.2" src="'+JsApiPath+datei+'" type="text/javascript"></script> ');
}

function initMiniTool(paramStr) {
   if (!paramStr) paramStr="";
   else paramStr = paramStr.toLowerCase();
   OldHScrollPos=getHScrollPos(); OldScrollPos=getScrollPos();
   LastVScrollPos=OldHScrollPos; LastScrollPos=OldScrollPos;
   controlScroll();
   initLayerApi();
   // if (paramStr.search(/\b_xyz_\b/) != -1) {}
}


function pageLoaded() {
    POPdiv = document.getElementById('popDiv');
    if (document.layers) POPdiv.bgColor="#000000";
    imageWalk();
 // ypSlideOutMenu.Registry[id]
}

function pageResized() {
}

