/**********************************
            dmx-image.js
       (c) 2004 samuel müller
       samuel.mueller@leven.ch
         http://www.leven.ch
***********************************/

var dx = dy = posx = posy = 0;
var is_ie, is_moz, timeout;
var container = size = {};
var speed = 30;

function init() {
  window.onresize = init;
  is_ie = (document.all && document.body)? true: false;
  is_moz = (!is_ie && document.defaultView)? true: false;
  container.image = document.images['display'];
  container.loadimage = document.images['loadstatus'];

  container._loading = (is_ie)? document.all['loadingcontainer']: document.getElementById("loadingcontainer");
  container._display = (is_ie)? document.all['displaycontainer']: document.getElementById("displaycontainer");

  if (!container._loading || !container._display) return;

  container._display.onmousedown = startDrag;
  document.onmouseup = stopDrag;
  document.onmousemove = handleDrag;

  size.browser = {};
  size.load = {};
  size.display = {};
  size.browser.width = (is_ie)? document.body.clientWidth: window.innerWidth;
  size.browser.height = (is_ie)? document.body.clientHeight: window.innerHeight;
}

/*****************************
  image preload & dmx effect
*****************************/

function displayImage(imgsrc) {
  if (!container._display) return;
  dragable = false;
  getOffset();
  if (parseInt(container._display.style.left) > 0) {
    dmxHide();
    window.setTimeout("displayImage('"+imgsrc+"');", 1000);
    return;
  } else if (imgsrc) {

    window.clearTimeout(timeout);
    container._display.style.left = "-1500px";
    container._display.style.top = "-1500px";
    container._display.style.width = "";
    container._display.style.height = "";
    container._display.style.display = "none"; // workaround für bug in opera
    container._display.style.display = "block";
    container._loading.style.left = "-1500px";
    container._loading.style.display = "block";


     imgsrc += "?"+Math.floor(Math.random()*1000000000)

    container.image.src = imgsrc;
    container.preload = null;
    container.preload = new Image();
    container.preload.src = imgsrc;

    size.load.width = container._loading.scrollWidth;
    size.load.height = container._loading.scrollHeight;

    size.load.posx = Math.round(size.browser.width/2 - size.load.width/2 + size.browser.offsetX);
    size.load.posy = Math.round(size.browser.height/2 - size.load.height/2 + size.browser.offsetY);

    container._loading.style.left = size.load.posx+"px";
    container._loading.style.top = size.load.posy+"px";



    width = height = 0;

    timeout = window.setTimeout("displayImage();", 250);

  } else if (container.preload.complete && container.image.complete && container.preload.width > 0 && container.preload.height > 0) {

    size.display.width = container._display.scrollWidth;
    size.display.height = container._display.scrollHeight;

    size.display.posx = Math.round(size.browser.width/2 - size.load.width/2 + size.browser.offsetX);
    size.display.posy = Math.round(size.browser.height/2 - size.load.height/2 + size.browser.offsetY);

    container._display.style.width = size.display.width+"px";
    container._display.style.height = size.display.height+"px";
    container._display.style.clip = "rect(auto, "+size.load.width+"px, "+size.load.height+"px, auto)";

    container._display.style.left = size.display.posx+"px";
    container._display.style.top = size.display.posy+"px";

    container._loading.style.display = "none";

    timeout = window.setTimeout("dmxResize("+size.load.width+", "+size.load.height+");", 40);

  } else {
    timeout = window.setTimeout("displayImage();", 1000);
  }
}

function dmxResize(width, height) {
  dx = Math.ceil((size.display.width - width)*speed/100);
  dy = Math.ceil((size.display.height - height)*speed/100);

  width += dx;
  height += dy;

  size.display.posx = Math.round(size.browser.width/2 - width/2 + size.browser.offsetX);
  size.display.posy = Math.round(size.browser.height/2 - height/2 + size.browser.offsetY);

  container._display.style.left = size.display.posx+"px";
  container._display.style.top = size.display.posy+"px";
  container._display.style.clip = "rect(auto, " + width + "px, " + height + "px, auto)";


  if (width >= size.display.width && height >= size.display.height) {
    container._display.style.clip = "rect(auto, auto, auto, auto)";
    window.clearTimeout(timeout);
    dragable = true;
    return;
  }

  timeout = window.setTimeout("dmxResize("+width+","+height+");", 25);
}

function dmxHide(width, height) {
  if (!width) width = size.display.width;
  if (!height) height = size.display.height;

  dx = Math.ceil(width*speed/80);
  dy = Math.ceil(height*speed/80);

  width -= dx;
  height -= dy;


/*
nach oben links aufrollen

  container._display.style.clip = "rect(auto, " + width + "px, " + height + "px, auto)";
*/

/*
nach rechts oben aufrollen

  size.display.posx = Math.round(size.display.posx + dx + size.browser.offsetX);
  container._display.style.left = size.display.posx+"px";
  container._display.style.clip = "rect(auto, " + width + "px, " + height + "px, auto)";
*/

/*
nach oben aufrollen
*/
  container._display.style.clip = "rect(auto, auto, " + height + "px, auto)";



/*
// in der mitte verkleinern

  size.display.posx = Math.round(size.browser.width/2 - width/2 + size.browser.offsetX);
  size.display.posy = Math.round(size.browser.height/2 - height/2 + size.browser.offsetY);

  container._display.style.left = size.display.posx+"px";
  container._display.style.top = size.display.posy+"px";

  container._display.style.clip = "rect(auto, " + width + "px, " + height + "px, auto)";
*/

  if (width <= 5 || height <= 12) {
    window.clearTimeout(timeout);
    container._display.style.left = "-1500px";
    container._display.style.width = "";
    container._display.style.height = "";
    container._display.style.clip = "rect(auto, 5px, 5px, auto)";
    container.image.src = "";
    container.display.hiding = false;
    return;
  }
  container.display.hiding = true;

  timeout = window.setTimeout("dmxHide("+width+","+height+");", 25);
}

function getOffset() {
  size.browser.offsetX = (is_ie)? document.body.scrollLeft: window.pageXOffset;
  size.browser.offsetY = (is_ie)? document.body.scrollTop: window.pageYOffset;
}

var timer;
function closeDelayed(cleartimeout) {
  if (cleartimeout) {
    window.clearTimeout(timer);
  } else {
    timer = window.setTimeout("dmxHide();", 3000);
  }
}

/****************************
        drag & drop
****************************/

var dragx = dragy = 0;
var drag = false, dragable = false;

function startDrag(e) {
  drag = true;
  dragx = (e)? e.pageX: (window.event.clientX + document.body.scrollLeft);
  dragy = (e)? e.pageY: (window.event.clientY + document.body.scrollTop);
  return false;
}

function stopDrag() {
  if (!drag) return false;

  drag = false;
  return false;
}

function handleDrag(e) {
  if (!drag) return false;
  if (!dragable) return false;

  posx = (e)? e.pageX: (window.event.clientX + document.body.scrollLeft);
  posy = (e)? e.pageY: (window.event.clientY + document.body.scrollTop);

  container._display.style.left = parseInt(container._display.style.left)-(dragx-posx)+"px";
  container._display.style.top = parseInt(container._display.style.top)-(dragy-posy)+"px";

  dragx = posx;
  dragy = posy;
  return false;
}