/**
 * @author rodrigo
 * Utilizando jQuery
 */
	var CORREIOS_PROXY = '_lib/correios/correios.php';

	/* objeto endereço */
	function objEnder(end_cep, end_cidade, end_cidade_nome, end_uf, end_rua, end_num, end_compl, end_bairro, end_bairro_nome){
		this.end_cep = end_cep;
		this.end_cidade = end_cidade;
		this.end_cidade_nome = end_cidade_nome;
		this.end_uf = end_uf;
		this.end_rua = end_rua;
		this.end_num = end_num;
		this.end_complemento = end_compl;
		this.end_bairro = end_bairro;
		this.end_bairro_nome = end_bairro_nome;
		/* apenas utilizados na busca por logradouros */
		this.numeroInicial = "";
		this.numeroFinal = "";
		this.restricao = "";
		/* controle de erros */
		this.message = "";
		this.ERRO = "";
	}
	
	function sendRequestCorreios(action, params, callBackFunction) {
		
		var errorAddress = new objEnder();
		errorAddress.message = "ERRO";
		
		$.getJSON(CORREIOS_PROXY+'?ac='+action+'&'+params, function(data) {
			//$.each(data.items, function(i,item) {});
			var arrReturn = [];
			switch(action) {
				case 'cep':
					var returnAddress = new objEnder();
					if (data.message == "ok" && data.localidade != "") {
						returnAddress = new objEnder('',data.chaveLocDNE,data.localidade,data.uf,
													data.logradouro,'','',data.chaveBairroDNE,data.bairroNome);
						returnAddress.message = data.message;
					} else {
						errorAddress.ERRO = "CEP não encontrado!";
						returnAddress = errorAddress;
					}
					arrReturn.push(returnAddress);
					break;
				case 'bairros':
					if (data.message == "ok") {
						$.each(data.bairros, function(i,bairro) {
							var objBairro = new objEnder();
							objBairro.end_bairro = bairro.chaveDNE;
							objBairro.end_bairro_nome = bairro.nome;
							objBairro.message = "ok";
							arrReturn.push(objBairro);
						});
					} else {
						errorAddress.ERRO = data.ERRO;
						arrReturn.push(errorAddress);
					}
					break;
				case 'loc':
					if (data.message == "ok") {
						$.each(data.localidades, function(i,localidade) {
							var objLoc = new objEnder();
							objLoc.end_cidade = localidade.chaveDNE;
							objLoc.end_cidade_nome = localidade.nome;
							objLoc.message = "ok";
							arrReturn.push(objLoc);
						});
					} else {
						errorAddress.ERRO = data.ERRO;
						arrReturn.push(errorAddress);
					}
					break;
				case 'log':
					if (data.message == "ok") {
						$.each(data.logradouros, function(i,logradouro) {
							var objLograd = new objEnder();
							objLograd.end_cep = logradouro.cep;
							objLograd.end_cidade_nome = logradouro.nome;
							objLograd.end_rua = logradouro.logradouro;
							objLograd.numeroInicial = logradouro.numeroInicial;
							objLograd.numeroFinal = logradouro.numeroFinal;
							objLograd.restricao = logradouro.restricao;
							objLograd.message = "ok";
							arrReturn.push(objLograd);
						});
					} else {
						errorAddress.ERRO = data.ERRO;
						arrReturn.push(errorAddress);
					}
					break;
			}
			eval(callBackFunction+'(arrReturn);');
		});
	}

	function getLogradouro(cep, callBackFunction) {
		sendRequestCorreios('cep','cep='+cep, callBackFunction);
	}
	
	function buscaBairros(chaveLocDNE, callBackFunction) {
		sendRequestCorreios('bairros','loc='+chaveLocDNE, callBackFunction);
	}

	function buscaCidades(UF, callBackFunction) {
		sendRequestCorreios('loc','uf='+UF, callBackFunction);
	}
	
	function buscaLogradouros(UF, chaveLocDNE, strRua, callBackFunction) {
		sendRequestCorreios('log','lograd='+strRua+'&loc='+chaveLocDNE+'&uf='+UF, callBackFunction);
	}