Date.prototype.getWeek = function()
{
	var localOffset = this.getTimezoneOffset() * 60000;
	var date = new Date(this-localOffset);
	var firstSat = new Date(this);
	firstSat.setDate(1);
	firstSat.setMonth(0);
	firstSat.setDate(firstSat.getDate() + (5 - firstSat.getDay()));
	
	if(date < firstSat)
	{
		date.setDate(date.getDate()-7);
		return date.getWeek()+1;
	}
	else
	{
		return Math.floor((date - firstSat) / (7*24*60*60*1000));
	}
}

function fadeIn()
{
	var hidden = false;
	$(window).load(function()
	{
		if(hidden) $("#wrapper").fadeOut(2500).fadeIn(2500);
		hidden = false;
	});
	$(document).ready(function()
	{
		if(!hidden) $("#wrapper").hide();
		hidden = true;
	});
}

function parseJSONSeasons(data)
{
	var seasons = data.seasons;
	return seasons;
}

function parseJSONBookings(data,slice)
{
	var bookings = data.bookings;
	for(var i = 0; i<bookings.length; i++)
	{
		bookings[i].start = new Date(bookings[i].start);
		bookings[i].end = new Date(bookings[i].end);
	}
	return bookings;
}

function parseJSONDates(data)
{
	var retval = new Object();
	retval.seasons = parseJSONSeasons(data);
	retval.bookings = parseJSONBookings(data);
	return retval;
}

function getAttributes(date,datelist)
{
	var retval = new Array();
	retval['booked'] = false;
	retval['season'] = "tbc";
	retval['comment'] = "";
	var weekNum = date.getWeek();
	if(weekNum < datelist.seasons.length)
	{
		retval['season'] = datelist.seasons[weekNum];
		retval['comment'] = "Week "+(weekNum+1)+"\n"+retval['season'].charAt(0).toUpperCase() + retval['season'].slice(1) + " season";
	}
	for(var i=0; i<datelist.bookings.length; i++)
	{
		if(datelist.bookings[i].start <= date && date <= datelist.bookings[i].end)
		{							
			retval['booked'] = true;
			retval['comment'] += "\nBooked";
		}
	}
	if(!retval['booked'])
	{
		retval['comment'] += "\nAvailable";
	}
	return retval;
}

function doDateHighlight(date,datelist)
{
	var attr = getAttributes(date,datelist);
	return [!attr['booked'], attr['season'] + (attr['booked'] ? " booked" : ""), attr['comment']];
}

jQuery.fn.fadeOnHover = function(fadeColor)
{
	this.each(function()
	{
		jQuery(this).data("OrigBg",jQuery(this).css("background-color"));
		jQuery(this).hover(
			function()
			{
				//Fade to the new color
				jQuery(this).stop().animate({backgroundColor:fadeColor}, 1000)
			}, 
			function()
			{
				//Fade back to original color
				original = jQuery(this).data("OrigBg");
				jQuery(this).stop().animate({backgroundColor:original},1000) 
			}
		);
	});
}

jQuery.fn.calendar = function(options,datelist)
{
	var settings = jQuery.extend({
		numberOfMonths: 1,
		stepMonths: 1,
		firstDay: 5,
		dateFormat: 'yy/mm/dd',
		showOtherMonths: false,
		beforeShowDay: function(date)
		{
			return doDateHighlight(date,datelist);
		},
		load:true
	}, options);

	if(this.length && settings.load)
	{
		target = this.empty();
		$.getJSON("/getdates.php",function(data)
		{
			datelist = parseJSONDates(data);

			target.datepicker(settings);
		});
	}
	else
	{
		this.datepicker(settings);
	}
	return this;
}

$(document).ready(function()
{
	var dates;
	$("#calendar").calendar({
		numberOfMonths: 3,
		stepMonths: 2,
		firstDay: 5
	},dates);
	
	//Image gallery caption, resizing, and switching code, if present
	if($("div.small").length)
	{
		$("div.small div.caption").fadeTo(0, 0);
		$("div.large div.caption").fadeTo(0, 0.8);
		$("div.images>div").addClass("dynamic");
		$("div.small").hover(function()
		{
			$(this).children(".caption").stop(0,1).fadeTo("slow",0.8);
		},
		function()
		{
			$(this).children(".caption").stop(0,1).fadeTo("slow",0);
		});
		$("div.small").click(function()
		{
			var bigHtml = $("div.large").html();
			var smallHtml = $(this).html();
			
			$("div.large").html(smallHtml).children("img").fitToParent();
			$(this).html(bigHtml).children("img").fitToParent();
			
			$("div.large div.caption").fadeTo(0, 0.8);
		});
	}
	
	//Set up navigation hovers
	$("div#nav a[id!=current]").fadeOnHover("#606060");
	
	//Set up enter hover on splash page
	$("a#enter").fadeOnHover("#606060");
});

$(window).load(function()
{
	$("div.images div img").fitToParent();
});

jQuery.fn.fitToParent = function()
{
	this.each(function()
	{
		var width = $(this).width();
		var height = $(this).height();
		var parentWidth = $(this).parent().width();
		var parentHeight = $(this).parent().height();
		
		if(width/parentWidth < height/parentHeight)
		{
			newWidth  = parentWidth;
			newHeight = newWidth/width*height;
		}
		else
		{
			newHeight = parentHeight;
			newWidth  = newHeight/height*width;
		}
		margin_top  = (parentHeight - newHeight) / 2;
		margin_left = (parentWidth  - newWidth ) / 2;
		
		$(this).css({'margin-top' :margin_top  + 'px',
		             'margin-left':margin_left + 'px',
		             'height'     :newHeight   + 'px',
		             'width'      :newWidth    + 'px'});
	});
};
