
(function($) {
    
    $.fn.flickr = function(opts) {
        var self = this;
        var pages;
        var page = 1;
        var defaultSize = "m";

        var options = $.extend({
            method : "flickr.groups.pools.getPhotos",
			api_key : "0a34918c0b75b2bd43d27d7073aa332c",
            group_id : "525350@N20",
            format : "json",
            per_page : "20",
            page : "1",
            jsoncallback : "?"
        }, opts);
        
        var createPagination = function(pos) {
            var pos = pos || top;
            var pagination = $("<ul class=\"fpg-pagination\" id=\"" + pos + "\">").appendTo(self);
            
            // first page link
            $("<li class=\"fpg-pagination-first-page\"><a href=\"#1\" title=\"First Page\">First Page</a></li>").click(function() {
                getPage(1, options);
                this.blur();
            }).appendTo(pagination);
            
            // build pagination list
            for (var i = 1; i < pages; i++) {
                var li = $("<li>");
                if (i == page) 
                    li.addClass("selected");
                var a = $(document.createElement("a")).attr({"href": "#" + i, "title" : "Page: " + i}).text(i).click(function() {
                    var pageId = this.href.split("#")[1];
                    getPage(pageId, options);
                    this.blur();
                    return false;
                });
                li.append(a);
                pagination.append(li);
            }
            
            // last page link
            $("<li class=\"fpg-pagination-last-page\"><a href=\"#" + (pages - 1) + "\" title=\"Last Page\">Last Page</a></li>").click(function() {
                getPage(pages - 1, options);
                this.blur();
            }).appendTo(pagination);
        };
        
        var getPage = function(page, opts) {
            var options = $.extend(opts, {"page": page});
            $.getJSON("http://api.flickr.com/services/rest/", options, function(data) {
                page = data.photos.page;
                $(".fpg-pagination li").removeClass("selected").filter(function (i) {
                  return i == page || i == (page + pages) + 1;
                }).addClass("selected");
                buildPhotoList(data.photos.photo);
            });
        };
        
        var buildPhotoList = function(photos, newPage) {
            var ul = $("#fpg-photo-list")[0] ? $("#fpg-photo-list") : $("<ul id=\"fpg-photo-list\">").appendTo(self);
            ul.html("");
            $.each(photos, function(i, photo) {
                var title = $("<p class=\"fpg-photo-title\">");
                var owner = $("<p class=\"fpg-photo-owner\">");
                var a = $(document.createElement("a")); // stupid IE!
                var li = $("<li>");
                var img = $("<img>");
                var photoURL = "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret;
                img.attr({"src": photoURL  + "_" + defaultSize + ".jpg", "alt": photo.title});
                a.attr({"href": photoURL + ".jpg", "title": photo.title}).append(img).addClass("light");
                owner.append("Photo By: <a href=\"http://flickr.com/photos/" + photo.owner + "\" target=\"_blank\">" + photo.ownername + "</a>");
               li.append(a).append(title.text(photo.title)).append(owner).appendTo(ul);
                
            });
            ul.find("a.light").lightBox();
        };
        
        var handleInit = function(data) {
            if (!data.stat || data.stat != "ok") return;
            pages = data.photos.pages;
            page = data.photos.page;
            if (pages > page) createPagination("top");
            buildPhotoList(data.photos.photo);
            if (pages > page) createPagination("bottom");
        };
        
        // check for a page # in the location hash
        if (window.location.hash && window.location.hash.match(/\d+/gi)[0]) 
            options = $.extend(options, {page : window.location.hash.match(/\d+/gi)[0]});
        
        // get first request
        $.getJSON("http://api.flickr.com/services/rest/", options, handleInit);
        return this;
    };
    
})(jQuery);
