
function validacep(cep,local,mensagem,req){
	var i,j = 0; 
	var msg = '';   
	var siglas = 'SP RJ ES MG BA SE PE AL PB RN CE PI MA PA AM AP RR AC RO TO MT MS GO DF PR SC RS '; 
	var cepCorreto = true;
	var preCep = 0;
	local = local.toUpperCase();
	for (i = 0; i < local.length; i++){ 
		if (local.charAt(i) == ' ') {
			j++;
		}
	}
	parametro = new Array(j);
	j = 0;
	parametro[j] = '';
	for (i = 0; i < local.length; i++){ 
		if (local.charAt(i) != ' '){
				parametro[j] += local.charAt(i);
		}else{
			j++;
			parametro[j] = '';
		}
	}
	cep = tiraSimb(cep);
	estado = new Array();
	for (i = 0; i < 27; i++){ 
		estado[i] = new criaEstado(siglas.substr((i*3),2),false);
	}
	for (i = 0; i < parametro.length; i++){
		if (parametro[i] === "BRASIL") {  
			for (j = 0; j < 27; j++){
				estado[j].situacao = true;
			}
		}else if (parametro[i] === 'SUDESTE') { 
			for (j = 0; j < 4; j++) {
				estado[j].situacao = true;
			}
		}else if (parametro[i] === 'NORDESTE') { 
			for (j = 4; j < 13; j++) {
				estado[j].situacao = true;
			}
		}else if (parametro[i] === 'NORTE') { 
			for (j = 13; j < 19 ; j++) {
				estado[j].situacao = true;
			}
		}else if (parametro[i] === 'CENTROOESTE') { 
			for (j = 19; j < 24; j++) {
				estado[j].situacao = true;
			}
		}else if (parametro[i] === 'SUL') { 
			for (j = 24; j < 27; j++) {
				estado[j].situacao = true;
			}
		}else	if ((j = Math.floor(siglas.indexOf(parametro[i])/3)) < 27){
			estado[j].situacao = true;
		} 
	}
	preCep = parseInt(cep.substr(0,3),10);
	if ((cep.length == 0) && (req)) { 
		msg = 'obrigatorio';
	}else if (cep.length > 0) {
		if (parseInt(cep,10) <= 1000000){
			msg = 'inválido'; 
		}else{ 
			cepCorreto = false;
			if (cep.length < 8) {
				cepCorreto = true;
				msg = 'inválido';
			}else if ((estado[0].situacao) && (preCep >= 10) && (preCep <= 199)) {
				cepCorreto = true;
			}else if ((estado[1].situacao) && (preCep >= 200) && (preCep <= 289)) {
				cepCorreto = true;
			}else if ((estado[2].situacao) && (preCep >= 290) && (preCep <= 299)) {
				cepCorreto = true;
			}else if ((estado[3].situacao) && (preCep >= 300) && (preCep <= 399)) {
				cepCorreto = true;
			}else if ((estado[4].situacao) && (preCep >= 400) && (preCep <= 489)) {
				cepCorreto = true;
			}else if ((estado[5].situacao) && (preCep >= 490) && (preCep <= 499)) {
				cepCorreto = true;
			}else if ((estado[6].situacao) && (preCep >= 500) && (preCep <= 569)) {
				cepCorreto = true;
			}else if ((estado[7].situacao) && (preCep >= 570) && (preCep <= 579)) {
				cepCorreto = true;
			}else if ((estado[8].situacao) && (preCep >= 580) && (preCep <= 589)) {
				cepCorreto = true;
			}else if ((estado[9].situacao) && (preCep >= 590) && (preCep <= 599)) {
				cepCorreto = true;
			}else if ((estado[10].situacao) && (preCep >= 600) && (preCep <= 639)) {
				cepCorreto = true;
			}else if ((estado[11].situacao) && (preCep >= 640) && (preCep <= 649)) {
				cepCorreto = true;
			}else if ((estado[12].situacao) && (preCep >= 650) && (preCep <= 659)) {
				cepCorreto = true;
			}else if ((estado[13].situacao) && (preCep >= 660) && (preCep <= 688)) {
				cepCorreto = true;
			}else if ((estado[14].situacao) && (((preCep >= 690) && (preCep <= 692)) || ((preCep >= 694) && (preCep <= 698)))){
				cepCorreto = true;
			}else if ((estado[15].situacao) && (preCep == 689)) {
				cepCorreto = true;
			}else if ((estado[16].situacao) && (preCep == 693)) {
				cepCorreto = true;
			}else if ((estado[17].situacao) && (preCep == 699)) {
				cepCorreto = true;
			}else if ((estado[18].situacao) && (preCep == 789)) {
				cepCorreto = true;
			}else if ((estado[19].situacao) && (preCep >= 770) && (preCep <= 779)) {
				cepCorreto = true;
			}else if ((estado[20].situacao) && (preCep >= 780) && (preCep <= 788)) {
				cepCorreto = true;
			}else if ((estado[21].situacao) && (preCep >= 790) && (preCep <= 799)) {
				cepCorreto = true;
			}else if ((estado[22].situacao) && (((preCep >= 728) && (preCep <= 729)) || ((preCep >= 737) && (preCep <= 767)))){
				cepCorreto = true;
			}else if ((estado[23].situacao) && (((preCep >= 700) && (preCep <= 727)) || ((preCep >= 730) && (preCep <= 736)))){
				cepCorreto = true;
			}else if ((estado[24].situacao) && (preCep >= 800) && (preCep <= 879)) {
				cepCorreto = true;
			}else if ((estado[25].situacao) && (preCep >=880 ) && (preCep <= 899)) {
				cepCorreto = true;
			}else if ((estado[26].situacao) && (preCep >= 900) && (preCep <= 999)) {
				cepCorreto = true;
			}else {
				cepCorreto = false;
			}
		}
	
	}
	if (!cepCorreto) {
		if (mensagem) msg = mensagem 
		else msg = 'inválido';
	}
	return msg;
	
}

function criaEstado(est,sit){
	this.sigla    = est;
	this.situacao = sit;

}



