/*****************************************
 * Flickr API (in jQuery)
 * version: 1.0 (02/23/2009)
 * written for jQuery 1.3.2
 * by Ryan Heath (http://rpheath.com)
 *****************************************/
(function($) {
  // core extensions
  $.extend({
    // determines if an object is empty
    // $.isEmpty({})             // => true
    // $.isEmpty({user: 'rph'})  // => false
    isEmpty: function(obj) {
      for (var i in obj) { return false }
      return true
    }
  })
  
  // base flickr object
  $.flickr = {
    // the actual request url
    // (constructs extra params as they come in)
    url: function(method, params) {
      return 'http://api.flickr.com/services/rest/?method=' + method + '&format=json' +
        '&api_key=' + $.flickr.settings.api_key + ($.isEmpty(params) ? '' : '&' + $.param(params)) + '&jsoncallback=?'
    },
    // translate plugin image sizes to flickr sizes
    translate: function(size) {
      switch(size) {
        case 'sq': return '_s' // square
        case 't' : return '_t' // thumbnail
        case 's' : return '_m' // small
				case 'l'	:return "_l"
        case 'm' : return ''   // medium
        default  : return ''   // medium
      }
    },
    // determines what to do with the links
    linkTag: function(text, photo, href) {
     // if (href === undefined) href = ['http://www.flickr.com/photos', photo.owner, photo.id].join('/')    

  		var href = 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + 
       '/' + photo.id + '_' + photo.secret +'_b.jpg'
      return '<a id="' + photo.id + '" rel="galley" href="' + href + '" title="' + photo.title + '">' + text + '</a>'
    },

	mediumImageSrc: function( photo ){
		var href = 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + 
       '/' + photo.id + '_' + photo.secret +'_z.jpg'
		return href
	},
	
	largeImageSrc: function( photo ){
		var href = 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + 
       '/' + photo.id + '_' + photo.secret +'_b.jpg'
		return href
	}
	
  }
  
  // helper methods for thumbnails
  $.flickr.thumbnail = {
    src: function(photo, size) {
      if (size === undefined) size = $.flickr.translate($.flickr.settings.thumbnail_size)
      return 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + 
        '/' + photo.id + '_' + photo.secret + size + '.jpg'
    },
    imageTag: function(image) {
      return '<img src="' + image.src + '" alt="' + image.alt + '" />'
    }
  }
  
  // accepts a series of photos and constructs
  // the thumbnails that link back to Flickr
  $.flickr.thumbnail.process = function(photos) {
    var thumbnails = $.map(photos.photo, function(photo) {
      var image = new Image(), html = '', href = undefined

      image.src = $.flickr.mediumImageSrc(photo)

      image.alt = photo.title

		$(image).load(function(){
			$(this).hide();
			$(this).fadeIn();
			$(this).addClass("flickrImg")
			
		//	div = $(this).wrap('<div class="flickr_medium_wrapper"></div>');
			
		//	console.log( div )
			
			$("#loaded").append($(this));
		})

        
      //return ['<div class="flickr_medium_wrapper.loading"><img  class="flickr_medium" src="' + image.src + '"</img></div>']
    }).join("\n")
    return thumbnails
    return $('<ul class="flickr"></ul>').append(thumbnails)
  }

  // accepts a series of photos and constructs
  // the thumbnails that link back to Flickr
  $.flickr.thumbnail.process_orig = function(photos) {
    var thumbnails = $.map(photos.photo, function(photo) {
      var image = new Image(), html = '', href = undefined

      image.src = $.flickr.thumbnail.src(photo)
      image.alt = photo.title

      var size = $.flickr.settings.link_to_size
      if (size != undefined && size.match(/sq|t|s|m|o/)) 
        href = $.flickr.thumbnail.src(photo, $.flickr.translate(size))
      
      html = $.flickr.linkTag($.flickr.thumbnail.imageTag(image), photo, href)
        
      return ['<div  class="flickr_thumb">' + html + '</div>']
    }).join("\n")
    return thumbnails
    return $('<ul class="flickr"></ul>').append(thumbnails)
  }


  
  // handles requesting and thumbnailing photos
  $.flickr.photos = function(method, options) {
    var options = $.extend($.flickr.settings, options || {}),
	elements = $.flickr.self, photos
	
	$.getJSON($.flickr.url(method, options), function(data) {
    	var photo_info = (data.photos === undefined ? data.photoset : data.photos)
		//console.log(photo_info )
		photoset_data_loaded( photo_info )
		
	})
    
    return elements.each(function() {
      $.getJSON($.flickr.url(method, options), function(data) {
	
        var photo_info = (data.photos === undefined ? data.photoset : data.photos)
		//console.log(photo_info )
		return photo_info
		
	//	console.log(photos.photo.length)
		window.totalPhotos = photos.photo.length
        elements.append($.flickr.thumbnail.process(photos))				
		//$('#loading img').load( function(thumb){  thumbLoaded( this )} )
      })
    })
  }
  
  // namespace to hold available API methods
  // note: options available to each method match that of Flickr's docs
  $.flickr.methods = {
    // http://www.flickr.com/services/api/flickr.photos.getRecent.html
    photosGetRecent: function(options) {
      $.flickr.photos('flickr.photos.getRecent', options)
    },
    // http://www.flickr.com/services/api/flickr.photos.getContactsPublicPhotos.html
    photosGetContactsPublicPhotos: function(options) {
      $.flickr.photos('flickr.photos.getContactsPublicPhotos', options)
    },
    // http://www.flickr.com/services/api/flickr.photos.search.html
    photosSearch: function(options) {
      $.flickr.photos('flickr.photos.search', options)
    },
    // http://www.flickr.com/services/api/flickr.photosets.getPhotos.html
    photosetsGetPhotos: function(options) {
      $.flickr.photos('flickr.photosets.getPhotos', options)
    },

    photosetsGetList: function(options) {
      $.flickr.photos('flickr.photosets.getList', options)
    }

  }
  
  // the plugin
  $.fn.flickr = function(options) {
    $.flickr.self = $(this)
    
    // base configuration
    $.flickr.settings = $.extend({
      api_key: 'YOUR API KEY',
      thumbnail_size: 's'
    }, options || {})
    
    return $.flickr.methods
  }
})(jQuery);
