$(function(){

	//フェード用関数
	function ImgOvAnimeFade(){

		var OvClass = "rolloverFade", //ロールオーバーする要素のクラス名
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		//classがrolloverのimg要素に対しての処理
		$("img."+OvClass).each(function(){

			var This = $(this),
			Url = This.attr("src").replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return This.prev("img."+OvImg).length;
			}
			
			//ホバーイベント
			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({position:"relative"}).before("<img style='position:absolute;' class='"+OvImg+"' src='"+Url+"' alt=''  border='' />");
					}
					This.stop().animate({opacity:"0"},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					This.stop().animate({opacity:"1"},Speed,function(){
						This.css({position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",Url);
			});

		});

	}

	//スライドトップ用関数
	function ImgOvAnimeSlideTop(){

		var OvClass = "rolloverSlideTop",
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvRrap = "ovRrap",
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		$("img."+OvClass).each(function(){ //classがrolloverのimg要素に対しての処理

			var This = $(this),
			UrlDef = This.attr("src"),
			UrlChange = UrlDef.replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElm(){
				return This.prev("span."+OvImg);
			}
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return OvElm().length;
			}
			function Width(){
				return This.width()+"px";
			}
			function Height(){
				return This.height()+"px";
			}

			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({opacity:"0",position:"relative"})
						.before("<img style='position:absolute;' class='"+OvImg+"' src='"+UrlDef+"' alt='' />")
						.before("<span style='width:"+Width()+";height:0;background-image:url("+UrlChange+");position:absolute;' class='"+OvImg+"'></span>");
					}
					OvElm().stop().animate({height:Height()},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					OvElm().stop().animate({height:"0"},Speed,function(){
						This.css({opacity:"1",position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",UrlChange);
			});

		});

	}

	//スライドレフト用関数
	function ImgOvAnimeSlideLeft(){

		var OvClass = "rolloverSlideLeft",
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvRrap = "ovRrap",
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		$("img."+OvClass).each(function(){ //classがrolloverのimg要素に対しての処理

			var This = $(this),
			UrlDef = This.attr("src"),
			UrlChange = UrlDef.replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElm(){
				return This.prev("span."+OvImg);
			}
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return OvElm().length;
			}
			function Width(){
				return This.width()+"px";
			}
			function Height(){
				return This.height()+"px";
			}

			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({opacity:"0",position:"relative"})
						.before("<img style='position:absolute;' class='"+OvImg+"' src='"+UrlDef+"' alt='' />")
						.before("<span style='display:inline;width:0;height:"+Height()+";background-image:url("+UrlChange+");position:absolute;' class='"+OvImg+"'></span>");
					}
					OvElm().stop().animate({width:Width()},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					OvElm().stop().animate({width:"0"},Speed,function(){
						This.css({opacity:"1",position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",UrlChange);
			});

		});

	}

	//フェード＆スライドトップ用関数
	function ImgOvAnimeFadeSlideTop(){

		var OvClass = "rolloverFadeSlideTop",
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvRrap = "ovRrap",
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		$("img."+OvClass).each(function(){ //classがrolloverのimg要素に対しての処理

			var This = $(this),
			UrlDef = This.attr("src"),
			UrlChange = UrlDef.replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElm(){
				return This.prev("span."+OvImg);
			}
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return OvElm().length;
			}
			function Width(){
				return This.width()+"px";
			}
			function Height(){
				return This.height()+"px";
			}

			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({opacity:"0",position:"relative"})
						.before("<img style='position:absolute;' class='"+OvImg+"' src='"+UrlDef+"' alt='' />")
						.before("<span style='display:inline;width:"+Width()+";height:0;background-image:url("+UrlChange+");position:absolute;' class='"+OvImg+"'></span>");
						OvElm().css({opacity:"0"});
					}
					OvElm().stop().animate({height:Height(),opacity:"1"},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					OvElm().stop().animate({height:"0",opacity:"0"},Speed,function(){
						This.css({opacity:"1",position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",UrlChange);
			});

		});

	}

	//スライドトップ2用関数
	function ImgOvAnimeSlideTop2(){

		var OvClass = "rolloverSlideTop2",
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvRrap = "ovRrap",
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		$("img."+OvClass).each(function(){ //classがrolloverのimg要素に対しての処理

			var This = $(this),
			UrlDef = This.attr("src"),
			UrlChange = UrlDef.replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElm(){
				return This.prev("span."+OvImg);
			}
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return OvElm().length;
			}
			function Width(){
				return This.width()+"px";
			}
			function Height(){
				return This.height()+"px";
			}

			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({opacity:"0",position:"relative"})
						.before("<span style='display:inline;width:"+Width()+";height:"+Height()+";background-image:url("+UrlDef+");position:absolute;' class='"+OvImg+"'></span>")
						.before("<span style='display:inline;width:"+Width()+";height:0;background-image:url("+UrlChange+");position:absolute;' class='"+OvImg+"'></span>");
					}
					OvElm().stop().animate({height:Height()},Speed)
					.prev("span."+OvImg).stop().animate({height:"0"},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					OvElm().stop().animate({height:"0"},Speed)
					.prev("span."+OvImg).stop().animate({height:Height()},Speed,function(){
						This.css({opacity:"1",position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",UrlChange);
			});

		});

	}
	
	//フェード拡大縮小用関数
	function ImgOvAnimeFadeSizing(){

		var OvClass = "rolloverFadeSizing",
		OvStr = "_ov", //ロールオーバー後の画像に追加する文字列
		OvRrap = "ovRrap",
		OvImg = "ovImg",
		Speed = 500; //アニメーションの速度

		$("img."+OvClass).each(function(){ //classがrolloverのimg要素に対しての処理

			var This = $(this),
			UrlDef = This.attr("src"),
			UrlChange = UrlDef.replace(/^(.+)(\.[a-z]+)$/,"$1"+OvStr+"$2");
			
			function OvElm(){
				return This.prev("span."+OvImg);
			}
			function OvElmLen(){ //ロールオーバー画像表示確認関数
				return OvElm().length;
			}
			function Width(){
				return This.width()+"px";
			}
			function Height(){
				return This.height()+"px";
			}

			This.hover(
			function(){
				if(!This.attr("src").match(OvStr+".")){
					if(!OvElmLen()){
						if(jQuery.support.checkOn && jQuery.support.htmlSerialize && !window.globalStorage){ //Operaバグ対策
							This.before("<span style='display:inline-block;' class='"+OvImg+"' ></span>");
						}
						This.css({opacity:"0",position:"relative"})
						.before("<span style='display:inline;width:"+Width()+";height:"+Height()+";background-image:url("+UrlDef+");position:absolute;' class='"+OvImg+"'></span>")
						.before("<span style='display:inline;width:0;height:0;background-image:url("+UrlChange+");position:absolute;' class='"+OvImg+"'></span>");
						OvElm().css({opacity:"0"});
					}
					OvElm().stop().animate({width:Width(),height:Height(),opacity:"1"},Speed)
					.prev("span."+OvImg).stop().animate({width:"0",height:"0",opacity:"0"},Speed);
				}
			},
			function(){
				if(OvElmLen()){
					OvElm().stop().animate({width:"0",height:"0",opacity:"0"},Speed)
					.prev("span."+OvImg).stop().animate({width:Width(),height:Height(),opacity:"1"},Speed,function(){
						This.css({opacity:"1",position:"static"})
						.prevAll("."+OvImg).remove();
					});
				}
			})
			.each(function(){ //プリロード設定
				$("<img>").attr("src",UrlChange);
			});

		});

	}

	//アニメーションロールオーバー関数実行
	ImgOvAnimeFade();
	ImgOvAnimeSlideTop();
	ImgOvAnimeSlideLeft();
	ImgOvAnimeFadeSlideTop();
	ImgOvAnimeSlideTop2();
	ImgOvAnimeFadeSizing();

});
