window.onload = Starto;
window.onbeforeunload = KonserviVortaroMemoron;
var kontrolado = false;
if (parent.babilanto && parent.babilanto == 'bertilow') {
	kontrolado = true;
}
var domajno = document.domain;
domajno = domajno.replace(/^[a-z][a-z]([a-z]|-[a-z][a-z])?\./,'.');
var modelo;
var vortonombro = 0;
var uzantovortaro;
var antauastarto = 0;
var delingvo;
var allingvo;
var lingvoparo;
var ElektiLingvon;
var shanghiDirektonId;
var malbonajsignoj = /[\(\)!,.;()"_~]/g;
var uzitajvortaroj = Array();
var Memoro = new Object;
var vortaromemoro = LegiKuketon('nlernuvortaro_serchomemoro');
if (vortaromemoro) {
	vortaromemoro = vortaromemoro.replace(/\t/g,'~');
	vortaromemoro = vortaromemoro.replace(/\(/g,'[');
	vortaromemoro = vortaromemoro.replace(/\)/g,']');
	vortaromemoro = vortaromemoro.replace(/!/g,',');
	vortaromemoro = vortaromemoro.replace(/_/g,'"');
	memvortaroj = vortaromemoro.split("\n");
	for (var i = 0; i < memvortaroj.length; i++) {
		var eroj = memvortaroj[i].split("~");
		MemoriVortaron(eroj[0]);
		if (eroj[1] && eroj[1] != 'undefined') {
			Memoro[eroj[0]] = new Object;
			Memoro[eroj[0]].ringo = eroj[1].evalJSON();
			Memoro[eroj[0]].poz = eroj[2];
		}
	}
}
var maksmem = 20;

function Starto() {
	modelo = $("modelo");
	modelo.onkeypress = function(e) { EbleSerchi(e); };
	uzantovortaro = $("uzantovortaro");
	var vortaroantauen = $("vortaroantauen");
	if (vortaroantauen) {
		vortaroantauen.onclick = VortaroAntauen;
	}
	var vortaroreen = $("vortaroreen");
	if (vortaroreen) {
		vortaroreen.onclick = VortaroReen;
	}
	ElektiLingvon = $("ElektiLingvon");
	shanghiDirektonId = $("shanghiDirektonId");
	if (ElektiLingvon) {
		lingvoparo = LegiKuketon('nlernuvortaro_lingvoparo');
		if (!UzantoVortaroEnOrdo(lingvoparo)) {
			var lernulingvo = LegiKuketon('lernu-lingvo');
			if (lernulingvo) lingvoparo = 'eo--' + lernulingvo;
		}
		if (!UzantoVortaroEnOrdo(lingvoparo)) {
			var adreso = window.location.host;
			var subdomajno = adreso.slice(0,adreso.indexOf('.'));
			lingvoparo = 'eo--' + subdomajno;
		}
		if (!UzantoVortaroEnOrdo(lingvoparo)) {
			lingvoparo = 'eo--eo';
		}
		var vortaroj = ElektiLingvon.getElementsByTagName('option');
		for (var i = 0; i < vortaroj.length; i++) {
			if (vortaroj[i].value == lingvoparo) {
				vortaroj[i].selected = true;
			}
		}
		ShanghiUzantovortaron();
		ElektiLingvon.onchange = function() { ShanghiUzantovortaron(); };
		shanghiDirektonId.onclick = function() { ShanghiUzantovortaron(1); };
	}
}

function UzantoVortaroEnOrdo(v) {
	if (!v || v == 'undefined' ||
		v == 'null' ||
		v.indexOf('null') > -1 ||
		v.indexOf('undefined') > -1 ||
		v.indexOf('--') < 0) {
		return 0;
	}
	return 1;
}


function optionValueIndexOf(options,value) {
    for (var i=0;i<options.length;i++) {
        if (options[i].value == value) {
            return i;
        }
    }
    return -1;
}

function ShanghiUzantovortaron(dd) {
    lingvoparo = ElektiLingvon.options[ElektiLingvon.selectedIndex].value;
	if (!UzantoVortaroEnOrdo(lingvoparo)) lingvoparo = 'eo--eo';
	MetiKuketon('nlernuvortaro_lingvoparo', lingvoparo, '/cgi-bin/');
	var vortaroj = lingvoparo.split('--');
    // La sekva linio kredeble ne necesas
	//MetiKuketon('nlernuvortaro_delingvo', vortaroj[0], '/cgi-bin/');
	delingvo = vortaroj[0];
	allingvo = vortaroj[1];
	var rordo = allingvo + "--" + delingvo;
	var ind = optionValueIndexOf(ElektiLingvon.options, rordo);
    if (ind >= 0 && rordo != "eo--eo") {
        shanghiDirektonId.style.display = 'inline';
        if (typeof dd == "undefined") {
        } else {
            ElektiLingvon.options[ind].selected = true;
            ShanghiUzantovortaron();
        }
	} else {
        shanghiDirektonId.style.display = 'none';
	}
	
	if (modelo.value) {
		Serchi('',0);
	} else if (Memoro[delingvo+'-'+allingvo]) {
		MemorShangho(Memoro[delingvo+'-'+allingvo]);
		MemoriVortaron(delingvo+'-'+allingvo);
	}
    ShanghiVortaroreklamon();
}
function ShanghiVortaroreklamon() {
    if (window.parent === self) return;
    var gepatro = window.parent;
    if (delingvo == 'eo' && allingvo == 'eo') {
		gepatro.$("reklamolavortaro").style.display = 'none';
		gepatro.$("reklamopilger").style.display = 'inline';
		gepatro.$("reklamobick").style.display = 'none';
    } else if (delingvo == 'da' || allingvo == 'da') {
		gepatro.$("reklamolavortaro").style.display = 'none';
		gepatro.$("reklamopilger").style.display = 'none';
		gepatro.$("reklamobick").style.display = 'inline';
    } else if (delingvo == "en" || allingvo == "en" || delingvo == "pt" || allingvo == "pt" || delingvo == "cs" || allingvo == "cs" || delingvo == "fi" || allingvo == "fi" || delingvo == "fr" || allingvo == "fr" || delingvo == "de" || allingvo == "de" || delingvo == "es" || allingvo == "es" || delingvo == "hu" || allingvo == "hu" || delingvo == "ga" || allingvo == "ga" || delingvo == "hr" || allingvo == "hr" || delingvo == "nl" || allingvo == "nl" || delingvo == "no" || allingvo == "no" || delingvo == "pl" || allingvo == "pl" || delingvo == "sk" || allingvo == "sk" || delingvo == "sv" || allingvo == "sv") {
		gepatro.$("reklamolavortaro").style.display = 'inline';
		gepatro.$("reklamopilger").style.display = 'none';
		gepatro.$("reklamobick").style.display = 'none';
    } else {
		gepatro.$("reklamolavortaro").style.display = 'none';
		gepatro.$("reklamopilger").style.display = 'none';
		gepatro.$("reklamobick").style.display = 'none';
    }
    var vortarosagoj = gepatro.$('vortarosagoj');
    var vortarosagojalto = Element.getHeight(vortarosagoj);
    if (vortarosagojalto < 20) vortarosagoj.style.height = '20px';
}
function GvatiKlavojn(e,redakto) {
	if (!e) e = window.event;
	var klavo = e.keyCode;
	if (klavo == 13) {
		var originalo = redakto.origina.firstChild.innerHTML;
		if (redakto.value == originalo || (redakto.value == '' && originalo == '<span>...</span>')) {
			NuligiRedakton(redakto);
			return false;
		} else {
			KonserviTradukon(redakto);
		}
		return false;
	} else if (klavo == 27) {
		NuligiRedakton(redakto);
		return false;
	}
	return true;
}

function EbleSerchi(e) {
	if (!e) e = window.event;
	var klavo = e.keyCode;
	if (klavo == 13) {
		Serchi('',0);
		return false;
	}
	return true;
}

function Elemento(nomo,atributoj,teksto,kie,ref,ref2) {
	var e = document.createElement(nomo);
	for (var i = 0; i < atributoj.length; i=i+2) {
		e.setAttribute(atributoj[i],atributoj[i+1]);
	}
	if (teksto) {
		var t = document.createTextNode(teksto);
		e.appendChild(t);
	}
	if (kie == 'antau') ref.parentNode.insertBefore(e,ref);
	else if (kie == 'en') ref.appendChild(e);
	else if (kie == 'anstatau') ref.replaceChild(e,ref2);
	return e;
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	} else if (input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function setCaretToEnd(input) {
	setSelectionRange(input, input.value.length, input.value.length);
}

function Serchi(mod,starto,bobeloid) {
	if (starto) {
		antauastarto = antauastarto + starto;
	} else {
		antauastarto = 0;
	}
	if (!mod) {
		mod = modelo.value;
	}
	if (!mod && delingvo == '') {
		alert('Vi devas enskribi serĉvorton kaj elekti vortaron.');
		return false;
	}
	if (!mod) {
		alert('Vi devas enskribi serĉvorton.');
		return false;
	}
	if (delingvo == '') {
		alert('Vi devas elekti vortaron.');
		return false;
	}
	if (uzantovortaro && mod) {
		mod = mod.replace(malbonajsignoj,'');
		if (mod && mod != 'null') modelo.value = mod;
		var urlo = '/cgi-bin/serchi.pl';
		var hazardo = randomString();
		var parametroj = 'modelo=' + encodeURIComponent(mod) + '&delingvo=' + delingvo + '&allingvo=' + allingvo + '&prioritato=' + 0 + '&starto=' + starto + '&bobeloid=' + bobeloid + '&dishaki=true&hazardo=' + hazardo;
		var ajakso = new Ajax.Request(
			urlo,
			{
				method: 'get',
				parameters: parametroj,
				onSuccess: RespondiSerchon,
				onFailure: FushitaSercho
			}
		);
		uzantovortaro.innerHTML = '<p class="serchas"><img src="/vortaro/serchas_en_la_vortaro.gif" alt="..."></p>' + "\n";
	}
}

function FushitaSercho() {
	uzantovortaro.innerHTML = '<p class="serchas"><img src="/vortaro/rompita_konekto.gif" alt="..."></p>';
}

var smsercho = /\[\[(.+?)]]\[\[(.*?)]]$/;
function RespondiSerchon(resp) {
	var respondo = resp.responseText;
	var serchomodelo;
	var bobeloid;
	var sm;
	if (sm = respondo.match(smsercho)) {
		serchomodelo = sm[1];
		bobeloid = sm[2];
		respondo = respondo.replace(smsercho,'');
	}
	var trafoj = 0;
	var proponoj = '';
	if (respondo && respondo != ' ') {
		if (respondo.charAt(0) == ' ') {
			dishako = 1;
			var linifino = respondo.indexOf("\n");
			proponoj = respondo.substring(1,linifino-1);
			respondo = respondo.substring(linifino+1);
		} else {
			dishako = 0;
		}
		var eroj = respondo.split(/\n\n+/);
		var linioj;
		var vortoj;
		var vorto;
		var strukturo;
		var bazvorto;
		var bazvortosen;
		var info;
		var strukt;
		var strukturo2;
		var partoj;
		var id;
		var tradid;
		var traduko;
		var tdklaso;
		var sercho;
		var enigo = '';
		var bobelenigo = '';
		var resumaro = Array();
		var modelkomparo = modelo.value.toLowerCase();

		for (var i = 0; i < eroj.length; i++) {
			if (eroj[i] && eroj[i] != ' ') {
				trafoj++;
				linioj = eroj[i].split("\n");
				vortoj = linioj[0].split("\t");
				id = vortoj[0];
				vorto = vortoj[1];
				strukturo = vortoj[2];
				bazvorto = vortoj[3];
				prioritato = vortoj[4];
				tipo = vortoj[5];
				var info = KreiInfon(strukturo,bazvorto,vorto);
				enigo += '<div class="vorto" id="v' + i + '">' + '<h3><strong>' + vorto + '</strong>' + info + '</h3>';
				if (trafoj < 5) bobelenigo += '<div class="vorto" id="v' + i + '">' + '<h3><strong>' + vorto + '</strong>' + info + '</h3>';
				//resumaro.push('<a href="#v' + i + '">' + vorto + '</a>');
				if (linioj[1]) {
					for (var j = 1; j < linioj.length; j++) {
						partoj = linioj[j].split("\t");
						tradid = partoj[0];
						lingvokodo = partoj[1];
						lingvonomo = partoj[2];
						traduko = partoj[3];
						if (lingvokodo == 'eo') {
							traduko = AldoniLigilojn(traduko);
						}
						tdklaso = '';
						enigo += '<div id="' + lingvokodo + id + '">' + traduko + '</div>';
						if (trafoj < 5) bobelenigo += '<div id="' + lingvokodo + id + '">' + traduko + '</div>';
					}
				}
				enigo += '</div>';
				if (trafoj < 5) bobelenigo += '</div>';
			}
		}
	}
	vortonombro = trafoj;
	var pormemori = '';
	if (trafoj == 0) {
		uzantovortaro.innerHTML = '<p class="serchas"><strong class="neniujvortoj">0</strong></p>';
		pormemori = uzantovortaro.innerHTML;
	} else {
		if (dishako) {
			if (proponoj.indexOf(' ') > -1) {
				var proponaro = proponoj.split(' ');
				proponoj = proponaro.join('</strong>, <strong>');
			}
			dishako = '<p id="proponoj"><strong>' + proponoj + '</strong></p>';
		} else {
			dishako = '';
		}
		var trafoteksto = dishako;

		if (trafoj == 20) {
			pliaj = '<p class="serchiplu"><a href="#" onclick="(Serchi(\'\',antauastarto+10))"; return false">&rarr;</a></p>';
		} else {
			pliaj = '';
		}
		uzantovortaro.innerHTML = trafoteksto + enigo + pliaj;
		pormemori = uzantovortaro.innerHTML;
	}
	var memorotavortaro = delingvo+'-'+allingvo;
	if (!Memoro[memorotavortaro]) {
		Memoro[memorotavortaro] = new Object;
		Memoro[memorotavortaro].ringo = new Array;
		Memoro[memorotavortaro].poz = 0;
	}
	MemoriVortaron(memorotavortaro);
	AldoniAlMemoro(Memoro[delingvo+'-'+allingvo],pormemori,serchomodelo);
	var gepatro = window.parent;
	if (trafoj == 0) {
		teksto = '<p class="serchas"><strong class="neniujvortoj">Neniuj trafoj</strong></p>';
	} else {
		teksto = trafoteksto + bobelenigo;
		teksto = teksto.replace(/<span [^>]*>(.*?)<\/span>/g,"$1");
		if (trafoj > 4) {
			teksto += '<p class="tripunkto">[...]</p>';
		}
	}
	if (bobeloid) {
		if (gepatro.$(bobeloid)) {
			gepatro.$(bobeloid).firstChild.innerHTML = teksto;
			gepatro.GhustigiPozicion(bobeloid);
		} else if (gepatro.frames['babililokadro'].$(bobeloid)) {
			gepatro.frames['babililokadro'].$(bobeloid).firstChild.innerHTML = teksto;
			gepatro.frames['babililokadro'].GhustigiPozicion(bobeloid);
		}
	}
}

function MemoriVortaron(v) {
	var chu = 1;
	for (var x = 0; x < uzitajvortaroj.length; x++) {
		if (uzitajvortaroj[x] == v) {
			chu = 0;
		}
	}
	if (chu) {
		uzitajvortaroj.push(v);
	}
}
function AldoniAlMemoro(mem,t,s) {
	if (mem.ringo.length == maksmem+1) {
		ForigiPlejMalnovan(mem);
	}
	if (mem.ringo[mem.poz+1]) {
		for (var x = mem.ringo.length-1; x > mem.poz; x--) {
			mem.ringo[x+1] = mem.ringo[x];
		}
		var dato = new Date();
		dato = Date.parse(dato);
		mem.ringo[mem.poz+1] = [t,dato,s];
		mem.poz++;
	} else {
		var dato = new Date();
		dato = Date.parse(dato);
		mem.ringo.push([t,dato,s]);
		mem.poz = mem.ringo.length-1;
	}
}

function ForigiPlejMalnovan(mem) {
	var plej = 0;
	for (var x = 1; x < mem.ringo.length; x++) {
		if (
			mem.ringo && mem.ringo[plej] && mem.ringo[plej][1] && (typeof(mem.ringo[plej][1]) == 'date') &&
			mem.ringo[x] && mem.ringo[x][1] && (typeof(mem.ringo[x][1]) == 'date')

		) {
			if (mem.ringo[plej][1].getTime() > mem.ringo[x][1].getTime()) {
				plej = x;
			}
		}
	}
	mem.ringo.splice(plej,1);
}

function randomString() {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var string_length = 8;
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}

function KreiInfon(strukturo,bazvorto,vorto) {
	//if (kontrolado) {
	//	alert(strukturo + ' ' + bazvorto + ' ' + vorto);
	//}
	var info = '';
	var strukt = strukturo.split('/');
	var sercho;
	var modelkomparo = modelo.value.toLowerCase();
	var bazvortosen = bazvorto.replace(/·/g,'');
	if (strukt.length > 1) {
		for (var j = 0; j < strukt.length; j++) {
			if (strukt[j].length > 1) {
				sercho = strukt[j] + '?';
			} else {
				sercho = strukt[j];
			}
			if ( (bazvorto != '' || j > 0) && sercho.toLowerCase() != modelkomparo) {
				strukt[j] = '<span onclick="Serchi(\'' + sercho + '\',0)">' + strukt[j] + '</span>';
			}
		}
	}
	var strukturo2 = strukt.join('·');
	if (strukturo2 == vorto) {
		strukturo2 = '';
	}
	if (bazvortosen) {
		bazvortosen = ' &larr; ' + '<span onclick="Serchi(\'' + bazvortosen + '\',0)">' + bazvorto + '</span>';
	}
	if (bazvortosen || strukturo2) {
		info = ' (' + strukturo2 + bazvortosen + ')';
	}
	return info;
}

function MetiKuketon(nomo,valoro,pado) {
	var sekvajaro = new Date();
	sekvajaro.setFullYear(sekvajaro.getFullYear() + 1);
	document.cookie = nomo+'='+encodeURIComponent(valoro)+'; domain='+domajno+'; path='+pado+'; expires=' + sekvajaro.toGMTString();
}

function LegiKuketon(nomo) {
	var nameEQ = nomo + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
	}
	return null;
}

var aldoniligilojn1 = /([a-zĉĝĥŝĵŭA-ZĈĜĤĴŜŬ\-]+)/g;
var aldoniligilojn2 = /<\/<span class="lg" onclick="Reserchi\('([a-z]+)'\)">[a-z]+<\/span>>/g;
var aldoniligilojn3 = /<<span class="lg" onclick="Reserchi\('([a-z]+)'\)">[a-z]+<\/span>>/g;
function AldoniLigilojn(t) {
	t = t.replace(aldoniligilojn1,"<span class=\"lg\" onclick=\"Reserchi('$1')\">$1</span>");
	t = t.replace(aldoniligilojn2,"</$1>");
	t = t.replace(aldoniligilojn3,"<$1>");
	return t;
}

function Reserchi(v) {
	if (delingvo != 'eo') {
		ElektiLingvon.selectedIndex--;
		lingvoparo = ElektiLingvon.options[ElektiLingvon.selectedIndex].value;
		if (!UzantoVortaroEnOrdo(lingvoparo)) lingvoparo = 'eo--eo';
		MetiKuketon('nlernuvortaro_lingvoparo', lingvoparo, '/cgi-bin/');
		var vortaroj = lingvoparo.split('--');
		delingvo = vortaroj[0];
		allingvo = vortaroj[1];
        // La sekva linio kredeble ne necesas
		//MetiKuketon('nlernuvortaro_delingvo', vortaroj[0], '/cgi-bin/');
	}
	Serchi(v,0);
}

function VortaroAntauen() {
	if (Memoro[delingvo+'-'+allingvo]) {
		var mem = Memoro[delingvo+'-'+allingvo];
		mem.poz++;
		if (mem.poz == mem.ringo.length) mem.poz = 0;
		var dato = new Date();
		dato = Date.parse(dato);
		mem.ringo[mem.poz][1] = dato;
		MemorShangho(mem);
		MemoriVortaron(delingvo+'-'+allingvo);
	}
}
function VortaroReen() {
	if (Memoro[delingvo+'-'+allingvo]) {
		var mem = Memoro[delingvo+'-'+allingvo];
		if (mem.poz == 0) mem.poz = mem.ringo.length-1;
		else mem.poz--;
		var dato = new Date();
		dato = Date.parse(dato);
		mem.ringo[mem.poz][1] = dato;
		MemorShangho(mem);
		MemoriVortaron(delingvo+'-'+allingvo);
	}
}
function MemorShangho(mem) {
	if (mem && mem.ringo) {
		if (!mem.poz) mem.poz = 0;
		if (mem.ringo[mem.poz]) {
			if (mem.ringo[mem.poz][0]) {
				uzantovortaro.innerHTML = mem.ringo[mem.poz][0];
				modelo.value = mem.ringo[mem.poz][2];
			} else {
				modelo.value = mem.ringo[mem.poz][2];
				mem.ringo.splice(mem.poz,1)
				Serchi('',0);
			}
		}
	}
}

function KonserviVortaroMemoron() {
	var pasinteco = new Date();
	// La sekvajn du liniojn ni povos forpreni iam - eble en Junio 2007
	document.cookie = 'lernuvortaro_serchomemoro=0; domain='+domajno+'; path=/; expires=Sun, 31-Dec-2000 00:00:00 GMT';
	document.cookie = 'lernuvortaro_serchomemoro=0; domain='+domajno+'; path=/vortaro/; expires=Sun, 31-Dec-2000 00:00:00 GMT';
	var memoro = '';
	uzitajvortaroj.reverse();
	var maksimumo = 4;
	var num = 0;
	for (var x = 0; x < uzitajvortaroj.length; x++) {
		if (uzitajvortaroj[x]) {
			var i = uzitajvortaroj[x];
			memoro += i + '~';
			num++;
			if (Memoro[i] && Memoro[i].ringo && Memoro[i].ringo.length) {
				var aro = new Array;
				var datoj = new Array();
				for (var j = 0; j < Memoro[i].ringo.length; j++) {
					if (Memoro[i].ringo[j][1]) datoj.push(Memoro[i].ringo[j][1]);
				}
				datoj.sort(NombraOrdo);
				var dataro = new Object;
				for (var j = 0; j < datoj.length; j++) {
					dataro[datoj[j]] = j;
				}
				for (var j = 0; j < Memoro[i].ringo.length; j++) {
					var ero = '(!';
					if (Memoro[i].ringo[j][1] && Memoro[i].ringo[j][1] != 'undefined') ero += dataro[Memoro[i].ringo[j][1]] + '!';
					else ero += '0!';
					ero += '_' + Memoro[i].ringo[j][2] + '_)';
					aro.push(ero);
				}
				memoro += '(' + aro.join('!') + ')' + '~';
			}
			if (Memoro[i]) memoro += Memoro[i].poz;
			memoro += "\n";
		}
		if (num > maksimumo) {
			break;
		}
	}
	if (memoro) {
		memoro = memoro.replace(/\n$/,'');
		MetiKuketon('nlernuvortaro_serchomemoro', memoro, '/cgi-bin/');
	} else {
		document.cookie = 'lernuvortaro_serchomemoro=0; domain='+domajno+'; path=/; expires=Sun, 31-Dec-2000 00:00:00 GMT';
	}
}

function NombraOrdo(a,b) {
	return a - b;
}

