$(function() {
	$.ajaxSetup({ cache: false }); // otherwise getJSON will cache on IE

	$("a.tooltip").tooltip({ showURL: false });
	
	$(".rt-form").each(function() {
		var rtForm = $(this);
		var action = rtForm.find(".action").text();
		var method = rtForm.find(".method").text();
		var _method = (method == "delete" ? "post" : method);
		var link = rtForm.find("a");
		var formId = "rt-form-" + link.attr("id");

		link.click(function() {
			$("#" + formId).submit();
		});
		
		var form = $("<form id='" + formId + "' action='" + action + "' method='" + _method + "'></form>");		
		if (method == "delete") {
			form.append("<input type='hidden' name='_method' value='delete' />");
		}
		$("body").append(form);

	});
	
	$(".rt-form-prompt").each(function() {
		var promptId = $(this).attr("id");
		var baseId = $(this).attr("id").substring("rt-form-prompt-".length);
		var formId = "rt-form-" + baseId;
		var yesId = "rt-form-yes-" + baseId;
		var noId = "rt-form-no-" + baseId;
		
		var yes = $("#" + yesId).text();
		var no = $("#" + noId).text();
		$("#" + formId).submit(function() {
			if (!$(this).data("skip-prompt")) {
				$("#" + promptId).dialog("open");
				return false;
			} else {
				return true;
			}
		});
		
		var buttons = new Object();
		buttons[yes] = function() {
			$("#" + formId).data("skip-prompt",true);
			$("#" + formId).submit();
		};
		
		buttons[no] = function() {
			$(this).dialog("close");
		};
		
		$(this).dialog({
			position: "center",
			resizable: false,
			modal: true,
			autoOpen: false,
			buttons : buttons
		});
		
		
	});
	
	$("input.date").datepicker();
});

jQuery.fn.extend({
	peekaboo : function (settings) {
		defaults = { trueVals: null, falseVals: null, context: "body", affect: "" };
		settings = $.extend(defaults, settings);
		var peeked = $.isArray($("body").data("peeked")) ? $("body").data("peeked") : $("body").data("peeked", new Array());
		peeked[peeked.length] = $(this);
		return this.each(function () {
			$(this).change(function() {	
				var useTrue = (settings.trueVals) ? true : false;
				var arr = (useTrue) ? settings.trueVals : settings.falseVals;
				var show = $.inArray($(this).val(), arr) > -1;
				show = (useTrue) ? show : !show;
				var shown = $(this).data("shown");
				if (shown != undefined && !shown) show = false;
				var firstRun = ($(this).data(settings.affect) == undefined) ? true : false;
				var cxt = $(settings.affect, $(this).closest(settings.context)).toggleFade(show, !firstRun);
				$($("body").data("peeked")).each(function() {
					if ($(this).descendantOf(cxt)) {
						$(this).data("shown", show).toggleFade(show, !firstRun).change();
					}
				});
				$(this).data(settings.affect,true);
			}).change();
		});
	},
	toggleFade : function (show, doEffect) {
		var inEffect = (doEffect || doEffect == undefined) ? "fadeIn" : "show";
		var outEffect = (doEffect || doEffect == undefined) ? "fadeOut" : "hide";
		return this[show || show == undefined && this.is(":hidden") ? inEffect : outEffect]();
	},
	descendantOf : function (elem) {
		var scour = function (context, elem) {
			if (context.get(0).isSameNode(elem.get(0))) return true;
			var found = false;
			$(context).children().each(function() {
				found = found || (scour($(this), elem));
			});
			return found;
		};
		return scour(elem, $(this));
	}
});

