var service = "glossary.html?topic=";
var breite = 300;
var shadowwidth = 5;
var shadowoffset = 5;

var x = ""; var y = ""; var topic = ""; var cache = new Array ();

function absLeft (el) { return (el.offsetParent) ? el.offsetLeft + absLeft (el.offsetParent) : el.offsetLeft; }

function absTop (el) { return (el.offsetParent) ? el.offsetTop + absTop (el.offsetParent) : el.offsetTop; }

function lex (obj) {
  if (!window.XMLHttpRequest && !window.ActiveXObject) { return true; }
  if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (!req) { return true; }
    delete req;
  }

  topic = esc (obj.hash.substr(1));
  if (!topic || "" == topic || "undefined" == topic) { return true; }

  obj.blur ();
  hidelexikon ();
  y = absTop (obj) + 5;
  x = absLeft (obj) + 5;

  for (i = 0; i< document.getElementsByTagName("div").length; i++) {
    if (document.getElementsByTagName("div")[i].className == "alles") {
      refobj = document.getElementsByTagName("div")[i];
    }
  }

  if (refobj.offsetWidth < maxwidth) { return true; }

  if (x + breite + shadowwidth > refobj.offsetWidth + absLeft (refobj)) {
    x = refobj.offsetWidth + absLeft (refobj) - breite - shadowwidth;
  }

  if (x < 0) { x = 0;}

  var div = document.createElement("div");
  div.linker = obj;

  div.style.top = y + "px";
  div.style.left = x + "px";
  div.style.width = breite + "px";

  var id = document.createAttribute("id");
  id.nodeValue="lexikondiv";
  div.setAttributeNode(id);

  window.onresize = function () { reposition(); }

  div.innerHTML = '<span id="lexikonspan">Erl&auml;uterung wird geladen...<br></span>';
  div.innerHTML = div.innerHTML + '<div style="text-align:center;"><a href="#" class="schliessenlink" onclick="hidelexikon(); return false;">Schließen</a></div>';
  document.getElementsByTagName("body")[0].appendChild(div);  
  if (!cache[topic]) { makeshadow(document.getElementById("lexikondiv")); }


  if (cache[topic]) {
    document.getElementById("lexikonspan").innerHTML = cache[topic] + "<br>";
    makeshadow(document.getElementById("lexikondiv"));
    return false;
  }

  try {
    if (window.XMLHttpRequest) {
      req = new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
      req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    req.onreadystatechange = loadEntry;
    req.open ("GET", service + topic, true);
    req.send(null);
    return false;
  } catch (e) {
    return true;
  }

  return true;
}

function loadEntry () {
  if (4 == req.readyState) {
    if (200 != req.status) {
      location = "glossar.html#" + topic;
    } else {
      if (document.getElementById("lexikonspan")) {
        removeshadow(document.getElementById("lexikondiv"));
        document.getElementById("lexikonspan").innerHTML = req.responseText + "<br>";
        makeshadow(document.getElementById("lexikondiv"));
        cache[topic] = req.responseText;
      }
    }
  }
}


function hidelexikon () {
  if (document.getElementById("lexikondiv")) {
    removeshadow (document.getElementById("lexikondiv"));
    a = document.getElementById("lexikondiv");
    document.getElementsByTagName("body")[0].removeChild(a);
    delete a;
    window.onresize = function() {};
  }
}

function reposition () {
  if (!document.getElementById("lexikondiv")) {
    return;
  }

  obj = document.getElementById("lexikondiv");

  y = absTop (obj.linker) + 5;
  x = absLeft (obj.linker) + 5;

  for (i = 0; i< document.getElementsByTagName("div").length; i++) {
    if (document.getElementsByTagName("div")[i].className == "alles") {
      refobj = document.getElementsByTagName("div")[i];
    }
  }
  if (refobj.offsetWidth < maxwidth) {
    return false;
  }

  if (x + breite + shadowwidth > refobj.offsetWidth + absLeft (refobj)) {
    x = refobj.offsetWidth + absLeft (refobj) - breite - shadowwidth;
  }

  if (x < 0) {
    x = 0;
  }
  obj.style.top = y + "px";
  obj.style.left = x + "px";
  window.setTimeout ("moveshadow(document.getElementById('lexikondiv'))", 100);
}

function moveshadow (obj) {
  if (document.defaultView) {
    var links = document.defaultView.getComputedStyle(obj,null).getPropertyValue("left");
    links = parseInt(links.substr(0,links.length-2));
    var oben = document.defaultView.getComputedStyle(obj,null).getPropertyValue("top");
    oben = parseInt(oben.substr(0,oben.length-2));
  } else {
    var links = absLeft (obj);
    var oben = absTop (obj);
  }

  obj.schattenur.style.left = (links+obj.offsetWidth) + "px";
  obj.schattenur.style.top = (oben+obj.offsetHeight) + "px";
  obj.schattenul.style.left = (links + shadowoffset) + "px";
  obj.schattenul.style.top = (oben + obj.offsetHeight) + "px";
  obj.schattenor.style.left = (links+ obj.offsetWidth) + "px";
  obj.schattenor.style.top = (oben + shadowoffset) + "px";

  obj.schattenu.style.left = (links + shadowwidth + shadowoffset) + "px";
  obj.schattenu.style.top = (oben + obj.offsetHeight) + "px";
  obj.schattenu.style.width = (obj.offsetWidth - shadowwidth - shadowoffset) + "px";

  obj.schattenr.style.left = (links + obj.offsetWidth) + "px";
  obj.schattenr.style.top = (oben + shadowwidth + shadowoffset) + "px";
  obj.schattenr.style.height = (obj.offsetHeight - shadowwidth - shadowoffset) + "px";
}

function esc (string) {
  string = escape (string);
  string=string.replace(/\+/,"%2B");
  return string;
}

function makeshadow (obj) {
if (document.defaultView) {
var links = document.defaultView.getComputedStyle(obj,null).getPropertyValue("left");
links = parseInt(links.substr(0,links.length-2));
var oben = document.defaultView.getComputedStyle(obj,null).getPropertyValue("top");
oben = parseInt(oben.substr(0,oben.length-2));
} else {
var links = absLeft (obj);
var oben = absTop (obj);
}

ur = makeshadowdiv (links + obj.offsetWidth, oben+obj.offsetHeight, shadowwidth, shadowwidth, "/z/schatten-ur.png");
document.getElementsByTagName("body")[0].appendChild(ur);
obj.schattenur = ur;

ul = makeshadowdiv (links + shadowoffset, oben + obj.offsetHeight, shadowwidth, shadowwidth, "/z/schatten-ul.png");
document.getElementsByTagName("body")[0].appendChild(ul);
obj.schattenul = ul;

or = makeshadowdiv (links+ obj.offsetWidth, oben + shadowoffset, shadowwidth, shadowwidth, "/z/schatten-or.png");
document.getElementsByTagName("body")[0].appendChild(or);
obj.schattenor = or;

u = makeshadowdiv (links + shadowwidth + shadowoffset, oben+obj.offsetHeight, obj.offsetWidth - shadowwidth - shadowoffset, shadowwidth, "/z/schatten-u.png");
document.getElementsByTagName("body")[0].appendChild(u);
obj.schattenu = u;

r = makeshadowdiv (links + obj.offsetWidth, oben + shadowwidth+shadowoffset, shadowwidth, obj.offsetHeight - shadowwidth - shadowoffset, "/z/schatten-r.png");
document.getElementsByTagName("body")[0].appendChild(r);
obj.schattenr = r;
}


function makeshadowdiv (left, top, width, height, image) {
obj = document.createElement("div");
obj.className = "schatten";
obj.style.position = "absolute";
obj.style.top = top + "px";
obj.style.left = left + "px";
obj.style.height = height + "px";
obj.style.width = width + "px";
obj.style.fontSize = "1px"; // wg. IE
obj.style.backgroundImage = "url(" + image + ")";
return obj;
}

function removeshadow (obj) {
if (obj.schattenur) { document.getElementsByTagName("body")[0].removeChild(obj.schattenur); }
if (obj.schattenor) { document.getElementsByTagName("body")[0].removeChild(obj.schattenor); }   
if (obj.schattenul) { document.getElementsByTagName("body")[0].removeChild(obj.schattenul); }
if (obj.schattenr) { document.getElementsByTagName("body")[0].removeChild(obj.schattenr); }
if (obj.schattenu) {document.getElementsByTagName("body")[0].removeChild(obj.schattenu); }
}

function inspect (obj) { var h; for (x in obj) { h = h + x + ": " + obj[x] + "; "; } alert (h); }
