var keys;

/* Keys
----------------------------------------------- */
var Keys = function() {
	keys = this;
	keys.current;
	keys.flag = true;
}

Keys.prototype = {
	KeysInitialize: function() {
		$("body").unbind("keydown", keys.KeysListDown);
		$("body").unbind("keyup", keys.KeysDetailDown);
		$("#search .field input").unbind("focus", keys.KeysSearchFocus);
		$("#search .field input").unbind("blur", keys.KeysSearchBlur);
		$("#items .item .number").css({ opacity:0 });
		keys.current = 0;
	},
	KeysListControl: function() {
	
		// initialize
		keys.KeysInitialize();
		
		keys.flag = true;

		// bind
		$("body").bind("keydown", keys.KeysListDown);
		$("#search .field input").bind("focus", keys.KeysSearchFocus);
		$("#search .field input").bind("blur", keys.KeysSearchBlur);
	},
	KeysDetailControl: function() {

		// initialize
		keys.KeysInitialize();

		keys.flag = false;

		// bind
		$("body").bind("keyup", keys.KeysDetailDown);
		$("#search .field input").bind("focus", keys.KeysSearchFocus);
		$("#search .field input").bind("blur", keys.KeysSearchBlur);
	},
	KeysListDown: function(event) {

		$("#items .item .number").stop();
		$("#items .item .number").css({ opacity:0 });

		var codeflag = false;
		switch (event.which) {
			case 27:
			case "esc":
			break;
			case 13:
			case "enter":
			
				// detail open
				ListOb.ListClose(list.items[keys.current]);

				// initialize
				keys.KeysInitialize();

				return false;				
			break;
			case 37:
			case "left":
				codeflag = true;
				keys.current--;
				if (keys.current < 0) {
					keys.current++;
				}
			break;
			case 39:
			case "right":			
				codeflag = true;
				keys.current++;				
				if (keys.current > $("#items .item").length - 1) {
					keys.current--;				
				}
			break;
			case 38:
			case "up":
				codeflag = true;
				keys.current -= stage.max_cols;
				if (keys.current < 0) {
					keys.current += stage.max_cols;
				}
			break;
			case 40:
			case "down":
				codeflag = true;
				keys.current += stage.max_cols;				
				if (keys.current > $("#items .item").length - 1) {
					keys.current -= stage.max_cols;
				}
			break;
		}
		
		if (codeflag) {
			var item = $("#items .item").eq(keys.current);
			$(".number", item).css({ opacity:0.5 });
			$(".number", item).animate({ opacity:0.1 }, 500);
		}
	},
	KeysDetailDown: function(event) {

		var codeflag = false;
		switch (event.which) {
			case 27:
			case "esc":
				ListOb.ListSet();
			break;
			case 13:
			case "enter":
				DetailOb.DetailSite();
			break;
			case 37:
			case "left":
				codeflag = true;
				FlipOb.current--;
				FlipOb.FlipPrevious();
			break;
			case 39:
			case "right":			
				codeflag = true;
				FlipOb.current++;
				FlipOb.FlipNext();
			break;
			case 38:
			case "up":
				ListOb.ListSet();
			break;
			case 40:
			case "down":
				ListOb.ListSet();
			break;
		}

		if (codeflag) {
			DetailOb.item = ListOb.items[FlipOb.current];
		}
	},
	KeysSearchFocus: function() {
		$("body").unbind("keydown", keys.KeysListDown);
		$("body").unbind("keyup", keys.KeysDetailDown);
	},
	KeysSearchBlur: function() {
		if (keys.flag) {
			keys.KeysListControl();
		}
		else {
			keys.KeysDetailControl();
		}
	}
}


