/* 
 * ----------------------------------------------------------------
 * ItemSearch_ver2.0.0
 * [Description]
 *	カテゴリーテーブル画面効果の定義
 *  This library is required "prototype.js".
 *
 *
 * [Date]
 *	2007/12/26 ver1.0
 *
 * ----------------------------------------------------------------
 */

/*

	[Global Variables]
	slideshow 	: スライドショーエリア
	slidearea 	: スライドエリア
	scroll		: スライド量
	presentX	: スライドエリアleft座標
	moveX		: スライドエリア移動目標left座標
	parentX		: スライドショーエリアwidth
	childX		: スライドエリアwidth
	timer		: タイマー
	activesheet	: 移動シート
	activesheet2: サブシート
	clonesheet	: 待機用シート
	sw			: 移動方向制御
	permit		: 移動中フラグ
	speed		: 調整スピード
 */
 
// ---------------------------------------------------------------- 

//
// Global Variables
//
var slideshow 	= "slideshow";
var slidearea 	= "slidearea";
var scroll		= 2 * 140;		// 2つ移動
var presentX	= 0;
var moveX		= 0;
var parentX		= 0;
var childX		= 0;
var timer		= '';
var timer2		= '';
var obj;
var activesheet;
var activesheet2;
var clonesheet;
var sw ;
var permit = 0;
var speed = 1.0;

// ----------------------------------------------------------------
// Common 
// ----------------------------------------------------------------
Function.prototype.bind = function(){
    var method = this;
    var object = arguments[0]
    return function(){
        return method.apply(object, arguments);
    }
}

// ----------------------------------------------------------------
// Class GoodsShow
// ----------------------------------------------------------------


function GoodsShow() {}
GoodsShow.prototype = {
	
	// init()
	// 初期処理
	init: function() {
		if (!($(slideshow)) || !($(slidearea))) {
			return false;
		}
		parentX = parseInt($(slideshow).style.width);
		childX  = parseInt($(slidearea).style.width);
		
		activesheet = $(slidearea);
		
		clonesheet = activesheet.cloneNode(true);
		clonesheet.setAttribute("id", "clone");
		
		timer2 = setInterval(this.next_page.bind(this), 3000);
		$(slideshow).onmouseover = function(e){ clearInterval(timer2); };
	},
	
	// next_page()
	// 次ページスライド
	next_page: function() {
		if(permit) return;
		
		if(activesheet2){
			var left = parseInt(activesheet.style.left);
			var left2 = parseInt(activesheet2.style.left);
			if((left2 + childX - 3) < 0){
				$(slideshow).removeChild(activesheet2);
				activesheet2 = null;
			}
			else if((left + childX) - 3 < 0){
				$(slideshow).removeChild(activesheet);
				activesheet = activesheet2;
				activesheet2 = null;
			}
		}
		
		var left = parseInt(activesheet.style.left);
		if((left + childX - scroll) < parentX){
			if(!activesheet2){
				activesheet2 = clonesheet.cloneNode(true);
				activesheet2.style.left = left + childX + "px";
				$(slideshow).appendChild(activesheet2);
			}
			else if((left + childX - 3) < 0){
				$(slideshow).removeChild(activesheet);
				activesheet = activesheet2;
				activesheet2 = null;
			}
		} 

		sw = -1;
		this.slideshow();
		
	},

	// prev_page()
	// 前ページスライド
	prev_page: function() {
		if(permit) return;
		
		if(activesheet2){
			var left = parseInt(activesheet.style.left);
			var left2 = parseInt(activesheet2.style.left);
			if(left2 + 3 > parentX){
				$(slideshow).removeChild(activesheet2);
				activesheet2 = null;
			}
			else if((left + 3) > parentX){
				$(slideshow).removeChild(activesheet);	
				activesheet = activesheet2;
				activesheet2 = null;
			}
		}
		
		var left = parseInt(activesheet.style.left);
		if(0 < (left + scroll)) {
			if(!activesheet2){
				activesheet2 = clonesheet.cloneNode(true);
				activesheet2.style.left = left - childX + "px";
				$(slideshow).insertBefore(activesheet2, activesheet);
			}
			else if(left + 3 > parentX){
				$(slideshow).removeChild(activesheet);	
				activesheet = activesheet2;
				activesheet2 = null;
			}
		}
		
		sw = 1;
		this.slideshow();
		
	},

	// slideshow()
	// スライド処理開始
	slideshow: function() {
		permit = 1;
		presentX = 0;
		timer = setTimeout(this.calcmove.bind(this), 40);
	},

	// calcmove()
	// スピード調整等
	calcmove: function(){
		sp = Math.ceil(((scroll - presentX) / 10) * speed);
		presentX = presentX + Math.abs(sp);
		this.movegoods(sp);
		if (Math.floor(scroll - presentX) > 0) {
			timer = setTimeout(this.calcmove.bind(this), 30);
		}
		else {
			clearTimeout(timer);
			permit = 0;
		}
	},
	
	// movegoods()
	// 商品エリアタグ移動
	movegoods: function(sp) {
		(sw < 0) ? sp = -sp : sp = Math.abs(sp)
		if(activesheet2)
			activesheet2.style.left = parseInt(activesheet2.style.left) + sp + "px";
		if(activesheet)
			activesheet.style.left = parseInt(activesheet.style.left) + sp + "px";
	}
	
}

// オブジェクト生成，初期処理
var showgoods = new GoodsShow();
window.onload = function(e){ showgoods.init(); };
