function fade(eElement, nStart, nEnd, nDuration, fCallback) {	

	this.nOffset = 8;
	this.nOpacity = nStart;
	this.nStart = nStart;	
	this.nEnd = nEnd;		
	this.nDuration = nDuration;
	this.fCallback = fCallback;
	this.e = eElement;
	this.nInterval = 0;
	this.bFading = false;
}

fade.prototype.fadeCycle = function() {

	if (this.nEnd < this.nStart) {	
		if (this.nOpacity > this.nEnd) {	
			this.nOpacity -= this.nOffset;	
		} else {
			this.finalize();
		}
	} else {
		if (this.nOpacity < this.nEnd) {	
			this.nOpacity += this.nOffset;	
		} else {
			this.finalize();
		}	
	}
	
	this.setOpacity(this.nOpacity/100);	
	
}

fade.prototype.setOpacity = function(nOp) {	
	this.e.style.opacity = nOp;
	this.e.style.filter = "alpha(opacity=" + (nOp*100) + ")";
}

fade.prototype.finalize = function() {
	this.nOpacity = this.nEnd;
	this.bFading = false;
	clearInterval(this.nInterval);	
	if (this.fCallback) { this.fCallback(); }
}

fade.prototype.isFading = function() {
	return (this.bFading == true) ? true : false;
}

fade.prototype.start = function() {
	var oSelf = this;
	this.bFading = true;
	this.nInterval = setInterval(function() { oSelf.fadeCycle(); }, (this.nDuration / this.nOffset));	
}

fade.prototype.stop = function() {
	this.bFading = false;
	clearInterval(this.nInterval);
}


