// with autocomplete modification by nate
if(typeof Effect=="undefined"){
throw ("controls.js requires including script.aculo.us' effects.js library");
}
var Autocompleter={};
Autocompleter.Base=function(){
};
Autocompleter.Base.prototype={baseInitialize:function(_1,_2,_3){
this.element=$(_1);
this.update=$(_2);
this.hasFocus=false;
this.changed=false;
this.active=false;
this.index=0;
this.entryCount=0;
if(this.setOptions){
this.setOptions(_3);
}else{
this.options=_3||{};
}
this.options.paramName=this.options.paramName||this.element.name;
this.options.tokens=this.options.tokens||[];
this.options.frequency=this.options.frequency||0.4;
this.options.minChars=this.options.minChars||1;
this.options.onShow=this.options.onShow||function(_4,_5){
if(!_5.style.position||_5.style.position=="absolute"){
_5.style.position="absolute";
Position.clone(_4,_5,{setHeight:false,offsetTop:_4.offsetHeight});
}
Effect.Appear(_5,{duration:0.15});
};
this.options.onHide=this.options.onHide||function(_6,_7){
new Effect.Fade(_7,{duration:0.15});
};
if(typeof (this.options.tokens)=="string"){
this.options.tokens=new Array(this.options.tokens);
}
this.observer=null;
this.element.setAttribute("autocomplete","off");
Element.hide(this.update);
Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));
Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));
},show:function(){
if(Element.getStyle(this.update,"display")=="none"){
this.options.onShow(this.element,this.update);
}
if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(Element.getStyle(this.update,"position")=="absolute")){
new Insertion.After(this.update,"<iframe id=\""+this.update.id+"_iefix\" "+"style=\"display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);\" "+"src=\"javascript:false;\" frameborder=\"0\" scrolling=\"no\"></iframe>");
this.iefix=$(this.update.id+"_iefix");
}
if(this.iefix){
setTimeout(this.fixIEOverlapping.bind(this),50);
}
},fixIEOverlapping:function(){
Position.clone(this.update,this.iefix,{setTop:(!this.update.style.height)});
this.iefix.style.zIndex=1;
this.update.style.zIndex=2;
Element.show(this.iefix);
},hide:function(){
this.stopIndicator();
if(Element.getStyle(this.update,"display")!="none"){
this.options.onHide(this.element,this.update);
}
if(this.iefix){
Element.hide(this.iefix);
}
},startIndicator:function(){
if(this.options.indicator){
Element.show(this.options.indicator);
}
},stopIndicator:function(){
if(this.options.indicator){
Element.hide(this.options.indicator);
}
},onKeyPress:function(_8){
if(this.active){
switch(_8.keyCode){
case Event.KEY_TAB:
case Event.KEY_RETURN:
this.selectEntry();
Event.stop(_8);
case Event.KEY_ESC:
this.hide();
this.active=false;
Event.stop(_8);
return;
case Event.KEY_LEFT:
case Event.KEY_RIGHT:
return;
case Event.KEY_UP:
this.markPrevious();
this.render();
if(navigator.appVersion.indexOf("AppleWebKit")>0){
Event.stop(_8);
}
return false;
case Event.KEY_DOWN:
this.markNext();
this.render();
if(navigator.appVersion.indexOf("AppleWebKit")>0){
Event.stop(_8);
}
return;
}
}else{
if(_8.keyCode==Event.KEY_TAB||_8.keyCode==Event.KEY_RETURN||(navigator.appVersion.indexOf("AppleWebKit")>0&&_8.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);
},activate:function(){
this.changed=false;
this.hasFocus=true;
this.getUpdatedChoices();
},onHover:function(_9){
var _a=Event.findElement(_9,"LI");
if(this.index!=_a.autocompleteIndex){
this.index=_a.autocompleteIndex;
this.render();
}
Event.stop(_9);
},onClick:function(_b){
var _c=Event.findElement(_b,"LI");
this.index=_c.autocompleteIndex;
this.selectEntry();
this.hide();
},onBlur:function(_d){
setTimeout(this.hide.bind(this),250);
this.hasFocus=false;
this.active=false;
},render:function(){
if(this.entryCount>0){
for(var i=0;i<this.entryCount;i++){
this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");
}
if(this.hasFocus){
this.show();
this.active=true;
}
}else{
this.active=false;
this.hide();
}
},markPrevious:function(){
if(this.index>0){
this.index--;
}else{
this.index=this.entryCount-1;
}
this.moveHighlight("up");
},markNext:function(){
if(this.index<this.entryCount-1){
this.index++;
}else{
this.index=0;
}
this.moveHighlight("down");
},moveHighlight:function(_f){
var _10=this.update.scrollTop;
var _11=Element.getDimensions(this.update).height;
var _12=Position.positionedOffset(this.getEntry(this.index))[1];
var _13=Element.getDimensions(this.getEntry(this.index)).height;
if(((_10+_11)<(_12+_13))||(_12<_10)){
var _14=(_f=="up")?_12:_12-_11+_13;
this.update.scrollTop=_14;
}
},getEntry:function(_15){
return this.update.firstChild.childNodes[_15];
},getCurrentEntry:function(){
return this.getEntry(this.index);
},selectEntry:function(){
this.active=false;
this.updateElement(this.getCurrentEntry());
},updateElement:function(_16){
if(this.options.updateElement){
this.options.updateElement(_16);
return;
}
var _17="";
if(this.options.select){
var _18=document.getElementsByClassName(this.options.select,_16)||[];
if(_18.length>0){
_17=Element.collectTextNodes(_18[0],this.options.select);
}
}else{
_17=Element.collectTextNodesIgnoreClass(_16,"informal");
}
var _19=this.findLastToken();
if(_19!=-1){
var _1a=this.element.value.substr(0,_19+1);
var _1b=this.element.value.substr(_19+1).match(/^\s+/);
if(_1b){
_1a+=_1b[0];
}
this.element.value=_1a+_17;
}else{
this.element.value=_17;
}
this.element.focus();
if(this.options.afterUpdateElement){
this.options.afterUpdateElement(this.element,_16);
}
},updateChoices:function(_1c){
if(!this.changed&&this.hasFocus){
this.update.innerHTML=_1c;
Element.cleanWhitespace(this.update);
Element.cleanWhitespace(this.update.down());
if(this.update.firstChild&&this.update.down().childNodes){
this.entryCount=this.update.down().childNodes.length;
for(var i=0;i<this.entryCount;i++){
var _1e=this.getEntry(i);
_1e.autocompleteIndex=i;
this.addObservers(_1e);
}
}else{
this.entryCount=0;
}
this.stopIndicator();
this.index=0;
if(this.entryCount==1&&this.options.autoSelect){
this.selectEntry();
this.hide();
}else{
this.render();
}
}
},addObservers:function(_1f){
Event.observe(_1f,"mouseover",this.onHover.bindAsEventListener(this));
Event.observe(_1f,"click",this.onClick.bindAsEventListener(this));
},onObserverEvent:function(){
this.changed=false;
if(this.getToken().length>=this.options.minChars){
this.startIndicator();
this.getUpdatedChoices();
}else{
this.active=false;
this.hide();
}
},getToken:function(){
var _20=this.findLastToken();
if(_20!=-1){
var ret=this.element.value.substr(_20+1).replace(/^\s+/,"").replace(/\s+$/,"");
}else{
var ret=this.element.value;
}
return /\n/.test(ret)?"":ret;
},findLastToken:function(){
var _22=-1;
for(var i=0;i<this.options.tokens.length;i++){
var _24=this.element.value.lastIndexOf(this.options.tokens[i]);
if(_24>_22){
_22=_24;
}
}
return _22;
}};
Ajax.Autocompleter=Class.create();
Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(_25,_26,url,_28){
this.baseInitialize(_25,_26,_28);
this.options.asynchronous=true;
this.options.onComplete=this.onComplete.bind(this);
this.options.defaultParams=this.options.parameters||null;
this.url=url;
},getUpdatedChoices:function(){
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(_29){
this.updateChoices(_29.responseText);
}});
Autocompleter.Local=Class.create();
Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(_2a,_2b,_2c,_2d){
this.baseInitialize(_2a,_2b,_2d);
this.options.array=_2c;
},getUpdatedChoices:function(){
this.updateChoices(this.options.selector(this));
},setOptions:function(_2e){
this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(_2f){
var ret=[];
var _31=[];
var _32=_2f.getToken();
var _33=0;
for(var i=0;i<_2f.options.array.length&&ret.length<_2f.options.choices;i++){
var _35=_2f.options.array[i];
var _36=_2f.options.ignoreCase?_35.toLowerCase().indexOf(_32.toLowerCase()):_35.indexOf(_32);
while(_36!=-1){
if(_36==0&&_35.length!=_32.length){
ret.push("<li><strong>"+_35.substr(0,_32.length)+"</strong>"+_35.substr(_32.length)+"</li>");
break;
}else{
if(_32.length>=_2f.options.partialChars&&_2f.options.partialSearch&&_36!=-1){
if(_2f.options.fullSearch||/\s/.test(_35.substr(_36-1,1))){
_31.push("<li>"+_35.substr(0,_36)+"<strong>"+_35.substr(_36,_32.length)+"</strong>"+_35.substr(_36+_32.length)+"</li>");
break;
}
}
}
_36=_2f.options.ignoreCase?_35.toLowerCase().indexOf(_32.toLowerCase(),_36+1):_35.indexOf(_32,_36+1);
}
}
if(_31.length){
ret=ret.concat(_31.slice(0,_2f.options.choices-ret.length));
}
return "<ul>"+ret.join("")+"</ul>";
}},_2e||{});
}});
Field.scrollFreeActivate=function(_37){
setTimeout(function(){
Field.activate(_37);
},1);
};
Ajax.InPlaceEditor=Class.create();
Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";
Ajax.InPlaceEditor.prototype={initialize:function(_38,url,_3a){
this.url=url;
this.element=$(_38);
this.options=Object.extend({paramName:"value",okButton:true,okText:"ok",cancelLink:true,cancelText:"cancel",savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(_3b,_3c){
new Effect.Highlight(_3c,{startcolor:this.options.highlightcolor});
},onFailure:function(_3d){
alert("Error communicating with the server: "+_3d.responseText.stripTags());
},callback:function(_3e){
return Form.serialize(_3e);
},handleLineBreaks:true,loadingText:"Loading...",savingClassName:"inplaceeditor-saving",loadingClassName:"inplaceeditor-loading",formClassName:"inplaceeditor-form",highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{},evalScripts:false},_3a||{});
if(!this.options.formId&&this.element.id){
this.options.formId=this.element.id+"-inplaceeditor";
if($(this.options.formId)){
this.options.formId=null;
}
}
if(this.options.externalControl){
this.options.externalControl=$(this.options.externalControl);
}
this.originalBackground=Element.getStyle(this.element,"background-color");
if(!this.originalBackground){
this.originalBackground="transparent";
}
this.element.title=this.options.clickToEditText;
this.onclickListener=this.enterEditMode.bindAsEventListener(this);
this.mouseoverListener=this.enterHover.bindAsEventListener(this);
this.mouseoutListener=this.leaveHover.bindAsEventListener(this);
Event.observe(this.element,"click",this.onclickListener);
Event.observe(this.element,"mouseover",this.mouseoverListener);
Event.observe(this.element,"mouseout",this.mouseoutListener);
if(this.options.externalControl){
Event.observe(this.options.externalControl,"click",this.onclickListener);
Event.observe(this.options.externalControl,"mouseover",this.mouseoverListener);
Event.observe(this.options.externalControl,"mouseout",this.mouseoutListener);
}
},enterEditMode:function(evt){
if(this.saving){
return;
}
if(this.editing){
return;
}
this.editing=true;
this.onEnterEditMode();
if(this.options.externalControl){
Element.hide(this.options.externalControl);
}
Element.hide(this.element);
this.createForm();
this.element.parentNode.insertBefore(this.form,this.element);
if(!this.options.loadTextURL){
Field.scrollFreeActivate(this.editField);
}
if(evt){
Event.stop(evt);
}
return false;
},createForm:function(){
this.form=document.createElement("form");
this.form.id=this.options.formId;
Element.addClassName(this.form,this.options.formClassName);
this.form.onsubmit=this.onSubmit.bind(this);
this.createEditField();
if(this.options.textarea){
var br=document.createElement("br");
this.form.appendChild(br);
}
if(this.options.okButton){
okButton=document.createElement("input");
okButton.type="submit";
okButton.value=this.options.okText;
okButton.className="editor_ok_button";
this.form.appendChild(okButton);
}
if(this.options.cancelLink){
cancelLink=document.createElement("a");
cancelLink.href="#";
cancelLink.appendChild(document.createTextNode(this.options.cancelText));
cancelLink.onclick=this.onclickCancel.bind(this);
cancelLink.className="editor_cancel";
this.form.appendChild(cancelLink);
}
},hasHTMLLineBreaks:function(_41){
if(!this.options.handleLineBreaks){
return false;
}
return _41.match(/<br/i)||_41.match(/<p>/i);
},convertHTMLLineBreaks:function(_42){
return _42.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");
},createEditField:function(){
var _43;
if(this.options.loadTextURL){
_43=this.options.loadingText;
}else{
_43=this.getText();
}
var obj=this;
if(this.options.rows==1&&!this.hasHTMLLineBreaks(_43)){
this.options.textarea=false;
var _45=document.createElement("input");
_45.obj=this;
_45.type="text";
_45.name=this.options.paramName;
_45.value=_43;
_45.style.backgroundColor=this.options.highlightcolor;
_45.className="editor_field";
var _46=this.options.size||this.options.cols||0;
if(_46!=0){
_45.size=_46;
}
if(this.options.submitOnBlur){
_45.onblur=this.onSubmit.bind(this);
}
this.editField=_45;
}else{
this.options.textarea=true;
var _47=document.createElement("textarea");
_47.obj=this;
_47.name=this.options.paramName;
_47.value=this.convertHTMLLineBreaks(_43);
_47.rows=this.options.rows;
_47.cols=this.options.cols||40;
_47.className="editor_field";
if(this.options.submitOnBlur){
_47.onblur=this.onSubmit.bind(this);
}
this.editField=_47;
}
if(this.options.loadTextURL){
this.loadExternalText();
}
this.form.appendChild(this.editField);
},getText:function(){
return this.element.innerHTML;
},loadExternalText:function(){
Element.addClassName(this.form,this.options.loadingClassName);
this.editField.disabled=true;
new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));
},onLoadedExternalText:function(_48){
Element.removeClassName(this.form,this.options.loadingClassName);
this.editField.disabled=false;
this.editField.value=_48.responseText.stripTags();
Field.scrollFreeActivate(this.editField);
},onclickCancel:function(){
this.onComplete();
this.leaveEditMode();
return false;
},onFailure:function(_49){
this.options.onFailure(_49);
if(this.oldInnerHTML){
this.element.innerHTML=this.oldInnerHTML;
this.oldInnerHTML=null;
}
return false;
},onSubmit:function(){
var _4a=this.form;
var _4b=this.editField.value;
this.onLoading();
if(this.options.evalScripts){
new Ajax.Request(this.url,Object.extend({parameters:this.options.callback(_4a,_4b),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this),asynchronous:true,evalScripts:true},this.options.ajaxOptions));
}else{
new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(_4a,_4b),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));
}
if(arguments.length>1){
Event.stop(arguments[0]);
}
return false;
},onLoading:function(){
this.saving=true;
this.removeForm();
this.leaveHover();
this.showSaving();
},showSaving:function(){
this.oldInnerHTML=this.element.innerHTML;
this.element.innerHTML=this.options.savingText;
Element.addClassName(this.element,this.options.savingClassName);
this.element.style.backgroundColor=this.originalBackground;
Element.show(this.element);
},removeForm:function(){
if(this.form){
if(this.form.parentNode){
Element.remove(this.form);
}
this.form=null;
}
},enterHover:function(){
if(this.saving){
return;
}
this.element.style.backgroundColor=this.options.highlightcolor;
if(this.effect){
this.effect.cancel();
}
Element.addClassName(this.element,this.options.hoverClassName);
},leaveHover:function(){
if(this.options.backgroundColor){
this.element.style.backgroundColor=this.oldBackground;
}
Element.removeClassName(this.element,this.options.hoverClassName);
if(this.saving){
return;
}
this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});
},leaveEditMode:function(){
Element.removeClassName(this.element,this.options.savingClassName);
this.removeForm();
this.leaveHover();
this.element.style.backgroundColor=this.originalBackground;
Element.show(this.element);
if(this.options.externalControl){
Element.show(this.options.externalControl);
}
this.editing=false;
this.saving=false;
this.oldInnerHTML=null;
this.onLeaveEditMode();
},onComplete:function(_4c){
this.leaveEditMode();
this.options.onComplete.bind(this)(_4c,this.element);
},onEnterEditMode:function(){
},onLeaveEditMode:function(){
},dispose:function(){
if(this.oldInnerHTML){
this.element.innerHTML=this.oldInnerHTML;
}
this.leaveEditMode();
Event.stopObserving(this.element,"click",this.onclickListener);
Event.stopObserving(this.element,"mouseover",this.mouseoverListener);
Event.stopObserving(this.element,"mouseout",this.mouseoutListener);
if(this.options.externalControl){
Event.stopObserving(this.options.externalControl,"click",this.onclickListener);
Event.stopObserving(this.options.externalControl,"mouseover",this.mouseoverListener);
Event.stopObserving(this.options.externalControl,"mouseout",this.mouseoutListener);
}
}};
Ajax.InPlaceCollectionEditor=Class.create();
Object.extend(Ajax.InPlaceCollectionEditor.prototype,Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceCollectionEditor.prototype,{createEditField:function(){
if(!this.cached_selectTag){
var _4d=document.createElement("select");
var _4e=this.options.collection||[];
var _4f;
_4e.each(function(e,i){
_4f=document.createElement("option");
_4f.value=(e instanceof Array)?e[0]:e;
if((typeof this.options.value=="undefined")&&((e instanceof Array)?this.element.innerHTML==e[1]:e==_4f.value)){
_4f.selected=true;
}
if(this.options.value==_4f.value){
_4f.selected=true;
}
_4f.appendChild(document.createTextNode((e instanceof Array)?e[1]:e));
_4d.appendChild(_4f);
}.bind(this));
this.cached_selectTag=_4d;
}
this.editField=this.cached_selectTag;
if(this.options.loadTextURL){
this.loadExternalText();
}
this.form.appendChild(this.editField);
this.options.callback=function(_52,_53){
return "value="+encodeURIComponent(_53);
};
}});
Form.Element.DelayedObserver=Class.create();
Form.Element.DelayedObserver.prototype={initialize:function(_54,_55,_56){
this.delay=_55||0.5;
this.element=$(_54);
this.callback=_56;
this.timer=null;
this.lastValue=$F(this.element);
Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this));
},delayedListener:function(_57){
if(this.lastValue==$F(this.element)){
return;
}
if(this.timer){
clearTimeout(this.timer);
}
this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);
this.lastValue=$F(this.element);
},onTimerEvent:function(){
this.timer=null;
this.callback(this.element,$F(this.element));
}};


