/**
 * Google Search API (Web Custom Search)
 * http://tenderfeel.xsrv.jp/memo/494/
 */

var siteSearch,serchresult,Contents;

function searchLoaded() {
	
	var serchform = document.getElementById(gsConfig.formID);
	serchresult = document.getElementById(gsConfig.resultID);
	Contents =  serchresult.innerHTML;
	siteSearch = new google.search.WebSearch();
	siteSearch.setResultSetSize(google.search.Search.LARGE_RESULTSET);

	siteSearch.setNoHtmlGeneration();
	
	siteSearch.setSiteRestriction(gsConfig.searchID);
	siteSearch.setSearchCompleteCallback(null, OnSearch,[siteSearch]);
	
	var gSearchForm = new google.search.SearchForm(true, serchform);
    gSearchForm.setOnSubmitCallback(null, SubmitForm);
	gSearchForm.setOnClearCallback(this, Reset);
	//gSearchForm.userDefinedCell.innerHTML="サイト内検索";
}
function Reset(){
	OnClear();
	serchresult.innerHTML = Contents;
}
function OnClear(){
	while (serchresult.firstChild) {
      serchresult.removeChild(serchresult.firstChild);
    }
}
function OnSearch(searcher) {
	
	Contents =  serchresult.innerHTML;
	OnClear();
	
	var el = document.createElement("h1");
	if (siteSearch.cursor) {
			el.innerHTML ="サイト内検索結果<span>(<em>"+siteSearch.cursor.estimatedResultCount+"</em>件)</span>";
	}else{
		el.innerHTML = "サイト内検索結果";
	}
	el.className ="text";
    serchresult.appendChild(el);
	
	if (searcher.results && searcher.results.length > 0){
		
		for (var i = 0; i < searcher.results.length; i++) {
		
			var result = searcher.results[i];
			searcher.createResultHtml(result);
			if (result.html) {
				div = result.html.cloneNode(true);
			} else {
				div = createDiv("検索結果を作成出来ませんでした。");
			}
			serchresult.appendChild(div);
			}
			
			if (siteSearch.cursor) {
				var cursorNode = createDiv(null, "gsc-cursor");
				for (var i=0; i<searcher.cursor.pages.length; i++) {
				var className = "gsc-cursor-page";
				if (i == searcher.cursor.currentPageIndex) {
					className = className + " gsc-cursor-current-page";
				}
				var pageNode = createDiv(searcher.cursor.pages[i].label, className);
				pageNode.onclick = methodClosure(this, gotoPage,[searcher, i]); 
				cursorNode.appendChild(pageNode);
			}
			serchresult.appendChild(cursorNode);
			
			var more = createLink(searcher.cursor.moreResultsUrl,GSearch.strings["more-results"] + "&nbsp;&raquo;",GSearch.LINK_TARGET_SELF,"gsc-trailing-more-results");
			
			var morecursor = createDiv(null,"more-cursor");
			morecursor.appendChild(more);
			serchresult.appendChild(morecursor);
			
		}
	}else{
		div = createDiv("見つかりませんでした");
		serchresult.appendChild(div);
	}

}
function gotoPage(searcher,page) {
	searcher.gotoPage(page);
}
function methodClosure(object, method, opt_argArray) {
	return function() {
		return method.apply(object, opt_argArray);
	}
}
function createDiv(opt_text, opt_className) {
	var el = document.createElement("div");
	if (opt_text) {
		el.innerHTML = opt_text;
	}
	if (opt_className) { el.className = opt_className; }
	return el;
}
function createLink(href, opt_text, opt_target, opt_className, opt_divwrap) {
	var el = document.createElement("a");
	el.href = href;
	if (opt_text) {
		el.innerHTML = opt_text;
	}
	if (opt_className) {
		el.className = opt_className;
	}
	if (opt_target) {
		el.target = opt_target;
	}
	if (opt_divwrap) {
		var div = this.createDiv(null, opt_className);
		div.appendChild(el);
		el = div;
	}
	return el;
}
function SubmitForm(searchForm) {
	siteSearch.execute(searchForm.input.value);
	return false;
}

