var isNav = (navigator.appName.indexOf("Netscape")!=-1);
var isIE = (navigator.appName.indexOf("Microsoft")!=-1);

function addOption(objSelect, xValue, xText)
       {
        var oOption;

        if (navigator.appVersion.indexOf("MSIE 5.0") > 0)
            {
            oOption = document.createElement("OPTION");
            objSelect.options.add(oOption);
            oOption.innerText = xText;
            oOption.value = xValue;
            }
        else{
            oOption = new Option(xText,xValue);
            objSelect.options.add(oOption);
            }
       }

function getArgs() {
   var args = new Object();
   var query = location.search.substring(1);
   var pairs = query.split(',');
   for (var i=0; i<pairs.length; i++) {
      var pos = pairs[i].indexOf('=');
      if (pos==-1) continue;
      var argname = pairs[i].substring(0,pos);
      var value = pairs[i].substring(pos+1);
      args[argname] = unescape(value);
   }
   return args;
}

function isNull(valor) {
   return (valor==null || valor=='null' || valor==(void 0) || valor=='' || trim(valor)=="");
}

function nvl(pvalor,pdefault) {
   var vdefault = (isNull(pdefault)?"":pdefault);
   return (isNull(pvalor)?vdefault:pvalor);
}

function isDigit(pchar) {
   return ("0123456789".indexOf(pchar)>=0);
}

function isNumeric(ptexto) {
   var numeric = true;
   
   ptexto = trim(ptexto);
   
   for (i=0; i < ptexto.length; i++) {
      if (!isDigit(ptexto.charAt(i)) ) {
         numeric = false;
         break;
      }
   }
   
   return numeric;
}

function ltrim(ptexto) {
   var i = 0;
   
   while (i<ptexto.length && ptexto.charAt(i)== " ") {
      i++;
   }

   return (ptexto.substring(i,ptexto.length));      
}

function rtrim(ptexto) {
   var i = ptexto.length-1;
   
   while (i>0 && ptexto.charAt(i) == " ") {
      i--;
   }
   
   return (ptexto.substring(0,i+1));
}

function trim(ptexto) {
   return ltrim(rtrim(ptexto));
}

function stripChars(ptexto,pchars) {
   var vtexto = "";
   ptexto = ""+ptexto;
   
   for(i=0;i<ptexto.length;i++) {
      vtexto+= (pchars.indexOf(ptexto.charAt(i))>=0?"":ptexto.charAt(i) );
   }
   return vtexto;
}

function replaceChar(ptexto,pos_char,str_new) {
   return ptexto.substring(0,pos_char) +
          str_new +
          ptexto.substring(pos_char+1,ptexto.length);
}

function convHTML(ptexto) {
   var tab = [['', '&Aacute;'],
              ['','&Eacute;'],
              ['','&Iacute;'],
              ['','&Oacute;'],
              ['','&Uacute;'],
              ['', '&aacute;'],
              ['','&eacute;'],
              ['','&iacute;'],
              ['','&oacute;'],
              ['','&uacute;'],
              ['','&Agrave;'],
              ['','&Egrave;'],
              ['','&Igrave;'],
              ['','&Ograve;'],
              ['','&Ugrave;'],
              ['','&agrave;'],
              ['','&egrave;'],
              ['','&igrave;'],
              ['','&ograve;'],
              ['','&ugrave;'],
              ['','&Atilde;'],
              ['','&Otilde;'],
              ['','&atilde;'],
              ['','&otilde;'],
              ['','&Acirc;'],
              ['','&Ecirc;'],
              ['','&Icirc;'],
              ['','&Ocirc;'],
              ['','&Ucirc;'],
              ['','&acirc;'],
              ['','&ecirc;'],
              ['','&icirc;'],
              ['','&ocirc;'],
              ['','&ucirc;'],
              ['','&Ccedil;'],
              ['','&ccedil;'],
              ['','&Ntilde;'],
              ['','&ntilde;']
              ];
              
   var p;
   
   for(var i=0; i<tab.length ; i++) {
      while ((p=ptexto.indexOf(tab[i][0]))>=0) {
         // substitui o caracter para padrao HTML
         ptexto=replaceChar(ptexto,p,tab[i][1]);
      }
   }
   
   return ptexto;
}

function isPosNumber(ptexto) {
   ptexto = trim(ptexto);
   var ppos = ptexto.lastIndexOf(".");
   
   if (ppos<0) {
      ppos = ptexto.lastIndexOf(",");
      if (ppos>0)
         return false;
   }   
   
   if (ppos>=0) {
      vantes = stripChars(ptexto.substring(0,ppos),".,");
      vdepois = ptexto.substring(ppos+1,ptexto.length);
      return (isNumeric(vantes) && isNumeric(vdepois));
   }
   else {
      ptexto = stripChars(ptexto,".,");
      return (isNumeric(ptexto));
   }
}

function parseNumber(ptexto) {
   ptexto=trim(ptexto);
   var ppos = ptexto.lastIndexOf(".");
   if (ppos<0)
      ppos = ptexto.lastIndexOf(",");
      
   if (ppos>=0) {
      vantes = stripChars(ptexto.substring(0,ppos),".,");
      vdepois = ptexto.substring(ppos+1,ptexto.length);
      return (vantes==""?"0":vantes) + "." + vdepois;
   }
   else {
      ptexto = stripChars(ptexto,".,");
      return ptexto;
   }
}

function isNumber(ptexto) {
   ptexto = ltrim (ptexto);

   if (ptexto.charAt(0)=='-') {
      ptexto = ptexto.substring(1,ptexto.length);
   }
   
   return (isPosNumber(ptexto));
}

function isDate(ptexto) {
   ptexto = trim (ptexto);
   if (ptexto.length !=10) {
      return false;
   }
   
   var mes = parseInt(ptexto.substring(0,2),10);
//   alert("mes = "+mes);
   var dia = parseInt(ptexto.substring(3,5),10);
//   alert("dia = "+dia);   
   var ano = parseInt(ptexto.substring(6,10),10);
//   alert("ano = "+ano);      
  
   if (isNaN(dia) || isNaN(mes) || isNaN(ano)) {
      return false;
   }
   
   if (mes<1 || mes >12) return false;
   
   if (ptexto.substring(2,3) != "/") return false;
   
   if (dia<1 || dia > 31) return false;
   
   if (ptexto.substring(5,6) != "/") return false;
   
   if (ano<=1000) return false;
   
   if (mes==4 || mes==6 || mes==9 || mes==11) {
      if (dia==31) return false;
   }
   
   if (mes==2) {
      var g = parseInt(ano/4);
      if (isNaN(g)) {
         return false;
      }
      if (dia>29) return false;
      if (dia==29 && ((ano/4)!=parseInt(ano/4))) return false;
   }
   
   
   return true;
}

function isYear(ptexto) {
   return (isNumeric(ptexto) && parseInt(ptexto)>1000 && parseInt(ptexto)<=9999);
}



function isPercent(ptexto) {
   ptexto = ltrim (ptexto);

   return (parseFloat(ptexto) >= 0 && parseFloat(ptexto) <= 100);
}

function isTime(ptexto) {
   ptexto = ltrim (ptexto);
   var hora;
   var minuto;
   var segundo;
  
   if (ptexto.substring(2,3) != ":" && ptexto.substring(5,6) != ":") {
      return false;
   }
  
   hora = parseFloat(ptexto.substring(0, 2));
   minuto = parseFloat(ptexto.substring(3, 5));
   if(ptexto.substring(5,6) != ":"){
   	segundo = 0
   }
   else{
   	segundo = parseFloat(ptexto.substring(6, 8));
   }
   
   if (hora >= 0 && hora <= 23 && minuto >= 0 && minuto <= 59 &&
       segundo >= 0 && segundo <= 59) {
      return true;
   }
   else {
      return false;
   }
}

function formatMoneyUSD(pvalor) {
   var vl_round = ""+Math.round(pvalor*100);

   var vint = vl_round.substring(0,vl_round.length-2);
   if (vint==0) {
      vint = "0";
   }

   var vfrac = vl_round.substring(vl_round.length-2,vl_round.length);

   if (vfrac.length<2) {
      vfrac = "0"+vfrac;
   }

   return vint+"."+vfrac;
}

function formatMoney(pvalor) {

   var vl_round = ""+Math.round(pvalor*100);

   var vint = vl_round.substring(0,vl_round.length-2);
   if (vint==0) {
      vint = "0";
   }
   else {
      vaux = vint;
      vint = "";
      while (vaux.length>3) {
         vint = vaux.substring(vaux.length-3,vaux.length)+ (vint!=""?".":"") +vint;
         vaux = vaux.substring(0,vaux.length-3);
      }

      if (vaux!="") 
         vint = vaux + (vint!=""&&vaux!="-"?".":"") + vint;
   }

   var vfrac = vl_round.substring(vl_round.length-2,vl_round.length);

   if (vfrac.length<2) {
      vfrac = "0"+vfrac;
   }

   return vint+","+vfrac;
}

function DateSerial(pdata) {
   var dia = pdata.substring(0,2);
   var mes = pdata.substring(3,5);
   var ano = pdata.substring(6,10);
   
   return (parseInt(ano+mes+dia));
}


function checkRequired(p_obj,p_msg) {
   if (isNull(p_obj.value)) {
      alert(p_msg);
      p_obj.focus();
      //p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

function checkNumber(p_obj,p_msg) {
   if (!isNumber(p_obj.value)) {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}


function checkInterval(p_obj,p_msg)
   {
   if (!isNumber(p_obj.value))
      {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
      }
   else
      {
      if (p_obj.value < 0 || p_obj.value > 24)
         {
         alert(p_msg);
         p_obj.focus();
         p_obj.select();
         return false;
         }
      return true;
      }
   }

function checkYear(p_obj, p_msg) {
   if (!isYear(p_obj.value)) {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

function checkDate(p_obj, p_msg)

   {
			//transforma a data no padrao americano mm-dd-yyyy

			var vard = p_obj.value.substring(0,2);
			var varm = p_obj.value.substring(3,5);
			var vary = p_obj.value.substring(6,10);

			vardate = varm + '/' + vard + '/' + vary

   if (p_obj.value=='')
			   {
				  return true;
			   }
			   
			else if (!isDate(vardate))
			   {
			   alert(p_msg);
			   p_obj.focus();
			   p_obj.select();
			   return false;
			   }
			else
			   {
			   return true;
			   }
   }

function checkDateTime(p_obj, p_msg) {
   if ((!isDate(p_obj.value.substring(0,10)) &&
       !isTime(p_obj.value.substring(11,19))) ||
       p_obj.value.substring(10,11) != ' ') {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

function checkTime(p_obj, p_msg) {
   if (!isTime(p_obj.value)) {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

function checkPercent(p_obj,p_msg) {
   if (!isNumber(p_obj.value) || !isPercent(p_obj.value)) {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

function checkSize(p_obj,p_count_target,p_msg) {
   var ptexto = trim(p_obj.value);
   if (ptexto.length < p_count_target) {
      alert(p_msg);
      p_obj.focus();
      p_obj.select();
      return false;
   }
   else {
      return true;
   }
}

// function utilizada em conjunto com writeTable(ASP)
// para atualizar a PK do registro selecionado em campos pk_(n)
function update_pk_values(frm) {
   for(var i=0; i < frm.pk_length.value; i++)
      frm["pk_"+i].value = arguments[i+1];
}

function update_chk_values(obj_chk,obj_selected) {
   var str_temp = obj_selected.value;
   var p;
   
   if (obj_chk.checked) {
      str_temp += obj_chk.value;
   }   
   else {
      p = str_temp.indexOf(obj_chk.value);
      str_temp = str_temp.substring(0,p) + str_temp.substring(p+obj_chk.value.length,str_temp.length+1);
   }   
   
   obj_selected.value = str_temp;
}

// function de apoio para o submit de um form com 
// uma lista de opcoes check (apoio para writeTable ASP)
// deve ser chamada no onClick do botao submit 
// Ex : <INPUT TYPE='submit' NAME='btnProcessValues' VALUE='Process Values' onClick='this.form'>
function update_chk(frm) {
   for (var i=0; i<frm.elements.length; i++) {
      var obj = frm.elements[i];
      if (obj.name.substr(0,3)=="chk" &&
          obj.type=="checkbox" && 
          obj.checked) 
         frm.pk_selected.value += obj.value;
   }

}

function check_form_pk(frm) {
   var frm_ok=false;
   for(var i=0; i<frm.elements.length; i++) {
      if (frm.elements[i].name=="pk_0") {
         frm_ok=true;
         break
      }   
   }
   
   return frm_ok;
}

// function de apoio para as funcoes :
// open_ins_record, open_upd_record, open_del_record
function get_pk_query_string(frm) {
  
   var str_query_string = "";
   
   for(var i=0; i < frm.pk_length.value; i++) {
      
      if (str_query_string!="") 
         str_query_string += "&";
         
      str_query_string += frm["pk_"+i+"_name"].value + "=" + frm["pk_"+i].value;
   }
   
   return str_query_string;
}

// inserir a chamada desta function no botao Incluir
function open_ins_record(frm, p_html, p_target, p_param, p_style) {
   if (!check_form_pk(frm))      
      return;
	
   if (arguments.length>=4) 
      p_param = "&"+p_param;
   else
      p_param = "";

   window.open(p_html+"?acao=A"+p_param,p_target,p_style);
}

// inserir a chamada desta function no botao Modificar
function open_upd_record(frm, p_html, p_target,p_param, p_style) {
   if (!check_form_pk(frm))      
      return false; 
      
   if (isNull(frm.pk_0.value)) {
      alert("Please select record for modify");
      return false;   
   }
   
   if (arguments.length>=4) 
      p_param = "&"+p_param;
   else
      p_param = "";
   
   str_pk_query_string = get_pk_query_string(frm);
  window.open(p_html+"?acao=M&"+str_pk_query_string+p_param,p_target, p_style);
   
   return true;
}

// inserir a chamada desta function no botao Excluir
function open_del_record(frm, p_html, p_target, p_param, p_style) {
   if (!check_form_pk(frm))      
      return false;

   if (isNull(frm.pk_0.value)) {
      alert("Please select record for delete");
      return false;   
   }

   if (arguments.length>=4) 
      p_param = "&"+p_param;
   else
      p_param = "";

   str_pk_query_string = get_pk_query_string(frm);
      window.open(p_html+"?acao=D&"+str_pk_query_string+p_param,p_target,p_style);

	return true;
}

// inserir a chamada desta function no botao Query
function open_qry_record(frm, p_html, p_target, p_param, p_style) {
   if (!check_form_pk(frm))      
      return false;

   if (isNull(frm.pk_0.value)) {
      alert("Please select record for query");
      return false;   
   }

   if (arguments.length>=4) 
      p_param = "&"+p_param;
   else
      p_param = "";

   str_pk_query_string = get_pk_query_string(frm);
      window.open(p_html+"?acao=Q&"+str_pk_query_string+p_param,p_target,p_style);

	return true;
}

// inserir a chamada desta function no botao Imprimir
function open_print(frm, p_html) {
   if (!check_form_pk(frm))      
      return;

   if (isNull(frm.pk_0.value)) {
      alert("Favor selecionar um registro para impresso.");
      return;   
   }

   if (arguments.length>=4) 
      p_param = "&"+p_param;
   else
      p_param = "";

   str_pk_query_string = get_pk_query_string(frm);
      tela = p_html+"?acao=imp&"+str_pk_query_string;
      window.open(tela,'newwin','height=450,width=650,resizable=no,scrollbars=yes,toolbar=no,menubar=yes');
}

function _get_row(ptext) {
   var i = ptext.lastIndexOf("_");
   return ptext.substring(i+1,ptext.length+1);
}

function _onChangeRow() {
   this.form["r_"+_get_row(this.name)].value = "1";
}

function tableEntryChanged(frm) {
   var changed = false;
   var i;
   for (i=0; i<=frm.num_rows.value ; i++) {
      if (frm["r_"+i].value=="1") {
         changed = true;
         break;
      }   
   }
   return changed;
}

function addTableEntryHandlers(frm) {
   var row, col;
   if (frm["num_rows"] && frm["num_cols"]) {
   
      var numrows = frm.num_rows.value;
      var numcols = frm.num_cols.value;
   
      for(row=0; row<=numrows; row++) {
         for(col=0; col<=numcols; col++) {
            frm["v"+col+"_"+row].onchange=_onChangeRow;
         }   
      }
   }
}

function showID(pIDname) {
if (navigator.appName.indexOf("Netscape")!=-1)
   window.document.ids[pIDname].visibility = "show";
else
   document.all[pIDname].style.visibility = "visible";
}

function setBodyID(pIDname, pstr) {
   if (navigator.appName.indexOf("Netscape")!=-1)
      window.document.ids[pIDname].document.writeln(pstr);
   else
      document.all[pIDname].innerHTML=pstr;
}

function getBodyID(pIDname) {
   if (navigator.appName.indexOf("Netscape")==-1)
      return document.all[pIDname].innerHTML;
   else
      return "";   
}

function hideID(pIDname) {
if (navigator.appName.indexOf("Netscape")!=-1)
   window.document.ids[pIDname].visibility = "hide";
else
   document.all[pIDname].style.visibility = "hidden";
}

function totalNumericFields(pcheckValue) {
   var total=0;
   for(var i=1;i<arguments.length; i++) {
      if (!isNull(arguments[i].value)) {
         if (!pcheckValue(arguments[i].value)) {
            arguments[i].select();
            arguments[i].focus();
            alert("Valor invalido");
            return false;
         }   
         else
            total += parseFloat(arguments[i].value);
     }
   }
   return total;
}

function loadRequiredFields() {
   var frm = arguments[0];
   
   if (frm.acao && frm.acao.value=='del')
      return;
   
   for (var i=1; i<arguments.length; i++) {
      var field_name = arguments[i];
      if (frm[field_name])
         frm[field_name].style.backgroundColor="yellow";
   }
}

function date_onkeypress(evt) {
   if (isIE) {
      evt = window.event;
      var source = evt.srcElement;
      var keyCode = evt.keyCode;
   }
   else {
      var source = evt.target;
      var keyCode = evt.which;
   }

   var keyChar = String.fromCharCode(keyCode);

   if ( ("0123456789/").indexOf(keyChar)==-1) {
      evt.returnValue=false;
      return false;
   }

   switch (source.value.length) {
      case 0 :
         if (keyChar=="/") {
            evt.returnValue=false;
            return false;
         }

         break;

      case 1:
         if (keyChar=="/") {
            if (source.value=="0") {
               evt.returnValue=false;
               return false;
            }
            else {
               source.value="0"+source.value;
            }
         }
         else if (("456789").indexOf(source.value.charAt(0))!=-1 ||
                   (source.value.charAt(0)=="3" && keyChar!="0" && keyChar!="1")) {

            if (("01").indexOf(keyChar)!=-1)
               source.value="0"+source.value+"/";
            else
               source.value="0"+source.value+"/0";
         }

         var dd = parseInt(source.value+keyChar,10)

         // valida somente o dia
         if (dd > 31 || dd < 1) {
            evt.returnValue=false;
            return false;
         }


         break;

      case 2 :
         if (keyChar!="/") {
            source.value += "/";
         }

         if (("23456789").indexOf(keyChar)!=-1) {
            source.value=source.value.substr(0,3) + "0";

            // valida o mes e o dia
            var dd = parseInt(source.value.substr(0,2),10);
            var mm = parseInt(source.value.substr(3,1)+keyChar,10);

            if (mm==4 || mm==6 || mm==9 || mm==11) {
               if (dd==31) {
                  source.value = "30/"+source.value.substr(3,2);
               }
            }

         }


         break;

      case 3 :
         if (keyChar=="/") {
            evt.returnValue=false;
            return false;
         }

         if (("23456789").indexOf(keyChar)!=-1) {
            source.value=source.value.substr(0,3) + "0";

            // valida o mes e o dia
            var dd = parseInt(source.value.substr(0,2),10);
            var mm = parseInt(source.value.substr(3,1)+keyChar,10);

            if (mm==4 || mm==6 || mm==9 || mm==11) {
               if (dd==31) {
                  source.value = "30/"+source.value.substr(3,1);
               }
            }

         }

         break;

      case 4 :
         if (keyChar=="/") {
            if (source.value.charAt(source.value.length-1)=="0") {
               evt.returnValue=false;
               return false;
            }
            else {
               source.value=(source.value).substr(0,3) + "0" + source.value.substr(3,1) ;
            }
         }

         // valida o mes e o dia
         var dd = parseInt(source.value.substr(0,2),10);
         var mm = parseInt(source.value.substr(3)+keyChar,10);

         if (mm<1 || mm > 12) {
            evt.returnValue = false;
            return false;
         }

         if (mm==4 || mm==6 || mm==9 || mm==11) {
            if (dd==31) {
               source.value = "30/"+source.value.substr(3,1);
            }
         }

         break;

      case 5 :
         if (keyChar=="0") {
            evt.returnValue=false;
            return false;
         }

         if (keyChar!="/") {
            source.value += "/";
         }

         break;


      case 9 :
         if (keyChar=="/") {
            evt.returnValue=false;
         }

         var dd = parseInt(source.value.substr(0,2),10);
         var mm = parseInt(source.value.substr(3,2),10);

         if (mm==2) {
            var aa = parseInt(source.value.substr(6)+keyChar,10)

            if (dd>=29) {
               if (((aa/4)!=parseInt(aa/4,10))) {
                  source.value = "28/02/"+source.value.substr(6);
               }
               else {
                  source.value = "29/02/"+source.value.substr(6);
               }
            }

         }

         break;

      case 6:
         if (keyChar=="0") {
            evt.returnValue=false;
         }

      default :
         if (keyChar=="/") {
            evt.returnValue=false;
            return false;
         }
   }

}

function date_onchange(evt) {
   if (isIE) {
      evt = window.event;
      var source = evt.srcElement;
   }
   else {
      var source = evt.target;
   }

   if (trim(source.value)!="" &&
       !isDate(source.value)) {
      alert("Data invalida");
      source.select();
      source.focus();
      return false;
   }
}

function loadDateFields() {
   var frm = arguments[0];

   if (frm.acao && frm.acao.value=='del')
      return;

   for (var i=1; i<arguments.length; i++) {
      var field_name = arguments[i];
      if (frm[field_name]) {
         frm[field_name].onkeypress = date_onkeypress;
         frm[field_name].onchange = date_onchange;
      }
   }
}

function loadSelectOptionsDependent(p_selected, p_obj_target, p_array_options) {

   var opt0 = p_obj_target.options[0];
   p_obj_target.length=0;
   
   p_obj_target.options[0]=opt0;

   if (p_selected=='') 
      return;
   
   var i=0;
   while (p_array_options[i][2]!=p_selected)   
      i++;
   
   while (i<p_array_options.length && p_array_options[i][2]==p_selected) {
      p_obj_target.options[p_obj_target.length]=new Option(p_array_options[i][1],p_array_options[i][0],false,false);
      i++;
   }      
}

function setTagID(p_obj, p_value) {
   p_obj.setAttribute("tagID",p_value);
}
     
function setInnerHTMLTagID(p_tag,p_value) {
   for (var i=0; i<document.all.length ; i++) {
      if (document.all[i].tagID==p_tag) {
         document.all[i].innerHTML = p_value;
         return ;
      }
   }
}

function initTags() {
   for (var i=0; i < document.all.length ; i++) {
      setTagID(document.all[i],document.all[i].id);
   }
}

function searchScreen(campo,tela){
var janela="";
var campoValue = document.forms[0][campo].value;
campoValue = QVPlus(campoValue);
tela = tela+"?pQueryValue="+campoValue+"&pFieldName="+campo+"&pDsTitulo="; 
window.open(tela,'janela','scrollbars=1,toolbar=0,status=0,menubar=0,resizable=1,width=600,height=500,top=10,left=0'); 
}

function searchPerson(campo,role){
var janela="";
var campoValue = document.forms[0][campo].value;
campoValue = QVPlus(campoValue);
tela = "../table/Person_QF.asp?pQueryValue="+campoValue+"&pFieldName="+campo+"&pRole="+role; 
window.open(tela,'janela','scrollbars=1,toolbar=0,status=0,menubar=0,resizable=1,width=600,height=500,top=10,left=0'); 
}

function searchNomination(Vessel,Eta,NomSeq){
var janela="";
var vesselValue = document.forms[0][Vessel].value;
var etaValue = document.forms[0][Eta].value;
vesselValue = QVPlus(vesselValue);
etaValue = QVPlus(etaValue);
tela = "../Nomination/Nomination_QF.asp?pQueryVesselValue="+vesselValue+"&pQueryEtaValue="+etaValue+"&pFieldNameVessel="+Vessel+"&pFieldNameEta="+Eta+"&pFieldNameNomSeq="+NomSeq;
window.open(tela,'janela','scrollbars=1,toolbar=0,status=0,menubar=0,resizable=1,width=800,height=500,top=10,left=0'); 
}


function searchBU(campo,tela){
var janela="";
var campoValue = document.forms[0][campo].value;
campoValue = QVPlus(campoValue);
tela = tela+"?pQueryValue="+campoValue+"&pFieldName="+campo+"&pDsTitulo=&pSub=Y";
window.open(tela,'janela','scrollbars=1,toolbar=0,status=0,menubar=0,resizable=1,width=600,height=500,top=10,left=0'); 
}

function QVPlus(vString){
   vString = escape(vString);
   vString = vString.replace(/\+/g,'%2b');
   return vString;
}

function enable_all(){
	var num_elements = document.forms[0].elements.length;
	var a_ml = new Array(num_elements);
	for (var i=0;i<num_elements;i++)
	{
		document.forms[0].elements[i].disabled=false;
	}
}

function disable_all(){
	var num_elements = document.forms[0].elements.length;
	var a_ml = new Array(num_elements);
	for (var i=0;i<num_elements;i++)
	{
		document.forms[0].elements[i].disabled=true;
	}
}

/*
   Sort de tabelas por coluna, utilizado em conjunto com a funcao
   asp writeTable_I
*/
function BubbleSort(col,numCols,numRows)
{
  for (var x = 0; x < numRows; x++){
     for (var y = 0; y < numRows; y++){
          if ( window.document.all["L"+y+"_"+col].innerHTML >
              window.document.all["L"+x+"_"+col].innerHTML  ) {
              for (var z = 0; z<numCols; z++){
                 window.document.all["a0_"+z].innerHTML = window.document.all["L"+x+"_"+z].innerHTML ;
              }
              for (var z = 0; z<numCols; z++){
                  window.document.all["L"+x+"_"+z].innerHTML = window.document.all["L"+y+"_"+z].innerHTML ;
              }
              for (var z = 0; z<numCols; z++){
                  window.document.all["L"+y+"_"+z].innerHTML = window.document.all["a0_"+z].innerHTML ;
              }
         }
     }
  }
}
/*
  Retorna string PLSQL-Block com base no formulrio/Colunas/FunctionName
  informados como parametro. Usado em conjunto com a funcao asp execProc
*/
function makePlBlock(objFrm,numCols,plFunctionName,plKeyParameters)
{
    var plString = "";
    var cont = objFrm.elements.length;

    for (var i=0;i<cont;i+=numCols)
    {
       plString = plString + " " + plFunctionName + "(";
	   
	   if (plKeyParameters != "") plString = plString + plKeyParameters ;
	   
       for (var j=0;j<numCols;j++)
       {
          plString = plString + "'" + objFrm.elements[i+j].value + "'";
	       if (j < numCols-1) plString = plString + (",");
       }
	   
       plString = plString + ");";
    }
    return plString ;
}


// Inicio de Funcoes para Encrypt/Decrypt de Dados
var allowedChars = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
function CharToDec(Character) {
   var pos = allowedChars.indexOf(Character.charAt(0));
   if(pos == -1) {
      window.status += Character;
      pos = 0;
   }
   return pos;
}

function DecToBin(Decimal) {
   var i = 0;
   var Bin = "";
   while(Decimal > Math.pow(2, i)) {
      i++;
   }

   for (var i = i; i >= 0; i--) {
      if (Decimal >= Math.pow(2, i)) {
         Decimal -= Math.pow(2, i);
         Bin += "1";
      } 
      else Bin += "0";
   }
   return Bin;
}

function ExclusiveOr(input1, input2) {
   var output = "";
   while(input1.length < input2.length) {
      input1 = "0" + input1;
   }
   
   while(input1.length > input2.length) {
      input2 = "0" + input2;
   }
   
   if (input1.length == input2.length) {
      for (var i=0; i<input1.length; i++) {
         output += (input1.charAt(i) != input2.charAt(i)) ? "1" : "0";
      }
   } 
   else alert("Erro de Operao no Encrypt/Decrypt de Senha.");
   return output;
}

function BinToDec(Binary) {
   var Dec = 0;
   for(var i=0; i<=Binary.length; i++) {
      Dec += Math.pow(2,i) * Binary.charAt((Binary.length - 1) - i);
   }
   return Dec;
}

function DecToChar(Decimal) {
   if (Decimal > allowedChars.length) {
      Decimal = 0;
   }
   var pos = allowedChars.charAt(Decimal);
   return pos;
}

function BlockEncrypt(input1, input2) {
   var output = "";
   if (input1.length == input2.length) {
   for (var i = 0; i < input1.length; i++) {
      output += DecToChar(BinToDec(ExclusiveOr(DecToBin(CharToDec(input1.charAt(i))), DecToBin(CharToDec(input2.charAt(i))))));
      }
   } else alert("Erro no Block Encryption.");
   return output;
}

/*   Function:  Encrypts data.
   Parameters:  2 parameters:  (text string, key)
      Returns:  Encrypted string
   Decrypt the string by running function twice.
*/
function EncryptString(plainText, key) {
   var cipherText = "";
   var textBlock, keyBlock = "";
   var keyRotationPos = 0;
   var beforePos, afterPos = 0;
   var blockSize = 48;
   // Substitui o Caracter pelo numero da posicao do caracter dentro dos caracteres vlidos
   var key = hashKey(key);

   while(afterPos < plainText.length) {
      beforePos = 0;
      afterPos = blockSize;
      if(afterPos < plainText.length) {
         afterPos = plainText.length;
      }
      
      textBlock = plainText.substring(beforePos, afterPos);
      keyBlock = key.substring(keyRotationPos, key.length);
      while(keyBlock.length < textBlock.length) {
         keyBlock += key;
      }
      keyBlock = keyBlock.substring(0, textBlock.length);
      keyRotationPos = keyBlock.length % key.length;
      cipherText += BlockEncrypt(textBlock, keyBlock);
      beforePos = afterPos;
      afterPos += blockSize;
   }
   return cipherText;
   alert ('cipherText = ' + cipherText)
}

function hashKey(key) {
   var hash = "";
   for (var i = 0; i < key.length; i++) {
      hash += DecToChar((CharToDec(key.charAt(i)) + i) % allowedChars.length);
   }
   return hash;
}

// Fim das Funcoes para Encrypt/Decrypt de Dados
