/*
AJAX base file (quirksmode)
*/
var cached=true; // enables/disable url caching
var cacheUrlArr=Array(); // array which includes all cached dirs + req

var XMLHttpFactories = [
    function() {return new XMLHttpRequest()},
    function() {return new ActiveXObject("Msxml2.XMLHTTP")},
    function() {return new ActiveXObject("Msxml3.XMLHTTP")},
    function() {return new ActiveXObject("microsoft.XMLHTTP")}
];

function createXMLHTTPObject()
{
    var xmlhttp = false;
    for (var i=0;i<XMLHttpFactories.length;i++){
	try {
	    xmlhttp = XMLHttpFactories[i]();
	    
	}
	catch (e) {
	    continue;
	}
    }
    
    return xmlhttp;
}

// function to check wether url is cached
function inCache(url)
{
    for(i=0;i<cacheUrlArr.length;i++)
    {
	if(cacheUrlArr[i][0]==url)
	{
	    return true;
	}
    }
    return false;
}

// function to return url's cache
function getCache(url)
{
    for(i=0;i<cacheUrlArr.length;i++)
    {
	if(cacheUrlArr[i][0]==url)
	    return cacheUrlArr[i][1];
    }
}

// storeCache stores the url and the request object in a global array
function storeCache(url,req)
{
    tmpArr=Array(url,req);
    cacheUrlArr.push(tmpArr);
}

function sendRequest(url,callback,postData){
    if(cached && inCache(url))
    { // request is cached, load cached object to callback function
	callback(getCache(url));
    }
    else
    {
	var req = createXMLHTTPObject();
        if(!req) return;
	var method = (postData) ? "POST" : "GET";

	req.open(method,url,true);
    
	req.setRequestHeader('User-Agent','XMLHTTP');
	if(postData)
	    req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        req.onreadystatechange = function()
	{
	    if(req.readyState != 4) return;
	    if(req.status != 200 && req.status != 304){
	        //alert('HTTP error '+req.status+' on url '+url);
	        return;
	    }
	    if(cached)
	    {
		// store req in cache
		storeCache(url,req);
	    }
	    callback(req);
	}
        if(req.readyState == 4) return;
	req.send(postData);
    }
}