var uiScroll = new function(){
	var c1=jml.obj,c2=jml.xml.node,c3=jml.jme,c4=jml.events;
	
	function scrl(o){
		var dir=1;
		var intr=null;
		var id=o.id||null;
		var obj=getObj(id);
		var speed=o.speed||4;
		var axis=o.axis||'horizontal';
		var point=c2.byAttributeValue('class','point',obj);
		var mask=c2.byPartialAttributeValue('class','maskItem',obj);
		var content=c2.byAttributeValue('class','scrollContent',obj);
				
		if(isset(point))point=point[0];
		if(isset(mask))mask=mask[0];
		if(isset(content))content=content[0];
		
		var jme1=new jml.jme.motion();
		jme1.onMotionFinished=function(t,p){var f=h.onScrollFinished;if(isset(f))f(t,p);}
		jme1.onMotion=function(t,p){var f=h.onScroll;if(isset(f))f(t,p);}		
		function refresh(){
			c1.set(mask,'width',getProps(point).w+'px');
			c1.set(mask,'height',getProps(content).h+'px');
			if(isset(h.onInit)) h.onInit(obj,point,mask,content);
		}
		function getProps(o){
			var n1=c1.get(o,'left'),n2=c1.get(o,'top'),n3=c1.get(o,'width'),n4=c1.get(o,'height');
			if(!isset(n1))n1=0;
			if(!isset(n2))n2=0;
			if(!isset(n3))n3=c1.get(o,'offsetWidth');
			if(!isset(n4))n4=c1.get(o,'offsetHeight');
			return {x:n1,y:n2,w:n3,h:n4};
		}
		function run(n){
			var o1=getProps(content);
			var o2=getProps(mask);
			var s1 = axis=='horizontal'?'w':'h';
			if(o1[s1]<=o2[s1]) return;
			// Must create limit
			var b=true;
			if(dir==1&&o1.x>=0){
				clearInterval(intr);
				c1.set(content,'left',0);
				b=false;
			}else{
				if(dir==-1){
					if(o1.x+o1.w<=o2.w){
						clearInterval(intr);
						c1.set(content,'left',o2.w-o1.w);
						b=false;
					}
				}
			}
			if(b){
				var s1=axis=='horizontal'?'left':'top',n2=s1=='left'?o1.x:o1.y,n3=n2+(speed*dir);
				jme1.start({target:content,property:s1,start:n2,end:n3,duration:1,equation:'noEase',id:null});			
			}
		}
		function clear(){clearInterval(intr);}
		if(!isset(obj)) return;
		c4.add(window,'load',delegate(null,refresh));
		c4.add(window,'resize',delegate(null,refresh));
		var h={
			onScrollFinished:null,
			onScroll:null,
			onInit:null,
			play:function(n){
				clear();
				dir=n;
				intr=setInterval(run,10);
			},
			stop:clear
		};
		return h;
	}
	return {scrollable:scrl};
}
