window.onload = prepare;

function prepare() {
  if (!document.getElementsByTagName) {
    return;
  }
  if(!document.getElementById("addItemForm")) {
    return;
  }
  
  // Stuff for adding a new category
  //
  document.getElementById("addcategory").className = "hidden";
  document.getElementById("deletecategory").className = "hidden";
  
  var category = document.getElementById("category");
	category.onchange = function() {
		if (this.value == "addcategory"){
			document.getElementById("addcategory").className = "";
			document.getElementById("deletecategory").className = "hidden";
			document.getElementById("newcategory").focus();
		} else if (this.value == "deletecategory"){
			document.getElementById("addcategory").className = "hidden";
			document.getElementById("deletecategory").className = "";
			window.location = "#deletecategory";			
		} else {
			document.getElementById("deletecategory").className = "hidden";
			document.getElementById("addcategory").className = "hidden";
		}
  }
    
  
  var links = document.getElementsByTagName("input");
  for (var i=0; i<links.length; i++) {
    links[i].onclick = function() {
    
   	  // Catch all checkboxes and make the item gray if checked
		  //
			if (this.className == "check"){
				if (this.checked==true) {
					this.parentNode.className='complete';
				} else {
					this.parentNode.className='';
				}
			}
			
			// Catch the update buttons and show progress
			//
			if (this.className == "update"){
				this.value='Updating...';
				this.style.color='Gray';
			}
    };
  }
  
  // Find the Add Item link, target the #addItem and focus on the item input
  //
  var addItemLink = document.getElementsByTagName("a");
  for (var i=0; i<addItemLink.length; i++) {
    addItemLink[i].onclick = function() {
		if (this.getAttribute("href")=='#addItem') {
	    window.location = "#addItem";
      var addItem = document.getElementById("addItem");
	    addItem.focus();
	    return false;
		}
		
		 
    };
  }
  
  // Find all the forms 
  var forms = document.getElementsByTagName("form");
  for (var i=0; i<forms.length; i++) {
		forms[i].onsubmit = function() {
		
			// This part removes all the checked items
			//
			if (this.className=="updateForm"){
				var data = "";
				data+= "update=update&"; // Needed to allow updating with ajax and non-ajax broswsers
				for (var i=0; i<this.elements.length; i++) {
					// All we want are the checked items, so filter out the non-checked ones
					//
					if (this.elements[i].checked!=false){ // Needed to keep from removing unchecked items
						data+= this.elements[i].name;
						data+= "=";
						data+= escape(this.elements[i].value);
						data+= "&";
					} else if (this.elements[i].name=="category"){ 
						data+= this.elements[i].name;
						data+= "=";
						data+= escape(this.elements[i].value);
						data+= "&";
					}
				}
// Need to figure this out, change the update submit button to show progress				
//				this.submit.value = "Updating...";
//				this.submit.style.color = "Gray";
				return !sendDataUpdate(data);
			}
			
			// This part processes the add an item form
			//
			if (this.className=="addForm"){
				var data = "";
				for (var i=0; i<this.elements.length; i++) {
					data+= this.elements[i].name;
					data+= "=";
					data+= escape(this.elements[i].value);
					data+= "&";
				}
				return !sendDataAdd(data);
			}
		};
	}

}




// AJAX functions for removing items that are completed
//
function sendDataUpdate(data) {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
      parseResponseUpdate(request);
    };
    request.open("POST", "items.php", true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(data);
    return true;
  } else {
    return false;
  }
}

function parseResponseUpdate(request) {
  if (request.readyState == 4) {
    if (request.status == 200 || request.status == 304) {
			var container = document.getElementById("items");
			container.innerHTML = request.responseText;
			updateNav();
    }
  }
}


// AJAX functions for Adding a new item
//
function sendDataAdd(data) {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
      parseResponseAdd(request);
    };
    document.getElementById("addButton").value = "Adding...";
    document.getElementById("addButton").style.color = "Gray";
    request.open("POST", "items.php", true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(data);
    return true;
  } else {
    return false;
  }
}

function parseResponseAdd(request) {
  if (request.readyState == 4) {
    if (request.status == 200 || request.status == 304) {
			var container = document.getElementById("items");
			container.innerHTML = request.responseText;
	    document.getElementById("addButton").value = "Done!";
	    document.getElementById("addButton").style.color = "Black";
			var addItem = document.getElementById("addItem");
			addItem.value = "";
			addItem.focus();
			updateNav();
			setTimeout("updateAdd()",2000);
    }
  }
}


// AJAX functions for updating the navigation after an item has been added/removed
//
function updateNav() {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
      parseNav(request);
    };
    data = "";
    request.open("POST", "nav.php", true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(data);
    return true;
  } else {
    return false;
  }
}

function parseNav(request) {
  if (request.readyState == 4) {
    if (request.status == 200 || request.status == 304) {
			var container = document.getElementById("nav");
			container.innerHTML = request.responseText;
			prepare();
    }
  }
}

// AJAX functions for updating the add item section after an item has been added/removed
//
function updateAdd() {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
      parseAdd(request);
    };
    data = "";
    request.open("POST", "additem.php", true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(data);
    return true;
  } else {
    return false;
  }
}

function parseAdd(request) {
  if (request.readyState == 4) {
    if (request.status == 200 || request.status == 304) {
			var container = document.getElementById("addItemSection");
			container.innerHTML = request.responseText;
			prepare();
    }
  }
}




function clearHTML(target){
	document.getElementById(target).innerHTML = "";
}


function getHTTPObject() {
  var xhr = false;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

function displayLoading(element) {
  var image = document.createElement("img");
  image.setAttribute("src","loading.gif");
  image.setAttribute("alt","Loading...");
  element.appendChild(image);
}

function fadeUp(element,red,green,blue) {
  if (element.fade) {
    clearTimeout(element.fade);
  }
  element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
  if (red == 255 && green == 255 && blue == 255) {
    return;
  }
  var newred = red + Math.ceil((255 - red)/10);
  var newgreen = green + Math.ceil((255 - green)/10);
  var newblue = blue + Math.ceil((255 - blue)/10);
  var repeat = function() {
    fadeUp(element,newred,newgreen,newblue)
  };
  element.fade = setTimeout(repeat,100);
}

function clearElement(target) {
	var element = document.getElementById(target);
	element.innerHTML = '';
}