// JavaScript Document

// You may specify partial version numbers, such as "1" or "1.3",
//  with the same result. Doing so will automatically load the 
//  latest version matching that partial revision pattern 
//  (i.e. both 1 and 1.3 would load 1.3.2 today).
google.load("jquery", "1");
google.setOnLoadCallback(function() {
	// Place init code here instead of $(document).ready()
	
	///////////////
	// AJAX SETUP
	$.ajaxSetup({cache: false, type: "POST"});
	
	/////////////////
	// VOTING LINKS
	// SUBMIT VOTE
	
	$("a.od_vote").click(function(e) {
		// get the id - format is od_vote_[success/failure]_#
		var id = $(this).attr('id');
		var sf = id.substring(8,15);
		var idnum = id.substring(16);
		// the main ajax request
		$.ajax({
			data: "vote=" + sf + "&id=" + idnum,
			url: "../backend/od_update_vote.php",
			success: function(feedback)
			{
				//$("div#od_voting_feedback_" + idnum).html(feedback);
				$("div#od_voting_" + idnum).fadeOut("fast", function() {
					$("div#od_voting_feedback_" + idnum).html(feedback);
					$("div#od_voting_feedback_" + idnum).fadeIn("fast");
				});
			}
		});
		e.preventDefault();
	});
	
	/////////////////
	// VOTING LINKS
	// RESET VOTES
	
	$("a.od_reset_vote").click(function(e) {
		// get the id - format is od_reset_vote_#
		var id = $(this).attr('id');
		var idnum = id.substring(14);
		// the main ajax request
		$.ajax({
			data: "id=" + idnum,
			url: "../backend/od_reset_vote.php",
			success: function(feedback)
			{
				//$("div#od_voting_feedback_" + idnum).html(feedback);
				$("div#od_voting_feedback_" + idnum).fadeOut("fast", function() {
					$("span#od_voting_first_line_" + idnum).html(feedback);
					$("div#od_voting_" + idnum).fadeIn("fast");
				});
			}
		});
		e.preventDefault();
	});
	
	////////////////////////
	// EDIT DATABASE ENTRY
	// BEGIN EDIT
	
	var odEditOriginalValues = new Array(5);
	
	$("a.od_edit").click(function(e) {
		// get the id - format is od_edit_#
		var id = $(this).attr('id');
		var idnum = id.substring(8);
		var action = "begin_edit";
		// saving the original values in case of later cancel
		odEditOriginalValues[0] = $("#od_name_"+idnum).html();
		odEditOriginalValues[1] = $("#od_link_"+idnum).attr("href");
		odEditOriginalValues[2] = $("#od_description_"+idnum).find(".info").html();
		odEditOriginalValues[3] = $("#od_subjects_"+idnum).find(".info").html();
		odEditOriginalValues[4] = $("#od_content_"+idnum).find(".info").html();
		// getting to TD, dangerous method in terms of longevity
		//var ancestorTD = $(this).parent().parent();
		//var td_classes = ancestorTD.attr('class');
		// the main ajax request
		$.ajax({
			data: "action=" + action + "&id=" + idnum,
			url: "../backend/od_edit.php",
			dataType: "json",
			success: function(jsonDB) // unused at this point
			{			
				$("tr#database_" + idnum).fadeOut("medium", function() {
					$("#od_edit_submit_thinking_" + idnum).hide();
					$("tr#database_edit_" + idnum).fadeIn("medium");
					$(".od_edit_button_" + idnum).fadeIn("fast");
					});
			}
		});
		e.preventDefault();
	});
	
	////////////////////////
	// EDIT DATABASE ENTRY
	// CANCEL EDIT
	
	$("input.od_edit_cancel").click(function(e) {
		// get the id - format is od_edit_cancel_#
		var id = $(this).attr('id');
		var idnum = id.substring(15);
		// toggle views
		$("tr#database_edit_" + idnum).fadeOut("medium", function() {
			// return form values back to original states
			$("#od_edit_name_"+idnum).attr("value", odEditOriginalValues[0]);
			$("#od_edit_link_"+idnum).attr("value", odEditOriginalValues[1]);
			$("#od_edit_description_"+idnum).attr("value", odEditOriginalValues[2]);
			$("#od_edit_subjects_"+idnum).attr("value", odEditOriginalValues[3]);
			$("#od_edit_content_"+idnum).attr("value", odEditOriginalValues[4]);
			//
			$("tr#database_" + idnum).fadeIn("medium");
		});
		e.preventDefault();
	});
	
	////////////////////////
	// EDIT DATABASE ENTRY
	// SUBMIT EDIT
	
	$("form.od_edit_form").submit(function(e) {
		// get the id - format is od_edit_form_#
		var id = $(this).attr('id');
		var idnum = id.substring(13);
		var action = "submit_edit";
		var formData = $(this).serialize();
		// the main ajax request
		$.ajax({
			data: formData,
			url: "../backend/od_edit.php",
			dataType: "json",
			success: function(jsonDB)
			{
				$(".od_edit_button_" + idnum).fadeOut("fast", function() {
					//$(".od_edit_button_" + idnum).addClass("grayed");
					$("#od_edit_submit_thinking_" + idnum).fadeIn("fast");
					// db name
					$("#od_name_" + idnum).html(jsonDB.name);
					// db link
					$("#od_link_" + idnum).html(shortenLink(jsonDB.link));
					$("#od_link_" + idnum).attr("href", jsonDB.link);
					$("#od_link_" + idnum).attr("title", jsonDB.link);
					// db description etc
					// (this code could be shortened.)
					var desc = jsonDB.description;
					var subj = jsonDB.subjects;
					var cont = jsonDB.content;
					if (desc == "") { 
						$("#od_description_" + idnum).addClass("hidden").find(".info").html(desc);
					} else { 
						$("#od_description_" + idnum).removeClass("hidden").find(".info").html(desc);
					}
					if (subj == "") { 
						$("#od_subjects_" + idnum).addClass("hidden").find(".info").html(subj);
					} else { 
						$("#od_subjects_" + idnum).removeClass("hidden").find(".info").html(subj);
					}
					if (cont == "") { 
						$("#od_content_" + idnum).addClass("hidden").find(".info").html(cont);
					} else { 
						$("#od_content_" + idnum).removeClass("hidden").find(".info").html(cont);
					}
					// change view
					$("tr#database_edit_" + idnum).fadeOut("medium", function() {
						$("tr#database_" + idnum).fadeIn("medium");
					});
				});
			}
		});
		e.preventDefault();
	});
	
	//////////////////////////
	// DELETE DATABASE ENTRY
	
	$("a.od_delete").click(function(e) {
		// get the id - format is od_delete_#
		var id = $(this).attr('id');
		var idnum = id.substring(10);
		var action = "submit_delete";
		// getting to TD, dangerous method in terms of longevity
		var ancestorTD = $(this).parent().parent();
		var td_classes = ancestorTD.attr('class');
		// making sure the user means it
		var confirmed = confirm("Are you sure you want to delete this online database entry?");
		if (confirmed) {
			// the main ajax request
			$.ajax({
				data: "action=" + action + "&id=" + idnum + "&td_classes=" + td_classes,
				url: "../backend/od_delete.php",
				dataType: "json",
				success: function(jsonFeedback) // unused at this point
				{			
					$("tr#database_" + idnum).fadeOut("medium", function() {
						$(this).html(jsonFeedback.text);
						$(this).addClass("deleted");
						$(this).fadeIn("medium");
						$(this).animate({opacity: 1.0}, 3000);
						$(this).fadeOut("medium", function() {
							// stupid way of traversing this
							$(this).next().next().children().addClass(jsonFeedback.td_classes);
						});
					});
				}
			});
		}
		e.preventDefault();
	});
	
	///////////////////////////
	// ADD NEW DATABASE ENTRY
	// BEGIN ADD
	
	$("a#add_new_database").click(function(e) {
		$("#od_add_submit_thinking").hide();
		$("#new_database").slideDown("medium");
		e.preventDefault();
		$(".od_add_button").fadeIn("fast");
	});
	
	$("#od_add_cancel").click(function(e) {
		$("#new_database").slideUp("medium");
		e.preventDefault();
	});
	
	$("#od_add_form").submit(function(e) {
		$(".od_add_button").fadeOut("fast", function() {
			$("#od_add_submit_thinking").fadeIn("fast");
		});
		var formData = $(this).serialize();
		//alert(formData);
		// the main ajax request
		$.ajax({
			data: formData,
			url: "../backend/od_add.php",
			success: function(newTR)
			{
				$("#od_add_submit_thinking").fadeOut("fast", function() {
					$("#new_database").slideUp("medium");
					$("td.first").removeClass("first");
					$("#online_databases").prepend(newTR);
					
				});
			}
		});
		e.preventDefault();
	});
	
});

// HELPER FUNCTION - shortenLink(string)
// shortens links (if necessary) to a 30 character limit
// and adds an ellipse afterwards (if appropriate)
function shortenLink(link) {
	var newLink;
	if (link.length <= 30) {
		newLink = link;
	} else {
		newLink = (link.substring(0,30)) + "...";
	}
	return newLink;
}
