// JavaScript Document
function HTTPRequest(url, params, method, mimeType, callBackFunction)
{
	// init instance of XMLHTTP object
	if (window.XMLHttpRequest) // Mozilla
	{ 
       	request = new XMLHttpRequest();
		if (mimeType && mimeType != false) request.overrideMimeType(mimeType);
	} 
	else if (window.ActiveXObject) // IE
	{ 
		try { request = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) 
		{
            try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (e) {}
        }
      }
	  
	// check errors
    if (!request) {
       alert('Cannot create XMLHTTP instance');
       return false;
    }
	
	// set listener callback; must exist in calling template
	request.onreadystatechange = eval(callBackFunction);
	// open URL
    request.open(method, url, true);
	// set Request headers
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Connection", "close");
	// send request
    request.send(params);
}

// will get all values from a form and
// convert to params string to use with
// HTTPRequest
function getParamsFromForm(formID)
{
	frm = document.getElementById(formID);

	if (frm.elements.length)
	{
		params = new String();
		for(var i=0; i<frm.elements.length; i++)
		{
			// generate name/value pairs according to form element type
			if (frm.elements[i].type == "text" || frm.elements[i].type == "textarea"
				|| frm.elements[i].type == "password" || frm.elements[i].type == "hidden"
				|| frm.elements[i].type == "file")
			{
				// free text fields
				nameAndValue = frm.elements[i].name + "=" + frm.elements[i].value;
				params += params.length ? "&" + nameAndValue : nameAndValue;
			}
			else if ((frm.elements[i].type == "select-one" || frm.elements[i].type == "select-multiple") && frm.elements[i].selectedIndex > 0)
			{
				// select lists
				nameAndValue = frm.elements[i].name + "=" + frm.elements[i][frm.elements[i].selectedIndex].value;
				params += params.length ? "&" + nameAndValue : nameAndValue;
			}
			else if (frm.elements[i].type == "checkbox" && frm.elements[i].checked)
			{
				// checkboxes
				nameAndValue = frm.elements[i].name + "=" + frm.elements[i].value;
				params += params.length ? "&" + nameAndValue : nameAndValue;
			}
			else if (frm.elements[i].type == "radio")
			{
				// radio buttons
				for (var j=0; j<frm.elements.length; j++)
				{
					if (frm.elements[i][j].checked)
					{
						nameAndValue = frm.elements[i].name + "=" + frm.elements[i][j].value;
						params += params.length ? "&" + nameAndValue : nameAndValue;
						break;
					}
				}
			}	
		}
		// return formatted string
		return params;
	}
	return false;
}