/*------------------------------------------------------*/
/* Updated: 2011/12 */
/*------------------------------------------------------*/

// *************************************************************** //
// 変数の宣言 //
// *************************************************************** //

var xmlFile = '/xml/index.xml';
var prSlideDur = 1000;
var prSlideEas = 'easeOutExpo';
var prSlideBez = '0, 0.5, 0.25, 1';
var prTimerFlag = true;
var prLoopFlag = false;

var prMx;
var prs = new Array();
var prNums = new Array();

var prAnimating = false;

var prTimer;
var prTimering = true;
var prTimerCount = 0;





// *************************************************************** //
// 関数の定義 //
// *************************************************************** //

// 現在の番号を取得する関数 --------------------------------- //

function getPrNums() {
	if (prMx == 0) {
		prNums = [0, 0, 0, 0, 0];
	} else {
		prNums[0] = prNums[2] - 2;
		prNums[1] = prNums[2] - 1;
		prNums[3] = prNums[2] + 1;
		prNums[4] = prNums[2] + 2;
		for (var i=0; i<=1; i++) {
			if (prNums[i] < 0) {
				prNums[i] = prNums[i] + prMx + 1;
			}
		}
		for (var i=3; i<=4; i++) {
			if (prNums[i] > prMx) {
				prNums[i] = prNums[i] - prMx - 1;
			}
		}
	}
}





// HTMLを組み立てる関数 --------------------------------- //

function setPr() {

	$('#promotion').html(
		'<div id="pr-inner">' +
			'<div id="pr-origin">' +
				'<ul id="eachimg"></ul>' +
				'<p id="prnet"></p>' +
				'<ul id="eachshadow"></ul>' +
				'<p id="prcard"></p>' +
				'<p id="prshadow"></p>' +
				'<p id="prtrap"></p>' +
			'</div>' +
		'</div>'
	);
	
	if (prMx != 0) {
		$('#prshadow').after(
			'<ul id="prarrow">' +
				'<li id="prarrow-l"></li>' +
				'<li id="prarrow-r"></li>' +
			'</ul>'
		);
		$('#prtrap').after(
			'<ul id="arrowtrap">' +
				'<li id="arrowtrap-l"></li>' +
				'<li id="arrowtrap-r"></li>' +
			'</ul>'
		);
	}
	for (var i=1; i<=3; i++) {
		$('#eachimg').append('<li style="left:' + 900*(i-2) + 'px;"><img src="' + prs[prNums[i]].src + '" alt="" width="900" height="327" /></li>');
		$('#eachshadow').append('<li style="left:' + 900*(i-2) + 'px;"></li>');
	}
	
	controlPrtrap(0);
	if (prTimerFlag && prMx != 0) {
		setPrTimer();
	}
	
	setTimeout(function() {
		$('#promotion, #pr-inner').css('background-color', '#0d89d9');
	}, 3000);
}





// スライドを制御する関数 --------------------------------- //

function slidePr(dir) {

	if (dir == -1) {
		$('#eachimg').prepend('<li style="left:-1800px;"><img src="' + prs[prNums[0]].src + '" alt="" width="900" height="327" /></li>');
		$('#eachshadow').prepend('<li style="left:-1800px;"></li>');
	} else {
		$('#eachimg').append('<li style="left:1800px;"><img src="' + prs[prNums[4]].src + '" alt="" width="900" height="327" /></li>');
		$('#eachshadow').append('<li style="left:1800px;"></li>');
	}
	
	controlPrtrap(prNums[2+dir]);

	$('#eachshadow').prAnimate({
		left: dir*-1*900,
		duration: prSlideDur,
		easing: prSlideEas,
		bezier: prSlideBez
	});
	
	$('#eachimg').prAnimate({
		left: dir*-1*900,
		duration: prSlideDur,
		easing: prSlideEas,
		bezier: prSlideBez,
		complete: function() {

			if (dir == -1) {
				$('#eachimg li:eq(3), #eachshadow li:eq(3)').remove();
			} else {
				$('#eachimg li:eq(0), #eachshadow li:eq(0)').remove();
			}
			
			$('#eachimg, #eachshadow').css('left', 0);
			for (var i=0; i<=2; i++) {
				$('#eachimg li:eq(' + i + '), #eachshadow li:eq(' + i + ')').css('left', 900*(i-1));
			}

			prNums[2] = prNums[2+dir];
			getPrNums();

			prAnimating = false;

			if (prTimerFlag) {
				prTimerCount = 0;
				if (prLoopFlag || prNums[2] != prMx) {
					setPrTimer();
				}
			}
		}
	});
}





// 中央PRのトラップを制御する関数 --------------------------------- //

function controlPrtrap(num) {
	if (prs[num].url == null) {
		$('#prtrap').html('<span title="' + prs[num].alt + '"></span>');
	} else {
		$('#prtrap').html('<a href="' + prs[num].url + '" target="' + prs[num].target + '" title="' + prs[num].alt + '"></a>');
	}
}





// タイマーを制御する関数 --------------------------------- //

function setPrTimer() {
	if (prTimering) {
		prTimer = setTimeout(function() {
			prTimerCount++;
			if (prTimerCount >= prs[prNums[2]].time/100) {
				prAnimating = true;
				slidePr(1);
			} else {
				setPrTimer();
			}
		}, 100);
	} else {
		clearTimeout(prTimer);
	}
}





// アニメーション処理を制御する関数 --------------------------------- //

$.fn.prAnimate = function(options) {

	var settings = $.extend({
		left: 0,
		duration: 500,
		easing: 'swing',
		bezier: 'ease-out',
		complete: function() {}
	}, options);

	var $el = $(this);

	if (yourOs == 'win' && yourBrowser == 'firefox') {
		$el.css({
			'-moz-transform': 'translate(' + settings.left + 'px, 0)',
			'-moz-transition': '-moz-transform ' + settings.duration + 'ms cubic-bezier(' + settings.bezier + ')'
		}).one('transitionend', function(){
			$el.css({
				'-moz-transform': 'translate(0, 0)',
				'-moz-transition':'-moz-transform'
			});
			settings.complete();
		});

	} else if (yourBrowser == 'iPad' || yourBrowser == 'iPhone' || yourBrowser == 'Android') {
		$el.css({
			'-webkit-transform': 'translate3d(' + settings.left + 'px, 0, 0)',
			'-webkit-transition': '-webkit-transform ' + settings.duration + 'ms cubic-bezier(' + settings.bezier + ')'
		}).one('webkitTransitionEnd', function(){
			$el.css({
				'-webkit-transform': 'translate3d(0, 0, 0)',
				'-webkit-transition':'-webkit-transform'
			});
			settings.complete();
		});

	} else {
		$el.animate({
			'left': settings.left
		}, {
			queue: false,
			duration: settings.duration,
			easing: settings.easing,
			complete: function() {
				settings.complete();
			}
		});
	}
};





// *************************************************************** //
// 処理の実行 //
// *************************************************************** //

// ページ読み込み時 --------------------------------- //

$(function() {

	// 情報の取得 ******************** //

	// XML
	$.ajax({
		url: xmlFile,
		type: 'GET',
		dataType: 'xml',
		cache: false,
		timeout: 10000,
		success: function(xml){
			prMx = $(xml).find('keyvisual set').length - 1;
			$(xml).find('keyvisual set').each(function(i) {
				prs[i] = new Array();
				prs[i].time = $(this).attr('time');
				prs[i].url = $(this).children('url').text();
				prs[i].target = $(this).children('target').text();
				prs[i].src = $(this).children('src').text();
				prs[i].alt = $(this).children('alt').text();
				if (prs[i].url == '#' || prs[i].url == '') {
					prs[i].url = null;
				}
				if (i == prMx) {
					prNums[2] = 0;
					getPrNums();
					setPr();
				}
			});
		}
	});



	// 矢印をマウスオーバー／アウト時 ******************** //
	
	$('#arrowtrap li').live('mouseover', function() {
		var id = $(this).attr('id').replace('arrowtrap-', '');
		$('#prarrow-' + id).css('background-position', '0 -100px');
	});
	$('#arrowtrap li').live('mouseout', function() {
		var id = $(this).attr('id').replace('arrowtrap-', '');
		$('#prarrow-' + id).css('background-position', '0 0');
	});



	// 矢印をクリック時 ******************** //
	
	$('#arrowtrap li').live('click', function() {
		if (!prAnimating) {
			prAnimating = true;
			var id = $(this).attr('id').replace('arrowtrap-', '');
			if (id == 'l') {
				slidePr(-1);
			} else {
				slidePr(1);
			}
		}
	});



	// PRエリアをマウスオーバー／アウト時 ******************** //
	
	$('#promotion').bind('mouseenter', function() {
		if (prTimerFlag && prMx != 0) {
			prTimering = false;
			prTimerCount = 0;
		}
	});
	$('#promotion').bind('mouseleave', function() {
		if (prTimerFlag && prMx != 0) {
			prTimering = true;
			if (!prAnimating && (prLoopFlag || prNums[2] != prMx)) {
				setPrTimer();
			}
		}
	});
});





/*------------------------------------------------------*/
/* End */
/*------------------------------------------------------*/

