var Timeout = 1;

blank = function() {};

SetPage = function(page_number) {
	var current_page = YAHOO.util.Dom.get('current_page');
	if( current_page !== null ) {
		current_page.value = page_number;
	}
};

GetPage = function() {
	var current_page = YAHOO.util.Dom.get('current_page');
	if( current_page !== null ) {
		return current_page.value;
	}
	else {
		return 0;
	}
};

SaveEntry = function(id, refresh_function, page_function, entry_label) {
	var handleSuccess = function(o) {
		
		if( YAHOO.util.Dom.get('entry_body_display') ) {
			var entry_body = YAHOO.util.Dom.get('entry_body_display');
			entry_body.innerHTML = YAHOO.util.Dom.get('entry_details').value.replace("\n", "<br>");
			YAHOO.util.Dom.get('body_' + id).innerHTML = YAHOO.util.Dom.get('entry_details').value;
		}
		
		if( YAHOO.util.Dom.get('entry_title_display') ) {
			var entry_title = YAHOO.util.Dom.get('entry_title_display');
			entry_title.innerHTML = YAHOO.util.Dom.get('entry_title').value;
			YAHOO.util.Dom.get('title_' + id).innerHTML = YAHOO.util.Dom.get('entry_title').value;
		}
		
		SetAddMode(true, refresh_function, page_function, entry_label);
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SaveEntry: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	var title = YAHOO.util.Dom.get('entry_title').value;
	var body = YAHOO.util.Dom.get('entry_details').value;
	
	var POST_values = "title=" + title + "&body=" + body;

	var sUrl = "/entry/do/edit/" + id + "/";
	var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, POST_values);
};

SetEditMode = function(id, entry_label) {
	YAHOO.util.Dom.get('entry_title_label').innerHTML = 'Edit ' + entry_label;
	YAHOO.util.Dom.get('entry_title').value = YAHOO.util.Dom.get('title_' + id).innerHTML;
	YAHOO.util.Dom.get('entry_details').value = YAHOO.util.Dom.get('body_' + id).innerHTML.replace("<br>", "\n");
	YAHOO.organizee.container.dialog1.mode = "edit";
	YAHOO.organizee.container.dialog1.entry_id = id;
};

SetAddMode = function(refresh, refresh_function, page_function, entry_label) {
	YAHOO.util.Dom.get('entry_title').value = '';
	YAHOO.util.Dom.get('entry_details').value = '';
	if( refresh ) {
		refresh_function(page_function());
	}
	YAHOO.util.Dom.get('entry_title_label').innerHTML = 'Add New ' + entry_label;
	YAHOO.organizee.container.dialog1.mode = "add";
	YAHOO.organizee.container.dialog1.entry_id = null;
};

RemoveMainEntry = function(id, refresh_function, page_function) {
	var entry = YAHOO.util.Dom.get('entry_' + id);
	var entry_parent = YAHOO.util.Dom.getAncestorByTagName(entry, 'ul');
	entry_parent.removeChild(entry);
	refresh_function(page_function());
};

DeleteEntry = function(id, entry_label, remove_function) {
	
	if( confirm('Are you sure you want to delete this ' + entry_label + '?') ) {
		
		var handleSuccess = function(o) {
			GetActivity();
		};
		
		var handleFailure = function(o) { 
			var debug = YAHOO.util.Dom.get('debug');
			if( debug ) {
				debug = debug.value;
			}
			if( debug ) {
				alert('failure - DeleteEntry: ' + o.status); 
			}
		};
		
		var callback = {
			success: handleSuccess,
			failure: handleFailure
		};

		var sUrl = "/entry/do/delete/" + id + "/";
		var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
		
		var entry = YAHOO.util.Dom.get('entry_' + id);
		var entry_parent = YAHOO.util.Dom.getAncestorByTagName(entry, 'ul');
		if ( entry_parent.childNodes.length > 3 ) {
			FadeOut('entry', id);
		}
		else {
			FadeOut('group', entry_parent.id.replace('entries_', ''));
		}
		
		setTimeout(remove_function + '(' + id + ');', 1*1000);
	}
};

AddEntry = function(entry_category, refresh_function, page_function) {
	var handleSuccess = function(o) {
		YAHOO.util.Dom.get('entry_title').value = '';
		YAHOO.util.Dom.get('entry_details').value = '';
		refresh_function(page_function());
		GetActivity();
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - AddEntry: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	var title = YAHOO.util.Dom.get('entry_title').value;
	var body = YAHOO.util.Dom.get('entry_details').value;
	
	var POST_values = "title=" + title + "&body=" + body;

	var sUrl = "/" + entry_category + "/do/add/";
	var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, POST_values);
};

GetEntryList = function(page_number, id, target_div_id, entry_category, entry_target, set_function) {
	
	var handleSuccess = function(o) {
		var target_div = YAHOO.util.Dom.get(target_div_id);
		if( target_div !== null ) {
			target_div.innerHTML = o.responseText; 
		}
		
		if( id !== null ) {
			FadeIn('entry', id);
		}

		set_function(page_number);
	};
	
	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - GetEntryList: ' + o.status); 
		}
	};
	
	var callback = {
		success : handleSuccess,
		failure: handleFailure
	};
	
	if( YAHOO.util.Dom.get(target_div_id) !== null ) {
		SetSpinner(target_div_id);
		var sUrl = "/" + entry_category + "/view/" + entry_target + "/" + page_number + "/?label=" + GetLabel();
		var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);	
	}
};

YAHOO.namespace("organizee.container");
SetUpEntryDialog = function(add_function, save_function, refresh_function, page_function, entry_label, width) {
	// Define various event handlers for Dialog
	var handleSubmit = function() {
		if( Validate() ) {
			var mode = YAHOO.organizee.container.dialog1.mode;
			if( mode === null || mode == "add" ) {
				add_function();
				GetActivity();
			}
			else {
				save_function(YAHOO.organizee.container.dialog1.entry_id);
				GetActivity();
			}
			this.cancel();
		}
	};
	var handleCancel = function() {
		SetAddMode(false, refresh_function, page_function, entry_label);
		this.cancel();
	};
	var handleSuccess = function(o) {

	};
	var handleFailure = function(o) {
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SetUpEntryDialog: ' + o.status); 
		}
	};
	
	var Validate = function()
	{
		if( YAHOO.util.Dom.get('entry_title').value.length === 0 ) {
			alert('Title is required');
			YAHOO.util.Dom.get('entry_title').focus();
			return false;
		}
		else {
			return true;
		}
	};

	var SetDialogFocus = function()
	{
		YAHOO.util.Dom.get('entry_title').focus();
	};

	// Instantiate the Dialog
	YAHOO.organizee.container.dialog1 = new YAHOO.widget.Dialog("dialog1", 
	{ 
		width : width,
		fixedcenter : true,
		visible : false,
		constraintoviewport : true,
		modal : true,
		buttons : [
		{ 
			text:"Save", 
			handler:handleSubmit, 
			isDefault:true
		},
		{ 
			text:"Cancel", 
			handler:handleCancel 
		}]										 
	});

	// Wire up the success and failure handlers
	YAHOO.organizee.container.dialog1.callback = 
	{ 
		success: handleSuccess,
		failure: handleFailure 
	};

	// Render the Dialog
	YAHOO.organizee.container.dialog1.render();
	YAHOO.util.Dom.get('dialog1').style.display = '';

	YAHOO.util.Event.addListener("add-entry", "click", 
		YAHOO.organizee.container.dialog1.show, YAHOO.organizee.container.dialog1, true);
	YAHOO.util.Event.addListener("add-entry", "click", SetDialogFocus);
	
	YAHOO.organizee.container.dialog1.mode = "add";
};

YAHOO.namespace("organizee.container");
SetUpTagEntry = function() {
	// Define various event handlers for Dialog
	var handleSubmit = function() {
		SaveTags(YAHOO.organizee.container.tag_entry.id);
		this.cancel();
	};
	var handleCancel = function() {
		this.cancel();
	};
	var handleSuccess = function(o) {
	
	};
	var handleFailure = function(o) {
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SetUpTagEntry: ' + o.status); 
		}
	};
	
	var Validate = function()
	{
		return false;
	};

	// Instantiate the Dialog
	YAHOO.organizee.container.tag_entry = new YAHOO.widget.Dialog("tag_entry",
	{ 
		width : "300px",
		fixedcenter : true,
		visible : false,
		constraintoviewport : true,
		modal : true,
		buttons : [
		{ 
			text:"Save", 
			handler:handleSubmit, 
			isDefault:true
		},
		{ 
			text:"Cancel", 
			handler:handleCancel 
		}]										 
	});

	// Wire up the success and failure handlers
	YAHOO.organizee.container.tag_entry.callback = 
	{ 
		success: handleSuccess,
		failure: handleFailure 
	};

	YAHOO.organizee.container.tag_entry.render();
	YAHOO.util.Dom.get('tag_entry').style.display = '';
};

SetTagEntryDialog = function(id) {
	YAHOO.organizee.container.tag_entry.id = id;
	SetRecommendedTags(id);
	
	var handleSuccess = function(o) {
		var entry = eval(o.responseText)[0].fields;
		if( entry.tags !== null ) {
			YAHOO.util.Dom.get('entry_tags').value = entry.tags;
		}
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SetUpTagEntryDialog: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	var sUrl = "/entry/get/" + id + "/";
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
};

SetRecommendedTags = function(id) {
	
	var handleSuccess = function(o) {
		YAHOO.util.Dom.get('recommended_tags').innerHTML = o.responseText;
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SetRecommendedTags: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	var sUrl = "/entry/get/recommended_tags/" + id + "/";
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
};

TagEntry = function(id) {
	SetTagEntryDialog(id);
	var label_title = YAHOO.util.Dom.get('entry_label_title');
	var entry_title = YAHOO.util.Dom.get('title_' + id);
	label_title.innerHTML = 'Label "' + entry_title.innerHTML + '\"';
	YAHOO.organizee.container.tag_entry.show();
};

ApplyTag = function(tag) {
	var tag_field = YAHOO.util.Dom.get('entry_tags');
	tag_field.value = tag;
};

SaveTags = function(entry_id) {
	var handleSuccess = function(o) {
		YAHOO.util.Dom.get('entry_tags').value = '';
		GetOpen(GetPage());
		InitializeTags();
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - SaveTags: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	var tags = escape(YAHOO.util.Dom.get('entry_tags').value);
	var body = escape(YAHOO.util.Dom.get('body_' + entry_id).innerHTML);
	var title = escape(YAHOO.util.Dom.get('title_' + entry_id).innerHTML);

	var sUrl = "/entry/do/tag/" + entry_id + "/?tags=" + tags;
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
};

BaseInitializeTags = function(category) {
	var handleSuccess = function(o) {
		var labels = YAHOO.util.Dom.get('labels');
		if( labels !== null ) {
			labels.innerHTML = o.responseText;
		}
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - BaseInitializeTags: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	if( YAHOO.util.Dom.get('labels') !== null ) {
		SetSpinner("labels");
		var sUrl = "/entry/get/tags/?category=" + category;
		var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);	
	}
};

BaseSetLabel = function(label) {
	var current = GetLabel();
	
	var current_selector = YAHOO.util.Dom.get('label_' + current);
	var upcoming_selector = YAHOO.util.Dom.get('label_' + label);
	current_selector.className = "";
	upcoming_selector.className = "selected_label";
	YAHOO.util.Dom.get('current_label').value = label;
};


SetLabel = function(label) {
	BaseSetLabel(label);
	GetOpen(GetPage());
};

GetLabel = function() {
	return YAHOO.util.Dom.get('current_label').value;
};

BaseGetActivity = function(category) {	
	var handleSuccess = function(o) {
		var recent_activity = YAHOO.util.Dom.get('recent_activity');
		if( recent_activity !== null ) {
			recent_activity.innerHTML = o.responseText;	
		}
	};

	var handleFailure = function(o) { 
		var debug = YAHOO.util.Dom.get('debug');
		if( debug ) {
			debug = debug.value;
		}
		if( debug ) {
			alert('failure - BaseGetActivity: ' + o.status); 
		}
	};

	var callback = {
		success: handleSuccess,
		failure: handleFailure
	};

	if( YAHOO.util.Dom.get('recent_activity') !== null ) {
		SetSpinner("recent_activity");
		var sUrl = "/entry/view/activity/?category=" + category;
		var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);	
	}
};

SetSpinner = function(element_id)
{
	var element = YAHOO.util.Dom.get(element_id);
	if( element !== null ) {
		element.innerHTML = '';
		var spinner = document.createElement('img');
		spinner.src = '/static/images/spinner.gif';
		element.appendChild(spinner);	
	}
};

ShowMore = function(id)
{
	var target = YAHOO.util.Dom.get('body_' + id);
	var link = YAHOO.util.Dom.get('showmore_' + id);
	if( target.style.display == 'none') {
		FadeIn('body', id);
		target.style.opacity = 0;
		target.style.display = 'inline';
		link.innerHTML = '<img src="http://s3.amazonaws.com/organizee/images/zoom_out.png" alt="Hide Details" />';
	}
	else {
		target.style.display = 'none';
		link.innerHTML = '<img src="http://s3.amazonaws.com/organizee/images/zoom_in.png" alt="Show Details" />';
	}
};

DisableCheckbox = function(element, id) {
	var checkbox = YAHOO.util.Dom.get(element + '_' + id);
	checkbox.disabled = true;
};

FadeOut = function(element, id)
{
	Fade(element, id, 1, 0);
};

FadeIn = function(element, id)
{
	Fade(element, id, 0, 1);
};

Fade = function(element, id, from, to)
{
	var anim = new YAHOO.util.Anim(element + '_' + id, { opacity : { from: from, to: to } }, 1, YAHOO.util.Easing.easeOut);
	anim.animate();
};

YAHOO.util.Event.addListener(window, "load", SetUpTagEntry);

