/*
Pulled and modified from:
http://www.sitepoint.com/article/take-command-ajax
*/

/*
 * AjaxObject = Return a new ajax protocol object
 *
 * @return - the new protocol handler
 */
function ajaxObject()
{
	// set req to default for error handling
	request = false;

	// Default return_xml to false if it's not set
	if (!return_xml)
	{
		var return_xml = false;
	}

	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest)
	{
		try
		{
			request = new XMLHttpRequest();
		}
		catch(e)
		{
			request = false;
		}
	}
	// branch for IE/Windows ActiveX version
	else if(window.ActiveXObject)
	{
		try
		{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				request = false;
			}
		}
	}
	return request;
}

/*
 * Ajax - Function to initiate AJAX communication with the server
 *
 * @param req - The request object
 * @param requestType - GET/POST/HEAD
 * @param requestLocation - URL to connect with
 * @param callback - One of the following:
 * 	1) function to handle the text/xml returned
 *	2) id of an element to adjust innerHTML for
 *	3) element to adjust innerHTML for
 * @param return_xml - 
 *	1) true: return an XML object
 *	2) false: return text
 */
function ajax(request,request_type,request_location,callback,post_string,return_xml)
{
	if(request)
	{
		var caller_object = this;
		// Anonymous function to handle the request callback
		request.onreadystatechange = function()
		{
			if (request.readyState == 4)
			{
				try
				{
					var status = request.status;
				}
				catch (e)
				{
					var status = 200;
				}
				
				switch(status)
				{
					case undefined:
					case 200:
					case 304:
						// Handle session expiration
						if (request.responseText.indexOf('**OPS_SESSION_EXPIRED**') > -1)
						{
							window.location.href = "http://" + window.location.hostname + '/notice.php?notice=bounce';
							return;
						}
						
						// Handle email exception
						if (request.responseText.indexOf('**OPS_EMAIL_EXCEPTION**') > -1)
						{
							alert('A critical email was not able to be sent, your request could not be completed.');
							return;
						}

						// function
						if (typeof callback == "function")
						{
							// Handle the returned XML/Text through a helper function
							if (return_xml)
							{
								if(typeof(caller_object) == 'object')
								{
										callback.call(caller_object,request.responseXML);
								}
								else
								{
										callback(request.responseXML);
								}
							}
							// Plain text parsing
							else
							{
								if(typeof(caller_object) == 'object')
								{
										callback.call(caller_object,request.responseText);
								}
								else
								{
										callback(request.responseText);
								}
							setInputs();
							}
						}
						// element id
						else if (typeof callback == "string")
						{
							// Get the object reference and set innerHTML to the responseText
							document.getElementById(callback).innerHTML = request.responseText;
							setInputs('#'+callback);
						}
						// Do nothing
						else if (typeof callback == undefined)
						{
						}
						// element object
						else
						{
							// Set innerHTML to the responseText
							callback.innerHTML = request.responseText;
							setInputs('#'+callback);
						}
						break;
					default:
						// Something went wrong, alert the user
						//alert('Your request timed out, please try again later.');
				}
			}
		}
		
		if(post_string && request_type == "POST")
		{
			request.open(request_type, request_location + '?random=' + Math.random(), true);
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		}
		else
		{
			request.open(request_type, request_location + "&random=" + Math.random(), true);
			post_string = null;
		}
		request.send(post_string);
	}
}

window.already_submitted = false;

// Reset flag which prevents multiple save ajax calls
function resetSubmittedFlag()
{
	console.info("as: CLEARED already_submitted FLAG!!!!!!!!!!!");
	window.already_submitted = false;
}