var ventanaConsultaLookup;

function cambioControlMaestro(evento, control, controlMaestro, tabla, campoClave, campoValor, campoDependiente, 
		controlDependiente, soloLectura, valorCualquiera)
{
	evento = (evento) ? evento : ((event) ? event : null);
	var origen = evento.target ? evento.target : evento.srcElement;
	if (origen.id == controlMaestro) {
		var controlMaestro = obtenerObjeto(controlMaestro);
		if (controlMaestro) {
			cambiarLista(control, tabla, campoClave, campoValor, campoDependiente, controlMaestro.value, 
					controlDependiente, soloLectura, valorCualquiera);
		}
	}
}

function cambiarControlDependiente(evento, controlDependiente)
{
	evento = (evento) ? evento : ((event) ? event : null);
	var controlDependiente = obtenerObjeto(controlDependiente); 
	if (controlDependiente) { 
		if (controlDependiente.onchange) { 
			controlDependiente.onchange(evento); 
		} 
	} 
}

function vaciarLista(idControl)
{
	var control = obtenerObjeto(idControl);
	// Si la lista contiene elementos, al vaciarla se queda el texto seleccionado
	// en el control; así que primero se deja un elemento en blanco y después se vacía.
	if (control) {
		control.options.length = 1;
		control.options[0].text = "";
		control.options.length = 0;
	}
}

function cambiarListaANTIGUO(idControl, tabla, campoClave, campoValor, campoDependiente, valorMaestro, 
		idControlesDependientes, soloLectura, valorCualquiera)
{
	if ((valorMaestro == undefined) || (valorMaestro == '') || (valorMaestro <= 0)) {
		vaciarLista(idControl);
		if (idControlesDependientes != '') {
			var lista_id = idControlesDependientes.split(',');
			for (var i = 0; i < lista_id.length; ++i) {
				vaciarLista(lista_id[i]);
			}
		}
		return;
	}
	callback = idControl;
	if ((idControlesDependientes != undefined) && (idControlesDependientes != '')) {
		callback = callback + ',' + idControlesDependientes;
	}
	ventanaConsultaLookup = window.open("http://www.worldofgalina.com/clases/fragmentos/lookup-combo-ventana.php?tabla=" + tabla + 
			"&campoclave=" + campoClave + "&campovalor=" + campoValor + "&campodependiente=" + campoDependiente + 
			"&valormaestro=" + valorMaestro + "&callback=" + callback + "&sololectura=" + soloLectura +
			"&valorcualquiera=" + valorCualquiera, "consultalookup", "width=320,height=100");
}

/***
function crear_nuevo(id_control, tabla, campo_valor, campo_nombre, campo_clave, valor_clave, id_controles_dependientes)
{
	callback = id_control;
	if ((id_controles_dependientes != undefined) && (id_controles_dependientes != ''))
	{
		callback = callback + ',' + id_controles_dependientes;
	}
	if (valor_clave == 0)	// No hay tabla relacionada
	{
		ventanaConsultaLookup = window.open("include/consulta-lookup-nuevo.php?tabla=" + tabla + "&campovalor=" + campo_valor + "&camponombre=" + campo_nombre + "&callback=" + callback, "consultalookup", "width=320,height=100");
	}
	else	// Tabla relacionada, crear con campo_clave = valor_clave
	{
		ventanaConsultaLookup = window.open("include/consulta-lookup-nuevo.php?tabla=" + tabla + "&campovalor=" + campo_valor + "&camponombre=" + campo_nombre + "&campoclave=" + campo_clave + "&valorclave=" + valor_clave + "&callback=" + callback, "consultalookup", "width=320,height=100");
	}
}
***/
function rellenarLista(idControles)
{
	if (!IFrameObj) return;
	var documentoIframe;
	if (IFrameObj.contentDocument) {
		documentoIframe = IFrameObj.contentDocument;
	} else if (IFrameObj.document) {
		documentoIframe = IFrameObj.document;
	} else if (IFrameObj.contentWindow && IFrameObj.contentWindow.document) {
		documentoIframe = IFrameObj.contentWindow.document;
	} else {
		return;
	}
	
	// Separar el primer parámetro en los id de los distintos controles; el primer control es el que hay que rellenar, los demás (si existen) son controles dependientes que deben quedar vacíos
	var idControl = idControles.split(',');

	var control = document.getElementById(idControl[0]);
	control.options.length = 0;
	var registros = documentoIframe.forms[0].elements;
	for (var i = 0; i < registros.length; ++i) {
		control.options[i] = new Option(registros[i].name, registros[i].value, false, false);
	}
	if (idControl.length > 1) {
		for (var i = 1; i < idControl.length; ++i) {
			vaciarLista(idControl[i]);
		}
	}
}
/***
function rellenar_lista_nuevo_valor(id_controles, valor_seleccionado)
{
	// Separar el primer parámetro en los id de los distintos controles; el primer control es el que hay que rellenar, el segundo (si existe) es el control dependiente que quedará sólo con la opción de crear, los demás (si existen) son controles dependientes que deben quedar vacíos
	var lista_id = id_controles.split(',');

	var control = document.getElementById(lista_id[0]);
	control.options.length = 0;
	var registros = ventanaConsultaLookup.document.forms[0].elements;
	for (var i = 0; i < registros.length; ++i)
	{
		control.options[i] = new Option(registros[i].name, registros[i].value, false, false);
		if (registros[i].value == valor_seleccionado)
		{
			control.options[i].selected = true;
		}
	}
	if (lista_id.length > 1)
	{
		// El primer control dependiente debe quedar sólo con dos opciones: una vacía y otra que permita crear un nuevo elemento (dado que se acaba de crear un valor y por tanto no tiene valores relacionados).
		control = document.getElementById(lista_id[1]);
		control.options.length = 0;
		control.options[0] = new Option('', '', true, false);
		control.options[1] = new Option('<?=_("* Crear *")?>', -valor_seleccionado, false, false);
		for (var i = 2; i < lista_id.length; ++i)
		{
			vaciarLista(lista_id[i]);
		}
	}
}
***/

var IFrameObj; // our IFrame object

// Rellena la lista del control "idControl" recuperando pares "campoClave" - "campoValor"
// de la tabla "tabla". "campoDependiente" es opcional; indica un campo de "tabla" que se
// usará para filtrar las filas, devolviendo solo las que tienen "campoDependiente"="valorMaestro".
// "idControlesDependientes" (opcional) es una lista de nombres, separados por comas, de controles
// que dependen de "idControl" y que se vaciarán. 
// Devuelve true si se ha realizado correctamente la llamada, false si hay un problema.
function cambiarLista(idControl, tabla, campoClave, campoValor, campoDependiente, valorMaestro, 
		idControlesDependientes, soloLectura, valorCualquiera) {
	if (!document.createElement) {return true};
	var IFrameDoc;

	if ((valorMaestro == undefined) || (valorMaestro == '') || (valorMaestro <= 0)) {
		vaciarLista(idControl);
		if (idControlesDependientes != '') {
			var lista_id = idControlesDependientes.split(',');
			for (var i = 0; i < lista_id.length; ++i) {
				vaciarLista(lista_id[i]);
			}
		}
		return true;
	}
	callback = idControl;
	if ((idControlesDependientes != undefined) && (idControlesDependientes != '')) {
		callback = callback + ',' + idControlesDependientes;
	}
	var URL = "/include/lookup-combo-iframe.php?tabla=" + tabla + 
			"&campoclave=" + campoClave + "&campovalor=" + campoValor + "&campodependiente=" + campoDependiente + 
			"&valormaestro=" + valorMaestro + "&callback=" + callback + "&sololectura=" + soloLectura +
			"&valorcualquiera=" + valorCualquiera;

	//provide a "loading" message
	/***
	var responseMessage = document.getElementById('responseMessage');
	responseMessage.style.display = 'inline';
	responseMessage.innerHTML = 'loading data...';
	***/
	
	if (!IFrameObj && document.createElement) {
		// create the IFrame and assign a reference to the
		// object to our global variable IFrameObj.
		// this will only happen the first time 
		// callToServer() is called
		try {
			var tempIFrame=document.createElement('iframe');
			tempIFrame.setAttribute('id','RSIFrame');
			tempIFrame.style.border='0px';
			tempIFrame.style.width='0px';
			tempIFrame.style.height='0px';
			IFrameObj = document.body.appendChild(tempIFrame);
			
			if (document.frames) {
				// this is for IE5 Mac, because it will only
				// allow access to the document object
				// of the IFrame if we access it through
				// the document.frames array
				IFrameObj = document.frames['RSIFrame'];
			}
		} catch(exception) {
			// This is for IE5 PC, which does not allow dynamic creation
			// and manipulation of an iframe object. Instead, we'll fake
			// it up by creating our own objects.
			iframeHTML='<iframe id="RSIFrame" style="';
			iframeHTML+='border:0px;';
			iframeHTML+='width:0px;';
			iframeHTML+='height:0px;';
			iframeHTML+='"><\/iframe>';
			document.body.innerHTML+=iframeHTML;
			IFrameObj = new Object();
			IFrameObj.document = new Object();
			IFrameObj.document.location = new Object();
			IFrameObj.document.location.iframe = document.getElementById('RSIFrame');
			IFrameObj.document.location.replace = function(location) {
				this.iframe.src = location;
			}
		}
	}
	
	if (navigator.userAgent.indexOf('Gecko') !=-1 && !IFrameObj.contentDocument) {
		// we have to give NS6 a fraction of a second
		// to recognize the new IFrame
		setTimeout('callToServer("' + idControl + '","' + tabla + '","' + campoClave + '","' + 
				campoValor + '","' + campoDependiente + '","' +  valorMaestro + '","' +
				idControlesDependientes + '","' + soloLectura + '","' + valorCualquiera + '")', 10);
		return true;
	}
	
	if (IFrameObj.contentDocument) {
		// For NS6
		IFrameDoc = IFrameObj.contentDocument; 
	} else if (IFrameObj.contentWindow) {
		// For IE5.5 and IE6
		IFrameDoc = IFrameObj.contentWindow.document;
	} else if (IFrameObj.document) {
		// For IE5
		IFrameDoc = IFrameObj.document;
	} else {
		return false;
	}
	
	IFrameDoc.location.replace(URL);
	return true;
}

