// Set of functions to handle AJAX requests

function createREQ() {
try {
     req = new XMLHttpRequest(); /* e.g. Firefox */
     } catch(err1) {
       try {
       req = new ActiveXObject('Msxml2.XMLHTTP'); /* some versions IE */
       } catch (err2) {
         try {
         req = new ActiveXObject("Microsoft.XMLHTTP"); /* some versions IE */
         } catch (err3) {
          req = false;
         }
       }
     }
     return req;
}

function requestGET(url, query, req) {
	myRand=parseInt(Math.random()*99999999);
	req.open("GET",url+'?'+query+'&rand='+myRand,true);
	req.send(null);
}
function requestPOST(url, query, req) {
	req.open("POST", url,true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.send(query);
}

function doAjax(url,query,callback,reqtype,getxml) {
	// create the XMLHTTPRequest object instance
	var myreq = createREQ();
	myreq.onreadystatechange = function() 
		{
		if(myreq.readyState == 4) {
			if(myreq.status == 200) {
				var item = new String(myreq.responseText);
				if(getxml== '1') {
					item = myreq.responseXML;
				}
				eval(callback + '(item)');
			}
			//else
			//	alert('There was a problem with AJAX data transfer');
		}
	}
	
	if(reqtype=='post') {
		requestPOST(url,query,myreq);
	} else {
		requestGET(url,query,myreq);
	}
}

function getFormValues(fobj,valFunc)
{
	var str = "";   
	var valueArr = null;
	var val = "";
	var cmd = "";
	for(var i = 0;i < fobj.elements.length;i++)
	{
		switch(fobj.elements[i].type)
		{
			case "text":
			case "textarea":
			case "hidden":
				if(valFunc)
				{
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name +
				 "=" + escape(fobj.elements[i].value) + "&";
				 break;
			case "select-one":
				str += fobj.elements[i].name +
				"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
				break;
			case "select-multiple":
				selected = new Array(); 
				for (var j = 0; j < fobj.elements[i].options.length; j++) 
					if (fobj.elements[i].options[j].selected) 
						selected.push(fobj.elements[i].options[j].value);
                                str += fobj.elements[i].name +
				"=" + selected.toString() + "&";
				break;
			case "checkbox":
				if (fobj.elements[i].checked)
					str += fobj.elements[i].name + "=" + fobj.elements[i].value + "&";
				else
					str += fobj.elements[i].name + "=&";
				break;
			case "radio":
				if (fobj.elements[i].checked)
					str += fobj.elements[i].name + "=" + fobj.elements[i].value + "&";
				break;
		}
	}
	str = str.substr(0,(str.length - 1));
	return str;
}

