/**
 * A slideshow system. Will display a single slide (with a description, title and image) at a time,
 * and will fade between the slides based on a duration. You can manually jump to specific slides.
 *
 * @class       Slideshow
 * @example
 *
 *      Slideshow.initialize('#slideshow', []);
 *
 */

var Slideshow = {

    /**
     * The slide containing element.
     */
    object: null,

    /**
     * The rotation timer.
     */
    timer: null,

    /**
     * Current index.
     */
    index: 0,

	/**
	 * Array of slide data.
	 */
	data: [],

    /**
     * A collection of the slide DOM objects.
     */
    slides: [],

    /**
     * Is rotation currently playing.
     */
    playing: false,

	/**
	 * The last slide index.
	 */
	lastSlide: null,
	
	intervalID: null,

    /**
     * Initialize the slider by building the slides based on this.data and starting the rotation.
     *
     * @param object - CSS expression
     * @param data
     * @constructor
     */
    initialize: function(object, data) {
        Slideshow.object = $(object);
		Slideshow.data = data;
		Slideshow.slides = Slideshow.object.find('.slide');
		Slideshow.fade(0); // устанавливаем первую картинку
		Slideshow.play(); // запускаем слайд-шоу

    },

	/**
	 * Fade out the slides and fade in selected.
	 *
	 * @param index
	 */
	fade: function(index) {
		Slideshow.slides.stop(true, true).fadeOut('normal');
		Slideshow.slides.eq(index).fadeIn(0);
		Slideshow.link(index);

		var caption = Slideshow.object.find('.caption');

		caption.stop(true, true).fadeOut('fast', function() {
			if (Slideshow.data[index]) {
				caption.html("")
					.append('<div id="slider-text"><span id="name">'+ Slideshow.data[index].title +'</span><br /></div>')
					.append('<div id="slider-text"><span id="text">'+ Slideshow.data[index].desc +'</span></div>')
					.fadeIn(0);
			}
		});

		Slideshow.lastSlide = index;
	},

    /**
     * Manually jump to a specific slide. Pauses rotation.
     *
     * @param index
	 * @param control
     */
    jump: function(index, control) {
		if ((Slideshow.lastSlide == index) || (Slideshow.slides.length <= 1))
			return;
        Slideshow.pause();
		Slideshow.fade(index);
        Slideshow.index = index;

        Slideshow.object.find('.paging a').removeClass('current');
        $(control).addClass('current');
    },
	next: function() {
		clearInterval(Slideshow.intervalID); // тормозим слайшоу
		if (Slideshow.lastSlide==(Slideshow.data.length-1)) Slideshow.lastSlide=-1;
        Slideshow.pause();
		Slideshow.fade(Slideshow.lastSlide+1);
        Slideshow.index = Slideshow.lastSlide+1;
        Slideshow.object.find('.paging a').removeClass('current');
		Slideshow.object.find('#paging-'+Slideshow.lastSlide).addClass('current');		
		$('#slider').find('#left-menu li').removeClass('active');	
		$('#slider').find('.slidemenu-'+Slideshow.lastSlide).addClass('active');	
    },	
	prev: function() {
		clearInterval(Slideshow.intervalID); // тормозим слайшоу
		if (Slideshow.lastSlide<=0) Slideshow.lastSlide=Slideshow.data.length;
        Slideshow.pause();
		Slideshow.fade(Slideshow.lastSlide-1);
        Slideshow.index = Slideshow.lastSlide-1;
        Slideshow.object.find('.paging a').removeClass('current');
		Slideshow.object.find('#paging-'+Slideshow.lastSlide).addClass('current');	
		$('#slider').find('#left-menu li').removeClass('active');
		$('#slider').find('.slidemenu-'+Slideshow.lastSlide).addClass('active');		
    },
	play_next: function() {		
		if (Slideshow.lastSlide==(Slideshow.data.length-1)) Slideshow.lastSlide=-1;
        Slideshow.pause();
		Slideshow.fade(Slideshow.lastSlide+1);
        Slideshow.index = Slideshow.lastSlide+1;
        Slideshow.object.find('.paging a').removeClass('current');
		Slideshow.object.find('#paging-'+Slideshow.lastSlide).addClass('current');	
		$('#slider').find('#left-menu li').removeClass('active');	
		$('#slider').find('.slidemenu-'+Slideshow.lastSlide).addClass('active');
	},
	play: function() {
		Slideshow.intervalID = setInterval('Slideshow.play_next();', Slideshow.timer);
		
	},

	/**
	 * Link the mask overlay and track the event.
	 *
	 * @param index
	 */
	link: function(index) {
		if (Slideshow.data[index]) {
			Slideshow.object
				.find('.mask')
					.unbind('click.slideshow')
					.bind('click.slideshow', function() {
						if (typeof _gaq != 'undefined') {
							var pushEvent = [
								'_trackEvent',
								Core.project +' Banners',
								'Banner Click-Throughs',
								'Banner-'+ Slideshow.data[index].id +'-'+ encodeURIComponent(Slideshow.data[index].title.replace(' ','_')) +'-'+ Core.locale
							];
							_gaq.push(pushEvent);
						}

						Core.goTo(Slideshow.data[index].url);
					})
				.end()
				.find('.link')
					.attr('href', Slideshow.data[index].url)
				.end();
		}
	},

    /**
     * Pause the automatic rotation.
     */
    pause: function() {
		if (Slideshow.slides.length <= 1)
			return;

        window.clearInterval(Slideshow.timer);

        Slideshow.playing = false;
    }

};
