var time_elapsed = 0;
var per_cent = 1;
var bar = null;
var vihjed = new Array();
var avihjed = new Array();
var tvihjed = new Array();
var tvshown = new Array();
var mistakes = 0;
var correct = 0;
var stopped = 0;

var sockets_x = new Array();
var sockets_y = new Array();

var slots = new Array();

var advance_cursor = false;

function format_time(secs) {
	var mins = Math.floor(secs / 60);
	var secs = secs - mins * 60;
	if(mins < 10) { mins = "0" + mins; }
	if(secs < 10) { secs = "0" + secs; }
	return mins + ":" + secs;
}

function addTime(secs) {
	if(time_left > 0) {
		secs = Math.round(secs);
		time_left = time_left + secs;
		if(time_left > time_gamut) { time_gamut = time_left; }
	}
}

function updateBar() {
	time_left = time_left - 1;
	time_elapsed = time_elapsed + 1;
	if(time_left >= 0) {
		if(!stopped) setTimeout("updateBar()", 1000);
		per_cent = time_left / time_gamut;
		bar.style.width=Math.round(per_cent*280)+'px';
		if(per_cent < 0.2) {
			bar.style.background='url("img/kell_bar_r.gif")';
		} else {
			bar.style.background='url("img/kell_bar.gif")';
		}
	} else {
		time_elapsed = time_elapsed - 1;
		balloon(1,1,'PROOVI JÄRGMIST, <br />KLIKI SIIA',0,'nextWord(0)');
	}
}

function updateHints() {
	if(!stopped) setTimeout("updateHints()", 1000);
	for(i=1;i<=hints;i++) {
		if(hint_timings[i] - time_elapsed <= 0) {
			avihjed[i].style.display = "none";
			vihjed[i].style.display = "block";
			if(tvshown[i] == false) {
				tvshown[i] = true;
				if(!isFinished()) {
					balloon(1,1,tvihjed[i],(hint_timings[1]-hint_timings[0]-1)*1000,'');
				}
			}
		} else {
			avihjed[i].innerHTML = "AVANEMATA VIHJE - " + format_time(hint_timings[i] - time_elapsed);
		}
	}
}

function showHints() {
	for(k=1;k<=hints;k++) {
		avihjed[k].style.display = "none";
		vihjed[k].style.display = "block";
	}
	illu(1);
}

function stopTime(){
	stopped = 1;
}

function findCharacter(code, altctrlPressed){

	if(altctrlPressed){
		switch(code){
		case 90:
		  return 'Ž';  
		case 83:
		 	return 'Š';
		}
	}
	
	switch(code){
		case 219:
		  return 'Õ';  
		case 191:
		 	return 'Ä';
		case 186:
			return 'Ö';
		case 59:
			return 'Ö';
		case 192:
			return 'Ü';
		default:
		  if(code >= 96 && code <= 105) { code = code - 48; }
	}
	
	window.status = String.fromCharCode(code);
	
	return (String.fromCharCode(code)).toUpperCase(); //pressed key value
}

function findUnusedLetterElement(character){

	var elem;
	letter_nr = haystack.indexOf(character);
	do{
		if(letter_nr != -1){
					elemName = "letter_";
					elemName = elemName.concat(letter_nr);
					elem = dd.elements[elemName];
					if(isUnusedLetterElement(elem)){
						return elem;
					}
		}
		letter_nr = haystack.indexOf(character, letter_nr+1);	
	}while (letter_nr != -1)
	
	return -1;
}

function isUnusedLetterElement(elem){
		if((elem.nimg.src).indexOf("en") < 0){
			return true;
		}
		return false;
}

function keydown_handler(e,obj,curr_nr) {
  
	var code;
	var character;
	var elem;
	var altctrlPressed = false;
	
	if (slots[curr_nr]) return; //is already filled
	
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;

	if(e.altKey && e.ctrlKey) altctrlPressed = true;
	character = findCharacter(code, altctrlPressed); //pressed key value
	elem = findUnusedLetterElement(character);
		
	if(elem != -1){
		elem.moveTo(findPosX(obj)+2, findPosY(obj)+1);
		
		var ider = elem.name.substr(7,3);
		name = obj.id;
		k = (name.substr(3,2));
		
		if(elem.nimg.alt == vastus.substr(k,1) || password_input) {
			slots[k] = true;
			elem.nimg.src = elem.nimg.src.replace("rg","en");
			elem.setDraggable(false);
			elem.nimg.unselectable="on";
			addTime(time_gamut/letters);
			correct++;
			advance_cursor = true;
			if(password_input) {
				password_arr[k] = elem.nimg.alt;
			}
		} else{
			mistakes++;
		}
	}

	if (isFinished()){
		if(password_input) {
			document.getElementById("password_input_field").value = password_arr.join("");
			balloon(1,1,'KLIKI SIIA,<br />ET SISSE LOGIDA',0,'logIn()');
		} else {
			showHints();
			stopTime();
			balloon(1,1,'VÄGA TUBLI!<br />KLIKI SIIA, ET EDASI MÄNGIDA',0,'nextWord(1)');
		}
	}

}

function keyup_handler(e,obj,next_id,prev_id){
	
	var code;
	var character;
	var elem;
	var altctrlPressed = false;
	
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;

	if(e.altKey && e.ctrlKey) altctrlPressed = true;
	character = findCharacter(code, altctrlPressed); //pressed key value
	elem = findUnusedLetterElement(character);
	
	if(elem != -1){
			var ider = elem.name.substr(7,3);
			elem.moveTo(sockets_x[ider],sockets_y[ider]);
	}
	
	obj.value = "";	

	if(code == 39 && document.getElementById(next_id)) {  document.getElementById(next_id).focus(); }
 	else if(code == 37 && document.getElementById(prev_id)) { document.getElementById(prev_id).focus(); }
	else { 
		if(advance_cursor){
			if(next_id != 'da_null') {
				document.getElementById(next_id).focus(); 
				advance_cursor = false;
			}
		}
	}
}

function near(coord_1,coord_2,diff) {
	if(Math.sqrt((coord_1-coord_2)*(coord_1-coord_2)) < diff) { return true; } else { return false; }
}

function m4ng_init() {

	bar = document.getElementById("kell_bar");

	if(typeof hints != 'undefined') {
		for(i=1;i<=hints;i++) {
			vihjed[i] = document.getElementById("vihje_"+i);
			avihjed[i] = document.getElementById("avihje_"+i);
			tvihjed[i] = document.getElementById("tvihje_"+i).innerHTML;
			tvshown[i] = false;
		}
	}
	
	var letter = null;
	if(typeof letters_haystack != 'undefined') {
		for(i=0;i<letters_haystack;i++) {
			letter = document.getElementById("letter_"+i);
			sockets_x[i] = findPosX(letter);
			sockets_y[i] = findPosY(letter);
		}
	}
	
	start_drag();

	if(typeof letters != 'undefined') {
		for(i=0;i<letters;i++) {
			slots[i] = false;
			document.getElementById("da_"+i).disabled="";
		}
	}

	if(typeof time_left != 'undefined') {
		if(time_left) { setTimeout("updateBar()", 1000); }
	}
		
	if(typeof hints != 'undefined') {
		if(hints) { setTimeout("updateHints()", 1000); }
	}
	
	if(typeof time_gamut != 'undefined') {
		if(time_gamut) {
			setTimeout("illu(1);",(time_gamut*0.3)/hints*(hints+1)*1000);
		}
	}

	return true;
}

function illu(w) {
	
	if(document.getElementById('illu1')) {
		setTimeout("document.getElementById('illu1').style.visibility='visible'",50);
		for(i=1;i<=5;i++) {
			setTimeout("document.getElementById('illu1').className = 'balloon_fade_"+(i*20)+"'",i*50);
		}
	}
	
}

function nextWord(completed){
	if(time_left < 0) time_left = 0;
	document.getElementById("rform").completed.value = completed;
	document.getElementById("rform").time.value = time_elapsed;
	document.getElementById("rform").correct.value = correct;
	document.getElementById("rform").mistakes.value = mistakes;
	document.getElementById("rform").points.value = time_left;
	document.getElementById("rform").focus();
	document.getElementById("rform").submit();
}

function isFinished(){
	if(slots.length == letters) {
		var i;
		for(i in slots){
			if (slots[i] == false) {
				return false;
			}
		}
		return true;
	}
}

function logIn() {
	document.getElementById("password_input_form").focus();
	document.getElementById("password_input_form").submit();
}
