type('IntelligentSearchBox',['RealtimeTextBox'],{_highlight:function(elem,token){var idx=elem.toLowerCase().indexOf(token.toLowerCase());if(idx>=0){var before=elem.slice(0,idx);var after=elem.slice(idx+token.length,elem.length);return[before,Html.span("searchSuggestionHighlight",elem.slice(idx,idx+token.length)),after];}},_truncateList:function(list){var first=list.slice(0,1);var last=list.length>1?list.slice(-1):[];list=list.slice(1,-1);var truncated=false;var chars=list.join('');while(chars.length>10){truncated=true;list=list.slice(1);chars=list.join('');}
if(truncated){list=concat(['...'],list);}
return translate(concat(first,list,last),function(val){return escapeHTML(val);});},_truncateTitle:function(title){var max=27;if(title.length>max){return title.slice(0,max/2)+' ... '+
title.slice(-max/2);}else{return title;}},_showSuggestions:function(text,suggList,totalNumber){var self=this;if(!this.suggestionBox){this.totalNumber=new WatchValue(totalNumber);this.suggestionList=Html.ul('suggestionBoxList');var infoBox=Html.div('searchSuggestionHelpBox',$T("Some category suggestions..."));this.suggestionBox=Html.div({style:{position:'absolute',top:pixels(23),left:0},className:'suggestionBox'},infoBox,this.suggestionList,$B(Html.div("searchSuggestionOtherResults"),this.totalNumber,function(number){return number===0?'':number+' '+$T('other results - please write more...');}));this.container.append(this.suggestionBox);}
var tokens=filter(escapeHTML(text).split(' '),function(t){return t!=='';});var tokenRE=new RegExp("("+tokens.join('|')+")",'gi');var counter=0;$B(this.suggestionList,suggList,function(elem){var titleHtml=escapeHTML(self._truncateTitle(elem.title)).replace(tokenRE,'<span class="searchSuggestionHighlight">$1</span>');var index=counter;var title=Html.span('searchSuggestionTitle');title.dom.innerHTML=titleHtml;var pathText=self._truncateList(elem.path).join(' >> ');var path=Html.div('searchSuggestionPath',pathText);var liItem=Html.li({},title,path);liItem.observeEvent('mouseover',function(){if(self.selectorPos!=index){self._clearSelector();self.selectorPos=index;self._setSelector();}});liItem.observeClick(function(){window.location=elem.url;});counter++;return liItem;});this.suggestionList.observeEvent('mouseout',function(){self._clearSelector();self.selectorPos=-1;});this.totalNumber.set(totalNumber);},_hideSuggestions:function(){this.container.remove(this.suggestionBox);this.suggestionBox=null;this.selectorPos=-1;this.suggestions=null;},_retrieveOptions:function(expression){this.querying=true;var self=this;indicoRequest('search.categoryName',{value:expression},function(result,error){self.querying=false;self.timeOfLastQuery=(new Date()).getTime();if(!error){if(result.list.length>0){self.suggestions=result.list;self._showSuggestions(expression,result.list,result.number-result.list.length);}else{self._hideSuggestions();}
currentText=trim(self.get());if(currentText!=expression&&currentText.length>1){self._textTyped()}else if(currentText.length<=1){self._hideSuggestions();}}else{IndicoUtil.errorReport(error);}});},_getTimeSinceLastQuery:function(){var now=new Date();return now.getTime()-this.timeOfLastQuery;},_waitForRequestTime:function(){var self=this;if(!this.queuedRequest){return;}
if(this._getTimeSinceLastQuery()>1000){this._textTyped();this.queuedRequest=false;}else{setTimeout(function(){self._waitForRequestTime();},300);}},_textTyped:function(key){var self=this;var text=trim(this.get());if(text.length>1){if(!this.querying&&this._getTimeSinceLastQuery()>1000){this._retrieveOptions(text);}else if(!this.queuedRequest){this.queuedRequest=true;setTimeout(function(){self._waitForRequestTime();},300);}}else if(this.suggestionBox){this._hideSuggestions();}},_openSelection:function(event){if(this.selectorPos>=0){window.location=this.suggestions[this.selectorPos].url;return false;}
return true;},_moveSelector:function(direction){if(this.suggestionBox){var suggNum=this.suggestionList.length.get();if(this.selectorPos<0){this.selectorPos=direction=='down'?0:suggNum-1;}else{this._clearSelector();this.selectorPos+=direction=='up'?-1:1;if(this.selectorPos>=suggNum){this.selectorPos=-1;}else if(this.selectorPos<0){this.selectorPos=-1;}}}
this._setSelector();},_setSelector:function(){if(this.selectorPos>=0){this.suggestionList.item(this.selectorPos).dom.className='searchSuggestionSelected';}},_clearSelector:function(){if(this.selectorPos>=0){this.suggestionList.item(this.selectorPos).dom.className='';}}},function(args,container,submitBtn){args.autocomplete='off';this.RealtimeTextBox(args);this.selectorPos=-1;this.querying=false;this.container=container;this.timeOfLastQuery=0;var self=this;this.observe(function(key,event){self._textTyped(key);return true;});this.observeOtherKeys(function(text,key,event){if(key==38||key==40){self._moveSelector(key==38?'up':'down');return false;}else if(key==27){self._hideSuggestions();return false;}else if(key==13){return self._openSelection(event);}else{return true;}});$E(document.body).observeClick(function(event){if(self.suggestionBox&&!self.suggestionList.ancestorOf($E(eventTarget(event)))&&$E(eventTarget(event))!=self.input&&$E(eventTarget(event))!=submitBtn)
{self._hideSuggestions();}});});type("TimezoneSelector",["BalloonPopup","RemoteWidget"],{drawContent:function(select){var self=this;var result=this.source.get();this.firstOption=null;this.nothingSelected=true;select.clear();each(result['timezones'],function(value,key){var op=Html.option({value:value},value);if(self.activeTZ==value){self.selectedOption=op;}
if(self.firstOption==null){self.firstOption=op;}
select.append(op);});if(this.selectTZradio.dom.checked&&exists(this.selectedOption)){this.selectedOption.dom.selected=true;this.selectTZradio.dom.value=this.selectedOption.get();this.nothingSelected=false;}},draw:function(){var self=this;this.div.append(Html.div({className:'tzHeader'},$T('Change timezone')));this.form=Html.form({method:"post",action:this.formTarget,style:{margin:0}});this.div.append(this.form);var container=Html.div({classNme:'tzContainer'});this.form.append(container);this.localTZRadio=Html.input('radio',{name:'activeTimezone'},'LOCAL');this.userTZRadio=Html.input('radio',{name:'activeTimezone'},'My');this.selectTZradio=Html.input('radio',{name:'activeTimezone'},'LOCAL');container.append(Html.div({style:{marginBottom:pixels(5)}},this.localTZRadio,$T(" Use the events' local timezone ")));if(this.userTZ){container.append(Html.div({style:{marginBottom:pixels(5)}},this.userTZRadio,$T(" Your saved timezone"),Html.em({},' ('+this.userTZ+')')));}
container.append(Html.div({style:{marginBottom:pixels(5)}},this.selectTZradio,$T(" Specify a timezone")));var select=Html.select({size:12});this.loadingOption=Html.option({style:{color:"#444",fontStyle:'italic'}},$T('Loading list of timezones...'));select.append(this.loadingOption);container.append(select);this.RemoteWidget('timezone.getTimezones',{},false)
this.RemoteWidget.prototype.draw.call(self,select);select.dom.onchange=function(){self.selectTZradio.dom.checked=true;self.selectTZradio.setAttribute('value',this.value);};this.localTZRadio.observeClick(function(){select.dom.value="";select.dom.selectedIndex=-1;self.nothingSelected=true;});this.userTZRadio.observeClick(function(){select.dom.value="";select.dom.selectedIndex=-1;self.nothingSelected=true;});this.selectTZradio.observeClick(function(){if(self.nothingSelected&&self.firstOption){self.firstOption.dom.selected=true;self.selectTZradio.dom.value=self.firstOption.get();self.nothingSelected=false;}});if(this.userTZ){container.append(Html.div({style:{fontStyle:'italic',margin:'10px 0'}},Html.input('checkbox',{name:'saveToProfile'}),$T(' Remember these settings next time I log in')));}
var applyButton=Html.input('submit',{className:'btn'},$T('Apply'));var cancelButton=Html.input('button',{className:'btn'},$T('Cancel'));cancelButton.observeClick(function(){self.close()});container.append(Html.div({style:{textAlign:'center',marginTop:'15px'}},applyButton," ",cancelButton));return this.BalloonPopup.prototype.draw.call(this,this.triggerElement.getAbsolutePosition().x+this.triggerElement.dom.offsetWidth/2,this.triggerElement.getAbsolutePosition().y+this.triggerElement.dom.offsetHeight);},postDraw:function(){if(this.activeTZ=='LOCAL'){this.localTZRadio.set(true);}
else if(this.userTZ&&this.userDisplayTZMode&&this.userTZ==this.activeTZ&&this.userDisplayTZMode=='MyTimezone'){this.userTZRadio.set(true);}
else{this.selectTZradio.set(true);}}},function(triggerElement,activeTZ,activeTZDisplay,userTZ,userDisplayTZMode,formTarget){var self=this;this.triggerElement=triggerElement;this.activeTZ=activeTZ;this.activeTZDisplay=activeTZDisplay;this.userTZ=userTZ;this.userDisplayTZMode=userDisplayTZMode;this.formTarget=formTarget;this.div=Html.div({className:'timezonePopup'});this.BalloonPopup(this.div,triggerElement,function(){return true;});self.open();});var startTag=/^<[!?]?([^\s<>]+)((?:\s+[\w\-\:\"\.\/]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,endTag=/^<\/(\w+)[^>]*>/,attr=/([\w\-\:\"\.\/]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,eMail=/^([a-zA-Z0-9\-_]+.)*[a-zA-Z0-9\-_]+@([a-zA-Z0-9\-_]+.)*[a-zA-Z0-9\-_]+$/;var emptyElements=makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed");var block=makeMap("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,table,tbody,td,tfoot,th,thead,tr,ul");var inline=makeMap("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var");var closeSelf=makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");var fillAttrs=makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected");var escapeElements=makeMap("script,style,object,applet,embed,form");var special=makeMap("");type("HTMLParser",[],{parse:function(){var self=this;var index,chars,match,last=this.html;parseStartTag=function(tag,tagName,rest,unary){tagNameLower=tagName.toLowerCase();if(self.block[tagNameLower]){while(self.stack.last()&&self.inline[self.stack.last()]){parseEndTag("",self.stack.last());}}
if(self.closeSelf[tagNameLower]&&self.stack.last()==tagNameLower){parseEndTag("",tagName);}
unary=!self.escapeElements[tagNameLower]&&(self.empty[tagNameLower]||!!unary);if(!unary)
self.stack.push(tagName);if(self.handler.start){var attrs=[];rest.replace(attr,function(match,name){var value=arguments[2]?arguments[2]:arguments[3]?arguments[3]:arguments[4]?arguments[4]:fillAttrs[name]?name:"";attrs.push({name:name,value:value,escaped:value.replace(/(^|[^\\])"/g,'$1\\\"')});});self.handler.start(tagName,attrs,unary);}};parseEndTag=function(tag,tagName){if(tagName)
tagNameLower=tagName.toLowerCase();if(!tagName)
var pos=0;else
for(var pos=self.stack.length-1;pos>=0;pos--)
if(self.stack[pos].toLowerCase()==tagNameLower)
break;if(pos>=0){for(var i=self.stack.length-1;i>=pos;i--)
if(self.handler.end)
self.handler.end(self.stack[i]);self.stack.length=pos;}};while(this.html){chars=true;if(!this.stack.last()||(!this.special[this.stack.last()]&&!this.escapeElements[this.stack.last()])){if(this.html.indexOf("<!--")==0){index=this.html.indexOf("-->");if(index>=0){if(this.handler.comment)
this.handler.comment(this.html.substring(4,index));this.html=this.html.substring(index+3);chars=false;}}else if(this.html.indexOf("</")==0){match=this.html.match(endTag);if(match){this.html=this.html.substring(match[0].length);match[0].replace(endTag,parseEndTag);chars=false;}}else if(this.html.indexOf("<")==0){if(this.html.indexOf(">")!=-1&&(this.html.indexOf("<",1)==-1||this.html.indexOf("<",1)>this.html.indexOf(">"))){match=this.html.match(startTag);if(match){this.html=this.html.substring(match[0].length);match[0].replace(startTag,parseStartTag);chars=false;}}else{this.html=this.html.substring(1);if(this.handler.chars)
this.handler.chars("&lt;");}}
if(chars){index=this.html.indexOf("<");var text=index<0?this.html:this.html.substring(0,index);this.html=index<0?"":this.html.substring(index);if(this.handler.chars)
this.handler.chars(text);}}else if(!this.escapeElements[this.stack.last()]){this.html=this.html.replace(new RegExp("(.*)<\/"+this.stack.last()+"[^>]*>"),function(all,text){text=text.replace(/<!--(.*?)-->/g,"$1").replace(/<!\[CDATA\[(.*?)]]>/g,"$1");if(this.handler.chars)
this.handler.chars(text);return"";});parseEndTag("",this.stack.last());}else{var index=this.html.toLowerCase().indexOf("</"+this.stack.last()+">");var text=index<0?this.html:this.html.substring(0,index);this.html=index<0?"":this.html.substring(index+this.stack.last().length+3);if(this.handler.escape)
this.handler.escape(text,this.stack.last());this.stack.pop();}
if(this.html==last)
throw"Parse Error: "+this.html;last=this.html;}
parseEndTag();}},function(html,handler,params){this.html=html;this.handler=handler;this.stack=[];this.stack.last=function(){return this[this.length-1];};this.empty=params&&params.empty?params.empty:emptyElements;this.block=params&&params.block?params.block:block;this.inline=params&&params.inline?params.inline:inline;this.closeSelf=params&&params.closeSelf?params.closeSelf:closeSelf;this.fillAttrs=params&&params.fillAttrs?params.fillAttrs:fillAttrs;this.escapeElements=params&&params.escapeElements?params.escapeElements:escapeElements;this.special=params&&params.special?params.special:special;});var propertyWhitelist=makeMap(Indico.Security.allowedCssProperties);type("inlineCSSParser",[],{parse:function(){var result="";var security=0;var errorList=[];this.css=this.css.replace(/url\s*\(\s*[^\s)]+?\s*\)\s*/,' ')
if(!(/^([\-:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$/).test(this.css))
throw"Parse Error: "+this.css;if(!(/^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$/).test(this.css))
throw"Parse Error: "+this.css;parts=this.css.split(/;/g);for(i in parts)
if(parts[i].replace(/\s/g,'')!=""){property=parts[i].split(/:/g)[0].replace(/\s/g,'');values=parts[i].split(/:/g)[1].split(/\s/g);value=""
for(j in values)
value+=" "+values[j].replace(/\s/g,'')
if(this.propertyWhitelist[property.toLowerCase()]&&value)
result+=property+':'+value+';';else{security=1;errorList.push(property)}}
return[result,security,errorList];}},function(css,params){this.css=css;this.propertyWhitelist=params&&params.propertyWhitelist?params.propertyWhitelist:propertyWhitelist;});var defaultTagWhitelist=makeMap(Indico.Security.allowedTags);var defaultAttribWhitelist=makeMap(Indico.Security.allowedAttributes);var defaultAllowedProtocols=makeMap(Indico.Security.allowedProtocols);var urlProperties=makeMap(Indico.Security.urlProperties)
function escapeHarmfulHTML(html,sanitizationLevel,params){sanitizationLevel=sanitizationLevel==undefined?Indico.Security.sanitizationLevel:sanitizationLevel;if(sanitizationLevel==1||sanitizationLevel==2)
{var self=this;var strict=params&&params.strict||false;var results="";var tagWhitelist=params&&params.tagWhitelist?params.tagWhitelist:defaultTagWhitelist;var attribWhitelist=params&&params.attribWhitelist?params.attribWhitelist:defaultAttribWhitelist;var allowedProtocols=params&&params.allowedProtocols?params.allowedProtocols:defaultAllowedProtocols;var urlRegexpStr="^(";for(protocol in allowedProtocols)
urlRegexpStr+="|"+protocol;urlRegexpStr+=")://[^<>.][^<>]*$";var urlRegexp=new RegExp(urlRegexpStr)
function isEmail(value){return eMail.test(value);}
function isUrl(value){return urlRegexp.test(value);}
var security=0;var errorList=[];parser=new HTMLParser(html,{start:function(tag,attrs,unary){if(tagWhitelist[tag.toLowerCase()]){results+="<"+tag;for(var i=0;i<attrs.length;i++)
if(attrs[i].name.toLowerCase()=="style"&&sanitizationLevel==2){try{var cssParser=new inlineCSSParser(attrs[i].escaped,params);var tuple=cssParser.parse();}
catch(error){if(typeof error=="string"&&error.indexOf("Parse Error")!=-1&&!strict)
var tuple=["",1];else
throw error;}
if(tuple[0]!='')
results+=" "+attrs[i].name+'="'+tuple[0]+'"';security=max(security,tuple[1]);errorList=errorList.concat(tuple[2])}
else if(attribWhitelist[attrs[i].name.toLowerCase()]||unary&&attrs[i].name=='/'){if(urlProperties[attrs[i].name.toLowerCase()]){attrs[i].escaped=attrs[i].escaped.replace(/[`\000-\040\177-\240\s]+/g,'');attrs[i].escaped=attrs[i].escaped.replace(/\ufffd/g,"")
if(/^[a-z0-9][-+.a-z0-9]*:/.test(attrs[i].escaped)&&!allowedProtocols[attrs[i].escaped.split(':')[0].toLowerCase()]){security=1;errorList.push(attrs[i].escaped);continue;}}
if(attrs[i].escaped!='')
results+=" "+attrs[i].name+'="'+attrs[i].escaped+'"';}
else{security=max(security,1);errorList.push(attrs[i].name);}
results+=(unary?" /":"")+">";}
else if(isEmail(tag)||isUrl(tag)){results+="<"+tag+">";}
else{security=max(1,security);errorList.push(tag);}},end:function(tag){if(tagWhitelist[tag.toLowerCase()])
results+="</"+tag+">";else if(isEmail(tag)||isUrl(tag))
return;else{security=max(1,security);}},chars:function(text){results+=text;},comment:function(text){},escape:function(text,tag){security=max(2,security);errorList.push(tag);}},params);parser.parse();return[results,security,errorList];}
else
return[html,0,[]];};function HTMLtoXML(html){var results="";var parser=new HTMLParser(html,{start:function(tag,attrs,unary){results+="<"+tag;for(var i=0;i<attrs.length;i++)
results+=" "+attrs[i].name+'="'+attrs[i].escaped+'"';results+=(unary?"/":"")+">";},end:function(tag){results+="</"+tag+">";},chars:function(text){results+=text;},comment:function(text){results+="<!--"+text+"-->";}});parser.parse();return results;};function HTMLtoDOM(html,doc){var one=makeMap("html,head,body,title");var structure={link:"head",base:"head"};if(!doc){if(typeof DOMDocument!="undefined")
doc=new DOMDocument();else if(typeof document!="undefined"&&document.implementation&&document.implementation.createDocument)
doc=document.implementation.createDocument("","",null);else if(typeof ActiveX!="undefined")
doc=new ActiveXObject("Msxml.DOMDocument");}else
doc=doc.ownerDocument||doc.getOwnerDocument&&doc.getOwnerDocument()||doc;var elems=[],documentElement=doc.documentElement||doc.getDocumentElement&&doc.getDocumentElement();if(!documentElement&&doc.createElement)(function(){var html=doc.createElement("html");var head=doc.createElement("head");head.appendChild(doc.createElement("title"));html.appendChild(head);html.appendChild(doc.createElement("body"));doc.appendChild(html);})();if(doc.getElementsByTagName)
for(var i in one)
one[i]=doc.getElementsByTagName(i)[0];var curParentNode=one.body;parser=new HTMLParser(html,{start:function(tagName,attrs,unary){if(one[tagName]){curParentNode=one[tagName];return;}
var elem=doc.createElement(tagName);for(var attr in attrs)
elem.setAttribute(attrs[attr].name,attrs[attr].value);if(structure[tagName]&&typeof one[structure[tagName]]!="boolean")
one[structure[tagName]].appendChild(elem);else if(curParentNode&&curParentNode.appendChild)
curParentNode.appendChild(elem);if(!unary){elems.push(elem);curParentNode=elem;}},end:function(tag){elems.length-=1;curParentNode=elems[elems.length-1];},chars:function(text){curParentNode.appendChild(doc.createTextNode(text));},comment:function(text){}});parser.parse();return doc;};function makeMap(str){var obj={},items=str.split(",");for(var i=0;i<items.length;i++)
obj[items[i]]=true;return obj;};function max(val1,val2){return val1>val2?val1:val2;};
