/**
 * Modulation v1.0: Modules effects - http://blogomunity.com
 */
var jmrSortables=new Class({options:{handles:false,onStart:Class.empty,onComplete:Class.empty,ghost:true,snap:3,onDragStart:function(element,ghost){ghost.setStyle('opacity',0.7);element.setStyle('opacity',0.7);},onDragComplete:function(element,ghost){element.setStyle('opacity',1);ghost.remove();this.trash.remove();},ids:null,itemid:'all',level:'0'},initialize:function(list,options){this.position_name=list;this.setOptions(options);this.list=$(list);this.elements=this.list.getChildren();this.handles=$$(this.options.handles);this.bound={'start':[],'moveGhost':this.moveGhost.bindWithEvent(this)};for(var i=0,l=this.handles.length;i<l;i++){this.bound.start[i]=this.start.bindWithEvent(this,this.elements[i]);}
this.attach();if(this.options.initialize){this.options.initialize.call(this);}
this.bound.move=this.move.bindWithEvent(this);this.bound.end=this.end.bind(this);},attach:function(){this.elements.each(function(element,i){if(element.getElement(this.options.handles)){element.getElement(this.options.handles).addEvent('mousedown',this.bound.start[i]);}},this);},detach:function(){this.elements.each(function(element,i){if(element.getElement(this.options.handles)){element.getElement(this.options.handles).removeEvent('mousedown',this.bound.start[i]);}},this);},start:function(event,el){this.active=el;this.coordinates=this.list.getCoordinates();if(this.options.ghost){var position=el.getPosition();this.offset=event.page.y-position.y;this.trash=new Element('div').inject(document.body);this.ghost=el.clone().inject(this.trash).setStyles({'position':'absolute','left':position.x,'top':event.page.y-this.offset});document.addListener('mousemove',this.bound.moveGhost);this.fireEvent('onDragStart',[el,this.ghost]);}
document.addListener('mousemove',this.bound.move);document.addListener('mouseup',this.bound.end);this.fireEvent('onStart',el);event.stop();},moveGhost:function(event){var value=event.page.y-this.offset;value=value.limit(this.coordinates.top,this.coordinates.bottom-this.ghost.offsetHeight);this.ghost.setStyle('top',value);event.stop();},move:function(event){var now=event.page.y;this.previous=this.previous||now;var up=((this.previous-now)>0);var prev=this.active.getPrevious();var next=this.active.getNext();if(prev&&up&&now<prev.getCoordinates().bottom)this.active.injectBefore(prev);if(next&&!up&&now>next.getCoordinates().top)this.active.injectAfter(next);this.previous=now;},serialize:function(converter){return this.list.getChildren().map(converter||function(el){return this.elements.indexOf(el);},this);},end:function(){this.previous=null;document.removeListener('mousemove',this.bound.move);document.removeListener('mouseup',this.bound.end);if(this.options.ghost){document.removeListener('mousemove',this.bound.moveGhost);this.fireEvent('onDragComplete',[this.active,this.ghost]);}
this.fireEvent('onComplete',this.active);this.ids=new Array();this.serialize().each(function(el,i){this.ids.push(this.options.ids[el]);}.bind(this));var d=Json.evaluate(Cookie.get('jmrs'+this.options.level));if(!d){d=new Object();};if(!d['i'+this.options.itemid]){d['i'+this.options.itemid]=new Object();};eval('d.i'+this.options.itemid+'.'+this.position_name.replace(/jmrs_/,'')+'=this.ids.toString();');Cookie.set('jmrs'+this.options.level,Json.toString(d),{duration:365,domain:'.'+window.location.hostname.replace(/^www\./,'')});}});jmrSortables.implement(new Events,new Options);var jmrScroll=new Class({options:{delay:500,delay2:500,relatives:null,transition:null,scrollType:'top'},initialize:function(element,options){this.el=element;this.height=element.getSize().size.y;this.top=element.getParent().getTop();this.setOptions(options);this.scroller='';if(this.options.relatives.length>0){this.maxh=0;this.options.relatives.each(function(el,i){if($(el)){if(this.maxh<$(el).getSize().size.y){this.maxh=$(el).getSize().size.y;}}}.bind(this));}
this.maxm=this.maxh-this.height;if(!this.maxm){return;}
this.effect=new Fx.Style(this.el,'marginTop',{duration:this.options.delay2,wait:false,onComplete:function(){this.start();}.bind(this)});if(this.options.transition!=null){this.effect.options.transition=this.options.transition;}
if(this.options.initialize){this.options.initialize.call(this);}
this.start();},start:function(){this.scroller=this.check.bind(this).periodical(this.options.delay);},check:function(){var m=this.el.getStyle('marginTop').toInt();var a=window.getSize().scroll.y;var b=this.top;var bm=b+m;if(this.options.scrollType=='bottom'){bm+=this.height;}
if(a>bm){var i=a-b;if(i>this.maxm&&this.maxm>0){i=this.maxm;}
if(i>0){this.move(i);}
return;}
else if(a<(b+m)&&a>b){this.move(a-b);return;}
else if(a<b){this.move(0);}},move:function(num){$clear(this.scroller);this.effect.start(num);}});jmrScroll.implement(new Events,new Options);
