//
//This script was contributed by TYDAC AG : http://www.tydac.ch/
//
/**
 *
 * @project     CWC2
 * @revision    $Id: eventslib.js,v 1.20 2004/05/23 23:58:58 pspencer 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)
                }
        }
