/**
 * Permet de gérer les erreurs renvoyées par la CartoServlet (erreur de session, erreur de rafraichissement ArcIMS) -> Redirection vers mappemonde
 */
function manageError(repxml) {
	var error = repxml.getElementsByTagName("ERROR");
    if (error.length != 0) {
    	top.document.location.href = "homeMap.do?typeErreur="+repxml.getElementsByTagName("ERROR")[0].childNodes[0].nodeValue;
    }
}

/**
 * Permet de gérer l'indisponibilité la CartoServlet (= indisponibilité du module cartographique) -> Redirection vers mappemonde
 */
function manageCarteNotDispo() {
	top.document.location.href = "homeMap.do?typeErreur=erreurModuleCarto";
}

/*
* Envoie une requete à la servlet pour rafraichir la carte
* Utilisation de l'objet XMLHttpRequest pour ne pas rafraichir complement la page
* cmd : commande executer avant le rafraichissement
*       ex : zoomin&x1=125&x2=1258&y1=45&y2=458
*/
function rafraichirCarteMiniature() {
    cmd = "initMiniature&width=" + widthPixelMiniature + "&height=" + heightPixelMiniature;
    var xhr_object = cartoServlet(cmd);
    xhr_object.onreadystatechange = function () {
        if (xhr_object.readyState == 4) {
            if (xhr_object.status == 200) {
                var repxml = xhr_object.responseXML.getElementsByTagName("RESPONSE")[0];
                manageError(repxml);
                hgXMiniature = parseFloat(repxml.getElementsByTagName("HGX")[0].childNodes[0].nodeValue);
                hgYMiniature = parseFloat(repxml.getElementsByTagName("HGY")[0].childNodes[0].nodeValue);
                bdXMiniature = parseFloat(repxml.getElementsByTagName("BDX")[0].childNodes[0].nodeValue);
                bdYMiniature = parseFloat(repxml.getElementsByTagName("BDY")[0].childNodes[0].nodeValue);
                document.imgCarteMiniature.src = repxml.getElementsByTagName("SRC_IMAGE")[0].childNodes[0].nodeValue;
              // maj des variables concernant l'echelle
                widthCarteMiniature = bdXMiniature - hgXMiniature;
                heightCarteMiniature = hgYMiniature - bdYMiniature;
                placerCadreMiniature();
            } else {
            	manageCarteNotDispo();
            }
        }
    };
}
/********************************************/
/*** appel de carto servlet *****************/
/********************************************/
function cartoServlet(cmd) {
    var xhr_object = null;
    /* Firefox */
    if (window.XMLHttpRequest) {
        xhr_object = new XMLHttpRequest();
    } else {
        /* Internet Explorer */
        if (window.ActiveXObject) {
            xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            /* XMLHttpRequest non supporté par le navigateur */
        	top.document.location.href = "homeMap.do?typeErreur=erreurXHR";
        }
    }
   // utilisation du mode asynchrone A VALIDER : évite de figer le navigateur mais quel risque ?
    xhr_object.open("POST", document.context + "cartoServlet", true);
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr_object.send("cmd=" + cmd);
    return xhr_object;
}

/*
* Place la cadre de visualisation sur la miniature
*/
function placerCadreMiniature() {
    //if (isMiniatureVisible == true) {
	    // ajout du cadre sur la miniature
        var ovXincre = widthCarteMiniature / widthPixelMiniature;
        var ovYincre = heightCarteMiniature / heightPixelMiniature;
	    // transformation en pixel dans la carte miniature
	    // attention ne marche que si la carte est en bas à droite
        var vhgX = (top.getMapFrame().hgX - hgXMiniature) / ovXincre;
        var vhgY = (hgYMiniature - top.getMapFrame().hgY) / ovYincre;
        var vbdX = widthPixelMiniature - (bdXMiniature - top.getMapFrame().bdX) / ovXincre;
        var vbdY = heightPixelMiniature - (top.getMapFrame().bdY - bdYMiniature) / ovYincre;
        var vWidth = (top.getMapFrame().bdX - top.getMapFrame().hgX) / ovXincre;
        var vHeight = (top.getMapFrame().hgY - top.getMapFrame().bdY) / ovYincre;
        jgMiniature.clear();
	    
	    // si le cadre est trop petit : on fait une croix
        if (vWidth <= 8 && vHeight <= 8) {
            var vCenterX = vhgX + vWidth / 2;
            var vCenterY = vhgY + vHeight / 2;
            if (vCenterX > 0 && vCenterX < widthPixelMiniature && vCenterY > 0 && vCenterY < heightPixelMiniature) {
                jgMiniature.drawLine(vCenterX, vCenterY - 20, vCenterX, vCenterY + 20);
                jgMiniature.drawLine(vCenterX - 20, vCenterY, vCenterX + 20, vCenterY);
            }
        }
        if (vWidth <= widthCarteMiniature && vHeight <= heightPixelMiniature) {
            jgMiniature.drawLine(vhgX, vhgY, vbdX, vhgY);
            jgMiniature.drawLine(vbdX, vhgY, vbdX, vbdY);
            jgMiniature.drawLine(vbdX, vbdY, vhgX, vbdY);
            jgMiniature.drawLine(vhgX, vbdY, vhgX, vhgY);
        }
        jgMiniature.paint();
    //}
}

