/*############################################################
#		WL-Slider Application
#		Author: WebLinc, LLC
#		Creator: James Van Arsdale III
#		Date: 7-24-2008
#
#
#		Last Modified: 01-22-2008 Jon Aldinger
#		- configured logic to remove buttons on instantiation rather than on click
#
#		Last Modified: 10-02-2008 Jon Aldinger
#		- created variables to avoid duplicate instances of calculations
#		- renamed some variables with more specific names
#		- added dynamic calculation of element dimensions (removed hard-coded values)
#		- adjusted caluculations to allow for any combination of margin/padding on the slide element
#		- set up function to receive parameters and moved function call from this file into the html
#           
#
############################################################*/

jQuery.fn.webLincSlider = function(options)
{
	var defaults = { speed: 500 };
	var settings = jQuery.extend({}, defaults, options);
	
	return this.each(function()
		{
			var $slider = jQuery(this),
				$slide = jQuery("li:first-child", $slider),
				sliderCount = jQuery("li", $slider).length,
				slideOuterWidth = $slide.outerWidth();
				sliderMaskWidth = (jQuery(".slider-mask", $slider).width()),
				sliderMaskMarginPaddingLeft = parseInt(jQuery(".slider-mask", $slider).css("margin-left"), 10) + parseInt(jQuery(".slider-mask", $slider).css("padding-left"), 10);
			
			// check if slider is larger than mask
			if (! ((slideOuterWidth * sliderCount) > sliderMaskWidth))
			{
				// there's not enough to slide, remove the buttons
				jQuery(".inner-mask a.prev", $slider).remove();
				jQuery(".inner-mask a.next", $slider).remove();
			}
			
			jQuery(".inner-mask a.prev", $slider).bind("click.webLincSlider", function()
				{ 
					// make sure the UL is not currently moving before running
					if(jQuery("ul", $slider).is(":animated"))
					{
						return false;
					}

					// get UL absolute X position
					var sliderPos = jQuery("ul", $slider).offset();
					var innerMaskPos = jQuery(".inner-mask", $slider).offset();
					var leftEdge = innerMaskPos.left + sliderMaskMarginPaddingLeft;
					
					// logic to determine whether to move slider to previous object
					if( sliderPos.left < leftEdge )
					{
						// remove off class
						jQuery(this).removeClass("off");
						jQuery(".inner-mask a.next", $slider).removeClass("off");
						jQuery("ul", $slider).animate({left: "+="+slideOuterWidth+"px"}, settings.speed);
					}
					
					// if at the beginning, disable the left
					if( (sliderPos.left + slideOuterWidth) >= leftEdge )
					{
						// add off class
						jQuery(this).addClass("off");
						jQuery(".inner-mask a.next", $slider).removeClass("off");
					}

					return false;                
				}
			);

			jQuery(".inner-mask a.next", $slider).bind("click.webLincSlider", function() 
				{
					// make sure the UL is not currently moving before running
					if(jQuery("ul", $slider).is(":animated"))
					{
						return false;
					}
					
					var sliderPos = jQuery("ul", $slider).offset();
					var innerMaskPos = jQuery(".inner-mask", $slider).offset();
					var leftEdge = innerMaskPos.left + sliderMaskMarginPaddingLeft;
					var slideObjsWidth = (sliderCount * slideOuterWidth);
					
					// logic to determine whether to move slider to previous object
					//	1. if total slide width is larger than the mask width, it's scrollable - scroll right
					//	2. if total slide width - left edge, - slider left position is greater that total mask width - then we can keep moving.
				
					if( ((slideObjsWidth - leftEdge) - (0 - sliderPos.left)) > sliderMaskWidth )
					{
						// remove off class
						jQuery(this).removeClass("off");
						jQuery(".inner-mask a.prev", $slider).removeClass("off");
						jQuery("ul", $slider).animate({left: "-="+slideOuterWidth+"px"}, settings.speed);
					}
					
					// if at the end, disable the next button
					if( (((slideObjsWidth - leftEdge) - (0 - sliderPos.left)) - slideOuterWidth) <=  sliderMaskWidth )
					{
						// add off class
						jQuery(this).addClass("off");
						jQuery(".inner-mask a.prev", $slider).removeClass("off");
					}

					return false;
				}
			);

			return $slider;
		}
	);
};

