
ccms.html.use();ccms.require('/js/3rdparty/behaviour.js');ccms.require('/js/3rdparty/dateparse.js');ccms.namespace('ccms.editor');ccms.editor.installHandlers=function(root_element){if(typeof root_element=='undefined')
root_element=document;ccms.event.attach(ccms.dom.getElementsByClassName('tag-selector','select',root_element),'change',updateTagList);ccms.event.attach(ccms.dom.getElementsByClassName('addDuration','input',root_element),'click',addDuration);ccms.event.attach(ccms.dom.getElementsByClassName('typeDate','input',root_element),'click',getDateFromUser,false);ccms.event.attach(ccms.dom.getElementsByClassName('typeDateTime','input',root_element),'click',getDateFromUser,true);var uris=ccms.dom.getElementsByClassName('for-uri','input',root_element);for(var i=0;i<uris.length;++i){ccms.widgets.add(new ccms.editor.NameChecker(uris[i]));}
var categorylists=ccms.dom.getElementsByClassName('categories','ol',root_element)
if(categorylists.length)
ccms.widgets.add(new ccms.editor.ListExpander(categorylists[0]));}
ccms.widgets.addInstaller('installHandlers',ccms.editor.installHandlers);ccms.editor.ListExpander=function(root){var self=this;self.root=root;self.addOpener=function(li,isclosed){var a=ccms.html.IMG({'class':'list-opener','width':9,'height':9});a.setAttribute('src','/furniture/icons/disclosure-'+(isclosed?'plus':'minus')+'.png');li.insertBefore(a,li.firstChild);ccms.dom.setStyleObject(a,{cursor:'pointer'});ccms.event.attach(a,'click',function(e){var ul=li.getElementsByTagName(li.parentNode.tagName)[0];if(ul.style.display=='none'){ul.style.display='';a.setAttribute('src','/furniture/icons/disclosure-'+'minus'+'.png');}
else{ul.style.display='none';a.setAttribute('src','/furniture/icons/disclosure-'+'plus'+'.png');}});}
self.removeOpener=function(li){var a=ccms.dom.getElementsByClassName('list-opener','img',li);if(a.length){a=a[0];ccms.event.detach(a,'click');a.parentNode.removeChild(a);}}
self.updateState=function(ul){var list,radio,a;var item=ul.firstChild;var rv=false;var i=0;while(item){if(item.nodeType==Node.ELEMENT_NODE&&item.tagName.toLowerCase()=='li'){list=item.getElementsByTagName(ul.tagName);if(list.length>0&&list[0].parentNode==item){list=list[0];if(self.updateState(list)){list.style.display='';self.addOpener(item,false);}
else{list.style.display='none';self.addOpener(item,true);}}
else{a=ccms.html.SPAN({'class':'list-opener'},' ');ccms.dom.setStyleObject(a,{'paddingLeft':'9px'});item.insertBefore(a,item.firstChild);}
radio=ccms.dom.getElementsByClassName('checkbox','input',item)[0];if(radio.checked)
rv=true;}
item=item.nextSibling;}
return rv;}
self.updateState(self.root);}
function addDuration(e){var d=prompt('Enter duration (minutes, or hours:minutes, or days:hours:minutes)');if(d!=null){var a=d.split(':');for(var i=0;i<a.length;++i){a[i]=intval(a[i]);}
while(a.length<3){a.unshift(0);}
var controls=new Array();var el=e.previousSibling;while(controls.length<3){if(el.tagName=='INPUT'&&el.type=='text'){controls.unshift(el);}
el=el.previousSibling;}
for(var i=0;i<controls.length;++i){a[i]+=intval(controls[i].value);}
if(a[2]>59){a[1]+=intval(a[2]/60);a[2]=a[2]%60;}
if(a[1]>24){a[0]+=intval(a[1]/24);a[1]=a[1]%24;}
for(var i=0;i<controls.length;++i){controls[i].value=a[i];}}}
function updateTagList(e){var del=',';var node;node=ccms.dom.getPrevious(this,function(n){return n.tagName=='INPUT'&&n.type=='hidden'&&n.name.match(/\/tags\/delimiter$/);});if(node)del=node.value;node=ccms.dom.getPrevious(this,function(n){return n.tagName=='INPUT'&&n.type=='text'&&n.name.match(/\/tags\/tags$/);});node.value+=(node.value==""?'':del.trim()+' ')+this[this.selectedIndex].value;this.selectedIndex=0;}
function setSelectedIndexByValue(select,value){for(var i=0;i<select.options.length;++i){if(value==select.options[i].value){select.selectedIndex=i;break;}}}
function getDateFromUser(e,withtime){var theprompt="Enter the date. The following forms are allowed:\n* dd/mm/yyyy (e.g. 18/03/2006)\n* yyyy-mm-dd (e.g. 2006-03-18)\n* 18th March\n* 18th March 2006\n* March 18\n* March 18 2006\n* tomorrow (or if you're lazy, just tom)\n* today (or if you're lazy, just tod)\n* yesterday (or if you're lazy, just yes)\n* tuesday (the tuesday following today)\n* next tues (the tuesday after)";theprompt+="\nAll day and month names can be abbreviated (e.g. mon, tues, wed, and sep, oct, nov)"
if(withtime){theprompt+="\nAll dates can have the time specified using HH:MM format (e.g. 15:30)";}
var s=prompt(theprompt);if(s!=null){var d;try{d=parseDateString(s);}
catch(e){d=new Date();}
var bits=/\b(\d{1,2})([:\. ]\d{1,2})?([:\. ]\d{1,2})?$\b/.exec(s);var count=withtime?6:3;var controls=new Array();var el=this.previousSibling;while(controls.length<count){if(el.tagName=='SELECT'){controls.unshift(el);}
el=el.previousSibling;}
if(s==''){controls[0].selectedIndex=0;controls[1].selectedIndex=0;controls[2].selectedIndex=0;if(withtime){controls[3].selectedIndex=0;controls[4].selectedIndex=0;controls[5].selectedIndex=0;}}
else{controls[0].selectedIndex=d.getDate()-1;controls[1].selectedIndex=d.getMonth();setSelectedIndexByValue(controls[2],d.getFullYear());if(withtime){if(bits&&bits[1])
controls[3].selectedIndex=intval(bits[1]);else
controls[3].selectedIndex=0;if(bits&&bits[2])
controls[4].selectedIndex=intval(bits[2].substring(1));else
controls[4].selectedIndex=0;if(bits&&bits[3])
controls[5].selectedIndex=intval(bits[3].substring(1));else
controls[5].selectedIndex=0;}}}}
ccms.editor.NameChecker=function(element){var self=this;this.src=element;this.initialize=function(){self.srcvalue='';self.urivalue='';var message=ccms.html.DIV({'class':'message','id':element.id+'.httpmsg'});ccms.dom.insertAfter(message,element);this.urinameinput=ccms.html.INPUT({'type':'text','id':element.id+'.uriname','name':element.name+'/uriname'});var field=ccms.html.DIV(document.location.href.replace(/\/register\/?$/,'/users')+'/',this.urinameinput);ccms.dom.insertAfter(field,element);ccms.event.attach(element,'blur',this.onSrcBlur);ccms.event.attach(this.urinameinput,'blur',this.onURINameBlur);this.onSrcBlur(null);};this.onSrcBlur=function(e){self.src.value=self.src.value.replace(/^\s*(.*?)\s*$/,'$1');if(self.src.value!=self.srcvalue){$(self.src.id+'.httpmsg').innerHTML='Checking Name...';ccms.async.http({method:'GET',url:'register/namecheck',parameters:{name:self.src.value},onSuccess:self.onNameChecked,onFailure:self.onHTTPError});self.srcvalue=self.src.value;}};this.onURINameBlur=function(e){var i=$(self.src.id+'.uriname');i.value=i.value.replace(/^\s*(.*?)\s*$/,'$1');if(i.value!=self.urivalue){$(self.src.id+'.httpmsg').innerHTML='Checking Name...';ccms.async.http({method:'GET',url:'register/namecheck',parameters:{name:i.value},onSuccess:self.onNameChecked,onFailure:self.onHTTPError});self.urivalue=$(self.src.id+'.uriname').value;}};this.onNameChecked=function(req){$(self.src.id+'.httpmsg').innerHTML='';var response=req.responseText.parseJSON();if(response.errors.length){$(self.src.id+'.httpmsg').innerHTML=response.errors[0];}
else if(response.suggestions.length){$(self.src.id+'.uriname').value=response.suggestions[0];}
else{$(self.src.id+'.uriname').value='';$(self.src.id+'.httpmsg').innerHTML='No response!!';}
self.srcvalue=self.src.value;self.urivalue=$(self.src.id+'.uriname').value;}
this.onHTTPError=function(req){$(self.src.id+'.httpmsg').innerHTML=req.responseText;}
this.initialize();}
ccms.event.attach(window,'load',function(){dp_dateFormat='dd/mm/yyyy';});
