
var settiConfirmReturn = "teste";

function isMicrosoftIE() {
    return (navigator.appName.indexOf("Microsoft") != -1);
}

function settiAlert(mensagem){
   if (typeof Ext == 'undefined'){
         alert(mensagem);
    }
   else {
         Ext.MessageBox.alert('Alerta', mensagem);
    }
}

//Mensagem de espera da biblioteca Ext.
function extWaitMsg(msg, hide, title) {
  if (typeof Ext != 'undefined'){
    if(hide) {
      Ext.Msg.hide();
      return;
    }

    Ext.Msg.wait(msg, title);
  }
}

//[Robertson][04/01/2007][OS 5721-002][adicionado parametros para dimencionar o popup]
function Popup(mypage, w, h, t, s, l, sb, m, r, st) {
  var winl       = (screen.width - w) / 2;
  var wint       = (screen.height - h) / 2;
  var toolbar    = 0; if(t) {toolbar=t;}
  var scrollbars = 1; if(s) {scrollbars=s;}
  var location   = 0; if(l) {location=l;}
  var statusbar  = 0; if(sb){statusbar=sb;}
  var menubar    = 0; if(m) {menubar=m;}
  var resizable  = 1; if(r) {resizable=r;}
  var status     = 1; if(st){status=st;}
  var status     = 1; if(st){status=st;}

  if (typeof Ext == 'undefined'){
     winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',toolbar='+toolbar+',scrollbars='+scrollbars+',location='+location+',statusbar='+statusbar+',menubar='+menubar+',resizable='+resizable+', status='+status+'';
     win = window.open(mypage, '_blank', winprops)
     if (parseInt(navigator.appVersion) >= 4){
        win.window.focus();
         }
     }
  else {
    //Para as janelas do Ext, o parâmetro "t" corresponde ao título da janela.
    extWindowUrl((typeof t == 'undefined' ? 'WebAdvance 3.0 - Window' : t),w,h,mypage);
  }
}

function extWindowUrl(title,w,h,mypage,reload){

  if (typeof reload == 'undefined'){
    reload = false;
  }

  extWindow(title,w,(h+20),'<iframe frameborder=0 width="100%"  height="100%" src="'+mypage+'"></iframe>',reload);
}

function extWindow(title,w,h,html,reload){

  if (typeof reload == 'undefined'){
    reload = false;
  }

  Ext.onReady(function(){
    var ex_window = new Ext.Window({
      id: 'myExtWindow',
      layout:'fit',
      width: w,
      height: h,
      title: title,
      closeAction:'hide',
      plain: true,
      renderTo: document.body,
      html: html,
      buttons: [{
        text: 'Fechar',
        handler: function(){
          ex_window.hide();

          if (reload) {
            window.location.reload(false);
          }
        }
      }],
      listeners: {
        //Destrói a janela quando o botão fechar ou o botão 'X' forem clicados. [JEAN][18/07/2008][6315-001]
        'beforehide': function(wind) {
          ex_window.destroy();
        }
      }
    });

    if (ex_window) {
      ex_window.show();
    }
  });
}

/*[ROSE][18/06/2008][6376 - 001]Função para abrir uma janela do Ext com dados de um campo
blob.*/
function extWindowBlobField(title,w,h,tableBlob,fieldBlob,pKey,pKeyValue){
  Ext.onReady(function(){
    var ex_window = new Ext.Window({
      id: 'myExtWindowBlob',
      layout:'fit',
      width: w,
      height: 'auto',
      title: title,
      closeAction:'hide',
      plain: true,
      renderTo: document.body,

      /*Carrega automaticamente as informações do campo a partir da página da URL*/
      autoLoad : {
        url: getPageRoot()+'system/framework/util/get_blobfield.php',
        params: 'table='+tableBlob+'&field='+fieldBlob+'&key='+pKey+'&key_value='+pKeyValue,
        method: 'GET'
      },

      buttons: [{
        text: 'Fechar',
        handler: function(){
          ex_window.hide();
          ex_window.destroy();
        }
      }]
    });

    if (ex_window) {
      ex_window.show();
    }
  });
}

//Função para fechar a janela Ext por fora da própria janela. [JEAN][11/04/2008]
function extWindowClose(){
  theWindow = window.parent.Ext.getCmp('myExtWindow');

  /**
   * Removido o destroy, pois já é executado no evento 'beforehide' da ExtWindow.
   * @author: JEAN
   * @date: 07/08/2008
   * @OS: 6397-024
   * @Inspeção: Tuane em 07/08/2008
   */
  if(theWindow)
    theWindow.hide();
}

function confirmDelete(){
  return settiConfirm('Deseja excluir este registro?');
}

function settiConfirm(mensagem){
  return confirm(mensagem);
}


function getRCode(event){
        return (!isMicrosoftIE()) ? event.which : event.keyCode;
 }

 function ToUpperCase(field,event){
     var rcode = getRCode(event);
     if (rcode > 92 ) // letra maior que "a"
        {
          var key=String.fromCharCode(rcode);
          field.value = field.value.toUpperCase()+key.toUpperCase();
          return false;
        }
      return true;
}

function MM_findObj(n, d) {
    var p,i,x;
  if(!d)
      d=document;
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
      d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
  }
   if(!(x=d[n])&&d.all)
      x=d.all[n];
  for (i=0; !x && i<d.forms.length;i++)
      x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
      x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById)
      x=d.getElementById(n);
  return x;
}

function escreveLayer(tipo,ndiv){
  vbrowser=(document.getElementById)?0:((document.All)?0:1);
  if(vbrowser==0){
      MM_findObj(ndiv).innerHTML=tipo;
  }
  else{
      MM_findObj(ndiv).document.open();
      MM_findObj(ndiv).document.write(tipo);
      MM_findObj(ndiv).document.close();
  }
}

function getMedias(total){
  for (var i=0;i<total;i++)
  {

     var n1 = document.getElementById('n1'+i).value;
     var n2 = document.getElementById('n2'+i).value;
     var n3 = document.getElementById('n3'+i).value;
     var n4 = document.getElementById('n4'+i).value;
     var media = 0;
     var divisor = 0;

     n1 = n1.replace(",",".");
     n2 = n2.replace(",",".");
     n3 = n3.replace(",",".");
     n4 = n4.replace(",",".");

  if(n1!= ''){
      divisor++;
      media += parseFloat(n1);
    }

    if(n2!= ''){
      divisor++;
      media += parseFloat(n2);
    }

    if(n3!= ''){
      divisor++;
      media += parseFloat(n3);
    }

    if(n4!= ''){
      divisor++;
      media += parseFloat(n4);
    }

   if(media != 0){
   var escreve = media/divisor;
   document.getElementById('md'+i).value = escreve;
   }
  }
}


function verticalSum(rows,col,field,local){
    var total = 0;

    for(var i=0;i<=rows;i++){
       var a_field = document.getElementById(i+col+field).value;

       if(a_field == '')
          a_field = '0';

          a_field = a_field.replace(",",".");

         total = total + parseFloat(a_field);
          document.getElementById(local+col).value = total;
    }
}


function horizontalSum(cols,row,field,local){
 var total = 0;
  for(var i=0;i<cols;i++){
     var a_field = document.getElementById(row+i+field).value;

     if(a_field == '')
        a_field = '0';

     a_field = a_field.replace(",",".");

     total = total + parseFloat(a_field);
     document.getElementById(local+row).value = total;
  }
}


function startRecord(id){
  var object = document.getElementById(id);
  object.style.display = '';

}

function intInput(valor,maxValue,id){

  var object = document.getElementById(id);

  if(parseFloat(valor) > maxValue){
     settiAlert('tamanho máximo permitido é: '+maxValue);
     object.value = '';
     return false;
  }

  if(!parseInt(valor) && valor!=''){
     settiAlert('Por favor insira um número inteiro');
     object.value = '';
     return false;
  }
}


function floatInput(valor,maxValue,id){

  var object = document.getElementById(id);

  if(parseFloat(valor) > maxValue ){
     settiAlert('tamanho máximo permitido é: '+maxValue);
     object.value = 0;
     stop;
  }

  if(!parseFloat(valor) && valor != 0){
     settiAlert('Por favor insira um número real');
     object.value = 0;
     return false;
  }
  return true;
}

function somageral(rows,cols,vertical,horizontal,field){

  for(var i=0;i<rows;i++){
   var hfield = document.getElementById(horizontal+i);
   var totH   = 0;

   for(var x=0;x<cols;x++){
      var c_field = document.getElementById(i+''+x+field).value;

      if(!c_field)
         c_field = 0;

      totH = totH + parseFloat(c_field);
     }
    hfield.value = totH;
  }

 for(var i=0;i<cols;i++){
   var totV = 0;
   for(var x=0;x<rows;x++){
     var vfield  = document.getElementById(vertical+i);
     var c_field = document.getElementById(x+''+i+field).value;

      if(!c_field)
         c_field = 0;

     totV += parseFloat(c_field);
   }
   vfield.value = totV;
 }
}

/*******************************

Fernando Andreacci
Transfere o campo de selecionado de um <select> para outro

********************************/
function addItem(campoOrig,campoDest)
{

    var Orig = document.getElementById(campoOrig);
    var Dest = document.getElementById(campoDest);

  x = Orig.value;

  if (x == "")
  {
    settiAlert('Selecione um item!');
  }

  ListaDisponiveis = Orig;
  ListaAcordo      = Dest;

  var len = ListaAcordo.length;


  for(var i = 0; i < ListaDisponiveis.length; i++)
  {
    if ((ListaDisponiveis.options[i] != null) &&
        (ListaDisponiveis.options[i].selected))
    {

      for(var x=0; x < ListaAcordo.length; x++)
      {
        if(ListaDisponiveis.options[i].value == ListaAcordo.options[x].value)
        {
          settiAlert('Já esta sendo utilizado');
        return false;
        }

      }
      ListaAcordo.options[len] = new Option(ListaDisponiveis.options[i].text, ListaDisponiveis.options[i].value);
      len++;
      ListaDisponiveis.options[i] = null;
      i--;
    }
  }
}

/*******************************

Fernando Andreacci
Retorna todos os elementos de <select> separados por ;

********************************/
function getDropDownStr(campo)
{
  string = document.getElementById(campo);

  var i;
  var str;
  var contador = 0;
  var len = string.length;

  for(var count = 0; count < len; count++)
  {
    i = string.options[count].text;
    contador = contador + 1;
    if (contador > 1)
    {
      str = str + ';' + i ;
    } else {
      str = i;
    }
  }
  str = str + ';';

 return str;
}
/*******************************

Fernando Andreacci
limpa os elementos de um <select>

********************************/

function clearSelect(campo)
{
  document.getElementById(campo).options.length = 0;
  return false;
}
/*******************************

Fernando Andreacci
seleciona todos os elementos de um <select>;

********************************/
function selectAll(campo)
{
    var obj = document.getElementById(campo);
    var len = obj.length;
  for(var count = 0; count < len; count++)
    {
    obj.options[count].selected = true;
  }
}
/**
* Substituto do javascript:PopUp
* razao: para poder atribuir qual janela abriu a nova janela(filha popup),
* podendo assim ter acesso a janela pai.
* Fernando Andreacci 23/01/2006
**/

function open_win(url,x,y,usarExt){
    if (usarExt){
     Popup(url,x,y);
  }
  else {
       url = window.open(""+ url +"","_blank","toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, copyhistory=yes, width="+ x +", height="+ y +"");
  }
}

function instantUpdate(codDatabase,frase,$sql,email)
{
  var campo = "";
  var filter  = /^[a-zA-Z0-9]([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  campo = prompt(frase,"");

  if(email)
  {
    while(campo == "" || !filter.test(campo))
   {
        campo = prompt("Informações incorretas",campo);
   }
  }
  else
  {
     while(campo == "")
     {
       campo = prompt("informações incorretas","");
     }
  }
   xajax_internalInstantUpdateField(codDatabase,$sql,campo);
}

function serialize(a)
{
  var counter = 0;
  var vardef = "";
  for (var key in a)
  {
    if (key != "reduce" && key !="last" && key !="toArgString")
    {
      counter = counter +1;
      var length = a[key].length;
      if (length == "undefined")
      length = 1;
      vardef = vardef + "s:" + key.length + ":\"" + key + "\";" + "s:" + length + ":\"" + a[key] + "\";";
    }
  }
  var serialized = "a:" + counter + ":{" + vardef + "}";
  return serialized;
}

/**
* group serialize function
* this function helps for serializing variable data
* and to avoid extra hassle
*
* @return 	string
* @param 	string [variable length]
*/
function group_serialize()
{
  arg_counter = 0;
  arg_length =arguments.length;
  data = new Array();
  while(true)
  {
    var temp = arguments[arg_counter];
    data[temp] = document.getElementById(temp).value
    arg_counter=arg_counter+1;
    if (arg_counter==arg_length) break;
  }
  serialized = serialize(data);
  return serialized;
}

function ge(idx)
{
  return document.getElementById(idx);
}

function isValidNumber(numval)
{
  if (numval==""){return false;}
  var myRegExp = new RegExp("^[/+|/-]?[0-9]*[/.]?[0-9]*$");
  return myRegExp.test(numval);
}

/**
 * Author Fernando Andreacci
 * OS 5175-034
 * Valida se a data do calendário é menor que a data atual
*/

function DateVigenciaBlock(calendar) {

    if (calendar.dateClicked) {
      var y = calendar.date.getFullYear();
      var m = calendar.date.getMonth();
      var d = calendar.date.getDate();

      var date1 = new Date(y, m, d);
      var date2 = new Date();

      var y1 = date1.getFullYear();
      var m1 = date1.getMonth();
      var d1 = date1.getDay();

      var y2 = date2.getFullYear();
      var m2 = date2.getMonth();
      var d2 = date2.getDay();

      //se não for o dia atual e a data1 não for menor que a data 2
      if( !((y1 == y2) && (m1 == m2) && (d1 == d2)) && (date1 < date2) ) {
      settiAlert("A data não pode ser menor que a data atual");
      calendar.params.inputField.value = "";
    }
   }
}

//[Robertson][02/01/2007][OS 5721-002][Função que exibe uma messagem "Aguarde,Buscando cidades",para aguardar carregar o campo]
function aguardar(){
   document.getElementById("spinner").style.display = "";
   setTimeout("document.getElementById(\"spinner\").style.display = \"none\";", 6000);
}
/*
  [Robertson][04/01/2007][OS 5721-002][Função que redireciona a pagina]
  exemplo:

  $url = html_location()."page.php";
  $parametros = "array()"  ou  "['banana','pera','maçã']"  com os parâmetros passado na url.
  $popup = "array()"  ou  "['banana','pera','maçã']" com os parâmetros do popup, ou simplismente "true"

  redirecionar($url,[$parametros],[$popup])
*/

function redirecionar(url,parametros,popup){
  var url      = url;
  var width    = 750;
  var height   = 550;
  var toolbar    = '0';
  var scrollbars = '1';
  var location   = '0';
  var statusbar  = '0';
  var menubar    = '0';
  var resizable  = '1';
  var status     = '1';
  var controle   = false;
  var j = 0; var param = '';

  for (var i = 0 ; i < parametros.length; i++){
    if(i == j){
      param = param+'&'+parametros[i]+'=';
    } else {
      if(parametros[i]){
        param = param+parametros[i];
      }
      j=i+1;
    }
  }

  if(popup && popup != false){
    controle=true;

    if(popup != true){

      for(var x = 0 ; x < popup.length; x++){
        switch(popup[x]){
          case 'width'     : width      = popup[x+1]; x++; break
          case 'height'    : height     = popup[x+1]; x++; break
          case 'toolbar'   : toolbar    = popup[x+1]; x++; break
          case 'scrollbars': scrollbars = popup[x+1]; x++; break
          case 'location'  : location   = popup[x+1]; x++; break
          case 'statusbar' : statusbar  = popup[x+1]; x++; break
          case 'menubar'   : menubar    = popup[x+1]; x++; break
          case 'resizable' : resizable  = popup[x+1]; x++; break
          case 'status'    : status     = popup[x+1]; x++; break
        }
      }
    }
  }

  if(controle==true) {
    Popup(url+param,width,height,toolbar,scrollbars,location,statusbar,menubar,resizable,status);
  } else {
    window.location=url+param;
  }
}

 /**
 * Author Fernando Andreacci
 * OS 5218 - 023
 * Objeto para executar os scripts da elemento div selecionando pelo usuário na procura
*/
var eval_from_auto_completer = {
  eval : function(el1,el2) {
     el2.innerHTML.evalScripts();
     //[Fernando] [5170-001] [19/09/2006] Remove o contéudo da tag de script que aparece no FF
     //Adicionado comparaçao caixa baixa, evita bug IE
     el1.value = el2.innerHTML.substr(0,el2.innerHTML.toLowerCase().indexOf("<script>"));
  }
}

/*
 * Rotina para criar máscaras
 *
 * Como criar máscaras
 *
 * Regras padrões
 *    a = A-Z e 0-9
 *    A = A-Z, acentos e 0-9
 *    9 = 0-9
 *    C = A-Z e acentos
 *    c = A-Z
 *    * = qualquer coisa
 *
 *    E = (Except) exceção
 *    O = (Only) somente
 *
 * ** Máscara especial "regra^exceções": esse tipo de máscara é composto por 2 partes,
 *    separadas por "^", o lado esquerdo especifica a regra e o direito as exceções para a regra selecionada.
 *    Exemplo:
 *    9^abc = a regra é aceitar somente números "9" e a exceção são os caracteres a, b e c
 *    c^123 = aceita somente caracteres de a-z e a exceção são os números 1, 2 e 3
 *
 * ** Uso das regras especiais: ela é semelhante a máscara especial, porém o lado esquerdo
 *    tem um significado diferente, podendo ser "E" (qualquer coisa, exceto...) ou "O" (somente...)
 *    Exemplo:
 *    E^abc: aceita qualquer coisa, menos a, b e c
 *    O^123: só permite os caracteres 1, 2 e 3
 *
*/

addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

MaskInput = function(f, m){ //v1.0
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
         addEvent(f, i, mask);
};

/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
  var str = this;
  var dif = pSize - str.length;
  var ch = String(pCharPad).charAt(0);
  for (; dif>0; dif--) str = ch + str;
  return (str);
} //String.lpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
  return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim

/**
 * Verifica se o conteúdo da string está no formato JSON.
 * @date 03/07/2009
 * @author Jean
 * @return {Boolean}
 */
String.prototype.isJSON = function() {
  var str = this;
  if (str.trim() == "")
    return false;
  str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
  return (/^[,:(){}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
}


/*
 * author - Daniel Maia Menescal
 * funções de um  box flutuante temporizadora
 * Esta função deve ser utilizada no programa
 * framework/util/model_report.php  na
 * função messageBoxVoid().
 */
function tempoFecha(ID, tempo){
     tempo = Math.ceil(tempo);
     setTimeout("document.getElementById('"+ID+"').style.visibility='hidden'", tempo);
}
function ApertaFecha(ID){
     if(ID!="this"){
     document.getElementById(ID).style.visibility="hidden";
   }else{
     this.style.visibility="hidden";
   }
}

/*
 * author - Daniel Maia Menescal
 * função que ao clicar bt direito chama a função tempoFecha
 * framework/util/model_report.php  na
 * função messageBoxPrint().
 */
function delayPrintBox(ID, tempo){
  function click(e){
    if(document.all){
      if(event.button == 2){
          tempoFecha(ID, tempo);
          ApertaFecha(ID);
        return false;
      }
    }
    if(document.getElementById&&!document.all){
      if(e.which==2||e.which==3){
        tempoFecha(ID, tempo);
        ApertaFecha(ID);
        return false;
      }
    }
  }
  document.onmousedown=click;
}

/*
 * author - Daniel Maia Menescal
 * função que ao clicar bt direito imprime ou cancela
 * framework/util/model_report.php  na
 * função boxPrint().
 */
function printBox(){
    function boxMessage(){
    m = settiConfirm('Para imprimir aperte o botão "OK"')
    if(m == true){
      print();
    }
  }
  function click(e){
    if(document.all){
      if(event.button == 2){
          boxMessage();
        return false;
      }
    }
    if(document.getElementById&&!document.all){
      if(e.which==2||e.which==3){
        boxMessage();
        return false;
      }
    }
  }
  document.onmousedown=click;
}

/************************************************************************
 * @since     - 16/01/2007
 * @author    - Daniel Maia menescal - OS 5440-001
 * @name      - fetchbyid: Importante para fazer com que as funções
 *              document dos elementos funcione no firefox e no IE.
 ***********************************************************************/
function fetchbyid(id){
    var id = id;
    if(id != ''){
     return (document.getElementById)?document.getElementById(id):document.all[id];
  }else{
       return (document.getElementById)?document.getElementById():document.all;
  }
}

//[Daniel - 02/01/2007][OS 5440-001 Desabilita tecla F5]
function disableF5(e){
    if(document.getElementById){
     document.onkeydown = function (){
        var key_f5 = 116;
        if (!e) e = window.event;
        if(key_f5==e.keyCode){
           e.keyCode=0;
           settiAlert("Operação desabilitada!");
        }
        return false;
     }
  }
}
//[Daniel - 05/01/2007][OS 5440-001 fecha a tela e retorna uma mensagem caso exista]
//[Robertson][20/02/2007][OS 5695-008][Acrescentar o parametro reload para atualizar a pagina].
function closeWindow(msg,reload,tempo){
  var msg = msg;
  var reload = reload;
  if(msg != ""){
     settiAlert(msg);
  }
  if(reload == true && tempo != null){
      window.opener.location.reload(false);
      setTimeout(window.close(),tempo);
  }else{
      window.close();
  }
  if(reload == true && tempo == NULL){
      window.opener.location.reload(false);
      setTimeout(window.close(),1000);
  }else{
      window.close();
  }
}

//[Robertson][27/02/2007][OS 5796-002][Função para limpar o valor e deichar somente os valores válidos].
function Limpar_valor(valor, validos) {
   var result = "";
   var aux;
   for (var i=0; i < valor.length; i++) {
      aux = validos.indexOf(valor.substring(i, i+1));
      if (aux>=0) {
         result += aux;
      }
   }
   return result;
}
/************************************************************************
* @data     - 27/02/2007
* @author    - Robertson Mello
* @name      - Format_number: Formata o valor em "000.000.000,00" ou acrescenta ",00" no final.
***********************************************************************/
//[Robertson][27/02/2007][OS 5796-002][Função para acrescentar ",00" e formatar o valor].
function Format_number(nm_campo,value)
{
   var controle;
   var val_real;
   for (var i=0; i < value.length; i++) {
      val_real = value.substring( i, i+1 );
      if(val_real == ","){
         controle = true;
      }
   }
   var valor = Limpar_valor(value,"0123456789");
   tam = valor.length;
   if(tam > 11){
      settiAlert('O máximo estabelecido é 100.000.000,00.');
      document.getElementById(nm_campo).value = "";
   }else{
      if(controle){
         document.getElementById(nm_campo).value = value;
      }else{
         if ( tam <= 3 ){document.getElementById(nm_campo).value = valor + ",00";}
         if ((tam > 3) && (tam <= 5) ){document.getElementById(nm_campo).value = valor.substr( 0, tam - 3 ) + "." + valor.substr( tam - 3, tam ) + ",00";}
         if ( (tam == 6)){document.getElementById(nm_campo).value = valor.substr( 0, tam - 3 ) + "." + valor.substr( tam - 3, 3 )+ ",00";}
         if ( (tam >= 7) && (tam <= 8) ){document.getElementById(nm_campo).value = valor.substr( 0, tam - 6 ) + "." + valor.substr( tam - 6, 3 )+ "," + valor.substr( tam - 3, tam) + ",00";}
         if ( (tam >= 9) && (tam <= 11) ){document.getElementById(nm_campo).value = valor.substr( 0, tam - 8 ) + "." + valor.substr( tam - 8, 3 ) + "." + valor.substr( tam - 5, 3 ) + "," + valor.substr( tam - 2, tam ) ; }
      }
   }
}
//[Robertson][15/03/2007][OS 5755-001][Função para validação do autocomplete dos responsáveis].
function Verifica_autocoplete(nm_campo,nm_campo2,ds_campo,div_id){
  if(document.getElementById(nm_campo2).value != "" && document.getElementById(nm_campo).value != "" && document.getElementById(ds_campo).value != ""){
    if(document.getElementById(nm_campo2).value == document.getElementById(ds_campo).value){
        if(div_id){
          //retira i div gradativamente
        fadeOpacity(div_id,'50','0','50');
      }

      document.getElementById(ds_campo).value  = "";
    }else{
        settiAlert('O Nome: '+document.getElementById(nm_campo2).value+' Não Consta na base! Favor Selecionar um item da lista.');
      document.getElementById(nm_campo).value  = "";
        document.getElementById(nm_campo2).value = "";
        document.getElementById(ds_campo).value  = "";
      document.getElementById(nm_campo2).focus();

    }
  }else if(document.getElementById(nm_campo).value == "" || document.getElementById(nm_campo2).value == ""){
        /*Adicionada na verificação se o nm_campo2 porque quando limpa o campo precisa limpar os dados para gravar corretamente. [ROSE][5941 - 001][03/03/2008]
     Incluída a condição para limpar somente quando o campo correpondente ao código estiver em branco. [JEAN][20/11/07][6156-001]
    [ROSE][29/02/2008][5941 - 001] Adiciona verificação que identifica se o div_id não está vazio para incluir a propriedade */
    if(div_id){
        mydiv = document.getElementById(div_id);
      if (mydiv){
         mydiv.style.display = "";
      }
           }
        document.getElementById(nm_campo).value = "";
    document.getElementById(ds_campo).value  = "";
    document.getElementById(nm_campo2).value = "";
      document.getElementById(nm_campo2).focus();
  }
}
function openOpacity(div_id){
    document.getElementById(div_id).style.display = '';
}
//[Robertson][02/04/2007][Incluír menu operacional].
function print_menu_operacional(url,menssagem,tipo){
    if(!tipo){tipo = 2;}
  function boxMenuOperacional(url,menssagem){
        var menssagem = menssagem;
        var mypage    = url+'&menu=false&copyright=false&msn='+menssagem;
    Popup(mypage,500,130);
  }
  function click(e){
    if(document.all){
      if(event.button == tipo){
          boxMenuOperacional(url,menssagem);
        return false;
      }
    }
  }
  document.onmousedown=click;
}
//[Robertson][25/04/2007][OS 5898-002][Desenvolvimento da função para adicionar menssagem gradativa].
function MM_reloadPage(init) {
    if (init==true) with (navigator){
      if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
            document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
        else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function Browser(){
    this.name = navigator.appName;
    if (this.name == 'Microsoft Internet Explorer') this.browser = 'ie';
    else if (this.name.match(/Netscape/)) this.browser = 'ns';
    else this.browser = this.name;
    this.version = parseInt(navigator.appVersion);
    this.ns = (this.browser=='ns' && this.version>=4);
    this.ns4 = (this.browser=='ns' && this.version==4);
    this.ns6 = (this.browser=='ns' && this.version>=5);
    this.ie = (this.browser=='ie' && this.version>=4);
    this.ie4 = (this.browser=='ie' && navigator.userAgent.indexOf('MSIE 4')>-1);
    this.ie5 = (this.browser=='ie' && navigator.userAgent.indexOf('MSIE 5')>-1);
    this.ie6 = (this.browser=='ie' && navigator.userAgent.indexOf('MSIE 6')>-1);
    if (this.ie5) this.version = 5;
    this.op5 = (navigator.userAgent.indexOf('Opera 5')>-1);
    if (this.op5){this.browser = 'op'}
    this.dom1 = (document.implementation && document.implementation.hasFeature)?true:false;
    this.os = (navigator.platform)?navigator.platform:'unknown';
    if (this.ie){ this.language = navigator.userLanguage.substring(0,2).toLowerCase() } else if (this.ns || this.op5) {    this.language = navigator.language.substring(0,2).toLowerCase() }
    this.toString = function(){ return '[object Browser]'}
    return this;
}
function setOpacity(objId, i){
     b = new Browser()
     if (b.ie){
            obj = document.all[objId]
             obj.style.filter = "alpha(opacity=" + i + ")";
     }
     else if (b.ns6){
             obj = document.getElementById(objId)
             if(obj)
         obj.style.MozOpacity = i+'%'
     }
}
function MM_findObj(n, d) {
   var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
     d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
   if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
   for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
   if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_showHideLayers() {
    var i,p,v,obj=null,args=MM_showHideLayers.arguments;

    //Alterações na lógica para funcionar corretamente no IE. [JEAN][26/12/2007][6032-024]
    for (i=0; i<(args.length-2); i+=3){
      obj = MM_findObj(args[i]);
      if (obj != null){
        v=args[i+2];
        if (obj.style){
          obj=obj.style;
          v=(v=='show')?'visible':(v=='hide')?'hidden':v;
        }

      obj.visibility=v;
      }
    }
}
function fadeOpacity(objId, sOpacity, fOpacity,speed){
     b = new Browser()
     var finished = false
     if(sOpacity == fOpacity){
          finished=true
     }
     else if (sOpacity > fOpacity){ sOpacity-- }
     else if (sOpacity < fOpacity){ sOpacity++ }
     setOpacity(objId,sOpacity)
     if(finished!=true){
         document.TC_opacity = setTimeout('fadeOpacity(\''+objId+'\','+sOpacity+','+fOpacity+','+speed+')',speed)
     }else{MM_showHideLayers('info_sel','','hide')}
}


/*
 * @author    - Fernando Andreacci
   Carrega dinamicamente as imagens a partir de um objeto..
   objImages['codigo_origem'] = 'chave_primária_do_anexo'
   baseurl = 'protocolo/servidor/setti'
*/
function loadIMG(objImages,baseurl,codDatabase) {
  for(var i in objImages) {
    if(objImages[i] == null) {
    continue;
  }
  img = new Image();
    img.src = baseurl + '/pages/advance/geral/image.php?database=' +codDatabase+ '&pic=' + objImages[i];

    img.height = 130;
    img.width = 100;

  $('photo_' + i).appendChild(img);
  objImages[i] = null;
  //carrega uma após a outra, não causando a sobrecarga
  img.onload = function() {
    loadIMG(objImages,baseurl,codDatabase);
  }
  img.onabort = function() {
    loadIMG(objImages,baseurl,codDatabase);
  }
  img.onerror = function(e) {
    loadIMG(objImages,baseurl,codDatabase);
  }
    $('photo_' + i).removeChild($('loading_' + i));
  break;
  }
  return false;
}

//[Robertson][20/07/2007][OS 6032-010][Desenvolvimento da função para abrir o textearea conforme aumenta a tela].
function Ampli_Textarea(t) {
a = t.value.split('\n');
b=1;
for (x=0;x < a.length; x++) {
    if (a[x].length >= t.cols) b+= Math.floor(a[x].length/t.cols);
}
b+= a.length;
if (b > t.rows) t.rows = b;
}

//[Robertson][30/07/2007][OS 5647-002][Adicionar função para retirar os espaços em branco de uma string].
function retiraEspacos(string) {
    var i = 0;
    var final = '';
    while (i < string.length) {
        if (string.charAt(i) == ' ') {
            final += string.substr(0, i);
            string = string.substr(i+1, string.length - (i+1));
            i = 0;
        }
        else {
            i++;
        }
    }
    return final + string;
}

//Função para exclusão dos anexos postados pelos coordenadores. [JEAN][07/04/2008][6288-003]
function deleteAtachment(cdAttach){
  if(cdAttach){
    Ext.MessageBox.confirm('Confirmação', 'Deseja excluir este Arquivo Anexo?', function (btn){
      if (btn == "yes") {
        extWaitMsg('Excluindo registro...', false, 'Aguarde');
        xajax_deleteData('VAD0362', 'CODSEQ', cdAttach);
      }
    });
  }
}

function deleteSectorContactUs(cdSector){
  if(cdSector){
    Ext.MessageBox.confirm('Confirmação', 'Deseja excluir este Setor?', function (btn){
      if (btn == "yes") {
        extWaitMsg('Excluindo registro...', false, 'Aguarde');
        xajax_deleteData('VAD0551', 'CD_SETOR_FC', cdSector);
      }
    });
  }
}

/*
 * Função responsável por excluir a notícia das respectivas tabelas
 * @author: Juvenal Marcos batista
 * @date: 24/09/2008
 * @OS: 6042-004
 * @Inspecionado por: Edina de Souza Inacio
 * @Data da Inpeção: 05/11/2008
 */

function deleteNoticia(cdNoticia){
  if(cdNoticia){
    Ext.MessageBox.confirm('Confirmação', 'Deseja excluir esta notícia?', function (btn){
      if(btn == "yes"){
        extWaitMsg('Excluindo notícia...', false, 'Aguarde');
        //Exclui da tabela de Notícias
        xajax_deleteData('VAD0454', 'CODIGO', cdNoticia);
        //Exclui da tabela de Notícias da Disciplina
        xajax_deleteData('VAD0455', 'CD_NOTICIA', cdNoticia);
      }
    });
  }
}

//Extrai o endereço do servidor do link utilizado. [JEAN][21/11/2007][6156-002]
/*
 * Adicionada verificação para caso seja necessário o caminho do template também possa ser utilizada
 * esta função
 * @author: Rose
 * @date: 18/08/2008
 * @OS: 6431 - 009
 * @Inspeção: Tuane em 01/09/2008
 */
function getPageRoot(useTemplate) {
    var pg_url  = document.URL;
    var pg_Root = "";

    if (typeof useTemplate == 'undefined'){
      useTemplate = false;
    }

    if(!useTemplate)
      pg_Root = pg_url.substring(0,pg_url.indexOf('pages'));
    else if(useTemplate)
      {
      pg_Root = pg_url.substring(0,pg_url.indexOf('page='));
      pg_Root = pg_Root + "page=/";
      }

    return pg_Root;
}

/**
 * Função para retornar o local de imagens com a img passada.
 * @author: JEAN
 * @date: 09/09/2008
 */
function imageSource(img) {
  if (typeof img == 'undefined')
    img = '';

  return getPageRoot()+"conf/images/"+img;
}

/**
 * Função para retornar o código html para imagens.
 * A princípio, retorna apenas a imagem de um local definido.
 * @auhtor: Jean
 * @date: 05/11/2008
 * @OS: 6493-002
 * @Inspeção: Jaqueline em 12/11/2008
 */
function htmlImage(imgFile, center, localDir) {

  if (typeof localDir == 'undefined')
    localDir = imageSource(imgFile);
  else
    localDir += imgFile;

  imgCode = "<img border=0 src='"+localDir+"'></img>";

  if (typeof center != 'undefined' && center)
    imgCode = "<center>"+imgCode+"</center>";

  return imgCode;
}

/**
 * Função para retornar o código html para links.
 * @auhtor: Jean
 * @date: 06/11/2008
 * @OS: 6493-002
 * @Inspeção: Jaqueline em 12/11/2008
 */
function htmlLink(location,text,onclick,target,title) {

  if(typeof title != 'undefined' && title != '')
    title = ' title="' + title + '"';
  else
    title = '';

  if(typeof target != 'undefined' && target != '')
    target = ' target="' + target + '"';
  else
    target = '';

  if(typeof onclick != 'undefined' && onclick != '')
    onclick = ' onclick="' + onclick + '"';
  else
    onclick = '';

  if(typeof text == 'undefined' || text == '')
    text = '';

  link = '<a href="' + location + '"' + title + target + onclick + '>'+ text + '</a>';

  return link;
}

//Função para abrir uma janela apresentando o forum do sistema. [JEAN][24/04/2008]
function openForumWin(cdTurmaDisc) {
  xajax_saveSession();

  urlForum = getPageRoot()+'/pages/advance/educacional/forum/process.php?mode=turma&turma='+cdTurmaDisc;

  open_win(urlForum,800,600);
}
/**
 * Abre uma nova janela e apresenta o relatório conforme o cdReport.
 * @param {Código do relatório a ser exibido} cdReport
 * @date: 31/03/2009
 * @OS: 6631-007
 */
function openServerReportWin(cdReport) {

  //Contrói um formulario pois não estava abrindo corretamente através de um popup
  var formShowReport = document.getElementById('id-formShowReport');

  if(!formShowReport) {
    formShowReport        = document.createElement('form');
    formShowReport.id     = 'id-formShowReport';
    formShowReport.target = "_blank";
    formShowReport.method = "post";
    document.getElementsByTagName('body')[0].appendChild(formShowReport);
  }

  formShowReport.action = getPageRoot()+"pages/advance/geral/show_server_report.php?cd_report="+cdReport;
  formShowReport.submit();
}

/**
 * Função para apresentar a tela de consulta de processos
 * @author Jean
 * @date: 17/06/2009
 * @OS: 4955-012
 */
function openProcessConsult(){

  new AjaxCSSJS(getPageRoot()+'/system/public/javascript/ext/examples/grid/RowExpander.js', function(){
    new AjaxCSSJS(getPageRoot()+'/system/public/javascript/system_processes.js', function(){
      showWindowProcess();
    });
  })

}

//Função para remoção de acentos de um texto. [JEAN][12/05/2008]
function retiraAcentos(texto) {

  comAcentos = 'ÁÀÂÃÄáãâàäÉÊÈËéêèëÌìÍíîÎÏõÕÓóôÔòÒÖÛûúùüÚÙÜçÇñÑªº';
  semAcentos = 'AAAAAaaaaaEEEEeeeeIiIiiIIoOOooOoOOUuuuuUUUcCnNao';
  novoTexto  = '';
  letra      = '';

  tam     = texto.length;
  posicao = -1;

  for(l=0;l<tam;l++) {

    letra = texto.substr(l,1);

    if (letra != ' ') {
      posicao = comAcentos.indexOf(letra);

      if(posicao == -1)
        letra = letra;
      else
        letra = semAcentos.substr(posicao,1);
    }

    novoTexto = novoTexto + letra;
  }
  return novoTexto;
}

/**
 * Função para retornar o número do mês conforme o seu nome. Função semelhante a do php.
 * @author: Jean
 * @date: 30/07/2008
 * @OS: 6315-001
 * @Inspeção: Tuane
 * @data Inspeção: 01/08/2008
 */
function getMonthNumber(nmMonth) {

  nmMonth = nmMonth.toUpperCase();

  monthNum = "";

  months = [{abrv: "JAN", name:"JANUARY"},{abrv:"FEB",name:"FEBRUARY"},{abrv:"MAR",name:"MARCH"},{abrv:"APR",name:"APRIL"},{abrv:"MAY",name:"MAY"},{abrv:"JUN",name:"JUNE"},{abrv:"JUL",name:"JULY"},{abrv:"AUG",name:"AUGUST"},{abrv:"SEP",name:"SEPTEMBER"},{abrv:"OCT",name:"OCTOBER"},{abrv:"NOV",name:"NOVEMBER"},{abrv:"DEC",name:"DECEMBER"}];
  meses  = [{abrv: "JAN", name:"JANEIRO"},{abrv:"FEV",name:"FEVEREIRO"},{abrv:"MAR",name:"MARÇO"},{abrv:"ABR",name:"ABRIL"},{abrv:"MAI",name:"MAIO"},{abrv:"JUN",name:"JUNHO"},{abrv:"JUL",name:"JULHO"},{abrv:"AGO",name:"AGOSTO"},{abrv:"SET",name:"SETEMBRO"},{abrv:"OUT",name:"OUTUBRO"},{abrv:"NOV",name:"NOVEMBRO"},{abrv:"DEZ",name:"DEZEMBRO"}];

  //Busca o número correspondente do mês conforme o nome completo ou abreviado, em inglês ou porturguês.
  for(m = 0; m < months.length; m++){
    if(nmMonth == months[m].abrv || nmMonth == months[m].name || nmMonth == meses[m].abrv || nmMonth == meses[m].name){
      monthNum = (m+1); //Soma 1 pois a contagem começa a partir do 0.
      break;
    }
  }

  return monthNum;
}

/**
 * Função para verificar a resposta de uma requisição ajax.
 * Esta função utiliza a mensagem da biblioteca EXT.
 * @author: JEAN
 * @date: 01/09/2008
 * @os: 6431-013
 * @Inspeção: Tuane
 * @Data Inspeção: 02/09/2008
 ****
 * Incluído o parâmetro reloadScript. Deve conter um script específico para ser executado
 * caso o usuário tenha escolhido para recarregar a página.
 * @author: JEAN
 * @date: 11/09/2008
 * @OS: 6446-001
 * @Inspeção: Tuane em 11/09/2008
 */
function verifyLoadedResponse(responseText, nmTeacher, extWinID, reloadScript){
  errorMsg = '';
  reloadPg = false;

  /**
   * Incluídas condições para o caso de falhas ao carregar a página.
   * @author: JEAN
   * @date: 06/08/2008
   * @OS: 6431-001
   * @Inspeção: Tuane em 07/08/2008
   */
  if(responseText == 'db_not_find')
    errorMsg = 'não foi localizada a base de dados para este serviço. Contate o administrador do sistema.';
  else if(responseText == 'db_not_connected')
    errorMsg = 'a base de dados deste serviço não está conectada. Contate o administrador do sistema.';
  else if(responseText == 'not_faixa')
    errorMsg = 'o(a) professor(a) '+nmTeacher+' não está em nenhuma das faixas cadastradas da matéria.';
  else if(responseText == 'not_dates')
    errorMsg = 'não foram encontradas datas válidas para a montagem das colunas.';
  else if(responseText.toLowerCase().indexOf('connection error') != -1) {
    errorMsg = 'houve uma falha na conexão com o banco de dados. Atualizar a página pode apresentar os dados. Deseja atualizá-la agora?'
    reloadPg = true;
  }

  if(errorMsg != '') {
    Ext.Msg.show({
      title:'Erro ao carregar',
      msg: 'Não foi possível carregar os dados para esta página, pois '+errorMsg,
      buttons: ((reloadPg) ? Ext.Msg.YESNO : Ext.Msg.OK),
      fn: function(btn,text) {
        if(btn == 'no' || btn == 'ok') {

          if(typeof extWinID != 'undefined')
            Ext.getCmp(extWinID).hide();
          else
            window.close();
        }
        else if(btn == 'yes') {

          //Executa o script definido para o recarregamento.
          if(typeof reloadScript != 'undefined' && reloadScript != '')
            eval(reloadScript);
          else
            window.location.reload();
        }
      },
      animEl: document.body,
      icon: Ext.MessageBox.ERROR
    });
    return false;
  }

  return true;
}

/**
 * Função para emitir uma mensagem de falha de uma requisição ajax.
 * Esta função utiliza a mensagem da biblioteca EXT.
 * @author: JEAN
 * @date: 01/09/2008
 * @os: 6431-013
 * @Inspeção: Tuane
 * @Data Inspeção: 02/09/2008
 */
function failureMsgResponse(responseText, gridID, scriptYes, scriptNo){
  msgFailure  = 'Ocorreram erros durante o carregamento desta página. Sua conexão pode estar lenta';
  msgFailure += ' ou este serviço pode estar inativo ou não respondendo.';
  msgFailure += '<br>Atualizar a página pode trazer os dados corretamente. Deseja atualizá-la agora?<br>Se o problema persistir, contate o administrador do sistema.';

  Ext.Msg.show({
    title:'Erro ao carregar',
    msg: msgFailure,
    buttons: Ext.Msg.YESNO,
    fn: function(btn, text) {
      if(btn == 'yes') {

        /* Caso o  script a ser executado ao clicar no botão 'SIM' tenha sido definido, executa-o.
        Caso o ID do grid tenha sido definido, executa o load do store novamente,
        pois a requisição foi chamada por um store de um grid. */
        if(typeof scriptYes != 'undefined' && scriptYes != null) {
          eval(scriptYes);
        } else if(typeof gridID != 'undefined' && gridID != null)
          Ext.getCmp(gridID).store.load();
        else
          window.location.reload();

      } else if(btn == 'no') {
        if(typeof scriptNo != 'undefined' && scriptNo != '')
          eval(scriptNo)
      }
    },
    icon: Ext.MessageBox.ERROR
  });
}

/**
 * Função para verificar se o navegador possui suporte ao PDF.
 * @author: Jean
 * @date: 23/12/2008
 * @OS: 6526-018
 * @Inspeção: Tuane em 05/01/2009
 */
function verifyBrowserPDFSuport(){

  isInstalled = '0'; //Não possui PDF instalado.

  if (window.ActiveXObject) {
    var control = null;
    try {
      // AcroPDF.PDF is used by version 7 and later
      control = new ActiveXObject('AcroPDF.PDF');
    } catch (e) {
    }
    if (!control) {
      try {
        // PDF.PdfCtrl is used by version 6 and earlier
        control = new ActiveXObject('PDF.PdfCtrl');
      } catch (e) {
      }
    }

    if (control)
      isInstalled = '1'; //Possui PDF Instalado.

  } else {
    //Check navigator.plugins for "Adobe Acrobat" or "Adobe PDF Plug-in"*
    var numOfPlugins = navigator.plugins.length;

    for (var i=0; i < numOfPlugins; i++) {
      if(navigator.plugins[i].name.toLowerCase() == "adobe acrobat") {
        isInstalled = '1'; //Possui PDF Instalado.
        break;
      }
    }
  }

  /* Chama a função ajax para armazenar na sessão PHP se o navegador do usuário possui suporte a arquivos PDF.
  Executa desta forma pois o PHP é executado no servidor, e o javascript no cliente. */
  xajax_checkBrowserPDFSuport(isInstalled);
}
