﻿(function($) {
    $.fn.ln_carousel = function(settings) {
        var config = {
            container: null,
            speed: 3000,
            transition_speed: 1500,
            num_items: 7
        };

        var vars = {
            continuous: false,
            full_width: 0,
            item_width: 0,
            left_value: 0,
            index: 0,
            length: 0,
            caro_width: 0,
            pages: 0,
            page_index: 1,
            page_width: 0
        };

        if (settings) $.extend(config, settings);
        $c = config;
        Initialize(this);

        function Initialize(caro) {

            vars.caro_width = $(caro).find('.mask').outerWidth();
            vars.length = $(caro).find('.mask ul li').length;
            vars.item_width = $(caro).find('.mask ul li').outerWidth();
            vars.full_width = vars.item_width * vars.length;
            vars.pages = Math.ceil(vars.length / config.num_items);
            vars.page_width = vars.item_width * config.num_items;
            if (vars.full_width < vars.caro_width) {
               vars.full_width = vars.caro_width + 9;
            }

            if (vars.length < config.num_items) {
                var _num_short = config.num_items - vars.length;
                for (i = 0; i < _num_short; i++) {
                    $(caro).find('.mask ul').append('<li><img src="/_Resources/img/caro_' + i + '.jpg" alt="Rock Werchter 2012" /></li>');
                }
            }

            if (vars.length > config.num_items) {
                $buttons_cont = $('<div></div>')
                    .attr('class', 'controls')
                    .prependTo($(caro));
                $buttons_prev = $('<a></a>')
                    .attr('class', 'prev')
                    .attr('href', '#')
                    .text('Previous')
                    .appendTo($buttons_cont);
                $buttons_next = $('<a></a>')
                    .attr('class', 'next')
                    .attr('href', '#')
                    .text('Next')
                    .appendTo($buttons_cont);

                $buttons_next.click(function() {
                    Next(caro);
                    return false;
                });
                $buttons_prev.click(function() {
                    Prev(caro);
                    return false;
                });
            

                $paging = $('<ul class="paging"></ul>').prependTo($(caro)); ;
                for (i = 1; i <= vars.pages; i++) {
                    $('<li><a href="#">' + i + '</a></li>').appendTo($paging);
                }
                $(caro).find('.paging li:eq(0)').addClass('active');

                $(caro).find('.paging li a').click(function() {
                    var index = $(caro).find('.paging li a').index($(this));
                    vars.left_value = (vars.page_width * index) * -1;
                    vars.page_index = index + 1;
                    Animate(caro);
                    return false;
                });
            };

            $(caro).find('.mask ul').css({
                'width': vars.full_width,
                'left': vars.left_value
            });
        };
        function Prev(caro) {
            if (vars.page_index == 1) {
                vars.left_value = (vars.page_width * (vars.pages - 1)) * -1;
                vars.page_index = vars.pages;
            } else {
                vars.left_value = vars.left_value + vars.page_width;
                vars.page_index--;
            }
            Animate(caro);
        };

        function Next(caro) {
            if (vars.page_index < vars.pages) {
                vars.left_value = vars.left_value - vars.page_width;
                vars.page_index++;
            } else {
                vars.left_value = 0;
                vars.page_index = 1;
            }
            Animate(caro);
        };

        function Animate(caro) {
            $(caro).find('.mask ul').stop(true, true).animate({ 'left': vars.left_value }, $c.transition_speed, "easeInOutQuart");
            $(caro).find('.paging li').removeClass('active');
            $(caro).find('.paging li:eq(' + (vars.page_index - 1) + ')').addClass('active');
        };
        return this;
    };

})(jQuery);
