  
/*
 * GLOBAL VARIABLES
 ******************************************************/
var mouseDrag = false;    // TRUE when mouse is pressed
var maction;

var downX, downY;
var upX, upY;
var moveX, moveY;

if (document.all) {
    var zBorder = 0;
} else {
    var zBorder = 4;
}

/*
 * DEFINE MOUSE ACTIONS, CALLED AS 'ONLOAD' SCRIPT
 ******************************************************/
function startUp() {
    document.onmousedown = doMouseDown;
    document.onmouseup   = doMouseUp;
    document.onmousemove = doMouseMove;
    document.ondblclick  = doMouseDblClick;  // used for measure area, comment out if area measurement not wanted
}


/*
 * FUNCTIONS TO GET MOUSE POSITIONS
 ******************************************************/
// For MouseDown
function getDownXY(e) {
    if (document.all) {
        downX = event.clientX;
        downY = event.clientY;
    } else {
        downX = e.pageX;
        downY = e.pageY;
    }
    // subtract offsets from left and top
    downX = downX - offsX;
    downY = downY - offsY;         
}

// For MouseUp
function getUpXY(e) {
    if (document.all) {
        upX = event.clientX;
        upY = event.clientY;
    } else {
        upX = e.pageX;
        upY = e.pageY;
    }
    // subtract offsets from left and top and don't go outside of map
    if (!refmapClick) {
        upX = Math.min(upX - offsX, mapW);
        upY = Math.min(upY - offsY, mapH);
    } else {
        upX = upX - offsX;
        upY = upY - offsY;
    }
    /*upX = Math.max(Math.min(upX - offsX, mapW), offsX);
    upY = Math.max(Math.min(upY - offsY, mapH), offsY);    */        
}

// For MouseMove
function getMoveXY(e) {
    if (document.all) {
        moveX = event.clientX;
        moveY = event.clientY;
    } else {
        moveX = e.pageX;
        moveY = e.pageY;
    }
    // subtract offsets from left and top
    /*moveX = Math.min(moveX - offsX, mapW);
    moveY = Math.min(moveY - offsY, mapH); */
    moveX = moveX - offsX;
    moveY = moveY - offsY;             
}


/*
 * BASIC MOUSE FUNCTIONS: DOWN, UP, MOVE
 ******************************************************/

function doMouseDown(e) {
    mouseDrag = true;
    getDownXY(e);    
    return false;
}


function doMouseUp(e) {
    mouseDrag = false;
    getUpXY(e);

    // Click in main map
    if (!refmapClick) {
        maction =  document.myform.CMD.value;
        if (maction == 'measure') {
            measureDrawSymbols(e, upX, upY, 0);

        } else if (maction == 'RECENTER'){
            var diffX = upX - downX;
            var diffY = upY - downY;
						 // pan with click
           if (diffX == 0 && diffY == 0) {
                var newX = upX;
                var newY = upY;
            // pan with drag
            } else {
                var newX = (mapW / 2) - diffX ;
                var newY = (mapH / 2) - diffY;
            }
            //alert(newX + '  -  ' + newY);
            zoombox_apply(newX, newY, newX, newY);
			//zoombox_apply(downX, downY, upX, upY);
        
        } else if (maction == 'ZOOM_OUT' || maction == 'EXTENT' || maction == 'QUERY_POINT'){
            zoombox_apply(downX, downY, downX, downY);    
            //alert(downX + '  -  ' + downY + '  -  ' + downX + '  -  ' +downY);
        } else {
            //alert(downX + '  -  ' + downY + '  -  ' + upX + '  -  ' + upY)
            zoombox_apply(Math.min(downX,upX), Math.min(downY,upY), Math.max(downX,upX), Math.max(downY,upY));
        }

    // Click in reference map
    } else {
        if (upX < 1 || upY < 1 || upX > mapW || upY > mapH) {
            return false;
        } else {
         			zoombox_apply(downX, downY, downX, downY);
						
        }
    }

    return false;    
}


function doMouseMove(e) {
    getMoveXY(e);
    /* * Draw a zoombox when mouse is pressed and zoom-in or select function are active
       * move map layer when pan function is active
       * do nothing for all others                                                      */

    // Actions in MAIN MAP
    if (!refmapClick) {
        /*if (window.document.myform) {
            maction = document.myform.CMD.value;
        }*/
        maction = document.myform.CMD.value;
        // Show coordinates in status bar :jithesh edited
        //var mouseString = getCoords(moveX, moveY);
        //window.status = mouseString;	
        
        switch (maction) {
            //# zoom-in, select
            case 'ZOOM_IN':
                startZoomBox(e, moveX, moveY);
                break;
    
            //# zoom-out, identify
            case 'ZOOM_OUT':
                hideLayer('zoombox');
                break;
    
            //# pan with drag
            case 'RECENTER':
                hideLayer('zoombox');
                startPan(e, moveX, moveY);
                break;
    
            //# measure
            case 'measure':
                showLayer('measure')
                break;
        }
    // Actions in REFERENCE MAP
    } else {
       hideLayer('zoombox');
    }
    
    return false;    
}


// For DOUBLE CLICK 
// currently only used for measure function: end measure, calculate polygon area
function doMouseDblClick(e) {
    getUpXY(e);
    maction = document.myform.CMD.value;
    if (maction == 'measure') {
        //alert(upX + ' - ' + upY)
        measureDrawSymbols(e, upX, upY, 1);
    }
}  




/*
 * FUNCTIONS FOR ZOOM BOX && PAN MOVING MAP
 ******************************************************/

// DRAG ZOOM BOX (ZOOM IN, SELECT)
function startZoomBox(e, moveX, moveY) {
    if (mouseDrag == true) {
        showLayer('zoombox');
        var boxL = Math.min(moveX, downX);
        var boxT = Math.min(moveY, downY);
        var boxW = Math.abs(moveX - downX);
        var boxH = Math.abs(moveY - downY);
        /*var boxL = Math.min(Math.min(moveX, downX);
        var boxT = Math.min(moveY, downY);
        var boxW = Math.min((mapW - downX - zBorder), Math.abs(moveX - downX));
        var boxH = Math.min((mapH - downY - zBorder), Math.abs(moveY - downY));  */

        var theZoomBox = document.getElementById("zoombox");

        theZoomBox.style.left   = boxL;
        theZoomBox.style.top    = boxT;
        theZoomBox.style.width  = boxW;
        theZoomBox.style.height = boxH;
    }
    return false;
}

// DRAG ZOOM BOX (ZOOM IN, SELECT)
function startPan(e, moveX, moveY) {
    if (mouseDrag == true) {

        var mapL = moveX - downX;
        var mapT = moveY - downY;

        var theMapImg = document.getElementById("mapimg");

        theMapImg.style.left = mapL;
        theMapImg.style.top  = mapT;
    }
    return false;
}



// SET DIV LAYER VISIBLE - HIDDEN
function showLayer(elementID) {
    var theZoomBox = document.getElementById(elementID);
    theZoomBox.style.visibility = "visible";
}

function hideLayer(elementID) {
    var theZoomBox = document.getElementById(elementID);
    theZoomBox.style.visibility = "hidden";
}




/* 
 * AUXILIARY FUNCTIONS
 ******************************/
// GET MAP COORDINATES FOR MOUSE MOVE
/*function getCoords(mouseX, mouseY) {
    var x_geo = Math.round(minx_geo + ((mouseX/mapW) * xdelta_geo));
    var y_geo = Math.round(maxy_geo - ((mouseY/mapH) * ydelta_geo));

    var mapCoords = 'X: ' + x_geo + '  Y: ' + y_geo;
    return  mapCoords;

}*/


          

