var paused = false;
function pause() {
	paused = true;	
	hide("control_pause");
	show("control_play");
}
function play() {
	paused = false;	
	hide("control_play");
	show("control_pause");
}

function show(id) {
	if (document.getElementById(id)) document.getElementById(id).style.display = "block";
}
function hide(id) {
	if (document.getElementById(id)) document.getElementById(id).style.display = "none";
}

function set_Style(obj,style) {
	if (obj) obj.className = style;
}

(function($)
{
	$.fn.slider = function(settings)
	{
		// Config Array
		var config = $.extend(
		{ 
			type:					"slide",
			
			dynamicCategories:		true,
			
			direction:				"hor",
			timeDelay:				350,
			loopItems:				true,
			autoSlide:				true,
			mouseDisable:			true,
			autoSlideDelay:			5000,
			
			defaultVertNum:			3,
		
			btnNextStr:				"slider-btnNext",
			btnPrevStr:				"slider-btnPrev",
			btnDisabledStr:			"-dis",
			btnHoverStr:			"-over",
			btnOpacityOff:			1,
			btnOpacityOver:			1,
			
			slideItemClass:			"slideItem",
			slideItemHolder:		"slider-holder",
			slideItemBound:			"slider-bound"
		}, settings || {});
		
		var slider = $(this);
		
		// Variables to determine the position of the slider
		var currentItem = 0;
		var prevItem = 0;
		var pos = 0;
		var prevPos = [];
		var timer;
		var isReady = true;
		
		var numItemsTotal;
		var moveVal;
		var numItemsVisible;
		var holder;
		var marginItemVal;
		var marginHolderVal;
		var originalChildren;
		var currentPreviousIndex;
			
		function initSlider()
		{			
			// Insert the HTML necessary to create the slider
			slider.html(setHTML(slider));
			slider.css({display: 'block'});
			
			numItemsTotal = $('.' + config.slideItemClass, slider).length;
			moveVal = (config.direction == "hor") ? $('.' + config.slideItemClass, slider).outerWidth(true) : $('.' + config.slideItemClass, slider).outerHeight(true);
			numItemsVisible = (config.direction == "hor") ? Math.floor(slider.outerWidth() / moveVal) : config.defaultVertNum;
			holder = $('.' + config.slideItemHolder, slider);
			marginItemVal = (config.direction == "hor") ? moveVal - $('.' + config.slideItemClass, slider).width() : moveVal - $('.' + config.slideItemClass, slider).height(); 
			marginHolderVal = (config.direction == "hor") ? parseInt(($('.' + config.slideItemBound, slider).css("margin-left"))) : parseInt(($(slider).css("padding-top")));
			originalChildren = $('.' + config.slideItemClass, slider);
			currentPreviousIndex = originalChildren.length - 1;
			
			originalChildren.each(function(num)
			{
				$(this).css({left: (num * moveVal) + 'px'}).removeClass('hide');
			});
			
			if (config.direction == "hor")
			{
				slider.css({width: ((moveVal * numItemsVisible) + (marginItemVal + marginHolderVal)) + 'px'});	
				if ($.browser.msie && $.browser.version == "6.0") { slider.css({height: (slider.outerHeight() - 2) + 'px'}); }
			}
			else
			{			
				if ($.browser.msie && $.browser.version == "6.0") { slider.css({width: (slider.width() - 2) + 'px'}); }
				slider.css({height: ((moveVal * numItemsVisible) - marginHolderVal) + 'px'});
				
				$('.' + config.slideItemBound).css({height: slider.height() + 'px'});
			}
			
			// Setup a timer if the slider is set to automatic
			if (config.autoSlide && numItemsTotal > numItemsVisible)
			{
				setTimer();
				
				if (config.mouseDisable)
				{
					slider.mouseover(function()
					{
						clearTimer();
					}).mouseout(function()
					{
						setTimer();
					});
				}
			}
			
			
			$('a', '.ss-controls').click(function()
			{				
				if (isReady && currentItem != $(this).attr('rel'))
				{
					currentItem = $(this).attr('rel') - 1;				
					nextItem(true);
				}
				return false;
			});
		}
		
	//  ========== FUNCTIONS ==========  \\		
		function nextItem(newItem)
		{
			
			pos = -(moveVal);
			
			if (currentItem >= numItemsTotal - 1)
			{
				currentItem = 0;
			}
			else
			{
				currentItem++;
			}


			moveSlider(holder, pos, config.timeDelay, 'next', newItem);
			
			if (config.dynamicCategories)
			{
				if (newItem == true)
				{
					setActiveControls();
					prevItem = currentItem;
				}
			}
		}
				
		function setActiveControls()
		{
			$('li:eq(' + prevItem + ')', '.ss-controls').removeClass('active');
			$('li:eq(' + currentItem + ')', '.ss-controls').addClass('active');
		}
		
		function positionSlider(num, dir)
			{
				if (dir == 'next')
				{
					$(holder).css({left: 0});
								
					var nextItem = num + 1;
					if (nextItem >= numItemsTotal)
					{
						nextItem = 0;
					}
					
					$('.slideItem', holder).each(function(e)
					{
						if (e == num)
						{
							$(this).css({left: 0});
						}
						else if (e == nextItem)
						{
							$(this).css({left: moveVal + 'px'});
						}
						else
						{
							$(this).css({left: (moveVal * 2) + 'px'});
						}
					});
				}
			}
		
		function moveSlider(holder, pos, time, dir, newItem)
			{				
				clearTimer();
				setTimer();
				
				switch(config.type)
				{
					case "slide":							
						if (newItem === true)
						{
							isReady = false;
						
							$('.' + config.slideItemClass + ':eq(' + prevItem + ')', slider).css({left: 0}).animate({ left: '-940px' }, time, function() { $(this).css({display: 'none'}); isReady = true; });
							$('.' + config.slideItemClass + ':eq(' + currentItem + ')', slider).css({display: 'block', left: '940px'}).animate({ left: 0 }, time);
						}
					
					break;
				}
			}
			
		function setTimer()
			{
				timer = setInterval(timerNext, config.autoSlideDelay);
			}
		function timerNext()
			{
				if (!paused) nextItem(true);
			}
		function clearTimer()
			{
				clearInterval(timer);
			}
			
		// Add the HTML to create the slider
		function setHTML(this_obj)
			{
				var html_str = '';
				html_str += '<ul class="ss-controls">';
				
				for (var i = 0; i < $('.' + config.slideItemClass, slider).length; i++)
				{
					if (i == 0)
					{
						html_str += '<li class="active"><a href="/" rel="' + i + '">' + (i + 1) + '</a></li>';
					}
					else
					{
						html_str += '<li><a href="/" rel="' + i + '">' + (i + 1) + '</a></li>';
					}
				}
				
				html_str += '</ul>';
				html_str += '<div class="' + config.slideItemBound + '">';
				html_str += '<div class="' + config.slideItemHolder + ' clearfix">';
				html_str += this_obj.html();
				html_str += '</div></div>';
				return html_str;
			}
		
		initSlider();
	};
})(jQuery);
