$(function() {
	// open external links in new window
	$('a.external').click(function(e) {
		e.preventDefault();
		window.open($(this).attr('href'));
	});

	$(window).resize(resizeAuctioneer);

	$('#auctioneer').data('imagelist', new Array() );

	$.getJSON("http://www.auctioneer.ca/gallery/v/slideshow_001/?g2_view=jsonalbum.JsonP&g2_callback=?", function(gallery) {
		var imagelist = new Array();

		// parse our playlist out
		if (gallery.type && gallery.type == 'GalleryAlbumItem') {
			$.each(gallery.data.children, function(i, item){
				if (item.type && item.type == 'GalleryPhotoItem') {
					imagelist[i] = item.data.thumb;
				}
			});
		}

		$('#auctioneer').data('imagelist', imagelist);

		$(window).triggerHandler('resize');
	});
});

function resizeAuctioneer(eventObject) {
	if ($(this).data('resizeAuctioneerMutex') ) return;
	$(this).data('resizeAuctioneerMutex', true); // race here bad mutex, seems IE will fire multiple times before first completes..
	var ss_width = 168; //150 + 14 + 4;
	var img_width = 242; //242;

	var rec_ss = Math.floor( ($('#auctioneer').width() - img_width) / ss_width );
	var ss = $('#auctioneer > div.slideshow');

	var diff = rec_ss - ss.length;

	if (diff) {
		var delay = getSpeed() / rec_ss;
		var container = $('#auctioneer');

		for (i = diff; i != 0; (diff > 0 ? i-- : i++) ) {
			if (diff > 0) {
				addSlideShow(container, i * delay);
			} else {
				deleteSlideShow(container);
			}
		}
	}


	$(this).data('resizeAuctioneerMutex', false);
	return;
}

function addSlideShow(container, delay) {
	var imagelist = $('#auctioneer').data('imagelist');

	if (imagelist.length > 0) {
		var ss_div = $('<div />').addClass('slideshow').css('float', 'left');

		imagelist.sort(function () { return 1 - Math.random ( ) * 2 } );

		var imgsrc = imagelist.shift();
		var img = $('<img />').attr('src', imgsrc).attr('alt', '').css('display', 'none').css('vertical-align', 'middle');
		imagelist.push(imgsrc);

		img.data('imagelist', imagelist);

		ss_div.html(img);
		container.children('img').before(ss_div);

		img.fadeIn(delay).delay(getSpeed()/2).fadeOut(getSpeed()/4, swapImage);
	}

	return;
}

function deleteSlideShow(container) {
	container.children('div:last').remove();
}

function swapImage() {
	if ($(this).data('imagelist')) {
		var imagelist = $(this).data('imagelist');
		var imgsrc = imagelist.shift();

		$(this).attr('src', imgsrc);

		imagelist.push(imgsrc);
		$(this).data('imagelist', imagelist);

		$(this).fadeIn(getSpeed()/4 ).delay(getSpeed()/2).fadeOut(getSpeed()/4, swapImage);
	}
}

function getSpeed() {
	return 6000;
}

function countdown(countdown_id, selected_date, selected_time) {
	var cd = $('#' + countdown_id);
	var toDate = new Date(selected_date + " " + selected_time);
	var now = new Date();
	var diff = toDate - now;

	if (diff > 0) {
		diff_s = Math.floor(diff / 1000);
		var days = Math.floor(diff_s / (60 * 60 * 24));
		diff_s %= (60 * 60 * 24);
		var hours = Math.floor(diff_s / (60 * 60));
		diff_s %= (60 * 60);
		var minutes = Math.floor(diff_s / 60);
		diff_s %= 60;
		var seconds = diff_s;

		var html = hours + 'h ';
		html += minutes + 'm ';
		html += seconds + 's ';
		html += 'until our next event!';

		if (days > 0) {
			html = days + 'd ' + html;
		}

		cd.text(html);
	}

	setTimeout('countdown("' + countdown_id + '", "' + selected_date + '", "' + selected_time + '");', 1000);

	return;
}

function buildCountdown(countdown_id) {
	if ($('#' + countdown_id).data('built') ) return;

	var cd = $('#' + countdown_id);
	var days_grouping = $('<div />').addClass('days').addClass('counter_grouping').append($('<div />').addClass('left')).append($('<div />').addClass('right') );
	var hours_grouping = days_grouping.clone().removeClass('days').addClass('hours');
	var minutes_grouping = days_grouping.clone().removeClass('days').addClass('minutes');

	cd.html(days_grouping).append(hours_grouping).append(minutes_grouping);
	cd.show();

	// preload images
	for(var i = 0; i < 10; i++) {
		$('<img />').attr('src', 'images/countdown-' + i + '.png');
	}

	$('#' + countdown_id).data('built', true);

	return;
}

function padToTwo(i) {
	var s = '00' + i;
	switch(s.length) {
	case 3:
		s = s.substr(1, 2);
		break;
	case 4:
		s = s.substr(2, 2);
		break;
	}

	return s;
}

function graphicalCountdown(countdown_id, selected_date, selected_time) {
	if ($('#' + countdown_id).data('built') == null ) {
		setTimeout('graphicalCountdown("' + countdown_id + '", "' + selected_date + '", "' + selected_time + '");', 1000);
		return;
	}

	var cd = $('#' + countdown_id);
	var toDate = new Date(selected_date + " " + selected_time);
	var now = new Date();
	var diff = toDate - now;

	if (diff > 0) {
		diff_s = Math.floor(diff / 1000);
		var days = padToTwo(Math.floor(diff_s / (60 * 60 * 24) ) );

		diff_s %= (60 * 60 * 24);
		var hours = padToTwo(Math.floor(diff_s / (60 * 60) ) );

		diff_s %= (60 * 60);
		var minutes = padToTwo(Math.floor(diff_s / 60) );

		diff_s %= 60;
		var seconds = padToTwo(diff_s);

		cd.children('div.days').children('div.left').html($('<img />').attr({
				src: 'images/countdown-' + days.substr(0, 1) + '.png',
				alt: days.substr(0, 1)
			})
		);
		cd.children('div.days').children('div.right').html($('<img />').attr({
			src: 'images/countdown-' + days.substr(1, 1) + '.png',
			alt: days.substr(1, 1)
		})
		);

		cd.children('div.hours').children('div.left').html($('<img />').attr({
			src: 'images/countdown-' + hours.substr(0, 1) + '.png',
			alt: hours.substr(0, 1)
		})
		);
		cd.children('div.hours').children('div.right').html($('<img />').attr({
			src: 'images/countdown-' + hours.substr(1, 1) + '.png',
			alt: hours.substr(1, 1)
		})
		);

		cd.children('div.minutes').children('div.left').html($('<img />').attr({
			src: 'images/countdown-' + minutes.substr(0, 1) + '.png',
			alt: minutes.substr(0, 1)
		})
		);
		cd.children('div.minutes').children('div.right').html($('<img />').attr({
			src: 'images/countdown-' + minutes.substr(1, 1) + '.png',
			alt: minutes.substr(1, 1)
		})
		);

		setTimeout('graphicalCountdown("' + countdown_id + '", "' + selected_date + '", "' + selected_time + '");', 5000);
	}

	return;
}

