function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if (browser == "Microsoft Internet Explorer") {
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		ro = new XMLHttpRequest();
	}
	return ro;
}

var currentKana = "kata";
var rowType = "torow";
var currentRow = -1;

var menuPanel;
var menuTop;
var menuOpen = false;

var hiraMenu = Array(
	'',
	'Vowel row',
	'K row',
	'S row',
	'T row',
	'N row',
	'H row',
	'M row',
	'Y row',
	'R row',
	'W row',
	'G row',
	'Z row',
	'D row',
	'B row',
	'P row',
	'Ky row',
	'Sh row',
	'Ch row',
	'Ny row',
	'Hy row',
	'My row',
	'Ry row',
	'Gy row',
	'J row',
	'By row',
	'Py row'
);

var kataMenu = Array(hiraMenu);
for (var i = 0; i < hiraMenu.length; i++)
	kataMenu[i] = hiraMenu[i];
kataMenu.push('V row');
kataMenu.push('F row');

var kanjiMenu = Array(
	'',
	'Lesson 1',
	'Lesson 2',
	'Lesson 3',
	'Lesson 4'
);

function replaceKanji(id, oldkana, on, kun, meaning, stroke) {
	var strokeLink = "";
	if (stroke != "")
		strokeLink = "<tr><td><font size=2><div align='right'><a href='" + stroke + "' target='_new'>Stroke order</a></div></font></td></tr>";

	document.getElementById(id).innerHTML = "<table><tr><td align='center'><a onClick=\"javascript:updateKanji('"+id+"',0);\" class='letter'>"+oldkana+"<br>"
		+ "<font class='letters'>Eng: " + meaning + "<br>"
		+ "On: " + on + "<br>"
		+ "Kun: " + kun + "</font></a></td></tr>" + strokeLink + "</table>";
	document.getElementById("pleaseclick").innerHTML = "";
}

function updateKanji(id, newRowType) {
	if (newRowType)
		rowType = newRowType;
	sndReq("action="+currentKana+"&id="+id+"&"+rowType+"="+currentRow);
}

function replaceKana(id, oldkana, kana, stroke) {
	var strokeLink = "";
	if (stroke != "")
		strokeLink = "<tr><td><font size=2><div align='right'><a href='" + stroke + "' target='_new'>Stroke order</a></div></font></td></tr>";

	document.getElementById(id).innerHTML = "<table><tr><td><a onClick=\"javascript:updateKana('"+id+"',0);\" class='letter'>"+oldkana+" = "+kana+"</a></td></tr>" + strokeLink + "</table>";
	document.getElementById("pleaseclick").innerHTML = "";
}

function updateKana(id, newRowType) {
	if (newRowType)
		rowType = newRowType;
	sndReq("action="+currentKana+"&id="+id+"&"+rowType+"="+currentRow);
}

function setCurrentKana(id, kana) {
	currentKana = kana;
	updateKana(id, rowType);

	var hiraganasel;
	var katakanasel;
	var kanjisel;
	var allkanasel;
	switch(kana) {
	case "kata":
	default:
		katakanasel = "selected";
		document.getElementById("kanaoptions").style.display = "block";
		break;

	case "hira":
		hiraganasel = "selected";
		document.getElementById("kanaoptions").style.display = "block";
		break;

	case "kanji":
		kanjisel = "selected";
		document.getElementById("kanaoptions").style.display = "block";
		break;

	case "all":
		allkanasel = "selected";
		document.getElementById("kanaoptions").style.display = "none";
		break;
	}

	document.getElementById("hiragana").innerHTML = "<nobr><span class='alphabet "+hiraganasel+"'>Hiragana (平仮名)</span></nobr><br><nobr>&nbsp;&nbsp;&nbsp;<font size='-1'>- <a href='http://en.wikipedia.com/wiki/Hiragana' target='_new'>Wikipedia</a></font></nobr>";
	document.getElementById("katakana").innerHTML = "<nobr><span class='alphabet "+katakanasel+"'>Katakana (片仮名)</span></nobr><br><nobr>&nbsp;&nbsp;&nbsp;<font size='-1'>- <a href='http://en.wikipedia.com/wiki/Katakana' target='_new'>Wikipedia</a></font></nobr>";
	document.getElementById("kanji").innerHTML = "<nobr><span class='alphabet "+kanjisel+"'>Kanji (漢字)</span></nobr><br><nobr>&nbsp;&nbsp;&nbsp;<font size='-1'>- <a href='http://en.wikipedia.com/wiki/Kanji' target='_new'>Wikipedia</a></font></nobr>";
	document.getElementById("allkana").innerHTML = "<nobr><span class='alphabet "+allkanasel+"'>All</span></nobr>";

	menu_close();
}

var http = createRequestObject();

function sndReq(get) {
	http.open('get', '?'+get);
	http.onreadystatechange = handleResponse;
	http.send(null);
}

function handleResponse() {
	if (http.readyState == 4){
		var response = http.responseText;
		var update = new Array();

		if (response.indexOf('|' != -1)) {
			update = response.split('|');
			document.getElementById(update[0]).innerHTML = update[1];
		}
	}
}

function Coord(a,b,c,d){
	this.x = a;
	this.y = b;
	this.w = c;
	this.h = d;
}

function loc(object){
	var owner=object.ownerDocument;
	var boxObject = owner.getBoxObjectFor(object);
	return new Coord(boxObject.x, boxObject.y, boxObject.width, boxObject.height);
}

function menu_getCurrent() {
	var kanaMenu = hiraMenu;
	if (currentKana == "kata")
		kanaMenu = kataMenu;
	if (currentKana == "kanji")
		kanaMenu = kanjiMenu;

	if (currentRow >= kanaMenu.length)
		currentRow = kanaMenu.length-1;

	return kanaMenu;
}

function menu_init(topId) {
	menuPanel = document.createElement("div");
	menuTop = document.getElementById(topId);

	menuPanel.style.display = "none";
	menuPanel.className = "menubody";
	menuPanel.style.zIndex = 20;

	var coord = loc(menuTop);
	var top = coord.y + coord.h;
	menuPanel.style.left = coord.x + "px";
	menuPanel.style.top = top + "px";
	menuPanel.style.width = 120;

	document.body.insertBefore(menuPanel, document.body.firstChild);

	menuTop.className = "menubody";
	menuTop.style.width = 120;
	menuTop.onclick = menu_toggle;

	var kanaMenu = menu_getCurrent();
	currentRow = kanaMenu.length-1;
	menuTop.innerHTML = "+ " + kanaMenu[currentRow];
}

function menu_toggle() {
	if (menuOpen)
		menu_close();
	else
		menu_open();
}

function menu_close() {
	menuPanel.style.display = "none";
	menuPanel.innerHTML = "";

	var kanaMenu = menu_getCurrent();
	menuTop.innerHTML = "+ " + kanaMenu[currentRow];

	menuOpen = false;
}

function menu_open() {
	menuPanel.style.display = "block";

	var kanaMenu = menu_getCurrent();

	menuPanel.innerHTML = '';
	for (var i = 1; i < kanaMenu.length; i++)
		menuPanel.innerHTML += '<a onClick="javascript:menu_choose('+i+');" class="menu">' + kanaMenu[i] + '</a><br>';

	var kanaMenu = menu_getCurrent();
	menuTop.innerHTML = "&raquo; " + kanaMenu[currentRow];
	
	menuOpen = true;
}

function menu_choose(id) {
	currentRow = id;
	var kanaMenu = menu_getCurrent();
	menuTop.innerHTML = "+ " + kanaMenu[currentRow];
	
	updateKana("kana", rowType);

	menu_close();
}
