/** Common JavaScript include file for PGXML
 */
var MSGXML_VERSION = "1.0";

var XML_DECL = "<?xml version=\"1.0\" ?>";
var TAG_MSGXML = "msgxml";
var TAG_VER = "ver";
var TAG_NAME = "name";
var TAG_EMAIL = "email";
var TAG_PHONE = "phone";
var TAG_MESSAGE = "message";

var UPDATE_OK = 0;
/**
 * Result code: Unsuccessful update
 */
var UPDATE_FAILED = 1;
/**
 * Result code: Duplicate word
 */
var UNIQUE_CONSTRAINT_VIOLATION = 2;
/**
 * Result code: No database connection
 */
var NO_CONNECTION = 3;
/**
 * Result code: The user is not authorized to perform this operation
 */
var NO_AUTH = 4;
/**
 * Result code: Miscellaneous error
 */
var OTHER_ERROR = 99;

function createXMLHttp()
{
	if (typeof XMLHttpRequest != "undefined")
	{
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		var aVersions =	[	"MSXML2.XMLHttp.5.0",
							"MSXML2.XMLHttp.4.0",
							"MSXML2.XMLHttp.3.0",
							"MSXML2.XMLHttp",
							"Microsoft.XMLHttp" ];

		for (var i = 0; i < aVersions.length; i++)
		{
			try
			{
				var oXmlHttp = new ActiveXObject(aVersions[i]);
				return oXmlHttp;
			}
			catch (oError)
			{
				// do nothing
			}
		}
	}

	throw new Error("XMLHttp could not be created.");
}

function makeSyncRequest(url)
{
	var httpRequest = createXMLHttp();

	httpRequest.open('POST', url, false);
	return httpRequest;
}

function makeAsyncRequest(url, funcname)
{
	var httpRequest = createXMLHttp();

	httpRequest.onreadystatechange = function() { funcname(httpRequest) };
	httpRequest.open('POST', url, true);
	return httpRequest;
}

function addTagStart(tag)
{
	return "<" + tag + ">";
}

function addTagEnd(tag)
{
	return "</" + tag + ">";
}

function addTagData(tag, data)
{
	return "<" + tag + ">" +
	data +
	"</" + tag + ">";
}

function getFirstNode(tag, response)
{
	try
	{
		var pos0 = response.indexOf("<" + tag + ">");
		var pos1 = response.indexOf("</" + tag + ">");
		if ((pos0 < 0) || (pos1 < 0))
		{
			return null;
		}
		pos0 += tag.length + 2;
		return response.slice(pos0, pos1);
	}
	catch (oError)
	{
		return null;
	}
}

function getNextNode(tag, response)
{
	try
	{
		if (response.length == 0)
		{
			return null;
		}
		var pos = response.indexOf("</" + tag + ">") + tag.length + 3;
		return response.slice(pos, response.length);
	}
	catch (oError)
	{
		return null;
	}
}

function getVersion(http_request)
{
	var response = http_request.responseText;
	var version0 = response.indexOf("<" + TAG_VER + ">") + TAG_VER.length + 2;
	var version1 = response.indexOf("</" + TAG_VER + ">");
	var version = response.slice(version0, version1);
	return version;
}

function getResult(http_request)
{
	var response = http_request.responseText;
	var result0 = response.indexOf("<" + TAG_RESULT + ">") + TAG_RESULT.length + 2;
	var result1 = response.indexOf("</" + TAG_RESULT + ">");
	var result = response.slice(result0, result1);
	return result;
}

function getResultCode(http_request)
{
	var response = http_request.responseText;
	var result0 = response.indexOf("<" + TAG_RESULT + ">") + TAG_RESULT.length + 2;
	var result1 = response.indexOf("</" + TAG_RESULT + ">");
	var result = response.slice(result0, result1);
	if (result == null)
	{
		result = -1;
	}
	return result;
}

function getUsername(http_request)
{
	var response = http_request.responseText;
	var result0 = response.indexOf("<" + TAG_USERNAME + ">") + TAG_USERNAME.length + 2;
	var result1 = response.indexOf("</" + TAG_USERNAME + ">");
	var result = response.slice(result0, result1);
	return result;
}

function getUrl(http_request)
{
	var response = http_request.responseText;
	var url0 = response.indexOf("<" + TAG_URL + ">") + TAG_URL.length + 2;
	var url1 = response.indexOf("</" + TAG_URL + ">");
	var url = response.slice(url0, url1);
	return url;
}

function getFirstDataRowIdx(rows, cellIdx)
{
	for (var i = 0; i < rows.length; i++)
	{
		var children = rows[i].cells[cellIdx].childNodes;
		for (var j = 0; j < children.length; j++)
		{
			if (children[j].nodeName == "INPUT")
			{
				// return ROW index
				return i;
			}
		}
	}
	return null;
}

function getDataNode(cell)
{
	var children = cell.childNodes;
	for (var i = 0; i < children.length; i++)
	{
		if ((children[i].nodeName == "INPUT") || (children[i].nodeName == "SELECT"))
		{
			return children[i];
		}
	}
	return null;
}

function getRequestBody(oForm)
{
	var aParams = new Array();
	for (var i = 0; i < oForm.elements.length; i++)
	{
		if (oForm.elements[i].type == 'checkbox')
		{
			var sParam = encodeURIComponent(oForm.elements[i].name);
			sParam += "=";
			if (oForm.elements[i].checked)
			{
				sParam += encodeURIComponent(oForm.elements[i].value);
			}
			aParams.push(sParam);
		}
		else if (oForm.elements[i].type == 'select-multiple')
		{
			for (var j = 0; j < oForm.elements[i].options.length; j++)
			{
				if (oForm.elements[i].options[j].selected)
				{
					var sParam = encodeURIComponent(oForm.elements[i].name);
					sParam += "=";
					sParam += encodeURIComponent(oForm.elements[i].options[j].value);
					aParams.push(sParam);
				}
			}
		}
		else
		{
			var sParam = encodeURIComponent(oForm.elements[i].name);
			sParam += "=";
			sParam += encodeURIComponent(oForm.elements[i].value);
			aParams.push(sParam);
		}
	}

	return aParams.join("&");
}

function sendMsg()
{
	var oForm = document.getElementById("contactform");
	if (true || testForm(oForm))
	{
		var xml = XML_DECL + addTagStart(TAG_MSGXML);
		var name = document.getElementById("name");
		var email = document.getElementById("email");
		var phone = document.getElementById("phone");
		var message = document.getElementById("message");
		xml += addTagData(TAG_NAME, name.value);
		xml += addTagData(TAG_EMAIL, email.value);
		xml += addTagData(TAG_PHONE, phone.value);
		xml += addTagData(TAG_MESSAGE, message.value);
		xml += addTagEnd(TAG_MSGXML);
		var oXmlHttp = makeSyncRequest("sendmail.php");
		oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		oXmlHttp.send(xml);

		if (oXmlHttp.status == 200)
		{
			var response = oXmlHttp.responseText;
			msgResponse(response);
		}
		else
		{
			alert("An error occurred: " + oXmlHttp.statusText);
		}
	}
}
