/*############################################################
#		WL-Slider Application
#		Author: WebLinc, LLC
#		Creator: James Van Arsdale III
#		Date: 7-24-2008
#
#       Last Modified: 08-05-2008 Ben Crouse - cleaned up code, made a jquery plugin, namespaced click events
#                      TODO: 
#                            - make the magic numbers part of the options hash, and 
#                              passed in as parameters
#                            
#                            - it would be cool to set the container overflow-x and by default
#                              and then add the next/prev links in the plugin (in case no javascript).
#
############################################################*/

jQuery.fn.webLincSlider = function(options)
{
    return this.each(function()
        {
            var $slider = jQuery(this);
        
            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;
			        }
                
			        // figure out the width of each LI to compute the slide integer
			        var slideWidth = (jQuery("li:first-child", $slider).width() + 5); // get first LI width, and add 4px for padding-right.
			        var maskWidth = (jQuery(".slider-mask", $slider).width() - 5); // get the slider mask width, subtract 4 px to be equal to the viewable slide objects	
			        var sliderCount = jQuery("li", $slider).length; // get slider count
    				
			        // check if slider is larger than mask
			        if( (slideWidth * sliderCount) > maskWidth )
			        {
				        // get UL absolute X position
				        var sliderPos = jQuery("ul", $slider).offset();
				        var maskPos = jQuery(".inner-mask", $slider).offset();
				        var leftEdge = maskPos.left + 33; // 33px padding-left on mask
    					
				        // 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: "+="+slideWidth+"px"}, 500);
				        }
				        // if at the beginning, disable the left
				        if( (sliderPos.left + slideWidth) >= leftEdge )
				        {
					        // add off class
					        jQuery(this).addClass("off");
					        jQuery(".inner-mask a.next", $slider).removeClass("off");
				        }
			        } 
			        else
			        {
				        // there's not enough to slide, remove myself.
				        jQuery(this).remove();
			        }

			        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;
			        }
			        
			        // figure out the width of each LI to compute the slide integer
			        var slideWidth = (jQuery("li:first-child", $slider).width() + 5); // get first LI width, and add 4px for padding-right.
			        var maskWidth = (jQuery(".slider-mask", $slider).width() - 5); // get the slider mask width, subtract 4 px to be equal to the viewable slide objects			
			        var sliderCount = jQuery("li", $slider).length; // get slider count
			        // check if slider is larger than mask
			        if( (slideWidth * sliderCount) > maskWidth )
			        {				
				        var sliderPos = jQuery("ul", $slider).offset();
				        var maskPos = jQuery(".inner-mask", $slider).offset();
				        var leftEdge = maskPos.left + 33; // 33px padding-left on mask
				        var objCount = jQuery("li", $slider).length;
				        var slideObjsWidth = (objCount * slideWidth);
    					
				        //alert("sliderPos: "+sliderPos.left+" | maskPos: "+maskPos.left+" | leftEdge: "+leftEdge+" | objCount: "+objCount+" | slideObjsWidth: "+slideObjsWidth);
    					
				        // 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)) > maskWidth )
				        {
					        // remove off class
					        jQuery(this).removeClass("off");
					        jQuery(".inner-mask a.prev", $slider).removeClass("off");
					        //alert((slideObjsWidth > maskWidth) && ((slideObjsWidth - leftEdge) - (0 - sliderPos.left))+" > "+maskWidth);
					        jQuery("ul", $slider).animate({left: "-="+slideWidth+"px"}, 500);
				        }
    					
				        // if at the end, disable the next button
				        if( (((slideObjsWidth - leftEdge) - (0 - sliderPos.left)) - slideWidth) <=  maskWidth )
				        {
					        // add off class
					        //alert("else "+(((slideObjsWidth - leftEdge) - (0 - sliderPos.left)) - slideWidth)+" <= "+maskWidth);
					        jQuery(this).addClass("off");
					        jQuery(".inner-mask a.prev", $slider).removeClass("off");
				        }
			        } 
			        else
			        {
				        // there's not enough to slide, remove myself.
				        jQuery(this).remove();
			        }

			        return false;
                }
            );
            
            return $slider;
        }
    );
};

jQuery(window).load(function() { jQuery(".wl-slider").webLincSlider(); });