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

	window.close();
}

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

	top.close();
}

//-------------------------------------------------------------------------------------
// Job   : 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;
}

//-------------------------------------------------------------------------------------
// Job   : 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')
}

//-------------------------------------------------------------------------------------
// Job   : 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);
	}
}

//-------------------------------------------------------------------------------------
// Job   : valida la consistencia de un E-mail
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function validaEmail(email){

	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
		return true;
	else
		return false;
}

//-------------------------------------------------------------------------------------
// Job   : 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;
}

//-------------------------------------------------------------------------------------
// Job   : 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;
	} 	
}

//-------------------------------------------------------------------------------------
// Job   : muestra una capa dada
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function muestraCapa(id_capa){

	document.getElementById(id_capa).style.visibility="visible";
}

//-------------------------------------------------------------------------------------
// Job   : oculta una capa dada
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function ocultaCapa(id_capa){
	
	document.getElementById(id_capa).style.visibility="hidden";
}

//-------------------------------------------------------------------------------------
// Job   : mueve una capa dada
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function mueveCapa(nombre_capa, posx, posy, ancho_div, alto_div){
	posy = posy + document.body.scrollTop + 10;
	posx = posx + document.body.scrollLeft + 10;

	max_posx = (screen.width / 2);
	if (posx > max_posx){
		tmp = posx - ancho_div;
		posx = tmp - 15;
	}
	
	document.getElementById(nombre_capa).style.top = posy;
	document.getElementById(nombre_capa).style.left = posx;
}

//-------------------------------------------------------------------------------------
// Job   : 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);
	}
}

//-------------------------------------------------------------------------------------
// Job   : 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;

}

//-------------------------------------------------------------------------------------
// Job   : 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++;
	}

}

//-------------------------------------------------------------------------------------
// Job   : 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++;
	}

}

//-------------------------------------------------------------------------------------
// Job   : 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;
}

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

//-------------------------------------------------------------------------------------
// Job   : 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
		}
	}

}

//-------------------------------------------------------------------------------------
// Job   : 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);
}

//-------------------------------------------------------------------------------------
// Job   : altera las opciones del objeto HTML SELECT con provincias
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function cambiaComboProvincia(codigo_region, obj_destino){
	var encontrado = false;
	var ind = 0;
	var largo_arreglo = arr_provincias.length;
	var pos = 0;
	obj_destino = document.getElementById(obj_destino);

	obj_destino.length = pos;

	if (codigo_region == -1)
		obj_destino.length = 0;
	else{
		while ((!encontrado) && (ind < largo_arreglo)){
			if (arr_provincias[ind][0] == codigo_region){
				AgregaOptCombo(obj_destino, pos, arr_provincias[ind][2], arr_provincias[ind][1])
				pos ++;
			}
			ind ++;
		}
	}
}

//-------------------------------------------------------------------------------------
// Job   : altera las opciones del objeto HTML SELECT con comunas
// Brain : Cristian Fernandez
// Email : cristian.fernandez@factobyte.cl
//-------------------------------------------------------------------------------------
function cambiaComboComuna(codigo_region, codigo_provincia, obj_destino){
	var encontrado = false;
	var ind = 0;
	var largo_arreglo = arr_comunas.length;
	var pos = 0;
	obj_destino = document.getElementById(obj_destino);

	obj_destino.length = pos;

	if ((codigo_region == -1) || (codigo_provincia == -1))
		obj_destino.length = 0;
	else{
		while ((!encontrado) && (ind < largo_arreglo)){
			if ((arr_comunas[ind][0] == codigo_region) && (arr_comunas[ind][1] == codigo_provincia)){
				AgregaOptCombo(obj_destino, pos, arr_comunas[ind][3], arr_comunas[ind][2])
				pos ++;
			}
			ind ++;
		}
	}
}

//-------------------------------------------------------------------------------------
// Job   : 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;

}

//-------------------------------------------------------------------------------------
// Job   : 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();
	}
    
}

//-------------------------------------------------------------------------------------
// Job   : 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;
  
}

//-------------------------------------------------------------------------------------
// Job   : 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;
  
}

//-------------------------------------------------------------------------------------
// Job   : 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";

}

//-------------------------------------------------------------------------------------
// Job   : 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";

}

//-------------------------------------------------------------------------------------
// Job   : 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;
}

//-------------------------------------------------------------------------------------
// Job   : 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;
	}

}

//-------------------------------------------------------------------------------------
// Job   : 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;
}

