/**
 * @author pzi
 * @namespace html24
 * 
 */
function html24(){
	var version = "1.0";
	this.getVersion = function(){
		return version;
	}
};

html24.prototype.galleryScroller = function(initObj){
	
	var moveInterval = null;
	var scrollRatio;
	var params = {
			galleryWrapper:initObj.galleryWrapper,
			container:initObj.galleryContainer,
			scrollWrapper:initObj.scrollWrapper,
			acceleration: /*1*/initObj.acceleration,
			scrollRatio: scrollRatio
		}
	this.init = function(){
		setListeners(initObj.listeners);
		initScroller(params);
	}
	function setListeners(listeners){
		$(listeners.horizontal).bind("mousemove",mouseOverListener);
		//$(listeners.horizontal+", "+listeners.horizontal+" a")[0].bind("mousemove",mouseOverListener);
		$(listeners.horizontal).bind("mouseleave",mouseOutListener);
		
	}
	function mouseOverListener(ev){
		var mouseOverXPos = parseInt(ev.clientX)-parseInt(params.galleryWrapper.offsetLeft);
		params.mouseOverXPos = mouseOverXPos;
		handleHorizontal(ev);
		return false;
	}
	function handleHorizontal(ev){
		if (moveInterval == null) {
			moveInterval = window.setInterval(function(params){
				return function(){
					moveContainer(params)
				}
			}(params), 10);
		}
	}
	function mouseOutListener(ev){
		window.clearInterval(moveInterval);
		moveInterval = null;
		return false;
	}
	
	
	function moveContainer(params){
		var galleryWrapperWidth = params.galleryWrapper.offsetWidth;
		var mouseOverXPos = params.mouseOverXPos;
		var galleryWrapperWidth = params.galleryWrapper.offsetWidth;
		var containerWidth = params.container.offsetWidth;
		var containerOffset = params.container.style.left.replace("px","");
		containerOffset = parseFloat(containerOffset);
		var scroll = params.scrollWrapper;
		var scrollOffset = parseFloat(params.scrollWrapper.style.left.replace("px",""));
		var accelerationRatio = Math.abs(galleryWrapperWidth/2-mouseOverXPos);
		if(galleryWrapperWidth/2<mouseOverXPos){
			if((galleryWrapperWidth+Math.abs(containerOffset))<containerWidth){
				if(accelerationRatio<=50){
					params.acceleration = 0;
				}
				else if(50<accelerationRatio && accelerationRatio<=150){
					params.acceleration = 2;
				}
				else if(150<accelerationRatio && accelerationRatio<=200){
					params.acceleration = 5;
				}
				else if(200<accelerationRatio && accelerationRatio<=250){
					params.acceleration = 10;
				}
				else if(250<accelerationRatio && accelerationRatio<=300){
					params.acceleration = 15;
				}
				else if(300<accelerationRatio && accelerationRatio<=350){
					params.acceleration = 25;
				}
				else if(350<accelerationRatio && accelerationRatio<=400){
					params.acceleration = 30;
				}
				else{
					params.acceleration = 40;
				}
				params.container.style.left = containerOffset - (1*params.acceleration) + "px";
				if(Math.abs(containerOffset - (1*params.acceleration))>(containerWidth-galleryWrapperWidth))
				{
					params.container.style.left = "-" + parseInt(containerWidth-galleryWrapperWidth) + "px";
				}
				scroll.style.left = scrollOffset + (1*params.acceleration * params.scrollRatio) + "px";
			}
			else{
				scroll.style.left =	(galleryWrapperWidth-scroll.offsetWidth) + "px";
			}
		}
		else{
			if(containerOffset<0){
				if(accelerationRatio<=50){
					params.acceleration = 0;
				}
				else if(50<accelerationRatio && accelerationRatio<=150){
					params.acceleration = 2;
				}
				else if(150<accelerationRatio && accelerationRatio<=200){
					params.acceleration = 5;
				}
				else if(200<accelerationRatio && accelerationRatio<=250){
					params.acceleration = 10;
				}
				else if(250<accelerationRatio && accelerationRatio<=300){
					params.acceleration = 15;
				}
				else if(300<accelerationRatio && accelerationRatio<=350){
					params.acceleration = 25;
				}
				else if(350<accelerationRatio && accelerationRatio<=400){
					params.acceleration = 30;
				}
				else{
					params.acceleration = 40;
				}
				params.container.style.left = containerOffset + (1*params.acceleration) + "px";
				if(containerOffset + (1*params.acceleration)>0)
				{
					params.container.style.left = "0px";
				}
				scroll.style.left = scrollOffset - (1*params.acceleration * params.scrollRatio) + "px";
			}
			else{
				scroll.style.left = "0px";
			}
		}
		
		return false;
	}
	
	function initScroller(params){
		var galleryWrapperWidth = params.galleryWrapper.offsetWidth;
		var containerWidth = params.container.offsetWidth;
		var scrollerRatio = containerWidth / galleryWrapperWidth;
		var scrollRatio = galleryWrapperWidth / containerWidth;
		var scrollerWidth = galleryWrapperWidth / scrollerRatio;
		
		params.scrollRatio = scrollRatio;
		
		params.scrollWrapper.style.width = scrollerWidth + "px";
		
	}
}

