// page init
jQuery(function() {
	initCycleGallery();
})

// cycle gallery init
function initCycleGallery() {
	jQuery('.carousel').cycleGallery({
		slider:'.frame > ul',
		slides:'>li',
		btnNext:'.link-next',
		btnPrev:'.link-prev',
		autoRotation:4000,
		animSpeed:650
	});
}

// cycle gallery
jQuery.fn.cycleGallery = function(options){
	var options = jQuery.extend({
		holder: '.holder',
		slider: '.slider',
		slides: 'li',
		btnPrev: '.link-prev',
		btnNext: '.link-next',
		pagerLinks: '.pager a',
		curItem: '.cur-item',
		allItems: '.all-items',
		activeClass: 'active',
		autoRotation: false,
		animSpeed: 650
	}, 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 pagerLinks = jQuery(options.pagerLinks, 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, 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() {
			var cur = index >= 0 ? index >= len ? 1 : index +1 : len - Math.abs(index) + 1;
			if(curItem.length) curItem.text(cur);
			if(allItems.length) allItems.text(len);
			if(pagerLinks.length) pagerLinks.removeClass(activeClass).eq(cur - 1).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;
		})
		pagerLinks.each(function(n) {
			jQuery(this).click(function() {
				if(!animating && index != n) {
					index = n;
					if(index > prevIndex) direction = true;
					else direction = false;
					switchSlide();
				}
				return false;
			})
		})
		function stopAutoSlide() {
			clearTimeout(timer);
		}
		function autoSlide() {
			if(autoRotation) {
				clearTimeout(timer);
				timer = setTimeout(slideNext, autoRotation + animSpeed);
			}
		}
		refresh();
		autoSlide();
	});
}
