(function($)
{
	$.fn.cinemarkTabs = function (settings) {

        var id = this.attr('id');
		var i = 0;
        var idAnterior = 0;
        var idActual = 0;
        var indexActual = 0;
        var playInterval;

		var config = {
			autoplay: false,
            stopAutoplayOnHover: true,
            stopAutoplayOnClick: true,
			fadeEffect: true,
			playInterval: 5000, /* Intervalo para pasar los tabs en caso de que autoplay este en true */
			fadeInterval: 500,
			linksContainer: this.find('.links:first'),
			tabsContainer: this.find('.tabs:first'),
            emptyLinkText: '<span>No hay contenido</span>', // Para cuando no hay links
            emptyTabText: '<span>No hay contenido</span>', // Para cuando no hay tabs
            beforeSelect: function (linkActual, linkAnterior){},
            afterSelect: function (linkActual, linkAnterior){},
            nextTab: false,
			selectFirst: false
		};

		if (settings) {
			$.extend(config, settings);
		}

		var construct = function () {
			/**
			 * Si el tab esta vacio muestra un tab vacio con class="emptyTab" para poder darle estilo css si se desea
			 **/
			if (config.linksContainer.children('ul').size() == 0) config.linksContainer.html('<ul></ul>');
			if (config.linksContainer.children('ul').find('li').size() == 0)
			{
				config.linksContainer.children('ul').html('<li><a href="#">' + config.emptyLinkText + '</a></li>');
				config.tabsContainer.empty();
			}

			if (config.tabsContainer.children('ul').size() == 0) config.tabsContainer.html('<ul></ul>');
			if (config.tabsContainer.children('ul').children('li').size() == 0)
			{
				config.tabsContainer.children('ul').html('<li class="emptyTab">' + config.emptyTabText + '</li>');
			}

			config.linksContainer.find('ul').children('li').find('a').each(function () {
				var href = id + '_' + i;
				$(this).attr({'href' : '#' + href});
                var tab = config.tabsContainer.children('ul').children('li:eq(' + i + ')');
				tab.attr({'id': href}).hide();

                if (config.autoplay == true && config.stopAutoplayOnHover == true)
                {
                    /**
                     * Frenamos el autoplay al posar el mouse arriba del tab
                     **/
                    tab.hover(function () {
                        clearInterval(playInterval);
                    }, function () {
                        autoplay();
                    });
                }
                
				$(this).click(function () {
                    /**
                     * Frenamos el autoplay al clickear
                     **/
                    if (config.autoplay == true && config.stopAutoplayOnClick == true)
                    {
                        clearIntervalAutoplay();
                    }
					selectTab($(this));
                    return false;
				});
				i++;
			});

            idAnterior = config.linksContainer.find('ul').children('li:first').find('a').attr('href');
            idActual = idAnterior;
            indexActual = idActual.split('_');indexActual = parseInt(indexActual[1]);
            
			config.tabsContainer.find(idActual).show();
			config.linksContainer.find('ul').children('li').find('a[href=' + idActual + ']').addClass('selected');

			if (config.autoplay == true)
			{
				autoplay();
			}
            if (config.nextTab == true)
			{
				nextTab();
			}
            if (config.selectFirst == true)
			{
				selectTab(config.linksContainer.find('ul').children('li:first').children('a').removeClass('selected'));
			}
		};

        var clearIntervalAutoplay = function ()
        {
            playInterval = window.clearInterval(playInterval);
            config.autoplay = false;
        };

		var changeTabs = function ()
		{
            config.linksContainer.find('ul').children('li').find('a[href=' + idAnterior + ']').removeClass('selected');
            var actual = $(config.linksContainer.find('ul').children('li').find('a[href=' + idActual + ']'));
			var anterior= $(config.linksContainer.find('ul').children('li').find('a[href=' + idAnterior + ']'));
			config.beforeSelect(actual, anterior);
			config.linksContainer.find('ul').children('li').find('a[href=' + idActual + ']').addClass('selected');
			if (config.fadeEffect == true)
			{
				config.tabsContainer.find(idAnterior).fadeOut(config.fadeInterval, function () {
					config.tabsContainer.find(idActual).fadeIn(config.fadeInterval);
				});
			}
			else
			{
				config.tabsContainer.find(idAnterior).hide();
				config.tabsContainer.find(idActual).show();
			}
            config.afterSelect(actual, anterior);
            return false;
		};

		var selectTab = function (linkSelected)
		{
			if (!linkSelected.hasClass('selected'))
			{
				idAnterior = config.linksContainer.find('ul').children('li').find('a.selected').attr('href');
				idActual = linkSelected.attr('href');
				changeTabs();
				indexActual = idActual.split('_');
				indexActual = parseInt(indexActual[1]);
				indexActual++;
			}
			return false;
		};

		var nextTab = function ()
		{
			if (config.linksContainer.find('ul').children('li').find('a[href=#'+ id + '_' + indexActual +']').size() == 0)
			{
				indexActual = 0;
			}
			else if (indexActual == 0)
			{
				indexActual++;
			}
			idAnterior = config.linksContainer.find('ul').children('li').find('a.selected').attr('href');
			idActual = config.linksContainer.find('ul').children('li').find('a[href=#'+ id + '_' + indexActual +']').attr('href');
			changeTabs();
			indexActual++;
		};

		var autoplay = function () {
            if (config.linksContainer.children('ul').find('li').size() > 1)
            {
    			playInterval = window.setInterval(function () {if (config.autoplay == true) nextTab();}, config.playInterval);
            }
		};
	
		construct();

		return this;
	};
	
})(jQuery);
