function Fader(container, page_cover, collection, options){
	var settings = jQuery.extend({
			start: 0,
			automate: true,
			'z-index': 4,
			loop: true,
			interval: 5000,
			handles: false,
			fade_out_dur: 2500,
			fade_in_dur: 1500,
			img_path: '/sites/troypark/themes/troypark_custom/images',
			onFadeComplete: function(pane_in, pane_out){},
			onFadeeStart: function(pane_in, pane_out){},
			onHandleClick: function(event, index){}
		}, options),
		img_count = collection.length,
		win = jQuery(window);

	container.css('background-image', 'url('+ settings.img_path + collection[0] +')');

	var fader_obj = {
		current: 0,
		previous: 0,
		$timer: false,
		collection: collection,
		container: container,
        page_cover: page_cover,
		
		goTo: function(index){
			if(index != this.current){
				this.stopInterval();

				if(settings.loop){
					index = index < 0 
						? img_count - 1
						: index <= img_count - 1
							? index
							: 0;
				}

				var self = this,
					next_img = settings.img_path + this.collection[index];
				
				settings.onFadeStart.apply(this, [index, this.current]);
				
				this.page_cover.animate({
					opacity: .95
				}, settings.fade_out_dur, function(){
					self.container.css('background-image', 'url('+ next_img +')');
                    self.page_cover.animate({
							opacity: 0
						}, settings.fade_in_dur, function(){
							settings.onFadeComplete.apply(self, [index, self.current]);
							self.startInterval();	
						});
				});
				
				this.previous = this.current;
				this.current = index;
			}
			
			return this;
		},
		
		startInterval: function(){
			var self = this;
			
			this.$timer = setTimeout(function(){
				self.goTo(self.$next());
			}, settings.interval);
			
			return this;
		},
		 		
		stopInterval: function(){
			this.$timer = clearTimeout(this.$timer);
			
			return this;
		},
		$next: function(){
		
			return Math.max(0, Math.min(this.current + 1, img_count));
		},
		
		$prev: function(){
			return  Math.max(0, Math.min(this.current - 1, img_count));
		}
	};
	
	if(settings.handles){
		jQuery.each(settings.handles, function(i, handle){
			jQuery(handle).bind('click', function(e){
				fader_obj.stopInterval();
				fader_obj.goTo.apply(fader_obj, [i]);
				settings.onHandleClick.apply(fader_obj, [e, i]);
			});
		});
	}
	
	if(settings.automate){
		fader_obj.startInterval();
	}
	
	return fader_obj.goTo(settings.start);
}
