var sortCol;												// a tábla ezen oszlop szerint van rendezve
var actTab;													// az aktuális "oldal" azonosítója
var ext = new Array("pdf", "doc", "xls", "ppt", "cdr");		// a figyelt kiterjesztések

// (át)rendezzük a táblát
function sortTable(column) {
	// megkeressük a táblát, amin dolgoznunk kell
	var table = document.getElementById("sortable");

	// ha csak egy sora van, akkor nem foglalkozunk vele
	if (table.rows.length <= 1) return;						

	var actHead = table.tHead.rows[0].cells[Math.abs(sortCol) - 1];
	if (actHead) {
		actHead.className = actHead.className.replace((sortCol > 0) ? "asc" : "des", "");
	}

	// ha a jelenlegivel azonos oszlopra kattintott, akkor megfordítjuk a rendezést
	sortCol = column * ((column == sortCol) ? -1 : 1);
	
	// kell egy tömb, amibe kigyűjtjük a teljes táblatestet
	var newRows = new Array();
	
	// a tömbbe betöltjük az összes cella tartalmát és stílusát
	for (var r = 0; r < table.tBodies[0].rows.length; r++) {
		newRows[r] = new Array();
		for (var c = 0; c < table.tBodies[0].rows[r].cells.length; c++) {
			newRows[r][c] = new Object();
			newRows[r][c].value = table.tBodies[0].rows[r].cells[c].innerHTML;
			newRows[r][c].style = table.tBodies[0].rows[r].cells[c].className;
		}
	}

	// a tömböt lerendezzük a sortFn függvény segítségével
	newRows.sort(sortFn);
		
	// a tömb tartalmát visszaírjuk a táblatestbe
	for (var r = 0; r < table.tBodies[0].rows.length; r++) {
		for (var c = 0; c < table.tBodies[0].rows[r].cells.length; c++) {
			table.tBodies[0].rows[r].cells[c].innerHTML = newRows[r][c].value;
			table.tBodies[0].rows[r].cells[c].className = newRows[r][c].style;
		}
	}
		
	var newHead = table.tHead.rows[0].cells[Math.abs(sortCol) - 1];
	newHead.className += (sortCol > 0) ? " asc" : " des";
	newHead.firstChild.blur();
}

// egy kis segítség a sort() metódusnak
function sortFn(a, b) {
	if (Math.abs(sortCol) != 4) {
		var aa = removeAccents(a[Math.abs(sortCol) - 1].value.toLowerCase());
		var bb = removeAccents(b[Math.abs(sortCol) - 1].value.toLowerCase());
	} else {
		var aa = removeAccents(a[3].value.substr(a[3].value.indexOf(">") + 2, 99));
		var bb = removeAccents(b[3].value.substr(b[3].value.indexOf(">") + 2, 99));
	}

	if (aa == bb)
		return 0;
	else
		return ((aa < bb) ? -1 : 1) * ((sortCol < 0) ? -1: 1);
}

function removeAccents(str) {
	// a rendezéskor az ékezetes betűk zavaróak, ezért eltűntetjük az ékezeteket
	str = str.replace(/á/g, "a"); str = str.replace(/é/g, "e"); str = str.replace(/í/g, "i");
	str = str.replace(/ó/g, "o"); str = str.replace(/ö/g, "o"); str = str.replace(/ő/g, "o");
	str = str.replace(/ú/g, "u"); str = str.replace(/ü/g, "u"); str = str.replace(/ű/g, "u");
	
	str = str.replace(/Á/g, "A"); str = str.replace(/É/g, "E"); str = str.replace(/Í/g, "I");
	str = str.replace(/Ó/g, "O"); str = str.replace(/Ö/g, "O"); str = str.replace(/Ő/g, "O");
	str = str.replace(/Ú/g, "U"); str = str.replace(/Ü/g, "U"); str = str.replace(/Ű/g, "U");

	return str;
}

// a "fülek" megjelenítése/eltüntetése
function showTab(tab) {
	var tabNum = tab.id.replace("_tab", "");
	
	if (actTab != tabNum) {														// ha nem az aktuális fülre kattintott
		actTabDiv = document.getElementById("_head" + actTab).parentNode;		// eltüntetjük az aktuális fül tartalmát
		actTabDiv.style.display = "none";
		actTabLi = document.getElementById("_tab" + actTab)						// az aktuális fül LI eleme
		actTabLi.className = actTabLi.className.replace("selected", "");		// már nem aktuális listaelem

		actTab = tabNum;														// mostantól ez lesz az aktuális fül

		actTabDiv = document.getElementById("_head" + actTab).parentNode;
		actTabDiv.style.display = "block";
		document.getElementById("_tab" + actTab).className += " selected";		// az aktuális fülnek más a színe
	}
	
	tab.childNodes[0].blur();													// eldobjuk a kijelölés keretét
}

// a szövegből eltávolítjuk a fájlnevekben nem használható karaktereket
function text2file(text) {
	var remove = '.,:;|/*?<>"';

	text = removeAccents(text.toLowerCase());		// kisbetűssé alakítjuk, és eltávolítjuk az ékezeteket
	text = text.replace(/\s/g, "_");				// a szóközöket aláhúzásaokká alakítjuk
	var file = "";									// eltávolítjuk a nemkívánatos karaktereket
	for (c = 0; c < text.length; c++) {
		file += (remove.indexOf(text.substr(c, 1)) == -1 && text.substr(c, 1) != "\\") ? text.substr(c, 1) : "";
	}
	
	return file;	
}

// a címsorok képeinek kezelése
function loadHeadImg(headImg) {
	headImg.alt = "";					// ha betöltődött a kép, nem kell ALT neki
}

function errorHeadImg(headImg) {
	// valami hiba történt
	var head = headImg.parentNode;		// ebben a címsorban vagyunk
	if (head) {							// az IE egyszer szülő nélkül is hibát ad
		head.removeChild(headImg);		// eltávolítjuk a képet
		head.innerHTML = headImg.alt;	// visszaírjuk az eredeti szöveget
		headImg = null;					// a memóriából töröljük a képobjektumot
	}
}

// inicializáljuk az oldalt
function initPage() {
	// az összes linket átnézzük és beállítjuk 
	var links = document.getElementsByTagName("a");
	
	for (var l = 0; l < links.length; l++) {
		if (links[l].hostname != location.hostname) {
			links[l].target = "_blank";
			links[l].className += " out";
		}

		for (e in ext) {
			if (RegExp(eval("/\." + ext[e] + "$/i")).test(links[l].href))
				links[l].className += " " + ext[e];
		}
		
		if (RegExp(/#$/).test(links[l].href))
			links[l].onclick = function() { return false; }
	}

	// végignézzük az összes táblát 
	var tables = document.getElementsByTagName("table");
	
	for (var t = 0; t < tables.length; t++) {
		if (tables[t].className.indexOf("zebra") > -1) {
			// becsíkozzuk a táblát
			for (var b = 0; b < tables[t].tBodies.length; b++) {
				for (var r = 0; r < tables[t].tBodies[0].rows.length; r++) {
					// a páros sorok "even", a páratlanaok "odd" stílust kapnak
					tables[t].tBodies[0].rows[r].className += (r % 2 == 0) ? " even" : " odd";
					
					// kiváltjuk a tr:hover-t két egyszerű függvénnyel
					tables[t].tBodies[0].rows[r].onmouseover = function() { this.className += " activerow"; }
					tables[t].tBodies[0].rows[r].onmouseout  = function() { this.className = this.className.replace("activerow", ""); }
				}
			}
		}
					
		if (tables[t].id == "sortable") {
			// a fejlécre linkeket helyezünk a rendezéshez
			for (var c = 0; c < tables[t].tHead.rows[0].cells.length; c++) {
				// létrehozunk egy új linket
				var newLink = document.createElement("a");
				newLink.href = "javascript:sortTable(" + (c + 1) + ")";
		
				// a linkhez hozzáadjuk a cella összes elemét
				var children = tables[t].tHead.rows[0].cells[c].childNodes;
				for (var n = 0; n < children.length; n++) {
					newLink.appendChild(children[n]);
				}
				
				// az új linket hozzáadjuk a cellához
				tables[t].tHead.rows[0].cells[c].appendChild(newLink);
			}
		}
	}
	
	// van-e navigátor div a lapon?
	var nav = document.getElementById("navigator");
	if (nav) {
		// létrehozunk egy új listát
		var list = document.createElement("ul");
		
		var heads = document.getElementById("jobb_panel").getElementsByTagName("h2");
		for (h = 0; h < heads.length; h++) {
			heads[h].id = "_head" + h;											// azonosítót adunk a címsornak
			
			var listelem = document.createElement("li");						// létrehozunk egy új LI elemet
			listelem.id = "_tab" + h;											// azonosítót adunk a linknek
			listelem.innerHTML = '<A href="#">' + heads[h].innerHTML + '</A>';	// kell egy link
			listelem.onclick   = function() { showTab(this); return false; }  	// amire ha kattintanak, váltson fület
			list.appendChild(listelem);											// felfűzzük a listára
			
			if (h == 0) {														// az első a kiválasztott
				listelem.className = "selected";
			} else {
				tabDiv = heads[h].parentNode;									// az összes többit eltüntetjük
				tabDiv.style.display = "none";
			}
		}
		nav.appendChild(list);													// a listát beillesztjük a DIV-be
		actTab = "0";															// az aktuális "fül" a 0.
	}
	
	// a résztvevők táblájában az országnevek elé odatesszük a zászlókat
	if (document.body.id == "resztvevok") {
		var table = document.getElementById("sortable");

		for (var r = 0; r < table.tBodies[0].rows.length; r++) {
			var county = table.tBodies[0].rows[r].cells[3].innerHTML;
			var cocode = "empty";
			
			for (var c = 0; c < country.length; c++) {
				if (country[c][1].toLowerCase() == county.toLowerCase()) {
					cocode = country[c][0].toLowerCase();
					break;
				}
			}
			table.tBodies[0].rows[r].cells[3].innerHTML = '<img src="images/flags/' + cocode + '.gif" alt=""/> ' + county;
		}
	}
		
	// cikkekhez tartalomjegyzéket készítünk
	if (document.body.id == "cikkek") {
		var toc = document.getElementById("tartalom");
		var art = document.getElementById("cikk");
		
		if (toc && art) {
			var tocList = document.createElement("ul");
			var tocLine = 0;
		
			// helyet csinálunk a tartalomnak
			toc.style.width = "210px";
			toc.style.padding = "6px";
			art.style.width = "712px";
			art.style.marginLeft = "220px";
			
			var tocTitle = document.createElement("h1");
			tocTitle.innerHTML = "Tartalom";
			toc.appendChild(tocTitle);
			
			var elems = art.getElementsByTagName("*");
			for (e = 0; e < elems.length; e++) {
				var nodeName = elems[e].nodeName.toLowerCase();
				if (nodeName == "h1" || nodeName == "h2" || nodeName == "h3" || nodeName == "h4") {
					if (elems[e].id) {
						id = elems[e].id
					} else {
						id = "_toc" + ++tocLine;
						elems[e].id = id;
					}

					var tocElem = document.createElement("li");
					tocElem.innerHTML = '<a href="#' + id + '">' + elems[e].innerHTML + '</a>';
					tocElem.className = "toclevel" + nodeName.substr(1, 1);
					tocList.appendChild(tocElem);
				}
			}
			toc.appendChild(tocList);
		}
	}
	
	// cikkek címsorainak szövegeit képekre cseréljük
	if (document.body.id == "cikkek" && document.body.className) {
		var art = document.getElementById("cikk");
		var imgPath = "images/heads/" + document.body.className + "/";
		
		if (art) {
			var h1s = art.getElementsByTagName("h1");
			var h2s = art.getElementsByTagName("h2");
			var h3s = art.getElementsByTagName("h3");
			
			for (var h = 0; h < h1s.length + h2s.length + h3s.length ; h++) {
				if (h < h1s.length)
					var head = h1s[h];
				else if (h < h1s.length + h2s.length)
					var head = h2s[h - h1s.length];
				else
					var head = h3s[h - h1s.length - h2s.length];
				
				var headImg = document.createElement("img");
				headImg.alt = head.innerHTML;
				headImg.onload  = function() { loadHeadImg(this); };
				headImg.onerror = function() { errorHeadImg(this); };
				headImg.src = imgPath + text2file(head.innerHTML) + ".gif";

				head.innerHTML = "";

				head.appendChild(headImg);
			}
		}
	}
}

window.onload = initPage;
