var indicator_html    = "<img src='indicator.gif' alt='' />";
var indicator_div_use = true;
var indicator_div_id  = "indicator";

//-----------------------------------------------------------------------------------------------

function getElementId(obj) {
	if (document.all) {
		return obj.getAttribute('id');
	} else {
		return obj.id;	
	}
}

function xml_get_node_value(obj,tag) {
	return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
}
function xml_get_list(request,tag) {
	return request.responseXML.getElementsByTagName(tag);
}

function indicator_show(divId) {
	indicatorDiv = (indicator_div_use) ? $(indicator_div_id) : $(divId);
	indicatorDiv.innerHTML = indicator_html;
	indicatorDiv.style.visibility = "visible";
}

function indicator_hide() {
	if ( indicator_div_use ) {
		indicatorDiv = $(indicator_div_id);
		indicatorDiv.style.visibility = "hidden";
	}
}

function get_command_param(responseText, command, params_count) {
	var params_count = (params_count == null) ? 1 : params_count;
	
	var params = new Array();
	baseIndex = responseText.indexOf("<!--%"+command+"%-->");
	temp = responseText.substring(baseIndex+ 5+command.length+4 + 4);
	for ( var i=0; i<params_count; i++ ) {
		param = temp.substring(0, temp.indexOf('-->'));
		params.push(param);
		temp = temp.substring(param.length+3 + 4);
	}
	return params;
}

function ajaxRequestResponse(div, responseText, module) {
	var div = $(div);
	
	Element.update(div, responseText);
	
	indicator_hide();
	
	// alert
	if ( responseText.indexOf("<!--%alert%-->") >= 0 ) {
		params = get_command_param(responseText, "alert");
		alert(params[0]);
	}	
	// blink
	if ( responseText.indexOf("<!--%blink%-->") >= 0 ) {
		blink(div);
	}
	// Loadmodule
	if ( responseText.indexOf("<!--%loadmodule%-->") >= 0 ) {
		params = get_command_param(responseText, "loadmodule", 2);
		module2 = params[0];
		params2 = params[1];
		if ( module2 == module ) {
			alert("Nem megengedett rekurzió!");
		} else {
			loadModule(div, module2, params2);
		}
	}
	// location
	if ( responseText.indexOf("<!--%location%-->") >= 0 ) {
		params = get_command_param(responseText, "location");
		document.location.href = params[0];
	}	
	// reload
	if ( responseText.indexOf('<!--%reload%-->') >= 0 ) {
		document.location.reload();
	}
}

function loadModule(div, module, params) {
	indicator_show(div);

	var params = "_file=" + module + "&" + params;
	
	var myAjax = new Ajax.Request(
		'ajax.php', {
			method:     'post',
			parameters: params,
			onFailure:  reportError,
			onComplete: showResponse
		}
	);
	
	function reportError(request) {
		alert('Az oldal átmenetileg nem érhető el!');
	}
	
	function showResponse(request) {
		ajaxRequestResponse(div, request.responseText, module);
	}
	return false;
}

function loadModuleForm(div, module, senderForm) {
	indicator_show(div);
	
	var elements = Form.getElements(senderForm);
	for ( var i=0; i<elements.length; i++ ) {
		if ( elements[i].name.length > 0 ) {
			Try.these(
				function() {$(elements[i].name+"_error").innerHTML = ""}
			);
		}
	}
	
	var params = "_file=" + module + "&_xml=1&" + Form.serialize(senderForm);
	
	var myAjax = new Ajax.Request(
		'ajax.php', {
			method:     'post',
			parameters: params,
			onFailure:  reportError,
			onComplete: showResponse
		}
	);
	
	function reportError(request) {
		alert('Az oldal átmenetileg nem érhető el!');
	}
	
	function showResponse(request) {
		indicator_hide();
		
		var error_exists = false;
		var errors = xml_get_list(request, "error");
		var alert_errors = "";
		for ( var i=0; i<errors.length; i++ ) {
			field = xml_get_node_value(errors[i], 'field');
			text  = xml_get_node_value(errors[i], 'text');
			Try.these(
				function() {$(field+"_error").innerHTML = text;},
				function() {alert_errors += text + "\n";}
			);
			error_exists = true;
		}
		
		if ( error_exists ) {
			if ( alert_errors.length > 0 ) {
				alert(alert_errors);
			}
			$(div).innerHTML = "";
		} else {
			ajaxRequestResponse(div, request.responseText, module);
		} 
	}
	return false;
}

function optionsLoad(sel, file, params) {
	var sel = $(sel);
	sel.disabled = true;

	var params = "_file=" + file + "&_xml=1&" + params;
	
	var myAjax = new Ajax.Request(
		'ajax.php', {
			method:     'post',
			parameters: params,
			onFailure:  reportError,
			onComplete: showResponse
		}
	);

	function reportError(request) {
		alert('Az oldal átmenetileg nem érhető el!');
	}
	
	function showResponse(request) {
		if ( request.responseText.substring(0,14) == "<!--%alert%-->" ) {
			temp = request.responseText.substring(18);
			alert(temp.substring(0, temp.indexOf('-->')));
		}
		
		sel.options.length = 0;
		var list = xml_get_list(request, "option");
		for (var i=0; i<list.length; i++) {
			value = xml_get_node_value(list[i], 'value');
			text  = xml_get_node_value(list[i], 'text');
			sel.options[sel.options.length] = new Option(text,value);
		}
		
		sel.disabled = false;
	}
}

// Blinking
function blink(div) {
	new Effect.Highlight(div);
}


function moveSelectItem(from, to) {
	from  = $(from);
	to    = $(to);
	index = from.selectedIndex;
	
	if ( index >= 0 ) {
		addItem(to, from.options[index].value, from.options[index].text);
	  deleteItem(from, index);
	}
}

function selectAllItem(sel) {
	sel = $(sel);
	
	sel.multiple = true;
	for ( i=0; i<sel.options.length; i++ ) {
		sel.options[i].selected = true;
	}
}

function addItem(sel, value, text) {
	sel = $(sel);
	
	sel.options[sel.options.length] = new Option(text,value);
}

function deleteItem(sel, index) {
	$(sel).options[index] = null;
}

function changeFontSize(elementId, inc) {
	var minsize = 11;
	var maxsize = 15;
	var e = document.getElementById(elementId);
	var actualsize = parseInt(e.style.fontSize);
	if ( (inc > 0 && actualsize < maxsize) ||  (inc < 0 && actualsize > minsize) ) {
		e.style.fontSize = (actualsize + inc) + "px";
	}
}
