(function($) {
	$.fn.ImgEffect = function(options) {
		var defaults = {
			'top_left_opacity_speed' : [15, 250, 0.5, 500],
			'next_prev' : true,
			'auto_scroll' : [true, 2000]
		};
		return this.each(function() {
			if(options) $.extend(defaults, options);
			var auto_scroll = defaults['auto_scroll'];
			var top_left_opacity_speed = defaults['top_left_opacity_speed'];
			var top = top_left_opacity_speed[0];
			var left = top_left_opacity_speed[1];
			var opacity = top_left_opacity_speed[2];
			var speed = top_left_opacity_speed[3];
			var next_prev = defaults['next_prev'];
			if(next_prev == false) $('.next, .prev').css({'display':'none'});
			var current_obj = $(this);
			var i_count = $(current_obj).children('a').length - 1;
			function img_rotate($target) {
				$z_index = $target == 'prev' ? '+1' : '0' ;
				$v =  $target == 'prev' ? 1 : 0 ;
				if($target == 'prev'){
					if(i_count == ($(current_obj).children('a').length - 1)) {
					i_count = -1;
					$(current_obj).children('a').css({'z-index':'0'});
					}
				}
				$(current_obj).children('a').eq(i_count + $v).animate({ top: top, left : left, opacity : opacity }, speed);
				$(current_obj).children('a').eq(i_count + $v).queue(function() {
					$(this).css({'z-index':$z_index});
					$(this).dequeue();
				});
				$(current_obj).children('a').eq(i_count + $v).animate({ left : 0, top : 0, opacity : 1 }, speed-(speed/2));
				if($target != 'prev') {
					if(i_count < 0) {
						i_count = $(current_obj).children('a').length - 1;
						$(current_obj).children('a').css({'z-index':'+1'});
					}
				}
				$target == 'prev' ? i_count++ : i_count-- ;
			}
			function intervalID() {
				$timeout = setInterval(function() {
					img_rotate();
				}, auto_scroll[1]);
			}
			if(auto_scroll[0] == true) intervalID();
			$(current_obj).children('.key').click(function() {
				$target = $(this).attr('class').split(' ')[1];
				if(auto_scroll[0] == true) clearInterval($timeout);
				img_rotate($target);
				if(auto_scroll[0] == true) intervalID();
			});
		});
	};
})(jQuery);
