var dragobject = null;
var type;
var onchange = "";
var tx;
var ty;

function getReal(e, type, value)
{
	var temp = e;
	while ((temp != null) && (temp.tagName != "BODY"))
	{
		if (eval("temp." + type) == value)
		{
			e = temp;
			return e;
		}
		temp = temp.parentElement;
	}
	return e;
}

function moveme_onmousedown(e)
{
	var e_pointer = null;

	if(!e)
	{
		var e = window.event;
		e_pointer = e.srcElement;
	}
	else
	{
		e_pointer = e.target;
	}

	var tmp = getReal(e_pointer, "className", "sliderHandle");	//Traverse the element tree
	if(tmp.className == "sliderHandle")
	{
		dragobject = tmp;			//This is a global reference to the current dragging object

		onchange = dragobject.getAttribute("onchange");	//Set the onchange function
		if (onchange == null) onchange = "";
		type = dragobject.getAttribute("type");			//Find the type

		if (type=="y")		//Vertical
		{
			if(isNaN(parseInt(dragobject.style.top)))
			{
				dragobject.style.top = 0;
			}

			ty = (e.clientY - parseInt(dragobject.style.top));
		}
		else				//Horizontal
		{
			if(isNaN(parseInt(dragobject.style.left)))
			{
				dragobject.style.left = 0;
			}

			tx = (e.clientX - parseInt(dragobject.style.left));
		}

		e.returnValue = false;
		e.cancelBubble = true;
	}
	else
	{
		dragobject = null;	//Not draggable
	}	
}

function moveme_onmouseup()
{
	if(dragobject)
	{
		dragobject = null;
	}
}

function moveme_onmousemove(e)
{
	var parent = null;

	if(dragobject)
	{
		if(!e)
		{
			var e = window.event;
			parent = dragobject.parentElement;
		}
		else
		{
			parent = dragobject.parentNode;
		}

		if (type=="y")
		{
			if(e.clientY >= 0)
			{
				if ((e.clientY - ty > 0) && (e.clientY - ty < parent.style.pixelHeight - dragobject.style.pixelHeight))
				{
					dragobject.style.top = e.clientY - ty;
				}
				if (e.clientY - ty < 2)
				{
					dragobject.style.top = "0";
				}
				if (e.clientY - ty > parent.style.pixelHeight - dragobject.style.pixelHeight - 2)
				{
					dragobject.style.top = parent.style.pixelHeight - dragobject.style.pixelHeight;
				}

				dragobject.value = dragobject.style.pixelTop / (parent.style.pixelHeight - dragobject.style.pixelHeight);
				eval(onchange.replace(/this/g, "dragobject"));
			}
		}
		else
		{
			if(e.clientX  >= 0)
			{
				if ((e.clientX  - tx > 0) && (e.clientX - tx < parent.clientWidth - dragobject.offsetWidth))
				{
					dragobject.style.left = e.clientX - tx;
				}
				if (e.clientX - tx < 2)
				{
					dragobject.style.left = "0";
				}
				if (e.clientX - tx > parent.clientWidth - dragobject.offsetWidth - 2)
				{
					dragobject.style.left = parent.clientWidth - dragobject.offsetWidth;
				}

				if(isNaN(parseInt(dragobject.style.left)))
				{
					dragobject.style.left = 0;
				}

				dragobject.value = parseInt(dragobject.style.left) / (parent.clientWidth - dragobject.offsetWidth);
				eval(onchange.replace(/this/g, "dragobject"));
			}
		}
		
		e.returnValue = false;
		e.cancelBubble = true;
	} 
}

/*
function setValue(el, val)
{
	alert('test');

	el.value = val;
	if (el.getAttribute("TYPE") == "x")
		el.style.left =  val * (el.parentElement.clientWidth - el.style.pixelWidth);
	else
		el.style.top =  val * (el.parentElement.clientHeight - el.style.pixelHeight);

	eval(el.onchange.replace(/this/g, "el"))
}
*/

document.onmousedown = moveme_onmousedown;
document.onmouseup = moveme_onmouseup;
document.onmousemove = moveme_onmousemove;

document.write('<style type="text/css">\
				.sliderHandle	{position: relative; cursor: default;}\
				</style>');
