// ../script/AC_RunActiveContent.js -> beolvasva	
// ../script/ajax.js -> beolvasva	
// ../script/dialogManager.js -> beolvasva	
// ../script/script.js -> beolvasva	
//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }

  document.write(str);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
	
	
var ajaxcomm = 0;
var ajaxArray = new Array();
var cSearch = "";

function fDelPic(picid, dtype){
	obj = fGetObject("fpic_"+String(picid));
	obj.innerHTML = '<span class="refresh">törlés folyamatban...</span>';
	
	ajaxArray.push(Array("doajax.php?type=delpic","picid="+String(picid)+"&deltype="+String(dtype),"commGateGeneral"));	
	fCallxmlhttpPost();
}

function fOut(){
	fGetObject("div_enter1").innerHTML = "KILÉPÉS FOLYAMATBAN";

	ajaxArray.push(Array("../doajax.php?type=out","","commGateOut"));	
	fCallxmlhttpPost();
}

function commGateOut(str){
	ajaxcomm = 0;
	var aTmp = fGetToken(str, "<aranypenge>");
	
	if(aTmp[0] == 1){
		dialogManager.add(new Dialog('Sikeres kijelentkezés!', 'alert', [function(){ window.location.reload(); }, null, null]));
	}else
		fGetObject("div_enter1").innerHTML = '<a class="link2" href="javascript:fOut()">kilépés</a>';
}

function fEnter(){
	fGetObject("div_enter1").innerHTML = "ELLENŐRZÉS";
	var pUname = new String(fGetObject("uname").value);
	var pUpass = new String(fGetObject("upass").value);
	
	ajaxArray.push(Array("../doajax.php?type=enter","uname="+pUname+"&upass="+pUpass,"commGateEnter"));	
	fCallxmlhttpPost();
}

function commGateEnter(str){
	ajaxcomm = 0;
	var aTmp = fGetToken(str, "<aranypenge>");
	
	if(aTmp[0] == 1){
		dialogManager.add(new Dialog('Sikeresen bejelentkezés!', 'alert', [function(){ window.location.reload(); }, null, null]));		
	}else if(aTmp[0] == 2){
		dialogManager.add(new Dialog('Hibás jelszó, nem sikerült a belépés!', 'alert'));
		fGetObject("div_enter1").innerHTML = '<a class="link2" href="javascript:fEnter()">belépés</a>';
	}	
}

function fClickDb(tmp, objname, pid){	
	obj = fGetObject(objname+"_db");
	if(obj){		
		if(!fIsNum3(obj)){
			obj.value = 0;
		}
		dbc = Number(obj.value)+Number(tmp);
		if(dbc>0){
			fGetObject(objname+"_t").innerHTML = '...';
			fGetObject(objname+"_a").innerHTML = '...';
			ajaxArray.push(Array("../doajax.php?type=cart_mod","pid="+pid+"&count="+String(dbc)+"&objname="+objname,"commGateClickDb"));	
			fCallxmlhttpPost();
		}
	}
}

function commGateClickDb(str){
	ajaxcomm = 0;
	var aTmp = fGetToken(str, "<aranypenge>");
	
	if(aTmp[0] == 1){
		fGetObject(aTmp[1]+"_db").value = aTmp[2];
		fCalculateCart();
	}
}

function fAddCart(pid){
	objc = fGetObject("pid_"+pid);
	if(objc && objc.value>0){
		ajaxArray.push(Array("../doajax.php?type=cart_add","pid="+pid+"&count="+String(objc.value),"commGateGeneral"));	
		fCallxmlhttpPost();
		objc.value = 0;
	}
}

function commGateGeneral(str){
	ajaxcomm = 0;
	var aTmp = fGetToken(str, "<aranypenge>");
	if(aTmp[0] != -1)
		eval(aTmp[1]);
}

function fSearchKendes(obj){	
	w = 1;
	objm = fGetObject("menu_1");
	while(objm){		
		objm.className = "menu";
		
		fGetObject("menu_"+String(w)+"_a").className = "menua";

		w++;
		objm = fGetObject("menu_"+String(w));
	}
	if(obj.value == ""){
		cSearch = "";
		obj2 = fGetObject("searchresult");
		if(obj2)
			obj2.innerHTML = '<span class="refresh">a keresés gépelés közben automatikusan zajlik (joker karakter: *)</span>';		
	}else if(obj.value != cSearch){
		cSearch = obj.value;
		fGetObject("content").style.display = "none";
		fGetObject("searchresult").style.display = "block";
		
		xmlhttpPostSearch("../doajax.php?type=searchweb", "str_search="+String(obj.value), "commGateResultTable");
	}
}

function commGateResultTable(str){
	var aTmp = fGetToken(str, "<aranypenge>");
	tmp = '<table width="877" border="0" cellspacing="0" cellpadding="0"><tr><td width="110" class="prod_list_head">&nbsp;</td><td valign="top" colspan="5"><img src="../img/spacer.gif" width="2" height="2" /><td class="prod_list_head" width="237" style="border-right:1px solid #e7e7e7;">típus</td><td class="prod_list_head" width="200" style="border-right:1px solid #e7e7e7;">leírás</td><td width="110" class="prod_list_head" style="border-right:1px solid #e7e7e7;"><div align="center">méretek</div></td><td width="110" class="prod_list_head" style="border-right:1px solid #e7e7e7;"><div align="center">teljesítmény</div></td><td width="110" class="prod_list_head" style="border-right:1px solid #e7e7e7;"><div align="center">ár</div></td></tr><tr><td valign="top" colspan="5"><img src="../img/spacer.gif" width="2" height="2" /></td></tr>';
	
	tmpcount = 0;
	if(aTmp[0] == -1){
		tmp += '<tr><td colspan="8">nincs termék a kategóriában</td></tr>';
	}else{
		for(q=0; q<aTmp.length; q++){		
			if(aTmp[q] != -9){
				tmp += '<tr><td width="110" rowspan="2" align="center" valign="middle" style="border-left:1px solid #000000; border-top:1px solid #000000; border-bottom:1px solid #000000; padding:5px; ';
				
				if(aTmp[q+10] == 'y')
					tmp += 'background:url(../img/metro_logo.jpg) center bottom; background-repeat:no-repeat;';
				
				tmp += '"><div align="center" style="text-align:center;">'+aTmp[q+8]+'</div></td>';
				tmp += '<td colspan="5" rowspan="2" valign="top"><img src="../img/spacer.gif" width="2" height="2" />';
				tmp += '<td width="237" style="border-top:1px solid #000000; border-right:1px solid #e7e7e7; border-left:1px solid #e7e7e7; padding:10px; text-align:left;" align="left">';
														  
				tmp += '<span style="font-size:14px; font-weight:bold;">'+aTmp[q+1]+'</span><br><br>';
				
				if(aTmp[q+10] == 'y')
					tmp += '<span style="font-weight:bold; color:#053cc4;">Kizárólag METRO áruházakban rendelhető!</span><br><br>';
					
				tmp += aTmp[q+6]+' - '+aTmp[q+7]+'<br>';
				tmp += '<a href="../../script/termek.php?pid='+aTmp[q]+'" class="product_detail">részletes termékinformáció ></a>';
				tmp += '</td>';
												
				tmp += '<td width="200" style="border-top:1px solid #000000; border-right:1px solid #e7e7e7; border-left:1px solid #e7e7e7; padding:10px; text-align:left;" align="left">';											
												
				tmp += aTmp[q+3];
														  
				tmp += '</td><td width="110" style="border-top:1px solid #000000; border-right:1px solid #e7e7e7;"><div align="center">'+aTmp[q+4]+'</div></td><td width="110" style="border-top:1px solid #000000; border-right:1px solid #e7e7e7;"><div align="center">';
												
				tmp += aTmp[q+5]+' </div></td><td width="110" style="border-top:1px solid #000000;"><div align="center" style="font-size:14px; font-weight:bold;">'+aTmp[q+9]+' </div></td></tr><tr>';
				
				tmp += '<td height="10" bgcolor="#e7e7e7" style="border-bottom:1px solid #000000;">&nbsp;</td>';
				tmp += '<td height="10" bgcolor="#e7e7e7" style="border-bottom:1px solid #000000;">&nbsp;</td>';
				tmp += '<td width="110" height="10" bgcolor="#e7e7e7" style="border-bottom:1px solid #000000;">&nbsp;</td>';
				tmp += '<td width="110" height="10" bgcolor="#e7e7e7" style="border-bottom:1px solid #000000; border-right:1px solid #000000;">&nbsp;</td>';
				tmp += '<td width="110" height="10" align="right" valign="bottom" style="border-top:1px solid #000000; padding-left:2px; padding-bottom:2px; padding-top:3px;"><table width="100%" border="0" cellspacing="0" cellpadding="0">';
						                     
				tmp += '<tr><td><img src="../../img/cart.jpg" /></td><td>kosárba [db]:</td><td><input type="text" id="pid_'+aTmp[q]+'" value="1" class="inputcount" onkeyup="fIsNum3(this); fHitEnter(event, \'addcart_'+aTmp[q]+'\');"></td><td><a href="javascript:fAddCart(\''+aTmp[q]+'\');"><img src="../../img/arrow.jpg" width="13" height="13" border="0" /></a></td></tr></table></td></tr>';
													
				tmp += '<tr><td valign="top" colspan="5"><img src="../img/spacer.gif" width="2" height="2" /></td></tr>';
				q = q+10;
			}else{
				tmp += '<tr><td colspan="8" align="center" style="padding:10px;"><b>'+aTmp[q+1]+'</b></td></tr>';
				break;
			}
		}
	}
		
	tmp += '</table>';
	
	obj = fGetObject("searchresult");
	if(obj)
		obj.innerHTML = tmp;
}

function fCallxmlhttpPost(){
	if(ajaxcomm == 0 && ajaxArray.length>0){
		ajaxcomm = 1;
		param = ajaxArray.shift()
		xmlhttpPost(param[0], param[1], param[2]);
	}else if(ajaxcomm == 1 && ajaxArray.length>0){
		setTimeout("fCallxmlhttpPost()", 500);
	}	
}

function fGetToken(str, token){
	var aReturn = new Array();
	var str = new String(str);
	var token = new String(token);
	pos = str.indexOf(token);
	while(pos != -1){
		aReturn.push(str.substring(0,pos));
		str = str.substring(pos + token.length)
		pos = str.indexOf(token);
	}
	aReturn.push(str);
	return aReturn;
}

function xmlhttpPost(strUrl, strQuery, strCallBack) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strUrl, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4){
			eval(strCallBack + "(self.xmlHttpReq.responseText)");
        }
    }
    self.xmlHttpReq.send(strQuery);
}

function xmlhttpPostSearch(strUrl, strQuery, strCallBack) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strUrl, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4){
			eval(strCallBack + "(self.xmlHttpReq.responseText)");
        }
    }
    self.xmlHttpReq.send(strQuery);
}

function commGateChangeDropDown(str){
	ajaxcomm = 0;
	var aTmp = fGetToken(str, "<aranypenge>");
	
	tmp = "<select id='"+ aTmp[0] +"' name='"+ aTmp[0] +"' class='input' onchange='" + aTmp[1] + "'>";		
	
	for(q=2; q<aTmp.length; q++)
		tmp += "<option value='"+aTmp[q]+"' id='"+aTmp[++q]+"'>"+aTmp[q]+"</option>";
		
	tmp += "</select>";
	
	obj = fGetObject("div_" + aTmp[0]);
	if(obj)
		obj.innerHTML = tmp;
}

function commGateChangeDropDownSearch(str){
	var aTmp = fGetToken(str, "<aranypenge>");
	
	tmp = "<select id='"+ aTmp[0] +"' name='"+ aTmp[0] +"' class='input' onchange='" + aTmp[1] + "'>";		
	
	for(q=2; q<aTmp.length; q++)
		tmp += "<option value='"+aTmp[q]+"' id='"+aTmp[++q]+"'>"+aTmp[q]+"</option>";
		
	tmp += "</select>";
	
	obj = fGetObject("div_" + aTmp[0]);
	if(obj)
		obj.innerHTML = tmp;
}	
	
/*a html oldalba a </body> elé kell betenni

<div id="DialogBox" style="display: none;">
	<div class="dialogBoxBorder">
		<div id="dialogContent" class="dialogBoxContent"> </div>
	</div>
</div>
<div id="DialogPreLoading" style="display: none;">
	<center>
		<img class="preSpin" alt="loading" src="../img/preSpin.gif"/>
	</center>
</div>
<div id="DialogBackground" style="display: none;"> </div>
*/

/*a html oldalba be kell linkelni a dialogbox.css-t

<link href="../../script/path/dialogbox.css" rel="stylesheet" type="text/css" />

*/

/*template fileokat (kiterjesztésük .tmpl) valahavoa felmásolni és az elérését beállítani

TemplateManager.URL = "../dialogtemplate/";

*/

/*Példák a hazsnálathoz:

dialogManager.add(new Dialog('Üzenet ami megjelenik!', 'alert'));

dialogManager.add(new Dialog(
				"Biztosan törölni akarod?",
				"confirm",
				[ null, function () { self.removeMessage(messageId, folder, true); }, null ],
				[ "", "Igen", "Nem" ])
				);
*/



/**
 * Converts object's properties to Map, except functions
 * @return Converted object
 * @type Map
 * @author Cser Dániel
 */
Object.prototype.toMap = function() {
	var map = new Map();
	
	for (var key in this) {
		if (typeof(this[key]) != "function") {
			map.put(key, this[key]);
		}
	}
	
	return map;
}

/** 
 * Collection used to store data by key-value pairs.
 * @constructor
 * @author Cser Dániel
 */
function Map() {
	
	/**
	 * Data holding maps elements
	 * @type Array
	 */
	var data;
	
	/**
	 * Pointer to this
	 * @type Map
	 */
	var self = this;
	
	/**
	 * Put a value by a given key. If the key already exists, it will be overridden.
	 * @param String Key of data
	 * @param mixed Value of data
	 */
	this.put = function(elementKey, elementValue) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() == elementKey) {
				data[i].setValue(elementValue);
				return;
			}
		}
		
		data.push(new MapElement(elementKey, elementValue));
	}
	
	/**
	 * Returns value by a given key.
	 * @param String Key of value
	 * @return Found value
	 * @type mixed
	 */
	this.get = function(elementKey) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() == elementKey) {
				return data[i].getValue();
			}
		}
		
		return null;
	}
	
	/**
	 * Returns true when key is exists in the map
	 * @param String Key of value
	 * @return True when key exists
	 * @type boolean
	 */
	this.containsKey = function(elementKey) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() == elementKey) {
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * Returns true when value is exists in the map
	 * @param mixed Value
	 * @return True when value exists
	 * @type boolean
	 */
	this.containsValue = function(elementValue) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getValue() == elementValue) {
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * Returns the keyset of thew map
	 * @return Keyset of the map
	 * @type Set
	 */
	this.keys = function() {
		var set = new Set();
		
		for (var i = 0; i < data.length; i++) {
			set.add(data[i].getKey());
		}
		
		return set;
	}
	
	/**
	 * Returns the keyset of thew map
	 * @return Keyset of the map
	 * @type Array
	 */
	this.keysArray = function() {
		var array = new Array();
		
		for (var i = 0; i < data.length; i++) {
			array.push(data[i].getKey());
		}
		
		return array;
	}
	
	/**
	 * Returns the valueset of the map
	 * @return Valueset of the map
	 * @type Set
	 */
	this.values = function() {
		var set = new Set();
		
		for (var i = 0; i < data.length; i++) {
			set.add(data[i].getValue());
		}
		
		return set;
	}
	
	/**
	 * Returns the valueset of the map
	 * @return Valueset of the map
	 * @type Array
	 */
	this.valuesArray = function() {
		var array = new Array();
		
		for (var i = 0; i < data.length; i++) {
			array.push(data[i].getValue());
		}
		
		return array;
	}
	
	/**
	 * Removes an element by the given key
	 * @param String key
	 */
	this.remove = function(elementKey) {
		var newData = new Array();
		
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() != elementKey) {
				newData.push(data[i]);
			}
		}
		
		data = newData;
	}
	
	/**
	 * Empties the map
	 */
	this.clear = function() {
		data = new Array();
	}
	
	/**
	 * Returns true when map is empty
	 * @return True when map is empty
	 * @type boolean
	 */
	this.isEmpty = function() {
		return data.length == 0;
	}
	
	/**
	 * Returns the size of the map
	 * @return Size of the map
	 * @type Number
	 */
	this.size = function() {
		return data.length;
	}
	
	/**
	 * Converts map to object
	 * @return Converted map
	 * @type Object
	 */
	this.toObject = function() {
		var obj = new Object();
		
		for (var i = 0; i < data.length; i++) {
			obj[data[i].getKey()] = data[i].getValue();
		}
		
		return obj;
	}
	
	/**
	 * Sorts contained elements by the given function
	 * @param Function Function used to sort
	 */
	this.sort = function(sortBy) {
		data = data.sort(sortBy);
	}
	
	/**
	 * Calls callback on every element of the map
	 * @param Function Callback function
	 */
	this.map = function(callback) {
		for (var i = 0; i < data.length; i++) {
			callback(data[i].getValue());
		}
	}
	
	/**
	 * Returns true if keys and values of maps are equal
	 * @return True if keys and values of maps are equal
	 * @type Boolean
	 */
	this.equalsTo = function(otherMap) {
		if (! checkType(otherMap, Map)) {
			return false;
		}
		
		if (! self.keys().equalsTo(otherMap.keys()) || ! self.values().equalsTo(otherMap.values())) {
			return false;
		}
		
		return true;
	}
	
	/**
	 * Returns the next element relative to the given
	 * @param mixed Key of element
	 * @return The next element relative to the given
	 * @type mixed
	 */
	this.nextElement = function(elementKey) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() == elementKey) {
				return (data[i + 1] != undefined ? data[i + 1].getValue() : null);
			}
		}
		
		return null;
	}
	
	/**
	 * Returns the previous element relative to the given
	 * @param mixed Key of element
	 * @return The previous element relative to the given
	 * @type mixed
	 */
	this.prevElement = function(elementKey) {
		for (var i = 0; i < data.length; i++) {
			if (data[i].getKey() == elementKey) {
				return (data[i - 1] != undefined ? data[i - 1].getValue() : null);
			}
		}
		
		return null;
	}
	
	//Initialize
	data = new Array();
	
	/**
	 * Internal class for holding a key-value pair
	 * @param String Key of element
	 * @param mixed Value of element
	 */
	function MapElement(elementKey, elementValue) {
		
		/**
		 * Key of element
		 * @type String
		 */
		var key = elementKey;
		
		/**
		 * Value of element
		 * @type mixed
		 */
		var value = elementValue;
		
		/**
		 * Return the key of element
		 * @return Key of element
		 * @type String
		 */
		this.getKey = function() {
			return key;
		}
		
		/**
		 * Returns the value of element
		 * @return Value of element
		 * @type mixed
		 */
		this.getValue = function() {
			return value;
		}
		
		/**
		 * Set the new value of element
		 * @param mixed New value
		 */
		this.setValue = function(elementValue) {
			value = elementValue;
		}
		
	}
	
}

/**
 * Prototype.js style getElementById
 * @param String Id of DOM object
 * @return Found DOM object
 * @type Object
 */
function $(id) {
	return document.getElementById(id);
}

/**
 * Check if the variable is not null and is defined
 * @param mixed Variable to check
 * @return True if it's OK
 * @type Boolean
 */
function check(variable) {
	return (variable != null && variable != undefined);
}

/**
 * Check if the variable is not null and is defined and is instanceof type
 * @param mixed Variable to check
 * @return True if it's OK
 * @type Boolean
 */
function checkType(variable, type) {
	return (variable != null && variable != undefined && variable instanceof type);
}


/**
 * Returns a file content by a given URL
 * @param String URL of file
 * @throws When URL is null
 * @throws When XMLHttpRequest object cannot be created.
 * @return File content
 * @type String
 */
function getStringByUrl(url){
	if (! check(url) || url.length == 0)
		alert("getStringByUrl(): Invalid parameters.");
		
	var randomSeed = Math.floor(Math.random() * (10001));
	
	var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
	
	self.xmlHttpReq.open('GET', url + "?random=" + randomSeed, false);
	self.xmlHttpReq.send(null);
	
	if (self.xmlHttpReq.status != 200) {
		//TODO: Log error
		return;
	}

	return self.xmlHttpReq.responseText;
}


/**
 * Represents an element in the dialog queue
 * @param String Message
 * @param String Type
 * @param Array Callbacks
 * @param Array Captions
 * @author Cser Dániel
 */
function Dialog(dialogMessage, dialogType, dialogCallbacks, dialogCaptions) {
	
	/**
	 * Message
	 * @type String
	 */
	var message;
	
	/**
	 * Type
	 * @type Number
	 */
	var type;
	
	/**
	 * Callbacks
	 * @type Array
	 */
	var callbacks;
	
	/**
	 * Captions
	 * @type Array
	 */
	var captions;
	
	/**
	 * OK constant for captions and callbacks
	 * @type Number
	 */
	Dialog.OK = 0;
	
	/**
	 * YES constant for captions and callbacks
	 * @type Number
	 */
	Dialog.YES = 1;
	
	/**
	 * NO constant for captions and callbacks
	 * @type Number
	 */
	Dialog.NO = 2;
	
	/**
	 * Returns message
	 * @return Message
	 * @type String
	 */
	this.getMessage = function() {
		return message;
	}
	
	/**
	 * Sets message
	 * @param String Message
	 */
	this.setMessage = function(dialogMessage) {
		if (! dialogMessage) {
			//TODO: Log error
			return;
		}
		
		message = String(dialogMessage);
	}
	
	/**
	 * Returns type
	 * @return Type
	 * @type Number
	 */
	this.getType = function() {
		return type;
	}
	
	/**
	 * Sets type
	 * @param Number Type
	 */
	this.setType = function(dialogType) {
		if (! dialogType) {
			//TODO: Log error
			return;
		}
		
		type = Number(dialogType);
	}
	
	/**
	 * Returns the requested callback
	 * @param Number Which callback
	 * @return Requested callback
	 * @type String
	 */
	this.getCallback = function(callbackType) {
		//az összes callback állítása esetén ez nem tömb, ezért ezzel csak az x karaktert adja vissza,
		//mivel String tömbként kezeli, így ezt vizsgálni és kezelni kell
		//return callbacks[Number(callbackType)];
		if( callbacks instanceof Array )
			return callbacks[Number(callbackType)];	
		else
			return callbacks;
	}
	
	/**
	 * Sets the given callback
	 * @param Number Which callback
	 * @param Function Callback function
	 */
	this.setCallback = function(callbackType, dialogCallback) {
		if (! callbackType || ! dialogCallback) {
			//TODO: Log error
			return;
		}
		
		callbacks[Number(callbackType)] = dialogCallback;
	}
	
	/**
	 * Sets all callbacks
	 * @param Array Callback array
	 */
	this.setCallbacks = function(dialogCallbacks) {
		if (! dialogCallbacks || ! dialogCallbacks instanceof Array) {
			//TODO: Log error
			return;
		}
		
		callbacks = dialogCallbacks;
	}
	
	/**
	 * Returns the requested caption
	 * @param Number Which caption
	 * @return Requested caption
	 * @type String
	 */
	this.getCaption = function(captionType) {
		return captions[Number(captionType)];
	}
	
	/**
	 * Sets the given caption
	 * @param Number Which caption
	 * @param String Caption
	 */
	this.setCaption = function(captionType, dialogCaption) {
		if (! captionType || ! dialogCaption) {
			//TODO: Log error
			return;
		}
		
		captions[Number(captionType)] = String(dialogCaption);
	}
	
	/**
	 * Sets all captions
	 * @param Array Captions array
	 */
	this.setCaptions = function(dialogCaptions) {
		if (! dialogCaptions || ! dialogCaptions instanceof Array) {
			//TODO: Log error
			return;
		}
		
		captions = dialogCaptions;
	}
	
	//Initialize
	message = dialogMessage || "";
	type = dialogType || "";
	callbacks = dialogCallbacks || [null, null, null];
	captions = dialogCaptions || ["Ok", "Igen", "Nem"];
	
}

/**
 * Default parser used to parse template
 * @constructor
 * @author Cser Dániel
 */
var DefaultParser = {
	
	/**
	 * Object containing statements
	 * @type Object
	 */
	statements: {
		"if":      { delta: 1,  prefix: "if (", suffix: ") {\n", minParams: 1 },
		
		"elseif":  { delta: 0,  prefix: "} else if (", suffix: ") {\n" },
		
		"else":    { delta: 0,  prefix: "} else {\n" },
		
		"/if":     { delta: -1, prefix: "}\n" },
		
		"for":     {
			delta: 1,
			
			prefix: function(parameters) {
				if (parameters[1] != "in") {
					throw new TemplateParseError("Error parsing template " + name + ", loop with bad parameters: " + parameters.join(" ") + ".");
				}
				
				return [
					"if (typeof(_FORS) == \"undefined\" || ! _FORS.length) {\n  var _FORS = [];\n}\n",
					"_FORS.push(0);\n",
					"if (typeof(" + parameters[2] + ") != \"undefined\" && " + parameters[2] + " instanceof Array) {\n",
					"  var " + parameters[0] + "Array = " + parameters[2] + ";\n",
					"  for (var " + parameters[0] + "Iterator = 0; " + parameters[0] + "Iterator < " + parameters[0] + "Array.length; " + parameters[0] + "Iterator++) {\n",
					"    var " + parameters[0] + " = " + parameters[0] + "Array[" + parameters[0] + "Iterator];\n",
					"    _FORS[_FORS.length - 1]++;\n"].join("");
			},
			
			minParams: 3
		},
		
		"forelse": { delta: 0,  prefix: "  }\n}\n if (_FORS[_FORS.length - 1] == 0) {\n  if (true) {\n" },
		
		"/for":    { delta: -1, prefix: "  }\n}\n" },
		
		"eat":     { delta: 1, prefix: "/*\n" },
		
		"/eat":    { delta: -1, prefix: "*/\n" },
		
		"include": {
			delta: 0,
			
			prefix: function(parameters) {
				var templateName = parameters.shift();
				var templateWith = parameters.shift();
				
				if (templateWith != "with") {
					throw new TemplateParseError("Error parsing template " + name + ", include with bad parameters: " + parameters.join(" ") + ".");
				}
				
				return "_OUT.push(templateManager.getTemplate(" + templateName + ").process({ " + parameters.join(" ") + " }));\n";
			},
			
			minParams: 3 }
	},
	
	/**
	 * Object containing modifiers
	 * @type Object
	 */
	modifiers: {
		//Eats the whole string
		"eat":        function(s) { return ""; },
		
		//Upper-cases string
		"upperCase":  function(s) { return String(s).toUpperCase(); },
		
		//Lower-cases string
		"lowerCase":  function(s) { return String(s).toLowerCase(); },
		
		//Return first param if that is not a nullstring, second param else
		"default":    function(s1, s2) { return String(s1).length > 0 ? s1 : s2; },
		
		//Upper-cases first characters of every word
		"capitalize": function(s) {
			var words = String(s).split(" ");
			var capitalized = [];
			
			for (var i = 0; i < words.length; i++) {
				capitalized.push(this["ucFirst"](words[i]));
			}
			
			return capitalized.join(" ");
		},
		
		//Upper-cases first character
		"ucFirst":    function(s) {
			var oldStr = String(s);
			var newStr = String(oldStr[0]).toUpperCase();
			
			for (var i = 1; i < oldStr.length; i++) {
				newStr += oldStr[i];
			}
			
			return newStr;
		},
		
		//Lower-cases first character
		"lcFirst":    function(s) {
			var oldStr = String(s);
			var newStr = String(oldStr[0]).toLowerCase();
			
			for (var i = 0; i < oldStr.length; i++) {
				newStr += oldStr[i];
			}
			
			return newStr;
		},
		
		//Trims whitespaces form the beginning and end of the string
		"trim":       function(s) { return String(s).replace(/^\s+|\s+$/, ''); }
	}
	
}



/**
 * Represents a parsed template
 * @constructor
 * @author Cser Dániel
 */
function Template(templateName, tmpl, templateParser) {
	
	/**
	 * Template source
	 * @type String
	 */
	var source;
	
	/**
	 * Parsed string
	 * @type String
	 */
	var template;
	
	/**
	 * Name of template
	 * @type String
	 */
	var name;
	
	/**
	 * Template parser object
	 * @type Object
	 */
	var parser;
	
	/**
	 * Temp variable to check the number of start/end tags
	 * @type Number
	 */
	var delta;
	
	/**
	 * Parses the whole template and return the parsed and eval'd code
	 * @param String Template to parse
	 * @throws TemplateParseError on template parsing errors
	 * @return Parsed template
	 * @type String
	 */
	function parse(tmpl) {
		tmpl = new String(tmpl);
		
		tmpl = tmpl.replace(/\t/g, "    "); //convert \t to four spaces
		tmpl = tmpl.replace(/\r\n/g, "\n"); //convert windows line delimiters to unix style
		tmpl = tmpl.replace(/\r/g, "\n"); //convert macosx line delimiters to unix style
		
		var actualPos = -1;
		var parsed = ["function evalTmpl(_OUT, _CONTEXT, _MODIFIERS) { with (_CONTEXT) {\n"];
		
		while (actualPos + 1 < tmpl.length) {
			var statementStart = tmpl.indexOf("{", actualPos);
			
			if (statementStart < 0) {
				break;
			}
			
			var statementEnd = tmpl.indexOf("}", statementStart + 1);
			
			if (statementEnd < 0) {
				break;
			}
			
			if (tmpl.charAt(statementStart - 1) == "$") { //expression which will be shown
				parseText(parsed, tmpl.substring(actualPos, statementStart - 1));
				parseExpression(parsed, tmpl.substring(statementStart + 1, statementEnd));
			} else { //statement
				parseText(parsed, tmpl.substring(actualPos, statementStart));
				parseStatement(parsed, tmpl.substring(statementStart + 1, statementEnd));
			}
			
			actualPos = statementEnd + 1;
		}
		
		if (delta != 0) {
			throw new TemplateParseError("Error parsing template " + name + ", tag start/end tags number are not the same.");
		}
		
		//last piece of text
		parseText(parsed, tmpl.substring(actualPos, tmpl.length));
		
		parsed.push("} }");
		
		eval(parsed.join(""));
		
		return evalTmpl;
	}
	
	/**
	 * Parses the text
	 * @param Array Array to push results
	 * @param String Text to parse
	 */
	function parseText(out, text) {
		if (! text && text.length == 0) {
			return "";
		}
		
		var nlPrefix = 0; //index to first non-newline in prefix.
	    var nlSuffix = text.length - 1; //index to first non-space/tab in suffix.
	    
	    while (nlPrefix < text.length && text.charAt(nlPrefix) == "\n") {
	    	nlPrefix++;
	    }
	    
	    while (nlSuffix >= 0 && (text.charAt(nlSuffix) == " " || text.charAt(nlSuffix) == "\t")) {
	    	nlSuffix--;
	    }
	    
	    if (nlSuffix < nlPrefix) {
	    	nlSuffix = nlPrefix;
	    }
	    
	    var lines = text.substring(nlPrefix, nlSuffix + 1).split("\n");
	    
	    for (var i = 0; i < lines.length; i++) {
			out.push("_OUT.push(\"" + lines[i].replace(/"/g, "\\\"") + "\");\n");
			
			if (i < lines.length - 1) {
	            out.push('_OUT.push("\\n");\n');
	        }
		}
	}
	
	/**
	 * Parses the expressions
	 * @param Array Array to push results
	 * @param String Expression to parse
	 * @throws TemplateParseError on template parsing errors
	 */
	function parseExpression(out, expression) {
		if (! expression && expression.length == 0) {
			return "";
		}
		
		var modifiers = expression.split("|");
		expression = modifiers.shift();
		
		var expr = expression;
		var parts;
		var modifier;
		
		for (var i = 0; i < modifiers.length; i++) {
			parts = modifiers[i].split(":");
			modifier = parts.shift();
			
			if (parser.modifiers[modifier] == null) {
				throw new TemplateParseError("Error parsing template " + name + ", no such modifier: " + modifier + ".");
			}
			
			expr = "_MODIFIERS[\"" + modifier + "\"](" + expr + (parts.length > 0 ? ", " + parts[0].replace(/"/g, "\"") : "") + ")";
		}
		
		out.push("_OUT.push(" + expr + ");\n");
	}
	
	/**
	 * Parses the statements
	 * @param Array Array to push results
	 * @param String Statements to parse
	 * @throws TemplateParseError on template parsing errors
	 */
	function parseStatement(out, stmt) {
		if (! stmt && stmt.length == 0) {
			return;
		}
		
		parameters = stmt.split(" ");
		statement = parameters.shift();
		
		statement = parser.statements[statement];
		
		if (statement == null) {
			parseText(out, stmt);
		}
		
		delta += statement.delta;
		
		if (delta < 0) {
			throw new TemplateParseError("Error parsing template " + name + ", fewer start tags then end tags.");
		}
		
		if (statement.minParams != null && statement.minParams > parameters.length) {
			throw new TemplateParseError("Error parsing template " + name + ", too few parameters.");
		}
		
		if (typeof(statement.prefix) == "function") {
			out.push(statement.prefix(parameters));
		} else {
			out.push(statement.prefix);
		}
		
		if (statement.suffix != null) {
			out.push(parameters.join(" "));
			out.push(statement.suffix);
		}
	}
	
	/**
	 * Processes the template with the given context
	 * @param Object Context of template
	 * @throws TemplateProcessError template on processing errors
	 * @return Ready-to-use template
	 * @type String
	 */
	this.process = function(context) {
		if (! context || ! template) {
			return "";
		}
		
		var processed = [];
		
		try {
			template(processed, context, parser.modifiers);
		} catch(e) {
			throw new TemplateProcessError(e.message, e.fileName, e.lineNumber, e.stack);
		}
		
		return processed.join("");
	}
	
	/**
	 * Returns HTML source
	 * @return HTML source
	 * @type String
	 */
	this.getSource = function() {
		return source;
	}
	
	//Initialize
	if (! tmpl || ! templateName || tmpl.length == 0 || templateName.length == 0) {
		return null;
	}
	
	if (templateParser != null) {
		parser = templateParser;
	} else {
		parser = DefaultParser;
	}
	
	name = templateName;
	delta = 0;
	source = new String(tmpl);
	template = parse(tmpl);
	
}
/**
 * Loads and caches templates.
 * @constructor
 * @author Cser Dániel
 */
function TemplateManager() {
	
	/**
	 * Base dir of templates.
	 * Set in config.js
	 * @type String
	 */
	TemplateManager.URL = "../2010/dialogtemplate/";
	
	/**
	 * Map to store templates
	 * @type Map
	 */
	var templates;
	
	/**
	 * Corrects the name of template
	 */
	function correctName(templateName) {
		return String(templateName).toLowerCase();
	}
	
	/**
	 * Returns the template and loads it when necessary
	 * @param String Name of template
	 * @throws On parsing errors
	 * @return Template
	 * @type Template
	 */
	function get(templateName) {
		templateName = correctName(templateName);
		if (! templates.containsKey(templateName)) {
			if (! check(TemplateManager.URL)) {
				//TODO: Log error
				return null;
			}
			
			var templateUrl = TemplateManager.URL + templateName.replace(/_/g, "/") + ".tmpl";
			
			try {
				var templateData = getStringByUrl(templateUrl);
			} catch (e) {
				alert("TemplateHandler.get(): Couldn't read file " + templateUrl + ".");
				//throw new TemplateParseError("TemplateHandler.get(): Couldn't read file " + templateUrl + ".");
			}
			templates.put(templateName, new Template(templateName, templateData));
		}
		return templates.get(templateName);
	}
	
	/**
	 * Returns the given template
	 * @param String Name of template
	 * @throws On parsing errors
	 * @return Template
	 * @type Template
	 */
	this.getTemplate = function(templateName) {
		return get(templateName);
	}
	
	/**
	 * Processes the given template with the given context, then puts it into the given DOM object
	 * @param String Name of template
	 * @param Object Template context
	 * @param String Id of DOM object to put the template
	 * @throws On parsing errors
	 */
	this.processTemplate = function(templateName, templateData, domId) {
		$(domId).innerHTML = get(templateName).process(templateData);
	}
	
	//Initialize
	templates = new Map();
	
}
/**
 * Represents a template parsing error.
 * @constructor
 * @author Cser Dániel
 */
function TemplateParseError(message, fileName, lineNumber, stack) {
	
	/**
	 * Message of error
	 * @type String
	 */
	this.message = message;
	
	/**
	 * Name of the file where the error occured
	 * @type String
	 */
	this.fileName = fileName;
	
	/**
	 * Number of line where the error occured
	 * @type String
	 */
	this.lineNumber = lineNumber;
	
	/**
	 * Stact trace of error
	 * @type Object
	 */
	this.stack = stack;
	
	/**
	 * Name of error
	 * @type String
	 */
	this.name = "TemplateParseError";
	
}
/**
 * Represents a template processing error.
 * @constructor
 * @author Cser Dániel
 */
function TemplateProcessError(message, fileName, lineNumber, stack) {
	
	/**
	 * Message of error
	 * @type String
	 */
	this.message = message;
	
	/**
	 * Name of the file where the error occured
	 * @type String
	 */
	this.fileName = fileName;
	
	/**
	 * Number of line where the error occured
	 * @type String
	 */
	this.lineNumber = lineNumber;
	
	/**
	 * Stact trace of error
	 * @type Object
	 */
	this.stack = stack;
	
	/**
	 * Name of error
	 * @type String
	 */
	this.name = "TemplateProcessError";
	
}




/**
 * Dialog window manager class.
 * @constructor
 * @author Cser Dániel
 */
function DialogManager() {
	
	/**
	 * DialogBox width size
	 * @type integer
	 */
	var width = 310;
	
	/**
	 * DialogBox height size
	 * @type integer
	 */
	var height = 180;

	/**
	 * Array of disabled selects
	 * @type Array
	 */
	var disabledSelects;
	
	/**
	 * Queue array
	 * @type Array
	 */
	var queue;
	
	/**
	 * Running state
	 * @type Boolean
	 */
	var running;
	
	/**
	 * Adds a new task
	 * @param Dialog Dialog to add
	 */
	this.add = function(dialog) {
		//when this is a progress or there's no progress in the queue
		queue.push(dialog);
		//return when already displaying or there's nothing to display
		if (running) {
			return;
		}
		
		//start showing
		this.running = true;
	    
	    //disable active selects
		var allSelects = document.getElementsByTagName("select");
		for (i = 0; i < allSelects.length; i++) {
    		if (allSelects[i].disabled == false) {
    			disabledSelects[i] = allSelects[i];
    			disabledSelects[i].disabled = true;
    		}
			allSelects[i].style.visibility = 'hidden';
    	}
	    
	    //hider div
	    var pageSize = getPageSize();
	    setOpacity( $("DialogBackground"), 0.9 );
	    $("DialogBackground").style.height = pageSize.pageHeight+'px';
	    $("DialogBackground").style.display = "block";
	    
	    //dialog box
	    getWindow( height, width );
	    
	    //start showing
	    show();
	}
	
	/**
	 * Shows a task
	 */
	function show() {
		try {
			window.scrollBy(0, 0);
		    templateManager.processTemplate(queue[0].getType(), { dialog: queue[0] }, "dialogContent");
		} catch(e) {
			//TODO: Log error
		}
	}
	
	/**
	 * One task ended
	 * @param Number Result code
	 */
	this.done = function(result) {		
		
		if (queue.length == 0 || result == null || result == undefined) {
			//TODO: Log error
			return;
		}
		
		var fn = queue[0].getCallback(result);
		if (typeof(fn) == "function") {
			try {
				fn();
			} catch(e) {
				//TODO: Log error
			}
		}
	    //remove first element
	    queue.shift();
	    //when this was the last one in queue
	    if (queue.length == 0) {
	    	running = false;
	    	
			//hide dialog and bakground
			$("DialogBackground").style.display = "none";
			$("DialogBox").style.display = "none";
			$("dialogContent").innerHTML = "";
			//enable all disabled selects and clear the array holding them
	    	for (var i = 0; i < disabledSelects.length; i++) {
		    	disabledSelects[i].disabled = false;
				disabledSelects[i].style.visibility = 'visible';
	    	}
	    	
	    	disabledSelects = new Array();
			
		    return;
	    }
	    show();
	}
	
	/**
	 *
	 */
	this.showBackground = function() {
		var pageSize = getPageSize();
	    setOpacity( $("DialogBackground"), 0.3 );
	    $("DialogBackground").style.height = pageSize.pageHeight + 'px';
	    $("DialogBackground").style.display = "block";
		return;
	}
	
	/**
	 *
	 */
	this.hideBackground = function() {
		$("DialogBackground").style.display = "none";
		return;
	}
	
	/**
	* set DialogBackground style
	* @param htmlObject 
	* @param opacity value
	*/
	function setOpacity(element, value) {
	    if (typeof element == 'string')
		element= $(element);
	    if (value == 1) {
		element.style.opacity = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0 ;
		if(/MSIE/.test(navigator.userAgent) && !window.opera)
		    element.style.filter = element.style.filter.replace(/alpha\([^\)]*\)/gi,'');
	    } else {
		if(value < 0.00001) value = 0;
		    element.style.opacity = value;
		if(/MSIE/.test(navigator.userAgent) && !window.opera)
		    element.style.filter = element.style.filter.replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')';
	    }
	    return element;
	}
	
	
	/**
	* set DialogBox style and position
	* @param box height
	* @param box width
	*/
	function getWindow(height, width) {
	    var DialogBox = $("DialogBox");
	    var pageSize = getPageSize();
	    var pos = realOffset(document.body);
	    
	    DialogBox.style.top = (pageSize.windowHeight/2 - height/2 + pos[1])+'px';
	    DialogBox.style.left = (pageSize.windowWidth/2 - width/2 + pos[0])+'px';
	    
	    DialogBox.style.display = "block";
	}
	
	/**
	* set DialogBox real position
	* @return top, left size
	* @type Array
	*/
	function realOffset(element) {
	    var valueT = 0, valueL = 0;
	    do {
		valueT += element.scrollTop  || 0;
		valueL += element.scrollLeft || 0;
		element = element.parentNode;
	    } while (element);
	    return [valueL, valueT];
	}
	
	
	/**
	* get page, widow, scroll height and width size 
	* @return size data
	* @type object
	*/
	function getPageSize() {
	    var xScroll, yScroll;
            if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	    } else if (document.body.scrollHeight > document.body.offsetHeight) {
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	    } else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	    }
	    
	    var windowWidth, windowHeight;
	    if (self.innerHeight) {
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	    } else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	    } else if (document.body) {
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	    }
	    
	    if(yScroll < windowHeight) {
		pageHeight = windowHeight;
	    } else {
		pageHeight = yScroll;
	    }
            if(xScroll < windowWidth) {
	        pageWidth = windowWidth;
	    } else {
		pageWidth = xScroll;
	    }
	    return {
		'pageWidth':pageWidth,
		'pageHeight':pageHeight,
		'windowWidth':windowWidth,
		'windowHeight':windowHeight,
		'yScroll':yScroll,
		'xScroll':xScroll
	    }
	}
	
	//Initialize
	disabledSelects = new Array();
	queue = new Array();
	running = false;
	
}

templateManager = new TemplateManager();
dialogManager = new DialogManager();	
	
var NS4 = (document.layers)? 1 : 0;
var IE4 = (document.all)? 1 : 0;
var W3C = (document.getElementById)? 1 : 0;
var osszesmasodperc = -1;
var pEval = "";
var pAlkotasok = 0;

function fCheckGalaRegisztral(){
	preturn = -1;
	if(preturn == -1 && document.sform.sresztvevo_1.value == ""){
		dialogManager.add(new Dialog('Legalább egy résztvevő megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.sjegytype.value == -1){
		dialogManager.add(new Dialog('Jegy típus választása kötelező!', 'alert'));
		preturn = 1;
	}else
		document.sform.hsjegytype.value = document.sform.sjegytype.value;
	
	if(preturn == -1 && document.sform.sszamlanev.value == ""){
		dialogManager.add(new Dialog('A számlázási név megadása kötelező!', 'alert'));
		preturn = 1;
	}	
	
	if(preturn == -1 && document.sform.sszamlacim.value == ""){
		dialogManager.add(new Dialog('A számlázási cím megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.spostacim.value == ""){
		dialogManager.add(new Dialog('A poastai cím megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.skapcsolatnev.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó neve megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.skapcsolattelefon.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó telefon megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	var stremail = new String(document.sform.skapcsolatemail.value);
	if(preturn == -1 && stremail == ""){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail megadása kötelező!', 'alert'));
		preturn = 1;
	}else if(preturn == -1 && (stremail.indexOf("@") == -1 || stremail.indexOf(".") == -1)){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail cím formátuma nem megfelelő!', 'alert'));
		preturn = 1;
	}
	
	if(preturn > 0){
		return false;
	}else{
		return true;
	}
}

function fDelConfirm(pCode){
	if(confirm("Biztosan törli a nevezést, és a hozzá tartozó állományokat?"))
		document.location = "do.php?type=nevdelete&code="+pCode;
}

function fSzamlal(){
	osszesmasodperc--;
	if(osszesmasodperc > 0){
		var ora = Math.floor(osszesmasodperc/3600);
		var perc = Math.floor((osszesmasodperc/60)%60);
		var masodperc = osszesmasodperc%60;
		if(masodperc<10) mp="0";
		else mp="";
		if(perc<10) op="0";
		else op="";
		if(ora<=0) ora="";
		fGetObject("ido").innerHTML = ora+":"+op+perc+":"+mp+masodperc;
		setTimeout("fSzamlal()", 1000);
	}
	else{
		fGetObject("ido").innerHTML = String("Lejárt!");
	}
	if(pEval!=""){
		eval(pEval);
		pEval="";
	}
	
}

function fUpdate(){
	fGetObject("formcontent").style.display = "none";
	fGetObject("div_update").style.display = "none";	
	fGetObject("formupload").style.display = "block";
	document.sform.hmufaj_id.value = document.sform.mufaj_id.value;
	document.sform.hkategoria_id.value = document.sform.kategoria_id.value;
	document.sform.action = "do.php?type=nevez_mod";
	document.sform.veglegesit.value = "no";
	document.sform.submit();
}

function fRegisztral(pTmp){
	if(pTmp == 1){
		fGetObject("login").style.display="none";
		fGetObject("regisztracio").style.display="block";
	}else{
		fGetObject("regisztracio").style.display="none";
		fGetObject("login").style.display="block";
	}
}

function fNemEl(){
	dialogManager.add(new Dialog('Nevezés március 16-tól!', 'alert'));
}

function fJelszoNot(){
	dialogManager.add(new Dialog('A két jelszó nem egyezik!', 'alert'));
}

function fNevezesek(){
	fGetObject("login").style.display="none";
	fGetObject("regisztracio").style.display="none";
	fGetObject("nevezesek").style.display="block";
	fSzamlal();
}

function fFelhNot(){
	fGetObject("login").style.display="none";
	fGetObject("regisztracio").style.display="block";
	fGetObject("nevezesek").style.display="none";
	dialogManager.add(new Dialog('Sajnáljuk a felhasználónév már foglalt!', 'alert'));
	fSzamlal();
}

function fCheckLogin(){
	if(document.flogin.flnev.value == ""){
		dialogManager.add(new Dialog('Felhasználónév megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.flogin.flpw.value == ""){
		dialogManager.add(new Dialog('Jelszó megadása kötelező!', 'alert'));
 		return false;
	}
}

function fSiker1(){
	dialogManager.add(new Dialog('Adatok mentése sikeres volt!', 'alert'));
}

function fBadLogin1(){
	dialogManager.add(new Dialog('Kérem töltsön ki minden mezőt!', 'alert'));
}

function fBadLogin2(){
		dialogManager.add(new Dialog('Rossz felhasználónév jelszó páros!', 'alert'));
}

function fBadLogin3(){
		dialogManager.add(new Dialog('Kérem jelentkezzen be!', 'alert'));
}

function fFailedStr1(){
		dialogManager.add(new Dialog('Nem található ilyen nevezés a rendszerben, válasszon másikat vagy indítson újat!', 'alert'));
		//fNevezesek();
}

function fChecknevez(){
	if(document.fnevez.salkotasnev.value == ""){
		dialogManager.add(new Dialog('Az Alkotás neve kötelező mező!', 'alert'));
 		return false;
	}
	
	return true;
}


function fCheckRegisztral(){
	if(document.fregisztracio.fnev.value == ""){
		dialogManager.add(new Dialog('Felhasználónév megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.fpw.value == ""){
		dialogManager.add(new Dialog('Jelszó megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.fpw2.value == ""){
		dialogManager.add(new Dialog('Jelszó megerősíés megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.fpw.value != document.fregisztracio.fpw2.value){
		dialogManager.add(new Dialog('A két jelszó nem egyezik!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.sszamlanev.value == ""){
		dialogManager.add(new Dialog('Számlázási név megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.sszamlacim.value == ""){
		dialogManager.add(new Dialog('Számlázási cím megadása kötelező!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.skapcsolatnev.value == ""){
		dialogManager.add(new Dialog('Kapcsolatartó nevét kötelező megadni!', 'alert'));
 		return false;
	}
	if(document.fregisztracio.skapcsolattelefon.value == ""){
		dialogManager.add(new Dialog('Kapcsolatartó telefonszámát kötelező megadni!', 'alert'));
 		return false;
	}
	var stremail = new String(document.fregisztracio.skapcsolatemail.value);
	if(stremail == ""){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail megadása kötelező!', 'alert'));
		return false;
	}else if(stremail.indexOf("@") == -1 || stremail.indexOf(".") == -1){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail cím formátuma nem megfelelő!', 'alert'));
		return false;
	}
return true;
}


function fCheckGalaRegisztral(){
	preturn = -1;
	if(preturn == -1 && document.sform.sresztvevo_1.value == ""){
		dialogManager.add(new Dialog('Legalább egy résztvevő megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.sjegytype.value == -1){
		dialogManager.add(new Dialog('Jegy típus választása kötelező!', 'alert'));
		preturn = 1;
	}else
		document.sform.hsjegytype.value = document.sform.sjegytype.value;
	
	if(preturn == -1 && document.sform.sszamlanev.value == ""){
		dialogManager.add(new Dialog('A számlázási név megadása kötelező!', 'alert'));
		preturn = 1;
	}	
	
	if(preturn == -1 && document.sform.sszamlacim.value == ""){
		dialogManager.add(new Dialog('A számlázási cím megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.spostacim.value == ""){
		dialogManager.add(new Dialog('A poastai cím megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.skapcsolatnev.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó neve megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.skapcsolattelefon.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó telefon megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	var stremail = new String(document.sform.skapcsolatemail.value);
	if(preturn == -1 && stremail == ""){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail megadása kötelező!', 'alert'));
		preturn = 1;
	}else if(preturn == -1 && (stremail.indexOf("@") == -1 || stremail.indexOf(".") == -1)){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail cím formátuma nem megfelelő!', 'alert'));
		preturn = 1;
	}
	
	if(preturn > 0){
		return false;
	}else{
		fGetObject("formcontent").style.display = "none";
		fGetObject("formupload").style.display = "block";
		
		return true;
	}
}

function fNevezVissza1(){
	dialogManager.add(new Dialog('Köszönjük, nevezését fogadtuk!', 'alert'));
}

function fNevezVissza2(){
	dialogManager.add(new Dialog('<div style="line-height:18px;">Probléma a nevezés során!<br>Kérjük vegye fel velünk a kapcsolatot!</div>', 'alert'));
}

function fNevezVissza3(){
	dialogManager.add(new Dialog('Köszönjük, regisztrációját a gálára fogadtuk!', 'alert'));
}

function fFullScreen(pPath){
	window.open('videoplayer.php?video=../'+pPath, '', 'fullscreen=yes, scrollbars=auto');
}

function fCheckNevez2(){	
	preturn = -1;
	document.sform.veglegesit.value = "yes";
	if(preturn == -1 && document.sform.smarka.value == ""){
		dialogManager.add(new Dialog('A márka megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.skampany.value == ""){
		dialogManager.add(new Dialog('A kampány megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.salkotasnev.value == ""){
		dialogManager.add(new Dialog('Az alkotás név megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.salkotougynokseg.value == ""){
		dialogManager.add(new Dialog('Az alkotó ügynökség megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.sszamlanev.value == ""){
		dialogManager.add(new Dialog('A számlázási név megadása kötelező!', 'alert'));
		preturn = 1;
	}	
	if(preturn == -1 && document.sform.sszamlacim.value == ""){
		dialogManager.add(new Dialog('A számlázási cím megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.skapcsolatnev.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó neve megadása kötelező!', 'alert'));
		preturn = 1;
	}
	if(preturn == -1 && document.sform.skapcsolattelefon.value == ""){
		dialogManager.add(new Dialog('A kapcsolattartó telefon megadása kötelező!', 'alert'));
		preturn = 1;
	}
	
	var stremail = new String(document.sform.skapcsolatemail.value);
	if(preturn == -1 && stremail == ""){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail megadása kötelező!', 'alert'));
		preturn = 1;
	}else if(preturn == -1 && (stremail.indexOf("@") == -1 || stremail.indexOf(".") == -1)){
		dialogManager.add(new Dialog('A kapcsolattartó e-mail cím formátuma nem megfelelő!', 'alert'));
		preturn = 1;
	}
	
	if(preturn == -1 && document.sform.smegbizonev.value == ""){
		dialogManager.add(new Dialog('A megbízó cég név megadása kötelező!', 'alert'));
		preturn = 1;
	}	
	
	if(preturn == -1 && document.sform.mufaj_id.value == -1){
		dialogManager.add(new Dialog('Kategória választása kötelező!', 'alert'));
		preturn = 2;
	}else{
//		alert(document.sform.mufaj_id.value);
		document.sform.hmufaj_id.value = document.sform.mufaj_id.value;
	}
	
	if(preturn == -1 && document.sform.kategoria_id.value == -1){
		dialogManager.add(new Dialog('Kategória választása kötelező!', 'alert'));
		preturn = 2;
	}else{
//		alert(document.sform.kategoria_id.value);
		document.sform.hkategoria_id.value = document.sform.kategoria_id.value;
	}
	
	if(preturn == -1 && document.sform.kategoria_id.value == 2 && document.sform.skategoria_db.value == ""){
		dialogManager.add(new Dialog('Sorozat esetén darabszám megadása kötelező!', 'alert'));
		preturn = 2;
	}
	
	if(preturn == -1 && document.sform.sfeladat_cel.value == ""){
		dialogManager.add(new Dialog('Feladat, cél, célcsoport megadása kötelező!', 'alert'));
		preturn = 2;
	}
	
	if(preturn == -1 && document.sform.smegoldas.value == ""){
		dialogManager.add(new Dialog('A megoldás értékei/eredetisége megadása kötelező!', 'alert'));
		preturn = 2;
	}
	
	if(preturn == -1 && document.sform.smegjelenes.value == ""){
		dialogManager.add(new Dialog('A legfontosabb megjelenés megadása kötelező!', 'alert'));
		preturn = 2;
	}
	
	if(preturn == -1 && document.sform.mhely_1.value == ""){
		dialogManager.add(new Dialog('Legalább egy megjelenés megadása kötelező!', 'alert'));
		preturn = 3;
	}
	
	if(preturn == -1){
		q=0;
		while(fGetObject("mhely_"+String(++q))){
			if(fGetObject("mhely_"+String(q)).value != "" && fGetObject("mido_"+String(q)).value == ""){
				dialogManager.add(new Dialog('Időtartamot meg kell adni a megjelenéshez!', 'alert'));
				preturn = 3;
			}
		}
	}
	
	if(preturn == -1 && document.sform.anev_1.value == ""){
		dialogManager.add(new Dialog('Legalább egy alkotó megadása kötelező!', 'alert'));
		preturn = 3;
	}
	
	if(preturn == -1){
		q=0;
		while(fGetObject("anev_"+String(++q))){
			if(fGetObject("anev_"+String(q)).value != "" && fGetObject("atitulus_"+String(q)).value == ""){
				dialogManager.add(new Dialog('Titulust meg kell adni!', 'alert'));
				preturn = 3;
			}
		}	
	}
	
	if(pAlkotasok==0 && preturn == -1 && document.sform.file_1.value == ""){
		dialogManager.add(new Dialog('Legalább egy file-t, ami az alkotást tartalmazza fel kell tölteni!', 'alert'));
		preturn = 4;
	}
	
	/*if(preturn == -1){
		q=0;
		while(fGetObject("file_"+String(++q))){
			var tmp = new String(fGetObject("file_"+String(q)).value);
			tmp = tmp.substr(tmp.length-4, 4);
			if(!(tmp.toLowerCase() == ".flv" || tmp.toLowerCase() == ".mp3" || tmp.toLowerCase() == ".jpg" || tmp.toLowerCase() == ".pdf")){
				obj.value = "";
				dialogManager.add(new Dialog('Csak .flv, .mp3, .jpg, .pdf<br><br>formátumú file-t lehet feltölteni!', 'alert'));
			}
		}
	}*/
	
	//nem kötelező a bevonulózene
	/*if(preturn == -1 && document.sform.file_bevonulo.value == ""){
		dialogManager.add(new Dialog('A bevonuló zene megadása kötelező!', 'alert'));
		preturn = 4;
	}*/
	
	if(preturn > 0){
		return false;
	}else{		
		fGetObject("formcontent").style.display = "none";
		fGetObject("div_update").style.display = "none";	
		fGetObject("formupload").style.display = "block";
		return true;
	}	
}

function fUjFile(obj){
	var tmp = new String(obj.value);	

	pot = tmp.substr(tmp.length-5, 5);
	tmp = tmp.substr(tmp.length-4, 4);
	
	if(!(tmp.toLowerCase() == ".mpg" || pot.toLowerCase() == ".mpeg" || tmp.toLowerCase() == ".mp3" || tmp.toLowerCase() == ".jpg" || tmp.toLowerCase() == ".pdf" || tmp.toLowerCase() == ".swf" || tmp.toLowerCase() == ".flv" )){
		obj.value = "";
		dialogManager.add(new Dialog('<div style="line-height:18px;">Csak .swf, .mp3, .jpg, .pdf .mpeg, .mpg<br>formátumú file-t lehet feltölteni!</div>', 'alert'));
	}else{
		var strid = new String(obj.id);
		strid = strid.substr(5);
		var nextid = Number(strid) + 1;
		
		if(!fGetObject("file_"+String(nextid))){
			fGetObject("sfile_"+strid).innerHTML = '<div style="padding-bottom:10px;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="form1">TALLOZÁS</td><td class="form2">&nbsp;</td><td><div class="form3"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">File</td><td align="left" style="padding-left:10px;"><input id="file_'+String(nextid)+'" name="file_'+String(nextid)+'" type="file" class="input1" style="width:200px;" onchange="fUjFile(this)"></td></tr></table><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Megjegyzés</td><td align="right"><input id="fszoveg_'+String(nextid)+'" name="fszoveg_'+String(nextid)+'" type="text" class="input1" style="width:235px;"></td></tr></table> </div></td></tr></table></div><span id="sfile_'+String(nextid)+'"></span>';
		}else if(obj.value == "")
			fGetObject("sfile_"+strid).innerHTML = '';
			
	}
}

function fUjResztvevo(obj){
	var strid = new String(obj.id);
	strid = strid.substr(11);
	var nextid = Number(strid) + 1;
	
	if(!fGetObject("resztvevo_"+String(nextid))){
		fGetObject("resztvevo_"+strid).innerHTML = '<div style="padding-bottom:10px;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="form1">RÉSZTVEVŐ</td><td class="form2">&nbsp;</td><td><div class="form3"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Név</td><td align="right"><input id="sresztvevo_'+String(nextid)+'" name="sresztvevo_'+String(nextid)+'" type="text" class="input1" style="width:275px;" onkeyup="fUjResztvevo(this)"></td></tr></table></div></td></tr></table></div><span id="resztvevo_'+String(nextid)+'"></span>';
	}else if(obj.value == "")
		fGetObject("resztvevo_"+strid).innerHTML = '';
}

function fUjPartner(obj){
	var strid = new String(obj.id);
	strid = strid.substr(9);
	var nextid = Number(strid) + 1;
	
	if(!fGetObject("partner_"+String(nextid))){
		fGetObject("partner_"+strid).innerHTML = '<div style="padding-bottom:10px;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="form1">PARTNER</td><td class="form2">&nbsp;</td><td><div class="form3"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Név</td><td align="right"><input id="ppartner_'+String(nextid)+'" name="ppartner_'+String(nextid)+'" type="text" class="input1" style="width:275px;" onkeyup="fUjPartner(this)"></td></tr></table></div></td></tr></table></div><span id="partner_'+String(nextid)+'"></span>';
	}else if(obj.value == "")
		fGetObject("partner_"+strid).innerHTML = '';
}

function fUjAlkoto(obj){
	var strid = new String(obj.id);
	strid = strid.substr(5);
	var nextid = Number(strid) + 1;
	
	if(nextid < 4 && !fGetObject("alkoto_"+String(nextid))){
		fGetObject("alkoto_"+strid).innerHTML = '<div style="padding-bottom:10px;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="form1">ALKOTÓ</td><td class="form2">&nbsp;</td><td><div class="form3"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Név</td><td align="right"><input id="anev_'+String(nextid)+'" name="anev_'+String(nextid)+'" type="text" class="input1" style="width:275px;" onkeyup="fUjAlkoto(this)"></td></tr></table><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Titulus</td><td align="right"><input id="atitulus_'+String(nextid)+'" name="atitulus_'+String(nextid)+'" type="text" class="input1" style="width:260px;"></td></tr></table></div></td></tr></table></div><span id="alkoto_'+String(nextid)+'"></span>';
	}else if(obj.value == "")
		fGetObject("alkoto_"+strid).innerHTML = '';
}

function fUjMegjelenes(obj){
	var strid = new String(obj.id);
	strid = strid.substr(6);
	var nextid = Number(strid) + 1;
	
	if(!fGetObject("megjelenes_"+String(nextid))){
		fGetObject("megjelenes_"+strid).innerHTML = '<div style="padding-bottom:10px;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="form1">MEGJELENÉS</td><td class="form2">&nbsp;</td><td><div class="form3"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Hely</td><td align="right"><input id="mhely_'+String(nextid)+'" name="mhely_'+String(nextid)+'" type="text" class="input1" style="width:272px;" onkeyup="fUjMegjelenes(this)"></td></tr></table><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:3px;"><tr><td width="1">Időtartam</td><td align="right"><input id="mido_'+String(nextid)+'" name="mido_'+String(nextid)+'" type="text" class="input1" style="width:240px;"></td></tr></table></div></td></tr></table></div><span id="megjelenes_'+String(nextid)+'"></span>';
	}else if(obj.value == "")
		fGetObject("megjelenes_"+strid).innerHTML = '';
}

function fChangeKat(obj){
	if(obj.value == 2)
		fGetObject("kategoria_2").style.display = "block";
	else
		fGetObject("kategoria_2").style.display = "none";
		fGetObject("skategoria_db").value = "";
}

function fFormValt(pType, pdb){
	obj = fGetObject("pic_form_"+pType);
	
	for(q=1; q<=pdb; q++){
		tmpid = "pic_form_"+String(q);
		tmpid2 = "form_"+String(q);
		if(tmpid == obj.id){
			fGetObject(tmpid).innerHTML = '<img  src="../../script/img/form_valaszto'+String(q)+'_1.gif" border="0" />';
			fGetObject(tmpid2).style.display = "block";
		}else{
			fGetObject(tmpid).innerHTML = '<img  src="../../script/img/form_valaszto'+String(q)+'_2.gif" border="0" />';
			fGetObject(tmpid2).style.display = "none";
		}
	}	
}

function fCheckOffer(){
	if(document.sform.aname.value == ''){
		alert('A nevet meg kell adni ajánlatkéréshez!');
		return false;
	}
	
	if(document.sform.aemail.value == ''){
		alert('Az e-mail címet meg kell adni ajánlatkéréshez!');
		return false;
	}else{
		tmp = new String(document.sform.aemail.value);
		if(tmp.indexOf("@") == -1 || tmp.indexOf(".") == -1){
			alert('Az e-mail cím formátuma nem megfelelő!');
			return false;
		}
	}
	
	return true;
}

function fHitEnter(e, pType){
	if(e.keyCode == 13){
		pType = new String(pType);
		if(pType == "pass")
			fEnter();
		else if(pType.substr(0,8) == "addcart_")
			fAddCart(pType.substr(8));
	}
}

function fOverDb(obj){
	obj.style.color = "#000000";
	obj.style.background = "#e7e7e7";
}

function fOutDb(obj){
	obj.style.color = "#bfbfbf";
	obj.style.background = "#ffffff";
}

function fSelectProduct(obj, cid){
	if(obj.value != -1)
		document.location = "../hu/termek.php?pid="+String(obj.value)+"&cid="+cid;
	else
		document.location = "../hu/termekek.php?cid="+String(cid);	
}

function fChangeCategory(obj){
	document.location = "../hu/termekek.php?cid="+String(obj.value);
}

function fFileBrowse(obj, ext){
	var tmp = new String(obj.value);
	tmp = tmp.substr(tmp.length-4, 4);
	if(tmp.toLowerCase() != ext){
		obj.value = "";
		dialogManager.add(new Dialog('Csak '+ext+' file-t lehet feltölteni!', 'alert'));
	}
}

function fGetObject(obj_name){
	if(W3C)
		return document.getElementById(obj_name);
	else if(NS4)
		return document.layers[obj_name];
	else
		return window.opener.document.all[obj_name];
}

function fIsNum(tmp){
	var szam = new String(tmp);
	var jok = new String("0123456789");
	for(k=0; k<szam.length; k++){
		if(jok.indexOf(szam.charAt(k)) == -1)
			return false;
	}
	return true;
}

function fIsNum2(tmp){
	var szam = new String(tmp);
	var jok = new String("0123456789.");
	var ispoint = false;
	for(k=0; k<szam.length; k++){
		if(szam.charAt(k) == "." && ispoint)
			return false;
		else if(szam.charAt(k) == ".")
			ispoint = true;
			
		if(jok.indexOf(szam.charAt(k)) == -1)
			return false;
	}
	return true;
}

function fIsNum3(obj){
	var szam = new String(obj.value);
	while(szam.indexOf(",") != -1)
		szam = szam.replace(",", ".");
		
	while(szam.indexOf(" ") != -1)
		szam = szam.replace(" ", "");
	obj.value = szam;
	
	var jok = new String("0123456789.");
	var ispoint = false;
	for(k=0; k<szam.length; k++){
		if(szam.charAt(k) == "." && ispoint){
			obj.value = "";
			return false;			
		}else if(szam.charAt(k) == ".")
			ispoint = true;
			
		if(jok.indexOf(szam.charAt(k)) == -1){
			obj.value = "";
			return false;
		}
	}
	return true;
}

function fIsTime(obj){
	var time = new String(obj.value);	
	while(time.indexOf(",") != -1)
		time = time.replace(",", ":");
		
	while(time.indexOf(".") != -1)
		time = time.replace(".", ":");
		
	while(time.indexOf(" ") != -1)
		time = time.replace(" ", ":");
		
	tmp = time.indexOf(":");
	if(tmp == 1){
		time = "0" + time;
	}	
	
	obj.value = time;
		
	if(time.length != 5){
		alert("Az idő formátuma nem megfelelő, helyesen: 16:30");
		return false;
	}	
	
	
	var hour = new String(time.substr(0,2));
	var minute = new String(time.substr(3,2));

	if(!fIsNum(hour)){
		alert("Az óra csak szám lehet!");
		return false;
	}
	
	if(!fIsNum(minute)){
		alert("A perc csak szám lehet!");
		return false;
	}
	
	if(hour<0 || hour>23){
		alert("Az óra 01-23 lehet!");
		return false;
	}
	
	if(!fIsNum(minute)){
		alert("A perc csak szám lehet");
		return false;
	}
	
	if(minute<0 || minute>59){
		alert("A perc 00-59 lehet!");
		return false;
	}
	
	return true;
}

function fIsDate(obj){
	var date = new String(obj.value);	
	while(date.indexOf(",") != -1)
		date = date.replace(",", "-");
		
	while(date.indexOf(".") != -1)
		date = date.replace(".", "-");
		
	while(date.indexOf(" ") != -1)
		date = date.replace(" ", "-");
		
	obj.value = date;
		
	if(date.length != 10){
		alert("A dátum formátuma nem megfelelő: 1999-09-09");
		return false;
	}	
	
	var year = new String(date.substr(0,4));
	var month = new String(date.substr(5,2));
	var day = new String(date.substr(8,2));

	if(!fIsNum(year)){
		alert("Az év csak szám lehet");
		return false;
	}
	
	if(!fIsNum(month)){
		alert("A hónap csak szám lehet");
		return false;
	}
	
	if(month<1 || month>12){
		alert("A hónap 01-12 lehet!");
		return false;
	}
	
	if(!fIsNum(day)){
		alert("A nap csak szám lehet");
		return false;
	}
	
	if(day<1 || day>31){
		alert("A nap 01-31 lehet!");
		return false;
	}
	
	return true;
}	
	

