function checkEnter(e, elementToClick) {
	if (e.keyCode == Event.KEY_RETURN) { //Si es enter, hago click sobre el elemento.
		document.getElementById(elementToClick).onclick();
	}
}

function save(page, contentToUpdate, parametersString, attributesPrefix) {
	var processedParameters = "";
	if (parametersString != null && parametersString != "") {
		var parameters = parametersString.split(",");
		for (var i = 0; i < parameters.length; i++) {
			var element = document.getElementById(attributesPrefix + parameters[i]);
			if (element.type == "radio") {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + element.checked;
			} else if (element.type == "checkbox") {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + element.checked;
			} else if (element.type == "select-multiple") {
				for (var j = 0; j < element.options.length; j++) {
					if (element.options[j].selected) {
						processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + encodeURIComponent(element.options[j].value);
					}
				}
			} else {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + encodeURIComponent(element.value);
			}
		}
	}
	if (validate()) {
		updateContent(page, 'post', contentToUpdate, processedParameters);
	}
}

function cancel(page, id) {
	var processedParameters = "cancel=true&ID=" + id;
	updateFloatingContent(page, 'post', processedParameters);
}

function cancelConsult(page, elementCode, id) {
	var contentToUpdate = document.getElementById(elementCode + "-consult-" + id);
	document.getElementById("currentExpandedElement").value = "";
	updateContent(page, 'post', contentToUpdate, 'cancel=true&ID=' + id);
}

function saveAndNew(page, parametersString, attributesPrefix) {
	var processedParameters = "";
	if (parametersString != null) {
		var parameters = parametersString.split(",");
		for (var i = 0; i < parameters.length; i++) {
			var element = document.getElementById(attributesPrefix + parameters[i]);
			if (element.type == "radio") {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + element.checked;
			} else if (element.type == "checkbox") {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + element.checked;
			} else {
				processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + element.value;
			}
		}
	}
	processedParameters += (processedParameters != "" ? "&" : "") + "newElement=true";
	
	if (validate()) {
		updateFloatingContent(page, 'post', processedParameters);
	}
}

function search(page, parametersString, attributesPrefix) {
	doPost(page, 'pageContent', parametersString, attributesPrefix);
}

function searchFilter(page, parametersData, parametersValues, element) {
	var processedParameters = "";

	var parameters = parametersData.split(",");
	var values = parametersValues.split(",");

	for (var i = 0; i < parameters.length; i++) {
		processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + values[i];
	}
	var filters = document.getElementById("filters");
	for (var j = 0; j < filters.childNodes.length; j++) {
		filters.childNodes[j].className = "filter";
	}
	element.className = "filter fselected";
	updateContent(page, 'post', 'searchResults', processedParameters);
}

function quickSearch(page, parametersString, searcher) {
	var processedParameters = "";
	var searchValue = document.getElementById(searcher).value;

	if (parametersString != null) {
		var parameters = parametersString.split(",");
		for (var i = 0; i < parameters.length; i++) {
			processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + searchValue;
		}
	}

	var filters = document.getElementById("filters");
	if (filters != undefined) {
		for (var j = 0; j < filters.childNodes.length; j++) {
			filters.childNodes[j].className = "filter";
		}
	}
	updateContent(page, 'post', 'searchResults', processedParameters);
}

function addElement(page) {
	updateFloatingContent(page, 'get');
}

function editElement(page, id) {
	updateFloatingContent(page, 'get', 'ID=' + id);
}

function consultElement(page, elementCode, id) {
	var buttonPressed = document.getElementById(elementCode + "-button-consult-" + id);
	var contentToUpdate = document.getElementById(elementCode + "-consult-" + id);
	var currentExpandedElement = document.getElementById("currentExpandedElement").value;

	if (currentExpandedElement != contentToUpdate.id) {
		if (currentExpandedElement != "") {
			doCancelConsult();
		}

		buttonPressed.src = "/img/default/consultActivated.png";
		document.getElementById("currentExpandedElement").value = contentToUpdate.id;
		var cells = document.getElementById(elementCode + '-id-' + id).cells;
		for (var i = 0; i < cells.length; i++) {
			cells[i].className += " selected";
		}
		contentToUpdate.style.display = "";
		//Actualizo sólo si no estoy cerrando esta consulta.
		updateContent(page, 'get', contentToUpdate, 'ID=' + id);
	} else {
		doCancelConsult();
	}
}

function doCancelConsult() {
	var cancelButton = document.getElementById("cancelConsultButton");
	if (cancelButton != undefined) {
		cancelButton.onclick();
	}
	document.getElementById("currentExpandedElement").value = "";
}

function removeElement(page, id, contentToUpdate) {
	//internalUpdateContent(page, 'post', 'ID=' + id);
	updateContent(page, 'post', contentToUpdate, 'ID=' + id);
}

function doPost(page, pageContent, parametersString, attributesPrefix) {
	var processedParameters = "";
	if (parametersString != null) {
		var parameters = parametersString.split(",");
		for (var i = 0; i < parameters.length; i++) {
			processedParameters += (i > 0 ? "&" : "") + parameters[i] + "=" + document.getElementById(attributesPrefix + parameters[i]).value;
		}
	}
	updateContent(page, 'POST', pageContent, processedParameters);
}

function updateFloatingContent(page, method, parameters) {
	var contentToUpdate = document.getElementById("floatingDiv");
	var options = createOptions(method, parameters);
	var canUpdate = false;

	//--- Verifico si puedo llamar con ajax ---
	try {
		canUpdate = (Ajax != undefined) && (Ajax.Updater != undefined);
	} catch (e) {
		canUpdate = false;
	}
	//-----------------------------------------

	if (canUpdate) {
		showFloatingDiv();
		new Ajax.Updater(contentToUpdate, page, options);
	} else {
		alert("No podemos usar ajax, recargando página ...");
		document.location.href = page;
	}
}

function updateContent(page, method, contentToUpdate, parameters) {
	var options = createOptions(method, parameters);
	updateContentWithOptions(page, contentToUpdate, options);
}

function updateContentWithOptions(page, contentToUpdate, options) {
	var canUpdate = false;

	//options.onComplete = hideLoadingDiv;
	
	//--- Verifico si puedo llamar con ajax ---
	try {
		canUpdate = (Ajax != undefined) && (Ajax.Updater != undefined);
	} catch (e) {
		canUpdate = false;
	}
	//-----------------------------------------

	if (canUpdate) {
		showLoadingDiv();
		contentToUpdate = $(contentToUpdate);
		new Ajax.Updater(contentToUpdate, page, options);
	} else {
		alert("No podemos usar ajax, recargando página ...");
		document.location.href = page;
	}
}

function internalUpdateContent(page, method, parameters) {
	var options = createOptions(method, parameters);

	//--- Verifico si puedo llamar con ajax ---
	var canRequest = false;
	try {
		canRequest = (Ajax != undefined) && (Ajax.Request != undefined);
	} catch (e) {
		canRequest = false;
	}
	//-----------------------------------------
	if (canRequest) {
		new Ajax.Request(page, options);
	} else {
		alert("No podemos usar ajax, recargando página ...");
		document.location.href = page;
	}
}

function createOptions(method, parameters) {
	var options = new Object();
	options.method = method;
	options.evalScripts = true;
	options.parameters = (parameters != undefined && parameters != "") ? parameters.replace(/[\?]/g, '%3F') : parameters;
	//options.encoding = 'iso-8859-1';
	options.encoding = 'UTF-8';
	//options.onException = function (t, e) { alert(e.name + ": Error reacargando página con ajax.\n" + e.message);};

	return options;
}
