// The following variables need to be set.
var rubber_canDoZoomWinFunc;
var rubber_onZoomWinFunc;
var rubber_top = 0;
var rubber_left = 0;
var rubber_width = 0;
var rubber_height = 0;
var rubber_margin = 0;

function startRubber(evt)
{
	if (!rubber_canDoZoomWinFunc()) return;
	
	// IE Explorer.
	var x, y;
	if (document.all)
	{
		x = event.x;
		y = event.y;
		if (!inBounds(x, y)) return;

		var r = document.all.rubberBand;
		r.style.width = 0;
		r.style.height = 0;
		r.style.pixelLeft = x;
		r.style.pixelTop  = y;
		r.style.visibility = 'visible';
	}
	// Mozilla.
	else if (document.getElementById)
	{
		x = evt.clientX;
		y = evt.clientY;
		if (!inBounds(x, y)) return;

		var r = document.getElementById('rubberBand');
		r.style.width = 0;
		r.style.height = 0;
		r.style.left = x + 'px';
		r.style.top = y + 'px';
		r.style.visibility = 'visible';
	}
	// Old Netscape?
	else if (document.layers)
	{
		x = evt.x;
		y = evt.y;
		if (!inBounds(x, y)) return;
		
		var r = document.rubberBand;
		r.clip.width = 0;
		r.clip.height = 0;
		r.left = x;
		r.top = y;
		r.visibility = 'show';
	}
   
	if (document.layers)
	{
		document.captureEvents(Event.MOUSEMOVE);
		document.captureEvents(Event.MOUSEUP);
	}

	document.onmousemove = moveRubber;
	document.onmouseup = stopRubber;
}
 
 
function moveRubber(evt)
{
	var x, y, r, w, h;
	if (document.all)
	{
		x = event.x;
		y = event.y;

		r = document.all.rubberBand;

		w = adjustDim(x - r.style.pixelLeft);
		h = adjustDim(y - r.style.pixelTop);

		if (inX(x))
			r.style.width = w;
		if (inY(y))
			r.style.height = h;
	}
	else if (document.getElementById)
	{
		x = evt.clientX;
		y = evt.clientY;
		
		r = document.getElementById('rubberBand');

		w = adjustDim(evt.clientX - parseInt(r.style.left));
		h = adjustDim(evt.clientY - parseInt(r.style.top));

		if (inX(x))
			r.style.width = w;
		if (inY(y))
			r.style.height = h;
	}
	else if (document.layers)
	{
		x = evt.x;
		y = evt.y;
		
		r = document.rubberBand;

		w = adjustDim(x - r.left);
		h = adjustDim(y - r.top);
		
		if (inX(x))
			r.clip.width = w;
		if (inY(y))
			r.clip.height = h;
		
		r.document.open();
		r.document.write('<table width="' + r.clip.width + '" height="' + r.clip.height + '" border="1"><tr><td><\/td><\/tr><\/table>');
		r.document.close();
	}
}
 
 
function stopRubber(evt)
{
	if (document.layers)
	{
		document.releaseEvents(Event.MOUSEMOVE);
		document.releaseEvents(Event.MOUSEUP);
	}

	document.onmousemove = null;
	document.onmouseup = null;

	var x1, y1, x2, y2;
	if (document.all)
	{
		var r = document.all.rubberBand;
		x1 = parseInt(r.style.pixelLeft) - rubber_left;
		y1 = parseInt(r.style.pixelTop) - rubber_top;
		x2 = x1 + parseInt(r.style.width);
		y2 = y1 + parseInt(r.style.height);
	}
	else if (document.getElementById)
	{
		var r = document.getElementById("rubberBand");
		x1 = parseInt(r.style.left) - rubber_left;
		y1 = parseInt(r.style.top) - rubber_top;
		x2 = x1 + parseInt(r.style.width);
		y2 = y1 + parseInt(r.style.height);
	}
	else if (document.layers)
	{
		var r = document.rubberBand;
		x1 = r.left - rubber_left;
		y1 = r.top - rubber_top;
		x2 = x1 + r.clip.width;
		y2 = y1 + r.clip.height;
	}

	rubber_onZoomWinFunc(x1, y1, x2, y2);
}
 
 
function inBounds(x, y)
{
	return (inX(x) && inY(y));
}

function inX(x)
{
	return (x >= (rubber_left + rubber_margin) && x <= (rubber_left + rubber_width - rubber_margin));
}

function inY(y)
{
	return (y >= (rubber_top + rubber_margin) && y <= (rubber_top + rubber_height - rubber_margin));
}

function adjustDim(dim)
{
	if (dim < 0)
		return 0;
	else
		return dim;
}

document.onmousedown = startRubber;