Array.prototype.shuffle = function() {
	var s = [];
	while (this.length) s.push(this.splice(Math.random() * this.length, 1));
	while (s.length) this.push(s.pop());
	return this;
}

$.fn.imagesLoaded = function(callback){
  var elems = this.filter('img'),
      len   = elems.length;
      
  elems.bind('load',function(){
      if (--len <= 0){ callback.call(elems,this); }
  }).each(function(){
     // cached images don't fire load sometimes, so we reset src.
     if (this.complete || this.complete === undefined){
        var src = this.src;
        // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
        // data uri bypasses webkit log warning (thx doug jones)
        this.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
        this.src = src;
     }  
  }); 
  return this;
};

$(function() {
	var imagesPerPage = 18;
	var columns       = imagesPerPage / 2;
	var totalImages   = window.contestImages.length;
	var pages         = Math.floor(totalImages / imagesPerPage) + (totalImages % imagesPerPage > 0 ? 1 : 0);
	var photos        = $('#photos');
	var thumbSize     = 52;

	window.contestImages.shuffle();
	$('input[title!=""]').hint();

	for (var i=0; i<pages; ++i) {
		var container = $('<div class="page">');
		container.css({
			'width':  (columns+1) * thumbSize,
			'height': (2 * thumbSize) + 6,
			'float':  'left'});

		for (var j=0; j<imagesPerPage; ++j) {
			var image = window.contestImages[(imagesPerPage*i) + j];

			if (image)
				container.append('<img src="/Images/Galleries/' + window.contestGallery + '/Thumbs/' + image + '"/>');
		}

		photos.find('#pageContainer').append(container);
	}

	$('#photos').css('width', totalImages * thumbSize);

	function move(direction) {
		var left = parseInt($('#pageContainer').css('left'));
		var pageWidth = $('#pageContainer .page:first').width();
		var maxPosition = (pages-1) * $('.page').width();

		if ((left == 0 && direction == -1) || (direction == 1 && left != 0 && Math.abs(left) >= maxPosition))
			return;

		left -= (direction * pageWidth)
		$('#pageContainer').animate({left: left});
	}

	$('#imgLoader').imagesLoaded(function() {
		$('#imgFull').fadeOut('fast',function() {
			var imagePath = $('#imgLoader').attr('src');
			$('#imgFull').attr('src',imagePath).css('visibility','visible');
			$('#imgFullLink').attr('href',imagePath);

			var parts = imagePath.split("/");
			var filename = parts[parts.length-1];
			$('#txtFilename').val(filename);
			$('#caption').load('caption.aspx?directory=' + window.contestGallery + '&filename=' + filename);
			$('#imgFull').fadeIn('fast');
		});
	});

	function selectImage(filename) {
		$('#imgLoader').attr('src',filename.replace('Thumbs','Full'));
	}

	$('#prev').click(function() { move(-1) });
	$('#next').click(function() { move(1) });

	$('#photos img').click(function() {
		selectImage($(this).attr('src'));
	});

	selectImage("/Images/Full/" + window.contestImages[0]);
});

