ns4 = (document.layers) ? true:false 
ie4 = (document.all) ? true:false 
ng5 = (document.getElementById) ? true:false 

function getObjectById(ID) {
	if (ng5) return document.getElementById(ID);
	else if (ns4) return document.layers[ID];
	else if (ie4) return document.all[ID];
}

function getParent(obj) {
	if (ng5) return obj.parentNode;
	else if (ns4) return obj.parentElement;
	else if (ie4) return obj.parentElement;
}

var paramCount = new Array();

function addNewParam(tableID, varName, buttonValue) {
	var paramTable = document.getElementById(tableID);

	if (paramTable != null) {
		if (paramCount[tableID] == 0) paramTable.deleteRow(1);
		newRow = paramTable.insertRow(paramTable.rows.length-1);
		newCellName = newRow.insertCell(0);
		newCellValue = newRow.insertCell(1);
		newCellDel = newRow.insertCell(2);
		newCellName.innerHTML = "<INPUT type='text' class='text' name='"+varName+ "[_new]["+(paramCount[tableID])+"][name]' value='' style='width: 185px'>";
		newCellValue.innerHTML = "<INPUT type='text' class='text' name='"+varName+"[_new]["+(paramCount[tableID]++)+"][value]' value='' style='width: 285px'>";
		newCellDel.innerHTML = "<INPUT type='button' value='"+buttonValue+"' style='width:"+(buttonValue.length*8)+"px;' onclick='deleteParam(this);'>";
	}
	getObjectById(tableID+'pc').value = parseInt(getObjectById(tableID+'pc').value)+1;
}

function deleteParam(delButton) {
	delTD = getParent(delButton);
	if (delTD == null) return;

	delTR = getParent(delTD);
	delTableBody = getParent(delTR);
	delTR.firstChild.firstChild.value = '';
	delTR.firstChild.nextSibling.firstChild.value = '';
	delTableBody.removeChild(delTR);
	if (delTableBody.rows.length == 2) {
		newRow = delTableBody.insertRow(1);
		newCell = newRow.insertCell(0);
		newCell.colspan = 3;
		newCell.innerHTML = "&nbsp;&nbsp;&nbsp;<i>Nincs paraméter</i>";
	}
	paramCount[getParent(delTableBody).id]--;
	getObjectById(getParent(delTableBody).id+'pc').value = parseInt(getObjectById(getParent(delTableBody).id+'pc').value)-1;
}

function removeRow(tName, rNum) {
        var delTR = document.getElementById(tName + "_row" + rNum);
        if (!delTR) return;
	if (paramCount[tName] == 1) {
		delTR.firstChild.firstChild.value = -1;
		delTR.style.display = 'none';
	} else {
        	getParent(delTR).removeChild(delTR);
		paramCount[tName]--;
	}
}

function addRow(tName, items, fName) {
        var newTR = document.getElementById(tName).insertRow(document.getElementById(tName).rows.length-2);

        newTR.id = tName + "_row"+paramCount[tName];
        for(var n in items) {
                var newTD = newTR.insertCell(-1);
                switch(items[n].type) {
                        case 'hidden':
                                newTD.style.display = 'none';
                                newTD.innerHTML = "<input type='hidden' name='"+fName+"["+n+"]["+paramCount[tName]+"]' value='0'/>";				
                                break;
                        case 'text':
                                if (items[n]['width']) newTD.innerHTML = "<input type='text' name='"+fName+"["+n+"]["+paramCount[tName]+"]' style='width:"+items[n]['width']+"px;' />";
				else newTD.innerHTML = "<input type='text' name='"+fName+"["+n+"]["+paramCount[tName]+"]' />";
                                break;
                        case 'select':
                                var innerHTML = "<select name='"+fName+"["+n+"]["+paramCount[tName]+"]'>";
                                var values = items[n].values.split(";");
                                for(var i in values) {
                                        innerHTML += "<option value='"+values[i].split(":")[0]+"'>"+values[i].split(":")[1]+"</option>";
                                }
                                innerHTML += "</select>";
                                newTD.innerHTML = innerHTML;
                                break;
                }
                newTR.appendChild(newTD);
        }
        newTR.insertCell(-1).innerHTML = "<input src='images/design/button_delete.gif' type='image' onClick=\"removeRow('"+tName+"', '"+paramCount[tName]+"'); return false;\" />";
        paramCount[tName]++;
}

function disableControls(chkbox) {
	var topTag = getParent(chkbox);
	var goBack = null;

	if (topTag.firstChild.tagName == "SPAN") {
		goBack = topTag;
		topTag = topTag.firstChild;
	}

	for(i=0;i<topTag.childNodes.length;i++) {
		if (topTag.childNodes[i].tagName) topTag.childNodes[i].disabled = chkbox.checked;
	}
	
	if (goBack) {
		topTag = goBack.childNodes[2];

		for(i=0;i<topTag.childNodes.length;i++) {
			if (topTag.childNodes[i].tagName) {
				topTag.childNodes[i].disabled = chkbox.checked;
			}
		}
	}
	chkbox.disabled = false;
}

function validateInt(toValidate, msgName, canBeNull, max, min, unsigned) {
	var obj2val = document.getElementById(toValidate);
	var errors = Array();

	obj2val.style.backgroundColor = '';
	if (canBeNull === 0 && (obj2val.value == "" || obj2val.value === null))
	{
		errors[errors.length] = msgName + ': The field must be filled in!';
		obj2val.style.backgroundColor = 'red';
	}
	if (isNaN(obj2val.value) || parseInt(obj2val.value)!=parseFloat(obj2val.value))
	{
		errors[errors.length] = msgName + ': Entered value must be an integer number!';
		obj2val.style.backgroundColor = 'red';
	}
	if (max !== null && parseInt(obj2val.value) > max)
	{
		errors[errors.length] = msgName + ': Entered value must be lass than '+max+'!';
		obj2val.style.backgroundColor = 'red';
	}
	if (min !== null && parseInt(obj2val.value) < min)
	{
		errors[errors.length] = msgName + ': Entered value must be grather than '+min+'!';
		obj2val.style.backgroundColor = 'red';
	}
	if (unsigned !== 0 && parseInt(obj2val.value) < 0)
	{
		errors[errors.length] = msgName + ': Entered value must be positive!';
		obj2val.style.backgroundColor = 'red';
	}

	return errors;
}

function validateFloat(toValidate, msgName, canBeNull, max, min, unsigned) {
	var obj2val = document.getElementById(toValidate);
	var errors = Array();

	obj2val.style.backgroundColor = '';
	if (canBeNull === 0 && (obj2val.value == "" || obj2val.value === null))
	{
		errors[errors.length] = msgName + ': The field must be filled in!';
		obj2val.style.backgroundColor = 'red';
	}
	if (isNaN(parseFloat(obj2val.value)))
	{
		errors[errors.length] = msgName + ': Entered value must be a float number!';
		obj2val.style.backgroundColor = 'red';
	}
	if (max !== null && parseFloat(obj2val.value) > max)
	{
		errors[errors.length] = msgName + ': Entered value must be lass than '+max+'!';
		obj2val.style.backgroundColor = 'red';
	}
	if (min !== null && parseFloat(obj2val.value) < min)
	{
		errors[errors.length] = msgName + ': Entered value must be grather than '+min+'!';
		obj2val.style.backgroundColor = 'red';
	}
	if (unsigned !== 0 && parseFloat(obj2val.value) < 0)
	{
		errors[errors.length] = msgName + ': Entered value must be positive!';
		obj2val.style.backgroundColor = 'red';
	}

	return errors;
}

function validateString(toValidate, msgName, canBeNull, minlength, pattern, patternText) {
	var obj2val = document.getElementById(toValidate);
	var errors = Array();

	obj2val.style.backgroundColor = '';
	if (canBeNull === 0 && (obj2val.value == "" || obj2val.value === null))
	{
		errors[errors.length] = msgName + ': The field must be filled in!';
		obj2val.style.backgroundColor = 'red';
	}
	if (minlength !== null && obj2val.value.length < minlength)
	{
		errors[errors.length] = msgName + ': Entered string must be at least '+minlength+' character(s) long!';
		obj2val.style.backgroundColor = 'red';
	}
	if (obj2val.value.length!= 0 && pattern !== null && String(obj2val.value).match(pattern)===null)
	{
		if (patternText=='')
		{
			errors[errors.length] = msgName + ': Entered string does not match pattern ('+pattern+')!';
		} else {
			errors[errors.length] = msgName + ': '+patternText+'!';
		}
		obj2val.style.backgroundColor = 'red';
	}

	return errors;
}

function validateText(toValidate, msgName, canBeNull, maxlength, minlength) {
	var obj2val = document.getElementById(toValidate);
	var errors = Array();

	obj2val.style.backgroundColor = '';
	if (canBeNull === 0 && (obj2val.value == "" || obj2val.value === null))
	{
		errors[errors.length] = msgName + ': The field must be filled in!';
		obj2val.style.backgroundColor = 'red';
	}
	if (maxlength !== null && obj2val.value.length > maxlength)
	{
		errors[errors.length] = msgName + ': Entered string must be at most '+maxlength+' character(s) long!';
		obj2val.style.backgroundColor = 'red';
	}
	if (minlength !== null && obj2val.value.length < minlength)
	{
		errors[errors.length] = msgName + ': Entered string must be at least '+minlength+' character(s) long!';
		obj2val.style.backgroundColor = 'red';
	}

	return errors;
}

function validatePasswd(toValidate, msgName) {
	var obj2val_passwd = document.getElementById(toValidate+'passwd');
	var obj2val_conf = document.getElementById(toValidate+'conf');
	var errors = Array();

	obj2val_passwd.style.backgroundColor = '';
	obj2val_conf.style.backgroundColor = '';
	if (obj2val_passwd.value != obj2val_conf.value)
	{
		errors[errors.length] = msgName + ': A jelszó és a megerősítés nem egyezik!';
		obj2val_passwd.style.backgroundColor = 'red';
		obj2val_conf.style.backgroundColor = 'red';
	}

	return errors;
}

var lastTab = null;

function switchToTab(tabButton, tabName) {
	if (tabButton !== null) {
		var tdFirst = getParent(tabButton).firstChild;
		if (ng5 && !(ie4 || ns4)) {
			tdFirst = tdFirst.nextSibling;
		}

		while (tdFirst)	{
//			tdFirst.style.backgroundColor = '';
			tdFirst.className = 'tabName';
			tdFirst = tdFirst.nextSibling;
			if (ng5 && !(ie4 || ns4)) {
				tdFirst = tdFirst.nextSibling;
			}
		}
//		tabButton.style.backgroundColor = '#f88000'; 
		tabButton.className = 'tabNameActive';
	}
	if (lastTab!==null)	{
		document.getElementById(lastTab).style.display = 'none';
	}
	document.getElementById(tabName).style.display = '';
	lastTab = tabName;
}

function switchItemState(name, max) {
	var mode = document.getElementById(name+'_0').style.display == 'none'?'':'none';

	for(i=0;i<max;i++) {
		document.getElementById(name+'_'+i).style.display = mode;
	}

	if (mode=='') {
		document.getElementById(name+'_name').innerHTML = '[-]&nbsp;&nbsp;Periódusokon átnyúló';
	} else {
		document.getElementById(name+'_name').innerHTML = '[+] Periódusokon átnyúló';
	}
}

function moveItemBetweenLists(button, dir) {
	if (dir == 1) {
		var selSelected = getParent(getParent(button)).lastChild.firstChild;
		var selAvailable = getParent(getParent(button)).firstChild.firstChild;
		if (selSelected.tagName == "FONT") {
			selSelected = getParent(getParent(button)).lastChild.previousSibling.firstChild;
		}
	} else {
		var selSelected = getParent(getParent(button)).firstChild.firstChild;
		var selAvailable = getParent(getParent(button)).lastChild.firstChild;
		if (selAvailable.tagName == "FONT") {
			selAvailable = getParent(getParent(button)).lastChild.previousSibling.firstChild;
		}
	}

	var pos = null;	
	for(i=0;i<selAvailable.options.length;i++) {
		if (selAvailable.options[i].selected) {
			var newItem = document.createElement("OPTION");
			newItem.text = selAvailable.options[i].text;
			newItem.value = selAvailable.options[i].value;
			pos = selSelected.options.length;
			pos = pos === null?0:pos;
			selSelected.options[pos] = newItem;
			selAvailable.options[i] = null;
			i--;
		}
	}
}

function multipleSelectCheckboxStatus(msName, formName, checkbox) {
	var editForm = document.forms[formName] ? document.forms[formName] : document.forms[0];
	var values = editForm.elements[msName].value.split(",");
	var sliceAt = -1;
	
	for (var i in values) {
		if (values[i] == checkbox.value) {
			if (!checkbox.checked) values[i] = null;
		}
	}
	
	if (sliceAt != -1) {
		var preItems = values.slice(0, sliceAt);
		var postItems = values.slice(sliceAt+1);

		if (preItems.constructor != Array) {
			preItems = {};
		}
		if (postItems.constructor != Array) {
			postItems = {};
		}
		if (postItems.length == 0 && preItems.length == 0) {
			editForm.elements[msName].value = "";
			return;
		}
		
		editForm.elements[msName].value = preItems.concat(postItems).join(",");
	} else {
		if (values.length == 1 && values[0] == "") {
			values[0] = checkbox.value;
		} else {
			if (checkbox.checked) values.push(checkbox.value);
		}
		
		var realValues = Array();
		for (var i in values) { if (values[i] !== null) { realValues.push(values[i]); } }
		editForm.elements[msName].value = realValues.join(",");
	}
}

function multipleSelectSubmit(msName, ms, formName, checkboxed) {
	var selMS = getObjectById(formName+ms+'selected');
	var editForm = document.forms[formName] ? document.forms[formName] : document.forms[0];

	if (!checkboxed) {
		for(i=0;i<selMS.options.length;i++) {
			if (editForm.elements[msName].value) {
				editForm.elements[msName].value += ','+selMS.options[i].value;
			} else {
				editForm.elements[msName].value += selMS.options[i].value;
			}
		}
	}
	
}

function hideDebugMessage() {
	var div2hide = document.getElementById('debugMsgs');
	if (!div2hide) return;

	/*if (div2hide.offsetWidth > 50 && div2hide.offsetHeight > 50) {
		div2hide.style.width = div2hide.offsetWidth * 0.9;
		div2hide.style.height = div2hide.offsetHeight * 0.9;
		setTimeout(hideDebugMessage, 250);
	} else {*/
		div2hide.style.display = 'none';
	//}
}

function showSubItems(me, itemList, prefix) {
	var isOn = true;
	for(var j in itemList) {
		var item = document.getElementById(prefix+itemList[j]);
		if (item.style.display == 'none') isOn = false;
		item.style.display = !isOn ? 'block' : 'none';
	}
	if (isOn) {
		me.firstChild.innerHTML = '[+]&nbsp;'+me.firstChild.innerHTML.slice(15);
	} else {
		me.firstChild.innerHTML = '[-]&nbsp;&nbsp;'+me.firstChild.innerHTML.slice(9);
	}
}

function convert(s) {
	if(encodeURIComponent) return encodeURIComponent(s);
	if(escape) return escape(s);
}

function showACPopup(param, ctrl, vars) {
	window.open('scripts/ac.php?param='+convert(param)+'&ctrl='+convert(ctrl)+'&onAdd='+convert(vars), 'acPopup', 'width=300,height=300');
}

BubbleTip = function(_name, _desc) {
	this.name = _name;
	this.desc = _desc;
	this.shown = 0;
	this.document = document;
	this.inited = 0;
}

BubbleTip.prototype.init = function() {
	if (this.inited) return;

	this.frame = this.document.createElement("DIV");
	this.nameFrame = this.document.createElement("DIV");
	this.descFrame = this.document.createElement("DIV");
	
	this.frame.style.backgroundImage = 'url(images/design/bubble.gif)';
	this.frame.style.position = 'absolute';
	this.frame.style.top = '100px';
	this.frame.style.left = '200px';
	this.frame.style.width = '314px';
	this.frame.style.height = '83px';
	this.frame.style.overflow = 'hidden';
	this.frame.style.fontFamily = 'Tahoma';
	this.frame.style.fontSize = '11px';
	this.frame.style.display = 'none';

	this.nameFrame.style.position = 'relative';
	this.nameFrame.style.top = '30px';
	this.nameFrame.style.left = '32px';
	this.nameFrame.style.fontWeight = 'bold';
	this.nameFrame.style.overflow = 'hidden';
	this.nameFrame.style.height = '12px';
	this.nameFrame.style.width = '270px';
	this.nameFrame.innerHTML = this.name;

	this.descFrame.style.position = 'relative';
	this.descFrame.style.top = '37px';
	this.descFrame.style.left = '10px';
	this.descFrame.style.fontWeight = 'normal';
	this.descFrame.style.overflow = 'hidden';
	this.descFrame.style.height = '30px';
	this.descFrame.style.width = '290px';
	this.descFrame.innerHTML = this.desc;

	this.frame.appendChild(this.nameFrame);
	this.frame.appendChild(this.descFrame);
	document.body.appendChild(this.frame);

	this.inited = 1;
}

BubbleTip.prototype.setContent = function(_name, _desc) {
	this.nameFrame.innerHTML = this.name = _name;
	this.descFrame.innerHTML = this.desc = _desc;
}

BubbleTip.prototype.setPosition = function(_x, _y) {
	this.frame.style.top = _y + 5;
	this.frame.style.left = _x - 15;
}

BubbleTip.prototype.show = function() {
	this.frame.style.display = 'block';
	this.shown = 1;
}

BubbleTip.prototype.hide = function() {
	this.frame.style.display = 'none';
	this.shown = 0;
}

function showBubbleTip() {
	if (!dontShow) bubbleTip.show();	
}

function hideBubbleTip() {
	bubbleTip.hide();
	dontShow = 1;
}

function initBubble() {
	bubbleTip.init();
}

function hovered(_name, _desc, event) {
	if (!event) event = window.event;
	var cursor = getPosition(event);

	bubbleTip.setPosition(cursor.x, cursor.y);

	if (!bubbleTip.shown) {
		bubbleTip.setContent(_name, _desc);
		setTimeout("showBubbleTip()", 1000);
		dontShow = 0;
	}	
}

function getPosition(e) {
	var cursor = {x:0, y:0};
	
	if (e.pageX || e.pageY) {
		cursor.x = e.pageX;
		cursor.y = e.pageY;
	} else {
		cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		cursor.y = e.clientY + (document.documentElement.scrollTop  || document.body.scrollTop ) - document.documentElement.clientTop;
	}
	
	return cursor;
}

var bubbleTip = new BubbleTip('', '');
var dontShow = 1;

function delayedReload(url, delay) {
	window.open(url);
	setTimeout(window.location.reload, delay);
}

function PHPRequest(reqFile) {
        this.requestFile = typeof reqFile == 'undefined' ? "ac.php?mode=1" : reqFile;
        this.httpReq = null;
        this.lastResp = "";
        this.procdResp = false;
        this.control = null;
	this.params = {};

        try {
                this.httpReq = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
                try {
                        this.httpReq = new ActiveXObject("Microsoft.XMLHTTP");
                } catch(sc) {
                        this.httpReq = null;
                }
        }

        if (!this.httpReq && typeof XMLHttpRequest!="undefined") {
                this.httpReq = new XMLHttpRequest();
        }
}

PHPRequest.prototype.sendRequest = function (req) {
    var me = this;

    if (req.length > 1) {
                if(this.httpReq&&this.httpReq.readyState!=0) {
                        this.httpReq.abort();
                }

                if(this.httpReq) {
                        var meReq = this.httpReq;
                        var reqFile = this.requestFile;
			var now = new Date();

                        for(var n in this.params) reqFile = reqFile + "&vars[" + n + "]=" + this.params[n];
                        reqFile += "&"+this.convert(req);

			reqFile += "&ts="+this.convert(now.getTime());
                        this.httpReq.open("GET",reqFile,true);
                        this.httpReq.onreadystatechange=function() {
                                if(meReq.readyState==4&&meReq.responseText) {
                                        me.procdResp = false;
                                        me.lastResp = meReq.responseText;
                                        me.processResponse();
                                }
                        };

                        this.httpReq.send(null);
                }

        }

};

PHPRequest.prototype.convert = function (s) {
        if(encodeURIComponent) return encodeURIComponent(s);
        if(escape) return escape(s);
}

PHPRequest.prototype.processResponse = function () {

};

