/* The HTTP request object */
var ajaxformRequest;

/* The URL to post the form data to */
var ajaxformURL	=	null; // "http://contact.etailersolutions.com/ajaxform-submit.php";

/* ajaxformPostIds lists the element id's to include in the POST */
var ajaxformPostIds = new Array();

var ajaxformRedirect = null;

function valueOfElement( i, n )
{
	var v = null;
	var c = i.getElementsByTagName(n)[0].firstChild;
	if ( c )
	{
		v = c.nodeValue;
	}
	return v;
}

function getXMLFieldIds(xmlFile)
{
	var ids = new Array();
	if (window.XMLHttpRequest)
	{
		xhttp=new window.XMLHttpRequest();
	}
	else // Internet Explorer 5/6
	{
		xhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xhttp.open("GET",xmlFile,false);
	xhttp.send("");
	xmlobject=xhttp.responseXML;
	if ( xmlobject )
	{
		var root = xmlobject.getElementsByTagName('formids')[0];
		if ( root )
		{
			var items = root.getElementsByTagName("field");
			for (var i = 0 ; i < items.length ; i++) {
				var item = items[i];
				var id		= valueOfElement( item, "id");
				var value	= valueOfElement( item, "value");
				var name	= valueOfElement( item, "name");
				if ( id == "config_post" )
				{
					// where to post to values.
					ajaxformURL = value;
				}
				if ( id == "config_redirect" )
				{
					// where to redirect afterwards.
					ajaxformRedirect = value;
				}
				ids[i] = new Array();
				ids[i][0] = id;
				ids[i][1] = value;
				ids[i][2] = name;
			}
		}
		else
		{
			alert("Malformed XML in ("+formIDsFile+") expected <formids> tag.");
		}
	}
	else
	{
		alert("Form IDs file ("+formIDsFile+") was Not Found");
	}
	return ids;
}

function queryString()
{
	var qString="";
	for(var i=0; i < ajaxformPostIds.length; i++)
	{
		var element_id = null;
		var element_value = null;
		var element = document.getElementById(ajaxformPostIds[i][0]);
		element_id = ajaxformPostIds[i][0];
		if ( element )
		{
			// it was a field on the form 
			element_value = element.value;
		}
		else
		{
			// it was a field not on the form, get the value from the XML
			element_value = ajaxformPostIds[i][1]
		}
		if ( i < ajaxformPostIds.length-1 )
		{
			qString += element_id+"="+encodeURIComponent(element_value)+"&";
		}
		else
		{
			qString += element_id+"="+encodeURIComponent(element_value);
		}
	}
	return qString
}

function initReq(reqType,url,asynch)
{
	ajaxformRequest.onreadystatechange=handleResponse;
	ajaxformRequest.open(reqType,url,asynch);
	ajaxformRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
	ajaxformRequest.setRequestHeader("Content-length", queryString().length);
	ajaxformRequest.setRequestHeader("Connection", "close");
	
	ajaxformRequest.send(queryString());
}

function activateRedirect()
{
	if ( ajaxformRedirect )
	{
		window.location = ajaxformRedirect;
	}
}

function handleResponse()
{
	if ( ajaxformRequest.readyState == 4 )
	{
		if ( ajaxformRequest.status == 200 )
		{
			var xmlstring = ajaxformRequest.responseText;
			var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
			var root = xmlobject.getElementsByTagName('ajaxform')[0];
			var items = root.getElementsByTagName("reply");
			for (var i = 0 ; i < items.length ; i++) {
				var item = items[i];
				var text = item.getElementsByTagName("text")[0].firstChild.nodeValue;
				alert(text);
				activateRedirect();
			}
		}
		else
		{
			alert("A problem occured with communicating between XMLHttpRequest object and the server.");
		}
	}
}

function httpRequest(reqType,url,asynch)
{
	if ( window.XMLHttpRequest)
	{
		ajaxformRequest = new XMLHttpRequest();
	}
	else if ( window.ActiveXObject)
	{
		ajaxformRequest = new ActiveXObject("Msxml2.XMLHTTP");
		if(!request)
		{
			ajaxformRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	if ( ajaxformRequest )
	{
		initReq(reqType,url,asynch);
	}
	else
	{
		alert("Your browser does not permit the use of all of this applications's features!");
	}
}

function clearElements(el)
{
	switch(el.type.toLowerCase()) 
	{
		case "text":
		case "password":
		case "textarea":
		case "hidden":
			el.value = "";
			break;
		case "radio":
		case "checkbox":
			if (el.checked) 
			{
				el.checked = false;
			}
			break;
		case "select-one":
		case "select-multi":
			el.selectedIndex = -1;
			break;
		default:
			break;
	}
}

function clearall(xmlFile)
{
	ajaxformPostIds = getXMLFieldIds(xmlFile);
	for(var i=0; i < ajaxformPostIds.length; i++)
	{
		var element = document.getElementById(ajaxformPostIds[i][0]);
		if ( element )
		{
			clearElements(element);
		}
	}
}

function clicked(xmlFile)
{
	ajaxformPostIds = getXMLFieldIds(xmlFile);
	httpRequest("POST",ajaxformURL,true);
}


