
/*
Animation Object
v 1.4 Feb 2006
*/

oMTLib.animation = function(sID){
	
	this.nDelay = 20;
	
	this.initialise	= function(sID){
		this.sID 		= sID;
		this.dom.sID	= sID;
		this.obj 		= this.dom.obj = document.getElementById(sID);
		if(typeof document.aMTLibAnimations == "undefined") document.aMTLibAnimations = [];
		document.aMTLibAnimations[this.sID] = this;
		return this;
	};
	
	this.fade = function(nTime, bIn, nFinalOpacity){
		if(!nFinalOpacity) nFinalOpacity = 100;
		if(!bIn) bIn = 0;
		clearTimeout(this.oFadeTimer)
		if(typeof this.nOpacity == "undefined") this.nOpacity = 95;
		if(bIn && (this.nOpacity == 95 || this.nOpacity == nFinalOpacity)){
			if(this.onfadeend) this.onfadeend();
			return;
		};
		if(!bIn && (this.nOpacity == 5 || this.nOpacity == nFinalOpacity)){
			if(this.onfadeend) this.onfadeend();
			return;
		};
		this.nOpacity += (bIn)?10:-10;
		this.dom.setOpacity(this.nOpacity);
		this.oFadeTimer = window.setTimeout("document.aMTLibAnimations['" + this.sID + "'].fade(" + nTime + ", " + bIn + ", " + nFinalOpacity + ")", nTime/10);
	};
	
	this.highlightFade = function(nTime, sStyle, aFadeColours){
		clearTimeout(this["oHighlightFadeTimer" + sStyle]);
		if(aFadeColours){
			this["aFadeColours" + sStyle] = aFadeColours;
			this["nFadeColourInc" + sStyle] = 0;
		};
		if(typeof this["nFadeColourInc" + sStyle] == "undefined") this["nFadeColourInc" + sStyle] = 0;
		this.obj.style[sStyle] = "#" + this["aFadeColours" + sStyle][this["nFadeColourInc" + sStyle]];
		if(this["nFadeColourInc" + sStyle] >= this["aFadeColours" + sStyle].length - 1){
			return;
		};
		this["nFadeColourInc" + sStyle] ++;
		this["oHighlightFadeTimer" + sStyle] = window.setTimeout("document.aMTLibAnimations['" + this.sID + "'].highlightFade(" + nTime + ", '" + sStyle + "')", nTime/this["aFadeColours" + sStyle].length);
	};
	
	this.slide = function(nX, nY, nTime){
		clearInterval(this.oSlideTimer);
		this.nSlideFinalX = parseInt(nX); this.nSlideFinalY = parseInt(nY);
		this.nSlideX	= parseInt(this.dom.getComputedStyle("left"));
		this.nSlideY 	= parseInt(this.dom.getComputedStyle("top"));
		this.nSteps 	= nTime/this.nDelay;
		this.nStepX		= (this.nSlideFinalX - this.nSlideX) / this.nSteps;
		this.nStepY		= (this.nSlideFinalY - this.nSlideY) / this.nSteps;
		this.oSlideTimer = window.setInterval("document.aMTLibAnimations['" + this.sID + "'].__slideStep()", this.nDelay);
	};
		this.__slideStep = function(){
			if(!this.nSteps --){
				this.obj.style.left	= this.nSlideFinalX + "px";
				this.obj.style.top 	= this.nSlideFinalY + "px";
				clearInterval(this.oSlideTimer);
				if(this.onslideend) this.onslideend();
				return;
			};
			this.obj.style.left	= (this.nSlideX += this.nStepX) + "px";
			this.obj.style.top 	= (this.nSlideY += this.nStepY) + "px";
		};
	
	this.collapse = function(nTime, bVertical, bHorizontal){
		this.overflow 	= this.dom.getComputedStyle("overflow");
		this.obj.style.overflow = "hidden";
		this.resize(nTime, (bHorizontal) ? 0 : this.obj.offsetWidth, (bVertical) ? 0 : this.obj.offsetHeight);
	};
	this.expand = function(nTime, bVertical, bHorizontal){
		this.resize(nTime, this.nWidthStart, this.nHeightStart);
	};
		
	this.resize = function(nTime, nWidth, nHeight){
		clearInterval(this.oResizeTimer);
		this.nWidthFinal 	= nWidth;
		this.nHeightFinal 	= nHeight;
		this.nWidth			= this.nWidthStart 	= this.obj.offsetWidth;
		this.nHeight		= this.nHeightStart = this.obj.offsetHeight;
		this.nSteps 		= parseInt(nTime/20);
		this.nStepX			= (nWidth - this.nWidth) / this.nSteps;
		this.nStepY			= (nHeight - this.nHeight) / this.nSteps;
		if(!document.all){
			this.nHeightStart 	= parseInt(this.dom.getComputedStyle("height"));
			this.nWidthStart 	= parseInt(this.dom.getComputedStyle("width"));
		};
		this.obj.style.width 	= this.nWidth + "px";
		this.obj.style.height 	= this.nHeight + "px";
		if(this.onresizestart) 	this.onresizestart();
		this.oResizeTimer = window.setInterval("document.aMTLibAnimations['" + this.sID + "'].__resizeStep()", this.nDelay);
	};
		this.__resizeStep = function(){
			if(!this.nSteps --){
				clearInterval(this.oResizeTimer);
				this.nWidth 	= this.nWidthFinal;this.obj.style.width = this.nWidth;
				this.nHeight 	= this.nHeightFinal;this.obj.style.height = this.nHeight;
				if(this.overflow && (this.nStepX > 0 || this.nStepY > 0)) this.obj.style.overflow = this.overflow;
				if(this.onresizeend) this.onresizeend();
				return 
			};
			this.obj.style.width 	= Math.abs(parseInt(this.nWidth  += this.nStepX)) + "px";
			this.obj.style.height 	= Math.abs(parseInt(this.nHeight += this.nStepY)) + "px";
		};
	
	this.dom = {
		setOpacity : function(nOpacity){
			this.obj.style.filter 		= "alpha(opacity=" + nOpacity + ")";
			this.obj.style.opacity 		= nOpacity/100;
			this.obj.style.visibility 	= (!nOpacity) ? "hidden" : "visible";
		},
		toggle	: function(){
			this.obj.style.display = (this.getComputedStyle("display") == "none") ? "" : "none";
		},
		getComputedStyle : function(sProperty){			
			if(document.defaultView){
				return document.defaultView.getComputedStyle(this.obj, null).getPropertyValue(sProperty);
			}else if(this.obj.currentStyle){
				var sProperty = sProperty.replace(/-\D/gi, function(sMatch){
					return sMatch.charAt(sMatch.length - 1).toUpperCase();
				});
				return this.obj.currentStyle[sProperty];
			};
			return null;
		}
	};
	
	return this.initialise(sID);

};
