function ajaxObject()
{ 
	this.AJAX = false;
	this.beforeReceive = function ()
	{
	};
	this.afterReceive = function ()
	{
	};
	this.destino = null;
	
	this.create = function ()
	{ 
		/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
		lo que se puede copiar tal como esta aqui */
		try
		{
			// Creacion del objeto AJAX para navegadores no IE
			this.AJAX=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				// Creacion del objet AJAX para IE
				this.AJAX=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(E)
			{
				if (!this.AJAX && typeof XMLHttpRequest!='undefined') this.AJAX=new XMLHttpRequest();
			}
		}
	}

	this.send = function (proc, idSelectDestino, opcionSeleccionada, anchura, estilo)
	{		
		var obj  = this;		
		var ajax = this.AJAX;
		var selectDestino=document.getElementById(idSelectDestino);

		this.destino = idSelectDestino;
		
		this.AJAX.open("GET", "/php2/"+proc+"?select="+idSelectDestino+"&opcion="+opcionSeleccionada+"&anchura="+anchura+"&estilo="+estilo, true);

		this.AJAX.onreadystatechange=function() 
		{ 
			if (ajax.readyState==1)
			{
				obj.beforeReceive();				
				// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
				selectDestino.length=0;
				var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
				selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;	
			}
			if (ajax.readyState==4)
			{		
				selectDestino.parentNode.innerHTML = ajax.responseText;
				obj.afterReceive();								
			} 
		}
		this.AJAX.send(null);	
	}

	this.setBeforeReceive = function (fun)
	{
		this.beforeReceive = fun;
	}
	
	this.setAfterReceive = function (fun)
	{
		this.afterReceive = fun;
	}
}

function noAction()
{
}
	
function ocultarBloque()
{
	var posicionSelectDestino = buscarEnArray(listadoSelects, this.destino, 0);
	
	for ( x = posicionSelectDestino; listadoSelects[x] != "" && x < listadoSelects.length; x++ )
	{			
		var tmp = document.getElementById( "bloque_" + listadoSelects[x] );
		tmp.style.display="none";
	}	
}

function mostrarBloque()
{
	var elem = document.getElementById( "bloque_" + this.destino);
						   
	if ( document.getElementById(this.destino).length > 0 )
	{
		elem.style.display="";
	}
}

// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0] = "provincia";
listadoSelects[1] = "municipio";
listadoSelects[2] = "";
listadoSelects[3] = "prov";
listadoSelects[4] = "municipio";
listadoSelects[5] = "";
listadoSelects[6] = "cat";
listadoSelects[7] = "subcat";
listadoSelects[8] = "tricat";
listadoSelects[9] = "cuacat";
listadoSelects[10] = "";
listadoSelects[11] = "cat";
listadoSelects[12] = "marca";
listadoSelects[13] = "";
listadoSelects[14] = "subcat";
listadoSelects[15] = "marca";
listadoSelects[16] = "";
listadoSelects[17] = "tricat";
listadoSelects[18] = "marca";
listadoSelects[19] = "";
listadoSelects[20] = "cuacat";
listadoSelects[21] = "marca";
listadoSelects[22] = "";
listadoSelects[23] = "categoria";
listadoSelects[24] = "subcategoria";
listadoSelects[25] = "tercategoria";
listadoSelects[26] = "cuarcategoria";
listadoSelects[27] = "";

function buscarEnArray(array, dato, inicio)
{
	// Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
	for (x = inicio; x < array.length; x++)
	{
		if(array[x]==dato) return x;
	}
	
	// Si el elemento no se encuentra, buscamos si se está empleando un sufijo tipo _1 , _2 , _3 y lo extraemos para buscar de nuevo
	var pos = dato.indexOf("_");
	if ( pos != -1 )
	{
		dato2 = dato.substring(0, pos);

		for (x = inicio; x < array.length; x++)
		{
			if(array[x]==dato2) return x;
		}
	}
	
	return -1;
}

function clearNexts(idSelectOrigen)
{
	var pos = idSelectOrigen.indexOf("_");
	var sufijo = "";
	if ( pos != -1 )
	{
		sufijo = idSelectOrigen.substring( pos, idSelectOrigen.length );
	}
	
	var posicionSelectDestino = buscarEnArray(listadoSelects, idSelectOrigen, 0);
	
	while ( posicionSelectDestino != -1)
	{		
	 	posicionSelectDestino++;
	 
		for ( x = posicionSelectDestino; listadoSelects[x] != "" && x < listadoSelects.length; x++ )
		{			
			var tmp = document.getElementById( listadoSelects[x] + sufijo );
			tmp.length=0;
			tmp.disabled=true;
		}
		
		posicionSelectDestino = buscarEnArray(listadoSelects, idSelectOrigen, posicionSelectDestino);
	}
}
	
function cargaContenido(idSelectOrigen, proc)
{
	cargaContenido2(idSelectOrigen, -1, '', proc, noAction, noAction);
}

function cargaContenidoExt(idSelectOrigen, proc)
{
	cargaContenido2(idSelectOrigen, -1, '', proc, ocultarBloque, mostrarBloque);
}

function cargaContenido2(idSelectOrigen, anchura, estilo, proc, funBeforeReceive, funAfterReceive)
{
	var arrayAjax = new Array(10);
	var cursorAjax = 0;
	
	clearNexts(idSelectOrigen);
	
	// Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
	var posicionSelectDestino = buscarEnArray(listadoSelects, idSelectOrigen, 0);

	while ( posicionSelectDestino != -1 )
	{		
		posicionSelectDestino++;	// Incrementamos en 1 para coger el siguiente elemento
					 
		// Obtengo el select que el usuario modifico
		var selectOrigen=document.getElementById(idSelectOrigen);
		var esperar=true;
		
		// Obtengo la opcion que el usuario selecciono
		var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
	
		var idSelectDestino=listadoSelects[posicionSelectDestino];
		
		var pos = idSelectOrigen.indexOf("_");
		if ( pos != -1 )
		{
			idSelectDestino = idSelectDestino + idSelectOrigen.substring( pos, idSelectOrigen.length);
		}
	
		// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
		if(opcionSeleccionada==0)
		{
			var selectActual=null;
	
			// Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
			{
				selectActual=document.getElementById(idSelectDestino);
				selectActual.length=0;
				
				var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona Opci&oacute;n...";
				selectActual.appendChild(nuevaOpcion);	selectActual.disabled=true;
			}
		}
		else
		{
			// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
			obj = new ajaxObject();
			obj.create();
			obj.setBeforeReceive(funBeforeReceive);
			obj.setAfterReceive(funAfterReceive);
			obj.send(proc, idSelectDestino, opcionSeleccionada, anchura, estilo);
		}
		
		posicionSelectDestino = buscarEnArray(listadoSelects, idSelectOrigen, posicionSelectDestino);
	}
}