/*
requerimentos: 
  - Ajax.js (classe que o neves fez) 
  - Object.js
  - CepStatusDisplay.js
	  - DisplayControl.js (o CepStatusDisplay usa ele)

@param objId String id do input que o usuário vai digitar o cep
@param onResultFunc Function função(objeto da função) que vai receber o objeto cep, quando terminar a requisicao, o objeto terá um atributo found c um inteiro p dizer se encontrou ou naum.
@param onBeforeReqFunc Function função(objeto da função) que vai ser chamada quando for fazer a requisição (para limpar os input com o endereço).
@param pag2req String página que vai receber a requisicao fazer a pesquisa e retornar
@param statusObj Object uma instancia da classe CepStatusDisplay ou RequestStatus
*/
function CepRequest(objId, onResultFunc, onBeforeReqFunc, pag2req, statusObj){
	if (typeof pag2req == undefined) pag2req = ''
	
	if (typeof onResultFunc != 'function') 
		throw new Error('O segundo parâmetro tem que ser um objeto do tipo função!')
	
	this.inputCep = document.getElementById(objId)
	this.lastSearch = null
	this.status = statusObj
	
	if (!Object.isObject(this.inputCep)) 
		throw new Error('Não foi encontrado o objeto com o id ' +objId)
	
	var objCep = this
	this.funcao = function(req, timer) {
		if (objCep.isNewSearch())
			return
		
		var cep = {}
		try { eval("cep = { " +req.responseText +" }") }
		catch (e) {}
		
		if (objCep.status instanceof CepStatusDisplay) 
			objCep.status.setStatus((cep.found) ?'cep_status_ok' :'cep_status_erro')
		
		onResultFunc(cep)
	}
	this.request = new Ajax(pag2req ,this.funcao ,this.funcao)
	
	this.inputCep.onkeypress = function () { this.value = this.value.replace(/[^0-9]+/g,''); }
	this.inputCep.onkeyup = function () {
		this.onkeypress()
		
		if (objCep.isNewSearch()) {
			objCep.request.abort()
			
			if (onBeforeReqFunc instanceof Function)
				onBeforeReqFunc(this.value)
				
			if (objCep.status instanceof CepStatusDisplay) 
				objCep.status.setStatus('cep_status_pesquisando')
			
			objCep.request.setParam('cep', this.value)
			objCep.lastSearch = this.value
			objCep.request.get()
		}
	};
}

CepRequest.prototype.isNewSearch = function () {
	return this.inputCep.value.length == 8 && this.inputCep.value != this.lastSearch
}
