(function($){
	$.fn.extend({
		IMGToggle:function(options){
			var _default={
				time:5000,
				image:{},
				width:"200px",
				height:"100px"
			};
			var obj=$(this).css({position:"relative", top:0, left:0}).html(""), opt=$.extend({}, _default, options), count=0, _timeout=null;
			var obj_body = $("<div/>").addClass("imgtoogle-body").appendTo(obj);
			var obj_toolbar = $("<div/>").addClass("imgtoogle-toolbar").append('<div class="imgtoogle-toolbar-l"></div><div class="imgtoogle-toolbar-r"></div>').appendTo(obj).hide();
			var toggle=function(i){
				if (_timeout) clearTimeout(_timeout);
				switch(i){
					case 1:
						var o1=$(".imgtoogle-body > div:eq(0)", obj), o2=$(".imgtoogle-body > div:eq(1)", obj);
						o1.fadeOut(1000).appendTo(obj_body);
						o2.fadeIn(1000);
						break;
					case -1:
						var o1=$(".imgtoogle-body > div:eq(0)", obj), o2=$(".imgtoogle-body > div::last-child", obj);
						o1.fadeOut(1000);
						o2.prependTo(obj_body).fadeIn(1000);
						break;
				}
				_timeout = setTimeout(function(){toggle(1);}, opt.time);
			}
			$(".imgtoogle-toolbar-l", obj_toolbar).click(function(){
				toggle(-1);
			});
			$(".imgtoogle-toolbar-r", obj_toolbar).click(function(){
				toggle(1);
			});
			$.each(opt.image, function(i, j){
				count+=1;
				var err = 0;
				var o=$("<div/>").css({position:"absolute", top:0, left:0, "width":j.width || opt.width, "height":j.height || opt.height, overflow:"hidden"});
				var o_loading = $("<div/>").addClass("imgtoggle-loading").css({"width":j.width || opt.width, "height":j.height || opt.height});
				o.append(o_loading);
				try{
					var img=$("<img/>").load(function(){
						o_loading.remove();
						$(this).show();
					}).error(function(){
						if (err < 3) setTimeout(function(){ img.attr("src",img.attr("src")); }, 2000);
						err++;
					}).css({"width":j.width || opt.width, "height":j.height || opt.height, "display":"none"}).attr({"src":j.src, "alt":j.alt || "", "border":0});
					if (typeof(j.href)!="undefined"){
						$("<a/>").attr({"href":j.href || "", "target":j.target || ""}).append(img);
					}
					if (count>1) $(o).hide();
					$(o).append(img).appendTo(obj_body);
				} catch(e){}
			});
			if (count>1){
				_timeout = setTimeout(function(){toggle(1);}, opt.time);
				obj_toolbar.show();
			}
		}
	});
})(jQuery);
