// page init
jQuery(function() {
	initCycleGallery();
})

// cycle gallery init
function initCycleGallery() {
	$('.carousel').cycleGallery({
		slider:'.frame ul',
		slides:'li',
		switchers:'.switcher, .navigation',
		autoRotation: 5000
	});
}

// cycle gallery
jQuery.fn.cycleGallery = function(options){
	var options = jQuery.extend({
		holder: '.holder',
		slider: '.slider',
		slides: 'li',
		btnPrev: '.link-prev',
		btnNext: '.link-next',
		switchers: '.pager a',
		curItem: '.cur-item',
		allItems: '.all-items',
		activeClass: 'active',
		animSpeed: 650,
		autoRotation: 5000
	}, options);

	return this.each(function(){
		var gal = jQuery(this);
		var holder = jQuery(options.holder, gal);
		var slider = jQuery(options.slider, gal);
		var slides = jQuery(options.slides, slider);
		var btnPrev = jQuery(options.btnPrev, gal);
		var btnNext = jQuery(options.btnNext, gal);
		var switchers = jQuery(options.switchers, gal);
		var curItem = jQuery(options.curItem, gal);
		var allItems = jQuery(options.allItems, gal);
		var activeClass = options.activeClass;
		var animSpeed = options.animSpeed;
		var autoRotation = options.autoRotation;
		
		var animating = false;
		var len = slides.length;
		var slideWidth = slides.eq(0).outerWidth(true);
		var index = 0;
		var prevIndex = 0;
		var direction = true, timer;
		
		slides.css({position: 'absolute', left: slideWidth}).eq(0).css({left: 0}).addClass(activeClass);
		slider.css({position: 'relative'}).height(slides.eq(0).outerHeight(true));
		
		function switchSlide() {
			animating = true;
			stopAutoSlide();
			if(direction) {
				slides.eq(prevIndex).removeClass(activeClass).stop().animate({left: -slideWidth}, {
					duration: animSpeed
				})
				slides.eq(index).addClass(activeClass).css({left: slideWidth}).stop().animate({left: 0}, {
					duration: animSpeed,
					complete: function() {
						animating = false;
					}
				})
			}
			else {
				slides.eq(prevIndex).removeClass(activeClass).stop().animate({left: slideWidth}, {
					duration: animSpeed
				})
				slides.eq(index).addClass(activeClass).css({left: -slideWidth}).stop().animate({left: 0}, {
					duration: animSpeed,
					complete: function() {
						animating = false;
					}
				})
			}
			slider.stop().animate({height: slides.eq(index).outerHeight(true)}, {
				duration: animSpeed
			})
			prevIndex = index;
			refresh();
			autoSlide();
		}
		function refresh() {
			switchers.each(function() {
				var items = jQuery(this).children();
				items.removeClass(activeClass).eq(index).addClass(activeClass);
			})
		}
		function slideNext() {
			if(!animating) {
				if(index == len - 1) index = 0;
				else index++;
				direction = true;
				switchSlide();
			}
		}
		function slidePrev() {
			if(!animating) {
				if(index == 0) index = len - 1;
				else index--;
				direction = false;
				switchSlide();
			}
		}
		btnNext.click(function() {
			slideNext();
			return false;
		})
		btnPrev.click(function() {
			slidePrev();
			return false;
		})
		switchers.each(function() {
			var switcher = jQuery(this);
			var items = switcher.children();
			items.each(function(n) {
				jQuery(this).click(function() {
					if(!animating) {
						index = n;
						if(index > prevIndex) direction = true;
						else direction = false;
						switchSlide();
					}
					return false;
				})
			})
		})
		function stopAutoSlide() {
			clearTimeout(timer);
		}
		function autoSlide() {
			clearTimeout(timer);
			timer = setTimeout(slideNext, autoRotation + animSpeed);
		}
		slider.mouseenter(stopAutoSlide).mouseleave(autoSlide);
		refresh();
		autoSlide();
	});
}
