function Scroller(elementID)
{
	var controlID	= elementID;
	var components	= null;
	var offset		= 0;
	var properties	= {'minBarHeight': 20};
	var scrolling	= false;
	var enableBar	= true;
	
	var instance	= this;//Utilizada para auto-referência
	
	
	//Getters	
	this.getControlID	= function(){return controlID;}
	this.getComponents	= function(){return components;}
	this.getProperties	= function(){return properties;}
	this.getProperty	= function(p){return properties[p];}
	this.isScrolling	= function(){return scrolling;}
	this.isEnableBar	= function(){return enableBar;}
	
	//Setters
	this.setComponents	= function(c){components = c;}
	this.setProperties	= function(p){properties = p;}
	this.setProperty	= function(p,v){properties[p] = v;}
	this.setScrolling	= function(m){scrolling = m;}
	
	//Demais métodos
	this.init			= function(elID)
	{
		var target		= document.getElementById(elID);
		var comp_list	= target.getElementsByTagName('div');
		components		= ScrollUtils.getComps(comp_list);
		ScrollUtils.defineTrackSize(instance);
		
		var topTrack	= 0;
		
		var trackRange				= ScrollUtils.trackRange(instance);		
		properties.trackMin			= trackRange.min;
		properties.trackMax			= trackRange.max - (components.button_track.measures.height + 2);
		
		if(components.button_up != null)
		{
/*			var targetLink = components.button_up.getElementsByTagName('a')[0];
			
			EventUtils.addListener(targetLink, 'mousedown', instance.moveUpListener, true);
			EventUtils.addListener(targetLink, 'mouseup', scrollManager.releaseClick, true);
			EventUtils.addListener(targetLink, 'mouseout', instance.verifyAndRelease, true);
*/			
			topTrack	+= components.button_up.measures.height;
		}
		
/*		if(components.button_dw != null)
		{
			var targetLink = components.button_dw.getElementsByTagName('a')[0];
			
			EventUtils.addListener(targetLink, 'mousedown', instance.moveDownListener, true);
			EventUtils.addListener(targetLink, 'mouseup', scrollManager.releaseClick, true);
			EventUtils.addListener(targetLink, 'mouseout', instance.verifyAndRelease, true);
		}
*/
		
		components.button_track.style.top	= topTrack + 'px';
		components.content.style.top		= '0px';		
		components.button_track.Controller	= instance;
		
		EventUtils.addListener(components.button_track, 'mousedown',instance.initCapture);
		enableBar = components.contentHolder.measures.height <= components.content.measures.height;
		
		if(!enableBar)components.scrollbar.style.visibility = 'hidden';
		else if(enableBar && components.scrollbar.style.visibility == 'hidden')components.scrollbar.style.visibility = 'inherit';
	}
	
	this.initCapture= function(evt)
	{
		if(scrollManager.getCurrent() == null)scrollManager.setCurrent(evt, instance);
	}
	
	this.moveUpListener		= function(evt){scrollManager.click(evt, 'up');}
	this.moveDownListener	= function(evt){scrollManager.click(evt, 'down');}
	
	this.finishListeners	= function()
	{
		EventUtils.removeListener(components.button_track, 'mousedown',instance.initCapture);
		
/*		if(components.button_up != null)
		{
			var targetLink = components.button_up.getElementsByTagName('a')[0];
			
			EventUtils.removeListener(targetLink, 'mousedown', instance.moveUpListener, true);
			EventUtils.removeListener(targetLink, 'mouseup', scrollManager.releaseClick, true);
			EventUtils.removeListener(targetLink, 'mouseout', instance.verifyAndRelease, true);
		}
		
		if(components.button_dw != null)
		{
			var targetLink = components.button_dw.getElementsByTagName('a')[0];
			
			EventUtils.removeListener(targetLink, 'mousedown', instance.moveDownListener, true);
			EventUtils.removeListener(targetLink, 'mouseup', scrollManager.releaseClick, true);
			EventUtils.removeListener(targetLink, 'mouseout', instance.verifyAndRelease, true);
		}
*/
	}
	
	
	this.verifyAndRelease	= function(evt)
	{
		//Método criado para remover problemas dos botões
		var isScrolling = scrollManager.getCurrent();
		isScrolling		= isScrolling != null ? isScrolling.isScrolling() : false;
		if(!isScrolling)scrollManager.releaseClick(evt);
	}
	
	this.init(elementID);
}