/*
--------------------------------------------------------
suggest.js - Input Suggest
Version 2.2 (Update 2010/09/14)

Copyright (c) 2006-2010 onozaty (http://www.enjoyxstudy.com)

Released under an MIT-style license.

For details, see the web site:
 http://www.enjoyxstudy.com/javascript/suggest/

--------------------------------------------------------
*/

/*
下記のスタイルシートを追加してください

*/


	$.fn.kakukaSearch = function(maxNum_) {
		var self = this;
		var suggestArea;//検索結果表示領域
		var timerID;//監視ID
		var oldText = '';//監視用の前のテキスト
		var maxNum = maxNum_;
		var suggestFocus = false;//サジェストがフォーカス状態か
		
		Init();//初期化
		addKanshi();//検索開始
		removeKanshi();//検索終了
		
		
		//初期化
		function Init() {
			suggestArea = $('<ul />');
			$("body").append(suggestArea);
			suggestArea.attr("class", "suggestJS");
			suggestArea.hide();
		}
		
		//検索開始
		function addKanshi() {
			self.focus(function() {
				function Check() {
					//文字が変わったら検索
					if(self.val() != oldText && self.val() != '') {
						var resultAry = Search();
						if(resultAry.length > 0) {
							setSuggest(resultAry);
							suggestFocusCheck();//閉じるチェック
							clickFlg = false;
							$("html").click(function(){
								clickFlg = true;
							});
						}
						else {
							setSuggestNothing();
						}
					}
					if(self.val() == '') {
						removeSuggest();
					}
					oldText = self.val();
					if(timerID) {
						clearTimeout(timerID);
					}
					timerID = setTimeout(arguments.callee, 500);
				}
				Check();
			});
			
			
		}
		
		//検索終了
		function removeKanshi() {
			self.blur(function() {
				if(timerID) {
					clearTimeout(timerID);
				}
			});
		}

		
		//サジェストのフォーカス解除を監視
		function suggestFocusCheck() {
			$("html").mousemove(function(event_) {
				//マウス位置
				var mouseX = event_.pageX;
				var mouseY = event_.pageY;
				
				//サジェストの位置（offsetはマージンを含まないpositionは含む）
				var sugX = suggestArea.offset().left;
				var sugY = suggestArea.offset().top;
				
				//サジェストの大きさ（paddingをきちんと計算）
				var sugW = suggestArea.innerWidth();
				var sugH = suggestArea.innerHeight();
				
				//>= <=のようにしないとmouseoverで乗ったと判断と同時にこの物体のなかにいないと判断されてしまう。
				if( (mouseX >= sugX && mouseX <= (sugX + sugW) && mouseY >= sugY && mouseY <= (sugY + sugH)) == false) {
					if(clickFlg == true) {
						removeSuggest();
						//console.log("mouseX"+mouseX+"  "+"mouseY"+mouseY+"  "+"sugX"+sugX+"  "+"sugY"+sugY+"  "+"sugW"+sugW+"  "+"sugH"+sugH+"  ");
						$("html").unbind();
					}
				}
			});
		}

		//検索する
		function Search() {
			//console.log("検索開始");
			var resultAry = [];
			var val = self.val();
			
			$.each(kakukaList, function(idx_) {
				var obj = this;
				if(obj.yomi.indexOf(val) > -1 || obj.roma.indexOf(val) > -1 || obj.kanji.indexOf(val) > -1) {
					resultAry.push(this);
				}
				if(resultAry.length >= maxNum) {
					return false;// eachのbreak
				}
			});

			return resultAry;
		}
		
		//サジェストを表示
		function setSuggest(resultAry_) {

			//文字サイズが変わる可能性があるため、位置は表示する際に表示（5は余裕を持たせるスペース）
			suggestArea.css({
				"position":"absolute",
				"left":self.offset().left + "px",
				"top":(self.offset().top + self.height() + 5) + "px"
			});


			suggestArea.find("> *").remove();//一旦中身を空っぽにして追加
			$.each(resultAry_, function(idx_) {
				var obj = this;
				
				//親
				var li = $('<li />');
				suggestArea.append(li);
				li.attr("class", "box__");
				
				//タイトル
				var title = $('<p />');
				li.append(title);
				title.html('<strong>' + obj.kyoku + obj.bu + obj.ka + obj.group + '</strong>');
				
				//庁内場所
				var chonaibasho = $('<p />');
				li.append(chonaibasho);
				chonaibasho.attr("class", "item2__");
				chonaibasho.html(obj.chonaibasho);
				
				//電話番号
				var tel = $('<p />');
				li.append(tel);
				tel.attr("class", "item3__");
				tel.html(obj.tel);
				
				//詳細ボタン親
				var yakuwariBtnP = $('<p />');
				li.append(yakuwariBtnP);
				yakuwariBtnP.attr("class", "item4__");
				
				//詳細ボタン
				var yakuwariBtn = $('<a href="#" />');
				yakuwariBtnP.append(yakuwariBtn);
				yakuwariBtn.html("詳細を見る");
				yakuwariBtn.attr("class", "icon__");
				yakuwariBtn.toggle(function(){
					$(this).html('詳細を閉じる');
					$(this).attr("class", "icon2__");
					yakuwari.show();
				},
				function(){
					$(this).html('詳細を見る');
					$(this).attr("class", "icon__");
					yakuwari.hide();
				});
				
				//役割テキスト
				var yakuwari = $('<p />');
				li.append(yakuwari);
				yakuwari.attr("class", "item5__");
				yakuwari.html(obj.yakuwari);
				yakuwari.hide();
				
				//クリックしたらURLに飛ぶ
				li.click(function(){
					//window.location = obj.url;
				});
			});
			
			suggestArea.fadeIn("fast");

		}
		
		//サジェストの結果がない状態を表示
		function setSuggestNothing() {
			//文字サイズが変わる可能性があるため、位置は表示する際に表示（5は余裕を持たせるスペース）
			suggestArea.css({
				"position":"absolute",
				"left":self.offset().left + "px",
				"top":(self.offset().top + self.height() + 5) + "px"
			});
			
			suggestArea.find("> *").remove();//一旦中身を空っぽにして追加
			suggestArea.show();
			
			//親
			var li = $('<li />');
			suggestArea.append(li);
			li.attr("class", "box2__");
			
			//タイトル
			var title = $('<p />');
			li.append(title);
			title.html('該当する課がございません');
			
			//テキスト
			var text = $('<p />');
			li.append(text);
			text.html('こちらをご参照下さい<p class="item6__"><a href="#" class="icon3__">各課の問い合わせ</a></p>');

		}
		
		//サジェストを消す
		function removeSuggest() {
			suggestArea.fadeOut('fast', function() {
				suggestArea.find("> *").remove();
			});
		}
	};

	$(function(){
		$("#kakukaSearch").kakukaSearch(10);
	});



