/*
 * Amazon saisoku kensaku (beta) 2005-06-20
 * by ma.la < http://ma.la/ >
 * 
 * This script is under Artistic License.
 * ↓ライセンスはこれにします
 * http://www.opensource.jp/artistic/ja/Artistic-ja.html
 *
 * 
 * amazon-search.js
 *      Update by JJWorkshop HIRO.  2006/11/06
 *      Update by JJWorkshop HIRO.  2006/11/15  カート処理を追加
 */

// 任意で書き換えること ------------------------------
var asid = "jjworkshop-22";
// 必ず書き換えること --------------------------------
var devt = "0FKAMGY87M2HE0EC8482";
// ---------------------------------------------------

// Amazonカテゴリ検索用URL
var sUrl = 'http://www.amazon.co.jp/exec/obidos/external-search/?';


var dom = {};
var AWS3 = {};
var ASIN = {};
var box;
var wait = 1100;
var lasttime = new Date().getTime();
var mode = "books-jp";
var KC = {
	 up   : 38
	,down : 40
};
var searchname = {
	 "books-jp"       : "和書"
	,"books-us"       : "洋書"
	,"music-jp"       : "ポピュラー音楽"
	,"classical-jp"   : "クラシック"
	,"dvd-jp"         : "DVD"
	,"vhs-jp"         : "ビデオ"
	,"electronics-jp" : "電化製品"
	,"software-jp"    : "ソフトウェア"
	,"videogames-jp"  : "ゲーム"
	,"kitchen-jp"     : "ホーム＆キッチン"
	,"toys-jp"        : "おもちゃ＆ホビー"
	,"sporting-goods-jp" : "スポーツ"
	,"hpc-jp"         : "ヘルス＆ビューティ"
};
function gid(id){return document.getElementById(id)}
function keydown(e){
	var c = e.keyCode;
	if(c == KC.up){
		rotate(-1)
	}else if(c == KC.down){
		rotate(1)
	}
}
function rotate(num){
	var sel = gid("st");
	var cur = sel.selectedIndex;
	cur+=num;
	if(sel.options.length > cur && cur >= 0){
		sel.options[cur].selected = true;
		mode = sel.options[cur].value;
	}
}
function Query(o){
	for(var i in o){this[i] = o[i]}
	this.toString = function(){
		var request = this.mode+"_"+this.query+"_"+this.page;
		return request;
	};
	this.set = function(o){
		for(var i in o){this[i] = o[i]}
	}
}
function do_search(pg){
	box = gid("results");
	var pagemax = 21;
	var query = $F('q');
	if(!query){return}
	var q = new Query({
		query : query,
		mode : $F('genre')
	});
	
	// ページ情報を保存しておく
	$('p').value = pg;
	
	q.set({page:pg});
	if(pg == pagemax){
		box.innerHTML = [
			'<div class="search_results"><div class="button"><a href="javascript:clearResults();" title="検索結果をクリア" class="close">検索結果をクリア</a></div>',
			'<p>過負荷防止のためこれ以上検索できません。<p>',
			'<div class="search_results"<span><a href="javascript:do_search(',
			(pg-1),
			')">',
			'&#171; 前ページ表示</a>　　</span></div>'
		].join("");
		return;
	}
	box.innerHTML = [
		'<div class="search_results"><img class="wait" src="/img/load_data.gif" width="280" height="22"><p>Amazonの',
		searchname[q.mode],
		"から <strong>",
		q.query,
		"</strong> を検索しています。</p></div>" 
	].join("");
	AWS3[q+"_onload"] = make_func(q,box);
	do_request(q,box);
}
function do_request(q,d){
	var now = new Date().getTime();
	if(now - lasttime < wait){
		var func = function(){do_request(q,d)}
		setTimeout(func,500);
		return;
	}
	import_data(q);
	lasttime = now;
}
function make_func(query,d){
	var mode = query.mode;
	var keyword = query.query;
	var page = query.page;
	return function(){
		var nowPage = parseInt($('p').value);
		var pgCount = parseInt((AWS3[query].total + 9) / 10);
		var buf = [];
		var isBingo = 1;
		if (AWS3[query].total == 0)	{
		    buf.push([
				'<div class="search_results"><div class="button"><a href="javascript:clearResults();" title="検索結果をクリア" class="close">検索結果をクリア</a></div>',
				'<p>',
				searchname[mode],
				"から <strong>",
				keyword,
				"</strong> に該当するデータが見つかりませんでした。<br /><br />"
		    ].join(''));
		    isBingo = 0;
		}
		else	{
			buf.push(
				'<div class="search_results"><div class="button"><a href="javascript:clearResults();" title="検索結果をクリア" class="close">検索結果をクリア</a></div>',
				'<p>Amazonの',
				searchname[mode],
				"から <strong>",
				keyword,
				"</strong> を検索した結果 <strong>",
				AWS3[query].total,
				'</strong> 件見つかりました。（',
				(10*(page-1)+1),
				'件目～',
				(Math.min(page*10,AWS3[query].total)) - (10*(page-1)+1) + 1,
				'件表示）',
				'</p>'
			);
			if (nowPage > 1) {
				buf.push([
					'<span><a href="javascript:do_search(',
					(nowPage-1),
					')">',
					'&#171; 前ページ表示</a>　　</span>'
				].join(''));
			}
			
			if (nowPage < pgCount) {
				buf.push([
					'<span><a href="javascript:do_search(',
					(nowPage+1),
					')">',
					'次ページ表示 &#187;</a></span>'
				].join(''));
			}
			
			if (pgCount == 1) buf.push('<br />');
			
		}
		
		if (isBingo)	{
			buf.push('</div><hr /><div class="search_results"><span">マウスポイントをイメージに乗せると詳細表示します。</span></div>');
	
			var items = AWS3[query].items;
			for(var i=0;i<items.length-1;i++){
				var c = items[i];
				ASIN[c.asin] = c;
				buf.push(
					"<a class='syohin' href='http://www.amazon.co.jp/exec/obidos/ASIN/"
					,c.asin,"/ref=nosim/",asid
					,"' target='_new'"
					," onmouseover='showinfo(\"",c.asin,"\")'"
					," onfocus='showinfo(\"",c.asin,"\")'"
					,">"
					,"<img src='http://images-jp.amazon.com/images/P/"
					, c.asin
					//, ".09.LZZZZZZZ.jpg'",
					//, ".09.MZZZZZZZ.jpg'",
					, ".09.THUMBZZZ.jpg'",
					' onload="replaceImage(this,',
					"'",
					c.title,
					"'",
					',false)"' ,">"
					,"</a>"
				);
			}
			
			buf.push("<br clear='all'></div><div id='detail'><hr /></div>")
			buf.push(
				'<div class="search_results"><span"><a href="',
				sUrl,
				'mode=',
				mode,
				'&keyword=',
				keyword,
				'&tag=',
				asid,
				'" target="_blank">',
				' <strong>',
				keyword,
				'</strong> を Amazon! 検索サイトの「',
				searchname[mode],
				'」から検索表示 &#187;</a><br /><a href="http://www.amazon.co.jp/gp/cart/view.html" target="_blank">Amazonのカートの中身を見る &#187;</a></span></div>'
			);
			buf.push('<p class="copyright"><a href="http://www.amazon.co.jp/" target="_blank"><img src="/img/amazon1.gif" title="Webサービス by Amazon" alt="Web Services by Amazon" width="88" height="22" border="0" style="margin:0px 4px 4px 15px"></p>')
		}
		d.innerHTML = buf.join("");

	};
}
function f_rate(n){
 var r=(Math.floor(n/0.5)*5).toString();
 return r.charAt(0)+"-"+r.charAt(1);
}
function import_data(q){
	var s = document.createElement("script");
	s.charset = "UTF-8";
	var type = "lite"; //"heavy"
	//s.src = "aws.js";
	s.src = [
		"http://xml-jp.amznxslt.com/onca/xml3?t="
		,asid,"&dev-t=",devt
		,"&KeywordSearch=",encodeURI(q.query),"&mode=",q.mode
		//,"&BlendedSearch=",encodeURI(query)
		,"&type=",type
		,"&page=",q.page,"&f="
		,"http://jjworkshop.com/xmls/aws2json.xsl",
		"&locale=jp"
	].join("");
	document.body.appendChild(s);
}
function showinfo(asin){
	var c = ASIN[asin];

	var ct  = [];
	ct.push(
		 '<form method="POST" target="_new" action="http://www.amazon.co.jp/gp/aws/cart/add.html">'
		,'<input type="hidden" name="ASIN.1" value="'
		,c.asin
		,'">'
		,'<input type="hidden" name="Quantity.1" value="1">'
		,'<input type="hidden" name="AssociateTag" value="'
		,asid
		,'">'
		,'<input type="hidden" name="SubscriptionId" value="'
		,devt
		,'">'
		,'<input class="ct" type="submit" name="submit.add-to-cart" value="カートに入れる"></form>'
	);
	

	var buf = [];
	buf.push(
//		"<div class='detail'>"
		"<h2>",c.title,"</h2>"
		,"<a class='syohin' href='http://www.amazon.co.jp/exec/obidos/ASIN/"
		,c.asin,"/ref=nosim/",asid
		,"' target='_new'"
		,">"
		,"<img src='http://images-jp.amazon.com/images/P/"
		, c.asin
		, ".09.MZZZZZZZ.jpg'",
		' onload="replaceImage(this,'
		,"'"
		,c.title
		,"'"
		,',true)"' ,">"
		,"</a>"
		,'<div class="info">ASIN : ',c.asin,"</div>"
		,f_detail(c)
		,(c.rate?
			[
			"<img src='http://g-images.amazon.com/images/G/01/detail/stars-"
			,f_rate(c.rate)
			,".gif' title=",
			,c.rate
			,">"
			].join("")
		:"")
		,'<br clear="all"><div class="cart">' + ct.join("") + '</div><br clear="all"><hr />'
//		,"</div>"
	)
	gid("detail").innerHTML = buf.join("");
}
function f_detail(c){
	var buf = [];
	buf.push("<div class='info'>");
	var name = {
		Manufacturer: "出版社"
		,OurPrice   : "販売価格"
		,ListPrice  : "価格"
		,UsedPrice  : "新品/ユーズド価格 "
		,pubDate    : "発売日"
		,rank       : "セールスランク"
		,Media      : "種別"
		,isExist    : "在庫"
	};
	var yen = function(v){return v+"円"}
	var rank = function(v){return v+"位"}
	var zaiko = function(v){return (v?"○":"？")}
	var format = {
		OurPrice : yen
		,ListPrice: yen
		,UsedPrice: yen
		,rank     : rank
		,isExist  : zaiko
	}
	if(c.creator.length == 1){
		for(var i=0;i<c.creator.length;i++){
			buf.push("著者: ",c.creator[i],"<br />")
		}
	}
	for(i in name){
		if(i in c && c[i] != ""){
			if(format[i]){
				buf.push(name[i]," : ",format[i](c[i]),"<br />")
			}else{
				buf.push(name[i]," : ",c[i],"<br />")
			}
		}
	}
	buf.push("</div>");
	return buf.join("");
}
function replaceImage(img,title,isRg){
	var noImg = false;
	var as_reg = new RegExp("P\\/(.*?)\\.");
	if (img.width == '1' && img.src.match(/\.01\./)) {
		noImg = true;
	} else if (img.width == '1') {
		img.src = img.src.replace('.09.','.01.');
	} else{
		// img.height = img.height * 2;
		// img.width = img.width * 2;
		if (img.height == 9 && img.width == 9)	{
			// 何故か IE6 だとこうなる？？？
			noImg = true;
		}
	}
	
	if (noImg)	{
		// 文字をはり付ける場合場合
		var div = document.createElement("div");
		if (isRg)	{
			div.className = "replace-L";
		}
		else	{
			div.className = "replace";
		}
		div.innerHTML = title;
		try {
			img.parentNode.appendChild(div);
			img.parentNode.removeChild(img);
		} catch (e) {}
		// イメージ無しの画像をはり付ける場合
		/* 
		img.src = "/img/noimg.png";
		img.height = 75;
		img.width = 53;
		if (title)	{
			img.title = title;
		}
		else	{
			img.title = "No image.";
		}
		*/
	}
}

