/*
    Key Events
	@author rakeem
    
*/
/** エントリーアンカー配列を初期化 */
var moveEntryFlag   = false; // エントリーのアンカー移動をするか制御
var entryAnchorNum  = 0;
var entryAnchorList = new Array();
var entryMoreList = new Array();

// class nameでDOMアクセス
document.getElementsByClassName = function (className) {
    var i, j, eltClass;
    var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
    var objCN = new Array();
    for (i = 0; i < objAll.length; i++) {
        eltClass = objAll[i].className.split(/\s+/);
        for (j = 0; j < eltClass.length; j++) {
            if (eltClass[j] == className) {
                objCN.push(objAll[i]);
                break;
            }
        }
    }
    return objCN;
}

function init() {
	var entryAnchorDom = document.getElementsByClassName('entryAnchor');
	var entryMoreDom = document.getElementsByClassName('entry_morehide');
	if (entryAnchorDom) {
		for (var i=0; i<entryAnchorDom.length; i++) {
			entryAnchorList[i] = entryAnchorDom[i].name;
		}
		moveEntryFlag = true;
	} else {
		moveEntryFlag = false;
	}
	if(entryMoreDom) {
		for (var i=0; i<entryMoreDom.length; i++) {
			entryMoreList[i] = entryMoreDom[i].id;
		}
	}
}


KeyEvents = {
    handled: false,
    handleF1: function() {
        replaceChildNodes('specialMessage', 'You invoked the special F1 handler!');
    },
    handleEscape: function() {
        replaceChildNodes('specialMessage', 'You invoked the special Escape handler!');
    },
    updateModifiers: function(e) {
        var modifiers = e.modifier();
        replaceChildNodes('shift', modifiers.shift);
        replaceChildNodes('ctrl', modifiers.ctrl);
        replaceChildNodes('alt', modifiers.alt);
        replaceChildNodes('meta', modifiers.meta);
    }
};

KeyEvents.specialKeyMap = {
    'KEY_F1': KeyEvents.handleF1,
    'KEY_ESCAPE': KeyEvents.handleEscape
};

// onload
connect(window, 'onload',
    function() { 
		init();
		controlHead();
    });

// keypress
connect(document, 'onkeypress', 
    function(e) {
		var key = e.key();
		var headId = document.getElementById("head");
		switch(key.string) {
			case "h":
				controlHead();
			break;
			case "j":
				nextEntry();
			break;
			case "k":
				prevEntry();
			break;
			case "m":
				controlEntry();
			break;
			case "s":
				focusSearch();
			break;
			case "t":
				scrollTo(0,0);
			break;
		}
    }
);

// 検索窓にフォーカス
function focusSearch() {
	var pos = document.getElementById("head").style.position;
	document.getElementById("search").focus();
}

/**
 * 次のエントリーに移動
 */
function nextEntry() {
	if (entryAnchorNum<entryAnchorList.length-1) {
		entryAnchorNum++;
		location.hash = entryAnchorList[entryAnchorNum];
		var pos = document.getElementById("head").style.position;
		// head fixed時は位置調整
		if(pos == "fixed") {
			scrollBy(0,-150);
		}
	}
	
}

/**
 * 前のエントリーに移動
 */
function prevEntry() {
	if (entryAnchorNum>0) {
		entryAnchorNum--;
		location.hash = entryAnchorList[entryAnchorNum];
		var pos = document.getElementById("head").style.position;
		if(pos == "fixed") {
			scrollBy(0,-150);
		}
	}
}

// ヘッダーコントロール
function controlHead() {
	var pos = document.getElementById("head").style.position;
	if(pos != "fixed") {
		document.getElementById("head").style.position = "fixed";
	} else {
		document.getElementById("head").style.position = "absolute";
	}
}

// エントリーコントロール
function controlEntry() {
	for(var i=0;i<entryMoreList.length;i++) {
		showHide(entryMoreList[i]);
	}
}

// 最初にエントリーを折り畳む
if(document.getElementById){
	document.writeln('<style type="text/css" media="all">');
	document.writeln('<!--');
	document.writeln('.entry_morehide{display:none;}');
	document.writeln('-->');
	document.writeln('</style>');
}

// show more表示切り替え
function showHide(id){
	var disp = document.getElementById(id).style.display;
	if(disp == "block"){
		document.getElementById(id).style.display = "none";
	}else{
		document.getElementById(id).style.display = "block";
	}
	return false;
}

	$(function() {
		$('a.pagetop').click(
			function() {
				$('#head').ScrollTo(1000, 'easeout');
				return false;
			});
	});