// JavaScript Document
function ThumbnailScroller(id,tsType,tsMargin,scrollEasing,scrollEasingType,thumbnailOpacity,thumbnailFadeSpeed){
	/* 
	parameters: 
	id: id of the container (div id)  
	tsType: scroller type (values: "horizontal", "vertical")
	tsMargin: first and last thumbnail margin (for better cursor interaction) 
	scrollEasing: scroll easing amount (0 for no easing) 
	scrollEasingType: scroll easing type 
	thumbnailOpacity: thumbnails default opacity 
	thumbnailFadeSpeed: thumbnails mouseover fade speed (in milliseconds) 
	*/

	//caching vars
	var Jouter_container=J("#"+id);
	var JthumbScroller=J("#"+id+" .thumbScroller");
	var JthumbScroller_container=J("#"+id+" .thumbScroller .container");
	var JthumbScroller_content=J("#"+id+" .thumbScroller .content");
	var JthumbScroller_thumb=J("#"+id+" .thumbScroller .thumb");

	if(tsType=="horizontal"){
		JthumbScroller_container.css("marginLeft",tsMargin+"px"); //add margin
		var tsWidth=Jouter_container.width();
		var itemWidth=JthumbScroller_content.width();
	} else {
		JthumbScroller_container.css("marginTop",tsMargin+"px"); //add margin
		var tsHeight=Jouter_container.height();
		var itemHeight=JthumbScroller_content.height();
	}
	
	var Jthe_outer_container=document.getElementById(id);
	var Jplacement=findPos(Jthe_outer_container);

	JthumbScroller_content.each(function (i) {
		if(tsType=="horizontal"){
			var totalContent=i*itemWidth;
			Jouter_container.data("totalContent",totalContent);
			JthumbScroller_container.css("width",totalContent+itemWidth);
		} else {
			var totalContent=i*itemHeight;
			Jouter_container.data("totalContent",totalContent);
			JthumbScroller_container.css("height",totalContent+itemHeight);
		}
	});

	function MouseMove(e){
		if(tsType=="horizontal"){
			if(JthumbScroller_container.outerWidth()>JthumbScroller.width()){ //check if content needs scrolling
				var mouseCoords=(e.pageX - Jplacement[1]);
	  			var mousePercentX=mouseCoords/tsWidth;
	  			var destX=-((((Jouter_container.data("totalContent")+(tsMargin*2))-(tsWidth-itemWidth))-tsWidth)*(mousePercentX));
	  			var thePosA=mouseCoords-destX;
	  			var thePosB=destX-mouseCoords;
	  			if(mouseCoords>destX){
					JthumbScroller_container.stop().animate({left: -thePosA}, scrollEasing,scrollEasingType); 
	  			} else if(mouseCoords<destX){
					JthumbScroller_container.stop().animate({left: thePosB}, scrollEasing,scrollEasingType); 
	  			}
			} else {
				JthumbScroller_container.css("left",0);
			}
		} else {
			if(JthumbScroller_container.outerHeight()>JthumbScroller.height()){ //check if content needs scrolling
				var mouseCoords=(e.pageY - Jplacement[0]);
	  			var mousePercentY=mouseCoords/tsHeight;
	  			var destY=-((((Jouter_container.data("totalContent")+(tsMargin*2))-(tsHeight-itemHeight))-tsHeight)*(mousePercentY));
	  			var thePosA=mouseCoords-destY;
	  			var thePosB=destY-mouseCoords;
	  			if(mouseCoords>destY){
					JthumbScroller_container.stop().animate({top: -thePosA}, scrollEasing,scrollEasingType); 
	  			} else if(mouseCoords<destY){
					JthumbScroller_container.stop().animate({top: thePosB}, scrollEasing,scrollEasingType); 
	  			}
			} else {
				JthumbScroller_container.css("top",0);
			}
		}
	}
	
	JthumbScroller.bind("mousemove", function(event){
		MouseMove(event);									  
	});
	
	JthumbScroller_thumb.each(function () {
		var Jthis=J(this);
		Jthis.fadeTo(thumbnailFadeSpeed, thumbnailOpacity);
	});

	JthumbScroller_thumb.hover(
		function(){ //mouse over thumbnail
			var Jthis=J(this);
			Jthis.stop().fadeTo(thumbnailFadeSpeed, 1);
		},
		function(){ //mouse out thumbnail
			var Jthis=J(this);
			Jthis.stop().fadeTo(thumbnailFadeSpeed, thumbnailOpacity);
		}
	);
	
	//function to find element Position
	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curtop, curleft];
	}
	
	J(window).resize(function() {
		if(tsType=="horizontal"){
			tsWidth=Jouter_container.width();
		} else {
			tsHeight=Jouter_container.height();
		}
		Jplacement=findPos(Jthe_outer_container);
	});
}
