(function($){
	$.fn.ImageSwitch = function(Arguements, FuntionHandle) {
		var defaults = {Type: "FadeIn",	NewImage: "", EffectOriginal: true, Speed: 1000, StartLeft: 50, StartTop: 0, StartOpacity: 0, EndLeft: -50, EndTop: 0, EndOpacity: 0, Direction: "RightLeft", Door1: "", Door2: ""};
		var Args = $.extend(defaults, Arguements);
		var Obj = this;
		var EffectID = 0;
		var EffectImageId, EffectDivId1, EffectDivId2;
		
		var EndFunction = function(){Obj.data("imageswitch", -1);};
		if($.isFunction(FuntionHandle)){
			EndFunction = function(){
				FuntionHandle();
				Obj.data("imageswitch", -1);
			};
		}
		var FadeImage = function(){
			Obj.parent().append("<img class='GrpEffectImg' id='"+EffectImageId.replace("#","")+"'/>");
			$(EffectImageId).attr("src", Obj.attr("src"));
			$(EffectImageId).css("position", "absolute");
			$(EffectImageId).css("top", Obj.position().top);
			$(EffectImageId).css("left", Obj.position().left);
			$(EffectImageId).css("opacity", 1);

			Obj.attr("src", Args.NewImage);

			if(Args.EffectOriginal)
			{
				Obj.css("opacity", Args.StartOpacity);
				Obj.animate({"opacity":1}, Args.Speed);
			}


			$(EffectImageId).animate({"opacity":0}, Args.Speed, function(){
					$(EffectImageId).remove();
					EndFunction();
			});
		};
		return this.each(function(){
			Obj = $(this);		
			if(!Obj.ImageAnimating())
			{
				EffectID = $.data(Obj);
				Obj.data("imageswitch", EffectID);
				EffectImageId = "#GrpEffectImg-" + EffectID;
				EffectDivId1 = "#GrpEffectDiv1-" + EffectID;
				EffectDivId2 = "#GrpEffectDiv2-" + EffectID;
				
				var TempImg = new Image();
				TempImg.src = Args.NewImage;
				$.ImagePreload(Args.NewImage,function(){FadeImage();});
			}
		});
	};
})(jQuery);
(function($){
	$.fn.ImageAnimating = function(){
		if(this.data("imageswitch")>0){
			return true;
		}else{
			return false;
		}
	};
})(jQuery);
(function($){
	$.ImagePreload = function(FileName, EndFunction){
		var TempImage = new Image();
		TempImage.src = FileName;
		if($.isFunction(EndFunction)){
			$(TempImage).load(EndFunction());
		}
	};
})(jQuery);
