/** Dynamic Toolkit for Javascript.
 *
 * This toolkit is specifically designed to be as fast as possible. It allows for
 * a minimal set of necessary functionality, then remaining functionality is
 * downloaded from the server as required.
 */

// Utility function
function $(id) {return document.getElementById(id);}

// From http://ajaxcookbook.org/xmlhttprequest/
function createXMLHttpRequest() {
    if (typeof XMLHttpRequest != "undefined") {
        req = new XMLHttpRequest();
        return req;
    } else if (typeof ActiveXObject != "undefined") {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        return req;
    } else {
        throw new Error("XMLHttpRequest not supported");
    }
}

// Load URL into DIV
function load(url, x, callback)
{
	var request = createXMLHttpRequest();
	var div;
	
	if(x)
	{
		if(typeof x == "string")  div = $(x);
		else div = x;
	}

	request.open("GET", url, true);
    request.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			if(request.status == 200) // Success
			{
				if(x)
				{
					div.innerHTML = request.responseText;
					div.url = url;
					if(callback) eval(callback).call();
				}
				else alert(request.responseText);
			}
			else
			{
				// Manage the error
				if(!x) alert("Request failed");
			}
		}
	}
	request.send(null);
}

// Load JS synchronously
function loadJS(url)
{
	var request = createXMLHttpRequest();

	request.open("GET", url, false);
	request.send(null);
	if(request.status == 200) eval(request.responseText, top); // Success
	else
	{
		// Manage the error
		return;
	}
}

// Load CSS synchronously
function loadCSS(url)
{
	var oLink = document.createElement("link");
	oLink.href = url;
	oLink.rel = "stylesheet";
	oLink.type = "text/css";
	oLink.media = "screen";
	$('head').appendChild(oLink);
}
