/*
* Objet gérant l'affichage et le dessin d'un parcelle
* pTarget : div utilisé par mozilla/Firefox pour la gestion du curseur
* pGraphics : couche graphique de dessin
* pGraphics2 : couche graphique temporaire
*/
function OutilMesure(pTarget, pGraphics, pGraphics2) {
    
    // maj des variables
    this.graphics = pGraphics;
    this.graphicsTemp = pGraphics2;
    this.imgCarte = pTarget;
  
    // zone dans laquelle on dessine
    this.area = pGraphics2.cnv;
    this.activate = function () {
        activeTool = OUTIL_MESURE;
        this.graphics.setColor("#000000");
        this.graphics.setStroke(4);
        this.graphicsTemp.setColor("#000000");
        this.graphicsTemp.setStroke(4);        
	    // il faut modifier le curseur sur la zone de dessin et sur la carte pour compatibilité IE/Firefox
        this.area.style.cursor = "crosshair";
        this.isMesureEnCours = true;
        this.imgCarte.style.cursor = "crosshair";
        this.graphics.clear();
        this.graphicsTemp.clear();
        clickCountMesure = 0;
        clickPointMesureX.length = 1;
        clickPointMesureY.length = 1;
        totalMesure = 0;
        updateMeasureBox(0, 0);
        document.getElementById("divMesure").style.visibility = "visible";
    };
    this.desactivate = function () {
        this.reset();
        document.getElementById("divMesure").style.visibility = "hidden";
    };
    this.reset = function () {
        this.graphics.clear();
        this.graphicsTemp.clear();
        this.isMesureEnCours = true;
        clickCountMesure = 0;
        clickPointMesureX.length = 1;
        clickPointMesureY.length = 1;
        totalMesure = 0;
        updateMeasureBox(0, 0);
    };
    this.isMesureEnCours = true;
    pMesure = this;
}
/*
* Mouse down 
*/
function mouseDownMesure(evt) {
    if (pMesure.isMesureEnCours == false) {
        pMesure.reset();
    }
    // récupération des coordonnées carto
    var ptClick = screenToMap(evt.clientX, evt.clientY);
    clickPointMesureX[clickCountMesure] = evt.clientX;
    clickPointMesureY[clickCountMesure] = evt.clientY;
    pMesure.graphicsTemp.clear();
    if (clickCountMesure >= 1) {
        pMesure.graphics.drawLine(evt.clientX, evt.clientY, clickPointMesureX[clickCountMesure - 1], clickPointMesureY[clickCountMesure - 1]);
        pMesure.graphics.paint();
    }
    var distance = 0;
    if (clickCountMesure > 0) {
        distance = calcDistance(ptClick.x, ptClick.y, lastMesureX, lastMesureY);
    }
    lastMesureX = ptClick.x;
    lastMesureY = ptClick.y;
    clickCountMesure += 1;
    totalMesure = totalMesure + distance;
    currentMesure = distance;
    var u = Math.pow(10, numDecimals);
    if (totalMesure != 0) {
        totalMesure = parseInt(totalMesure * u + 0.5) / u;
    }
    updateMeasureBox(totalMesure, currentMesure);
}
/*
* Mousemove
*/
function mouseMoveMesure(evt) {
    //on supprime le trait temporaire
    pMesure.graphicsTemp.clear();
    if (pMesure.isMesureEnCours == true && clickCountMesure > 0) {
        pMesure.graphicsTemp.drawLine(evt.clientX, evt.clientY, clickPointMesureX[clickCountMesure - 1], clickPointMesureY[clickCountMesure - 1]);
        pMesure.graphicsTemp.paint();
        var ptClick = screenToMap(evt.clientX, evt.clientY);
        currentMesure = calcDistance(ptClick.x, ptClick.y, lastMesureX, lastMesureY);
        var u = Math.pow(10, numDecimals);
        var tempTotal = totalMesure + currentMesure;
        if (tempTotal != 0) {
            tempTotal = parseInt(tempTotal * u + 0.5) / u;
        }
        updateMeasureBox(tempTotal, currentMesure);
    }
}
/*
*
*/
function dblClickMesure(evt) {
    
    // on finit le tracé 
    if (pMesure.isMesureEnCours == true) {
        pMesure.isMesureEnCours = false;
    }
}
/*
*
*/
function updateMeasureBox(m1, m2) {
    document.getElementById("inputMesureTotal").value = formatNombre(m1, " ") + " m";
    document.getElementById("inputMesureSegment").value = formatNombre(m2, " ") + " m";
}
/* 
* Calcul de distance entre deux points (l'unités de la carte doit être en métres
*/
function calcDistance(mX, mY, mX1, mY1) {
    var mDistance = 0;
    var p = clickCountMesure - 1;
    var xD = Math.abs(mX - mX1);
    var yD = Math.abs(mY - mY1);
    mDistance = Math.sqrt(Math.pow(xD, 2) + Math.pow(yD, 2));
    if (unitsMesure == "KILOMETERS") {
        mDistance = mDistance / 1000;
    }
    var u = Math.pow(10, numDecimals);
    return parseInt(mDistance * u + (5 / 10)) / u;
}


