/*!
 * ListFields repositioning
 * require_once('static/js/base/base');
 * @author Tomas Simonaitis, 2006
 */

var inmovetbl = null;
var inmovediv = null;
var handledtbl = null;
var moveurl = null;
var moveurlparams = null;

/*!
 * Should be called on table header mousedown
 * Initiates column drag
 */
function startFLMove(event, th, tblclass, url, params)
{
	moveurl = url;
	moveurlparams = params;
	var thobj = $(th);
	handledtbl = getElementTable(thobj);

	var cid = 0;
	for (cid = 0; cid < handledtbl.rows[0].cells.length && handledtbl.rows[0].cells[cid] != thobj; cid++);;

	if (!inmovetbl) {
		inmovediv = document.createElement('div');
		inmovediv.className = handledtbl.parentNode.className;
		inmovediv.style.position = 'absolute';

		inmovetbl = tableFromColumn(handledtbl, cid);
		inmovetbl.className = tblclass;

		if (document.body.addEventListener) {
			document.body.addEventListener("mousemove", onDragColumn, false);
			document.body.addEventListener("mouseup", onStopDragColumn, false);
			document.addEventListener("mousemove", onDragColumn, false);
			document.addEventListener("mouseup", onStopDragColumn, false);
		} else {
			document.body.attachEvent("onmousemove", onDragColumn);
			document.body.attachEvent("onmouseup", onStopDragColumn);
			document.attachEvent("onmousemove", onDragColumn);
			document.attachEvent("onmouseup", onStopDragColumn);
		}

		deleteColumn(handledtbl, cid);
		onDragColumn(event);

		inmovediv.appendChild(inmovetbl);
		document.body.appendChild(inmovediv);
	}

	return false;
}


/*!
 * 
 */
function stopFLMove(url, params)
{
	var i;
	for (i = 0; i < handledtbl.rows[0].cells.length; i++)
		if (handledtbl.rows[0].cells[i].id)
			params = params + '&' + handledtbl.rows[0].cells[i].id + '=' + (i + 1);

	new Ajax.Request(
			url, 
			{
			  method: 'get',
			  parameters: params
			}
		        );
}


/*!
 * Delete all cells with specified ID emulating column removal
 * Works for simple tables only
 */
function deleteColumn(tblobj, cid)
{
	var i;
	for (i = 0; i < tblobj.rows.length; i++)
		tblobj.rows[i].deleteCell(cid);
}


function tableFromColumn(tblobj, cid)
{
	var newtbl = document.createElement('table');

	var i;
	for (i = 0; i < tblobj.rows.length; i++) {
		var newrow = newtbl.insertRow(i);
		newrow.className = tblobj.rows[i].className;
		var newcell = newrow.appendChild(tblobj.rows[i].cells[cid].cloneNode(true));
	}

	return newtbl;
}


function onDragColumn(event)
{
	var pos = getEventPos(event);
	if (inmovediv) {
		inmovediv.style.left = (pos.x - 4) + 'px';
		inmovediv.style.top = (pos.y - 2) + 'px';
		return false;
	}
}


function onStopDragColumn(event)
{
	if (inmovetbl) {
		var pos = getEventPos(event);
		var i, l;
		var acell = 0;

		for (i = 0; i < handledtbl.rows.length; i++)
			for (l = 0; l < handledtbl.rows[i].cells.length; l++)
				if (Position.within(handledtbl.rows[i].cells[l], pos.x, pos.y)) {
					acell = l;
					break;
				}

		for (i = 0; i < handledtbl.rows.length; i++)
			handledtbl.rows[i].insertBefore(inmovetbl.rows[i].cells[0].cloneNode(true), handledtbl.rows[i].cells[acell]);
			
		document.body.removeChild(inmovediv);
		inmovetbl = null;
		inmovediv = null;
		stopFLMove(moveurl, moveurlparams);
		return false;
	}
}

