//-------------------------------------- NAVEGAÇÃO --------------------------------------//
function novaJanela(pagina,nome,width,height) {
  var x = (screen.availWidth - width) / 2;
  var y = ((screen.availHeight - height) / 2) - 32;
  var win = window.open(pagina,nome,'dependent,status,top='+y+',left='+x+',width='+width+',height='+height);
  if (win.opener!=window) {
    win.opener = window;
  }
  win.focus();
  return win;
}

function novaJanelaAjustavel(pagina,nome,width,height) {
  var x = (screen.availWidth - width) / 2;
  var y = ((screen.availHeight - height) / 2) - 32;
  var win = window.open(pagina,nome,'dependent,status,resizable,top='+y+',left='+x+',width='+width+',height='+height);
  if (win.opener!=window) {
    win.opener = window;
  }
  win.focus();
  return win;
}

function novaJanelaRolagem(pagina,nome,width,height) {
  var x = (screen.availWidth - width) / 2;
  var y = ((screen.availHeight - height) / 2) - 32;
  var win = window.open(pagina,nome,'dependent,status,scrollbars,top='+y+',left='+x+',width='+width+',height='+height);
  if (win.opener!=window) {
    win.opener = window;
  }
  win.focus();
  return win;
}

function novaJanelaRelatorio(pagina,nome) {
  var x = (screen.availWidth - 670) / 2;
  var y = ((screen.availHeight - 480) / 2) - 32;
  var win = window.open(pagina,nome,'dependent,status,menubar,scrollbars,top='+y+',left='+x+',width=670,height=480');
  if (win.opener!=window) {
    win.opener = window;
  }
  win.focus();
  return win;
}

function novaJanelaRelatorioHtml(nome,html) {
  var x = (screen.availWidth - 670) / 2;
  var y = ((screen.availHeight - 480) / 2) - 32;
  var win = window.open('',nome,'dependent,status,menubar,scrollbars,top='+y+',left='+x+',width=670,height=480');
  if (win.opener!=window) {
    win.opener = window;
  }
  win.document.open();
  win.document.write(html);
  win.document.close();
  win.focus();
  return win;
}

function novaJanelaRelatorioAjustavel(pagina,nome,width,height) {
  var x = (screen.availWidth - 670) / 2;
  var y = ((screen.availHeight - 480) / 2) - 32;
  var win = window.open(pagina,nome,'dependent,status,menubar,scrollbars,resizable,top='+y+',left='+x+',width=670,height=480');
  if (win.opener!=window) {
    win.opener = window;
  }
  win.focus();
  return win;
}

function navigateWindow(win,url) {
  win.location.href = new String(url);
}

function navigate(url) {
  window.location.href = new String(url);
}

var mapaOrigem;
var mapaDestino;
function mapa(origem, destino) {
  mapaOrigem = origem;
  mapaDestino = destino;
  novaJanela('/comum/faces/mapa.html','googlemaps',screen.width-50,600);
}

function monitorarESC(e) {
  if (e.keyCode==27)
    navigate('/comum/faces/close.html');
}

function storeMainScroll() {
  var mainScroll = document.getElementsByName('mainScroll');
  var mainContent = document.getElementById('mainContent');
  if ((mainScroll!=null) && (mainScroll.length>0) && (mainContent!=null))
    mainScroll.item(0).value = String(mainContent.scrollTop);
}



//-------------------------------------- AJAX --------------------------------------//
var xmlHttp = null;
var callHttpQueue = [];
var callHttpQueueCount = 0;
function callHttpRun() {
  var values = callHttpQueue[callHttpQueueCount];

  xmlHttp.open("POST",values[0],true);
  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  xmlHttp.onreadystatechange = function() {
                                 if (xmlHttp.readyState==4) {
                                   var values = callHttpQueue[callHttpQueueCount];

                                   // IMPLEMENTAR TRATAMENTO DE EXCEPTIONS

                                   if (values[1]!=null) {
                                     try { values[1](xmlHttp.responseXML,values[3]); } catch(e) { }
                                   }

                                   callHttpQueueCount++;
                                   if (callHttpQueueCount<callHttpQueue.length)
                                     setTimeout("callHttpRun()",50);
                                 }
                               };
  var params = "";
  if (values[2]!=null) {
    for (var i=0; i<values[2].length; i++) {
      if (values[3][i]!=null) {
        if (i>0) params = params + "&";
        params = params + values[2][i] + "=" + values[3][i];
      }
    }
  }

  xmlHttp.send(params);
}
function callHttp(uri,callback,params,values) {
  if (xmlHttp==null) {
    try {
      xmlHttp = new XMLHttpRequest();
    } catch(ee) {
      try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        try {
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(E) {
          xmlHttp = null;
          alert("Seu navegador não suporta a leitura de dados remotos.");
        }
      }
    }
  }

  if (xmlHttp!=null) {
    callHttpQueue[callHttpQueue.length] = [uri,callback,params,values];

    if ((callHttpQueueCount + 1)==callHttpQueue.length)
      callHttpRun();
  }
}

function jsfRefreshSelectItems(value, valueEL, fieldID, itemsEL) {
  var jsfSelectItemsField = document.getElementById(fieldID);

  if (jsfSelectItemsField==null)
    return;

  var params = ["value","valueEL","itemsEL"];
  var values = [value,valueEL,itemsEL,fieldID];

  var callback = function(responseXML,values) {
                   var selectItems = responseXML.getElementsByTagName("selectItems")[0];
                   var items = selectItems.getElementsByTagName("item");

                   var options;
                   var i;
                   var item;
                   var label;
                   var value;
                   var tr;
                   var td;

                   var jsfSelectItemsField = document.getElementById(values[3]);
                   if (jsfSelectItemsField!=null) {
                     if (jsfSelectItemsField.selectedIndex!=null) {
                       options = jsfSelectItemsField.options;
                       options.length = 0;
                       for (i=0; i<items.length; i++) {
                         item = items[i];
                         label = item.getElementsByTagName("label")[0].firstChild.nodeValue;
                         value = item.getElementsByTagName("value")[0].firstChild.nodeValue;
                         options[options.length] = new Option(label,value);
                       }
                     }
                     else {
                       while (jsfSelectItemsField.rows.length>0)
                         jsfSelectItemsField.deleteRow(0);

                       for (i=0; i<items.length; i++) {
                         item = items[i];
                         label = item.getElementsByTagName("label")[0].firstChild.nodeValue;
                         value = item.getElementsByTagName("value")[0].firstChild.nodeValue;
                         tr = jsfSelectItemsField.insertRow(jsfSelectItemsField.rows);
                         td = tr.insertCell(0);
                         td.innerHTML = "<label><input type='checkbox' name='"+values[3]+"' value='"+value+"' class='inputDefault'/>&#160;"+label+"</label>";
                       }
                     }
                   }
                 };

  if (jsfSelectItemsField.selectedIndex!=null) {
    jsfSelectItemsField.selectedIndex = 0;
    jsfSelectItemsField.options.length = 0;
    jsfSelectItemsField.options[0] = new Option("Aguarde...","0");
  }
  else {
    while (jsfSelectItemsField.rows.length>0)
      jsfSelectItemsField.deleteRow(0);

    var tr = jsfSelectItemsField.insertRow(0);
    var td = tr.insertCell(0);
    td.align = "center";
    td.innerHTML = "Aguarde...";
  }

  callHttp("/comum/faces/JSFRefreshSelectItems.html",callback,params,values);
}

function jsfGet(valueEL,functionCallback) {
  if (functionCallback==null)
    return;

  var params = ["valueEL"];
  var values = [valueEL,functionCallback];
  var callback = function(responseXML,values) {
                   var value = responseXML.getElementsByTagName("value")[0].firstChild.nodeValue;
                   values[1](value);
                 };

  callHttp("/comum/faces/JSFGet.html",callback,params,values);
}

function jsfSet(valueEL,value) {
  if (value==null) value = "null";

  var params = ["valueEL","value"];
  var values = [valueEL,value];

  callHttp("/comum/faces/JSFSet.html",null,params,values);
}

function jsfInvoke(valueEL,value,functionCallback) {
  var params = ["valueEL","value"];
  var values = [valueEL,value,functionCallback];
  var callback = function(responseXML,values) {
                   var value = responseXML.getElementsByTagName("value")[0].firstChild.nodeValue;
                   if (values[2]!=null)
                     values[2](value);
                 };

  callHttp("/comum/faces/JSFInvoke.html",callback,params,values);
}



//-------------------------------------- UTILITÁRIOS --------------------------------------//
function formatarNumero(_numero,_formato) {
  var resultado = _numero.toString();
  var tamanho = _formato.length;
  for (var i=resultado.length; i<tamanho; i++)
    resultado = "0" + resultado;
  return resultado;
}

var dias_semana = ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'];
var data_cliente = new Date();
function ajustarTempo(_entrada,_corrente,_formato) {
  var resultado = new Date(_entrada + (data_cliente.getTime() - _corrente));

  var fullYear = resultado.getFullYear();
  var year = resultado.getYear() % 100;

  if (_formato=="dd/MM/yy")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(year,"00");
  else if (_formato=="dd/MM/yy HH:mm")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(year,"00")+" "+formatarNumero(resultado.getHours(),"00")+":"+formatarNumero(resultado.getMinutes(),"00");
  else if (_formato=="dd/MM/yyyy HH:mm")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(fullYear,"0000")+" "+formatarNumero(resultado.getHours(),"00")+":"+formatarNumero(resultado.getMinutes(),"00");
  if (_formato=="dd/MM/yy EEE")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(year,"00")+" "+dias_semana[resultado.getDay()];
  if (_formato=="dd/MM/yyyy EEE")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(fullYear,"0000")+" "+dias_semana[resultado.getDay()];
  else if (_formato=="dd/MM/yy HH:mm EEE")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(year,"00")+" "+formatarNumero(resultado.getHours(),"00")+":"+formatarNumero(resultado.getMinutes(),"00")+" "+dias_semana[resultado.getDay()];
  else if (_formato=="dd/MM/yyyy HH:mm EEE")
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(fullYear,"0000")+" "+formatarNumero(resultado.getHours(),"00")+":"+formatarNumero(resultado.getMinutes(),"00")+" "+dias_semana[resultado.getDay()];
  else
    return formatarNumero(resultado.getDate(),"00")+"/"+formatarNumero(resultado.getMonth()+1,"00")+"/"+formatarNumero(fullYear,"0000");
}

function dateTimeMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99/99/99 99:99");
  });
}

function dateMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99/99/99");
  });
}

function competenceMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99/9999");
  });
}

function dateFullMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99/99/9999");
  });
}

function timeMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99:99");
  });
}

function timeLongMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("999:99");
  });
}

function phoneMask(campo) {
  if((campo.value.length==0) || (campo.value.length==14)) {
    jQuery(function($){
      jQuery(campo).mask("(99) 9999-9999");
    })
  }
}

function currencyMask(campo,casas) {
  if ((casas==undefined) || (casas==null))
    casas = 2;

  jQuery(function($){
    if (casas>0)
      jQuery(campo).maskMoney({symbol:"R$",decimal:",",thousands:".",precision:casas,showSymbol:false});
    else
      jQuery(campo).keypress(function (e){
        return onlyNumber(e);
      });
  })
}

function cepMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("99.999-999");
  })
}

function cpfMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("999.999.999-99");
  })
}

function catMask(campo) {
  jQuery(function($){
    jQuery(campo).mask("9999999999-9/99");
  })
}

function onlyNumber(e){
  var keycode = (e.keyCode ? e.keyCode : e.which);
  if ((keycode==8) || (keycode==9) || (keycode > 47 && keycode < 58))
    return true;
  return false;
}

function trim(str) {
  return str.replace(/(^\s*)|(\s*$)/g, "");
}

function isPopup(win) {
  return (win.opener!=null);
}

function $(element) {
  if (typeof element == 'string')
    element = document.getElementById(element);
  return element;
}

var reportWindow = null;
function showReportWindow(caminho) {
  var html = new String('');
  html += '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
  html += '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">';
  html += '<head>';
  html += '  <title>Visualizador de Relatórios</title>';
  html += '  <link rel="stylesheet" href="/lib/clean_estilos.css" type="text/css"/>';
  html += '</head>';
  html += '<body>';
  html += '<div id="mainContent" width="100%" style="margin:0px; padding:0px; position:fixed; left:0px; right:0px; top:23px; bottom:23px; overflow:auto;">';
  html += '  <iframe width="100%" height="100%" src="'+caminho+'" style="border:none;margin:0px; padding:0px; position:fixed; left:0px; right:0px; top:0px; bottom:0px;"/>';
  html += '</div>';
  html += '</body>';
  html += '</html>';

  reportWindow = novaJanelaAjustavel('/comum/faces/wait.html','relatorioWindow',780,590);
  reportWindow.document.open("text/html","replace");
  reportWindow.document.write(html);
  reportWindow.document.close();
}

function addReportFilterChangeEvent(id) {
  jQuery("input:radio").bind("click",function(){ jQuery(id).html(""); });
  jQuery("input:checkbox").bind("click",function(){ jQuery(id).html(""); });
  jQuery("select").change(function(){ jQuery(id).html(""); });
  jQuery("input").bind("keypress",function(){ jQuery(id).html(""); });
  jQuery(".PopcalTrigger").bind("click",function(){ jQuery(id).html(""); });
}

function validaData(value) {
  if (value.length != 10) {
    return false;
  }
  
  var data = value;
  var dia = data.substr(0,2);
  var barra1 = data.substr(2,1);
  var mes = data.substr(3,2);
  var barra2 = data.substr(5,1);
  var ano = data.substr(6,4);
  
  if ((data.length != 10) || (barra1 != "/") || (barra2 != "/") || (isNaN(dia)) || (isNaN(mes)) || (isNaN(ano)) || (dia > 31) || (mes>12)) {
    return false;
  }

  if(((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11)) && (dia==31)) {
    return false;
  }

  if ((mes == 2) && ((dia > 29) || ((dia == 29) && (ano%4 != 0)))) {
    return false;
  }

  if (ano < 1900) {
    return false;
  }

  return true;  
}

function attachTagModify(id) {
  $('attachTag_' + id + '_value').value = '';
  attachTagRefresh(id);
}

function attachTagRefresh(id) {
  var value = trim($('attachTag_' + id + '_value').value);
  if (value.length>0)
    return;

  var html = '<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td width="1%" style="white-space: nowrap;">';
  var size = $('attachTag_' + id + '_size').value;
  var multi = ($('attachTag_' + id + '_multi').value=='true');
  var names = $('attachTag_' + id + '_names').value;
  var array = names.split(';');
  var empty = true;
  for (var i=0; i<array.length; i++) {
    value = trim(array[i]);
    if (value.length>0) {
      if (!empty) html += '<br/>';
      html += '<a href="#" onclick="attachTagRemove(\'' + id + '\',\'' + value + '\'); return false;"><img src="/imagens/ico_deletar.gif" title="Remover anexo" alt="Remover" border="0"/></a>&nbsp;' + value;
      empty = false;
    }
  }

  if ((names.length==0) || (multi)) {
    if (!empty)
      html += '</td><td width="20"></td><td>';
    html += '<input type="button" value="Adicionar anexo" onclick="novaJanela(\'/comum/faces/AttachTagPopup.html?id=' + id + '&size='+size+'\',\'attachTag_' + id + '\',500,180);" class="commandButton"/>';
  }

  html += '</td></tr></table>';

  $('attachTag_' + id + '_span').innerHTML = html;
}

function attachTagAdd(id,name) {
  var multi = ($('attachTag_' + id + '_multi').value=='true');
  if (multi)
    $('attachTag_' + id + '_names').value += name + ';';
  else
    $('attachTag_' + id + '_names').value = name;

  attachTagRefresh(id);
}

function attachTagRemove(id,name) {
  var array = $('attachTag_' + id + '_names').value.split(';');
  var names = '';
  var value;
  for (var i=0; i<array.length; i++) {
    value = trim(array[i]);
    if ((value.length>0) && (value!=name))
      names += value + ';';
  }
  $('attachTag_' + id + '_names').value = names;

  attachTagRefresh(id);
}

