/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  *
  * Title : 		Javascript actions to handle Ajax and processing for the todo list
  * Author : 		Ryan Campbell
  * URL : 		http://particletree.com
  *
  * Description :	Handles add, remove, and mark complete and maintains the alterations of the markup
  *
  * Created : 	8/18/2005
  * Modified : 	8/22/2005
  *
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

/*------------------------------------------- PAGE LOAD -----------------------------------------------------*/ 
 
/*
  * Summary:	Call these functions on page load to set up degradable Ajax
  */
addEvent(window, 'load', buildAjax);
var activeID;

function buildAjax() {
	enabledCheckboxes();
	disableLinks();
	disableForms();
}

function disableLinks() {
    var links = document.getElementsByTagName("a");
	
    for (i=0; i<links.length; i++){
        var link = links[i];
		if(link.className != "") {
			link.onclick = allFuncs[getAction(link.className)];
			if(link.title == "Complete this Item") {
				link.style.display = "none";
			}
		}
    }
}

function disableForms() {
    var forms = document.getElementsByTagName("form");

    for (y=0; y<forms.length; y++){
        var form = forms[y];
        form.onsubmit = allFuncs[getAction(form.className)];
    }
}

function enabledCheckboxes() {
	var inputs = document.getElementsByTagName("input");

    for (i=0; i<inputs.length; i++){
        var input = inputs[i];
        if(input.className == "checkbox") {
			input.style.display = "inline";
			input.onclick = allFuncs["CompleteItem"];
		}
    }
}

var allFuncs = new Object();

/*------------------------------------------- ADD ITEM -----------------------------------------------------*/ 

/*
  * Summary:	Add Item to list
  *			The next 2 functions handle adding an item to the list and displaying it properly
  */
var ajaxNewItem;

allFuncs["addToList"] = function() { 
	ajaxNewItem = new cAjax;
	ajaxNewItem.processReqChange = addItemResults;
	url = "processList.php?action=add&ajax=yes";
    data = ajaxNewItem.ajaxString("itemDesc", true);
	ajaxNewItem.loadXMLDoc(url, data);
	return false; 
}

function addItemResults() {
	if(ajaxNewItem.req.readyState == 4) {
		list = document.createElement("li");
		list.id = "list" + ajaxNewItem.req.responseText;
		list.innerHTML = displayItem(ajaxNewItem.req.responseText, document.getElementById("itemDesc").value);
		document.getElementById("notdone").appendChild(list);
		enabledCheckboxes();
		disableLinks();
		disableForms();
	}
}

/*------------------------------------------- DELETE ITEM -----------------------------------------------------*/ 

/*
  * Summary:	Delete Item From list
  *			The next 2 functions handle deleting an from the list and displaying it properly
  */
var ajaxDeleteItem;

allFuncs["DeleteItem"] = function() { 
	ajaxDeleteItem = new cAjax;
	activeID = right(this.id, this.id.length - 1);
	url = "processList.php?action=delete&ajax=yes&id=" + activeID;
    data = "";
	ajaxDeleteItem.processReqChange = deleteItemResults;
	ajaxDeleteItem.loadXMLDoc(url, data);
	return false; 
}

function deleteItemResults() {
	if(ajaxDeleteItem.req.readyState == 4) {
		nodeToRemove = document.getElementById("list" + activeID);
		nodeToRemove.parentNode.removeChild(nodeToRemove);
		enabledCheckboxes();
		disableLinks();
		disableForms();
	}
}

/*------------------------------------------- COMPLETE ITEM -----------------------------------------------------*/ 

/*
  * Summary:	Mark item as completed
  *			The next 2 functions handle completing an item and displaying it properly
  */
var ajaxCompleteItem;;

allFuncs["CompleteItem"] = function() { 
	ajaxCompleteItem = new cAjax;
	activeID = right(this.id, this.id.length - 1);
	url = "processList.php?action=complete&ajax=yes&id=" + activeID;
    data = "";
	ajaxCompleteItem.processReqChange = completeItemResults;
	ajaxCompleteItem.loadXMLDoc(url, data);
	return false; 
}

function completeItemResults() {
	if(ajaxCompleteItem.req.readyState == 4) {
		nodeToRemove = document.getElementById("list" + activeID);
		val = nodeToRemove.firstChild.childNodes[2].innerHTML;
		nodeToRemove.parentNode.removeChild(nodeToRemove);
		nodeToRemove.innerHTML = "";
		nodeToRemove.innerHTML = displayCompleteItem(activeID, val);
		document.getElementById("done").appendChild(nodeToRemove);
		enabledCheckboxes();
		disableLinks();
		disableForms();
	}
}

/*------------------------------------------- HANDLE MARKUP -----------------------------------------------------*/ 

/*
  * Summary:	Build display objects
  */
  
function displayItem(id, val) {
	sInsert = "<p>";
	sInsert += "<input type=\"checkbox\" id=\"i" + id + "\" class=\"checkbox\" \/> ";
	sInsert += "<span>" + val + "<\/span>";
	sInsert += " <a href=\"processList.php?action=delete&id=" + id + "\" title=\"Delete this Item\" id=\"l" + id + "\" class=\"button delete funcDeleteItem\">Delete<\/a>";
	sInsert += "<\/p>";
	return sInsert;
}

function displayCompleteItem(id, val) {
	sInsert = "<p>";
	sInsert += "<input type=\"checkbox\" class=\"checkbox\" name=\"\" value=\"\" checked readonly\/> " + val;
	sInsert += " <a href=\"processList.php?action=delete&id=" + id + "\" title=\"Delete this Item\" id=\"l" + id + "\" class=\"button delete funcDeleteItem\">Delete</a>";
	sInsert += "<\/p>";
	return sInsert;
}