/* 
	ContentRotator  - jQuery Content Rotator Plugin
	
	Copyright (c) 2010 Lugital Solution Inc.
	
	Dual licensed under the MIT and GPL licenses:
	http://www.opensource.org/licenses/mit-license.php
	http://www.gnu.org/licenses/gpl.html
	
*/

(function($) {

	// Set default configuration if not specified
	$.ContentRotator = {
        defaults: {
			ID: "",                         // Container ID (Set automatically)
			width: 685, 			        // Width of content area
			height: 295,			        // Height of content area
            delay: 5000, 			        // Delay to next page
            delaySelected: 15000, 	        // Delay to next page when selection is performed
            speed: 1000, 			        // Transition speed
            animOnStartup: true, 	        // Animate the first page on statup
            pagingEnabled: true,    	    // Show Paging Navigation
            pagingIsVertical: false,    	// Show Paging Navigation
            pagingLocX: 10,    	            // Show Paging Navigation
            pagingLocY: 265,    	        // Show Paging Navigation
            pagingButtonColor: "#EEEEEE",
            pagingButtonOpacity: 0.5,       // Paging fadeout state
            pagingButtonWidth: 20,
            pagingButtonHeight: 20,
            pagingButtonSpacing: 10
        }
    };
	
	// PRIVATE Globals
	var gCfg = null;
	var gTimer = null;
	var gPageSelected = 0;
	var gPageLast = 0;
	// Extend jquery with the plugin
	$.fn.extend({
		ContentRotator:function(options) {
			
			//use defaults or properties supplied by user
			gCfg = $.extend({}, $.ContentRotator.defaults, options);

			gCfg.ID = "#"+this.attr("id");

			init();

			//return the jquery object for chaining
			return this;
		}
	});
	
	// PRIVATE Function
	function init() {
	    var pZIndex = 100;
	    gPageLast = $(gCfg.ID).children("div").size() - 1;
	    gPageSelected = 0
		$(gCfg.ID).css({'position':'relative','height':gCfg.height+'px','width':gCfg.width+'px','overflow':'hidden'});
		$(gCfg.ID).show();
		// Navigation Bar container
	    $(gCfg.ID).append("<div id='navbar'></div>");
	    $(gCfg.ID+" #navbar").css({'position':'absolute','display':'none','z-index':(pZIndex+1),'left':(gCfg.pagingLocX) + 'px','top':(gCfg.pagingLocY) + 'px'});
	    // Set All Pages
		$(gCfg.ID).children("div").each(function(i){
		    if ($(this).attr("id") != "navbar") {
		        $(this).css({'position':'absolute','display':'none','z-index':(pZIndex-i),'top':'0px','left':'0px'});
		        $(this).attr("id","ContentRotatorPage_"+i);
		        // Add Page Selector to Navigation Bar
	            $(gCfg.ID+" #navbar").append("<div id='PagePicker_"+i+"'></div>");
	            $(gCfg.ID+" #PagePicker_"+i).css({'width':(gCfg.pagingButtonWidth) + 'px','height':(gCfg.pagingButtonHeight) + 'px','margin-right':(gCfg.pagingButtonSpacing) + 'px','margin-bottom':(gCfg.pagingButtonSpacing) + 'px','cursor':'pointer','font-size':'30px','background-color':gCfg.pagingButtonColor,'overflow':'hidden'})
	            $(gCfg.ID+" #PagePicker_"+i).click(PagePicker_Click);
	            if (!gCfg.pagingIsVertical) { $(gCfg.ID+" #PagePicker_"+i).css({'float':'left'}); }
		        if (i == 0) { 
		            // First Element
		            if (gCfg.animOnStartup) {
		                $(this).fadeIn(gCfg.speed);
		            } else {
		                $(this).show();
		            }
		            $(gCfg.ID+" #PagePicker_"+i).animate({ "opacity":1.0 }, gCfg.speed);
		        } else {
		            $(this).hide(); 
		            $(gCfg.ID+" #PagePicker_"+i).animate({ "opacity":gCfg.pagingButtonOpacity }, gCfg.speed);
		        }
		    }
		});
		if (gCfg.pagingEnabled) {
		    $(gCfg.ID+" #navbar").fadeIn(gCfg.speed);
		}
		gTimer = setTimeout( function(){ PageChange(-1) }, gCfg.delay);
	};

	function PageChange(inPage) {
		var pNextPage = inPage;
		if(pNextPage == -1) { pNextPage = GetNextPage(); }
		$(gCfg.ID+" #PagePicker_"+gPageSelected).animate({ "opacity":gCfg.pagingButtonOpacity }, gCfg.speed);
		$(gCfg.ID+" #PagePicker_"+pNextPage).animate({ "opacity":1.0 }, gCfg.speed);
		
		$(gCfg.ID+" #ContentRotatorPage_"+gPageSelected).animate({ "opacity":"hide" }, gCfg.speed); 
		$(gCfg.ID+" #ContentRotatorPage_"+pNextPage).animate({ "opacity":"show" }, gCfg.speed); 
		
        gPageSelected = pNextPage;
        
    var pDelay = gCfg.delay;
		if (inPage != -1) { pDelay = gCfg.delaySelected; }
		gTimer = setTimeout( function(){ PageChange(-1) }, pDelay);
	};
	function GetNextPage() {
		if ((gPageSelected+1) > gPageLast) {
		    return 0;
		} else {
		    return gPageSelected + 1;
		}
	};
	function PagePicker_Click() {
	    PageSelect(parseFloat(this.id.replace('PagePicker_','')));
	};
	function PageSelect(inPage){
        if (gPageSelected != inPage) {
            clearTimeout(gTimer);
            PageChange(inPage);
        }
    };
	
   
})(jQuery);