// JavaScript Document

(function($) {

  var start = false; var location; var timeout; var lastLoc;
	
  var methods = {
	  
		init : function( options ) {
			
			var settings = $.extend( {
			  'direction' : 'vertical',
			  'animate' : true,
			  'viewport': null
			}, options);

			var direction  = settings.direction;
			var scrollable = $('#'+settings.content);
			var wrapper    = $(this);
			var animate    = settings.animate;
			var viewport   = settings.viewport == null ? wrapper : $('#'+settings.viewport);
			
			var inactiveMargin   = 100;
			var wrapperHeight    = wrapper.height();
			var wrapperWidth     = wrapper.width();
			var scrollableHeight = scrollable.outerHeight() + (2 * inactiveMargin);
			var scrollableWidth  = scrollable.outerWidth()  + (2 * inactiveMargin);
			
			wrapper.css('overflow','hidden');
		
			viewport.mousemove(function(e){
				
				if(direction == 'vertical') {
					
					location = (e.pageY -  wrapper.offset().top) 
					* (scrollableHeight - wrapperHeight) 
					/ wrapperHeight - inactiveMargin;

					if(!start) return;
					wrapper.scrollTop(location);
				
				}
				else if(direction == 'horizontal') {
					
					location = (e.pageX -  wrapper.offset().left) 
					* (scrollableWidth - wrapperWidth) 
					/ wrapperWidth - inactiveMargin;
					
					if(!start) return;
					wrapper.scrollLeft(location);
				}

			});
			
			viewport.mouseenter(function(e){
				
				if(animate) {
					
					start = false;
					timeout = setTimeout(function(){
						if(direction == 'vertical') {
							wrapper.animate({scrollTop: location}, 500,  'linear', function() {start = true; });
						}
						else if(direction == 'horizontal') {
							wrapper.animate({scrollLeft: location}, 500, 'linear', function() {start = true; });
						}
					}, 200);
				}
				else {
					start = true;
				}
			});
			
			viewport.mouseleave(function(e){
				if(animate) {
					clearTimeout(timeout);
				}
			});
		}
  };
  
    $.fn.cue_scroller = function( method ) {
		if ( methods[method] ) {
		  return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
		  return methods.init.apply( this, arguments );
		} else {
		  $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
		}
  }; 
})( jQuery );
