Fader = function(o, s, e, i){
	this.o = document.getElementById(o);
	if (this.o){
		if (s < e){
			this.oS = parseInt(s); // object start
			this.oE = parseInt(e); // object end			
		}else{
			this.oS = parseInt(e); // object start
			this.oE = parseInt(s); // object end
		}
		this.i = parseInt(i);  // object interval
		this.oC = s;     // object current level
		this.oT = null;		   // object timer
		this.state = 0;
		this.setOpacity();
		this.onfinish = null;
		this.onstart = null;
		this.onload = null;
	}
}

Fader.prototype = {
	
	setOpacity : function(){
		/*
		setStyle(this.o, {
							opacity:this.oC/100,
							MozOpacity:this.oC/100,
							KhtmlOpacity:this.oC/100,
							filter:'alpha(opacity=' + this.oC + ')'
						  });
						  */
		this.o.style.opacity = this.oC / 100;
		this.o.style.MozOpacity = this.oC / 100;
		this.o.style.KhtmlOpacity = this.oC / 100;
		this.o.style.filter = 'alpha(opacity=' + this.oC + ')';
	},
	
	fadeIn : function(){
		window.clearInterval(this.oT);
		this.state = 1;
		if (this.onstart){
			this.onstart();
		}
		this.doFadeIn();
	},
	
	doFadeIn : function(){
		if (this.oC < this.oE){
			this.oC += this.i;
			this.setOpacity();
			this.oT = window.setTimeout(bind(this, this.doFadeIn), 15);
		}
	},
	
	unFadeIn : function(){
		this.state = 1;
		this.oC = this.oE;
		this.setOpacity();
	},
	
	fadeOut : function(){
		window.clearInterval(this.oT);
		this.state = 0;
		this.doFadeOut();
	},
	
	doFadeOut : function(){
		if (this.oC > this.oS){
			this.oC -= this.i;
			this.setOpacity();
			this.oT = window.setTimeout(bind(this, this.fadeOut), 15);
		}else{
			if (this.onfinish){
				this.onfinish();
			}
		}
	},
	
	unFadeOut : function(){
		this.state = 0;
		this.oC = this.oS;
		this.setOpacity();
	},
	
	fadeToggle : function(){
		if (this.state){
			this.fadeOut();
		}else{
			this.fadeIn();
		}
	}
	
}

 function setStyle(o, p){
    for (var i in p){
	   o.style[i] = p[i];
	}		
 }