/* XMLHTTP */

function sendRequest( url, callback, postData ) 
{
	if( postData && postData.indexOf( '=' ) == -1 )
	{
		postData = getPostStringFromForm( postData );
	}

	var req = createXMLHTTPObject();
	if( !req ) return false;	

	var method = ( postData ) ? 'POST' : 'GET';
	req.open( method, url, true );

	if( postData ) req.setRequestHeader( 'Content-type','application/x-www-form-urlencoded');

	req.onreadystatechange = function() 
	{
		if( req.readyState != 4 ) return;
		if( req.status != 200 && req.status != 304 ) 
		{
			alert( 'HTTP error: ' + req.status );
			return;
		}
		if( callback ) callback( req );
	}
	if( req.readyState == 4 ) return true;
	req.send( postData );
	return true;
}

var XMLHttpFactories = [
	function () { return new XMLHttpRequest() },
	function () { return new ActiveXObject( 'Msxml2.XMLHTTP' ) },
	function () { return new ActiveXObject( 'Msxml3.XMLHTTP' ) },
	function () { return new ActiveXObject( 'Microsoft.XMLHTTP' ) }
];

function createXMLHTTPObject() 
{
	var xmlhttp = false;
	for( var i = 0; i < XMLHttpFactories.length; i++ ) 
	{
		try 
		{
			xmlhttp = XMLHttpFactories[i]();
		}
		catch( e ) 
		{
			continue;
		}
		break;
	}
	return xmlhttp;
}

function getPostStringFromForm( formId )
{
	var postData = '';
	var form = xGetElementById( formId );
	var formElements = new Array();
	formElements = formElements.concat( xGetElementsByTagName( 'input', form ) );
	formElements = formElements.concat( xGetElementsByTagName( 'textarea', form ) );
	selects = xGetElementsByTagName( 'select', form );

	for( var i = 0; i < formElements.length; i++ )
	{
		var name = formElements[i].name || formElements[i].id;

		postData += name + '=' + formElements[i].value + '&';
	}

	for( var i = 0; i < selects.length; i++ )
	{
		var name = selects[i].name || selects[i].id;

		postData += name + '=' + selects[i].options[selects[i].selectedIndex].value + '&';
	}

	return postData.replace( /&$/,'' );
}