$(document).ready(function(){
	$("body").bind("ajaxError", function(data, data2){
		
		var message;
		try{
			message = eval('(' + data2.responseText + ')');
		}catch(e){
			message = data2.responseText;
		}
			
	 	$("<div>" + message + "</div>").dialog({
			title:'Error',
			buttons: {
				"Okay": function(){$(this).dialog("close");}
			}
		});
	});
});



Forms = {
	Ajaxify: {
		save: function(formId, returnFunction) {
			if (typeof returnFunction == 'undefined')
				returnFunction = function(){}
			
			var form = $('#' + formId);
			form.bind('submit', function(){
				var submit = $('#' + formId + ' input[type="submit"]');
				var oldSubmitText = submit.val();
							
				$.ajax({
					url: form.attr('action'),
					data: form.serializeArray(),
					type: form.attr('method').toUpperCase(),
					dataType: 'json',
					success: function(data) {
						Forms.Ajaxify._enable(formId);
						submit.val('Saved!');
						setTimeout(function(){
							submit.val(oldSubmitText);
						}, 1000);
						
						returnFunction(data);
					},
					error: function(data) {
						Forms.Ajaxify._enable(formId);
					}
				});
				
				Forms.Ajaxify._disable(formId);
				submit.val('Saving...');
				
				return false;
			});
		},
		list: function(id) {
			var prepEdit = function(itemId) {
				var idNum = itemId.substr(id.length+1);
				Forms.Ajaxify.save(id + '-edit-' + idNum);
				
				var deleteButton = $('#' + id + '-edit-' + idNum + ' a.delete');
				deleteButton.bind('click', function(){
					if (confirm('Are you sure you wish to remove this?')) {
						$.get(deleteButton.attr('href'), '', function(){
							$('#' + id + '-' + idNum).remove();
						}, 'json');
					}
					return false;
				});
			};
			
			$('#' + id + '-list li').each(function(){
				prepEdit($(this).attr('id'));
			});
			
			Forms.Ajaxify.save(id + '-add', function(data) {
				var className = $('#' + id + '-list li').attr('class');
				$('#' + id + '-list').append('<li id="' + id + '-' + data.id + '" class="' + className + '">' + data.html + '</li>');
				Forms.Ajaxify._clear(id + '-add');
				prepEdit(id + '-' + data.id);
			});
		},
		_disable: function(formId) {
			$('#' + formId + ' select').attr("disabled", "disabled");
			$('#' + formId + ' input').attr("disabled", "disabled");
			$('#' + formId + ' textarea').attr("disabled", "disabled");
		},
		_clear: function(formId) {
			$('#' + formId + ' select').val('');
			$('#' + formId + ' input').val('');
			$('#' + formId + ' textarea').val('');
		},
		_enable: function(formId) {
			$('#' + formId + ' select').removeAttr("disabled");
			$('#' + formId + ' input').removeAttr("disabled");
			$('#' + formId + ' textarea').removeAttr("disabled");
		}
	}
};