//
// QUOSA Information Manager
// Copyright © 2000-2008 QUOSA, Inc.
// All Rights Reserved.
//
var xSplitterMoveMode_H = 0;
var xSplitterMoveMode_V = 1;

function xSplitter(xSplitterId, xTrackersId, xShiftSizes, xMoveMode) {
	var x = this; x.xCursorX = 0; x.xCursorY = 0;
	x.xSplitterId = xGetElementById(xSplitterId);
	x.xTrackersId = xGetElementById(xTrackersId);
	x.xMoveMode   = xMoveMode; x.xShiftSizes = xShiftSizes;
	$(x.xSplitterId.id, x);
	$(x.xTrackersId.id, x);

	x.xOnMouseDown = function () {
		var x = (this.id) ? $(this.id) : this;
		document.body.onselectstart = function () {
			window.event.returnValue = false;
			return false;
		};
		xSetObjRect(x.xTrackersId, xGetObjRect(x.xSplitterId));
		x.xCursorX = xMouseEvents.xCursorX;
		x.xCursorY = xMouseEvents.xCursorY;
		xShow(x.xTrackersId);
		xMouseEvents.xSubscribe(xMouseEvent_OnMove, x.xSplitterId.id,
			function(xCursorX, xCursorY) { x.xOnMouseExMove(x, xCursorX, xCursorY) }
		);
		xMouseEvents.xSubscribe(xMouseEvent_OnUp,   x.xSplitterId.id,
			function() { x.xOnMouseExUp(x) } );
	};

	x.xOnMouseExMove = function (x, xCursorX, xCursorY) {
		if (x.xShiftSizes) {
			var xShiftX = (xCursorX - x.xCursorX);
			var xShiftY = (xCursorY - x.xCursorY);
			xShiftX = (!isNaN(xShiftX) && x.xMoveMode == xSplitterMoveMode_H) ? xShiftX : null;
			xShiftY = (!isNaN(xShiftY) && x.xMoveMode == xSplitterMoveMode_V) ? xShiftY : null;
			var x_result = x.xShiftSizes(xShiftX, xShiftY);
			if (x_result[0] && x.xMoveMode == xSplitterMoveMode_H) {
				xShiftObjX(x.xTrackersId, xShiftX);
				x.xCursorX = xCursorX;
			}
			if (x_result[1] && x.xMoveMode == xSplitterMoveMode_V) {
				xShiftObjY(x.xTrackersId, xShiftY);
				x.xCursorY = xCursorY;
			}
		}
	};

	x.xOnMouseExUp = function (x) {
		x.xOnMouseUp();
	};

	x.xOnMouseUp = function () {
		var x = (this.id) ? $(this.id) : this;
		document.body.onselectstart = null;
		xMouseEvents.xUnSubscribe(xMouseEvent_OnMove, x.xSplitterId.id);
		xMouseEvents.xUnSubscribe(xMouseEvent_OnUp,   x.xSplitterId.id);
		xHide(x.xTrackersId);
	};

	x.xShiftFrameSize = function (xShiftX, xShiftY) {
		var x = this;
		xShiftX = (xShiftX) ? ((x.xMoveMode == xSplitterMoveMode_H) ? 0 : xShiftX ) : 0;
		xShiftY = (xShiftY) ? ((x.xMoveMode == xSplitterMoveMode_V) ? 0 : xShiftY ) : 0;
		xShiftObjSize(x.xSplitterId, xShiftX, xShiftY);
	};

	x.xSetFrameSize = function (xSizeW, xSizeH) {
		var x = this;
		xSizeW = (xSizeW) ? ((x.xMoveMode == xSplitterMoveMode_H) ? null : xSizeW ) : null;
		xSizeH = (xSizeH) ? ((x.xMoveMode == xSplitterMoveMode_V) ? null : xSizeH ) : null;
		xSetObjSize(x.xSplitterId, xSizeW, xSizeH);
	};

	x.xGetFrameSize = function () {
		var x = this; return xGetObjSize(x.xSplitterId);
	}

	x.xShow = function () {
		var x = this; xShow(x.xSplitterId);
	};

	x.xHide = function () {
		var x = this;
		xHide(x.xSplitterId);
		xHide(x.xTrackersId);
	};

	x.xSplitterId.onmousedown = x.xOnMouseDown;
	x.xSplitterId.onmouseup   = x.xOnMouseUp;
	x.xTrackersId.onmousedown = x.xOnMouseDown;
	x.xTrackersId.onmouseup   = x.xOnMouseUp;
	xHide(x.xTrackersId);
}
