var FT_SOLOLETRAS = 1;
var FT_SOLONUMEROS = 2;
var FT_NUMEROSLETRAS = 3;

var OPCIONAL = 1;
var REQUERIDO = 2;

var numeros = '0123456789';
var letras = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ';
var fechas = 'yMd';

var error = 'Ok';

//Constantes para manejo de ubicaciones
var REGION = 1;
var DEPARTAMENTO = 2;
var MUNICIPIO = 3;

//Constantes para manejo de sectores y subsectores
var SECTOR = 4;
var SUBSECTOR = 5;

function validarParametro(parametro, formato, tipo, min, max, adi, men, req){

  var miParametro = parametro.toUpperCase();
  var miAdi = adi.toUpperCase();
  var miMen = men.toUpperCase();

  var longitud = miParametro.length;
  var longitudAdi = adi.length;
  var longitudMen = men.length;
  var longitudReq = req.length;

  if(tipo == OPCIONAL & longitud < 1)
    return true;
  
  if(longitud < min || longitud > max){
    error =  'Longitud Incorrecta' + ' (' + min + ' - ' + max + ')';
    return false;
  }
  
  if(miParametro.indexOf("'") != -1 || miParametro.indexOf("=") != -1){
    error =  'Caracteres no permitidos';
    return false;
  }

  var referencia;
  
  if(formato == FT_SOLONUMEROS)
  {
    referencia = numeros;
    error = 'Unicamente números';
  }
  else if(formato == FT_SOLOLETRAS)
  {
    referencia = letras;
    error = 'Unicamente letras';
    if(longitudAdi > 0)
      error = error + ' + ( ' + miAdi + ' )';
  }
  else if(formato == FT_NUMEROSLETRAS){
    referencia = numeros + letras;
    error = 'Unicamente números + letras';
  }

  if(longitudAdi > 0){
      referencia = referencia + miAdi;
      error = error + ' + ( ' + miAdi + ' )';
  }
    
  var c;
  for(var i = 0; i < longitud ; i++){
    c = miParametro.charAt(i);
    if(referencia.indexOf(c) == -1){
      return false;
    }
    else if(longitudMen > 0){
      if(men.indexOf(c) != -1){
        error = error + ' - ( ' + miMen + ' )';
        return false;
      }
    }
  }

  for(var i = 0; i < longitudReq ; i++){
    c = req.charAt(i);
    if(miParametro.indexOf(c) == -1){
      error = 'Se requiere ' + c;
      return false;
    }
  }
  return true;
}

function validarFormato(parametro, formato, tipo)
{
  var miFormato = formato.toUpperCase();
  var longitud = parametro.length;
    
  error = 'Formato Incorrecto';

  if(tipo == OPCIONAL & longitud < 1)
    return true;

  if(longitud != formato.length){
    return false;
  }
  
  var cParametro;
  var cFormato;
  
  for(var i = 0; i < longitud ; i++){
    cParametro = parametro.charAt(i);
    cFormato = miFormato.charAt(i);
    if(cFormato == 'N'){
      if(numeros.indexOf(cParametro) == -1)
        return false;
    }
    else if(cFormato == 'L') {
      if(letras.indexOf(cParametro) == -1)
        return false;
    }
    else{
      if(cFormato != cParametro)
        return false;
    }
  }
  return true;
}

function validarParametroFecha(parametro, formato, tipo)
{
  var longitud = parametro.length;
    
  error = 'Formato Incorrecto';

  if(tipo == OPCIONAL & longitud < 1)
    return true;

  if(longitud != formato.length){
    return false;
  }

  var cParametro;
  var cFormato;

  var ano = '';
  var mes = '';
  var dia = '';
  
  for(var i = 0; i < longitud ; i++){
    cParametro = parametro.charAt(i);
    cFormato = formato.charAt(i);

    if (fechas.indexOf(cFormato) != -1 && numeros.indexOf(cParametro) == -1) {
      return false;
    }
    else if(cFormato == 'y') {
      ano = ano + cParametro;
    }
    else if(cFormato == 'M') {
      mes = mes + cParametro;
    }
    else if(cFormato == 'd') {
      dia = dia + cParametro;
    }
    else if(cFormato != cParametro)
    {
      return false;
    }
  }

  if (validarFecha(ano, mes, dia)) {
    return true
  } else {
    return false;
  }
}

function validarFecha(ano, mes, dia) {

  if (ano < 1) {
    error = 'Año inválido';
    return false;
  } else if (mes < 1 || mes > 12) {
    error = 'Mes inváido';
    return false;
  } else if (dia < 1) {
    error = 'Dia inválido';
    return false;
  }

  if((mes == 1 || mes == 3 || mes == 5 || mes == 7 
      || mes == 8 || mes == 10 || mes == 12) && dia > 31) {
    error = 'Dia inválido, este mes tiene 31 dias';
    return false;
  } else if(mes == 2 && dia > 28) {
    error = 'Dia inválido, este mes tiene 28 dias';
    return false;
  } else if((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia > 30) {
    error = 'Dia inválido, este mes tiene 30 dias';
    return false;
  }
  return true;
}

function validarFechas(fechaDesde, fechaHasta, formato)
{

  var fechaInicial = fechaDesde;
  var fechaFinal = fechaHasta;

  if(!validarParametroFecha(fechaInicial, formato, REQUERIDO)) {
    //return -1;
    error = 'Fecha Desde - ' + error;
    return false;
  }

  if(!validarParametroFecha(fechaFinal, formato, REQUERIDO)) {
    //return -2;
    error = 'Fecha Hasta - ' + error;
    return false;
  }

  if (fechaInicial == fechaFinal) {
    //error = 'FechaA = FechaB';
    //return 0;
    return true;
  }
    
  var cFechaInicial;
  var cFechaFinal;
  var cFormato;

  var anoInicial = '';
  var mesInicial = '';
  var diaInicial = '';

  var anoFinal = '';
  var mesFinal = '';
  var diaFinal = '';

  var longitud = fechaInicial.length;
  
  for(var i = 0; i < longitud ; i++){
  
    cFechaInicial = fechaInicial.charAt(i);
    cFechaFinal = fechaFinal.charAt(i);
    cFormato = formato.charAt(i);

    if(cFormato == 'y') {
      anoInicial = anoInicial + cFechaInicial;
      anoFinal = anoFinal + cFechaFinal;
    }
    else if(cFormato == 'M') {
      mesInicial = mesInicial + cFechaInicial;
      mesFinal = mesFinal + cFechaFinal;
    }
    else if(cFormato == 'd') {
      diaInicial = diaInicial + cFechaInicial;
      diaFinal = diaFinal + cFechaFinal;
    }
  }

  var anoIniciali = anoInicial - 1 + 1;
  var mesIniciali = mesInicial - 1 + 1;
  var diaIniciali = diaInicial - 1 + 1;

  var anoFinali = anoFinal - 1 + 1;
  var mesFinali = mesFinal - 1 + 1;
  var diaFinali = diaFinal - 1 + 1;

  if(anoFinali < anoIniciali){
    //error = 'FechaA > FechaB';
    //return 2;
    error = 'Fecha Hasta debe ser mayor que Fecha Desde';
    return false;
  }

  else if(anoFinali == anoIniciali && mesFinali > 0 && mesIniciali > 0){
    if(mesFinali < mesIniciali){
      //error = 'FechaA > FechaB';
      //return 2;
      error = 'Fecha Hasta debe ser mayor que Fecha Desde';
      return false;
    }
    else if(mesFinali == mesIniciali){
      if(diaFinali < diaIniciali){
        //error = 'FechaA > FechaB';
        //return 2;
        error = 'Fecha Hasta debe ser mayor que Fecha Desde';
        return false;
      }
    }
  }
  //error = 'FechaA < FechaB';
  //return 1;
  error = 'Ok'
  return true;
}

function validarParametroCodigoCUBSNivel (codigoCUBS, formato, tipo, incluirAsterisco, nivel) {
  obtenerNroTokens(codigoCUBS,'.');
  if (nroTokens != nivel) {
    error = 'Unicamente nivel ' + nivel;
    return false;
  }
  return validarParametroCodigoCUBS(codigoCUBS, formato, tipo, incluirAsterisco);
}

function validarParametroCodigoCUBS(codigoCUBS, formato, tipo, incluirAsterisco) {

  var separador = ".";
  var bandera = false;

  if (tipo == OPCIONAL & codigoCUBS.length < 1)
    return true;

  if (codigoCUBS.length < 1){
    error = 'Parámetro vacío';
    return false;
  }
  
  formato = formato.toUpperCase();
  
  for (var i=0; i<formato.length; i++) {
    separador = formato.charAt(i);
    if (separador != 'T' && separador != 'C' 
          && separador != 'S' && separador != 'G' 
          && separador != 'I' && numeros.indexOf(separador) == -1) {
      bandera = true;
      break;
    }
  }

  if (!bandera) {
    error = 'Error en el formato del sistema - Separador no definido';
    return false;
  }

  var longitudComponentes  = formato.split(separador);

  if (longitudComponentes.length > 5) {
    error = 'Error en el formato del sistema...';
    return false;
  }

  for (var i=0 ; i<longitudComponentes.length ; i++) {
    longitudComponentes[i] = longitudComponentes[i].substring(1);
    for (var j=0 ; j<longitudComponentes[i].length ; j++) {
      if (numeros.indexOf(longitudComponentes[i].charAt(j)) == -1) {
        error = 'Error en el formato del sistema - No es un número';
        return false;
      }
    }
  }

  var componentes  = codigoCUBS.split(separador);

  if (componentes.length > 5) {
    error = 'Formato inválido';
    return false;
  }

  var lomgitud = 0;
  
  for (var i=0 ; i<componentes.length ; i++) {
    longitud = longitudComponentes[i] -1 + 1;
    
    if (componentes[i].length > longitud) {
      error = 'Formato inválido - Longitud incorrecta';
      return false;
    }
    
    for (var j=0 ; j<componentes[i].length ; j++) {
      if (numeros.indexOf(componentes[i].charAt(j)) == -1) {
        if (incluirAsterisco && componentes[i] != '*') {
          error = 'Formato inválido - Se esperaba *';
          return false;
        } else if (!incluirAsterisco) {
          error = 'Formato inválido - No es un número';
          return false;
        }
      }
    }
  }
  
  return true;
}

var errorCubsSubClase = 'Contacte al administrador de la aplicación';

function validarCodigoCubsSubClase(parametro, unAsterisco){

  var numeros = '0123456789';
  var adi = '';
  if(unAsterisco) {
    adi = '.*';
  }
  else {
    adi = '.';
  }

  var miParametro = parametro.toUpperCase();
  var max = 29;
  var min = 5;

  var longitud = miParametro.length;

  if(longitud < min || longitud > max){
    errorCubsSubClase =  'Longitud Incorrecta, debe introducir un código hasta sublcase, grupo o ítem.';
    return false;
  }
  
  var referencia;
  
  referencia = numeros + adi;
    
  var c;

  for(var i = 0; i < longitud ; i++){
    c = miParametro.charAt(i);
    if(referencia.indexOf(c) == -1){
      errorCubsSubClase = 'Un codigo se compone de numeros y puntos.';
      return false;
    }
  }

  posAsterisco = miParametro.indexOf('*');
  if ( posAsterisco != longitud -1 && posAsterisco != -1 ) {
    errorCubsSubClase =  'Solo puede usar el asterisco como comodin al final del codigo';
    return false;
  }

  if( posAsterisco >= 0) {
    posUltPunto = miParametro.lastIndexOf('.');
    if( posUltPunto != posAsterisco-1) {
      errorCubsSubClase = 'Solo puede usar el asterisco como comodin despues de un punto';
      return false;
    }
  }

  var posAntPunto=-1;
  var posPunto=0;
  var puntos=0;
  while( posPunto != -1) {
    posPunto = miParametro.indexOf('.', posAntPunto+1);
    if( posPunto == -1) {
      if( longitud-posAntPunto-1 > 5 || longitud-posAntPunto-1 < 1 ) {
        errorCubsSubClase = 'Deben haber entre 1 y 5 digitos en cada parte del codigo';
        return false;
      }
    }
    else {
      if( posPunto-posAntPunto-1 > 5 || posPunto-posAntPunto-1 < 1 ) {
        errorCubsSubClase = 'Deben haber entre 1 y 5 digitos en cada parte del codigo';
        return false;
      }
      posAntPunto = posPunto;
      puntos++;
      if(puntos > 4) {
        errorCubsSubClase = 'Solo pueden haber hasta 5 partes del codigo';
        return false;
      }
    }
  }
  if(puntos < 2) {
    errorCubsSubClase = 'Debe introducir un código hasta sublcase, grupo o ítem.';
    return false;
  }
  else if (puntos == 2 && posAsterisco == longitud -1) {
    errorCubsSubClase = 'Debe especificar una sub clase';
    return false;
  }

  return true;
}

function validarParametroPrecio(parametro, tipo) {
  obtenerNroTokens(parametro,'.');
  if (nroTokens > 2) {
    error = 'Unicamente un punto';
    return false;
  }
  var pos = parametro.indexOf('.');
  if (pos != -1 && parametro.length - pos > 3) {
    error = 'No se permiten mas de 2 decimales';
    return false;
  }
  return validarParametro(parametro,FT_SOLONUMEROS,tipo,1,20,'.','','');
}

function mostrarAyuda(id, event)
{
//  alert('mostrar');
  var ie = document.all?1:0;
  var ns4 = document.layers?1:0;
  if (ie) {
    if(document.all[id]!=null) {
      //alert('X:' + event.clientX + ' Y:' + event.clientY);
      var tooltipOffsetTop = document.all[id].scrollHeight + 20;
      var testTop = (document.body.scrollTop + event.clientY) - tooltipOffsetTop;
      var testLeft = event.clientX - 210;
      var tooltipAbsLft = (testLeft < document.body.scrollLeft) ? document.body.scrollLeft + 10 : testLeft;
      var tooltipAbsTop = (testTop < document.body.scrollTop) ? document.body.scrollTop + 10 : testTop;
      //alert('X:' + tooltipAbsLft + ' Y:' + tooltipAbsTop);
      document.all[id].style.posLeft = tooltipAbsLft;
      document.all[id].style.posTop = tooltipAbsTop;
      document.all[id].style.visibility = "visible";
    }
  }	
  else if (ns4) {
  //alert('mostrar ns4');
  if(document.layers[id]!=null) {
     // alert('ns4.1' + document.layers[id].top + ',' + document.layers[id].left );
      //var tooltipOffsetTop = document.layers[id].top + 20;
      var testTop = (event.pageY) - 20;
      var testLeft = event.pageX - 210;
      var tooltipAbsLft = (testLeft < 0) ?  10 : testLeft;
      var tooltipAbsTop = (testTop < 0) ? 10 : testTop;
      document.layers[id].left = tooltipAbsLft;
      document.layers[id].top = tooltipAbsTop;
      document.layers[id].visibility = "show";
      //alert('paso');
    }
  }
  else if(document.getElementById(id)!=null){
      var elementObj = document.getElementById(id);
      var tooltipOffsetTop = elementObj.scrollHeight + 20;
      var testTop = (document.body.scrollTop + event.clientY) - tooltipOffsetTop;
      var testLeft = event.clientX - 210;
      var tooltipAbsLft = (testLeft < document.body.scrollLeft) ? document.body.scrollLeft + 10 : testLeft;
      var tooltipAbsTop = (testTop < document.body.scrollTop) ? document.body.scrollTop + 10 : testTop;
      //alert('X:' + tooltipAbsLft + ' Y:' + tooltipAbsTop);
      elementObj.style.posLeft = tooltipAbsLft;
      elementObj.style.posTop = tooltipAbsTop;
      elementObj.style.visibility = "visible";	
  }	
}

function ocultarAyuda(id)
{
//  alert('ocultar');
  var ie = document.all?1:0;
  var ns4 = document.layers?1:0;
  if (ie) {
    if(document.all[id]!=null) {
      document.all[id].style.visibility = "hidden";
    }
  }	
  else if (ns4) {
    if(document.layers[id]!=null) {
      document.layers[id].visibility = "hide";
    }
  }
  else if(document.getElementById(id)!=null){
      document.getElementById(id).style.visibility = "hidden";	
  }	
}


function obtenerNroTokens(cadena,caracter){
	var posCaracter = 0;
	var numero = 0;
	do{
		posCaracter = cadena.indexOf(caracter);
		if(posCaracter != -1){
			numero++;
			cadena = cadena.substring(posCaracter+1);
		}
	}while(posCaracter != -1);
	nroTokens = numero + 1;
}

function obtenerToken(cadena,caracter,numero){
	var posCaracter1 = 0;
	for(var i=0 ; i<numero ; i++){
		posCaracter1 = cadena.indexOf(caracter);
		if(posCaracter1 != -1){
			cadena = cadena.substring(posCaracter1+1);
		}
	}
	var posCaracter2 = cadena.indexOf(caracter);
	if(posCaracter2  != -1){
		token = cadena.substring(0,posCaracter2);
	}
	else{
		token = cadena;
	}
}

function redireccionarServicio(unTamanoEnt) {
    if (unTamanoEnt == '1') {  
      document.forma_intermedio.submit();
    }
}

function nuevaVentana(url,nombre,ancho,alto)
{
  var yy = window.open('/',nombre,'toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=no,resizable=no,width=' + ancho + ' ,height=' + alto);
  yy.document.write('Cargando información...');
  if(url!='')
    yy.location=url;
  yy.focus();
}

function nuevaVentanaReporte(url,nombre,ancho,alto)
{
  var yy = window.open('/',nombre,'toolbar=no,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=' + ancho + ' ,height=' + alto);
  yy.document.write('Cargando información...');
  if(url!='')
    yy.location=url;
  yy.focus();
}

var nroTokens = 0;
var token = '';

function actualizarSubsector(form){
	var cadena = form.sectores.value;
	if(cadena == '-1'){
		form.subsector.options.length = 1;
		form.subsector.options[0].value = '-1';
		form.subsector.options[0].text = 'Seleccione...';
		return;
	}
	var posValor = cadena.indexOf(':');
	var token1 = '';
	cadena = cadena.substring(posValor+1);
	obtenerNroTokens(cadena,',');
	form.subsector.options.length = nroTokens;
	for(var i = 0; i<nroTokens ; i++){
		obtenerToken(cadena,',',i);
		token1 = token;
		obtenerToken(token1,'-',0);
		form.subsector.options[i].value = token;
		obtenerToken(token1,'-',1);
		form.subsector.options[i].text = token;
	}
}

// ***************************************************
// Inicio funciones de  oferta_buscador_localidades

function actualizarUbicacion(formulario, campo, tipo){

  if (campo){
    var indiceSeleccion = campo.selectedIndex;
    var ubicacion = campo[indiceSeleccion].value;
    if(tipo != '3'){
      actualizarDatosUbicaciones(indiceSeleccion, formulario, tipo);
    }
    if(ubicacion == '0'){
      if(tipo == '1'){
        ubicacion = miCodigoPais;
      }
      else if(tipo == '2'){
        ubicacion = formulario.region.value; 
      } 
      else{
        ubicacion = formulario.departamento.value; 
      }
    }
    formulario.codigo.value = ubicacion;
    return true;
  }
  else{
    return false;
  }
    
}

// Fin funciones de  oferta_buscador_localidades
// ***************************************************


// ***************************************************
// Inicio funciones de oferta_modifica_ubicaciones
//Carga las lista de Regiones
function cargarRegiones(unaForma, unCodigo, unTipoUbicacion) {
  if(unaForma.region != null) {
    unaForma.region.options.length = misRegiones.length + 1;
    unaForma.departamento.options.length = 1;
    unaForma.municipio.options.length = 1;
    unaForma.region.options[0].text = "Seleccione...";
    unaForma.region.options[0].value = "0";
    unaForma.departamento.options[0].text = "Seleccione...";
    unaForma.departamento.options[0].value = "0";
    unaForma.departamento.disabled = true;
    unaForma.municipio.options[0].text = "Seleccione...";
    unaForma.municipio.options[0].value = "0";
    unaForma.municipio.disabled = true;
    var i;
    for(i = 0; i < misRegiones.length; i++) {
      var miRegion = misRegiones[i][0];
      var miIndice = miRegion.lastIndexOf('|');
      var miNombreRegion = miRegion.substring(0, miIndice);
      var miCodigoRegion = miRegion.substring(miIndice + 1);
      unaForma.region.options[i + 1].text = miNombreRegion;
      unaForma.region.options[i + 1].value = miCodigoRegion;
    }
  }
  else if(unaForma.departamento != null) {
    unaForma.departamento.options.length = misDepartamentos.length + 1;
    unaForma.municipio.options.length = 1;
    unaForma.departamento.options[0].text = "Seleccione...";
    unaForma.departamento.options[0].value = "0";
    unaForma.municipio.options[0].text = "Seleccione...";
    unaForma.municipio.options[0].value = "0";
    unaForma.municipio.disabled = true;
    var i;
    for(i = 0; i < misDepartamentos.length; i++) {
      var miDepartamento = misDepartamentos[i][0];
      var miIndice = miDepartamento.lastIndexOf('|');
      var miNombreDepartamento = miDepartamento.substring(0, miIndice);
      var miCodigoDepartamento = miDepartamento.substring(miIndice + 1);
      unaForma.departamento.options[i + 1].text = miNombreDepartamento;
      unaForma.departamento.options[i + 1].value = miCodigoDepartamento;
    }
  }
  seleccionarUbicacion(unaForma, unCodigo, unTipoUbicacion);
}

//Selecciona una ubicación en base al su código
function seleccionarUbicacion(unaForma, unCodigo, unTipoUbicacion) {
  var i, indiceRegion = -1, indiceDepartamento = -1, indiceMunicipio = -1;
  if(unTipoUbicacion == REGION && unCodigo != '') {
    if(unaForma.region != null) {
      for(i = 0; i < misRegiones.length; i++) {
        var miRegion = misRegiones[i][0];
        var miIndice = miRegion.lastIndexOf('|');
        var miCodigoRegion = miRegion.substring(miIndice + 1);
        if(unCodigo == miCodigoRegion) {
          indiceRegion = i;
          break;
        }
      }
      if(indiceRegion >= 0) {
        unaForma.region.selectedIndex = indiceRegion + 1;
        actualizarDatosUbicaciones(indiceRegion + 1, unaForma, REGION);
      }
    }
  }
  if(unTipoUbicacion == DEPARTAMENTO && unCodigo != '') {
    for(i = 0; i < misDepartamentos.length; i++) {
      var miDepartamento = misDepartamentos[i][0];
      var miIndice = miDepartamento.lastIndexOf('|');
      var miCodigoDepartamento = miDepartamento.substring(miIndice + 1);
      if(unCodigo == miCodigoDepartamento) {
        indiceDepartamento = i;
        break;
      }
    }
    if(unaForma.region != null) {
      for(i = 0; i < misRegiones.length; i++) {
        var miRegion = misRegiones[i];
        var indiceInicial = miRegion[1] - 1 + 1;
        var indiceFinal = miRegion[2] - 1 + indiceInicial;
        if(indiceDepartamento >= indiceInicial && indiceDepartamento <= indiceFinal) {
          indiceRegion = i;
          indiceDepartamento = indiceDepartamento - indiceInicial;
          break;
        }
      }
    }
    if(unaForma.region != null && indiceRegion >= 0) {
      unaForma.region.selectedIndex = indiceRegion + 1;
      actualizarDatosUbicaciones(indiceRegion + 1, unaForma, REGION);
    }
    if(indiceDepartamento >= 0) {
      if(unaForma.departamento != null) {
        unaForma.departamento.selectedIndex = indiceDepartamento + 1;
      }
      actualizarDatosUbicaciones(indiceDepartamento + 1, unaForma, DEPARTAMENTO);
    }
  }


  if(unTipoUbicacion == MUNICIPIO && unCodigo != '') {
    for(i = 0; i < misMunicipios.length; i++) {
      var miMunicipio = misMunicipios[i];
      var miIndice = miMunicipio.lastIndexOf('|');
      var miCodigoMunicipio = miMunicipio.substring(miIndice + 1);
      if(unCodigo == miCodigoMunicipio) {
        indiceMunicipio = i;
        break;
      }
    }
    for(i = 0; i < misDepartamentos.length; i++) {
      var miDepartamento = misDepartamentos[i];
      var indiceInicial = miDepartamento[1] - 1 + 1;
      var indiceFinal = miDepartamento[2] - 1 + indiceInicial;
      if(indiceMunicipio >= indiceInicial && indiceMunicipio <= indiceFinal) {
        indiceDepartamento = i;
        indiceMunicipio = indiceMunicipio - indiceInicial;
        break;
      }
    }
    if(unaForma.region != null) {
      for(i = 0; i < misRegiones.length; i++) {
        var miRegion = misRegiones[i];
        var indiceInicial = miRegion[1] - 1 + 1;
        var indiceFinal = miRegion[2] - 1 + indiceInicial;
        if(indiceDepartamento >= indiceInicial && indiceDepartamento <= indiceFinal) {
          indiceRegion = i;
          indiceDepartamento = indiceDepartamento - indiceInicial;
          break;
        }
      }
    }
    if(unaForma.region != null && indiceRegion >= 0) {
      unaForma.region.selectedIndex = indiceRegion + 1;
      actualizarDatosUbicaciones(indiceRegion + 1, unaForma, REGION);
    }
    if(indiceDepartamento >= 0) {
      if(unaForma.departamento != null) {
        unaForma.departamento.selectedIndex = indiceDepartamento + 1;
      }
      actualizarDatosUbicaciones(indiceDepartamento + 1, unaForma, DEPARTAMENTO);
    }
    if(unaForma.municipio != null && indiceMunicipio >= 0) {
      unaForma.municipio.selectedIndex = indiceMunicipio + 1;
    }

  }
}

function actualizarDatosUbicaciones(unaPosicion, unaForma, unValor) {
 if (unaPosicion > 0) {
   var miArreglo, miArreglo1, miPosicion, miLongitud;
   if (unValor == REGION){
      miArreglo = misRegiones[unaPosicion - 1];
      miPosicion = Math.abs(miArreglo[1]);
      miLongitud = Math.abs(miArreglo[2]);
      cambiarListasUbicaciones(unaForma.departamento, miPosicion, miLongitud, unValor);
      unaForma.municipio.options.length = 1;
      unaForma.municipio.options[0].text = "Seleccione...";
      unaForma.municipio.options[0].value = "0";
      unaForma.municipio.disabled = true;
   }
   if (unValor == DEPARTAMENTO) {
    if(unaForma.region != null) {
       miArreglo = misRegiones[unaForma.region.selectedIndex - 1];
       miArreglo1 = misDepartamentos[Math.abs(miArreglo[1]) + unaPosicion - 1];
    } else {
       miArreglo1 = misDepartamentos[unaPosicion - 1];
    }
    miPosicion = Math.abs(miArreglo1[1]);
    miLongitud = Math.abs(miArreglo1[2]);
    cambiarListasUbicaciones(unaForma.municipio, miPosicion, miLongitud, unValor);
   }
 }
 else {
   if (unValor == REGION) {
      unaForma.departamento.options.length = 1;
      unaForma.departamento.options[0].text = "Seleccione...";
      unaForma.departamento.options[0].value = "0";
      unaForma.departamento.disabled = true;
      unaForma.municipio.options.length = 1;
      unaForma.municipio.options[0].text = "Seleccione...";
      unaForma.municipio.options[0].value = "0";
      unaForma.municipio.disabled = true;
   }
   if (unValor == DEPARTAMENTO) {
      unaForma.municipio.options.length = 1;
      unaForma.municipio.options[0].text = "Seleccione...";
      unaForma.municipio.options[0].value = "0";
      unaForma.municipio.disabled = true;
   }
 }
}

function cambiarListasUbicaciones(formas, unaPosicion, unaLongitud, unValor)
{
    with(formas) {
     options.length = unaLongitud + 1;
     options[0].text = "Seleccione...";
     options[0].value = "0";
     var i = 0;
     disabled = false;

     if(unValor == REGION) {
       for(i = 0; i < unaLongitud; i++) {
         var miDepartamento = misDepartamentos[i + unaPosicion][0];
         var miIndice = miDepartamento.lastIndexOf('|');
         var miNombreDepartamento = miDepartamento.substring(0, miIndice);
         var miCodigoDepartamento = miDepartamento.substring(miIndice + 1);
         options[i + 1].text = miNombreDepartamento;
         options[i + 1].value = miCodigoDepartamento;
       }
     }
     else if(unValor == DEPARTAMENTO) {
       for(i = 0; i < unaLongitud; i++) {
         var miMunicipio = misMunicipios[i + unaPosicion];
         var miIndice = miMunicipio.lastIndexOf('|');
         var miNombreMunicipio = miMunicipio.substring(0, miIndice);
         var miCodigoMunicipio = miMunicipio.substring(miIndice + 1);
         options[i + 1].text = miNombreMunicipio;
         options[i + 1].value = miCodigoMunicipio;
       }
     }
     options.selectedIndex = 0;
    }
}

// Fin funciones de oferta_modifica_ubicaciones
// ***************************************************
 
// inicio de funciones de cbasico_tipo_alarmas
function cargarTiposAlarmas(unaForma, unCodigo, unTipo) {
  if(unaForma.tipoAlarma != null) {
    unaForma.tipoAlarma.options.length = misTiposAlarmas.length + 1;
    unaForma.tipoAlarma.options[0].text = "Seleccione...";
    unaForma.tipoAlarma.options[0].value = "0";

    var i;
    for(i = 0; i < misTiposAlarmas.length; i++) {
      var miTipoAlarma = misTiposAlarmas[i][0];
      var miIndice = miTipoAlarma.lastIndexOf('|');
      var miNombreTipoAlarma = miTipoAlarma.substring(0, miIndice);
      var miCodigoTipoAlarma = miTipoAlarma.substring(miIndice + 1);
      unaForma.tipoAlarma.options[i + 1].text = miNombreTipoAlarma;
      unaForma.tipoAlarma.options[i + 1].value = miCodigoTipoAlarma;
    }
  }



}
 //*****
 // fin de funciones de cbasico

// ***************************************************
// Inicio funciones de demanda_modifica_sectores

function cargarSectores(unaForma, unCodigo, unTipo) {
  if(unaForma.subsector != null) {
    unaForma.subsector.options.length = 1;
    unaForma.subsector.options[0].text = "Seleccione...";
    unaForma.subsector.options[0].value = "0";
    unaForma.subsector.disabled = true;
  }

  if(unaForma.sector != null) {
    unaForma.sector.options.length = misSectores.length + 1;
    unaForma.sector.options[0].text = "Seleccione...";
    unaForma.sector.options[0].value = "0";

    var i;
    for(i = 0; i < misSectores.length; i++) {
      var miSector = misSectores[i][0];
      var miIndice = miSector.lastIndexOf('|');
      var miNombreSector = miSector.substring(0, miIndice);
      var miCodigoSector = miSector.substring(miIndice + 1);
      unaForma.sector.options[i + 1].text = miNombreSector;
      unaForma.sector.options[i + 1].value = miCodigoSector;
    }
  }

  seleccionarSector(unaForma, unCodigo, unTipo);
}

//Selecciona un sector o subsector en base al su código
function seleccionarSector(unaForma, unCodigo, unTipo) {
  var i, indiceSector = -1, indiceSubsector = -1;
  if(unTipo == SECTOR && unCodigo != '') {
    for(i = 0; i < misSectores.length; i++) {
      var miSector = misSectores[i][0];
      var miIndice = miSector.lastIndexOf('|');
      var miCodigoSector = miSector.substring(miIndice + 1);
      if(unCodigo == miCodigoSector) {
        indiceSector = i;
        break;
      }
    }
    if(indiceSector >= 0) {
      if(unaForma.sector != null) {
        unaForma.sector.selectedIndex = indiceSector + 1;
      }
      if(unaForma.subsector != null) {
        actualizarDatosSectores(indiceSector + 1, unaForma, SECTOR);
      }
    }
  }

  if(unTipo == SUBSECTOR && unCodigo != '') {
    for(i = 0; i < misSubSectores.length; i++) {
      var miSubsector = misSubSectores[i];
      var miIndice = miSubsector.lastIndexOf('|');
      var miCodigoSubsector = miSubsector.substring(miIndice + 1);
      if(unCodigo == miCodigoSubsector) {
        indiceSubsector = i;
        break;
      }
    }
    for(i = 0; i < misSectores.length; i++) {
      var miSector = misSectores[i];
      var indiceInicial = miSector[1] - 1 + 1;
      var indiceFinal = miSector[2] - 1 + indiceInicial;
      if(indiceSubsector >= indiceInicial && indiceSubsector <= indiceFinal) {
        indiceSector = i;
        indiceSubsector = indiceSubsector - indiceInicial;
        break;
      }
    }
    if(indiceSector >= 0) {
      if(unaForma.sector != null) {
        unaForma.sector.selectedIndex = indiceSector + 1;
      }
      if(unaForma.subsector != null) {
        actualizarDatosSectores(indiceSector + 1, unaForma, SECTOR);
      }
    }
    if(indiceSubsector >= 0 && unaForma.subsector != null) {
      unaForma.subsector.selectedIndex = indiceSubsector + 1;
    }
  }
}

function actualizarDatosSectores(unaPosicion, unaForma, unValor) {
 if (unaPosicion > 0) {
   var miArreglo, miPosicion, miLongitud;
   if (unValor == SECTOR){
      miArreglo = misSectores[unaPosicion - 1];
      miPosicion = Math.abs(miArreglo[1]);
      miLongitud = Math.abs(miArreglo[2]);
      cambiarListasSectores(unaForma.subsector, miPosicion, miLongitud, unValor);
   }
 }
 else {
   if (unValor == SECTOR) {
      unaForma.subsector.options.length = 1;
      unaForma.subsector.options[0].text = "Seleccione...";
      unaForma.subsector.options[0].value = "0";
      unaForma.subsector.disabled = true;
   }
 }
}

function cambiarListasSectores(formas, unaPosicion, unaLongitud, unValor)
{
    with(formas) {
     options.length = unaLongitud + 1;
     options[0].text = "Seleccione...";
     options[0].value = "0";
     var i = 0;
     disabled = false;

     if(unValor == SECTOR) {
       for(i = 0; i < unaLongitud; i++) {
         var miSubSector = misSubSectores[i + unaPosicion];
         var miIndice = miSubSector.lastIndexOf('|');
         var miNombreSubSector = miSubSector.substring(0, miIndice);
         var miCodigoSubSector = miSubSector.substring(miIndice + 1);
         options[i + 1].text = miNombreSubSector;
         options[i + 1].value = miCodigoSubSector;
       }
     }
     options.selectedIndex = 0;
  }
}

// Fin funciones de demanda_modifica_sectores
// ***************************************************

function cargarCamaras(unaForma, unCodigo) {
  if(unaForma.camaras != null) {
    unaForma.camaras.options.length = misCamaras.length + 1;
    unaForma.camaras.options[0].text = "Seleccione...";
    unaForma.camaras.options[0].value = "0";

    var i;
    for(i = 0; i < misCamaras.length; i++) {
      var miCamara = misCamaras[i];
      var miIndice = miCamara.lastIndexOf('|');
      var miNombreCamara = miCamara.substring(0, miIndice);
      var miCodigoCamara = miCamara.substring(miIndice + 1);
      unaForma.camaras.options[i + 1].text = miNombreCamara;
      unaForma.camaras.options[i + 1].value = miCodigoCamara;
    }
  }

  seleccionarCamara(unaForma, unCodigo);
}

//Selecciona una cámara en base a su código
function seleccionarCamara(unaForma, unCodigo) {
  var i, indiceCamara = -1;
  if(unCodigo != '') {
    for(i = 0; i < misCamaras.length; i++) {
      var miCamara = misCamaras[i];
      var miIndice = miCamara.lastIndexOf('|');
      var miCodigoCamara = miCamara.substring(miIndice + 1);
      if(unCodigo == miCodigoCamara) {
        indiceCamara = i;
        break;
      }
    }
    if(indiceCamara >= 0) {
      if(unaForma.camaras != null) {
        unaForma.camaras.selectedIndex = indiceCamara + 1;
      }
    }
  }
}

function obtenerDescripcion(unCodigo, unTipo) {
  var miArreglo;
  var i;
  var miDescripcion = '';
  var miFinal = 0;

  if(unTipo == REGION) {
    miArreglo = misRegiones;
  }
  else if(unTipo == DEPARTAMENTO) {
    miArreglo = misDepartamentos;
  }
  else if(unTipo == MUNICIPIO) {
    miArreglo = misMunicipios;
    miFinal = 1;
  }
  else if(unTipo == SECTOR) {
    miArreglo = misSectores;
  }
  else if(unTipo == SUBSECTOR) {
    miArreglo = misSubSectores;
    miFinal = 1;
  }

  for(i = 0; i < miArreglo.length; i++) {
    var miObjeto;
    if(miFinal == 0) {
      miObjeto = miArreglo[i][0];
    }
    else if(miFinal == 1) {
      miObjeto = miArreglo[i];
    }
    var miIndice = miObjeto.lastIndexOf('|');
    var miNombre = miObjeto.substring(0, miIndice);
    var miCodigo = miObjeto.substring(miIndice + 1);
    if(unCodigo == miCodigo) {
      miDescripcion = miNombre;
      break;
    }
  }

  return miDescripcion;
}

function invertirSeleccion()
{
  if(document.formulario_sice.serviciossel != null) {
    var i = document.formulario_sice.serviciossel.length;
    for(var j=0;j<i;j++){
      if(document.formulario_sice.serviciossel[j].checked) {
        document.formulario_sice.serviciossel[j].checked=false;
      } else {
        document.formulario_sice.serviciossel[j].checked=true;
      }
    }
  }
  return true;
}

//Mediante una caja de dialogo se solicita entrada al usuario de un numero:
  function solicitarPagina(unDestino, unMaximo){
    var miRespuesta = prompt("Introduzca el número de la página a visualizar [1-" + unMaximo + "]", unMaximo);
    if(miRespuesta){
      if(miRespuesta>0 & miRespuesta<=unMaximo) {
        unDestino = unDestino.replace(/\+\@\+/g, miRespuesta);
        if(unDestino.indexOf('javascript:')==0) {
          eval(unDestino);
        }
        else{
          window.location = unDestino;
        }
      }
    }
  }


//Crea la barra de navegacion sobre las páginas de resultados:
  function mostrarPaginacionResultados(unaCantidadRegistrosLista, unTotalRegistros, unNumeroPagina, unaCantidadPagina, unDestino) {
    if(unTotalRegistros>0) {
      var miFilaInicial = (unNumeroPagina - 1) * unaCantidadPagina + 1;
      var miFilaFinal = miFilaInicial + unaCantidadRegistrosLista - 1;

      //CREA LEYENDA CON RESULTADOS MOSTRADOS Y TOTAL:

      document.write("<table class=NAVEGARESULTADOS align=center width=\"100%\"><tr>\n<td align=left width=190>");
      document.write("<b> Resultados " 
              + miFilaInicial + " - " + miFilaFinal + " de " + unTotalRegistros
              + "</b>");

      if(unTotalRegistros>miFilaFinal || miFilaInicial>1){
        var miTotalPaginas = (unTotalRegistros-1 - (unTotalRegistros-1)%unaCantidadPagina)/unaCantidadPagina+ 1;
        var miPaginaInicial = 1;
        var miPaginasMostradas = 10;

        if(miTotalPaginas>10)
          miPaginasMostradas = 8;

        if(miTotalPaginas>miPaginasMostradas){
          if(unNumeroPagina>4)
            miPaginaInicial =  unNumeroPagina - 3;
          if(unNumeroPagina>miTotalPaginas-4)
            miPaginaInicial =  miTotalPaginas - 7;
        }

        //CREA REFERENCIAS A PAGINAS POR NUMERO:

        document.write("</td>\n<td align=right><b>Página:<b> </td><td align=left >");
      
        if(miTotalPaginas>miPaginasMostradas && unNumeroPagina>miPaginasMostradas/2){ 
           document.write("\n<a href=\"" + unDestino.replace(/\+\@\+/g,  "1") 
                + "\"><b>1" + (miPaginaInicial>2?"...":"") 
                + " </b></a> ");
        }

        for(var i = miPaginaInicial; i  <= miTotalPaginas && i < miPaginaInicial + miPaginasMostradas ;i++) {
          if(i == unNumeroPagina)
            document.write("\n<font class=RESALTA>"  + i  + "</font> ");
          else
            document.write("\n<a href=\"" + unDestino.replace(/\+\@\+/g, i ) + "\"><b>" + i + "</b></a> "); 
        }

        if(miTotalPaginas>miPaginasMostradas && unNumeroPagina<miTotalPaginas-miPaginasMostradas/2){ 
           document.write("\n<a href=\"" + unDestino.replace(/\+\@\+/g, miTotalPaginas) 
                + "\"><b>" + (miPaginaInicial+8<miTotalPaginas?"...":"") 
                + miTotalPaginas + " </b></a> ");
        }

        //CREA ENLACE PARA SOLICITAR ENTRADA DE PAGINA A MOSTRAR:

        if(miTotalPaginas>10){
            document.write("\n &nbsp; <a href=\"javascript:solicitarPagina(\'" + unDestino + "\', " + miTotalPaginas+ ")\"><b>?</b></a> "); 
        }

        //CREA REFERENCIAS A PAGINA SIGUIENTE Y ANTERIOR:

        document.write("</td><td align=right width=120 >");

        if(miFilaInicial>1){ 
          document.write("\n<a href=\"" + unDestino.replace(/\+\@\+/g,(unNumeroPagina-1)) 
                + "\"><b>&lt;Anterior</b></a> ");
        }
        else{
          document.write("\n<FONT CLASS=SUAVIZA>&lt;Anterior</FONT> ");
        }
      
        if(unTotalRegistros>miFilaFinal){ 
           document.write("\n  <a href=\"" + unDestino.replace(/\+\@\+/g,(unNumeroPagina+1)) 
                + "\"><b>Siguiente&gt;</b></a> ");
        }
        else{
          document.write("\n <FONT CLASS=SUAVIZA>Siguiente&gt;</FONT>");
        }

      }
      document.write("</td></tr></table>");
    }
  }


