/* Copyright (C) 2007 Michael Kosowsky  All rights reserved. */

/* Just enough of request.js to allow us to subscribe */


function signup() {
  var email = prompt("Give us an email address and\nwe'll send you news about the site", '');
  if (email)
    wt_async_request('/bin/subscribe.cgi?email=' + encodeURI_more(email), 'SUBSCRIBE',
						function(s) { alert(s.replace(/\n/g,'') + ' subscribed.  Thanks.') });
}

function encodeURI_more(s) {
  s = encodeURI(s);
  s = s.replace(/\&/g, '%26');
  s = s.replace(/\=/g, '%3D');
  s = s.replace(/\+/g, '%2B');
  return s;
}

function _wt_async_request(url, error_label, callback) {
  //var request = GXmlHttp.create();
  var request = new XMLHttpRequest();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState != 4)
      return;
    var o = parse_response(request);
    if (!o.ok && error_label)
      alert(error_label + ': ' +
		(  o.app_status_message?  o.app_status_message
                 : o.http_status_message && o.http_status_message.toLowerCase() != 'ok'? o.http_status_message
                 : 'request error'));
    callback(o);
  }
  request.send(null);
}

function wt_async_request(url, error_label, callback) {
  _wt_async_request(url, error_label, function(o) { if (o.ok && o.response) callback(o.response); });
}

function parse_response(request) {
  var o = {ok: 0,
	   response: null,
	   http_status_code: null,
	   http_status_message: null,
	   app_status_code: null,
	   app_status_message: null};

  o.http_status_code    = request.status;
  o.http_status_message = request.statusText;
  if (request.status != 200)
    return o;

  var s;
  var a;
  try { s = request.getResponseHeader('X-App-Status'); } catch(e) {}
  if (s && (a = s.match(/^(\d\d\d)\s+(.+)/))) {
    o.app_status_code    = a[1];
    o.app_status_message = a[2];
    if (o.app_status_code != 200)
      return o;
  }

  o.ok             = 1;
  o.response       = request.responseText;

  return o;
}
