function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function rsVScroller(containerObj,maskObj,contentObj) {

	this.setPage = function(page){
		this.currentPage = page;
		for (var i=0; i<this.pagers.length; i++) {
			this.pagers[i].className = "rsScrollerPager";
		}
		this.pagers[page].className = "rsScrollerPagerCurrent";
		this.scrollToPage();		
	};
	 
	this.scrollToPage = function() {
		var targetScrollTop = me.maskHeight * me.currentPage;
		var currentScrollTop = me.mask.scrollTop;
		
		var willMove = false;
		
		var distance = Math.sqrt(Math.pow(targetScrollTop - currentScrollTop,2));
		var speed = Math.floor(distance/5)+1;				

		if (currentScrollTop < targetScrollTop) {
			me.mask.scrollTop = (currentScrollTop+speed);
			willMove = true;
		} else if (currentScrollTop > targetScrollTop) {
			me.mask.scrollTop = (currentScrollTop-speed);
			willMove = true;
		}
		
		if (willMove) {
			setTimeout(me.scrollToPage,15);
		}		
	}
	
	var me = this;

	this.container = containerObj;
	this.mask = maskObj;
	this.content = contentObj;

	this.scrollPosition = 0;
	this.currentPage = 0;

	this.totalHeight = this.content.scrollHeight;
	this.maskHeight = this.mask.offsetHeight;	
	this.totalPages = Math.floor(this.totalHeight/this.maskHeight);
	if (this.totalHeight - (Math.floor(this.totalHeight/this.maskHeight) * this.maskHeight) > 10) {
		this.totalPages++;
	}
	
	this.content.style.height = this.totalPages * this.maskHeight+"px";
	this.totalHeight = this.content.scrollHeight;	

	this.pagers = new Array;
	this.pagerContainer = document.createElement("div");
	this.pagerContainer.className = "rsScrollerPagerContainer";
	this.container.appendChild(this.pagerContainer);

	if (this.totalPages > 1) {
		for (var i=0; i<this.totalPages; i++) {
			var pager = document.createElement("a");
			pager.setAttribute("href","#");
			pager.className = "rsScrollerPager";
			pager.onclick = function(){this.scroller.setPage(this.page); return false;};
			pager.scroller = this;
			pager.page = i;		
			pager.appendChild(document.createTextNode(i+1));
			this.pagerContainer.appendChild(pager);
			this.pagers.push(pager);
		}

		if (this.pagers[0] != null) {
			this.pagers[0].className = "rsScrollerPagerCurrent";
		}		
	}

	
/*	alert("total:"+this.height+" mask:"+this.maskHeight+" pages:"+this.totalPages+" ");*/
	
}

function setupScrollers() {	
	
	var scrollers = getElementsByClassName(document,"div","rsVerticalScroller");
	for(var i=0; i<scrollers.length; i++) {
		scrollers[i].normalize();
		var container = document.createElement("div");
		var mask = document.createElement("div");
		container.className = "rsVerticalScrollerContainer";
		mask.className = "rsVerticalScrollerMask";		
		scrollers[i].parentNode.replaceChild(container, scrollers[i]);
		container.appendChild(mask);
		mask.appendChild(scrollers[i]);
		scrollers[i].style.display = "block";		
		var rsVerticalScroller = new rsVScroller(container,mask,scrollers[i]);
	}


}

addLoadEvent(setupScrollers);
