var slider = {
    init: function (elem_name){
        divSize = slider.width($(elem_name + ' .slides'));
        ul = $(elem_name + ' .slides ul');
        li = $("li", ul);

        items = li.size();
        itemWidth = slider.width(li);
        itemsWidth = itemWidth * items;
        onScreenItems = Math.floor(divSize / itemWidth);

        num_right = items - onScreenItems;
        num_left = 0;

        $(elem_name).data({
            "items": items,
            'itemWidth' : itemWidth,
            'itemsWidth' : itemsWidth,
            'onScreenItems' : onScreenItems,
            'curr': 0,
            'num_right': num_right,
            'num_left': num_left,
            'ul': ul,
            'li': li
        });

        if (items < onScreenItems) {
            $(elem_name + ' .carousel_right img').hide();
            $(elem_name + ' .carousel_left img').hide();
        }

        $(elem_name + ' .carousel_right img').click(function() {

            num_right = $(elem_name).data("num_right");
            num_left = $(elem_name).data("num_left");
            onScreenItems = $(elem_name).data("onScreenItems");
            ul = $(elem_name).data("ul");
            li = $(elem_name).data("li");
            curr = $(elem_name).data("curr");
            itemWidth = $(elem_name).data("itemWidth");

/*
            if (num_right < onScreenItems) {
                ul.append(li.slice(0, items).clone());
                num_right += items;
                num_left += items;
            }
*/



            if (num_right > 0) {

                maxScroll = onScreenItems;
                if (num_right < onScreenItems) {
                    maxScroll = num_right;
                }

                num_right -= maxScroll;
                num_left += maxScroll;
                curr += maxScroll;

                $(elem_name).data('curr', curr);
                $(elem_name).data('num_left', num_left);
                $(elem_name).data('num_right', num_right);
/*
                console.debug( 'curr:' + curr + ' \n ' +
                    'num_right: ' +num_right + ' \n ' +
                    'num_left:' + num_left);

*/
            
                return slider.go(ul, -( curr * itemWidth));
            }
           

        });


        $(elem_name + ' .carousel_left img').click(function() {

            num_right = $(elem_name).data("num_right");
            num_left = $(elem_name).data("num_left");
            onScreenItems = $(elem_name).data("onScreenItems");
            ul = $(elem_name).data("ul");
            li = $(elem_name).data("li");
            curr = $(elem_name).data("curr");
            itemWidth = $(elem_name).data("itemWidth");

            
            
            /*
            if (num_left < onScreenItems) {
                ul.prepend(li.slice(0, items).clone());
                num_left -= items;
                num_right += items;
            }
*/

            if (num_left > 0) {

                maxScroll = onScreenItems;
                if (num_left < onScreenItems) {
                    maxScroll = num_left;
                }

                num_left -= maxScroll;
                num_right += maxScroll;
                curr -= maxScroll;
            
/*
                if (curr < 0) {
                    curr += items;
                    num_left += items;
                    num_right -= items;
                }
*/

                $(elem_name).data('curr', curr);
                $(elem_name).data('num_left', num_left);
                $(elem_name).data('num_right', num_right);
/*
                console.debug( 'curr:' + curr + ' \n ' +
                    'num_right: ' +num_right + ' \n ' +
                    'num_left:' + num_left);

            */
                return slider.go(ul, -( curr * itemWidth));
            }
        });

    },
    width: function(el) {
        return  el[0].offsetWidth + slider.css(el, 'marginLeft') + slider.css(el, 'marginRight');
    },
    css: function(el, prop){
        return parseInt($.css(el[0], prop)) || 0;
    },
    go: function(ul, to) {
        ul.animate({
            left: (to)
        }, 1000);
    }
};
