var ie=document.all;
var nn6=document.getElementById&&!document.all;
var xhr;
var requestQueue = [];

function startRequest(url,params,callback)
{
	startAjaxRequest(url,params,callback,false);
}
function startAjaxRequest(url, params, callback, preempt)
{
	if(xhr && xhr.readyState != 4 && !preempt)
	{
		/*window.setTimeout(function (_url, _params, _callback)
									{
										return function()
										{
											startRequest(_url,_params,_callback);
										}
									}(url, params, callback)
									,500);
		*/
		ajax(params,false,false,callback);
		return;
	}
	try     // Object of the current windows
	{ 
		xhr = new XMLHttpRequest();     // Firefox, Safari, ...
	} 
	catch(error)   // ActiveX version
	{
		xhr = new ActiveXObject("Microsoft.XMLHTTP");  // Internet Explorer 
	}
	if(params.length > 0)
	{
		params += '&';
	}
	params += 'dummy=' + (new Date()).getTime();
	xhr.open('POST', url, true);                  
	//Send the proper header information along with the request
	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr.setRequestHeader("Content-length", params.length);
	xhr.setRequestHeader("Connection", "close");

	xhr.onreadystatechange = callback;

	xhr.send(params); 

}
function ajax(params,first,clear,callback)
{
	var req = {'url':'/ajax.php','params':params,'callback':callback};
	if(clear)
	{
		requestQueue = [];
	}
	if(first)
	{
		startAjaxRequest(req['url'],req['params'],req['callback'],true);
	}
	else
	{
		requestQueue.push(req);
	}
}
function ajaxQueueFunction()
{
	if(requestQueue.length > 0)
	{
		var req = requestQueue.shift();
		startRequest(req['url'],req['params'],req['callback']);
	}
	window.setTimeout('ajaxQueueFunction()',100);
}
ajaxQueueFunction();


function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : 
        oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

var posCache = new Object();
var styleTopOffset = 0;
var styleLeftOffset = 0;
function findPos(obj) {
	if(!obj)
	{
		return false;
	}
	if(obj.id == '' || !posCache[obj.id])
	{
		var curleft = curtop = 0;

		do{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}while (obj.offsetParent);
		curleft += obj.offsetLeft;
		curtop += obj.offsetTop;
		
		// Get the wrapper margin that some styles have
		var os = getWrapOffset();
		if(os)
		{
			curleft -= os[0];
			curtop -= os[1];
		}
		posCache[obj.id] = [curleft,curtop];
	}
	return posCache[obj.id];
}
function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX , scrOfY ];
}

function getWrapOffset()
{
	var obj = document.getElementById('wrap')
	if(!obj)
	{
		obj = document.getElementById('wrapper');	
	}
	
	var out = [0, 0];
	if(obj)
	{
		out = [];
		if(nn6)
		{
			out[0] = parseInt(document.defaultView.getComputedStyle(obj,null).getPropertyValue('margin-left'));
			out[1] = parseInt(document.defaultView.getComputedStyle(obj,null).getPropertyValue('margin-top'));
		}else{
			out[0] = parseInt(obj.currentStyle['marginLeft']);
			out[1] = parseInt(obj.currentStyle['marginTop']);
		}
		if(isNaN(out[0]))
		{
			out[0] = 0;
		}
		if(isNaN(out[1]))
		{
			out[1] = 0;
		}
		out[0] -= styleLeftOffset;
		out[1] -= styleTopOffset;
	}
	return out;
}
