var mensagem;
var showdialog;
function checkFieldBlur( obr, field, tipo ){
	showdialog = false;
  return checkFieldCore( obr, field, '', tipo, arguments );
}
var myForm;
function checkField( obr, field, label, tipo ){
	showdialog = true;
  return checkFieldCore( obr, field, label, tipo, arguments);
}

function checkFieldCore( obr, field, label, tipo ){
	if ( field ){
    
    if ( tipo == "List" )
      return !treatFieldError(  ( obr && field.selectedIndex == 0 ), field, label, err500, showdialog );
    
		if ( tipo == "SimNao" ){
      return !treatFieldError(  ( obr && field.selectedIndex == 0 ), field, label, err500, showdialog );
			//testResult = ( !field[0].checked && !field[1].checked );
			//return !treatFieldError( testResult, field[0], label, err500, showdialog );
		}
		  
    if ( tipo == "ConfSenha" ){
      //alert ( arguments[5][4] );
      //alert ( param );
      return !treatFieldError(  ( field.value != arguments[4][4] ), field, label, err3, showdialog );
    }

		if ( tipo == "Telefone" ){
			telObj = new telefoneObj( obr, field, label  );
			return telObj.validate();
    }
		
		if ( tipo == "Date" ){
      dataObj = new dateObj( obr, field, label );
			return dataObj.validate();
		}
		
		if ( tipo == "DoisDates" ){
      dataObj = new dateObj( obr, field, label );
			if (!dataObj.validate() ) return false;
			dataObj2 = new dateObj( arguments[4][4], arguments[4][5], arguments[4][6] );
			if (!dataObj2.validate() ) return false;
			if ( dataObj.isEmpty() || dataObj2.isEmpty() ) return true;
			if ( dataObj.anoField.value < dataObj2.anoField.value ) return true;
			if ( dataObj.anoField.value > dataObj2.anoField.value ){
				return !treatFieldError( true, dataObj.anoField, dataObj.label, "'" + dataObj.label + "'" + err75 + "'" + dataObj2.label + "'" , showdialog );
			}
			if ( dataObj.mesField.value*1 < dataObj2.mesField.value*1 ) return true;
			if ( dataObj.mesField.value*1 > dataObj2.mesField.value*1 ){
				return !treatFieldError( true, dataObj.mesField, dataObj.label, "'" + dataObj.label + "'" + err75 + "'" + dataObj2.label + "'" , showdialog );
			}
			if ( dataObj.diaField && dataObj2.diaField ){
				if ( dataObj.diaField.value*1 < dataObj2.diaField.value*1 ) return true;
				if ( dataObj.diaField.value*1 > dataObj2.diaField.value*1 ){
					return !treatFieldError( true, dataObj.diaField, dataObj.label, "'" + dataObj.label + "'" + err75 + "'" + dataObj2.label + "'" , showdialog );
				}
			}
		}
		
    if ( treatFieldError ( testField( obr, field, label, tipo ), field, label, mensagem, showdialog ) ) return false;

  }
  return true;
}

function testField( obr, field, label, tipo ){
    if ( tipo == "" )
      return invalidEmpty( obr, field.value );
		if ( tipo == "Number" )
      return !check_Numerico( obr, field );	
    if ( tipo == "Cpf" )
      return !check_Cpf(obr, field);
    if ( tipo == "Cep" )
      return !check_Cep(obr, field);
    if ( tipo == "Senha" )
      return !check_Senha(obr, field);
    if ( tipo == "Email" )
      return !check_Email(obr, field);
    if ( tipo == "MesAno" )
      return !checkDataMesAno(obr, field);
    if ( tipo == "DiaMesAno" )
      return !checkDataDiaMesAno(obr, field);
		if ( tipo == "Date" )
      return !checkDataDiaMesAno(obr, field);	
		
}

function treatFieldError( isInValid, field, label, mensagem, showDialog ){
	try{
  	checkImg = eval( "document." + field.form.name +"."+ field.name +"_check" );
  }catch( ignore ){};
	if ( isInValid ){
      if ( checkImg ){
        checkImg.src = 'images/xis.gif';
        checkImg.mensagem = "<b>Erro no campo:</b><br><br>" + mensagem;
      }
      if ( showDialog ){
        try{
					field.focus();
          field.select();
        }catch( blah ){};
        top.janelaerro( "<b>Erro no campo:</b> \"" + label + "\"<br><br>" + mensagem );
      }
      return true;
    }
  if ( checkImg ){
    checkImg.src = 'images/check.gif';
    checkImg.mensagem = "Válido!";
  }
  return false;
}

function isEmptyTel(){
	if ( this.tipoField ){
		if ( this.tipoField.selectedIndex != 0 ) return false;
	}
	if ( this.ddiField ){
		if ( this.ddiField.value.length != 0 || this.ddiField.value != "55" ) return false;
	}
	if ( this.dddField ){
		if ( this.dddField.value.length != 0 ) return false;
	}
	if ( this.telefoneField ){
		if ( this.telefoneField.value.length != 0 ) return false;
	}
	this.erroField = this.tipoField;
	return true;
}

function isValidTel(){
	if ( this.tipoField ){
		if ( this.tipoField.selectedIndex == 0 ){
			this.erroField = this.tipoField;
			this.internalLabel = "Tipo";
			this.erroMensagem = err501;
			return false;
		}
	}
	
	if ( this.ddiField ){
		if ( this.ddiField.value.length == 0 ){
			this.erroField = this.ddiField;
			this.internalLabel = "DDI";
			this.erroMensagem = err501;
			return false;
		}
		if ( !isInteger( this.ddiField.value ) ){
			this.erroField = this.ddiField;
			this.internalLabel = "DDI";
			this.erroMensagem = err502;
			return false;
		}
	}

	if ( this.dddField ){
		if ( this.dddField.value.length == 0 ){
			this.erroField = this.dddField;
			this.internalLabel = "DDD";
			this.erroMensagem = err501;
			return false;
		}
		if ( !isInteger( this.dddField.value ) ){
			this.erroField = this.dddField;
			this.internalLabel = "DDD";
			this.erroMensagem = err502;
			return false;
		}
	}
	
	if ( this.telefoneField ){
		if ( this.telefoneField.value.length == 0 ){
			this.erroField = this.telefoneField;
			this.internalLabel = "Telefone";
			this.erroMensagem = err501;
			return false;
		}
		if ( !isInteger( this.telefoneField.value ) ){
			this.erroField = this.telefoneField;
			this.internalLabel = "Telefone";
			this.erroMensagem = err502;
			return false;
		}
	}
	
	return true;
}

function validateTel(){
	if ( this.isEmpty() && this.obr )
     return !treatFieldError( true, this.erroField, this.label, err501, showdialog );
	if ( this.isEmpty() && !this.obr )
		return true;
	if ( !this.isValid() )
		return !treatFieldError( true, this.erroField, this.label + ":" + this.internalLabel, this.erroMensagem, showdialog );			
	return true;
}

function telefoneObj( obr, fieldName, label ){
	this.obr = obr;
	this.fieldName = fieldName;
	this.label = label;
	this.tipoField = eval( "myForm.COD_TIPO_TELEFONE_"+fieldName );
	this.ddiField = eval( "myForm.DDI_"+fieldName );
	this.dddField = eval( "myForm.DDD_"+fieldName );
	this.telefoneField = eval( "myForm.TELEFONE_"+fieldName )
	this.isEmpty = isEmptyTel;
	this.isValid = isValidTel;
	this.validate = validateTel;
}

function dateObj( obr, fieldName, label ){
	this.obr = obr;
	this.fieldName = fieldName;
	this.label = label;
	this.diaField = eval("myForm.DIA_"+fieldName );
	this.mesField = eval("myForm.MES_"+fieldName );
	this.anoField = eval("myForm.ANO_"+fieldName );
	this.isEmpty = isEmptyDate;
	this.isValid = isValidDate;
	this.validate = validateDate;
}

function validateDate(){
	if ( this.isEmpty() && this.obr )
     return !treatFieldError( true, this.erroField, this.label, err501, showdialog );
	if ( this.isEmpty() && !this.obr )
		return true;
	if ( !this.isValid() )
		return !treatFieldError( true, this.erroField, this.label + ":" + this.internalLabel, this.erroMensagem, showdialog );			
	return true;
}

function isEmptyDate(){
	this.erroField = null;
	if ( this.diaField ){
		if ( this.diaField.selectedIndex != 0 ) return false;
		this.erroField = this.diaField;
	}
	if ( this.mesField ){
		if ( this.mesField.selectedIndex != 0 ) return false;
		if ( this.erroField == null ) this.erroField = this.mesField;
	}
	if ( this.anoField ){
		if ( this.anoField.value.length != 0 ) return false;
		if ( this.erroField == null ) this.erroField = this.anoField;
	}
	return true;
}

function isValidDate(){
	dia = 1;
	mes = 1;
	ano = 2000;
	if ( this.diaField ){
		if ( this.diaField.selectedIndex == 0 ){
			this.erroField = this.diaField;
			this.internalLabel = "Dia";
			this.erroMensagem = err501;
			return false;
		}
		dia = this.diaField.value;
	}
	if ( this.mesField ){
		if ( this.mesField.selectedIndex == 0 ){
			this.erroField = this.mesField;
			this.internalLabel = "Mes";
			this.erroMensagem = err501;
			return false;
		}
		mes = this.mesField.value;
	}
	if ( this.anoField ){
		if ( this.anoField.value.length == 0 ){
			this.erroField = this.anoField;
			this.internalLabel = "Ano";
			this.erroMensagem = err501;
			return false;
		}
		if ( this.anoField.value.length != 4 ){
			this.erroField = this.anoField;
			this.internalLabel = "Ano";
			this.erroMensagem = err73;
			return false;
		}
		if ( !isInteger( this.anoField.value ) ){
			this.erroField = this.anoField;
			this.internalLabel = "Ano";
			this.erroMensagem = err502;
			return false;
		}
		if ( this.anoField.value< 1900 || this.anoField.value > 2100 ){
			this.erroField = this.anoField;
			this.internalLabel = "Ano";
			this.erroMensagem = err76;
			return false;
		}
		ano = this.anoField.value;
	}
	if ( !isDate( ano, mes, dia ) ){
		this.erroField = this.diaField;
		this.internalLabel = "";
		this.erroMensagem = err74;
		return false;
	}
	
	return true;
}
// this function is used to change the dynamic list that depend on the value of another list
// exemle of this is the list of ESCOLAS that depent on UF
// for this fuinction to work the arrays with tha approprioate values need to be put on the page
// and passed to this function
// @param: mainlist - list that provoces a change in an other list
// @param: subList - list to be changed
// @param: codeArray - array of arrays with codes of the possible values of the sublist
// @param: codeArray - array of arrays with names of the possible values of the sublist

function modificaList(mainList, subList, codeArray, nameArray) {
	marca = mainList.selectedIndex;
	subList.length = 0;
	for (var i=0; i < codeArray[marca].length; i++) {
		subList.options[i] = new Option(nameArray[marca][i], codeArray[marca][i]);
	}
	subList.selectedIndex = 0;
}

// this function will verify a combination of two date fields in the MES ANO format
// it will check if the first is not bigger that the second
// and if the dates ecist
// if the date is manatory and value empty returns false
// if the date is not manatory and value empty returns true
// @param obr1 - boolean : obrigatorio date 1 ( first date, smallest date)
// @param campo1 - string ; name of the first date field
// @param obr2 - boolean : obrigatorio date 2 ( second date, biggest date)
// @param campo2 - string ; name of the second date field

function checkDoisDataMesAno(obr1, campo1, obr2, campo2){
        check1 = checkDataMesAno(obr1,campo1);
        if (check1)
                check2 = checkDataMesAno(obr2,campo2);
        
        if (check1 && check2){
                mesCampo1 = eval("document.form1.MES_"+campo1);
                anoCampo1 = eval("document.form1.ANO_"+campo1);
                
                mesCampo2 = eval("document.form1.MES_"+campo2);
                anoCampo2 = eval("document.form1.ANO_"+campo2);
                
                if (anoCampo2.value != ""){
                        if (anoCampo1.value > anoCampo2.value){
                                anoCampo1.focus();
                                janelaerro(err75);
                                return false;
                        }
                        else{
                                if (anoCampo1.value == anoCampo2.value){
                                        if (mesCampo1.value*1 > mesCampo2.value*1){
                                                mesCampo1.focus();
                                                janelaerro(err75);
                                                return false;
                                        }
                        
                                }
                        }        
                }
                return true;        
        }
        else
                return false;
        
}

// checks the date of a field in the MES ANO format
// if mandatory and empty returns true
// if mnadtory and empty returns false
// if date befor 1900 or after 2100 returns false
// @param obr boolean obrigatorio
// @param campo String campo - name of the date field
function checkDataMesAno(obr,campo){
        
    mesCampo = eval("myForm.MES_"+campo);
    anoCampo = eval("myForm.ANO_"+campo);
    if (!obr && mesCampo.selectedIndex == 0 && anoCampo.value == "")
        return true;
        
    if (mesCampo.selectedIndex == 0){
        mesCampo.focus(); 
        mensagem = err621;
        return false;
    }
    
    if (anoCampo.value==""){
        anoCampo.focus(); 
        mensagem = err72;
        return false;
    }
    
    if ((anoCampo.value.length != 4) || (!isInteger(anoCampo.value)) ){
        anoCampo.focus(); 
        mensagem = err73;
        return false;
    }
    
    if ((anoCampo.value < 1900) || (anoCampo.value > 2100) ){
        anoCampo.focus(); 
        mensagem = err76;
        return false;
    }
    return true;
}


// checks the date of a field in the DIA MES ANO format
// if mandatory and empty returns true
// if mnadtory and empty returns false
// if date befor 1900 or after 2100 returns false
// @param obr boolean obrigatorio
// @param campo String campo - name of the date f
function checkDataDiaMesAno(obr,campo){
    
    diaCampo = eval("myForm.DIA_"+campo);        
    mesCampo = eval("myForm.MES_"+campo);
    anoCampo = eval("myForm.ANO_"+campo);
    
    if (!obr && diaCampo.selectedIndex == 0 && mesCampo.selectedIndex == 0 && anoCampo.value == "")
        return true;

    if (diaCampo.selectedIndex == 0){
        mesCampo.focus(); 
        mensagem = err70;
        return false;
    }
    
    if (mesCampo.selectedIndex == 0){
        mesCampo.focus(); 
        mensagem = err71;
        return false;
    }
    
    if (anoCampo.value==""){
        anoCampo.focus(); 
        mensagem = err72;
        return false;
    }
    
    if ((anoCampo.value.length != 4) || (!isInteger(anoCampo.value)) ){
        anoCampo.focus(); 
        mensagem = err73;
        return false;
    }
    
    if (!isDate(anoCampo.value,mesCampo.selectedIndex,diaCampo.selectedIndex)){
        anoCampo.focus(); 
        mensagem = err74;
        return false;
    }
    
    if ((anoCampo.value*1 < 1900) || (anoCampo.value*1 > 2100) ){
        anoCampo.focus(); 
        mensagem = err76;
        return false;
    }
    return true;
}

function isEmpty(value)
{	
  return ( value == null || value.length == 0 || value == -1 || value == "-1" );
}

//check CPF value
function check_Cpf(obr, field)
{
    if ( invalidEmpty( obr, field.value ) )
      return false;
  
    if ( validEmpty( obr, field.value ) )	
      return true;
        
    CPF = field.value.replace("-","");
    field.value = CPF;
    var alg=0;
    var alg1 = 0;
    var soma1 = 0;
    var soma2 = 0;
    var var1 = 0;
    var var2 = 0;
    var var3 = 0;
    var var4 = 0;
    
    if (CPF.length != 11){
      mensagem = err600;
      return false;
    }
    
    alg1 = CPF.charAt(1);
    for (i = 2 ; i < 11 ; i++){    
    if (alg1 != CPF.charAt( i ))
      ok = true;
    }
    
    if (!ok){
        mensagem = err601;
        return false;
    }
        
    for ( i = 0 ; i < 9 ; i++){	
    alg = CPF.charAt( i )
    if (!isInteger(alg)){
        mensagem = err601;
        return false;
    }
    
    soma1 = soma1 + alg*1;
    soma2 = soma2 + alg * (9 - i);
    }
    
    var1 = 11 - ((soma1*1 + soma2*1)%11);
    var1 <= 9 ? var3 = var1 : var3 = 0 ;
    var2 = 11 - ((2 * (soma1 + var3) + soma2)%11);
    var2 <= 9 ? var4 = var2 : var4 = 0;
    
    dv = CPF.substring(CPF.length-2)
    if ( dv != var3 * 10 + var4 ){
      mensagem = err1;
      return false;
    }
    
    return true;
}

// this function will check a password
// more the 6 and less then 15 charateres
// alfa and numeric values
function checkSenha(senha){	

	var intCheck;
	var alfCheck;
	var check_bool = true;

	if (senha.toString().length < 6 || senha.toString().length > 15){
    mensagem = err610;
		return false;
	}
	else
	{	for (x = 0 ; x < senha.length ; x++)
		{
			if (isInteger(senha.charAt(x)))
				intCheck = true;
			if (!isInteger(senha.charAt(x)))
				alfCheck = true;
		}
	}
	
	if (! (intCheck&&alfCheck) ){
    mensagem = err611;
		return false;
	}

	return check_bool;
}

// this will check a password possibly not mandatory
function check_Senha(obr, field)
{	
	if ( invalidEmpty( obr, field.value ) )
      return false;
  
  if ( validEmpty( obr, field.value ) )	
    return true;
     
	return checkSenha(field.value);
}

function invalidEmpty( obr, value ){
  if ( obr && isEmpty ( value ) ){
    mensagem = err501;
    return true;
  }
  return false;
}

function validEmpty( obr, value ){
  if ( !obr && isEmpty( value ) )
    return true;
  return false;
}

//this wil check a cep
function check_Cep(obr, field){
  
	if ( invalidEmpty( obr, field.value ) )
   return false;
  
  if ( validEmpty( obr, field.value ) )	
		return true;
	
	for (x = 0 ; x < field.value.length ; x++){
		value = field.value.replace("-","");
	}
	field.value = value;
	for (x = 0 ; x < value.length ; x++){
		if (!isInteger(value.charAt(x))){
      mensagem = err630;
			return false;
		}
	}
	
	if (value.length != 8){
    mensagem = err631;
		return  false;
	}
	return true;
}

// this will check for numeric values
function check_Numerico(obr , field){

    if ( invalidEmpty( obr, field.value ) )
       return false;
      
    if ( validEmpty( obr, field.value ) )	
      return true;
  
    for (x = 0 ; x < field.value.length ; x++){
		if (!isInteger(field.value.charAt(x))){
			mensagem = err502;
			return  false;
		}
	}
    return true;
}

// check email
function check_Email(obr, field){	
	
  if ( invalidEmpty( obr, field.value ) )
     return false;
    
  if ( validEmpty( obr, field.value ) )	
    return true;
	
	if (!isEmail(field.value) ){
    mensagem = err6;
		return false;
  }
    
  return true;
}

//check telefone
function check_Telefone(obr, field){	
    
    if ( obr && isEmpty ( field.value ) )
	    return false;
  
    if ( !obr && isEmpty(field.value) )	
		return true;	
	
    data = field.value;
	
	if (data.charAt(0) == "0")
		data = data.substring(1);
	
	while (data.indexOf(" ") != -1){
		data = data.replace(" ","");
	}
	
	while (data.indexOf("-") != -1){
		data = data.replace("-","");
	}
	
	while (data.indexOf("_") != -1){
		data = data.replace("_","");
	}

	if ( !(isInteger(data)) ){	
		error += error_numero + "<br>";
    return false;
	} 
    
	if ( data.length != 8 ){	
    error += error_length + "8<br>";
		return false;
	}

	field.value = data;

	return true;
}

