/******************************************************************************/
/*                                                                            */
/*        Desenvolvido pela 3Business - Soluções para Internet Ltda.          */
/*                        www.3business.com.br                                */
/*                     comercial@3business.com.br                             */
/*                                                                            */
/******************************************************************************/

// carregando imagem de "carregando" ;)
//var c = []; c["carregando"] = "Imagens/img-carregando.gif";
var c = []; c["carregando"] = "Imagens/ajax-loader2.gif";
var site_imagens = [];
site_imagens = preload_imagens(c);

function fmod(div,divndo){
  var res = Math.floor(div/divndo);
  var resto = div - (res*divndo);
  return resto;
  } // fmod

function valida_cnpj(cnpj){
  cnpj = cnpj.replace('\.','').replace('\.','').replace('\/','').replace('\-','');
  if (cnpj.length==14){
    var n_cnpj = cnpj.substr(0,12);
    /*a multiplicação deve ser feita duas vezes*/
    var x,y,k;
    var soma;
    var digit = new Array(3);
    digit[0] ='';
    var sbt;
    for(x=1; x<=2; x++){
      if(soma){
        soma= 0;
        n_cnpj = n_cnpj+digit[1];
        k = n_cnpj.length+1;//multiplicador
        sbt = 12;
        }
      else{
        soma = 0;
        k = n_cnpj.length+1;//multiplicador
        sbt = 11;
        }
      var fator = 2;
        /*algoritmo de soma*/
      for(y=k; y>=2; y--){
        soma = soma + n_cnpj.substr(sbt,1)*fator;
        sbt--;
        fator++;
        //----------
        if(fator > 9){
          fator = 2;
          }
        //-----------
        }
      var mod;
      /**/
      mod = fmod(soma,11);
      /**/
      digit[x] = 11 - mod;
      if(digit[x] >= 10){
        digit[x] = 0;
        }
      }
    var cnpj_gerado;
    cnpj_gerado = cnpj.substr(0,12)+digit[1]+digit[2];
    /*echo $cnpj_gerado*/
    if(cnpj == cnpj_gerado){
      return true;
      }
    else{
      return false;
      }
    }
  else{
    return false;
    }
  } // valida_cnpj

function valida_cpf(cpf){
  cpf = cpf.replace('\.','').replace('\.','').replace('\-','');
  var x,y,k;
  var soma;
  var fim;
  var digit = new Array(3);
  var sbt;
  var mod;
  var cpf_gerado;
  digit[0] ='';
  if (cpf.length==11){
    var n_cpf = cpf.substr(0,9);
    /*a multiplicação deve ser feita duas vezes*/
    for(x=1; x<=2; x++){
      if(soma){
        soma = 0;
        fim = 1;
        k = n_cpf.length+2;
        n_cpf = n_cpf+digit[1];
        }
      else{
        soma = 0;
        fim = 2;
        k = n_cpf.length+1;
        }
      sbt = 0;
        /*algoritmo de soma*/
      for(y=k; y>=fim; y--){
        soma = soma + (n_cpf.substr(sbt,1)*y);
        sbt++;
        }
      mod = fmod(soma,11);
      digit[x] = 11 - mod;
      if(digit[x] >= 10){
        digit[x] = 0;
        }
      }
    cpf_gerado = cpf.substr(0,9)+digit[1]+digit[2];
    if(cpf == cpf_gerado){
      return true;
      }
    else{
      return false;
      }
    }
  else{
    return false;
    }
  } // valida_cpf

function seleciona(formulario,nome,id){
  var elm = document.forms.namedItem(formulario).elements.namedItem(nome);

  for(var x = 0; x < elm.options.length; x++){
    if(elm.options[x].value == id){
      elm.selectedIndex = x;
      break;
      }
    }

  } // seleciona

/**
 * Function: valida_data
 *
 * Função para validação de datas em javascript.
 * A validação é feita apenas por Expressão Regular.
 * Valida corretamente os dias dos meses.
 * NÃO há suporte a anos bissextos.
 *
 * *Nota:* implementar validação também data existente (Objeto Date).
 *
 * Parâmetros:
 *
 *   data - (string) valida string de input do formulário para datas no tipo dd/mm/aaaa.
 *
 * Retorno:
 *
 *   (bool) Verdadeiro ou Falso conforme validação.
 */
function valida_data(data) {
  var RegExPattern = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;

  if (data.match(RegExPattern))
    return true;
  else
    return false;
  } // valida_data
  
/**
 * Function: valida_email
 *
 * Valida endereço de e-mail, com base no formato de e-mail, e não na existência dele.
 *
 * Parâmetros:
 *  
 *  email - (string) endereço de e-mail a ser validado.
 *
 * Saída:
 *  
 *  (boolean) informa verdadeiro ou falso para a validação.
 *
 */
function valida_email(email){
  var RegExPattern = /^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z]*([.-]?[0-9a-zA-Z]+)*(.){1}[a-zA-Z]{2,4})+$/;
  if(email.match(RegExPattern)) return true;
  else return false;
} // valida_email

/**
 * Function: controle_caracteres
 *
 * Função que controla o número de caracteres permitidos para um campo de texto.
 * O contador de caracteres restantes é inserindo dinamicamente.
 *
 * Parâmetros:
 *
 * textarea  - (string) selector css para jQuery do elemento HTML que será controlado.
 * maximo    - [int] número máximo de caracteres. Default 1024.
 *
 * Retorno:
 *
 * (void) Esta função não retorna valores.
 *
 */
function controle_caracteres(textarea,maximo){
  if( $(textarea).length<=0 ) return;// se não existe elemento, encerra programa
  maximo = parseInt(maximo) <= 0 ? 1024 : maximo;
  controle = "#controle";

  $(textarea).after("<span id='controle' style='font-weight:bold'>"+(maximo - $(textarea).val().length)+"</span>");/*<span id='controle'></span> caracteres restantes*/
  $(controle).wrap("<div></div>");
  $(textarea+" ~ div").append(" caracteres restantes");

  $(textarea).keyup(function (){
    var texto_html = $(this).val();

    if(texto_html.length > maximo) $(this).val( texto_html.substring(0, maximo) );

    var restantes = (maximo - texto_html.length);
    $(controle).text( (restantes < 0 ? 0 : restantes) );
  });
} // controle_caracteres

/**
 * Function: redimenciona_janela
 *
 * Função para redimencionar uma janela aberta pelo sistema.
 *
 * Parâmetros:
 *
 *   w - (int) largura da janela
 *   h - (int) altura da janela
 *
 * Retortno:
 *
 * (void) Esta função não retorna valores.
 *
 */
function redimenciona_janela(W,H){
  window.resizeTo(W,H);
  var top = (screen.height-H)/2;
  var left = (screen.width-W)/2;
  window.moveTo(left,top);
  } // redimenciona_janela

/**
 * Function: atualiza_div
 *
 * Função para exibir mensagem com _fadeIn_ e _fadeOut_ em uma div.
 *
 * Parâmetros:
 *
 *   div   - (string) selector Css para a div. Veja <http://docs.jquery.com/Selectors>.
 *   msg   - (string) mensagem a ser exibida.
 *   tempo - [int] tempo em, milisegundos, para o _fadeIn_ e _fadeOut_. Default 1000.
 *
 * Retorno:
 *
 *   (void) Esta função não retorna valores.
 *
 */
function atualiza_div(div,msg,tempo){
  tempo = !tempo ? 1000 : tempo;
  $(div).fadeOut(tempo,function (){$(this).empty().append(msg).fadeIn(tempo); /*if(jQuery.isFunction('initLeiauteSite')) */initLeiauteSite(); });
} // atualiza_div

/**
 * Function: site_aviso
 *
 * *Deprecated* use <atualiza_div>. Função para exibir mensagem com _fadeIn_ e _fadeOut_ em uma div.
 *
 * Parâmetros:
 *
 * Veja <atualiza_div>.
 *
 */
function site_aviso(div,msg,tempo){
  atualiza_div(div,msg,tempo);
} // site_aviso

function submit_padrao(form_id,elm_aviso,usa_aviso_carregando,funcao){
  usa_aviso_carregando = usa_aviso_carregando ? usa_aviso_carregando : false;
  funcao = funcao ? funcao : function(){ var retorno=[];retorno['retorno']=true;return retorno; };

  if(usa_aviso_carregando === true){
    if(site_imagens["carregando"].width == 0){
      $(form_id+" input").attr("disabled","disabled");
      $(site_imagens["carregando"]).load(function (){
        $(form_id+" input").attr("disabled","").filter(":first").focus();
      });
      } // if
    else{
      $(form_id+" input").attr("disabled","").filter(":first").focus();
      }

    function aviso_carregando(){
      ativa_mensagem_carregando(elm_aviso);
      }
    }
  else{
    function aviso_carregando(){ return true; }
    }

  $(form_id).submit(function (){

    var retorno = funcao();

    $(":input[name^=f_]:not([value=])",$(this)).removeClass("erro");

    if($(":input[name^=f_][value=]",$(this)).filter(":not([class=nao-requerido])").length > 0){
      site_aviso($(elm_aviso),"<div class='site_aviso_erro'><strong>Erro:</strong> você deve preencher todos os dados do formulário!</div>");
      $(":input[name^=f_][value=]",$(this)).filter(":not([class=nao-requerido])").addClass("erro")
                                           .filter(":first").focus();
      }
    else if( retorno['retorno'] ){
      $.ajax({
        url: $(this).attr("action"),
        type: $(this).attr("method"),
        dataType: "html",
        error: function (req,tipo,obj){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled",""); });
          site_aviso($(elm_aviso),"<div class='site_aviso_erro'><strong>Erro:</strong> Ocorreu erro em sua requisição.\nOperação cancelada.</div>");
          },
        success: function (retorno){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled",""); });
          site_aviso($(elm_aviso),retorno);
          },
        data: $(this.elements).serialize(),
        async: true,
        beforeSend: function (){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled","true"); });
          aviso_carregando();
          }
        }); // ajax
      }
    else { // função personalizada retornou false
      site_aviso($(elm_aviso),"<div class='site_aviso_erro'><strong>Erro:</strong> "+retorno['erro']+"</div>");
      }

    return false;
    });
  } // submit_padrao

/**
 * fmt_bytes:
 *
 * Função que calcular aproximadamente um número de bytes em Kilo,Mega,Giga e Tera bytes.
 *
 * @param int     nro         Número a ser calculado
 * @param string  m           Indicador de estado de cálculo.
 * @param string  conver      Indicador de conversão (no momento não implementado).
 *
 * @return string Retorna o valor acompanhado da medida bytes.
 *
 *
 * @example fmt_bytes(12312);       Retorna ~13 MB
 * @example fmt_bytes(1231212423);  Retorna ~2 TB
 *
 */
function fmt_bytes(nro,m,convert){
  nro = nro ? nro : 0;
  m = m ? m.toLowerCase() : "";
  convert = convert? convert : 0; // default deve ser false; não implementado!
  var medidas = new Array("","K","M","G","T");
  var c;

  for(c in medidas){
    if(medidas[c] == m) break;
    } // for

  novo_c = parseInt(c)+1;
  novo_m = medidas[novo_c];

//   $("div").append("nro:"+nro+", m:'"+m+"' ");

  if(!medidas[novo_c] || nro.length <= 3){
    return "~"+nro+" "+m.toUpperCase()+"B";
    }
  else{
    return fmt_bytes( Math.ceil(parseInt(nro)/1024).toString() , novo_m );
    }
  } // fmt_bytes

function exibir_propriedades_obj(anyobj,elm) {        // display properties of an instance   or object
  for( var iter in anyobj ){     // iterate over all properties
    try{
      $(elm).append("<BR>Property " + iter + " is " +  anyobj[iter]);
      }
    catch(e){
      alert("Não funciona com "+iter);
      }
    }
  $(elm).append("<BR>");
  } // exibir_propriedades_obj

/**
 * verifica_formulario:
 *
 * Função que verifica os dados obrigatórios do formulário. Apenas os campos requeridos
 * devem ser passados por parâmetro.
 *
 * @uses jquery-1.2
 *
 * jQuery Selector para formulário.
 * @param string formulario
 *
 * Array associativo. O índice é jQuery Selector e o conteúdo é a mensagem de erro.
 * @param array  requerido
 *
 * Array com opções e funções de validação específico para cada campo. O índice
 * é o mesmo selector do registro em 'requerido'. O atributo 'funcao' é a função
 * para validação, aceitando apenas um parâmetro que é o valor do campo vindo do
 * formulário. O segundo parametro é 'msg' com a mensagem de erro.
 * @param array  op
 *
 * Informa se deve submeter o formulário através de ajax. Default é false.
 * @param bool ajax
 *
 * Seletor do elemento HTML container da mensagem de erro e sucesso.
 * @param string elmaviso
 *
 * @return array      Retorna um array associativo com um índice 'retorno' com
 *                    valor boolean da validação dos dados e 'erro' com a mensagem
 *                    de erro.
 *
 *
 * Exemplo de uso (supondo-se que os parâmetros 'dados_requeridos' e 'opcoes' estejam
 * devidamente preenchidos):
 *
 * 1) caso parâmetro ajax seja 'true' OU
 *    ajax seja 'false' e elmaviso é um container (string não vazia):
 *
 *     $("selector para form").submit(function (){
 *       return verifica_formulario("selector para form",dados_requeridos,opcoes,true,"seletor para div de aviso");
 *     });
 *
 *
 * 2) caso parâmetro ajax seja 'false' e elmaviso é uma string vazia:
 *
 *     $("selector para form").submit(function (){
 *       var retorno = verifica_formulario("selector para form",requisitos,opcoes);
 *       if(!retorno['retorno']) {
 *         site_aviso("seletor para div de aviso","<div class='site_aviso_erro'>"+retorno['erro']+"</div>");
 *         return false;
 *         }
 *       else {
 *         return true;
 *         }
 *     });
 *
 */
function verifica_formulario(formulario,requerido,op,ajax,elmaviso){
  ajax = (ajax ? true : false);
  elmaviso = (elmaviso ? elmaviso : false);

  if(!op) op = [[]];
  var erro = 0;
  var msg_erro = '';
  var valor;
  var retorno = [];

  for(var nome_campo in requerido){
    var valor = $(formulario+" "+nome_campo).val();
    if(!valor){
      erro++;
      msg_erro = msg_erro + requerido[nome_campo];
      }
    else
    // função para verificação
    if(op[nome_campo] && $.isFunction(op[nome_campo].funcao)){
      if(!op[nome_campo].funcao(valor)){
        erro++;
        msg_erro = msg_erro + op[nome_campo].msg;
        }
      }
    } // for

  if(erro > 0){
    msg_erro = (ajax ? "<strong>Erro:</strong> ":"")+"Não é possível enviar dados do formulário pois ocorreu um ou mais "+
    "erros no preenchimento:"+ (elmaviso?'<br /><br />':'\n\n') + msg_erro;
    retorno["erro"] = msg_erro;
    retorno["retorno"] = false;
    }
  else{
    retorno["erro"] = "";
    retorno["retorno"] = true;
    }

  if(ajax){
    if(retorno["retorno"]){
      $.ajax({
        url: $(formulario).attr("action"),
        type: $(formulario).attr("method"),
        dataType: "html",
        error: function (req,tipo,obj){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled",""); });
          site_aviso($(elmaviso),"<div class='site_aviso_erro'><strong>Erro:</strong> Ocorreu erro em sua requisição.\nOperação cancelada.</div>");
          },
        success: function (retorno,textStatus){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled",""); });
          site_aviso($(elmaviso),retorno);
          },
        data: $(formulario+" :input").serialize(),
        async: true,
        beforeSend: function (){
          $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled","true"); });
          ativa_mensagem_carregando(elmaviso);
          }
      }); // ajax
      }
    else{
      site_aviso($(elmaviso),"<div class='site_aviso_erro'>"+retorno["erro"]+"</div>");
      }
    return false;
    }
  else {

    if(elmaviso && retorno['retorno'] === false){
      site_aviso($(elmaviso),"<div class='site_aviso_erro'>"+retorno["erro"]+"</div>");
      }
    else if(elmaviso && retorno['retorno'] === true){
      ativa_mensagem_carregando(elmaviso);
      }

    if(retorno['retorno'] === true){ // não permite que os botões sejam pressionados mais de uma vez.
      $(":submit,:button,:reset",this).each(function (){ $(this).attr("disabled","true"); });
      }

    if(elmaviso)
      return retorno['retorno'];
    else
      return retorno;
    }
  } // verifica_formulario

/**
 * Função auxiliar para exibir mensagem de carregando dados.
 *
 * Este parâmetro é o seletor do elemento container para a mensagem.
 * @param string elm_aviso
 *
 * @return void
 *
 */
function ativa_mensagem_carregando(elm_aviso) {
  $(elm_aviso).html("<div class='site_avisos-cab1'><div class='site_avisos-cab2'></div></div><div class='site_avisos leiauteOK'><table border='0'><tr><td><img align='center'></td><td>Carregando... </td></tr></table></div><div class='site_avisos-rodape1'><div class='site_avisos-rodape2'></div></div>");
  $(elm_aviso+" img").attr({
    src: site_imagens["carregando"].src,
    width: site_imagens["carregando"].width,
    height: site_imagens["carregando"].height
    });
  $(elm_aviso).show(1);
  } // ativa_mensagem_carregando

function preload_imagens(lista){
  var img = []
  for(i in lista){
    img[i] = new Image;
    img[i].src = lista[i]
    img[i].alt = i
    }
  return img;
  } // preload_imagens

function preload_imagens_menu(lista){
  var nlista = []
  var path,antes,depois;
  for(i in lista){
    path = lista[i].split("\.");
    antes = path.slice(0,-1).join(".");
    depois = path.slice(-1).join(".");
    nlista[i+"-up"] = lista[i].replace(antes+".",antes+"-up.");
    nlista[i+"-over"] = lista[i].replace(antes+".",antes+"-over.");
    }
  return preload_imagens(nlista);
  } // preload_imagens_menu

function criar_menu_js(container,imagens_lista){
  var nome,id,link_href;
  var botoes = [];

  var hints = [];
  var nlista = [];

  for(i in imagens_lista){
    if(imagens_lista[i][0]){
      nlista[i] = imagens_lista[i][0];
      hints[i] = imagens_lista[i][1];
      }
    else{
      break;
      }
    }

  var imagens = preload_imagens_menu(nlista[i] ? nlista : imagens_lista);

  // carrega nomes de botões carregados
  for(i in imagens){
    $(imagens[i]).load(function (){
      var indice = $(this).attr("alt");
      var n = indice.replace(/\-(up|over)/,"");
      if(indice.indexOf("-up") > 0) { botoes.push(n); }

      for(ii in botoes){

        $("a[name="+botoes[ii]+"]").css({
            "backgroundImage": "url("+imagens[botoes[ii]+"-up"].src+")",
            width: imagens[botoes[ii]+"-up"].width,
            height: imagens[botoes[ii]+"-up"].height,
            display: "block",
            float:"left"
          }).attr({
            title: hints[botoes[ii]]
          });

        $("a[name="+botoes[ii]+"]").hover(function (){
            var n = $(this).attr("name");
            $(this).src = imagens[n+"-over"].src;
            $(this).css({
              "backgroundImage": "url("+imagens[n+"-over"].src+")",
              width:imagens[n+"-over"].width,
              height:imagens[n+"-over"].height
              });
          }, function (){
            var n = $(this).attr("name");
            $(this).css({
              "backgroundImage": "url("+imagens[n+"-up"].src+")",
              width:imagens[n+"-up"].width,
              height:imagens[n+"-up"].height
              });
          });

        } // for botoes

    }); // imagens load
    } // for imagens

  } // criar_menu_js

function valida_cep(cep){
  var regex = new RegExp("^[0-9]{8}$");
  return regex.test(cep);
  } // valida_cep

function dados_transporte(formulario,metodo){
  var url = $(formulario).attr("action");
  var query_string = url.substr(url.indexOf("?")+1);
  var params = query_string.split("&");
  var nparams,nurl;
  nparams = [];
  for(var i in params){
    nparams.push(metodo.toUpperCase()+"__"+params[i].replace(metodo.toUpperCase()+"__",""));
    }
  nurl = url.substr(0,url.indexOf("?")+1)+nparams.join("&");
  $(formulario).attr("action",nurl);
  } // dados_transporte
  
 /**
  * Function: carregaPagina
  *   Carrega o conteúdo de uma página dinamicamente, podendo personalizar funções
  *   de sucesso e ao enviar requisição ajax.
  *
  * Parâmetros:
  *   purl    - (string) Url para carregar a página dinamicamente. Pode ser enviados dados através deste endereço.
  *   confs   - (obj) Objeto de configuração javascript. As configurações aceitáveis são
  *
  *  - _divAviso_  - (string) selector jquery para a div para exibir mensagen de "carregando..."
  *  - _msg_       - (string) mensagem personalizada. Se não informada, será usada "Carregando...".
  *  - _sucesso_   - (função) função javascript quando o conteúdo da página for retornado. A função deve receber um parâmetro, que serão os dados html/javascritps retornados.
  *  - _aoEnviar_  - (função) função para ser ativada *antes* do envio de requisição ajax.
  *
  * Incompatibilidade de Argumentos:
  *   Quando a configuração _aoEnviar_ estiver sendo usada, as configurações _divAviso_
  *   e _msg_ não serão usados, pois servem para exibir mensagem padrão de "carregando".
  *   Tome cuidado nas configurações, pois se nem _divAviso_ nem _aoEnviar_ forem 
  *   passados, a função vai gerar um erro.
  *
  * Retorna:
  *   Não retorna valores.
  *
  * Exemplo de uso:
  *
  * (code)
      carregaPagina("index.php?pg=exemplo&txt=99",
                    { divAviso: "#aviso",
                      msg: "Carregando dados...",
                      sucesso: function (retorno){
                        alert('Dados recuperados!');
                      },
                      aoEnviar: function (){
                        $('#aviso').prepend( '<div><h1>Antes de enviar...</h1></div>' );
                      }
                   );
  * (end)
  *
  */
function carregaPagina(purl,confs){
  var elmaviso = typeof confs.divAviso != 'undefined' ? confs.divAviso : false;
  var msgCarregando = typeof confs.msg != 'undefined' ? confs.msg : "Carregando...";
  var fSucesso = typeof confs.sucesso != 'undefined' ? confs.sucesso : false;
  var fBefore = typeof confs.aoEnviar != 'undefined' ? confs.aoEnviar : false;
  
  if(!elmaviso && !$.isFunction(fBefore)){
    alert("Há um erro na configuração de carregamento dinâmico da página!\nVerifique as configurações de mensagens definidas para a função.");
    return;
  }
  
  $.ajax({
    url: purl,
    type: "get",
    dataType: "html",
    error: function (req,tipo,obj){
      site_aviso($(elmaviso),"<div class='site_aviso_erro'><strong>Erro:</strong> Ocorreu erro em sua requisição.\nOperação cancelada.</div>");
      },
    success: function (retorno){
      if( $.isFunction(fSucesso) ){
        // retira mensagem de carregando
        if( !$.isFunction(fBefore) ) { $(elmaviso).html("");}
        fSucesso(retorno);
      } else {
        site_aviso($(elmaviso),retorno);
      }
    },
    //data: $(formulario+" :input").serialize(),
    async: true,
    beforeSend: function (){
      if( $.isFunction(fBefore) ){
        fBefore();
      } else {
        ativa_mensagem_carregando(elmaviso,msgCarregando); 
      }
    }
  }); // ajax  
} // carregaPagina

 
/*
 * liveBox é um objeto adaptado de lightBox.
 *
 */
$.fn.liveBox = function(){

  // cria a interface para receber a página html
  if( $("#liveBox-container").length <=0 )
    $('body').append('<div id="liveBox-container" style="display:none"><a name="box"></a><div id="liveBox-cont"><img src="Imagens/ajax-loader-azul.gif"/></div><div id="liveBox-foot"><a href="" title="Fechar"><img src="Imagens/icones/cross.png"/></a></div></div>');
  var h = $("#liveBox-container").height();
  var w = $("#liveBox-container").width();
  var jq = this;
  var top = ($(window).height()-h)/2;
  var left = ($(window).width()-w)/2;
  $("#liveBox-container").css({
    position: 'absolute',
    top: top+'px',
    left: left+'px'
  });
  $(this).attr('data',$(this).attr("href")).attr("href","javascript:void(0)");
  $("#liveBox-foot a:first").click(function (){
    $('#liveBox-container').hide('slow');
    return false;
  });

  this.unbind('click').click(function (){
      $.ajax({
        url: $(this).attr("data"),
        type: "get",
        dataType: "html",
        error: function (req,tipo,obj){
          alert("Erro: Ocorreu erro em sua requisição.\nOperação cancelada.");
          },
        success: function (retorno){
          $("#liveBox-cont").fadeOut('slow',function (){
            $(this).html(retorno).fadeIn('slow');
          });
          $('#liveBox-container').show(500,function (){  });
        },
        async: true,
        beforeSend: function (){
          //ajax-loader.gif
          $('#liveBox-cont:eq(0)').html("<img src='Imagens/ajax-loader-azul.gif'/>"); 
          $('#liveBox-container').show('slow',function (){
            window.scrollTo(0,0);
          });
        }
      }); // ajax
    return false;
  });
}; // liveBox


/**
 * Function: forcarCasasDecimais
 *
 *   Força número de casas decimais de um número, indicando número de casas.
 *
 * Parâmetros:
 *
 *   n - (int || float) Número a ser formatado. Deve estar em notação americana (ponto em separador decimal, se houver).
 *   c - [int] Número de casas decimais que se quer formatar.
 *
 * Retorno:
 *
 *   (string) Retorna o número em notação americana, com _c_ casas decimais.
 *
 */
function forcarCasasDecimais(n,c){
  c = c ? c : 2; // valor defautl;
  n = String( roundNumber(n,c) )
  var casas='';
  var decimais= /\.[0-9]{1,2}/;
  var digitos = /\.\d*[0-9]/;
  var rg = decimais.exec(n);
  // forçar zeros à direita
  var teste = (rg ? String(rg).substr(1).length : 0);
  if(teste < c){
    for(x=teste; x<c; x++){
      casas = casas+'0';
      }
    }
  var valor = n.replace(digitos,"") + (rg ? rg : ".") + casas;
  return valor;
  } // forcarCasasDecimais

/**
 * Function: fmt_moeda()
 *
 *   Formata um número para formato desejado (_br_ ou _us_).
 *
 * Parâmetros:
 *
 *   n - (int || float) Número a ser formatado
 *   m - [string] Nome do formato. Atualmente é suportado _br_ e _us_.
 *
 * Retorno:
 *
 *   (string) Número no formato desejado, com 2 casas decimais.
 *
 */
function fmt_moeda(n,m){
  m = m ? m : 'br'; // formato default
  if(String(n).match(/\,/)) n = String(n).replace(/\,/,'.');
  else n = n ? String(n) : '0';
  var pesq,subst='';
  switch(m){
  default:
  case 'br':
    pesq = /\./;
    subst = ',';
    break;
  case 'us':
    pesq = /\,/;
    subst = '.';
    break;
    }
  return forcarCasasDecimais(n,2).replace(pesq,subst);
  } // fmt_moeda
  
function roundNumber(num, dec) {
  var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
  return result;
}