//
//This script was contributed by TYDAC AG : http://www.tydac.ch/
//
/**
 *
 * @project     CWC2
 * @revision    $Id: eventslib.js,v 1.21 2005/07/20 16:02:02 bartvde Exp $
 * @purpose      Used with Ruler widget
 * @author      DM Solutions Group (assefa@dmsolutions.ca)
 * @copyright
 * <b>Copyright (c) 2002, DM Solutions Group Inc.</b>
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */
 
function startDist(e){
        //alert ("startDist");
        var ontarget=false;
        gRulerHideLayers = 1;       
        
        if (gRulerg_digitTool == true){var gRulerg_end_digit = false;}

        //if (isIE4 || isNav6){ontarget=ctrlIEonTarget(e)}
                if (MapWinsideMap())
                  ontarget = true; 
        //alert(ontarget);
        if (ontarget == true){
        
            // add point to the array of points     
            if (isNav4 || isNav6) 
            {   
                // only add if not a duplicate of last record
                if ( DistTool.aaPointTrace.length > 0 )
                {
                    if ( DistTool.aaPointTrace[DistTool.aaPointTrace.length-1][0] != e.pageX ||
                         DistTool.aaPointTrace[DistTool.aaPointTrace.length-1][1] != e.pageY )
                        DistTool.aaPointTrace[DistTool.aaPointTrace.length] =  new Array(e.pageX,e.pageY);
                }
                else
                    DistTool.aaPointTrace[DistTool.aaPointTrace.length] =  new Array(e.pageX,e.pageY);
               
            } 
            else 
            {
                // only add if not a duplicate of last record
                if ( DistTool.aaPointTrace.length > 0 )
                {
                    if ( DistTool.aaPointTrace[DistTool.aaPointTrace.length-1][0] != window.event.clientX + document.body.scrollLeft ||
                         DistTool.aaPointTrace[DistTool.aaPointTrace.length-1][1] != window.event.clientY + document.body.scrollTop )
                        DistTool.aaPointTrace[DistTool.aaPointTrace.length] =  new Array(window.event.clientX + document.body.scrollLeft,window.event.clientY + document.body.scrollTop);
                }
                else
                    DistTool.aaPointTrace[DistTool.aaPointTrace.length] =  new Array(window.event.clientX + document.body.scrollLeft,window.event.clientY + document.body.scrollTop);
            }
        
            if (gRulerfirstClickDist == false){ 
                if (isNav4 || isNav6){
                    if (e.which == 3){
                        stopDist(e);
                    }
                }
                if (isIE4 || isNav6){DistTool.dtDrawDist(e)}
                
                DistTool.dtSetInflection(e);
                
                if (gRulerg_end_digit == true){stopDist(e)}
                return false;
            } else {
                DistTool.dtDistance = 0;
                gRulerfirstClickDist = false;
                                  
                DistTool.dtInitDist(e, gRulerSpaceBetweenPoints);
            }
        }
    
    return false;
}
function ctrlIEonTarget(e){
        if (MapWinsideMap)
          return true;
        else
         return false;
        
        //not used after this : original code.
    if (isNav6){
        if (e.pageX >= gRulerMapImgOX && e.pageX < gRulerMapImgOX + gRulercMapWidth && e.pageY >= gRulerMapImgOY &&  e.pageY < gRulerMapImgOY + gRulercMapHeight){
            return true;
        } else {
            return false;
        }
    }else{
        if (window.event.clientX >= gRulerMapImgOX && window.event.clientX < gRulerMapImgOX + gRulercMapWidth && window.event.clientY >= gRulerMapImgOY &&  window.event.clientY < gRulerMapImgOY + gRulercMapHeight){
            return true;
        } else {
            return false;
        }
    }
}

//not used
function mouseOnMap() {
        //alert("mouseOnMap");
    document.onmousedown = document.onmousemove = document.onDblClick = null;
    if (isNav4){                            
        document.captureEvents(Event.MOUSEDOWN);
        document.captureEvents(Event.MOUSEMOVE);
        document.captureEvents(Event.DblClick);
    }                               
    if (gRulerCurrentTool == "distance"){
        document.onmousedown=startDist;
        //document.onmousemove=distIt;
        document.onDblClick=stopDist;
    }
}
function mouseOutMap() {
    //if (isNav4){
    //  document.releaseEvents(Event.MOUSEDOWN)
    //  document.releaseEvents(Event.MOUSEMOVE)
    //  document.releaseEvents(Event.DBLCLICK)
    //}
    document.onmousedown=null;
    //document.onmousemove=null;
    document.onDblClick=null;
}
function distIt(e){
    var ontarget=true;
    moveit(e);
    
    if (isIE4 || isNav6){
        ontarget=ctrlIEonTarget(e);
    }
    if (ontarget == true){
        if (gRulerfirstClickDist == false){
            DistTool.dtCalcDist(e);
        }
    }       
}

function closePoly(e){
    
    DistTool.dtDrawClose(e);
    stopDist(e);
    
    // clear the array of points
    DistTool.aaPointTrace = new Array();
    
    return false;
}

function stopDist(e) {
  window.status="";
    var ontarget=true;
    if (isIE4  || isNav6){ontarget=ctrlIEonTarget(e)}
        
    if (ontarget == true){
        gRulerfirstClickDist = true;
        if (gRulerfirstClickDist == false){
            if (isNav4) {
                //document.releaseEvents(Event.DBLCLICK)
                //document.captureEvents(Event.MOUSEMOVE)    
                //document.onmousemove = document.onmouseup = null
                //document.onmousemove = distIt 
            } else {
                //getParObject("MapLayerDiv").onmousemove  = null
                //getParObject("MapLayerDiv").onmousemove = distIt
            }
            gRulerfirstClickDist = true;
        }

        if (gRulerareaMode == true)
        {
            var nbPic = 1;
            var espace = 20; //pixels - interval between pixels during the drag phase
            var intervalmin = gRulerSpaceBetweenPoints; //pixels - interval between pixels once definitively paint
            var intervalmax = gRulerSpaceBetweenPoints+1; //pixels - idem
            var flag = false;
            parent.gRulerareaString = parent.gRulerareaString.substring(1,parent.gRulerareaString.length);
            
            dDistX = (parent.startPtX - parent.lastPtX);
            dDistY = (parent.startPtY - parent.lastPtY);

            //alert(parent.gRulerareaString +':\n'+ parent.startPtX +','+parent.startPtY + '-'+parent.lastPtX +','+parent.lastPtY);
            
            dD = Math.sqrt((dDistX*dDistX)+(dDistY*dDistY));
            
            var Vx = dDistX/dD;
            var Vy = dDistY/dD;
                        
            do {
                intervalle = dD/nbPic;
                if (intervalle <= intervalmin){flag = true}
                if (intervalle > intervalmax){
                    nbPic += 1;
                } else {
                    flag = true;
                }
            } while (flag == false)
            

                    
            if (parent.gStartPix  + nbPic <= gRulerNbPoints){
                for (i = parent.gStartPix + 1; i<= parent.gStartPix  + nbPic; i++){
                    shiftTo("pix"+i, parent.lastPtX + (i-parent.gStartPix)*Vx*intervalle,parent.lastPtY +(i-parent.gStartPix)*Vy*intervalle);
                    showLayer("pix"+i);
                }
            }
        }       
    }
}           
    function moveit(e){
        
        if (isNav4){
            var X = e.pageX - gRulerMapImgOX;
            var Y = e.pageY - gRulerMapImgOY;
        }
        else{
            if (isNav6){
                var X = e.pageX - gRulerMapImgOX;
                var Y = e.pageY - gRulerMapImgOY;
            }else{
                var X = window.event.clientX - gRulerMapImgOX;
                var Y = window.event.clientY - gRulerMapImgOY;
            }
        }

                if (document.forms[0].NAV_CMD != null)
                {
                        if (document.forms[0].NAV_CMD.value != "RULER")
                        {       
                                if (document.forms[0].RULER_RESULT != null)
                                document.forms[0].RULER_RESULT.value == "";
                        
                                return;
                        }
                }
   
                X = gMapWmouseX; //comes from mapdhtmlwidget
                Y = gMapWmouseY;
        var posX = parseFloat(gRulermapMinX) + parseFloat(gRulergblPixelSize) * X;
        var posY = parseFloat(gRulermapMaxY) - parseFloat(gRulergblPixelSize) * Y;

        posX = Math.round(posX);
        posY = Math.round(posY);
        var dfDistance = "";
                var sStopText = "";
        if (isNaN(posX) == false){
            var sStatus = "";"Location= " + posX + " / " + posY;
        }
        if (gRulerCurrentTool == "distance" && gRulerfirstClickDist== false)
        {
            dfDistance = (Math.round(parseFloat(gRulergblPixelSize) * DistTool.dtDistance*10)/10);
            sStatus += " Distance=" + dfDistance;
            sStatus += " "+gRulersUnits;
            if (isNav4)
                sStopText = "    Use Right Click to stop";
            else if (isNav6)
               sStopText += "    Use Double Click or Press any key to stop.";
            else
                sStopText += "    Use Double Click or Press any key to stop.";
            sStatus += sStopText;
        
            if (document.forms[0].RULER_RESULT != null)
            {
                document.forms[0].RULER_RESULT.value = ""+ dfDistance + " " + gRulersUnits;
                //window.status = sStopText;
            }
        }
    }
        
    function outIE(){
        getObject("MapLayerDiv").onmousemove=null;
    }   
    
        function setMapDraggable(obj) {
            if(isNav4){             
                getObject(obj).onmouseover= mouseOnMap;
                getObject(obj).onmouseout= mouseOutMap;
                                document.onmousedown=startDist=startDist;
                                document.onDblClick=stopDist; 
                                document.onKeyPress=stopDist;
                                document.onKeyUp=stopDist;
                                //getObject(obj).onmousemove=distIt;
            }
            else if (isIE4 || isNav6) {                 
                var layer = getParObject(obj);

                document.onmousedown=startDist;
                document.ondblclick=stopDist;
                layer.onmouseout=outIE;
                //layer.onmousemove=distIt;
                                if (isNav6)
                                     document.addEventListener("dblclick",stopDist,true);
                                
            }
        }
                //function not used
        function drawDistPt(){
                var str;
                var tobj;
                for (var i=1; i<= 200; i++){
                    str = "<DIV ID=pix" + i + " CLASS='stylePix'><IMG  SRC='ruler_pix.gif'><BR></DIV>";
                    document.write(str);
                    str = "<DIV ID=pInf" + i + " CLASS='stylePix'><IMG  SRC='ruler_pix.gif'><BR></DIV>";
                    document.write(str);
                }
        }

