
/*

	Div Marquee for DOM browsers
	v 1.1
	By Anders Feldinger
	and@untitled.dk

	Usage:
	
	marquee('mainIdName','subClassName','axis',incs,pauseTime,intervalTime)
	
	Examples:
	
	marquee('marquee','mItem','x',3,1500,0)
	marquee('marqueeDiv','item','y',-1,3500,200)


*/



	
// Start function

	function marquee(oId,mNodeType,mNodeClass,axis,incs,pause,interval) {
		if (document.getElementById(oId)) {
			this.elm = document.getElementById(oId);
			this.nodes = new Array();
			this.axis = (!axis)? 'x' : axis;
			this.incs = (!incs)? 2 : incs;
			this.pause = (!pause)? 2500 : pause;
			this.interval = (!interval)? 200 : interval;
			this.active = true;
			this.userChange = 0;
			this.obj = oId.replace("-","_") + "Object";
			eval(this.obj + "=this");
			
			this.cNode = null;
			
			this.startNode = marqueeNode;
			this.moveNode = marqueeMotion;
			this.pauseNode = marqueePause;
			this.nextNode = marqueeNext;
			this.setAlpha = setAlpha;
			this.getAlpha = getAlpha;
			
			this.prev = marqueePrevNode;
			this.next = marqueeNextNode;
			this.changeNode = marqueeChangeNode;
			
			var tNodes = (mNodeType)? this.elm.getElementsByTagName(mNodeType) : this.elm.childNodes;
			if (mNodeClass) {
				for (var i=0; i<tNodes.length; i++) if (tNodes.item(i).className==mNodeClass) this.nodes[this.nodes.length] = tNodes.item(i);
			} else {
				this.nodes = tNodes;
			}
			
			//for (i=0; i<this.elm.childNodes.length; i++) if (this.elm.childNodes.item(i).className==mNodeClass) this.nodes[this.nodes.length] = this.elm.childNodes.item(i);
			
			var thisRef = this;
			this.elm.onmouseover = function() {thisRef.active = false};
			this.elm.onmouseout = function() {thisRef.active = true};
	
	//		alert(this.nodes.length);
			if (this.nodes.length>0) this.startNode(0);
		}
	}

// Initialises new marquee item

	function marqueeNode(mNode) {
		this.userChange = 0;
		this.mObj = this.nodes[mNode];
		this.cNode = mNode;

		if (this.axis=='x') this.mObj.style.left = (this.incs>0)? 0 - this.mObj.offsetWidth : this.mObj.parentNode.offsetWidth;
		if (this.axis=='y') this.mObj.style.top = (this.incs>0)? 0 - parseInt(this.mObj.offsetHeight) + "px" : parseInt(this.mObj.parentNode.offsetHeight) + "px";
		if (this.axis=='a') this.setAlpha(this.mObj,0);
		this.mObj.style.display = 'block';
		this.mObj.style.visibility = 'visible';
		this.moveNode(mNode);
	}
	
// Moves current marquee item
	
	function marqueeMotion(mNode) {
		if (this.active) {
			if (this.axis=='x') {
				cLoc = parseInt(this.mObj.offsetLeft);
				this.mObj.style.left = cLoc + this.incs + 'px';
				nLoc = parseInt(this.mObj.offsetLeft);
			}
			if (this.axis=='y') {
				cLoc = parseInt(this.mObj.offsetTop);
				this.mObj.style.top = cLoc + this.incs + 'px';
				nLoc = parseInt(this.mObj.offsetTop);
			}
			if (this.axis=='a') {
				cLoc = this.getAlpha(this.mObj);
				this.setAlpha(this.mObj,cLoc+this.incs);
				nLoc = this.getAlpha(this.mObj);
			}
				
			
			if (this.pauseNode(cLoc,nLoc)) {
				if (this.nodes.length>1) this.tPause = setTimeout(this.obj+'.moveNode('+mNode+')',this.pause);
			} else {
				if (!this.nextNode(nLoc)) this.tAnim = setTimeout(this.obj+'.moveNode('+mNode+')',20);
				else {
					var t = (this.userChange)? 20:this.interval;
					if (this.userChange<0) {
						var nNode = (mNode==0)? this.nodes.length-1:mNode-1;
					} else {
						var nNode = (mNode+1)%this.nodes.length;
					}
					if (this.axis=='a') this.mObj.style.display = 'none';
					this.tInterval = setTimeout(this.obj+'.startNode('+nNode+')',t);
				
				}
			}
		} else {
			setTimeout(this.obj+'.moveNode('+mNode+')',200);
		}	
	}
	
// Break if marquee node is in position
	
	function marqueePause(cLoc,nLoc) {
		doPause = false
		if (this.axis=='x' && this.incs>0 && cLoc<0 && nLoc>=0) doPause = true;
		if (this.axis=='x' && this.incs<0 && nLoc>=0 && nLoc+this.incs<0) doPause = true;
		if (this.axis=='y' && this.incs>0 && cLoc<0 && nLoc>=0) doPause = true;
		if (this.axis=='y' && this.incs<0 && nLoc>=0 && nLoc+this.incs<0) doPause = true;
		if (this.axis=='a' && this.incs>0 && nLoc>=100) {
			doPause = true;
			this.incs *= -1;
		}
		
		return doPause;
	}

// Check for new marquee node
	
	function marqueeNext(nLoc) {
		doNext = false;
		if (this.axis=='x' && this.incs>0 && nLoc>=parseInt(this.mObj.parentNode.offsetWidth)) doNext = true;
		if (this.axis=='x' && this.incs<0 && nLoc+parseInt(this.mObj.offsetWidth)<0) doNext = true;
		if (this.axis=='y' && this.incs>0 && nLoc>=parseInt(this.mObj.parentNode.offsetHeight)) doNext = true;
		if (this.axis=='y' && this.incs<0 && nLoc+parseInt(this.mObj.offsetHeight)<0) doNext = true;
		if (this.axis=='a' && this.incs<0 && nLoc<=0) {
			doNext = true;
			this.incs *= -1;
		}
		return doNext;
	}

// User interaction

	function marqueeNextNode() {
		this.changeNode(1);
	}
	function marqueePrevNode() {
		this.changeNode(-1);
	}
	function marqueeChangeNode(n) {	
		clearTimeout(this.tAnim);
		clearTimeout(this.tPause);
		clearTimeout(this.tInterval);
		this.userChange = n;
		this.moveNode(this.cNode);
	}

// Helper functions

	function setAlpha(o,n) {
		o.style.opacity = n/100;
		o.style.mozOpacity = n/100;
		o.style.filter = "alpha(opacity="+n+");-moz-opacity:."+n+";opacity:."+n;
		//filter:alpha(opacity=25);-moz-opacity:.25;opacity:.25;
	}
	function getAlpha(o) {
		return (o.style.opacity*100);
	}