function fader(obj, src_opacity, step, pause) {
	this.parent = obj;
	this.timeout = false;
	this.set_opacity = set_opacity;
	this.get_opacity = get_opacity;
	this.fade = fade;
	this.fade_in = fade_in;
	this.fade_out = fade_out;
	this.fade_to = fade_to;
	this.step = step;
	this.pause = pause;
	this.src_opacity = src_opacity;
	this.set_opacity(src_opacity);
	this.opacity = this.dest_opacity = this.get_opacity();
	set_style_value(this.parent.obj_id, 'display', 'inline');
}

function set_opacity(opacity) {
	this.opacity = (opacity == 100)?99.999:opacity;
	this.parent.obj.style.filter = "alpha(opacity:" + opacity + ")";
	this.parent.obj.style.KHTMLOpacity = opacity/100;
	this.parent.obj.style.MozOpacity = opacity/100;
	this.parent.obj.style.opacity = opacity/100;
}
function get_opacity() {
    if(this.parent.obj.style.filter) this.opacity = this.parent.obj.style.filter.substring(14).substring(0, -1);
    if(this.parent.obj.style.KHTMLOpacity ) this.opacity = this.parent.obj.style.KHTMLOpacity*100;
    if(this.parent.obj.style.MozOpacity) this.opacity = this.parent.obj.style.MozOpacity*100;
    if(this.parent.obj.style.opacity) this.opacity = this.parent.obj.style.opacity*100;
    if(!this.opacity) this.opacity = 0;
	return this.opacity;
}

function fade() {
    var step, diff, self;
    diff = Math.abs(this.opacity - this.dest_opacity);
    if(diff>=1) {
		step = (diff > this.step) ? this.step : diff;
		if (!wait) {
			this.opacity += (this.dest_opacity > this.opacity) ? step : -step;
			this.set_opacity(this.opacity);
		}
		self = this;
		if (!this.timeout) {
			this.timeout = setInterval(
				function() {
					self.fade();
				}, this.pause
			);
		}
		return true;
    }
	window.clearInterval(this.timeout);
    this.timeout = false;
	return false;
}

function fade_out() {
	this.dest_opacity = 0;
	return(this.fade());
}
function fade_in() {
	this.dest_opacity = 100;
	this.fade();
}
function fade_to(x){
	this.dest_opacity = x;
	this.fade();
}