/**
 * @author Administrator
 */
$(document).ready(function(){
    jQuery.fn.picasaGallery = function(options){
        // Set defaults
        var defaults = {
            'user': false,
            'nextButton': false,
            'prevButton': false,
            'grid': '3x3',
            'albumId': '',
            'maxResults': 100,
            'size': 'small',
            'onClick': function(container, image, settings) {},
            'wrapper': 'div',
            'loadingImg': false,
            'tooltip': false,
            'className': 'picasa-gallery-image',
            'onLoad': function(feed, images, settings) {}
        }
        
        // Settings
        var settings = $.extend(defaults, options);
        
        // Vars
        var $self = $(this);
        var page = 1;
        var images = new Array();
        var grid_array = settings.grid.split('x');
        var rows = parseInt(grid_array[0]);
        var cols = parseInt(grid_array[1]);
        var display = rows * cols;
        
        // Requirements
        if (!settings.user) {
            throw "PicasaGallery Error: user is required";
        }
        if (!settings.albumId && !settings.maxResults) {
            throw "PicasaGallery Error: albumId or maxResults is required";
        }
        
        // Add functionality to control buttons
        $('#' + settings.nextButton).bind('click', function(){
            fill_gallery(1);
        });
        
        $('#' + settings.prevButton).bind('click', function(){
            fill_gallery(-1);
        });
        
        /** Init **/
        
        // Load images
        $.getJSON('/feeds/picasa.php?user=' + settings.user + '&album_id=' + settings.albumId + '&max_results=' + settings.maxResults, function(data){
            $.each(data.feed.entry, function(i, img){
                images.push(img);
            });
            
            // Start on page 1
            fill_gallery(0);
            
            // onLoad
            settings.onLoad(data.feed, images, settings);
        });
        
        /** Functions **/
        
        // Fill up gallery
        var fill_gallery = function(delta){
            if (delta + page == 0 || delta + page > Math.ceil(images.length / display)) {
                return false;
            }
            else {
                page = page + delta;
                var index = (page - 1) * display;
                
                // Empty gallery
                $self.empty();
                
                // Vars
                var src;
                var full;
                var albumid;
                var $container;
                var column = 0;
                
                // Iterate new images
                for (var j = 0; j < display && index < images.length; j++, index++, column++) {
                
                    // Add br
                    if (cols <= column) {
                        $self.append('<br style="clear: both" />');
                        column = 0;
                    }
                    
                    // Get size URLs
                    full = images[index].content.src;
                    small = images[index].media$group.media$thumbnail[0].url
                    medium = images[index].media$group.media$thumbnail[1].url
                    large = images[index].media$group.media$thumbnail[2].url
                    
                    // Get albumid
                    albumid = images[index].gphoto$albumid.$t;
                    
                    // Create new div
                    $container = $('<' + settings.wrapper + ' class="' + settings.className + '" index="' + index + '" small="' + small + '" medium="' + medium + '" large="' + large + '" full="' + full + '"></' + settings.wrapper + '>');
                    
                    $container.appendTo($self).bind('click', function(){
                        settings.onClick(this, images[parseInt($(this).attr('index'))], settings);
                    }).itemThumbnail({
                        'loading': settings.loadingImg,
						'source': settings.size
                    });
                }
                
                // Tooptip
                if (settings.tooltip) {
                    $(settings.wrapper + '.picasa-gallery-image').tooltip({
                        bodyHandler: function(){
                            return $("<img/>").attr('src', $(this).attr(settings.tooltip));
                        },
                        track: true,
                        showURL: false
                    })
                    
                }
            }
        }
    }
});
