function checkField(s) {
        if ((s.indexOf("&")>=0) || (s.indexOf("<")>=0) || (s.indexOf(">")>=0) || (s.indexOf("|")>=0) || (s.indexOf("\"")>=0) || (s.indexOf("/")>=0) )
			return false;
        return true;
}

function vogalAcentuada(s) {
        ls = s.toLowerCase();
        if ((ls.indexOf("á")>=0) || (ls.indexOf("à")>=0) || (ls.indexOf("ã")>=0) || (ls.indexOf("â")>=0) || (ls.indexOf("é")>=0) || (ls.indexOf("í")>=0) || (ls.indexOf("ó")>=0) || (ls.indexOf("õ")>=0) || (ls.indexOf("ô")>=0) || (ls.indexOf("ú")>=0) || (ls.indexOf("ü")>=0))
                return true;
}


function warnInvalid (theField, warnText)
{   theField.focus();
    alert(warnText);
    return false
}

function verificaEmail(Email) {
        var s = new String(Email);

        // { } ( ) < > [ ] | \ /
        if ((s.indexOf("{")>=0) || (s.indexOf("}")>=0) || (s.indexOf("(")>=0) || (s.indexOf(")")>=0) || (s.indexOf("<")>=0) || (s.indexOf(">")>=0) || (s.indexOf("[")>=0) || (s.indexOf("]")>=0) || (s.indexOf("|")>=0) || (s.indexOf("\"")>=0) || (s.indexOf("/")>=0) )
                return false;
        if (vogalAcentuada(Email))
                return false;
        // & * $ % ? ! ^ ~ ` ' "
        if ((s.indexOf("&")>=0) || (s.indexOf("*")>=0) || (s.indexOf("$")>=0) || (s.indexOf("%")>=0) || (s.indexOf("?")>=0) || (s.indexOf("!")>=0) || (s.indexOf("^")>=0) || (s.indexOf("~")>=0) || (s.indexOf("`")>=0) || (s.indexOf("'")>=0) )
                return false;
        // , ; : = #
        if ((s.indexOf(",")>=0) || (s.indexOf(";")>=0) || (s.indexOf(":")>=0) || (s.indexOf("=")>=0) || (s.indexOf("#")>=0) )
                return false;
        // procura se existe apenas um @
        if ( (s.indexOf("@") < 0) || (s.indexOf("@") != s.lastIndexOf("@")) )
                return false;
        // verifica se tem pelo menos um ponto após o @
        if (s.lastIndexOf(".") < s.indexOf("@"))
                return false;
        // verifica se nao termina com um ponto
        if (s.substr(s.length-1,s.length) == ".")
        	return false;
        return true;
}

/************************************************
* function isInteger
* Verifica se um campo é inteiro, inclui dígitos de 0 a 9, vírgula, ponto, espaços e -
* Input: campo a ser verificado
************************************************/

function isInteger(s){
        var i;
        if (isEmpty(s)) 
                return false;
        for (i = 0; i < s.length; i++)
        {   
                var c = s.charAt(i);
                if (!isNumber(c)) return false;
        }
        return true;
}

// Verifica se o caracter pode fazer parte de um número: 0-9 , . ( ) - e espaço
function isNumber (c)
{ return ((c >= "0") && (c <= "9") || (c=="-") || (c=="(") || (c==")") || (c==" ") || (c==".") || (c==",")) }



/************************************************
* function verificaCartao
* Verifica se o número de um cartão de crédito é válido
* Input: número do cartão e tipo dele (VISA, MASTERCARD, ...)
************************************************/

function verificaCartao(cartao,tipo){
        Msg=""
        chk=checkcc(cartao,tipo);
        if (chk == 0) { Msg = ""; } //Cartao OK.
        if (chk == 1) { Msg = "Tipo do cartao errado"; }
        if (chk == 2) { Msg = "Tamanho do cartao errado"; }
        if (chk == 3) { Msg = "Tamanho e tipo do cartao errados"; }
        if (chk == 4) { Msg = "Checksum do cartao errado"; }
        if (chk == 5) { Msg = "Checksum e tipo do cartao errados"; }
        if (chk == 6) { Msg = "Checksun e tamaho do cartao errados"; }
        if (chk == 7) { Msg = "Checksum, tamanho e tipo do cartao errados"; }
        if (chk == 8) { Msg = "Tipo do cartao desconhecido"; }
        if (Msg==""){
                return true;
        }else {
                //alert(Msg);
                return false;
        }
}

/************************************************
* function verificaCEP
* Verifica se o CEP está no formato correto
* Input: CEP a ser verificado
************************************************/

function verificaCEP (cep) {
        s = new String(cep);
        if ((s.length > 9) || (s.length < 5))
                return false;
        if (!isInteger(cep))
                return false;
        return true;
}


/************************************************
* function verificaCPF
* Verifica se um CPF é válido
* Input: cpf a ser verificado
************************************************/

function verificaCPF(cpf)
{
        var dac = "", inicio = 2, fim = 10, soma, digito, i, j
        for (j=1;j<=2;j++) {
                soma = 0
                for (i=inicio;i<=fim;i++) {
                        soma += parseInt(cpf.substring(i-j-1,i-j))*(fim+1+j-i)
                }
                if (j == 2) { soma += 2*digito }
                digito = (10*soma) % 11
                if (digito == 10) { digito = 0 }
                dac += digito
                inicio = 3
                fim = 11
        }
        return (dac == cpf.substring(cpf.length-2,cpf.length))
}

/************************************************
* function verificaCGC
* Verifica se um CGC é válido
* Input: cgc a ser verificado
************************************************/

function verificaCGC(scgc) {
        cgc = trimtodigits(scgc);
        if ((cgc.indexOf("-") != -1) || (cgc.indexOf(".") != -1) || (cgc.indexOf("/") != -1)){
                return( false )
        }
        var df, resto, dac = ""
        df = 5*cgc.charAt(0)+4*cgc.charAt(1)+3*cgc.charAt(2)+2*cgc.charAt(3)+9*cgc.charAt(4)+8*cgc.charAt(5)+7*cgc.charAt(6)+6*cgc.charAt(7)+5*cgc.charAt(8)+4*cgc.charAt(9)+3*cgc.charAt(10)+2*cgc.charAt(11)
        resto = df % 11
        dac += ( (resto <= 1) ? 0 : (11-resto) )
        df = 6*cgc.charAt(0)+5*cgc.charAt(1)+4*cgc.charAt(2)+3*cgc.charAt(3)+2*cgc.charAt(4)+9*cgc.charAt(5)+8*cgc.charAt(6)+7*cgc.charAt(7)+6*cgc.charAt(8)+5*cgc.charAt(9)+4*cgc.charAt(10)+3*cgc.charAt(11)+2*parseInt(dac)
        resto = df % 11
        dac += ( (resto <= 1) ? 0 : (11-resto) )
        return (dac == cgc.substring(cgc.length-2,cgc.length))
}

//Remove todos os caracteres excetos 0-9
function trimtodigits(tstring){
  s=""; 
  ts=new String(tstring);
  for (x=0;x<ts.length;x++){
   ch=ts.charAt(x);
    if (asc(ch)>=48 && asc(ch)<=57){
      s=s+ch;
    }
  }
  return s;
}


// Verifica se o caracter é um dígito de 0 a 9
function isDigit (c)
{ return ((c >= "0") && (c <= "9")) }


// Verifica se o caracter é um caracter de a a z
function isAlfaChar (c)
{ 
	var specials = "áéíóúüÁÉÍÓÚÜàÀãõÃÕâêîôûÂÊÎÔÛçÇ";

	var isAlfa =  (c == " " || (c >= "A") && (c <= "Z") || (c >= "a") && (c <= "z") ) ? true : false;
	
	if (isAlfa == true)
		return true;
	for (var i=0; i < specials.length; i++)  {
		if (c == specials.substr(i,1))  {
			isAlfa = true;
			break;
		}
	}
	
	return isAlfa;
			
	
}


/************************************************
* function isEmpty
* Verifica se um campo está vazio
* Input: campo a ser verificado
************************************************/		

function isEmpty(s) {
	s = new String(s);
	return ((s == null) || (s.length == 0) || s.indexOf(" ") == 0);
}

/************************************************
* function isAlfa
* Verifica se um campo é Alfabetico. Se contém apenas letras de a a z
* Input: campo a ser verificado
************************************************/

function isAlfa(s){
	var i;
	if (isEmpty(s)) 
		return false;
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (!isAlfaChar(c)) return false;
	}
	return true;
}

/************************************************
* function isNumeric
* Verifica se um campo é numérico. Se contém apenas dígitos de 0 a 9
* Input: campo a ser verificado
************************************************/

function isNumeric(s){
	var i;
	if (isEmpty(s)) 
		return false;
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	return true;
}

/*
* function verificaData
* Verifica se um campo data é válido.
* Input: Campo do formulário que contém a data
* Esta função pega o campo diretamente, pois assim
* pode dar uma resposta melhor ao usuário.
*************************************************/

function verificaData(data){
        var Date = new String(data);
        Day = "";
        Month = "";
        Year = "";
                
        i =  0;
        for (i=0;(i<Date.length) && (Date.charAt(i) != '/');i++)
                Day = Day + Date.charAt(i);
        i++;        
        for (;(i<Date.length) && (Date.charAt(i) != '/');i++)
                Month = Month + Date.charAt(i);
        i++;        
        for (;(i<Date.length);i++)
                Year = Year + Date.charAt(i);
        for(i=0;i<Date.length;i++){
                NroAsc = asc(Date.substring(i,i+1))
                if (!(NroAsc>=48 && NroAsc<=57) || !(NroAsc = 47) )  {
                        return false;
                }
        }
        
        if (Day.length == 1) {
        	return false;
        }
        if (Month.length == 1) {
        	return false;
        }
        
        if(!isNumeric(Month)) {
                return false;
        }
        if (eval(Month) > 12){
                return false;
        }
        if(!isNumeric(Day)) {
                return false;
        }
        if (eval(Day) > 31){
                return false;
        }
        if(!isNumeric(Year)) {
                return false;
        }
        if(eval(Year) < 1900) {
                return false;
        }
        return true;
}


/*
* function validateDate
* Verifica se os valores de uma data são válidos (dia, mes e ano)
*************************************************/
function validateDate(day,month,year){
	if(!isNumeric(month)) {
		return false;
	}
	if (eval(month) > 12){
		return false;
	}
	if(!isNumeric(day)) {
		return false;
	}
	if (eval(day) > 31){
		return false;
	}
	if(!isNumeric(year)) {
		return false;
	}
	if(eval(year) < 1900) {
		return false;
	}
	return true;

}


// Retorna o código ASC do caracter passada por parâmetro
function asc(achar){
        var n=0;
        var ascstr = makeCharsetString()
        for(i=0;i<ascstr.length;i++){
                if(achar==ascstr.substring(i,i+1)){
                        n=i;
                        break;
                }
        }
        return n+32
}

// Gera uma string com os caracteres básicos na sequência de códigos ASC
function makeCharsetString(){
        var astr
        astr = ' !"#$%&\'()*+,-./0123456789:;<=>?@'
        astr+= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        astr+= '[\]^_`abcdefghijklmnopqrstuvwxyz'
        astr+= '{|}~'
        return astr
}


/** Ordena uma Lista (tag SELECT)
Parametros :
lst : objeto SELECT
campo : 'VALUE' ou 'TEXT'
tipoDado : 'STRING' ou 'NUMERIC'
*/
function listSort(lst, campo, tipoDado, ignoreFirst)  {
	for (var i=(ignoreFirst ? 1:0); i < lst.length-1; i++)  {
		if ( ( (campo == "VALUE") ?
				( (tipoDado == "STRING") ?
					(lst.options[i].value > lst.options[i+1].value)
				:
					(parseInt(lst.options[i].value) > parseInt(lst.options[i+1].value)
				)
			) : ( (tipoDado == "STRING") ?
					(lst.options[i].text > lst.options[i+1].text)
				:
					(parseInt(lst.options[i].text) > parseInt(lst.options[i+1].text) )
				)
			)
		)	{
			// invert the positions
			var auxValue = lst.options[i].value;
			var auxText  = lst.options[i].text;
			lst.options[i].value = lst.options[i+1].value ;
			lst.options[i].text  = lst.options[i+1].text ;
			lst.options[i+1].value = auxValue ;
			lst.options[i+1].text  = auxText ;
			i=(ignoreFirst) ? 0 : -1;
		}
	}
}

// Checka se <text> contem pelo menos <numberOfWords> palavras, e se cada palavra contem pelo menos <charsPerWord> caracteres
function checkWords(text, numberOfWords, charsPerWord)  {
	var totalWords = 0;
	if (text == "" && numberOfWords > 0)
		return(false);
	while (true)  {
		pos = text.indexOf(" ");
		if (pos == -1)  {
			if (text.length < charsPerWord)
				return(false);
			totalWords++;
			break;
		}
		totalWords++;
		word = text.substr(0,pos);
		if (word.length < charsPerWord)
			return(false);
		text = text.substr(pos+1, text.length-pos);
	}

	if (totalWords < numberOfWords)
		return(false);
	return(true);
}

// Retorna a posicao do oElemento em aArray ou -1 se nao encontrado
function findArrayElement(aArray, oElemento)
{
	var iPos = -1;
	for (var i=0; i < aArray.length; i++)  {
		if (aArray[i] == oElemento)  {
			iPos = i;
			break;
		}
	}
	return(iPos);
}

// this function removes any spaces or illegal characters
function strip(num){ 
 num = "" + num;
 if (!num)
  return "";
 var result = "";
 for (i=0; i<num.length; i++){
  character = num.charAt(i);
  if ("0123456789".indexOf(character) != -1)
   result += character;
      }
 return result;
}

/************************************************
* function verificaCartao
* Verifica se o número de um cartão de crédito é válido
* Input: número do cartão e tipo dele (VISA, MASTERCARD, ...)
************************************************/

function verificaCartao(cartao,tipo){
	Msg=""
	chk=checkcc(cartao,tipo);
	if (chk == 0) { Msg = ""; } //Cartao OK.
	if (chk == 1) { Msg = "Tipo do cartao errado"; }
	if (chk == 2) { Msg = "Tamanho do cartao errado"; }
	if (chk == 3) { Msg = "Tamanho e tipo do cartao errados"; }
	if (chk == 4) { Msg = "Checksum do cartao errado"; }
	if (chk == 5) { Msg = "Checksum e tipo do cartao errados"; }
	if (chk == 6) { Msg = "Checksun e tamaho do cartao errados"; }
	if (chk == 7) { Msg = "Checksum, tamanho e tipo do cartao errados"; }
	if (chk == 8) { Msg = "Tipo do cartao desconhecido"; }
	if (Msg==""){
		return true;
	}else {
		//alert(Msg);
		return false;
	}
}


// Função auxiliar na valdiação do número de cartão de crédito
function checkcc(ccnumber,cctype){
	//cctype:
	//       "V" VISA
	//       "M" Mastercard/Eurocard
	//       "A" American Express
	//       "C" Diners Club / Carte Blanche
	//       "D" Discover
	//       "E" enRoute
	//       "J" JCB
	//returns:  checkcc=0 (Bit0) : Cartao Valido
	//          checkcc=1 (Bit1) : Tipo Errado
	//          checkcc=2 (Bit2) : Tamanho Errado
	//          checkcc=4 (Bit3) : checksum Errado (MOD10-Test)
	//          checkcc=8 (Bit4) : Tipo de Cartao desconhecido
	//
	cctype = new String(cctype);
	ctype = cctype.toUpperCase();

	if (ctype == "MASTERCARD") {
		cclength=new Array("16");
		ccprefix=new Array("51","52","53","54","55");
	}
	if (ctype == "VISA") {
		cclength=new Array("13","16");
		ccprefix=new Array("4");
	}
	if (ctype == "AMEX") {
		cclength=new Array("15");
		ccprefix=new Array("34","37");	
	}
	if (ctype == "DINERSCLUB") {
		cclength=new Array("14");
		ccprefix=new Array("300","301","302","303","304","305","36","38");
	}
	if (ctype == "DISCOVER") {
		cclength=new Array("16");
		ccprefix=new Array("6011");
	}
	if (ctype == "ENROUTE") {
		cclength=new Array("15");
		ccprefix=new Array("2014","2149");	
	}
	if (ctype == "JCB") {
		cclength=new Array("15","16");
		ccprefix=new Array("3","2131","1800");
	}
	number=trimtodigits(ccnumber);
	prefixvalid=false;
	lengthvalid=false;
	prefixvalid = true;
	for (i=0;i<cclength.length;i++){
		lengthtemp=cclength[i];
		if (number.length==Number(lengthtemp))
			lengthvalid=true;
	}
	result=0;
	if(!prefixvalid)
		result=Number(result)+Number(1);
	if(!lengthvalid)
		result=Number(result)+Number(2);
	qsum=0;
	for (x=1;x<=number.length;x++){
		ch=number.charAt(number.length-x);
		if (Number(mod(x,2))==Number(0)){
			sum=Number(2)*Number(ch);
			qsum=Number(qsum)+Number((mod(sum,10)));
     		if (sum>9)
				qsum=Number(qsum)+Number(1);	
		}else
			qsum=Number(qsum)+Number(ch);
	}
	if (mod(qsum,10)!=0)
		result=Number(result)+Number(4);
	if (cclength=="")
		result=Number(result)+Number(8);
	return result;
}

// Retorna A MOD B
function mod(a,b){
	temp = Number(b);
	ok=1;
	ant=0;
	if (Number(b)>Number(a)){
		ret=a;
		ok="0";
	}
		while(ok=="1"){
			if (Number(a) >= Number(temp)){
				ant=Number(temp);
				temp=Number(temp)+Number(b);
			}else{
				ret=Number(a)-Number(ant);
				ok = "0";
			     }
		}
	return ret;
}
