var ajax = create_request_object();

function url_encode(str) {
  return escape(str).
    replace(/\+/g, '%2B').
      replace(/\"/g,'%22').
        replace(/\'/g, '%27').
          replace(/\&/g, '%26').
            replace(/\?/g, '%3F').
              replace(/\//g,'%2F');
}

function create_request_object() {
  var request_object;
  
  try {
    request_object = window.XMLHttpRequest ?
      new XMLHttpRequest() :
      new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
    // browser doesn't support XML HTTP requests
    request_object = null;
  }
  
  return request_object;
}

function ajax_post(url, data, return_function) {
  if (ajax != null) {
    var response_object = create_request_object();
    if (response_object != null) {
      response_object.open('post', url);
      response_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
      response_object.onreadystatechange = function() {
        handle_response(response_object, return_function);
      };
      response_object.send(data);
      
      return response_object;
    }
  } else {
    return '';
  }
}

function ajax_get(url, data, return_function) {
  if (ajax != null) {
    var response_object = create_request_object();
    if (response_object != null) {
      response_object.open('get', url + "?" + data);
      response_object.onreadystatechange = function() {
        handle_response(response_object, return_function);
      };
      response_object.send(null);
      
      return response_object;
    }
  } else {
    return '';
  }
}

function handle_response(response_object, return_function) {
  if (response_object && response_object.readyState == 4) {
    var response = response_object.responseText;
    response = response.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");
    if (response.length <= 0) {
      return_function('');
    } else {
      return_function(response);
    }
  }
}
