/**
 * Controlador de respuesta AJAX para actualizar un elemento tipo Fecha.
 * Para cada elemento recibido habra que obtener sus campos correspondientes
 * al dia, mes y anio. Ademas, el elemento podra pertenecer o no a una lista
 * Podran darse los siguientes casos:
 * 1. Existe el elemento cuyo nombre hemos recibido --> La fecha va a ser pintada en un solo campo
 *    Este caso es similar a pintar un campo de texto (ControladorGenerico)
 * 2. No existe el elemento cuyo nombre hemos recibido --> La fecha se pintara en 3 campos (dia,mes y anio)
 *    Averiguamos si el elemento pertenece a una lista (Numero de niveles = 3 => nombreBG.nombreLista.nombreCampo)
 *    Si el elemento pertenece a una lista:
 *       Recibiremos un nombre de este tipo: aseguradorBG.ltAsegurados.feNacimiento_2
 *			A partir de este nombre formaremos los siguientes:
 *				aseguradorBG.ltAsegurados.feNacimiento_Dia_2
 *				aseguradorBG.ltAsegurados.feNacimiento_Mes_2
 *				aseguradorBG.ltAsegurados.feNacimiento_Anio_2
 *
 *    Si el NO elemento pertenece a una lista:
 *       Recibiremos un nombre de este tipo: aseguradorBG.feNacimiento
 *			A partir de este nombre formaremos los siguientes:
 *				aseguradorBG.feNacimiento_Dia
 *				aseguradorBG.feNacimiento_Mes
 *				aseguradorBG.feNacimiento_Anio
 *
 *	 A su vez, hemos recibido el valor de la fecha, en el formato AAAA-MM-DD HH:mm:SS.F
 *		De aqui obtendremos el valor del dia (DD), del mes (MM) y del anio (YYYY)
 *	 Una vez obtenidos los nombres y valores correspondientes al dia, mes y anio, s?lo queda asignarlos (eval)
 *
 */
function ControladorFecha()
{
	/**
	 * Metodo que procesa la lista de pares atributo-valor de la estructura JSON y establece sobre elemento correspondiente
	 * el valor en el atributo indicado
	 */
	this.ejecutar = function (datosElemento)
	{
		var elemento = document.getElementById(datosElemento.id);
		var cadenaEvaluacion;
		this.vaFechaNula = '';
		
		if (elemento != null)
		{
			// Si existe el elemento es porque se va a poner la fecha en un solo campo
			for (i = 0; i < datosElemento.atributos.length; i++)
			{	
				var vaDia, vaMes, vaAno, vaFecha;
				
				if (datosElemento.atributos[i].valor != this.vaFechaNula)
				{
					// Obtenemos los valores correspondientes al dia, mes y anio. La
					// fecha viene en el siguiente formato: AAAA-MM-DD HH:mm:SS.F
					vaAno = datosElemento.atributos[i].valor.substring(0,4);
					vaMes = datosElemento.atributos[i].valor.substring(5,7);
					vaDia = datosElemento.atributos[i].valor.substring(8,10);
				
					vaFecha = vaDia + '/' + vaMes + '/' + vaAno;
				}
				else
				{
					// Si la fecha es nula ponemos blancos en lugar de FMINIMA (01/01/0001 00:00:00)
					vaFecha = '';
				}
			
				cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaFecha + '\'';
				eval(cadenaEvaluacion);
			}
		}
		else
		{
			// Si no existe el elemento es porque se va a poner la fecha en campos separados
			var deNombre, idDia, idMes, idAno, idHora, idMinuto, idSegundo,
				vaDia, vaMes, vaAno, vaHora, vaMinuto, vaSegundo;
			
			deNombre = datosElemento.id;
			
			for (i = 0; i < datosElemento.atributos.length; i++)
			{
				
				if (datosElemento.atributos[i].valor != this.vaFechaNula)
				{
					// Obtenemos los valores correspondientes al dia, mes y anio. La
					// fecha viene en el siguiente formato: AAAA-MM-DD HH:mm:SS.F
					vaAno = datosElemento.atributos[i].valor.substring(0,4);
					vaMes = datosElemento.atributos[i].valor.substring(5,7);
					vaDia = datosElemento.atributos[i].valor.substring(8,10);
					vaHora = datosElemento.atributos[i].valor.substring(11,13);
					vaMinuto = datosElemento.atributos[i].valor.substring(14,16);
					vaSegundo = datosElemento.atributos[i].valor.substring(17,19);
				}
				else
				{
					// Si la fecha es nula ponemos blancos en lugar de FMINIMA (01/01/0001 00:00:00)
					vaAno = '';
					vaMes = '';
					vaDia = '';
					vaHora = '';
					vaMinuto = '';
					vaSegundo = '';
				}
				
				// Calculamos el numero de niveles del elemento.
				// nombreBG.ltLista.NombreCampo --> 3 Niveles (LISTA).
				// nombreBG.NombreCampo --> 2 Niveles (CAMPO SIMPLE).
				var caNiveles = deNombre.split(".");

				// El nombre de los elementos dia, mes y anio dependera de si estamos o no en una lista
				// pues la lista tiene un numero de iteracion.
				if (caNiveles.length == 3)
				{
					// Estamos en un lista
					var deNombreElementoBase = "";
					
					// Nombre elemento Base --> nombreBG.ltLista (todo el nombre menos el nombre del campo).
					for (k = 0; k < caNiveles.length - 1; k++)
					{
						if (deNombreElementoBase == "")
							deNombreElementoBase = deNombreElementoBase + caNiveles[k];
						else
							deNombreElementoBase = deNombreElementoBase + '.' + caNiveles[k];
					}
					
					// Separamos las partes del nombre del elemento para quitar el numero de iteracion.
					var PartesNombre = caNiveles[caNiveles.length - 1].split("_");
					var deNombreBase = "";
					for (j = 0; j < PartesNombre.length-1; j++)
					{
						if (deNombreBase == "")
							deNombreBase = deNombreBase + PartesNombre[j];
						else
							deNombreBase = deNombreBase + '_' + PartesNombre[j];
					}
					
					// Nombre de los campos dia, mes y anio dentro de la lista (nombreBG.ltLista.feNacimiento_Anio_2).
					idDia = deNombreElementoBase + '.' + deNombreBase + '_Dia_' + PartesNombre [PartesNombre.length -1];
					idMes = deNombreElementoBase + '.' + deNombreBase + '_Mes_' + PartesNombre [PartesNombre.length -1];
					idAno = deNombreElementoBase + '.' + deNombreBase + '_Anio_' + PartesNombre [PartesNombre.length -1];
					idHora = deNombreElementoBase + '.' + deNombreBase + '_Hora_' + PartesNombre [PartesNombre.length -1];
					idMinuto = deNombreElementoBase + '.' + deNombreBase + '_Min_' + PartesNombre [PartesNombre.length -1];
					idSegundo = deNombreElementoBase + '.' + deNombreBase + '_Seg_' + PartesNombre [PartesNombre.length -1];
				}
				else
				{
					// Si no estamos en una lista, el elemento sera de la forma: nombreBG.NombreCampo
					// Ej: aseguradosBG.feNacimiento. De aqui sacaremos: aseguradosBG.feNacimiento_Dia,
					// aseguradosBG.feNacimiento_Mes y aseguradosBG.feNacimiento_Anio.
					idDia = deNombre + '_Dia';
					idMes = deNombre + '_Mes';
					idAno = deNombre + '_Anio';
					idHora = deNombre + '_Hora';
					idMinuto = deNombre + '_Min';
					idSegundo = deNombre + '_Seg';
				}
				
				// Obtenemos el elemento correspondiente al Dia y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idDia);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaDia + '\'';
					eval(cadenaEvaluacion);
				}
				
				// Obtenemos el elemento correspondiente al Mes y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idMes);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaMes + '\'';
					eval(cadenaEvaluacion);
				}
				
				// Obtenemos el elemento correspondiente al Anio y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idAno);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaAno + '\'';
					eval(cadenaEvaluacion);
				}
				
				// Obtenemos el elemento correspondiente a la hora y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idHora);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaHora + '\'';
					eval(cadenaEvaluacion);
				}
				
				// Obtenemos el elemento correspondiente a los minutos y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idMinuto);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaMinuto + '\'';
					eval(cadenaEvaluacion);
				}
				
				// Obtenemos el elemento correspondiente a los segundos y si existe, le asignamos el valor obtenido.
				elemento = document.getElementById(idSegundo);
				if (elemento != null)
				{
					cadenaEvaluacion = 'elemento.' + datosElemento.atributos[i].nombre + ' = \'' + vaSegundo + '\'';
					eval(cadenaEvaluacion);
				}
				
			}
		}
	}
}

//Se declara la herencia
ControladorFecha.prototype = new ControladorGenerico();
