	var req;

	function retrieveURL(url) {
		if (window.XMLHttpRequest) { // Non-IE browsers
			req = new XMLHttpRequest();
		    req.onreadystatechange = processStateChange;
		    try {
		      req.open("GET", url, true);
		    } 
		    catch (e) {
		      alert(e);
		    }
		    req.send(null);
		} 
		else if (window.ActiveXObject) { // IE
		    req = new ActiveXObject("Microsoft.XMLHTTP");
		    if (req) {
		      req.onreadystatechange = processStateChange;
		      req.open("GET", url, true);
		      req.send();
		    }
		}
	}

	function retrieveURL2(url, divID) { 
		if (window.XMLHttpRequest) { // Non-IE browsers
			var req = new XMLHttpRequest();
		    req.onreadystatechange = function() { processStateChange2(divID, req, url); };
		    try {
		      req.open("GET", url, true);
		    } 
		    catch (e) {
		      alert(e);
		    }
		    req.send(null);
		} 
		else if (window.ActiveXObject) { // IE
		    var req = new ActiveXObject("Microsoft.XMLHTTP");
		    if (req) {
		      req.onreadystatechange = function() { processStateChange2(divID, req, url); };
		      //req.onreadystatechange = processStateChange2;
		      req.open("GET", url, true);
		      req.send();
		    }
		}
	}
	
	function post2Url(docForm, url, result, extraParams) {
		$.post(url, $(docForm).serialize() + (extraParams ? '&' + extraParams : ''), function(data) {
			$("#" + result).html(data);
		});
	}
	
	function processStateChange2(divID, req, url) {
		if (req.readyState == 4) { // Complete
			if (req.status == 200) { // OK response
				document.getElementById(divID).innerHTML = req.responseText;
				//alert(req.responseText);
				//these next lines ensure that any javascript returned in the 
				//req.responseText object (enclosed in script tags) get executed				
				var x = document.getElementById(divID).getElementsByTagName("script"); 
   				for( var i=0; i < x.length; i++) {
     				eval(x[i].text);
   				}
			}
			else {
				document.getElementById("theError").innerHTML = req.responseText;
			}
		}
	}
	function processStateChangeWithAppend(divID, req, url) {
		if (req.readyState == 4) { // Complete
			if (req.status == 200) { // OK response
				document.getElementById(divID).innerHTML = document.getElementById(divID).innerHTML + req.responseText;
				//alert(req.responseText);
				//these next lines ensure that any javascript returned in the 
				//req.responseText object (enclosed in script tags) get executed				
				var x = document.getElementById(divID).getElementsByTagName("script"); 
   				for( var i=0; i < x.length; i++) {
     				eval(x[i].text);
   				}
			}
			else {
				document.getElementById("theError").innerHTML = req.responseText;
			}
		}
	}
	
	function processStateChangeWithPrepend(divID, req, url) {
		if (req.readyState == 4) { // Complete
			if (req.status == 200) { // OK response
				document.getElementById(divID).innerHTML = req.responseText + document.getElementById(divID).innerHTML;
				//alert(req.responseText);
				//these next lines ensure that any javascript returned in the 
				//req.responseText object (enclosed in script tags) get executed				
				var x = document.getElementById(divID).getElementsByTagName("script"); 
   				for( var i=0; i < x.length; i++) {
     				eval(x[i].text);
   				}
			}
			else {
				document.getElementById("theError").innerHTML = req.responseText;
			}
		}
	}
	
	function retrieveURLEditable(url, divID, editType) { 
		if (window.XMLHttpRequest) { // Non-IE browsers
			var req = new XMLHttpRequest();
		    if (editType == "append")
		    	req.onreadystatechange = function() { processStateChangeWithAppend(divID, req, url); };
		    else if (editType == "prepend")
		    	req.onreadystatechange = function() { processStateChangeWithPrepend(divID, req, url); };
		    try {
		      req.open("GET", url, true);
		    } 
		    catch (e) {
		      alert(e);
		    }
		    req.send(null);
		} 
		else if (window.ActiveXObject) { // IE
		    var req = new ActiveXObject("Microsoft.XMLHTTP");
		    if (req) {
		      if (editType == "append")
		      	req.onreadystatechange = function() { processStateChangeWithAppend(divID, req, url); };
		      else if (editType == "prepend")
		      	req.onreadystatechange = function() { processStateChangeWithPrepend(divID, req, url); };
		      	
		      req.open("GET", url, true);
		      req.send();
		    }
		}
	}
	
	function processStateChange() {
	  if (req.readyState == 4) { // Complete
	    if (req.status == 200) { // OK response
	      document.getElementById("theData").innerHTML = req.responseText;
	      //alert(req.responseText);
	    } else {
	      //alert("Problem: " + req.statusText);
	      document.getElementById("theError").innerHTML = req.responseText;
	    }
	  }
	}
	
	function formData2QueryString(docForm) {

		var strSubmitContent = '';
		var formElem;
		var strLastElemName = '';
		
		for (i = 0; i < docForm.elements.length; i++) {
			
			formElem = docForm.elements[i];
			/*if (~formElem.name.indexOf("Desc")) {
				formElem.value = "test";
			}*/
			switch (formElem.type) {
				// Text fields, hidden form elements
				case 'text':
				case 'hidden':
				case 'password':
				case 'textarea':
				case 'select-one':
					strSubmitContent += formElem.name + '=' + encodeURIComponent(formElem.value) + '&'
					break;
					
				// Radio buttons
				case 'radio':
					if (formElem.checked) {
						strSubmitContent += formElem.name + '=' + encodeURIComponent(formElem.value) + '&'
					}
					break;
					
				// Checkboxes
				case 'checkbox':
					if (formElem.checked) {
						// Continuing multiple, same-name checkboxes
						if (formElem.name == strLastElemName) {
							// Strip of end ampersand if there is one
							if (strSubmitContent.lastIndexOf('&') == strSubmitContent.length-1) {
								strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
							}
							// Append value as comma-delimited string
							strSubmitContent += ',' + encodeURIComponent(formElem.value);
						}
						else {
							strSubmitContent += formElem.name + '=' + encodeURIComponent(formElem.value);
						}
						strSubmitContent += '&';
						strLastElemName = formElem.name;
					}
					break;
					
			}
		}
		
		// Remove trailing separator
		strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
		return strSubmitContent;
	}
