
Element.addMethods({replaceClassName:function(element,className,replacement){if(!(element=$(element))){return;}
return element.removeClassName(className).addClassName(replacement);},scrollToElement:function(element){Todoyu.Ui.scrollToElement(element);return element;}});Ajax.Response.addMethods({getTodoyuHeader:function(name){var header=this.getHeader('Todoyu-'+name);return header===null?header:header.isJSON()?header.evalJSON():header;},hasTodoyuHeader:function(name){return this.getTodoyuHeader(name)!==null;},hasTodoyuError:function(){return this.getTodoyuHeader('error')==1;},hasNoAccess:function(){return this.getTodoyuHeader('noAccess')==1;},hasPhpError:function(){return this.getPhpError()!==null;},getPhpError:function(){return this.getTodoyuHeader('Php-Error');}});Object.extend(Event,{wheel:function(event){var delta=0;if(!event){event=window.event;}
if(event.wheelDelta){delta=event.wheelDelta/120;if(window.opera){delta=-delta;}}else if(event.detail){delta=-event.detail/3;}
return Math.round(delta);}});
var Todoyu={name:'Todoyu',copyright:'snowflake productions GmbH, Zurich/Switzerland',logLevel:0,Ext:{},init:function(){this.AjaxResponders.init();this.Ui.fixAnchorPosition();this.Ui.observeBody();this.initExtensions();},initExtensions:function(){$H(this.Ext).each(function(pair){if(typeof(pair.value.init)==='function'){pair.value.init();}});},getUrl:function(ext,controller){var url='index.php?ext='+ext;if(controller){url=url+'&controller='+controller;}
return url;},goTo:function(ext,controller,params,hash){var url=this.getUrl(ext,controller);if(typeof params==='object'){url+='&'+Object.toQueryString(params);}
if(Object.isString(hash)){this.goToHashURL(url,hash);}else{location.href=url;}},goToHashURL:function(url,hash){var searchPart=url.substr(url.indexOf('?'));if(location.search===searchPart&&Todoyu.exists(hash)){if($(hash).getHeight()>0){$(hash).scrollToElement();return;}}
location.href=url+'#'+hash;},send:function(url,options){options=Todoyu.Ui._getDefaultOptions(options);return new Ajax.Request(url,options);},exists:function(element){if(typeof element==='object'){element=element.id;}
return document.getElementById(element)!==null;},getArea:function(){return document.body.id.split('-').last();},notifyError:function(message,countdown){Todoyu.Notification.notifyError(message,countdown);},notifyInfo:function(message,countdown){Todoyu.Notification.notifyInfo(message,countdown);},notifySuccess:function(message,countdown){Todoyu.Notification.notifySuccess(message,countdown);},callUserFunction:function(functionName){var args=$A(arguments).slice(1);var func=this.getFunctionFromString(functionName);var context=this.getFunctionFromString(functionName.split('.').slice(0,-1).join('.'));return func.apply(context,args);},callIfExists:function(functionReference,context){var args=$A(arguments).slice(2);if(typeof functionReference==='function'){functionReference.apply(context,args);}else{}},getFunctionFromString:function(functionName,bind){var namespaces=functionName.split(".");var func=namespaces.pop();var context=window;for(var i=0;i<namespaces.length;i++){context=context[namespaces[i]];if(context===undefined){alert("Function: "+functionName+" not found!");}}
var funcRef=context[func];if(bind){funcRef=funcRef.bind(context);}
return funcRef;},log:function(element,level,title){if(level===undefined||(Object.isNumber(level)&&level>=this.logLevel)){if(window.console!==undefined){if(title!==undefined){window.console.log('Log: '+title);}
window.console.log(element);}}}};
Todoyu.Autocompleter=Class.create(Ajax.Autocompleter,{onComplete:function(response){if(this.options.onCompleteCustom){var funResult=Todoyu.callUserFunction(this.options.onCompleteCustom,response,this);if(typeof(funResult)==='object'){response=funResult;}}
if(response.getTodoyuHeader('acElements')==0){this.onEmptyResult(response);}
this.updateChoices(response.responseText);},onEmptyResult:function(response){new Effect.Highlight(this.element,{'startcolor':'#ff0000','endcolor':'#ffffff','duration':2.0});if(!this.options.onCompleteCustom){Todoyu.notifyInfo('Autocomplete: no results found');}}});
Todoyu.Ui={bodyClickObservers:[],update:function(container,url,options){options=this._getDefaultOptions(options);if(Todoyu.exists(container)){return new Ajax.Updater(container,url,options);}else{Todoyu.log('You tried to update "'+container+'" which is not part of the DOM! (No request sent)');}},replace:function(container,url,options){options=this._getDefaultOptions(options);if(Todoyu.exists(container)){return new Ajax.Replacer(container,url,options);}else{Todoyu.log('You tried to replace "'+container+'" which is not part of the DOM!');}},prepend:function(container,url,options){options=this._getDefaultOptions(options);options.insertion='before';return this.update(container,url,options);},append:function(container,url,options){options=this._getDefaultOptions(options);options.insertion='after';return this.update(container,url,options);},insert:function(container,url,options){options=this._getDefaultOptions(options);options.insertion='bottom';return this.update(container,url,options);},_getDefaultOptions:function(options){if(Object.isUndefined(options)){options={};}
if(Object.isUndefined(options.evalScripts)){options.evalScripts=true;}
if(Object.isUndefined(options.parameters)){options.parameters={};}
if(Object.isUndefined(options.parameters.area)){options.parameters.area=Todoyu.getArea();}
return options;},hide:function(idElement){if(Todoyu.exists(idElement)){$(idElement).hide();}},show:function(idElement){if(Todoyu.exists(idElement)){$(idElement).show();}},toggle:function(idElement){if(Todoyu.exists(idElement)){$(idElement).toggle();}},updateToggleIcon:function(elementPrefix,idElement){if($(elementPrefix+idElement+'-details').visible()){$(elementPrefix+idElement+'-toggler').addClassName('expanded');}else{$(elementPrefix+idElement+'-toggler').removeClassName('expanded');}},updateContent:function(url,options){return this.update('content',url,options);},setContent:function(content){$('content').update(content);},setContentTabs:function(tabs){$('content-tabs').update(tabs);},setContentBody:function(body){$('content-body').update(body);},updateContentBody:function(url,options){return this.update('content-body',url,options);},updatePanel:function(url,options){return this.update('leftCol',url,options);},updateContextMenu:function(url,options){return this.update('contextmenu',url,options);},updatePage:function(ext,controller){var url={ext:ext};if(Object.isString(controller)){if(!controller.empty){url.controller=controller;}}
location.href='?'+Object.toQueryString(url);},ajaxLoader:function(showLoader){Todoyu.Headlet.show(showLoader);},setLinkCursor:function(wait){$$('a').each(function(a){a.setStyle({'cursor':wait?'wait':'pointer'});});$(document.body).setStyle({'cursor':wait?'wait':'auto'});},addHoverEffect:function(idElement){var elt=$(idElement);Event.observe(idElement,'mouseover',this.hoverEffect.bindAsEventListener(this,true,elt));Event.observe(idElement,'mouseout',this.hoverEffect.bindAsEventListener(this,false,elt));},hoverEffect:function(event,over,element){if(over){element.addClassName('hover');}else{element.removeClassName('hover');}},fixAnchorPosition:function(){if(location.hash!==''){var name=location.hash.substr(1);this.scrollToAnchor(name);}},scrollToAnchor:function(name){var element=document.getElementsByName(name)[0];if(element){this.scrollToElement(element);}},scrollToElement:function(element){element=$(element);element.scrollTo();if(Todoyu.exists('header')){var headerHeight=$('header').getHeight();var scrollOffset=element.cumulativeScrollOffset().top;var elementOffset=element.cumulativeOffset().top;var scrollBy=headerHeight;if(scrollOffset>headerHeight){if(scrollOffset!==elementOffset){scrollBy=scrollOffset-(elementOffset-headerHeight);}
this.scrollBy.delay(0.1,0,-scrollBy);}}},scrollBy:function(x,y){window.scrollBy(x,y);},scrollToTop:function(){Effect.ScrollTo('header',{'duration':0.3});},collapseExpandElement:function(idElement,toggle){var options={'duration':0.3};var content=$(idElement);if(content.visible()){Effect.SlideUp(content,options);}else{Effect.SlideDown(content,options);}
toggle.toggleClassName('expand');},twinkle:function(element){Todoyu.Ui.hide(element);Effect.Appear(element);},isVisible:function(element){if(Todoyu.exists(element)){return $(element).visible();}else{return false;}},showTimePicker:function(idElement,config){config=$H({'rangeHour':[0,23],'rangeMinute':[0,55]}).merge(config).toObject();return new TimePicker(idElement,config);},showDurationPicker:function(idElement,config){config=config||{};config=$H({'rangeHour':[0,99],'rangeMinute':[0,55]}).merge(config).toObject();return new TimePicker(idElement);},setTitle:function(title){document.title=title+' - todoyu';},getTitle:function(strip){if(strip===false){return document.title;}else{return document.title.replace(/ - todoyu/,'');}},loadJSFile:function(filename){var fileref=document.createElement('script');fileref.setAttribute("type","text/javascript");fileref.setAttribute("src",filename);Todoyu.Ui.appendAssetToHead(fileref);},loadCSSFile:function(filename){var fileref=document.createElement("link");fileref.setAttribute("rel","stylesheet");fileref.setAttribute("type","text/css");fileref.setAttribute("href",filename);Todoyu.Ui.appendAssetToHead(fileref);},appendAssetToHead:function(fileref){if(typeof fileref!="undefined"){document.getElementsByTagName("head")[0].appendChild(fileref);}},observeBody:function(){$(document.body).observe('click',this.onBodyClick.bindAsEventListener(this));},onBodyClick:function(event){this.bodyClickObservers.each(function(event,func){func(event);}.bind(this,event));},addBodyClickObserver:function(func){this.bodyClickObservers.push(func);},stopEventBubbling:function(event){if(window.event){event.returnValue=false;event.cancelBubble=true;}else{event.preventDefault();event.stopPropagation();}}};
Todoyu.Notification={SUCCESS:'success',ERROR:'error',INFO:'info',defaultCountdown:3,template:null,id:1,notify:function(type,message,countdown){this.loadTemplate();countdown=Object.isUndefined(countdown)?this.defaultCountdown:Todoyu.Helper.intval(countdown);var id=this.id++;var data={'id':id,'type':type,'message':message,'countdown':countdown===0?'':countdown};var note=this.template.evaluate(data);this.appendNote(id,note);if(countdown!==0){this.countDown.bind(this).delay(1,id);}},loadTemplate:function(){if(this.template===null){this.template=new Template('<div class="note #{type}" id="notification-note-#{id}"><table width="100%"><tr><td class="icon">&nbsp;</td><td class="message">#{message}</td><td class="countdown" align="center">#{countdown}</td><td class="close" onclick="Todoyu.Notification.close(this)">&nbsp;</td></tr></table></div>');}},remove:function(id){$('ntification-note-'+id).remove();},notifyInfo:function(message,countdown){this.notify(this.INFO,message,countdown);},notifyError:function(message,countdown){this.notify(this.ERROR,message,countdown);},notifySuccess:function(message,countdown){this.notify(this.SUCCESS,message,countdown);},close:function(closeButton){var idNote=$(closeButton).up('div.note').id.split('-').last();this.closeNote(idNote);},closeNote:function(id){var duration=0.3;new Effect.Move('notification-note-'+id,{'y':-80,'mode':'absolute'});this.onNoteClosed.bind(this).delay(duration+0.1,id);},fadeAllNotes:function(){$$('.note').each(function(note){Effect.Fade(note.id,{'duration':0.3});}.bind(this));},closeFirstNote:function(){var notes=$('notes').select('div.note');if(notes.size()>0){var idNote=notes.first().id.split('-').last();this.closeNote(idNote);}},onNoteClosed:function(id){if($('notification-note-'+id)){$('notification-note-'+id).remove();}},appendNote:function(idNote,code){$('notes').insert({'top':code});var htmlID='notification-note-'+idNote;$(htmlID).hide();$(htmlID).appear({'duration':0.5});},countDown:function(id){if($('notification-note-'+id)){var countBox=$('notification-note-'+id).down('.countdown');var current=parseInt(countBox.innerHTML,10);if(current===0){this.closeNote(id);}else{countBox.update(current-1);this.countDown.bind(this).delay(1,id);}}},checkNoteHeader:function(response){if(response.hasTodoyuHeader('note')){var info=response.getTodoyuHeader('note').evalJSON();this.notify(info.type,info.message);}}};
Todoyu.Popup={popup:{},last:null,timeoutID:null,getPopup:function(idPopup){return this.popup[idPopup];},getLastPopup:function(){return this.last;},getNumPopups:function(){return Object.keys(this.popup).size();},openWindow:function(idPopup,title,winWidth,contentUrl,requestOptions){this.popup[idPopup]=new Window({id:idPopup,className:"dialog",title:title,parent:document.getElementsByTagName("body").item(0),minWidth:100,minHeight:220,width:winWidth,height:240,resizable:true,closable:true,minimizable:false,maximizable:false,draggable:false,zIndex:2000,recenterAuto:false,'hideEffect':Element.hide,'showEffect':Element.show,effectOptions:null,destroyOnClose:true});this.getPopup(idPopup).showCenter(true,100);requestOptions=requestOptions||{};if(typeof requestOptions.onComplete!=='function'){requestOptions.onComplete=Prototype.emptyFunction;}
requestOptions.onComplete.wrap(function(idPopup,callOriginal,response){this.onContentLoaded.bind(this,idPopup);callOriginal(response);}.bind(this,idPopup));this.getPopup(idPopup).setAjaxContent(contentUrl,requestOptions,false,false);this.last=this.getPopup(idPopup);return this.getPopup(idPopup);},onContentLoaded:function(idPopup,response){},onWindowClose:function(event,idPopup){},onMouseUp:function(event,idPopup){},getContentElement:function(idPopup){return $(idPopup+'_content');},updateHeight:function(idPopup,clearTimeout){this.getPopup(idPopup).updateHeight();},clearTimeout:function(){},updateContent:function(idPopup,contentUrl,requestOptions){this.getPopup(idPopup).setAjaxContent(contentUrl,requestOptions,false,false);},setContent:function(idPopup,content){this.getPopup(idPopup).setHTMLContent(content);content.evalScripts();},refresh:function(idPopup){this.getPopup(idPopup).refresh();},close:function(idPopup){this.getPopup(idPopup).close();},destroy:function(idPopup){this.getPopup(idPopup).destroy();}};
Todoyu.QuickInfo={popupID:'quickinfo',cache:{},defaultCacheTime:60,customCacheTime:{},template:null,loading:false,hidden:false,init:function(){this.insertQuickInfoElement(this.popupID);},install:function(name,selector,callback){this.uninstall(selector);$$(selector).each(function(name,callback,element){element.observe('mouseover',this.show.bindAsEventListener(this,name,callback,element));element.observe('mouseout',this.hide.bindAsEventListener(this));}.bind(this,name,callback));},uninstall:function(selector){$$(selector).each(function(element){element.stopObserving('mouseover');element.stopObserving('mouseout');});},insertQuickInfoElement:function(){if(!Todoyu.exists(this.popupID)){var quickInfo=new Element('div',{'id':this.popupID}).hide();$(document.body).insert(quickInfo);}},show:function(event,name,callback,observedElement){event.stop();var elementKey=callback(observedElement,event);var cacheID=name+elementKey;this.hidden=false;if(this.loading===true){return false;}
this.loading=true;if(this.isCached(cacheID)){this.display(name,elementKey,event.pointerX(),event.pointerY());this.loading=false;}else{this.loadQuickInfo(name,elementKey,callback,event);}},display:function(name,elementKey,pointerX,pointerY){this.updatePopup(this.getFromCache(name+elementKey));this.showPopUp(pointerX,pointerY);},setCacheTime:function(type,time){this.customCacheTime[type]=time;},getCacheTime:function(type){return(new Date()).getTime()+(this.customCacheTime[type]!==undefined?parseInt(this.customCacheTime[type]):this.defaultCacheTime)*1000;},showPopUp:function(x,y){if(!this.hidden){x+=8;y-=12;var popupWidth=$(this.popupID).getDimensions().width;if(x+20>window.innerWidth-popupWidth){x=x-popupWidth-20;}
$(this.popupID).setStyle({'top':y+'px','left':x+'px'}).show();}},hide:function(){if($(this.popupID)){$(this.popupID).hide();this.hidden=true;}},loadQuickInfo:function(name,elementKey,callback,event){var url=Todoyu.getUrl('core','quickinfo');var options={'parameters':{'action':'get','quickinfo':name,'element':elementKey},'onComplete':this.onQuickInfoLoaded.bind(this,name,elementKey,event)};Todoyu.send(url,options);},onQuickInfoLoaded:function(name,elementKey,event,response){var cacheKey=name+elementKey;var content=this.buildQuickInfo(response.responseJSON);var time=this.getCacheTime(name);this.addToCache(cacheKey,content,time);this.loading=false;if(!this.hidden){this.display(name,elementKey,event.pointerX(),event.pointerY());}},buildQuickInfo:function(json){if(this.template===null){this.template=new Template('<dt class="#{key}Icon">&nbsp;</dt><dd class="#{key}Label">#{label}&nbsp;</dd>');}
var content='';json.each(function(item){item.label=Todoyu.Helper.wordwrap(item.label,16,' ',true);content+=this.template.evaluate(item);}.bind(this));return'<dl>'+content.replace("\n",'<br />')+'</dl>';},updatePopup:function(content){$(this.popupID).update(content);},addToCache:function(cacheID,content,time){this.cache[cacheID]={'time':time,'content':content};},getFromCache:function(cacheID){return this.isCached(cacheID)?this.cache[cacheID].content:false;},removeFromCache:function(cacheID){if(this.cache[cacheID]){delete this.cache[cacheID];}},isCached:function(cacheID){return typeof(this.cache[cacheID])==='object'&&this.cache[cacheID].time>(new Date()).getTime();}};
Todoyu.Headlet={current:null,headlets:{},openStatusTimeout:null,_getHeadletFromEvent:function(event){return event.findElement('li.headlet');},_getNameFromEvent:function(event){var h=this._getHeadletFromEvent(event);return h.id.split('-').last().toLowerCase();},_isContentEvent:function(event){return event.element().up('ul.content')!==undefined;},_callHandler:function(name,eventType,event){var headlet=this.headlets[name];if(typeof(headlet[eventType])==='function'){headlet[eventType].call(headlet,event);}},init:function(){var headlets=$('headlets').select('li.headlet');headlets.invoke('observe','click',this.onClick.bindAsEventListener(this));headlets.invoke('observe','mouseover',this.onOverHeadlet.bindAsEventListener(this));$('headlets').observe('mouseover',this.onOverContainer.bindAsEventListener(this));Todoyu.Ui.addBodyClickObserver(this.onBodyClick.bind(this));},add:function(name,headletObject){name=name.toLowerCase();this.headlets[name]=headletObject;headletObject.headlet=this;headletObject.hideOthers=this.hideAllContent.bind(this,name);headletObject.isContentVisible=this.isContentVisible.bind(this,name);headletObject.toggleContent=this.toggleContent.bind(this,name);headletObject.showContent=this.showContent.bind(this,name);headletObject.hideContent=this.hideContent.bind(this,name);headletObject.getButton=this.getButton.bind(this,name);headletObject.getContent=this.getContent.bind(this,name);headletObject.saveOpenStatus=this.saveOpenStatus.bind(this,name);headletObject.isEventInOwnContent=this.isEventInOwnContent.bind(this,name);headletObject.setActive=this.setActive.bind(this,name);Todoyu.callIfExists(headletObject.init,headletObject);},onOverHeadlet:function(event){event.stop();var headlet=this._getHeadletFromEvent(event);if(headlet.overStatus!==true){headlet.overStatus=true;this.current=this._getNameFromEvent(event);this._callHandler(this.current,'onMouseOver',event);}},onOverContainer:function(event){$('headlets').select('li.headlet').each(function(item){item.overStatus=false;}.bind(this));if(this.current!==null){this._callHandler(this.current,'onMouseOut',event);this.current=null;}},onClick:function(event){var headlet=this._getHeadletFromEvent(event);if(headlet!==undefined){var name=this._getNameFromEvent(event);var type='';this.hideAllContent(name);if(this.isActive(name)){this.setAllInactive();}else{if(this.getType(name)!=='button'){this.setActive(name);}}
if(this._isContentEvent(event)){type='onContentClick';if(headlet.down('a.button').hasClassName('headletTypeMenu')){this._callHandler(name,'onMenuClick',event);}}else{type='onButtonClick';}
this._callHandler(name,type,event);}
event.stop();},onMenuClick:function(event){var li=event.findElement('li');if(li){var name=li.id.split('-')[1];this._callHandler(name,'onMenuClick',event);}
event.stop();},exists:function(name){return Todoyu.exists('headlet-'+name);},setActive:function(name){this.setAllInactive();$('headlet-'+name).addClassName('active');},setInactive:function(name){$('headlet-'+name).removeClassName('active');},setAllInactive:function(){$('headlets').select('li.headlet').invoke('removeClassName','active');},isActive:function(name){return $('headlet-'+name).hasClassName('active');},toggleContent:function(name,keepOthers){this.getContent(name).toggle();},isContentVisible:function(name){return this.getContent(name).visible();},showContent:function(name,keepOthers){if(keepOthers===true){this.hideAllContent(name);}
if(this.hasContent(name)){$('headlet-'+name+'-content').show();}},hideContent:function(name){if(this.hasContent(name)){$('headlet-'+name+'-content').hide();}},hasContent:function(name){return Todoyu.exists('headlet-'+name+'-content');},hideAllContent:function(exceptName){$H(this.headlets).each(function(exceptName,pair){if(pair.key!==exceptName){this._callHandler(pair.key,'hide');}}.bind(this,exceptName));},getHeadlet:function(name){return $('headlet-'+name);},getButton:function(name){return $('headlet-'+name+'-button');},getContent:function(name){return $('headlet-'+name.toLowerCase()+'-content');},getType:function(name){var classNames=$w(this.getButton(name).className);var typeClass=classNames.detect(function(className){return className.indexOf('headletType')!==-1;});return typeClass.replace('headletType','').toLowerCase();},onBodyClick:function(event){$H(this.headlets).each(function(pair){this._callHandler(pair.key,'onBodyClick',event);},this);},isEventInOwnContent:function(name,event){return event.element().up('ul#headlet-'+name+'-content')!==undefined;},saveOpenStatus:function(name){var headlet=false;var openOverlay=$('headlets').select('li.overlay ul').detect(function(overlay){return overlay.visible();});if(openOverlay!==undefined){headlet=openOverlay.id.split('-')[1];}
window.clearTimeout(this.openStatusTimeout);this.openStatusTimeout=this.submitOpenStatus.bind(this,headlet).delay(1);},submitOpenStatus:function(openHeadlet){var url=Todoyu.getUrl('core','headlet');var options={'parameters':{'action':'open','headlet':openHeadlet===false?'':openHeadlet}};Todoyu.send(url,options);}};
Todoyu.Headlet.QuickCreate={popup:null,init:function(){},onButtonClick:function(event){if(this.isContentVisible()){this.hide();}else{this.hideOthers();this.showContent();}},onMenuClick:function(event){var idParts=Event.findElement(event,'a').className.split('-');var ext=idParts[3];var type=idParts[4];this.openTypePopup(ext,type);this.hide();},onBodyClick:function(event){this.hide();if(this.isEventInOwnContent(event)){event.stop();}},hide:function(){this.hideContent();this.headlet.setInactive('quickcreate');},openTypePopup:function(ext,type){if(!$('quickcreate')){var ctrl='Quickcreate'+type.toLowerCase();var url=Todoyu.getUrl(ext,ctrl);var options={'parameters':{'action':'popup'},'onComplete':this.onPopupOpened.bind(this,ext,type)};var idPopup='quickcreate';var title='Create'+': '+this.getTypeLabel(ext,type);var width=700;this.popup=Todoyu.Popup.openWindow(idPopup,title,width,url,options);}},onPopupOpened:function(ext,type){$('quickcreate').addClassName(type);var quickCreateObject='Todoyu.Ext.'+ext+'.QuickCreate'+Todoyu.Helper.ucwords(type);Todoyu.callUserFunction(quickCreateObject+'.onPopupOpened');},getTypeLabel:function(ext,type){return $$('#headlet-quickcreate-content a.headlet-quickcreate-item-'+ext+'-'+type)[0].innerHTML;},closePopup:function(){Todoyu.Popup.close('quickcreate');},updatePopupContent:function(content){$('quickcreate_content').update(content);}};
Todoyu.Headlet.About={eeVisible:{},idWindow:'headlet-about-window',nameEffect:null,onButtonClick:function(event){this.showWindow();},hasWindow:function(){return Todoyu.exists(this.idWindow);},createWindow:function(){var window=new Element('div',{'id':this.idWindow}).setStyle({'display':'none'});document.body.appendChild(window);},loadWindow:function(){var url=Todoyu.getUrl('core','about');var options={'parameters':{'action':'window'},'onComplete':this.onWindowLoaded.bind(this)};var target=this.idWindow;Todoyu.Ui.update(target,url,options);},onWindowLoaded:function(response){$(this.idWindow).down('.close').observe('click',this.hideWindow.bindAsEventListener(this));this.displayWindow(true);this.initEE();},showWindow:function(){if(this.hasWindow()){this.displayWindow(true);}else{this.createWindow();this.loadWindow();}},hideWindow:function(){this.displayWindow(false);if(this.nameEffect!==null){this.nameEffect.options.afterFinish=null;this.nameEffect.cancel();}},displayWindow:function(show){var window=$(this.idWindow);var screenDim=document.viewport.getDimensions();var windowDim=window.getDimensions();var left=parseInt((screenDim.width-windowDim.width)/2);var topHide=-windowDim.height-30;var top;if(show){window.setStyle({'left':left+'px','top':topHide+'px','display':'block'});top=parseInt((screenDim.height-windowDim.height)/2);top=top<0?0:top;}else{top=topHide;}
new Effect.Move(this.idWindow,{y:top,x:left,'mode':'absolute','duration':0.5,'afterFinish':show?this.startNameScrolling.bind(this,true,true):null});},startNameScrolling:function(up,first){var box=$('headlet-about-window').down('div.names');var list=box.down('ul');var newY=-list.getHeight()+(box.getHeight()/2);if(up===false){newY=-newY;}
if(first===true){list.setStyle({top:'0px'});}
this.nameEffect=new Effect.Move(list,{x:0,y:newY,mode:'relative',duration:list.select('li').size()*0.8,transition:Effect.Transitions.linear,afterFinish:this.startNameScrolling.bind(this,!up)});},initEE:function(){var names=['Erni','Stenschke','Karrer'];names.each(function(name){this.eeVisible[name]=false;},this);$('scrollingnames').select('li').findAll(function(names,element){var isCoder=names.any(function(itemName,coderName){return itemName.indexOf(coderName)!==-1;}.bind(this,element.innerHTML));if(isCoder){var coderName=names.detect(function(itemName,coderName){return itemName.indexOf(coderName)!==-1;}.bind(this,element.innerHTML));element.observe('click',this.EE.bindAsEventListener(this,coderName));}}.bind(this,names));},EE:function(event,coderName){var li=event.findElement('li');this.eeVisible[coderName]=true;li.addClassName('coder');if($H(this.eeVisible).all(function(pair){return pair.value===true;})){$('headlet-about-window').insert({'bottom':new Element('div',{'id':'ee-img'})});$('scrollingnames').select('li').invoke('removeClassName','coder');$('ee-img').observe('click',function(event){Effect.Puff(event.element());});}}};
Todoyu.Headlet.AjaxLoader={buttonID:'headlet-ajaxloader-button',show:function(){Effect.Appear(this.buttonID,{'duration':0.2,'from':0.3,'to':1.0,'transition':Effect.Transitions.spring});},hide:function(){Effect.Fade.delay(0.2,this.buttonID,{'duration':0.3});}};
Todoyu.AjaxResponders={completeHooks:[],init:function(){Ajax.Responders.register({'onCreate':this.onCreate.bind(this),'onComplete':this.onComplete.bind(this)});this.addOnCompleteHook(Todoyu.Ajax.checkNoAccessHeader.bind(Todoyu.Ajax));this.addOnCompleteHook(Todoyu.Ajax.checkPhpErrorHeader.bind(Todoyu.Ajax));this.addOnCompleteHook(Todoyu.Notification.checkNoteHeader.bind(Todoyu.Notification));},addOnCompleteHook:function(hook){this.completeHooks.push(hook);},callOnCompleteHooks:function(response){this.completeHooks.each(function(response,func){func(response);}.bind(this,response));},onCreate:function(request){Todoyu.Headlet.AjaxLoader.show();Todoyu.Ui.setLinkCursor(true);var oldRespondToReadyState=request.respondToReadyState;request.respondToReadyState=function(readyState){var state=Ajax.Request.Events[readyState];var response=new Ajax.Response(this);if(state=='Complete'){Todoyu.AjaxResponders.callOnCompleteHooks(response);}
oldRespondToReadyState.call(response.request,readyState);};},onComplete:function(response){this.scrollToElement(response);if(Ajax.activeRequestCount<1){Todoyu.Headlet.AjaxLoader.hide();Todoyu.Ui.setLinkCursor(false);}},onException:function(response,exception){alert('Cannot connect to server (connection or server down?)');},scrollToElement:function(response){var hash=response.getHeader('Todoyu-Hash');if(hash!==null&&Todoyu.exists(hash)){$(hash).scrollToElement();}}};
Ajax.Replacer=Class.create(Ajax.Request,{initialize:function($super,container,url,options){options=options||{};options.onComplete=(options.onComplete||Prototype.emptyFunction).wrap(function(proceed,transport,json){$(container).replace(transport.responseText);proceed(transport,json);});$super(url,options);}});
Todoyu.Ajax={checkNoAccessHeader:function(response){if(response.hasNoAccess()){delete response.request.options.onComplete;var missingRight=response.getTodoyuHeader('noAccess-right');Todoyu.notifyError('You have no access to the requested data ('+missingRight+')');}},checkPhpErrorHeader:function(response){if(response.hasPhpError()){delete response.request.options.onComplete;Todoyu.notifyError(response.getPhpError(),0);Todoyu.log(response.getPhpError());}}};
Todoyu.Helper={intval:function(mixedvar){var type=typeof(mixedvar);var temp;switch(type){case'boolean':return mixedvar?1:0;case'string':temp=parseInt(mixedvar,10);return isNaN(temp)?0:temp;case'number':return Math.floor(mixedvar);default:return 0;}},twoDigit:function(number){number=parseInt(number,10);if(number<10){number='0'+number;}
return number;},toggleImage:function(idImage,src1,src2){var image=$(idImage);if(image.src.indexOf(src1)===-1){image.src=src1;}else{image.src=src2;}},round:function(value,precision){value=parseFloat(value);precision=this.intval(precision);var factor=Math.pow(10,precision);return Math.round((value*factor))/factor;},ucwords:function(str){return(str+'').replace(/^(.)|\s(.)/g,function($1){return $1.toUpperCase();});},wordwrap:function(str,int_width,str_break,cut){var m=((arguments.length>=2)?arguments[1]:75);var b=((arguments.length>=3)?arguments[2]:"\n");var c=((arguments.length>=4)?arguments[3]:false);var i,j,l,s,r;str+='';if(m<1){return str;}
for(i=-1,l=(r=str.split(/\r\n|\n|\r/)).length;++i<l;r[i]+=s){for(s=r[i],r[i]="";s.length>m;r[i]+=s.slice(0,j)+((s=s.slice(j)).length?b:"")){j=c==2||(j=s.slice(0,m+1).match(/\S*(\s)?$/))[1]?m:j.input.length-j[0].length||c==1&&m||j.input.length+(j=s.slice(m).match(/^\S*/)).input.length;}}
return r.join("\n");},fireEvent:function(element,event){var evt;if(document.createEventObject){evt=document.createEventObject();return element.fireEvent('on'+event,evt);}else{evt=document.createEvent('HTMLEvents');evt.initEvent(event,true,true);return!element.dispatchEvent(evt);}}};
Todoyu.Hook={hooks:{},add:function(name,callback){if(typeof this.hooks[name]!=='object'){this.hooks[name]=[];}
this.hooks[name].push(callback);},get:function(name){if(typeof this.hooks[name]!=='object'){this.hooks[name]=[];}
return this.hooks[name];},clear:function(name){this.hooks[name]=[];},clearAll:function(){this.hooks={};},exec:function(name){var params=$A(arguments).slice(1);if(typeof this.hooks[name]==='object'){this.hooks[name].each(function(item){item.apply(item,params);});}}};
Todoyu.Time={seconds:{minute:60,hour:3600,day:86400,week:604800,month:2592000},timeFormat:function(hours,minutes,seconds,separator){if(Object.isUndefined(separator)){separator=':';}
return Todoyu.Helper.twoDigit(hours)+separator+Todoyu.Helper.twoDigit(minutes)+separator+Todoyu.Helper.twoDigit(seconds);},timeFormatSeconds:function(time,separator){var timeParts=this.getTimeParts(time);return this.timeFormat(timeParts.hours,timeParts.minutes,timeParts.seconds,separator);},parseTimeToSeconds:function(timeString){var parts=timeString.stripTags().split(':');return Todoyu.Helper.intval(parts[0])*3600+(Todoyu.Helper.intval(parts[1])*60)+Todoyu.Helper.intval(parts[2]);},getTimeParts:function(time){time=Todoyu.Helper.intval(time);var hours=Math.floor(time/3600);var minutes=Math.floor((time-hours*3600)/60);var seconds=time-(hours*3600)-(minutes*60);return{'hours':hours,'minutes':minutes,'seconds':seconds};},getShiftedTime:function(baseTime,step,direction){baseTime=this.getDayStart(baseTime);var factor=(direction==='up'?1:-1);var date=new Date(baseTime*1000);if(step==='month'){if(direction==='up'&&date.getMonth()==11){date.setYear(date.getFullYear()+1);date.setMonth(0);}else if(direction==='down'&&date.getMonth()==0){date.setYear(date.getFullYear()-1);date.setMonth(11);}else{date.setMonth(date.getMonth()+factor);}}else{date.setTime(date.getTime()+(factor*this.seconds[step]*1000));}
return parseInt(date.getTime()/1000,10);},getDayStart:function(time){var date=new Date(time*1000);date.setHours(0);date.setMinutes(0);date.setSeconds(0);return parseInt(date.getTime()/1000,10);},getWeekStart:function(baseTime){var date=new Date(baseTime*1000);date.setHours(0);date.setMinutes(0);date.setSeconds(0);var newTime=parseInt(date.getTime()/1000,10);var shift=(((date.getDay()%7)-1)*-1);newTime+=shift*this.seconds.day;return newTime;},getTodayDate:function(){var date=new Date();date.setHours(0);date.setMinutes(0);date.setSeconds(0);return date.getTime();},getDaysInMonth:function(time){var date=new Date(time*1000);var year=date.getFullYear();var month=date.getMonth();return 32-new Date(year,month,32).getDate();},getDateString:function(time){var date=new Date(time*1000);return date.getFullYear()+'-'+Todoyu.Helper.twoDigit(date.getMonth()+1)+'-'+date.getDate();},getDateTimeString:function(time){if(!Object.isNumber(time)){return'';}
var date=new Date(time*1000);return date.getFullYear()+'-'+Todoyu.Helper.twoDigit(date.getMonth()+1)+'-'+Todoyu.Helper.twoDigit(date.getDate())+' '+Todoyu.Helper.twoDigit(date.getHours())+':'+Todoyu.Helper.twoDigit(date.getMinutes());}};
Todoyu.DateField={format:null,init:function(format){this.format=format;},getDate:function(field){return Date.parseDate($F(field),this.format);},setTime:function(field,hour,minute){var date=this.getDate(field);date.setHours(hour);date.setMinutes(minute);$(field).value=date.print(this.format);},setDate:function(field,year,month,day){var date=this.getDate(field);date.setFullYear(year);date.setMonth(month);date.setDate(day);$(field).value=date.print(this.format);},setDateTime:function(field,year,month,day,hour,minute,second){var date=new Date(year,month,day,hour,minute,second);$(field).value=date.print(this.format);}};
Todoyu.ContextMenu={attach:function(name,selector,callback){this.detach(selector);var elements=$$(selector);elements.each(function(name,callback,element){element.observe('contextmenu',this.load.bindAsEventListener(this,name,callback,element));}.bind(this,name,callback));},detach:function(selector){var elements=$$(selector);elements.each(function(element){element.stopObserving('contextmenu');});},load:function(event,name,callback,observedElement){event.stop();var url=Todoyu.getUrl('core','contextmenu');var options={'parameters':{'action':'get','contextmenu':name,'element':callback(observedElement,event)}};this.showMenu(url,options,event);return false;},showMenu:function(url,options,event){options.onComplete=(options.onComplete||Prototype.emptyFunction).wrap(function(event,proceed,transport,json){this.buildMenuFromJSON(transport.responseJSON);this.setMenuDimensions(event);proceed(transport,json);}.bind(this,event));Todoyu.send(url,options);},buildMenuFromJSON:function(menuJSON){var menu=this.Template.render(menuJSON);this.updateMenuContainer(menu);},setMenuDimensions:function(event){var menu=$('contextmenu');var left=event.pointerX();var top=event.pointerY();var menuHeight=parseInt(menu.clientHeight,10);var menuWidth=parseInt(menu.clientWidth,10);var screenHeight=document.viewport.getHeight();var screenWidth=document.viewport.getWidth();if((top===0||top-window.scrollY===0)&&event.screenX){top=event.screenY+window.scrollY;left=event.screenX+window.scrollX;}
if((event.clientY+menuHeight)>screenHeight){top=top-menuHeight;}
if((event.clientX+menuWidth)>screenWidth){left=left-menuWidth;}
menu.setStyle({'position':'absolute','display':'block','left':left+'px','top':top+'px'});Event.observe(document.body,'click',Todoyu.ContextMenu.hide);Event.observe(menu,'contextmenu',Todoyu.ContextMenu.preventContextMenu);},updateMenuContainer:function(menuHTML){$('contextmenu').update(menuHTML);},preventContextMenu:function(event){event.stop();return false;},hide:function(){$('contextmenu').hide();Event.stopObserving(document.body,'click',this.hide);},submenu:function(key,show){var ctxMenuID='contextmenu';var itemID='contextmenu-'+key;var submenuID=itemID+'-submenu';if(!Todoyu.exists(submenuID)){return false;}
var submenu=$(submenuID);if(show){var item=$(itemID);var ctxMenu=$(ctxMenuID);var itemWidth=item.getWidth();var posCtxMenu=ctxMenu.viewportOffset();var posItem=item.viewportOffset();var left=itemWidth-5;var top=posItem.top-posCtxMenu.top+5;submenu.setStyle({'display':'block','left':left+'px','top':top+'px'});}else{submenu.hide();}}};
Todoyu.ContextMenu.Template={template:{item:null,submenu:null},html:{item:'<li class="#{key}" id="contextmenu-#{key}" onmouseover="Todoyu.ContextMenu.submenu(\'#{key}\', true)" onmouseout="Todoyu.ContextMenu.submenu(\'#{key}\', false)"><a onclick="#{jsAction}" href="javascript:void(0)" class="#{class}">#{label}</a>#{submenu}</li>',submenu:'<ul class="context-submenu" id="contextmenu-#{parentKey}-submenu">#{submenu}</ul>'},code:'',render:function(json){this.init();json.each(function(item){if(typeof item.submenu==='object'&&!Object.isArray(item.submenu)){item.submenu=this.renderSubmenu(item);}
this.code+=this.template.item.evaluate(item);}.bind(this));return this.code;},renderSubmenu:function(parentItem){var items='';$H(parentItem.submenu).each(function(pair){items+=this.template.item.evaluate(pair.value);}.bind(this));return this.template.submenu.evaluate({'parentKey':parentItem.key,'submenu':items});},init:function(){this.code='';if(this.template.item===null){this.template.item=new Template(this.html.item);this.template.submenu=new Template(this.html.submenu);}}};
Todoyu.Tabs={bindCache:{},create:function(name,handlerFunction){list=$(name+'-tabs');this.bindCache[list.id]={'click':this._clickHandler.bindAsEventListener(this,handlerFunction),'mouseover':this._hoverHandler.bindAsEventListener(this,true),'mouseout':this._hoverHandler.bindAsEventListener(this,false)};Event.observe(list,'click',this.bindCache[list.id].click);Event.observe(list,'mouseover',this.bindCache[list.id].mouseover);Event.observe(list,'mouseout',this.bindCache[list.id].mouseout);},destroy:function(list,handlerFunction){list=$(list);Event.stopObserving(list,'click',this.bindCache[list.id].click);Event.stopObserving(list,'mouseover',this.bindCache[list.id].mouseover);Event.stopObserving(list,'mouseout',this.bindCache[list.id].mouseout);delete this.bindCache[list.id];},isTabList:function(idList){return Object.isUndefined(this.bindCache[idList])===false;},_clickHandler:function(e,handlerFunction){e.stop();var element=Event.findElement(e,'li');if(Object.isUndefined(element)){return;}
var classes=element.className.split(' ');classes.each(function(item){if(item.substr(0,7)==='tabkey-'){handlerFunction(e,item.substr(7));return;}});var list=Event.findElement(e,'ul');this.setActiveByElement(element);},setActive:function(listname,tab){var tabID=listname+'-tabs';if(Todoyu.exists(tabID)){$(listname+'-tabs').select('li').invoke('removeClassName','active');$(listname+'-tabs').down('li.tabkey-'+tab).addClassName('active');}else{Todoyu.log('Tab with name "'+listname+'" not found!');}},setActiveByElement:function(tabElement){var idParts=$(tabElement).id.split('-tab-');this.setActive(idParts.first(),idParts.last());},getActive:function(list){return $(list).down('li.active');},getActiveKey:function(list){var active=this.getActive(list);if(active){return active.id.split('-').last();}else{return null;}},setLabel:function(listname,tab,label){$(listname+'-tab-'+tab).down('span.labeltext').update(label);},removeTab:function(listname,tabName){var tab=$(listname+'-tab-'+tabName);if(tab){tab.remove();}
return tab;},build:function(listname,name,tabClass,tabLabel,active){var tab=new Element('li',{'id':listname+'-tab-'+name,'class':tabClass});var p=new Element('p',{'id':listname+'-tab-'+name+'-label','class':'label'});var lt=new Element('span',{'class':'lt'});var icon=new Element('span',{'class':'icon'});var labeltext=new Element('span',{'class':'labeltext'}).update(tabLabel);tab.insert(p);p.insert(lt);p.insert(icon);p.insert(labeltext);if(active===true){tab.addClassName('active');p.addClassName('active');}
return tab;},_hoverHandler:function(e,over){var li=Event.findElement(e,'li');if(Object.isUndefined(li)){return;}
if(over){li.addClassName('hover');}else{li.removeClassName('hover');}}};
Todoyu.PanelWidget={observerCallbacks:{},toggle:function(widget){var h1=$('panelwidget-'+widget+'-h1');var content=$('panelwidget-'+widget+'-content');var toggle=$('panelwidget-'+widget+'-toggle');var options={'duration':0.3};this.saveToggleStatus(widget,!content.visible());if(content.visible()){Effect.SlideUp(content,options);}else{Effect.SlideDown(content,options);}
h1.toggleClassName('expand');toggle.toggleClassName('expand');},saveToggleStatus:function(widget,expanded){var url=Todoyu.getUrl('core','panelwidget');var options={'parameters':{'action':'expanded','widget':widget,'expanded':expanded?1:0}};Todoyu.send(url,options);},observe:function(widget,callbackFunction){if(Object.isUndefined(this.observerCallbacks[widget])){this.observerCallbacks[widget]=[];}
this.observerCallbacks[widget].push(callbackFunction);},stopObserving:function(widget,callbackFunction){if(!Object.isUndefined(this.observerCallbacks[widget])){if(!callbackFunction){if(this.observerCallbacks[widget].length>0){this.observerCallbacks[widget].clear();}}}},fire:function(widget,params){if(!Object.isUndefined(this.observerCallbacks[widget])){this.observerCallbacks[widget].each(function(widget,params,callbackFunction){callbackFunction(widget,params);}.bind(this,widget,params));}},isLoaded:function(extKey,widgetName){return typeof(Todoyu.Ext[extKey].PanelWidget[widgetName])==='object';}};
Todoyu.Pref={count:0,temp:[],save:function(ext,action,value,idItem,onComplete){var url=Todoyu.getUrl(ext,'preference');var options={'parameters':{'action':action,'value':value,'item':idItem,'area':Todoyu.getArea()}};if(!Object.isUndefined(onComplete)){options.onComplete=onComplete;}
Todoyu.send(url,options);},get:function(ext,preference){var currentCount=this.count++;this.temp[currentCount]=null;var url=Todoyu.getUrl(ext,'preference');var options={'parameters':{'action':'get','preference':preference},'asynchronous':false,'onComplete':function(count,response){this.temp[count]=response.responseText;}.bind(this,currentCount)};Todoyu.send(url,options);return this.temp[currentCount];}};
Todoyu.Form={subFormIndex:100,onFormDisplay:function(formID){if(Todoyu.exists(formID)){this.expandInvalidForeignRecords(formID);}},getNextIndex:function(){return this.subFormIndex++;},toggleRecordForm:function(idRecord,fieldName,index){var baseName='foreignrecord-'+idRecord+'-'+fieldName+'-'+index;var formHtml=baseName+'-formhtml';var trigger=baseName+'-trigger';if(Todoyu.exists(trigger)){$(formHtml).toggle();$(trigger).down('span')[$(formHtml).visible()?'addClassName':'removeClassName']('expanded');}},removeRecord:function(idRecord,fieldName,index){var idElement='foreignrecord-'+idRecord+'-'+fieldName+'-'+index;$(idElement).remove();},addRecord:function(idRecord,formName,fieldName,updateExt,updateController){var container=$('foreignrecords-'+idRecord+'-'+fieldName);var index=this.getNextIndex();var url=Todoyu.getUrl(updateExt,updateController);var options={'parameters':{'action':'addSubform','form':formName,'field':fieldName,'record':idRecord,'index':index},'onComplete':this.onRecordAdded.bind(this,container,idRecord,formName,fieldName,index)};Todoyu.send(url,options);},onRecordAdded:function(container,idRecord,formName,fieldName,index,response){$(container).insert({'top':response.responseText});this.toggleRecordForm(idRecord,fieldName,index);this.focusFirstRecordField(idRecord,fieldName,index);},focusFirstRecordField:function(idRecord,fieldName,index){var formHTML=$('foreignrecord-'+idRecord+'-'+fieldName+'-'+index+'-formhtml');var field=formHTML.select('input[type!=hidden]','select','textarea').first();if(field){field.focus();}},focusFirstFormField:function(formID){if($(formID)){var field=$(formID).select('input[type!=hidden]','select','textarea').first();if(field){if(field.visible()){field.focus();}}}},expandForeignRecords:function(fieldNames){fieldNames=fieldNames||[];fieldNames.each(function(fieldName){var parentField=$$('form div.fieldname'+fieldName.capitalize()).first();if(parentField){var subForms=parentField.select('div.databaseRelation div.databaseRelationFormhtml');subForms.invoke('show');}});},expandInvalidForeignRecords:function(formID){$(formID).select('div.error').each(function(errorField){var formHTML=$(errorField).up('div.databaseRelationFormhtml');if(formHTML){formHTML.show();}});},openWizard:function(idRecord,idField,extension,controller,action,height,width,title){var url=Todoyu.getUrl(extension,controller);var options={'parameters':{'action':action,'idRecord':idRecord,'idField':idField}};var idPopup='popup-'+idField;title=title?title:'Form Wizard';width=width>0?width:480;height=height>0?height:300;return Todoyu.Popup.openWindow(idPopup,title,width,url,options);},addIFrame:function(key){var idIFrame='upload-iframe-'+key;if(!Todoyu.exists(idIFrame)){var iFrame=new Element('iframe',{'name':'upload-iframe-'+key,'id':'upload-iframe-'+key,'class':'uploadIframe'});iFrame.hide();$(document.body).insert(iFrame);}
return $(idIFrame)},getIFrame:function(key){return $('upload-iframe-'+key);},removeIFrame:function(key){var iFrame=this.getIFrame(key);if(iFrame){iFrame.remove();}},setIconSelectorValue:function(value,baseID){$(baseID).value=value;var selectedOld=$(baseID+'-selector').select('.selected').first();if(selectedOld){selectedOld.toggleClassName('selected');}
$(baseID+'-listItem-'+value).toggleClassName('selected');}};
Todoyu.Autocomplete={config:{paramName:'input',minChars:2},acRefs:{},selectedFromList:false,install:function(idElement,config){var inputField=idElement+'-fulltext';var suggestDiv=idElement+'-suggest';var url=Todoyu.getUrl('core','autocomplete');var options={paramName:config.paramName||this.config.paramName,minChars:config.minChars||this.config.minChars,callback:this.beforeRequestCallback.bind(this),parameters:'&action=update&autocompleter='+config.acName+'&element='+idElement,afterUpdateElement:this.onElementSelected.bind(this)};if(config.options){options=$H(options).update(config.options).toObject();}
this.acRefs[idElement]=new Todoyu.Autocompleter(inputField,suggestDiv,url,options);$(inputField).observe('change',this.onInputChange.bindAsEventListener(this));$(inputField).observe('keydown',this.onKeydown.bindAsEventListener(this));},beforeRequestCallback:function(idElement,acParam){var form=$(idElement).up('form');var name=form.readAttribute('name');var data=form.serialize();return acParam+'&form='+name+'&'+data;},onInputChange:function(event){if(this.selectedFromList){this.selectedFromList=false;return;}
var idElement=event.element().id.split('-').without('fulltext').join('-');this.clear(idElement);},onKeydown:function(event){if(event.keyCode!==Event.KEY_RETURN&&event.keyCode!==Event.KEY_TAB){this.selectedFromList=false;}},onElementSelected:function(inputField,selectedListElement){var baseID=inputField.id.split('-').without('fulltext').join('-');var selectedValue=selectedListElement.id;this.selectedFromList=true;if(this.acRefs[baseID].options.onElementSelectedCustom){Todoyu.callUserFunction(this.acRefs[baseID].options.onElementSelectedCustom,inputField,selectedListElement,baseID,selectedValue,this.selectedFromList,this);}
$(baseID).setValue(selectedValue);},clear:function(element){var idElement=$(element).id;$(idElement).setValue('0');$(idElement+'-fulltext').setValue('');}};
var TimePicker=Class.create({hour:0,minute:0,element:null,picker:null,divHour:null,divMinute:null,config:{height:22,rangeHour:[0,99],stepHour:1,rangeMinute:[0,55],stepMinute:5},initialize:function(idElement,config){this.element=$(idElement);this.config=$H(this.config).merge(config||{}).toObject();var dur=this._readDuration();if(dur.min%5!==0){this.config.stepMinute=1;this.config.rangeMinute=[0,59];}else{this.config.stepMinute=5;this.config.rangeMinute=[0,55];}
this._build();this._observePicker();this.setHour(dur.hour);this.setMinute(dur.min);this.updateElement();this.show();},show:function(){this._setPosition();this.picker.show();},hide:function(){this.picker.hide();},setHour:function(hour){this.hour=this._keepInRange(hour,this.config.rangeHour);this.updateScroll();},setMinute:function(minute){this.minute=this._keepInRange(minute,this.config.rangeMinute);this.updateScroll();},updateScroll:function(){var newHourPos=this.hour*this.config.height*-1+2*this.config.height-(2*this.config.height);new Effect.Move(this.divHour,{'y':newHourPos,'mode':'absolute','duration':0.3});var newMinPos=(this.minute/this.config.stepMinute)*this.config.height*-1+2*this.config.height-(2*this.config.height);new Effect.Move(this.divMinute,{'x':25,'y':newMinPos,'mode':'absolute','duration':0.3});this.updateElement.bind(this).delay(0.2);},updateElement:function(){this.element.value=this.hour+':'+Todoyu.Helper.twoDigit(this.minute);},_setPosition:function(){var elOffset=this.element.cumulativeOffset();var elDim=this.element.getDimensions();var dpHeight=this.picker.getHeight();var left=elOffset.left+elDim.width+1;var top=elOffset.top+(elDim.height/2)-(dpHeight/2);this.picker.setStyle({'display':'block','left':left+'px','top':top+'px'});},_makeID:function(name){return this.element.id+'-'+name;},_build:function(){this._remove();this.picker=new Element('div',{'id':this._makeID('durationpicker'),'class':'dpPicker'});this.divHour=new Element('div',{'id':this._makeID('durationpicker-hour'),'class':'dpHour dpCol'});this.divMinute=new Element('div',{'id':this._makeID('durationpicker-minute'),'class':'dpMinute dpCol'});this.picker.insert(new Element('div',{'id':this._makeID('durationpicker-mask'),'class':'dpMask'}));this._insertHours();this._insertMinute();this.picker.insert(this.divHour);this.picker.insert(this.divMinute);this.hide();$(document.body).insert(this.picker);},_insertHours:function(){for(var i=this.config.rangeHour[0];i<=this.config.rangeHour[1];i+=this.config.stepHour){this.divHour.insert(new Element('div').update(i));}},_insertMinute:function(){for(var i=this.config.rangeMinute[0];i<=this.config.rangeMinute[1];i+=this.config.stepMinute){this.divMinute.insert(new Element('div').update(Todoyu.Helper.twoDigit(i)));}},_remove:function(){var idPicker=this._makeID('durationpicker');if(Todoyu.exists(idPicker)){$(idPicker).remove();}},_observePicker:function(){var wheelEventName=Prototype.Browser.Gecko?'DOMMouseScroll':'mousewheel';this.picker.observe('click',this._onSelection.bindAsEventListener(this));this.divHour.observe(wheelEventName,this._onHourScroll.bindAsEventListener(this));this.divMinute.observe(wheelEventName,this._onMinuteScroll.bindAsEventListener(this));this.element.observe('click',this._onElementClick.bindAsEventListener(this));},_onSelection:function(event){var column=event.findElement('div.dpCol');var delay=0;if(column!==event.element()){var type=column.id.split('-').last();var value=Todoyu.Helper.intval(event.element().innerHTML);if(type=='hour'){this.setHour(value);}else{this.setMinute(value);}
delay=0.5;}
this.updateElement.bind(this).delay(delay);this.hide.bind(this).delay(delay);},_onElementClick:function(event){this.hide();},_onHourScroll:function(e){Event.stop(e);var hour=this.hour-Event.wheel(e)*this.config.stepHour;this.setHour(hour);},_onMinuteScroll:function(e){Event.stop(e);var minute=this.minute-Event.wheel(e)*this.config.stepMinute;this.setMinute(minute);},_keepInRange:function(value,range){if(value<range[0]){value=range[0];}
if(value>range[1]){value=range[1];}
return value;},_readDuration:function(){var value=$F(this.element);var dur={'hour':0,'min':0};if(value!==''){if(value.indexOf(':')===-1){dur.hour=Todoyu.Helper.intval(value);}else{var parts=value.split(':');if(parts.size()===2){dur.hour=Todoyu.Helper.intval(parts[0]);dur.min=Todoyu.Helper.intval(parts[1]);}}}
return dur;}});
Todoyu.Listing={config:{},init:function(name,update,size,offset,total){var url=update.split('/');this.config[name]={'name':name,'size':size,'offset':offset,'total':total,'url':{'ext':url[0],'controller':url[1],'action':url[2]}};},more:function(name,pagenum){var newOffset=this.config[name].offset+this.config[name].size;if(newOffset<this.config[name].total){this.extend(name,newOffset,pagenum);}},extend:function(name,offset,pagenum){var url=Todoyu.getUrl(this.config[name].url.ext,this.config[name].url.controller);var options={'parameters':{'action':this.config[name].url.action,'name':name,'offset':offset},'onComplete':this.onExtended.bind(this,name,offset)};$('extendlisting').remove();var target='paging-'+name+'-table-'+pagenum;Todoyu.Ui.append(target,url,options);},onExtended:function(name,offset,response){}};
Todoyu.Ext.project={PanelWidget:{},Headlet:{},init:function(){this.registerHooks();this.Portal.init();},registerHooks:function(){Todoyu.Hook.add('onProjectCreated',this.Project.Edit.onProjectCreated.bind(this.Project.Edit));},goToTaskInProject:function(idTask,idProject){var params={'task':idTask};if(!Object.isUndefined(idProject)){params.project=idProject;}
Todoyu.goTo('project','ext',params,'task-'+idTask);},toggleTaskTree:function(idProject){this.TaskTree.toggle();Todoyu.Helper.toggleImage('project-'+idProject+'-tasktreetoggle-image','assets/img/toggle_plus.png','assets/img/toggle_minus.png');},onTreeUpdate:function(response){this.ContextMenuTask.attach.bindAsEventListener(this.ContextMenuTask)();this.ContextMenuProject.attach.bindAsEventListener(this.ContextMenuProject)();if(response.getHeader('Todoyu-hash')){window.location.hash=response.getHeader('Todoyu-hash');}},attachContextMenu:function(){this.ContextMenuProject.attach();this.ContextMenuTask.attach();},highlightProjecttree:function(){Effect.Shake('panelwidget-projecttree');new Effect.Highlight('panelwidget-projecttree');},savePref:function(preference,value,idItem,onComplete){Todoyu.Pref.save('project',preference,value,idItem,onComplete);}};
Todoyu.Ext.project.Project={ext:Todoyu.Ext.project,getHeader:function(idProject){return $('project-'+idProject+'-header');},edit:function(idProject){if(Todoyu.getArea()!='project'){Todoyu.goTo('project','ext',{'action':'edit','project':idProject});}
this.hideDetails(idProject);this.ext.TaskTree.hide(idProject);this.Edit.createFormWrapDivs(idProject);this.Edit.loadForm(idProject);},remove:function(idProject){if(confirm('Do you want to delete the whole project and all of its tasks?')){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'remove','project':idProject},'onComplete':this.onRemoved.bind(this,idProject)};Todoyu.send(url,options);}},onRemoved:function(idProject){if(Todoyu.getArea()=='project'){this.ext.ProjectTaskTree.removeProject(idProject);this.ext.ProjectTaskTree.openFirstTab();this.removeProjectSubnaviItem(idProject);}else{$('project-'+idProject).fade();}
Todoyu.Hook.exec('onProjectDeleted',idProject);},removeProjectSubnaviItem:function(idProject){var subnavi=$('navi-main-list').down('li.itemProject').down('ul');if(!Object.isUndefined(subnavi)){var item=subnavi.down('li.itemProject'+idProject);if(!Object.isUndefined(item)){item.remove();}}},toggleDetails:function(idProject){var detailDiv=$('project-'+idProject+'-details');if(!detailDiv.visible()){if(detailDiv.empty()){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'details','project':idProject},'onComplete':this.onDetailsToggled.bind(this,idProject)};Todoyu.Ui.update(detailDiv,url,options);}
detailDiv.show();}else{detailDiv.hide();}
this.saveDetailsExpanded(idProject,detailDiv.visible());},onDetailsToggled:function(idProject,response){},saveDetailsExpanded:function(idProject,expanded){Todoyu.Pref.save('project','detailsexpanded',expanded?1:0,idProject,0);},hideDetails:function(idProject){Todoyu.Ui.hide('project-'+idProject+'-details');},showDetails:function(idProject){Todoyu.Ui.show('project-'+idProject+'-details');},addTask:function(idProject){if(Todoyu.getArea()!='project'){Todoyu.goTo('project','ext',{'action':'addtask','project':idProject});}
this.ext.Task.addTaskToProject(idProject);},addContainer:function(idProject){if(Todoyu.getArea()==='project'){this.ext.Task.addContainerToProject(idProject);}else{Todoyu.goTo('project','ext',{'action':'addcontainer','project':idProject});}},refresh:function(idProject){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'details','project':idProject}};var target='project-'+idProject+'-details';if(Todoyu.exists(target)){Todoyu.Ui.update(target,url,options);}},updateStatus:function(idProject,status){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'setstatus','project':idProject,'status':status},'onComplete':this.onStatusUpdated.bind(this,idProject,status)};Todoyu.send(url,options);},onStatusUpdated:function(idProject,status,response){this.refresh(idProject);this.setStatus(idProject,status);Todoyu.Hook.exec('onProjectSaved',idProject);},getStatus:function(idProject){var project=$('project-'+idProject);var statusBar=project.down('div.projectstatus')||project.down('span.headLabel');var statusClass=statusBar.classNames().grep(/bcStatus(\d)/).first();return statusClass.split('Status').last();},setStatus:function(idProject,status){var project=$('project-'+idProject);var statusBar=project.down('div.projectstatus')||project.down('span.headLabel');var oldStatus=this.getStatus(idProject);statusBar.replaceClassName('bcStatus'+oldStatus,'bcStatus'+status);}};
Todoyu.Ext.project.Headlet.QuickTask={ext:Todoyu.Ext.project,init:function(){Todoyu.Hook.add('QuickTaskSaved',this.onQuickTaskSaved.bind(this));},onButtonClick:function(event){this.add();},add:function(){this.ext.QuickTask.openPopup();},onQuickTaskSaved:function(idTask,idProject,response){if(Todoyu.getArea()=='project'){if(idProject==this.ext.ProjectTaskTree.getActiveProjectID()){this.ext.TaskTree.update();}}}};
Todoyu.Ext.admin={Headlet:{},PanelWidget:{},loadModule:function(module){var url=Todoyu.getUrl('admin','module');var options={'parameters':{'mod':module}};Todoyu.Ui.update('admin-content',url,options);}};
Todoyu.Ext.project.QuickCreateProject={onPopupOpened:function(){},save:function(form){tinyMCE.triggerSave();$(form).request({'parameters':{'action':'save'},onComplete:this.onSaved.bind(this)});return false;},onSaved:function(response){var error=response.hasTodoyuError();if(error){Todoyu.Headlet.QuickCreate.updatePopupContent(response.responseText);Todoyu.notifyError('Saving was not successful');}else{var idProject=response.getTodoyuHeader('idProject');Todoyu.Hook.exec('onProjectCreated',idProject);Todoyu.Hook.exec('onProjectSaved',idProject);Todoyu.Headlet.QuickCreate.closePopup();Todoyu.notifySuccess('Saving was successful');}}};
Todoyu.Ext.project.QuickCreateTask={onPopupOpened:function(){},save:function(form){tinyMCE.triggerSave();$(form).request({'parameters':{'action':'save'},onComplete:this.onSaved.bind(this)});},onSaved:function(response){var idProject=response.getTodoyuHeader('idProject');var idTask=response.getTodoyuHeader('idTask');var idTaskOld=response.getTodoyuHeader('idTaskOld');if(response.hasTodoyuError()){Todoyu.Headlet.QuickCreate.updatePopupContent(response.responseText);Todoyu.notifyError('Saving was not successful');}else{Todoyu.Hook.exec('onTaskSaved',idTask);if(Todoyu.getArea()=='project'){if(idProject==Todoyu.Ext.project.ProjectTaskTree.getActiveProjectID()){Todoyu.Ext.project.TaskTree.update();}}
Todoyu.Popup.close('quickcreate');Todoyu.notifySuccess('Saving was successful');}}};
Todoyu.Ext.sysmanager={PanelWidget:{}};
Todoyu.Ext.sysmanager.QuickCreateRole={onPopupOpened:function(){},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('');Todoyu.Headlet.QuickCreate.updatePopupContent(response.responseText);}else{var idRole=response.getTodoyuHeader('idRole');Todoyu.Hook.exec('onRoleSaved',idRole);Todoyu.Popup.close('quickcreate');Todoyu.Ext.sysmanager.RightsEditor.updateEditor();Todoyu.notifySuccess('');}}};
Todoyu.Ext.loginpage={PanelWidget:{},Headlet:{},fieldUsername:'login-field-username',fieldPassword:'login-field-password',fieldRemain:'login-field-loginremain',elStatus:'formElement-login-field-status-inputbox',init:function(){if(Todoyu.getArea()==='loginpage'){this.observeForm();this.observePasswordField();this.focusField();}},focusField:function(){if($F(this.fieldUsername)===''){$(this.fieldUsername).focus();}else{$(this.fieldPassword).focus();}},observeForm:function(){$('login-form').observe('submit',this.onFormSubmit.bind(this));},observePasswordField:function(){$('login-field-password').observe('keyup',this.onPasswordEnter.bind(this));$('login-field-password').observe('change',this.onPasswordEnter.bind(this));},onPasswordEnter:function(event){$('login-field-passhash').value=this.getHashedPassword();},onFormSubmit:function(event){event.stop();this.submitForm();return false;},submitForm:function(){if(this.checkFieldsNotEmpty()){this.displayVerifying();var url=Todoyu.getUrl('loginpage','ext');var options={'parameters':{'action':'login','username':$F(this.fieldUsername),'passhash':this.getHashedPassword(),'remain':this.isRemainLoginChecked()},'onComplete':this.onLoginRequested.bind(this)};Todoyu.send(url,options);}},getHashedPassword:function(){return hex_md5($F(this.fieldPassword));},isRemainLoginChecked:function(){return $(this.fieldRemain).checked===true;},checkFieldsNotEmpty:function(){if($F(this.fieldUsername)===''){alert('Please enter your username');$(this.fieldUsername).focus();return false;}
if($F(this.fieldPassword)===''){alert('Please enter your password');$(this.fieldPassword).focus();return false;}
return true;},onLoginRequested:function(response){var status=response.responseJSON;if(status.success){this.displayLoginSuccess();location.href=status.redirect;}else{this.displayLoginError(status.message);$(this.fieldPassword).select();}},displayVerifying:function(){$(this.elStatus).update('&nbsp; Verifying username and password').insert({'top':'<img src="core/assets/img/ajax-loader.png"/>'});$(this.elStatus).addClassName('notification');},displayLoginSuccess:function(){$(this.elStatus).update('Login OK').insert({'top':'<span class="icon"></span>'});$(this.elStatus).removeClassName('failure');$(this.elStatus).addClassName('success');},displayLoginError:function(message){$(this.elStatus).update(message).insert({'top':'<span class="icon"></span>'});$(this.elStatus).addClassName('failure');},logout:function(){var url=Todoyu.getUrl('loginpage','ext');var options={'parameters':{'action':'logout'},'onComplete':this.onLoggedOut.bind(this)};Todoyu.send(url,options);},onLoggedOut:function(response){location.search='';}};
Todoyu.Ext.portal={PanelWidget:{},Headlet:{},showTask:function(idTask,idProject){var task='task-'+idTask;if(Todoyu.Ui.isVisible(task)){$(task).scrollToElement();Todoyu.Ui.twinkle(task);}else{Todoyu.Ext.project.goToTaskInProject(idTask,idProject);}},expandSubtaskContainers:function(idTask){var task=$('task-'+idTask);var container=task.up('.subtasks');var idParts,idCTask;while(container){idParts=container.id.split('-');idCTask=idParts[1];Todoyu.Ext.project.TaskTree.openSubtasks(idCTask);container=$('task-'+idCTask).up('.subtasks');}},savePref:function(action,value,idItem,onComplete){Todoyu.Pref.save('portal',action,value,idItem,onComplete);}};
Todoyu.Ext.calendar={PanelWidget:{},Headlet:{},createEventObserverElements:[],showEventQuickinfoObservedElements:[],showHolidayQuickinfoObservedElements:[],updateEventObserverElements:[],calOptions:{weekdaystart:1,yearprev:'&laquo;&laquo;',yearnext:'&raquo;&raquo;'},init:function(){},initCalendar:function(fullHeight){this.CalendarBody.init(fullHeight);this.installGeneralObservers();this.installBodyObservers();this.addHooks();},addHooks:function(){Todoyu.Hook.add('onEventSaved',this.refresh.bind(this));Todoyu.Hook.add('eventtype',this.Event.Edit.checkHideField.bind(this.Event.Edit));},installGeneralObservers:function(){Todoyu.PanelWidget.observe('calendar',this.onDateChanged.bind(this));Todoyu.PanelWidget.observe('staffselector',this.onStaffSelectionChanges.bind(this));Todoyu.PanelWidget.observe('eventtypeselector',this.onEventTypeSelectionChanges.bind(this));Todoyu.Hook.add('onEventSaved',this.onEventSaved.bind(this));},installBodyObservers:function(){this.installQuickinfos();this.installEventObservers();this.CalendarBody.installObserversCreateEvent();},installQuickinfos:function(){this.QuickInfoBirthday.install();this.QuickInfoEvent.install();this.QuickInfoHoliday.install();},uninstallBodyObservers:function(){this.uninstallEventObservers();},installEventObservers:function(el){this.Event.installObservers();},uninstallEventObservers:function(){},getDate:function(){return this.PanelWidget.Calendar.getDate();},setDate:function(date){this.PanelWidget.Calendar.setDate(date,true);},getTime:function(){return this.PanelWidget.Calendar.getTime();},setTime:function(time,noExternalUpdate){this.PanelWidget.Calendar.setTime(time,noExternalUpdate);},getDayString:function(){return Todoyu.Time.getDateString(this.getTime())},getDayStart:function(){return Todoyu.Time.getDayStart(this.getTime());},getWeekStart:function(){return Todoyu.Time.getWeekStart(this.getTime());},getActiveTab:function(){return this.Tabs.getActive();},setActiveTab:function(tab){this.Tabs.setActive(tab);},beforeUpdate:function(){this.uninstallBodyObservers();},afterUpdate:function(){this.installBodyObservers();this.CalendarBody.reInit();},onDateChanged:function(widgetName,update){this.show(null,update.date);},onStaffSelectionChanges:function(widgetName,persons){this.refresh();},onEventTypeSelectionChanges:function(widgetName,eventTypes){this.refresh();},onEventSaved:function(idEvent){if(Todoyu.getArea()==='calendar'){this.refresh();}},onEventClick:function(event){var idEvent=event.findElement('div').id.split('-').last();this.Event.updateEvent(idEvent);},onCalendarBodyUpdated:function(response){this.afterUpdate();},updateCalendarBody:function(url,options){this.beforeUpdate();Todoyu.Ui.update('calendar-body',url,options);},refresh:function(){this.show(null,null);},show:function(tab,date){this.Tabs.closeSpecialTabs();this.showCalendar();Todoyu.QuickInfo.hide();if(!Object.isString(tab)){tab=this.getActiveTab();}
this.setActiveTab(tab);if(Object.isNumber(date)){this.setDate(date);}
var url=Todoyu.getUrl('calendar','calendar');var options={'parameters':{'action':'update','tab':this.getActiveTab(),'date':this.getDayString()},'onComplete':this.onCalendarBodyUpdated.bind(this)};this.updateCalendarBody(url,options);},setTitle:function(title){this.Navi.setTitle(title);},addEvent:function(time){this.Event.Edit.open(0,time);},savePref:function(action,value,idItem,onComplete){Todoyu.Pref.save('calendar',action,value,idItem,onComplete);},hideCalendar:function(){$('calendar').hide();},showCalendar:function(){$('calendar').show();}};
Todoyu.Ext.calendar.QuickCreateEvent={onPopupOpened:function(){},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving of event failed');Todoyu.Popup.setContent('quickcreate',response.responseText);}else{var idEvent=response.getTodoyuHeader('idEvent');Todoyu.Hook.exec('onEventSaved',idEvent);Todoyu.Popup.close('quickcreate');Todoyu.notifySuccess('Event Saved');}},onEventTypeChange:function(event,time){var eventType=$F('quickevent-field-eventtype');var allFields=$('quickcreateevent-form').select('div.fElement');var fieldsToHide=[];allFields.invoke('show');var allFieldNames=allFields.collect(function(field){return field.id.replace('formElement-quickevent-field-','');});var checkHooks=Todoyu.Hook.get('eventtype');allFieldNames.each(function(checkHooks,fieldsToHide,eventType,fieldname){checkHooks.each(function(fieldsToHide,fieldname,eventType,hook){if(hook(fieldname,eventType)){fieldsToHide.push(fieldname);return;}}.bind(this,fieldsToHide,fieldname,eventType));}.bind(this,checkHooks,fieldsToHide,eventType));fieldsToHide.each(this.hideField,this);},hideField:function(fieldname){var field='formElement-quickevent-field-'+fieldname;if(Todoyu.exists(field)){$(field).hide();}}};
Todoyu.Ext.timetracking={PanelWidget:{},Headlet:{},_callbacks:{'toggle':[],'clock':[]},task:{},trackedTime:0,trackingTime:0,init:function(){this.QuickTask.init();},initWithoutTask:function(){this.Task.init();this.PageTitle.init();},initWithTask:function(taskJSON,trackedTime,trackingTime){this.task=taskJSON;this.trackedTime=trackedTime;this.trackingTime=trackingTime;this.initWithoutTask();this.start(this.getTaskID(),true);},start:function(idTask,noRequest){if(noRequest===true){this.Clock.start();}else if(this.isTracking()){this.Clock.stop();this.sendTrackRequest(idTask,false,this.onStoppedBeforeStart.bind(this));}else{this.sendTrackRequest(idTask,true);}},stop:function(){this.removeAllRunningStyles();this.sendTrackRequest(this.task.id,false);},sendTrackRequest:function(idTask,start,onComplete){var url=Todoyu.getUrl('timetracking','track');var options={'parameters':{'action':start?'start':'stop','task':idTask},'onComplete':this.onTrackingRequestSended.bind(this,idTask,start,onComplete)};Todoyu.send(url,options);},onStoppedBeforeStart:function(idTask,started,response){this.sendTrackRequest(idTask,true);},onTrackingRequestSended:function(idTask,started,onComplete,response){if(started){this.task=response.getTodoyuHeader('taskData');this.trackedTime=Todoyu.Helper.intval(response.getTodoyuHeader('trackedTime'));this.trackingTime=0;this.fireStartCallbacks();this.Clock.start();}else{this.fireStopCallbacks();this.Clock.stop();this.reset();}
if(typeof onComplete==='function'){onComplete.call(this,idTask,started,response);}},fireStartCallbacks:function(){this._callbacks.toggle.each(function(func){func(this.getTaskID(),true);}.bind(this));},fireStopCallbacks:function(){this._callbacks.toggle.each(function(func){func(this.getTaskID(),false);}.bind(this));},toggle:function(idTask){if(this.isTrackingTask(idTask)){this.stop();}else{this.start(idTask);}},isTracking:function(){return this.task.id>0;},isTrackingTask:function(idTask){return this.getTaskID()==idTask;},registerToggleCallback:function(func){this._callbacks.toggle.push(func);},registerClockCallback:function(func){this._callbacks.clock.push(func);},fireClockCallbacks:function(){this._callbacks.clock.each(function(func){func(this.task.id,this.trackingTime);}.bind(this));},reset:function(){this.task={};this.trackingTime=0;this.trackedTime=0;},onClockTick:function(){this.trackingTime++;this.fireClockCallbacks();},getTaskID:function(){return this.task.id;},getTaskData:function(key){return key===undefined?this.task:this.task.key;},getTimeParts:function(){return Todoyu.Time.getTimeParts(this.trackingTime);},getTimeFormatted:function(){return Todoyu.Time.timeFormatSeconds(this.trackingTime);},getTrackingTime:function(){return this.trackingTime;},getTrackedTime:function(){return this.trackedTime;},getTotalTime:function(){return this.getTrackedTime()+this.getTrackingTime();},getEstimatedTime:function(){return Todoyu.Helper.intval(this.task.estimated_workload);},hasEstimatedTime:function(){return this.getEstimatedTime()>0;},getPercentOfTime:function(){if(this.hasEstimatedTime()){return Math.round((this.getTotalTime()/this.getEstimatedTime())*100);}else{return 0;}},removeAllRunningStyles:function(){$$('div.running').invoke('removeClassName','running');}};
Todoyu.Ext.daytracks={PanelWidget:{},Headlet:{},init:function(){}};
Todoyu.Ext.search={PanelWidget:{},Headlet:{},init:function(){}};
Todoyu.Ext.bookmark={PanelWidget:{},Headlet:{},add:function(type,idItem,onComplete){var url=Todoyu.getUrl('bookmark','bookmark');var options={'parameters':{'action':'add','type':type,'item':idItem},'onComplete':onComplete};Todoyu.send(url,options);},remove:function(type,idItem,onComplete){var url=Todoyu.getUrl('bookmark','bookmark');var options={'parameters':{'action':'remove','type':type,'item':idItem},'onComplete':onComplete};Todoyu.send(url,options);},start:function(idTask){if(idTask>0){Todoyu.Ext.timetracking.Task.start(idTask);}},stop:function(idTask){if(idTask>0){Todoyu.Ext.timetracking.Task.stop(idTask);}}};
Todoyu.Ext.contact={PanelWidget:{},Headlet:{},init:function(){},onTabSelect:function(event,tab){this[tab.capitalize()].showList(Todoyu.Ext.contact.PanelWidget.ContactSearch.getValue());},updateContent:function(url,options){Todoyu.Ui.updateContent(url,options);},changeType:function(type){Todoyu.Tabs.setActive('contact',type);objName=type.capitalize();this[objName].showList(Todoyu.Ext.contact.PanelWidget.ContactSearch.getValue());}};
Todoyu.Ext.contact.QuickCreateCompany={onPopupOpened:function(){},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.Headlet.QuickCreate.updatePopupContent(response.responseText);Todoyu.notifyError('Saving company record failed');}else{var idCompany=response.getTodoyuHeader('idCompany');Todoyu.Hook.exec('onCompanySaved',idCompany);Todoyu.Headlet.QuickCreate.closePopup();Todoyu.notifySuccess('Company Saved');if(Todoyu.getArea()=='contact'){Todoyu.Ext.contact.Company.showList();}}}};
Todoyu.Ext.comment={PanelWidget:{},togglePublic:function(idComment){var url=Todoyu.getUrl('comment','task');var options={'parameters':{'action':'togglepublic','comment':idComment},'onComplete':this.onToggledPublic.bind(this,idComment)};Todoyu.send(url,options);},onToggledPublic:function(idComment,response){$('task-comment-'+idComment).toggleClassName('isPublic');$('public-trigger-'+idComment).toggleClassName('comment-public');},setSeenStatus:function(idComment,idPerson){var url=Todoyu.getUrl('comment','task');var options={'parameters':{'action':'seen','comment':idComment},'onComplete':this.onSeenStatusSet.bind(this,idComment,idPerson)};Todoyu.send(url,options);},onSeenStatusSet:function(idComment,idPerson,response){$('comment-'+idComment+'-seenstatus').remove();$('comment-personfeedback-'+idComment+'-'+idPerson).removeClassName('commentperson-unapproved');if(Todoyu.getArea()==='portal'&&Todoyu.exists('portal-tab-feedback')){var numFeedbacks=response.getTodoyuHeader('feedback');var labelElement=$('portal-tab-feedback').down('span.labeltext');labelElement.update(labelElement.innerHTML.replace(/\(\d\)/,'('+numFeedbacks+')'));}},remove:function(idComment){if(!confirm('Do you really want to delete this comment?')){return false;}
var url=Todoyu.getUrl('comment','comment');var options={'parameters':{'action':'delete','comment':idComment},'onComplete':Todoyu.Ext.comment.Edit.onRemoved.bind(this)};Todoyu.send(url,options);Effect.Fade($('task-comment-'+idComment),{'duration':0.5,'from':1,'to':0});},addTaskComment:function(idTask){Todoyu.Ext.project.Task.showDetails(idTask,'comment',this.onTaskCommentTabLoaded.bind(this));},onTaskCommentTabLoaded:function(idTask,tab,response){if(!Todoyu.exists('task-'+idTask+'-commentform-0')){this.edit(idTask,0);}},setTabLabel:function(idTask,label){$('task-'+idTask+'-tab-comment-label').select('.labeltext').first().update(label);},checkSortingIsDesc:function(idTask){var elementID='task-'+idTask+'-comments';var isDesc=false;if(elementID){isDesc=$(elementID).hasClassName('desc');}
return isDesc;},toggleLog:function(idComment){var logDiv=$('task-comment-log-'+idComment+'-details');if(!logDiv.visible()){if(logDiv.empty()){var url=Todoyu.getUrl('comment','comment');var options={'parameters':{'action':'log','comment':idComment},'onComplete':Todoyu.Ext.comment.onLogToggled.bind(this)};Todoyu.Ui.update(logDiv,url,options);}
logDiv.show();}else{logDiv.hide();}
this.updateToggleLogIcon(idComment);},onLogToggled:function(idComment,response){},updateToggleLogIcon:function(idComment){Todoyu.Ui.updateToggleIcon('task-comment-log-',idComment);},toggleSorting:function(idTask){var sortingIsDesc=this.checkSortingIsDesc(idTask);var desc=sortingIsDesc?0:1;Todoyu.Ext.comment.List.refresh(idTask,desc);},add:function(idTask){this.removeForms(idTask);var url=Todoyu.getUrl('comment','comment');var options={'parameters':{'action':'add','task':idTask},'insertion':'after','onComplete':this.onAdd.bind(this,idTask)};var target='task-'+idTask+'-comment-commands';Todoyu.Ui.update(target,url,options);},onAdd:function(idTask,response){},edit:function(idTask,idComment){var url=Todoyu.getUrl('comment','comment');var options={'parameters':{'action':'edit','task':idTask,'comment':idComment},'onComplete':this.onEdit.bind(this,idTask,idComment)};var target='task-comment-'+idComment+'-text';Todoyu.Ui.update(target,url,options);},onEdit:function(idTask,idComment,response){$('task-'+idTask+'-commentform-'+idComment).removeClassName('taskOptionBlock');},removeForms:function(idTask){$('task-'+idTask+'-tabcontent-comment').select('.commentform').invoke('remove');}};
Todoyu.Ext.profile={PanelWidget:{},Headlet:{},loadModule:function(module){var url=Todoyu.getUrl('profile','ext');var options={'parameters':{'action':'module','module':module},'onComplete':this.onModuleLoaded.bind(this,module)};Todoyu.Ui.updateContent(url,options);},onModuleLoaded:function(module,response){},setContent:function(content){Todoyu.Ui.setContentBody(content);}};
Todoyu.Ext.assets={PanelWidget:{},Headlet:{},download:function(idAsset){var params={'action':'download','asset':idAsset};Todoyu.goTo('assets','asset',params);},downloadSelection:function(idTask){var selectedAssets=this.List.getSelectedAssets(idTask);if(selectedAssets.size()===0){Todoyu.notifyError('Please select at least one file',3);}else if(selectedAssets.size()===1){Todoyu.notifyInfo('You only selected one file -> normal file download',3);this.download(selectedAssets.first());}else{Todoyu.notifyInfo('The selected files have been packed into an archive for download',3);var params={'action':'download','task':idTask,'assets':selectedAssets.join(',')};Todoyu.goTo('assets','zip',params);}},remove:function(idAsset){if(confirm('Do you really want to delete this file?')){var url=Todoyu.getUrl('assets','asset');var options={'parameters':{'action':'delete','asset':idAsset},'onComplete':this.onRemoved.bind(this,idAsset)};Todoyu.send(url,options);}},onRemoved:function(idAsset,response){Effect.Fade('asset-'+idAsset);var idTask=response.getTodoyuHeader('idTask');var label=response.getTodoyuHeader('tabLabel');this.setTabLabel(idTask,label);this.updateTab(idTask);},toggleVisibility:function(idAsset){var url=Todoyu.getUrl('assets','asset');var options={'parameters':{'action':'togglevisibility','asset':idAsset}};Todoyu.send(url,options);$('asset-'+idAsset+'-icon-public').toggleClassName('not');},updateTab:function(idTask){var url=Todoyu.getUrl('assets','tasktab');var options={'parameters':{'action':'tab','task':idTask}};var target='task-'+idTask+'-tabcontent-assets';Todoyu.Ui.update(target,url,options);},setTabLabel:function(idTask,label){$('task-'+idTask+'-tab-assets-label').select('.labeltext').first().update(label);},toggleList:function(idTask){this.List.toggle(idTask);}};
Todoyu.Ext.sysmanager.Rights={ext:Todoyu.Ext.sysmanager,onTabClick:function(event,tab){var url=Todoyu.getUrl('sysmanager','rights');var options={'parameters':{'action':'tab','tab':tab},'onComplete':this.onTabLoaded.bind(this,tab)};Todoyu.Ui.updateContentBody(url,options);},onTabLoaded:function(tab,response){}};
Todoyu.Ext.timetracking.Task={ext:Todoyu.Ext.timetracking,init:function(){this.registerClockCallbacks();},start:function(idTask){this.ext.start(idTask);},stop:function(idTask){this.ext.stop();},registerClockCallbacks:function(){this.ext.registerToggleCallback(this.onClockToggle.bind(this));this.ext.registerClockCallback(this.onClockTick.bind(this));},onClockToggle:function(idTask,start){if(start){this.setRunningStyle(idTask,true);Todoyu.Ext.project.Task.setStatus(idTask,3);}else{this.setRunningStyle(idTask,false);if(this.isTaskTrackingTabLoaded(idTask)){this.updateTab(idTask);}}},onClockTick:function(idTask,time){var el=$('task-'+idTask+'-timetrack-currentsession');if(el){el.update(this.ext.getTimeFormatted());}},isTaskTrackingTabLoaded:function(idTask){return Todoyu.exists('task-'+idTask+'-tabcontent-timetracking');},setRunningStyle:function(idTask,running){if(Todoyu.exists('task-'+idTask)){if(running){$('task-'+idTask).addClassName('running');}else{$('task-'+idTask).removeClassName('running');}
this.updateTab(idTask);}},updateTab:function(idTask){var url=Todoyu.getUrl('timetracking','tasktab');var options={'parameters':{'action':'update','task':idTask}};var target='task-'+idTask+'-tabcontent-timetracking';if(Todoyu.exists(target)){Todoyu.Ui.update(target,url,options);}},updateTrackList:function(idTask){var url=Todoyu.getUrl('timetracking','tasktab');var options={'parameters':{'action':'tracklist','task':idTask}};var target='task-'+idTask+'-timetracks';Todoyu.Ui.update(target,url,options);},updateTabControl:function(idTask){var url=Todoyu.getUrl('timetracking','tasktab');var options={'parameters':{'action':'control','task':idTask}};var target='task-'+idTask+'-timetrack-control';if(Todoyu.exists(target)){Todoyu.Ui.update(target,url,options);}},editTrack:function(idTask,idTrack){var url=Todoyu.getUrl('timetracking','tasktab');var options={'parameters':{'action':'edittrack','track':idTrack},'onComplete':this.onEditFormLoaded.bind(this,idTask,idTrack)};var target='task-'+idTask+'-track-'+idTrack;Todoyu.Ui.update(target,url,options);},onEditFormLoaded:function(idTask,idTrack,response){$('timetrack-'+idTrack+'-field-workload-tracked').select();},saveTrack:function(idTask,idTrack){$('timetrack-'+idTrack+'-form').request({'parameters':{'action':'updatetrack'},'onComplete':this.onTrackSaved.bind(this,idTask,idTrack)});},onTrackSaved:function(idTask,idTrack,response){this.updateTrackContent(idTask,idTrack,response.responseText);var tracks=$('task-'+idTask+'-timetracks').select('li');tracks.each(function(item,index){item[index%2?'removeClassName':'addClassName']('odd');});},cancelTrackEditing:function(idTask,idTrack){this.updateTrack(idTask,idTrack);},updateTrackContent:function(idTask,idTrack,tabContent){$('task-'+idTask+'-track-'+idTrack).replace(tabContent);},toggleList:function(idTask){Todoyu.Ui.toggle('task-'+idTask+'-timetracks');},updateTrack:function(idTask,idTrack){var url=Todoyu.getUrl('timetracking','tasktab');var options={'parameters':{'action':'trackcontent','idTrack':idTrack}};var target='task-'+idTask+'-track-'+idTrack;Todoyu.Ui.replace(target,url,options);}};
Todoyu.Ext.daytracks.History={popup:null,popupID:'daytracksHistory',showDetails:false,getPopup:function(){return Todoyu.Popup.getPopup(this.popupID);},show:function(){var url=Todoyu.getUrl('daytracks','history');var options={'parameters':{'action':'history'}};var idPopup='popup-daytracks-history';var title='Time Tracking Journal';this.popup=Todoyu.Popup.openWindow(this.popupID,title,420,url,options);},update:function(){var date=this.getSelectedDate();var url=Todoyu.getUrl('daytracks','history');var options={'parameters':{'action':'history','year':date.year,'month':date.month,'details':this.showDetails?1:0}};Todoyu.Popup.updateContent(this.popupID,url,options);},getSelectedDate:function(){var range=$F('daytracks-history-selector').split('-');return{'year':range[0],'month':range[1]};},toggleDetails:function(){this.showDetails=!this.showDetails;this.update();}};
Todoyu.Ext.search.FilterWidget={ext:Todoyu.Ext.search,timeout:{},addWidgetToFilterArea:function(select){var chosenWidget=$(select).getValue();select.options[0].selected=true;var numOfWidget=this.detectNumOfWidget(chosenWidget);var url=Todoyu.getUrl('search','filtercontroller');var options={'parameters':{'choosenWidget':chosenWidget,'numOfWidget':'new'+numOfWidget,'action':'addfilterwidget','filterID':Todoyu.Ext.search.Filter.FilterID},'onComplete':function(response){var WidgetID=chosenWidget.split('_')[1]+'-new'+numOfWidget;if($(WidgetID)){Todoyu.Ext.search.Filter.addFilterWidgetToList($(WidgetID));this.initAutocompletionSingle(WidgetID);this.initNegationSingle(WidgetID);}}.bind(this)};Todoyu.Ui.insert('widget-area',url,options);},removeWidgetFromFilterArea:function(widgetID){$(widgetID).remove();this.ext.Filter.removeConditionFromFilter(widgetID);},detectNumOfWidget:function(classNameOfWidget){var className=classNameOfWidget.split('_');if($('widget-area').select('.'+className[1])){return $('widget-area').select('.'+className[1]).length;}else{return 0;}},initAutocompletion:function(){var foundAutocompleter=$('widget-area').select('.autocomplete');if(foundAutocompleter.length>0){foundAutocompleter.each(function(autocompleter){this.setUpAutocompleter(autocompleter.id);}.bind(this));}},initAutocompletionSingle:function(elementID){var autocompletion=$(elementID).select('.autocomplete');if(autocompletion.length>0){this.setUpAutocompleter(autocompletion[0].id);}},initNegation:function(){var foundNegations=$('widget-area').select('.negation');if(foundNegations.length>0){foundNegations.each(function(negation){this.setUpNegation(negation.id);}.bind(this));}},initNegationSingle:function(elementID){var negation=$(elementID).select('.negation');if(negation.length>0){this.setUpNegation(negation[0].id);}},setUpAutocompleter:function(autoCompleterID){var url=Todoyu.getUrl('search','filtercontroller');widgetID=this.filterWidgetIDFromAutoCompleterID(autoCompleterID);var options={parameters:'&action=autocompletion&completionID='+widgetID+'&filtertype='+Todoyu.Ext.search.Filter.FilterType,paramName:'sword',minChars:2,afterUpdateElement:Todoyu.Ext.search.FilterWidget.handleAutocompleteInput};var autocompleter=new Ajax.Autocompleter(autoCompleterID,autoCompleterID+'-suggestions',url,options);},setUpNegation:function(negationID){$(negationID).observe('click',Todoyu.Ext.search.Filter.setNegation.bind(Todoyu.Ext.search.Filter,negationID));},filterWidgetIDFromAutoCompleterID:function(autocompleterID){splittedID=autocompleterID.split('-');return splittedID[2]+'-'+splittedID[3];},handleAutocompleteInput:function(elementText,elementLi){var hiddenElement=$('widget-autocompleter-'+elementLi.parentNode.id.replace(/ul/,'hidden'));hiddenElement.setValue(elementLi.id);Todoyu.Ext.search.Filter.setValueToCondition(hiddenElement,elementLi.parentNode.id.replace(/-ul/,''));},onTextEntered:function(input){var name=$(input).up('div.filterWidget').id;var value=$F(input);if(this.timeout[name]){window.clearTimeout(this.timeout[name]);delete this.timeout[name];}
this.ext.Filter.setConditionValue(name,value);this.timeout[name]=this.ext.Filter.updateResults.bind(this.ext.Filter).delay(0.4);}};
Todoyu.Ext.bookmark.Task={ext:Todoyu.Ext.bookmark,add:function(idTask){this.ext.add('task',idTask,this.onAdded.bind(this,idTask));},onAdded:function(idTask,response){this.refreshPanelWidget();},remove:function(idTask){this.ext.remove('task',idTask,this.onRemoved.bind(this,idTask));},onRemoved:function(idTask,response){this.refreshPanelWidget();},refreshPanelWidget:function(){if(Todoyu.PanelWidget.isLoaded('bookmark','TaskBookmarks')){this.ext.PanelWidget.TaskBookmarks.refresh();}}};
Todoyu.Ext.contact.Autocomplete={onRegionAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No region of this name was found. Did you select the correct country?');}},onPersonAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No person of this name was found.');}},onCompanyAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No company of this name was found.');}}};
Todoyu.Ext.contact.PanelWidget.ContactSearch={ext:Todoyu.Ext.contact,id:'contactSearch',input:null,form:null,clearButton:null,delayTime:0.5,timeout:null,init:function(){this.input=$('panelwidget-'+this.id+'-sword');this.form=$('panelwidget-'+this.id+'-form');this.clearButton=$('panelwidget-'+this.id+'-clear');this.installObservers();this.toggleClearButton();},installObservers:function(){this.input.observe('keyup',this.onKeyup.bindAsEventListener(this));this.form.observe('submit',this.onFormSubmit.bindAsEventListener(this))},onKeyup:function(event){this.toggleClearButton();this.clearTimeout();this.timeout=this.search.bind(this).delay(this.delayTime);},onFormSubmit:function(event){event.stop();this.search();},getType:function(){return Todoyu.Tabs.getActive('contact-tabs').id.replace('contact-tab-','');},search:function(){this.toggleClearButton();var type=this.getType().capitalize();this.ext[type].showList(this.getValue());},getValue:function(){return $F(this.input);},toggleClearButton:function(){if(this.getValue().strip()===''){this.clearButton.hide();}else{this.clearButton.show();}},clearTimeout:function(){if(this.timeout!==null){window.clearTimeout(this.timeout);this.timeout=null;}},clear:function(){this.input.clear();this.toggleClearButton();this.search();}};
Todoyu.Ext.comment.List={refresh:function(idTask,desc){var url=Todoyu.getUrl('comment','task');var target='task-'+idTask+'-tabcontent-comment';var options={'parameters':{'action':'list','task':idTask,'desc':desc}};Todoyu.Ui.update(target,url,options);},toggle:function(idTask){Todoyu.Ui.toggle('task-'+idTask+'-comments');}};
Todoyu.Ext.profile.General={ext:Todoyu.Ext.profile,onTabClick:function(event,tabKey){this.loadTab(tabKey);},loadTab:function(tab){var url=Todoyu.getUrl('profile','general');var options={'parameters':{'action':'tab','tab':tab},'onComplete':this.onTabLoaded.bind(this,tab)};Todoyu.Ui.updateContentBody(url,options);},onTabLoaded:function(tab,respone){},saveMain:function(form){form.request({'parameters':{'action':'saveMain'},'onComplete':this.onMainSaved.bind(this)});},onMainSaved:function(response){Todoyu.notifySuccess('Settings Saved');setTimeout('location.reload()',1000)},savePassword:function(form){form.request({'parameters':{'action':'savePassword'},'onComplete':this.onPasswordSaved.bind(this)});},onPasswordSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Can\'t Change Password');this.ext.setContent(response.responseText);}else{Todoyu.notifySuccess('Password Changed');this.loadTab('password');}}};
Todoyu.Ext.project.Project.Edit={ext:Todoyu.Ext.project,createFormWrapDivs:function(idProject){var idDetails='project-'+idProject+'-details';var idData='project-'+idProject+'-data';if(!Todoyu.exists(idData)){var data=new Element('div',{'id':idData,'class':'data edit'});$(idDetails).insert({'top':data});}
$(idData).addClassName('edit');$(idDetails).show();},loadForm:function(idProject){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'edit','project':idProject},onComplete:this.onFormLoaded.bind(this,idProject)};var target='project-'+idProject+'-data';Todoyu.Ui.update(target,url,options);},onFormLoaded:function(idProject){Todoyu.Hook.exec('onProjectFormLoaded',idProject);},save:function(form){tinyMCE.triggerSave();$(form).request({'parameters':{'action':'save'},onComplete:this.onSaved.bind(this)});return false;},onProjectCreated:function(idProject){if(Todoyu.getArea()==='project'){this.ext.ProjectTaskTree.openProject(idProject);Todoyu.Ui.scrollToTop();}},onSaved:function(response){var idProject=response.getTodoyuHeader('idProject');var idProjectOld=response.getTodoyuHeader('idProjectOld');if(response.hasTodoyuError()){this.updateFormDiv(idProjectOld,response.responseText);Todoyu.notifyError('Saving was not successful');}else{this.ext.ProjectTaskTree.removeProject(idProjectOld);this.ext.ProjectTaskTree.openProject(idProject);Todoyu.Ui.scrollToTop();Todoyu.Hook.exec('onProjectSaved',idProject);Todoyu.notifySuccess('Saving was successful');}},updateFormDiv:function(idProject,formHTML){$('project-'+idProject+'-data').update(formHTML);},cancel:function(idProject){if(idProject===0){this.ext.ProjectTaskTree.removeProject(idProject);idProject=this.ext.ProjectTaskTree.getActiveProjectID();if(idProject!==false){this.ext.ProjectTaskTree.openProject(idProject);this.ext.ProjectTaskTree.moveTabToFront(idProject);}else{Todoyu.goTo('project');}}else{this.ext.Project.showDetails(idProject);this.ext.TaskTree.toggle(idProject);this.ext.Project.refresh(idProject);Todoyu.Ui.scrollToTop();}},onCompanyAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==='0'){Todoyu.notifyInfo('No customer of this name was found. You can only select customers already added in the contact module.');}},onPersonAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==='0'){Todoyu.notifyInfo('No person of this name was found');}},onProjectleaderAutocomplete:function(response,autocompleter){this.onPersonAutocomplete(response,autocompleter);}};
Todoyu.Ext.project.Task={ext:Todoyu.Ext.project,edit:function(idTask){this.Edit.createFormWrapDivs(idTask);this.Edit.loadForm(idTask);},copy:function(idTask){var withSubtasks=false;if(this.hasSubtasks(idTask)){withSubtasks=confirm('Copy All Subtasks?')?1:0;}
var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'copy','task':idTask,'subtasks':withSubtasks},'onComplete':this.onCopied.bind(this,idTask)};Todoyu.send(url,options);this.highlight(idTask);if(withSubtasks){this.highlightSubtasks(idTask);}},onCopied:function(idTask,response){},cut:function(idTask){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'cut','task':idTask},'onComplete':this.onCut.bind(this,idTask)};Todoyu.send(url,options);this.highlight(idTask);this.highlightSubtasks(idTask);},onCut:function(idTask,response){},paste:function(idTask,mode){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'paste','task':idTask,'mode':mode},'onComplete':this.onPasted.bind(this,idTask,mode)};Todoyu.send(url,options);},onPasted:function(idTask,insertMode,response){var idTaskNew=response.getTodoyuHeader('idTask');var clipboardMode=response.getTodoyuHeader('clipboardMode');if(clipboardMode==='cut'){if(Todoyu.exists('task-'+idTaskNew+'-subtasks')){$('task-'+idTaskNew+'-subtasks').remove();}
if(Todoyu.exists('task-'+idTaskNew)){if(this.isSubtask(idTaskNew)){var idParent=this.getParentTaskID(idTaskNew);$('task-'+idTaskNew).remove();this.checkAndRemoveTriggerFromTask(idParent);}else{$('task-'+idTaskNew).remove();}}}
if(insertMode==='in'){if(Todoyu.exists('task-'+idTask+'-subtasks')){$('task-'+idTask+'-subtasks').insert({'bottom':response.responseText});this.ext.TaskTree.expandSubtasks(idTask);}else{this.refresh(idTask);this.ext.TaskTree.loadSubtasks(idTask,this.ext.TaskTree.toggleSubtaskTriggerIcon.bind(this,idTask));}}else if(insertMode==='before'){$('task-'+idTask).insert({'before':response.responseText});}else if(insertMode==='after'){var target=Todoyu.exists('task-'+idTask+'-subtasks')?'task-'+idTask+'-subtasks':'task-'+idTask;$(target).insert({'after':response.responseText});}
this.ext.ContextMenuTask.attach();this.highlight(idTaskNew);this.highlightSubtasks(idTaskNew);},pasteNotAllowed:function(){alert("You can\'t paste the task at this position!");},clone:function(idTask){var withSubtasks=false;if(this.hasSubtasks(idTask)){withSubtasks=confirm('Auch Unteraufgaben klonen?')?1:0;}
var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'clone','task':idTask,'subtasks':withSubtasks},'onComplete':this.onCloned.bind(this,idTask)};if(this.hasSubtasks(idTask)&&this.hasSubtaskContainer(idTask)){var target='task-'+idTask+'-subtasks';}else{var target='task-'+idTask;}
Todoyu.Ui.append(target,url,options);},onCloned:function(idSourceTask,response){var idTask=response.getTodoyuHeader('idTask');this.addContextMenu(idTask);this.highlight(idTask);this.highlightSubtasks(idTask);Todoyu.Hook.exec('taskcloned',idSourceTask,idTask);},remove:function(idTask,container){var confirmLabel=container===true?'Do you really want do delete this container?':'Do you really want do delete this task?';if(!confirm(confirmLabel)){return;}
var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'delete','task':idTask},'onComplete':this.onRemoved.bind(this,idTask)};Todoyu.send(url,options);Effect.BlindUp('task-'+idTask,{'duration':0.7});if(Todoyu.exists('task-'+idTask+'-subtasks')){Effect.BlindUp('task-'+idTask+'-subtasks',{'duration':0.3});}},onRemoved:function(idTask,response){Todoyu.Hook.exec('taskremoved',idTask);},scrollTo:function(idTask){$('task-'+idTask).scrollToElement();},highlight:function(idTask){if(Todoyu.exists('task-'+idTask)){new Effect.Highlight('task-'+idTask);}},highlightSubtasks:function(idTask){if(Todoyu.exists('task-'+idTask+'-subtasks')){new Effect.Highlight('task-'+idTask+'-subtasks');}},hasSubtasks:function(idTask){return Todoyu.exists('task-'+idTask+'-subtasks')||($('task-'+idTask+'-subtasks-trigger')&&$('task-'+idTask+'-subtasks-trigger').hasClassName('expandable'));},hasSubtaskContainer:function(idTask){return Todoyu.exists('task-'+idTask+'-subtasks');},hasParentTask:function(idTask){return $('task-'+idTask).up().hasClassName('subtasks');},getParentTaskID:function(idTask){var idParent=false;if(Todoyu.exists('task-'+idTask)){var subTaskContainer=$('task-'+idTask).up('.subtasks');if(subTaskContainer!==undefined){idParent=subTaskContainer.id.split('-')[1];}}
return idParent;},isSubtask:function(idTask){if(Todoyu.exists('task-'+idTask)){return $('task-'+idTask).up('.subtasks')!==undefined;}
return false;},checkAndRemoveTriggerFromParent:function(idTask){var idArray=$('task-'+idTask).up().id.split('-');var idParentTask=idArray[1];this.checkAndRemoveTriggerFromTask(idParentTask);},checkAndRemoveTriggerFromTask:function(idTask){if($('task-'+idTask+'-subtasks').select('div.task').size()<1){$('task-'+idTask+'-subtasks-trigger').removeClassName('expandable');}},updateStatus:function(idTask,status){var url=Todoyu.getUrl('project','task');var options={'parameters':{'task':idTask,'action':'setstatus','status':status},'onComplete':this.onStatusUpdated.bind(this,idTask,status)};Todoyu.send(url,options);},onStatusUpdated:function(idTask,status,response){Todoyu.Hook.exec('taskStatusUpdated',idTask,status);var statusNotAllowed=response.getTodoyuHeader('statusNotAllowed')==1;if(statusNotAllowed){Todoyu.notifyInfo('With the new status, the task is no longer visible for you.');Effect.BlindUp('task-'+idTask,{'duration':0.7});}else{if(this.isDetailsLoaded(idTask)){this.refresh(idTask);}else{this.setStatus(idTask,status);}}},getStatus:function(idTask){var htmlID='task-'+idTask+'-header';var statusIndex=0;if(Todoyu.exists(htmlID)){var classNames=$(htmlID).down('.headLabel').classNames();var statusClass=classNames.grep(/.*Status(\d)/).first();statusIndex=statusClass.split('Status').last();}
return statusIndex;},setStatus:function(idTask,status){var htmlID='task-'+idTask+'-header';if(Todoyu.exists(htmlID)){var headLabel=$(htmlID).down('.headLabel');var oldStatus=this.getStatus(idTask);headLabel.replaceClassName('bcStatus'+oldStatus);headLabel.addClassName('bcStatus'+status);}},refresh:function(idTask){var target='task-'+idTask;var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'get','task':idTask},'onComplete':this.onRefreshed.bind(this,idTask)};if(Todoyu.exists(target)){Todoyu.Ui.replace(target,url,options);}},onRefreshed:function(idTask,response){this.addContextMenu(idTask);},update:function(idTask,taskHtml){if(Todoyu.exists('task-'+idTask+'-subtasks')){$('task-'+idTask+'-subtasks').remove();}
$('task-'+idTask).replace(taskHtml);this.addContextMenu(idTask);},removeNewTaskContainer:function(){if(Todoyu.exists('task-0')){$('task-0').remove();}},addTaskToProject:function(idProject){this.removeNewTaskContainer();var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'addprojecttask','project':idProject},'onComplete':this.onProjectTaskAdded.bind(this)};if(Todoyu.exists('project-'+idProject+'-losttasks')){var target='project-'+idProject+'-losttasks';options.insertion='before';}else{var target='project-'+idProject+'-tasks';options.insertion='bottom';}
Todoyu.Ui.update(target,url,options);},onProjectTaskAdded:function(response){var idTask=response.getTodoyuHeader('idTask');this.addContextMenu(idTask);this.scrollTo(idTask);Todoyu.Hook.exec('onTaskEdit',idTask);},focusTitleField:function(idTask){$('task-'+idTask+'-field-title').focus();},addContainerToProject:function(idProject){this.removeNewTaskContainer();var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'addprojectcontainer','project':idProject},'onComplete':this.onProjectContainerAdded.bind(this)};var target='project-'+idProject+'-tasks';Todoyu.Ui.insert(target,url,options);},onProjectContainerAdded:function(response){var idContainer=response.getTodoyuHeader('idContainer');this.addContextMenu(idContainer);this.scrollTo(idContainer);},addSubTask:function(idTask){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'addsubtask','task':idTask},'onComplete':this.onSubTaskAdded.bind(this,idTask)};var target='task-'+idTask+'-subtasks';if(!Todoyu.exists(target)){this.createSubTaskContainer(idTask);}
Todoyu.Ui.insert(target,url,options);},onSubTaskAdded:function(idParentTask,response){var idTask=response.getHeader('Todoyu-idTask');this.showSubtasks(idParentTask);this.addContextMenu(idTask);this.scrollTo(idTask);},createSubTaskContainer:function(idTask){var idSubtaskContainer='task-'+idTask+'-subtasks';var idTaskContainer='task-'+idTask;if(!Todoyu.exists(idSubtaskContainer)){$(idTaskContainer).insert({'after':new Element('div',{'id':idSubtaskContainer,'class':'subtasks'})});}},addSubContainer:function(idTask){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'addsubcontainer','task':idTask},'onComplete':this.onSubContainerAdded.bind(this,idTask)};var target='task-'+idTask+'-subtasks';if(!Todoyu.exists(target)){this.createSubTaskContainer(idTask);}
Todoyu.Ui.insert(target,url,options);},onSubContainerAdded:function(idParentTask,response){var idContainer=response.getHeader('Todoyu-idContainer');this.addContextMenu(idContainer);this.showSubtasks(idParentTask);this.scrollTo(idContainer);},addContextMenu:function(idTask){this.ext.ContextMenuTask.attach();},setAcknowledged:function(event,idTask){Todoyu.Ui.stopEventBubbling(event);this.fadeAcknowledgeIcon(idTask);var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'acknowledge','task':idTask}};Todoyu.send(url,options);},fadeAcknowledgeIcon:function(idTask){var idElement='task-'+idTask+'-notacknowledged';if(Todoyu.Ui.isVisible(idElement)){$(idElement).fade();}},toggleDetails:function(idTask){if(this.isDetailsLoaded(idTask)){var details=$('task-'+idTask+'-details');details.toggle();this.saveTaskOpen(idTask,details.visible());this.onDetailsToggled(idTask,'');}else{this.loadDetails(idTask,'',this.onDetailsToggled.bind(this));}},onDetailsToggled:function(idTask,tab,response){this.refreshExpandedStyle(idTask);},refreshExpandedStyle:function(idTask){var task=$('task-'+idTask);if(this.isDetailsVisible(idTask)){task.addClassName('expanded');}else{task.removeClassName('expanded');}},isDetailsLoaded:function(idTask){return Todoyu.exists('task-'+idTask+'-details');},isDetailsVisible:function(idTask){var details='task-'+idTask+'-details';return Todoyu.exists(details)&&$(details).visible();},showDetails:function(idTask,tab,onComplete){if(this.isDetailsLoaded(idTask)){this.Tab.show(idTask,tab,onComplete);}else{var func=this.onDetailsShowed.bind(this);if(Object.isFunction(onComplete)){func=func.wrap(function(onComplete,callOriginal,idTask,tab,response){onComplete(idTask,tab,response);callOriginal(idTask,tab,response);}.bind(this,onComplete));}
this.loadDetails(idTask,tab,func);}},onDetailsShowed:function(idTask,tab,response){this.refreshExpandedStyle(idTask);this.Tab.show(idTask,tab);},showSubtasks:function(idTask){var idDiv='task-'+idTask+'-subtasks';var idTrigger='task-'+idTask+'-subtasks-trigger';if($(idDiv)){$(idDiv).show();}
if($(idTrigger)){if(!$(idTrigger).hasClassName('expandable')){$(idTrigger).addClassName('expandable');}
if(!$(idTrigger).hasClassName('expanded')){$(idTrigger).addClassName('expanded');}}},loadDetails:function(idTask,tab,onComplete){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'detail','task':idTask,'tab':tab},'onComplete':this.onDetailsLoaded.bind(this,idTask,tab,onComplete)};var target='task-'+idTask+'-header';this.fadeAcknowledgeIcon.delay(1,idTask);Todoyu.Ui.append(target,url,options);},onDetailsLoaded:function(idTask,tab,onComplete,response){Todoyu.callIfExists(onComplete,this,idTask,tab,response);},saveTaskOpen:function(idTask,open){var value=open?1:0;this.ext.savePref('taskopen',value,idTask);},isLoaded:function(idTask){return Todoyu.exists('task-'+idTask);}};
Todoyu.Ext.project.Task.Edit={ext:Todoyu.Ext.project,createFormWrapDivs:function(idTask){var idHeader='task-'+idTask+'-header';var idDetails='task-'+idTask+'-details';var idData='task-'+idTask+'-data';if(!Todoyu.exists(idDetails)){var details=new Element('div',{'id':idDetails,'class':'details edit'});var data=new Element('div',{'id':idData,'class':'data'});details.insert({'top':data});$(idHeader).insert({'after':details});}
$(idDetails).show();},loadForm:function(idTask){var url=Todoyu.getUrl('project','task');var options={parameters:{'action':'edit','task':idTask},'onComplete':this.onFormLoaded.bind(this,idTask)};var target='task-'+idTask+'-data';Todoyu.Ui.update(target,url,options);},onFormLoaded:function(idTask,response){this.ext.Task.scrollTo(idTask);Todoyu.Hook.exec('onTaskEdit',idTask);},save:function(form){tinyMCE.triggerSave();$(form).request({'parameters':{'action':'save','area':Todoyu.getArea()},onComplete:this.onSaved.bind(this)});},onSaved:function(response){var idTask=response.getTodoyuHeader('idTask');var idTaskOld=response.getTodoyuHeader('idTaskOld');if(response.hasTodoyuError()){this.updateFormDiv(idTask,response.responseText);Todoyu.notifyError('Saving was not successful');}else{this.ext.Task.update(idTaskOld,response.responseText);this.ext.Task.addContextMenu(idTask);Todoyu.Hook.exec('onTaskSaved',idTask);Todoyu.notifySuccess('Saving was successful');this.ext.Task.scrollTo(idTask);this.ext.Task.highlight.bind(this.ext.Task).delay(0.5,idTask);}},updateFormDiv:function(idTask,formHTML){$('task-'+idTask+'-formdiv').update(formHTML);},cancel:function(idTask){if(this.ext.Task.hasParentTask(idTask)&&idTask==0){this.ext.Task.checkAndRemoveTriggerFromParent(idTask);}
if(idTask==0){$('task-'+idTask).remove();}else{this.ext.Task.refresh(idTask);}},onParenttaskAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No task of this name or number was found.');}},onProjectAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No project of this title name was found.');}}};
Todoyu.Ext.project.Task.Tab={ext:Todoyu.Ext.project,onSelect:function(event,tabKey){var idParts=event.findElement('li').id.split('-');this.show(idParts[1],idParts[3]);},show:function(idTask,tabKey,onComplete){var tabContainer=this.buildTabID(idTask,tabKey);if(!Todoyu.exists(tabContainer)){this.createTabContainer(idTask,tabKey);this.load(idTask,tabKey,onComplete);}else{this.saveSelection(idTask,tabKey);Todoyu.callIfExists(onComplete,this,idTask,tabKey);}
this.activate(idTask,tabKey);},load:function(idTask,tabKey,onComplete){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'tabload','task':idTask,'tab':tabKey},'onComplete':this.onLoaded.bind(this,idTask,tabKey,onComplete)};var tabDiv=this.buildTabID(idTask,tabKey);Todoyu.Ui.update(tabDiv,url,options);},onLoaded:function(idTask,tabKey,onComplete){this.activate(idTask,tabKey);Todoyu.callIfExists(onComplete,this,idTask,tabKey);},isLoaded:function(idTask,tabKey){return Todoyu.exists('task-'+idTask+'-tabcontent-'+tabKey);},createTabContainer:function(idTask,tabKey){var loader=new Element('img',{'src':'assets/img/ajax-loader.png'});var spacer=new Element('p',{'style':'padding:50px;text-align:center'}).update(loader);var tabDiv=new Element('div',{'id':this.buildTabID(idTask,tabKey),'class':'tab'}).update(spacer);var tabContainer='task-'+idTask+'-tabcontent';$(tabContainer).insert({'top':tabDiv});},buildTabID:function(idTask,tabKey){return'task-'+idTask+'-tabcontent-'+tabKey;},activate:function(idTask,tabKey){this.hideAll(idTask);this.setVisible(idTask,tabKey);Todoyu.Tabs.setActive('task-'+idTask,tabKey);},saveSelection:function(idTask,tabKey){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'tabselected','idTask':idTask,'tab':tabKey}};Todoyu.send(url,options);},hideAll:function(idTask){this.getContainer(idTask).select('.tab').invoke('hide');},setVisible:function(idTask,tabKey){$(this.buildTabID(idTask,tabKey)).show();},getContainer:function(idTask){return $('task-'+idTask+'-tabcontainer');},getHeadID:function(idTask,tabKey){return'task-'+idTask+'-tabhead-'+tabKey;},getKeyFromID:function(idItem){return idItem.split('-').last();}};
Todoyu.Ext.sysmanager.Extensions={ext:Todoyu.Ext.sysmanager,showList:function(){this.showTab();this.activateTab('list');},showTab:function(extKey,tab,params){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'tabview','tab':tab,'extkey':extKey},'onComplete':this.onTabShowed.bind(this,extKey,tab,params)};if(typeof(params)==='object'){options.parameters=$H(options.parameters).merge(params).toObject();}
Todoyu.Ui.updateContent(url,options);},activateTab:function(tab){Todoyu.Tabs.setActive('extension',tab);},onTabShowed:function(extKey,tab,params){},onTabClick:function(event,tabKey){var extKey,tab;if(tabKey.indexOf('_')!==-1){var parts=tabKey.split('_');extKey=parts[0];tab=parts[1];}else{extKey='';tab=tabKey;}
this.showTab(extKey,tab);},install:function(extKey){if(confirm('Install Extension?')){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'install','extension':extKey},'onComplete':this.onInstalled.bind(this,extKey)};Todoyu.send(url,options);}},onInstalled:function(extKey,response){var extName=response.responseText;Todoyu.notifySuccess('Extension was installed successfully: '+extName);this.showList();},download:function(extKey){Todoyu.goTo('sysmanager','extensions',{'action':'download','extension':extKey});},showRights:function(extKey){location.href='index.php?ext=admin&mod=rights&extension='+extKey;},remove:function(extKey){if(confirm('Remove extension (all files) from server?')){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'remove','extension':extKey},'onComplete':this.onRemoved.bind(this,extKey)};Todoyu.send(url,options);}},onRemoved:function(extKey,response){if(response.hasTodoyuError()){Todoyu.notifyError('Removing extension failed')}else{Todoyu.notifySuccess('Extension was sucessfully removed from server');}
this.Install.showList();}};
Todoyu.Ext.sysmanager.RightsEditor={require:{},init:function(){this.observeForm();},initMatrix:function(require){require=Object.isArray(require)?{}:require;this.require=$H(require);this.initDependents();this.observeRightsForm();var noRights=$$('td.roleRight').length==0;$$('button.save').each(function(element){$(element).disabled=noRights;});},observeForm:function(){$('rightseditor-form').observe('change',this.onFormChange.bindAsEventListener(this));$('rightseditor-field-roles').observe('change',this.onRoleChange.bindAsEventListener(this));},onFormChange:function(event){this.updateMatrix();},onRoleChange:function(event){var roles=this.getRoles();if(roles.size()===0){$('rightseditor-field-roles').select('option').each(function(option){option.selected=true;});}},updateEditor:function(){Todoyu.Ui.updatePage('admin','ext');},updateMatrix:function(){$('rightseditor-form').request({'parameters':{'action':'matrix'},'onComplete':this.onMatrixUpdated.bind(this)});},onMatrixUpdated:function(response){$('rightsmatrix').update(response.responseText);},saveRights:function(){$('rightsmatix-form').request({'parameters':{'action':'save','extension':this.getExtension(),'roles':this.getRoles().join(',')},'onComplete':this.onRightsSaved.bind(this)});},onRightsSaved:function(response){Todoyu.notifySuccess('Rights Are Saved');},onRolesChange:function(event){this.updateEditor();},initDependents:function(){var roles=this.getRoles();this.require.each(function(roles,require){roles.each(function(require,idRole){this.checkDependents(require.key,idRole);}.bind(this,require));}.bind(this,roles));},observeRightsForm:function(){$('rightsmatix-form').observe('change',this.onRightChange.bindAsEventListener(this));},onRightChange:function(event){var checkbox=event.findElement('input');var idParts=checkbox.id.split('-');var right=idParts.slice(0,-1).join(':');var idRole=idParts.last();this.checkDependents(right,idRole);},checkbox:function(right,idRole){return $(right.replace(/:/,'-')+'-'+idRole);},getRequireds:function(right){return this.require.get(right);},getDependents:function(right){var dependents=[];this.require.each(function(rightRequire){if(rightRequire.value.include(right)){dependents.push(rightRequire.key);}});return dependents;},checkRight:function(right,idRole,check){this.checkbox(right,idRole).checked=check;},isRightChecked:function(right,idRole){return this.checkbox(right,idRole).checked;},enableRight:function(right,idRole,enable){this.checkbox(right,idRole).disabled=enable===false;},isRightEnabled:function(right,idRole){return this.checkbox(right,idRole).disabled!==true;},isRightActive:function(right,idRole){return this.isRightEnabled(right,idRole)&&this.isRightChecked(right,idRole);},activateRight:function(right,idGroup,active){this.enableRight(right,idGroup);this.checkRight(right,idGroup);},allRequiredsActive:function(right,idGroup){var requireds=this.getRequireds(right);return requireds.all(function(idGroup,reqRight){return this.isRightActive(reqRight,idGroup);}.bind(this,idGroup));},checkDependents:function(right,idRole){var dependents=this.getDependents(right);var active=this.isRightActive(right,idRole);dependents.each(function(active,idRole,depRight){if(active){if(this.allRequiredsActive(depRight,idRole)){this.enableRight(depRight,idRole,true);}}else{this.enableRight(depRight,idRole,false);}}.bind(this,active,idRole));},getRoles:function(){return $F('rightseditor-field-roles');},getExtension:function(){return $F('rightseditor-field-extension');},toggleRight:function(right){var checkboxes=$('right-'+right.replace(/:/,'-')).select('input').findAll(function(input){return input.disabled===false;});this.toggleCheckboxes(checkboxes);this.initDependents();},toggleRoleRights:function(idRole){var checkboxes=$('rightsmatix-form').select('input[id$=-'+idRole+']');this.toggleCheckboxes(checkboxes);this.initDependents();},toggleCheckboxes:function(checkboxes){this.allOn=true;checkboxes.each(function(checkbox){if(checkbox.checked!=true){this.allOn=false;return;}}.bind(this));checkboxes.each(function(checkbox){checkbox.checked=!this.allOn;}.bind(this));}};
Todoyu.Ext.sysmanager.Role={ext:Todoyu.Ext.sysmanager,edit:function(idRole){var url=Todoyu.getUrl('sysmanager','role');var options={'parameters':{'action':'edit','role':idRole},'onComplete':this.onEdit.bind(this,idRole)};Todoyu.Ui.updateContentBody(url,options);},onEdit:function(idRole,response){},remove:function(idRole){if(confirm('Do you really want to delete this role?')){var url=Todoyu.getUrl('sysmanager','role');var options={'parameters':{'action':'delete','role':idRole},'onComplete':this.onRemoved.bind(this,idRole)};Todoyu.send(url,options);}},onRemoved:function(idRole,response){this.updateList();},updateList:function(){var url=Todoyu.getUrl('sysmanager','role');var options={'parameters':{'action':'listing'}};Todoyu.Ui.updateContentBody(url,options);},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving of role failed');Todoyu.Ui.setContentBody(response.responseText);}else{Todoyu.notifySuccess('Role Saved');this.showList();}},showList:function(){var url=Todoyu.getUrl('sysmanager','role');var options={'parameters':{'action':'listing'},'onComplete':this.onListShowed.bind(this)};Todoyu.Ui.updateContentBody(url,options);},onListShowed:function(response){}};
Todoyu.Ext.sysmanager.Config={onTabClick:function(key,event){}};
Todoyu.Ext.portal.Tab={ext:Todoyu.Ext.portal,onSelect:function(event,tabKey){this.showTab(tabKey);},showTab:function(tabKey,activateTab,extraParams){var url=Todoyu.getUrl('portal','tab');var options={'parameters':{'action':'update','tab':tabKey},'onComplete':this.onTabShowed.bind(this,tabKey)};var target='content-body';if(typeof(extraParams)==='object'){options.parameters.params=Object.toJSON(extraParams);}
Todoyu.Ui.update(target,url,options);if(activateTab===true){Todoyu.Tabs.setActive('portal',tabKey);}},onTabShowed:function(tabKey,response){var numSelected=response.getTodoyuHeader('selection');if(numSelected!==null){this.updateNumResults('selection',numSelected);}},setTabLabel:function(tabKey,newLabel){$('portal-tab-'+tabKey+'-label').down('span.labeltext').update(newLabel);},updateNumResults:function(tabKey,numResults){var labelEl=$('portal-tab-'+tabKey+'-label').down('span.labeltext');var label=labelEl.innerHTML;var pattern=/\(\d+\)/;var replace='('+numResults+')';labelEl.update(label.replace(pattern,replace));},getActiveTab:function(){return Todoyu.Tabs.getActiveKey('portal-tabs');},refresh:function(){this.showTab(this.getActiveTab());}};
Todoyu.Ext.calendar.HolidayEditor={init:function(){this.observeHolidaySelector();},observeHolidaySelector:function(){Todoyu.PanelWidget.observe('holidayselector',this.onHolidaySelect.bind(this));},onHolidaySelect:function(widget,value){this.loadHoliday(value);},loadHoliday:function(idHoliday){var url=Todoyu.getUrl('calendar','calendar');var options={'parameters':{'holiday':idHoliday,'action':'edit'}};Todoyu.Ui.updateContent(url,options);},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){Todoyu.notify('success',response.responseText);}};
Todoyu.Ext.search.Preference={ext:Todoyu.Ext.search,save:function(action,value,idItem,onComplete){Todoyu.Pref.save('search',action,value,idItem,onComplete);},saveActiveTab:function(tab){var action='saveActiveTab';this.sendAction(action,tab);},saveCurrentFilter:function(){var action='saveCurrentFilterSet';var currentFilterSet=Todoyu.Ext.search.Filter.FilterID;this.sendAction(action,currentFilterSet);},removeCurrentFilter:function(){var action='removeCurrentFilterSet';this.sendAction(action,'');},saveToggeling:function(elementID,elementDisplay){var action='saveToggleStatus';var value=Object.toJSON({elementID:elementID,elementDisplay:elementDisplay});this.sendAction(action,value);},saveOrder:function(value){var action='saveOrder';this.sendAction(action,value);},sendAction:function(action,value){var url=Todoyu.getUrl('search','preference');var options={'parameters':{'action':action,'value':value}};Todoyu.send(url,options);}};
Todoyu.Ext.search.Filter={ext:Todoyu.Ext.search,activeTab:null,init:function(activeTab,idFilterset,conditions,updateResults){this.setActiveTab(activeTab);this.setFiltersetID(idFilterset);this.ext.FilterControl.init();this.initConditions(activeTab,conditions);if(updateResults===true){this.updateResults();}},initConditions:function(tab,conditions){this.Conditions.clear();$A(conditions).each(function(condition){var name=condition.filter+'-'+condition.id;var negate=condition.negate==1;this.Conditions.add(condition.id,tab,condition.filter,condition.value,negate);this.WidgetArea.installAutocomplete(name);this.WidgetArea.installNegation(name);}.bind(this));},setActiveTab:function(tab){this.activeTab=tab;Todoyu.Tabs.setActive('search',tab);},getActiveTab:function(){return this.activeTab;},setFiltersetID:function(idFilterset){this.FilterID=idFilterset;},getFiltersetID:function(){return this.FilterID;},getConjunction:function(){return this.ext.FilterControl.getConjunction();},onTabClick:function(event,tab){if(tab!==this.getActiveTab()){this.setActiveTab(tab);this.ext.Preference.saveActiveTab(tab);this.updateFilterArea(tab,0);}},reset:function(){this.Conditions.clear();this.WidgetArea.clear();this.setFiltersetID(0);$('search-results').update('');},updateControll:function(tab){var url=Todoyu.getUrl('search','filteractioncontroll');var options={'parameters':{'action':'load','tab':tab}};var target='filterActionControls';Todoyu.Ui.replace(target,url,options);},addNewCondition:function(type,condition,value,negate){var name=this.makeNewWidgetName(condition);this.Conditions.add(name,type,condition,value,negate);this.WidgetArea.add(name,type,condition,value,negate);this.updateResults();},removeCondition:function(conditionName){this.Conditions.remove(conditionName);this.WidgetArea.remove(conditionName);this.updateResults();},makeNewWidgetName:function(condition){var numOfWidgets=this.Conditions.size();return'new'+(numOfWidgets+1);},loadFilterset:function(tab,idFilterset){if(tab!==this.getActiveTab()){this.updateFilterArea(tab,idFilterset);}else{this.updateWidgetArea(tab,idFilterset);this.updateResults(tab,idFilterset);}},updateFilterArea:function(tab,idFiterset){var url=Todoyu.getUrl('search','filterarea');var options={'parameters':{'action':'load','tab':tab,'filterset':idFiterset},'onComplete':this.onResultsUpdated.bind(this,tab)};this.setActiveTab(tab);Todoyu.Ui.updateContentBody(url,options);},updateWidgetArea:function(tab,idFilterset){var url=Todoyu.getUrl('search','widgetarea');var options={'parameters':{'action':'load','tab':tab,'filterset':idFilterset},'onComplete':this.onResultsUpdated.bind(this,tab)};var target='widget-area';Todoyu.Ui.update(target,url,options);},updateResults:function(tab,idFilterset,conditions,conjunction){tab=tab===undefined?this.getActiveTab():tab;idFilterste=idFilterset===undefined?this.getFiltersetID():idFilterset;conditions=conditions===undefined?this.Conditions.getAll():conditions;conjunction=conjunction===undefined?this.getConjunction():conjunction;var url=Todoyu.getUrl('search','searchresults');var options={'parameters':{'action':'update','tab':tab,'filterset':idFilterset,'conditions':Object.toJSON(conditions),'conjunction':conjunction},'onComplete':this.onResultsUpdated.bind(this,tab)};var target='search-results';Todoyu.Ui.update(target,url,options);},onResultsUpdated:function(tab){},updateConditionValue:function(name,value){this.setConditionValue(name,value);this.updateResults(this.getActiveTab(),0);},setConditionValue:function(name,value){this.Conditions.updateValue(name,value);},updateConditionNegation:function(name,negate){this.Conditions.updateNegation(name,negate);this.updateResults(this.getActiveTab(),0);},toggleConditionNegation:function(name){this.Conditions.toggleNegated(name);this.updateResults(this.getActiveTab(),0);},saveCurrentAreaAsNewFilterset:function(onComplete){if(this.Conditions.size()>0){var title=prompt('Enter a name for the new filter','New Filter');if(title===null){return;}
if(title.strip()===''){alert('Please enter a name for the filter set');return;}
var url=Todoyu.getUrl('search','filterset');var options={'parameters':{'action':'saveAsNew','title':title,'type':this.getActiveTab(),'conditions':this.Conditions.getAll(true),'conjunction':this.getConjunction()}};if(onComplete!==undefined){options.onComplete=onComplete;}
Todoyu.send(url,options);}else{alert('No conditions to save');}},saveCurrentAreaAsFilterset:function(idFilterset,onComplete){var url=Todoyu.getUrl('search','filterset');var options={'parameters':{'action':'save','filterset':idFilterset,'tab':this.getActiveTab(),'conditions':this.Conditions.getAll(true),'conjunction':this.getConjunction()}};if(onComplete!==undefined){options.onComplete=onComplete;}
Todoyu.send(url,options);},saveActiveFilterset:function(tab,idFilterset){var action='activeFilterset';this.ext.Preference.save(action,tab,idFilterset);}};
Todoyu.Ext.comment.Edit={ext:Todoyu.Ext.comment,onChangeEmail:function(idTask,idComment){var checkbox=$('comment-'+idTask+'-'+idComment+'-field-sendasemail');var emailEl=$('formElement-comment-'+idTask+'-'+idComment+'-field-emailreceivers');if(checkbox.checked){emailEl.show();}else{emailEl.hide();}},save:function(form){tinyMCE.triggerSave();var idTask=$(form).up('.task').readAttribute('id').split('-').last();$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this,idTask)});return false;},onSaved:function(idTask,response){var idComment=response.getTodoyuHeader('idComment');var tabLabel=response.getTodoyuHeader('tabLabel');if(response.hasTodoyuError()){$('comment-'+idTask+'-'+idComment+'-form').replace(response.responseText);Todoyu.notifyError('Could not save comment');}else{Todoyu.Ext.comment.List.refresh(idTask);Todoyu.Ext.comment.setTabLabel(idTask,tabLabel);Todoyu.notifySuccess('Comment Saved');if(response.getTodoyuHeader('sentEmail')){Todoyu.notifySuccess('E-mail Sent');}}},cancel:function(idTask,idComment){$('task-'+idTask+'-commentform-'+idComment).remove();Todoyu.Ext.comment.List.refresh(idTask,true);},onRemoved:function(response){var tabLabel=response.getTodoyuHeader('tabLabel');var idTask=response.getTodoyuHeader('idTask');Todoyu.Ext.comment.setTabLabel(idTask,tabLabel);}};
Todoyu.Ext.project.Container={ext:Todoyu.Ext.project,edit:function(idContainer){this.ext.Task.edit(idContainer);},clone:function(idContainer){this.ext.Task.clone(idContainer);},cut:function(idContainer){this.ext.Task.cut(idContainer);},copy:function(idContainer){this.ext.Task.copy(idContainer);},remove:function(idContainer){this.ext.Task.remove(idContainer,true);},addSubTask:function(idContainer){this.ext.Task.addSubTask(idContainer);},addSubContainer:function(idContainer){this.ext.Task.addSubContainer(idContainer);},updateStatus:function(idContainer,idStatus){this.ext.Task.updateStatus(idContainer,idStatus);}};
Todoyu.Ext.sysmanager.Extensions.Import={ext:Todoyu.Ext.sysmanager,showUploadForm:function(){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'showimport'},'onComplete':this.onImportShowed.bind(this)};Todoyu.Ui.updateContentBody(url,options);},onImportShowed:function(response){},startUpload:function(){if($F('importExtension-field-file')!==''){Todoyu.Form.addIFrame('import');$('importExtension-form').writeAttribute('target','upload-iframe-import');$('importExtension-form').submit();}else{alert('Please select an extension archive to upload');}},uploadFinished:function(ext,success,message){if(success===true){Todoyu.notifySuccess('Extension was successfully imported: '+ext);this.ext.Extensions.Install.showList();}else{Todoyu.notifyError('Extension Upload Failed: '+ext+' ('+message+')');}}};
Todoyu.Ext.sysmanager.Extensions.Install={ext:Todoyu.Ext.sysmanager,showList:function(){this.ext.Extensions.showTab('','install');},install:function(ext){if(confirm('Install Extension?')){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'install','extension':ext},'onComplete':this.onInstalled.bind(this,ext)};Todoyu.send(url,options);}},onInstalled:function(ext,response){var title=response.getTodoyuHeader('extTitle');Todoyu.notifySuccess('Extension installed: '+title);this.showUpdate(ext);},showUpdate:function(ext){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'showUpdate','extension':ext},'onComplete':this.onUpdateShowed.bind(this,ext)};Todoyu.Ui.updateContentBody(url,options);},onUpdateShowed:function(ext,respone){},uninstall:function(ext){if(confirm('Uninstall Extension?')){var url=Todoyu.getUrl('sysmanager','extensions');var options={'parameters':{'action':'uninstall','extension':ext},'onComplete':this.onUninstalled.bind(this,ext)};Todoyu.send(url,options);}},onUninstalled:function(extKey,response){if(response.hasTodoyuError()){var info=response.getTodoyuHeader('info');Todoyu.notifyError('Uninstallation of extension failed: '+info,0);}else{var extName=response.getTodoyuHeader('extTitle');Todoyu.notifySuccess('Extension was uninstalled successfully: '+extName);Todoyu.Ui.setContentBody(response.responseText);}}};
Todoyu.Ext.sysmanager.Extensions.Records={ext:Todoyu.Ext.sysmanager,url:Todoyu.getUrl('sysmanager','records'),extKey:'',type:'',showTypeList:function(extKey){var options={'parameters':{'action':'listRecordTypes','extKey':extKey}};Todoyu.Ui.replace('list',this.url,options);},showTypeRecords:function(extKey,type){var options={'parameters':{'action':'listTypeRecords','extKey':extKey,'type':type}};Todoyu.Ui.updateContentBody(this.url,options);},add:function(extKey,type){this.edit(extKey,type,0);},edit:function(extKey,type,idRecord){var options={'parameters':{'action':'edit','extKey':extKey,'type':type,'record':idRecord},'onComplete':this.onEdit.bind(this,extKey,type,idRecord)};if(Todoyu.exists('record-list')){var target='record-list';}else{var target=$('content').select('form').first().getAttribute('id');}
Todoyu.Ui.replace(target,this.url,options);},onEdit:function(extKey,type,idRecord,response){},remove:function(extKey,type,idRecord){if(confirm('Delete Record?')){var options={'parameters':{'action':'delete','extKey':extKey,'type':type,'record':idRecord},'onComplete':this.onRemoved.bind(this,extKey,type,idRecord)};Todoyu.send(this.url,options);}},onRemoved:function(extKey,type,idRecord,response){this.showTypeRecords(extKey,type);},save:function(form,extKey,type){$(form).request({'parameters':{'action':'save','extKey':extKey,'type':type},'onComplete':this.onSaved.bind(this,form,extKey,type)});return false;},onSaved:function(form,extKey,type,response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving Record Failed');$(form.id).update(response.responseText);}else{Todoyu.notifySuccess('Record Saved');this.showTypeRecords(extKey,type);}},closeForm:function(extKey,type){this.showTypeRecords(extKey,type);}};
Todoyu.Ext.sysmanager.RecordsOverview={ext:Todoyu.Ext.sysmanager,onTabSelect:function(event,tabKey){},showRecords:function(ext,type){location.href='?ext=admin&mod=extensions&extkey='+ext+'&tab=records&type='+type;}};
Todoyu.Ext.sysmanager.ExtConf={onSave:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Cannot Save Configuration');$('config-form').replace(response.responseText);}else{Todoyu.notifySuccess('Extension Configuration Saved',3);}}};
Todoyu.Ext.sysmanager.Config.Logo={onFileSelectionChange:function(form){Todoyu.Form.addIFrame('logo');$(form).writeAttribute('target','upload-iframe-logo');$(form).submit();},onUploadFinished:function(success){if(success){Todoyu.notifySuccess('Logo has been uploaded successfully');setTimeout("document.location.reload()",2000);}else{Todoyu.notifyError('Logo Upload Failed');}}};
Todoyu.Ext.calendar.Tabs={ext:Todoyu.Ext.calendar,active:null,onSelect:function(event,tabKey){switch(tabKey){case'edit':case'view':break;case'add':this.ext.Event.Edit.open(0);break;default:this.closeSpecialTabs();this.active=tabKey;this.ext.show(tabKey);break;}},closeSpecialTabs:function(){if(this.ext.Event.Edit.isActive()){this.ext.Event.Edit.close();}
if(this.ext.Event.View.isActive()){this.ext.Event.View.close();}},getActive:function(){if(this.active===null){this.active=Todoyu.Tabs.getActiveKey('calendar-tabs');}
if(this.active===null){this.active='week';}
return this.active;},setActive:function(tab){tab=$('calendar-tab-'+tab)?tab:'month';this.active=tab;Todoyu.Tabs.setActive('calendar',tab);},saveTabSelection:function(tabKey){this.ext.savePref('tab',tabKey);}};
Todoyu.Ext.search.FilterControl={ext:Todoyu.Ext.search,conditionsObserver:null,conjunctionObserver:null,init:function(){this.installObservers();},installObservers:function(){this.conditionsObserver=this.onConditionsChange.bindAsEventListener(this);this.conjunctionObserver=this.onConjunctionChange.bindAsEventListener(this);$('filtercontrol-conditions').observe('change',this.conditionsObserver);$('filtercontrol-conjunction').observe('change',this.conjunctionObserver);},uninstallObservers:function(){$('filtercontrol-conditions').stopObserving('change',this.conditionsObserver);$('filtercontrol-conjunction').stopObserving('change',this.conjunctionObserver);this.conditionsObserver=null;this.conjunctionObserver=null;},onConditionsChange:function(event){var value=event.element().getValue();var type=value.split('_').first();var condition=value.split('_').last();event.element().selectedIndex=0;this.ext.Filter.addNewCondition(type,condition,null,false);},onConjunctionChange:function(event){var value=event.element().getValue();this.ext.Filter.updateResults();},getConjunction:function(){return $F('filtercontrol-conjunction');}};
Todoyu.Ext.project.TaskTree={ext:Todoyu.Ext.project,init:function(){this.installObservers();},installObservers:function(){Todoyu.PanelWidget.observe('taskstatusfilter',this.onStatusFilterUpdate.bind(this));},tree:function(idProject){return $('project-'+idProject+'-tasks');},toggle:function(idProject){if(this.tree(idProject)){this.tree(idProject).toggle();}},hide:function(idProject){var taskTree=this.tree(idProject);if(taskTree){taskTree.hide();}},update:function(idProject,filterName,filterValue){if(Object.isUndefined(idProject)){idProject=this.ext.ProjectTaskTree.getActiveProjectID();}
var url=Todoyu.getUrl('project','tasktree');var options={'parameters':{'action':'update','project':idProject},'onComplete':this.onUpdated.bind(this)};var target='project-'+idProject+'-tasks';if(typeof(filterName)!=='undefined'){options.parameters["filter[name]"]=filterName;options.parameters["filter[value]"]=filterValue;}
Todoyu.Ui.update(target,url,options);},onUpdated:function(response){this.addContextMenu();},onStatusFilterUpdate:function(widgetName,params){var idProject=this.getProjectID();var filterValue=params.join(',');this.update(idProject,'status',filterValue);},getProjectID:function(){return this.ext.ProjectTaskTree.getActiveProjectID();},toggleSubtasks:function(event,idTask){if(event){Todoyu.Ui.stopEventBubbling(event);}
if(!this.areSubtasksLoaded(idTask)){this.loadSubtasks(idTask,this.onSubtasksToggled.bind(this));}else{$('task-'+idTask+'-subtasks').toggle();this.saveSubtaskOpenStatus(idTask,$('task-'+idTask+'-subtasks').visible());this.onSubtasksToggled(idTask);}
this.toggleSubtaskTriggerIcon(idTask);},onSubtasksToggled:function(idTask){},expandSubtasks:function(idTask){if(!this.areSubtasksVisible(idTask)){this.toggleSubtasks(false,idTask);}},toggleSubtaskTriggerIcon:function(idTask){$('task-'+idTask+'-subtasks-trigger').toggleClassName('expanded');},areSubtasksLoaded:function(idTask){return Todoyu.exists('task-'+idTask+'-subtasks');},areSubtasksVisible:function(idTask){return $('task-'+idTask+'-subtasks').visible();},loadSubtasks:function(idTask,callback){var url=Todoyu.getUrl('project','task');var options={'parameters':{'action':'subtasks','task':idTask,'show':0},'onComplete':this.onSubtasksLoaded.bind(this,idTask,callback)};var target='task-'+idTask;Todoyu.Ui.append(target,url,options);},onSubtasksLoaded:function(idTask,callback,response){Todoyu.Ext.project.ContextMenuTask.attach();if(typeof callback==='function'){callback(idTask,response);}},saveSubtaskOpenStatus:function(idTask,isOpen){Todoyu.Pref.save('project','subtasks',isOpen?1:0,idTask);},addContextMenu:function(){Todoyu.Ext.project.ContextMenuTask.attach();}};
Todoyu.Ext.calendar.Navi={ext:Todoyu.Ext.calendar,setTitle:function(title){$('calendar-title').update(title);},getActiveTab:function(){return this.ext.Tabs.getActive();},getDirectionDate:function(direction){var tab=this.getActiveTab();var time=this.ext.getTime();var newTime=Todoyu.Time.getShiftedTime(time,tab,direction);return newTime*1000;},getBackwardDate:function(){return this.getDirectionDate('down');},goBackward:function(){var date=this.getBackwardDate();this.ext.show(null,date);},getForwardDate:function(){return this.getDirectionDate('up');},goForward:function(){var date=this.getForwardDate();this.ext.show(null,date);},getTodayDate:function(){return Todoyu.Time.getTodayDate();},goToday:function(){var date=this.getTodayDate();this.ext.show(null,date);},toggleFullDayView:function(){var toggler=$('toggleDayView');toggler.toggleClassName('full');this.ext.CalendarBody.toggleFullDayView();}};
Todoyu.Ext.search.Filter.Conditions={conditions:{},add:function(name,type,condition,value,negate){name=condition+'-'+name;this.conditions[name]={'name':name,'type':type,'condition':condition,'value':value,'negate':negate};},updateValue:function(conditionName,value){this.conditions[conditionName].value=value;},updateNegation:function(conditionName,negate){this.conditions[conditionName].negate=negate===true;},isNegated:function(conditionName){return this.conditions[conditionName].negate===true;},toggleNegated:function(conditionName){this.conditions[conditionName].negate=!this.conditions[conditionName].negate;},remove:function(conditionName){delete this.conditions[conditionName];},clear:function(){this.conditions={};},getAll:function(asJSON){if(asJSON){return Object.toJSON(this.conditions);}else{return this.conditions;}},size:function(){return Object.keys(this.conditions).size();}};
Todoyu.Ext.project.ContextMenuTask={attach:function(){Todoyu.ContextMenu.attach('task','.contextmenutask',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenutask');},getID:function(element,event){return element.id.split('-')[1];}};
Todoyu.Ext.timetracking.Clock={ext:Todoyu.Ext.timetracking,pe:null,start:function(){if(!this.isRunning()){this.pe=new PeriodicalExecuter(this.onClockTick.bind(this),1);}},stop:function(){if(this.isRunning()){this.pe.stop();this.pe=null;}},isRunning:function(){return this.pe!==null;},onClockTick:function(periodicalExecuter){this.ext.onClockTick();},showClock:function(idDisplayArea,startTime){this.addDisplayArea(idDisplayArea);if(!this.isRunning()){if(typeof startTime==='number'){this.setTime(startTime);}
this.start();}},getTask:function(){return Todoyu.Ext.timetracking.getTask();},getTime:function(){return this.ext.getTrackingTime();},addCallback:function(callback){this.callbacks.push(callback);},callCallbacks:function(){this.callbacks.each(function(callback){callback(this.getTask(),this.getTime());}.bind(this));},addDisplayArea:function(idDisplayArea){this.displayAreas.push(idDisplayArea);this.displayAreas.uniq();},refreshAreas:function(pe){this.displayAreas.each(function(idDisplayArea){this.updateDisplayArea(idDisplayArea,this.getTime());}.bind(this));},updateDisplayArea:function(idDisplayArea,seconds){var timeString=Todoyu.Helper.timestampFormat(seconds,':');$(idDisplayArea).update(timeString);},getTimeParts:function(){return{'hours':Math.floor(this.getTime()/3600),'minutes':Math.floor((this.getTime()-Math.floor(this.getTime()/3600)*3600)/60),'seconds':this.getTime()-(Math.floor(this.getTime()/3600)*3600)-(Math.floor((this.getTime()-Math.floor(this.getTime()/3600)*3600)/60)*60)};}};
Todoyu.Ext.search.Filter.WidgetArea={ext:Todoyu.Ext.search,areaID:'widget-area',autocompleters:{},specialConfig:{},add:function(name,type,condition,value,negate){var url=Todoyu.getUrl('search','widgetarea');var options={'parameters':{'action':'add','name':name,'type':type,'condition':condition,'value':value,'negate':negate?1:0},'onComplete':this.onAdded.bind(this,name,condition)};var target=this.areaID;Todoyu.Ui.insert(target,url,options);},onAdded:function(name,condition,response){var widgetID=condition+'-'+name;this.installAutocomplete.bind(this).defer(widgetID);this.installNegation.bind(this).defer(widgetID);},remove:function(name){$(name).remove();},clear:function(){$(this.areaID).update('');},getNumOfWidgets:function(){return $(this.areaID).select('.filterWidget').size();},installAutocomplete:function(name){if($(name)){var acField=$(name).select('input.textinputAC')[0];if(Object.isElement(acField)){var acUrl=Todoyu.getUrl('search','filtercontroller');var widgetID=acField.id.split('-').slice(2,4).join('-');var params=Object.toQueryString({'action':'autocompletion','completionID':name,'filtertype':this.ext.Filter.getActiveTab()});var options={'parameters':params,'paramName':'sword','minChars':2,'afterUpdateElement':this.onAutocompleteSelect.bind(this,name)};var suggestID=acField.id+'-suggestions';if(this.specialConfig[name]&&this.specialConfig[name]['acOptions']){options=$H(options).merge(this.specialConfig[name]['acOptions']).toObject();if(typeof options.afterUpdateElement==='string'){options.afterUpdateElement=Todoyu.getFunctionFromString(options.afterUpdateElement,true).bind(this,name);}}
this.autocompleters[name]=new Todoyu.Autocompleter(acField.id,suggestID,acUrl,options);}}},onAutocompleteSelect:function(name,textInput,listElement){var idItem=listElement.id;this.ext.Filter.updateConditionValue(name,idItem);},installNegation:function(name){if($(name)){var negElement=$(name).select('span.negation')[0];if(Object.isElement(negElement)){negElement.observe('click',this.onNegation.bindAsEventListener(this,name));}}},onNegation:function(event,name){this.ext.Filter.toggleConditionNegation(name);event.findElement('span.negation').childElements().invoke('toggle');},addSpecialConfig:function(name,config){this.specialConfig[name]=config;}};
Todoyu.Ext.contact.Person={ext:Todoyu.Ext.contact,add:function(){this.edit(0);},edit:function(idPerson){var url=Todoyu.getUrl('contact','person');var options={'parameters':{'action':'edit','person':idPerson},'onComplete':this.onEdit.bind(this,idPerson)};this.ext.updateContent(url,options);},onEdit:function(idPerson,response){this.initEditForm(idPerson);},initEditForm:function(idPerson){this.observeFieldsForShortname(idPerson);this.showLoginFields(idPerson);$('person-'+idPerson+'-field-active').observe('change',this.showLoginFields.bind(this,idPerson));},showLoginFields:function(idPerson,event){var field=$('person-'+idPerson+'-field-active');$('person-'+idPerson+'-fieldset-loginfields')[field.checked?'show':'hide']();},remove:function(idPerson){if(confirm('Are you sure you want to delete?')){var url=Todoyu.getUrl('contact','person');var options={'parameters':{'action':'remove','person':idPerson},'onComplete':this.onRemoved.bind(this,idPerson)};Todoyu.send(url,options);}},onRemoved:function(idPerson,response){this.showList(this.ext.PanelWidget.ContactSearch.getValue());},observeFieldsForShortname:function(idPerson){$('person-'+idPerson+'-field-lastname').observe('keyup',this.generateShortName.bindAsEventListener(this,idPerson));$('person-'+idPerson+'-field-firstname').observe('keyup',this.generateShortName.bindAsEventListener(this,idPerson));},generateShortName:function(event,idPerson){var lastname=$F('person-'+idPerson+'-field-lastname');var firstname=$F('person-'+idPerson+'-field-firstname');if(lastname.length>=2&&firstname.length>=2){$('person-'+idPerson+'-field-shortname').value=firstname.substr(0,2).toUpperCase()+lastname.substr(0,2).toUpperCase();}},updateCompanyAddressRecords:function(inputField,selectedListElement,baseID,selectedValue,list,parent){var idInputFieldArr=inputField.id.split('-').without('fulltext');var referencedFieldName=parent.acRefs[baseID].options.referencedFieldName;var idTarget=idInputFieldArr.join('-').replace(idInputFieldArr.last(),referencedFieldName);if($(idTarget)){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'action':'getCompanyAddressOptions','idCompany':selectedValue},'onComplete':this.onUpdateCompanyAddressRecords.bind(this,idTarget)};Todoyu.Ui.update(idTarget,url,options);}},onUpdateCompanyAddressRecords:function(idTarget){new Effect.Highlight($(idTarget),{'startcolor':'#fffe98','endcolor':'#ffffff','duration':2.0});},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving Person Failed');$('contact-form-content').update(response.responseText);var idPerson=parseInt(response.request.parameters['person[id]'],10);this.initEditForm(idPerson);}else{Todoyu.notifySuccess('Person Saved');this.showList(this.ext.PanelWidget.ContactSearch.getValue());}},closeForm:function(){this.showList(this.ext.PanelWidget.ContactSearch.getValue());},showList:function(sword){var url=Todoyu.getUrl('contact','person');var options={'parameters':{'action':'list','sword':sword}};this.ext.updateContent(url,options);},show:function(idPerson){var url=Todoyu.getUrl('contact','person');var options={'parameters':{'action':'detail','person':idPerson}};Todoyu.Popup.openWindow('popupRecordInfo','Info',420,url,options);},saveWizard:function(form,target){$(form).request({'parameters':{'action':'saveWizard','idTarget':target},'onComplete':this.onSavedWizard.bind(this,target)});return false;},onSavedWizard:function(target,response){var error=response.hasTodoyuError();if(error){Todoyu.notifyError('Saving person failed');Todoyu.Popup.getContentElement('popup-'+target).update(response.responseText);}else{Todoyu.notifySuccess('Person saved');var label=response.getTodoyuHeader('recordLabel');$(target).value=response.getTodoyuHeader('idRecord');$(target+'-fulltext').value=label;Todoyu.Popup.close('popup-'+target);}},cancelWizard:function(){Todoyu.Popup.getLastPopup().close();}};
Todoyu.Ext.project.ContextMenuProject={attach:function(){Todoyu.ContextMenu.attach('project','.contextmenuproject',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenuproject');},getID:function(element,event){return element.id.split('-')[1];}};
Todoyu.Ext.timetracking.PageTitle={ext:Todoyu.Ext.timetracking,task:null,init:function(){this.ext.registerToggleCallback(this.onClockToggle.bind(this));this.ext.registerClockCallback(this.onClockTick.bind(this));this.task=this.ext.getTaskData();},onClockToggle:function(idTask,start){if(start){this.task=this.ext.getTaskData();this.showInfo();}else{this.update(false);this.task=null;}},onClockTick:function(idTask,time){this.showInfo();},showInfo:function(){this.update(true,this.task.id_project+'.'+this.task.tasknumber,this.task.title,this.ext.getTotalTime(),this.ext.getPercentOfTime());},update:function(show,taskNumber,taskTitle,time,percent){var currentTitle=Todoyu.Ui.getTitle();var blankTitle=currentTitle.split(' - [')[0];var trackInfo='';var percentStr=percent!==undefined?' - '+percent+'%':'';if(show===true){var timeStr=Todoyu.Time.timeFormatSeconds(time);trackInfo=' - ['+taskNumber+': '+taskTitle.substr(0,50)+' ['+timeStr+percentStr+']';}
Todoyu.Ui.setTitle(blankTitle+trackInfo);}};
Todoyu.Ext.contact.Company={ext:Todoyu.Ext.contact,add:function(){this.edit(0);},edit:function(idCompany){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'company':idCompany,'action':'edit'},'onComplete':this.onEdit.bind(this,idCompany)};this.ext.updateContent(url,options);},onEdit:function(idCompany,response){},remove:function(idCompany){if(confirm('Do you really want to remove this company record?')){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'action':'remove','company':idCompany},'onComplete':this.onRemoved.bind(this)};Todoyu.send(url,options);}},onRemoved:function(response){if(!response.hasTodoyuError()){this.showList(this.ext.PanelWidget.ContactSearch.getValue());}},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){var error=response.hasTodoyuError();if(error){Todoyu.notifyError('Saving company record failed');$('contact-form-content').update(response.responseText);}else{Todoyu.notifySuccess('Company Saved');this.showList(this.ext.PanelWidget.ContactSearch.getValue());}},closeForm:function(){this.showList(this.ext.PanelWidget.ContactSearch.getValue());},showList:function(sword){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'action':'list','sword':sword}};this.ext.updateContent(url,options);},show:function(idCompany){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'action':'detail','company':idCompany}};Todoyu.Popup.openWindow('popupRecordInfo','Info',420,url,options);}};
Todoyu.Ext.project.ProjectTaskTree={ext:Todoyu.Ext.project,maxOpenTabs:3,onTabSelect:function(event,idProject){this.openProject(idProject,0);this.moveTabToFront(idProject);},openProject:function(idProject,idTask){if(this.isProjectLoaded(idProject)&&(idTask===0||(idTask!==0&&this.isTaskLoaded(idTask)))){this.displayActiveProject(idProject);if(idTask!==0){this.ext.Task.scrollTo(idTask);}}else{this.addNewProject(idProject,idTask);}},removeProject:function(idProject){var id='project-'+idProject;if(Todoyu.exists(id)){$(id).remove();this.removeProjectTab(idProject);}},removeProjectTab:function(idProject){var id='project-tab-'+idProject;if(Todoyu.exists(id)){$(id).remove();}},hasTab:function(idProject){return Todoyu.exists('project-tab-'+idProject);},removeNoSelectionTab:function(){if(Todoyu.exists('project-tab-noselection')){$('project-tab-noselection').remove();}},addNewProject:function(idProject,idTask){var url=Todoyu.getUrl('project','projecttasktree');var options={'parameters':{'action':'addproject','project':idProject,'task':idTask},'onComplete':this.onProjectLoaded.bind(this)};Todoyu.send(url,options);},onProjectLoaded:function(response){var idProject=response.getTodoyuHeader('project');var label=response.getTodoyuHeader('tablabel');this.insertTabContent(idProject,response.responseText);if(!this.hasTab(idProject)){this.addNewTabhead(idProject,label);}
this.removeSurplusProject();this.displayActiveProject(idProject);this.ext.ContextMenuTask.attach();this.ext.ContextMenuProject.attach();},insertTabContent:function(idProject,tabContent){$('projects').insert(tabContent);$('project-'+idProject).hide();},addNewTabhead:function(idProject,label){var tabClass='tabkey-'+idProject+' project'+idProject+' projecttab item bcg05';var tab=Todoyu.Tabs.build('project',idProject,tabClass,label,true);$('project-tabs').insert({'top':tab});},moveTabToFront:function(idTab){this.removeNoSelectionTab();var tab=$('project-tab-'+idTab);tab.remove();$('project-tabs').insert({'top':tab});this.highlightTab(idTab);},openFirstTab:function(){if(this.getNumTabs()>0){var idProject=this.getActiveProjectID();this.moveTabToFront(idProject);this.openProject(idProject);}else{this.loadNoProjectSelectedView();}},getNumTabs:function(){return $('project-tabs').select('li').size();},loadNoProjectSelectedView:function(){var url=Todoyu.getUrl('project','project');var options={'parameters':{'action':'noProjectView'},'onComplete':this.onNoProjectSelectedViewLoaded.bind(this)};Todoyu.Ui.updateContent(url,options);},onNoProjectSelectedViewLoaded:function(response){},highlightTab:function(idTab){},removeSurplusProject:function(){var surplusTab=$('project-tabs').down('li').next('li',this.maxOpenTabs-1);if(surplusTab!==undefined){var idProject=(surplusTab.readAttribute('id').split('-'))[1];surplusTab.remove();if(Todoyu.exists('project-'+idProject)){$('project-'+idProject).remove();}}},displayActiveProject:function(idProject){$('projects').childElements().invoke('hide');$('project-'+idProject).show();Todoyu.Tabs.setActive('project',idProject);var title=this.getActiveProjectTitle().replace(':',' - ');Todoyu.Ui.setTitle('Projects - '+title);this.moveTabToFront(idProject);this.saveOpenProjects();},isProjectLoaded:function(idProject){return Todoyu.exists('project-'+idProject);},isTaskLoaded:function(idTask){return this.ext.Task.isLoaded(idTask);},isProjectActive:function(idProject){return $('project-tabs').select('li.active').first().readAttribute('id').split('-').last()==idProject;},saveOpenProjects:function(){this.openProjects=[];$('project-tabs').childElements().each(function(tab){this.openProjects.push(tab.id.split('-').last());}.bind(this));this.openProjects=this.openProjects.uniq();var url=Todoyu.getUrl('project','projecttasktree');var options={'parameters':{'action':'openprojects','projects':this.openProjects.join(',')}};Todoyu.send(url,options);},getActiveProjectID:function(){var activeTabs=$('project-tabs').select('li.active');if(activeTabs.size()===1){return activeTabs.first().id.split('-').last();}else{if(this.getNumTabs()>0){return this.getTabs().first().id.split('-').last();}}
return false;},getActiveProjectTitle:function(){var activeTab=$('project-tabs').select('li.active span.labeltext');var title='';if(activeTab.size()===1){title=activeTab.first().innerHTML;}else{if(this.getNumTabs()>0){title=this.getTabs().first().innerHTML;}}
return title;},getTabs:function(){return $('project-tabs').select('li');},getFirstTab:function(){if($('project-tabs')&&$('project-tabs').select('li').length>0){return $('project-tabs').select('li')[0].id.substr(11);}else{return false;}}};
Todoyu.Ext.calendar.QuickInfoBirthday={ext:Todoyu.Ext.calendar,cacheTime:5,selector:'div.quickInfoBirthday',install:function(){Todoyu.QuickInfo.setCacheTime('birthday',this.cacheTime);Todoyu.QuickInfo.install('birthday',this.selector,this.getID.bind(this));},uninstall:function(){Todoyu.QuickInfo.uninstall(this.selector);},getID:function(element,event){return $(element).id.split('-').last();},removeFromCache:function(idEvent){Todoyu.QuickInfo.removeFromCache('birthday'+idEvent);}};
Todoyu.Ext.project.TaskParentAC={ext:Todoyu.Ext.project,field:null,url:null,acContainer:null,acOptions:{'paramName':'query'},init:function(idField){this.field=$(idField);this.acContainer=$('taskparent-ac');this.url=Todoyu.getUrl('project','taskparent-ac');new Ajax.Autocompleter(this.field,this.acContainer.id,this.url,this.acOptions);}};
Todoyu.Ext.calendar.QuickInfoEvent={ext:Todoyu.Ext.calendar,selector:'div.quickInfoEvent',install:function(){Todoyu.QuickInfo.install('event',this.selector,this.getID.bind(this));},uninstall:function(){Todoyu.QuickInfo.uninstall(this.selector);},getID:function(element,event){return $(element).id.split('-').last();},removeFromCache:function(idEvent){Todoyu.QuickInfo.removeFromCache('event'+idEvent);}};
Todoyu.Ext.project.QuickTask={ext:Todoyu.Ext.project,popupID:'quicktask',openPopup:function(){var url=Todoyu.getUrl('project','quicktask');var options={'parameters':{'action':'popup'},'onComplete':this.onPopupLoaded.bind(this)};Todoyu.Popup.openWindow(this.popupID,'Create Quicktask',520,url,options);},closePopup:function(){Todoyu.Popup.close(this.popupID);},onPopupLoaded:function(response){Todoyu.Hook.exec('QuickTaskOpen',response);},save:function(form){tinyMCE.triggerSave();$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this,form)});return false;},onSaved:function(form,response){if(response.hasTodoyuError()){$(form).replace(response.responseText);Todoyu.Hook.exec('QuickTaskOpen',response);}else{var idTask=response.getTodoyuHeader('idTask');var idProject=response.getTodoyuHeader('idProject');this.closePopup();Todoyu.notifySuccess('Quicktask has been saved');Todoyu.Hook.exec('QuickTaskSaved',idTask,idProject,response);}}};
Todoyu.Ext.calendar.QuickInfoHoliday={ext:Todoyu.Ext.calendar,selector:'span.quickInfoHoliday',install:function(){Todoyu.QuickInfo.install('holiday',this.selector,this.getID.bind(this));},uninstall:function(){Todoyu.QuickInfo.uninstall(this.selector);},getID:function(element,event){return $(element).id.split('-').last();},removeFromCache:function(idEvent){Todoyu.QuickInfo.removeFromCache('holiday'+idEvent);}};
Todoyu.Ext.admin.Headlet.Admin={init:function(){if(document.location.href.toQueryParams().ext==='admin'){}},onButtonClick:function(event){Todoyu.goTo('admin','ext');}};
Todoyu.Ext.project.PanelWidget.ProjectList={ext:Todoyu.Ext.project,fulltextTimeout:null,filters:{},init:function(filters){if(typeof(filters)==='object'&&!Object.isArray(filters)){$H(filters).each(function(pair){this.applyFilter(pair.key,pair.value,false);},this);}
this.observeFulltext();this.observeProjects();this.observeStatusSelector();this.addHooks();},addHooks:function(){Todoyu.Hook.add('onProjectSaved',this.onProjectSaved.bind(this));Todoyu.Hook.add('onProjectCreated',this.onProjectCreated.bind(this));Todoyu.Hook.add('onProjectDeleted',this.onProjectDeleted.bind(this));},observeFulltext:function(){$('panelwidget-projectlist-field-fulltext').observe('keyup',this.onFulltextKeyup.bindAsEventListener(this));},observeProjects:function(){$('panelwidget-projectlist-list').observe('click',this.onProjectClick.bindAsEventListener(this));},observeStatusSelector:function(){Todoyu.PanelWidget.observe('projectstatusfilter',this.onStatusFilterUpdate.bind(this));},onFulltextKeyup:function(event){this.clearTimeout();this.applyFilter('fulltext',this.getFulltext());this.startTimeout();},onProjectClick:function(event){var listElement=event.findElement('li');if(Object.isElement(listElement)){var idProject=listElement.id.split('-').last();this.ext.ProjectTaskTree.openProject(idProject);}},onStatusFilterUpdate:function(widgetkey,statuses){this.applyFilter('status',statuses,true);},clearTimeout:function(){clearTimeout(this.fulltextTimeout);},startTimeout:function(){this.fulltextTimeout=this.update.bind(this).delay(0.3);},getFulltext:function(){return $F('panelwidget-projectlist-field-fulltext');},applyFilter:function(name,value,update){this.filters[name]=value;if(update===true){this.clearTimeout();this.update();}},update:function(){var url=Todoyu.getUrl('project','panelwidgetprojectlist');var options={'parameters':{'action':'list','filters':Object.toJSON(this.filters)},'onComplete':this.onUpdated.bind(this)};var target='panelwidget-projectlist-list';Todoyu.Ui.replace(target,url,options);},onUpdated:function(response){this.observeProjects();},isProjectListed:function(idProject){return Todoyu.exists('panelwidget-projectlist-project-'+idProject);},onProjectSaved:function(idProject){this.update();},onProjectCreated:function(idProject){this.update();},onProjectDeleted:function(idProject){this.update();}};
Todoyu.Ext.portal.PanelWidget.FilterPresetList={ext:Todoyu.Ext.portal,lists:{},init:function(){var lists=$('panelwidget-filterpresetlist-content').select('select');lists.each(function(list){var type=list.id.split('-').last();this.lists[type]=list;list.observe('change',this.onSelectionChange.bindAsEventListener(this,type));}.bind(this));},onSelectionChange:function(event,type){this.unselectOtherTypes(type);var params={'filtersets':this.getFiltersets(),'type':type};this.ext.Tab.showTab('selection',true,params);},getFiltersets:function(){return $H(this.lists).collect(function(pair){return $F(pair.value);}).flatten();},unselectOtherTypes:function(type){$H(this.lists).each(function(type,pair){if(pair.key!==type){pair.value.select('option').each(function(option){option.selected=false;});}}.bind(this,type));},manageFiltersets:function(){Todoyu.goTo('search','ext');}};
Todoyu.Ext.calendar.PanelWidget.Calendar={ext:Todoyu.Ext.calendar,key:'calendar',calName:'panelwidget-calendar-scal',Calendar:null,prefSavingEnabled:true,updateTimeout:null,updateTimeoutWait:0.2,init:function(timestamp){var initialDate=new Date(timestamp*1000);var options=Object.extend(this.ext.calOptions,{year:initialDate.getFullYear(),month:initialDate.getMonth()+1,day:initialDate.getDate(),oncalchange:this.onCalendarChange.bind(this)});this.Calendar=new scal(this.calName,this.onDateSelected.bind(this),options);},getDate:function(){return this.Calendar.currentdate.getTime();},setDate:function(date,noExternalUpdate){this.Calendar.setCurrentDate(new Date(date),noExternalUpdate);},getTime:function(){return parseInt(this.getDate()/1000,10);},getFirstShownDay:function(){var timestamp=this.getDate();var date=new Date(timestamp);var dayNum=1;var date=new Date(date.getFullYear(),date.getMonth(),dayNum);var dateFirstShownDay=date;while(dateFirstShownDay.getDay()>1){dayNum--;dateFirstShownDay=new Date(date.getFullYear(),date.getMonth(),dayNum);}
return dateFirstShownDay.getTime()/1000;},setTime:function(time,noExternalUpdate){this.setDate(time*1000,noExternalUpdate);},onCalendarChange:function(event){var element=event.element();var mode='';if(element.hasClassName('calprevmonth')||element.hasClassName('calnextmonth')){mode='month';}
if(element.hasClassName('calprevyear')||element.hasClassName('calnextyear')){mode='year';}
if(element.hasClassName('caltitle')){mode='today';}
this.onUpdate(mode,true);},onDateSelected:function(currentDate){this.onUpdate('day',true);},onUpdate:function(mode,delay){if(this.updateTimeout!==null){window.clearTimeout(this.updateTimeout);}
if(delay){this.updateTimeout=this.onUpdate.bind(this).delay(this.updateTimeoutWait,mode,false);}else{Todoyu.PanelWidget.fire(this.key,{'mode':mode,'date':this.getDate()});}},shiftDate:function(spanLength,saveDatePreference){this.prefSavingEnabled=saveDatePreference;this.setDate(this.getCurrentDate()+spanLength);this.prefSavingEnabled=true;},saveCurrentDate:function(){if(this.prefSavingEnabled){Todoyu.Pref.save('calendar','date',this.getTime());}}};
Todoyu.Ext.timetracking.QuickTask={ext:Todoyu.Ext.timetracking,fieldStart:'quicktask-0-field-start-tracking',fieldDone:'quicktask-0-field-task-done',init:function(){Todoyu.Hook.add('QuickTaskOpen',this.onQuickTaskOpen.bind(this));Todoyu.Hook.add('QuickTaskSaved',this.onQuickTaskSaved.bind(this));},onQuickTaskOpen:function(response){$(this.fieldStart).observe('change',this.preventStartDone.bindAsEventListener(this,'start'));$(this.fieldDone).observe('change',this.preventStartDone.bindAsEventListener(this,'done'));},onQuickTaskSaved:function(idTask,idProject,response){if(response.getTodoyuHeader('startTracking')==1){this.ext.Task.start(idTask);}},preventStartDone:function(event,key){if(key==='start'){if($(this.fieldDone).checked){$(this.fieldDone).checked=false;}}
if(key==='done'){if($(this.fieldStart).checked){$(this.fieldStart).checked=false;}}}};
Todoyu.Ext.timetracking.Headlet.Timetracking={ext:Todoyu.Ext.timetracking,button:null,info:null,barClasses:{},init:function(){this.ext.registerToggleCallback(this.onClockToggle.bind(this));this.ext.registerClockCallback(this.onClockTick.bind(this));},onButtonClick:function(event){if(this.isContentVisible()){this.hide();}else{this.hideOthers();this.showContent();this.saveOpenStatus();}},onContentClick:function(event){this.setActive();},onBodyClick:function(event){if(this.isEventInOwnContent(event)){event.stop();}},hide:function(){this.hideContent();this.saveOpenStatus();},onClockToggle:function(idTask,start){this.updateContent();this.setTrackingStatus(start);},onClockTick:function(idTask,time){this.updateTime(time);this.updatePercent();},setTrackingStatus:function(tracking){this.headlet.getButton('timetracking')[tracking?'addClassName':'removeClassName']('tracking');},updateTime:function(time){var headlet=$('headlet-timetracking-tracking');if(headlet){$('headlet-timetracking-tracking').update(Todoyu.Time.timeFormatSeconds(time));}},updatePercent:function(){var idPercent='headlet-timetracking-percent';if(Todoyu.exists(idPercent)&&this.ext.hasEstimatedTime()){var percent=this.ext.getPercentOfTime();$(idPercent).update(percent+'%');var progress=$('headlet-timetracking-progress');this.barClasses.each(function(percent,pair){if(percent>=pair.key){progress.setStyle({'backgroundColor':pair.value});throw $break;}}.bind(this,percent));}},setBarClasses:function(barClasses){this.barClasses=$H(barClasses);},updateContent:function(){var url=Todoyu.getUrl('timetracking','headlet');var options={'parameters':{'action':'update'},'onComplete':this.onContentUpdated.bind(this)};var target='headlet-timetracking-content';Todoyu.Ui.update(target,url,options);},onContentUpdated:function(response){x=4;},stopTask:function(idTask){this.ext.stop(idTask);},startTask:function(idTask){this.ext.start(idTask);},goToTask:function(idProject,idTask){if(this.isTaskInCurrentView(idTask)){$('task-'+idTask).scrollToElement();}else{Todoyu.Ext.project.goToTaskInProject(idTask,idProject);}},isTaskInCurrentView:function(idTask){return Todoyu.exists('task-'+idTask);}};
Todoyu.Ext.daytracks.PanelWidget.Daytracks={ext:Todoyu.Ext.daytracks,_task:0,_tasktime:0,_totaltime:0,_el_task:null,_el_total:null,init:function(){this.registerTimetracking();this.registerHooks();this.ContextMenu.init();},registerTimetracking:function(){Todoyu.Ext.timetracking.registerToggleCallback(this.onTimetrackingToggle.bind(this));Todoyu.Ext.timetracking.registerClockCallback(this.onTimetrackingClockUpdate.bind(this));},registerHooks:function(){Todoyu.Hook.add('taskStatusUpdated',this.onTaskStatusUpdated.bind(this));Todoyu.Hook.add('QuickTaskSaved',this.onQuickTaskAdded.bind(this));},goToTask:function(idProject,idTask){if(this.isTaskInCurrentView(idTask)){$('task-'+idTask).scrollToElement();}else{Todoyu.Ext.project.goToTaskInProject(idTask,idProject);}},isTaskInCurrentView:function(idTask){return Todoyu.exists('task-'+idTask);},refresh:function(){var target='panelwidget-daytracks-content';var url=Todoyu.getUrl('daytracks','panelwidget');var options={'parameters':{'action':'update'},'onComplete':this.onRefreshed.bind(this)};Todoyu.Ui.update(target,url,options);},onRefreshed:function(response){this.ContextMenu.attach();},toggleTimetracking:function(idTask){Todoyu.Ext.timetracking.toggle(idTask);},updateTaskStatus:function(idTask,status){Todoyu.Ext.project.Task.updateStatus(idTask,status);},onTaskStatusUpdated:function(idTask,status){this.refresh();},onTimetrackingToggle:function(idTask,start){this._task=0;this.refresh();},onTimetrackingClockUpdate:function(idTask,time){this._el_task=$('daytracks-track-'+idTask+'-time');if(this._task!==idTask){if(this._el_task){this._el_total=$('daytracks-daytotal-time');this._task=idTask;this._tasktime=Todoyu.Time.parseTimeToSeconds(this._el_task.innerHTML);this._totaltime=Todoyu.Time.parseTimeToSeconds(this._el_total.innerHTML)-time;}}
if(this._el_task&&this._el_total){this._el_task.update(Todoyu.Time.timeFormatSeconds(this._tasktime+time));this._el_total.update(Todoyu.Time.timeFormatSeconds(this._totaltime+time));}},onQuickTaskAdded:function(idTask,idProject,response){this.refresh();},showHistory:function(){this.ext.History.show();}};
Todoyu.Ext.search.Headlet.QuickSearch={ext:Todoyu.Ext.search,query:null,button:null,content:null,bodyClickObserver:null,init:function(){this.query=$('headlet-quicksearch-query');this.button=this.getButton();this.content=this.getContent();this.query.observe('click',this.onQueryClick.bindAsEventListener(this));this.Suggest.init();this.Mode.init();},onButtonClick:function(event){if(this.isContentVisible()){this.hide();}else{this.hideOthers();this.showContent();this.focus();this.saveOpenStatus();}},onContentClick:function(event){if(this.isEventInOwnContent(event)){event.stop();}},onQueryClick:function(event){this.Mode.hideModes();if(this.isEventInOwnContent(event)){event.stop();}},onBodyClick:function(event){this.hideExtras();if(this.isEventInOwnContent(event)){event.stop();}},hide:function(){this.hideContent();this.hideExtras();this.saveOpenStatus();},hideExtras:function(){this.Mode.hideModes();this.Suggest.hideResults();},focus:function(){this.query.select();},submit:function(){Todoyu.notifyInfo('redirect to full search disabled at the moment');},submitIfNotEmpty:function(){if(!this.isEmpty()){this.submit();}},getValue:function(){return $F(this.query).strip();},isEmpty:function(){return this.getValue()==='';}};
Todoyu.Ext.search.PanelWidget.SearchFilterList={ext:Todoyu.Ext.search,key:'searchfilterlist',sortables:[],init:function(){this.initSortable();},refresh:function(){var url=Todoyu.getUrl('search','panelwidgetsearchfilterlist');var options={'parameters':{'action':'update'},'onComplete':this.initSortable.bind(this)};var target='panelwidget-searchfilterlist-content';this.disableSortable();Todoyu.Ui.update(target,url,options);},toggleList:function(type){var list='panelwidget-searchfilterlist-list-'+type;if(Todoyu.exists(list)){$(list).toggle();this.saveListToggle(type,$(list).visible());}},renameFilterset:function(idFilterset){var currentName=$('filterset-'+idFilterset+'-label').title.stripScripts().stripTags().strip();var newName=prompt('Rename Filter Set',currentName);if(newName!==null&&newName.strip()!==''){newName=newName.stripScripts().stripTags().strip();$('filterset-'+idFilterset+'-label').update(newName);this.saveFiltersetRename(idFilterset,newName);}},hideFilterset:function(idFilterset){var element=$('filterset-'+idFilterset+'-control-visibility');var isHidden=element.hasClassName('hidden');element.toggleClassName('hidden');element.up('li').toggleClassName('hidden');if(isHidden===false){element.title='Unhide';element.update('Unhide');}else{element.title='Hide';element.update('Hide');}
this.saveFiltersetVisibility(idFilterset,isHidden);},saveFilterset:function(idFilterset,tab){if(tab===this.ext.Filter.getActiveTab()){if(confirm('Overwrite existing filter set?')){this.ext.Filter.saveCurrentAreaAsFilterset(idFilterset,this.onFiltersetSaved.bind(this,idFilterset));}}else{alert('You tried to save the filter set under a wrong type');}},onFiltersetSaved:function(idFilterset,response){var tab=this.ext.Filter.getActiveTab();this.showFilterset(tab,idFilterset);},deleteFilterset:function(idFilterset){if(confirm('Really delete filter set?')){$('filterset_'+idFilterset).remove();this.saveFiltersetDelete(idFilterset);}},saveCurrentAreaAsNewFilterset:function(){this.ext.Filter.saveCurrentAreaAsNewFilterset(this.onNewFiltersetSaved.bind(this));},onNewFiltersetSaved:function(response){this.refresh();},showFilterset:function(type,idFilterset){if(type===this.ext.Filter.getActiveTab()){this.ext.Filter.loadFilterset(type,idFilterset);}else{this.ext.Filter.updateFilterArea(type,idFilterset);}
this.markActiveFilterset(idFilterset);},markActiveFilterset:function(idFilterset){$('filterset_'+idFilterset).up('div').select('.filterset').invoke('removeClassName','current');$('filterset_'+idFilterset).addClassName('current');},unmarkActiveFilterset:function(){$('panelwidget-searchfilterlist').select('.filterset').invoke('removeClassName','current');},initSortable:function(){this.disableSortable();var options={'handle':'dragPointListItem','onUpdate':this.onSortableUpdate.bind(this)};var lists=$('panelwidget-searchfilterlist-content').select('.sortable');lists.each(function(element){Sortable.create(element,options);this.sortables.push(element);}.bind(this));var handles=$('panelwidget-searchfilterlist-content').select('.handle');handles.each(function(item){Todoyu.Ui.addHoverEffect(item);});},disableSortable:function(){this.sortables.each(function(sortableElement){Sortable.destroy(sortableElement);});this.sortables=[];},onSortableUpdate:function(listElement){var type=listElement.id.split('-').last();var items=Sortable.sequence(listElement);this.saveFiltersetOrder(type,items);},clearFilterArea:function(){this.ext.Filter.reset();this.unmarkActiveFilterset();},saveFiltersetOrder:function(type,items){var action='filtersetOrder';var value=Object.toJSON({'type':type,'items':items});var idItem=0;this.ext.Preference.save(action,value,idItem);},saveListToggle:function(type,expanded){var action='filterlistToggle';var value=type+':'+(expanded?1:0);var idItem=0;this.ext.Preference.save(action,value,idItem);},saveFiltersetRename:function(idFilterset,value){var action='renameFilterset';this.ext.Preference.save(action,value,idFilterset);},saveFiltersetVisibility:function(idFilterset,visible){var action='toggleFiltersetVisibility';var value=visible?1:0;this.ext.Preference.save(action,value,idFilterset);},saveFiltersetDelete:function(idFilterset){var action='deleteFilterset';var value=1;this.ext.Preference.save(action,value,idFilterset);}};
Todoyu.Ext.bookmark.PanelWidget.TaskBookmarks={ext:Todoyu.Ext.bookmark,_task:0,_tasktime:0,_el_task:null,_el_total:null,init:function(){this.registerTimetracking();this.ContextMenu.attach();this.registerHooks();},registerHooks:function(){Todoyu.Hook.add('taskStatusUpdated',this.onTaskStatusUpdated.bind(this));},registerTimetracking:function(){Todoyu.Ext.timetracking.registerToggleCallback(this.onTimetrackingToggle.bind(this));Todoyu.Ext.timetracking.registerClockCallback(this.onTimetrackingClockUpdate.bind(this));},onTimetrackingToggle:function(idTask,start){this.refresh();},onTimetrackingClockUpdate:function(idTask,time){},onTaskStatusUpdated:function(idTask,status){this.refresh();},startTask:function(idTask){Todoyu.Ext.timetracking.start(idTask);},stopTask:function(idTask){Todoyu.Ext.timetracking.stop();},refresh:function(){var url=Todoyu.getUrl('bookmark','refresh');var options={'parameters':{'action':'update'},'onComplete':this.onRefreshed.bind(this)};this.ContextMenu.detach();Todoyu.Ui.replace('panelwidget-taskbookmarks',url,options);},onRefreshed:function(response){this.ContextMenu.attach();},showTaskInProject:function(idTask){Todoyu.goTo('project','ext',{'task':idTask},'task-'+idTask);},updateTaskStatus:function(idTask,status){Todoyu.Ext.project.Task.updateStatus(idTask,status);},removeTask:function(idTask){this.ext.remove('task',idTask,this.refresh.bind(this));}};
Todoyu.Ext.contact.QuickCreatePerson={ext:Todoyu.Ext.contact,person:Todoyu.Ext.contact.Person,onPopupOpened:function(){this.person.onEdit(0);},save:function(form){$(form).request({'parameters':{'action':'save'},'onComplete':this.onSaved.bind(this)});return false;},onSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving Person Failed');Todoyu.Headlet.QuickCreate.updatePopupContent(response.responseText);}else{var idPerson=response.getTodoyuHeader('idPerson');Todoyu.Hook.exec('onPersonSaved',idPerson);Todoyu.Popup.close('quickcreate');Todoyu.notifySuccess('Person Saved');if(Todoyu.getArea()=='contact'){Todoyu.Ext.contact.Person.showList();}}}};
Todoyu.Ext.contact.PanelWidget.StaffSelector={ext:Todoyu.Ext.contact,list:null,jobType:null,jobTypeToggle:null,jobType2Persons:{},init:function(jobType2Persons){this.list=$('panelwidget-staffselector-persons');this.jobType=$('panelwidget-staffselector-jobtype');this.jobTypeToggle=$('panelwidget-staffselector-jobtypetoggle');this.jobType2Persons=jobType2Persons;this.installObservers();},installObservers:function(){this.list.observe('change',this.onSelectionChange.bindAsEventListener(this));this.jobType.observe('change',this.onJobtypeSelected.bindAsEventListener(this));this.jobTypeToggle.observe('change',this.onJobtypeToggleChange.bindAsEventListener(this));},onSelectionChange:function(event){this.selectAllJobtypes(false);this.onUpdate();},onJobtypeSelected:function(event){this.selectPersonsByJobtype();this.onUpdate();},onJobtypeToggleChange:function(event){var toggler=event.findElement('input');if(toggler.checked){this.jobType.multiple='multiple';this.jobType.size=this.jobType.options.length;}else{this.jobType.multiple=false;this.jobType.size=1;}
$(toggler.id+'-label').toggleClassName('expand');this.onUpdate();},onUpdate:function(){this.savePrefs();},selectAllJobtypes:function(select){var selected=select===true;this.jobType.select('option').each(function(option){option.selected=selected;});},selectAllPersons:function(select){var selected=select===true;this.list.select('option').each(function(option){option.selected=selected;});},selectPersons:function(personIDs){this.list.select('option').each(function(option){if(personIDs.include(option.value)){option.selected=true;}});},selectPersonsByJobtype:function(){this.selectAllPersons(false);var jobTypes=this.getSelectedJobtypes();if(jobTypes.first()==0){this.selectAllPersons(true);}else{jobTypes.each(function(jobType){var personIDs=this.getJobtypePersons(jobType);this.selectPersons(personIDs);}.bind(this));}},getJobtypePersons:function(jobType){return this.jobType2Persons[jobType];},getSelectedPersons:function(){return $F(this.list);},getSelectedJobtypes:function(){var jobTypes=$F(this.jobType);return Object.isArray(jobTypes)?jobTypes:[jobTypes];},getNumberOfSelectedPersons:function(){return this.getSelectedPersons().size();},isAnyPersonSelected:function(){return this.getSelectedPersons().size()>0;},isMultiJobtypes:function(){return this.jobType.multiple;},savePrefs:function(){var pref=Object.toJSON({'multiple':this.isMultiJobtypes(),'jobtypes':this.getSelectedJobtypes(),'persons':this.getSelectedPersons()});Todoyu.Pref.save('contact','panelwidgetstaffselector',pref,0,this.onPrefsSaved.bind(this));},onPrefsSaved:function(response){Todoyu.PanelWidget.fire('staffselector',this.getSelectedPersons());}};
Todoyu.Ext.profile.Headlet.Profile={ext:Todoyu.Ext.profile,init:function(){},onButtonClick:function(event){Todoyu.goTo('profile','ext');}};
Todoyu.Ext.assets.List={ext:Todoyu.Ext.assets,toggle:function(idTask){Todoyu.Ui.toggle('task-'+idTask+'-assets-list');},refresh:function(idTask){var list='task-'+idTask+'-assets-list';var url=Todoyu.getUrl('assets','tasktab');var options={'parameters':{'action':'list','task':idTask}};if(Todoyu.exists(list)){Todoyu.Ui.replace(list,url,options);}else{var target='task-'+idTask+'-tabcontent-assets';Todoyu.Ui.update(target,url,options);}},hover:function(idAsset){$('asset-'+idAsset).toggleClassName('hover');},select:function(idAsset){if($('asset-'+idAsset+'-checkbox').checked){this.unCheck(idAsset);}else{this.check(idAsset);}},check:function(idAsset){$('asset-'+idAsset).addClassName('selected');$('asset-'+idAsset+'-checkbox').checked=true;},unCheck:function(idAsset){$('asset-'+idAsset).removeClassName('selected');$('asset-'+idAsset+'-checkbox').checked=false;},selectAll:function(idTask){var list=$('task-'+idTask+'-assets-tablebody');var boxes=list.select('input');var notAll=false;boxes.each(function(item){if(!item.checked){notAll=true;return;}});boxes.each(function(item){if(notAll===true){this.check(item.value);}else{this.unCheck(item.value);}}.bind(this));$('task-'+idTask+'-assets-checkallbox').checked=notAll;},getSelectedAssets:function(idTask){var list=$('task-'+idTask+'-assets-tablebody');var boxes=list.select('input');var assetIDs=[];boxes.each(function(item){if(item.checked){assetIDs.push(item.value);}});return assetIDs;}};
Todoyu.Ext.daytracks.PanelWidget.Daytracks.ContextMenu={ext:Todoyu.Ext.daytracks,widget:Todoyu.Ext.daytracks.PanelWidget.Daytracks,init:function(){this.attach();},attach:function(){Todoyu.ContextMenu.attach('DaytracksPanelwidget','.contextmenudaytrackspwidget',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenudaytrackspwidget');},getID:function(element,event){return event.findElement('li').id.split('-').last();}};
Todoyu.Ext.search.Headlet.QuickSearch.Mode={ext:Todoyu.Ext.search,headlet:null,mode:0,button:null,modes:null,positioned:false,init:function(){this.headlet=this.ext.Headlet.QuickSearch;this.button=$('headlet-quicksearch-mode-button');this.modes=$('headlet-quicksearch-modes');this.button.observe('click',this.showModes.bindAsEventListener(this));},showModes:function(event){var modes=$('headlet-quicksearch-modes');if(modes.visible()==true){this.hideModes();}else{if(!this.positioned){var contentOffset=this.headlet.content.cumulativeOffset();var contentDim=this.headlet.content.getDimensions();var modeWidth=this.modes.getWidth();var top=contentDim.height;var left=contentDim.width-modeWidth;modes.setStyle({'left':left+'px','top':top+'px'});this.positioned=true;}
modes.show();this.headlet.Suggest.hideResults();}},setMode:function(mode){$('headlet-quicksearch-mode').value=mode;$('headlet-quicksearch-form').writeAttribute('class','icon searchmode'+mode.capitalize());this.hideModes();this.headlet.focus();this.headlet.Suggest.updateResults();},getMode:function(){return $F('headlet-quicksearch-mode');},hideModes:function(){$('headlet-quicksearch-modes').hide();}};
Todoyu.Ext.bookmark.PanelWidget.TaskBookmarks.ContextMenu={ext:Todoyu.Ext.bookmark,attach:function(){Todoyu.ContextMenu.attach('TaskBookmarksPanelWidget','.contextmenutaskbookmarks',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenutaskbookmarks');},getID:function(element,event){return event.findElement('li').id.split('-').last();}};
Todoyu.Ext.contact.Address={onChangeCountry:function(inputField,referencedFieldName,fieldNameToReplace){var selectedValue=inputField.value;var idInputFieldArr=inputField.id.split('-').without('fulltext');var idTarget=idInputFieldArr.join('-').replace(fieldNameToReplace,referencedFieldName);if($(idTarget)){var url=Todoyu.getUrl('contact','company');var options={'parameters':{'action':'getRegionOptions','idCountry':selectedValue},'onComplete':this.onUpdateCompanyAddressRecords.bind(this,idTarget)};Todoyu.Ui.update(idTarget,url,options);}},onUpdateCompanyAddressRecords:function(idTarget,response){$(idTarget).innerHTML=response.responseText;new Effect.Highlight($(idTarget),{'startcolor':'#fffe98','endcolor':'#ffffff','duration':2.0});}};
Todoyu.Ext.search.Headlet.QuickSearch.Suggest={ext:Todoyu.Ext.search,headlet:null,suggest:null,delay:0.5,navigatePos:-1,navigateActive:null,numElements:0,timeout:null,init:function(){this.headlet=this.ext.Headlet.QuickSearch;this.suggest=$('headlet-quicksearch-suggest');document.body.appendChild(this.suggest);this.headlet.query.observe('keyup',this.onQueryChange.bind(this));},onQueryChange:function(event){window.clearTimeout(this.timeout);if(event.keyCode===Event.KEY_RETURN){if(this.isNavigating()){this.goToActiveElement();}else{this.timeout=this.updateResults.bind(this).delay(this.delay);}
return;}
if(event.keyCode===Event.KEY_DOWN||event.keyCode===Event.KEY_UP){if(this.suggest.visible()){var down=event.keyCode===Event.KEY_DOWN;this.navigate(down);}
return;}
if(event.keyCode===Event.KEY_ESC){if(this.isResultsVisible()){this.hideResults();}else{this.headlet.toggleContent();}
return;}
if(this.headlet.isEmpty()){this.hideResults();}else{this.timeout=this.updateResults.bind(this).delay(this.delay);}},isNavigating:function(){return this.navigatePos>-1;},goToActiveElement:function(){eval(this.navigateActive.down().readAttribute('onclick'));this.hide();},navigate:function(down){if(this.navigateActive!==null){this.navigateActive.removeClassName('active');}
if(down){this.navigatePos++;}else{this.navigatePos--;}
if(this.navigatePos<=-1){this.navigatePos=-1;this.navigateActive=null;return;}
if(this.navigatePos>=this.numElements){this.navigatePos=this.numElements-1;}
this.navigateActive=this.suggest.down('li li',this.navigatePos);this.navigateActive.addClassName('active');},updateResults:function(){if(this.headlet.isEmpty()){return;}
var url=Todoyu.getUrl('search','suggest');var options={'parameters':{'action':'suggest','query':this.headlet.getValue(),'mode':this.headlet.Mode.getMode()},'onComplete':this.onResultsUpdated.bind(this)};Todoyu.Ui.update(this.suggest,url,options);},onResultsUpdated:function(response){this.navigatePos=-1;this.numElements=this.suggest.select('li li').size();this.showResults();},showResults:function(){var contentDim=this.headlet.content.getDimensions();var contentOffset=this.headlet.content.cumulativeOffset();var suggestDim=this.suggest.getDimensions();this.suggest.setStyle({'left':contentOffset.left-suggestDim.width+contentDim.width-1+'px','top':contentOffset.top+contentDim.height+'px'});Todoyu.Ui.scrollToTop();this.suggest.show();},hideResults:function(){this.suggest.hide();},isResultsVisible:function(){return this.suggest.visible();}};
Todoyu.Ext.calendar.Event={ext:Todoyu.Ext.calendar,installObservers:function(){$('calendar-body').select('div.event').each(function(eventElement){eventElement.observe('dblclick',this.onEventDblClick.bindAsEventListener(this));}.bind(this));this.ext.ContextMenuEvent.attach();},onEventDblClick:function(event){event.stop();var eventDiv=event.findElement('div.event');var elementID=eventDiv.id;var parts=elementID.split('-');var idItem=parts.last();var private=eventDiv.down('span.private');if(private){if(!private.hasClassName('allowed')){return false;}}
if(parts.first()!=='birthday'){this.show(idItem);}},show:function(idEvent){this.ext.Event.View.open(idEvent);},edit:function(idEvent){if(Todoyu.getArea()==='calendar'){this.ext.Event.Edit.open(idEvent);}else{Todoyu.goTo('calendar','ext',{'tab':'edit','event':idEvent});}},remove:function(idEvent){if(confirm('Do you really want to delete this event?')){$('event-'+idEvent).fade();var url=Todoyu.getUrl('calendar','event');var options={'parameters':{'action':'delete','event':idEvent},'onComplete':this.onRemoved.bind(this,idEvent)};Todoyu.send(url,options);}},onRemoved:function(idEvent,response){if(Todoyu.getArea()==='calendar'){this.ext.refresh();}},updateEnddate:function(formName){if($(formName+'-0-field-enddate')){$(formName+'-0-field-enddate').value=$F(formName+'-0-field-startdate');}},calcTimestampFromMouseCoords:function(idTab,x,y){var timestamp=Todoyu.Ext.calendar.getDate();var calLeftCoord=Element.cumulativeOffset($('calendararea'))[0]+43;var calTopCoord=Element.cumulativeOffset($('calendararea'))[1];var halfHours=(y-calTopCoord)/21.5+'';halfHours=parseInt(halfHours.split('.')[0],10);timestamp+=halfHours*1800;if(idTab=='week'){var day=(x-calLeftCoord)/88+'';day=parseInt(day.split('.')[0],10);timestamp+=day*86400;}
if(!$('toggleDayView').hasClassName('full')){timestamp+=28800;}
return timestamp;},goToEventInCalendar:function(idEvent,date,view){var params={'date':date,'tab':view?view:'day'};Todoyu.goTo('calendar','ext',params,'event-'+idEvent);},addEventOnSameTime:function(idEvent){var time=this.getTime(idEvent);this.ext.addEvent(time);},getTime:function(idEvent){var mode=this.ext.getActiveTab();var time=0;var event=$('event-'+idEvent);if(event){if(mode==='month'){time=parseInt(event.up('td').id.split('-').last(),10);}else{var viewport=event.viewportOffset();var scroll=document.body.cumulativeScrollOffset();var top=viewport.top+scroll.top;var left=viewport.left+scroll.left;time=this.ext.CalendarBody.getTimeOfMouseCoordinates(left,top);}}
return time;}};
Todoyu.Ext.calendar.Event.View={ext:Todoyu.Ext.calendar,open:function(idEvent){this.addTab('');this.loadDetails(idEvent);this.ext.hideCalendar();this.show();},loadDetails:function(idEvent){var url=Todoyu.getUrl('calendar','event');var options={'parameters':{'action':'show','event':idEvent},'onComplete':this.onDetailsLoaded.bind(this,idEvent)};var target='calendar-view';Todoyu.Ui.update(target,url,options);},onDetailsLoaded:function(idEvent,response){var tabLabel=response.getTodoyuHeader('tabLabel');this.setTabLabel(tabLabel);},addTab:function(label){if(!Todoyu.exists('calendar-tab-view')){var tab=Todoyu.Tabs.build('calendar','view','item bcg05 tabkey-view',label,true);$('calendar-tab-month').insert({'after':tab});}
Todoyu.Tabs.setActive.defer('calendar','view');},removeTab:function(){$('calendar-tab-view').remove();},setTabLabel:function(label){Todoyu.Tabs.setLabel('calendar','view',label);},hide:function(){$('calendar-view').hide();},show:function(){$('calendar-view').show();Todoyu.Ui.scrollToTop();},isActive:function(){return Todoyu.exists('calendar-tab-view');},close:function(){this.removeTab();this.hide();this.ext.showCalendar();$('calendar-view').update('');}};
Todoyu.Ext.calendar.Event.Edit={ext:Todoyu.Ext.calendar,open:function(idEvent,time){Todoyu.QuickInfo.hide();Todoyu.Ui.scrollToTop();this.addTab('Edit');this.ext.hideCalendar();this.loadForm(idEvent,time);},openFromDetailView:function(idEvent){this.cancelEdit();this.open(idEvent,0);},loadForm:function(idEvent,time){var url=Todoyu.getUrl('calendar','event');var options={'parameters':{'action':'edit','event':idEvent,'date':Todoyu.Time.getDateTimeString(time)},'onComplete':this.onFormLoaded.bind(this,idEvent)};var target='calendar-edit';Todoyu.Ui.update(target,url,options);},onFormLoaded:function(idEvent,response){var tabLabel=response.getTodoyuHeader('tabLabel');this.setTabLabel(tabLabel);this.updateVisibleFields();this.observeEventType();this.show();},observeEventType:function(){$('event-field-eventtype').observe('change',this.updateVisibleFields.bindAsEventListener(this));},updateVisibleFields:function(event){var eventType=$F('event-field-eventtype');var allFields=$('event-form').select('div.fElement');var fieldsToHide=[];allFields.invoke('show');var allFieldNames=allFields.collect(function(field){return field.id.replace('formElement-event-field-','');});var checkHooks=Todoyu.Hook.get('eventtype');allFieldNames.each(function(checkHooks,fieldsToHide,eventType,fieldname){checkHooks.each(function(fieldsToHide,fieldname,eventType,hook){if(hook(fieldname,eventType)){fieldsToHide.push(fieldname);return;}}.bind(this,fieldsToHide,fieldname,eventType));}.bind(this,checkHooks,fieldsToHide,eventType));fieldsToHide.each(this.hideField,this);},checkHideField:function(fieldname,eventtype){var fields=[];eventtype=parseInt(eventtype,10);switch(eventtype){case 3:fields=['is-dayevent','date-end','person','place'];break;case 4:fields=['is-dayevent'];break;case 7:fields=['is-private'];break;case 13:fields=['is-dayevent','date-end'];break;}
return fields.include(fieldname);},hideField:function(fieldName){var field='formElement-event-field-'+fieldName;if(Todoyu.exists(field)){$(field).hide();}},setFulldayTime:function(fullDayCheckbox){if(fullDayCheckbox.checked){Todoyu.DateField.setTime('event-field-date-start',0,0);Todoyu.DateField.setTime('event-field-date-end',23,59);}},addTab:function(label){if(!Todoyu.exists('calendar-tab-edit')){var tab=Todoyu.Tabs.build('calendar','edit','item bcg05 tabkey-edit',label,true);$('calendar-tab-month').insert({'after':tab});}
Todoyu.Tabs.setActive.defer('calendar','edit');},close:function(){if(Todoyu.exists('calendar-tab-edit')){this.removeTab();}
if(Todoyu.exists('calendar-edit')){this.hide();this.ext.showCalendar();$('calendar-edit').update('');}},setTabLabel:function(label){Todoyu.Tabs.setLabel('calendar','edit',label);},isActive:function(){return Todoyu.exists('calendar-tab-edit');},removeTab:function(){if(Todoyu.exists('calendar-tab-edit')){$('calendar-tab-edit').remove();}},show:function(){$('calendar-edit').show();},hide:function(){$('calendar-edit').hide();},saveEvent:function(){$('event-form').request({'parameters':{'action':'save'},'onComplete':this.onEventSaved.bind(this)});},onEventSaved:function(response){if(response.hasTodoyuError()){Todoyu.notifyError('Saving of event failed');$('event-form').replace(response.responseText);}else{Todoyu.notifySuccess('Event Saved');var time=response.getTodoyuHeader('time');var idEvent=response.getTodoyuHeader('idEvent');this.ext.QuickInfoEvent.removeFromCache(idEvent);this.ext.show(this.ext.Tabs.active,time*1000);this.close();}},cancelEdit:function(){this.ext.show(this.ext.Tabs.active);this.close();},onPersonAssignmentAutocomplete:function(response,autocompleter){if(response.getTodoyuHeader('acElements')==0){Todoyu.notifyInfo('No person of this name was found.');}}};
Todoyu.Ext.calendar.EventPortal={ext:Todoyu.Ext.calendar,toggleDetails:function(idEvent){if(this.isDetailsLoaded(idEvent)){$('event-'+idEvent+'-details').toggle();this.saveEventExpandedStatus(idEvent,$('event-'+idEvent+'-details').visible());}else{this.loadDetails(idEvent);}},loadDetails:function(idEvent){var url=Todoyu.getUrl('calendar','portal');var options={'parameters':{'action':'detail','event':idEvent},'onComplete':this.onDetailsLoaded.bind(idEvent)};var target='event-'+idEvent+'-header';Todoyu.Ui.append(target,url,options);},onDetailsLoaded:function(idEvent,response){},isDetailsLoaded:function(idEvent){return Todoyu.exists('event-'+idEvent+'-details');},saveEventExpandedStatus:function(idEvent,expanded){var value=expanded?1:0;this.ext.savePref('portalEventExpanded',value,idEvent);},acknowledgeEvent:function(idEvent,idPerson){var url=Todoyu.getUrl('calendar','event');var options={'parameters':{'action':'acknowledge','event':idEvent,'person':idPerson},'onComplete':this.onAcknowledged.bind(this,idEvent,idPerson)};$('acknowledge-'+idEvent).removeClassName('not');Todoyu.send(url,options);},onAcknowledged:function(idEvent,idPerson,response){}};
Todoyu.Ext.project.PanelWidget.StatusFilter=Class.create({ext:Todoyu.Ext.project,list:null,handler:null,initialize:function(list,handlerFunction){this.list=$(list);this.handler=handlerFunction;this.installObservers();},installObservers:function(handlerFunction){this.list.observe('change',this.onSelectionChange.bind(this));},onSelectionChange:function(event){if(!this.isAnyStatusSelected()){this.selectAll();}
this.handler(event);},getValue:function(){return this.getSelectedStatuses();},getSelectedStatuses:function(){return $F(this.list);},getNumSelected:function(){return this.getValue().length;},isAnyStatusSelected:function(){return this.getNumSelected()>0;},selectAll:function(){$(this.list).childElements().each(function(option){option.selected=true;});},savePreference:function(){var pref=this.getSelectedStatuses().join(',');var action='panelwidget'+this.key;Todoyu.Pref.save('project',action,pref);}});
Todoyu.Ext.project.PanelWidget.TaskStatusFilter={ext:Todoyu.Ext.project,key:'taskstatusfilter',init:function(){this.statusFilter=new Todoyu.Ext.project.PanelWidget.StatusFilter('panelwidget-taskstatusfilter-list',this.onSelectionChange.bind(this));},onSelectionChange:function(event){this.onUpdate();},onUpdate:function(){Todoyu.PanelWidget.fire(this.key,this.statusFilter.getValue());this.savePreference();},savePreference:function(){var pref=this.statusFilter.getSelectedStatuses().join(',');var action='panelwidget'+this.key;Todoyu.Pref.save('project',action,pref);}};
Todoyu.Ext.project.PanelWidget.ProjectStatusFilter={ext:Todoyu.Ext.project,key:'projectstatusfilter',init:function(selectedStatusIDs){this.statusFilter=new Todoyu.Ext.project.PanelWidget.StatusFilter('panelwidget-projectstatusfilter-list',this.onSelectionChange.bind(this));this.ext.PanelWidget.ProjectList.applyFilter('status',selectedStatusIDs.join(','),false);},onSelectionChange:function(event){this.onUpdate();},onUpdate:function(){Todoyu.PanelWidget.fire(this.key,this.statusFilter.getValue());this.savePreference();},savePreference:function(){var pref=this.statusFilter.getSelectedStatuses().join(',');var action='panelwidget'+this.key;Todoyu.Pref.save('project',action,pref);}};
Todoyu.Ext.project.Portal={ext:Todoyu.Ext.project,init:function(){if(Todoyu.getArea()==='portal'){Todoyu.Hook.add('onProjectCreated',this.onProjectCreate.bind(this));Todoyu.Hook.add('onProjectSaved',this.onProjectSaved.bind(this));}},onProjectCreate:function(idProject){this.refreshProjectListing();},onProjectSaved:function(idProject){this.refreshProjectListing();},isProjectListingActive:function(){if(Todoyu.Ext.portal.Tab.getActiveTab()==='selection'){return Todoyu.exists('projectlist');}
return false;},refreshProjectListing:function(){if(this.isProjectListingActive()){Todoyu.Ext.portal.Tab.refresh();}}};
Todoyu.Ext.loginpage.PanelWidget.LoginNews={newsLoaded:function(){var live=$('news-live');var iframe=$('loginnews-iframe');live.show();var height=$(iframe.contentDocument.body).scrollHeight;iframe.setStyle({'height':height+30+'px'});live.hide();$('news-local').hide();Effect.SlideDown('news-live',{'duration':0.3});}};
Todoyu.Ext.loginpage.Headlet.Logout={ext:Todoyu.Ext.loginpage,onButtonClick:function(event){this.ext.logout();}};
Todoyu.Ext.calendar.CalendarBody={ext:Todoyu.Ext.calendar,idArea:'calendararea',calendarBody:null,init:function(fullHeight){this.calendarBody=$(this.idArea);this.installContextMenu();if(this.ext.getActiveTab()!=='month'){this.setFullHeight(fullHeight,false);}},reInit:function(){this.calendarBody=$(this.idArea);this.init(this.isFullHeight());},installContextMenu:function(){this.ext.ContextMenuCalendarBody.attach();},toggleFullDayView:function(){this.setFullHeight(!this.isFullHeight(),true);},isFullHeight:function(){return this.calendarBody.hasClassName('full');},getHeight:function(){return this.calendarBody.getHeight();},setFullHeight:function(fullHeight,savePref){if(fullHeight){this.calendarBody.addClassName('full');this.calendarBody.scrollTop=0;}else{this.calendarBody.removeClassName('full');this.calendarBody.scrollTop=336;}
if(savePref===true){this.saveFullDayViewPref();}},saveFullDayViewPref:function(){this.ext.savePref('fulldayview',this.isFullHeight()?1:0);},getTimeOfMouseCoordinates:function(x,y){var calendarMode=this.ext.getActiveTab();var top=y-this.calendarBody.cumulativeOffset().top+(this.isFullHeight()?0:8*42);switch(calendarMode){case'day':var timestamp=this.ext.getDayStart()+this.getDayOffset(top,1010);break;case'week':var left=x-this.calendarBody.cumulativeOffset().left;var numDays=Math.floor((left-40)/89);var timestamp=this.ext.getWeekStart()+numDays*Todoyu.Time.seconds.day;timestamp+=this.getDayOffset(top,1010);break;}
return timestamp;},getDayOffset:function(top,height){var seconds=(top/height)*Todoyu.Time.seconds.day;seconds=Math.round(seconds/900)*900;var timeInfo=Todoyu.Time.getTimeParts(seconds);return timeInfo.hours*Todoyu.Time.seconds.hour+timeInfo.minutes*Todoyu.Time.seconds.minute;},installObservers:function(){},installObserversCreateEvent:function(){this.reInit();var tab=this.ext.getActiveTab();if(tab==='month'){this.calendarBody.observe('dblclick',this.onEventCreateMonth.bindAsEventListener(this));}else{this.calendarBody.observe('dblclick',this.onEventCreateDayWeek.bindAsEventListener(this));}},onEventCreateDayWeek:function(event){if(event.findElement('td.tg-col')){var time=this.getTimeOfMouseCoordinates(event.pointerX(),event.pointerY());this.ext.addEvent(time);}},onEventCreateMonth:function(event){var cell=event.findElement('td');if(cell){var time=cell.id.split('-').last();this.ext.addEvent(time);}}};
Todoyu.Ext.assets.Upload={ext:Todoyu.Ext.assets,active:false,showForm:function(idTask){if(this.active===true){return;}
var form='task-'+idTask+'-assetform';if(!Todoyu.exists(form)){var url=Todoyu.getUrl('assets','tasktab');var options={'parameters':{'action':'uploadform','task':idTask}};var target='task-'+idTask+'-assets-commands';Todoyu.Ui.append(target,url,options);}},onChange:function(idTask){this.addIFrame(idTask);this.showProgressBar(idTask,this.getField(idTask).value);this.hideUploadField(idTask);this.submit(idTask);this.replaceField(idTask);},submit:function(idTask){this.active=true;this.getForm(idTask).writeAttribute('target','upload-iframe-asset-'+idTask);this.getForm(idTask).submit();},getField:function(idTask){return $('asset-'+idTask+'-field-file');},getForm:function(idTask){return $('asset-'+idTask+'-form');},addIFrame:function(idTask){Todoyu.Form.addIFrame('asset-'+idTask);},removeIFrame:function(){$$('iframe.uploadIframe').first().remove();},replaceField:function(idTask){var old=this.getField(idTask);var field=new Element('input',{'id':old.readAttribute('id'),'type':old.readAttribute('type'),'onchange':old.readAttribute('onchange'),'name':old.readAttribute('name')});old.replace(field);},showProgressBar:function(idTask,filename){var formElement=new Element('div',{'id':'asset-uploader-element','class':'formElement'});var loaderText=new Element('div').update('Filename'+': '+filename);var loaderImage=new Element('img',{'src':'core/assets/img/progress.gif'});formElement.insert(loaderText);formElement.insert(loaderImage);$('formElement-asset-'+idTask+'-field-file').insert({before:formElement});},removeProgressBar:function(){$('asset-uploader-element').remove();},hideUploadField:function(idTask){$('formElement-asset-'+idTask+'-field-file').hide();},showUploadField:function(){var fields=$$('input[type=file][id^=asset-][id$=-field-file]');fields.each(function(element){var formElement=element.up('div.typeUpload');if(formElement){if(formElement.up('form.formAsset')&&!formElement.visible()){formElement.show();return;}}});},uploadFinished:function(idTask,tabLabel){this.active=false;this.removeProgressBar();this.removeIFrame();this.showUploadField();if(Todoyu.exists('task-'+idTask+'-assets-commands')){Todoyu.Ext.assets.List.refresh(idTask);}else{Todoyu.Ext.assets.updateTab(idTask);}
Todoyu.notifySuccess('The file has been uploaded');Todoyu.Ext.assets.setTabLabel(idTask,tabLabel);},uploadFailed:function(error,filename,maxFileSize){this.active=false;this.removeProgressBar();this.removeIFrame();this.showUploadField();var info={'filename':filename,'maxFileSize':maxFileSize};var msg='';if(error===1||error===2){msg='The file \'#{filename}\' has exceeded the maximum allowed filesize (#{maxFileSize}Bytes) to upload';}else{msg='The upload of the file \'#{filename}\' has failed';}
Todoyu.notifyError(msg.interpolate(info),10);}};
Todoyu.Ext.calendar.ContextMenuCalendarBody={ext:Todoyu.Ext.calendar,attach:function(){Todoyu.ContextMenu.attach('calendarbody','.contextmenucalendararea',this.getTime.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenucalendararea');},getTime:function(element,event){return this.getClickedTime(event);},getClickedTime:function(event){var calendarMode=this.ext.getActiveTab();if(calendarMode=='month'){var time=event.element().id.replace('createEventAt-','');}else{var time=this.ext.CalendarBody.getTimeOfMouseCoordinates(event.pointerX(),event.pointerY());}
return time;}};
Todoyu.Ext.calendar.ContextMenuEvent={ext:Todoyu.Ext.calendar,attach:function(){Todoyu.ContextMenu.attach('event','.contextmenuevent',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenuevent');},getID:function(element,event){return element.id.split('-').last();}};
Todoyu.Ext.calendar.ContextMenuEventPortal={ext:Todoyu.Ext.calendar,attach:function(){Todoyu.ContextMenu.attach('eventPortal','.contextmenuEventPortal',this.getID.bind(this));},detach:function(){Todoyu.ContextMenu.detach('.contextmenuEventPortal');},getID:function(element,event){return element.id.split('-').last();}};
Todoyu.Ext.calendar.PanelWidget.EventTypeSelector={ext:Todoyu.Ext.calendar,list:null,init:function(){this.list=$('panelwidget-eventtypeSelector-list');this.installObservers();},installObservers:function(){this.list.observe('change',this.onSelectionChange.bind(this));},onSelectionChange:function(event){this.onUpdate();},onUpdate:function(){this.savePrefs();},selectAllEventTypes:function(select){var selected=select===true;this.list.select('option').each(function(option){option.selected=selected;});},getSelectedEventTypes:function(){return $F(this.list);},getNumberOfSelectedEventTypes:function(){return this.getSelectedEventTypes().size();},isAnyEventTypeSelected:function(){return this.getNumberOfSelectedEventTypes()>0;},savePrefs:function(){var pref=this.getSelectedEventTypes().join(',');Todoyu.Pref.save('calendar','panelwidgeteventtypeselector',pref,0,this.onPrefsSaved.bind(this));},onPrefsSaved:function(response){Todoyu.PanelWidget.fire('eventtypeselector',this.getSelectedEventTypes());}};
Todoyu.Ext.calendar.PanelWidget.HolidaySetSelector={ext:Todoyu.Ext.calendar,key:'panelwidget-holidaysetselector',list:'panelwidget-holidaysetselector-list',init:function(){this.installObservers();},installObservers:function(){$(this.list).observe('change',this.onHolidaySetSelect.bind(this));},onHolidaySetSelect:function(event){var selectedSetIDs=this.getSelectedHolidaySetIDs();this.verifySelectedSets(selectedSetIDs);this.onUpdate(selectedSetIDs.join(','));},verifySelectedSets:function(selectedSetIDs){if(selectedSetIDs.include(0)){this.selectNoSetOption();}},onUpdate:function(value){this.savePrefs();Todoyu.PanelWidget.fire(this.key,value);},selectAllHolidaySets:function(){$$('#panelwidget-holidaysetselector-list option').each(function(item){item.selected=true;});},unselectAllHolidaySets:function(){$$('#panelwidget-holidaysetselector-list option').each(function(item){item.selected=false;});},selectNoSetOption:function(){this.unselectAllHolidaySets();$('panelwidget-holidaysetselector-list').options[0].selected=true;},getSelectedHolidaySetIDs:function(){var setIDs=[];$$('#panelwidget-holidaysetselector-list option').each(function(item){if(item.selected){setIDs.push(item.value);}});return setIDs;},getAmountOfselectedSets:function(){var amount=0;$$('#panelwidget-holidaysetselector-list option').each(function(item){if(item.selected){amount++;}});return amount;},isAnyHolidaySetSelected:function(){return(this.getAmountOfselectedSets()>0);},savePrefs:function(){var typeIDs=this.getSelectedHolidaySetIDs().join(',');var url=Todoyu.getUrl('calendar','preference');var options={'parameters':{'action':'panelwidgetholidaysetselector','preference':this.key,'area':Todoyu.getArea(),'value':typeIDs},'onComplete':function(response){this.onPrefsSaved(response);}.bind(this)};Todoyu.send(url,options);},onPrefsSaved:function(response){Todoyu.Ext.calendar.refresh();}};
Todoyu.Ext.project.Filter={ext:Todoyu.Ext.project,onProjectSearchResultsUpdated:function(){this.ext.ContextMenuProject.attach();},onTaskSearchResultsUpdated:function(){this.ext.ContextMenuTask.attach();},onProjectrolePersonAcSelect:function(name,textInput,listElement){$('widget-autocompleter-'+name+'-hidden').value=listElement.id;this.updateProjectRoleConditionValue(name);},onProjectroleRoleChange:function(name){this.updateProjectRoleConditionValue(name);},onProjectrolePersonChange:function(name){if($F('widget-autocompleter-'+name)===''){$('widget-autocompleter-'+name+'-hidden').value=0;this.updateProjectRoleConditionValue(name);}},getProjectrolePerson:function(name){return $F('widget-autocompleter-'+name+'-hidden');},getProjectroleRoles:function(name){return $F('filterwidget-select-'+name);},updateProjectRoleConditionValue:function(name){var idPerson=this.getProjectrolePerson(name);var projectRoles=this.getProjectroleRoles(name);var value=idPerson+':'+projectRoles.join(',');Todoyu.Ext.search.Filter.updateConditionValue(name,value);}};
Todoyu.Ext.contact.QuickInfoPerson={ext:Todoyu.Ext.contact,selector:'.quickInfoPerson',install:function(){},uninstall:function(){Todoyu.QuickInfo.uninstall(this.selector);},add:function(idElement){Todoyu.QuickInfo.install('person','#'+idElement,this.getID.bind(this));},remove:function(idElement){Todoyu.QuickInfo.uninstall('#'+idElement);},getID:function(element,event){return $(element).id.split('-').last();},removeFromCache:function(idPerson){Todoyu.QuickInfo.removeFromCache('person'+idPerson);}};
Todoyu.Hook.add('onTaskEdit',Todoyu.Ext.project.Task.focusTitleField.bind(Todoyu.Ext.project.Task));
