var ray_url = "http://disabilitylink.net/friends/ray/";
var ray_xml_name = "get_xml.php";
var imn_height = 200;
var d = 10;
var pos_hide = -9999;
var foo = 0;
var food = 1;

var checkInterval = 3000;
var waitInterval = 15000;
var checkState = 0; // 0 - checking, 1 - suspending
var opponentID = 0;
var timeoutID = -1;

var hcNS = (document.layers) ? true : false;
var hcIE = (document.all) ? true : false;
var hcDOM = (document.getElementById) ? true : false;
if (hcIE)
	hcDOM = false;
var hcMAC = (navigator.platform) && (navigator.platform.toUpperCase().indexOf("MAC") >= 0);
if (hcNS)
	hcMAC = false;

var gl_sx = 0;
var gl_sy = 0;

function sendRequest(action, ID, Opp)
{
	var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			if (action == 'check_invite')
			{
				var responseNode = req.responseXML.documentElement;
				var connectionNode = responseNode.getElementsByTagName('connection');
				if (connectionNode[0].getAttribute('avail') == 'yes')
				{
					checkState = 1;
					if (timeoutID != -1)
					{
						clearTimeout(timeoutID);
						timeoutID = -1;
					}
					opponentID = connectionNode[0].getAttribute('Opponent');
					document.getElementById('imInviteNicknameId').innerHTML = connectionNode[0].getAttribute('NickName');
					document.getElementById('imInviteMsgId').innerHTML = connectionNode[0].getAttribute('Msg');
					document.getElementById('imInviteImageId').src = connectionNode[0].getAttribute('Img');
					document.getElementById('imInviteUrlId').href = connectionNode[0].getAttribute('Url') + '?ID=' + opponentID;
					ray_invite_DoFSCommand('show', '');
				}
			}
			else if (action == 'delete_pend')
			{
				// do nothing as no response supposed
			}
		}
	}
	var requestURL = ray_url + ray_xml_name + '?action=' + action + '&ID=' + ID;
	if (typeof(Opp) == 'number' && Opp > 0
		|| typeof(Opp) == 'string' && Opp.length > 0)
			requestURL = requestURL + '&Opp=' + Opp;
	req.open("GET", requestURL, true);
	req.send(null);
}

function checkInvite(ID)
{
	if (checkState == 0)
	{
		sendRequest('check_invite', ID, '');
		timeoutID = setTimeout('checkInvite(' + ID + ')', checkInterval);
	}
}

function acceptInvitation(ID)
{
	ray_invite_DoFSCommand('hide', '');
	IMOpen('?ID=' + ID + '&Opponent=' + opponentID);
	checkState = 0;
	timeoutID = setTimeout('checkInvite(' + ID + ')', waitInterval);
}

function declineInvitation(ID)
{
	ray_invite_DoFSCommand('hide', '');
	sendRequest('delete_pend', opponentID, ID);
	checkState = 0;
	timeoutID = setTimeout('checkInvite(' + ID + ')', waitInterval);
}

function onScrollHandler()
{
	var obj = document.getElementById('flcontainer');
	var sx = 0;
	var sy = 0;
	
	if (hcIE)
	{
		eval('try {' +
			'if (typeof(document.documentElement) != "undefined") {' +
			'scrollPosY = document.documentElement.scrollTop;' +
			'scrollPosX = document.documentElement.scrollLeft;' +
			'}' +
			'} catch (e) {}');
		sy = Math.max(document.body.scrollTop, scrollPosY);
		sx = Math.max(document.body.scrollLeft, scrollPosX);
    }
    else if (hcNS)
    {
    	sx = pageXOffset;
    	sy = pageYOffset;
    }
    else if (hcDOM)
    {
    	sx = pageXOffset;
    	sy = pageYOffset;
    }
    
    if (gl_sx != sx || gl_sy != sy)
    {
    	if ( parseInt(obj.style.top) > pos_hide )
    	{
    		obj.style.top = sy + foo + "px";
    		obj.style.left = sx + "px";
    		
    		gl_sx = sx;
    		gl_sy = sy;
    		
    		foo += food;
    		if (10 == foo) food = -1;
    		if ( 0 == foo) food = 1;
    	}
    }
    
    setTimeout('onScrollHandler()', 250);
}

function IMOpen(GETvars)
{
	var win = "width=400,height=500,left=100,top=100,copyhistory=no,directories=no,menubar=no,location=no,resizable=no,scrollbars=yes";
	window.open(ray_url + "im_popup.php" + GETvars, "im" + parseInt(Math.random()*100000), win);
}

function IMInvitationShow(bool, pos)
{
	var obj = document.getElementById('flcontainer');
	var sx = 0;
	var sy = 0;
	
	if (!pos)
	{
		onScrollHandler();
	}
	
	if (!bool)
	{
		obj.style.top = pos_hide + 'px';
		return;
	}
	
	if (hcIE)
	{
		eval('try {' +
			'if (typeof(document.documentElement) != "undefined") {' +
			'scrollPosY = document.documentElement.scrollTop;' +
			'scrollPosX = document.documentElement.scrollLeft;' +
			'}' +
			'} catch (e) {}');
		sy = Math.max(document.body.scrollTop, scrollPosY);
		sx = Math.max(document.body.scrollLeft, scrollPosX);
	}
	else if (hcNS)
	{
		sx = pageXOffset;
		sy = pageYOffset;
	}
	else if (hcDOM)
	{
		sx = pageXOffset;
		sy = pageYOffset;
	}
	
	obj.style.top = String (-imn_height + pos + sy) + 'px';
	obj.style.left = sx + 'px';
	
	pos += d;
	
	if (pos <= imn_height)
	{
		setTimeout('IMInvitationShow(' + bool + ',' + pos + ')', 50);
	}
}


function ray_invite_DoFSCommand(command, args)
{
	if ("show" == command)
	{
		var obj = document.getElementById ('flcontainer');
		obj.style.top = "-200px";
		IMInvitationShow(true, 0);
	}
	else if ("hide" == command)
	{
		IMInvitationShow(false, 0);
	}
	else if ("imopen" == command)
	{
		IMOpen(args);
	}
}