// ad set
var google_language = "ja";
var google_ad_client = "pub-7456882775040704";
var google_ad_slot = "0303472867";
var google_ad_width = 250;
var google_ad_height = 250;

// var set
var targetUrl = "./logic/cc.php";
var searchWord_tmp = "";
var searchMode = "";
var palletMode = "line";
var nowPage = 1;
var pageCount = 0;

// preload
new Image().src = "./img/cc_hatena_top.png";
new Image().src = "./img/cc_hatena_bottom.png";

// ready
$(document).ready(
	function(){
		// observe
		$().readyObserve();
		$().invokeObserve();
		// search focus
        if ($(".search_text").val() == "") {
	       	$(".search_text").focus();
        } else {
			searchWord_tmp = $(".search_text").val();
		}
	}
);

// searchCommand
(function($){
	$.fn.searchCommand = function(searchWord, targetPage){
		// repeat save
		if (((searchWord_tmp != searchWord) || (targetPage != nowPage)) && (searchWord != " search ")) {
			searchWord_tmp = searchWord;
			targetPage_tmp = targetPage;
			// commands load
			jQuery.ajax({
				// response format
				dataType: "json",
			
				// request parameter
				data: {
					"s": encodeURI(searchWord)
				},
				// use cache
				cache: true,
				// target url
				url: targetUrl + "?mode=" + searchMode + "&page=" + targetPage,
				// success exec
				success: function (data) {
					if ((data.commandlist == null) || (data.commandlist == undefined)) {
						$().notFound();
					} else {
						$().fieldSet(data);
					}
				},
				// error exec
				error: function () {
					$().notFound();
				},
				// complete exec
				complete: function () {
					$().invokeObserve();
				}
			});
		}
	}
})(jQuery);

/**************************************************
 functions
 **************************************************/

// setCommand
(function($){
	$.fn.setCommand = function(commandString){
		// pallettext
		palletText = $("#pallet_text");
	
		if (palletMode == "line") {
			palletText.val(commandString);
		} else if (palletMode == "edit") {
			// select cursorpositon
			cursorPosition = getCursorPosition(palletText.get(0));
			// pretext
			pretStr = palletText.val().substr(0, cursorPosition);
			// resttext
			restStr = palletText.val().substr(cursorPosition, palletText.val().length);
			palletText.val(pretStr + commandString + restStr);
			// update cursorpositon
			cursorPosition += commandString.length;
			// cursorpositon set
			if (palletText.get(0).createTextRange) {
				range = palletText.get(0).createTextRange();
				range.move('character', cursorPosition);
				range.select();
			} else if (palletText.get(0).setSelectionRange) {
				palletText.get(0).setSelectionRange(cursorPosition, cursorPosition);
			}
		}
	}
})(jQuery);

// readyObserve
(function($){
	$.fn.readyObserve = function() {
		searchMode = $("#search_mode > .box > .on").attr("id");
		// search observe(field focus)
		$(".search_text").focus(
			$().inputSearch()
		);
		// search observe(field blur)
		$(".search_text").blur(
			function(){
				if ($(".search_text").val() == "") {
					$(".search_text").css("color", "#a99e93");
					$(".search_text").val(" search ");
				}
			}
		);
		// select observe(hover)
		$(".left > .select").hover(	
			function(){
				$(".left > .select").css("background-position","0 -16px");
			},
			function(){
				$(".left > .select").css("background-position","0 0");
			}
		);
		// clear observe(hover)
		$(".left > .clear").hover(	
			function(){
				$(".left > .clear").css("background-position","-70px -16px");
			},
			function(){
				$(".left > .clear").css("background-position","-70px 0");
			}
		);
		// mode observe(hover)
		$(".right > .mode").hover(	
			function(){
				$(".right > .mode").css("cursor", "pointer");
				if (palletMode == "edit") {
					$(".right > .mode").css("background-position","-140px -16px");
				} else if (palletMode == "line") {
					$(".right > .mode").css("background-position","-210px -16px");
				}
				$("#pallet_top").css("background-position","0 -42px");
				$("#pallet").css("border-color","#a99e93");
				$("#pallet_bottom").css("background-position","0 -48px");
			},
			function(){
				if (palletMode == "edit") {
					$(".right > .mode").css("background-position","-210px 0px");
				} else if (palletMode == "line") {
					$(".right > .mode").css("background-position","-140px 0px");
				}
				$("#pallet_top").css("background-position","0 -32px");
				$("#pallet").css("border-color","#494546");
				$("#pallet_bottom").css("background-position","0 -38px");
			}
		);
		
		// searchMode observe(click)
		$("#search_mode > .box > div").click(
			function(){
				$(this).searchModeSet(this.id);
			}
		);
		
		// select observe(click)
		$(".left > .select").click(
			function(){
				$("#pallet_text").select();
			}
		);
		// clear observe(click)
		$(".left > .clear").click(
			function(){
				$("#pallet_text").val("");
			}
		);
		// palletMode observe(click)
		$(".right > .mode").click(
			function(){
				if (palletMode == "edit") {
					palletMode = "line";
					text = $("#pallet_text").val();
					$("#pallet").html("<div class=\"frame\" />");
					$("#pallet > .frame").html("<input type=\"text\" size=\"100\" name=\"pallet_text\" id=\"pallet_text\" value=\"\" />");
					$("#pallet_text").val(text);
					$("#pallet_text").attr("rows","1");	
					$("#pallet_text").css("height","18px");
					$(".right > .mode").css("background-position","-140px 0");
				} else if (palletMode == "line") {
					palletMode = "edit";
					text = $("#pallet_text").val();
					$("#pallet").html("<div class=\"frame\" />");
					$("#pallet > .frame").html("<textarea cols=\"100\" rows=\"1\" name=\"pallet_text\" id=\"pallet_text\" value=\"\"></textarea>");
					$("#pallet_text").val(text);
					$("#pallet_text").attr("rows","10");	
					$("#pallet_text").css("height","180px");
					$(".right > .mode").css("background-position","-210px 0");
				}
				$("#pallet_top").css("background-position","0 -32px");
				$("#pallet").css("border-color","#494546");
				$("#pallet_bottom").css("background-position","0 -38px");
				$(".right > .mode").css("cursor", "auto");
			}
		);
	}
})(jQuery);

// invokeObserve
(function($){
	$.fn.invokeObserve = function() {
		// a-focus observe
		$("a").focus(
			function(){
				this.blur();
			}
		);
		// click observe
		$("#cm_list > #page > dl").click(
			function(){
				$().setCommand($("#" + this.id + " > dd > .line").text());
			}
		);
		// button observe(filed hover)
		$("#cm_list > #page > dl").hover(
			function(){
				$("#" + this.id).css("border","1px solid #ffcc33");
				$("#" + this.id).css("background","#fcd14e");
				$("#" + this.id + " > dd").css("color", "#494546");
			},
			function(){
				$("#" + this.id).css("border","1px solid #fff");
				$("#" + this.id).css("background", ""); 
				$("#" + this.id + " > dd").css("color", "#a99e93");
			}
		);
		// pager observe(hatena hover)
		$("#cm_list > #page > dl > dt > .hatena").hover(
			function(){
			    $("#" + this.id.substr(6) + " > dd > .hatena_frame").css("top", $("#" + this.id.substr(6)).position().top + "px");
				$("#" + this.id.substr(6) + " > dd > .hatena_frame").css("left", $("#" + this.id.substr(6)).position().left + "px");
				$("#" + this.id.substr(6) + " > dd > .hatena_frame").show();
			},
			function(){
				$("#" + this.id.substr(6) + " > dd > .hatena_frame").hide();
				$("#" + this.id.substr(6)).css("height","48px");
			}
		);
		// pager observe(pager hover)
		$("#nav > li").hover(
			function(){
				if ($(this).attr('class') != "now") $(this).css("border","1px solid #f39800");
			},
			function(){
				if ($(this).attr('class') != "now") $(this).css("border","1px solid #ffffff");
			}
		);
		// pager observe(pager click)
		$("#nav > li").click(
			function(){
				targetPage = $(this).attr('class');
				if (targetPage == "prev") targetPage = parseInt(nowPage) - 1;
				if (targetPage == "next") targetPage = parseInt(nowPage) + 1;
				if ((targetPage < 1)) return;
				$("#nav").css("color", "#a99e93");
				$().searchCommand(searchWord_tmp, targetPage);
			}
		);		
	}
})(jQuery);


// inputSearch
(function($){
	$.fn.inputSearch = function() {
		return function(){
			if ($(".search_text").val() == " search ") {
				$(".search_text").val("");
			}
			$(".search_text").css("color", "#000");
			// 1sec timer
			$(".search_text").eventDelay(500, "keyup", "keydown", function(){
				 $().searchCommand($(".search_text").val(), 1);
				}
			);
		};
	}
})(jQuery);

// not found
(function($){
	$.fn.notFound = function() {
		// field  clear
		$("#cm_list").empty();
		$("<div id=\"caution\"/>")
			.append("<a href=\"./\">Sorry... Command not found.</a>")
			.appendTo("#cm_list");
	}
})(jQuery);

// searchModeSet
(function($){
	$.fn.searchModeSet = function(mode) {
		if ((mode == "word") || (mode == "command")) {
			$("#search_mode > .box > .on").attr('class', "off");
			$("#search_mode > .box > #" + mode).attr('class', "on");
			searchMode = mode;
			searchWord_tmp = "";
			$().searchCommand($(".search_text").val(), 1);
		}
	}
})(jQuery);

// fieldSet
(function($){
	$.fn.fieldSet = function(data) {
		// field  clear
		$("#cm_list").empty();
		// field set
		$("<div id=page/>")
			.appendTo("#cm_list");
		$.each(data.commandlist, function(key, list){
			$.each(list, function(page, value){
				hatena = "";
				if (value.example != "") hatena ="<span class=\"hatena\" id=\"hatena" + value.cc_id + "\"><img src=\"./img/cc_hatena.png\" /></span>";
				$("<dl id=" + value.cc_id + "/>")
					.appendTo("#page");
				$("<dt/>")
					.append(value.caption + hatena)
					.appendTo("#page > dl#" + value.cc_id);
				$("<dd/>")
					.appendTo("#page > dl#" + value.cc_id);
				$("<div class=line/>")
					.append(value.line)
					.appendTo("#page > dl#" + value.cc_id + " > dd");
				if (value.example != "") {
					$("<div class=hatena_frame/>")
						.append("<div class=\"hatena_top\"><div></div></div><p class=\"hatena_text\">" + value.example +"</p><div class=\"hatena_bottom\"></div><div></div>")
						.appendTo("#page > dl#" + value.cc_id + " > dd");
				}
			});
		});
		// pager set
		pageCount = data.info.page_count;
		nowPage = data.info.page_num;
		$("#cm_list").pageSet();
	}
})(jQuery);

// pageSet
(function($){
	$.fn.pageSet = function() {
		if (pageCount > 1) {
			$("<ul id=nav/>")
				.appendTo(this);
			$("<li class=prev/>")
				.append("&laquo;")
				.appendTo("#nav");
			for (i=1; i <= pageCount; i++) {
				if (i == nowPage) {
					classTag = "now";
				} else {
					classTag = i;
				}
				$("<li class=" + classTag +"/>")
					.append(i)
					.appendTo("ul#nav");
			}
			$("<li class=next/>")
				.append("&raquo;")
				.appendTo("#nav");
		}
	}
})(jQuery);
