function ImageFader(target_div, options){
				
	var defaults = {
		fade_speed: "slow",
		fade_in_speed: false,
		fade_out_speed: false,
		animation_type: "fade",
		pause_time: 3000,
		type: "sequential",
		delay_animation:false
	};
	
	this.opts = $j.extend(defaults,options);
	
	this.opts.fade_in_speed = (!this.opts.fade_in_speed) ? this.opts.fade_speed : this.opts.fade_in_speed;
	this.opts.fade_out_speed = (!this.opts.fade_out_speed) ? this.opts.fade_speed : this.opts.fade_out_speed;
	
	this.target_div = target_div;
	this.current = 0;
	this.next = 1;
	this.children = $j("#" + this.target_div).children();
	var self = this;
	
	// tried to wrap this in a function, but 
	// js wasn't having anything to do with it
	// had to set up first nums long hand
	if (this.opts.type == "sequential"){
		this.current = 0;
		this.next = 1;
	}
	else if (this.opts.type == "random"){
		this.current = Math.floor(Math.random() * this.children.length);
		do {
			this.next = Math.floor(Math.random() * (this.children.length)); // get random next number
		}
		while (this.current == this.next);
	}
	else if (this.opts.type == "random_start"){
		this.opts.type = "sequential"; // reset type to cycle through sequentially
		this.current = Math.floor(Math.random() * this.children.length);
		this.next = this.current + 1;
		if (this.next == this.children.length){
			this.next = 0;
		}
	}
	
	// set display none just in case not done in css
	for (var i = 0; i < this.children.length; ++i){
		$j(this.children[i]).css("display","none");
	}
	
	// turn on the first item
	$j(this.children[this.current]).show();
	
	this.runFader = function(){
		var type = self.opts.animation_type;
		if (type == "fade"){
			$j(self.children[self.current]).fadeOut(self.opts.fade_speed, function(){ $j(self.children[self.next]).fadeIn(self.opts.fade_speed); self.calcNextNumbers(); });
		}
		else if (type == "no_trans"){
			$j(self.children[self.current]).hide();
			$j(self.children[self.next]).show();
			self.calcNextNumbers();
		}
		else if (type == "shutter"){
			$j(self.children[self.current]).slideUp(self.opts.fade_speed, function(){ $j(self.children[self.next]).slideDown(self.opts.fade_speed); self.calcNextNumbers(); });
		}
	};
	
	// run animation
	if (this.children.length > 1){ // must have at least two things to fade between
		
		if (this.opts.delay_animation){
			setTimeout(function(){
				setInterval(this.runFader,this.opts.pause_time);
			}, self.opts.delay_animation);
		}
		else {
			setInterval(this.runFader,this.opts.pause_time);
		}
	}
	
	this.calcNextNumbers = function(){
		if (this.opts.type == "sequential"){
			this.current = this.next;
			this.next++;
			if (this.next == this.children.length){
				this.next = 0;
			}
		}
		else if (this.opts.type == "random"){
			this.current = this.next;
			do {
				this.next = Math.floor(Math.random() * (this.children.length)); // get random next number
			}
			while (this.current == this.next);
		}
	};
}