/*
--------------------------------------------------------
suggest.js - Input Suggestion Module

Copyright (c) 2008-2009 おなかすいた族！

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   
--------------------------------------------------------
*/

var oldQuery="";
var isSuggesting=Boolean(false);
var suggestSelectIndex = -1;
var timerID;

function suggestOn(){
	isSuggesting=true;
	timerID = setInterval(function () { polling(); },500);
}

function suggestOff(){
	hideSuggestTimeout();
	clearInterval(timerID);
}

function polling(){
	var query=$F("query_form");

	if(query==""){
		hideSuggest();
		oldQuery="";
	}else{
		if(query!=oldQuery){
			var tab=$F("tab_form");
			loadSuggest(query,tab);
		}
	}
}

function loadSuggest(query,tab){
var msec = (new Date()).getTime();
	
	oldQuery = query;
	isSuggesting=true;
	ajax = new Ajax.Request(
	"api/suggest.php",
		{
			method:'get',
			parameters:"q="+query+"&t="+tab+"&salt="+msec,
			onComplete:suggestLoaded
		}
	);
}

function suggestLoaded(request) {
	
	$('suggest').innerHTML="";
	$('suggest').style.display = "block";

	obj=eval("(" + request.responseText + ")");

	if(obj != null){
		for(var i=0; i<obj.length; i++){
		
			var key=obj[i].keyword;
			var count=obj[i].count;
			var type=obj[i].type;

			elem = document.createElement("div");
			elem.id="suggested_div";
			var typeStr="";
			elem.innerHTML = "<div class=keyword>"+key +typeStr+"</div><div class=hitcount>&nbsp;</div>";
			
			elem.onmouseover = function() {
				this.className="select";
			}
			elem.onmouseout = function() {
				this.className="";
			}
			elem.keyword=key;
			elem.onclick = function() {
				$("query_form").value=this.keyword;
				hideSuggest();
				document.forms[0].submit();
			}
			$('suggest').appendChild(elem);
		}
		elem = document.createElement("div");
		elem.innerHTML = "<div class=suggest_close><a href='#' onClick='hideSuggest()';return false;\">閉じる</a></div>";
		$('suggest').appendChild(elem);
	}else{
		hideSuggest();

	}
}

function redrawSuggest(){
	var elem = $("suggest");
	var childs = elem.childNodes; 
	var count=childs.length -1;
	
	if(suggestSelectIndex<=-1)suggestSelectIndex=-1;
	if(suggestSelectIndex>=count)suggestSelectIndex=count-1;
	
	for(i =0;i< count;i++){
		if(i==suggestSelectIndex){
			childs[i].className="select";
		}else{
			childs[i].className="";
		}
	}
}

function jumpSuggest(){

	var elem = $("suggest");
	var childs = elem.childNodes; 
	var count=childs.length -1;
	var key="";

	if(suggestSelectIndex>-1){
		for(i =0;i< count;i++){
			if(i==suggestSelectIndex){
				key = childs[i].childNodes[0].childNodes[0].nodeValue;
			}
		}
		$("query_form").value=key;
		hideSuggest();
	}
	document.forms[0].submit();
}

var pk=new Array(10);
var kc=[38,38,40,40,37,39,37,39,66,65];
var fv=[32,32,32,32,32,32,32,32,32,32];

function ee(e){
        pk.shift();pk.push(e.keyCode);
        if(kc.join()==pk.join()){
                myLightWindow.activateWindow({href:"http://sc-smn.jst.go.jp/ayyyymm/meta/aB030601-151.asx",width:320,height:260,iframeEmbed:true,title:'まんじゅうができるまで'});
                suggestOff();
        }
        if(fv.join()==pk.join()){
                document.body.style.filter="flipH";
        }
        return e;
}

function hideSuggestTimeout(){
	isSuggesting=false;
	suggestSelectIndex=-1;

	setTimeout(function(){ $('suggest').style.display = "none"},500);
}

function hideSuggest(){
	isSuggesting=false;
	suggestSelectIndex=-1;

	$('suggest').style.display = "none";
}

function keyHandler(e) {
	e = e || window.event;
	switch(e.keyCode){
	case 13://enter
		enterCancel(e);
		jumpSuggest();
		break;
	case 27://esc
		hideSuggest();
		break;
	case 38://up
		if(isSuggesting)suggestSelectIndex--;
		redrawSuggest();
		break;
	case 40://down
		if(isSuggesting)suggestSelectIndex++;
		redrawSuggest();
		break;
	}
}

function enterCancel(e){
    if (e.preventDefault) {
      e.preventDefault();
    } else {
      e.returnValue = false;
    }
}

window.onload = function() {
	Event.observe(document, 'keydown', ee);
	
	Event.observe($('query_form'), 'keydown', keyHandler);
	Event.observe($('query_form'), 'focus', suggestOn);
	Event.observe($('query_form'), 'blur', suggestOff);


}
