function isEmail(string)
{var email_regex=/.*\@.*\.[a-z]+$/;if(email_regex.test(string))
return true;return false;}
function handleNewRecipient(text,li){MessageRecipients.add(new Recipient(li.id,text.value,isEmail(text.value)));}
var Recipient=function(id,name,isEmail)
{this.id=id
this.display=name
this.isEmail=isEmail}
var MessageRecipients={add:function(r)
{if(this.recipientList==null)
this.recipientList=new Array();var is_new_recipient=true;for(i=0;i<this.recipientList.length;i++)
{if(this.recipientList[i].id==r.id)
is_new_recipient=false;}
if(is_new_recipient)
{this.recipientList[this.recipientList.length]=r;this.render();}
else
{this.clearEntry();}},remove:function(r)
{var newrecipientList=null;if(this.recipientList!=null)
{for(var i=0;i<this.recipientList.length;i++)
{if(r!=this.recipientList[i].id)
{if(newrecipientList==null)
newrecipientList=new Array();newrecipientList[newrecipientList.length]=this.recipientList[i];}}
this.recipientList=newrecipientList;this.render();}},removeLast:function()
{var newrecipientList=null;if(this.recipientList!=null)
{for(var i=0;i<this.recipientList.length-1;i++)
{if(newrecipientList==null)
newrecipientList=new Array();newrecipientList[newrecipientList.length]=this.recipientList[i];}}
this.recipientList=newrecipientList;this.render();},render:function()
{$('message_to_display').innerHTML='';$('message_recipients').value='';var rids=new Array();if(this.recipientList!=null)
this.recipientList.each(function renderRecipient(r){display_block="<span class=\"recipient\">";display_block+="<input type=\"hidden\" name=\"to\" value=\""+r.id+"\"/>";display_block+=r.display;display_block+=" <span class=\"remove\" onclick=\"MessageRecipients.remove('"+r.id+"')\">X</span>";display_block+="</span>"
$('message_to_display').innerHTML+=display_block;rids[rids.length]=r.id;});$("message_recipients").value=rids.join(',');$('message_to').value='';},clearEntry:function()
{$('message_to').value='';}}
var MessagesAutocompleter=Class.create();Object.extend(Object.extend(MessagesAutocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(element,update,url,options){this.baseInitialize(element,update,options);this.options.asynchronous=true;this.options.onComplete=this.onComplete.bind(this);this.options.defaultParams=this.options.parameters||null;this.url=url;},getUpdatedChoices:function(){if(!isEmail(this.getToken()))
{entry=encodeURIComponent(this.options.paramName)+'='+
encodeURIComponent(this.getToken());this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;if(this.options.defaultParams)
this.options.parameters+='&'+this.options.defaultParams;new Ajax.Request(this.url,this.options);}},onComplete:function(request){var sstring=request.responseText;this.updateChoices(sstring);},onKeyPress:function(event){if(this.active)
switch(event.keyCode){case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active=false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if(Prototype.Browser.WebKit)Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();if(Prototype.Browser.WebKit)Event.stop(event);return;}
else
{switch(event.keyCode){case Event.KEY_BACKSPACE:if(this.getToken()==''&&this.element.value==''&&!isEmail(this.getToken()))
MessageRecipients.removeLast();return;case Event.KEY_RETURN:if(isEmail(this.getToken()))
{MessageRecipients.add(new Recipient(this.getToken(),this.getToken(),true));Event.stop(event);}
return;}
if(event.keyCode==Event.KEY_TAB||event.keyCode==Event.KEY_RETURN||(Prototype.Browser.WebKit>0&&event.keyCode==0))return;}
this.changed=true;this.hasFocus=true;if(this.observer)clearTimeout(this.observer);this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);}});CoolSpotters.MessageSelector=Class.create({trigger:null,all_element:null,all_element_id:null,none_element:null,none_element_id:null,options:{selected_callback:null,not_selected_callback:null},initialize:function(trigger,all_element,none_element,options)
{this.trigger=trigger;this.all_element=$(all_element);this.all_element_id=all_element.id;this.none_element=$(none_element);this.none_element_id=none_element.id;this.options=this.options=$H(this.options).update(options||{}).toObject();var elements=$$(this.trigger);if(elements!=null)
{for(var i=0;i<elements.length;i++)
{Event.observe(elements[i],"click",this.selection_made.bindAsEventListener(this));}}
Event.observe(this.all_element,"click",this.select_all.bindAsEventListener(this));Event.observe(this.none_element,"click",this.select_none.bindAsEventListener(this));},select_all:function(e)
{if(e!=null)
e.stop();this.select_checkboxes(true);},select_none:function(e)
{if(e!=null)
e.stop();this.select_checkboxes(false);},select_checkboxes:function(status)
{var elements=$$(this.trigger);if(elements!=null)
{for(var i=0;i<elements.length;i++)
{check_box=elements[i];check_box.checked=status;}}
this.selection_callback();},has_selections:function()
{var elements=$$(this.trigger);if(elements!=null)
{for(var i=0;i<elements.length;i++)
{check_box=elements[i];if(check_box.checked)
return true;}}
return false;},selection_callback:function()
{if(this.has_selections())
{if(this.options.selected_callback!=null)
this.options.selected_callback();}
else
{if(this.options.not_selected_callback!=null)
this.options.not_selected_callback();}},selection_made:function()
{this.selection_callback();},reattach:function()
{this.all_element=$(this.all_element_id);this.none_element=$(this.none_element_id);if(this.all_element!=null)
Event.observe(this.all_element,"click",this.select_all.bindAsEventListener(this));if(this.none_element!=null)
Event.observe(this.none_element,"click",this.select_none.bindAsEventListener(this));var elements=$$(this.trigger);if(elements!=null)
{for(var i=0;i<elements.length;i++)
{Event.observe(elements[i],"click",this.selection_made.bindAsEventListener(this));}}}});CoolSpotters.MessageListAction=Class.create({element:null,element_id:null,selector:null,options:{click_callback:null},initialize:function(element,selector,options)
{this.element=$(element);this.element_id=element.id;this.selector=selector;this.options=$H(this.options).update(options||{}).toObject();Event.observe(this.element,"click",this.handle_click.bindAsEventListener(this));},handle_click:function(e)
{if(e!=null)
e.stop();if(this.selector.has_selections())
{if(this.options.click_callback!=null)
this.options.click_callback();}},reattach:function(selector)
{this.element=$(this.element_id)
this.selector=selector;if(this.element!=null)
Event.observe(this.element,"click",this.handle_click.bindAsEventListener(this));}});Object.extend(Event,{KEY_COMMA:188});var ResizableTextbox=Class.create({initialize:function(element,options){var that=this;this.options=$H({min:5,max:500,step:1});this.options.update(options);this.el=$(element);this.width=this.el.offsetWidth;this.el.observe('keyup',function(){var newsize=that.options.get('step')*$F(this).length;if(newsize<=that.options.get('min'))newsize=that.width;if(!($F(this).length==this.retrieveData('rt-value')||newsize<=that.options.min||newsize>=that.options.max))
this.setStyle({'width':newsize});}).observe('keydown',function(){this.cacheData('rt-value',$F(this).length);});}});var TextboxList=Class.create({initialize:function(element,options){this.options=$H({resizable:{},className:'bit',separator:',',extrainputs:true,startinput:true,hideempty:true,newValues:false,spaceReplace:'',fetchFile:undefined,fetchMethod:'get',results:10,wordMatch:false});this.options.update(options);this.element=$(element).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('ul',{'class':'holder'}).insert(this.maininput);this.element.insert({'before':this.holder});this.holder.observe('click',function(event){event.stop();if(this.maininput!=this.current)this.focus(this.maininput);}.bind(this));this.makeResizable(this.maininput);this.setEvents();},setEvents:function(){document.observe(Prototype.Browser.IE?'keydown':'keypress',function(e){if(!this.current)return;if(this.current.retrieveData('type')=='box'&&e.keyCode==Event.KEY_BACKSPACE)e.stop();}.bind(this));document.observe('keyup',function(e){e.stop();if(!this.current)return;switch(e.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();}}.bind(this)).observe('click',function(){document.fire('blur');}.bindAsEventListener(this));},update:function(){this.element.value=this.bits.values().join(this.options.get('separator'));return this;},add:function(text,html){var id=this.id_base+'-'+this.count++;var el=this.createBox($pick(html,text),{'id':id,'class':this.options.get('className'),'newValue':text.newValue?'true':'false'});(this.current||this.maininput).insert({'before':el});el.observe('click',function(e){e.stop();this.focus(el);}.bind(this));this.bits.set(id,text.value);this.update();if(this.options.get('extrainputs')&&(this.options.get('startinput')||el.previous()))this.addSmallInput(el,'before');return el;},addSmallInput:function(el,where){var input=this.createInput({'class':'smallinput'});el.insert({}[where]=input);input.cacheData('small',true);this.makeResizable(input);if(this.options.get('hideempty'))input.hide();return input;},dispose:function(el){this.bits.unset(el.id);this.update();if(el.previous()&&el.previous().retrieveData('small'))el.previous().remove();if(this.current==el)this.focus(el.next());if(el.retrieveData('type')=='box')el.onBoxDispose(this);el.remove();return this;},focus:function(el,nofocus){if(!this.current)el.fire('focus');else if(this.current==el)return this;this.blur();el.addClassName(this.options.get('className')+'-'+el.retrieveData('type')+'-focus');if(el.retrieveData('small'))el.setStyle({'display':'block'});if(el.retrieveData('type')=='input'){el.onInputFocus(this);if(!nofocus)this.callEvent(el.retrieveData('input'),'focus');}
else el.fire('onBoxFocus');this.current=el;return this;},blur:function(noblur){if(!this.current)return this;if(this.current.retrieveData('type')=='input'){var input=this.current.retrieveData('input');if(!noblur)this.callEvent(input,'blur');input.onInputBlur(this);}
else this.current.fire('onBoxBlur');if(this.current.retrieveData('small')&&!input.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(text,options){return new Element('li',options).addClassName(this.options.get('className')+'-box').update(text.caption).cacheData('type','box');},createInput:function(options){var li=new Element('li',{'class':this.options.get('className')+'-input'});var el=new Element('input',Object.extend(options,{'type':'text','autocomplete':'off'}));el.observe('click',function(e){e.stop();}).observe('focus',function(e){if(!this.isSelfEvent('focus'))this.focus(li,true);}.bind(this)).observe('blur',function(){if(!this.isSelfEvent('blur'))this.blur(true);}.bind(this)).observe('keydown',function(e){this.cacheData('lastvalue',this.value).cacheData('lastcaret',this.getCaretPosition());});var tmp=li.cacheData('type','input').cacheData('input',el).insert(el);return tmp;},callEvent:function(el,type){this.events.set(type,el);el[type]();},isSelfEvent:function(type){return(this.events.get(type))?!!this.events.unset(type):false;},makeResizable:function(li){var el=li.retrieveData('input');el.cacheData('resizable',new ResizableTextbox(el,Object.extend(this.options.get('resizable'),{min:el.offsetWidth,max:(this.element.getWidth()?this.element.getWidth():0)})));return this;},checkInput:function(){var input=this.current.retrieveData('input');return(!input.retrieveData('lastvalue')||(input.getCaretPosition()===0&&input.retrieveData('lastcaret')===0));},move:function(direction){var el=this.current[(direction=='left'?'previous':'next')]();if(el&&(!this.current.retrieveData('input')||((this.checkInput()||direction=='right'))))this.focus(el);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());}});Element.addMethods({getCaretPosition:function(){if(this.createTextRange){var r=document.selection.createRange().duplicate();r.moveEnd('character',this.value.length);if(r.text==='')return this.value.length;return this.value.lastIndexOf(r.text);}else return this.selectionStart;},cacheData:function(element,key,value){if(Object.isUndefined(this[$(element).identify()])||!Object.isHash(this[$(element).identify()]))
this[$(element).identify()]=$H();this[$(element).identify()].set(key,value);return element;},retrieveData:function(element,key){return this[$(element).identify()].get(key);}});function $pick(){for(var B=0,A=arguments.length;B<A;B++){if(!Object.isUndefined(arguments[B])){return arguments[B];}}return null;}
var MessagingList=Class.create(TextboxList,{initialize:function($super,element,autoholder,options,func){$super(element,options);this.loptions=$H({autocomplete:{'opacity':1,'maxresults':10,'minchars':1}});this.id_base=$(element).identify()+"_"+this.options.get("className");this.data=[];this.autoholder=$(autoholder).setOpacity(this.loptions.get('autocomplete').opacity);this.autoholder.observe('mouseover',function(){this.curOn=true;}.bind(this)).observe('mouseout',function(){this.curOn=false;}.bind(this));this.autoresults=this.autoholder.select('ul').first();var children=this.autoresults.select('li');children.each(function(el){this.add({value:el.readAttribute('value'),caption:el.innerHTML});},this);if(!Object.isUndefined(this.options.get('fetchFile'))){new Ajax.Request(this.options.get('fetchFile'),{method:this.options.get('fetchMethod'),onSuccess:function(transport){transport.responseText.evalJSON(true).each(function(t){this.autoFeed(t)}.bind(this));}.bind(this)});}},autoShow:function(search){this.autoholder.setStyle({'display':'block'});this.autoholder.descendants().each(function(e){e.hide()});if(!search||!search.strip()||(!search.length||search.length<this.loptions.get('autocomplete').minchars))
{this.resultsshown=false;}else{this.resultsshown=true;this.autoresults.setStyle({'display':'block'}).update('');if(this.options.get('wordMatch'))
var regexp=new RegExp("(^|\\s)"+search,'i')
else
var regexp=new RegExp(search,'i')
var count=0;this.data.filter(function(str){return str?regexp.test(str.evalJSON(true).caption):false;}).each(function(result,ti){count++;if(ti>=this.loptions.get('autocomplete').maxresults)return;var that=this;var el=new Element('li');el.observe('click',function(e){e.stop();that.autoAdd(this);}).observe('mouseover',function(){that.autoFocus(this);}).update(this.autoHighlight(result.evalJSON(true).caption,search));this.autoresults.insert(el);el.cacheData('result',result.evalJSON(true));if(ti==0)this.autoFocus(el);},this);}
if(count>this.options.get('results'))
this.autoresults.setStyle({'height':(this.options.get('results')*24)+'px'});else
this.autoresults.setStyle({'height':(count?(count*24):0)+'px'});return this;},autoHighlight:function(html,highlight){return html.gsub(new RegExp(highlight,'i'),function(match){return'<em>'+match[0]+'</em>';});},autoHide:function(){this.resultsshown=false;this.autoholder.hide();return this;},autoFocus:function(el){if(!el)return;if(this.autocurrent)this.autocurrent.removeClassName('auto-focus');this.autocurrent=el.addClassName('auto-focus');return this;},autoMove:function(direction){if(!this.resultsshown)return;this.autoFocus(this.autocurrent[(direction=='up'?'previous':'next')]());this.autoresults.scrollTop=this.autocurrent.positionedOffset()[1]-this.autocurrent.getHeight();return this;},autoFeed:function(text){if(this.data.indexOf(Object.toJSON(text))==-1)
this.data.push(Object.toJSON(text));return this;},autoAdd:function(el){if(this.newvalue&&this.options.get("newValues")){this.add({caption:el.value,value:el.value,newValue:true});var input=el;}else if(!el||!el.retrieveData('result')){return;}else{this.add(el.retrieveData('result'));delete this.data[this.data.indexOf(Object.toJSON(el.retrieveData('result')))];var input=this.lastinput||this.current.retrieveData('input');}
this.autoHide();input.clear().focus();return this;},createInput:function($super,options){var li=$super(options);var input=li.retrieveData('input');input.observe('keydown',function(e){this.dosearch=false;this.newvalue=false;switch(e.keyCode){case Event.KEY_UP:e.stop();return this.autoMove('up');case Event.KEY_DOWN:e.stop();return this.autoMove('down');case Event.KEY_COMMA:if(this.options.get('newValues')){new_value_el=this.current.retrieveData('input');new_value_el.value=new_value_el.value.strip().gsub(",","");if(!this.options.get("spaceReplace").blank())new_value_el.gsub(" ",this.options.get("spaceReplace"));if(!new_value_el.value.blank()){e.stop();this.newvalue=true;this.autoAdd(new_value_el);}}
break;case Event.KEY_RETURN:e.stop();if(!this.autocurrent)break;this.autoAdd(this.autocurrent);this.autocurrent=false;this.autoenter=true;break;case Event.KEY_ESC:this.autoHide();if(this.current&&this.current.retrieveData('input'))
this.current.retrieveData('input').clear();break;default:this.dosearch=true;}}.bind(this));input.observe('keyup',function(e){switch(e.keyCode){case Event.KEY_UP:case Event.KEY_DOWN:case Event.KEY_RETURN:case Event.KEY_ESC:break;default:if(this.dosearch)this.autoShow(input.value);}}.bind(this));input.observe(Prototype.Browser.IE?'keydown':'keypress',function(e){if(this.autoenter)e.stop();this.autoenter=false;}.bind(this));return li;},createBox:function($super,text,options){var li=$super(text,options);li.observe('mouseover',function(){this.addClassName('bit-hover');}).observe('mouseout',function(){this.removeClassName('bit-hover')});var a=new Element('a',{'href':'#','class':'closebutton'});a.observe('click',function(e){e.stop();if(!this.current)this.focus(this.maininput);this.dispose(li);}.bind(this));li.insert(a).cacheData('text',Object.toJSON(text));return li;},defaultAdd:function()
{this_class=this;inputs=$$('.maininput');inputs.each(function(e){if(!e.value.blank()){this_class.add({value:e.value,caption:e.value});e.clear();}});}});Element.addMethods({onBoxDispose:function(item,obj){item=item.retrieveData('text').evalJSON(true);if(!item.newValue)
obj.autoFeed(item);},onInputFocus:function(el,obj){obj.autoShow();},onInputBlur:function(el,obj){obj.lastinput=el;if(!obj.curOn){obj.blurhide=obj.autoHide.bind(obj).delay(0.1);obj.defaultAdd();}},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;}});