function trim(s)
{
  var r = "";
	
  r = ltrim(s);
  r = rtrim(r);
	
  return r;
} 

function ltrim(s)
{
  var r = "";
  var i = len = 0;
	
  // Return immediately if an invalid value was passed in
  if (s+"" == "undefined" || s == null)	
    return null;

  // Make sure the argument is a string
  s += "";

  if (s.length == 0) 
    r = "";
  else
  {	
    // Loop through string starting at the beginning as long as there
    // are spaces.
    //	  	len = s.length - 1;
    len = s.length;
					
    while ((i <= len) && (s.charAt(i) == " "))
      i++;
	
    // When the loop is done, we're sitting at the first non-space char,
    // so return that char plus the remaining chars of the string.
    r = s.substring(i, len);
  }
			
  return r;
}

function rtrim(s)
{
  var r = "";
  var i = 0;
	
  // Return immediately if an invalid value was passed in
  if (s+"" == "undefined" || s == null)	
    return null;

  // Make sure the argument is a string
  s += "";

  if (s.length == 0) 
    r = "";
  else
  {	
    // Loop through string starting at the beginning as long as there
    // are spaces.
  
    i = s.length - 1;
    while ((i >= 0) && (s.charAt(i) == " "))
      i--;
	
    // When the loop is done, we're sitting at the last non-space char,
    // so return that char plus all previous chars of the string.
    r = s.substring(0, i + 1);
	  	
  }
			
  return r;
}

function sodigitos(s) 
{
  var r = "";
			
  // Return immediately if an invalid value was passed in
  if (s+"" == "undefined" || s == null)	
    return null;
	
  // Make sure the argument is a string
  s += "";

  // Loop through entire string, adding each character from the original
  // string if it is a number

  var n = s.length;

  for (var i=0; i < n; i++)
  {
    c = s.charAt(i);

    if ( (c >= "0") && (c <= "9") )
      r = r + s.charAt(i);
 
  } // end for loop      
			
  return r;
}  
/*
function digitosespacos(s) 
{
  var r = "";
			
  // Return immediately if an invalid value was passed in
  if (s+"" == "undefined" || s == null)	
    return null;
	
  // Make sure the argument is a string
  s += "";

  // Loop through entire string, adding each character from the original
  // string if it is a number

  var n = s.length;

  for (var i=0; i < n; i++)
  {
    c = s.charAt(i);

    if (( (c >= "0") && (c <= "9") ) or (c == " "))
      r = r + s.charAt(i);
 
  } // end for loop      
			
  return r;
}  
*/
function isempty(s)
{
  if (s == null || s == "") 
  {
    return true;
  }
  else
    return false;
}

function isint(v)
{
  s = v.toString();
  n = s.length;

  for (var i = 0; i < n; i++)
  {
    var c = s.charAt(i);

    if ( c < "0" || c > "9")

      return false;
  }
  return true;
}

function isnumber(v)
{
  if (isNaN(parseFloat(v)))
    return false;
  else
    return true;
}

function strtran(s, d, p)
{
  n = s.indexOf(d);
  l = d.length;

  while (n >= 0)
  {
     s = s.substring(0, n) + p + s.substring(n+l,s.length);

     n = s.indexOf(d);
  }
  return s;
}

function ulcase(s)
{

  // Return immediately if an invalid value was passed in
  if (s+"" == "undefined" || s == null)	
    return null;

  // Make sure the argument is a string
  s += "";

  var n = s.length;
  var r =  "";
  var spc = true;

  for (i=0; i<n;i++)
  {
     c = s.charAt(i).toLowerCase();

     if (c == ' ' || c == '.')
     {
       spc = true;
     }
     else 
     {
       if (spc)
         c = c.toUpperCase();

       spc = false;
     }  
     r = r + c;
  }
  r = strtran(r, " De ", " de ");
  r = strtran(r, " Da ", " da ");
  r = strtran(r, " Das ", " das ");
  r = strtran(r, " Do ", " do ");
  r = strtran(r, " Dos ", " dos ");
  r = strtran(r, " E ", " e ");
  r = strtran(r, ".De ", ".de ");
  r = strtran(r, ".Da ", ".da ");
  r = strtran(r, ".Das ", ".das ");
  r = strtran(r, ".Do ", ".do ");
  r = strtran(r, ".Dos ", ".dos ");
  r = strtran(r, ".E ", ".e ");

  return r;
}

function onespace(s)
{
  // Return immediately if an invalid value was passed in

  if (s+"" == "undefined" || s == null)	
    return null;

  // Make sure the argument is a string
  s += "";

  n = s.indexOf("  ");

  while (n >= 0)
  {
    s = strtran(s, "  ", " "); 
    n = s.indexOf("  ");
  } 

  return s; 
}

function hasdigits(s)
{
  if (s+"" == "undefined" || s == null)	
    return null;

  s += "";

  for (var i=0; i <= 9;i++)
  {
    if (s.indexOf(i) >= 0)
      return true;
  }
  return false;
}

function ulcaseaddr(s)
{
  p = s.length+1;
 
  for (var i = 0; i <= 9; i++)
  {
  
    n = s.indexOf(i);
  
    if (n < p && n > 0)
      p = n;
  }

  var ne = s.substring(0, p);
  var nr = s.substring(p);

  ne = ulcase(ne) + nr.toString();

  return ne;
}

function abrev(s)
{
  if ( "DOS#DAS#DE".indexOf(s.toUpperCase()) < 0)
  {
    r = s.substring(0,1).toUpperCase() + "."; 
  }
  else
  {
    r = s;
  }  
  return r;
}

function sugestname(s,n)
{
  if (s+"" == "undefined" || s == null)	
    return null;

  s += "";
  
  s = onespace(trim(s));
  
  if (s.length <= n)
    return s;
  else
  {
    var p = new Array();
    var a = new Array();
    var l = new Array();
    var r = s;
    var k = s.indexOf(" ");
    i = 0;
    while ( k >= 0 )
    {
      p[i] = s.substring(0,k);
      a[i] = abrev(p[i]);
      l[i] = p[i].length;
      i++;  

      s = trim(s.substring(k));
      k = s.indexOf(" ");  
    }
    p[i] = s;
    a[i] = abrev(p[i]);
    l[i] = p[i].length;
    
    if ( i > 0 ) // se houver apenas um nome, nao ha o que fazer
    {
      // Primeira tentativa: abreviando um dos nomes, iniciando pelo penultimo
      
      j = i - 1;
      w = r;
      while ( r.length > n && j > 0 )
      {
        r = p[0] + " ";

        for ( var k=1; k<i; k++ )
        {
           if ( k == j )
           {
             r = r + a[k] + " ";
           }
           else
             r = r + p[k] + " ";
        }
        j--;        
        r = r + p[i];
      }

      // Segunda tentativa: abreviando todos os nomes internos, exceto um

      if ( r.length > n )
      {
      
        j = 1;
        while ( r.length > n && j < i )
        {
          r = p[0] + " ";

          for ( var k=1; k<i; k++ )
          {
             if ( k == j )
             {
               r = r + p[k] + " ";
             }
             else
               r = r + a[k] + " ";
          }
          j++;        
          r = r + p[i];
        }
      }
      
      // Terceira tentativa: abreviando todos os nomes internos
      if ( r.length > n )
      {
      
         r = p[0] + " ";

         for ( var k=1; k<i; k++ )
         {
           r = r + a[k] + " ";
         }
         r = r + p[i];
      }
      
      // Se ainda nao deu certo, desista      
      if ( r.length > n )
      {
        r = w;
      }
      
     
    }
    
    return r;
  }  
 
}

function iscpf(s)
{

  var r, i, j, k, dv1, dv2;

  r = false;

  s = trim(sodigitos(s));

  if (s.length == 11)
  {

    dv1 = 0;
    k = 2;
  
    for ( var i=8; i>=0; i-- )
    {
      dv1 = dv1 + parseInt(s.substring(i,i+1)) * k;
      k++;
    }
  
    dv1 = dv1 % 11;
  
    dv1 = 11 - dv1;
  
    if (dv1 > 9)
      dv1 = 0;
 
    dv2 = 0
    k = 2
    for(i=9; i>=0;i--)
    {
      dv2 = dv2 + parseInt(s.substring(i,i+1)) * k;
      k++;
    }  
    
    dv2 = dv2 % 11;
  
    dv2 = 11 - dv2;
  
    if (dv2 > 9)
      dv2 = 0;
  
    if ("" + dv1 + dv2 == s.substring(9,11))
      r = true;
  }

  return r;

}

function formatcpf(s)
{
  s = trim(sodigitos(s));
  s = s.substring(0,3)+"."+s.substring(3,6)+"."+s.substring(6,9)+"-"+s.substring(9);
  return s;
}

function formatcep(s)
{
  s = trim(sodigitos(s));
  s = s.substring(0,5)+"-"+s.substring(5);
  return s;
}


function transdate(s)
{
  x = onespace(trim(s));
  x = strtran(x," ","/");
  x = strtran(x,"-","/");
  
  y = strtran(x,"/","");

  var r = true;
  var dia;
  var mes;
  var ano;

  var hoje = new Date();
      
  if ( (x.length - y.length) == 0 )
  {
     // sem separadores, acrescente mes e ano
     dia = parseInt(x,10) - 1;   
     mes = hoje.getMonth();
     ano = hoje.getYear();
     
     if ( ano < 100 )
       ano += 1900;
        
  }
  else if ( (x.length - y.length) == 1)
  {
    // falta um separador, assuma ano corrente
    w = x.indexOf("/");
   
    dia = parseInt(x.substring(0,w),10);
    
    mes = parseInt(x.substring(w+1),10) - 1;
    
    ano = hoje.getYear();     
   
    if ( ano < 100 )
      ano += 1900;
 
  }
  else if ( (x.length - y.length) == 2 )
  {
    // nao faltam separadores, pegue as partes
    
    w = x.indexOf("/");
   
    dia = parseInt(x.substring(0,w),10);
 
    x = x.substring(w+1);
       
    w = x.indexOf("/");

    mes = parseInt(x.substring(0,w),10) - 1;
    ano = parseInt(x.substring(w+1),10);
 
    if ( ano < 100 )
    {
      if ( ano > 20 )
        ano += 1900;
      else
        ano += 2000;
    }           
    else if ( ano < 1000 )
      r = false;
  }
  else
  {
    // ha mais separadores do que o previsto, salte fora
    r = false;
  }

  if ( r )
  {
    var d = new Date(ano, mes, dia);
   
    var xdia = d.getDate();
    var xmes = d.getMonth();
    var xano = d.getYear();

    if ( xano < 200 )
      xano += 1900;
   
    if ( xdia != dia || xmes != mes || xano != ano )
      r = false;
    
  }

 /* alert(dia);
  alert(xdia);
  alert(mes);
  alert(xmes);
  alert(ano);
  alert(xano);
 */
  
  if ( r )
  {
    dia += 100;
    mes += 101;
      
    r = dia.toString().substring(1) + "/" + mes.toString().substring(1) + "/" + ano.toString();
    
    return r;
  }  
  else
    return null;

}

function msg(s, q)
{

  if ( ! isempty(s) )
  {
    alert(s);
	q.focus();
//  codigo para o evento onBlur, se um dia funcionar 
//    var r = confirm(s +"\n\nPressione ESC ou clique em Cancelar para corrigir.\nPara confirmar os dados digitados clique em OK.");
    
//    if ( ! r )
//    {
//      q.focus();
//    }  

    return r;
  }
  else
    return true;

}

function msgsubmit(s)
{
   s = "O(s) erro(s) a seguir impede(m) que a operação seja efetivada:\n\n" + s;
   s += "\nPor favor, corrija o(s) campo(s) indicado(s) e tente novamente.";
   alert(s);

}
