// ----------------------------------------------------------------------------------------------------
// loop.js - LOOP JavaScript part
// ----------------------------------------------------------------------------------------------------
var LOOP = {
	// ------------------------------------------------------------
	loop : null,
	inner : null,
	status : null,
	pictures : 0,
	loaded : 0,
	fadeIn : 0,
	vertikal : false,
	dir : 0,
	toDir : 0,
	tref : null,
	delay : 25,
	fadeDelay : 150,
	step : 1,
	toStep : 1,
	maxStep : 40,
	center2 : 0,
	// ------------------------------------------------------------
	getPosition : function(e) {
		var left = 0;
		var top  = 0;
	
		while (e.offsetParent) {
			left += e.offsetLeft;
			top  += e.offsetTop;
			e     = e.offsetParent;
		}
		left += e.offsetLeft;
		top  += e.offsetTop;
	
		return {y:top,x:left};
	},
	// ------------------------------------------------------------
	startFading : function() {
		LOOP.fadeIn = 0;
		LOOP.fade();
	},
	fade : function() {
		if (el = document.getElementById('Moving' + LOOP.fadeIn))
			el.style.visibility = 'visible';

		if (LOOP.fadeIn++ <= LOOP.pictures)
			window.setTimeout('LOOP.fade()',LOOP.fadeDelay);
		else {
			try {
				if (QUOTES) {
					QUOTES.init('Zitate');
//					QUOTES.start();	
				}
			}
			catch(e) {};
		}
	},
	// ------------------------------------------------------------
	startMoving : function(which) {
		LOOP.toDir = which;
		LOOP.move();
	},
	stopMoving : function() {
		if (LOOP.tRef) {
			window.clearTimeout(LOOP.tRef);
			LOOP.tRef = null;
		}
	},
	// ------------------------------------------------------------
	move : function() {
		if (LOOP.inner) {
			if (LOOP.vertikal) {
				var newtop = (LOOP.inner.offsetTop + (LOOP.dir * LOOP.step));
		
				// nach unten
				if (LOOP.center2 - Math.abs(newtop) > LOOP.inner.lastChild.offsetHeight) {
					var h = LOOP.inner.lastChild.offsetHeight;			
					var last = LOOP.inner.lastChild;
					var first = LOOP.inner.firstChild;
					LOOP.inner.insertBefore(last,first);
					newtop -= h;
				}
				// nach oben
				else if (Math.abs(newtop) - LOOP.center2 > LOOP.inner.firstChild.offsetHeight) {
					var h = LOOP.inner.firstChild.offsetHeight;
					var last = LOOP.inner.lastChild;
					var first = LOOP.inner.firstChild;
					LOOP.inner.appendChild(first);
					newtop += h;
				}
				// Richtungsaenderung?
				if (LOOP.toDir != LOOP.dir) {
					// Langsam?
					if (LOOP.step <= 1) {
						LOOP.dir = LOOP.toDir;
						LOOP.step = 1;
					}
					// Erst Geschwindigkeit drosseln!
					else
						LOOP.step-- ;
				}
				else {
					if (LOOP.toStep < LOOP.step)
						LOOP.step-- ;
					else if (LOOP.toStep > LOOP.step)
						LOOP.step++ ;
				}
				LOOP.inner.style.top = newtop;
			}
			else {
				var newleft = (LOOP.inner.offsetLeft + (LOOP.dir * LOOP.step));
		
				// nach rechts
				if (LOOP.center2 - Math.abs(newleft) > LOOP.inner.lastChild.offsetWidth) {
					var w = LOOP.inner.lastChild.offsetWidth;			
					var last = LOOP.inner.lastChild;
					var first = LOOP.inner.firstChild;
					LOOP.inner.insertBefore(last,first);
					newleft -= w;
				}
				// nach links
				else if (Math.abs(newleft) - LOOP.center2 > LOOP.inner.firstChild.offsetWidth) {
					var w = LOOP.inner.firstChild.offsetWidth;
					var last = LOOP.inner.lastChild;
					var first = LOOP.inner.firstChild;
					LOOP.inner.appendChild(first);
					newleft += w;
				}
				// Richtungs?nderung?
				if (LOOP.toDir != LOOP.dir) {
					// Langsam?
					if (LOOP.step <= 1) {
						LOOP.dir = LOOP.toDir;
						LOOP.step = 1;
					}
					// Erst Geschwindigkeit drosseln!
					else
						LOOP.step-- ;
				}
				else {
					if (LOOP.toStep < LOOP.step)
						LOOP.step-- ;
					else if (LOOP.toStep > LOOP.step)
						LOOP.step++ ;
				}
				LOOP.inner.style.left = newleft;
			}
			LOOP.tRef = window.setTimeout("LOOP.move()",LOOP.delay);
		}
	},
	// ------------------------------------------------------------
	imageLoaded : function(ref) {
		LOOP.loaded++ ;
	
		if (LOOP.status == null)
			LOOP.status = document.getElementById("LoopStatus");
	
		if (LOOP.pictures) {
			var rest = Math.max(0,(LOOP.pictures - LOOP.loaded));
			var msg = 'Bilddaten werden vorbereitet: ' + rest;
			if (LOOP.status)
				LOOP.status.innerHTML = msg;
			else
				window.status = msg;

			if (!rest)
				window.setTimeout("LOOP.clearStatus()",1000);
		}
	},
	clearStatus : function() {
		if (LOOP.status)
			LOOP.status.innerHTML = '';
		else
			window.status = window.defaultStatus;
	},
	// ------------------------------------------------------------
	init : function(loopId,vertikal,initDir) {
		LOOP.vertikal = vertikal;
		LOOP.loop = document.getElementById(loopId);
		LOOP.inner = (LOOP.loop ? LOOP.loop.firstChild : null);

		if (LOOP.loop && LOOP.inner &&
		   ((vertikal && LOOP.loop.offsetHeight < LOOP.inner.offsetHeight) ||
		    (!vertikal && LOOP.loop.offsetWidth < LOOP.inner.offsetWidth))) {

			for (n = 0; n < LOOP.inner.childNodes.length; n++)
				LOOP.inner.childNodes[n].style.visibility = 'hidden';

			// Eventhandler
			LOOP.loop.onmousemove = function(event) {
				var ev = event || window.event;

				d  = (vertikal ? this.offsetHeight : this.offsetWidth);
				d2 = d/2;
				d4 = d/4;
				d8 = d/8;

				var lPos = LOOP.getPosition(this);
				p = (vertikal ? ev.clientY - lPos.y : ev.clientX - lPos.x);
				m = d2;
	
				// von 3/8tel bis 5/8tel sind die Ruhezone!
				if (p > d2-d8 && p < d2+d8)
					LOOP.toStep = 0;
				// von 2/8tel bis 3/8tel langsam/links
				else if (p > d4 && p <= d2-d8) {
					LOOP.toDir = 1;
					LOOP.toStep = 1;
				}
				// von 5/8tel bis 6/8tel langsam/rechts
				else if (p > d2+d8 && p <= d2+d4) {
					LOOP.toDir = -1;
					LOOP.toStep = 1;
				}
				else {
					LOOP.toDir = (p < d2 ? 1 : -1);
					LOOP.toStep = LOOP.maxStep;
				}
			}
			LOOP.loop.onmouseout = function(event) {
				// ignore childnode caused mouseout-Events! 
				if (!event || !event.relatedTarget || !event.relatedTarget.parentNode || event.relatedTarget.parentNode != LOOP.inner)
					LOOP.toStep = 1;
			}
			// den inneren Bereich zufaellig einstellen!
			if (vertikal) {
				var diff = LOOP.inner.offsetHeight - LOOP.loop.offsetHeight;

				LOOP.inner.style.top = -(Math.min(diff,Math.max(0,parseInt(Math.random()*diff))));
				
//				LOOP.inner.style.top = -Math.min(LOOP.inner.offsetHeight - LOOP.inner.lastChild.offsetHeight,
//				                        Math.max(LOOP.inner.firstChild.offsetHeight,parseInt(Math.random()*LOOP.inner.offsetHeight)));
				LOOP.center2 = (LOOP.inner.offsetHeight - LOOP.loop.offsetHeight) / 2;

			}
			else {
				LOOP.inner.style.left = -Math.min(LOOP.inner.offsetWidth - LOOP.inner.lastChild.offsetWidth,
				                         Math.max(LOOP.inner.firstChild.offsetWidth,parseInt(Math.random()*LOOP.inner.offsetWidth)));
				LOOP.center2 = (LOOP.inner.offsetWidth - LOOP.loop.offsetWidth) / 2;
			}
			LOOP.startFading();
			LOOP.startMoving(initDir /*vertikal ? 1 : -1*/);
		}
	}
};
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------
function createBildschleife(containerId,imageList,vertikal,direction,options) {
	var instance = new Bildschleife(containerId,imageList,vertikal,direction,options);
	instance.init();
}
function Bildschleife(containerId,imageList,vertikal,direction,options) {
	var self = this;
    var n;
    var link, img;

    this.container = null;
    this.inner = null;
    this.containerId = containerId;
    this.images = new Array();
    this.shuffle = new Array();
    this.imageList = imageList;
    this.nImages = imageList.length;
    this.loaded = 0;
    this.vertikal = vertikal;
    this.direction = direction;
    this.outerWidth = 0;
    this.outerHeight = 0;
    this.innerWidth = 0;
    this.innerHeight = 0;
    this.delay = 25;
    this.fadeIn = 0;
    this.fadeDelay1 = 100;
    this.fadeDelay2 = 50;
    this.dir = 0;
    this.toDir = direction;
    this.step = 1;
	this.maxStep = 40;
	this.gCount = 0;
    this.isMSIE = (navigator.userAgent.indexOf("MSIE") != -1);
	
    if (options) {
	    var name, value;
    	for (name in options) {
    		if ((value = options[name]) !== undefined)
				this[name] = value;
		}
	}
	this.init = function() {
	    for (n = 0; n < this.nImages; n++) {
	        img = document.createElement('IMG');
	        img.style.visibility = 'hidden';
			img.onload = function(event) {
				self.loaded++ ;
	            if (self.loaded == self.nImages)
					window.setTimeout(self.go,250);
	        };
	        img.src = imageList[n].src;
	        img.alt = img.title = imageList[n].alt;
	        if (imageList[n].url) {
	        	img.onclick = function(url) {
	        		return function(event) {
	        			document.location = url;
	        		};
	        	}(imageList[n].url);
	        }
	        img.url = imageList[n].url;
	        this.images.push(img);
	    }
	};
	// ------------------------------------------------------------
	this.getPosition = function(e) {
		var left = 0;
		var top  = 0;
	
		while (e.offsetParent) {
			left += e.offsetLeft;
			top  += e.offsetTop;
			e     = e.offsetParent;
		}
		left += e.offsetLeft;
		top  += e.offsetTop;
	
		return {y:top,x:left};
	};
	// ------------------------------------------------------------
    this.go = function() {
        self.container = document.getElementById(self.containerId);
        self.container.style.overflow = 'hidden';
        self.container.style.overflowX = 'hidden';
        self.outerWidth = self.container.offsetWidth;
        self.outerHeight = self.container.offsetHeight;
        
        self.inner = document.createElement('DIV');
        self.inner.id = self.container.id + 'Inner';
        self.inner.style.position = 'absolute';
        self.container.appendChild(self.inner);
        
        self.innerWidth = 0;
        self.innerHeight = 0;
        for (var n = 0; n < self.nImages; n++) {
            var img = self.images[n];
            self.inner.appendChild(img);
            
            if (self.vertikal) {
	            img.fullHeight = img.offsetHeight
	            if (img.currentStyle) {
	            	img.fullheight += parseInt(img.currentStyle.marginTop) +
	            	                  parseInt(img.currentStyle.marginBottom);
				}
	            else if (window.getComputedStyle) {
	            	var cs = window.getComputedStyle(img,'');
	            	img.fullheight += parseInt(cs.getPropertyValue('margin-top')) +
    	        	                  parseInt(cs.getPropertyValue('margin-bottom'));
	            }
	            self.innerHeight += img.fullHeight
			}
			else {
	            img.fullWidth = img.offsetWidth;
	            if (img.currentStyle) {
	            	img.fullWidth  += parseInt(img.currentStyle.marginLeft) +
	            	                  parseInt(img.currentStyle.marginRight);
	            }
	            else if (window.getComputedStyle) {
	            	var cs = window.getComputedStyle(img,'');
	            	img.fullWidth += parseInt(cs.getPropertyValue('margin-left')) +
    	        	                 parseInt(cs.getPropertyValue('margin-right'));
	            }
	    	    self.innerWidth += img.fullWidth
            }
        }
		if (self.vertikal) {
	        self.inner.style.height = (self.innerHeight + 1) + 'px';
			var diff = self.inner.offsetHeight - self.container.offsetHeight;
			self.inner.style.top = -(Math.min(diff,Math.max(0,parseInt(Math.random()*diff))));
			self.center2 = (self.inner.offsetHeight - self.container.offsetHeight) / 2;
		}
		else {
	        self.inner.style.width = (self.innerWidth + 1) + 'px';
			var diff = self.inner.offsetWidth - self.container.offsetWidth;
			self.inner.style.left = -(Math.min(diff,Math.max(0,parseInt(Math.random()*diff))));
			self.center2 = (self.inner.offsetWidth - self.container.offsetWidth) / 2;
		}
		self.inner.onmousemove = function(event) {
			var ev = event || window.event;
			var d,d2,d4,d8;

			d  = (self.vertikal ? self.container.offsetHeight : self.container.offsetWidth);
			d2 = d/2;
			d4 = d/4;
			d8 = d/8;
			var lPos = self.getPosition(self.container);
			p = (self.vertikal ? ev.clientY - lPos.y : ev.clientX - lPos.x);
			m = d2;

			// von 3/8tel bis 5/8tel sind die Ruhezone!
			if (p > d2-d8 && p < d2+d8)
				self.toStep = 0;
			// von 2/8tel bis 3/8tel langsam/links
			else if (p > d4 && p <= d2-d8) {
				self.toDir = 1;
				self.toStep = 1;
			}
			// von 5/8tel bis 6/8tel langsam/rechts
			else if (p > d2+d8 && p <= d2+d4) {
				self.toDir = -1;
				self.toStep = 1;
			}
			else {
				self.toDir = (p < d2 ? 1 : -1);
				self.toStep = self.maxStep;
			}
		};
		self.container.onmouseout = function(event) {
			if (self.step != 1) {
				if (event && (event.relatedTarget == self.inner || (event.relatedTarget && event.relatedTarget.parentNode == self.inner)))
					return;
				self.toStep = 1;
			}
		};
		self.startFading();
		self.startMoving(self.toDir);
    };
	// ------------------------------------------------------------
	this.startFading = function() {
		var tmp, rand;
		for (var i = 0; i < this.images.length; i++) {
			rand = Math.floor(Math.random() * this.images.length);
			tmp = this.images[i]; 
			this.images[i] = this.images[rand]; 
			this.images[rand] = tmp;
		}
		this.fadeIn = 0;
		window.setTimeout(this.fade,this.fadeDelay1);
	};
	this.fade = function() {
		var img = self.images[self.fadeIn];
		var opacity = 0.0;
		self.setOpacity(img,opacity);
		img.style.visibility = 'visible';
		var thread = function() {
			var timg = img;
			self.setOpacity(timg,opacity);
			if (opacity < 100) {
				opacity += 0.2 ;
				window.setTimeout(thread,self.fadeDelay2);
			}
		};
		window.setTimeout(thread,100);
		
		self.fadeIn++ ;
		if (self.fadeIn < self.images.length)
			window.setTimeout(self.fade,self.fadeDelay1);
	};
	this.setOpacity = function(element,value) {
		if (self.isMSIE)
			element.style.filter = 'Alpha(opacity=' + Math.round(value * 100) + ')';
		else
			element.style.opacity = value;
	};

	// ------------------------------------------------------------
	this.startMoving = function(direction) {
		this.toDir = direction;
		this.move();
	};
	this.stopMoving  = function() {
		if (self.tRef) {
			window.clearTimeout(self.tRef);
			self.tRef = null;
		}
	};
	// ------------------------------------------------------------
	this.move = function() {
		if (self.vertikal) {
			var newtop = (self.inner.offsetTop + (self.dir * self.step));
	
			// nach unten
			if (self.center2 - Math.abs(newtop) > self.inner.lastChild.fullHeight) {
				var h = self.inner.lastChild.fullHeight;
				var last = self.inner.lastChild;
				var first = self.inner.firstChild;
				self.inner.insertBefore(last,first);
				newtop -= h;
			}
			// nach oben
			else if (Math.abs(newtop) - self.center2 > self.inner.firstChild.fullHeight) {
				var h = self.inner.firstChild.fullHeight;
				var last = self.inner.lastChild;
				var first = self.inner.firstChild;
				self.inner.appendChild(first);
				newtop += h;
			}
			self.inner.style.top = newtop;
		}
		else {
			var newleft = (self.inner.offsetLeft + (self.dir * self.step));
	
			// nach rechts
			if (self.center2 - Math.abs(newleft) > self.inner.lastChild.fullWidth) {
				var w = self.inner.lastChild.fullWidth;			
				var last = self.inner.lastChild;
				var first = self.inner.firstChild;
				self.inner.insertBefore(last,first);
				newleft -= w;
			}
			// nach links
			else if (Math.abs(newleft) - self.center2 > self.inner.firstChild.fullWidth) {
				var w = self.inner.firstChild.fullWidth;
				var last = self.inner.lastChild;
				var first = self.inner.firstChild;
				self.inner.appendChild(first);
				newleft += w;
			}
			self.inner.style.left = newleft;
		}
		// Richtungsaenderung?
		if (self.toDir != self.dir) {
			// Langsam?
			if (self.step <= 1) {
				self.dir = self.toDir;
				self.step = 1;
			}
			// Erst Geschwindigkeit drosseln!
			else
				self.step-- ;
		}
		else {
			if (self.toStep < self.step)
				self.step-- ;
			else if (self.toStep > self.step)
				self.step++ ;
		}
		self.tRef = window.setTimeout(self.move,self.delay);
	};
}
// ----------------------------------------------------------------------------------------------------
// END OF loop.js
// ----------------------------------------------------------------------------------------------------

