
var SELECTBOX_DEFAULT_TEMPLATE="\n    <div class=\"SelectBox\">\n        <h4 class=\"selected\" id=\"sb_head[%ID]\" style=\"cursor:pointer;\" onclick=\"$(\'sb[%ID]\').toggle();$(\'sb[%ID]\').move_to_nobreak(this, \'bottom\', \'left\');return false;\" info=\"[%focus_value]\">[%focus_title]</h4>\n        <ul id=\"sb[%ID]\" style=\"display:none;\">\n            > value in values\n                > value.value != focus_value\n                    <li style=\"cursor:pointer;\" class=\"[% value.className ]\" onclick=\"getObj([%ID]).set(\'[%value.value]\', \'[%target]\');return false;\"><h4>[%value.title]</h4></li>\n                %\n            %\n        </ul>\n    </div> ";var SelectBox=Class.create({template:SELECTBOX_DEFAULT_TEMPLATE,initialize:function(values,sel,options){var that=this;options=options||{};this.selected=sel;var selected_node=false;if(typeof(values)=='string'){this.target=values;var focus=$(values);if(!focus)
console.error("Cannot find element by id %s",values);options.change=focus.onchange;var original_name=focus.getAttribute('name');var original_parent=focus.parentNode;values=[];focus.traverse(function(node){if(node.tagName=="OPTION"){name=node.innerHTML;var value;if(node.getAttribute("value")||node.getAttribute("value")=="")
value=[name,node.getAttribute("value")];else
value=[name,name];value.className=node.getAttribute("class");values.push(value);if(node.getAttribute("selected"))
selected_node=value;}});this.new_focus=document.createElement("input");this.new_focus.setAttribute("type","hidden");this.new_focus.setAttribute("name",original_name);original_parent.appendChild(this.new_focus);}
if(options.template)this.template=options.template;this.hashed={};this.values=values.collect(function(v){var r;if(typeof(v)=='string'){r=({value:v[1],title:v[1],className:v.className});}else{r=({value:v[1],title:v[0],extra:v[2],className:v.className});}
that.hashed[r.value]=r;return r;});if(!this.selected){if(!selected_node)
this.selected=this.values[0];else
this.selected=this.hashed[selected_node[1]];}else{this.selected=this.hashed[this.selected];}
this.options=options;this.initial=this.selected;this.set(this.selected.value,false,false,true);},reset:function(target){console.log('reset',this,this.initial.value);this.set(this.initial.value,target,"reset");},set:function(v,target,event_name,no_fire){event_name=event_name||"change";this.selected=this.hashed[v];if(this.new_focus)
this.new_focus.setAttribute("value",this.selected.value);this.render(target);if(this.options.change&&!no_fire)
this.options.change.call(this.new_focus,v);},element:function(){return $(this.target);},render:function(target){var targeted;if(!target){targeted="sb"+this.__id__+"_gen";}else{targeted=target;}
var _html=(new Template3(this.template));var html=_html.str({focus_value:this.selected.value,focus_title:this.selected.title,focus_class:this.selected.className,values:this.values,ID:this.__id__,target:targeted});if(!target){if(this.target){var tdiv=document.createElement("div");tdiv.setAttribute("id",targeted);tdiv.setAttribute("class","SelectBoxParent");tdiv.innerHTML=html;$(this.target).parentNode.replaceChild(tdiv,$(this.target));}else{document.write(html);}}else{$(target).innerHTML=html;}
this.target=targeted;}});