function makeGetQueryString( FormName )
{
	var QueryString = '';
	
	for( var i = 0; i < FormName.length; i++ )
	{
		QueryString += FormName.elements[i].name + '=' + encodeURIComponent( FormName.elements[i].value ) + "&"
	}
	
	return QueryString;
}

function getXMLNodeSerialisation(xmlNode) 
{
  var text = false;
  try {
    // Gecko-based browsers, Safari, Opera.
    var serializer = new XMLSerializer();
    text = serializer.serializeToString(xmlNode);
  }
  catch (e) {
    try {
      // Internet Explorer.
      text = xmlNode.xml;
    }
    catch (e) {}
  }
  return text;
}

function form2query(frm) {
    /* To string together fieldname
     * value pairs from form elements
     * with name property set.
     *
     * Format ?name=value&name=value ...
     */
    var qry = "";   //final query string
    var pair = ""; //format one name/value pair
    var field;      //form field being processed

    for (var i = 0; i < frm.elements.length; i++) {

        field = frm.elements[i];

        if (typeof field.name != "undefined" && field.name != "") {

            switch (field.type) {
            case "select-one":
                pair += field.name + "=" + field.options[field.selectedIndex].value;
                break;
            case "radio":
            case "checkbox":
                if (field.checked) {
                    pair += field.name + "=" + field.value;
                }
                break;
            default:
                pair += field.name + "=" + field.value;
            }

            if (pair.length > 1) {
                /* Test in case first element
                 * is unchecked radio or checkbox
                 */
                qry += pair;
                pair = "&";
            }
        }
    }

    return qry;
}

/*
function sndReq( HTTPRequest, DestPage, UrlVar, DestDiv )
{
	HTTPRequest.onreadystatechange = function () {};
	HTTPRequest.abort();	

	HTTPRequest.open( 'get', DestPage + '?data=' + UrlVar, true );
	HTTPRequest.onreadystatechange = function () { handleResponse( DestDiv, HTTPRequest ) };
	HTTPRequest.send( null );
}
*/

function sendRequest( DestPage, UrlVar )
{
	HTTPRequest = getHTTPObject();
	HTTPRequest.open( 'get', DestPage + '?' + UrlVar, true );
	HTTPRequest.onreadystatechange = function () { handleResponse( HTTPRequest ) };
	HTTPRequest.send( null );
}

function postForm( DestPage, FormName )
{
	HTTPRequest = getHTTPObject();
	HTTPRequest.open( 'post', DestPage );
	HTTPRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	HTTPRequest.onreadystatechange = function () { handleResponse( HTTPRequest ) };
	HTTPRequest.send( form2query( FormName ));
}

var WaitingForResponse = false;

function handleResponse( HTTPRequest ) 
{
	switch( HTTPRequest.readyState )
	{
	case 1:
	case 2:		
		break;

	case 4:
		WaitingForResponse = false;
		if ( HTTPRequest.status == 200 )
		{
			try
			{
				var ContentType = HTTPRequest.getResponseHeader( "Content-type" );
				switch ( ContentType )
				{
					case "text/xml":
						try
						{
							var XMLDoc 			= HTTPRequest.responseXML;
							var RootElement = XMLDoc.getElementsByTagName( "root" )[0];
							var ChildNode 	= RootElement.firstChild;
										
							while( ChildNode )
							{
								if ( ChildNode.getAttribute( "target" ) == "redirect" )
								{
									var ChildText = ChildNode.firstChild.nodeValue;
									window.location = ChildText;
									break;
								}
																
								document.getElementById( ChildNode.getAttribute( "target" )).innerHTML = 
									getXMLNodeSerialisation( ChildNode.childNodes.item( 0 ));

								ChildNode = ChildNode.nextSibling;
							}
						}
						catch( Error )
						{
							alert( "Something went wrong!" );
						}
						
						break;
						
					case "text/html":
						document.body.innerHTML = HTTPRequest.responseText;
						break;
						
					default:
						alert( "unexpected response format" );
					}
			}
			catch( Exception )
			{
				document.getElementById( 'container' ).innerHTML = HTTPRequest.responseText;
			}
		}
		else
		{
			document.getElementById( 'container' ).innerHTML = 
				HTTPRequest.status + ' ' + HTTPRequest.statusText;
		}
		break;
	}
}

function getHTTPObject() 
{
	var xmlhttp;

	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
			}
		} 
	@else
		xmlhttp = false;
	@end @*/

	if ( !xmlhttp && typeof XMLHttpRequest != 'undefined' ) 
	{
		try 
		{
			xmlhttp = new XMLHttpRequest();
		} 
		catch( e ) 
		{
			xmlhttp = false;
		}
	}
	return xmlhttp;
}