$(document).ready(function() {
	// hide any unnecessary trigger images
	$(".expander").each(function() {
		if ($(this).children(".region").is(":visible"))
		{
			$(this).children(".trigger").children(".expand").hide();
		}
	});

	// EVENTUALLY MAKE THIS A PLUGIN  .expander(trigger, defaultState)
	$(".expander .trigger").click(function() {
		var trigger = $(this);
		var region = $(this).siblings(".region");
		if (region.is(":visible"))
		{
			region.slideUp("slow", function() {
				trigger.children(".contract").hide();
				trigger.children(".expand").show();
			});
		}
		else
		{
			region.slideDown("slow", function() {
				trigger.children(".contract").show();
				trigger.children(".expand").hide();
			});
		}
	});

	// totalbar follow
	$("#totalbar").follow($("#body"), 20, 0, 60);

	// numeric textboxes
	$("#shooting :text[name='feet']").numeric();
	$("#shooting :text[name='minutes']").numeric();
	$("#finishing :text[name='colourHours']").numeric();

	// pre-disable
	if ($("#shooting :radio[name='framerate']:checked").length == 0)
	{
		$("#shooting #footageStep").disable();
	}

	if ($("#finishing :radio[name='colourCorrect']:checked").length == 0)
	{
		$("#finishing :text[name='colourHours']").parent().disable();
	}

	// SHOOTING

	// resolution change
	$("#shooting :radio[name='resolution']").click(function() {
		var packed = serializeShooting();

		$("#shootingTotal .region").load("/calculator/shooting/ajax/", packed, function() {
			$("#resolutionTotal").flash();
		});
	});

	// framerate change
	$("#shooting :radio[name='framerate']").click(function() {
		var packed = serializeShooting();

		$("#shootingTotal .region").load("/calculator/shooting/ajax/", packed, function() {
			$("#framerateTotal").flash();
			$("#feetTotal").flash();
			$("#minutesTotal").flash();
			$("#footageCostTotal").flash();
		});

		$("#shooting #footageStep").enable();
	});

	// feet changed
	$("#shooting :text[name='feet']").typeWatch({ wait:500, captureLength:0, callback:function() {
		var packed = serializeShooting();
		// nullify minutes so it calculates feet to minutes
		packed.minutes = null;

		$("#shootingTotal .region").load("/calculator/shooting/ajax/", packed, function() {
			$("#feetTotal").flash();
			$("#minutesTotal").flash();
			$("#footageCostTotal").flash();
		});
	}});

	// minutes changed
	$("#shooting :text[name='minutes']").typeWatch({ wait:500, captureLength:0, callback:function() {
		var packed = serializeShooting();
		// nullify feet so it calculates minutes to feet
		packed.feet = null;

		$("#shootingTotal .region").load("/calculator/shooting/ajax/", packed, function() {
			$("#feetTotal").flash();
			$("#minutesTotal").flash();
			$("#footageCostTotal").flash();
		});
	}});

// PROCESSING

	// platform change
	$("#processing :radio[name='platform']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#platformTotal").flash();
		});
	});

	// postSync change
	$("#processing :radio[name='postSync']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#postSyncTotal").flash();
		});
	});

	// daily change
	$("#processing :radio[name='daily']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#dailyTotal").flash();
			$("#dailyCostTotal").flash();
		});
	});

	// daily resolution change
	$("#processing :radio[name='resolution']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#dailyResolutionTotal").flash();
		});
	});

	// daily standard change
	$("#processing :radio[name='standard']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#dailyStandardTotal").flash();
		});
	});

	// daily medium change
	$("#processing :radio[name='medium']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#dailyMediumTotal").flash();
		});
	});

	// daily format change
	$("#processing :radio[name='format']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#dailyFormatTotal").flash();
			$("#dailyDecktimeTotal").flash();
		});
	});

	// screener change
	$("#processing :radio[name='screener']").click(function() {
		var packed = serializeProcessing();

		$("#processingTotal .region").load("/calculator/processing/ajax/", packed, function() {
			$("#screenerTotal").flash();
			$("#screenerCountTotal").flash();
		});
	});

// FINISHING

	// project length change
	$("#finishing :radio[name='projectLength']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#projectLengthTotal").flash();
		});
	});

	// colour correct change
	$("#finishing :radio[name='colourCorrect']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#colourCorrectTotal").flash();
		});
		
		if ($(this).attr("value") == 1)
		{
			$("#finishing :text[name='colourHours']").parent().enable();
		}
		else
		{
			$("#finishing :text[name='colourHours']").parent().disable();
		}
	});

	// colour hours changed
	$("#finishing :text[name='colourHours']").typeWatch({ wait:500, captureLength:0, callback:function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#colourCorrectTotal").flash();
		});
	}});

	// online change
	$("#finishing :radio[name='online']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#onlineTotal").flash();
		});
	});

	// online resolution change
	$("#finishing :radio[name='resolution']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#onlineResolutionTotal").flash();
		});
	});

	// online standard change
	$("#finishing :radio[name='standard']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#onlineStandardTotal").flash();
		});
	});

	// online format change
	$("#finishing :radio[name='format']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#onlineFormatTotal").flash();
		});
	});

	// backup change
	$("#finishing :radio[name='backup']").click(function() {
		var packed = serializeFinishing();

		$("#finishingTotal .region").load("/calculator/finishing/ajax/", packed, function() {
			$("#backupTotal").flash();
			$("#backupCountTotal").flash();
		});
	});
});

// serializes the shooting form into a hash for easy passing to the getJSON command
function serializeShooting()
{
	var resolution = $("#shooting :radio[name='resolution']:checked").attr("value");
	var framerate = $("#shooting :radio[name='framerate']:checked").attr("value");
	var feet = $("#shooting :text[name='feet']").attr("value");
	var minutes = $("#shooting :text[name='minutes']").attr("value");

	return {
		resolution:resolution,
		framerate:framerate,
		feet:feet,
		minutes:minutes
	}
}

function serializeProcessing()
{
	var platform = $("#processing :radio[name='platform']:checked").attr("value");
	var postSync = $("#processing :radio[name='postSync']:checked").attr("value");
	var daily = $("#processing :radio[name='daily']:checked").attr("value");
	var resolution = $("#processing :radio[name='resolution']:checked").attr("value");
	var standard = $("#processing :radio[name='standard']:checked").attr("value");
	var medium = $("#processing :radio[name='medium']:checked").attr("value");
	var format = $("#processing :radio[name='format']:checked").attr("value");
	var screener = $("#processing :radio[name='screener']:checked").attr("value");

	return {
		platform:platform,
		postSync:postSync,
		daily:daily,
		resolution:resolution,
		standard:standard,
		medium:medium,
		format:format,
		screener:screener
	}
}

function serializeFinishing()
{
	var projectLength = $("#finishing :radio[name='projectLength']:checked").attr("value");
	var colourCorrect = $("#finishing :radio[name='colourCorrect']:checked").attr("value");
	var colourHours = $("#finishing :text[name='colourHours']").attr("value");
	var online = $("#finishing :radio[name='online']:checked").attr("value");
	var resolution = $("#finishing :radio[name='resolution']:checked").attr("value");
	var standard = $("#finishing :radio[name='standard']:checked").attr("value");
	var format = $("#finishing :radio[name='format']:checked").attr("value");
	var backup = $("#finishing :radio[name='backup']:checked").attr("value");

	return {
		projectLength:projectLength,
		colourCorrect:colourCorrect,
		colourHours:colourHours,
		online:online,
		resolution:resolution,
		standard:standard,
		format:format,
		backup:backup
	}
}