if( typeof nameSpace == 'undefined' ){
	var nameSpace = {};
}

$(document).ready(function(){
	if( nameSpace.divSlider.autoInit ){
		nameSpace.divSlider.init();
	}
});

/////////////////////////////////////////////
// Class - nameSpace.divSlider
/////////////////////////////////////////////
nameSpace.divSlider = 
{

	/////////////////////////////////////////////
	// Define the properties of the class
	/////////////////////////////////////////////
	autoInit				: true,
	_eSlider				: '',
	_eScroll				: '',
	_eContainer				: '',
	_arrPanel				: '',
	selectorSlider			: '#scrollerContainer',
	selectorScroll			: '#scrollerOuterContainer',
	selectorContainer		: '#scrollerInnerContainer',
	selectorPanel			: '#scrollerInnerContainer .scrollerContainer',
	selectorPrev			: '#scrollerControllsContainer .scrollerPrev img',
	selectorNext			: '#scrollerControllsContainer .scrollerNext img',
	selectorNavigation		: '#scrollerControllsContainer .scrollerOption a',
	isHorizontal			: true,
	scrollOptions			: {},
	offset					: 0,
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.init
	/////////////////////////////////////////////
	init : function( objOverride )
	{
		if(nameSpace.divSlider.checkRequirements()){
			if( typeof objOverride == 'object' ){
				nameSpace.divSlider.overrideParams( objOverride );
			}
			nameSpace.divSlider.setInitialStage();
			nameSpace.divSlider.setScrollOptions();
			nameSpace.divSlider.setScroller();
		}
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.checkRequirements
	/////////////////////////////////////////////
	checkRequirements : function() 
	{
		var message = '';
		
		if( typeof $.scrollTo == 'undefined' ){
			message += '* File is missing: jquery.scrollTo.js\n';
		}
		if( typeof $.localScroll == 'undefined' ){
			message += '* File is missing: jquery.localscroll.js\n';
		}
		if( typeof $['serialScroll'] == 'undefined' ){
			message += '* File is missing: jquery.serialScroll.js\n';
		}
		
		if( message != '' ){
			alert(message);
			return false
		}
		
		return true;
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.overrideParams
	/////////////////////////////////////////////
	overrideParams : function( e ) 
	{
		for( var i in e ){
			if( typeof e[i] == typeof nameSpace.divSlider[i] ){
				nameSpace.divSlider[i] = e[i];
			}
		}
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.setInitialStage
	/////////////////////////////////////////////
	setInitialStage : function() 
	{
		var $slider = nameSpace.divSlider._eSlider = $(nameSpace.divSlider.selectorSlider);
		var $scroll = nameSpace.divSlider._eScroll = $(nameSpace.divSlider.selectorScroll);
		var $container = nameSpace.divSlider._eContainer = $(nameSpace.divSlider.selectorContainer);
		var $panels = nameSpace.divSlider._arrPanel = $(nameSpace.divSlider.selectorPanel);
		
		$scroll.css('overflow', 'hidden');
		$container.show().removeClass('hidden');
		
		if( nameSpace.divSlider.isHorizontal ){
			$panels.css({ 'float' : 'left', 'position' : 'relative' }).show().removeClass('hidden');
			$container.width($panels[0].offsetWidth * $panels.size());
		}
		else{
			alert('Vertical slider not implemented yet');
		}
		
		nameSpace.divSlider.offset = parseInt((nameSpace.divSlider.isHorizontal ? $container.css('paddingTop') : $container.css('paddingLeft')) || 0) * -1;
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.setScrollOptions
	/////////////////////////////////////////////
	setScrollOptions : function() 
	{
		var $scrollOptions = {};
		
		// the element that has the overflow
		$scrollOptions.target = nameSpace.divSlider._eScroll;

        // can be a selector which will be relative to the target
        $scrollOptions.items = nameSpace.divSlider._arrPanel;

        $scrollOptions.navigation = nameSpace.divSlider.selectorNavigation;

        // selectors are NOT relative to document, i.e. make sure they're unique
        $scrollOptions.prev = nameSpace.divSlider.selectorPrev;
        $scrollOptions.next = nameSpace.divSlider.selectorNext;

        // allow the scroll effect to run both directions
        $scrollOptions.axis = 'xy';

		// our final callback
        $scrollOptions.onAfter = nameSpace.divSlider.onAfterSlide;

        $scrollOptions.offset = nameSpace.divSlider.offset;

        // duration of the sliding effect
        $scrollOptions.duration = 500;

        // easing - can be used with the easing plugin: 
        // http://gsgd.co.uk/sandbox/jquery/easing/
        $scrollOptions.easing = 'swing';
		
		nameSpace.divSlider.scrollOptions = $scrollOptions;
		
		nameSpace.divSlider._eSlider.serialScroll($scrollOptions);
		$.localScroll($scrollOptions);
		$scrollOptions.duration = 1;
		$.localScroll.hash($scrollOptions);
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.setScroller
	/////////////////////////////////////////////
	setScroller : function() 
	{
		var $scrollOptions = nameSpace.divSlider.scrollOptions;
		
		nameSpace.divSlider._eSlider.serialScroll($scrollOptions);
		$.localScroll($scrollOptions);
		$scrollOptions.duration = 1;
		$.localScroll.hash($scrollOptions);
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.onAfterSlide
	/////////////////////////////////////////////
	onAfterSlide : function($data)
	{
		var el = $(nameSpace.divSlider.selectorNavigation + '[href$="' + $data.id + '"]');
        nameSpace.divSlider.selectOption.call(el);
	},
	
	/////////////////////////////////////////////
	// Function - nameSpace.divSlider.selectOption
	/////////////////////////////////////////////
	selectOption : function()
	{
		$(this)
            .parents('ul:first')
                .find('a')
                    .removeClass('active')
                .end()
            .end()
            .addClass('active');
	}
};