//<![CDATA[
//******************************************************************************
// @name:        util.pesquisaKey.py
// @purpose:     Scripts que fazem a atualizacao/edicao de iptc dos diversos 
//               arquivos adicionados.
//
// @example:     new FieldPesquisaKey(document.getElementById('field_nome'), ['onKeyUp'], 'http://teste'); 
// @author:      Ruhan Bidart - ruhan@2xt.com.br
// @created:     16/11/2007
// @depends:     json.js
//******************************************************************************
var v_class = document.all ? 'className' : 'class';
if (navigator.userAgent.indexOf("MSIE 8.0") != -1){
	var v_class = 'class';
}
var FieldPesquisaKey = function(field, evt, url, namevar, properties, params, field2) {
    // ** Propriedades
    this._field = field;
    this._field2 = field2;
	this._id_field = null;
        this._id_field2 = null;
	this._evt = evt;		
	this._list = null;
	this._id_list = null;
	this._namevar = namevar;
        this._properties = properties || {};
        //this._params = params;
	if(namevar == 'PesquisaKeysBuscaDeCarro' || namevar == 'PesquisaKeysBuscaParaCarro')
	{
		this.class_list = 'carros ';
	}
	else
	{
		this.class_list = 'pesquisaKey';
	}
	
	this.url = url;
	// inicializando o objeto
	this._setIdField();
	this._createList();		
}

// seta o id do campo (caso nao tenha) e faz sua referencia em this._id_field
FieldPesquisaKey.prototype._setIdField = function() {
    // setando o id do campo
    var id_field = this._field.getAttribute('id');
    var id_field2 = this._field2.getAttribute('id');
	if(!id_field) {
		id_field = 'field' + Math.random();
		this._field.setAttribute('id', id_field);
	}
	if(!id_field2) {
		id_field2 = 'field' + Math.random();
		this._field2.setAttribute('id', id_field2);
	}
	this._id_field = id_field;			
	this._id_field2 = id_field2;	
}

// cria o objeto da lista
FieldPesquisaKey.prototype._createList = function() {
	// Estrutura formada:
	// <div>
	//   <ul>
	//     <li>Item de lista 1</li>
	//     <li>Item de lista 2</li>
	//   </ul>  
	// </div>
	var v_class = document.all ? 'className' : 'class';
	if (navigator.userAgent.indexOf("MSIE 8.0") != -1){
		var v_class = 'class';
	}
	var div = document.createElement('div');
  	var ul = document.createElement('ul');
	div.setAttribute(v_class, this.class_list);
	var id_list = 'list' + Math.random();
	div.setAttribute('id', id_list);
	div.appendChild(ul);
	this._list = div;
	this._id_list = id_list;
	// colocando a lista no html
	this._field.parentNode.appendChild(this._list);
	// adicionando os eventos no field	
	for(var i=0; i<this._evt.length; i++)  {		
	    var obj_evt = "document.getElementById('" + this._id_field + "')." + this._evt[i];

	    //verificando versao de navegador
        if (navigator.appName.indexOf('Microsoft') != -1){
            var obj_evt_to_exec = "new Function('" + this._namevar + ".search()');";            
        }else{
            var obj_evt_to_exec = "function(event) {" + this._namevar + ".searchFF(event)" + "}";
        }
        //var obj_evt_to_exec = "new Function('" + this._namevar + ".search()');"; 
        eval(obj_evt + "=" + obj_evt_to_exec);	
	}
}

// efetua a pesquisa
FieldPesquisaKey.prototype.getData = function(param) {
    // @return: [{'valor': 'valor1', 'cor': 'cor1'}, {'valor': 'valor2', 'cor': 'cor2'}]
    // enviando por ajax
    var handler = new XMLHandler();    
    var xmlreq = new XMLClient(this.url);
    // setando para ser sincrono
    xmlreq.setAsync(false); 
    handler.bdoAsync = false;   
    // parametros 
    xmlreq.addParam('key', param);

    handler.onLoad = function(retorno) {
		retorno = JSON.decode(retorno);	
        return retorno;
    } 
    // executa a query construída acima
    xmlreq.query(handler);            
    return JSON.decode(xmlreq.oXMLRequest.responseText);    	
}

// efetua a pesquisa e cria a lista com os dados
FieldPesquisaKey.prototype.search = function() {
    var key = event.keyCode ? event.keyCode : event.which;//funcionou
    //alert('key '+key);
    var pressedKey = String.fromCharCode(key);//funcionou
    //alert('pressedKey '+pressedKey);
    var numKey = pressedKey.charCodeAt(0);//funcionou
    //alert('NumKey '+numKey);
    
    if(this._field.value.length < 3) return;
    
    if(((numKey >= 37) && (numKey<=40)) || (numKey==13)) {
        this.keyEvent(event);
        return false;
    }
    
	var dados = this.getData(this._field.value);
	if(!dados.length) { 
	    this.hideList();
		return;
	}	 
	this.clearList();
	this.fillList(dados);
	this.showList();
	this.setListPosition();
    this.keyEvent(event);
}

// efetua a pesquisa e cria a lista com os dados
FieldPesquisaKey.prototype.searchFF = function(event) {
    var key = event.keyCode ? event.keyCode : event.which;//funcionou
    //alert('key '+key);
    var pressedKey = String.fromCharCode(key);//funcionou
    //alert('pressedKey '+pressedKey);
    var numKey = pressedKey.charCodeAt(0);//funcionou
    //alert('NumKey '+numKey);
    
    if(this._field.value.length < 3) return;
    
    if(((numKey >= 37) && (numKey<=40)) || (numKey==13)) {
        this.keyEvent(event);
        return false;
    }
    
	var dados = this.getData(this._field.value);
	if(!dados.length) { 
	    this.hideList();
		return;
	}	 
	this.clearList();
	this.fillList(dados);
	this.showList();
	this.setListPosition();
	this.keyEvent(event);
}
//exibe e oculta selects da pagina by ces
function selects(param){
                var brow = window.navigator.appName;
                var temp = navigator.appVersion.split("MSIE");
                var versao = parseFloat(temp[1]);
                var select = document.getElementsByTagName('select');
                if (brow == 'Microsoft Internet Explorer' && versao == '6'){
                   if(param == 0){
                        for(i = 0; i<= select.length; i++){
                           select[i].style.display = 'none';
                        }
                  }else if(param == 1){
                        for(i = 0; i<= select.length; i++){
                           select[i].style.display = 'block';
                        }
                    }
                }    
}
// preenche a lista com os dados
FieldPesquisaKey.prototype.fillList = function(dados) {
	var ul = this._list.childNodes[0];
	for(var i=0; i<dados.length; i++) {
        this._field.removeAttribute('color');
        // tratando a questao de o input sempre ter as configuracoes da primeira palavra na lista
		if(i == 0) {
			var cor = 'black';
			if(trim(dados[0]['valor']) == trim(this._field.value)) cor = this.getColor(dados[0]['cor']);
            this._field.setAttribute('color', cor);			
		}
		var li = document.createElement('li');
        // criando o span que ira entrar no li
//		var s = document.createElement('span');		
                // calculando se coloca o ...
//                if(dados[i]['valor'].length > 70) s.innerHTML = dados[i]['valor'].substr(0,70) + '...';
//                else s.innerHTML = dados[i]['valor'];

                if(dados[i]['valor'].length > 70) li.innerHTML = dados[i]['valor'].substr(0,70) + '...';
                else li.innerHTML = dados[i]['valor'];

//		s.style.color = this.getColor(dados[i]['cor']);
		// adicionando o span ao li
                li.setAttribute('sigla', dados[i]['sigla']);
//		li.appendChild(s);	
        // acao de setar a cor
        var action1 = "document.getElementById('" + this._id_field + "').value = this.childNodes[0].nodeValue;";
		// acao de mudar o value do field
        var action2 = "document.getElementById('" + this._id_field2 + "').value = this.getAttribute('sigla');";
		// acao de esconder o div da lista
        var action3 = "document.getElementById('" + this._id_list + "').style.display = 'none'; selects(1);"
                // hack para funcionar sobre select e hover no LI
                if (document.all) {
                    action3 += "WCH.Discard('" + this._id_list + "')";
                    //li.onmouseover = new Function("this.style.backgroundColor = '#00662c'"); 
                    //li.onmouseover = new Function("this.style.backgroundColor = '#00557d'"); 
                    //li.onmouseout = new Function("this.style.backgroundColor = '#006A9D'");
                }
                li.style.color = 'white';
				li.setAttribute(v_class, 'pesquisaKeyFundo');
		li.setAttribute('style', 'color: white');
		li.onmousedown = new Function(action1 + action2 + action3);
                // para que quando clicar fora, esconda a lista
                document.body.onmousedown = new Function(action3); 
		ul.appendChild(li);
                
	}	
}

// limpa os dados da lista
FieldPesquisaKey.prototype.clearList = function() {
	var ul = this._list.childNodes[0];
	ul.innerHTML = '';	
}

// seta a posicao da lista
FieldPesquisaKey.prototype.setListPosition = function(left, top) {
	var left = left || this._field.offsetLeft;
	var top = top || this._field.offsetTop + this._field.offsetHeight;
//        this._list.style.width = this._field.offsetWidth + 'px';	
//this._list.style.left = left + 'px';
//this._list.style.top = top + 'px';	
        // setando as propriedades em style
        for(var prop in this._properties) eval("this._list.style." + prop + " = '" + this._properties[prop] + "'")
        // hack para funcionar no IE sobre selects
        if(document.all)
		{
        		WCH.Apply(this._id_list);
		}
}

// retorna a cor dependendo do id informado
FieldPesquisaKey.prototype.getColor = function(id_color) {
	if(!id_color) return 'white';
	switch(id_color) {
		case 31: 
		    return 'green';
		case 32:
		    return 'red';
		case 33:
		    return 'blue';
		default:
		    return 'white';
	}
}

// mostra a lista
FieldPesquisaKey.prototype.showList = function() {
	this._list.style.display = 'block';
        selects(0);        
}

// esconde a lista
FieldPesquisaKey.prototype.hideList = function() {
	this._list.style.display = 'none';	
        selects(1);
        
}

FieldPesquisaKey.prototype.keyEvent = function(e)  {
	var hotel = document.getElementById('menu_aba2');
	var carro = document.getElementById('menu_aba3');
    var key = e.keyCode ? e.keyCode : e.which;
    var pressedKey = String.fromCharCode(key);//funcionou
    var numKey = pressedKey.charCodeAt(0);//funcionou
    if(numKey == 40 || numKey == 38 || numKey == 13) {
        this.keyUp(e)
        return false
    }
    else if(numKey == 37 || numKey == 39){
        return false
    }
    else{
        var campo = 0;
	    if (this._namevar == 'PesquisaKeysBuscaDeAereo') {
			var document_padrao = document.getElementById('busca_form');
            campo = 0;
        }
        else if (this._namevar == 'PesquisaKeysBuscaDeInternacionalAereo') {
			var document_padrao = document.getElementById('busca_form');
            campo = 1;            
        }else if(this._namevar == 'PesquisaKeysBuscaParaAereo'){
			var document_padrao = document.getElementById('busca_form');
            campo = 2;
        }else if(this._namevar == 'PesquisaKeysBuscaParaInternacionalAereo'){
			var document_padrao = document.getElementById('busca_form');
            campo = 3;
		}else if(this._namevar == 'PesquisaKeysBuscaDeHotel'){
            var document_padrao = document.getElementById('busca_hotel');
            campo = 0;
        }else if(this._namevar == 'PesquisaKeysBuscaDeCarro'){
			var document_padrao = document.getElementById('busca_carro');
			campo = 0;
        }else if(this._namevar == 'PesquisaKeysBuscaParaCarro'){
			var document_padrao = document.getElementById('busca_carro');
			campo = 1;
        }
        else{
            campo = -1;
        }
        var lis = document_padrao.getElementsByTagName('ul')[campo].childNodes;
        
		for (var i=0; i<lis.length; i++){
				lis[i].setAttribute('selected', '');
				if(i == 0){
                                   if(document.all){
				       //lis[i].getAttribute('style').backgroundColor = '#00557d';
				       lis[i].getAttribute('style').color = '#FFF';
					   lis[i].setAttribute(v_class,'pesquisaKeyFundo');
                                       lis[i].setAttribute('selected', 'selected');
                                   }
                                   else{
                                       lis[i].setAttribute('selected', 'selected');
									   lis[i].setAttribute(v_class, 'pesquisaKeyFundo'); 
                                       lis[i].setAttribute('style', 'color: #FFF;'); 
                                   }
				}
		}
        
		if(this._namevar == 'PesquisaKeysBuscaDeAereo'){
            if(document.all){
                //document.getElementsByTagName('ul')[campo].childNodes[0].getAttribute('style').backgroundColor = '#00557d';
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].getAttribute('style').color = '#FFF';
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute(v_class,'pesquisaKeySelecionado');	
            }else{
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute(v_class,'pesquisaKeySelecionado');
                document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute('style', 'color: #FFF;');
            }
		}
		else{
            if(document.all){
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute(v_class,'pesquisaKeySelecionado');
                //document.getElementsByTagName('ul')[campo].childNodes[0].getAttribute('style').backgroundColor = '#00557d';
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].getAttribute('style').color = '#FFF';
            }else{
				document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute(v_class,'pesquisaKeySelecionado');
                document_padrao.getElementsByTagName('ul')[campo].childNodes[0].setAttribute('style', 'color: #FFF;');
            }
		}
    }
}

FieldPesquisaKey.prototype.keyUp = function(evt){
	var hotel = document.getElementById('menu_aba2');
	var carro = document.getElementById('menu_aba3');
    var iSelected = 0;
    if(!evt) {
		evt = this._evt;
	}
	var campo = 0; 
	if (this._namevar == 'PesquisaKeysBuscaDeAereo') {
		var document_padrao = document.getElementById('busca_form');
        campo = 0;
    }else if (this._namevar == 'PesquisaKeysBuscaDeInternacionalAereo') {
			var document_padrao = document.getElementById('busca_form');
            campo = 1;            
        }else if(this._namevar == 'PesquisaKeysBuscaParaAereo'){
			var document_padrao = document.getElementById('busca_form');
            campo = 2;
		}else if(this._namevar == 'PesquisaKeysBuscaParaInternacionalAereo'){
			var document_padrao = document.getElementById('busca_form');
            campo = 3;
		}else if(this._namevar == 'PesquisaKeysBuscaDeHotel'){
			var document_padrao = document.getElementById('busca_hotel');
            campo = 0;
        }else if(this._namevar == 'PesquisaKeysBuscaDeCarro'){
			var document_padrao = document.getElementById('busca_carro');
			campo = 0;
        }else if(this._namevar == 'PesquisaKeysBuscaParaCarro'){
			var document_padrao = document.getElementById('busca_carro');
			campo = 1;
		}
        else{
            //alert(this._namevar);
            campo = -1;
        }
    var lis = document_padrao.getElementsByTagName('ul')[campo].childNodes;
    // atribuindo a key
    var key = evt.keyCode ? evt.keyCode : evt.which;
    if(lis.length <= 0 && key != 13) return false;
	for (var i=0; i<lis.length; i++) {
		if(lis[i].getAttribute('selected') == 'selected') {
			iSelected = i;
		}
	}
	if(key == 40){//decolore o fundo
		if(iSelected == (lis.length - 1) ){
            iSelected = 0;
            if(document.all){
                //document.getElementsByTagName('ul')[campo].childNodes[lis.length-1].getAttribute('style').backgroundColor = '#006A9D';
                document_padrao.getElementsByTagName('ul')[campo].childNodes[lis.length-1].getAttribute('style').color = 'white';
				document_padrao.getElementsByTagName('ul')[campo].childNodes[lis.length-1].setAttribute(v_class,'pesquisaKeyFundo');
            }else{
                document_padrao.getElementsByTagName('ul')[campo].childNodes[lis.length-1].setAttribute('style', 'color: white;');
				document_padrao.getElementsByTagName('ul')[campo].childNodes[lis.length-1].setAttribute(v_class,'pesquisaKeyFundo');
            }
			document_padrao.getElementsByTagName('ul')[campo].childNodes[lis.length-1].setAttribute('selected', '');
            
		}
		else{
            if(document.all){
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
                //document.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').backgroundColor = '#006A9D';
                document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').color = 'white';
            }else{
                document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('style', 'color: white;');
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
            }
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('selected', '');
			iSelected = (iSelected + 1);
		}
        //colore o fundo
        if(document.all){
            //document.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').backgroundColor = '#00557d';
            document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').color = '#FFF';
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeySelecionado');
        }else{
            document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('style', 'color: #FFF;');
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeySelecionado');
        }
		document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('selected', 'selected');
	}	
	
	if(key == 38){//descolore o fundo
        if(iSelected == 0 ){
            if(document.all){
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
                //ocument.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').backgroundColor = '#006A9D';
                document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').color = 'white';
            }else{
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
                document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('style', 'color: white;');                
            }            
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('selected', '');
            iSelected = (lis.length - 1);
		}
        else{
            if(document.all){
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
                //document.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').backgroundColor = '#006A9D';
                document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').color = 'white';
            }else{
				document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeyFundo');
                //document.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('style', 'color: white; background-color: #006A9D;');
            }
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('selected', '');
			iSelected = (iSelected - 1);
		}
        //colore o fundo
        if(document.all){
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeySelecionado');
            //document.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').backgroundColor = '#00557d'; 
            document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('style').color = '#FFF';            
        }else{
			document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute(v_class,'pesquisaKeySelecionado');
            document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('style', 'color: #FFF;');            
        }
		document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].setAttribute('selected', 'selected');
	
	}
	if(key == 13){
        //joga o valor da sigla no campo
		document.getElementById(this._id_field2).value = document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].getAttribute('sigla');
		document.getElementById(this._id_field).value = document_padrao.getElementsByTagName('ul')[campo].childNodes[iSelected].childNodes[0].nodeValue;
        this.hideList();
	}
}

function trim(s) {
	var l = 0; 
	var r = s.length -1;
	while(l < s.length && s[l] == ' ') l++;
	while(r > l && s[r] == ' ') r -= 1;
	return s.substring(l, r+1);
}
//]]>
