// Get Target BestSeller's info using Ajax.

var req = null;		// XMLHttpRequest() のオブジェクト。

var genre = new Array(
'Books',				// '和書',
'ForeignBooks',		// '洋書',
'Music',				// 'ミュージック',
'DVD',					// 'DVD',
'Electronics',			// 'エレクトロニクス',
'Kitchen',				// 'ホーム＆キッチン',
'Software',			// 'ソフトウェア',
'VideoGames',		// 'ゲーム',
'Toys'					// 'おもちゃ＆ホビー'
		);

var requestUrl =  '/dig/topsellers.php?req=js&SearchIndex=';

var lastTop = '';
var nextTop = null;

var tm = null;	// Timer Object
var thisPos = 0;
var nextPos = 380;
var outPos = thisPos;
var inPos = nextPos;
var slideCount = nextPos / 5;	// 10回書き替える
var interval = 5;	// 割り込み間隔
var hideOffset = '-380px';

var catId  = '';		// 現在表示しているカテゴリー名が入っている div タグの id
var listA = null;
var listB = null;

var alertObj = null;	// データを取得中（Loading）に表示するメッセージ用オブジェクト

var thisRank = 'topRankA';
var nextRank = 'topRankB';

function init(value) {
	// 書き替え：<a href="javascript:;" onclick="getBestSeller('Books')">
	for ( i = 0; i < 9; i++ ) {
		id = 'g' + (i +1);
		thisNode = document.getElementById(id);
		childNode = thisNode.firstChild;
		childNode.setAttribute('href', 'javascript:;');
	}
	/*
	lastTop = getCookie('Top');
	if (lastTop == '') {
		setCookie('Top', value);
		lastTop = value;
	} else {
		if (value != lastTop) {
			doRequest(lastTop);
		}
	}
	*/
}

// サーバと通信してデータを取得する
function loadXMLDoc(url) {
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		req.abort();
		req.onreadystatechange = putBestSellers;
		req.open("GET", url, true);
		req.send(null);
	// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.abort();
			req.onreadystatechange = putBestSellers;
			req.open("GET", url, true);
			req.send();
		}
	}
}

// 通信により取得したデータを反映させる。
function putBestSellers() {
	switch (req.readyState) {
	  case 1:
		alertObj = document.getElementById('alert');
		alertObj.innerHTML = '<br />Loading...';
		alertObj.style.visibility = 'visible';
		break;
	  case 4:
		if (req.status == 200) {
			// alertObj を隠す
			alertObj.style.visibility = 'hidden';
			alertObj.innerHTML = '&nbsp';
			// オブジェクトをスライドして入れ替える。
			outPos = thisPos;
			inPos = nextPos;
			listA = document.getElementById(thisRank);
			// 次に表示するエレメント
			listB = document.getElementById(nextRank);
			// 新しいランキングリストを作成。
			listB.innerHTML = req.responseText;
			slideChange();
		} else {
			alertObj.style.visibility = 'hidden';
			alertObj.innerHTML = '&nbsp';
			window.alert("データの取得に失敗しました。ページを再読み込みしてください。");
		}
		break;
	  default:
	}
}

// クリックしたカテゴリと入れ替える
function slideChange() {
	if (listA.style.left == hideOffset) {	// スライド終了？
		listA.style.left = nextPos + 'px';	// 置き換え用の位置に移動させる
		// 次の置き換えのために id の値を入れ替えておく
		if (thisRank ==  'topRankA') {
			thisRank = 'topRankB';
			nextRank = 'topRankA';
		} else {
			thisRank = 'topRankA';
			nextRank = 'topRankB';
		}
		lastTop = nextTop;
		// タイマー割り込みを終了する
		clearTimeout(tm);
		//setCookie('Top', lastTop);
	} else {
		outPos -= slideCount; inPos -= slideCount;
		listA.style.left = outPos + 'px';
		listB.style.left = inPos + 'px';
		tm = setTimeout("slideChange()", interval);
	}
}

//リクエスト送信
function doRequest(value) {
	nextTop = value;
	var url = requestUrl + nextTop;
	try {
		loadXMLDoc(url);
	} catch(e) {
		alert('データを取得できませんでした。ページを再読み込みしてください。');
	}
}

// onClick()コマンド
function getBestSeller(value) {
	if (lastTop == value) {
		return;
	}
	doRequest(value);
}

/* for Cookie */
// pName : Cookie保存の項目名
// pValue : その値
function setCookie(pName,pValue){
	if ((pName != null) && (pValue != null)) {
		t = new Date();
		t.setTime(t.getTime()+(30*1000*60*60*24));
		expt = t.toGMTString();
		document.cookie = pName+"="+escape(pValue)+";expires="+expt;
	}
	return false;
}

// pName : Cookeからロードする値の項目名を指定
function getCookie(pName){
	pName += "=";
	cookies = document.cookie+";";
	start = cookies.indexOf(pName);
	if (start != -1){
		end = cookies.indexOf(";",start);
		return unescape(cookies.substring(start+pName.length,end));
	}
	return false;
}

