var xmlHttpAsync = true

function setXmlHttpAsync( bol ) {
	xmlHttpAsync = bol
}

function PostXMLHttpRequest( url, values, handler) {
	return SendXmlHttpRequest( "POST", url, xmlHttpAsync, values, handler )
}

function GetXMLHttpRequest( url, handler ) {
	return SendXmlHttpRequest( "GET", url, xmlHttpAsync, null, handler )
}

function SendXmlHttpRequest( action, url, async, values, handler ) {
	xmlHttp = GetXmlHttpObject( handler )
	xmlHttp.open( action, url , async )
	if ( action == "POST" ) {
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlHttp.setRequestHeader('Content-length', values.length);
		var _values = ""
		for( i = 0; i < values.length; i++ ) {
			if ( values[ i ] ) {
				_values += values[ i ]
			}
		}
		values = _values
	} 
	
	xmlHttp.send( _values )	
	return xmlHttp
}

function GetXmlHttpObject( handler ) { 
var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
				}
    }
	if ( req ) {
		req.onreadystatechange = handler;
		return req
	}
	else {
		return null
	}
} 

function getValueFromHeader( key, header ) {
	var header_array = splitHeaderIntoArray( header )
	for( i = 0; i < header_array.length; i++ ) {
		header_item = splitHeaderItem( header_array[ i ] )	
		if ( header_item[ 0 ] == key ) {
			return trim( header_item[ 1 ] )
		}
	}
	return ""
}

function splitHeaderIntoArray( headers ) {
	return headers.split( "&" )
}

function splitHeaderItem( header_item ) {
		return header_item.split( "=" )
}

function getHeaderFromResponse( responseText ) {
		return responseText.split( "\n" )[ 0 ]
}
