function infraSelect(idSelect,idHidden,link){
  return new infraLupaSelect(idSelect,idHidden,link);
}

function infraLupaSelect(idSelect,idHidden,link){
	var me = this;
	this.Type = 'infraSelect';
	this.sel = infraGetElementById(idSelect);
	this.hdn = infraGetElementById(idHidden);
	this.url = link;
	
  this.inicializar = function(){
    if (me.hdn.value != ''){
      me.montar();
    }else if (me.sel.options.length > 0){
      me.atualizar();
    }
    
    infraAdicionarEvento(me.sel,"keydown",me.deleteTeclado);
	}

	this.selecionar = function(numLargura,numAltura){
	  
	  if (numLargura==undefined){
	    numLargura = 600;
	  }
	  
	  if (numAltura==undefined){
	    numAltura = 400;
	  }
	  
	  return infraAbrirJanela(me.url,'infraJanelaSelecao',numLargura,numAltura,'location=0,status=1,resizable=1,scrollbars=1');  
	}
	
  this.montar = function(){
    var arrItens = me.hdn.value.split('¥');
    me.sel.options.length=0;
    for(var i=0;i<arrItens.length;i++){
      var arrItem = arrItens[i].split('±');
      infraSelectAdicionarOption(me.sel,arrItem[1],arrItem[0]);
    }
  }
  
  this.atualizar = function(){
    me.hdn.value = '';
    for (var i=0; i<me.sel.length; i++) {
      if ( me.hdn.value != '' ){
        me.hdn.value = me.hdn.value + '¥';
      }
      me.hdn.value = me.hdn.value + me.sel.options[i].value + '±' + me.sel.options[i].text;
      /*
      me.hdn.value = me.hdn.value.infraReplaceAll('&','&amp;');      
      me.hdn.value = me.hdn.value.infraReplaceAll('<','&lt;');
      me.hdn.value = me.hdn.value.infraReplaceAll('>','&gt;');
      me.hdn.value = me.hdn.value.infraReplaceAll('"','&quot;');
      */
    }
  }
  
  this.remover = function (){
    var i;
    
    if (me.sel.length==0){
      alert('Não existem itens para esta ação.');
      return;
    }
    
    var temp = new Array();
    var j = 0;
    for (i=0; i<me.sel.length; i++) {
      if (me.sel.options[i].selected){
        temp[j++] = me.sel.options[i];
      }
    }
    
    if (temp.length==0){
      alert('Nenhum item selecionado.');
      return;
    }

    if (me.processarRemocao(temp)){
      var flagRemoveuItem;
      do{
        flagRemoveuItem=false;
        for (i=0; i<me.sel.length; i++) {
          if (me.sel.options[i].selected){
            me.sel.options[i]=null;
            flagRemoveuItem = true;
            break;
          }
        }
      }while(flagRemoveuItem);
      
      me.atualizar();
    }
  }
  
  this.moverAcima = function(){
    if (me.sel.length==0){
      alert('Não existem itens para esta ação.');
      return;
    }

    var item = null;
    for (var i=0; i<me.sel.length; i++) {
      if (me.sel.options[i].selected){
        
        if (item != null){
          alert('Mais de um item selecionado.');
          return;
        }
        
        item = i;
      }
    }
    
    if (item == null){
      alert('Nenhum item selecionado.');
      return;
    }    
    
    if (item > 0){
      var v = me.sel.options[item-1].value;
      var t = me.sel.options[item-1].text;
      
      me.sel.options[item-1].value = me.sel.options[item].value;
      me.sel.options[item-1].text = me.sel.options[item].text;
      
      me.sel.options[item].value = v;
      me.sel.options[item].text = t;
      
      me.sel.options[item].selected = false;
      me.sel.options[item-1].selected = true;
      
      me.atualizar();
    }
  }
  
  this.moverAbaixo = function(){
    if (me.sel.length==0){
      alert('Não existem itens para esta ação.');
      return;
    }

    var item = null;
    for (var i=0; i<me.sel.length; i++) {
      if (me.sel.options[i].selected){
        
        if (item != null){
          alert('Mais de um item selecionado.');
          return;
        }
        
        item = i;
      }
    }
    
    if (item == null){
      alert('Nenhum item selecionado.');
      return;
    }    
    
    if (item < (me.sel.length-1)){
      var v = me.sel.options[item+1].value;
      var t = me.sel.options[item+1].text;
      
      me.sel.options[item+1].value = me.sel.options[item].value;
      me.sel.options[item+1].text = me.sel.options[item].text;
      
      me.sel.options[item].value = v;
      me.sel.options[item].text = t;
      
      me.sel.options[item].selected = false;
      me.sel.options[item+1].selected = true;
      
      me.atualizar();
    }
  }

  
  
  this.deleteTeclado = function(ev){
  	// keyCode 46 = Delete Teclado 
  	if (infraGetCodigoTecla(ev) == 46){
  		me.remover();
  	}    
  }
  
 	me.processarSelecao = function(itens){return true;}
  me.processarRemocao = function(itens){return true;}
  me.finalizarSelecao = function(){}

	me.inicializar(); 
}