/**
 * 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( value.length != 0 ) {
  	if ( number > 0 )
      value = fillLeft( deleteZerosLeft( value ), '0', number );
    else
      value = deleteZerosLeft( value );
  }
  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      = "+";
  var sinalMinus = "";
//  if( value.indexOf( "-" ) != -1 )
  if( lastSignal( value ).indexOf( "-" ) > -1 )
  {
    sinal      = "-";
    sinalMinus = "-";
  }
  //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
        if ( symbol == MINUS )
          formatValue = sinalMinus + formatValue;
        else
          formatValue = caracter + formatValue;
    }
    else
      break;
  }
  if( hasMinusSignal( displayMask ) && formatValue.indexOf( "-" ) == -1 )
    formatValue = sinalMinus + formatValue;
  else
    if( hasSignal( displayMask ) && formatValue.indexOf( "+" ) == -1 && formatValue.indexOf( "-" ) == -1 )
      formatValue = sinal + formatValue;
  return( formatValue );
}

function lastSignal( value )
{
  var iPlus = value.lastIndexOf( "+" );
  var iMinus = value.lastIndexOf( "-" );
  if( ( iPlus == -1 && iMinus == -1 ) ||
      iPlus > iMinus )
    return "+";
  return "-";
}

function hasSignal( mask )
{
  return( mask.indexOf( "S" ) > -1 || mask.indexOf( "s" ) > -1 )
}

function hasMinusSignal( mask )
{
  return( mask.indexOf( "s" ) > -1 )
}

function formatValueNumber( field, displayMask, event )
{
  /* Tenta recuperar a tecla pelo Netscape */
  var key = event.keyCode;
  /* ou pelo IE */
  if( key == null )
    key = event.which;
  if( key != 9 )
  { 
    var value = field.value;
    var valueFormated = formatNumber( value, displayMask );
    if( value != valueFormated )
      field.value = valueFormated;
  }
}
