var handle_current_object;
var isIE = false;

function handle(element)
{
	this.posx = 0;
	this.posy = 0;
	this.other = 0;
	this.element = element;
	this.parent_slider = 0;
	this.obj_type = 'handle';
	this.o_x = 0;
	this.o_y = 0;
	this.offset_x = 0;
	this.offset_y = 0;
}

handle.prototype.draw = function ()
{
	this.element.obj_ref = this;
	
	if ( this.element.addEventListener ) {
		this.element.addEventListener("mousedown", this.mouse_down, false);
	} else {
		this.element.attachEvent('onmousedown', this.mouse_down, false);
		isIE = true;
	}

	for(x=0; x<this.element.parentNode.childNodes.length;x++) {
		
		if ( this.element.parentNode.childNodes[x].obj_type == 'handle' && this.element.parentNode.childNodes[x] != this.element) {
			this.other = this.element.parentNode.childNodes[x];
		}
	}
	

	//this.parent_slider.moved(x, y, this);
};

handle.prototype.mouse_up = function (event) //Called On Window
{
	if ( window.addEventListener ) {
		//event.target.removeEventListener("mousemove", handle.prototype.mouse_move, false);
		window.removeEventListener("mousemove", handle_current_object.mouse_move, false);
		window.removeEventListener("mouseup", handle_current_object.mouse_up, false);
		window.removeEventListener("mouseout", handle_current_object.mouse_out, false);
		handle_current_object.element.addEventListener("mousedown", handle_current_object.mouse_down, false);
	} else {
		//event.target.detachEvent('mousemove', handle.prototype.mouse_move, false);
		document.detachEvent('onmousemove', handle_current_object.mouse_move, false);
		document.detachEvent('onmouseup', handle_current_object.mouse_up, false);
		document.detachEvent('onmouseout', handle_current_object.mouse_out, false);
		handle_current_object.element.attachEvent('onmousedown', handle_current_object.mouse_down, false);
	}
	
	// determine offsets for both coords
	handle_current_object.offset_x = handle_current_object.posx * 1 - handle_current_object.o_x * 1;
	handle_current_object.offset_y = handle_current_object.posy * 1 - handle_current_object.o_y * 1;
	
	handle_current_object = null;
};

handle.prototype.mouse_down = function (event) //Called On Element
{
	if (isIE)
		handle_current_object = event.srcElement.obj_ref;
	else 
		handle_current_object = this.obj_ref;
	handle_current_object.posx = event.clientX;
	handle_current_object.posy = event.clientY;
	handle_current_object.o_x = parseInt(handle_current_object.element.style.left);
	handle_current_object.o_y = parseInt(handle_current_object.element.style.top);
	
	if ( handle_current_object.element.addEventListener ) {
		handle_current_object.element.removeEventListener("mousedown", handle_current_object.mouse_down, false);
		window.addEventListener("mousemove", handle_current_object.mouse_move, false);
		window.addEventListener("mouseup", handle_current_object.mouse_up, false);
		window.addEventListener("mouseout", handle_current_object.mouse_out, false);
	} else {
		handle_current_object.element.detachEvent('onmousedown', handle_current_object.mouse_down, false);
		document.attachEvent('onmousemove', handle_current_object.mouse_move, false);
		document.attachEvent('onmouseup', handle_current_object.mouse_up, false);
		document.attachEvent("onmouseout", handle_current_object.mouse_out, false);
	}
};

handle.prototype.mouse_out = function (event) //Called On Window
{
	if ( event.clientY < 0 || event.clientY > this.innerHeight || event.clientX < 0 || event.clientX > this.innerWidth)
	{
		if ( window.addEventListener ) {
			window.removeEventListener("mousemove", handle_current_object.mouse_move, false);
			window.removeEventListener("mouseup", handle_current_object.mouse_up, false);
			window.removeEventListener("mouseout", handle_current_object.mouse_out, false);
			handle_current_object.element.addEventListener("mousedown", handle_current_object.mouse_down, false);
		} else {
			document.detachEvent('onmousemove', handle_current_object.mouse_move, false);
			document.detachEvent('onmouseup', handle_current_object.mouse_up, false);
			document.detachEvent('onmouseout', handle_current_object.mouse_up, false);
			handle_current_object.element.attachEvent('onmousedown', handle_current_object.mouse_down, false);
		}
		handle_current_object = null;
	}
	
	
};

handle.prototype.mouse_move = function (event) //Called On Window
{
	y = (event.clientY - handle_current_object.posy) + handle_current_object.o_y;
	x = (event.clientX - handle_current_object.posx) + handle_current_object.o_x;
	

	handle_current_object.parent_slider.moved(x, y, handle_current_object);
	
		
	return false;

};

handle.prototype.move_to = function ( new_pos ) {
	this.element.style.left = new_pos[0];
	this.element.style.top = new_pos[1];
};


function printfire()
{
    if (document.createEvent)
    {
        printfire.args = arguments;
        var ev = document.createEvent("Events");
        ev.initEvent("printfire", false, true);
        dispatchEvent(ev);
    }
}

function get_offsetLeft (el) {
	var offsetLeft = 0;
	el_id = el.id;
	while ( el.offsetParent ) {
		offsetLeft += el.offsetLeft;
		el = el.offsetParent;
	}
	return offsetLeft;
}

function get_offsetTop (el) {
	var offsetTop = 0;
	while ( el.offsetParent) {
		offsetTop += el.offsetTop;
		el = el.offsetParent;
	}
	return offsetTop;
}