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

/*Variable que almacena el identificador del n?mero de identificaci?n tributaria (NIT)
 * en la base de datos, y el de los tipos de personas
 */

var nit=3;

var persona_natural=3;
var persona_juridica=4;

//Variables y arreglos para el manejo de selects dependientes
// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var tabla=new Array();
var arreglo=new Array(new Array(),new Array(),new Array);
tabla[0]="pqr_region";
tabla[1]="pqr_asunto";
tabla[2]="pqr_dependencia";

arreglo[0][0]="ubicacion_n1";
arreglo[0][1]="ubicacion_n2";
arreglo[0][2]="ubicacion_n3";
arreglo[0][3]="ubicacion_n4";
arreglo[0][4]="ubicacion_n5";

arreglo[1][0]="asunto_n1";
arreglo[1][1]="asunto_n2";
arreglo[1][2]="asunto_n3";
arreglo[1][3]="asunto_n4";
arreglo[1][4]="asunto_n5";

arreglo[2][0]="dependencia_n1";
arreglo[2][1]="dependencia_n2";
arreglo[2][2]="dependencia_n3";
arreglo[2][3]="dependencia_n4";
arreglo[2][4]="dependencia_n5";
arreglo[2][5]="dependencia_n6";

function buscarEnArray(array,dato)
{
	// Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
	var x=0;
	while(array[x])
	{
		if(array[x]==dato) return x;
		x++;
	}
	return null;
}

function cargaContenido(idSelectOrigen,tablaSeleccionada)
{

	// Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
	var posicionTabla=buscarEnArray(tabla,tablaSeleccionada);
	var posicionSelectDestino=buscarEnArray(arreglo[posicionTabla], idSelectOrigen)+1;

	// Obtengo el select que el usuario modifico
	var selectOrigen=document.getElementById(idSelectOrigen);

	// Obtengo la opcion que el usuario selecciono
	var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
	var divoption = opcionSeleccionada;

	//Llama la funci?n que carga los datos adicionales
	cargaDatosAdministracion(opcionSeleccionada,tablaSeleccionada,idSelectOrigen);

	// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
	var x=posicionSelectDestino, selectActual=null;

	// Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
	while(arreglo[posicionTabla][x])
	{

		if(selectActual=document.getElementById(arreglo[posicionTabla][x])){
			selectActual.length=0;

			var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona...";
			selectActual.appendChild(nuevaOpcion);	selectActual.disabled=true;
		}
		x++;
	}

	// Compruebo que el select modificado no sea el ultimo de la cadena
	if(idSelectOrigen!=arreglo[posicionTabla][arreglo[posicionTabla].length-1] && opcionSeleccionada!=0)
		{
			// Obtengo el elemento del select que debo cargar
			var idSelectDestino=arreglo[posicionTabla][posicionSelectDestino];
			var selectDestino=document.getElementById(idSelectDestino);

			// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
			var ajax=nuevoAjax();
			ajax.open("GET", "tools/pqr_select_dependientes_proceso.php?select="+idSelectDestino+"&opcion="+opcionSeleccionada+"&tabla="+tablaSeleccionada, true);
			ajax.onreadystatechange=function()
			{
				if (ajax.readyState==1)
				{
					// 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;
				}
			}
			ajax.send(null);
		}
/*
		if(tablaSeleccionada == 'pqr_asunto')
		{
			//var ajax=nuevoAjax();
			var div = document.getElementById('asunto_descripcion');


			ajax.open("GET", "tools/pqr_obtenerDescripcion.php?asunto_id="+divoption, true);

			ajax.onreadystatechange=function()
			{
				if (ajax.readyState==1)
				{

				}
				if (ajax.readyState==4)
				{

					div.innerHTML=ajax.responseText;

				}
			}
			ajax.send(null);
		}*/
}

/* CONTROL DE LOS CAMPOS DINAMICOS PARA SUBIR DOCUMENTOS ADJUNTOS */
//Configuraci?n para el manejo de los campos para subir archivos din?micos
//Esta es una variable de control para mantener nombres diferentes de cada campo creado dinamicamente.
var numero = 0;

//esta funcion nos devuelve el tipo de evento disparado
evento = function (evt) {
	return (!evt) ? event : evt;
}

//Funci?n que crea dinamicamente los nuevos campos file
addCampoGestion = function () {
	//Creaci?n de div que contendr? el nuevo campo
   	nDiv = document.createElement('div');
	nComent = document.createElement('div');
	br = document.createElement('br');
	//Se establece la clase del div
   nDiv.className = 'archivo';

	//Se asigna un id al div, usando la variable numero se le asigna un id ?nico
   	nDiv.id = 'file' + (++numero);
	nComent.name = nDiv.id;
	//Se crea el input
   	nCampo = document.createElement('input');
	nComentcampo = document.createElement('textarea');
	//nSelectArchivo = document.createElement('select');
	/*Se le asigna un nombre al campo creado, este campo se nombra como vector porque todos los campos
	comparten el nombre en un arreglo, para facilitar el procesamiento con PHP*/
   	nCampo.name = 'archivos[]';
	nComentcampo.name='comentario[]';
	//nSelectArchivo.name='clasificacion_n1';
	//Se establece que el campo es tipo file
  	nCampo.type = 'file';
	nComentcampo.rows='5';
	nComentcampo.cols='60';
	//Creacion de un boton para elminar un campo que ya no se desee.
   a = document.createElement('input');

	//El boton debe tener el mismo nombre del div padre, para localizarla.
   a.name = nDiv.id;

   	//Se define que el input es de tipo button
   a.type = 'button';

	//Se define el texto que debe ir en el boton
   a.value = 'Eliminar';

   //Se define el estilo para el boton
   a.className = 'boton_small_pqr';

   var ajax=nuevoAjax();
	/*nSelectArchivo=*/
	ajax.open("GET", "tools/pqr_creaSelect.php", true);


	//Establecemos que ejecute esta funcion en el evento onclick
   a.onclick = elimCamp;


   	//Se asigna el texto al v?nculo
   	//a.innerHTML = 'Eliminar';
	/*nSelectArchivo.appendChild(op1);
	nSelectArchivo.appendChild(op2);*/
	/* Se adiciona el campo file nuevo al div creado */

	//nDiv.appendChild(nSelectArchivo);
	// Se adiciona el v?nculo al div creado
   	oDiv = document.createElement('div');
   	oDiv.name=nDiv.id;
   	ajax.onreadystatechange=function()
	{
		if (ajax.readyState==4)
		{
			nDiv.appendChild(br);
			oDiv.innerHTML=ajax.responseText;
			nDiv.appendChild(oDiv);
			br = document.createElement('br');
			nDiv.appendChild(br);
			nDiv.appendChild(nComentcampo);
			nDiv.appendChild(br);
			nDiv.appendChild(nCampo);
			br = document.createElement('br');
			nDiv.appendChild(br);
			nDiv.appendChild(a);
		}
	}
	ajax.send(null);



	/* Se adiciona la div creada al documento, pero en la div llamada 'adjuntos'*/
   container = document.getElementById('adjuntos');
   container.appendChild(nDiv);

}

//Funcion que crea dinamicamente los nuevos campos file
addCampoUsuario = function ()
{
//DIV PRINCIPAL
	//** Creación de div que contendrá el nuevo campo
   	nDiv = document.createElement('div');
	nComent = document.createElement('div');

	//Se establece la clase del div
    nDiv.className = 'archivo';

	//Se asigna un id al div, usando la variable numero se le asigna un id ?nico
   	nDiv.id = 'file' + (++numero);
	nComent.name = nDiv.id;

//INPUT (TIPO FILE, MUESTRA CAMPO PARA NOMBRE DE ARCHIVO Y BOTON "EXAMINAR")
	//** Se crea el input
   	nCampo = document.createElement('input');

	/* Se le asigna un nombre al campo creado, este campo se nombra como vector porque todos los campos
	comparten el nombre en un arreglo, para facilitar el procesamiento con PHP*/
   	nCampo.name = 'archivos[]';

	//Se establece que el campo es tipo file
  	nCampo.type 		= 'file';

//BOTON ELIMINAR
	//** Creacion de un boton para elminar un campo que ya no se desee.
    btnEliminar = document.createElement('input');

	//El boton debe tener el mismo nombre del div padre, para localizarla.
   	btnEliminar.name = nDiv.id;

   	//Se define que el input es de tipo button
    btnEliminar.type = 'button';

	//Se define el texto que debe ir en el boton
   	btnEliminar.value = 'Eliminar';

    //Se define el estilo para el boton
   	btnEliminar.className = 'boton_small_pqr';

	//Establecemos que ejecute esta funcion en el evento onclick
    btnEliminar.onclick = elimCamp;


//AGREGA TODOS LOS ELEMENTOS AL DIV
	nDiv.appendChild(nCampo);
	nDiv.appendChild(btnEliminar);

	/* Se adiciona la div creada al documento, pero en la div llamada 'adjuntos'*/
   container = document.getElementById('adjuntos');
   container.appendChild(nDiv);

}


//con esta funci?n eliminamos el campo cuyo v?nculo de eliminaci?n sea presionado
elimCamp = function (evt){
   evt = evento(evt);
   nCampo = rObj(evt);
   div = document.getElementById(nCampo.name);
   div.parentNode.removeChild(div);
}
//con esta funci?n recuperamos una instancia del objeto que disparo el evento
rObj = function (evt) {
   return evt.srcElement ?  evt.srcElement : evt.target;
}

/* Funcion para mostrar/ocultar el textbox del digito de verificacion del NIT */
function mostrarDigitoVerificacion(idLista,idDigitoVerificacion){
	/* Obtengo el select que el usuario modifico, el div del digito de verificacion
	 * y el select del tipo de persona
	 */
	var lista=document.getElementById(idLista);
	var divDigitoVerificacion = document.getElementById(idDigitoVerificacion);
	var lista_tipo_persona = document.getElementById('tipo_persona');

	// Obtengo la opcion que el usuario selecciono
	var opcionSeleccionada=lista.options[lista.selectedIndex].value;

	/*Si el valor seleccionado es el correspondiente al NIT se hace visible la
	 * division que contiene el textbox para el digito de verificacion, en caso
	 * contrario lo oculta
	 */

	if(opcionSeleccionada==nit){
		divDigitoVerificacion.style.visibility="visible";
		if(lista_tipo_persona.options[lista_tipo_persona.selectedIndex].value==persona_natural){
			lista_tipo_persona.selectedIndex=persona_juridica;
		}
	}
	else{
		divDigitoVerificacion.style.visibility="hidden";
		if(lista_tipo_persona.options[lista_tipo_persona.selectedIndex].value==persona_juridica){
			lista_tipo_persona.selectedIndex=persona_natural;
		}
	}
}

/* funci?n para enviar el formulario que almacena las acciones */
function enviarAccion(formulario,accion,id)
{

	/* CARACTERES ESPECIALES EN JS
		\u00e1 -> ?
		\u00e9 -> ?
		\u00ed -> ?
		\u00f3 -> ?
		\u00fa -> ?

		\u00c1 -> ?
		\u00c9 -> ?
		\u00cd -> ?
		\u00d3 -> ?
		\u00da -> ?

		\u00f1 -> ?
		\u00d1 -> ?
	*/

	switch (accion)
	{
	case 1:
		if(!confirm('Est\u00e1 Seguro de Eliminar la opci\u00f3n?')) return;
		formulario.accion.value=accion;
		formulario.id.value=id;
		formulario.submit();
		break;
	default:
		formulario.accion.value=accion;
		formulario.id.value=id;
		formulario.submit();
	}
}

/* funci?n para enviar el formulario que consulta una solicitud */
function enviarConsultaSolicitud(formularioId){
	formulario=document.getElementById(formularioId);
	formulario.submit();
}

function obtenerDescripcion(tipo_id)
{
	var ajax=nuevoAjax();
	var div = document.getElementById('tipo_descripcion');

	var divoption = document.getElementById('tipo_solicitud');

	ajax.open("GET", "tools/pqr_obtenerDescripcion.php?tipo_id="+divoption.value, true);

	ajax.onreadystatechange=function()
	{
		if (ajax.readyState==1)
		{

		}
		if (ajax.readyState==4)
		{

			div.innerHTML=ajax.responseText;

		}
	}
	ajax.send(null);
}


function cargaDatosAdministracion(opcionSeleccionada,tablaSeleccionada,idSelectOrigen)
{
	//Crea una variable con el nombre de la tabla
	var destinoId="tabla_datos";

	//Tabla destino de los datos
	var tablaDestino;

	if(tablaDestino=document.getElementById(destinoId)){
		//Cambia el valor del bot?n del formulario
		var formularioSolicitud=document.getElementById('form_solicitud');
		formularioSolicitud.form_accion.value='Crear';
		formularioSolicitud.id.value=0;


		//Cambio Ylee para borrar los campos de edici?n cuando se cambie de opci?n en los select en las opciones de configuraci?n
		if(typeof formularioSolicitud.nombre != "undefined")
		{
			formularioSolicitud.nombre.value='';
		}

		if(typeof formularioSolicitud.descripcion != "undefined")
		{
			formularioSolicitud.descripcion.value='';
		}

		if(typeof formularioSolicitud.filtro_nombre != "undefined")
		{
			formularioSolicitud.filtro_nombre.value='';
		}

		if(typeof formularioSolicitud.es_jefatura != "undefined")
		{
			formularioSolicitud.es_jefatura[1].checked = true;
		}

		if(typeof formularioSolicitud.es_entidad_externa != "undefined")
		{
			formularioSolicitud.es_entidad_externa[1].checked = true;
		}
		//Fin cambio



		//Si la opci?n seleccionada es 0, y el nivel del select seleccionado
		//si es un subnivel la opci?n seleccionada es la opci?n seleccionada
		//en el nivel superior.
		if(opcionSeleccionada==0){
			// Obtengo la posicion que ocupa el select actual en el array declarado mas arriba
			var posicionTabla=buscarEnArray(tabla,tablaSeleccionada);
			var posicionSelectActual=buscarEnArray(arreglo[posicionTabla], idSelectOrigen);

			if(posicionSelectActual>0){
				// Obtengo el select padre
				var selectPadre=document.getElementById(arreglo[posicionTabla][posicionSelectActual-1]);

				// Obtengo la nueva opcion seleccionada
				opcionSeleccionada=selectPadre.options[selectPadre.selectedIndex].value;
			}
		}

		// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
		var ajax=nuevoAjax();
		ajax.open("GET", "tools/pqr_genera_datos_administracion.php?opcion="+opcionSeleccionada+"&tabla="+tablaSeleccionada, true);
		ajax.onreadystatechange=function()
		{
			if (ajax.readyState==1)
			{

			}
			if (ajax.readyState==4)
			{
				tablaDestino.innerHTML=ajax.responseText;
			}
		}
		ajax.send(null);
	}
}

function obtenerPlazo(tipo_id)
{
	var ajax = nuevoAjax();

	// Obtengo el select que el usuario modifico
	var selectOrigen=document.getElementById(tipo_id);

	// Obtengo la opcion que el usuario selecciono
	var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;

	var div = document.getElementById('plazo');
	var caja = document.getElementById('fecha_limite');


	var campo = 'tipo_plazo_total';

	ajax.open("GET", "tools/pqr_obtenerDescripcion.php?tipo_id="+opcionSeleccionada+"&campo="+campo, true);

	ajax.onreadystatechange=function()
	{
		if (ajax.readyState==1)
		{

		}
		if (ajax.readyState==4)
		{

			caja.value =ajax.responseText;

		}
	}
	ajax.send(null);
}
