/**
 * Simple jQuery plugin for embedding Flickr galleries.
 * http://github.com/codeflows/jquery-flickr-gallery
 */
(function($){
  var preferences = {
    width: 800,
    height: 500
  };
 
  function createFlickrPhotoSets(gallery) {
    gallery.find('.photo-set .photos-flickr').each(function() {
      var parts = this.id.split(/:/);
      var userId = parts[0];
      var setId = parts[1];
      // TODO hide the ugly HTML somewhere
      $(this).html('<object width="' + preferences.width + '" height="' + preferences.height + '"> <param name="flashvars" value="&offsite=true&lang=en-us&page_show_url=%2Fphotos%2F' + userId + '%2Fsets%2F' + setId + '%2Fshow%2F&page_show_back_url=%2Fphotos%2F' + userId + '%2Fsets%2F' + setId + '%2F&set_id=' + setId + '&jump_to="></param> <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=69832"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=69832" allowFullScreen="true" flashvars="&offsite=true&lang=en-us&page_show_url=%2Fphotos%2F' + userId + '%2Fsets%2F' + setId + '%2Fshow%2F&page_show_back_url=%2Fphotos%2F' + userId + '%2Fsets%2F' + setId + '%2F&set_id=' + setId + '&jump_to=" width="' + preferences.width + '" height="' + preferences.height + '"></embed></object>');
    });
  }

  function createPhotoSetLinks(gallery) {
    var sets = gallery.find('.photo-set');
    var links = $('<ul></ul>');
    sets.first().before(links);
    sets.each(function() {
      var set = $(this);
      var title = set.children(".title").text();
      var link = $("<a href='javascript:void(0)' class='photo-set-link'></a>")
        .text(title)
        .click(function() {
          showSet(set);
          setLinkAsActive($(this));
        });
      if(set.hasClass('default-set')) {
        link.addClass('default-set-link');
      }
      links.append(link);
      link.wrap('<li></li>');
    });
  }

  function showSet(set) {
    set.siblings('.photo-set').hide();
    set.show();
  }

  function setLinkAsActive(link) {
    link.closest('ul').find('.photo-set-link').removeClass('active-set-link');
    link.addClass('active-set-link');
  }

  function showDefaultSet(gallery) {
    // TODO is there some way to select first (default-set-link OR photo-set-link)?
    var linkForDefaultOrFirstSet = function() {
      var defaultSetLink = gallery.find('.default-set-link');
      if(defaultSetLink.length == 1) {
        return defaultSetLink;
      }
      return gallery.find('.photo-set-link').first();
    };
    linkForDefaultOrFirstSet().click();
  }

  $.fn.flickrGallery = function() {
    return this.each(function() {
      var gallery = $(this);
      createFlickrPhotoSets(gallery);
      createPhotoSetLinks(gallery);
      showDefaultSet(gallery);
    });
  };
})(jQuery);

