var FlickrFresh = {
  api_key: '22a7533ba7ac0d6c48f619e7b5d2a42b',
  photoset: '72157623456384017',
  root: '#flickr',
  
  photo: {
    as_thumbnail: function( photo ) {
      return "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_s.jpg"
    },

    as_image: function( photo ) {
      return "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + ".jpg"
    },
    
    as_href: function( photo ) {
      return "http://www.flickr.com/photos/freshbooks/" + photo.id + "/sizes/o"
    }
  },
  
  active_photo: {
    current: undefined,
    
    onclick: function(a) {
      if( FlickrFresh.active_photo.current )
        FlickrFresh.active_photo.current.removeClass('active-photo');
      
      var img = $(a).find('img');
      FlickrFresh.active_photo.current = img;
      img.addClass('active-photo');
      FlickrFresh.active_photo.display_current();
    },
    
    display_current: function() {
      FlickrFresh.active_photo.display( FlickrFresh.active_photo.current[0].photo );
    },
    
    display: function( photo ) {
      var html = 
//        '<div class="photo_container">' +
		'<a href="' + FlickrFresh.photo.as_href(photo) + '"/>' +
          '<img width="432" src="' + FlickrFresh.photo.as_image(photo) + '"/>' +
        '</a>' +
//		'</div>' +
        '<a href="'+  FlickrFresh.photo.as_href(photo) +'" class="download">Download photo</a>' +
		'<a href="http://www.flickr.com/photos/freshbooks/sets/' + FlickrFresh.photoset + '/" class="viewall">View all photos</a>';
      
      FlickrFresh.root.find('.main')[0].innerHTML = html;
    }
  },
  
  thumbnails: {
    update: function( photos ) {
      var thumbnails = FlickrFresh.root.find('.thumbnails');
      thumbnails.empty();
      
      for( var i = 0; i < photos.length; i++ ) {
        var photo = photos[i];
        var img = $("<img/>");
        img.attr("src", FlickrFresh.photo.as_thumbnail(photo));
        img[0].photo = photo;
        img.appendTo(thumbnails);
        img.wrap("<a href='#' onclick='FlickrFresh.active_photo.onclick(this);return false;'/>");
        img.hover(
          function(){ FlickrFresh.active_photo.display(this.photo); },
          function(){ FlickrFresh.active_photo.display_current(); }
        );
      }
      FlickrFresh.active_photo.onclick(thumbnails.find('a')[0]);
      FlickrFresh.thumbnails.update_navigation();
    },
    
    update_navigation: function() {
      var html = '';

      if( 1 == FlickrFresh.data.current_page )
        html += '<span>&laquo; Newer</span>';
      else
        html += "<a href='#' onclick='return FlickrFresh.data.previous_page()'>&laquo; Newer</a>"
      html += '&nbsp&nbsp;';
     
      if( FlickrFresh.data.total_pages == FlickrFresh.data.current_page )
        html += '<span>Older &raquo;</span>';
      else
        html += "<a href='#' onclick='return FlickrFresh.data.next_page()'>Older &raquo;</a>"

	  html += ' &nbsp;|&nbsp; Page ' + FlickrFresh.data.current_page + ' of ' + FlickrFresh.data.total_pages + ' &nbsp; ';
     
      FlickrFresh.root.find('.thumbnails_nav')[0].innerHTML = html;
    }
  },
  
  data: {
    guard: function() {
      if( FlickrFresh.data.loading )
        return false;
      return FlickrFresh.data.loading = true;    
    },
  
    current_page: 1,
    next_page: function() {
      if( !FlickrFresh.data.loading ) {
        FlickrFresh.data.current_page++;
        FlickrFresh.data.load();
      }
      return false;
    },
    previous_page: function() {
      if( !FlickrFresh.data.loading ) {
        FlickrFresh.data.current_page--;
        FlickrFresh.data.load();
      }
      return false;
    },
        
    load: function() {
      if( !FlickrFresh.data.guard() )
        return;
        
      $.getJSON(
        "http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=" + FlickrFresh.api_key + "&photoset_id=" + FlickrFresh.photoset + "&format=json&jsoncallback=?&per_page=12&page=" + FlickrFresh.data.current_page,

        function( data ){        
          FlickrFresh.data.loading = false;
          if( data.stat != 'ok' ) 
            return;
          
          FlickrFresh.data.total_pages = Math.ceil(data.photoset.total / data.photoset.per_page);
          FlickrFresh.thumbnails.update( data.photoset.photo );
        }
      );
    }
  },
  
  load: function() {
    FlickrFresh.root = $(FlickrFresh.root);
    
    FlickrFresh.root[0].innerHTML +=
      "<div class='main'></div>" +
      "<div class='photoset_nav'></div>" +
      "<div class='thumbnails_nav'></div>" +     
      "<div class='thumbnails'></div>";
  
    FlickrFresh.data.load();
  }
};

FlickrFresh.load();
