//********************************************************************************************************************
//CREA UN OBJETO AJAX
function nuevoAjax(){
	var xmlhttp=false;
	try{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			xmlhttp = false;
		}
	}

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	
	return xmlhttp;
}

//********************************************************************************************************************
	//id_elem_mod : es el id del elemento dentro del cual voy a mostrar los datos que arroje arch_busqueda
	//id_elem_espera: es el id del elemento dentro del cual se va a mostrar un gif q indique q los datos se estan buscando
	//ruta_gif : es la ruta en donde se encuentra el gif a mostrase cuando se estén buscando los datos
	//arch_busqueda : archivo que recibe los parametros pasados en str_param. Devuelve código html.
	//str_param : es una string con los parametros y valores que se le va a pasar por POST al arch_busqueda
	function ejecutarAjax(id_elem_mod, id_elem_espera, ruta_gif, arch_busqueda, str_param){
		//obtengo el elemento dentro del cual voy a mostrar los datos
		elemento = document.getElementById(id_elem_mod);
		ele_espera = document.getElementById(id_elem_espera);
		
		ajax=nuevoAjax();
		ajax.open("POST", arch_busqueda,true);
		elemento.innerHTML = "<img src='../imgs/loaders/ajax-loader2.gif'>"; 		
		ajax.onreadystatechange=function() {
			if (ajax.readyState==1) {
				if(ele_espera)
					ele_espera.innerHTML = '<img src="'+ruta_gif+'">'
			}
			if (ajax.readyState==4) {
				elemento.innerHTML = ajax.responseText
			}
		}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(str_param);

	}
	
	
//********************************************************************************************************************************
function dar_elem_x_id (root, outputRoot, id_elem) {
	var obj;
	switch (root.nodeType) {
	    case 1: // Node.ELEMENT_NODE
	    case 11: // Node.DOCUMENT_FRAGMENT_NODE
				var i;
				var root_nom = root.tagName.toLowerCase();
				if (outputRoot){
					if (root.id == id_elem)
						return root;
				
					for (i = root.firstChild; i; i = i.nextSibling) {
							obj = dar_elem_x_id(i, true, id_elem);
							//termina el proceso de la función en caso de que ya se haya encontrado un elemento con datos erroneos
							if(obj)
								return obj;
					}
				}
				return obj;
				break;
	    
		case 3: // Node.TEXT_NODE
		break;
	    
		case 8: // Node.COMMENT_NODE
		break;		// skip comments
	}
}

//**************************************************************************************************************************************
//cada vez ke ejecutan la tecla enter
//llama la funcion de login()
	function iSubmitEnter(oEvento, oFormulario){
		 var iAscii;
	
		 if (oEvento.keyCode)
			 iAscii = oEvento.keyCode;
		 else if (oEvento.which)
			 iAscii = oEvento.which;
		 else
			 return false;
	
		 if (iAscii == 13) login();
	
		 return true;
	} 
	
	
//función q permite ingresar solo números y los carac recibidos en arr_val_extras
//evt : variable evento
//val_extras : cadena con los con los códigos ascii de las teclas extras q quiero q tb sean aceptadas en el textbox. Cada valor esta separado por ':'
var nav4 = window.Event ? true : false;
function acceptNum(evt,val_extras){
	//construyo la sentencia a partir de la cadena val_extras
	var i, sent="";
	if(val_extras) {
		var arr_val_extras = val_extras.split(':');
		for(i=0; i<arr_val_extras.length; i++) {
			sent+=" || key=="+arr_val_extras[i];
		}
	}
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57	
	var key = nav4 ? evt.which : evt.keyCode;	
	return (eval("key <= 13 || (key >= 48 && key <= 57)" + sent +";" ));
}

//función q permite ingresar solo números y los carac recibidos en arr_val_extras
//evt : variable evento
//val_extras : cadena con los con los códigos ascii de las teclas extras q quiero q tb sean aceptadas en el textbox. Cada valor esta separado por ':'
//var nav4 = window.Event ? true : false;
function acceptChars_hex(evt){
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57	
	var key = nav4 ? evt.which : evt.keyCode;	
	return (eval("key <= 13 || (key >= 48 && key <= 57) || (key >= 65 && key <= 70) || (key >= 97 && key <= 102);"));
}

//funcion xa redondear decimales a la cant de dec q queramos
//num es una cadena con el número y dec, dec es un entero q indica a ctos decimales hay q redondear
function number_format(num, dec) {
		num = ""+num+"";
		var num_dec = parseInt(num.length - num.lastIndexOf('.') - 1);
		var cadena = new String();
		var numero = new Number(0);

		if (num.lastIndexOf(".") == -1) {
		return parseFloat(num);
		}
		var postindex = num.lastIndexOf('.')+dec+1;

		if (dec >= num_dec) {
		return parseFloat(num);
		}

		if (num[postindex] < 5) {
		numero = parseFloat(num.substring(0,num.lastIndexOf('.')+dec+1));
		} else {
		var i = postindex;
		while ((i+1) < num.length && num[i] == 5) {
		i++;
		}
		numero = parseFloat(num);
		var potencia = num.substring(num.lastIndexOf('.'),i).length;
		var divisor = divisor = Math.pow(10,potencia);
		var incr = new Number(0);

		for (var j = i; j >= postindex; j--, divisor /= 10) {
		if (num[j] >= 5) {
		incr = (10 - num[j]) / divisor;
		numero += incr;
		num = ""+numero+"";
		} else {
		continue;
		}
		}
		numero = ""+numero+"";
		numero = numero.substr(0,num.lastIndexOf('.')+dec+1);
		}
		return numero;
} 


//*****************************************************************************************************************
//función q indica si es válida una fecha ingresada en un textbox dado
//id_txt_fecha : id del textbox q contiene la fecha
//separador : caracter del separador de fecha. Generalmente es '/' o '-'
function validar_fecha(id_txt_fecha,separador)
{ 
 /**
    * definimos las varables globales que van a contener la fecha completa, cada una de sus partes
    * y los dias correspondientes al mes de febrero segun sea el año bisiesto o no
    */
    var a, mes, dia, anyo, febrero;
    
	/**********************************************************************
	    * funcion para comprobar si una año es bisiesto
	    * argumento anyo > año extraido de la fecha introducida por el usuario
	*/
    function anyoBisiesto(anyo) {
        /**
		        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
		*/
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;
        /*
		        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
		        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
		 */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0) {
                /**
			                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
			           */
                if (fin % 400 == 0) {
                    return true;
                }
                /**
			                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
			           */
                else {
                    return false;
                }
            }
            /**
		            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
		            */
            else {
                return true;
            }
        }
    }
    
	/****************************************************************************
	    * funcion principal de validacion de la fecha
	    * argumento fecha > cadena de texto de la fecha introducida por el usuario
	 */
    function validar(id_txt_fecha,separador) {
       /**
	       * obtenemos la fecha introducida y la separamos en dia, mes y año
	       */
       a=document.getElementById(id_txt_fecha).value;
       dia=a.split(separador)[0];
       mes=a.split(separador)[1];
       anyo=a.split(separador)[2];
	   if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) ) {
			//alert("LA fecha introducida debe estar formada sólo por números");
			//return;
			return false;
       }
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
	       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
	       */
       if ((mes<1) || (mes>12)) {
           /*alert("El mes introducido no es valido. Por favor, introduzca un mes correcto");
		           document.forms[0].fecha.focus();
		           document.forms[0].fecha.select();
		           return;*/
			return false;
       }
		/**
		* si el mes introducido es febrero y el dia es mayor que el correspondiente 
		* al año introducido > alertamos y detenemos ejecucion
		*/
       if ((mes==2) && ((dia<1) || (dia>febrero))) {
           /*alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
		           document.forms[0].fecha.focus();
		           document.forms[0].fecha.select();
		           return;*/
			return false;
       }
       /**
		* si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
		*/
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))) {
           /*alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
		           document.forms[0].fecha.focus();
		           document.forms[0].fecha.select();
		           return;*/
			return false;
       }
       /**
		* si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
		*/
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))) {
           /*alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
			   document.forms[0].fecha.focus();
			   document.forms[0].fecha.select();
			   return;*/
			return false;
       }
       /**
	       * si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
	       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
	       */
       if (anyo<1900) {
           /*alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2010");
		           document.forms[0].fecha.focus();
		           document.forms[0].fecha.select();*/
			return false;
       } 
       /**
	       * en caso de que todo sea correcto > enviamos los datos del formulario
	       * para ello debeis descomentar la ultima sentencia
				** EN MI CASO RETORNO TRUE
	       */
       else
          //alert("La fecha introducida es correcta. Gracias por su colaboración");
          //document.forms[0].submit(); 
			return true;
    } //FIN FUNCIÓN validar
	
	return validar(id_txt_fecha,separador);	
} // FIN FUNCION validar_fecha


//función que compara dos fechas. Debe recibir las fechas como cadena en el formato 'dd-mm-yyyy' o 'dd/mm/yyyy'
//operador : puede ser '=', '<', '>', '<=', '>=', '!='
//str_Fec1 y strFec2 son las fechas que quiero comparar
//separador : generalmente es '/' o '-'
function cmpFec(str_fec1,operador,str_fec2,separador) {
	if(!separador)
		separador='/'; //por defecto
	var arr_str_fec1 = arr_str_fec2 = new Array();
	arr_str_fec1 = str_fec1.split(separador);
	arr_str_fec2 = str_fec2.split(separador);
	//creo strings con el sigte formato añomesdia. Ej: 20070620
	var aux_str_fec1 = arr_str_fec1[2]+arr_str_fec1[1]+arr_str_fec1[0];
	var aux_str_fec2 = arr_str_fec2[2]+arr_str_fec2[1]+arr_str_fec2[0];
	//ahora paso a compararlas según el operador pasado.
	return eval(aux_str_fec1+operador+aux_str_fec2);
}

//funcion que retorna la fecha actual en el siguiente formato 'dd-mm-yyyy' o 'dd/mm/yyyy'
//separador : generalmente es '-' o '/'. Si viene vacío se toma por defecto '/'
function dar_strFecHoy(separador){
	if(!separador)
		separador = '/';
	var miFecha = new Date();
	var anio = miFecha.getYear();
	if (anio < 1000)
		anio+=1900;
	var mes = miFecha.getMonth();
	mes++; //le pongo ++ xq xa getMonth() enero es 0
	var dia_mes = miFecha.getDate();
	if (dia_mes < 10)
		dia_mes="0"+dia_mes;
	if (mes < 10)
		mes="0"+mes;

	return (dia_mes + separador + mes + separador + anio);
}

//Dados nombres de textbox , controla q no estén vacíos
//En caso de encontrar alguno vacío retorna el objeto textbox correspondiente, sino retorna true
function no_vacios() {
	var i,aux_obj,aux_txt;
	for(i=0; i<no_vacios.arguments.length; i++) {
		aux_txt = no_vacios.arguments[i];
		aux_obj = document.getElementById(aux_txt);
		if(aux_obj.value=='')
			return (aux_obj);
	}
	return true;
}

