// ----------------------------------------------------------------------------------------------------
// Combo - das clevere CMS!
// Copyright (c) 1999-2006 by Marcus Ollas, Germany
// All Rights Reserved
// ----------------------------------------------------------------------------------------------------
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*/);
		}
	}
};
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------