var memo = {	
	
	add: function(e) {
		new Ajax.Request(
			'/memos/add', // Request action
			{
				parameters: $('memo-form').serialize(),
				onCreate: function() {
					$('memo-form').disable(); // Disable the form while submitting
					$('memo-cancel').hide(); // Hide the "Cancel" link while submitting
				},
				onSuccess: function(transport) { 
					var json = transport.responseText.evalJSON(true);
					if(json.success == 1) {
						memo.getPreview(json.params.memoId, json.params.content);
						$('memo-message').hide();
						$('memo-form').reset();
					} else {
						$('memo-message').update(json.errorMessage).addClassName('message error').show();
					}
				},
				onComplete: function() {
					$('memo-form').enable(); 
					$('memo-cancel').show();
				}
			}				
		);
	
		Event.stop(e); // Used like "return false;" with submitted form
	},
	
	del: function(memoId) {
		new Ajax.Request(
			'/memos/delete',
			{
				parameters: {'memoId':memoId},
				onSuccess: function(transport) { 
					var json = transport.responseText.evalJSON(true);
					if(json.success == 1) {
						memo.removePreview(memoId);
					} else {
						alert(json.errorMessage);
					}
				}
			}				
		);
	},
	
	getPreview: function(memoId, content) {
		new Ajax.Updater('memos', '/memos/get_preview', {
				parameters: {'content':content, 'memoId':memoId},
				insertion: 'top',
				onFailure: function() { 
					alert("Error. Refresh the page to view the update"); 
				},
				onComplete: function() {
					memo.observeDeleteLink(memoId);
				}
			}				
		);
	},
	
	removePreview: function(memoId) {
		$('memo-'+memoId).remove();
		$('memo-delete-'+memoId).stopObserving();
	},
	
	setDeleteLinks: function() {
		var links = $('memos').select('[class="delete"]');
		links.each( function (obj){
			var linkId = obj.readAttribute('id');
			var memoId = linkId.substring(12); // reads after "memo-delete-"			
			memo.observeDeleteLink(memoId);
		});
	},
	
	observeDeleteLink: function(memoId) {
		$('memo-delete-'+memoId).observe('click', function(){
			var conf = confirm("Are you sure you want to delete this memo?");
			if(conf) { 
				memo.del(memoId);
			}			
		});
	}

}; // END class

Event.observe(window, 'load', function() {
	if($('memo-form')) { $('memo-form').observe('submit', function(event){ memo.add(event); });  }
	if($('memo-cancel')) { $('memo-cancel').observe('click', function(){ $('memo-form').reset(); }); }
	if($('memos')) { memo.setDeleteLinks(); }
});