function createRequestObject(){
var req;
if(window.XMLHttpRequest){	//For Firefox, Safari, Opera
		req = new XMLHttpRequest();
	} else if(window.ActiveXObject){  //For IE 5+
		req = new ActiveXObject("Microsoft.XMLHTTP");
	} else{	//Error for an old browser
		alert('Please upgrade your browser to a newer one.');
	}
	return req;
}

function sendRequest(url, screen_name, author_screen_name, id, action, targetdiv, callback ){
	// callback is return url for any forms or links in returned code

	//Make the XMLHttpRequest Object
	var xmlhttp = createRequestObject();

    xmlhttp.onreadystatechange= function() { 
        if (xmlhttp.readyState==4)
            if (xmlhttp.status==200)
                writeHTML(xmlhttp, targetdiv); // doFunc(xmlhttp, targetdiv); -- doFunc could also be passed in function args
    }

    xmlhttp.open('GET', url + "?screen_name=" + escape(screen_name) + "&author_screen_name=" + escape(author_screen_name) + "&id=" + escape(id) + "&action=" + escape(action) + "&targetdiv=" + escape(targetdiv) + "&callback=" + escape(callback) , true);
	xmlhttp.send(null);
}

function sendPostRequest(url, p_formId, targetdiv, statusdiv){
	// gets parameters from the form, submits to url using POST, and places the results in targetdiv
	//Make the XMLHttpRequest Object

	var xmlhttp = createRequestObject();
	var params = get_params(p_formId);

	xmlhttp.onreadystatechange = function() {
	if (xmlhttp.readyState==4)
		if (xmlhttp.status==200) {
			var return_data = xmlhttp.responseText;
			//writeHTML(xmlhttp, targetdiv); // doFunc(xmlhttp, targetdiv); -- doFunc could also be passed in function args
			
			var aPosition = return_data.indexOf("<xtra-div-separator />");
			if (!aPosition) aPosition = return_data.length - 1;
			document.getElementById(targetdiv).innerHTML = return_data.substring(0,aPosition-1);
			
			if (statusdiv && aPosition) document.getElementById(statusdiv).innerHTML = return_data.substring(aPosition+"<xtra-div-separator />".length);
		}
    }

	xmlhttp.open("POST", url, true); 
	//Send the proper header information along with the request
	// avoid Firefox error if returned data is not valid XML
    //xmlhttp.overrideMimeType('text/html'); // breaks IE8
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.setRequestHeader("Content-length", params.length);
	xmlhttp.setRequestHeader("Connection", "close");
	xmlhttp.send(params);
}

/**
 * This function, get_params, takes the id of a form in a page and parses out
 * all form elements, creating a parameter string to be used in an Ajax call.
 *
 * from: O'Reilly - A.Holdener
 *
 */
function get_params(p_formId) {
	var params = '';
	var form = document.getElementById(p_formId);

	/* Loop through any <select> elements in the form and get their values */
	var selects = form.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++)
		params += ((params.length > 0) ? '&' : '') + selects[i].id + '=' + selects[i].value;
	
	/* Loop through any <input> elements in the form and get their values */
	var inputs = form.getElementsByTagName('input');
	for (var i = 0; i < inputs.length; i++) {
		var type = inputs[i].getAttribute('type');
		if (type == 'text' || type == 'password' || type == 'hidden' 
			|| (type == 'checkbox' && inputs[i].checked) )
				params += ((params.length > 0) ? '&' : '') + inputs[i].id + '=' + escape(inputs[i].value);
		if (type == 'radio' && inputs[i].checked)
				params += ((params.length > 0) ? '&' : '') + inputs[i].name + '=' + inputs[i].value;
	}
	
	/* Loop through any <textarea> elements in the form and get their values */
	var textareas = form.getElementsByTagName('textarea');
	for (var i = 0; i < textareas.length; i++)
		params += ((params.length > 0) ? '&' : '') + textareas[i].id + '=' + escape(textareas[i].value);
	
	return(params);
}

function sendVoteRequest(url, screen_name, screen_secret, action, targetdiv){
	//Make the XMLHttpRequest Object
	var xmlhttp = createRequestObject();

    xmlhttp.onreadystatechange= function() { 
        if (xmlhttp.readyState==4)
            if (xmlhttp.status==200)
                writeHTML(xmlhttp, targetdiv); // doFunc(xmlhttp, targetdiv); -- doFunc could also be passed in function args
    }

    xmlhttp.open('GET', url + "?screen_name=" + escape(screen_name) + "&screen_secret=" + escape(screen_secret) + "&action=" + escape(action) + "&targetdiv=" + escape(targetdiv), true);
    xmlhttp.send(null);
}

function writeHTML(req, targetdiv) {
    document.getElementById(targetdiv).innerHTML = req.responseText;
}