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
var defValue = new Array();									// ebben lesznek a mezők alapértelmezett értékei

// a regisztráció mezőinek alapértelmezett értékei
//defValue["lastname"] = "Vezetéknév";
//defValue["firstname"] = "Keresztnév";
//defValue["organization"] = "A szervezet, akit képvisel";
//defValue["email"] = "We promise do not send spam";

// ****************************************************************************
// (á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) {
//MOST NEM KIVÉTEL A 4. OSZLOP
//	if (Math.abs(sortCol) != 1 ) {
		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/g, "");		// 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
	}
}

// ****************************************************************************
// az űrlapkezelés funckiói
// ****************************************************************************

// kijelöljük a kontrol csoportját
function selectControl(obj) {
	// melyik fieldset-ben található a kontrol
	var parentFS = obj.parentNode;
	while (parentFS != null && parentFS.nodeName.toLowerCase() != "fieldset") {
		parentFS = parentFS.parentNode;
	}
	
	// ha megtaláltuk, kijelöljük
	if (parentFS != null) {
		var fieldsets = document.getElementsByTagName("fieldset");
		
		for (var f = 0; f < fieldsets.length; f++) {
			if (fieldsets[f] == parentFS) {
				if (parentFS.className.indexOf("selected") == -1)
					parentFS.className += " selected";
			} else {
				fieldsets[f].className = fieldsets[f].className.replace(/selected/g, "");
			}
		}
	}
	
	if (obj.type == "text") {
		if (obj.className.indexOf("selected") == -1)
			obj.className += " selected";
		
		if (defValue[obj.name] != null && obj.value == defValue[obj.name]) {
			obj.value = "";
			obj.className = obj.className.replace(/default/g, "");
		}
	}
}

// a kontrol már nem kijelölt
function releaseControl(obj) {
	obj.className = obj.className.replace(/selected/g, "");
	
	if (defValue[obj.name] != null && obj.value.replace(/\s/g,"") == "") {
		obj.value = defValue[obj.name];
		obj.className += " default";
	}
}

// hosszú szöveges mezők karakterszámlálója és -ellenőrzője
function textCounter(obj) {
	// megadtak-e maximális hosszt
	var maxLength = 0;
	if (obj.className) {
		var match = new RegExp(/\bmaxlen(\d{1,4})\b/).exec(obj.className);
		if (match != null) maxLength = parseInt(match[1]);
	}
	
	// ha igen, akkor nem engedünk többet bevinni
	if (maxLength > 0 && obj.value.length > maxLength) {
		obj.value = obj.value.substr(0, maxLength);
		alert("Too long text! (maximum " + maxLength + " characters)");
	}

	// kiírjuk az aktuális karakterszámot
	document.getElementById(obj.id + "_charnum").innerHTML = obj.value.length;
}

// kontrolcsoport kezelése
function jumpNextElem(evt) {
	var evt = evt || window.event;
	var obj = evt.target || evt.srcElement

	// számot nyomtak és a szöveg elérte a maximális hosszt
	if ((evt.keyCode >= 48 && evt.keyCode <= 57) && obj.value.length == obj.maxLength) {
		// melyik a következő elem
		var pos = obj.id.lastIndexOf("_") + 1;
		var dest = obj.id.substr(0, pos) + (parseInt(obj.id.substr(pos, 3)) + 1)
		
		// ha van ilyen, akkor átváltunk rá
		if (document.getElementById(dest))
			document.getElementById(dest).focus();
	}
	
	// Backspace-t vagy balra nyilat nyomtak és üres az elem
	if ((evt.keyCode == 8 || evt.keyCode == 37) && obj.value.length == 0) {
		// melyik az előző elem
		var pos = obj.id.lastIndexOf("_") + 1;
		var dest = obj.id.substr(0, pos) + (parseInt(obj.id.substr(pos, 3)) - 1)

		// ha van ilyen, akkor átváltunk rá
		if (document.getElementById(dest))
			document.getElementById(dest).focus();
	}
}

// ****************************************************************************
// 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/g, ""); }
				}
			}
		}
					
		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);
			}
		}
	}
	
	// inicializáljuk regisztrációs űrlapot
	if (document.getElementById("registration")) {
		var form = document.getElementById("registration");
		
		// az országválasztó listában a nevek elé kitesszük a zászlót
		var optCountries = document.getElementById("country").getElementsByTagName("option");
		
		for (var o = 0; o < optCountries.length; o++) {
			if (optCountries[o].value != null) {
				optCountries[o].style.paddingLeft = "22px";
				optCountries[o].style.backgroundImage = "url(images/flags/" + optCountries[o].value.toLowerCase() + ".gif)";
				optCountries[o].style.backgroundRepeat = "no-repeat";
				optCountries[o].style.backgroundPosition = "0 2px";
			}
		}
		
		// a kijelölt kontrolok csoportját kiemeljük
		var controls = form.getElementsByTagName("select");
		for (var c = 0; c < controls.length; c++)
			controls[c].onfocus = function() { selectControl(this); }

		// emelett a szövegdobozoknál kezeljük az alapértelmezett értékeket
		var controls = form.getElementsByTagName("input");
		for (var c = 0; c < controls.length; c++) {
			controls[c].onfocus = function() { selectControl(this); }
			controls[c].onblur = function() { releaseControl(this); }

			// van-e hozzátartozó alapértelmezett érték
			if (defValue[controls[c].name] != null) {
				controls[c].value = defValue[controls[c].name];
				controls[c].defaultValue = defValue[controls[c].name];
				controls[c].className += " default";
			}
		}

		// a szövegdobozoknál pedig számoljuk és limitáljuk a karaktereket
		var controls = form.getElementsByTagName("textarea");
		for (var c = 0; c < controls.length; c++) {
			controls[c].onfocus = function() { selectControl(this); }
			
			// mindeképpen kell egy azonosító
			controls[c].id = controls[c].id || "_textarea_" + c;
			
			// megadtak-e maximális hosszt
			var maxLength = 0;
			if (controls[c].className) {
				var match = new RegExp(/\bmaxlen(\d{1,4})\b/).exec(controls[c].className);
				if (match != null) maxLength = parseInt(match[1]);
			}
			
			// létrehozzuk a számláló div-et
			var counterDiv = document.createElement("div");
			counterDiv.className = "counter";
			counterDiv.innerHTML = '<span class="charnum" id="' + controls[c].id + '_charnum">0</span>';
			if (maxLength > 0)
				counterDiv.innerHTML += '/' + maxLength;
			counterDiv.innerHTML += ' characters';
			
			// a számlálót beszúrjuk a szövegdoboz mögé
			controls[c].parentNode.insertBefore(counterDiv, controls[c].nextSibling)
					
			// hozzáfűzzűk a szükséges funkciót is
			controls[c].onkeyup = function() { textCounter(this); }
		}
			
		// a szövegcsoportoknál gondoskodunk a következő/előző elemre ugrásról
		var lists = form.getElementsByTagName("ul");
		for (var l = 0; l < lists.length; l++) {
			if (lists[l].className.indexOf("textgroup") > -1) {
				var elems = lists[l].getElementsByTagName("input");
				for (var e = 0; e < elems.length; e++) {
					elems[e].id = "_tg_" + l + "_" + e;
					
					elems[e].onkeypress = function(evt) {
						var charCode = (evt) ? evt.charCode : window.event.keyCode;
						if (charCode > 31 && (charCode < 48 || charCode > 57))
				            return false;
						else
					         return true;
					}
					
					elems[e].onkeyup = jumpNextElem;
				}
			}
		}
		
		// az adatok törlésekor is szürkévé tesszük az alapértelmezett értékkel rendelkező szöveges mezőket
		form.onreset = function() { 
			controls = document.getElementById("registration").getElementsByTagName("input");
			for (var c = 0; c < controls.length; c++) {
				if (defValue[controls[c].name] != null) {
					controls[c].className += " default";
				}
			}
		};
	}
}

window.onload = initPage;


