/**
* @author balazs.suhajda
*/
//	create sitecore-by-valtech namespace
var sbv = sbv || {};

sbv.gallery = (function() {

    var init = function() {
        $jcont = $j('.gallery');
        if ($jcont.length < 1) return;
        slides.setup();
        if ($jcont.metadata().pager == 'true') pager.setup();
        if ($jcont.metadata().stepper == 'true') steppers.setup();
    };

    var slides = {
        config: {
            textAnimDur: 250,
            imageAnimDur: 500
        },
        timeout: {},
        setup: function() {
            slides.current = slides.old = 0;
            slides.items = $jcont.find('.items > li');
            slides.items.each(function() {
                var url = $j(this).find('a').attr('href');
                if (url) {
                    $j(this).click(function() {
                        window.location = url;
                    }).addClass('clickable');
                }
            });
            if (slides.items.length < 2) return;
            slides.autoplay = parseInt($jcont.metadata().autoplay) || false;
            if (slides.autoplay) slides.timeout = setTimeout(slides.next, slides.autoplay);
        },
        update: function(e) {
            clearTimeout(slides.timeout);
            var user = (e && e.preventDefault && slides.autoplay);
            var slideO = slides.items.eq(slides.old),
				slideN = slides.items.eq(slides.current);

            slideO.find('.item-content').animate({
                marginLeft: 0 - slideO.find('.item-content').outerWidth() * 1.5
            }, slides.config.textAnimDur);

            slideO.delay(slides.config.textAnimDur).fadeOut(slides.config.imageAnimDur);
            slideN.delay(slides.config.textAnimDur).fadeIn(slides.config.imageAnimDur);

            slideN.find('.item-content')
				.css({
				    marginLeft: 0 - slideO.find('.item-content').outerWidth() * 1.5
				})
				.delay(slides.config.imageAnimDur + slides.config.textAnimDur)
				.animate({
				    marginLeft: 0
				}, {
				    duration: slides.config.textAnimDur
				});
            if (slides.autoplay) {
                var nextdelay = slides.autoplay * (user ? 2 : 1) + slides.config.imageAnimDur + slides.config.textAnimDur * 2;
                slides.timeout = setTimeout(slides.next, nextdelay);
            }
            slides.old = slides.current;
            pager.update();
        },
        prev: function(e) {
            if (e && e.preventDefault) e.preventDefault();
            slides.current = (slides.current == 0) ? slides.items.length - 1 : slides.current - 1;
            slides.update(e);
        },
        next: function(e) {
            if (e && e.preventDefault) e.preventDefault();
            slides.current = (slides.current == slides.items.length - 1) ? 0 : slides.current + 1;
            slides.update(e);
        }
    };

    var pager = {
        setup: function() {
            if (slides.items.length < 2) return;
            $jcont.find('.gallery-pager').show();
            pager.prev = $jcont.find('.gallery-pager .prev');
            pager.next = $jcont.find('.gallery-pager .next');
            var tmpl = $jcont.find('.gallery-pager li').remove();
            for (i = 0; i < slides.items.length; i++) {
                var index = i;
                var li = tmpl.clone()
					.addClass(i === 0 ? 'current' : '')
					.click(function(e) {
					    e.preventDefault();
					    var i = $j(this).index();
					    if (slides.current == i) return;
					    slides.current = i;
					    slides.update(e);
					});
                $jcont.find('.gallery-pager ul').append(li);
            };
            pager.links = $jcont.find('.gallery-pager li');
            pager.update();
        },
        update: function() {
            if (!!pager.links) pager.links
				.removeClass('current')
				.eq(slides.current)
					.addClass('current');
        }
    };

    var steppers = {
        opts: {
            hideDelay: 3000,
            hideDur: 1250,
            showDur: 250
        },
        setup: function() {
            if (slides.items.length < 2) return;
            $jcont.find('.gallery-stepper').show();
            $jcont.hover(steppers.show, steppers.hide);
            steppers.prev = $jcont.find('.gallery-stepper .prev').click(slides.prev);
            steppers.next = $jcont.find('.gallery-stepper .next').click(slides.next);
            steppers.hide();
        },
        show: function() {
            steppers.prev.stop(true).animate({
                left: 0
            }, {
                duration: steppers.opts.showDur
            });
            steppers.next.stop(true).animate({
                right: 0
            }, {
                duration: steppers.opts.showDur
            });
        },
        hide: function() {
            steppers.prev
				.delay(steppers.opts.hideDelay)
				.animate({
				    left: 0 - steppers.prev.width()
				}, {
				    duration: steppers.opts.hideDur
				});
            steppers.next
				.delay(steppers.opts.hideDelay)
				.animate({
				    right: 0 - steppers.next.width()
				}, {
				    duration: steppers.opts.hideDur
				});
        },
        update: function() {

        }
    };

    return {
        init: init
    }
})();

$j( sbv.gallery.init );
