function getDPos(d) {
	var nTop = 0;
	var nLeft = 0;
	if (d) {
		do {
			nLeft += d.offsetLeft ;
			nTop += d.offsetTop;
			d = d.offsetParent;
		} while(d)
	}
	return [nLeft, nTop];
}

//Ajax
var sl_loadingAjax = false;
var sl_ajaxQueue = new Array();

var ajaxDEBUG = "";
function sl_ajaxQueueCheck() {
	if (sl_loadingAjax) {
		ajaxDEBUG += "Ajax Busy...\n";
		setTimeout("sl_ajaxQueueCheck();", 100);
	} else {
		var curAjax = sl_ajaxQueue.shift();
		var curAjax = curAjax.split("|");
		sl_ajaxSubmit(unescape(curAjax[0]), unescape(curAjax[1]), unescape(curAjax[2]), unescape(curAjax[3]), Number(curAjax[4]));
		ajaxDEBUG += "sl_ajaxSubmit(" + unescape(curAjax[0]) +", ...);\n";
		if (sl_ajaxQueue.length > 0) {
			ajaxDEBUG += sl_ajaxQueue.length + " queries still in queue.\n";
			setTimeout("sl_ajaxQueueCheck();", 100);
		} else {
			alert(ajaxDEBUG);
			ajaxDEBUG = "";
		}
	}
}

function sl_ajaxSubmit(url, post, command, returnValToFunction, escapeLayers) {
	if (!post) var post = "";
	if (sl_loadingAjax) {
		sl_ajaxQueue[sl_ajaxQueue.length] = escape(url) + "|" + escape(post) + "|" + escape(command) + "|" + escape(returnValToFunction) + "|" + escapeLayers;
		setTimeout("sl_ajaxQueueCheck();", 100);
		return;
	}
	sl_loadingAjax = true;
	if (!escapeLayers) { escapeLayers = 1; }
	ajax_xhr = newHTTPRequest();
	ajax_xhr.command = command;
	ajax_xhr.returnValToFunction = returnValToFunction;
	ajax_xhr.onreadystatechange = function() {
		switch (ajax_xhr.readyState) {
			case 1: break;
			case 2: case 3:
				sl_loadingAjax = false;
				break;
			case 4:
				sl_loadingAjax = false;
				
				if (ajax_xhr.responseText) {
					eval(ajax_xhr.responseText);
				}
			break;
		}
	};
	ajax_xhr.open("POST", url,  true);
	ajax_xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax_xhr.setRequestHeader("Content-length", post.length);
	ajax_xhr.setRequestHeader("Connection", "close");
	ajax_xhr.send(post);
	
};

function newHTTPRequest() { 
	if (window.XMLHttpRequest) { 
		 return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		 return new ActiveXObject("Microsoft.XMLHTTP");
	}
};


var HttpRequestObject = false;

if (window.XMLHttpRequest) {
	HttpRequestObject = new XMLHttpRequest();
} else if(window.ActiveXObject) {
	HttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function startProgress(uid) {
	document.getElementById('pb_outer').style.display = 'block';
	setTimeout('getProgress("' + uid + '")', 500);
}

function getProgress(uid) {
if (HttpRequestObject) {
	HttpRequestObject.open('GET', 'getprogress.php?uid=' + uid, true);
	HttpRequestObject.onreadystatechange = function() {
		if (HttpRequestObject.readyState == 4 && HttpRequestObject.status == 200) {
			var progress = HttpRequestObject.responseText;
			document.getElementById('pb_inner').style.width = progress + '%';
			document.getElementById('pb_inner').innerHTML = progress + '%';
			if (progress < 100) {
					setTimeout('getProgress("' + uid + '")', 500);
				} else {
					document.getElementById('pb_inner').innerHTML = 'Upload Complete.';
				}
			}
		}
		HttpRequestObject.send(null);
	}
}

var ote = new Array();

function addOther(n, id) {
	var select_d = document.getElementById('db_' + n);
	select_d.options[select_d.options.length] = new Option(document.getElementById('other_' + n).value,id);
	select_d.selectedIndex = select_d.options.length - 1;
	otherSelected(n, id);
}

function selectOther(n, id) {
	var select_d = document.getElementById('db_' + n);
	for (i = 0; i < select_d.options.length; i++) {
		if (select_d.options[i].value == id) select_d.selectedIndex = i;
	}
	otherSelected(n, id);
}

function otherSelected(n, id) {
	var d = document.getElementById("ote_" + n);
	d.href = ote[n].split('[v]').join(id);
	d.innerHTML = Number(id) ? "EDIT..." : "";
}

function textareaTimestampInsert(n, text) {
	var d = document.getElementById(n);
	d.value=text+': \n\n'+d.value;
	d.focus();
	setSelRange(d, text.length + 2, text.length + 2);
}

function setSelRange(inputEl, selStart, selEnd) { 
	if (inputEl.setSelectionRange) { 
		inputEl.focus(); 
		inputEl.setSelectionRange(selStart, selEnd); 
	} else if (inputEl.createTextRange) { 
		var range = inputEl.createTextRange(); 
		range.collapse(true); 
		range.moveEnd('character', selEnd); 
		range.moveStart('character', selStart); 
		range.select(); 
	} 
}
