function ChangeListTitle()
{
	var newTitle = document.getElementById('NewTitleTextBox').value;
	if (newTitle.length)
	{
		ChangeTextById('listTitle', newTitle);
	}	
}

function AddCategory()
{
	var catName = document.getElementById('AddCategoryTextBox').value;
	if (catName == "Enter category name")
	{
		alert("Please enter a new category name");
		return;	
	}	
	
	var allH2s = document.getElementsByTagName('H2');
	if (allH2s.length)
	{
		for(var i=0;i<allH2s.length;i++)
		{
			if (GetTextByElement(allH2s.item(i)) == catName)
			{
				alert("This category name already exists. Please enter another name.")
				return;	
			}	
		}
	}
	
	var columnID = "column1";
	var leastCategoriesCount = 0;
	var column1 = document.getElementById("column1");
	if (column1)
	{
		var leastCategoriesCount = column1.getElementsByTagName("H2").length;
	}
	var column2 = document.getElementById("column2");
	if (column2)
	{
		if (column2.getElementsByTagName("H2").length < leastCategoriesCount) 
		{
			leastCategoriesCount = column2.getElementsByTagName("H2").length;
			columnID = "column2";
		}
	}
	var column3 = document.getElementById("column3");
	if (column3)
	{
		if (column3.getElementsByTagName("H2").length < leastCategoriesCount) 
		{
			leastCategoriesCount = column3.getElementsByTagName("H2").length;
			columnID = "column3";
		}
	}
	
	var colDiv = document.getElementById(columnID);
	var title = document.createElement('h2');
	var anchor = document.createElement('a');
			//anchor.setAttribute("onClick", "javascript:RemoveCategory('" + catName + "','" + columnID + "')");
			anchor.onclick = function(){RemoveCategory(catName, columnID)};
	var titleText = document.createTextNode(catName);
	anchor.appendChild(titleText);
	title.appendChild(anchor);
	colDiv.appendChild(title);
	
	var newList = document.createElement('ul');
			newList.setAttribute("id", catName);
	var newLi = document.createElement('li');
			newLi.setAttribute("class", "noprint");
	var newFormDiv = document.createElement('div');
	var newTextBox = document.createElement('input'); 
			newTextBox.setAttribute("type", "text");
			newTextBox.setAttribute("class", "userInput");
			newTextBox.setAttribute("value", "Add an item here");
			newTextBox.setAttribute("id", catName + "UserInputTextBox");
			//newTextBox.setAttribute("onclick", "javascript:ClearDefaultText('" + catName + "UserInputTextBox')");
			newTextBox.onclick = function(){ClearDefaultText(catName + "UserInputTextBox");}
	var newAddButton = document.createElement('input'); 
			newAddButton.setAttribute("type", "button");
			newAddButton.setAttribute("value", "Add");
			//newAddButton.setAttribute("onclick", "javascript:AddUserItem('" + catName + "')");
			newAddButton.onclick = function(){AddUserItem(catName);}
	var newAddBlankButton = document.createElement('input');
			newAddBlankButton.setAttribute("type", "button");
			newAddBlankButton.setAttribute("value", "Blank");
			//newAddBlankButton.setAttribute("onclick", "javascript:AddBlankItem('" + catName + "')");
			newAddBlankButton.onclick = function(){AddBlankItem(catName);}
	
	newLi.id = catName + "UserInput";
	newLi.setAttribute("class", "noprint");
	newFormDiv.appendChild(newTextBox);
	br = document.createElement("br");newFormDiv.appendChild(br);
	newFormDiv.appendChild(newAddButton);
	newFormDiv.appendChild(newAddBlankButton);
	newLi.appendChild(newFormDiv);		
	newList.appendChild(newLi);
	colDiv.appendChild(newList);
}

function AddUserItem(listID)
{
	var newValue = (document.getElementById(listID + "UserInputTextBox")).value;
	
	if ((newValue.length > 0) && (newValue != "Add an item here"))
	{
		var list = document.getElementById(listID);
		var newLi = document.createElement('li');
		var uniqueID = listID + newValue;
		newLi.id = uniqueID;
		newLi.innerHTML = "<a onClick=\"javascript:RemoveItem('" + listID  + "','" + uniqueID + "')\">" + newValue + "</li>";
		list.appendChild(newLi);
	
		var userInput = document.getElementById(listID + "UserInput");
		list.removeChild(userInput);
		list.appendChild(userInput);
		
		var textBox = document.getElementById(listID + "UserInputTextBox");
		textBox.value = "Add an item here";
	}
}

function ClearDefaultText(textBoxID)
{
	var objTextBox = document.getElementById(textBoxID);
	objTextBox.value = "";
}

function AddBlankItem(listID)
{
	var list = document.getElementById(listID);
	var newLi = document.createElement('li');
	var uniqueID = listID + "Blank";
	newLi.id = uniqueID;
	newLi.innerHTML = "<a onClick=\"javascript:RemoveItem('" + listID  + "','" + uniqueID + "')\">________________________</li>";
	list.appendChild(newLi);

	var userInput = document.getElementById(listID + "UserInput");
	list.removeChild(userInput);
	list.appendChild(userInput);
	
	var textBox = document.getElementById(listID + "UserInputTextBox");
	textBox.value = "Add an item here";
}

function ClearEntireList()
{
	RemoveAllChildNodes('column1');
	RemoveAllChildNodes('column2');
	RemoveAllChildNodes('column3');
}

function RemoveAllChildNodes(nodeID)
{
	var parentNode  = document.getElementById(nodeID);
	if (parentNode)
	{
		if (parentNode.hasChildNodes())
		{    		while (parentNode.childNodes.length >= 1 )    		{        		parentNode.removeChild(parentNode.firstChild);           		} 		}
	}
}

function RemoveCategory(listID, columnID)
{
	var allH2s = document.getElementsByTagName('H2');
	var catH2 = null;
	if (allH2s.length)
	{
		for(var i=0;i<allH2s.length;i++)
		{				
			if (GetTextByElement(allH2s.item(i)) == listID)
			{
				catH2 = allH2s.item(i);	
			}	
		}
	}
	if (catH2)
	{
		var col = document.getElementById(columnID);
		if (col) 
		{
			col.removeChild(catH2);
			var list = document.getElementById(listID);
			if (list) col.removeChild(list);
		}
	}
}

function RemoveItem(listID, item)
{
	var li = document.getElementById(item);
	var list = document.getElementById(listID);
	list.removeChild(li);
		
}

function ToggleInstructions()
{
	var div = document.getElementById('instructions');
	if (div.style.display=="none")
	{
		div.style.display="block";
		ChangeTextById('toggleInstructions', '[ Hide ]');
	}
	else
	{
		div.style.display="none";
		ChangeTextById('toggleInstructions', '[ Show ]');
	}
}


function GetTextByElement(elem)
{
	var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;    if(!hasInnerText){return elem.textContent;}	
    else{return elem.innerText;}
}

function GetTextById(elementId)
{    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;    var elem = document.getElementById(elementId);
    if(!hasInnerText){return elem.textContent;}	
    else{return elem.innerText;}}

function ChangeTextById(elementId,changeVal)
{    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;    var elem = document.getElementById(elementId);
    if(!hasInnerText){elem.textContent = changeVal;}	
    else{elem.innerText = changeVal;}}