/**
 * domready.js
 * 
 * Cross browser mozilla's 'onDOMContentLoaded' implementation.
 * Executes a function when the dom tree is loaded without waiting for images.
 * 
 * Based on +Element.Events.domready+ from Mootools open source project, 
 * this tiny javascript library adds the emulated 'DOMContentLoaded' functionality.
 * 
 * Features:
 *   - No dependency on external libraries
 *   - Compatible with Prototype.js 
 * 
 * Tested browsers (Windows):
 *   - IE 7 (XP standalone)
 *   - IE 6 SP2
 *   - Firefox 2.0.0.4
 *   - Opera 9.21
 * 
 * Tested browsers (Mac OS X):
 *   - Safari 2.0.4
 *   - Firefox 2.0.0.4
 *   - Mac Opera 9.21
 *   - Mac IE 5.2.3
 *
 * Copyright (c) 2007 Takanori Ishikawa.
 * License: MIT-style license.
 * 
 * MooTools Copyright:
 * copyright (c) 2007 Valerio Proietti, <http://mad4milk.net>
 *
 *
 * See Also:
 *
 *   mootools 
 *   http://mootools.net/
 *   
 *   The window.onload Problem - Solved!
 *   http://dean.edwards.name/weblog/2005/09/busted/
 *   
 *   [PATCH] Faster onload for Event.onload
 *   http://dev.rubyonrails.org/ticket/5414
 *   Changeset 6596: Support for "DOMContentLoaded" event handling (prototype.js event branch)
 *   http://dev.rubyonrails.org/changeset/6596
 *
 */

if (typeof Event == 'undefined') Event = new Object();

/*
 * Registers function +fn+ will be executed when the dom 
 * tree is loaded without waiting for images. 
 * 
 * Example:
 *
 *  Event.domReady.add(function() {
 *    ...
 *  });
 *
 */
Event.domReady = {
  add: function(fn) {
    
    //-----------------------------------------------------------
    // Already loaded?
    //-----------------------------------------------------------
    if (Event.domReady.loaded) return fn();
    
    //-----------------------------------------------------------
    // Observers
    //-----------------------------------------------------------
    var observers = Event.domReady.observers;
    if (!observers) observers = Event.domReady.observers = [];
    // Array#push is not supported by Mac IE 5
    observers[observers.length] = fn;
    
    //-----------------------------------------------------------
    // domReady function
    //-----------------------------------------------------------
    if (Event.domReady.callback) return;
    Event.domReady.callback = function() {
      if (Event.domReady.loaded) return;
      
      Event.domReady.loaded = true;
      if (Event.domReady.timer) {
        clearInterval(Event.domReady.timer);
        Event.domReady.timer = null;
      }
      
      var observers = Event.domReady.observers;
      for (var i = 0, length = observers.length; i < length; i++) {
        var fn = observers[i];
        observers[i] = null;
        fn(); // make 'this' as window
      }
      Event.domReady.callback = Event.domReady.observers = null;
    };
    
    //-----------------------------------------------------------
    // Emulates 'onDOMContentLoaded'
    //-----------------------------------------------------------
    var ie = !!(window.attachEvent && !window.opera);
    var webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;
    
    if (document.readyState && webkit) {
      
      // Apple WebKit (Safari, OmniWeb, ...)
      Event.domReady.timer = setInterval(function() {
        var state = document.readyState;
        if (state == 'loaded' || state == 'complete') {
          Event.domReady.callback();
        }
      }, 50);
      
    } else if (document.readyState && ie) {
      
      // Windows IE 
      var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
      document.write(
        '<script type="text/javascript" defer="defer" src="' + src + '" ' + 
        'onreadystatechange="if (this.readyState == \'complete\') Event.domReady.callback();"' + 
        '><\/script>');
      
    } else {
      
      if (window.addEventListener) {
        // for Mozilla browsers, Opera 9
        document.addEventListener("DOMContentLoaded", Event.domReady.callback, false);
        // Fail safe 
        window.addEventListener("load", Event.domReady.callback, false);
      } else if (window.attachEvent) {
        window.attachEvent('onload', Event.domReady.callback);
      } else {
        // Legacy browsers (e.g. Mac IE 5)
        var fn = window.onload;
        window.onload = function() {
          Event.domReady.callback();
          if (fn) fn();
        }
      }
      
    }
    
  }
}
function scale(){
	// innere Fensterbreite
	var width 	= (window.innerWidth)   ? window.innerWidth : document.body.clientWidth;
	var height 	= (window.innerHeight) ?  window.innerHeight : document.documentElement.clientHeight;
	if(width < 1280){
		factor= width/1280; 
		document.getElementById('wrapper').style.width = String(docWidth*factor)+'px';
		document.getElementById('wrapper').style.height = String(docHeight*factor)+'px';
	}
}

  
  function getPos(e) {
	// innere Fensterbreite
	width 	= (window.innerWidth)   ? window.innerWidth : document.documentElement.clientWidth;
	height 	= (window.innerHeight) ?  window.innerHeight : document.documentElement.clientHeight;
    xpos 	= (document.layers || (document.getElementById && !document.all)) ? e.pageX :     document.documentElement.scrollLeft + event.clientX;
    ypos 	= (document.layers || (document.getElementById && !document.all)) ? e.pageY :     document.documentElement.scrollTop + event.clientY;
	// position relativ zum Fenster
	winXoff	= (window.pageXOffset) ? xpos - window.pageXOffset : xpos - document.documentElement.scrollLeft;
	winYoff	= (window.pageYOffset) ? ypos - window.pageYOffset : ypos - document.documentElement.scrollTop;
	
	relXPos = (100 / width) * winXoff;
	relYPos = (100 / (height)) * (winYoff);
	if(relXPos > 99 || relXPos < 0.1){xpos 	= -1;}
	if(relYPos > 99 || relYPos < 0.1){ypos 	= -1;}
	areaScroll();
  } 
  
  function nullPos(e) {
		relXPos = 50; 
		relYPos = 50;
		areaScroll();
  }
  
  function areaScroll() {
	if(xpos >= 0 && ypos >= 0){
		moveX = 0;
		moveY = 0;
		
		// 
		var cursor1 = '';
		var cursor2 = '';
		if(relYPos < scrollMarginT)	{moveY = (25 - relYPos) * -Math.sin((25 - relYPos) * (scrollFactor)); cursor1 = 'n';}
		if(relYPos > scrollMarginB)	{moveY = (relYPos-75) *    Math.sin((relYPos-75) * scrollFactor); 	 cursor1 = 's';}
		if(relXPos < scrollMarginL)	{moveX = (25 - relXPos) * -Math.sin((25 - relXPos) * scrollFactor); cursor2 = 'w';}
		if(relXPos > scrollMarginR)	{moveX = (relXPos-75) *    Math.sin((relXPos-75) * scrollFactor); 	 cursor2 = 'e';}
		if(relYPos <= 0 || winYoff < 60 || relYPos >= height) moveY = 0;
		if(relXPos <= 0 || relXPos >= width)  moveX = 0;
		//document.body.className = cursor1+cursor2;
		xpos += moveX;
		ypos += moveY;
	}
  }

function doScroll(){
		if(typeof(moveX)!='undefined'){
			window.scrollBy(moveX*2, moveY*2);
			}
		window.setTimeout("doScroll()",1);
	}
	
	
function init(){
  	// window.setInterval("areaScroll()",100);
	//window.setInterval("doScroll()",2);
	doScroll();
 	imgBox = document.getElementsByTagName('img');
	for (i=0;i<imgBox.length;i++){
		if(imgBox[i].className!="noItem"){imgBox[i].style.zIndex = (i*2);}

		imgBox[i].onclick = function(evt){
			if (!evt) var evt = window.event;
			elem  	= (evt.target) ? evt.target : evt.srcElement
			var elPos 	= elCenter(elem); 
			var pic 	= (elem.id);
			
			// Titelposition innerhalb des Titel-Div auf Mausposition ausrichten 
			var bgX = parseInt(xpos-elPos.left-275); 
			if((bgX+550) > elPos.width)	{bgX = elPos.width - 550;}
			if(bgX < 0)					{bgX = 0} 
			
			var bgY = parseInt(ypos-elPos.top-86); 	 
			if(bgY < 0)					{bgY = 0;} 
			if((bgY+177) > elPos.height){bgY = elPos.height - 177;}			
			
			// ggf. Titel in den sichtbaren Bereich des Fensters schieben
			if(elPos.yOffset+bgY < 100)	{bgY += (100 - (elPos.yOffset+bgY) );}
			if(elPos.xOffset+bgX < 0)	{bgX += (0 - (elPos.xOffset+bgX) );}
			
			document.getElementById('titleDiv').style.backgroundImage='url(img/titel' + pic + '.gif)';
			document.getElementById('titleDiv').style.backgroundPosition= bgX + 'px ' + bgY+ 'px ';
			document.getElementById('titleDiv').style.left = elem.style.left;
			document.getElementById('titleDiv').style.top = elem.style.top;
			document.getElementById('titleDiv').style.width = (elPos.width > 550) ? elem.style.width : '550px';
			document.getElementById('titleDiv').style.height = elem.style.height;
			document.getElementById('titleDiv').style.zIndex = (parseInt(elem.style.zIndex)+1);
			document.getElementById('titleDiv').style.display = 'block';
			elem.style.display='none';
		} 
	} 
}

function removeTitle(){
	document.getElementById('titleDiv').style.display = 'none';
	elem.style.display='block';
}

function elCenter(obj) {
	var curleft = curtop = 0;
	var curWidth = obj.offsetWidth;
	var curHeight = obj.offsetHeight;
	
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	
	var centerX 	= curleft + (curWidth/2);
	var centerY 	= curtop + (curHeight/2);

	var xOff	= (window.pageXOffset) ? curleft - window.pageXOffset : curleft - document.documentElement.scrollLeft;
	var yOff	= (window.pageYOffset) ? curtop - window.pageYOffset : curtop - document.documentElement.scrollTop;
	
	var elPos = {
		centerX:centerX, 
		centerY:centerY,
		left:curleft,
		right:curleft + curWidth,
		top:curtop,
		bottom:curtop + curHeight,
		width:curWidth,
		height:curHeight,
		xOffset:xOff,
		yOffset:yOff
	}
	return elPos;
}
  xpos		  = 0;
  ypos		  = 0;
  relYPos 	  = 0;
  relXPos 	  = 0;
  winYoff	  = 0;
  winXoff	  = 0;
  scrollMargin 	= 25;
  scrollMarginL = scrollMargin;
  scrollMarginR = 100 - scrollMargin;
  scrollMarginT = scrollMargin;
  scrollMarginB = 100 - scrollMargin;
  scrollFactor 	= (Math.PI / 2) / (scrollMargin*2);
  
  Event.domReady.add(scale);
  Event.domReady.add(init);
  	

  //scrollFactor = 1;
  
  if(document.layers) {
    window.captureEvents(Event.MOUSEMOVE);
    window.onmousemove	= getPos;
    window.onmouseout	= nullPos;
    window.onresize		= scale;
  }
  else {
    document.onmousemove= getPos;
    document.onmouseout	= nullPos;
	window.onresize		= scale;
  }

  
