// x_draw.js, X v3.15.2, Cross-Browser.com DHTML Library
// Copyright (c) 2004 Michael Foster, Licensed LGPL (gnu.org)
// based on x_drag.js (this file created by cg)

var xDrawMgr = {ele:null, mm:false};

function xEnableDraw(canvas, id, fnDrawStart, fnDraw, fnDrawEnd)
{
	var canvas_ele = xGetElementById(canvas);
  var ele = xGetElementById(id);
  ele.xDrawCanvasLeft = xPageX(canvas_ele);
  ele.xDrawCanvasRight = xPageX(canvas_ele) + xWidth(canvas_ele);
  ele.xDrawCanvasTop = xPageY(canvas_ele);
  ele.xDrawCanvasBottom = xPageY(canvas_ele) + xHeight(canvas_ele);
  ele.xOnDrawStart = fnDrawStart;
  ele.xOnDraw = fnDraw;
  ele.xOnDrawEnd = fnDrawEnd;
  xAddEventListener(canvas_ele, 'mousedown', xdrawOnMousedown, false);
  if (!xDrawMgr.mm) {
    xDrawMgr.ele = ele;
    xDrawMgr.mm = true;
  }
}
function xdrawOnMousedown(e) // Draw start
{
  var evt = new xEvent(e);
		ele = xDrawMgr.ele;
    if (e && e.preventDefault) e.preventDefault();
    else if (window.event) window.event.returnValue = false;
    ele.xDrawLeft = evt.pageX;
    ele.xDrawTop = evt.pageY;
    xLeft(ele, evt.pageX - ele.xDrawCanvasLeft);
    xTop(ele, evt.pageY - ele.xDrawCanvasTop);
    xResizeTo(ele, 0, 0);
    xShow(ele);
    xAddEventListener(document, 'mouseup', xdrawOnMouseup, false);
    xAddEventListener(document, 'mousemove', xdrawOnMousemove, false);
    if (ele.xOnDrawStart) {
      ele.xOnDrawStart(ele, evt.pageX, evt.pageY);
    }
}
function xdrawOnMousemove(e) // Draw
{
  var evt = new xEvent(e);
  if (xDrawMgr.ele) {
    if (e && e.preventDefault) e.preventDefault();
    else if (window.event) window.event.returnValue = false;
    var ele = xDrawMgr.ele;
    var dx = evt.pageX - ele.xDrawLeft;
    var dy = evt.pageY - ele.xDrawTop;
    xDrawBox(evt);
    if (ele.xOnDraw) {
      ele.xOnDraw(ele, dx, dy);
    }
  }
}
function xdrawOnMouseup(e) // Draw end
{
  if (xDrawMgr.ele) {
    if (e && e.preventDefault) e.preventDefault();
    else if (window.event) window.event.returnValue = false;
    xRemoveEventListener(document, 'mouseup', xdrawOnMouseup, false);
    xRemoveEventListener(document, 'mousemove', xdrawOnMousemove, false);
    if (xDrawMgr.ele.xOnDrawEnd) {
      var evt = new xEvent(e);
      ele.xOnDrawEnd(xDrawMgr.ele, evt.pageX, evt.pageY);
    }
  }
}

//cgstuff
function xDisableDraw(canvas, id)
{
	var canvas_ele = xGetElementById(canvas);
  xRemoveEventListener(canvas_ele, 'mousedown', xdrawOnMousedown, false);
  xDrawMgr.ele = null;
  xDrawMgr.mm = false;
}

function xDrawBox(evt) {
	var ele = xDrawMgr.ele;
  var dx = evt.pageX - ele.xDrawLeft;
  var dy = evt.pageY - ele.xDrawTop;
  var boxLeft;
  var boxRight;
  var boxWidth;
  var boxHeight;
	if ((dx >= 0) && (dy >= 0)) {
		if (evt.pageX > ele.xDrawCanvasRight) boxWidth = ele.xDrawCanvasRight - ele.xDrawLeft;
		else boxWidth = dx;
		if (evt.pageY > ele.xDrawCanvasBottom) boxHeight = ele.xDrawCanvasBottom - ele.xDrawTop;
		else boxHeight = dy;
		xLeft(ele, ele.xDrawLeft - ele.xDrawCanvasLeft);
		xTop(ele, ele.xDrawTop - ele.xDrawCanvasTop);
		xResizeTo(ele, boxWidth, boxHeight);
	}
  else if ((dx < 0) && (dy < 0)) {
	  if (evt.pageX < ele.xDrawCanvasLeft) boxLeft = 0;
	  else boxLeft = evt.pageX - ele.xDrawCanvasLeft;
	  if (evt.pageY < ele.xDrawCanvasTop) boxTop = 0;
	  else boxTop = evt.pageY - ele.xDrawCanvasTop;
		if (ele.xDrawCanvasLeft > evt.pageX) boxWidth = ele.xDrawLeft - ele.xDrawCanvasLeft;
		else boxWidth = -dx;
		if (ele.xDrawCanvasTop > evt.pageY) boxHeight = ele.xDrawTop - ele.xDrawCanvasTop;
		else boxHeight = -dy;
	  xLeft(ele, boxLeft);
	  xTop(ele, boxTop);
	  xResizeTo(ele, boxWidth, boxHeight);
  }
  else if (dx < 0) {
	  if (evt.pageX < ele.xDrawCanvasLeft) boxLeft = 0;
	  else boxLeft = evt.pageX - ele.xDrawCanvasLeft;
		if (ele.xDrawCanvasLeft > evt.pageX) boxWidth = ele.xDrawLeft - ele.xDrawCanvasLeft;
		else boxWidth = -dx;
		if (evt.pageY > ele.xDrawCanvasBottom) boxHeight = ele.xDrawCanvasBottom - ele.xDrawTop;
		else boxHeight = dy;
	  xLeft(ele, boxLeft);
	  xTop(ele, ele.xDrawTop - ele.xDrawCanvasTop);
	  xResizeTo(ele, boxWidth, boxHeight);
  }
  else if (dy < 0) {
	  if (evt.pageY < ele.xDrawCanvasTop) boxTop = 0;
	  else boxTop = evt.pageY - ele.xDrawCanvasTop;
		if (evt.pageX > ele.xDrawCanvasRight) boxWidth = ele.xDrawCanvasRight - ele.xDrawLeft;
		else boxWidth = dx;
		if (ele.xDrawCanvasTop > evt.pageY) boxHeight = ele.xDrawTop - ele.xDrawCanvasTop;
		else boxHeight = -dy;
		xLeft(ele, ele.xDrawLeft - ele.xDrawCanvasLeft);
	  xTop(ele, boxTop);
	  xResizeTo(ele, boxWidth, boxHeight);
  }
}

