/*------------------------------------------------------*/
/* Updated: 2011/02 */
/*------------------------------------------------------*/

// *************************************************************** //
// 変数の宣言 //
// *************************************************************** //

var imgPath = "http://uniqlo.edgesuite.net/jp/images/contents/gu/top/main/common/";	// 画像のパス名

var prs = new Array();	// 各プロモーション情報の配列
for (i=1; i<=10; i++) {
	prs[i] = new Array();
	prs[i]["visual"] = new Array();
	prs[i]["item"] = new Array();
}
var prVisWidth = 368;	// ビジュアル画像の横幅
var prVisHeight = 497;	// ビジュアル画像の高さ
var prItemWidth = 345;	// 各アイテム画像の横幅
var prItemHeight = 21;	// 各アイテム画像の高さ

var gaClick = [	// Google Analyticsクリック数取得用属性の配列
	"javascript:pageTracker._trackPageview('/click?link=",
	"');"
];

var moveNums = new Array();	// 各プロモーションの横位置の配列

var prMax;	// プロモーション情報の数
var prNow = 1;	// 現在の値
var prBack;	// 前の値
var prNext;	// 次の値

var flagStart = false;	// 1回目：false／2回目以降：true
var flagAnimate = false;	// アニメーション中：true
var flagOver = false;	// プロモーションエリアにオンマウス中：true

var slideSpeed = 850;	// スライドのスピード
var slideEasing = "easeOutQuint";	// Easingのパターン
var fadeSpeed = 200;	// フェードイン／アウトのスピード

var time = 2000;	// アニメーションするまでの時間
var timer;	// アニメーションのタイマー





// *************************************************************** //
// 情報取得系関数 //
// *************************************************************** //

// 前の値を取得する関数 --------------------------------- //

function getBack(que) {
	prBack = prNow - 1;
	if (prBack == 0) {
		prBack = prMax;
	}
}





// 次の値を取得する関数 --------------------------------- //

function getNext(que) {
	prNext = prNow + 1;
	if (prNext == prMax + 1) {
		prNext = 1;
	}
}





// 現在値を取得する関数 --------------------------------- //

function getNow(que) {
	if (que == "arrowL") {
		prNow = prBack;
	} else {
		prNow = prNext;
	}
}





// *************************************************************** //
// 制御系関数 //
// *************************************************************** //

// ページ読み込み時の設定 --------------------------------- //

$j(document).ready(function(){
	
	// プロモーション情報の数の取得
	prMax = 1;
	do {
		prMax++;
	} while ( (prMax <= 10) && (prs[prMax]["visual"][0] != undefined) );
	prMax--;

	// 各プロモーションの横位置の取得
	for (i=1; i<=prMax; i++) {
		moveNums[i] = (prVisWidth + 1) * (i-1) + 1;
	}

	// 関数の指定
	setPr();	// 初期設定を制御する関数を実行
});





// 初期設定を制御する関数 --------------------------------- //

function setPr() {

	// 大枠の要素の設定
	$j("#promotionArea").html('<div class="inner"></div>');

	// 各プロモーション情報の要素の設定
	$j("#promotionArea .inner").html('<div class="prSetWrap"></div>');
	for (i=1; i<=prMax; i++) {
		$j("#promotionArea .prSetWrap").append('<div class="prSet"></div>');
		$j("#promotionArea .prSet").eq(i-1).css("left", moveNums[i] + "px");
		$j("#promotionArea .prSet").eq(i-1).html('<p class="visual"><img src="' + prs[i]["visual"][0] + '" alt="" width="' + prVisWidth + '" height="' + prVisHeight + '"></p>');
		$j("#promotionArea .prSet").eq(i-1).append('<ul class="item"></ul>');
		for (j=1; j<=prs[i]["item"].length-1; j++) {
			$j("#promotionArea .prSet").eq(i-1).find(".item").append('<li><a href="' + prs[i]["item"][j][0] + '" target="' + prs[i]["item"][j][1] + '" onClick="' + gaClick[0] + prs[i]["item"][j][2] + gaClick[1] + '"><img src="' + prs[i]["item"][j][3] + '" alt="' + prs[i]["item"][j][4] + '" width="' + prItemWidth + '" height="' + prItemHeight + '"></a></li>');
		}
	}
	$j("#promotionArea .prSet").each(function(i) {
		$j(this).find(".item li").each(function(j) {
			removeGaClick($j(this));	// Google Analyticsクリック数取得用属性を削除する関数を実行
			addCondition($j(this), i+1, j+1);	// 商品の状態の画像を追加する関数を実行
		});
	});

	// ビジュアル背景の要素の設定
	$j("#promotionArea .inner").prepend('<div class="visualBg"></div>');

	// 左右矢印ボタンの要素の設定
	$j("#promotionArea .inner").append('<p class="arrow arrowL"><img src="' + imgPath + 'pr-prev.png" alt="" width="' + prVisWidth + '" height="' + prVisHeight + '"></p>');
	$j("#promotionArea .inner").append('<p class="arrow arrowR"><img src="' + imgPath + 'pr-next.png" alt="" width="' + prVisWidth + '" height="' + prVisHeight + '"></p>');
	if (window.navigator.appVersion.indexOf("MSIE") != -1) {
		$j("#promotionArea .arrow img").fixPng();
	}

	// スペーサーの要素の設定
	$j("#promotionArea .inner").append('<p class="spacer spacerL" title="' + prs[1]["visual"][1] + '"></p>');
	$j("#promotionArea .inner").append('<p class="spacer spacerR" title="' + prs[2]["visual"][1] + '"></p>');

	// 関数の指定
	switchPr("start");	// 画像切替を制御する関数を実行
}





// 画像切替を制御する関数 --------------------------------- //

function switchPr(que) {

	// タイマーの解除
	clearTimeout(timer);

	// イベントを実行しないようにする処理
	$j("#promotionArea .spacer").unbind('click');
	$j("#promotionArea .prSet .item li a img").unbind('mouseenter').unbind('mouseleave');
	$j("#promotionArea .inner").unbind('mouseenter').unbind('mouseleave');

	// 1回目
	if(!flagStart) {
		flagStart = true;

	// 2回目以降
	} else {
		
		// アニメーション中ではない場合
		if(!flagAnimate) {
	
			// プロモーションエリアにオンマウス中ではない場合
			if(!flagOver) {
				
				// フラグの設定
				flagAnimate = true;

				// 関数の指定
				getBack(que);	// 前の値を取得する関数を実行
				getNext(que);	// 次の値を取得する関数を実行
				
				// 左矢印ボタンをクリックした場合
				if (que == "arrowL") {
				
					// プロモーション情報の要素の最初に追加・設定
					$j("#promotionArea .prSetWrap").prepend('<div class="prSet"></div>');
					$j("#promotionArea .prSet").first().css("left", (prVisWidth + 1) * -1 + 1 + "px");
					$j("#promotionArea .prSet").first().html('<p class="visual"><img src="' + prs[prBack]["visual"][0] + '" alt="" width="' + prVisWidth + '" height="' + prVisHeight + '"></p>');
					$j("#promotionArea .prSet").first().append('<ul class="item"></ul>');
					for (j=1; j<=prs[prBack]["item"].length-1; j++) {
						$j("#promotionArea .prSet").first().find(".item").append('<li><a href="' + prs[prBack]["item"][j][0] + '" target="' + prs[prBack]["item"][j][1] + '" onClick="' + gaClick[0] + prs[prBack]["item"][j][2] + gaClick[1] + '"><img src="' + prs[prBack]["item"][j][3] + '" alt="' + prs[prBack]["item"][j][4] + '" width="' + prItemWidth + '" height="' + prItemHeight + '"></a></li>');
					}
					$j("#promotionArea .prSet").first().find(".item li").each(function(j) {
						removeGaClick($j(this));	// Google Analyticsクリック数取得用属性を削除する関数を実行
						addCondition($j(this), prBack, j+1);	// 商品の状態の画像を追加する関数を実行
					});

				// タイマーまたは右矢印ボタンをクリックした場合
				} else {
				
					// プロモーション情報の要素の最後に追加・設定
					$j("#promotionArea .prSetWrap").append('<div class="prSet"></div>');
					$j("#promotionArea .prSet").last().css("left", (prVisWidth + 1) * prMax + 1 + "px");
					$j("#promotionArea .prSet").last().html('<p class="visual"><img src="' + prs[prNow]["visual"][0] + '" alt="" width="' + prVisWidth + '" height="' + prVisHeight + '"></p>');
					$j("#promotionArea .prSet").last().append('<ul class="item"></ul>');
					for (j=1; j<=prs[prNow]["item"].length-1; j++) {
						$j("#promotionArea .prSet").last().find(".item").append('<li><a href="' + prs[prNow]["item"][j][0] + '" target="' + prs[prNow]["item"][j][1] + '" onClick="' + gaClick[0] + prs[prNow]["item"][j][2] + gaClick[1] + '"><img src="' + prs[prNow]["item"][j][3] + '" alt="' + prs[prNow]["item"][j][4] + '" width="' + prItemWidth + '" height="' + prItemHeight + '"></a></li>');
					}
					$j("#promotionArea .prSet").last().find(".item li").each(function(j) {
						removeGaClick($j(this));	// Google Analyticsクリック数取得用属性を削除する関数を実行
						addCondition($j(this), prNow, j+1);	// 商品の状態の画像を追加する関数を実行
					});
				}

				// 各プロモーション情報に対して
				$j("#promotionArea .prSet").each(function(i) {
					
					// 左矢印ボタンをクリックした場合
					if (que == "arrowL") {
						moveNums[i+1] = eval($j(this).css("left").replace("px", "")) + (prVisWidth + 1);
						$j(this).animate({
							left: moveNums[i+1]  + "px"
						}, {
							queue: false,
							duration: slideSpeed,
							easing: slideEasing,
							complete: function() {
								if (i == prMax) {
									$j(this).remove();
									getNow(que);	// 現在値を取得する関数を実行
									getBack(que);	// 前の値を取得する関数を実行
									getNext(que);	// 次の値を取得する関数を実行
									$j("#promotionArea .spacerL").attr("title", prs[prNow]["visual"][1]);
									$j("#promotionArea .spacerR").attr("title", prs[prNext]["visual"][1]);
									flagAnimate = false;
								}
							}
						});
			
					// タイマーまたは右矢印ボタンをクリックした場合
					} else {
						moveNums[i+1] = eval($j(this).css("left").replace("px", "")) - (prVisWidth + 1);
						$j(this).animate({
							left: moveNums[i+1]  + "px"
						}, {
							queue: false,
							duration: slideSpeed,
							easing: slideEasing,
							complete: function() {
								if (i == 0) {
									$j(this).remove();
									getNow(que);	// 現在値を取得する関数を実行
									getBack(que);	// 前の値を取得する関数を実行
									getNext(que);	// 次の値を取得する関数を実行
									$j("#promotionArea .spacerL").attr("title", prs[prNow]["visual"][1]);
									$j("#promotionArea .spacerR").attr("title", prs[prNext]["visual"][1]);
									flagAnimate = false;
								}
							}
						});
					}
				});
			}
		}
	}

	// 左矢印ボタンまたは右矢印ボタンをクリックした場合
	if ( (que == "arrowL") || (que == "arrowR") ) {
		flagOver = true;
	}

	// 関数の指定
	timer = setTimeout('switchPr("timer")', time);	// 指定時間経過後、画像切替を制御する関数を実行
	controlArrow();	// 左右矢印ボタンクリックを制御する関数を実行
	controlItemElm();	// アイテムのリンクエレメントを制御する関数を実行
	controlWhole();	// プロモーションエリア全体を制御する関数を実行
}





// アンカーリンクを削除する関数 --------------------------------- //

function removeLink(tag, name) {
	if ( ($j(tag).find("a").attr("href") == "") || (name == "condition") ) {
		$j(tag).html($j(tag).find("a").html());
	}
}





// Google Analyticsクリック数取得用属性を削除する関数 --------------------------------- //

function removeGaClick(tag) {
	if ($j(tag).html().indexOf(gaClick[0] + gaClick[1]) != -1) {
		$j(tag).find("a").removeAttr("onclick");
	}
}





// 商品の状態の画像を追加する関数 --------------------------------- //

function addCondition(tag, i, j) {

	// 商品の状態が「COMING SOON」の場合
	if ( (prs[i]["item"][j][5] == "comingsoon=1") || (prs[i]["item"][j][5] == "comingsoon=yes") ) {
		removeLink($j(tag), "condition");	// アンカーリンクを削除する関数を実行
		$j(tag).append('<p class="condition"><img src="' + imgPath + 'pr-soon.png" alt="COMING SOON" width="' + prItemWidth + '" height="' + prItemHeight + '"></p>');
		if(window.navigator.appVersion.indexOf("MSIE") != -1) {
			$j(tag).find(".condition img").fixPng();
		}
	}

	// 商品の状態が「SOLD OUT」の場合
	if ( (prs[i]["item"][j][6] == "soldout=1") || (prs[i]["item"][j][6] == "soldout=yes") ) {
		removeLink($j(tag), "condition");	// アンカーリンクを削除する関数を実行
		$j(tag).append('<p class="condition"><img src="' + imgPath + 'pr-sold.png" alt="SOLD OUT" width="' + prItemWidth + '" height="' + prItemHeight + '"></p>');
		if(window.navigator.appVersion.indexOf("MSIE") != -1) {
			$j(tag).find(".condition img").fixPng();
		}
	}
}





// 左右矢印ボタンを制御する関数 --------------------------------- //

function controlArrow() {

	// クリック時
	$j("#promotionArea .spacerL").click(function() {
		if(!flagAnimate) {
			flagOver = false;
			switchPr("arrowL");	// 画像切替を制御する関数を実行
		}
	});
	$j("#promotionArea .spacerR").click(function() {
		if(!flagAnimate) {
			flagOver = false;
			switchPr("arrowR");	// 画像切替を制御する関数を実行
		}
	});
}





// アイテムのリンクエレメントを制御する関数 --------------------------------- //

function controlItemElm() {

	// マウスオーバー時
	$j("#promotionArea .prSet .item li a img").bind("mouseenter", function() {
		$j(this).parents("li").css("background-position", "left");
	});

	// マウスアウト時
	$j("#promotionArea .prSet .item li a img").bind("mouseleave", function() {
		$j(this).parents("li").css("background-position", "0 100px");
	});
}





// プロモーションエリア全体を制御する関数 --------------------------------- //

function controlWhole() {
	
	// マウスオーバー時
	$j("#promotionArea .inner").bind("mouseenter", function() {
		flagOver = true;
		clearTimeout(timer);
	});

	// マウスアウト時
	$j("#promotionArea .inner").bind("mouseleave", function() {
		flagOver = false;
		timer = setTimeout('switchPr("timer")', time);	// 指定時間経過後、画像切替を制御する関数を実行
	});
}





/*------------------------------------------------------*/
/* End */
/*------------------------------------------------------*/

