/**
 * Método que retorna o texto selecionado do campo.
 */
/*
function getSelectedText(){
	//alert(document.selection.createRange().text);
	return document.selection.createRange().text;
} 
*/
/**
 * @param sValor texto parâmetro
 * @return texto parâmetro sem espaços laterais
 */

function trim(sValor){
  var indexA = -1;
  var indexB;
  var ch;
  for(i = 0;  i < sValor.length;  i++){
	 if(sValor.charAt(i) != " " && sValor.charCodeAt(i) != 160){
		  indexA = i;
		  break;
	  }
  }
  if (indexA != -1){
	 for (j = sValor.length - 1; j >= indexA; j--){
		 if(sValor.charAt(j) != " " && sValor.charCodeAt(j) != 160){
		    indexB = j;
		    break;
	     }
	  }
	  sValor = sValor.substring(indexA,(indexB + 1));
  }else{
	  sValor = "";
  }
  
  return (sValor);	    
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) é um texto válido
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaTexto(varField, strFieldName, blnRequired, maxlength){
	varField.value = trim(varField.value);
	if(blnRequired && varField.value.length == 0){
		alert("O campo \"" + strFieldName + "\" e' obrigatorio.");
		varField.select();
		varField.focus();
		return false;
	}else if(maxlength != null && varField.value.length > maxlength){
		alert("O tamanho maximo do campo \"" + strFieldName + "\" e de " + maxlength + " caracteres (tamanho atual:" + trim(varField.value).length + ").");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("&") != -1){
		alert("Nao e' permitido o uso do caractere \"&\" no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("\"") != -1){
		alert("Nao e' permitido o uso de aspas no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else if(varField.value.indexOf("'") != -1){
		alert("Nao e' permitido o uso de aspas simples no campo \"" + strFieldName + "\".");
		varField.select();
		varField.focus();
		return false;
	}else{
		return true;
	}
}

function validaTextoEmTab(varField, strFieldName, blnRequired, maxlength, tabName){
	varField.value = trim(varField.value);
	if(blnRequired && varField.value.length == 0){
		alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", e' obrigatorio.");
		return false;
	}else if(maxlength != null && varField.value.length > maxlength){
		alert("O tamanho maximo do campo \"" + strFieldName + "\", na tab \"" + tabName + "\", e' de " + maxlength + " caracteres (tamanho atual:" + trim(varField.value).length + ").");
		return false;
	}else if(varField.value.indexOf("&") != -1){
		alert("Nao e' permitido o uso do caractere \"&\" no campo \"" + strFieldName + "\, da tab \"" + tabName + "\".");
		return false;
	}else if(varField.value.indexOf("\"") != -1){
		alert("Nao e' permitido o uso de aspas no campo \"" + strFieldName + "\", da tab \"" + tabName + "\".");
		return false;
	}else if(varField.value.indexOf("'") != -1){
		alert("Nao e' permitido o uso de aspas simples no campo \"" + strFieldName + "\", da tab \"" + tabName + "\".");
		return false;
	}else{
		return true;
	}
}

/**
 * Método que valida combos
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: validação ok; false: validação não ok.
 */
    
function validaComboEmTab(varField, strFieldName, blnRequired, tabName){
	if(blnRequired && (varField.value == "" || varField.value == null)){
		alert("O campo \"" + strFieldName + "\" na aba \"" + tabName + "\" é obrigatorio!");
		return false;
	}
	return true;
}

/**
 * Método que valida combos
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: validação ok; false: validação não ok.
 */
    
function validaCombo(varField, strFieldName, blnRequired){
	if(blnRequired && (varField.value == "" || varField.value == null)){
		alert("O campo \"" + strFieldName + "\" e obrigatorio!");
		varField.focus();
		return false;
	}
	return true;
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) é uma data válida
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: data válida; false: data inválida.
 */
    
function validaData(varField, strFieldName, blnRequired){
	if(trim(varField.value).length == 0){
		if(blnRequired){
			alert("O campo \"" + strFieldName + "\" e obrigatorio!");
			varField.select();
			varField.focus();
			return false;
		}else{
			return true;
		}
	}
	var sData = trim(varField.value) + "  /  /    ";
	var bRet = true;
	var dia = sData.substr(0,2);
	var mes = sData.substr(3,2);
	var ano = sData.substr(6,4);
	var dData = new Date(ano, mes-1, dia);	
	if(!isNumber(dia) || !isNumber(mes) || !isNumber(ano)){
		alert("Formato de data invalido no campo \"" + strFieldName + "\"!");
		varField.select();
		varField.focus();
		return false;
	}else if(dData.getDate() != Number(dia) || dData.getMonth() != Number(mes-1) || dData.getFullYear() != Number(ano)){
		alert("Data invalida no campo \"" + strFieldName + "\"!");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

function validaDataEmTab(varField, strFieldName, blnRequired, tabName){
	var retorno = true
	varField.value = trim(varField.value);
	if(varField.value.length == 0){
		if(blnRequired){
			alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", é obrigatório.");
			retorno = false;
		}
	}else if(varField.value.length > 10){
		alert("O tamanho maximo do campo \"" + strFieldName + "\", na tab \"" + tabName + "\", é de " + 10 + " caracteres.");
		retorno = false;
	}else{
		var sData = trim(varField.value) + "  /  /    ";
		var bRet = true;
		var dia = sData.substr(0,2);
		var mes = sData.substr(3,2);
		var ano = sData.substr(6,4);
		var dData = new Date(ano, mes-1, dia);	
		if(!isNumber(dia) || !isNumber(mes) || !isNumber(ano)){
			alert("Formato de data invalido no campo \"" + strFieldName + "\", na tab \"" + tabName + "\"!");
			varField.select();
			retorno = false;
		}else if(dData.getDate() != Number(dia) || dData.getMonth() != Number(mes-1) || dData.getFullYear() != Number(ano)){
			alert("Data invalida no campo \"" + strFieldName + "\", na tab \"" + tabName + "\"!");
			varField.select();
			retorno = false;
		}
	}
	return retorno;
}


/**
 * Método que valida se o conteúdo de um objeto (objeto.value) é uma número de telefone válido
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: data válida; false: data inválida.
 */
    
function validaNumeroTelefone(varField, strFieldName, blnRequired){
	var sTelefone = trim(varField.value);
	var nTelefone = "";
	for(var i=0; i<sTelefone.length; i++){
		if(sTelefone.charAt(i) != "-")
			nTelefone += sTelefone.charAt(i);
	}
	if(blnRequired && trim(varField.value).length == 0){
		alert("O campo \"" + strFieldName + "\" e obrigatorio!");
		varField.select();
		varField.focus();
		return false;
	}else if(!isNumber(nTelefone)){
		alert("O campo \"" + strFieldName + "\" deve estar no formato \"0000-0000\"!");
		varField.select();
		varField.focus();
		return false;
	}else if(sTelefone.length - nTelefone.length > 1){
		alert("Formato de telefone invalido no campo \"" + strFieldName + "\"!");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

function validaNumeroTelefoneEmTab(varField, strFieldName, blnRequired, tabName){
	var retorno = true;
	varField.value = trim(varField.value);
	if(blnRequired && varField.value.length == 0){
		alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", é obrigatorio.");
		retorno =  false;
	}else{
		var sTelefone = trim(varField.value);
		var nTelefone = "";
		for(var i=0; i<sTelefone.length; i++){
			if(sTelefone.charAt(i) != "-")
				nTelefone += sTelefone.charAt(i);
		}
		if(!isNumber(nTelefone)){
			alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", deve estar no formato \"0000-0000\"!");
			varField.select();
			retorno =  false;
		}else if(sTelefone.length - nTelefone.length > 1){
			alert("Formato de telefone invalido no campo \"" + strFieldName + "\", na tab \"" + tabName + "\"!");
			varField.select();
			retorno =  false;
		}
	}
	return retorno;
}


/**
 * Método que valida se o conteúdo de um objeto (objeto.value) é um DDD válido
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: data válida; false: data inválida.
 */
    
function validaDDD(varField, strFieldName, blnRequired){
	var sDDD = trim(varField.value);
	if(blnRequired && sDDD.length == 0){
		alert("O campo \"" + strFieldName + "\" e obrigatorio!");
		varField.select();
		varField.focus();
		return false;
	}else if(blnRequired && !isNumber(sDDD)){
		alert("O campo \"" + strFieldName + "\" deve conter apenas números e estar no formato \"##\" ou \"#####\"!");
		varField.select();
		varField.focus();
		return false;
	}else if(blnRequired && (sDDD.length != 2 && sDDD.length != 5)){
		alert("O campo \"" + strFieldName + "\" deve conter apenas números e estar no formato \"##\" ou \"#####\"!");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

function toDate(datastring){
	var data = null;
	if(datastring != null && datastring.length != 0){
		var dia = datastring.substr(0,2);
		var mes = datastring.substr(3,2);
		var ano = datastring.substr(6,4);
		data = new Date(ano, mes-1, dia);
	}
	return data;
}

/**
 * Método que valida se a data de um campo respeita seu limite.
 * @param varFieldDe objeto que contém a data inicial
 * @param varFieldAte objeto que contém a data final
 * @return true: datas válidas; false: datas inválidas.
 */
    
function validaDataLimite(varFieldData, sNomeCampo, varDataLimite, blnAPartirDe){
	var sData = trim(varFieldData.value);
	var dia = sData.substr(0,2);
	var mes = sData.substr(3,2);
	var ano = sData.substr(6,4);
	var dData = new Date(ano, mes-1, dia);
	var sDataLim = varDataLimite;
	var dial = sDataLim.substr(0,2);
	var mesl = sDataLim.substr(3,2);
	var anol = sDataLim.substr(6,4);
	var dDataLim = new Date(anol, mesl-1, dial);
	if(blnAPartirDe && dData.getTime() < dDataLim.getTime() || !blnAPartirDe && dData.getTime() > dDataLim.getTime()){
		alert("O campo \"" + sNomeCampo + "\" precisa ser " + ((blnAPartirDe)?"posterior":"anterior") + " ou igual a \"" + varDataLimite + "\".");
		varFieldData.value = varDataLimite;
		varFieldData.select();
		varFieldData.focus();
		return false;
	}
	return true;
} 

/**
 * Método que valida se o duas datas podem ser utilizadas como inicio e fim
 * @param varFieldDe objeto que contém a data inicial
 * @param varFieldAte objeto que contém a data final
 * @return true: datas válidas; false: datas inválidas.
 */
    
function validaDataDeAte(varFieldDe, varFieldAte){
	if(varFieldDe.value.length != 0 && varFieldAte.value.length != 0){
		var sDataDe = trim(varFieldDe.value);
		var diade = sDataDe.substr(0,2);
		var mesde = sDataDe.substr(3,2);
		var anode = sDataDe.substr(6,4);
		var dDataDe = new Date(anode, mesde-1, diade);
		var sDataAte = trim(varFieldAte.value);
		var diaate = sDataAte.substr(0,2);
		var mesate = sDataAte.substr(3,2);
		var anoate = sDataAte.substr(6,4);
		var dDataAte = new Date(anoate, mesate-1, diaate);
		if(dDataDe > dDataAte){
			alert("A data inicial precisa ser menor ou igual a data final.");
			varFieldDe.select();
			varFieldDe.focus();
			return false;
		}
	}
	return true;
} 

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaNumeroEmTab(varField, strFieldName, blnRequired, tabName){
	var numero = varField.value;
	if(blnRequired && trim(numero).length == 0){
		alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", e' obrigatorio.");
		return false;
	}else if (!isNumber(varField.value)){
		alert("O campo \"" + strFieldName + "\", na tab \"" + tabName + "\", deve conter somente numeros.");
		return false;
	}
	return true;
}

function validaNumero(varField, strFieldName, blnRequired){
	var numero=fgIIf((varField.value.indexOf("-")==0),varField.value.substr(1,varField.value.length-1),varField.value);
	//var numero = varField.value;
	if(blnRequired && trim(numero).length == 0){
		alert("O campo \"" + strFieldName + "\" e' obrigatorio.");
		varField.select();
		varField.focus();
		return false;
	}else if (!isNumber(varField.value)){
		alert("O campo \"" + strFieldName + "\" deve conter somente numeros.");
		varField.select();
		varField.focus();
		return false;
	}
	return true;
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaNumeroMaiorQue(varField, strFieldName, minimo, blnRequired){
	var numero = varField.value;
	if(validaNumero(varField, strFieldName, blnRequired)){
		if(numero <= minimo){
			alert("O campo \"" + strFieldName + "\" deve ter valor maior que " + minimo + ".");
			varField.focus();
			varField.select();
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaNumeroMaiorOuIgualQue(varField, strFieldName, minimo, blnRequired){
	var numero = varField.value;
	if(validaNumero(varField, strFieldName, blnRequired)){
		if(numero < minimo){
			alert("O campo \"" + strFieldName + "\" deve ter valor maior ou igual a " + minimo + ".");
			varField.focus();
			varField.select();
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaNumeroMenorQue(varField, strFieldName, maximo, blnRequired){
	var numero = varField.value;
	if(validaNumero(varField, strFieldName, blnRequired)){
		if(numero >= maximo){
			alert("O campo \"" + strFieldName + "\" deve ter valor menor que " + maximo + ".");
			varField.focus();
			varField.select();
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaNumeroMenorOuIgualQue(varField, strFieldName, maximo, blnRequired){
	var numero = varField.value;
	if(validaNumero(varField, strFieldName, blnRequired)){
		if(numero > maximo){
			alert("O campo \"" + strFieldName + "\" deve ter valor menor ou igual a " + maximo + ".");
			varField.focus();
			varField.select();
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato numérico
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */
function validaNumeroMaiorQueEmTab(varField, strFieldName, minimo){
	var numero = varField.value;
	if(numero < minimo){
		alert("O campo \"" + strFieldName + "\" deve ter valor maior que " + minimo + ".");
		return false;
	}
	return true;
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) está no formato money
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaMoney(varField, strFieldName, blnRequired){
	var numero = varField.value;
	var sDespontuado;
	
	if(numero.indexOf("-")==0){
		numero=numero.substr(1,numero.length-1);
	}
	sDespontuado=numero;
	
	for(var i=0; i<sDespontuado.length; i++){
		if(sDespontuado.charAt(i) == "." || sDespontuado.charAt(i) == ","){
			sDespontuado = sDespontuado.substring(0, i) + sDespontuado.substring(i+1, sDespontuado.length);
		}
	}
	if(blnRequired && trim(numero).length == 0){
		alert("O campo \"" + strFieldName + "\" e' obrigatorio.");
		varField.select();
		varField.focus();
		return false;
	}else if (varField.value.indexOf(",") != varField.value.lastIndexOf(",")){
		alert("O campo \"" + strFieldName + "\" nao pode conter mais que uma virgula.");
		varField.select();
		varField.focus();
		return false;
	}else if (!isNumber(sDespontuado)){
		alert("O campo \"" + strFieldName + "\" deve conter somente numeros.");
		varField.select();
		varField.focus();
		return false;
	}
	if(trim(varField.value).length != 0){
		if(varField.value.lastIndexOf(",") == -1){
			varField.value += ",00";
		}else if(varField.value.lastIndexOf(",") == varField.value.length-1){
			varField.value += "00";
		}
		varField.value += "00";
		varField.value = varField.value.substring(0, varField.value.lastIndexOf(",")+3);
	}
	return true;
}

/**
 * Método que valida se o duas datas podem ser utilizadas como inicio e fim
 * @param varFieldDe objeto que contém a data inicial
 * @param varFieldAte objeto que contém a data final
 * @return true: datas válidas; false: datas inválidas.
 */
    
function validaMoneyDeAte(varFieldDe, varFieldAte, mensagem){
	var sValMin = trim(varFieldDe.value);
	for(var i=0; i<sValMin.length; i++){
		if(sValMin.charAt(i) == "." || sValMin.charAt(i) == ","){
			sValMin = sValMin.substring(0, i) + sValMin.substring(i+1, sValMin.length);
		}
	}
	var sValMax = trim(varFieldAte.value);
	for(var i=0; i<sValMax.length; i++){
		if(sValMax.charAt(i) == "." || sValMax.charAt(i) == ","){
			sValMax = sValMax.substring(0, i) + sValMax.substring(i+1, sValMax.length);
		}
	}
	if(sValMin > sValMax){
		if(mensagem != null){
			alert(mensagem);
		}else{
			alert("O valor minimo precisa ser menor ou igual ao valor maximo.");
		}
		varFieldDe.select();
		varFieldDe.focus();
		return false;
	}
	return true;
}

/**
 * Método que valida se o conteúdo de um objeto (objeto.value) é um e-mail válido
 * @param varField objeto que contém o texto a ser validado
 * @param strFieldName nome do objeto que será exibido nos alerts, em caso de conteúdo inválido
 * @param blnRequired boolean que determina a obrigatoriedade do campo
 * @return true: número válido; false: número inválido.
 */

function validaEmail(varField, strFieldName, blnRequired){
	var i, j;
	var valchars = "_-@.";
	var email = trim(varField.value);
	if(!validaTexto(varField, strFieldName, blnRequired)){
		return false;
	}else{
		if(varField.value != "" && varField.value != null && getFirstSpecialChar(email, valchars) != ""){
			alert("O caractere especial \"" + getFirstSpecialChar(email, valchars) + "\" nao e valido para emails.");
			varField.select();
			varField.focus();
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == -1){
			alert("Um email valido precisa conter um caractere \"@\".");
			varField.select();
			varField.focus();
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") != email.lastIndexOf("@")){
			alert("Enderecos de email nao podem conter mais que um caractere \"@\".");
			varField.select();
			varField.focus();
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == 0){
			alert("Enderecos de email precisam conter uma conta antes do caractere \"@\".");
			varField.select();
			varField.focus();
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == email.length-1){
			alert("Enderecos de email precisam conter um dominio apos o caractere \"@\".");
			varField.select();
			varField.focus();
			return false;
		}
	}
	return true;
}

function validaEmailEmTab(varField, strFieldName, blnRequired, tabName){
	var i, j;
	var valchars = "_-@.";
	var email = trim(varField.value);
	if(!validaTextoEmTab(varField, strFieldName, blnRequired, tabName)){
		return false;
	}else{
		if(varField.value != "" && varField.value != null && getFirstSpecialChar(email, valchars) != ""){
			alert("O caractere especial \"" + getFirstSpecialChar(email, valchars) + "\" nao e valido para emails.");
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == -1){
			alert("Um email valido precisa conter um caractere \"@\".");
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") != email.lastIndexOf("@")){
			alert("Enderecos de email nao podem conter mais que um caractere \"@\".");
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == 0){
			alert("Enderecos de email precisam conter uma conta antes do caractere \"@\".");
			return false;
		}else if(varField.value != "" && varField.value != null && email.indexOf("@") == email.length-1){
			alert("Enderecos de email precisam conter um dominio apos o caractere \"@\".");
			return false;
		}
	}
	return true;
}

function getFirstSpecialChar(string, acceptable){
	var checkOK = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + acceptable;
	var allValid = true;
	var allChars = "";
	for(i = 0;  i < string.length;  i++){
		for (j = 0;  j < checkOK.length;  j++){
			if (string.charAt(i) == checkOK.charAt(j)){
				break;
			}
		}
		if (j == checkOK.length){
			return string.charAt(i);
		}
	}
	return "";
}


/**
 * Método que valida se o valor passado como parâmetro é um número válido
 * @param number valor a ser validado
 * @return true: número válido; false: número inválido.
 */

function isNumber(number){
	var checkOK = "0123456789";
	var ch;
	var allValid = true;
	var allNum = "";
	for (i = 0;  i < number.length;  i++){
		ch = number.charAt(i);
		for (j = 0;  j < checkOK.length;  j++){
			if (ch == checkOK.charAt(j)){
				break;
			}
		}
		if (j == checkOK.length){
			allValid = false;
			break;
		}
		allNum += ch;
	}
	return allValid;
}

/**
 * Método que executa o mask de um objeto texto para o formato de data (dd/mm/aaaa)
 * @param varField objeto que contém o texto a ser mascarado
 */

function dateMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length == 2 || varField.value.length == 5){
		varField.value += "/";
	}
}
/**
 * Método que executa o mask de um objeto texto para o formato de cep (00000-000)
 * @param varField: objeto que contém o texto a ser mascarado.
 * @param event: usado para pegar a tecla pressionada no firefox.
 */
function cepMask(varField,event){
	var key= window.event ? event.keyCode : event.which;
	var str=navigator.appName;
		if(key==45 && varField.value.length==5){
			return true;
		}else if(varField.value.length==5 && !isChar(key)){
			if(str.search(/Netscape/i)!=-1 && key==8){
				return true;
			}else{
				varField.value=varField.value+"-";
				return true;
			}
		}/*else if(varField.value.length==9){
			if(str.search(/Netscape/i)!=-1 && key==8){
				return true;
			}else{
				return false;
			}
		}*/else if(isChar(key)){
			return false;
		}
}

/**
 * Método que executa o mask de um objeto texto para o formato de telefone (0000-0000)
 * @param varField objeto que contém o texto a ser mascarado
 */

function phoneMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length == 4){
		varField.value += "-";
	}
}

/**
 * Método que executa o mask de um objeto texto para o formato de telefone (0000-0000)
 * @param varField objeto que contém o texto a ser mascarado
 */

function dddMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}
}

/**
 * Método que executa o mask de um objeto texto para o formato de dinheiro (#.##0,00)
 * @param varField objeto que contém o texto a ser mascarado
 */
/* -- Utilizar floatMask()
function moneyMask(varField){
	varField.value = trim(varField.value);
	if(varField.value.indexOf(",") != -1 && (event.keyCode == ",".charCodeAt(0) || event.keyCode == ".".charCodeAt(0))){
		event.keyCode = 0;
	}else if(String.fromCharCode(event.keyCode) == "." || String.fromCharCode(event.keyCode) == ","){
		if(varField.value.length == 0) varField.value = "0";
		event.keyCode = ",".charCodeAt(0);
	}else if(varField.value.length == 0 && event.keyCode == "0".charCodeAt(0)){
		event.keyCode = 0;
	}else if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length != 0 && varField.value.indexOf(",") == -1){
		for(var i=0; i<varField.value.length; i++){
			if(varField.value.charAt(i) == "."){
				varField.value = varField.value.substring(0, i) + varField.value.substring(i+1, varField.value.length);
			}
		}
		var sPontuado = "";
		for(var i=varField.value.length-1; i>=0; i--){
			if((varField.value.length-i)%3 == 0) sPontuado = "." + sPontuado;
			sPontuado = varField.value.charAt(i) + sPontuado;
		}
		varField.value = sPontuado;
	}
}*/
/*
function numberMask(varField){

	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}
}
*/
function numberMask(varField,event,blnNegative){

	if(!blnNegative){bln=false;}
	
	var key= window.event ? event.keyCode : event.which;
	var str=navigator.appName;

	if(blnNegative==true){
		if(str.search(/inter/i)!=-1){

			var txt=getSelectedText();

			if((key==45 && varField.value.length==0) || (key==45 && varField.value==txt)){
				//alert("if 1");
				return true;
			}else{
				return genericNumberMask(varField,key);
			}
		}else{
			if(key==45 && varField.value.length==0){
				return true;
			}else{
				return genericNumberMask(varField,key);
			}
		}
	}else{
		if(isChar(key)){
			return false;
		}
	}
}

function genericNumberMask(varField,key){
	if(varField.value.indexOf("-") == -1 && key==45 && varField.value.length>0){
		varField.value="-"+varField.value;
		return false;
	}else if(isChar(key)){
		return false;
	}else{
		return true;
	}
}

function floatMask(varField,event,blnRequired){
	//alert(blnRequired);
	if(!blnRequired){bln=false;}
	
	var key= window.event?event.keyCode:event.which;
	//alert(key);
	var str=navigator.appName;
	//alert(blnRequired);
	
	if(blnRequired==true){
		if(str.search(/inter/i)!=-1){
			var txt=getSelectedText();
	
			if((key==45 && varField.value.length==0) || (key==45 && varField.value==txt)){
				return true;
			}else{
				return genericFloatMask(varField,key);			
			}

		}else{
			if(key==45 && varField.value.length==0){
				return true;
			}else{
				return genericFloatMask(varField,key);
			}
		}
	}else{
		if(varField.value.indexOf(",") != -1 && (key==46 || key==44)){
			return false;
		}else if(key==44 || key==46){
			if(varField.value.length == 0){
				varField.value = "0,";
				return false;
			}else{
				varField.value=varField.value + ",";
				return false;
			}
		}else if(isChar(key)){
			return false;
		}
	}
}

function genericFloatMask(varField,key){

	if(varField.value.indexOf("-")==-1 && key==45 && varField.value.length>0){
		varField.value="-"+varField.value;
		return false;
	}else if(varField.value.indexOf(",") != -1 && (key==44 ||key==46)){
		return false;
	}else if(key==46 || key==44){
		if(varField.value.length==0 || (varField.value.length==1 && varField.value.charAt(0)=="-")){
			varField.value=varField.value + "0,";
			return false;
		}else{
			varField.value=varField.value + ",";
			return false;
		}
	}else if(isChar(key)){
		return false;
	}else{
		return true;
	}
}

function getSelectedText(){
	return document.selection.createRange().text;
} 
function isChar(ascii){

	if((ascii>=32 && ascii<=47) || (ascii>=58 && ascii<=126)){
		return true;
	}else{
		return false;
	}
}
/*function floatMask(varField){*/
	/*var txt=getSelectedText();

	if((event.keyCode=="-".charCodeAt(0) && varField.value.length==0) || (event.keyCode=="-".charCodeAt(0) && varField.value==txt)){
		event.keyCode="-".charCodeAt(0);
	}else if(varField.value.indexOf("-") == -1 && event.keyCode=="-".charCodeAt(0) && varField.value.length>0){
		varField.value="-"+varField.value;
		event.keyCode = 0;
	}else if(varField.value.indexOf(",") != -1 && (event.keyCode == ",".charCodeAt(0) || event.keyCode == ".".charCodeAt(0))){
		event.keyCode = 0;
	}else if(event.keyCode==".".charCodeAt(0) || event.keyCode==",".charCodeAt(0)){
		if(varField.value.length==0 || (varField.value.length==1 && varField.value.charAt(0)=="-")){
			varField.value=varField.value + "0";
			event.keyCode = ",".charCodeAt(0);
		}else{
			event.keyCode = ",".charCodeAt(0);
		}
	}else if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}*/
	/*if(varField.value.indexOf(",") != -1 && (event.keyCode == ",".charCodeAt(0) || event.keyCode == ".".charCodeAt(0))){
		event.keyCode = 0;
	}else if(String.fromCharCode(event.keyCode) == "." || String.fromCharCode(event.keyCode) == ","){
		if(varField.value.length == 0) varField.value = "0";
		event.keyCode = ",".charCodeAt(0);
	}else if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}*/
/*}*/

function timeMask(varField){
	if(!isNumber(String.fromCharCode(event.keyCode))){
		event.keyCode = 0;
	}else if(varField.value.length == 2){
		varField.value += ":";
	}
}

function forceMoneyMask(varField){
	varField.value = toNumber(varField.value);
	floatMask(varField);
}

function setMoneyMask(varField){
	var text = varField.value;
	var esquerda = "";
	var direita = "";
	if(text.indexOf(".") != -1){
		esquerda = text.substring(0, text.indexOf("."));
		direita = text.substring(text.indexOf(".")+1, text.length);
	}else{
		esquerda = text;
	}
	var esquerdafinal = "";
	for(var i = esquerda.length-1; i >= 0; i--){
		esquerdafinal = esquerda.charAt(i) + esquerdafinal;
		if((esquerda.length -i) % 3 == 0 && i > 0){
			esquerdafinal = "." + esquerdafinal;
		}
	}
	var direitafinal = direita + "00";
	direitafinal = direitafinal.substring(0, 2);
	varField.value = esquerdafinal + "," + direitafinal;
}

function toNumber(text){
	if(text == ""){
		return 0;
	}else{
		while(text.indexOf(".") != -1){
			text = text.substring(0, text.indexOf(".")) + text.substring(text.indexOf(".")+1, text.length);
		}
		if(text.indexOf(",") != -1){
			text = text.substring(0, text.indexOf(",")) + "." + text.substring(text.indexOf(",")+1, text.length);
		}
		return text*1;
	}
}
/*
'[================================================================================================
'[= Nome		: verificaCpfCnpj
'[= Descrição	: valida um CPF ou CNPJ de um campo ou string.
'[= Entrada		: str  - objeto CPF ou CNPJ
'[= Saida		: true  - se o CPF ou CNPJ for válido
'[=				  false - caso contrário
'[= Exemplo		: if(fgVerificaCpfCnpj(text3))
'[= OBS			: 
'[================================================================================================
*/
function verificaCpfCnpj(str){
	/*
	** Compara o tamanho para saber o tipo...
	*/
	switch (str.value.length) {
		case 11: {
			if (!checkCPF(str))
			{
				alert("CPF: "+ str.value + "\n\rCPF Inválido. Favor digitá-lo corretamente.");
				str.focus();
				return false; 
			}
			return true;
		}
		case 14: { 
			if (!checkCNPJ(str))
			{
				alert("CNPJ: "+ str.value + " Inválido. Favor digitá-lo corretamente.");
				str.focus();
				return false; 
			}
			return true;
		}
		default: {
				alert("CNPJ/CPF: "+ str.value + " Inválido. Favor digitá-lo corretamente.");
				str.focus();
			return false;
		}
	}
}

function verificaCpfCnpjEmTab(str, strFieldName, blnRequired, tabName){
	if(!validaTextoEmTab(str, strFieldName, blnRequired, tabName)){
		return false;
	}else{
		/*
		** Compara o tamanho para saber o tipo...
		*/
		switch (str.value.length) {
			case 0: {//se for vazio, retorna true
				return true;
			}
			case 11: {
				if (!checkCPF(str.value))
				{
					alert("CPF: "+ str.value + "\n\rna aba " + tabName + " e' Inválido. Favor digitá-lo corretamente.");
					return false; 
				}
				return true;
			}
			case 14: { 
				if (!checkCNPJ(str.value))
				{
					alert("CNPJ: "+ str.value + " na aba " + tabName + " e' Inválido. Favor digitá-lo corretamente.");
					return false; 
				}
				return true;
			}
			//Quando o CNPJ tiver 15 caracteres a validação de desconsiderar o primeiro caractere (que é zero).
			//Se o primeiro caractere não for zero significa que o usuário digitou o CNPJ com um caractere a mais e
			//a validação deverá indicar o erro ao usuário.
			case 15: {
				if (!checkCNPJ(str.value.substring(1,15)) && str.value.substring(0,1))
				{
				
					alert("CNPJ: "+ str.value + " na aba " + tabName + " e'Inválido. Favor digitá-lo corretamente.");
					return false; 
				}
				return true;
			}
			default: {
					alert("CNPJ/CPF: "+ str.value + " na aba " + tabName + " Inválido. Favor digitá-lo corretamente.");
				return false;
			}
		}
	}
}


/*
'[================================================================================================
'[= Nome		: checkCNPJ
'[= Descrição	: Efetua a validação de CNPJ
'[= Entrada		: CNPJ - CNPJ a ser validado
'[= Saida		: true  - se o CNPJ for válido
'[=				  false - caso contrário
'[= OBS			: 
'[================================================================================================
*/
function checkCNPJ(psCNPJ) 
{
	var liPeso = 2;
	var liSoma = 0;
	var lsAux  = '';
	var liTemp = 0;
	var liDigito = 0;
	var lsCNPJ = '';
	
	/*
	** Verifica se recebeu um objeto
	*/
	if (psCNPJ == '[object]')
		lsCNPJ = psCNPJ.value
	else
		lsCNPJ = psCNPJ;
	
	var liPos  = 0;

	/*
	** Remove qualquer caracter que não seja número
	*/
	for (liPos = lsCNPJ.length - 1; liPos >= 0; liPos--)
		if (!isNaN(lsCNPJ.charAt(liPos)))
			lsAux = lsCNPJ.charAt(liPos) + lsAux;
			
	/*
	** Cálculo do 1º dígito
	*/
	for (liPos = lsAux.length - 3; liPos >= 0; liPos--)
	{
		liSoma += parseInt(lsCNPJ.charAt(liPos)) * liPeso;
		liPeso  = fgIIf((liPeso == 9), 2, liPeso + 1);
	}
	
	liTemp   = (liSoma % 11);
	liDigito = fgIIf((liTemp < 2), 0, (11 - liTemp));
	
	/*
	** Compara o 1º dígito
	*/
	if (parseInt(lsCNPJ.charAt(lsCNPJ.length - 2)) != liDigito)
		return (false);
	
	/*
	** Limpa as Variáveis
	*/
	liPeso = 2;
	liSoma = 0;

	/*
	** Cálculo do 2º dígito
	*/
	for (liPos = lsAux.length - 2; liPos >= 0; liPos--)
	{
		liSoma += parseInt(lsCNPJ.charAt(liPos)) * liPeso;
		liPeso  = fgIIf((liPeso == 9), 2, liPeso + 1);
	}
	
	liTemp   = (liSoma % 11);
	liDigito = fgIIf((liTemp < 2), 0, (11 - liTemp));
	
	/*
	** Compara o 2º dígito
	*/
	if (parseInt(lsCNPJ.charAt(lsCNPJ.length - 1)) != liDigito)
		return (false);
	
	return (true);
}

/*
'[================================================================================================
'[= Nome		: fgCheckCPF
'[= Descrição	: Efetua a validação de CPF
'[= Entrada		: cpf - CPF a ser validado
'[= Saida		: true  - se o CPF for válido
'[=				  false - caso contrário
'[= OBS			: 
'[================================================================================================
*/
function  checkCPF(psCPF) 
{
	var lsAux    = '';
	var lsCPF    = '';
	var liPeso   = 2;
	var liSoma   = 0;
	var liTemp   = 0;
	var liDigito = 0;


	/*
	** Verifica se recebeu um objeto
	*/
	if (psCPF == '[object]')
		lsCPF = psCPF.value
	else
		lsCPF = psCPF;
	
	var liPos  = 0;

	/*
	** Remove qualquer caracter que não seja número
	*/
	for (liPos = lsCPF.length - 1; liPos >= 0; liPos--)
		if (!isNaN(lsCPF.charAt(liPos)))
			lsAux = lsCPF.charAt(liPos) + lsAux;

	/*
	** Cálculo do 1º dígito
	*/
	for (liPos = lsAux.length - 3; liPos >= 0; liPos--)
	{
		liSoma += parseInt(lsCPF.charAt(liPos)) * liPeso;
		liPeso++;
	}
	
	liTemp   = (liSoma % 11);
	liDigito = fgIIf((liTemp < 2), 0, (11 - liTemp));
	
	/*
	** Compara o 1º dígito
	*/
	if (parseInt(lsCPF.charAt(lsCPF.length - 2)) != liDigito)
		return (false);
	
	/*
	** Limpa as Variáveis
	*/
	liPeso = 2;
	liSoma = 0;

	/*
	** Cálculo do 2º dígito
	*/
	for (liPos = lsAux.length - 2; liPos >= 0; liPos--)
	{
		liSoma += parseInt(lsCPF.charAt(liPos)) * liPeso;
		liPeso++;
	}
	
	liTemp   = (liSoma % 11);
	liDigito = fgIIf((liTemp < 2), 0, (11 - liTemp));
	
	/*
	** Compara o 2º dígito
	*/
	if (parseInt(lsCPF.charAt(lsCPF.length - 1)) != liDigito)
		return (false);
	
	return (true);
}

/*
'[======================================================================================
'[= Nome		: fgIIf
'[= Descrição	: Caso a condição seja verdadeira assume o primeiro valor, senão o segundo.
'[= Entrada		: pbCond       - Condição a ser avaliada
'[=               pvValueTrue  - Valor caso pbCond for verdadeiro
'[=               pvValueFalse - Valor caso contrário
'[= Saida		: pvValueTrue ou pvValueFalse
'[= Exemplo		: text4.value	= fgIIf(text3.value == 'Teste', 'fgIIf true', 'fgIIf false')
'[= OBS			:	
'[======================================================================================
*/
function fgIIf(pbCond, pvValueTrue, pvValueFalse)
{
	if (pbCond)
		return (pvValueTrue)
	else
		return (pvValueFalse);
}


