/*
 * Funções para Controle de Tela.
 *
 * @version $Id: screenControl.js,v 0.1 2005/11/09 09:49:05 tdp-raf Exp $;
 * 
 * @author Rafael Fernandes <rafael@spcom.com.br>
 * @copyright Copyright 2005, SPCOM Comércio e Promoções S.A.
 */

/*
 * Função para inicializar uma Nova Janela Pop-Up.
 * 
 * @version 0.1 ( 09/11/2005 )
 * 
 * @author Rafael Fernandes <rafael@spcom.com.br>
 * @copyright Copyright 2005, SPCOM Comércio e Promoções S.A.
 */
function windowOpen( url, window_name, properties ) {
  var properties_default = "toolbar=no,location=no,status=yes,menubar=no,resizable=no,scrollbars=yes,top=100,left=100,";
  var obj_window = window.open( url, window_name, properties_default + properties );
  var arr_windows = new Array();
  arr_windows.push( obj_window );
  obj_window.focus();
}

/*
 * Função que permite apenas numeros digitados no campo.
 * 
 * @version 0.1 ( 09/11/2005 )
 * 
 * @author Rafael Fernandes <rafael@spcom.com.br>
 * @copyright Copyright 2005, SPCOM Comércio e Promoções S.A.
 */
function blockChars() {
  if ( event.key_code < 48 || event.key_code > 57 ) event.returnValue = false;
}

/*
 * Função para controle de Foco Automatico.
 * 
 * @version 0.1 ( 09/11/2005 )
 * 
 * @author Rafael Fernandes <rafael@spcom.com.br>
 * @copyright Copyright 2005, SPCOM Comércio e Promoções S.A.
 */
function autoTab( input, len, e ) {
  var navigator_name = ( navigator.appName.indexOf( "Netscape" ) != -1 );
  var key_code = ( navigator_name ) ? e.which : e.key_code; 
  var filter = ( navigator_name ) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

  if ( input.value.length >= len && !countElements( filter, key_code ) ) {
    input.value = input.value.slice(0, len);
    input.form[(getIndex(input)+1) % input.form.length].focus();
  }

  // Conta elementos de um Vetor
  function countElements( arr, ele ) {
    var found = false, index = 0;
    while ( !found && index < arr.length ) if ( arr[index] == ele ) found = true; else index++;
    return found;
  }

  // Obtem o Indice
  function getIndex( input ) {
    var index = -1, i = 0, found = false;
    while ( i < input.form.length && index == -1 ) if ( input.form[i] == input ) index = i; else i++;
    return index;
  }

  return true;
}

/*
 * Função para controle e Validação de Formularios.
 * 
 * @version 0.1 ( 09/11/2005 )
 * 
 * @author Rafael Fernandes <rafael@spcom.com.br>
 * @copyright Copyright 2005, SPCOM Comércio e Promoções S.A.
 */
function formValidations( form ) {
  var error = 0;
  var str_error = '';
  var arr_validation = Array();
  for ( cont = 0; cont < form.length; cont++ ) {
    arr_validation = form[cont].validation.split(' ');
    for ( cont2 = 0; cont2 < arr_validation.length; cont2++ ) {
      switch ( arr_validation[cont2] ) {
        case "branco": if ( testBranco( form[cont] ) == 1 ) { str_error = str_error + "O Campo " + form[cont].label + " está em branco.\n"; error = 1; } break;
        case "numero": if ( testNumero( form[cont] ) == 1 ) { str_error = str_error + "O Campo " + form[cont].label + " só pode conter números.\n" ; error = 1; } break;
        case "selecionado": if( testSelecionado( form[cont] ) == 1 ) { str_error = str_error + "O Campo " + form[cont].label + " precisa estar selecionado.\n" ; error = 1; } break;
        case "cpf": if( testCPF( form[cont] ) == 1 ) { str_error = str_error + "O Campo " + form[cont].label + " não é um CPF válido.\n" ; error = 1; } break;
        case "email": if( testEMail( form[cont] ) == 1 ) { str_error = str_error + "O Campo " + form[cont].label + " não é um E-Mail válido.\n" ; error = 1; } break;
      }
    }
  }
  
  // Testa se campo está em Branco.
  function testBranco( field ) {
    var return_value = 0;
    if ( field.value == "" ) return_value = 1;
    return return_value;
  }
  
  // Testa se campo é Numerico.
  function testNumero( field ) {
    var return_value;
    var number = field.value;
    var return_value = 0;
    var str_valid_number = "1234567890";
    var str_temp_char;
    for ( count = 0; count < number.length; count++ ) {
      str_temp_char = number.substring( count, count + 1 );
      if ( str_valid_number.indexOf( str_temp_char, 0 ) == -1 ) return_value = 1;
    } 
    return return_value;
  } 
  
  // Testa se campo foi Selecionado.
  function testSelecionado( field ) {
    var return_value = 0;
    if ( field.selectedIndex == 0 ) return_value = 1;
    return return_value;
  }

  // Testa se campo obedece a regras de validação do CPF.
  function testCPF( field ) {
    var return_value = 0;
    if( field.value != "" ) {
      if ( field.value.length != 11 || field.value == '11111111111' || field.value == '22222222222' || field.value == '33333333333' || field.value == '44444444444' || field.value == '55555555555' || field.value == '66666666666' || field.value == '77777777777' || field.value == '88888888888' || field.value == '99999999999' || field.value == '00000000000' ) return_value = 1;

      soma = 0;
      for ( i = 0; i < 9; i++ ) soma += parseInt( field.value.charAt( i ) ) * ( 10 - i );
      resto = 11 - ( soma % 11 );
      if ( resto > 9 ) resto = 0;
      if ( resto != parseInt( field.value.charAt( 9 ) ) ) return_value = 1;

      soma = 0;
      for ( i = 0; i < 10; i++ ) soma += parseInt( field.value.charAt( i ) ) * ( 11 - i );
      resto = 11 - ( soma % 11 );
      if ( resto > 9 ) resto = 0;
      if ( resto != parseInt( field.value.charAt( 10 ) ) ) return_value = 1;
    }
    return return_value;
  }

  // Testa se campo obedece a regras de validação de E-Mail.
  function testEMail( field ) {
    var return_value = 0;
    if( field.value != "" ) {
      var expressao = /[a-z0-9_.-]+@+[a-z0-9_.-]+.+[a-z]/;
      if ( !expressao.test( field.value ) ) return_value = 1;
/*
      var field_val = expressao.test( field.value );
      var inicio = field.value.search( '@' );
      var fim = ( field.value.length - inicio );
      var trecho = field.value.substr( inicio, fim );
      for ( i = 1; i <= field.value.length; i++ ) { ch = field.value.substr( i-1, 2 ); if ( ch == "..") { field_val = false; break; } }
      for ( i = 1; i <= trecho.length; i++ ) { ch = trecho.substr( i-1, 1 ); if (ch == ".") { field_val = true; break; } else { field_val = false;} }
      if ( field_val ) return_value = 1;
*/
	}
    return return_value;
  }

  if ( error == 1 ) {
    alert( "Ocorreram erros em seu Formulario:\n\n" + str_error );
  } else {
    form.submit();
  }
}