var popupMenu;
var popupMenuVisible = false;

var currentSubset = 0;

var showOnNext = 0;

var undoString = "";
var undoList = new Array();
var undoListIndex = 0;

var MAX_KANJI_NUMBER = 2524;
var MAX_UNDO = 10;

var currentCard = 0;
var currentSide = "";

//////////////////////////////////////////////////////////////////////////////
function Initialize() 
{

	window.status = "Iniciando KTE. Espere por favor...";
	var ua = window.navigator.userAgent;
	var msie = ua.indexOf("MSIE ");
	if (msie > 0) {
		ver = parseInt(ua.substring(msie+5, ua.indexOf(".", msie)));
		if (ver < 4) 
			window.alert("KTE ha sido diseñado para Microsoft Internet Explorer 4.0. o superior. Algunas de las características de KTE puede que no funcionen en su versión del navegador.");
	} else {
		window.alert("KTE ha sido diseñado para Microsoft Internet Explorer 4.0. o superior. Algunas de las características de KTE puede que no funcionen con un navegador distinto.");
	}

	MenuInit();

	window.status = "Listo";

	// Parse the card number from the url address
	pagina = location.pathname;
	posGuion = pagina.lastIndexOf("-");
	tarjeta = pagina.substring(posGuion, pagina.length - 4);
	currentSide = tarjeta.charAt(tarjeta.length-1);
	currentCard = parseInt(tarjeta.substring(1, tarjeta.length - 1));
	
	// Now parse the rest of the global variables from the url address
	cadVariables = location.search.substring(1,location.search.length); 
	arrVariables = cadVariables.split("&");  
	for (i=0; i<arrVariables.length; i++) {
    	arrVariableActual = arrVariables[i].split("=");
	    if (isNaN(parseFloat(arrVariableActual[1]))) {
	    	eval(arrVariableActual[0]+"='"+unescape(arrVariableActual[1])+"';");
	    } else {
    	  eval(arrVariableActual[0]+"="+arrVariableActual[1]+";");
	    }
	}
	if (undoListIndex > 0) {
		undoTemp = undoString.substring(4,undoString.length);
		undoList = undoTemp.split("_");
	}
	
	// Limit the undo list to 10 elements
	if (undoListIndex > MAX_UNDO) {
		undoString = "ini";
		for (i = 0; i < MAX_UNDO; i++) {
			undoList[i] = undoList[i+1];
			undoString = undoString + "_" + undoList[i];
		}
		undoListIndex = MAX_UNDO;
	}
	
}

//////////////////////////////////////////////////////////////////////////////
function ProcessAccelerator()
{
	switch (event.keyCode) {
		// Tarjeta Anterior (BackSpace, a y A)
		case 8:   buttonBack_OnClick(); break;
		case 65:  buttonBack_OnClick(); break;
		case 97:  buttonBack_OnClick(); break;
		
		// Girar tarjeta (Espacio, g y G)
		case 32:  buttonFlip_OnClick(); break;
		case 71:  buttonFlip_OnClick(); break;
		case 103: buttonFlip_OnClick(); break;

		// Tarjeta Siguiente (Return, s y S)
		case 13:  buttonNext_OnClick(); break;
		case 83:  buttonNext_OnClick(); break;
		case 115: buttonNext_OnClick(); break;

		// Cambio de nivel
		case 48:  showPopupGradeA(0); break;
		case 49:  showPopupGradeA(1); break;
		case 50:  showPopupGradeA(2); break;
		case 51:  showPopupGradeA(3); break;
		case 52:  showPopupGradeA(4); break;
		case 53:  showPopupGradeA(5); break;
		case 54:  showPopupGradeA(6); break;
		case 55:  showPopupGradeA(7); break;
		case 56:  showPopupGradeA(8); break;
		case 57:  showPopupGradeA(9); break;

	}
}

//////////////////////////////////////////////////////////////////////////////
function showPopupNumber() 
{
	if (popupMenuVisible == true) popupMenu.hide();
	
	elementValue = window.event.srcElement.innerText

	if (elementValue != "" && elementValue != "-") 
	{
		window.status = "Preparando menu. Espere por favor...";

		p = new Menu(0,0);
		p.addItem(new MenuItem('Cerrar', new Function('hidePopup()'), "../imag/button_uncheck.gif"))
		p.addItem(new MenuItem(null, null, null, null, true))
		p.addItem(new MenuItem('Ir a tarjeta numero...', new Function('showPopupNumberA(' + elementValue + ')'), "../imag/button_hand.gif"))
		p.show(true)
		p.left = window.event.x;
		p.top  = window.event.y;
		popupMenu = p;
		popupMenu.show();
		popupMenuVisible = true;
		window.status = "Listo";
	} else {
		window.status = "Error";
	}
}

//////////////////////////////////////////////////////////////////////////////
function showPopupNumberA(cardNb) 
{
	if (popupMenuVisible == true) popupMenu.hide();
	newCard = window.prompt("Ir a tarjeta numero", cardNb);
	if ((newCard == null) || (parseInt(newCard) < 1) || (parseInt(newCard) > MAX_KANJI_NUMBER))
		window.alert(newCard + " no es un numero valido de tarjeta");
	else
		switchToCardNumber(newCard);
}

//////////////////////////////////////////////////////////////////////////////
function showPopupGrade() 
{
	if (popupMenuVisible == true) popupMenu.hide();

	elementValue = window.event.srcElement.innerText

	if (elementValue != "" && elementValue != "-") {
		window.status = "Preparando el menu. Espere por favor...";
		p = new Menu(0,0);
		p.addItem(new MenuItem('Cerrar', new Function('hidePopup()'), "../imag/button_uncheck.gif"))
		p.addItem(new MenuItem(null, null, null, null, true))
		p.addItem(new MenuItem('Usar kanjis de todos los niveles (' + MAX_KANJI_NUMBER + ' kanjis)', new Function('showPopupGradeA(0)'), (currentSubset==0) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem(null, null, null, null, true))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 1 (80 kanjis)',  new Function('showPopupGradeA(1)'), (currentSubset==1) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 2 (160 kanjis)', new Function('showPopupGradeA(2)'), (currentSubset==2) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 3 (200 kanjis)', new Function('showPopupGradeA(3)'), (currentSubset==3) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 4 (200 kanjis)', new Function('showPopupGradeA(4)'), (currentSubset==4) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 5 (185 kanjis)', new Function('showPopupGradeA(5)'), (currentSubset==5) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nivel 6 (181 kanjis)', new Function('showPopupGradeA(6)'), (currentSubset==6) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis secundaria (939 kanjis)', new Function('showPopupGradeA(7)'), (currentSubset==7) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de nombres (285 kanjis)', new Function('showPopupGradeA(8)'), (currentSubset==8) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis fuera de lista (295 kanjis)', new Function('showPopupGradeA(9)'), (currentSubset==9) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem(null, null, null, null, true))
		p.addItem(new MenuItem('Usar solo kanjis de Noken 4 ( 100 kanjis)', new Function('showPopupGradeA(14)'), (currentSubset==14) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de Noken 3 ( 300 kanjis)', new Function('showPopupGradeA(13)'), (currentSubset==13) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de Noken 2 (1006 kanjis)', new Function('showPopupGradeA(12)'), (currentSubset==12) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.addItem(new MenuItem('Usar solo kanjis de Noken 1 (1945 kanjis)', new Function('showPopupGradeA(11)'), (currentSubset==11) ? "../imag/button_check.gif" : "../imag/button_hand.gif"))
		p.show(true)
		p.left = window.event.x;
		p.top  = window.event.y;
		popupMenu = p;
		popupMenu.show();
		popupMenuVisible = true;
		window.status = "Listo";
	} else {
		window.status = "Error";
	}
}

//////////////////////////////////////////////////////////////////////////////
function showPopupGradeA(subsetNb) 
{
	if (popupMenuVisible == true) popupMenu.hide();
	currentSubset = subsetNb
	switch (currentSubset) {
		case 0:  window.status="Cambiado a usar todos los niveles."; break;
		case 1:  window.status="Cambiado a usar solo Nivel 1."; break;
		case 2:  window.status="Cambiado a usar solo Nivel 2."; break;
		case 3:  window.status="Cambiado a usar solo Nivel 3."; break;
		case 4:  window.status="Cambiado a usar solo Nivel 4."; break;
		case 5:  window.status="Cambiado a usar solo Nivel 5."; break;
		case 6:  window.status="Cambiado a usar solo Nivel 6."; break;
		case 7:  window.status="Cambiado a usar solo Nivel Secundaria."; break;
		case 8:  window.status="Cambiado a usar solo Kanjis de nombres."; break;
		case 9:  window.status="Cambiado a usar solo Kanjis fuera de lista."; break;
		case 11: window.status="Cambiado a usar solo kanjis de Noken 1."; break;
		case 12: window.status="Cambiado a usar solo kanjis de Noken 2."; break;
		case 13: window.status="Cambiado a usar solo kanjis de Noken 3."; break;
		case 14: window.status="Cambiado a usar solo kanjis de Noken 4."; break;
	}
	if (currentSubset > 0) {
		tagYearContainer.bgColor = "#C0C0C0";
	} else {
		tagYearContainer.bgColor = "#FFFFFF";
	}
}

//////////////////////////////////////////////////////////////////////////////
function switchToCardNumber(cardNb) 
{
	window.status="Cambiando a tarjeta numero " + cardNb + ". Espere por favor...";

	if (popupMenuVisible == true) popupMenu.hide()
	
	cardfile="../tarj/kte-" + cardNb + currentSide + ".htm?currentSubset=" + currentSubset + "&showOnNext=" + showOnNext + "&undoListIndex=" + undoListIndex + "&undoString=" + undoString;

	open(cardfile,"_self");
	
	window.status="Listo";
}

//////////////////////////////////////////////////////////////////////////////
function splitAndSwitch(cardNb)
{
	window.status="Actualizando histórico. Espere por favor...";
	
	posNumber = undoString.lastIndexOf(cardNb);
	tempString = undoString.substring(0, posNumber - 1);
	undoString = tempString;
	switchToCardNumber(cardNb);
	
}

//////////////////////////////////////////////////////////////////////////////
function hidePopup() 
{
	popupMenu.hide();
}

//////////////////////////////////////////////////////////////////////////////
function buttonBack_OnClick() 
{ 
	if (undoListIndex >= 1) {
		cardNb = undoList[undoListIndex-1];
		if (cardNb > 0) {
			undoListIndex = undoListIndex-1;
			posUltGuion = undoString.lastIndexOf("_");
			undoString = undoString.substring(0, posUltGuion);
			switchToCardNumber(cardNb);
		}
	}
}

//////////////////////////////////////////////////////////////////////////////
function buttonBackA_OnClick() 
{
	if (popupMenuVisible == true) popupMenu.hide();
	
	if (undoListIndex > 0)	
	{
		window.status = "Preparando menu. Espere por favor...";

		p = new Menu(0,0);
		p.addItem(new MenuItem('Cerrar', new Function('hidePopup()'), "../imag/button_uncheck.gif"))
		p.addItem(new MenuItem(null, null, null, null, true))
		for (i = 0; i < undoListIndex; i++)    {
			number = undoList[i];
			p.addItem(new MenuItem(number, new Function('splitAndSwitch(' + number + ')'), "../imag/button_hand.gif"));
			window.status = "Preparando menu (" + (i+1) + "). Espere por favor...";
		}
		
		p.show(true)
		p.left = window.event.x;
		p.top  = window.event.y;
		popupMenu = p;
		popupMenu.show();
		popupMenuVisible = true;

		window.status = "Listo";
	}
}

//////////////////////////////////////////////////////////////////////////////
function buttonFlip_OnClick() 
{
	if (currentSide == "a") {
		currentSide = "r";
	} else {
		currentSide = "a";
	}
	switchToCardNumber(currentCard);
}

//////////////////////////////////////////////////////////////////////////////
function buttonNext_OnClick() 
{
	LOW = 0; HIGH = 0;
	switch (currentSubset) {
		case 0: LOW=1; HIGH=MAX_KANJI_NUMBER; break;
		case 1: LOW=1; HIGH=80; break;
		case 2: LOW=81; HIGH=240; break;
		case 3: LOW=241; HIGH=440; break;
		case 4: LOW=441; HIGH=640; break;
		case 5: LOW=641; HIGH=825; break;
		case 6: LOW=826; HIGH=1006; break;
		case 7: LOW=1007; HIGH=1945; break;
		case 8: LOW=1946; HIGH=2230; break;
		case 9: LOW=2231; HIGH=2525; break;

		case 11: LOW=1; HIGH=1945; break;
		case 12: LOW=1; HIGH=1006; break;
		case 13: LOW=1; HIGH=300; break;
		case 14: LOW=1; HIGH=100; break;
	}

	nextCardNumber = parseInt(currentCard);

	// Only save in undo list if different from current one
	if ((undoListIndex == 0) || (nextCardNumber != undoList[undoListIndex-1])) {
		undoList[undoListIndex] = nextCardNumber;
		undoListIndex = undoListIndex+1;
		if (undoString == "") {
			undoString = "ini_" + nextCardNumber;
		} else {
			undoString = undoString + "_" + nextCardNumber;
		}
	}

	switch (showOnNext)
	{
		case 0: nextCardNumber = Math.round((HIGH-LOW+1)*Math.random()+LOW); break;
		case 1: nextCardNumber = nextCardNumber + 1; break;
	}
	switchToCardNumber(nextCardNumber);
}

//////////////////////////////////////////////////////////////////////////////
function buttonNextA_OnClick() 
{
	if (popupMenuVisible == true) popupMenu.hide();

	window.status = "Preparando menu. Espere por favor...";
	p = new Menu(0,0);
	p.addItem(new MenuItem('Cerrar', new Function('hidePopup()'), "../imag/button_uncheck.gif"))
	p.addItem(new MenuItem(null, null, null, null, true))
	p.addItem(new MenuItem('Siguiente aleatoriamente',  new Function('showPopupNextA(0)'), (showOnNext==0) ? "../imag/button_check.gif" : "../imag/button_hand.gif"));
	p.addItem(new MenuItem('Siguiente por numero',  new Function('showPopupNextA(1)'), (showOnNext==1) ? "../imag/button_check.gif" : "../imag/button_hand.gif"));
	p.show(true)
	p.left = window.event.x;
	p.top  = window.event.y;
	popupMenu = p;
	popupMenu.show();
	popupMenuVisible = true;
	window.status = "Listo";
}

//////////////////////////////////////////////////////////////////////////////
function showPopupNextA(next) 
{
	if (popupMenuVisible == true) popupMenu.hide();
	showOnNext = next;
	switch (showOnNext) {
		case 0:  window.status="Cambiado a mostrar siguiente aleatoriamente."; break;
		case 1:  window.status="Cambiado a mostrar siguiente por numero."; break;
	}

}

//////////////////////////////////////////////////////////////////////////////
function makeRed()	{ window.event.srcElement.style.color = "red"; }
function makeBlue()	{ window.event.srcElement.style.color = "darkblue"; }
function makeBlk()	{ window.event.srcElement.style.color = "black"; }
function makeGrn()	{ window.event.srcElement.style.color = "green"; }
function makeDrkRed()	{ window.event.srcElement.style.color = "darkred"; }

