
//［送信］ボタンをクリック時の処理を定義
var xmlDocument = null;
var xmlReview = null;
var xsltDocument = null;
var xsltReview = null;
var xsltInfo = null;
var gpage = 1;
var greviewpage;
var gkeyword;
var gindex;
var gorder = 0;
var grevieworder = 0;
var gasin = "";
var gparam;
var totalpage;
var totalreviewpage;
var enable = false;

//preload キャッシュの初期化
var caches = [[null,null],[null,null],[null,null]];
var reviewcaches = [[null,null],[null,null],[null,null]];

//文字点滅
var msgi = 0;
msg = new Array();

msg[0] = "通信中…";
msg[1] = " 　　 ";

//変数の初期化
function seachinit( ){
var node;
  node = document.getElementById("result");
  node.innerHTML="";
  node = document.getElementById("review");
  node.innerHTML="";
  node = document.getElementById("paging");
  node.innerHTML="";
  node = document.getElementById("reviewp");
  node.innerHTML="";
  gorder = 0;
  greviewpage = 1;
  totalpage=0;
  totalreviewpage=0;
  xsltDocument = xsltproc( );
//  xsltInfo = infoproc( );
  xsltReview = reviewproc( );
}

//別のページに飛んだ時の処理
function precheck(page){

  gpage = page;
  greviewpage = 1;
  gparam = "view.php?keyword=" + encodeURI(gkeyword) + "&index=" + gindex +  "&browsenode=" + gbrowsenode + "&page="+ gpage;
      	for (j = 0; j < caches.length; j++){　	//既に読み込んでいるか判断
 		if (caches[j][0] == gparam){
		  if (gorder != 0){
			gorder = 0;
			xsltDocument = xsltproc( );	//ソート順をクリア
		  }
		  onloaddata( caches[j][1] );	//読み込んだデータの処理
		  preload( );			//次ページの読み込み
		  preloadreview( );
		  return;
		}
    	}
  search( );
}
// ジャンルのリンクをクリックした時の処理
function init(index,browsenode){
	gkeyword = "";
	gindex = index;
	gbrowsenode = browsenode;
	precheck(1);
	searchBrowsenode(browsenode);
}

//メインジャンルを指定した時の処理
function searchcheck( ){
	gkeyword = "";
  	gindex = encodeURI(document.fm.index.value);

	switch(gindex){
	case "Books":
	    gbrowsenode = 465610;
	　　break;
	case "Music":
	    gbrowsenode = 562032;
	　　break;
	case "ForeignBooks":
	    gbrowsenode = 52231011;
	　　break;
	case "Video":
	    gbrowsenode = 562002;
	　　break;
	case "Kitchen":
	    gbrowsenode = 3828871;
	　　break;
	case "Electronics":
	    gbrowsenode = 3210991;
	　　break;
	case "Software":
	    gbrowsenode = 637630;
	　　break;
	case "VideoGames":
	    gbrowsenode = 637872;
	　　break;
	case "Toys":
	    gbrowsenode = 13299551;
	　　break;
	case "SportingGoods":
	    gbrowsenode = 14315361;
	　　break;
	case "HealthPersonalCare":
	    gbrowsenode = 161669011;
	　　break;
	case "Watches":
	    gbrowsenode = 331952011;
	　　break;
	case "Baby":
	    gbrowsenode = 344919011;
	　　break;
	case "Apparel":
	    gbrowsenode = 361245011;
	　　break;
	case "default":
	    return;
	}

	precheck(1);
	searchBrowsenode(gbrowsenode);
}

//別のページに飛んだ時の処理 (レビュー)
function reviewup(page){
  greviewpage = page;
  var param = "view.php?operation=ItemLookup&asin=" + gasin + "&page="+ greviewpage;
      	for (j = 0; j < reviewcaches.length; j++){　	//既に読み込んでいるか判断
 		if (reviewcaches[j][0] == param){
		  onloadreview( reviewcaches[j][1] );	//読み込んだデータの処理
		  preloadreview( );			//次ページの読み込み
		  return;
		}
    	}
  searchreview( );
}

//［検索］ボタンをクリック時のキーワードの入力チェック
function keywordcheck( ){
	gkeyword = document.fmkey.keyword.value;
	if (gkeyword == "") {
	result.innerHTML="入力されていません。";
	}
	else{
	precheck(1);
	}
	return false;
}

//データをアマゾンのサーバから取得する
function search( ){
  //サーバーからの応答時の処理を定義
  var callback = function (data){
	onloaddata(data);
	caches.unshift([gparam,data]);
	caches.pop();
	preload( );
   	preloadreview( );
  };
  //データ取得前の準備
  seachinit( );		//変数の初期化
  enable = true;
  Loopmsg( );
  //キーワードのリクエスト設定
  var jkl = new JKL.ParseXML.DOM(gparam);  // 送信先URLの指定
  jkl.async(callback);  // 非同期通信の設定
  jkl.parse();          // リクエスト開始
}

//データをアマゾンのサーバから取得する (レビュー)
function searchreview( ){
  //サーバーからの応答時の処理を定義
  var callback = function(data){
	onloadreview(data);
	reviewcaches.unshift([param,data]);
	reviewcaches.pop();
	preloadreview( );
  };
  //読み込むページの設定
  //レビューのリクエスト設定
  var param = "view.php?operation=ItemLookup&asin=" + gasin + "&page="+ greviewpage;
  var jkl = new JKL.ParseXML.DOM(param); 
  jkl.async(callback);  // レビュー　非同期通信の設定
  jkl.parse( );          // リクエスト開始
}

//データ取得後の処理
function onloaddata(data){
  enable = false;
  xmlDocument=data;
  xmlReview=data;			//ItemSearchResponse
  if (!returnproc( )){
	return;
  }
  appendXslt(xmlDocument,xsltDocument,"result",gasin,window.self);
  appendXslt(xmlDocument,xsltReview,"review",gasin,window.self);
  document.getElementById("review").scrollTop = 0;
  totalreviewpage = getTotalreviewpage(xmlDocument);
  var node = document.getElementById("paging");
  node.innerHTML = paging(gpage,totalpage,"precheck",2);
  var node = document.getElementById("reviewp");
  node.innerHTML = paging(greviewpage,totalreviewpage,"reviewup",1);
}

//データ取得後の処理 (レビュー)
function onloadreview(data){
  xmlReview=data;
  appendXslt(xmlReview,xsltReview,"review",gasin,window.self);
  document.getElementById("review").scrollTop = 0;		
  var node = document.getElementById("reviewp");
  node.innerHTML = paging(greviewpage,totalreviewpage,"reviewup", 1);
}

//次ページの先読み
function preload( ){
  //サーバーからの応答時の処理を定義（結果のテンプレートへの反映）
  var callback = function (data){
	caches.unshift([param,data]);
	caches.pop();
  };
　//次ページ キーワードのリクエスト設定
  var nextpage = gpage + 2;
  var param = "view.php?keyword=" + encodeURI(gkeyword) + "&index=" + gindex +  "&browsenode=" + gbrowsenode + "&page="+ nextpage;
　//既に読み込んでいるか判断
  for (j = 0; j < caches.length; j++){
 		if (caches[j][0] == param){
		  return;
		}
  }
  var jkl = new JKL.ParseXML.DOM(param);  // 送信先URLの指定
  jkl.async(callback);  // 非同期通信の設定
  jkl.parse();		// リクエスト開始
}

//次ページの先読み (レビュー)
function preloadreview( ){
  //サーバーからの応答時の処理を定義（結果のテンプレートへの反映）
  var callback = function (data){
	reviewcaches.unshift([param,data]);
	reviewcaches.pop();
  };
　//次ページ キーワードのリクエスト設定 (レビュー)
  var nextpage = greviewpage + 1;
  var param = "view.php?operation=ItemLookup&asin=" + gasin + "&page="+ nextpage;
　//既に読み込んでいるか判断
  for (j = 0; j < reviewcaches.length; j++){
 		if (reviewcaches[j][0] == param){
		  return;
		}
  }
  var jkl = new JKL.ParseXML.DOM(param);  // 送信先URLの指定
  jkl.async(callback);  // 非同期通信の設定
  jkl.parse();		// リクエスト開始
}

//検索結果があるか判定
function returnproc( ){
	var node;
  	if (xmlDocument == null){
  		node = document.getElementById("result");
		node.innerHTML="データが取得できませんでした";
		return false;
  	}
  	var nodes =  getNodeElement(xmlDocument,"Items");	//Items[0]
  	if (nodes != null){
		var itemnode = getNodeElement(nodes,"Item");
  		if (itemnode != null){
			gasin = getNodeValue(itemnode,"ASIN");
			totalpage = getNodeValue(nodes,"TotalPages");		
			return true;
  		}
	}
  	node = document.getElementById("result");
	node.innerHTML="検索に一致する商品はありませんでした";
	return false;
}

//通信中…
function Loopmsg( ){
  if (enable){
	if (msgi < msg.length) { //msg.lengthは配列の数
  		var node = document.getElementById("result");
		node.innerHTML = msg[msgi];
		msgi++;
		if (msgi == msg.length) {
			msgi = 0;
		}
		setTimeout("Loopmsg( )", 200);
	}
  }
  else{
  	msgi=0;
  }
}

//ソートの処理
function orderchange( ){
	if (gorder < 2) { //msg.lengthは配列の数
		gorder++;
		if (gorder == 2) {
			gorder = 0;
		}
	}
  	xsltDocument = xsltproc( );
	appendXslt(xmlDocument,xsltDocument,"result",gasin, window.self);
}

//ソートの処理　レビュー
function orderchangereview( ){
	if (grevieworder < 2) { //msg.lengthは配列の数
		grevieworder++;
		if (grevieworder == 2) {
			grevieworder = 0;
		}
	}
	xsltReview = reviewproc( );
	appendXslt(xmlDocument,xsltReview,"review",gasin,window.self);
	document.getElementById("review").scrollTop = 0;
}

//タイトルをクリックした時の詳細、レビューの処理
function viewchange(xml,asin,page){
	gasin=asin;
	totalreviewpage=page;
	greviewpage = 1;
	appendXslt(xml,xsltDocument,"result",gasin,window.self);
	appendXslt(xml,xsltReview,"review",gasin,window.self);
	document.getElementById("review").scrollTop = 0;
	var node = document.getElementById("reviewp");
  	node.innerHTML = paging(greviewpage,totalreviewpage,"reviewup",1);
	preloadreview( );
}
//商品の説明を表示
function openintro( ){
  xsltIntro = introproc( );
  var w = window.open('intro.html','introwin','resizable=yes,scrollbars=yes,status=yes,width=400');
  appendXslt(xmlDocument,xsltIntro,"intro",gasin,w);
}

function searchBrowsenode(browsenode) {
	document.getElementById("browsemenu").innerHTML="";
	gbrowsenode = browsenode;
// サーバーからの応答時の処理を定義（結果のテンプレートへの反映）
    	var callback = function(data){
		var str=""; 
		var i;

		var ancesstr="";
		var s="";

	  	if ("Ancestors" in data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"] ){
	    		var ancestors = data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"]["Ancestors"]
			while (ancestors != null) {
				s="";
				s += '<a href="javaScript:init(';
				s += "'" + gindex + "',";
				s += ancestors["BrowseNode"]["BrowseNodeId"];
				s += ')">';
				s += '&gt;&gt;' + ancestors["BrowseNode"]["Name"] + '</a><br />';
				ancesstr = s + ancesstr;

				if ("Ancestors" in ancestors["BrowseNode"]){
					ancestors = ancestors["BrowseNode"]["Ancestors"];
				}
				else{
					break;
				}

		  	}
		}

		str += '<h3>' + ancesstr;

		str += '&gt;&gt;';
		str += data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"]["Name"];
		str += '</h3>';

		str +='<div id="browsenode">';

	 	if ("Children" in data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"] ){
			for (i in data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"]["Children"]["BrowseNode"]) {
				str += '<a href="javaScript:init(';
				str += "'" + gindex + "',";
				str += data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"]["Children"]["BrowseNode"][i]["BrowseNodeId"];
				str += ')">';
				str += data["BrowseNodeLookupResponse"]["BrowseNodes"]["BrowseNode"]["Children"]["BrowseNode"][i]["Name"] + '</a><br>';
			}
			str +='</div>';
			str += '<form name="fmkey" class= "fmmenu" action="#" onSubmit="return keywordcheck( );">';
			str += 'キーワード: <br />';
			str += '<input type="text" name="keyword" size="24" maxlength="60" /><br />';
			str += '<input type="button" value="検索" onclick="return keywordcheck( );" style="font-size:10px; background:#ffffff; cursor: pointer" />';
			str += '</form><br /><br />';
			str += '<p>さらに詳しいジャンルを指定するか、キーワードを入力してください。</p>';
	 	}


		document.getElementById('browsemenu').scrollTop = 0;
		document.getElementById('browsemenu').innerHTML = str;

    	};

	var jkl = new JKL.ParseXML('amazonbrowsenode.php?browsenode=' + browsenode);  // 送信先URLの指定
	jkl.async(callback);  // 非同期通信の設定
	jkl.parse();          // リクエスト開始
}
