TAVE.util.HTML=(function(){var c=false;
function d(){TD.pageReadyEvent.subscribe(function(){TL.log("TAVE.util.HTML handling TD.pageReadyEvent...");
var h=YD.get("ContentOutterContainer"),g=YD.getElementsByClassName("tokenField","div",h);
if(g.length){for(var f in g){new TH.Token(g[f])
}}})
}var e=function(f,g){g=g||1;
if(YD.hasClass(f,"row")){return f
}if(g==30||f.tagName.toLowerCase()=="form"){return false
}return e(f.parentNode,g++)
};
var a=function(f){return YD.hasClass(f,"error")
};
var b=function(f,g,i){if(a(f)==g){return
}var h=e(f);
if(g){YD.addClass([f,h],"error");
if(i&&i.length){TL.warn("TH._setError(",f,",",g,") given message, but not implemented.")
}}else{YD.removeClass([f,h],"error");
THF.validate(f.form)
}};
return{Select:{removeOptions:function(f){if(f&&f.options){while(f.length>0){f.remove(0)
}return true
}TL.warn("selectObj is not a select object TAVE.util.HTML.Select.removeOptions called with selectObj: ",f);
return false
},selectedValue:function(f){if(f&&f.options){if(f.selectedIndex>=0){return f.options[f.selectedIndex].value
}return null
}TL.warn("selectObj is not a select object TAVE.util.HTML.Select.selectedValue called with selectObj: ",f);
return false
},findValue:function(g,f){if(g&&g.options&&g.length){for(z=0;
z<g.length;
z++){if(g.options[z].value==f){return z
}}}return null
},selectByValue:function(g,f){index=this.findValue(g,f);
if(YL.isNumber(index)){g.selectedIndex=index
}},addOption:function(h,i,g,f){TL.warn("NIY: addOption")
},removeOptionWithValue:function(g,f){TL.warn("NIY: removeOptionWithValue")
},validate:function(j,g){var f=YD.hasClass(j,"link");
if(!f){THF.touch(j.form);
if(j.disabled||!j.options.length||!(YD.hasClass(j,"required")||j.getAttribute("required"))||!YD.hasClass(j.form,"validate")){return true
}}var i=j.options[j.selectedIndex],h="error",k=true;
if(j.disabled||!i.value.length||i.disabled||!i.innerHTML.length){k=false
}if(f){if(typeof g!="undefined"&&!g){j.selectedIndex=0;
if(k){j.disabled=true;
TL.log("going to follow the select link... passive: ",g,", selectObj.disabled: ",j.disabled);
loc(i.value)
}}return true
}b(j,!k);
return k
}},DateInput:{_loaded:false,focus:function(f,g){f.hasFocus=true;
THI.focus(f);
if(YL.isObject(YAHOO.env.modules.calendar)){THDI.init(f,g);
THDI.showCalendar(f)
}else{TW.onDependenciesLoaded(["calendar"],function(){THDI._loaded=true;
THDI.init(f,g);
THDI.showCalendar(f)
})
}},blur:function(f){f.hasFocus=false;
THDI.hideCalendar(f);
THI.blur(f)
},init:function(n,h){var p="did-init";
if(YD.hasClass(n,p)){return
}YD.addClass(n,p);
var f=n.id+"-cal",j=document.createElement("div");
j.setAttribute("id",f);
j.style.position="absolute";
j.style.zIindex=1032;
n.parentNode.insertBefore(j,n.nextSibling);
TL.log("DateInput.init() creating calendar...");
var g=new YAHOO.widget.Calendar(j,h);
g.selectEvent.subscribe(THDI.calSelect,n,THDI);
if(n.value!=n.tip&&n.value.length>0&&n.getAttribute("format")=="j/n/Y"){var l=0,i=0,k=0,m=/-|\//,o=[];
o=n.value.split(m);
if(o.length==3){l=o[0];
i=o[1];
k=o[2];
if(k.length==2){k="20"+k
}g.select(i+"/"+l+"/"+k);
g.cfg.setProperty("pagedate",i+"/"+k)
}}g.render();
n.cal=g
},jsLoaded:function(f,g){THDI._loaded=true;
if(!f||!f.value){return
}THDI.init(f);
THDI.showCalendar(f)
},mouseOver:function(g,f){f.trackingMouse=true
},mouseOut:function(g,f){if(g.target!=g.currentTarget){return
}f.trackingMouse=false;
if(!f.hasFocus){f.cal.hide()
}else{f.focus()
}},showCalendar:function(f){if(YL.isObject(f.cal)){f.cal.show();
f.trackingMouse=false;
var g=f.id+"-cal";
YE.addListener(g,"mouseover",THDI.mouseOver,f,THDI);
YE.addListener(g,"mouseout",THDI.mouseOut,f,THDI)
}},hideCalendar:function(f){if(YL.isObject(f.cal)&&!f.trackingMouse){f.cal.hide();
var g=f.id+"-cal";
YE.removeListener(g,"mouseover");
YE.removeListener(g,"mouseout")
}},update:function(q){if(!YL.isObject(q.cal)||!YL.isObject(q.cal.oDomContainer)){return
}var h=q.cal,t=q.getAttribute("format"),i=q.value,j=false,n=0,k=0,o=0,m=new Date(),p=/-|\//,s=[],g=false;
if(h.oDomContainer.style.display!="block"){return
}if(t=="Y-m-d"){if(p.test(i)){s=i.split(p)
}else{if(i.length==6||i.length==8){s=/(2?0?\d{2})(\d{2})(\d{2})/.exec(i);
s.shift()
}}if(s.length==3){n=s[0];
k=s[1];
o=s[2];
j=true
}}else{if(t=="j/n/Y"){if(p.test(i)){s=i.split(p)
}else{if(i.length==6||i.length==8){s=/(\d{2})(\d{2})(2?0?\d{2})/.exec(i);
s.shift()
}}if(s.length==3){o=s[0];
k=s[1];
n=s[2];
j=true
}}else{if(p.test(i)){s=i.split(p)
}else{if(i.length==6||i.length==8){s=/(\d{2})(\d{2})(2?0?\d{2})/.exec(i);
s.shift()
}}if(s.length==3){k=s[0];
o=s[1];
n=s[2];
j=true
}}}if(n.length==2&&n!="19"){n="20"+n
}if(g){TL.log("Line(469)  Y="+n+", M="+k+", D="+o)
}if(isNaN(n)||isNaN(k)||isNaN(o)||!parseInt(n)||!parseInt(k)||!parseInt(o)){if(g){TL.log("Line(471)  Marking date invalid due to isNaN")
}j=false
}else{if(n>0&&k>0&&o>0){if(n>(m.getFullYear()+10)){if(g){TL.log("Line(476) Marking date invalid due to year > 10")
}j=false
}else{parsedDate=Date.parse(k+"/"+o+"/"+n);
if(parsedDate<0){if(g){TL.log("Line(482)  Parsed date less than 0, Parsed date:",parsedDate)
}var l=new Date();
l.setTime(parsedDate);
if(l.getFullYear()!=n||(l.getMonth()+1)!=k||l.getDate()!=o){if(g){TL.log("Line(486)  PD:  [Y="+l.getFullYear()+", M="+(l.getMonth()+1)+", D="+l.getDate()+"]")
}j=false
}}else{var l=new Date();
l.setTime(parsedDate);
if(l.getFullYear()!=n||(l.getMonth()+1)!=k||l.getDate()!=o){if(g){TL.log("Line(494)  PD:  [Y="+l.getFullYear()+", M="+(l.getMonth()+1)+", D="+l.getDate()+"]")
}j=false
}}}}}if(i!=""){if(j){b(q,false);
h.select(k+"/"+o+"/"+n);
var r=h.getSelectedDates();
if(r.length>0){var f=r[0];
h.cfg.setProperty("pagedate",(f.getMonth()+1)+"/"+f.getFullYear());
h.render()
}}else{b(q,true,"Invalid date")
}}if(h.oDomContainer.style.display=="none"){h.show()
}},calSelect:function(k,i,m){var f=i[0],g=f[0],j=g[0]+"",h=g[1]+"",l=g[2]+"";
var n="",o=m.getAttribute("format");
if(o=="Y-m-d"){n=j+"-"+h+"-"+l
}else{if(o=="j/n/Y"){n=l+"/"+h+"/"+j
}else{n=h+"/"+l+"/"+j
}}if(!YL.isObject(m.cal)){return
}m.cal.hide();
m.value=n;
m.onchange();
m.trackingMouse=false;
if(n.length&&YD.hasClass(m,"tip")){YD.removeClass(m,"tip")
}},getDate:function(f){f=YD.get(f);
var g=f.value;
if(!g.length||!f.getAttribute("format")){return
}var i=f.getAttribute("format");
if(i=="j/n/Y"){var h=g.split("/");
return h[1]+"/"+h[0]+"/"+h[2]
}else{if(i=="Y-m-d"){var h=g.split("-");
return h[1]+"/"+h[2]+"/"+h[0]
}else{return g
}}}},Input:{focus:function(f){var g=f.getAttribute("tip");
g=g?g:f.title;
if(YD.hasClass(f,"tip")){f.value=""
}else{if(YL.isNumber(f.maxLength)){g=g.substr(0,f.maxLength)
}if(f.value==g){TL.warn("HTML.Input.focus() found value equal to the tip but without the tip class.");
f.value=""
}}YD.removeClass(f,"tip")
},blur:function(f){var g=f.getAttribute("tip");
g=g?g:f.title;
if(YL.isNumber(f.maxLength)&&f.maxLength>0){g=g.substr(0,f.maxLength)
}if(!f.value.length||f.value==g){YD.addClass(f,"tip");
f.value=g;
b(f,false)
}},validate:function(l,f){THF.touch(l.form);
f=f||"change";
var r=f=="change",q=l.getAttribute("uit");
if(q=="date"){THDI.update(l);
return true
}else{if(l.value.length&&(q=="number"||q=="money")){var m=r?/[^0-9\.\-]/gi:/[^0-9\,\.\-]/gi,g=l.value.replace(m,"");
if(r||l.value!=g){l.value=r?TW.floatToNumberString(parseFloat(g),2):g
}}}if(l.disabled||!YD.hasClass(l.form,"validate")){return true
}if(l.type=="radio"){TL.warn("THI.validate() can't validate ",l," as radio inputs are not yet supported.");
return true
}else{if(l.type=="checkbox"){return true
}}var p=true,k="error",o=l.value,i=o.length,n=l.getAttribute("tip"),j=parseInt(l.maxLength),h=parseInt(l.getAttribute("minLength"));
if(n&&n.length>0){if(j>0&&n.length>j){n=n.substr(0,j)
}if(n==o){o=""
}}if(!i&&(YD.hasClass(l,"required")||l.getAttribute("required"))){TL.log("THI.validate(",l,") failed on length: ",i," when required");
p=false
}if(j>0&&i>j){TL.log("THI.validate(",l,") failed on length: ",i," > maxLength: ",j);
p=false
}if(h>0&&i<h){TL.log("THI.validate(",l,") failed on length: ",i," < minLength: ",h);
p=false
}b(l,!p);
return p
}},TextArea:{validate:function(l){THF.touch(l.form);
if(l.disabled||!YD.hasClass(l.form,"validate")){return true
}var m=true,g="error",k=l.value,f=k.length,j=l.getAttribute("tip"),i=parseInt(l.getAttribute("maxLength")),h=parseInt(l.getAttribute("minLength"));
if(j&&j.length>0){if(i>0&&j.length>i){j=j.substr(0,i)
}if(j==k){k=""
}}if(!f&&(YD.hasClass(l,"required")||l.getAttribute("required"))){TL.log("THT.validate(",l,") failed on length: ",f," when required.");
m=false
}if(i>0&&f>i){TL.log("THT.validate(",l,") failed on length: ",f," > maxLength: ",i);
m=false
}if(h>0&&f<h){TL.log("THT.validate(",l,") failed on length: ",f," < minLength: ",h);
m=false
}b(l,!m);
return m
},constrainLength:function(g,f){var h=YE.getCharCode(YE.getEvent());
return(h<=46&&h!=32)||g.value.length<f
}},Form:{validate:function(h){var j=YD.getElementsByClassName("field",null,h),l=true;
YD.addClass(h,"validate");
YD.removeClass(j,"error");
for(var g=0;
g<j.length;
g++){var k=j[g],f=k.tagName.toLowerCase();
if(YD.hasClass(k,"nonValidating")){continue
}if(f=="input"){TL.log("THF.validate() calling THI.validate() on field: ",k);
l=!!THI.validate(k)&&l
}else{if(f=="textarea"){l=!!THT.validate(k)&&l
}else{if(f=="select"){l=!!THS.validate(k)&&l
}}}}if(YD.hasClass(k,"uit")){}THF.disable(h,!l);
return l
},disable:function(f,l){var j=typeof l=="undefined"||l?true:false;
if(j==YD.hasClass(f,"error")){return
}var h=YD.getElementsByClassName("field",null,f),k=YD.getElementsByClassName("yui-submit-button",null,f);
for(var m=0;
m<h.length;
m++){var n=h[m],o=n.tagName.toLowerCase();
if(o=="input"&&n.type=="submit"){n.disable=j;
continue
}}for(var m=0;
m<k.length;
m++){var g=k[m];
if(j){YD.addClass(g,"yui-button-disabled");
YD.addClass(g,"yui-submit-button-disabled");
TL.log("THF.disable(",l,") disabled. doDisable: ",j,", btn: ",g)
}else{YD.removeClass(g,"yui-button-disabled");
YD.removeClass(g,"yui-submit-button-disabled");
TL.log("THF.disable(",l,") re-enabled. doDisable: ",j,", btn: ",g)
}}if(j){YD.addClass(f,"error")
}else{YD.removeClass(f,"error")
}},enable:function(f){THF.disable(f,false)
},touch:function(k){if(!THF.touched(k)){var j=YD.getElementsByClassName("yui-submit-button","span",k);
for(var g in j){var f=j[g];
if(YL.hasOwnProperty(j,g)&&YD.hasClass(f,"save")&&YD.hasClass(f,"yui-button-disabled")){YD.removeClass(f,"yui-button-disabled");
var h=f.getElementsByTagName("button");
if(h.length){h[0].disabled=false
}}}}YD.addClass(k,"touched")
},untouch:function(f){YD.removeClass(f,"touched")
},touched:function(f){return YD.hasClass(f,"touched")
}},Button:{setLabel:function(g,f){if(g&&g.type){g.innerHTML=f;
return
}TL.warn("button is not a button object TAVE.util.HTML.Button.setLabel called with button: ",g);
return false
},disable:function(f){YD.addClass(f,"yui-button-disabled");
YD.addClass(f,"yui-submit-button-disabled");
f.disabled=true
},enable:function(f){YD.removeClass(f,"yui-button-disabled");
YD.removeClass(f,"yui-submit-button-disabled");
f.disabled=false
}},init:function(){if(!c&&TD){d()
}}}
})();
var TH=TAVE.util.HTML,THS=TH.Select,THI=TH.Input,THDI=TH.DateInput,THT=TH.TextArea,THF=TH.Form,THB=TH.Button,THU=TH.Util;
(function(){TH.Token=function(_field){this.createEvent("focus");
this.createEvent("blur");
this.createEvent("tokenAttach");
this.createEvent("tokenDetach");
this.createEvent("tokenChanged");
this.createEvent("tokenCreated");
this.createEvent("tokensReordered");
var _idPrefix=_field.id+"Token",_input=YD.get(_idPrefix+"Input"),_dropEl=YD.get(_idPrefix+"Drop"),_optionsEl=YD.get(_idPrefix+"Options"),_initialTipEl=YD.get(_idPrefix+"IT"),_createTipEl=YD.get(_idPrefix+"CT"),_targetID="",_inputs=[YD.get(_field.name+"TokenInput")],_onlyExisting=_field.getAttribute("onlyExisting")==1,_defaultOptions=YD.get(_field.getAttribute("defaultOptions"))||false,_tokens=[],_selectedOption=false,_selectedOptionIndex=false,_searchQuery="",_searchReady=false,_searchResults=[],_searchCache=[],_lastSearch="",_options=[],_searchProps=["name"],_renderer=TH.Token.Render.NameProp,_actions=[],_editor=false,_KEY=YAHOO.util.KeyListener.KEY,_keyListener=false,_TOO_MANY_RESULTS="TOO_MANY_RESULTS";
if(_field.getAttribute("renderer")&&/^[\w\.]+$/.test(_field.getAttribute("renderer"))){eval("_renderer = "+_field.getAttribute("renderer"))
}if(_onlyExisting){TL.warn("TH.Token.init(): onlyExisting set but not implemented.")
}if(_field.getAttribute("tip")){_tipEl.innerHTML=_field.getAttribute("tip")
}_options=YJ.parse(_field.getAttribute("options"));
if(!_options[0]||!_options[0].id){var _tmp=[];
for(var key in _options){_tmp.push({id:key,name:_options[key]})
}_options=_tmp
}var _update=function(){if(!_searchReady){TL.warn("TH.Token._update() called before search was ready");
return
}_searchOptions();
TL.log("TH.Token._update() using results: ",_searchResults);
if(_searchResults==_TOO_MANY_RESULTS){showInitialTip()
}else{if(_searchResults.length>=1){_updateOptions()
}else{_showCreateTip()
}}};
var _lazyload=function(){if(_searchReady!==false){return
}_searchReady=0;
if(_defaultOptions){TL.warn("TH.Token.init(): defaultOptions set but not implemented.");
return false
}if(_field.getAttribute("searchProps")){_searchProps=_field.getAttribute("searchProps").split(",")
}YE.on(_optionsEl,"click",_optionClicked,this,true);
_targetID=_field.getAttribute("target")||false;
_actions={attach:_field.getAttribute("onattach")||false,detach:_field.getAttribute("ondetach")||false,create:_field.getAttribute("oncreate")||false};
if(!_targetID||!_actions.attach||!_actions.attach||!_actions.create){TL.error("TH.Token.",_idPrefix," missing a required action: ",_actions,", or target: ",_targetID)
}_searchReady=true;
TL.log("TH.Token._lazyload() completed.")
};
var _searchOptions=function(){if(_checkSearchResultCache()){return
}if(_searchQuery==_input.value.toLowerCase()){return
}_searchQuery=_input.value.toLowerCase();
var count=0;
_searchResults=[];
for(var optionIndex in _options){var score=0,option=_options[optionIndex];
if(option.attached){continue
}for(var searchIndex in _searchProps){var prop=_searchProps[searchIndex];
var matchIndex=_options[optionIndex][prop]?_options[optionIndex][prop].toLowerCase().indexOf(_searchQuery):-1;
score+=1000-matchIndex
}if(score<(_searchProps.length*1001)){option._s=score;
_searchResults.push(option)
}if(_searchResults.length>100){_searchResults=_TOO_MANY_RESULTS;
_cacheSearchResults();
return
}}if(_searchResults.length){_searchResults.sort(function(a,b){return a._s>b._s
});
_selectOption(_searchResults[0])
}_cacheSearchResults()
};
var _checkSearchResultCache=function(){};
var _cacheSearchResults=function(){};
var _detachToken=function(token){TL.log("TH.Token._detachToken(",token,") called.");
if(!_searchReady){if(_searchReady===false){_lazyload()
}else{setTimeout(_detachToken,200);
return
}}var id=token.getAttribute("option");
_options[_optionIndexByID(id)].attached=false;
token.display="none";
token.parentNode.removeChild(token);
delete token;
_doAction("detach",id)
};
var _showInitialTip=function(){YD.setStyle([_optionsEl,_createTipEl],"display","none");
_initialTipEl.style.display="block";
_dropEl.style.display="block";
_selectedOption=false;
_selectedOptionIndex=false;
_searchResults=[]
};
var _showCreateTip=function(){YD.setStyle([_optionsEl,_initialTipEl],"display","none");
_createTipEl.style.display="block";
_dropEl.style.display="block";
_selectedOption=false;
_selectedOptionIndex=false;
_searchResults=[]
};
var _showOptions=function(){YD.setStyle([_initialTipEl,_createTipEl],"display","none");
_optionsEl.style.display="block";
_dropEl.style.display="block"
};
var _hideDropdown=function(){YD.setStyle([_dropEl,_initialTipEl,_createTipEl,_optionsEl],"display","none");
_selectedOption=false;
_selectedOptionIndex=false;
_searchResults=[]
};
var _focus=function(e){_keyListener.enable();
_input.focus();
YD.addClass(_field,"focus");
_showInitialTip();
if(!_searchReady){setTimeout(_lazyload,100)
}};
var _blur=function(e){_keyListener.disable();
YD.removeClass(_field,"focus");
setTimeout(function(){if(!YD.hasClass(_field,"focus")){_hideDropdown();
_clearInput()
}},250)
};
var _edit=function(id){if(!_editor){TL.info("TH.Token._edit() called without an editor.");
return
}TL.log("TH.Token._edit() called with id: ",id);
var editor=new TA.LiveEditor(_editor,id,_field);
editor.subscribe("update",function(values){_updateOptionValues(id,values)
})
};
var _updateOptionValues=function(id,values){TL.log("TH.Token._updateOptionValues("+id+") with values: ",values);
if(!values){return
}var option=_optionByID(id),idx=_optionIndexByID(id),touched=false;
TL.log("TH.Token._updateOptionValues("+id+") option: ",option);
for(var key in values){var prop=key;
if(typeof option[prop]=="undefined"){prop=prop.toLowerCase();
if(typeof option[prop]=="undefined"){}}if(typeof option[prop]!="undefined"){_options[idx][prop]=values[key];
touched=true
}}if(touched){var token=YS.query("a[option="+id+"]",_field,true);
token.innerHTML=_render(_options[idx])
}};
var _handleClick=function(e){TL.log("TH.Token._handleClick() called with target: ",YE.getTarget(e));
var target=YE.getTarget(e),token=target;
for(var i=5;
i>=0;
i--){if(YD.hasClass(token,"token")){break
}token=token.parentNode;
if(!i){token=false
}}if(token&&!YD.hasClass(token,"dettach")){_edit(token.getAttribute("option"))
}else{_focus(e)
}};
var _handleDropClick=function(e){TL.log("TH.Token._handleDropClick() called with e: ",e,", target: ",YE.getTarget(e),", relatedTarget: ",YE.getRelatedTarget(e))
};
var _selectOption=function(option){for(var k in _options){if(_options[k].id==option.id){TL.log("TH.Token._selectOption() with option: ",option);
_selectedOptionIndex=k;
_selectedOption=option;
break
}}_updateOptions()
};
var _selectPreviousOption=function(){if(!_searchResults||!_searchResults.length){return
}var prev=_selectedOption;
if(_selectedOptionIndex===false){_selectOption(_searchResults[0])
}else{for(var k in _searchResults){k=parseInt(k);
if(_searchResults[k].id==prev.id){if(_searchResults[k-1]){_selectOption(_searchResults[k-1]);
break
}else{break
}}}}_updateOptions()
};
var _selectNextOption=function(){if(!_searchResults||!_searchResults.length){return
}var prev=_selectedOption;
if(_selectedOptionIndex===false){_selectOption(_searchResults[0])
}else{TI.searchResults=_searchResults;
for(var k in _searchResults){k=parseInt(k);
if(_searchResults[k].id==prev.id){if(_searchResults[k+1]){_selectOption(_searchResults[k+1]);
break
}else{break
}}}}_updateOptions()
};
var _attachSelectedOption=function(){TL.log("TH.Token._attachSelectedOption() called.");
if(_selectedOption){_addToken(_selectedOption);
_doAction("attach",_selectedOption.id)
}else{var value=_input.value;
_doAction("create",value,{success:function(output){_selectedOption=output.token;
_selectedOptionIndex=_options.length;
_options.push(output.token);
_searchResults.push(output.token);
_addToken(_selectedOption);
_edit(_selectedOption.id)
}})
}_clearInput();
_input.focus();
TL.log("TH.Token._attachSelectedOption() completed.")
};
var _doAction=function(action,id,callback){TL.log("TH.Token._doAction(",action,",",id,", fn): running remote action: ",_actions[action],", with id: ",_targetID,":",id,".  _actions: ",_actions);
TW.remoteAction(_actions[action],_targetID+":"+id,callback||{})
};
var _addToken=function(option){if(!option||!option.id){TL.warn("TH.Token._addToken() returning false with option: ",option);
return false
}TL.log("TH.Token._addToken() rendering node...");
var node=document.createElement("a");
node.className="token";
node.setAttribute("option",option.id);
node.innerHTML=_render(option);
node.onclick=function(e){if(YD.hasClass(this,"dettach")){_detachToken(node)
}};
_input.parentNode.insertBefore(node,_input);
_options[_optionIndex(option)].attached=true
};
var _render=function(option){return"<span>"+_renderer.token(option,false)+'<span class=x option="'+option.id+'" onmouseover="this.parentNode.parentNode.className=\'dettach token\'" onmouseout="this.parentNode.parentNode.className=\'token\'">&times;</span></span>'
};
var _optionClicked=function(e){TL.log("TH.Token._optionClicked() with e: ",e);
var target=YE.getTarget(e);
for(var n=0;
n<10&&!target.getAttribute("option");
n++){target=target.parentNode
}var optionId=target.getAttribute("option"),option=_optionByID(optionId);
TL.log("TH.Token._optionClicked() found target: ",target,", for option: ",option);
if(!option){TL.warn("TH.Token._optionClicked(",e,") couldn't find option for target: ",target,", optionId: ",optionId);
return
}_selectOption(option);
_attachSelectedOption()
};
var _optionByID=function(id){if(!_options||!_options.length){return false
}for(var k in _options){if(_options[k].id==id){return _options[k]
}}return false
};
var _optionIndex=function(option){if(!_options||!_options.length||!option){TL.log("TH.Token._optionIndex() returning false with option: ",option,", _options: ",_options);
return false
}var id=option.id||option;
for(var k in _options){if(_options[k].id==id){return k
}}TL.log("TH.Token._optionIndex() returning false with option: ",option,", _options: ",_options);
return false
};
var _optionIndexByID=function(id){if(!_options||!_options.length){return false
}for(var k in _options){if(_options[k].id==id){return k
}}return false
};
var _updateOptions=function(option){var html="";
_searchQuery=_input.value.toLowerCase();
for(var resultIndex in _searchResults){var option=_searchResults[resultIndex],selectedCN=_selectedOption&&option.id==_selectedOption.id?" selected":"";
html+='<div class="option'+selectedCN+'" option="'+option.id+'">'+_renderer.option(option,_searchQuery)+"</div>"
}_optionsEl.innerHTML=html;
_showOptions()
};
var _clearInput=function(){TL.log("TH.Token._clearInput() called.");
_hideDropdown();
_input.value="";
_optionsEl.innerHTML=""
};
var _handleFieldKeyDown=function(e,a){TL.log("TH.Token._handleFieldKeyDown() caught and blocked event: ",e,", a: ",a," and charCode: ",YE.getCharCode(a));
YE.stopEvent(e);
return false
};
var _handleInputKeyDown=function(e,a){TL.log("TH.Token._handleInputKeyDown() with e: ",e,", a: ",a," and charCode: ",YE.getCharCode(e));
var charCode=YE.getCharCode(e),stopEvent=0;
if(_input.value.length){if(charCode==_KEY.DOWN){_selectNextOption();
stopEvent=1
}else{if(charCode==_KEY.UP){_selectPreviousOption();
stopEvent=1
}else{if(charCode==_KEY.ENTER){_attachSelectedOption();
stopEvent=1
}else{if(charCode==_KEY.BACK_SPACE){return
}}}}if(stopEvent){YE.stopEvent(e);
return false
}}if(charCode==_KEY.ENTER||(a&&a[0]==13)){TL.log("TH.Token._handleInputKeyDown() caught and blocked _KEY.ENTER event.");
stopEvent=1
}else{if(charCode==_KEY.ESC){TL.warn("TH.Token._handleInputKeyDown() caught _KEY.ESC but did not handle it.");
stopEvent=1
}else{if(charCode==_KEY.BACK_SPACE){TL.warn("TH.Token._handleInputKeyDown() caught _KEY.BACK_SPACE but did not handle it.");
stopEvent=1
}}}if(stopEvent){YE.stopEvent(e);
return false
}};
var _handleInputKeyUp=function(e,a){_input.style.width=(2+_input.value.length)+"ex";
if(_input.value.length){_update()
}else{_showInitialTip()
}};
var _addExistingTokens=function(ids){for(var k in ids){_addToken(_optionByID(ids[k]))
}};
if(_field.getAttribute("value")&&_field.getAttribute("value").length){_addExistingTokens(_field.getAttribute("value").split(":"))
}delete _addExistingTokens;
if(_field.getAttribute("editor")){_editor=_field.getAttribute("editor");
YD.addClass(_field,"editableTokens")
}_keyListener=new YAHOO.util.KeyListener(_field,{keys:[_KEY.LEFT,_KEY.UP,_KEY.RIGHT,_KEY.DOWN,_KEY.ENTER,_KEY.ESC,_KEY.BACK_SPACE]},{fn:_handleFieldKeyDown});
YE.on(_field,"click",_handleClick,this,true);
YE.on(_dropEl,"click",_handleDropClick,this,true);
YE.on(_input,"focus",_focus,this,true);
YE.on(_input,"blur",_blur,this,true);
YE.on(_input,"keyup",_handleInputKeyUp,this,true);
YE.on(_input,"keydown",_handleInputKeyDown,this,true);
TD.pageDidShutdownEvent.subscribe(function(){this.unsubscribeAll();
YE.purgeElement(_input);
_input=null;
YE.purgeElement(_dropEl);
_dropEl=null;
YE.purgeElement(_optionsEl);
_optionsEl=null;
YE.purgeElement(_initialTipEl);
_initialTipEl=null;
YE.purgeElement(_createTipEl);
_createTipEl=null;
YE.purgeElement(_field);
_field=null;
delete this
},this,true)
};
YAHOO.extend(TH.Token,YAHOO.util.EventProvider);
TH.Token.boldMatches=function(str,q){var html="",parts=str.toLowerCase().split(q.toLowerCase()),qLength=q.length,i=0;
for(var k in parts){i+=k.length;
html+=parts[k];
if(k<parts.length-1){html+="<b>"+q+"</b>"
}}return html
};
TH.Token.Render={NameProp:{option:function(row,q){return row.name?["<div>",TH.Token.boldMatches(row.name,q),"</div>"].join(""):false
},token:function(row,q){return row.name?["<span class=name>",row.name,"</span>"].join(""):false
}},Company:{option:function(row,q){var html="<div>"+TH.Token.boldMatches(row.name,q)+"</div>";
if(row.addr){html+="<div class=null>"+TH.Token.boldMatches(row.addr,q)+"</div>"
}return html
},token:function(row,q){var html="<span class=name>"+row.name+"</span>";
return html
}}}
})();
TH.init();
YAHOO.register("HTML",TAVE.util.HTML,{version:"1",build:"1"});