if(Object.isUndefined(Effect))throw("dragdrop.js requires including script.aculo.us' effects.js library");var Droppables={drops:[],remove:function(element){this.drops=this.drops.reject(function(d){return d.element==$(element)})},add:function(element){element=$(element);var options=Object.extend({greedy:true,hoverclass:null,tree:false},arguments[1]||{});if(options.containment){options._containers=[];var containment=options.containment;if(Object.isArray(containment)){containment.each(function(c){options._containers.push($(c))})}else{options._containers.push($(containment))}}if(options.accept)options.accept=[options.accept].flatten();Element.makePositioned(element);options.element=element;this.drops.push(options)},findDeepestChild:function(drops){deepest=drops[0];for(i=1;i<drops.length;++i)if(Element.isParent(drops[i].element,deepest.element))deepest=drops[i];return deepest},isContained:function(element,drop){var containmentNode;if(drop.tree){containmentNode=element.treeNode}else{containmentNode=element.parentNode}return drop._containers.detect(function(c){return containmentNode==c})},isAffected:function(point,element,drop){return((drop.element!=element)&&((!drop._containers)||this.isContained(element,drop))&&((!drop.accept)||(Element.classNames(element).detect(function(v){return drop.accept.include(v)})))&&Position.within(drop.element,point[0],point[1]))},deactivate:function(drop){if(drop.hoverclass)Element.removeClassName(drop.element,drop.hoverclass);this.last_active=null},activate:function(drop){if(drop.hoverclass)Element.addClassName(drop.element,drop.hoverclass);this.last_active=drop},show:function(point,element){if(!this.drops.length)return;var drop,affected=[];this.drops.each(function(drop){if(Droppables.isAffected(point,element,drop))affected.push(drop)});if(affected.length>0)drop=Droppables.findDeepestChild(affected);if(this.last_active&&this.last_active!=drop)this.deactivate(this.last_active);if(drop){Position.within(drop.element,point[0],point[1]);if(drop.onHover)drop.onHover(element,drop.element,Position.overlap(drop.overlap,drop.element));if(drop!=this.last_active)Droppables.activate(drop)}},fire:function(event,element){if(!this.last_active)return;Position.prepare();if(this.isAffected([Event.pointerX(event),Event.pointerY(event)],element,this.last_active))if(this.last_active.onDrop){this.last_active.onDrop(element,this.last_active.element,event);return true}},reset:function(){if(this.last_active)this.deactivate(this.last_active)}};var Draggables={drags:[],observers:[],register:function(draggable){if(this.drags.length==0){this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.updateDrag.bindAsEventListener(this);this.eventKeypress=this.keyPress.bindAsEventListener(this);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);Event.observe(document,"keypress",this.eventKeypress)}this.drags.push(draggable)},unregister:function(draggable){this.drags=this.drags.reject(function(d){return d==draggable});if(this.drags.length==0){Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);Event.stopObserving(document,"keypress",this.eventKeypress)}},activate:function(draggable){if(draggable.options.delay){this._timeout=setTimeout(function(){Draggables._timeout=null;window.focus();Draggables.activeDraggable=draggable}.bind(this),draggable.options.delay)}else{window.focus();this.activeDraggable=draggable}},deactivate:function(){this.activeDraggable=null},updateDrag:function(event){if(!this.activeDraggable)return;var pointer=[Event.pointerX(event),Event.pointerY(event)];if(this._lastPointer&&(this._lastPointer.inspect()==pointer.inspect()))return;this._lastPointer=pointer;this.activeDraggable.updateDrag(event,pointer)},endDrag:function(event){if(this._timeout){clearTimeout(this._timeout);this._timeout=null}if(!this.activeDraggable)return;this._lastPointer=null;this.activeDraggable.endDrag(event);this.activeDraggable=null},keyPress:function(event){if(this.activeDraggable)this.activeDraggable.keyPress(event)},addObserver:function(observer){this.observers.push(observer);this._cacheObserverCallbacks()},removeObserver:function(element){this.observers=this.observers.reject(function(o){return o.element==element});this._cacheObserverCallbacks()},notify:function(eventName,draggable,event){if(this[eventName+'Count']>0)this.observers.each(function(o){if(o[eventName])o[eventName](eventName,draggable,event)});if(draggable.options[eventName])draggable.options[eventName](draggable,event)},_cacheObserverCallbacks:function(){['onStart','onEnd','onDrag'].each(function(eventName){Draggables[eventName+'Count']=Draggables.observers.select(function(o){return o[eventName]}).length})}};var Draggable=Class.create({initialize:function(element){var defaults={handle:false,reverteffect:function(element,top_offset,left_offset){var dur=Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;new Effect.Move(element,{x:-left_offset,y:-top_offset,duration:dur,queue:{scope:'_draggable',position:'end'}})},endeffect:function(element){var toOpacity=Object.isNumber(element._opacity)?element._opacity:1.0;new Effect.Opacity(element,{duration:0.2,from:0.7,to:toOpacity,queue:{scope:'_draggable',position:'end'},afterFinish:function(){Draggable._dragging[element]=false}})},zindex:1000,revert:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false,delay:0};if(!arguments[1]||Object.isUndefined(arguments[1].endeffect))Object.extend(defaults,{starteffect:function(element){element._opacity=Element.getOpacity(element);Draggable._dragging[element]=true;new Effect.Opacity(element,{duration:0.2,from:element._opacity,to:0.7})}});var options=Object.extend(defaults,arguments[1]||{});this.element=$(element);if(options.handle&&Object.isString(options.handle))this.handle=this.element.down('.'+options.handle,0);if(!this.handle)this.handle=$(options.handle);if(!this.handle)this.handle=this.element;if(options.scroll&&!options.scroll.scrollTo&&!options.scroll.outerHTML){options.scroll=$(options.scroll);this._isScrollChild=Element.childOf(this.element,options.scroll)}Element.makePositioned(this.element);this.options=options;this.dragging=false;this.eventMouseDown=this.initDrag.bindAsEventListener(this);Event.observe(this.handle,"mousedown",this.eventMouseDown);Draggables.register(this)},destroy:function(){Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);Draggables.unregister(this)},currentDelta:function(){return([parseInt(Element.getStyle(this.element,'left')||'0'),parseInt(Element.getStyle(this.element,'top')||'0')])},initDrag:function(event){if(!Object.isUndefined(Draggable._dragging[this.element])&&Draggable._dragging[this.element])return;if(Event.isLeftClick(event)){var src=Event.element(event);if((tag_name=src.tagName.toUpperCase())&&(tag_name=='INPUT'||tag_name=='SELECT'||tag_name=='OPTION'||tag_name=='BUTTON'||tag_name=='TEXTAREA'))return;var pointer=[Event.pointerX(event),Event.pointerY(event)];var pos=Position.cumulativeOffset(this.element);this.offset=[0,1].map(function(i){return(pointer[i]-pos[i])});Draggables.activate(this);Event.stop(event)}},startDrag:function(event){this.dragging=true;if(!this.delta)this.delta=this.currentDelta();if(this.options.zindex){this.originalZ=parseInt(Element.getStyle(this.element,'z-index')||0);this.element.style.zIndex=this.options.zindex}if(this.options.ghosting){this._clone=this.element.cloneNode(true);this._originallyAbsolute=(this.element.getStyle('position')=='absolute');if(!this._originallyAbsolute)Position.absolutize(this.element);this.element.parentNode.insertBefore(this._clone,this.element)}if(this.options.scroll){if(this.options.scroll==window){var where=this._getWindowScroll(this.options.scroll);this.originalScrollLeft=where.left;this.originalScrollTop=where.top}else{this.originalScrollLeft=this.options.scroll.scrollLeft;this.originalScrollTop=this.options.scroll.scrollTop}}Draggables.notify('onStart',this,event);if(this.options.starteffect)this.options.starteffect(this.element)},updateDrag:function(event,pointer){if(!this.dragging)this.startDrag(event);if(!this.options.quiet){Position.prepare();Droppables.show(pointer,this.element)}Draggables.notify('onDrag',this,event);this.draw(pointer);if(this.options.change)this.options.change(this);if(this.options.scroll){this.stopScrolling();var p;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){p=[left,top,left+width,top+height]}}else{p=Position.page(this.options.scroll);p[0]+=this.options.scroll.scrollLeft+Position.deltaX;p[1]+=this.options.scroll.scrollTop+Position.deltaY;p.push(p[0]+this.options.scroll.offsetWidth);p.push(p[1]+this.options.scroll.offsetHeight)}var speed=[0,0];if(pointer[0]<(p[0]+this.options.scrollSensitivity))speed[0]=pointer[0]-(p[0]+this.options.scrollSensitivity);if(pointer[1]<(p[1]+this.options.scrollSensitivity))speed[1]=pointer[1]-(p[1]+this.options.scrollSensitivity);if(pointer[0]>(p[2]-this.options.scrollSensitivity))speed[0]=pointer[0]-(p[2]-this.options.scrollSensitivity);if(pointer[1]>(p[3]-this.options.scrollSensitivity))speed[1]=pointer[1]-(p[3]-this.options.scrollSensitivity);this.startScrolling(speed)}if(Prototype.Browser.WebKit)window.scrollBy(0,0);Event.stop(event)},finishDrag:function(event,success){this.dragging=false;if(this.options.quiet){Position.prepare();var pointer=[Event.pointerX(event),Event.pointerY(event)];Droppables.show(pointer,this.element)}if(this.options.ghosting){if(!this._originallyAbsolute)Position.relativize(this.element);delete this._originallyAbsolute;Element.remove(this._clone);this._clone=null}var dropped=false;if(success){dropped=Droppables.fire(event,this.element);if(!dropped)dropped=false}if(dropped&&this.options.onDropped)this.options.onDropped(this.element);Draggables.notify('onEnd',this,event);var revert=this.options.revert;if(revert&&Object.isFunction(revert))revert=revert(this.element);var d=this.currentDelta();if(revert&&this.options.reverteffect){if(dropped==0||revert!='failure')this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0])}else{this.delta=d}if(this.options.zindex)this.element.style.zIndex=this.originalZ;if(this.options.endeffect)this.options.endeffect(this.element);Draggables.deactivate(this);Droppables.reset()},keyPress:function(event){if(event.keyCode!=Event.KEY_ESC)return;this.finishDrag(event,false);Event.stop(event)},endDrag:function(event){if(!this.dragging)return;this.stopScrolling();this.finishDrag(event,true);Event.stop(event)},draw:function(point){var pos=Position.cumulativeOffset(this.element);if(this.options.ghosting){var r=Position.realOffset(this.element);pos[0]+=r[0]-Position.deltaX;pos[1]+=r[1]-Position.deltaY}var d=this.currentDelta();pos[0]-=d[0];pos[1]-=d[1];if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){pos[0]-=this.options.scroll.scrollLeft-this.originalScrollLeft;pos[1]-=this.options.scroll.scrollTop-this.originalScrollTop}var p=[0,1].map(function(i){return(point[i]-pos[i]-this.offset[i])}.bind(this));if(this.options.snap){if(Object.isFunction(this.options.snap)){p=this.options.snap(p[0],p[1],this)}else{if(Object.isArray(this.options.snap)){p=p.map(function(v,i){return(v/this.options.snap[i]).round()*this.options.snap[i]}.bind(this))}else{p=p.map(function(v){return(v/this.options.snap).round()*this.options.snap}.bind(this))}}}var style=this.element.style;if((!this.options.constraint)||(this.options.constraint=='horizontal'))style.left=p[0]+"px";if((!this.options.constraint)||(this.options.constraint=='vertical'))style.top=p[1]+"px";if(style.visibility=="hidden")style.visibility=""},stopScrolling:function(){if(this.scrollInterval){clearInterval(this.scrollInterval);this.scrollInterval=null;Draggables._lastScrollPointer=null}},startScrolling:function(speed){if(!(speed[0]||speed[1]))return;this.scrollSpeed=[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];this.lastScrolled=new Date();this.scrollInterval=setInterval(this.scroll.bind(this),10)},scroll:function(){var current=new Date();var delta=current-this.lastScrolled;this.lastScrolled=current;if(this.options.scroll==window){with(this._getWindowScroll(this.options.scroll)){if(this.scrollSpeed[0]||this.scrollSpeed[1]){var d=delta/1000;this.options.scroll.scrollTo(left+d*this.scrollSpeed[0],top+d*this.scrollSpeed[1])}}}else{this.options.scroll.scrollLeft+=this.scrollSpeed[0]*delta/1000;this.options.scroll.scrollTop+=this.scrollSpeed[1]*delta/1000}Position.prepare();Droppables.show(Draggables._lastPointer,this.element);Draggables.notify('onDrag',this);if(this._isScrollChild){Draggables._lastScrollPointer=Draggables._lastScrollPointer||$A(Draggables._lastPointer);Draggables._lastScrollPointer[0]+=this.scrollSpeed[0]*delta/1000;Draggables._lastScrollPointer[1]+=this.scrollSpeed[1]*delta/1000;if(Draggables._lastScrollPointer[0]<0)Draggables._lastScrollPointer[0]=0;if(Draggables._lastScrollPointer[1]<0)Draggables._lastScrollPointer[1]=0;this.draw(Draggables._lastScrollPointer)}if(this.options.change)this.options.change(this)},_getWindowScroll:function(w){var T,L,W,H;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else if(w.document.body){T=body.scrollTop;L=body.scrollLeft}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}return{top:T,left:L,width:W,height:H}}});Draggable._dragging={};var SortableObserver=Class.create({initialize:function(element,observer){this.element=$(element);this.observer=observer;this.lastValue=Sortable.serialize(this.element)},onStart:function(){this.lastValue=Sortable.serialize(this.element)},onEnd:function(){Sortable.unmark();if(this.lastValue!=Sortable.serialize(this.element))this.observer(this.element)}});var Sortable={SERIALIZE_RULE:/^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,sortables:{},_findRootElement:function(element){while(element.tagName.toUpperCase()!="BODY"){if(element.id&&Sortable.sortables[element.id])return element;element=element.parentNode}},options:function(element){element=Sortable._findRootElement($(element));if(!element)return;return Sortable.sortables[element.id]},destroy:function(element){element=$(element);var s=Sortable.sortables[element.id];if(s&&element.id==s.element.id){Draggables.removeObserver(s.element);s.droppables.each(function(d){Droppables.remove(d)});s.draggables.invoke('destroy');delete Sortable.sortables[s.element.id]}},create:function(element){element=$(element);var options=Object.extend({element:element,tag:'li',dropOnEmpty:false,tree:false,treeTag:'ul',overlap:'vertical',constraint:'vertical',containment:element,handle:false,only:false,delay:0,hoverclass:null,ghosting:false,quiet:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:this.SERIALIZE_RULE,elements:false,handles:false,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction,onStart:Prototype.emptyFunction,onEnd:Prototype.emptyFunction},arguments[1]||{});this.destroy(element);var options_for_draggable={revert:true,quiet:options.quiet,scroll:options.scroll,scrollSpeed:options.scrollSpeed,scrollSensitivity:options.scrollSensitivity,delay:options.delay,ghosting:options.ghosting,constraint:options.constraint,handle:options.handle,onStart:options.onStart,onEnd:options.onEnd};if(options.starteffect)options_for_draggable.starteffect=options.starteffect;if(options.reverteffect)options_for_draggable.reverteffect=options.reverteffect;else if(options.ghosting)options_for_draggable.reverteffect=function(element){element.style.top=0;element.style.left=0};if(options.endeffect)options_for_draggable.endeffect=options.endeffect;if(options.zindex)options_for_draggable.zindex=options.zindex;var options_for_droppable={overlap:options.overlap,containment:options.containment,tree:options.tree,hoverclass:options.hoverclass,onHover:Sortable.onHover};var options_for_tree={onHover:Sortable.onEmptyHover,overlap:options.overlap,containment:options.containment,hoverclass:options.hoverclass};Element.cleanWhitespace(element);options.draggables=[];options.droppables=[];if(options.dropOnEmpty||options.tree){Droppables.add(element,options_for_tree);options.droppables.push(element)}(options.elements||this.findElements(element,options)||[]).each(function(e,i){var handle=options.handles?$(options.handles[i]):(options.handle?$(e).select('.'+options.handle)[0]:e);options.draggables.push(new Draggable(e,Object.extend(options_for_draggable,{handle:handle})));Droppables.add(e,options_for_droppable);if(options.tree)e.treeNode=element;options.droppables.push(e)});if(options.tree){(Sortable.findTreeElements(element,options)||[]).each(function(e){Droppables.add(e,options_for_tree);e.treeNode=element;options.droppables.push(e)})}this.sortables[element.id]=options;Draggables.addObserver(new SortableObserver(element,options.onUpdate))},findElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.tag)},findTreeElements:function(element,options){return Element.findChildren(element,options.only,options.tree?true:false,options.treeTag)},onHover:function(element,dropon,overlap){if(Element.isParent(dropon,element))return;if(overlap>.33&&overlap<.66&&Sortable.options(dropon).tree){return}else if(overlap>0.5){Sortable.mark(dropon,'before');if(dropon.previousSibling!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,dropon);if(dropon.parentNode!=oldParentNode)Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element)}}else{Sortable.mark(dropon,'after');var nextElement=dropon.nextSibling||null;if(nextElement!=element){var oldParentNode=element.parentNode;element.style.visibility="hidden";dropon.parentNode.insertBefore(element,nextElement);if(dropon.parentNode!=oldParentNode)Sortable.options(oldParentNode).onChange(element);Sortable.options(dropon.parentNode).onChange(element)}}},onEmptyHover:function(element,dropon,overlap){var oldParentNode=element.parentNode;var droponOptions=Sortable.options(dropon);if(!Element.isParent(dropon,element)){var index;var children=Sortable.findElements(dropon,{tag:droponOptions.tag,only:droponOptions.only});var child=null;if(children){var offset=Element.offsetSize(dropon,droponOptions.overlap)*(1.0-overlap);for(index=0;index<children.length;index+=1){if(offset-Element.offsetSize(children[index],droponOptions.overlap)>=0){offset-=Element.offsetSize(children[index],droponOptions.overlap)}else if(offset-(Element.offsetSize(children[index],droponOptions.overlap)/2)>=0){child=index+1<children.length?children[index+1]:null;break}else{child=children[index];break}}}dropon.insertBefore(element,child);Sortable.options(oldParentNode).onChange(element);droponOptions.onChange(element)}},unmark:function(){if(Sortable._marker)Sortable._marker.hide()},mark:function(dropon,position){var sortable=Sortable.options(dropon.parentNode);if(sortable&&!sortable.ghosting)return;if(!Sortable._marker){Sortable._marker=($('dropmarker')||Element.extend(document.createElement('DIV'))).hide().addClassName('dropmarker').setStyle({position:'absolute'});document.getElementsByTagName("body").item(0).appendChild(Sortable._marker)}var offsets=Position.cumulativeOffset(dropon);Sortable._marker.setStyle({left:offsets[0]+'px',top:offsets[1]+'px'});if(position=='after')if(sortable.overlap=='horizontal')Sortable._marker.setStyle({left:(offsets[0]+dropon.clientWidth)+'px'});else Sortable._marker.setStyle({top:(offsets[1]+dropon.clientHeight)+'px'});Sortable._marker.show()},_tree:function(element,options,parent){var children=Sortable.findElements(element,options)||[];for(var i=0;i<children.length;++i){var match=children[i].id.match(options.format);if(!match)continue;var child={id:encodeURIComponent(match?match[1]:null),element:element,parent:parent,children:[],position:parent.children.length,container:$(children[i]).down(options.treeTag)};if(child.container)this._tree(child.container,options,child);parent.children.push(child)}return parent},tree:function(element){element=$(element);var sortableOptions=this.options(element);var options=Object.extend({tag:sortableOptions.tag,treeTag:sortableOptions.treeTag,only:sortableOptions.only,name:element.id,format:sortableOptions.format},arguments[1]||{});var root={id:null,parent:null,children:[],container:element,position:0};return Sortable._tree(element,options,root)},_constructIndex:function(node){var index='';do{if(node.id)index='['+node.position+']'+index}while((node=node.parent)!=null);return index},sequence:function(element){element=$(element);var options=Object.extend(this.options(element),arguments[1]||{});return $(this.findElements(element,options)||[]).map(function(item){return item.id.match(options.format)?item.id.match(options.format)[1]:''})},setSequence:function(element,new_sequence){element=$(element);var options=Object.extend(this.options(element),arguments[2]||{});var nodeMap={};this.findElements(element,options).each(function(n){if(n.id.match(options.format))nodeMap[n.id.match(options.format)[1]]=[n,n.parentNode];n.parentNode.removeChild(n)});new_sequence.each(function(ident){var n=nodeMap[ident];if(n){n[1].appendChild(n[0]);delete nodeMap[ident]}})},serialize:function(element){element=$(element);var options=Object.extend(Sortable.options(element),arguments[1]||{});var name=encodeURIComponent((arguments[1]&&arguments[1].name)?arguments[1].name:element.id);if(options.tree){return Sortable.tree(element,arguments[1]).children.map(function(item){return[name+Sortable._constructIndex(item)+"[id]="+encodeURIComponent(item.id)].concat(item.children.map(arguments.callee))}).flatten().join('&')}else{return Sortable.sequence(element,arguments[1]).map(function(item){return name+"[]="+encodeURIComponent(item)}).join('&')}}};Element.isParent=function(child,element){if(!child.parentNode||child==element)return false;if(child.parentNode==element)return true;return Element.isParent(child.parentNode,element)};Element.findChildren=function(element,only,recursive,tagName){if(!element.hasChildNodes())return null;tagName=tagName.toUpperCase();if(only)only=[only].flatten();var elements=[];$A(element.childNodes).each(function(e){if(e.tagName&&e.tagName.toUpperCase()==tagName&&(!only||(Element.classNames(e).detect(function(v){return only.include(v)}))))elements.push(e);if(recursive){var grandchildren=Element.findChildren(e,only,recursive,tagName);if(grandchildren)elements.push(grandchildren)}});return(elements.length>0?elements.flatten():[])};Element.offsetSize=function(element,type){return element['offset'+((type=='vertical'||type=='height')?'Height':'Width')]};kapp.namespace('edit');kapp.edit.text=function(){if(searchParams['q']==''){var t=new Element('span').update('<strong><span>Hint:</span></strong> You can drag stuff to rearrange this page, and it\'ll stay put on this computer.<div class="close">&nbsp;</div>');var b=t.down('.close');Event.observe(b,'click',kapp.edit.messageClose);return(t)}else{var t=new Element('span').update('<strong><span>Hint:</span></strong> You can rearrange this page, <a href="#" class="add_note">add a note</a>, or <a href="#" class="advanced">add your own content</a>.<div class="close">&nbsp;</div>');var a=t.down('.advanced');Event.observe(a,'click',kapp.edit.advanced);var b=t.down('.add_note');Event.observe(b,'click',kapp.edit.newSticky);var b=t.down('.add_note');Event.observe(b,'click',kapp.edit.newSticky);var c=t.down('.close');Event.observe(c,'click',kapp.edit.messageClose);return(t)}};kapp.edit.messageClose=function(){var exdate=new Date();exdate.setDate(exdate.getDate()+3650);if(searchParams['q']==''){document.cookie='edit_message=false; expires='+exdate.toGMTString()+'; path=/;'}else{document.cookie='edit_page_message=false; expires='+exdate.toGMTString()+'; path=/;'};new Effect.Fade($('edit_message'),{duration:.2})};kapp.edit.advanced=function(ev){Event.stop(ev);var p=new kapp.Popper('edit',{k_title:'Advanced Editing'});return(false)};kapp.edit.newSticky=function(){var s=new kapp.Sticky()};kapp.edit.showMessage=function(){if(!kapp.edit.message){kapp.edit.message=new kSection('edit_message',{'style':'display:none;'});var p=new kPageblock('p_edit_message');p.container().update(kapp.edit.text());kapp.edit.message.appendChild(p);document.body.insertBefore(kapp.edit.message,$('bd'));new Effect.BlindDown(kapp.edit.message,{duration:.2});kapp.share.initshare()}};kapp.edit.save=function(){var exdate=new Date();exdate.setDate(exdate.getDate()+3650);var cdate=new Date();cdate.setDate(exdate.getDate()-3650);var lefties=[],righties=[];var q=searchParams['q'];if(q=='')q='kosmixhomepage';if(q=='')q='kosmixhomepage';var dat={};dat[q]={};$$('#bd > .l_container > .module, #bd > .l_container > .pageblock').each(function(s){lefties.push(s);document.cookie='q_'+q+'_minimize_'+s.id.split(':')[0]+'=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/;'});$$('#bd > .r_container > div').each(function(s){righties.push(s);document.cookie='q_'+q+'_minimize_'+s.id.split(':')[0]+'=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/;'});$$('.minimized').each(function(m){var b=m.up('.module, .pageblock');document.cookie='q_'+q+'_minimize_'+b.id.split(':')[0]+'=true; expires='+exdate.toGMTString()+'; path=/;'});var interleave=[];var n=lefties.length;if(righties.length>lefties.length)n=righties.length;for(a=0;a<n;a++){if(lefties[a])interleave.push(lefties[a]);if(righties[a])interleave.push(righties[a])};var order='';interleave.each(function(s){order+=s.id.split(':')[0]+':'});order=order.substring(0,order.length-1);dat[q]['order']=order;kapp.edit.sendUp($H(dat));document.cookie='q_'+q+'_order='+order+'; expires='+exdate.toGMTString()+'; path=/;';document.cookie='q_'+q+'_editflag=true; expires='+exdate.toGMTString()+'; path=/;'};kapp.edit.sendUp=function(data){if(!document.k_setup){kapp.edit.start(data)}else{}};kapp.edit.start=function(data){};kapp.edit.setUUID=function(response){if(response&&response.responseJSON&&response.responseJSON.id){if(!document.k_setup)document.k_setup={};document.k_setup.id=response.responseJSON.id}};kapp.edit.uuid=function(cb){kapp.edit.uuid_req=new Ajax.Request('/edit/new',{method:'get',onSuccess:cb})};kapp.edit.save_pb=function(){var q=searchParams['q'];if(q=='')q='kosmixhomepage';var dat={};dat[q]={};var pb=this.up('.pageblock');var tabs=this.up('ul.tabs');order='';$A(tabs.getElementsByTagName('li')).each(function(s){order+=s.getAttribute('k_module').split(':')[0]+':'});order=order.substring(0,order.length-1);var exdate=new Date();exdate.setDate(exdate.getDate()+3650);dat[q]['pborder_'+pb.id.split(':')[0]]=order;kapp.edit.sendUp($H(dat));document.cookie='q_kosmixhomepage_pborder_'+pb.id.split(':')[0]+'='+order+'; expires='+exdate.toGMTString()+'; path=/;';document.cookie='q_kosmixhomepage_editflag=true; expires='+exdate.toGMTString()+'; path=/;'};kapp.edit.initTabs=function(s){Event.observe(s,"click",kapp.tabs.switchTo.bind(s))};kapp.edit.controls=function(s){return(true);if(!s.controls){var controls=new Element('div',{'class':'controls','style':'display:none;'});s.controls=controls;s.appendChild(controls);var close=new Element('span',{'class':'close'}).update('&nbsp;');var min=new Element('span',{'class':'minimize'}).update('&nbsp;');controls.appendChild(min);controls.appendChild(close);controls.style.position='absolute';s.style.position='relative';controls.style.top='6px';controls.style.right='10px';close.setStyle({'text-indent':'-9999em','background':'url(/images/k2.2/controls/close.png) top left no-repeat','width':'13px','height':'13px','display':'block','float':'left','cursor':'pointer'});min.setStyle({'text-indent':'-9999em','background':'url(/images/k2.2/controls/minimize.png) top left no-repeat','width':'13px','height':'13px','display':'block','float':'left','cursor':'pointer'});Event.observe(s,'mouseover',function(){controls.show()});Event.observe(s,'mouseout',function(){controls.hide()});Event.observe(close,'click',kapp.edit.close.bind(s));Event.observe(min,'click',kapp.edit.minimize.bind(s))}};kapp.edit.close=function(){new Effect.Fade(this,{duration:.2})};kapp.edit.minimize=function(){if(this.hasClassName('.pageblock')){var bd=this.getElementsByClassName('mcontent')[0]}else{var bd=this.getElementsByClassName('bd')[0]};bd.toggleClassName('minimized');new Effect.toggle(bd,'blind',{duration:0.2});kapp.edit.save()};kapp.edit.init=function(){$$('.pageblock.tabbed ul.tabs').each(function(s){Sortable.create(s,{'tag':'li','constraint':'horizontal','onStart':function(ev){kapp.tabs.switchTo.bindAsEventListener(ev.element).call();if(kapp&&kapp.tabs)kapp.tabs.hovato_enabled=false},'onEnd':function(ev){if(kapp&&kapp.tabs){kapp.tabs.hovato_enabled=true};kapp.edit.save_pb.bind(ev.element).call()}})});Sortable.create($('bd').down('.r_container'),{'tag':'div','handle':'hd','onEnd':kapp.edit.save,'scroll':window});Sortable.create($('bd').down('.l_container'),{'tag':'div','handle':'hd','onEnd':kapp.edit.save,'scroll':window});$$('#bd > .l_container > .module, #bd > .l_container > .pageblock, #bd > .r_container .module, #bd > .r_container .pageblock').each(function(s){kapp.edit.controls(s)});$$('#bd .pageblock.tabbed ul.tabs li').each(function(s){kapp.edit.initTabs(s)});if(document.cookie.indexOf('; edit_message=false')==-1&&searchParams['q']=='')kapp.edit.showMessage();if(document.cookie.indexOf('; edit_page_message=false')==-1&&searchParams['q']!='')kapp.edit.showMessage()};Event.observe(window,'load',function(){kapp.edit.init()});kapp.Section=function(id,opts){var ext={};if(!opts)var opts={};var s=Object.extend(new Element('div',$H(opts).merge({'class':'section','id':id})._object),ext);return(s)};kapp.Pageblock=function(name,opts){var ext={addModule:function(m){this.container().appendChild(m)},container:function(){var b=this.down('.bd');if(!b)b=this;return(b)}};var s=Object.extend(new Element('div',{'class':'pageblock','id':name}),ext).update('<div class="before"></div><div class="mcontent"><div class="bd"></div></div><div class="after"></div>');var w=2;if(opts&&opts.width){w=opts.width}s.addClassName('col'+w);return(s)};kapp.Module=function(name,opts){var ext={setTitle:function(str){var t=this.down('.hd h2');t.innerHTML=str},setQuery:function(str){this.q_set=str},setSource:function(str){var s=this.down('.source a.sm_mfavicon');s.setAttribute('title',str);s.href='http://'+str+'/';var i=s.down('img');i.src='/images/icons/'+str+'.png';i.setAttribute('alt',str)},setSourceText:function(str){var s=this.down('.source a.sm_mattr');s.setAttribute('title',str);s.href='http://'+str+'/';s.innerHTML=str},classes:function(){},q:function(){var q=kl.query;if(this.q_set)q=this.q_set;return(q)},fetch:function(){var url='/kjax/html/module/'+this.id+'?q='+this.q();this.fetcher=new Ajax.Request(url,{onSuccess:this.fetch_return.bind(this),method:'get'})},container:function(){var b=this.down('.target');if(!b)b=this;return(b)},update:function(whatever){this.container().update(whatever);var b=this.down('.loading');if(b)new Effect.Fade(b,{duration:0.5});new Effect.BlindDown(this.container(),{duration:.2})},fetch_return:function(response){this.container().update(response.responseText);new Effect.Fade(this.down('.loading'),{duration:0.5});new Effect.BlindDown(this.container(),{duration:.2})},editor:Class.create(Ajax.InPlaceEditor,{handleFormSubmission:function(e){if(e)Event.stop(e)}})};defaults=$H({fetch:true,editable:false});opts=defaults.merge(opts)._object;var s=Object.extend(new Element('div',{'class':'module module_as_pageblock','id':name}).update('<div class="before"></div><div class="mcontent"><div class="loading">&nbsp;</div><div class="hd"><h2></h2><p class="source"><a title="default" class="image sm_mfavicon" rel="nofollow" href="http://kosmix.com/"><img width="16" height="16" alt="kosmix.com" class="favicon" src="/images/icons/kosmix.com.png"/></a><a title="kosmix.com" rel="nofollow" href="http://kosmix.com/" class="sm_mattr">kosmix.com</a></p></div><div class="target" style="display:none;"></div></div><div class="after"></div>'),ext);var w=2;if(opts&&opts.k_cs){w=opts.k_cs}if(opts&&opts.k_src){s.setSource(opts.k_src)}if(opts&&opts.k_srctxt){s.setSourceText(opts.k_srctxt)}if(opts&&opts.k_title){s.setTitle(opts.k_title)}if(opts&&opts.k_query){s.setQuery(opts.k_query)}s.addClassName('col'+w);if(opts.fetch){s.fetch()};if(opts.editable){var t=s.down('.hd h2');s.title_editor=new kapp.InPlaceEditor(t,{okButton:false,cancelLink:false,formClassName:'in-edit'});var b=s.down('.source a.sm_mattr');s.sourcetext_editor=new kapp.InPlaceEditor(b,{okButton:false,cancelLink:false,formClassName:'in-edit'})};return(s)};var kSection=kapp.Section;var kPageblock=kapp.Pageblock;var kModule=kapp.Module;kapp.InPlaceEditor=Class.create({initialize:function(element,options){this.element=element=$(element);this.prepareOptions();this._controls={};Object.extend(this.options,options||{});if(!this.options.formId&&this.element.id){this.options.formId=this.element.id+'-inplaceeditor';if($(this.options.formId))this.options.formId=''}if(this.options.externalControl)this.options.externalControl=$(this.options.externalControl);if(!this.options.externalControl)this.options.externalControlOnly=false;this._originalBackground=this.element.getStyle('background-color')||'transparent';this.element.title=this.options.clickToEditText;this._boundCancelHandler=this.handleFormCancellation.bind(this);this._boundComplete=(this.options.onComplete||Prototype.emptyFunction).bind(this);this._boundSubmitHandler=this.handleFormSubmission.bind(this);this._boundWrapperHandler=this.wrapUp.bind(this);this.registerListeners()},checkForEscapeOrReturn:function(e){if(!this._editing||e.ctrlKey||e.altKey||e.shiftKey)return;if(Event.KEY_ESC==e.keyCode)this.handleFormCancellation(e);else if(Event.KEY_RETURN==e.keyCode)this.handleFormSubmission(e)},createControl:function(mode,handler,extraClasses){var control=this.options[mode+'Control'];var text=this.options[mode+'Text'];if('button'==control){var btn=document.createElement('input');btn.type='submit';btn.value=text;btn.className='editor_'+mode+'_button';if('cancel'==mode)btn.onclick=this._boundCancelHandler;this._form.appendChild(btn);this._controls[mode]=btn}else if('link'==control){var link=document.createElement('a');link.href='#';link.appendChild(document.createTextNode(text));link.onclick='cancel'==mode?this._boundCancelHandler:this._boundSubmitHandler;link.className='editor_'+mode+'_link';if(extraClasses)link.className+=' '+extraClasses;this._form.appendChild(link);this._controls[mode]=link}},createEditField:function(){var text=(this.options.loadTextURL?this.options.loadingText:this.getText());var fld;if(1>=this.options.rows&&!(/\r|\n/).test(this.getText())){fld=document.createElement('input');fld.type='text';var size=this.options.size||this.options.cols||0;if(0<size)fld.size=size}else{fld=document.createElement('textarea');fld.rows=(1>=this.options.rows?this.options.autoRows:this.options.rows);fld.cols=this.options.cols||40}fld.name=this.options.paramName;fld.value=text;fld.className='editor_field';if(this.options.submitOnBlur)fld.onblur=this._boundSubmitHandler;this._controls.editor=fld;if(this.options.loadTextURL)this.loadExternalText();this._form.appendChild(this._controls.editor)},createForm:function(){var ipe=this;function addText(mode,condition){var text=ipe.options['text'+mode+'Controls'];if(!text||condition===false)return;ipe._form.appendChild(document.createTextNode(text))};this._form=$(document.createElement('form'));this._form.id=this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit=this._boundSubmitHandler;this.createEditField();if('textarea'==this._controls.editor.tagName.toLowerCase())this._form.appendChild(document.createElement('br'));if(this.options.onFormCustomization)this.options.onFormCustomization(this,this._form);this.createControl('ok',this._boundSubmitHandler);this.createControl('cancel',this._boundCancelHandler,'editor_cancel')},destroy:function(){if(this._oldInnerHTML)this.element.innerHTML=this._oldInnerHTML;this.leaveEditMode();this.unregisterListeners()},enterEditMode:function(e){if(this._saving||this._editing)return;this._editing=true;this.triggerCallback('onEnterEditMode');if(this.options.externalControl)this.options.externalControl.hide();this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form,this.element);if(!this.options.loadTextURL)this.postProcessEditField();if(e)Event.stop(e)},enterHover:function(e){if(this.options.hoverClassName)this.element.addClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onEnterHover')},getText:function(){return this.element.innerHTML.unescapeHTML()},handleFormCancellation:function(e){this.wrapUp();if(e)Event.stop(e)},handleFormSubmission:function(e){var form=this._form;var value=$F(this._controls.editor);this.element.innerHTML=value;this.leaveEditMode();if(e)Event.stop(e)},leaveEditMode:function(){this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor=this._originalBackground;this.element.show();if(this.options.externalControl)this.options.externalControl.show();this._saving=false;this._editing=false;this._oldInnerHTML=null;this.triggerCallback('onLeaveEditMode')},leaveHover:function(e){if(this.options.hoverClassName)this.element.removeClassName(this.options.hoverClassName);if(this._saving)return;this.triggerCallback('onLeaveHover')},postProcessEditField:function(){var fpc=this.options.fieldPostCreation;if(fpc)$(this._controls.editor)['focus'==fpc?'focus':'activate']()},prepareOptions:function(){this.options=Object.clone(kapp.InPlaceEditor.DefaultOptions);Object.extend(this.options,kapp.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(defs){Object.extend(this.options,defs)}.bind(this))},registerListeners:function(){this._listeners={};var listener;$H(kapp.InPlaceEditor.Listeners).each(function(pair){listener=this[pair.value].bind(this);this._listeners[pair.key]=listener;if(!this.options.externalControlOnly)this.element.observe(pair.key,listener);if(this.options.externalControl)this.options.externalControl.observe(pair.key,listener)}.bind(this))},removeForm:function(){if(!this._form)return;this._form.remove();this._form=null;this._controls={}},showSaving:function(){this._oldInnerHTML=this.element.innerHTML;this.element.innerHTML=this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor=this._originalBackground;this.element.show()},triggerCallback:function(cbName,arg){if('function'==typeof this.options[cbName]){this.options[cbName](this,arg)}},unregisterListeners:function(){$H(this._listeners).each(function(pair){if(!this.options.externalControlOnly)this.element.stopObserving(pair.key,pair.value);if(this.options.externalControl)this.options.externalControl.stopObserving(pair.key,pair.value)}.bind(this))},wrapUp:function(transport){this.leaveEditMode();this._boundComplete(transport,this.element)}});Object.extend(kapp.InPlaceEditor.prototype,{dispose:kapp.InPlaceEditor.prototype.destroy});Object.extend(kapp.InPlaceEditor,{DefaultOptions:{autoRows:3,cancelControl:'link',cancelText:'cancel',clickToEditText:'Click to edit',externalControl:null,externalControlOnly:false,fieldPostCreation:'activate',formClassName:'inplaceeditor-form',formId:null,highlightColor:'#ffff99',highlightEndColor:'#ffffff',hoverClassName:'',htmlResponse:true,loadingClassName:'inplaceeditor-loading',loadingText:'Loading...',okControl:'button',okText:'ok',paramName:'value',rows:1,savingClassName:'inplaceeditor-saving',savingText:'Saving...',size:0,stripLoadedTextTags:false,submitOnBlur:false,textAfterControls:'',textBeforeControls:'',textBetweenControls:''},DefaultCallbacks:{callback:function(form){return Form.serialize(form)},onComplete:function(transport,element){new Effect.Highlight(element,{startcolor:this.options.highlightColor,keepBackgroundImage:true})},onEnterEditMode:null,onEnterHover:function(ipe){ipe.element.style.backgroundColor=ipe.options.highlightColor;if(ipe._effect)ipe._effect.cancel()},onFailure:function(transport,ipe){alert('Error communication with the server: '+transport.responseText.stripTags())},onFormCustomization:null,onLeaveEditMode:null,onLeaveHover:function(ipe){ipe._effect=new Effect.Highlight(ipe.element,{startcolor:ipe.options.highlightColor,endcolor:ipe.options.highlightEndColor,restorecolor:ipe._originalBackground,keepBackgroundImage:true})}},Listeners:{click:'enterEditMode',keydown:'checkForEscapeOrReturn',mouseover:'enterHover',mouseout:'leaveHover'}});
