/* Wrapper function for construction a request object.
	Parameters:
		reqType: The HTTP request type, such as GET or POST
		url: The URL of the server program.
		handler: The function that will handle the state changes.
		asynch: Whether to send the request asynchronously or not.
*/
function httpRequest(reqType,url,handler,asynch) {
	// Mozilla-based browsers
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	}
	// IE
	else if (window.AciveXObject) {
		request = new ActiveXObject("Msxml2.XMLHTTP");
		if (!request) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	// browser does not support AJAX scripting
	if (!request) {
		return;
	}
	
	request.onreadystatechange=handler;
	request.open(reqType,url,asynch);
	request.send(null);
	return request;
}

var request;
var url = 'update_lyric_positions.cfm?'; // The server-side script
var ie=document.all;
var nn6=document.getElementById&&!document.all;
var isdrag=false;
var x,y;
var dobj;

function handleHttpResponse() {
	var line;
	var xobj;
	if (request.readyState != 4) { return false; }
	lines = request.responseText.split('|');
	i = 0;
	for (i; i < lines.length; i++) {
		line = lines[i].replace(/\s*/g, '');
		if (line == '') { break; }

		worddata = line.split(',');
		xobj = document.getElementById(worddata[0]);
		xobj.style.left = worddata[1]+'px';
		xobj.style.top = worddata[2]+'px';
	}
}

function scrollToCoordinates() {
	window.scrollTo(0, 0);
} 

function movemouse(e)
{
	if (isdrag)
	{
		setX = nn6 ? tx + e.clientX - x : tx + event.clientX - x;
		setY = nn6 ? ty + e.clientY - y : ty + event.clientY - y;
		if (setX < 0) { setX = 0; }
		if (setY < 0) { setY = 0; }
		dobj.style.left = setX + 'px';
		dobj.style.top  = setY + 'px';
		document.lyrics.x.value = setX;
		document.lyrics.y.value  = setY;
		return false;
	}
}

function selectmouse(e)
{
	var fobj       = nn6 ? e.target : event.srcElement;
	var topelement = nn6 ? "HTML" : "BODY";
	while (fobj.tagName != topelement && fobj.className != "drag")
	{
		fobj = nn6 ? fobj.parentNode : fobj.parentElement;
	}
	if (fobj.className=="drag")
	{
		isdrag = true;
		dobj = fobj;
		var txStr = dobj.style.left;
		var tyStr = dobj.style.top;
		if (txStr.indexOf('px') >= 0) {
			txStr = txStr.substring(0, txStr.indexOf('px'));
		}
		if (tyStr.indexOf('px') >= 0) {
			tyStr = tyStr.substring(0, tyStr.indexOf('px'));
		}
		tx = parseInt(txStr);
		ty = parseInt(tyStr);
		x = nn6 ? e.clientX : event.clientX;
		y = nn6 ? e.clientY : event.clientY;
		document.onmousemove=movemouse;
		return false;
	}
}

function unselmouse(e)
{
	isdrag=false;
	if (dobj == null) { return; }
	var w = dobj.id;
	var song_id = document.lyrics.song_id.value;
	var wx = document.lyrics.x.value;
	var wy = document.lyrics.y.value;
	var qstring = 'song_id=' + song_id + '&lyric_id=' + w + '&x=' + wx + '&y=' + wy;
	request = httpRequest('GET', url+qstring, handleHttpResponse, true);
}
document.onmousedown=selectmouse;
document.onmouseup=unselmouse;

var IE = document.all?true:false;
if (!IE) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = getMouseXY;

var tempX = 0;
var tempY = 0;
function getMouseXY(e) {
	if (IE) 
	{  // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.body.scrollLeft;
		tempY = event.clientY + document.body.scrollTop;
	}
	else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX;
		tempY = e.pageY;
	}  
	if (tempX < 0){tempX = 0;}
	if (tempY < 0){tempY = 0;}
	document.lyrics.x.value = tempX + -54;
	document.lyrics.y.value = tempY + -12;
	return true;
}

