var _GPF_HTTP_XHR_READYSTATE_DONE = 4,
_gpfHttpXhrSetHeaders = _gpfHttpGenSetHeaders("setRequestHeader"),
_gpfHttpXhrSend = _gpfHttpGenSend("send"),
_gpfHttpXhrGetResponse = _gpfHttpGenGetResponse("status", "getAllResponseHeaders", "responseText");
function _gpfHttpXhrOpen (request) {
var xhr = new XMLHttpRequest();
xhr.open(request.method, request.url);
function _gpfHttpXhrWaitForCompletion (xhr, resolve) {
xhr.onreadystatechange = function () {
if (xhr.readyState === _GPF_HTTP_XHR_READYSTATE_DONE) {
resolve(_gpfHttpXhrGetResponse(xhr));
function _gpfHttpXhrRequest (request, resolve) {
var xhr = _gpfHttpXhrOpen(request);
_gpfHttpXhrSetHeaders(xhr, request.headers);
_gpfHttpXhrWaitForCompletion(xhr, resolve);
_gpfHttpXhrSend(xhr, request.data);
_gpfHttpSetRequestImplIf(_GPF_HOST.BROWSER, _gpfHttpXhrRequest);
_gpfHttpSetRequestImplIf(_GPF_HOST.PHANTOMJS, _gpfHttpXhrRequest);