/*
 * A popup sidebar
 * 
 * Author: James Holder
 *
 * Revisions:
 *		0.1		- Initial commit
 * 
 * TODO:
 *      Add the wrapper div and some basic styles via the plugin
 */
(function($) {

    $.fn.sidebar = function(customOptions) {
		// plugin default customOptions
        var options = {
        		'showSpeed' : 'slow',
            	'hideSpeed' : 'slow',
            	'scrollThreshold' : 200,
            	'showDelay' : 5, // in seconds
            	'trigger' : 'scroll', // choices: scroll, delay
            	'pageName' : undefined
        };

		// extends options with customOptions provided
        if (customOptions) {
			$.extend(options, customOptions);
		}

		// iterate over matched elements
        return this.each(function() {
    		var $wrapper = $(this);
    		var $bar = $wrapper.find('.sidebar')
    		
            if ($bar.data('sidebar-page') != options.pageName) {
            	return;
            }
            	
    		var $close = $bar.find('.close');
    		var $advance = $bar.find('.advance');
    		var barRevealed = false;
    		
    		var hidden_right = ( -1*($bar.width()+10) )+'px';

    		var showBar = function() {
    			if (barRevealed) {
    				return;
    			} else {
    				barRevealed = true;
    				$wrapper.animate({'right': 0}, options.showSpeed);
    			}
    		};
    		var hideBar = function() {
    			$wrapper.animate({'right': hidden_right}, options.hideSpeed);
    		};
    		
    		$close.click(function() {
    			hideBar();
    			return false;
    		});
    		$advance.click(function() {
    			hideBar();
    		});
    		
    		var showOnScroll = function() {
	    		$(window).scroll(function(event) {
	    			var scrollHeight = $(document).height() - $(window).height();
	    			var scrollAmount = $(window).scrollTop();
	    			//console.log(scrollAmount + ", " + scrollHeight);
	    			
	    			if (scrollAmount > (scrollHeight - options.scrollThreshold)) { 
	    				showBar();
	    			}	
	    		});
    		}
    		
    		var showOnDelay = function() {
	    		setTimeout(function() { showBar() }, options.showDelay * 1000);
    		}
    		
    		switch(options.trigger) {
    			case "scroll":
    				showOnScroll();
    				break;
    			case "delay":
    				showOnDelay();
    				break;
    			default:
    				showOnScroll();
    		}
    		

    		$wrapper.css({'right': hidden_right});
    		$wrapper.show();
        });

    };

	// public functions definition
	$.fn.sidebar.functionName = function(foo) {
		return this;
	};

	// private functions definition
	function foobar() {}

})(jQuery);

