/*
 * jQuery slideShow v1.1.0 
 *
 * Copyright (c) 2008 Taranets Aleksey
 * email: aleks_tar@ukr.net
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 */

jQuery.fn.slideShow = function(_options){
    // defaults options	
    var _options = jQuery.extend({
		galleryEl:'ul.zoom-img li',
		elTagName:'li',
		linkNext:false,
		linkPrev:false,
		numElementLink:'ul.link-gallery a',
		duration:200,
		autoSlideShow:true,
		switchTime:4000,
		event:'click',
		currentEl:false,
		allEl:false
    },_options);

    return this.each(function(){
	    var _THIS = jQuery(this);
		
		var _galleryEl = $(_options.galleryEl, _THIS);
		var _elTagName = _options.elTagName;
		var _linkNext = _options.linkNext ? $(_options.linkNext, _THIS) : false;
		var _linkPrev = _options.linkPrev ? $(_options.linkPrev, _THIS) : false;
		var _numElementLink = _options.numElementLink ? $(_options.numElementLink, _THIS) : false;
		var _numElement = _options.numElementLink ? _numElementLink.parent() : false;
		var _duration = _options.duration;
		var _switchTime = _options.switchTime;
		var _numElActive, _n, _timer = false;
		
		if (!_galleryEl.filter('.active').length)
				_galleryEl.eq(0).addClass('active');
				
		$(_galleryEl).not(".active").css('display','none');
		
		if ($(_numElement).length) {activeNumEl()}
		
		if (_options.autoSlideShow) {
				_timer = setTimeout(function(){nextEl()},_switchTime);
				_galleryEl.hover(function() {
						if (_timer) clearTimeout(_timer);
				}, function(){
						_timer = setTimeout(function(){nextEl()},_switchTime);
				});
		}
		if (_linkNext) {
				$(_linkNext).click(function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						if ($(_galleryEl).filter(".active").next().is(_elTagName)) {
							$(_galleryEl).filter(".active").next().addClass("next");
						} else {
							$(_galleryEl).eq(0).addClass("next");
						}
						fadeElement();
						activeNumEl();
						return false;
				});
		}
		if (_linkPrev) {	
				$(_linkPrev).click(function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						if ($(_galleryEl).filter(".active").prev().is(_elTagName)) {
							$(_galleryEl).filter(".active").prev().addClass("next");
						} else {
							$(_galleryEl).filter(":last-child").addClass("next");
						}
						fadeElement();
						activeNumEl();
						return false;
				});
		}
		if (_numElementLink) {
				$(_numElementLink).bind(_options.event, function(){
						if (_timer) {
								clearTimeout(_timer);
								_timer = setTimeout(function(){nextEl()},_switchTime);
						}
						_n = _numElement.index($(this).parent());
						if (!$(_galleryEl).eq(_n).hasClass("active")){
							$(_galleryEl).eq(_n).addClass("next");
							fadeElement();
							activeNumEl();
						}
						return false;
				});
		}
		if (_options.currentEl || _options.allEl) {
				_THIS.all = _galleryEl.length;
				$(_options.allEl, _THIS).html(_THIS.all);
				function currentNum() {
					var _index = _galleryEl.index(_galleryEl.filter('.active')) + 1;
					$(_options.currentEl, _THIS).html(_index);
				}
				currentNum();
		}
		function nextEl(){
				if ($(_galleryEl).filter(".active").next().is(_elTagName)){
					$(_galleryEl).filter(".active").next().addClass("next");
				} else {
					$(_galleryEl).eq(0).addClass("next");
				}
				fadeElement();
				activeNumEl();
				_timer = setTimeout(function(){nextEl()},_switchTime);
		};		
		function activeNumEl() {
				$(_numElement).removeClass("active");
				_numElActive = $(_galleryEl).index($(_galleryEl).filter(".active")[0]);
				$(_numElement).eq(_numElActive).addClass("active");
		};
		function fadeElement(){
				$(_galleryEl).filter(".active").fadeOut(_duration).removeClass("active");
				$(_galleryEl).filter(".next").fadeIn(_duration).addClass("active").removeClass("next");
				if (_options.currentEl || _options.allEl) currentNum();
		};
    });
}

$(document).ready(function(){
	$('div.gallery').slideShow();
});


