MochiKit.DOM.addLoadEvent(function () {

  if (!isUndefinedOrNull(getElement("picOV"))) {

    var pic_handles = [];
    var loader = getElement("subjFS").cloneNode(true);
    var ie_old_body = null;
    var exit_handle = [];
    var nav_handles = [];

    var calc_size = function (owidth,oheight) {
      var mommy = getElementDimensions(getElement("picFS"));
      var maxX = mommy.w*0.95;
      var maxY = mommy.h*0.95;
      var sizeX = owidth;
      var sizeY = oheight;
      log("resizing: maxX: "+maxX+"; maxY: "+maxY+"; sizeX: "+sizeX+"; sizeY: "+sizeY,"calc_size");
      if (sizeX > maxX) {
        sizeY = (maxX/sizeX)*sizeY;
        sizeX = maxX;
      }
      if (sizeY > maxY) {
        sizeX = (maxY/sizeY)*sizeX;
        sizeY = maxY;
      }
      log("after resizing: "+"; sizeX: "+sizeX+"; sizeY: "+sizeY,"calc_size");
      return { "width": sizeX, "height": sizeY };
    }

    var larr = function (id) {
      if (id>0) {
        var newImage = new Image();
        newImage.src = "/pics/pfeillinks.gif";
        newImage.alt = "previous";
        newImage.id = "larr";
        return newImage;
      }
      return null;
    }

    var rarr = function (id) {
      if (id<(mypics.length-1)) {
        var newImage = new Image();
        newImage.src = "/pics/pfeilrechts.gif";
        newImage.alt = "next";
        newImage.id = "rarr";
        return newImage;
      }
      return null;
    }

    var movearrs = function () {
      var pos = getElementPosition("subjFS");
      var size = getElementDimensions("subjFS");
      var mysize = {};
      mysize.myleft = getElementDimensions("larr");
      mysize.myright = getElementDimensions("rarr");
      var newpos = {};
      if (!isUndefinedOrNull(mysize.myleft)) {
        newpos.myleft = {};
        newpos.myleft.x = Math.round(pos.x)-10-Math.round(mysize.myleft.w);
        newpos.myleft.y = Math.round(pos.y)+Math.round(size.h/2)-Math.round(mysize.myleft.h/2);
        logDebug("subjFS position: "+pos.x+"X"+pos.y+", new larr Position: "+newpos.myleft.x+"X"+newpos.myleft.y+"");
        setElementPosition("larr",newpos.myleft);
      }
      if (!isUndefinedOrNull(mysize.myright)) {
        newpos.myright = {};
        newpos.myright.x = Math.round(pos.x)+size.w+10+Math.round(mysize.myright.w);
        newpos.myright.y = Math.round(pos.y)+Math.round(size.h/2)-Math.round(mysize.myright.h/2);
        logDebug("subjFS position: "+pos.x+"X"+pos.y+", subjFS width: "+size.w+" new rarr Position: "+newpos.myright.x+"X"+newpos.myright.y+"");
        setElementPosition("rarr",newpos.myright);
      }
    }

    var htmlshowFS = function () {
      if (navigator.appName.indexOf("Explorer") != -1){
        if (isUndefinedOrNull(ie_old_body)) {
          ie_old_body = document.body.cloneNode(true);
        }
        newbody = getElement("picFS").cloneNode(true);
        replaceChildNodes(document.body,newbody);
      } else {
        replaceChildNodes(getElement("picFS"),loader);
      }
      showElement(getElement("picFS"));
      showElement(getElement("subjFS"));
    }

    var htmlhideFS = function () {
      hideElement(getElement("picFS"));
      if (navigator.appName.indexOf("Explorer") != -1){
        swapDOM(document.body,ie_old_body);
        ie_old_body = null;
      }
    }

    var showFS = function (id) {
      var newImage = new Image();
      newImage.src = mypics[id].fullname;
      var newsizes = calc_size(mypics[id].owidth,mypics[id].oheight);
      newImage.width = newsizes.width;
      newImage.height = newsizes.height;
      return newImage;
    }

    var stopFS = function () {
      forEach(exit_handle,disconnect);
      forEach(nav_handles,disconnect);
      htmlhideFS();
    }

    var startFS = function (id) {
      logDebug("starting fullscreen mode");
      forEach(exit_handle,disconnect);
      forEach(nav_handles,disconnect);
      htmlshowFS();
      var mypic = showFS(id);
      mypic.id = "subjFS";
      replaceChildNodes(getElement("picFS"),mypic,larr(id),rarr(id));
      showElement(getElement("subjFS"));
      if (navigator.appName.indexOf("Explorer") != -1){
//         var halfwidth=0-round(100/2);
//         var halfheight=0-round(200/2);
        var halfwidth=0-Math.round(mypic.width/2);
        var halfheight=0-Math.round(mypic.height/2);
        log("halfwidth: "+repr(halfwidth)+", halfheight: "+repr(halfheight));
        setStyle(getElement("subjFS"),{"margin-left":halfwidth+"px",
        "margin-top":halfheight+"px"});
      }
      movearrs();
      if (!isUndefinedOrNull(getElement("larr"))) {
        nav_handles[0] = connect(getElement("larr"),"onclick",partial(startFS,id-1));
      }
      if (!isUndefinedOrNull(getElement("rarr"))) {
        nav_handles[1] = connect(getElement("rarr"),"onclick",partial(startFS,id+1));
      }
      exit_handle[0] = connect(getElement("subjFS"),"onclick",stopFS);
      exit_handle[1] = connect(window,"onresize",partial(startFS,id));
    }

    var connectHandles = function () {
      forEach(mypics,function(pic){
        logDebug("connecting "+"pics_ov_id_"+pic.id);
        pic_handles[pic_handles.length] = connect("pics_ov_id_"+pic.id,"onclick",partial(startFS,pic.id));
      });
    }

    //wipe out the fullscreen-links (they're only for javascript-less friends)
    var i=0;
    while (!isUndefinedOrNull(getElement("pics_ov_link_id_"+i))) {
      hideElement(getElement("pics_ov_link_id_"+i));
      i++;
    }

    //get picture data
    if (lang == "de") {
      var mymenu = mymenu_de;
    } else {
      var mymenu = mymenu_en;
    }
    var mydoc = location.href.substr(location.href.indexOf("/"+lang)+3);
    var galMan = new xml_requests ('galMan',mydoc+"index_"+lang+".php");
    var mypics = [];
    galMan.performJSONrequest("?getpics=1",function (mydata) {
      mypics = mydata.data;
      logDebug("connecting handles")
      //connect the handlers for fullscreen mode
      connectHandles();
      logDebug("done..");
    });
  }

});
