Object.extend(Event,{KEY_COMMA:188,CHAR_COMMA:44});Element.addMethods({getCaretPosition:function(){if(this.createTextRange){var a=document.selection.createRange().duplicate();a.moveEnd("character",this.value.length);if(a.text===""){return this.value.length}return this.value.lastIndexOf(a.text)}else{return this.selectionStart}},cacheData:function(b,a,c){if(Object.isUndefined(this[$(b).identify()])||!Object.isHash(this[$(b).identify()])){this[$(b).identify()]=$H()}this[$(b).identify()].set(a,c);return b},retrieveData:function(b,a){return this[$(b).identify()].get(a)},onBoxDispose:function(a,b){a=a.retrieveData("text").evalJSON(true);if(!a.newValue){b.autoFeed(a)}},onInputFocus:function(a,b){if(b.autoShow){b.autoShow()}},onInputBlur:function(a,b){b.lastinput=a;if(!b.curOn&&b.autoHide){b.blurhide=b.autoHide.bind(b).delay(0.1)}}});Object.extend(String.prototype,{entitizeHTML:function(){return this.replace(/</g,"&lt;").replace(/>/g,"&gt;")},unentitizeHTML:function(){return this.replace(/&lt;/g,"<").replace(/&gt;/g,">")}});function $pick(){for(var a=0;a<arguments.length;a++){if(!Object.isUndefined(arguments[a])){return arguments[a]}}return null}var ResizableTextbox=Class.create({initialize:function(b,a){var c=this;this.options=$H({minimum:5,maximum:500}).update(a);this.el=$(b);this.measurediv=this.getMeasurementDiv();this.setElementWidth();this.el.observe("keypress",this.setElementWidth.bind(this)).observe("change",this.setElementWidth.bind(this)).observe("keyup",this.setElementWidth.bind(this))},calculateWidth:function(){this.measurediv.update($F(this.el).escapeHTML()+"MM");newsize=this.measurediv.getWidth();if(newsize<this.options.get("minimum")){newsize=this.options.get("minimum")}if(newsize>this.options.get("maximum")){newsize=this.options.get("maximum")}return newsize},clear:function(){this.el.clear();this.setElementWidth();return this},focus:function(){this.el.focus();return this},getMeasurementDiv:function(){if(!$("__resizeable_textbox_measure_div")){var a=new Element("div",{id:"__resizeable_textbox_measure_div"});a.setStyle({position:"absolute",top:"-1000px",left:"-1000px"});$(document.body).insert(a)}else{var a=$("__resizeable_textbox_measure_div")}return a.setStyle({fontSize:this.el.getStyle("font-size"),fontFamily:this.el.getStyle("font-family")})},setElementWidth:function(){var a=this.calculateWidth();if(a>=this.options.get("minimum")&&a<=this.options.get("maximum")){this.el.setStyle({width:a+"px"})}}});var TextboxList=Class.create({initialize:function(b,a){this.options=$H({resizable:{},className:"bit",separator:",",extrainputs:true,startinput:true,onAdd:function(c){},onRemove:function(c){},hideempty:true,newValues:false,spaceReplace:"",encodeEntities:false,jsonInputValue:false});this.current_input="";this.options.update(a);this.element=$(b).hide();this.bits=new Hash();this.events=new Hash();this.count=0;this.current=false;this.maininput=this.createInput({"class":"maininput"});this.holder=new Element("div",{"class":"holder"}).insert(this.maininput);this.element.insert({before:this.holder});this.holder.observe("click",function(c){c.stop();this.focus(this.maininput)}.bind(this));this.makeResizable(this.maininput);this.setEvents()},setEvents:function(){this.holder.observe("keyup",function(a){a.stop();if(!this.current){return null}switch(a.keyCode){case Event.KEY_LEFT:return this.move("left");case Event.KEY_RIGHT:return this.move("right");case Event.KEY_DELETE:case Event.KEY_BACKSPACE:return this.moveDispose()}return null}.bind(this)).observe(Prototype.Browser.IE||Prototype.Browser.WebKit?"keydown":"keypress",function(a){if(!this.current){return null}if(this.current.retrieveData("type")=="box"&&a.keyCode==Event.KEY_BACKSPACE){a.stop()}if(this.current.retrieveData("input")&&!this.checkInput()){return null}if([Event.KEY_HOME,Event.KEY_END].include(a.keyCode)){a.stop()}switch(a.keyCode){case Event.KEY_HOME:return this.move("home");case Event.KEY_END:return this.move("end")}return null}.bind(this));document.observe("click",function(){this.blur()}.bindAsEventListener(this))},update:function(){var a=this.bits.values();if(this.options.get("jsonInputValue")){if(!this.current_input.blank()){this.current_input.split(/,/).each(function(b){b=b.strip();a.push({caption:b,value:b,newValue:true})}.bindAsEventListener(this))}this.element.value=a.toJSON()}else{if(this.options.get("encodeEntities")){a=a.map(function(b){return b.toString().entitizeHTML().unescapeHTML().unentitizeHTML()})}this.element.value=a.join(this.options.get("separator"));if(!this.current_input.blank()){this.element.value+=(this.element.value.blank()?"":this.options.get("separator"))+this.current_input}}return this},add:function(c,a){var d=this.id_base+"-"+this.count++;var b=this.createBox($pick(a,c),{id:d,"class":this.options.get("className"),newValue:c.newValue?"true":"false",href:"#"});(this.current||this.maininput).insert({before:b});b.observe("click",function(f){f.stop();this.focus(b)}.bind(this));if(this.options.get("jsonInputValue")){this.bits.set(d,c)}else{this.bits.set(d,c.value)}this.update();if(this.options.get("extrainputs")&&(this.options.get("startinput")||b.previous())){this.addSmallInput(b,"before")}this.options.get("onAdd")(c);return b},addSmallInput:function(c,b){var a=this.createInput({"class":"smallinput"});c.insert({}[b]=a);a.cacheData("small",true);this.makeResizable(a);if(this.options.get("hideempty")){a.hide()}return a},insertCurrent:function(){if(this.options.get("newValues")){var a=this.current.retrieveData("input");a.value=a.value.strip();if(a.value.indexOf(",")<(a.value.length-1)){var b=a.value.indexOf(",");if(b>0){a.value=a.value.substr(0,b).strip()}}else{a.value=a.value.strip()}if(!this.options.get("spaceReplace").blank()){a.value.gsub(" ",this.options.get("spaceReplace"))}if(!a.value.blank()){this.newvalue=true;var c=a.value.gsub(",","");c=this.options.get("encodeEntities")?c.entitizeHTML():c.escapeHTML();a.retrieveData("resizable").clear().focus();this.current_input="";this.add({caption:c,value:c,newValue:true});return true}}return false},dispose:function(a){this.bits.unset(a.id);var b=a.innerHTML.stripScripts();b=this.options.get("encodeEntities")?b.entitizeHTML():b.escapeHTML();this.options.get("onRemove")(b.replace(/[\n\r\s]+/g," "));this.update();if(a.previous()&&a.previous().retrieveData("small")){a.previous().remove()}if(this.current==a){this.focus(a.next())}if(a.retrieveData("type")=="box"){a.onBoxDispose(this)}a.remove();return this},focus:function(b,a){if(!this.current){b.fire("focus")}else{if(this.current==b){return this}}this.blur();b.addClassName(this.options.get("className")+"-"+b.retrieveData("type")+"-focus");if(b.retrieveData("small")){b.setStyle({display:"block"})}if(b.retrieveData("type")=="input"){b.onInputFocus(this);if(!a){this.callEvent(b.retrieveData("input"),"focus")}}else{b.fire("onBoxFocus");this.callEvent(b,"focus")}this.current=b;return this},blur:function(b){if(!this.current){return this}if(this.current.retrieveData("type")=="input"){var a=this.current.retrieveData("input");if(!b){this.callEvent(a,"blur")}a.onInputBlur(this)}else{this.current.fire("onBoxBlur")}if(this.current.retrieveData("small")&&!a.get("value")&&this.options.get("hideempty")){this.current.hide()}this.current.removeClassName(this.options.get("className")+"-"+this.current.retrieveData("type")+"-focus");this.current=false;return this},createBox:function(e,c){var d=new Element("a",c).addClassName(this.options.get("className")+"-box").update(e.caption.entitizeHTML()).cacheData("type","box");var b=new Element("a",{href:"#","class":"closebutton"});b.observe("click",function(a){a.stop();if(!this.current){this.focus(this.maininput)}this.dispose(d)}.bind(this));d.insert(b).cacheData("text",Object.toJSON(e));return d},createInput:function(c){var b=new Element("a",{"class":this.options.get("className")+"-input"});var e=new Element("input",Object.extend(c,{type:"text",autocomplete:"off"}));e.observe("focus",function(a){if(!this.isSelfEvent("focus")){this.focus(b,true)}}.bind(this)).observe("blur",function(){if(!this.isSelfEvent("blur")){this.blur(true)}}.bind(this)).observe("keydown",function(a){this.cacheData("lastvalue",this.value).cacheData("lastcaret",this.getCaretPosition())}).observe("keypress",function(f){var a=f.charCode||f.keyCode;if(f.keyCode==Event.KEY_RETURN||a==Event.CHAR_COMMA){this.insertCurrentValue=true}}.bind(this)).observe("keyup",function(a){if(a.keyCode==Event.KEY_RETURN&&!this.insertCurrentValue){this.insertCurrentValue=true}if(this.insertCurrentValue){if(this.insertCurrent()){a.stop()}this.insertCurrentValue=false}}.bind(this));var d=b.cacheData("type","input").cacheData("input",e).insert(e);return d},callEvent:function(b,a){this.events.set(a,b);b[a]()},isSelfEvent:function(a){return(this.events.get(a))?!!this.events.unset(a):false},makeResizable:function(b){var a=b.retrieveData("input");a.cacheData("resizable",new ResizableTextbox(a,Object.extend(this.options.get("resizable"),{min:a.offsetWidth,max:this.element.getWidth()?this.element.getWidth():0})));return this},checkInput:function(){var a=this.current.retrieveData("input");return(!a.retrieveData("lastvalue")||(a.getCaretPosition()===0&&a.retrieveData("lastcaret")===0))},move:function(b){switch(b){case"home":var a=this.current.parentNode.firstDescendant();break;case"end":var a=this.current.parentNode.childElements().last();break;default:var a=this.current[(b=="left"?"previous":"next")]()}if(a&&(!this.current.retrieveData("input")||this.checkInput()||b=="right")){this.focus(a)}return this},moveDispose:function(){if(this.current.retrieveData("type")=="box"){return this.dispose(this.current)}if(this.checkInput()&&this.bits.keys().length&&this.current.previous()){return this.focus(this.current.previous())}return null}});var ProtoMultiSelect=Class.create(TextboxList,{initialize:function($super,c,e,a,d){a=$H({fetchFile:undefined,fetchMethod:"get",fetchParameters:{},results:10,maxResults:0,wordMatch:false,onEmptyInput:function(f){},onUserAdd:function(f){},onUserRemove:function(f){},caseSensitive:false,regexSearch:true,loadFromInput:true,defaultMessage:"",inputMessage:null,sortResults:false,allowDuplicates:false,autoDelay:250,autoResize:false}).update(a);$super(c,a);this.loptions=$H({autocomplete:{opacity:1,maxresults:10,minchars:1}});this.id_base=$(c).identify()+"_"+this.options.get("className");this.data=[];this.data_searchable=[];this.selectedValues=new Hash();this.autoholder=$(e)||this.createAutoholder(e);this.autoholder.setOpacity(this.loptions.get("autocomplete").opacity).observe("mouseover",function(){this.curOn=true}.bind(this)).observe("mouseout",function(){this.curOn=false}.bind(this));if(this.options.get("autoResize")){this.autoResize();Event.observe(window,"resize",function(){this.autoResize()}.bind(this))}this.autoresults=this.autoholder.select("ul").first();var b=this.autoresults.select("li");b.each(function(f){this.add({value:f.readAttribute("value"),caption:f.innerHTML})},this);if(!Object.isUndefined(this.options.get("fetchFile"))){new Ajax.Request(this.options.get("fetchFile"),{method:this.options.get("fetchMethod"),parameters:this.options.get("fetchParameters"),onSuccess:function(f){f.responseText.evalJSON(true).each(function(g){this.autoFeed(g)}.bind(this));if(this.options.get("loadFromInput")){this.loadFromInput()}}.bind(this)})}else{if(!Object.isUndefined(this.options.get("feed"))){this.options.get("feed").each(function(f){this.autoFeed(f)}.bind(this))}}if(Object.isUndefined(this.options.get("fetchFile"))&&this.options.get("loadFromInput")){this.loadFromInput()}document.observe("click",function(){this.autoHide()}.bindAsEventListener(this));this.inputElem=this.maininput.firstDescendant();if(this.options.get("inputMessage")){this.inputElem.setValue(this.options.get("inputMessage"));this.inputElem.retrieveData("resizable").setElementWidth();this.messageCleared=false;this.inputElem.addClassName("inputMessage");this.inputElem.observe("focus",function(f){if(!this.messageCleared){this.inputElem.setValue("");this.inputElem.removeClassName("inputMessage");this.messageCleared=true}}.bindAsEventListener(this))}},add:function($super,b){var a=$super(b);this.selectedValues.set(a.getAttribute("id"),b);return a},dispose:function($super,a){this.options.get("onUserRemove")(this.selectedValues.get(a.getAttribute("id")));this.selectedValues.unset(a.getAttribute("id"));return $super(a)},foundInData:function(a){return this.data.find(function(c){if(!c){return false}var b=c.evalJSON(true);return(b&&(b.caption.toLowerCase().gsub(" ","")==a.toLowerCase().gsub(" ","")))})},foundInSelectedValues:function(a){return this.selectedValues.values().find(function(b){return(b&&b.caption&&(b.caption.toLowerCase().gsub(" ","")==a.toLowerCase().gsub(" ","")))})},isSearchInsertable:function(a){return(this.options.get("newValues")&&(this.options.get("allowDuplicates")||(!this.foundInSelectedValues(a)&&!this.foundInData(a))))},insertCurrent:function($super,c){var b=false;var a=this.current.retrieveData("input");a.value.split(/,/).each(function(d){if(d&&d!=""&&this.isSearchInsertable(d)){d=d.strip();a.value=d;if($super()){this.options.get("onUserAdd")({caption:d,value:d,newValue:true});b=true}}}.bindAsEventListener(this));return b},autoShow:function(l){this.autoholder.setStyle({display:"block"});this.autoholder.descendants().each(function(i){i.hide()});if(!l||!l.strip()||(!l.length||l.length<this.loptions.get("autocomplete").minchars)){if(this.autoholder.select(".default").first()){this.autoholder.select(".default").first().setStyle({display:"block"})}this.resultsshown=false}else{this.resultsshown=true;this.autoresults.setStyle({display:"block"}).update("");if(!this.options.get("regexSearch")){var d=new Array();if(l){if(!this.options.get("caseSensitive")){l=l.toLowerCase()}for(var j=0,b=0,f=this.data_searchable.length;b<f;b++){if(this.data_searchable[b].indexOf(l)>=0){var h=this.data[b];if(h!==undefined){d[j++]=h}}}}}else{if(this.options.get("wordMatch")){var g=new RegExp("(^|\\s)"+RegExp.escape(l),(!this.options.get("caseSensitive")?"i":""))}else{var g=new RegExp(RegExp.escape(l),(!this.options.get("caseSensitive")?"i":""))}var d=this.data.filter(function(i){return i?g.test(i.evalJSON(true).caption):false})}if(this.options.get("sortResults")){d=d.sortBy(function(i){return i.evalJSON(true).caption})}var e=0;var a=0;var k=null;if(this.isSearchInsertable(l)&&!this.options.get("hideAddMessage")){e++;a++;k=new Element("li");k.addClassName("add-value-special-element");k.cacheData("result",{caption:l,value:l,newValue:true});k.cacheData("input",this.inputElem);k.observe("click",function(i){i.stop();this.current_input="";this.autoAdd(k)}.bindAsEventListener(this)).observe("mouseover",function(){this.autoFocus(k)}.bindAsEventListener(this)).update("Add <b>"+l+"</b>");this.autoresults.insert(k)}d.each(function(i,o){e++;if(o>=((this.options.get("maxResults")?this.options.get("maxResults"):this.loptions.get("autocomplete").maxresults)-a)){return}var p=this;var n=new Element("li");var m=i.evalJSON(true).caption;n.observe("click",function(q){q.stop();p.current_input="";p.autoAdd(this)}).observe("mouseover",function(){p.autoFocus(this)}).update(this.autoHighlight(m,l));this.autoresults.insert(n);n.cacheData("result",i.evalJSON(true));if(o==0){this.autoFocus(n)}},this);if(a==e){this.autoFocus(k)}}if(e==0){this.autocurrent=false;this.autoHide()}else{if(this.autoresults.firstDescendant()){var c=this.autoresults.firstDescendant().offsetHeight+1;if(e>this.options.get("results")){this.autoresults.setStyle({height:(this.options.get("results")*c)+"px"})}else{this.autoresults.setStyle({height:(e?(e*c):0)+"px"})}}}return this},autoHighlight:function(b,a){return b.entitizeHTML().unescapeHTML().gsub(new RegExp(RegExp.escape(a),"i"),function(c){return"<em>"+c[0]+"</em>"}).gsub(/<(?!\/?em>)/,"&lt;")},autoHide:function(){this.resultsshown=false;this.autoholder.hide();return this},autoFocus:function(a){if(!a){return null}if(this.autocurrent){this.autocurrent.removeClassName("auto-focus")}this.autocurrent=a.addClassName("auto-focus");return this},autoMove:function(a){if(!this.resultsshown){return null}this.autoFocus(this.autocurrent[(a=="up"?"previous":"next")]());this.autoresults.scrollTop=this.autocurrent.positionedOffset()[1]-this.autocurrent.getHeight();return this},autoFeed:function(c){var b=this.options.get("caseSensitive");if(this.data.indexOf(Object.toJSON(c))==-1){this.data.push(Object.toJSON(c));var a=Object.toJSON(c).evalJSON(true).caption.unentitizeHTML();this.data_searchable.push(b?a:a.toLowerCase())}return this},autoAdd:function(c){if(!c||!c.retrieveData("result")){return null}this.current_input="";var b=c.retrieveData("result");if(b.newValue){values=b.caption.split(/,/).each(function(d){if(d&&d!=""&&this.isSearchInsertable(d)){this.autoAddSingle({caption:d,value:d,newValue:true})}}.bindAsEventListener(this))}else{this.autoAddSingle(b)}var a=this.lastinput||this.current.retrieveData("input");this.autoHide();a.retrieveData("resizable").clear().focus();return this},autoAddSingle:function(a){this.add(a);this.options.get("onUserAdd")(a);delete this.data[this.data.indexOf(Object.toJSON(a))]},autoResize:function(){this.autoholder.setStyle({width:this.holder.getWidth()+"px"})},createInput:function($super,b){var c=$super(b);var a=c.retrieveData("input");a.observe("keydown",function(f){this.dosearch=false;this.newvalue=false;switch(f.keyCode){case Event.KEY_UP:f.stop();return this.autoMove("up");case Event.KEY_DOWN:f.stop();return this.autoMove("down");case Event.KEY_RETURN:case Event.KEY_TAB:var d=this.current.retrieveData("input").getValue();if(d.blank()){this.options.get("onEmptyInput")();this.autocurrent=false}f.stop();if(this.autocurrent&&new RegExp(RegExp.escape(d),"i").test(this.autocurrent.retrieveData("result").caption.unentitizeHTML())){this.autoAdd(this.autocurrent)}else{this.autoHide()}this.current_input="";this.autocurrent=false;this.autoenter=true;break;case Event.KEY_ESC:this.autocurrent=false;this.autoHide();break;default:this.dosearch=true}return null}.bind(this));a.observe("keyup",function(d){switch(d.keyCode){case Event.KEY_COMMA:case Event.KEY_RETURN:case Event.KEY_TAB:case Event.KEY_UP:case Event.KEY_DOWN:case Event.KEY_ESC:break;default:this.current_input=this.options.get("encodeEntities")?a.value.strip().entitizeHTML():a.value.strip().escapeHTML();this.update();if(this.searchTimeout){clearTimeout(this.searchTimeout)}this.searchTimeout=setTimeout(function(){if(this.dosearch){this.autocurrent=false;this.autoShow(a.value.escapeHTML())}}.bind(this),this.options.get("autoDelay"))}}.bind(this));a.observe(Prototype.Browser.IE?"keydown":"keypress",function(d){if((d.keyCode==Event.KEY_RETURN)&&this.autoenter){d.stop()}this.autoenter=false}.bind(this));return c},createBox:function($super,c,a){var b=$super(c,a);b.observe("mouseover",function(){this.addClassName("bit-hover")}).observe("mouseout",function(){this.removeClassName("bit-hover")});return b},createAutoholder:function(d){var c=new Element("div",{id:d,"class":"autocomplete"});var a=new Element("ul",{"class":"feed"});if(this.options.get("defaultMessage").length){var b=new Element("div",{"class":"default"}).update(this.options.get("defaultMessage"));c.insert(b)}c.insert(a);this.element.insert({after:c});return c},loadFromInput:function(){if(this.options.get("jsonInputValue")){var a=this.element.value.evalJSON(true);if(this.data.length){a.each(function(b){this.add(b);if(!b.newValue){delete this.data[this.data.indexOf(Object.toJSON(b))]}}.bindAsEventListener(this))}}else{var a=this.element.value.split(this.options.get("separator")).invoke("strip");if(this.data.length){this.data.select(function(b){return a.include(b.evalJSON(true).value)}).each(function(b){b=b.evalJSON(true);this.add({value:b.value,caption:b.caption});delete this.data[this.data.indexOf(Object.toJSON(b))];a=a.without(b.value)},this)}a.each(function(b){if(!b.empty()){this.add({value:b,caption:b})}},this)}}});
