//Menu
var children = new Array() ;
function launchChild (url, name, attributes)
{
	var child = window.open(url,name,attributes) ;
	children[children.length] = child ;
	if (child.opener==null)
		child.opener = window ;
}
function closeChildren ()
{
	for (var i = 0 ; i < children.length ; ++i)
		children[i].close() ;
}

function findPosition (o)
{
	if (o.offsetParent)
	{
		for (var x = 0, y = 0; o.offsetParent; o = o.offsetParent)
		{
			x += o.offsetLeft;
			y += o.offsetTop;
		}
		return [x,y];
	}
	else
	{
		return [o.x,o.y] ;
	}
}


function showMenu (subMenuId,oId,h)
{
	var subMenu = document.getElementById(subMenuId) ;
	var o = document.getElementById(oId) ;
	var p = findPosition(o) ;
	subMenu.style.top = p[1]+h ;
	subMenu.style.left = p[0] ;
	subMenu.style.visibility = "visible" ;	
}
function hideMenu (menuId)
{
	var menu = document.getElementById(menuId) ;
	menu.style.visibility = "hidden" ;	
}

function submitTo (form, url)
{
	form.action=url ;
	form.submit() ;
}

//HTTP
function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	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);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

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;
		}
		break;
	}
	return xmlhttp;
}
