function $write(mess) {
	//if($debug) $debug.write(mess);
  //  console.log(mess);
}

var gMap;
var gEdit;
var refMooCarte;
// les niveaux de zoom prédéfinis

//var SCALELIST = Array(3000,30000,60000,90000,200000,500000,800000,1000000,1360000);
var SCALELIST = Array(5000,20000,50000,100000,250000,500000,1000000,1300000) ;
//var SCALELIST = Array(2500,10000,25000,50000,125000,250000,500000,650000) ;
var MAPEXTENT = 0;           
var MAPSCALE  = 0;
var MOUSE_STATE = false ;
var DIVECHELLE = 'echelle';  
var ROLLER_ACTIVATE;



goTimer = window.setTimeout("",1000);
var counterDIV=0;
function handleDIV(e) {
    counterDIV +=	Event.wheel(e);
    sizefactor = 1+(counterDIV/10);
    gMap.wheelZoom(Math.abs(sizefactor));
}

function initMap(){
  $('visualisation').addEvent("mousewheel", handleDIV);
  gMap = new gsMap('visualisation',{fullExtent: FULLEXTENT});
  new gsMapListener(gMap);
  new toolYet(gMap);// Flèches de direction
 	new gsMoveDirection(gMap, {classContainer: 'arrowpan'});
  new gsMapHistory(gMap);
  new gsZoomScale('navzoom',gMap,{scale:SCALELIST});
  var lyr = gMap.addLayer();
  refMooCarte = new gsMapReference(gMap,'gsMapRef');
  
	refMooCarte.minx = 270211 ;
	refMooCarte.miny = 1870000 ;  
	refMooCarte.maxx = 475211 ; 
	refMooCarte.maxy = 2075000 ;
        	
  new gsMapLoading(gMap);
  gMap.draw();  
  gWindowz = new gsWindowz(gMap);
  return lyr;
}


var gsMapListener = new Class ({
    initialize: function(pMap) {
        this.map = pMap;
        this.map.addEvent('onRequestResult', this.requestResult.bind(this));
        this.map.addEvent('onToolEnd', this.toolEnd.bind(this));
    },
    requestResult: function(rs) {
        $write("gsMapListener::requestResult");
        
	    if(rs.extent){
            //Initialise avec l'extent max lors du 1er appel
            if(MAPEXTENT==0) MAPEXTENT = rs.extent;
        }
        //Actualise l'échelle dans le InputBox
        if(rs.scale){
            if($(DIVECHELLE))$(DIVECHELLE).value = Math.round(rs.scale);
            //Initialise avec l'échelle max de la carte au 1er appel
	        if(MAPSCALE==0) MAPSCALE = rs.scale;
        }
       	if(rs.selection && rs.selection != "") {
       		afficheSelection();
       	}
        
       	if(rs.toeval && rs.toeval != "") {
       		try {
       			eval(rs.toeval);
       		}catch(e) {
       			//
       		}
       	}
        /*
       	// roullette
        if($('imgTemporaire')) {
            $('imgA').setStyle('display','block');
            $('imgB').setStyle('display','block');
            $('imgTemporaire').parentNode.removeChild($('imgTemporaire'));
        }
        */
    },
    toolEnd: function(tool) {
        switch(tool.mode){
            case GSMAP_SELECTIONPOINT:
                var pt = this.map.t.screenToMap(tool.point, "Point").toString('_');
                var query = "ctrlDown="+tool.keyControl+"&ptDown="+pt;
                this.map.draw(query);
                break;
            case GSMAP_SELECTIONCIRCLE:
                //$write("gsMapListener::toolEnd:Circle >> center="+tool.circle.scrCenter.toString()+" radius="+tool.circle.scrRadius);
                var pt = this.map.t.screenToMap(tool.circle.scrCenter, "Point").toString('_');
                var r  = this.map.t.screenToMap(tool.circle.scrRadius, "Number");
                var query = "ctrlDown="+tool.keyControl+"&ptCenter="+pt+'&ptRadius='+r;
                this.map.draw(query);
                break;
            case GSMAP_SELECTIONRECT:
                //$write("gsMapListener::toolEnd:Rectangle >> TL="+tool.rectangle.screenTL.toString()+" BR="+tool.rectangle.screenBR.toString());
                this._points = new Points();
                this._points.add(tool.rectangle.screenTL);
                this._pt = new Point(tool.rectangle.screenTL.x,tool.rectangle.screenBR.y);
                this._points.add(this._pt);
                this._points.add(tool.rectangle.screenBR);
                this._pt = new Point(tool.rectangle.screenBR.x,tool.rectangle.screenTL.y);
                this._points.add(this._pt);                
                this._points.add(tool.rectangle.screenTL);
                var rect = this.map.t.screenToMap(this._points, "Points").toString();
                var query = "typePoly=rect&ctrlDown="+tool.keyControl+"&ptPoly="+rect;
                this.map.draw(query);
                break;
            case GSMAP_SELECTIONPOLY:
                //$write("gsMapListener::toolEnd:Polygon >> geom="+tool.polygon.screenGeom.toString());
                var geom = this.map.t.screenToMap(tool.polygon.screenGeom,"Points")
                var query = "typePoly=true&ctrlDown="+tool.keyControl+"&ptPoly="+geom.toWKT(true);
                this.map.draw(query);
                break;
        }
    }
});
            
            