var AjaxSelect=new Class({initialize:function(a){this.input=a;this.data=null;this.input.addEvent("focus",this.create.bind(this));this.input.addEvent("blur",this.close.bind(this));this.keyup=null;this.container=$(document.body);this.visible=false;this.table_style={cellpadding:"0",cellspacing:"0"};this.selected_color="#B0C4DE";this.row_height=20;this.mouse_in=false;this.focused=false;this.lader=null},request_data:function(a){this.params=a;this.data=null;this.loader=new tit_ajax.loader(this.params.event_name,this.params.request_data);$(document).addEvent(this.params.event_name,this.load_data.bind(this))},load_data:function(c){if(c.data.data){var b=c.data.data;var a=this;this.data=[];$each(b,function(d){a.data.push(d.item)})}$(document).removeEvent(this.params.event_name)},create:function(a){this.focused=true;if(!this.keyup){this.keyup=this.input.addEvent("keyup",this.show_results.bind(this))}var b=this.input.getCoordinates();this.panel=new Element("div");this.panel.setStyles({position:"absolute",top:b.bottom+2+"px",left:b.left+"px",width:b.width+"px",height:this.row_height+"px",backgroundColor:"#E8E8E8"});this.table_style=$extend(this.table_style,{width:b.width+"px"});this.panel.appendText("...");this.panel.inject(this.container);this.panel.setStyles({display:"none"})},clear_panel:function(){var a=this.panel.getElements("td");$each(a,function(b){b.removeEvent("mouseover");b.removeEvent("mouseout");b.removeEvent("click");b.remove();delete b});this.selected_td=null;this.panel.empty()},clear_color:function(){var a=this.panel.getElements("td");$each(a,function(b){b.setStyles({backgroundColor:"#E8E8E8"})})},show_results:function(e){if(!this.data){return}e=new Event(e);switch(e.code){case 38:if(this.visible){this.select_up(e);e.stop();return}case 40:if(this.visible){this.select_down(e);e.stop();return}case 13:e.stop();if(this.visible){this.select_item(e);return}}var d=this.get_filtered_data(this.input.getValue());if(d.length>20){d=d.slice(0,20)}if(d.length>0){var b=new Element("table");var f=new Element("tbody");b.setStyles(this.table_style);f.inject(b);var a=this;$each(d,function(i){var g=new Element("tr");g.setStyles({height:a.row_height+"px",width:"100%"});var h=new Element("td",{nowrap:"nowrap"});h.appendText(i);h.setStyles({cursor:"pointer",width:"100%",overflow:"hidden"});h.addEvent("mouseover",a.mouse_on.bind(a));h.addEvent("mouseout",a.mouse_out.bind(a));h.addEvent("click",a.select_item.bind(a));h.inject(g);g.inject(f)});this.clear_panel();var c=d.length*(this.row_height+2);this.panel.setStyles({height:c+"px"});b.inject(this.panel);if(!this.visible){this.panel.setStyles({display:"block"});this.visible=true}}else{if(this.visible){this.panel.setStyles({display:"none"});this.visible=false;this.clear_panel()}}},get_filtered_data:function(b){var a=[];b=b.replace(" ","");$each(this.data,function(c){if(c.toLowerCase().indexOf(b.toLowerCase())>=0){a.push(c)}});return a},select_up:function(){this.clear_color();if(this.selected_td){var a=this.selected_td.getParent().getPrevious();if(a){this.selected_td=a.getElements("td")[0]}this.selected_td.setStyles({backgroundColor:this.selected_color})}else{var b=this.panel.getElements("td");this.selected_td=b[b.length-1];this.selected_td.setStyles({backgroundColor:this.selected_color})}},select_down:function(){this.clear_color();if(this.selected_td){var a=this.selected_td.getParent().getNext();if(a){this.selected_td=a.getElements("td")[0]}this.selected_td.setStyles({backgroundColor:this.selected_color})}else{this.selected_td=this.panel.getElements("td")[0];this.selected_td.setStyles({backgroundColor:this.selected_color})}},select_item:function(a){if(this.selected_td){this.input.value=this.selected_td.getText()}if(a){new Event(a).stop()}this.selected_td=null;this.panel.setStyles({display:"none"});this.visible=false;this.input.focus()},mouse_on:function(a){this.clear_color();a=new Event(a);if(a.target){a.target.setStyles({backgroundColor:this.selected_color});this.selected_td=a.target}else{this.selected_td=null}a.stop();this.mouse_in=true},mouse_out:function(a){this.selected_td=null;new Event(a).stop();this.mouse_in=false;if(!this.focused){this.close()}},close:function(a){this.focused=false;if(this.mouse_in){return}this.clear_panel();this.visible=false;this.panel.remove();this.input.removeEvent("keyup");delete this.panel}});
