var prev = null;
var current_elem = -1;
var current_elem_list = [];
var current_elem_len = 0;

var PeriodicalExecuter = Object();
PeriodicalExecuter.initialize = function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  };
//var gigigi = PeriodicalExecuter;
PeriodicalExecuter.registerCallback = function() {
    setInterval(this.onTimerEvent, this.frequency * 1000);
  };

PeriodicalExecuter.onTimerEvent = function() {
    if (!PeriodicalExecuter.currentlyExecuting) {
      try {
        PeriodicalExecuter.currentlyExecuting = true;
        PeriodicalExecuter.callback();
      } finally {
        PeriodicalExecuter.currentlyExecuting = false;
      }
    }
  };




function kana_tr(src){
	//ひらがな→カタカナ
	var len = src.length;
	var i;
	var res = "";
	for(i=0;i<len;i++){
		code = src.charCodeAt(i);
		if(code >= 12353 && code <= 12435){
			code = code + 96;
		}
		res = res + String.fromCharCode(code) ;
	}
	return res;
}




var roma_table2 = {
	a:["ア","イ","ウ","エ","オ"],
	k:["カ","キ","ク","ケ","コ"],
	s:["サ","シ","ス","セ","ソ"],
	t:["タ","チ","ツ","テ","ト"],
	n:["ナ","ニ","ヌ","ネ","ノ"],
	h:["ハ","ヒ","フ","ヘ","ホ"],
	m:["マ","ミ","ム","メ","モ"],
	y:["ヤ","イ","ユ","イェ","ヨ"],
	r:["ラ","リ","ル","レ","ロ"],
	w:["ワ","ウィ","ウ","ウェ","ヲ"],
	g:["ガ","ギ","グ","ゲ","ゴ"],
	z:["ザ","ジ","ズ","ゼ","ゾ"],
	d:["ダ","ヂ","ヅ","デ","ド"],
	b:["バ","ビ","ブ","ベ","ボ"],
	p:["パ","ピ","プ","ペ","ポ"],

	ky:["キャ","キィ","キュ","キェ","キョ"],
	sy:["シャ","シィ","シュ","シェ","ショ"],
	ty:["チャ","チィ","チュ","チェ","チョ"],
	ny:["ニャ","ニィ","ニュ","ニェ","ニョ"],
	hy:["ヒャ","ヒィ","ヒュ","ヒェ","ヒョ"],
	my:["ミャ","ミィ","ミュ","ミェ","ミョ"],
	ry:["リャ","リィ","リュ","リェ","リョ"],

	gy:["ギャ","ギィ","ギュ","ギェ","ギョ"],
	zy:["ジャ","ジィ","ジュ","ジェ","ジョ"],
	dy:["ヂャ","ヂィ","ヂュ","ヂェ","ヂョ"],
	hy:["ヒャ","ヒィ","ヒュ","ヒェ","ヒョ"],
	by:["ビャ","ビィ","ビュ","ビェ","ビョ"],
	py:["ピャ","ピィ","ピュ","ピェ","ピョ"],

	sh:["シャ","シ","シュ","シェ","ショ"],
	ch:["チャ","チ","チュ","チェ","チョ"],
	cy:["チャ","チィ","チュ","チェ","チョ"],
	v:["ヴァ","ヴィ","ヴ","ヴェ","ヴォ"],
	f:["ファ","フィ","フ","フェ","フォ"],
	j:["ジャ","ジ","ジュ","ジェ","ジョ"],
	l:["ラ","リ","ル","レ","ロ"],
	x:["ァ","ィ","ゥ","ェ","ォ"],
	c:["カ","シ","ク","セ","コ"]
};


function isVowel(c){
	if(c == "a" || c == "i" || c == "u" || c == "e" || c == "o"){
		return true;
	}else{
		return false;
	}
}



var roma_list = {
	a:0,
	i:1,
	u:2,
	e:3,
	o:4
};

function roma_code(w){
	return roma_list[w];
}

function roma_char(w){
	var rs = [];
	var i = 0;
	var len = w.length;
	var c1;
	var c2;
	var c3;
	for(i = 0; i < len; i++){
		if(isVowel(w.charAt(i))){
			c1 = roma_code(w.charAt(i));
			rs.push(roma_table2["a"][c1]);
		}else if(w.charAt(i) == "-"){
			rs.push("ー");
		}else{
			i++;
			if( !(i < len) ) break;
			if(isVowel(w.charAt(i))){
				c2 = roma_code(w.charAt(i));
				if(roma_table2[w.charAt(i - 1)] != null){
					rs.push(roma_table2[w.charAt(i - 1)][c2]);
				}else{
					break;
				}
			}else if(w.charAt(i) + w.charAt(i - 1) == "nn"){
				rs.push("ン");
			}else if(w.charAt(i - 1) == "n"){
				rs.push("ン");
				i--;
			}else{
				i++;
				if( !(i < len) ) break;
				c3 = roma_code(w.charAt(i));
				
				if(w.charAt(i - 2) == w.charAt(i - 1)){
					rs.push("ッ");
					if(roma_table2[w.charAt(i - 1)] != null){
						rs.push(roma_table2[w.charAt(i - 1)][c3]);
					}else{
						break;
					}
				}else{
					if(roma_table2[w.charAt(i - 2) + w.charAt(i - 1)] != null){
						rs.push(roma_table2[w.charAt(i - 2) + w.charAt(i - 1)][c3]);
					}else{
						break;
					}
				}
			}
		}
	}
	
	return rs.join("");
}


function loadJS(){
	//var js = "../glico_search/search_dict.js";
	var js = "http://www.ezaki-glico.net/search_curry_recipe/suggest/search_dict.js";
	var base_url = "";
	var url = base_url + js;
	//document.write(unescape("%3Cscript src='" + url + "' type='text/javascript'%3E%3C/script%3E"));
	document.write(unescape("%3Cscript src='" + url + "' charset='Shift_JIS' type='text/javascript'%3E%3C/script%3E"));
	
}


	function compareRankAsc(a, b){
		return a[2] - b[2];
	}

	function suggest_ch(){


		var input = document.getElementById("word");



		if(prev == input.value){
			return;
		}
		prev = input.value;
		current_elem = -1;
current_elem_len = 0;
current_elem_list = [];

		var tr_word = kana_tr(input.value);

//////////////////////
//tr_word = roma_char(tr_word);
/////////////////////

		var buf = new Array();
		var matched = new Array();
		var i = 0;
		var j = 0;
		var len = list.length;
		var count = 0;
		var match_f;
		var exists_table = {};
		if(tr_word.length > 0){
var fff = function(tr_word){
		for(i = 0; i < len; i++){
			match_f = false;
			
			if(list[i][0].toLowerCase().substring(0, tr_word.length) == tr_word.toLowerCase()){
				match_f = true;
			}
			if( !(match_f) ){
				for(j = 3; j < list[i].length; j++){
					if(
						list[i][j].substring(0, tr_word.length) == tr_word
					){
						match_f = true;	
					}
				}
			}


			if(count >= 10) break;
			
			if(match_f && exists_table[list[i]] == null){
				matched.push(list[i]);
				exists_table[list[i]] = 1;
				count ++;
			}

		}
};
fff(tr_word);
var roma_tr_str = roma_char(tr_word.toLowerCase());
if(roma_tr_str.length > 0) fff(roma_tr_str);
		}






matched.sort(compareRankAsc);

for(i = 0; i < matched.length; i++){
				buf.push(
					"<div id='ls" + i.toString() + "' " +
					"onmouseover='over(\"ls" + i.toString() + "\", " + i + ");' " + 
					"onmouseout='out(\"ls" + i.toString() + "\");' " + 
					" onclick='commit(\"" + escape_js(matched[i][0]) + "\");'>" +
					escape_html(matched[i][0]) + "</div>"
				);
}

current_elem_len = buf.length;
current_elem_list = matched;

if(buf.length > 0){
				buf.push(
					"<div id='ls" + i.toString() + "' class='sug_close' " +
					"onmouseover='over(\"ls" + i.toString() + "\", " + i + ");' " + 
					"onmouseout='out(\"ls" + i.toString() + "\");' " + 
					" onclick='sug_close();'>" +
					"閉じる</div>"
				);
/*
i++;
				buf.push(
					"<div id='ls" + i.toString() + "' class='sug_close' " +
					"onmouseover='over(\"ls" + i.toString() + "\", " + i + ");' " + 
					"onmouseout='out(\"ls" + i.toString() + "\");' " + 
					" onclick='sug_close();'>" +
					roma_char(input.value) +
					"</div>"
				);
*/

}

	var suj = document.getElementById("suggest_block");
	suj.innerHTML = buf.join("\n");
	if(buf.length > 0){
		suj.style.display = "block";
	}else{
		suj.style.display = "none";
	}
		
	}


	function escape_js(s){
		s = s.replace(/\\/g, "\\\\");
		s = s.replace(/\"/g, "\\\"");
		return s;
	}

	function escape_html(s){
		s = s.replace(/&/g, "&amp;");
		s = s.replace(/>/g, "&gt;");
		s = s.replace(/</g, "&lt;");
		return s;
	}

	function over(id, elem_n){
		if(current_elem != -1){
			var i;
			for(i = 0; i < current_elem_len; i++){
				out("ls" + i.toString());
			}
		}
		document.getElementById(id).style.backgroundColor = "#4266FF";
		document.getElementById(id).style.color = "#FFFFFF";
		//document.getElementById(id).style.color = "#4266FF";
		current_elem = elem_n;
	}
	
	function out(id){
		document.getElementById(id).style.backgroundColor = "#FFFFFF";
		document.getElementById(id).style.color = "#333333"
	}


	function keyf(e){
		//alert( (e != null) ? e : event);
		var evt = (e != null) ? e : event;
		//alert(evt.keyCode);
		if(evt.keyCode == 38){
// Up
			if(current_elem != -1) out("ls" + current_elem.toString(), current_elem);
			current_elem --;
			if(current_elem == -2) current_elem = current_elem_len -1;
			if(current_elem != -1) over("ls" + current_elem.toString(), current_elem);
		}else if(evt.keyCode == 40){
// Down
			if(current_elem != -1) out("ls" + current_elem.toString(), current_elem);
			current_elem ++;
			if(current_elem >= current_elem_len) current_elem = -1;
			if(current_elem != -1) over("ls" + current_elem.toString(), current_elem);
		}else if(evt.keyCode == 13){
// Enter
			if(current_elem != -1){
				var w = current_elem_list[current_elem][0];
				var input = document.getElementById("word");
				input.value = w;
				var suj = document.getElementById("suggest_block");
				suj.style.display = "none";
				prev = w;
				document.getElementById("search_count_s").value = "1";
				document.getElementsByName("form")[0].submit();
			}
		}
	}
	

	function commit(w){
		var input = document.getElementById("word");
		input.value = w;
		var suj = document.getElementById("suggest_block");
		suj.style.display = "none";
		prev = w;
		

		document.getElementById("search_count_s").value = "1";
		//document.getElementById("search_form").submit();
		if(document.getElementsByName("form").length > 0){
			document.getElementsByName("form")[0].submit();
		}
	}
	
	function sug_close(){
		var suj = document.getElementById("suggest_block");
		suj.style.display = "none";
	}

	function submitSearchForm(){
		document.getElementById("search_count_s").value = "0";
	}
	

	function initSuggest(){
		var input = document.getElementById("word");
		prev = input.value;
		PeriodicalExecuter.initialize(suggest_ch, 2);	
		
		if(document.getElementsByName("form").length > 0){
			document.getElementsByName("form")[0].onkeydown = keyf;
		}
		var len = list.length;
		var i;



		for(i = 0; i < len; i++){
			if(list[i].length >= 1){
				list[i].push(kana_tr(list[i][0]));
			}
		}



	}






	
	loadJS();




