$(function(){
	var ImageBouncer = function(opts){
		var obj      = this;
		var defaults = {};	
		defaults.transition_buffer = "";
		defaults.source_selector  = undefined;
		defaults.image_extension  = 'png';
		defaults.effect_time = 1000;
		defaults.bounce_wrapper = '#framework';
		// interval id defined by setinterval
		this.interval_id = undefined;
		// shown index
		this.shown_index = 0;
		// reproduction stopped by default
		this.status      = false;
		// wether there's a transaction going on
		this.in_transact = false;
		
		// merge options with defaults
		this.opts = $.extend({}, defaults, opts);

		if(typeof this.opts.source_selector == 'undefined'){
			return false;
		}
		
		$(this.opts.source_selector).each(function(){
			if($(this).length == 0 || $(this).get(0).tagName != 'IMG') return false;
			
			var img = $($(this).get(0));
			
			var path      = img.attr('src');			
			var path_base = path.substring(0, path.indexOf('.' + obj.opts.image_extension));
			var path_zoom = path_base + '_zoom.' + obj.opts.image_extension;			

			$(this).hover(
				function(e){	
					$('#image_bounced').remove();	
					var img = $(document.createElement('img'));
					img.attr('src', path_zoom);			
					img.attr('id', 'image_bounced');
					img.hide();		
					if(obj.opts.transition_buffer.length == 0){
						obj.opts.transition_buffer = $(obj.opts.bounce_wrapper).html();
					}
					$(obj.opts.bounce_wrapper).html(img);
					img.fadeIn(obj.opts.effect_time);
				},
				function(e){
					$('#partners').mouseleave(function(){
						$(obj.opts.bounce_wrapper).html(obj.opts.transition_buffer);
					});
				}
			);	

			return true;
		});
		
		return true;
	}
	
	// extends jquery
	$.extend({
		image_bouncer: function(opts){
			var image_bouncer = new ImageBouncer(opts);
		}
	});
});
