function MyXSLTProcessor(url) {
    var xsltp = new XSLTProcessor();
    var httpreq = new XMLHttpRequest();
    var ready = false;
    var that = this;
    var waiting_requests = new Array(0);

    httpreq.open("GET", url);
    httpreq.onreadystatechange = function ()  {
	if (this.readyState == 4) {
	    xsltp.importStylesheet(this.responseXML);
	    ready = true;
	    while (waiting_requests.length) {
		request = waiting_requests.shift()
		request[2](xsltp.transformToFragment(request[0], request[1]));
	    }
	    waiting_requests = null;
	}
    }
    httpreq.send(null);

    this.transformToFragment = function (xmldoc, document, handler) {
	if (ready) {
	    handler(xsltp.transformToFragment(xmldoc, document));
	} else {
	    waiting_requests.push([xmldoc, document, handler]);
	}
    }

    this.transformURLToFragment = function(url, document, handler) {
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", url);
	xmlhttp.onreadystatechange = function () {
	    if (this.readyState == 4) {
		that.transformToFragment(xmlhttp.responseXML, document, handler);
	    }
	}
	xmlhttp.send(null);
    }
}

var my_twit_xsl = new MyXSLTProcessor("twit.xsl");

my_twit_xsl.transformURLToFragment("twit.xml", document, function (result) {
    document.getElementsByTagName("body")[0].appendChild(result);

    var atags = document.getElementsByTagName("body")[0].getElementsByTagName("a");
    for (var i = 0; i < atags.length; i++) {
	var x = atags[i];
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.update_x = x;
	xmlhttp.open("HEAD", "http://benno.id.au/cgi-bin/proxy.py?" + x.attributes.getNamedItem("href").value);
	xmlhttp.onreadystatechange = function () {
	    if (this.readyState == 4) {
//		alert("status: " + this.status);
//		alert("heaers: " + this.getResponseHeader('Location'));
		if (this.status == 531) {
		    this.update_x.innerHTML = this.getResponseHeader('Location');
		}
	    }
	}
	xmlhttp.send(null);
    }

});


