// JavaScript Document

var ajaxResponse=false;
var ajaxRequestInProcess=false;
var ajaxQueueURL=new Array();
var ajaxQueueQuery=new Array();
var ajaxQueueOutput=new Array();
var ajaxQueueExecute=new Array();
var ajaxQueueNextOut=-1;
var ajaxQueueNextIn=0;

var fadeDiv=false;

function createXHR() {
    var request=false;
	try {
		request=new ActiveXObject('Msxml2.XMLHTTP');
	}
	catch (err2) {
		try {
			request=new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (err3) {
			try {
				request=new XMLHttpRequest();
			}
			catch (err1) {
				request=false;
			}
		}
	}
    return request;
}

function ajaxAddToQueue(url, query, output, execute) {
	queueURL='%'+ajaxQueueURL.join('%')+'%';
	if (queueURL.indexOf('%'+url+'%')==-1) {
		ajaxQueueURL[ajaxQueueNextIn]=url;
		ajaxQueueQuery[ajaxQueueNextIn]=query;
		ajaxQueueOutput[ajaxQueueNextIn]=output;
		ajaxQueueExecute[ajaxQueueNextIn]=execute;
		ajaxQueueNextIn++;
		if (ajaxQueueNextOut==-1) ajaxQueueNextOut=0;
	}
}

function ajaxQueue() {
	if (!ajaxRequestInProcess && ajaxQueueNextOut>-1 && ajaxQueueNextOut<ajaxQueueNextIn) {
		ajaxRequest(ajaxQueueURL[ajaxQueueNextOut],ajaxQueueQuery[ajaxQueueNextOut],ajaxQueueOutput[ajaxQueueNextOut],ajaxQueueExecute[ajaxQueueNextOut]);
		delete ajaxQueueURL[ajaxQueueNextOut];
		delete ajaxQueueQuery[ajaxQueueNextOut];
		delete ajaxQueueOutput[ajaxQueueNextOut];
		delete ajaxQueueExecute[ajaxQueueNextOut];
		ajaxQueueNextOut++;
	}
}

setInterval('ajaxQueue()',200);

function ajaxRequest(url, query, output, execute) {
	if (ajaxRequestInProcess) {
		ajaxAddToQueue(url, query, output, execute);
	} else {
		ajaxRequestInProcess=true;
		out=output.split('|');
		if (fadeDiv && out[0]=='div') {
			fade(out[1], true);
		}
		var xhr=createXHR();
		xhr.onreadystatechange=function() { 
			if (xhr.readyState==4) {
				if (xhr.status==200) {
					result=xhr.responseText;
				} else {
					result='Error: '+xhr.status;
				}
				if (out[0]=='div') {
					if (fadeDiv) fade(out[1], false);
					document.getElementById(out[1]).innerHTML=result;
				} else {
					ajaxResponse=result;
				}
				ajaxRequestInProcess=false;
				if (execute!=null) eval(execute);
				
			}
		}
		xhr.open("POST", url, true);		
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.send(query);
	}
	return false;
}

function fade(div, f) {
	if (f) {
		percent=30;
		dot='.';
	} else {
		percent=100;
		dot='';
	}
	isIE=(navigator.appName.indexOf('Microsoft')!=-1);
	isNN=(navigator.appName=='Netscape');
	if (isIE) {
		document.getElementById(div).style.filter="alpha(opacity="+percent+")";
		document.getElementById(div).filters.alpha.apply();
	} else if (isNN) {
		document.getElementById(div).style.MozOpacity=dot+percent;
	} else {
		document.getElementById(div).style.opacity=dot+percent;
	}
}

