  //-------------------------------------------------------------------------------------
	// Description : cierra una ventana
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function cerrarVentana(){

		window.close();

  }

  //-------------------------------------------------------------------------------------
	// Description : cierra una ventana padre desde una ventana hijo
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function cerrarVentanaPadre(){

		top.close();

  }

  //-------------------------------------------------------------------------------------
	// Description : redirecciona una pagina a la url indicada en url_destino
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function cambiaURL(url_destino){
  	
  	document.location.href = url_destino;
  	
  }

  //-------------------------------------------------------------------------------------
	// Description : abre una venta tipo popup con posicion centrada
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function abrePopupCentrado(url_pagina, nombre_ventana, ancho_ventana, alto_ventana){
  	var pos_top = 0;
  	var pos_left = 0;
  	
  	pos_top = (screen.height / 2) - (alto_ventana / 2);
  	pos_left = (screen.width / 2) - (ancho_ventana / 2);
  	
  	window.open(url_pagina,nombre_ventana,'top=' + pos_top + ',left=' + pos_left + ',width=' + ancho_ventana + ',height=' + alto_ventana + ',scrollbars=NO,resizable=NO,location=no,menubar=no,status=no')
  	
  }

  //-------------------------------------------------------------------------------------
	// Description : solicita una confirmacion antes de realizar una accion especifica
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function confirmaAccion(confirmacion, url_destino, retorno){
		var_booleana = confirm(confirmacion);
		
		if (retorno == true)
			return var_booleana;
		else{
			if (var_booleana == true)
				cambiaURL(url_destino);
		}

  }

  //-------------------------------------------------------------------------------------
	// Description : selecciona el tipo de navegador web
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
	function identificaBrowser(){
		var navegador = navigator.appName;
		
		if (navegador.toUpperCase().indexOf('MICROSOFT') > -1)
			navegador = "microsoft";
		else{
			if (navegador.toUpperCase().indexOf('NETSCAPE') > -1)
				navegador = "firefox";
		}
		
		return navegador;
	}

  //-------------------------------------------------------------------------------------
	// Description : valida que un valor ingresado sea de tipo numerico
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
	function validaNumerico(valor){
		//Compruebo si es un valor numérico
		if (isNaN(valor)){
		      return true;
		}
		else{
		      return false;
		} 	
	}

  //-------------------------------------------------------------------------------------
	// Description : asigna porcentaje de transparencia a una capa dada
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
	function asigna_difuminado(id_objeto, valor_difuminado){
		if (identificaBrowser() == "microsoft")
				document.getElementById(id_objeto).style.filter = "alpha(opacity=" + valor_difuminado + ")";
		else{
			if (identificaBrowser() == "firefox")
					document.getElementById(id_objeto).style.opacity = (valor_difuminado/100);
		}
		
	}

  //-------------------------------------------------------------------------------------
	// Description : asigna dinamicamente el contenido de una capa a otra capa
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function asignaINNERHTMLcapa(capa_origen, capa_destino){

		document.getElementById(capa_destino).innerHTML = document.getElementById(capa_origen).innerHTML;

  }

  //-------------------------------------------------------------------------------------
	// Description : habilita todos los objetos de una lista de checkboxs especificos
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function habilitaListadoCheckboxs(id_form, name_objs){
		i = 0;
		obj_formulario = document.getElementById(id_form);

		while (i < obj_formulario.elements.length){
			if (obj_formulario.elements[i].type == "checkbox"){
				if (obj_formulario.elements[i].name == name_objs)
					obj_formulario.elements[i].disabled=false;
			}
			i++;
		}

  }

  //-------------------------------------------------------------------------------------
	// Description : deshabilita todos los objetos de una lista de checkboxs especificos
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function deshabilitaListadoCheckboxs(id_form, name_objs){
		i = 0;
		obj_formulario = document.getElementById(id_form);

		while (i < obj_formulario.elements.length){
			if (obj_formulario.elements[i].type == "checkbox"){
				if (obj_formulario.elements[i].name == name_objs){
					obj_formulario.elements[i].checked=false;
					obj_formulario.elements[i].disabled=true;
				}
			}
			i++;
		}

  }

  //-------------------------------------------------------------------------------------
	// Description : valida que a lo menos 1 objeto sea seleccionado en una lista de checkboxs
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function validaListadoCheckboxs(id_form, name_objs){
		i = 0;
		obj_formulario = document.getElementById(id_form);
		seleccionados = false;

		while ((i < obj_formulario.elements.length) && (!seleccionados)){
			if (obj_formulario.elements[i].type == "checkbox"){
				if (obj_formulario.elements[i].name == name_objs){
					if (obj_formulario.elements[i].checked == true)
						seleccionados = true;
				}
			}
			i++;
		}

		return seleccionados;
  }

  //-------------------------------------------------------------------------------------
	// Description : envia el foco a un elemento HTML
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function enviaFoco(id_objeto){
		document.getElementById(id_objeto).focus();
  }

  //-------------------------------------------------------------------------------------
	// Description : valida el dia respecto a un mes, y año bisiesto
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function validaDiaMes(obj_dia, obj_mes, obj_annio){

    dia_valor = trim(obj_dia.value);
    mes_valor = trim(obj_mes.value);
    annio_valor = trim(obj_annio.value);

		if ((mes_valor == 4) || (mes_valor == 6) || (mes_valor == 9) || (mes_valor == 11)){
			//meses: Abril, Junio, Septiembre, Noviembre
			if (dia_valor > 30)
				return ejecutaAlert("El día para el mes de " + rescataTEXTselect(obj_mes) + ", no puede ser superior a 30", obj_dia);
			else
				return true;
		}
		else{
			if (mes_valor == 2){
				//mes: Febrero
				if (dia_valor > 29)
					return ejecutaAlert("El día para el mes de " + rescataTEXTselect(obj_mes) + ", no puede ser superior a 29", obj_dia);
				else{
					//se comprueba si el año seleccionado efectivamente es bisiesto
					if ((dia_valor == 29) && ((annio_valor % 4) != 0))
						return ejecutaAlert("El año seleccionado (" + rescataTEXTselect(obj_annio) + "), no es bisiesto", obj_annio);
					else
						return true;
				}
			}
			else{
				//meses restantes: Enero, Marzo, Mayo, Julio, Agosto, Octubre, Diciembre
				return true
			}
		}

  }

  //-------------------------------------------------------------------------------------
	// Description : agrega opciones en un objeto html tipo select
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
	function AgregaOptCombo(obj_destino,posicion,combo_texto,combo_valor){
		var nueva_opcion = new Option(combo_texto, combo_valor);
		
		eval (obj_destino.options[posicion] = nueva_opcion);
	}
  
  //-------------------------------------------------------------------------------------
	// Description : elimina los espacios al principio y al final de un string dado
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function trim(s) {
  	
    while (s.substring(0,1) == ' ') {
      s = s.substring(1,s.length);
    }
    while (s.substring(s.length-1,s.length) == ' ') {
      s = s.substring(0,s.length-1);
    }
    return s;

  }

  //-------------------------------------------------------------------------------------
	// Description : selecciona el contenido de un objeto HTML tipo TEXT
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function seleccionaContenidoTXT(obj_origen){

    if (obj_origen){
	  if (obj_origen.type == "text")
	    obj_origen.select();
	}
	    
  }

  //-------------------------------------------------------------------------------------
	// Description : desplega un mensaje javascript tipo alert y envia el foco al objeto correspondiente
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function ejecutaAlert(msj, obj_origen){

    alert(msj);
    if (obj_origen)
  		obj_origen.focus();

    seleccionaContenidoTXT(obj_origen);
    return false;
    
  }
  
  //-------------------------------------------------------------------------------------
	// Description : desplega un mensaje javascript tipo alert y envia el foco al objeto correspondiente
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function rescataTEXTselect(obj_origen){

    return obj_origen.options[obj_origen.selectedIndex].text;
    
  }

  //-------------------------------------------------------------------------------------
	// Description : alterna el color de la fila actual en un listado
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function alternaFilaMenu(objeto, evento){

	if (evento == "onmouseover")
		objeto.className = "fila_listado_over";
	else
		objeto.className = "fila_listado";

  }

  //-------------------------------------------------------------------------------------
	// Description : alterna el color de la fila actual en un listado
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function alternaFilaSimpleMenu(objeto, evento){

	if (evento == "onmouseover")
		objeto.className = "fila_listado_simple_over";
	else
		objeto.className = "fila_listado_simple";

  }

  //-------------------------------------------------------------------------------------
	// Description : cambia el puntero a la forma deseada
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function cambiaFormaPuntero(puntero, forma_puntero){

		switch (forma_puntero){
			case 1:
				//puntero normal (flecha)
				forma_puntero = "default";
				break
			case 2:
				//mano link
				forma_puntero = "pointer";
				break
			case 3:
				//mano link
				forma_puntero = "help";
				break
			default:
				//por omision: puntero normal (flecha)
				forma_puntero = "default";
				break
		}
		
		puntero.style.cursor = forma_puntero;
  }

  //-------------------------------------------------------------------------------------
	// Description : valida un RUT
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  function validaRUT(obj_rut, obj_dv){

    tmp_valor = trim(obj_rut.value);
    if (tmp_valor == "")
		return ejecutaAlert("Debe ingresar un rut", obj_rut);

    if (isNaN(tmp_valor))
		return ejecutaAlert("El rut debe contener solo números", obj_rut);

		obj_rut.value = parseInt(tmp_valor);
		tmp_valor = trim(obj_rut.value);
    if (tmp_valor.length < 7)
		return ejecutaAlert("El rut debe contener mínimo 7 números", obj_rut);

    tmp_valor = trim(obj_dv.value.toLowerCase());
    if (tmp_valor == "")
			return ejecutaAlert("Debe ingresar el dígito verificador", obj_dv);
    else{
			if (validaDVRUT(obj_rut) != tmp_valor)
				return ejecutaAlert("El dígito verificador es incorrecto", obj_dv);
			else
				return true;
		}

  }

  //-------------------------------------------------------------------------------------
	// Description : genera el digito verificador de un RUT
	// Brain       : Cristian Fernandez
	// Email       : cristian.fernandez@factobyte.cl
  //-------------------------------------------------------------------------------------
  //-------------------------------------------------------------------------------------
  function validaDVRUT(obj_rut){
		var rut_largo = obj_rut.value.length;
		var rut_valor = obj_rut.value;
		var multiplicador = 2;
		var suma = 0;
		var resto_division = 0;
		var dv = "0";
	
		for (i = rut_largo-1; i > -1; i--){
			suma = suma + (parseInt(rut_valor.substring(i, i+1)) * multiplicador);
			if (multiplicador == 7)
				multiplicador = 2;
			else
				multiplicador ++;
		}
	
		resto_division = suma % 11;
		if (resto_division == 0)
			dv = "0";
		else{
			if (resto_division == 1)
				dv = "k";
			else
				dv = 11 - resto_division;
		}
	
		return dv;
  }

