﻿/// <reference path="jquery-vsdoc.js" />
//*************************************************************************************
// File     : bgFlickr.js
// Version  : 0.1
// Requires : jquery.js (version 1.4.2+), braingnat.js (version 0.4.8)
// Author   : Kyle Weems (ksw)
// Origin   : mindfly.com
// Created  : Sep 09, 2010
// Modified : Sep 09, 2010
// Purpose  : BrainGnat.Flickr - A series of Flickr API-specific extensions for use with BrainGnat.
//*************************************************************************************

BrainGnat.Flickr = function() {
    return {
        version: "BrainGnat.Flickr Extension - v0.1 (requires BrainGnat v0.4.8)",
        count: null,
        random: null,
        size: null,
        location: null,
        feedData: null,
        slideshow: null,
        slideDur: null,
        slideFade: null,
        getPhotos: function(location, user, count, random, size, photoset, slideshow, slideDur, slideFade) {
            if (!photoset) {
                var script = "http://api.flickr.com/services/feeds/photos_public.gne?";
                script += "id=" + user;
                script += "&format=json&jsoncallback=?";
            } else {
                var script = "http://api.flickr.com/services/feeds/photoset.gne?";
                script += "set=" + photoset;
                script += "&nsid=" + user;
                script += "&lang=en-us&format=json&jsoncallback=?";
            }
            if (!count) count = 10;
            if (!size) size = "m";
            if (!random) random = false;
            if (!slideshow) slideshow = false;
            if (!slideDur) slideDur = 5000;
            if (!slideFade) slideFade = 1000;
            BrainGnat.Flickr.location = location;
            BrainGnat.Flickr.count = count;
            BrainGnat.Flickr.size = size;
            BrainGnat.Flickr.random = random;
            BrainGnat.Flickr.slideshow = slideshow;
            BrainGnat.Flickr.slideDur = slideDur;
            BrainGnat.Flickr.slideFade = slideFade;
            jQuery.getJSON(script, function(data) {
                BrainGnat.Flickr.feedData = data;
                if (BrainGnat.Flickr.random) {
                    BrainGnat.Flickr.loadRandom();
                } else {
                    BrainGnat.Flickr.loadRecent();
                }
                if (BrainGnat.Flickr.slideshow == true) {
                    BrainGnat.slideshow.listFade('.flickr.gallery', BrainGnat.Flickr.slideDur, BrainGnat.Flickr.slideFade);
                }
            });
        },
        loadRandom: function() {
            jQuery(BrainGnat.Flickr.location).append('<ul class="flickr gallery"></ul>');
            var data = BrainGnat.Flickr.feedData;
            if (data.items.length < BrainGnat.Flickr.count) BrainGnat.Flickr.count = data.items.length;
            for (i = 0; i < BrainGnat.Flickr.count; i++) {
                var r = Math.floor(Math.random() * data.items.length);
                var item = data.items[r];
                data.items.splice(r, 1);
                jQuery("<li><a href='" + item.link + "' title='" + item.title + "' target='_blank'><img src='" + BrainGnat.Flickr.getSizedImage(item.media.m, BrainGnat.Flickr.size) + "' alt='" + item.title + "' /></a></li>").appendTo(BrainGnat.Flickr.location + " .flickr.gallery");
            }
        },
        loadRecent: function() {
            jQuery(BrainGnat.Flickr.location).append('<ul class="flickr gallery"></ul>');
            jQuery.each(BrainGnat.Flickr.feedData.items, function(i, item) {
                jQuery("<li><a href='" + item.link + "' title='" + item.title + "' target='_blank'><img src='" + BrainGnat.Flickr.getSizedImage(item.media.m, BrainGnat.Flickr.size) + "' alt='" + item.title + "' /></a></li>").appendTo(BrainGnat.Flickr.location + " .flickr.gallery");
                if (i == (BrainGnat.Flickr.count - 1)) return false;
            });
        },
        getSizedImage: function(source, size) {
            var image = source.replace("_m.jpg", "_" + size + ".jpg");
            return image;
        }
    }
} ();
