/**
 * Generic
 */

function isDigit( str )
{
  for( var i = 0; i < str.length; i++ )
  {
    var charCode = str.charCodeAt( i );
    if( !(charCode >= 48 && charCode <= 57) )
      return( false );
  }
  return( true );
}

function isLetter( str )
{
  for( var i = 0; i < str.length; i++ )
  {
    var charCode = str.charCodeAt( i );
    if( !(charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122) )
      return( false );
  }
  return( true );
}

function isLetterOrDigit( str )
{
  for( var i = 0; i < str.length; i++ )
  {
    var character = str.charAt( i );
    if( !isDigit( character ) && !isLetter( character ) )
      return( false );
  }
  return( true );
}


function searchKey( campo, keyEvent )
{
  var key = keyEvent.keyCode;
  document.form[campo].value = key;
}

function nextFocus( field, size, event )
{
  /* Tenta recuperar a tecla pelo Netscape */
  var key = event.keyCode;
  /* ou pelo IE */
  if( key == null )
    key = event.which;
  /* Se não conseguir por nenhum dos dois, seta como A */
  if( key == null )
    key = 65;

  var i;
  var value = field.value;

  if( field.form.elements.length != 0 &&
      size == value.length &&
      key != 0 && key != 8 && key != 9 && key != 16 && key != 20 && key != 27 &&
      !(key >= 33 && key <= 46) &&
      !(key >= 16 && key <= 18) &&
      !(key >= 90 && key <= 93) &&
      !(key >= 112 && key <= 123) &&
      !(key >= 144 && key <= 145) )
    for( i = 0; i < field.form.elements.length; i++ )
      if( field == field.form[ i ] )
        field.form[ i + 1 ].focus();

}

function nextFieldFocus( field, size, event, nextField )
{
  /* Tenta recuperar a tecla pelo Netscape */
  var key = event.keyCode;
  /* ou pelo IE */
  if( key == null )
    key = event.which;
  /* Se não conseguir por nenhum dos dois, seta como A */
  if( key == null )
    key = 65;

  var i;
  var value = field.value;

  if( field.form.elements.length != 0 &&
      size == value.length &&
      key != 0 && key != 8 && key != 9 && key != 16 && key != 20 && key != 27 &&
      !(key >= 33 && key <= 46) &&
      !(key >= 16 && key <= 18) &&
      !(key >= 90 && key <= 93) &&
      !(key >= 112 && key <= 123) &&
      !(key >= 144 && key <= 145) )
    nextField.focus();
}

function getField( c )
{
  var i;
  var j;
  for( i = 0; i < document.forms.length; i++ )
  {
    var f = document.forms[ i ];
    for( j = 0; j < f.elements.length; j++ )
    {
      var campo = f[ j ];
      if( c == campo.name )
        return campo;
    }
  }
  return null;
}

function setFocus( campofoco )
{
  var campo = getField( campofoco )
  if( campo != null)
    campo.focus();
}

function setFirstFieldFocus()
{
  var form = document.forms[ 0 ];
  if( form != null )
    for( var i = 0; i < form.elements.length; ++i )
      if( form[ i ].type != 'hidden' )
      {
        form[ i ].focus();
        break;
      }
}

/**
 * Number
 */

function validateCaracterNumber( str )
{
  var caracterStr;
  for( var j = 0; j < str.length; ++j )
  {
    caracterStr  = str.charAt( j );
    var charCode = str.charCodeAt( j );
    //caracter numérico
    if( !isDigit( caracterStr ) &&
        caracterStr != '+' &&
        caracterStr != '-' )
      return( false );
  }//for
  return( true )
}

function numberZeros( displayMask )
{
  var number = 0;
  for( var i = 0; i < displayMask.length; ++i )
    if( displayMask.charAt( i ) == '0' )
      ++number;
  return( number );
}

function insertZeros( value, displayMask )
{
  var number = numberZeros( displayMask );
  if( ( number > 0 ) &&
      ( value.length != 0 ) )
    value = fillLeft( deleteZerosLeft( value ), '0', number );
  return( value );
}

function deleteZerosLeft( value )
{
  var result = "";
  var i;
  for( i = 0; i < value.length; i++ )
  {
    var caracter = value.charAt( i );
    if( caracter != '0' )
    {
      if( isDigit( caracter ) )
        break;
      result = result + caracter;
    }
  }
  result = result + value.substring( i, value.length );
  if( result.length == 0 && value.indexOf( "0" ) != -1 )
    result = "0";
  return( result );
}

function deleteMaskNumber( value )
{
  var caracterValue;
  var valueDelete = "";
  for( var j = 0; j < value.length; ++j )
  {
    caracterValue = value.charAt( j );
    if( isDigit( caracterValue ) )
      valueDelete = valueDelete + caracterValue;
  }
  return( valueDelete );
}

function formatNumber( value, displayMask )
{
  //Verifica se o valor tem sinal e qual é o sinal
  var sinal = "+";
  if( value.indexOf( "-" ) != -1 )
    sinal = "-";
  //Exclui símbolos do campo
  value = deleteMaskNumber( value );
  var formatValue = "";
  var caracter;
  var symbol;
  var anterior;
  //Coloca zeros no início da string
  value = insertZeros( value, displayMask );
  var lenValue = value.length - 1;
  //Percorre a máscara da direita para a esquerda
  for( var i = displayMask.length - 1; i > -1; --i )
  {
    caracter = displayMask.charAt( i );
    //Se já estiver após a primeira posição
    if ( i > 0 )
    {
      //Verifica se o anterior é um separador,
      //incluindo o caracter atual como símbolo do valor.
      anterior = findSymbol( displayMask.substring( i - 1, i ) );
      if ( anterior == SEPARATOR )
      {
        formatValue = caracter + formatValue;
        --i;
      }
    }
    if ( lenValue > -1)
    {
      symbol = findSymbol( caracter );
      if ( symbol == CARACTER )
      {
        formatValue = value.substring( lenValue, lenValue + 1 ) + formatValue;
        --lenValue;
      }
      else
      if ( symbol == SIGNAL )
        formatValue = sinal + formatValue;
      else
        formatValue = caracter + formatValue;
    }
    else
      break;
  }
  return( formatValue );
}

function formatValueNumber( field, displayMask, event )
{
  var value = field.value;
  var valueFormated = formatNumber( value, displayMask );
  if( value != valueFormated )
    field.value = valueFormated;
}

/**
 * Format
 */

// Constantes
SYMBOL      = 0;
CARACTER    = 1;
SEPARATOR   = 2;
SIGNAL      = 3;
UPPER       = 4;
LOWER       = 5;
OTHER       = 6;

function fillLeft( str, c, len )
{
  for( var i = str.length; i < len; ++i )
    str = c + str;
  return( str );
}

function sizeMask( mask )
{
  var caracter;
  var lenMask = 0;
  var type;
  for( var i = 0; i < mask.length; ++i )
  {
    caracter = mask.charAt( i );
    type = findSymbol( caracter );
    if( type != UPPER &&
        type != LOWER &&
        type != SEPARATOR )
      ++lenMask;
  }
  return( lenMask );
}

function findSymbol( symbol )
{
  var typeSymbol = SYMBOL;
  switch( symbol )
  {
    case '#':
    case '0':
    case 'L':
    case 'l':
    case 'A':
    case 'a':
    case 'C':
    case 'c': {
                typeSymbol = CARACTER;
                break;
              }
    case 'S': {
                typeSymbol = SIGNAL;
                break;
              }
    case '>': { typeSymbol = UPPER;
                break;
              }
    case '<': { typeSymbol = LOWER;
                break;
              }
    case '\\': {
                 typeSymbol = SEPARATOR;
                 break;
               }
    default: typeSymbol = OTHER;
  }
  return( typeSymbol );
}

var Month_Label = new Array ('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');

var data = new Date();

function getMonth() {
  return data.getMonth();
}

function getYear() {
  return data.getFullYear();
}

function getLabelYear() {
  var year_label = new Array();
  var fYear = getYear() - 10;
  var cont = getYear() - fYear;
  if (getMonth() == 11) {
      fYear++;
  }
  for (i=0; i < cont; i++) {
    year_label[i] = ++fYear;
  }
  return year_label;
}
