// JavaScript Document

function sendGetResponseText(url, targetDiv, callbackFunction)
	{
		var XMLHttpRequestObject = false;
		
		if(window.XMLHttpRequest){
			XMLHttpRequestObject = new XMLHttpRequest();
			if(XMLHttpRequestObject.overrideMimeType)
				{
				// set type accordingly to anticipated content type
				//XMLHttpRequestObject.overrideMimeType('text/xml');
				XMLHttpRequestObject.overrideMimeType('text/html');
				}
			}
		else if(window.ActiveXObject){
			XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
			}
		
		if(XMLHttpRequestObject)
			{
			XMLHttpRequestObject.open("GET",url);
			XMLHttpRequestObject.onreadystatechange = function()
				{
				if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
					{
					callbackFunction(XMLHttpRequestObject.responseText, targetDiv);
					delete XMLHttpRequestObject;
					XMLHttpRequestObject = null;
					}
				else
					{
					callbackFunction('<div style="margin:10px;text-align:center;color:#999"><img src="../_images/ajax-loader.gif"></div>', targetDiv);
					}
				}
				
			XMLHttpRequestObject.send(null);
			}
	}


function sendGetResponseXML(url, targetDiv, callbackFunction)
	{
		var XMLHttpRequestObject = false;
		
		if(window.XMLHttpRequest){
			XMLHttpRequestObject = new XMLHttpRequest();
			if(XMLHttpRequestObject.overrideMimeType)
				{
				// set type accordingly to anticipated content type
				XMLHttpRequestObject.overrideMimeType('text/xml');
				//XMLHttpRequestObject.overrideMimeType('text/html');
				}
			}
		else if(window.ActiveXObject){
			XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
			}
		
		if(XMLHttpRequestObject)
			{
			XMLHttpRequestObject.open("GET",url);
			XMLHttpRequestObject.onreadystatechange = function()
				{
				if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
					{
					callbackFunction(XMLHttpRequestObject.responseXML, targetDiv);
					delete XMLHttpRequestObject;
					XMLHttpRequestObject = null;
					}
				else
					{
					callbackFunction('<div style="margin:10px;text-align:center;color:#999"><img src="../_images/ajax-loader.gif"></div>', targetDiv);
					}
				}
				
			XMLHttpRequestObject.send(null);
			}
		else
			{
			alert('Cannot create XMLHTTP instance');
			return false;
			}
	}

function parseText(text, targetDiv)
	{
    var search = text;
    var script;
         
	while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/i))
		{
		search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length);
      
		if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break;
      
		block = search.substr(0, search.indexOf(RegExp.$1));
		search = search.substring(block.length + RegExp.$1.length);
      
		var oScript = document.createElement('script');
		oScript.text = block;
		document.getElementsByTagName("head").item(0).appendChild(oScript);
		}
   
	document.getElementById(targetDiv).innerHTML=text;
	} 

// callback text and put into targetDiv
/**/
function callbackText(text, targetDiv)
	{
	document.getElementById(targetDiv).innerHTML = text;
	}


// callback xml and put into targetDiv
function callbackXML(xml, targetDiv)
	{
	document.getElementById(targetDiv).innerHTML = xml;
	}


// POST form data function and get a text response.
function sendPostFormResponseText(url, parameters, targetDiv, callbackFunction)
	{
		var XMLHttpRequestObject = false;
		
		if(window.XMLHttpRequest){
			XMLHttpRequestObject = new XMLHttpRequest();
			if(XMLHttpRequestObject.overrideMimeType)
				{
				// set type accordingly to anticipated content type
				//XMLHttpRequestObject.overrideMimeType('text/xml');
				XMLHttpRequestObject.overrideMimeType('text/html');
				}
			}
		else if(window.ActiveXObject){
			XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
			}
		
		if(XMLHttpRequestObject)
			{
			XMLHttpRequestObject.open("POST", url);
			XMLHttpRequestObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			XMLHttpRequestObject.onreadystatechange = function()
				{
				if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
					{
					callbackFunction(XMLHttpRequestObject.responseText, targetDiv);
					delete XMLHttpRequestObject;
					XMLHttpRequestObject = null;
					}
				else
					{
					callbackFunction('<div style="margin:10px;text-align:center;color:#999"><img src="../_images/ajax-loader.gif"></div>', targetDiv);
					}
				}
				
			XMLHttpRequestObject.send(parameters);
			}
		else
			{
			alert('Cannot create XMLHTTP instance.');
			return false;
			}
	}

// Sample HTML for above
/*
<div id="wrapper">
	<div id="response"><p>The fetched data will go here!</p></div>
</div>

<script type="text/javascript">

function postForm(theForm)
	{
	var parameters = "name=" + encodeURI(theForm.name.value);
	parameters += "&address=" + encodeURI(theForm.address.value);
	parameters += "&suburb=" + encodeURI(theForm.suburb.value);
	parameters += "&postcode=" + encodeURI(theForm.postcode.value);

	// sendPostFormResponseText(url, parameters, targetDiv, callbackFunction)
	sendPostFormResponseText('test_print_post_vars.php', parameters, 'response', parseText);
	}

</script>

<form action="javascript:void('');" name="myPostForm" id="myPostForm" onsubmit="postForm(this);">
<fieldset>
<legend>Post Form Test</legend>
<div>
Name:<input name="name" type="text" value="Eduardo" /><br />
Address:<input name="address" type="text" value="123 Some Street" /><br />
Suburb:<input name="suburb" type="text" value="D' Aglaria" /><br />
Postcode:<input name="postcode" type="text" value="MA 8972" /><br />
<input type="submit" name="button" id="button" value="Submit" />
</div>
</fieldset>
</form>

*/


// POST form data function.
function sendPostFormResponseXml(url, parameters, targetDiv, callbackFunction)
	{
		var XMLHttpRequestObject = false;
		
		if(window.XMLHttpRequest){
			XMLHttpRequestObject = new XMLHttpRequest();
			if(XMLHttpRequestObject.overrideMimeType)
				{
				// set type accordingly to anticipated content type
				XMLHttpRequestObject.overrideMimeType('text/xml');
				//XMLHttpRequestObject.overrideMimeType('text/html');
				}
			}
		else if(window.ActiveXObject){
			XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
			}
		
		if(XMLHttpRequestObject)
			{
			XMLHttpRequestObject.open("POST", url);
			XMLHttpRequestObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			XMLHttpRequestObject.onreadystatechange = function()
				{
				if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
					{
					callbackFunction(XMLHttpRequestObject.responseXML, targetDiv);
					delete XMLHttpRequestObject;
					XMLHttpRequestObject = null;
					}
				else
					{
					callbackFunction('<div style="margin:10px;text-align:center;color:#999"><img src="../_images/ajax-loader.gif"></div>', targetDiv);
					}
				}
				
			XMLHttpRequestObject.send(parameters);
			}
		else
			{
			alert('Cannot create XMLHTTP instance.');
			return false;
			}
	}

// Sample code for above.
/*
*/
   
/*
"If you're using your form in tables, the first are going to be table theFormects - row, cols, etc.
Instead of drilling down in for loops to find form objects, the simplest path is to use getElementsByTagName("input") instead of childNodes[i]. " 
*/

function encodedURI(theForm, method) {

	var encoded_string = "";
	
	if(method.toUpperCase() == 'GET')
		encoded_string += "?";
  
	for (i=0; i<theForm.getElementsByTagName("input").length; i++)
  		{
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "text"){
			encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
        	}
			
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "hidden"){
			encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
        	}
			
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "password"){
			encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
        	}
			
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "submit"){
			encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
        	}
			
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "checkbox"){
			if (theForm.getElementsByTagName("input")[i].checked){
				encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
				}
			else{
				encoded_string += theForm.getElementsByTagName("input")[i].name + "=&";
				}
			}
			
		if (theForm.getElementsByTagName("input")[i].type.toLowerCase() == "radio"){
			if (theForm.getElementsByTagName("input")[i].checked){
				encoded_string += theForm.getElementsByTagName("input")[i].name + "=" + encodeURI(theForm.getElementsByTagName("input")[i].value) + "&";
				}
			} 
		}
		
	for (i=0; i<theForm.getElementsByTagName("select").length; i++)
  		{
		if (theForm.getElementsByTagName("select")[i].tagName.toLowerCase() == "select"){
			var sel = theForm.getElementsByTagName("select")[i];
			encoded_string += sel.name + "=" + encodeURI(sel.options[sel.selectedIndex].value) + "&";
			}
		}

	for (i=0; i<theForm.getElementsByTagName("textarea").length; i++)
  		{
		if (theForm.getElementsByTagName("textarea")[i].tagName.toLowerCase() == "textarea"){
			encoded_string += theForm.getElementsByTagName("textarea")[i].name + "=" + encodeURI(theForm.getElementsByTagName("textarea")[i].value) + "&";
			}
		}

	return encoded_string;
	}

function postForm(theForm, url, targetDiv)
	{
	var parameters = encodedURI(theForm, 'POST');
	//document.getElementById(targetDiv).innerHTML = parameters;

	// sendPostFormResponseText(url, parameters, targetDiv, callbackFunction)
	sendPostFormResponseText(url, parameters, targetDiv, parseText);
	}

function getForm(theForm, url, targetDiv)
	{
	var parameters = encodedURI(theForm, 'GET');
	//document.getElementById(targetDiv).innerHTML = parameters;

	// sendGetResponseText(url, targetDiv, callbackFunction)
	sendGetResponseText(url + parameters, targetDiv, parseText);
	}

