///
/// Prefix all global variables with "cxdVar_". Prefix all functions with "cxd_".
///

/**
Global object to hold drag information
*/
var cxdVar_dragObj = new Object();
cxdVar_dragObj.zIndex = 0;

/**
Global object to hold resize information
*/
var cxdVar_resizer = null;

/**
Global object to hold collapse information
*/
var cxdVar_collapser = null

/**
Start dragging
*/
function cxd_dragStart(event, id, fldID, collapseID, contentID, footerID)
{
    var el;
    var x, y;
    
    // If an element id was given, find it.
    // Otherwise use the element being clicked on.

    cxdVar_dragObj.saveElement = document.getElementById(fldID);
    cxdVar_dragObj.collapseElement = document.getElementById(collapseID);
    cxdVar_dragObj.contentElement = document.getElementById(contentID);
    cxdVar_dragObj.footerElement = document.getElementById(footerID);
    if (id)
	    cxdVar_dragObj.elNode = document.getElementById(id);
    else
    {
	    if (cxVarGlobal_browser.isIE)
	        cxdVar_dragObj.elNode = window.event.srcElement;
	    if (cxVarGlobal_browser.isNS)
	        cxdVar_dragObj.elNode = event.target;

	    // If this is a text node, use its parent element.

	    if (cxdVar_dragObj.elNode.nodeType == 3)
	        cxdVar_dragObj.elNode = cxdVar_dragObj.elNode.parentNode;
    }

    // Get cursor position with respect to the page.

    if (cxVarGlobal_browser.isIE)
    {
	    x = window.event.clientX + document.documentElement.scrollLeft
	        + document.body.scrollLeft;
	    y = window.event.clientY + document.documentElement.scrollTop
	        + document.body.scrollTop;
    }
    if (cxVarGlobal_browser.isNS)
    {
	    x = event.clientX + window.scrollX;
	    y = event.clientY + window.scrollY;
    }

    // Save starting positions of cursor and element.

    cxdVar_dragObj.cursorStartX = x;
    cxdVar_dragObj.cursorStartY = y;
    cxdVar_dragObj.elStartLeft = parseInt(cxdVar_dragObj.elNode.style.left, 10);
    cxdVar_dragObj.elStartTop = parseInt(cxdVar_dragObj.elNode.style.top, 10);

    if (isNaN(cxdVar_dragObj.elStartLeft))
        cxdVar_dragObj.elStartLeft = 0;
    if (isNaN(cxdVar_dragObj.elStartTop))
        cxdVar_dragObj.elStartTop  = 0;

    // Update element's z-index.

    cxdVar_dragObj.elNode.style.zIndex = ++cxdVar_dragObj.zIndex;

    // Capture mousemove and mouseup events on the page.

    if (cxVarGlobal_browser.isIE)
    {
	    document.attachEvent("onmousemove", cxd_dragContinue);
	    document.attachEvent("onmouseup", cxd_dragStop);
	    window.event.cancelBubble = true;
	    window.event.returnValue = false;
    }
    if (cxVarGlobal_browser.isNS)
    {
	    document.addEventListener("mousemove", cxd_dragContinue, true);
	    document.addEventListener("mouseup", cxd_dragStop, true);
	    event.preventDefault();
    }
}

/**
Continue with the dragging
*/
function cxd_dragContinue(event)
{
    var x, y;

    // Get cursor position with respect to the page.

    if (cxVarGlobal_browser.isIE)
    {
	    x = window.event.clientX + document.documentElement.scrollLeft
	        + document.body.scrollLeft;
	    y = window.event.clientY + document.documentElement.scrollTop
	        + document.body.scrollTop;
    }
    if (cxVarGlobal_browser.isNS)
    {
	    x = event.clientX + window.scrollX;
	    y = event.clientY + window.scrollY;
    }

    // Move drag element by the same amount the cursor has moved.

    cxdVar_dragObj.elNode.style.left =
        (cxdVar_dragObj.elStartLeft + x - cxdVar_dragObj.cursorStartX) + "px";
    cxdVar_dragObj.elNode.style.top  =
        (cxdVar_dragObj.elStartTop  + y - cxdVar_dragObj.cursorStartY) + "px";

    if (cxVarGlobal_browser.isIE)
    {
	    window.event.cancelBubble = true;
	    window.event.returnValue = false;
    }
    if (cxVarGlobal_browser.isNS)
	    event.preventDefault();
}

/**
Stop capturing mousemove and mouseup events for dragging,
and store the position and size of the element.
*/
function cxd_dragStop(event)
{
    if (cxVarGlobal_browser.isIE)
    {
	    document.detachEvent("onmousemove", cxd_dragContinue);
	    document.detachEvent("onmouseup", cxd_dragStop);
    }
    if (cxVarGlobal_browser.isNS)
    {
	    document.removeEventListener("mousemove", cxd_dragContinue, true);
	    document.removeEventListener("mouseup", cxd_dragStop, true);
    }
    
    cxd_saveState(cxdVar_dragObj.elNode,
        cxdVar_dragObj.saveElement,
        cxdVar_dragObj.collapseElement,
        cxdVar_dragObj.contentElement,
        cxdVar_dragObj.footerElement);
}

/**
Start resizing the element
*/
function cxd_resizeStart(event, resizeObjectID, fldID, collapseID, contentID, footerID)
{
    cxdVar_resizer = new Object();    
	cxdVar_resizer.resizeElement = document.getElementById(resizeObjectID);
	cxdVar_resizer.saveElement = document.getElementById(fldID);
	cxdVar_resizer.collapseElement = document.getElementById(collapseID);
	cxdVar_resizer.width = parseInt(
	    cxdVar_resizer.resizeElement.style.width);
	cxdVar_resizer.height = parseInt(
	    cxdVar_resizer.resizeElement.style.height);
	cxdVar_resizer.contentElement = document.getElementById(contentID);
	cxdVar_resizer.contentHeight = parseInt(
	    cxdVar_resizer.contentElement.style.height);
	cxdVar_resizer.footerElement = document.getElementById(footerID);
	cxdVar_resizer.footerTop = parseInt(
	    cxdVar_resizer.footerElement.style.top);
	
	if (cxVarGlobal_browser.isIE)
	    cxdVar_resizer.dragger = event.srcElement;
	if (cxVarGlobal_browser.isNS)
	    cxdVar_resizer.dragger = event.target;
    if (cxVarGlobal_browser.isIE)
    {
	    document.attachEvent("onmousemove", cxd_resizeContinue);
	    document.attachEvent("onmouseup", cxd_resizeStop);	    
    }
    if (cxVarGlobal_browser.isNS)
    {
	    document.addEventListener("mousemove", cxd_resizeContinue, true);
	    document.addEventListener("mouseup", cxd_resizeStop, true);	    
    }				
	cxd_dragStart(event, null);
}

/**
Continue resizing the element
*/
function cxd_resizeContinue()
{							
	var left,top,w,h,ch,ft;
	
	left = parseInt(cxdVar_resizer.dragger.style.left);
	top = parseInt(cxdVar_resizer.dragger.style.top);
	w = parseInt(cxdVar_resizer.width) + left;
	h = parseInt(cxdVar_resizer.height) + top;		
	ch = parseInt(cxdVar_resizer.contentHeight) + top;
	ft = parseInt(cxdVar_resizer.footerTop) + top;
	if (w > 0)
	    cxdVar_resizer.resizeElement.style.width = w.toString() + "px";
	if (h > 0)
	    cxdVar_resizer.resizeElement.style.height = h.toString() + "px";
	if (ch > 0)
	    cxdVar_resizer.contentElement.style.height = ch.toString() + "px";
	if (ft > 0)
	    cxdVar_resizer.footerElement.style.top = ft.toString() + "px";
}

/**
Detach the resize events, stop resizing, and store the position and size
*/
function cxd_resizeStop()
{    
	if (cxVarGlobal_browser.isIE)
	{
	    document.detachEvent("onmousemove", cxd_resizeContinue);
	    document.detachEvent("onmouseup", cxd_resizeStop);
    }
    if (cxVarGlobal_browser.isNS)
    {
	    document.removeEventListener("mousemove", cxd_resizeContinue, true);
	    document.removeEventListener("mouseup", cxd_resizeStop, true);
    }	
	cxdVar_resizer.dragger.style.left = null;
	cxdVar_resizer.dragger.style.top = null;
	
	cxd_saveState(cxdVar_resizer.resizeElement,
	    cxdVar_resizer.saveElement,
	    cxdVar_resizer.collapseElement,
	    cxdVar_resizer.contentElement,
	    cxdVar_resizer.footerElement);
}

/**
Hide the element, optionally canceling the event.
*/
function cxd_hideDlg(event, dlgID, continueEvent)
{
	document.getElementById(dlgID).style.visibility = "hidden";
	if (!continueEvent)
	{
        if (cxVarGlobal_browser.isIE)
        {
	        window.event.cancelBubble = true;
	        window.event.returnValue = false;
        }
        if (cxVarGlobal_browser.isNS)
        {
	        event.preventDefault();
	    }
	}
}

/**
Show the element
*/
function cxd_showDlg(dlgID)
{		
	document.getElementById(dlgID).style.visibility = "visible";
}

/**
Collapse or expand the dialog
*/
function cxd_collapseExpand(dlgID, fldID, collapseHt, defaultHt)
{
    var dlg = document.getElementById(dlgID);
    var fld = document.getElementById(fldID);
    var currHt = dlg.style.height;
    if (null == currHt || currHt.toString == "")
        currHt = defaultHt;
    var oldHt = fld.value;
    if (oldHt.toString() == "")
    {
        //--Collapse it
        fld.value = currHt;
        dlg.style.overflow = "hidden";
        dlg.style.height = collapseHt;
    }
    else
    {
        //--Expand it
        dlg.style.overflow = "visible";
        dlg.style.height = oldHt;
        fld.value = "";
    }
}

/**
Store position and size information - internal use only
*/
function cxd_saveState(dlg, fld, clpse, content, footer)
{
    var ht = clpse.value;
    if (null == ht || ht.toString() == "")
        ht = dlg.style.height;
    fld.value = dlg.style.left + "," + dlg.style.top + "," +
        dlg.style.width + "," + ht + "," + content.style.height + "," +
        footer.style.top;
}