/*
 SpSlider V 1.7 BETA
 */
(function($) {
	$.fn.spSlider = function(options) {
		var settings = {
			spInterval : 4000,
			spFadeIn : 1000,
			spFadeOut : 1000,
			counterClassDefault : 'spCounter',
			counterClassActive : 'spCounterActive',
			spClass : 'sp',
			spClassActive : 'spActive',
			spLastActive : 'spLastActive',
			NextButton : 'spArrowHolder_next',
			PrevButton : 'spArrowHolder_prev',
			beforeStartSlide : false,
			afterStartSlide : false,
			firstStartSlide : false,
			lastStartSlide : false,
			nextStartSlide : false,
			prevStartSlide : false
		};
		return this.each(function() {
			// If options exist, lets merge them
				// with our default settings
				if (options) {
					$.extend(settings, options);
				}
				// General Variables
				var spInterval = settings.spInterval + settings.spFadeOut
						+ settings.spFadeIn;
				var playtime;
				var $spParent;
				var spClass = settings.spClass;
				$spParent = jQuery(this);
				$spChildren = $spParent.children();
				$firstChild = $spParent.children(':first');
				$type = jQuery('.' + settings.counterClassDefault).parent()
						.attr('type');
				var total = $spChildren.length;
				var firstSlide = 1;
				var lastSlide = total;
				var spCurrentSlide = firstSlide;
				var x = 1;
				$spParent.children().css( {
					listStyle : 'none',
					position : 'absolute',
					top : 0,
					left : 0,
					zIndex : 98
				});
				$spParent.find('.' + settings.spClass).each(function() {
					jQuery(this).attr('rel', x);
					x++;
				});
				goToSlide(spCurrentSlide, $type);
				// next function
				function nextiTem() {
					spCurrentSlide = jQuery('.' + settings.spClassActive).attr(
							'rel');
					var nextindex = parseFloat(spCurrentSlide) + 1;
					$spChildren.removeClass(settings.spClassActive);
					if (nextindex > total) {
						var nextindex = 1;
					}
					// next slide callback
					if (typeof settings.nextStartSlide == 'function') {
						settings.nextStartSlide(nextindex, $type, spClass);
					}
					// call goToSlide function
					goToSlide(nextindex, $type);
				}
				;
				// prev function
				function previTem() {
					spCurrentSlide = jQuery('.' + settings.spClassActive).attr(
							'rel');
					var previtem = parseFloat(spCurrentSlide) - 1;
					if (previtem < 1) {
						var previtem = jQuery('.' + settings.spClass).last()
								.attr('rel');
					}
					// prev slide callback
					if (typeof settings.prevStartSlide == 'function') {
						settings.prevStartSlide(previtem, $type);
					}
					// call goToSlide function
					goToSlide(previtem, $type);

				}
				;

				function goToSlide(slideIndex, $type) {
					if ($type) {
						if ($type == 1) {
							jQuery('.' + settings.counterClassDefault).not(
									'[rel=' + slideIndex + ']').removeClass(
									settings.counterClassActive).find(
									'img:first').show();
							jQuery(
									'.' + settings.counterClassDefault
											+ '[rel=' + slideIndex + ']').find(
									'img:first').hide();
							jQuery(
									'.' + settings.counterClassDefault
											+ '[rel=' + slideIndex + ']')
									.addClass(settings.counterClassActive)
									.find('img:last').show();
						} else if ($type == 2) {
							jQuery('.' + settings.counterClassDefault).not(
									'[rel=' + slideIndex + ']').removeClass(
									settings.counterClassActive);
							jQuery(
									'.' + settings.counterClassDefault
											+ '[rel=' + slideIndex + ']')
									.addClass(settings.counterClassActive)
									.show();
						} else if ($type == 3) {
							jQuery('.' + settings.counterClassDefault).not(
									'[rel=' + slideIndex + ']').removeClass(
									settings.counterClassActive).hide();
							jQuery(
									'.' + settings.counterClassDefault
											+ '[rel=' + slideIndex + ']')
									.addClass(settings.counterClassActive)
									.show();
						}
					}
					// beforeStartSlide callback function
					if (typeof settings.beforeStartSlide == 'function') {
						settings.beforeStartSlide(slideIndex, $type, spClass);
					}
					if (slideIndex == firstSlide) {
						if (typeof settings.firstStartSlide == 'function') {
							settings.firstStartSlide(slideIndex, $type, spClass);
						}
					}
					if (slideIndex == lastSlide) {
						if (typeof settings.lastStartSlide == 'function') {
							// lastStartSlide callback function
							settings.lastStartSlide(slideIndex, $type);
						}
					}
					$spChildren.not('[rel=' + slideIndex + ']').animate( {
						opacity : 0
					}, settings.LrFadeOut).css('zIndex', 98).removeClass(
							settings.spClassActive);
					// fade in the current slide
					jQuery('.' + settings.spClass + '[rel=' + slideIndex + ']')
							.css('zIndex', 99).animate( {
								opacity : 1
							},
									settings.LrFadeIn,
									function() {
										// ie fade fix
									if (jQuery.browser.msie) {
										jQuery(
												'.' + settings.spClass
														+ '[rel=' + slideIndex
														+ ']').get(0).style
												.removeAttribute('filter');
									}
									;
								});
					jQuery('.' + settings.spClass + '[rel=' + slideIndex + ']')
							.addClass(settings.spClassActive);
							
					if (typeof settings.afterStartSlide == 'function') {
						settings.afterStartSlide(slideIndex, $type);
					}

				}
				// Play function

				function play() {
					playtime = setInterval(nextiTem, spInterval);
				}
				;
				// Pause function

				function pause() {
					clearTimeout(playtime);
				}
				;
				// Pagination
				jQuery('.' + settings.counterClassDefault).bind(
						'click',
						function(e) {
							var goTo = jQuery(this).attr('rel');
							spCurrentSlide = jQuery(
									'.' + settings.spClassActive).attr('rel');
							if (spCurrentSlide != goTo) {
								pause();
								goToSlide(goTo, $type);
								playtime = setInterval(nextiTem, spInterval);
								e.preventDefault();
							} else {
								return false;
							}
						});
				// On click Next button
				jQuery('#' + settings.NextButton).bind('click', function(e) {
					pause();
					nextiTem();
					playtime = setInterval(nextiTem, spInterval);
					e.preventDefault();
				});
				// On click Prev button
				jQuery('#' + settings.PrevButton).bind('click', function(e) {
					pause();
					previTem();
					playtime = setInterval(nextiTem, spInterval);
					e.preventDefault();
				});
				// Run!
				if(total > 1){
				play();
				}
				

			});

	};
})(jQuery);
