(function($) {

    var methods = {

        init: function(options) {
            var settings = {
                'link': 'carousel.xml',
                'totalDisplayed':3
            };

            $.o = $.extend(settings, options);
            $.container = $(this);
            $.list = [];

            $($.container).bind("ajaxSend", function() {

            }).bind("ajaxComplete", function() {
            	if($.list.length > $.o.totalDisplayed){
               	 	$('#' + $(this).attr("id")).parent().prepend('<div class="scroller" id="' + $(this).attr("id") + '_left_scroll"><img src="carousel/left.png" class="buttons"/></div>');
                }else{                	
                }
               
               $(this).html($('<ul id="'+$(this).attr("id")+'_ul"></ul>').append($.list.join('')));
                
                if($.list.length > $.o.totalDisplayed){
                	$('#' + $(this).attr("id")).parent().append('<div class="scroller" id="' + $(this).attr("id") + '_right_scroll"><img src="carousel/right.png" class="buttons"/></div>');
				}else{
					$('#' + $(this).attr('id')).css('margin-left','35px');
                	$('#' + $(this).attr('id') + '_ul').css('left','0px');
				}
				
				var someItem =  $(this);
					
                $('#' + $(this).attr("id") + '_left_scroll').click(function() {
                    $.slideToTheLeft(someItem);
                });

                $('#' + $(this).attr("id") + '_right_scroll').click(function() {
                    $.slideToTheRight(someItem);
                });
            });
            
            $.ajax({
                url: '' + $.o.link + '',
                type: 'GET',
                async: false,
                context: $.container,
                dataType: 'xml',
                timeout: 1000,
                error: function(data, textStatus) {
                    alert("got issues: "+textStatus);
                    
                },
                success: function(data) {
                    $(data).find("item").each(function(i, item) {
                        $.list.push('<li><a href="'+ $(item).find('url').text()+'"><img src="' + $(item).find('img').attr('src') + '"></a><p><a href="'+ $(item).find('url').text()+'">'+ $(item).find('description').text()+'</a><br/><span class="grade-info">'+ $(item).find('grade').text()+'</span></p></li>');
                    });
                }
            });

            return this.each(function() {
            	var buttonWidth = $('#'+$.container.attr("id") + '_left_scroll').outerWidth() * 2;
            	var liWidth = $.o.totalDisplayed * $('#' + $.container.attr('id') + ' ul li').outerWidth(true); 
            	
            	$('#' + $.container.attr('id')).parent().css({'width':+ liWidth + buttonWidth});
				$('#' + $.container.attr('id')).css({'width':+ liWidth});
				if($.list.length > $.o.totalDisplayed){
                	$('#' + $.container.attr('id') + ' ul li:first').before($('#' + $.container.attr('id') + ' ul li:last'));
                }
				$('#' + $.container.attr('id') + ' ul').css({'width':$.list.length * $('#' + $.container.attr('id') + ' ul li').outerWidth(true) + 100});
            });

        }
    };

    $.extend({

        slideToTheLeft: function(scrollItem) {
            var item_width = $('#' + scrollItem.attr('id') + ' ul li').outerWidth(true);
            var right_indent = parseInt($('#' + scrollItem.attr('id') + '_ul').css('left')) + item_width;
            $('#' + scrollItem.attr('id') + '_ul:not(:animated)').animate({ 'left': right_indent  }, 1000, function() {
                $('#' + scrollItem.attr('id') + '_ul li:first').before($('#' + scrollItem.attr('id') + '_ul li:last'));
                $('#' + scrollItem.attr('id') + '_ul').css({'left' : -item_width});
            });
           
        },

        slideToTheRight: function(scrollItem) {
            var item_width = $('#' + scrollItem.attr('id') + ' ul li').outerWidth(true);
            var left_indent = parseInt($('#' + scrollItem.attr('id') + '_ul').css('left')) - item_width;
            
            $('#' + scrollItem.attr('id') + '_ul:not(:animated)').animate({ 'left': left_indent}, 1000, function() {
                $('#' + scrollItem.attr('id') + ' ul li:last').after($('#' + scrollItem.attr('id') + ' ul li:first')); 
                $('#' + scrollItem.attr('id') + '_ul').css({'left' : -item_width});
            });

        }

    });

    $.fn.carousel = function(method) {

        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.slideshow');
        }


    };


})(jQuery);
