var cont = 0;
var nhijos = 0;

function quickSort(objArray,aod) { 
	procesoQS(objArray,aod,0,objArray.length-1); 
	}

function procesoQS(objArray,aod,ini,fin) { 
var i = ini;
var j = fin;
var tmp;
var c = objArray[Math.floor( ( i + j ) / 2 )];

do{ 
	if( aod == "A" ){ 
		while ( ( i < fin ) && ( c.nombrehijo > objArray[i].nombrehijo ) ) i++;
		while ( ( j > ini ) && ( c.nombrehijo < objArray[j].nombrehijo ) ) j--; 
		}
	else{ 
		while ( ( i < fin ) && ( c.nombrehijo < objArray[i].nombrehijo ) ) i++;
		while ( ( j > ini ) && ( c.nombrehijo > objArray[j].nombrehijo ) ) j--; 
		}

	if(i<j){ 
		tmp = objArray[i];
		objArray[i] = objArray[j];
		objArray[j] = tmp; 
		}
	if(i<=j){ 
		i++;
		j--; 
		} 
	}while ( i <= j );

if(ini<j) procesoQS(objArray,aod,ini,j);
if(i<fin) procesoQS(objArray,aod,i,fin); 
}

function cargaArrayHijo(cmbHijo, tablaHijo, ind){
cmbHijo = eval("document.getElementById('"+cmbHijo+"')")
var padre = 0;
var valIni = 0;
var tablaInsert=new Array();
if (arraylanza[ind].seleccionaTodos.valor == -1){
	aux = new Option(arraylanza[ind].seleccionaTodos.texto, arraylanza[ind].seleccionaTodos.valor);
	cmbHijo.options[cmbHijo.length] = aux;
	valIni ++;
	}
/* creamos una array intermadio para ralizar la ordenación */
for (d=0;d<tablaHijo.length;d++){
	tablaInsert[d] = tablaHijo[d];
	}
	/* ordenamos los datos que vamos a insertar */
	quickSort(tablaInsert,"A")
	var topeH = tablaInsert.length;
		for (i=valIni;i<topeH;i++){
			aux = new Option(tablaInsert[i-valIni].nombrehijo,tablaInsert[i-valIni].idhijo);
			cmbHijo.options[cmbHijo.length] = aux;
			}
	}


function cargaSelect(padre){

for(k=0;k<arraylanza.length;k++){
	if (padre == arraylanza[k].listaPadres){
		ind = k;
		k = arraylanza.length;
		}
	}

	padre = eval("document.getElementById('"+padre+"')");
	hijo = arraylanza[ind].id;
	valor = padre.options[padre.selectedIndex].value;
	vArray = arraylanza[ind].matriz;
	var ini=0;
	var fin=vArray.length-1;
	var medio;
	var oSel_val=document.getElementById(hijo);
     
	for (k=oSel_val.length;k>0;k--){
		oSel_val.options[k] = null;
		}
	
	oSel_val.options.length=0;
	var vArrayDestino = new Array();
	//Si el valor seleccionado es todos, limpiamos el resto de seleccionados:
	if (valor == -1){
		cargaArrayHijo(hijo, arrayHijo, ind)
		}
 		else{
			var encontrado=0;
	    while(ini<=fin){
				medio=parseInt((ini+fin)/2);
				if(valor==vArray[medio].idpadre){
					var pad = vArray[medio].idpadre;
					var cod = vArray[medio].idhijo;
		     var des = vArray[medio].nombrehijo;         	
		     vArrayDestino[vArrayDestino.length]={idpadre: pad, idhijo:	cod, nombrehijo: des}
		     encontrado = 1;
	             break;             
	          }
	          else if (valor>vArray[medio].idpadre)
	             ini = medio+1;
	          else fin=medio-1;
	     }
	    
	    //Si hemos encontrado el valor buscado en el array:
	    prsup = 0;
	    prinf = 0;
	    if(encontrado==1)
	    	{  
	          //Cargamos en el array nuevo que vamos a utilizar para cargar el select   
	          mediSup = medio;
	          while (vArray[mediSup].idpadre == valor)
	          {
	             mediSup=mediSup + 1;       
	             if (mediSup == vArray.length) break;  	
	             if (vArray[mediSup].idpadre != valor) break;
	             //cargo el vArrayDestino.
	             var pad = vArray[mediSup].idpadre;
	             var cod = vArray[mediSup].idhijo;
	             var des = vArray[mediSup].nombrehijo;
	             //vArrayDestino[vArrayDestino.length]=[pad,cod,des];
	             vArrayDestino[vArrayDestino.length]={idpadre: pad, idhijo:	cod, nombrehijo: des}
	             prsup = 1;
	       	  } 
	          
	       	  mediInf = medio;
	       	  while (vArray[mediInf].idpadre == valor)
	          {       
	             mediInf=mediInf - 1;
	             if (mediInf < 0) break; 
	             if (medio == 0 && vArray[0].idhijo=='-1') break; 
	             if (vArray[mediInf].idpadre != valor) break;
	             //cargo el vArrayDestino.
	             var pad = vArray[mediInf].idpadre;
	             var cod = vArray[mediInf].idhijo;
	             var des = vArray[mediInf].nombrehijo;
	             vArrayDestino[vArrayDestino.length]={idpadre: pad, idhijo:	cod, nombrehijo: des};
	             prinf = 1;
	       	  } 
	          
	          //Una vez ordenado el array destino, llamamos a :
	          cargaArrayHijo(hijo, vArrayDestino, ind);
			  document.getElementById("descargar-juego").href = ("descargas/ayuda_humanitaria/"+cod+".zip");
	    }
	    //Si NO hemos encontrado el valor buscado en el array:
	    else
	    {
	         //si es simple se pone un mensaje de "valores no recuperados en el combo"
	         //Sería conveniente hacerlo multi-idioma o definirlo por defecto...
	           var oOptionSel = document.createElement("OPTION");
		         oSel_val.options.add(oOptionSel);
		         oOptionSel.value     = '-2';
		         oOptionSel.innerText = "Sin dependencias";
		
	    }
    }

 }


function cargapadres(){
/*si todos es -1 doy la opción de seleccionar todos*/
var valIni = 0;
var ctrlTodos
for(k=0;k<arraylanza.length;k++){
	combo = eval("document.getElementById('"+arraylanza[k].id+"')")
	tabla = arraylanza[k].matriz;
	valtodos = arraylanza[k].seleccionaTodos.valor;
	todos = arraylanza[k].seleccionaTodos.texto;
	if(arraylanza[k].listaPadres == ""){
			aux = new Option("---",'-2');
			combo.options[combo.length] = aux
			valIni ++;
		if (valtodos == -1){
			aux = new Option(todos,valtodos);
			combo.options[combo.length] = aux;
			valIni ++;
			}
		/*inserto el resto de opciones del array padre*/
		var tope = tabla.length + valIni;
		for (i=valIni;i<tope;i++){
			aux = new Option(tabla[i-valIni].nombrePadre,tabla[i-valIni].idpadre);
			combo.options[combo.length] = aux;
			}	
		}
	}
}