﻿/**
 * 
 * 
 * 
 */
$(document).ready(function () {
	var config = {
	    siteURL : "toko-yakuhin.co.jp"
	  , perPage : 8
	  , page    : 0
	  , maxPage : 8
	}
	var main;



	// 検索フォーム送信処理
	$("#searchForm").submit(function () {
		if ($("#s").val() == "") {
			alert("検索キーワードを入力後、再度「サイト内検索」ボタンをクリックしてください。");
			$("#s").css("background", "#ffffa0").focus();
		}
		else {
			$("#s").css("background", "#ffffff")
			main = $(parent.document.body).find("div[id=my_contents]");
			$(main).empty();
			$(main).append($("<div></div>").attr("id", "resultsDiv"));
			$(main).append($("<div></div>").attr("id", "pageCtrl"));
			googleSearch();
		}
		return false;
	});

	/**
	 * Google検索処理
	 */
	function googleSearch (settings) {
		var i, j, k;
		var apiURL;
		var resultsDiv;
		var results;
		var pageContainer, ctrlContainer;
		var cursor;
		
		// 引数セット
		settings = $.extend({}, config, settings);

		// リクエストURL
		apiURL = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&callback=?";

		// クエリセット
		settings.term = settings.term || $("#s").val();
		settings.term = "site:" + settings.siteURL + " " + settings.term;

		resultsDiv = $(parent.document.body).find("div[id=resultsDiv]");
		$.getJSON(apiURL, { q:settings.term, rsz:settings.perPage, start:settings.page * settings.perPage }, function (r) {
			results = r.responseData.results;
			$("#more").remove();
			if (results.length) {
				pageContainer = $("<ol></ol>");
				for (i = 0; i < results.length; i++) {
					pageContainer.append(new result(results[i]) + "");
				}
				resultsDiv.empty();
				pageContainer.append('<div class="clear"></div>').hide().appendTo(resultsDiv).fadeIn("fast");

				// ページング
				cursor = r.responseData.cursor;
				resultPages = Math.ceil((+cursor.estimatedResultCount) / settings.perPage);
				if (resultPages > 1) {
					ctrlContainer = $("<ul></ul>");
					// <<
					if (settings.page > 0) {
							$("<li></li>").append($("<a></a>", {html: "&lt;-"}).attr("href", "javascript:void(0);").attr("data", settings.page-1).click(function () {
								j = Number($(this).attr("data"));
								googleSearch( {page: j} );
							})).appendTo(ctrlContainer);
					}
					if (resultPages < (settings.page+1)) {
						settings.page = resultPages-1;
					}
					for (i = 0; i < Math.min(resultPages, settings.maxPage); i++) {
						if (settings.page == i) {
							$("<li></li>").append( $("<b></b>", {html: "［" + (i+1).toString() + "］"}) ).appendTo(ctrlContainer);
						}
						else {
							$("<li></li>").append( $("<a></a>", {html: "［" + (i+1).toString() + "］"}).attr("href", "javascript:void(0);").attr("data", i).click(function () {
								j = Number($(this).attr("data"));
								googleSearch( {page: j} );
							})).appendTo(ctrlContainer);
						}
					}
					// <<
					if (settings.page < (Math.min(resultPages, (settings.maxPage))-1)) {
							$("<li></li>").append($("<a></a>", {html: "-&gt;"}).attr("href", "javascript:void(0);").attr("data", settings.page+1).click(function () {
								j = Number($(this).attr("data"));
								googleSearch( {page: j} );
							})).appendTo(ctrlContainer);
					}
					$(parent.document.body).find("div[id=pageCtrl]").empty().append($(ctrlContainer));
				}
			}
			else {
				resultsDiv.empty();
				$("<p>", { id: "notFound", html:"「" + $("#s").val() + "」に一致する情報は見つかりませんでした。" }).hide().appendTo(resultsDiv).fadeIn("fast");
			}
		});
	}

	/**
	 * 検索結果描画処理
	 */
	function result (r) {
		var arr = [];

		if (r.GsearchResultClass == "GwebSearch") {
			arr = [
				'<li>',
				'<p><a href="',r.unescapedUrl,'" target="_blank" title="',striptags(r.title),'">',striptags(r.title),'</a></p>',
				'<p>',striptags(r.content),'</p>',
				'<cite style="color:#008000; font-style:normal;">',r.url,'</cite>',
				'</li>'
			];
		}
		this.toString = function () {
			return arr.join("");
		}
	}
});

