/*
 * jQuery suSlide plugin 1.0
 * Copyright (c) 2009 - 2010 SU Web Group / Recep Kocur
 */

;(function($) {
	var $settings, $current, $slide, $slide_active, $slide_after, $slide_stop, $tag, $active_id = 0, load_time = null, load_arguments = null, load_this = null;

	$.suslide = {
		defaults: {
			delay: 3000,
			random: false,
			
			width: 300,
			height: 240,
			
			pauseOnMouseOver: false,
			
			/*imageEffect: 'fade',
			numberButton: false,*/
			arrowButton: true,
			buttonOnMouseOver: false,

			textPosition: 'bottom',
			textEffect: 'fade',
			textOnMouseOver: false
		}
	};

	$.fn.extend({
		suslide: function(settings) {
			settings = $.extend({}, $.suslide.defaults, settings);
			$settings = settings;
			$current = this;
			$slide = this.find('> div');
			
			/* ana class adını eklenir */
			this.addClass('suslide');
			
			/* height, width */
			this.css({height:settings.height, width:settings.width});
			
			/* fix width */
			this.find('.suslide-text').css('width', $settings.width - 20);
			
			/* bütün slidelerini gizlenir */
			$slide.filter(':not(.suslide-active)').hide();
			
			/* arrow butonları eklenir */
			$('<div class="suslide-arrow-prev"/>').click(function() {
				clearTimeout(load_time);
				load_this = this;
				load_arguments = arguments;
				load_time = setTimeout(function(){prev_slide.apply(load_this, load_arguments)}, 1);
			}).appendTo(this);
			
			$('<div class="suslide-arrow-next"/>').click(function() {
				clearTimeout(load_time);
				load_this = this;
				load_arguments = arguments;
				load_time = setTimeout(function(){next_slide.apply(load_this, load_arguments)}, 1);
			}).appendTo(this);
			
			var int_rand, str_add, int_count;
	
			/* suslide tertible */
				if(!$slide.hasClass('suslide-active')) {
					if(!settings.random) {
						int_rand = 0; str_add = '[0]';
					} else {
						int_rand = Math.floor(Math.random() * $slide.length);
						str_add = '['+ int_rand +']';
					}
				} else {
					int_count = 0;
					$slide.each(function() {
						if($(this).hasClass('suslide-active')) {
							int_rand = int_count;
						}
						int_count++;
					});
					str_add = '['+ int_rand +']';
				}
				$slide.filter(':eq('+ int_rand +')').addClass('suslide-0 suslide-active').attr('index', 0);
				
				/* random true ise */
				if(settings.random) {
					int_count = 1;
					$slide.each(function() {
						if(!$(this).hasClass('suslide-active')) {
							do {
								int_rand = Math.floor(Math.random() * $slide.length);
							} while(str_add.indexOf('['+ int_rand +']')>-1);
							str_add = str_add +'['+ int_rand +']';
							$slide.filter(':eq('+ int_rand +')').addClass('suslide-'+ int_count).attr('index', int_count);
							int_count++;
						}
					});
				}
				/* random false ise */
				else {
					int_count = 1;
					$slide.each(function() {
						if(!$(this).hasClass('suslide-active')) {
							$(this).addClass('suslide-'+ int_count).attr('index', int_count);
							int_count++;
						}
					});
				}
				/*for(i=0; i<$slide.length; i++) {
					$slide.filter('.suslide-'+ i +'').remove().appendTo($current);
				};*/
			/* suslide tertible */

			/* text onmouseover */
			if(settings.textOnMouseOver) {
				this.hover(function() {
					show_text();
				}, function () {
					hide_text();
				});
			}

			/* button onmouseover */
			if(settings.buttonOnMouseOver) {
				$('.suslide-arrow-prev,.suslide-arrow-next').hide();
				this.hover(function() {
					$('.suslide-arrow-prev,.suslide-arrow-next').show();
				}, function () {
					$('.suslide-arrow-prev,.suslide-arrow-next').hide();
				});
			}

			/* slide pauseOnMouseOver */
			if(settings.pauseOnMouseOver) {
				this.hover(function() {
					clearTimeout(load_time);
					$slide_stop = true;
				}, function () {
					$slide_stop = false;
					load_this = this;
					load_arguments = arguments;
					load_time = setTimeout(function(){next_slide.apply(load_this, load_arguments)}, 1500);
				});
			}

			start_slide();
		}
	});
	
	function settings(element) {
		return $.data(element, "suslide-settings");
	}
	
	function start_slide() {
		/* text position */
		$tag = $current.find('.suslide-active .suslide-text');
		$tag.addClass('suslide-text-pos-' + $settings.textPosition);

		if(!$settings.textOnMouseOver) {
			show_text();
		}
		
		load_this = this;
		load_arguments = arguments;
		load_time = setTimeout(function(){next_slide.apply(load_this, load_arguments)}, $settings.delay);
	}

	function next_slide() {
		clearTimeout(load_time);

		if(!$settings.textOnMouseOver) {
			hide_text();
		}

		$slide_active = $slide.filter('.suslide-active');
		if($slide_active.attr('index') < $slide.length - 1) {
			$slide_after = $slide.filter('.suslide-'+ (parseInt($slide_active.attr('index'))+1));
			$slide_after.show().addClass('suslide-active');
			$slide_active.hide().removeClass('suslide-active');
		} else {
			$slide_after = $slide.filter('.suslide-0');
			$slide_after.show().addClass('suslide-active');
			$slide_active.hide().removeClass('suslide-active');
		}

		/* text position */
		$tag = $current.find('.suslide-active .suslide-text');
		$tag.addClass('suslide-text-pos-' + $settings.textPosition);

		if( !$settings.textOnMouseOver ) {
			show_text();
		}

		if(!$slide_stop) {
			load_this = this;
			load_arguments = arguments;
			load_time = setTimeout(function(){next_slide.apply(load_this, load_arguments)}, $settings.delay);
		}
	}

	function prev_slide() {
		clearTimeout(load_time);

		if(!$settings.textOnMouseOver) {
			hide_text();
		}

		$slide_active = $slide.filter('.suslide-active');
		if($slide_active.attr('index') > 0) {
			$slide_after = $slide.filter('.suslide-'+ (parseInt($slide_active.attr('index'))-1));
			$slide_after.show().addClass('suslide-active');
			$slide_active.hide().removeClass('suslide-active');
		} else {
			$slide_after = $slide.filter('.suslide-'+ (parseInt($slide.length)-1));
			$slide_after.show().addClass('suslide-active');
			$slide_active.hide().removeClass('suslide-active');
		}

		/* text position */
		$tag = $current.find('.suslide-active .suslide-text');
		$tag.addClass('suslide-text-pos-' + $settings.textPosition);

		if( !$settings.textOnMouseOver ) {
			show_text();
		}

		if(!$slide_stop) {
			load_this = this;
			load_arguments = arguments;
			load_time = setTimeout(function(){next_slide.apply(load_this, load_arguments)}, $settings.delay);
		}
	}

	function show_text() {
		/* text top animate */
		if($settings.textPosition == 'top') {
			$tag.css({
				top: "-" + $tag.outerHeight(true) + "px",
				opacity: 0
			}).animate({
				top: 0,
				opacity: 1.0
			}, "normal");
		}

		/* text bottom animate */
		if($settings.textPosition == 'bottom') {
			$tag.css({
				top: $settings.height,
				opacity: 0
			}).animate({
				top: $settings.height - $tag.outerHeight(true),
				opacity: 1.0
			}, "normal");
		}
	}

	function hide_text() {
		/* text top animate */
		if($settings.textPosition == 'top') {
			$tag.css({
				top: 0,
				opacity: 1.0
			}).animate({
				top: "-" + $tag.outerHeight(true) + "px",
				opacity: 0
			}, "normal");
		}

		/* text bottom animate */
		if($settings.textPosition == 'bottom') {
			$tag.css({
				top: $settings.height - $tag.outerHeight(true),
				opacity: 1.0
			}).animate({
				top: $settings.height,
				opacity: 0
			}, "normal");
		}
	}

	$.fn.suSlide = $.fn.suslide;
	
})(jQuery);
