var disabledElement=new Array();

function Ajax()
{ 
	var xmlhttp=false;
	try
	{
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(E)
		{
			if (!xmlhttp && typeof XMLHttpRequest!="undefined") xmlhttp=new XMLHttpRequest();
		}
	}
	return xmlhttp; 
}

function LoadLinkedSelect(param)
{
	if(typeof(param)=="string")
	{
		// Llamada desde función
		var originID=param;
	}
	else
	{
		// Llamada desde evento
		var originID=this.id;	
	}
	// Puede que el elemento no exista en la llamada recursiva al último de la cadena
	if(document.getElementById(originID+"LinkInformation"))
	{
		var linkInformation=document.getElementById(originID+"LinkInformation").value.split(":");
		var classLocation=linkInformation[0];
		var targetID=linkInformation[1];
		var targetTable=linkInformation[2];
		var targetValuesColumn=linkInformation[3];
		var targetOptionsColumn=linkInformation[4];
		var targetReferenceColumn=linkInformation[5];
		var when=linkInformation[6];
		var originSelect=document.getElementById(originID);
		var targetSelect=document.getElementById(targetID);
		var selectedOption=originSelect.options[originSelect.selectedIndex].value;
		
		if(disabledElement[targetID]==null)
		{
			disabledElement[targetID]=new Array();
			disabledElement[targetID]["option"]=targetSelect.options[targetSelect.selectedIndex].innerHTML;
			disabledElement[targetID]["value"]=targetSelect.options[targetSelect.selectedIndex].value;
		}
	
		if(selectedOption==when)
		{
			targetSelect.length=0;
			var newOption=document.createElement("option"); newOption.value=disabledElement[targetID]["value"];
			newOption.innerHTML=disabledElement[targetID]["option"];
			targetSelect.appendChild(newOption); targetSelect.disabled=true;
			// Llamada recursiva para colocar todos los select en su default option
			LoadLinkedSelect(targetID);
		}
		else
		{
			var ajax=Ajax();
			ajax.open("POST", classLocation+"LinkedSelectProcessor.class.php", true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send("selected="+selectedOption+"&table="+targetTable+"&values="+targetValuesColumn+"&options="+targetOptionsColumn+"&reference="+targetReferenceColumn);
				
			ajax.onreadystatechange=function()
			{ 
				if (ajax.readyState==1)
				{
					targetSelect.length=0;
					var newOption=document.createElement("option"); newOption.value=0; newOption.innerHTML="Cargando...";
					targetSelect.appendChild(newOption); targetSelect.disabled=true;	
				}
				if (ajax.readyState==4)
				{
					var response=ajax.responseXML;
					var optionList=response.getElementsByTagName("option");
					var valueList=response.getElementsByTagName("value");
					var newOption=null;
					
					targetSelect.length=0;
					
					var newOption=document.createElement("option"); newOption.value=disabledElement[targetID]["value"];
					newOption.innerHTML=disabledElement[targetID]["option"];
					targetSelect.appendChild(newOption);
					
					for(x=0; x<optionList.length; x++)
					{
						newOption=document.createElement("option");
						newOption.value=valueList[x].childNodes[0].data;
						newOption.innerHTML=optionList[x].childNodes[0].data;
						targetSelect.appendChild(newOption);
					}
					targetSelect.disabled=false;
					LoadLinkedSelect(targetID);
				} 
			}			
		}		
	}
}