
//                      Funciones para combos dinamicos con ajax			
//--------------------------------------------------------------------------			
	var num = 0;    
    var READY_STATE_UNINITIALIZED=0;
    var READY_STATE_LOADING=1;
    var READY_STATE_LOADED=2;
    var READY_STATE_INTERACTIVE=3;
    var READY_STATE_COMPLETE=4;
	var prefijo = "";
	
// Funcion: rellena
// Entradas: 
//             req: objeto de peticion asimetrica ajax
// Salidas: 
//             no tiene
// Descripcion:
//            Se llama cuando una peticion cambia de estado. 
//            Si el estado es complete, carga un menu desplegable 
//            con el texto de respuesta de dicha peticion
function rellena(req)
{
  var ready=req.readyState;
  var data=null;
  if (ready==READY_STATE_COMPLETE)  
  {
     try
    {
		var parser 	= new DOMParser();		
  		var xmlDoc	= parser.parseFromString(req.responseText,"text/xml");	 	   
	   	cargarCombo(xmlDoc);
	   	  
    }
    catch(e) 
		//{
			//alert("rellena: " + req.responseText + " / " + e.message)
		//}
    {
    try
    {
	   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
       xmlDoc.async="false";
       xmlDoc.loadXML(req.responseText);
       cargarCombo(xmlDoc);

     }
         catch(e) {
         //alert("rellena: " + req.responseText + " / " + e.message)
         }
    }                    
  }
}


// Funcion: createXHR
// Entradas: 
//             no tiene
// Salidas: 
//             objeto xmlhttprequest
// Descripcion:
//            Crea un objeto xmlhttprequest dependiendo del navegador busca el objeto (comprueba perezosamente)
function createXHR() 
{
	var request = false;
	try 
	{
		request = new ActiveXObject('Msxml2.XMLHTTP');
	}
	catch (err2) 
	{
		try 
		{
			request = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (err3)
		{
			try 
			{
				request = new XMLHttpRequest();
			}
			catch (err1) 
			{
				request = false;
			}
		}
	}
 return request;
 }


// Funcion: cargaValores
// Entradas: 
//             padre: id web del combo padre
//			   adlpadre: id adonline del padre
//             nombre: id adonline del combo
//             id: id web del combo
// Salidas: 
//             no tiene
// Descripcion:
//            Esta funcion realiza la peticion ajax para que se cargue un combo.
//            En caso de que tenga padre, manda lo sdatos necesarios para qu ese filtre por el valor que tiene actualmente
    var gs_ruta_relativa = "./";
    function cargaValores(padre, adlpadre,nombre, id, fichero) 
    {        		
    
    
    var req;
  
    if (window.XMLHttpRequest) 
    {
      
        req = new XMLHttpRequest();
        
    } 
    else if (window.ActiveXObject) 
    {
       
        req =new ActiveXObject("Microsoft.XMLHTTP");
      
    }
    if (req) 
    {

    var filtro;
    if ((padre != "") && (document.getElementById(prefijo + padre) != null))
       filtro = document.getElementById(prefijo + padre).value;
    else
       filtro = "";
      
     req.onreadystatechange = function () {rellena(req);};
   
   	var data = new Date ;
	var tr1 = "";
	var tsSimples = ""; 
	tsSimples = tr1.concat(  data.getFullYear()  , "_" , data.getMonth()  , "_" , data.getDay() , "_" , data.getHours() , "_" , data.getMinutes() , "_" , data.getSeconds() ); 
		
   
   
     req.open("GET", encodeURI(gs_ruta_relativa + "AjaxAspx/Valorparcla.aspx?nombrePadre=" + adlpadre + "&filtro=" + filtro +"&nombre=" + nombre +"&idweb=" + prefijo + id + "&fichero=" + fichero + "&ts=" + tsSimples ), true);
     req.send(null);
     num++;
    }
}

// Funcion: cargarCombo
// Entradas: 
//             xmldoc: xml con datos a cargar
// Salidas: 
//             no tiene
// Descripcion:
//            Carga un menu desplegable con los datos del xml de entrada.

function cargarCombo(xmlDoc)
{

	var nombre = xmlDoc.getElementsByTagName("combo");	
	var combo;
	var nombrecombo;
	if (nombre[0].text)
	  nombrecombo = nombre[0].text;  
	  else nombrecombo = nombre[0].textContent; 	   	
	
	combo = document.getElementById(nombrecombo); 
	 
	//var celda = document.getElementById(prefijo + "parcla"+ nombrecombo);  
	//nombre =   xmlDoc.getElementsByTagName("ancho");
   
    //celda.width= 500;
	
	var items = xmlDoc.getElementsByTagName("elemento");	
	var opcion;
	
	while (combo.childNodes.length > 0)
	{
	combo.removeChild(combo.childNodes[0]);
	}

	for (var i=0;i<items.length;i++)
	{	   
		combo.options[combo.length] = new Option(items[i].attributes[0].nodeValue,items[i].attributes[1].nodeValue + "|" + items[i].attributes[0].nodeValue);				
		if (items[i].attributes.length == 3)
			combo.selectedIndex = i;
	}
	if (combo.onchange) combo.onchange(); // si no tiene combos hijos, intentamos generar un texto.

}
//-----------------------------------------------------------------
// Funcion para controlar campos obligatorios

// Funcion: comprobarParcla
// Entradas: 
//             cadena: cadena con los campos obligatorios y sus grupos
// Salidas: 
//             true si cumple todos los campos, false si no lo hace o hay error. 
// Descripcion:
//            Comprueba si los campos pasados por parámetro están llenos. Si no lo estan, muestra un alert
function comprobarParcla(cadena)
{
var tabla;
tabla = cadena.split("|");
//Verificamos que hayan campos obligatorios.
	if ( cadena != "" )
	{
		for (var i= 0; i < tabla.length; i++)
		{
			par = tabla[i].split(":");
			if (par.length < 2) 
				{ 
					alert("XML error!" )
					return  false;
				}
							
			if (document.getElementById(prefijo + par[0]))
			{
			if (document.getElementById(prefijo + par[0]).name == document.getElementById(prefijo + par[0]).id)
			{
			//condiciones en los obligatorios
			if (par[1].split("%").length > 1)
			{
			    comp = par[1].split("%");
			    valorCond = ""
			    if (document.getElementById(prefijo + comp[1])) valorCond = document.getElementById(prefijo + comp[1]).value;
			    if (valorCond.split("|").length > 1) 
			        valorCond = valorCond.split("|")[1];
			    
	            var cExp = "valorCond";
	
	            //Parseamos el tipo de operador condición.
	            switch( comp[2] )
	            {
		            case "IGUAL": cExp += " == "; break;
		            case "DISTINTO": cExp += " != "; break;
	            }
			    cExp += "comp[3]"   
	    
	             
			    
			    
			    if ((document.getElementById(prefijo + comp[1])) && (eval( cExp )) 
			    && (document.getElementById(prefijo + "fila" + par[0]).style.display != "none") 
			    && ((document.getElementById(prefijo + par[0]).value.split("|")[0] == "")|| (document.getElementById(prefijo + par[0]).value.split("|")[0] == "-1"))) 
				{
					alert("O campo " + document.getElementById(prefijo+"celda"+par[0]).innerHTML.replace("*","") + "é obrigatório");
					return false;		   
				}
			}
			//obligatorios normales
			else if ((par[1] == "SI") && (document.getElementById(prefijo + "fila" + par[0]).style.display != "none") && ((document.getElementById(prefijo + par[0]).value.split("|")[0] == "")|| (document.getElementById(prefijo + par[0]).value.split("|")[0] == "-1"))) 
				{
					alert("O campo " + document.getElementById(prefijo+"celda"+par[0]).innerHTML.replace("*","") + "é obrigatório");
					return false;		   
				}
			//grupos obligatorios
			else if (!grupos(tabla, par[1]))
				{
					alert("O campo " + document.getElementById(prefijo+"celda"+par[0]).innerHTML.replace("**","") + "pertence a um grupo obrigatório");
					return false;		   
				}	
			}
			}	
		}
	}
	else 
		return true;

return true;
}

// Funcion: grupos
// Entradas: 
//             tabla: tabla con pares nombre de parcla / grupo al que pertenece
//             valor: grupo buscado
// Salidas: 
//             true si algun elemento de la tabla con el valor introducido tiene valor en la web.
//             False en caso contrario.
// Descripcion:
//            Comprueba si algun parcla de la lista de obligatorios perteneciente a un grupo dado tiene valor.
function grupos(tabla, valor)
{
 for (i=0; i < tabla.length; i++)
 {
	if (document.getElementById(prefijo + tabla[i].split(":")[0]))
	{
	if ((tabla[i].split(":")[1] == valor) && (document.getElementById(prefijo + "fila" + tabla[i].split(":")[0]).style.display != "none")  && (document.getElementById(prefijo + tabla[i].split(":")[0]).value != ""))
	return true;
	}
 }
return false;
}


//--------------------------------
// para las condiciones entre parclas

function condicion(objeto, cadena)
/*
PARAMETROS: cadena: string de la forma: "valor::condicion::parcla::parcla2"
					posibles valores de condicion: "IGUAL", "DISTINTO".
*/
{

	var partes = cadena.split("::");
  
    //como objeto existe ya que es el que genera el evento, no hace falta comprobar
	var cCondicion = "";
	var cExp = "";
	
	//Parseamos el tipo de operador condición.
	switch( partes[1] )
	{
		case "IGUAL": cCondicion = "=="; break;
		case "DISTINTO": cCondicion = "!="; break;
	}
	
	var comparaciones = partes[0].split(",")
	
	for (var i=0; i < comparaciones.length; i++)
	    {
	      cExp += 'document.getElementById(prefijo + objeto).value.split("|")[1]' + cCondicion + "'"+ comparaciones[i] + "'";
	      if (i < comparaciones.length-1) 
	      {
	        if (cCondicion == "==")
	            cExp += " || "
	        else
	            cExp += " && "
	      }
	    }
	if ( eval( cExp ) )
		{
			if ( document.getElementById(prefijo + partes[2]) )  
			{								    
				document.getElementById(prefijo + "fila" + partes[2]).style.display = "none";
				document.getElementById(prefijo + partes[2]).name = document.getElementById(prefijo + partes[2]).name + "off"
				if (document.getElementById(prefijo + "filapre" + partes[2]))
				 document.getElementById(prefijo + "filapre" + partes[2]).style.display = "none";
				
			}
			if ((partes.length > 3) && ( document.getElementById(prefijo + partes[3]) ) )
			{
				document.getElementById(prefijo + "fila" + partes[3]).style.display = "";
				document.getElementById(prefijo + partes[3]).name = prefijo.replace(RegExp("_$"),":") + partes[3];
				if (document.getElementById(prefijo + "filapre" + partes[3]))
				 document.getElementById(prefijo + "filapre" + partes[3]).style.display = "";

			}
			
		}	   
		else
		{		   
		    document.getElementById(prefijo + partes[2]).name = prefijo.replace(RegExp("_$"),":") + partes[2];
			document.getElementById(prefijo + "fila" + partes[2]).style.display = "";
			if (document.getElementById(prefijo + "filapre" + partes[2]))
				 document.getElementById(prefijo + "filapre" + partes[2]).style.display = "";
			if ((partes.length > 3) && ( document.getElementById(prefijo + partes[3]) ) )
			{
							
			document.getElementById(prefijo + "fila" + partes[3]).style.display = "none";
			if (document.getElementById(prefijo + "filapre" + partes[3]))
				 document.getElementById(prefijo + "filapre" + partes[3]).style.display = "none";
			document.getElementById(prefijo + partes[3]).name = document.getElementById(prefijo + partes[3]).name + "off";

			}
		}

}

function comprobarNumerico(nombrecampo)
{
var campo = document.getElementById(prefijo+nombrecampo)
  while (isNaN(campo.value) || campo.value.indexOf(".") != -1 || campo.value.indexOf(" ") != -1)
  //if (isNaN(campo.value.replace(".","")))
  { 
    campo.value = campo.value.slice(0, campo.value.length - 1 )
  }
  
}
//esta función se hace para conectar el campo hidden ANO con el 
//desplegable donde se elegirán sus valores
function rellenarAno()
{
	//lo que ocurre en este caso es que al elegir un año en el
	//desplegable, por detrás se está introduciendo el valor elegido en un input con display:none
	//de ese input es donde luego en fechas.aspx se cogerá el  valor del parcla, pues es un tipo 1
	//y es lo que estará el susodicho algoritmo de construcción de texto
	var oSel = document.getElementById ("listYear");
	var yearSelected = "";
	for (i=0;i<oSel.options.length;i++)
	{
		if (oSel.options[i].selected == true)
		{
			yearSelected = oSel.options[i].value;
		}
	}
	document.getElementById ("ano").value = yearSelected;
}


var ValRadio = false;

function comprobarRadioPaso1(idRadio)
{
//alert(document.getElementById(idRadio).checked);
if (document.getElementById(prefijo + idRadio).checked ) ValRadio = true;
else ValRadio = false;

}

function comprobarRadioPaso2(idRadio)
{
if (ValRadio)
{
document.getElementById(prefijo + idRadio).checked = false;
ValRadio = false;
}
}
