/*
 * common クラス
 *
 * このクラスを使用する場合は、先に jQuery.js（ver 1.2.X 以上） を読み込む必要があります。
 *
 * jQuery：     http://jquery.com/
 *
 * @author      Hiroaki Wakamatsu
 * @copyright  ZYYX Inc. <http://www.zyyx.jp/>
 * @version     1.0
 *
 */

/**
 * 表示ブラウザがIE6か検証する
 */
var isIE6 = false;
if (navigator.userAgent.match(/MSIE (\d\.\d+)/)) {
	if (RegExp.$1 == "6.0") isIE6 = true;
}

/* jQuery に animate 時のイージング処理を追加 */
jQuery.easing.quart = function (x, t, b, c, d) {
	return -c * ((t=t/d-1)*t*t*t - 1) + b;
}; 


/**
 * Setting class のコンストラクタ
 *
 * 基本変数を定義するためのクラス
 *
 */
var Setting = {};

(function() {

	//Setting.rootPath = "/trusco/html/";
	Setting.rootPath = "";

	Setting.makerGetUrl = "/searches/get_maker_selectbox";

	Setting.flashVersion = 8;

})();


/**
 * Flash class のコンストラクタ
 *
 * Flash Player の情報を調査するためのクラス
 *
 */
var Flash = {};

(function() {

	Flash.getVersion = function() {
		var version='0.0.0';
		if (navigator.plugins && navigator.mimeTypes['application/x-shockwave-flash']) {
			var plugin=navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin;
			if (plugin && plugin.description) {
				version=plugin.description.replace(/^[A-Za-z\s]+/, '').replace(/(\s+r|\s+b[0-9]+)/, ".");
			}
		} else {
			var x='';
			try {
				var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
				x=axo.GetVariable("$version");
			} catch(e) {
				try {
					axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
					x="WIN 6,0,21,0";
					axo.AllowScriptAccess="always";
					x=axo.GetVariable("$version");
				} catch(e) {
					if (!x.match(/^WIN/)) {
						try {
							axo=null;
							axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
							x=axo.GetVariable("$version");
						} catch(e) {
							if (axo) {
							} else {
								try {
									x="WIN 2,0,0,11";
								} catch(e) {
									x="WIN 0,0,0,0";
								}
							}
						}
					}
				}
			} 
			version=x.replace(/^WIN /,'').replace(/,[0-9]+$/,'').replace(/,/g,'.');
		}
		if (version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/)) {
			return version;
		} else {
			return '0.0.0';
		}
	};

})();


/**
 * Alphafilter class のコンストラクタ
 *
 * IE6において透過pngファイルを正常に表示するためのクラス
 *
 */
var Alphafilter = {};

(function() {

	/*
	 * Alphafilter class ： setting メソッド
	 * 
	 * 初期値を定義
	 */
	Alphafilter.setting = {
		"blankImg": Setting.rootPath + "/common/images/blank.gif"
	};

	/*
	 * Alphafilter class ： bind メソッド
	 * 
	 * 透過png化するための処理を施す
	 */
	Alphafilter.bind = function(obj) {
		var ob = $(obj);
		var orgSrc = ob.attr("src");
		ob.attr("src", Alphafilter.setting.blankImg);
		ob.css("filter", "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + orgSrc + "', sizingMethod='scale')");
	};

})();


/**
 * loadNav class のコンストラクタ
 *
 * 画像をマウスオン・オーバーで表示切替するためのクラス
 *
 */
var loadNav = {};

(function() {

	loadNav.preload = new Array();
	loadNav.overExp = "_over";
	loadNav.presentExp = "_on";

	/*
	 * loadNav class ： setEvent メソッド
	 * 
	 * 対象要素にマウスイベントを付加する
	 */
	loadNav.setEvent = function(obj) {
		if($(obj).parent().get(0).tagName.toLowerCase() == "span") {
			return;
		}

		var outImgUrl = $(obj).attr("src");
		var overImgUrl = "";

		var divExp = outImgUrl.split(".");
		var imgExp = divExp[divExp.length - 1];

		if (0 < outImgUrl.indexOf(loadNav.overExp + "." + imgExp, 0)) {
			overImgUrl = outImgUrl;
		} else {
			for(var i=0; i<divExp.length-1; i++) {
				if (0 < i) {
					overImgUrl += ".";
				}
				overImgUrl += divExp[i];
			}
			overImgUrl = overImgUrl.replace(loadNav.presentExp, "");
			overImgUrl += loadNav.overExp + "." + imgExp;
		}

		var preloadNo = loadNav.preload.length;
		loadNav.preload[preloadNo] = new Array();
		loadNav.preload[preloadNo].overImg = new Image();
		loadNav.preload[preloadNo].overImg.src = overImgUrl;

		$(obj).mouseover(function() {
			$(this).attr("src", loadNav.preload[preloadNo].overImg.src);
		});

		$(obj).mouseout(function() {
			$(this).attr("src", outImgUrl);
		});
	};
})();


/**
 * Scroll class のコンストラクタ
 *
 * ページ内の対象要素までスムーズにスクロールするためのクラス
 *
 */
var Scroll = {};

(function() {

	Scroll.conditions = "a[href^=#]";

	/*
	 * Scroll class ： set メソッド
	 * 
	 * HTML上に存在する要素の中から条件にあったものを検出し、クリック時のスクロールイベントを付加する
	 */
	Scroll.set = function() {
		// 対象のa要素がクリックされた時のイベントを追加
		$(Scroll.conditions).click(function() {
			Scroll.move(this.hash);
			return false;
		});
	};

	/*
	 * Scroll move ： set メソッド
	 * 
	 * 対象の要素まで、画面をスクロールする
	 */
	Scroll.move = function(id) {
		if (id) {
			if (id != "#" && $(id)[0]) {
				var offset = $(id).offset();
				$($.browser.safari ? 'body' : 'html').animate({
					"scrollLeft": offset.left,
					"scrollTop": offset.top
				}, 400, "quart");
			}
		}
	};

})();


/**
 * SideSearch class のコンストラクタ
 *
 * 左ナビ部の特定の要素を制御するためのクラス
 *
 */
var SideSearch = {};

(function() {

	/*
	 * SideSearch class ： setSelectView メソッド
	 * 
	 * 特定要素の中から select タグを抜き出し、体裁をビジュアル的なものに変更する
	 */
	SideSearch.setSelectView = function() {
		$("select", "#sSearchCondition").css({
			"visibility": "hidden",
			"position": "absolute",
			"left": "0",
			"top": "0"
		}).each(function() {
			var baseId = $(this).attr("id");
			$(this).before("<div id=\"sel_" + baseId + "\" class=\"selectView\"><p></p><span></span></div>");
			$("body").append("<ul id=\"ops_" + baseId + "\" class=\"selectViewList\"></ul>");

			// 疑似selectにイベントを付加する
			$("#sel_" + baseId).click(function() {
				// 擬似selectの位置情報を取得
				var targetOffset = $("#sel_" + baseId).offset();
				$("#ops_" + baseId).css(
					{"left": targetOffset.left + "px", "top": targetOffset.top + $("#sel_" + baseId)[0].offsetHeight + "px", "visibility": "visible"}
				);
				$("body").append("<div id=\"selectViewListScreen\"></div>");
				$("#selectViewListScreen").click(function() {
					SideSearch.closeSelectViewList(baseId);
				});
			});

			// 疑似optionを作成する
			var setOptions = "";
			$("option", this).each(function() {
				var ops = $(this);
				setOptions += "<li";
				if (ops.attr("selected")) {
					$("p", "#sel_" + baseId).html(ops.html());
					setOptions += " class=\"focus\"";
				}
				setOptions += ">" + ops.html() + "<span class=\"hidden\">" + ops.val() + "</span></li>";
			});
			$("#ops_" + baseId).html(setOptions);

			// 疑似optionに各種イベントを付加する
			$("li", "#ops_" + baseId).each(function() {
				// マウスオーバー時のイベント
				$(this).mouseover(function() {
					// 全てのフォーカス情報を一旦解除
					$("li", "#ops_" + baseId).each(function() {
						$(this).removeClass("focus");
					});
					$(this).addClass("focus");
				});

				// クリック時のイベント
				$(this).click(function() {
					// 疑似selectに現在の情報を反映
					$("p", "#sel_" + baseId).html($(this).html());
					// 本物のoptions にも反映する
					var selVal = $(".hidden", this).html();
					$("option", "#" + baseId).each(function() {
						if ($(this).val() == selVal) {
							$(this).attr("selected", "selected");
						}
					});
					// 値の反映が完了したら、擬似optionsを非表示にする
					SideSearch.closeSelectViewList(baseId);
				});
			});

		});
	};

	/*
	 * SideSearch class ： closeSelectViewList メソッド
	 * 
	 * ビジュアル化した擬似optionsを非表示にする
	 */
	SideSearch.closeSelectViewList = function(baseId) {
		$("#ops_" + baseId).css("visibility", "hidden");
		$("#selectViewListScreen").remove();
	};

	/*
	 * SideSearch class ： setSelectView メソッド
	 * 
	 * 特定要素の中から ボタンタグを抜き出し、体裁をビジュアル的なものに変更する
	 */
	SideSearch.setSearchButton = function() {
		var wrap = $(".buttonArea", "#sSearchCondition");
		if ($("input", wrap).get(0)) {
			var imgId = 	$("input", wrap).get(0).id;

			$("input", wrap).css(
				{"position": "absolute", "visibility": "hidden"}
			);
			wrap.append("<a id=\"img_" + imgId + "\" href=\"#\"></a>");

			$("#img_" + imgId).click(function() {
				$("#" + imgId).click();
			});
		}
	}

})();


/**
 * Accordion class のコンストラクタ
 *
 * 要素をスライドして開閉するためのクラス
 *
 */
var Accordion = {};

(function() {

	/*
	 * Accordion class ： open メソッド
	 * 
	 * 対象要素をスライドして開く
	 */
	Accordion.open = function(openBtnId, closeBtnId, cellId) {
		var objCell = $("#" + cellId);

		if (isIE6) {
			$("#footer").css("position", "static");
			objCell.css({"visibility": "visible", "position": "static"});
			$("#" + openBtnId).removeClass("btnActive");
			$("#" + closeBtnId).addClass("btnActive");
			$("#footer").css("position", "absolute");
		} else {
			var height = objCell.get(0).offsetHeight;
			var sabunH = 0;
			if (cellId == "mSearchCocomiteFrame") {
				sabunH = 3;
			} else if (cellId == "mSearchConsFrame") {
				sabunH = 6;
			}

			objCell.css(
				{"visibility": "visible", "position": "static", "height": "0", "opacity": "0"}
			).animate(
				{"height": (height - sabunH) + "px", "opacity": "1.0"},
				{"duration": "slow", "easing": "quart", "complete": function() {
					$(this).css({"height": "auto"});
					$("#" + openBtnId).removeClass("btnActive");
					$("#" + closeBtnId).addClass("btnActive");
				}}
			);
		}
	};

	/*
	 * Accordion class ： close メソッド
	 * 
	 * 対象要素をスライドして閉じる
	 */
	Accordion.close = function(openBtnId, closeBtnId, cellId) {
		var objCell = $("#" + cellId);

		if (isIE6) {
			$("#footer").css("position", "static");
			objCell.css({"visibility": "hidden", "position": "absolute"});
			$("#" + openBtnId).addClass("btnActive");
			$("#" + closeBtnId).removeClass("btnActive");
			$("#footer").css("position", "absolute");
		} else {
			objCell.animate(
				{"height": "0", "opacity": "0"},
				{"duration": "slow", "easing": "quart", "complete": function() {
					$(this).css({"visibility": "hidden", "position": "absolute", "height": "auto"});
					$("#" + openBtnId).addClass("btnActive");
					$("#" + closeBtnId).removeClass("btnActive");
				}}
			);
		}
	};

})();


/**
 * Overlay class のコンストラクタ
 *
 * 要素をオーバーレイ形式で表示するためのクラス
 *
 */
var Overlay = {};

(function() {

	/*
	 * window上のスクロール量を取得する
	 */
	var getScrollPosition = function() { 
		var obj = new Object(); 
		obj.x = document.documentElement.scrollLeft || document.body.scrollLeft; 
		obj.y = document.documentElement.scrollTop || document.body.scrollTop; 
		return obj; 
	};


	Overlay.baseHTML = "<div id='overlayScreen'></div><div id='overlayFrame'><div id='overlayContent'></div></div>";

	/*
	 * Overlay class ： openMark メソッド
	 * 
	 * 環境マークを表示する
	 */
	Overlay.openMark = function(type, motion) {

		var partHTML = null;
		if (type == "searchCons") {
			partHTML = Setting.rootPath + "/common/partsHTML/searchCons.html";
		} else if (type == "enviroMark") {
			partHTML = Setting.rootPath + "/common/partsHTML/enviroMark.html";
		} else if (type == "naojiroMark1") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark1.html";
		} else if (type == "naojiroMark2") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark2.html";
		} else if (type == "naojiroMark3") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark3.html";
		} else if (type == "naojiroMark4") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark4.html";
		} else if (type == "naojiroMark5") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark5.html";
		} else if (type == "naojiroMark6") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark6.html";
		} else if (type == "naojiroMark7") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark7.html";
		} else if (type == "naojiroMark8") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark8.html";
		} else if (type == "naojiroMark9") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark9.html";
		} else if (type == "freeImage") {
			partHTML = Setting.rootPath + "/common/partsHTML/naojiroMark9.html";
		}

		if (!partHTML) {
			return false;
		}

		$("body").append(Overlay.baseHTML);

		$("#overlayScreen").css("display", "block").click(function() {
			Overlay.close();
		});

		// body 要素のマージン値を取得する
		bodyOffset = $("body").offset();

		if (isIE6) {
			// SELECTがある場合は、表示を隠す（IEのバグ対応）
			$("select:visible").hide();

			$("#overlayScreen").css({
				"left": "-" + bodyOffset.left + "px",
				"top": "-" + bodyOffset.top + "px"
			});
		}

		var objFrame = $("#overlayFrame");
		var objContent = $("#overlayContent");

		if (motion == "on") {

			objContent.load(partHTML, function() {
				var objThis = $(this);
				var width = objThis.width();
				var height = objThis.height();

				var sabunW = width - objFrame.width();
				var sabunH = height - objFrame.height();

				objFrame.animate(
					{"width": "+=" + sabunW + "px", "left" : "-=" + Math.floor(sabunW / 2) + "px", "height": "+=" + sabunH + "px", "top" : "-=" + Math.floor(sabunH / 2) + "px"},
					{"duration": "first", "easing": "quart", "complete": function() {
						objContent.css({"position": "static", "visibility": "visible"});
						$("h2 > span", objContent).click(function() {
							Overlay.close();
						});
					}}
				);
			});

			Overlay.setCenter();
			objFrame.css("visibility", "visible");

		} else {
			objContent.load(partHTML, function() {
				var objThis = $(this);
				var width = objThis.width();
				var height = objThis.height();

				objFrame.css({"width": width + "px", "height": height + "px"});
				objContent.css({"position": "static", "visibility": "visible"});
				$("h2 > span", objContent).click(function() {
					Overlay.close();
				});

				Overlay.setCenter();
				objFrame.css("visibility", "visible");
			});
		}
	};

	/*
	 * Overlay class ： setCenter メソッド
	 * 
	 * 要素 『overlayFrame』 を画面中央に表示する
	 */
	Overlay.close = function() {

		$("#overlayFrame").remove();
		$("#overlayScreen").remove();
		// IE6 の場合は微調整したスクリーンを元に戻す
		if (isIE6) {
			// SELECTの表示を有効にする
			$("select:hidden").show();
		}
	};

	/*
	 * Overlay class ： setCenter メソッド
	 * 
	 * 要素 『overlayFrame』 を画面中央に表示する
	 */
	Overlay.setCenter = function() {
		var obContent = $("#overlayFrame");
		var width = obContent.width();
		var height = obContent.height();

		var addLeft = 0;
		var addTop = 0;

		if (isIE6) {
			var screenPos = getScrollPosition();
			addLeft = screenPos.x - bodyOffset.left;
			addTop = screenPos.y - bodyOffset.top;
		}

		// ウインドウの表示領域を取得する(Operaだけちょっと取得値がおかしい・・・)
		winInfo = {
			"outerW" : $(document).width(),
			"outerH" : $(document).height(),
			"innerW" : $(window).width(),
			"innerH" : $(window).height()
		};

		obContent.css({
			"left" : (Math.floor((winInfo.innerW - width) / 2) + addLeft) + "px",
			"top" : (Math.floor((winInfo.innerH - height) / 2) + addTop) + "px"
		});
	};
})();


/**
 * Maker class のコンストラクタ
 *
 * 検索系画面にて、メーカー名のプルダウン要素を取得するためのクラス
 *
 */
var Maker = {};

(function() {

	/*
	 * Maker class ： get メソッド
	 * 
	 * 指定されたIDに該当するプルダウン要素を取得、反映する
	 */
	Maker.get = function(obj) {

		var objMaker = $("#selMakerCode");	// メーカー名・IDを表示するプルダウンのID
		objMaker.css("visibility", "hidden");

		objMaker.before("<span class='loader'></span>");

		var id = $(obj).val();

		// システム化の際に改修すること！！
		var getHTML = "";
		getHTML = Setting.makerGetUrl + "/" + id;

		// 取得した値を対象要素に反映
		objMaker.load(getHTML, function() {
			objMaker.css("visibility", "visible");
			$(".loader", objMaker.parent()).remove();
		});

	};

})();


/**
 * Help class のコンストラクタ
 *
 * 吹き出し型ヘルプを表示するためのクラス
 *
 */
var Help = {};

(function() {

	Help.helpNo = 0;

	/*
	 * Help class ： set メソッド
	 * 
	 * 指定された要素に対し、マウスイベント処理を付加する
	 */
	Help.set = function(obj) {

		// 吹き出し型ヘルプの枠を作成
		var no = Help.make(obj);

		if (0 < no) {

			// マウスオーバー時の処理
			$(obj).mouseover(function() {
				var objHelp = $("#balloonHelp_" + no);

				var width = $(obj).width();
				var height = $(obj).height();
				var left = $(obj).offset().left;
				var top = $(obj).offset().top;

				var frameWidth = $("body").width();
				var helpWidth = objHelp.width() + 7;
				var helpHeight = objHelp.height();

				// 画面上の余白を計算し、吹き出し型ヘルプの表示位置を指定
				if (frameWidth - (width + left) > helpWidth) {
					objHelp.css({"left": (width + left + 7) + "px", "top": top + Math.floor(height / 2) - Math.floor(helpHeight / 2) + "px"});
					$(".arrowL", objHelp).css("display", "block");
					$(".arrowR", objHelp).css("display", "none");
				} else if (left > helpWidth) {
					objHelp.css({"left": (left - helpWidth - 7) + "px", "top": top + Math.floor(height / 2) - Math.floor(helpHeight / 2) + "px"});
					$(".arrowL", objHelp).css("display", "none");
					$(".arrowR", objHelp).css("display", "block");
				}
				objHelp.css("visibility", "visible");
			});

			// マウスアウト時の処理
			$(obj).mouseout(function() {
				$("#balloonHelp_" + no).css("visibility", "hidden");
			});
		}
	};

	/*
	 * Help class ： make メソッド
	 * 
	 * 吹き出し型ヘルプの枠を作成する
	 */
	Help.make = function(obj) {
		var text = $(obj).attr("title");
		$(obj).attr("title", "");
		$(obj).attr("alt", "");

		if (text != "") {
			Help.helpNo ++;

			$("body").append("<div id='balloonHelp_" + Help.helpNo + "' class='balloonHelpFrame'><div>" + text + "</div><span class='arrowL'></span><span class='arrowR'></span></div>");
			return Help.helpNo;
		} else {
			return 0;
		}
	};

})();


/**
 * Promotion class のコンストラクタ
 *
 * 「環境にやさしい商品で探す」ページ内に特定のHTNL要素を表示するためのクラス
 * → ここはサーバー側で読み込むことになるので、後ほど削除（予定）
 *
 */
var Promotion = {};

(function() {

	Promotion.url = Setting.rootPath + "/common_data/magazine/home/index.html #inner_contents";

	/*
	 * Promotion class ： load メソッド
	 * 
	 * 
	 */
	Promotion.load = function() {
		//$("body").append("<div id='dumyPromotion'></div>");
		$("#mPromotionArea").load(Promotion.url, function() {
			$("#footer").css("position", "static");
			$(this).css("background-image", "none");
			var obj = $("a[href='#top']", $(this));
			obj.attr("href", "#mPromotionArea");
			obj.click(function() {
				Scroll.move(this.hash);
				return false;
			});
			$("#footer").css("position", "absolute");
		});
	};

})();


/**
 * Slider class のコンストラクタ
 *
 * レコメンド部分など、商品が横に並んでいる箇所で、規定枠の左右に商品をスライドするためのクラス
 *
 */
var Slider = {};

(function() {

	Slider.array = new Array();

	/*
	 * Slider class ： define メソッド
	 * 
	 * スライドイベントを起こす箇所を指定する
	 */
	Slider.define = function(id) {
		var no = Slider.array.length;
		Slider.array[no] = new Object();
		Slider.array[no].id = id;
	};

	/*
	 * Slider class ： set メソッド
	 * 
	 * 指定された要素に対し、スライドのための設定値を反映し、「前」「次」のボタンにイベントを付加する
	 */
	Slider.set = function() {

		for(var i=0; i<Slider.array.length; i++) {
			var array = Slider.array[i];
			var liObj = $("ul > li", "#" + array.id);

			if (liObj.size() <= 5) {
				$(".prevBtn", "#" + array.id).css("visibility", "hidden");
				$(".nextBtn", "#" + array.id).css("visibility", "hidden");
				if (1 < liObj.size()) {
					// li 要素の情報（幅・マージン）を取得
					var liWidth = $(liObj.get(0)).width();
					var liMargin = $(liObj.get(1)).offset().left - $(liObj.get(0)).offset().left - liWidth;
					$("ul", "#" + array.id).css(
						{"margin-left": "-" + liMargin + "px", "width": (liWidth * 5 + liMargin * 7) + "px"}
					);
				}
			} else {
				array.start = 0;

				// li 要素を保存
				array.arrayLi = new Array();
				for (var j=0; j<liObj.size(); j++) {
					array.arrayLi[j] = liObj.get(j);
				}

				// li 要素の情報（幅・マージン）を取得
				var liWidth = $(array.arrayLi[0]).width();
				var liMargin = $(array.arrayLi[1]).offset().left - $(array.arrayLi[0]).offset().left - liWidth;

				// ul 要素を再構築
				var setHTML = Slider.createHTML(array.start, array.arrayLi);

				$("ul", "#" + array.id).css(
					{"margin-left": "-" + (liWidth + liMargin) + "px", "width": (liWidth * 7 + liMargin * 9) + "px"}
				).html(setHTML);

				// 「前」をクリックした時のスライド用イベントを付加
				$(".prevBtn", "#" + array.id).attr("rel", i).click(function() {
					// 要素の開始番号を取得
					var no = parseInt($(this).attr("rel"), 10);

					if (!Slider.array[no].isSlide) {
						if (navigator.userAgent.indexOf("MSIE") != -1) {
							Slider.array[no].isSlide = false;
						} else {
							Slider.array[no].isSlide = true;
						}
						Slider.array[no].start --;

						// イベント対象idを取得
						var id = Slider.array[no].id;

						// スライドアニメーションを実行
						$("ul", "#" + id).animate(
							{"marginLeft": "+=" + (liWidth + liMargin) + "px"},
							{"duration": 200, "easing": "linear", "complete": function() {
								// アニメーション終了後に ul 要素を再構築
								$(this).css(
									{"margin-left": "-" + (liWidth + liMargin) + "px"}
								).html(Slider.createHTML(Slider.array[no].start, Slider.array[no].arrayLi));
								Slider.array[no].isSlide = false;
							}}
						);
					}
				});

				// 「次」をクリックした時のスライド用イベントを付加
				$(".nextBtn", "#" + array.id).attr("rel", i).click(function() {
					// 要素の開始番号を取得
					var no = parseInt($(this).attr("rel"), 10);

					if (!Slider.array[no].isSlide) {
						if (navigator.userAgent.indexOf("MSIE") != -1) {
							Slider.array[no].isSlide = false;
						} else {
							Slider.array[no].isSlide = true;
						}
						Slider.array[no].start ++;

						// イベント対象idを取得
						var id = Slider.array[no].id;

						// スライドアニメーションを実行
						$("ul", "#" + id).animate(
							{"marginLeft": "-=" + (liWidth + liMargin) + "px"},
							{"duration": 200, "easing": "linear", "complete": function() {
								// アニメーション終了後に ul 要素を再構築
								$(this).css(
									{"margin-left": "-" + (liWidth + liMargin) + "px"}
								).html(Slider.createHTML(Slider.array[no].start, Slider.array[no].arrayLi));
								Slider.array[no].isSlide = false;
							}}
						);
					}
				});

			}
		}
	};

	/*
	 * Slider class ： createHTML メソッド
	 * 
	 * ul 要素の中に表示するHTMLを生成する
	 */
	Slider.createHTML = function(startNo, array) {
		var setHTML = "";
		var size = array.length;

		for(var i=-1; i<6; i++) {
			var setClass = "";
			if (i == -1 || i == 5) {
				setClass = " class='hidden'";
			}

			var no = Slider.getArrayNo(startNo + i, size);
			setHTML += "<li" + setClass + "><p class=\"listNoFrame listNoImage_"+ (no + 1) +"\">" + $(array[no]).html() + "</p></li>";
		}
		return setHTML;
	};

	/*
	 * Slider class ： getArrayNo メソッド
	 * 
	 * 各種条件から、配列要素の番号を取得する
	 */
	Slider.getArrayNo = function(no, size) {
		var retNo = 0;
		if (no < 0) {
			retNo = (size + (no % size));
			if (retNo == size) {
				retNo = 0;
			}
		} else {
			retNo = no % size;
		}
		return retNo;
	};

})();


/**
 * Popup class のコンストラクタ
 *
 * 別ウインドウをポップアップで表示するためのクラス
 *
 */
var Popup = {};

(function() {

	Popup.win = null;

	/*
	 * Popup class ： open メソッド
	 * 
	 */
	Popup.open = function(url, width, height) {

		if (Popup.win) {
			Popup.win.close();
		}

		//ウインドウの表示サイズを取得する
		var sWidth = screen.width;
		var sHeight = screen.height;

		//画面の中央に表示するため、XY座標を算出する
		var left = (sWidth - parseInt(width, 10)) / 2;
		var top = (sHeight - parseInt(height, 10)) / 2;

		Popup.win = window.open(url, "_blank", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,screenX=" + left + ",screenY=" + top + ",left=" + left + ",top=" + top + ",width=" + width + ",height=" + height);
		Popup.win.focus();

		return false;
	};

})();


/**
 * Product class のコンストラクタ
 *
 * 商品情報を拡大表示するためのクラス
 *
 */
var Product = {};

(function() {

	/*
	 * Product class ： setZoom メソッド
	 * 
	 * 商品の拡大イベントを実装する
	 */
	Product.setZoom = function() {
		$("#mProductImageFrame > .mainImage > span > img").each(function() {
			var obj = $(this);
			obj.parent().css({ "visibility": "visible", "cursor": "pointer" }).click(function() {
				Product.openImage($(this).html(), obj.width(), obj.height());
			});
		});
		$("#mProductImageFrame > .subImage > span > img").each(function() {
			var obj = $(this);
			obj.parent().css({ "visibility": "visible", "cursor": "pointer" }).click(function() {
				Product.openImage($(this).html(), obj.width(), obj.height());
			});
		});
	};

	/*
	 * Product class ： openImage メソッド
	 * 
	 * 商品を拡大表示する
	 */
	Product.openImage = function(html, width, height) {

		// オーバーレイを開く → Overlay クラスの内容をそのまま引用
		$("body").append(Overlay.baseHTML);
		$("#overlayScreen").css("display", "block").click(function() {
			Overlay.close();
		});

		// body 要素のマージン値を取得する
		bodyOffset = $("body").offset();

		if (isIE6) {
			// SELECTがある場合は、表示を隠す（IEのバグ対応）
			$("select:visible").hide();

			$("#overlayScreen").css({
				"left": "-" + bodyOffset.left + "px",
				"top": "-" + bodyOffset.top + "px"
			});
		}

		var objFrame = $("#overlayFrame");
		var objContent = $("#overlayContent");

		objContent.load(Setting.rootPath + "/common/partsHTML/freeImage.html", function() {

			// 表示要素を読み込み、各種処理を実行
			var objThis = $(this);
			$(".imageWrap", objThis).html(html);
			var width = objThis.width();
			var height = objThis.height();

			var sabunW = width - objFrame.width();
			var sabunH = height - objFrame.height();

			objFrame.animate(
				{"width": "+=" + sabunW + "px", "left" : "-=" + Math.floor(sabunW / 2) + "px", "height": "+=" + sabunH + "px", "top" : "-=" + Math.floor(sabunH / 2) + "px"},
				{"duration": "first", "easing": "quart", "complete": function() {
					objContent.css({"position": "static", "visibility": "visible"});
					$("h2 > span", objContent).click(function() {
						Overlay.close();
					});
				}}
			);
		});

		Overlay.setCenter();
		objFrame.css("visibility", "visible");
	};


})();



/**
 * ページ読み込み時の処理
 */
$(function() {

	// IE6の場合は透過pngを正常に表示できるようにに補正する
	if (isIE6) {
		$("img[src$='png'][class*='alphafilter']").each(function() {
			Alphafilter.bind(this);
		});
	}

	// 特定の要素に対しマウスイベントを付加する
	$("img[class*='mouseevent']").each(function() {
		loadNav.setEvent(this);
	});

	// 特定の要素に対し吹き出し型ヘルプを付加する
	$("[class*='balloonHelp']").each(function() {
		Help.set(this);
	});

	// ページ内スクロールを開始する
	Scroll.set();

	Slider.set();

	// 左ナビ部、検索エリア内のselectはビジュアル重視の体裁に変更
	SideSearch.setSelectView();
	SideSearch.setSearchButton();

	// ウインドウがリサイズした時の処理を付加
	$(window).resize(function() {
		// オーバーレイが表示されている時は、メイン要素を画面中央に寄せる
		if ($("#overlayFrame:visible").get(0)) {
			Overlay.setCenter("#overlayFrame");
		}
	});

});
