/**************************************************************************
Copyright : 2009 - GEOSIGNAL - www.geosignal.fr - contact@geosignal.fr
Projet :	GUADELOUPE

**********************************************************************************/

/*
 *  FICHIER CONF (Spécifique dde77 !!) à modifier ou à inclure directement
 */
var MAPCONTAINER = 'gsMapContainer';            //div conteneur de la map, different de celui de l'index, dans le fichier gsmapper.map.js
var MAPCONTAINERINDEX = 'gsmap';        //div conteneur de la map dans l'index
var DIVECHELLE = 'echelle';        //div où l'echelle est affiché

//tableau contenant toutes les directions des flêches pour le zoom par direction
var ARR_DIRECTION = new Array('movesouthwest','movenorth','movenortheast','movewest','moveeast','movesouth','movesoutheast','movenorthwest');
var FULLEXTENT = "";
var DIVREFERENCE = "gsMapRef";
var GSMAP_SEND_XLOAD = false ;

var MOVE_DIRECTION_LIMIT = false ;
var GSMAP_VISIBLE = 106;
var GSMAP_ZOOM_COM = 107;
var GSMAP_CHG_CARTE = 119;
var GSMAP_SCALE = 109 ;
var GSMAP_HISTO = 110 ;
var GSMAP_FULLEXT = 111 ;
var CARTE_STATE = null ;
var GSMAP_INFOBULL = 112 ;
var GSMAP_DEL_THEME = 113 ;
var GSMAP_OPACITY = 114 ;
var GSMAP_DIRECTION = 115 ;
var GSMAP_TRANSPARENCE_LAYER = 116 ;
var GSMAP_INFOBULL_CLICK = 117 ;
var GSMAP_ZOOM_OBJ = 118 ;


var GSMAP_ERROR   = 1;
var GSMAP_WARNING = 2;
var GSMAP_NOTICE  = 3;

var GSMAP_PAN = 100;
var GSMAP_ZOOMIN = 101;
var GSMAP_ZOOMOUT = 102;
var GSMAP_IDENTIFY = 103;

var GSMAP_DRAWCIRCLE = 104;
var GSMAP_DRAWRECT   = 105;
var GSMAP_DRAWPOLY   = 106;

var GSMAP_MEASURECIRCLE = 110;
var GSMAP_MEASURERECT   = 111;
var GSMAP_MEASUREPOLY   = 112;

var GSMAP_SELECTIONCIRCLE = 120;
var GSMAP_SELECTIONRECT   = 121;
var GSMAP_SELECTIONPOLY   = 122;
var GSMAP_SELECTIONPOINT  = 123;

var GSMAP_EDITSELECT     = 113;
var GSMAP_EDITADDOBJECT  = 114;
var GSMAP_EDITMOVEOBJECT = 115;
var GSMAP_EDITDELOBJECT  = 116;
var GSMAP_EDITADDVERTEX  = 117;
var GSMAP_EDITMOVEVERTEX = 118;
var GSMAP_EDITDELVERTEX  = 119;

/*
 *  CLASSE gsMap pour compatibilité de l'application
 */
var gsMap = new Class ({
    version: '1.0',
    date: '05/11/2007',
    currentControl: null,

    initialize: function(OLInstance, options){
        this.map = OLInstance;
        this._divMap = OLInstance.viewPortDiv;
                
        // Outils de manipulation de la carte
        this.tool   = new gsMapTools();
        // Echelle de la carte
        this.scale = 0;
        this.mode_old = 0; //GSMAP_ZOOMIN;
    },

/*  Function: draw
    Initialise le dessin de la carte pour tous les layers
    
    Envoi des informations au serveur via la fonction
    sendRequest pour tous les layers.
    
    Paramètres:
    query - une requête à exécuter lors de l'appel
    */
    draw: function(query) {
        for (var i = 0; i < this.map.layers.length; i++) {
            var layer = this.map.layers[i];
            if(layer.CLASS_NAME!="OpenLayers.Layer.gsMap") continue;
            layer.query = query;
            layer.redraw();
            layer.query = "";
        }
    },
    drawLegend: function(query) {
        this.draw(query);
    },
    sendX_Load: function(query) {
        this.draw(query);
    },

/*  Function: setExtent
        Mise à jour de l'extent de la carte.
        Appel depuis <gsMapLayer> avec le nouvel extent généré par le serveur
        Ne déclenche pas l'événement si l'extent est identique à l'extent en cours.
    
    Evenements: onExtentChange
    
    Paramètres:
    ext - Extent voir  <Extent>
    */
    setExtent: function(ext) {
    },
    deactivateAllControls : function(){
			for(var i=0; i < this.map.controls.length ; i++){
					if(this.map.controls[i].CLASS_NAME != "OpenLayers.Control.NavigationHistory" && this.map.controls[i].CLASS_NAME != "OpenLayers.Control.Navigation"){
						this.map.controls[i].deactivate() ;
					}
			}
			if(Visualiser)Visualiser.effacer();
    },
    getCurrentControl : function(){
    	return this.currentControl ;
    },
    activateControl : function(ctrl){  
    	this.deactivateAllControls() ;  	
      if(ctrl){
      	ctrl.activate();
  			this.currentControl = ctrl;
      }
    },
    zoomIn: function() {
    		this.activateControl(olZoomBoxIn);
   },
    zoomOut: function() {
    		this.activateControl(olZoomBoxOut);
    },
    pan: function() {   
    		this.activateControl(olDragPan);
    },
    setFullExtent: function() {
        CMap.map.zoomToExtent(_FullExtent); 
    		this.activateControl(olZoomBoxIn);
        this.navCurrent('sub',1,13);
    },
    previous: function() {
        navHistory.previous.trigger();
    		this.activateControl(olZoomBoxIn);
        this.navCurrent('sub',1,13);
    },
    next: function() {
        navHistory.next.trigger();
    		this.activateControl(olZoomBoxIn);
        this.navCurrent('sub',1,13);
    },
    setInfo2: function() {
    		this.activateControl(olInfo);
    },
    selectionCircle: function() {
    		this.activateControl(olSelectCircle);  		
				OpenLayers.Util.setHandlerStyle(OpenLayers.Feature.Vector.style['default'],olSelectCircle.handler);
				OpenLayers.Util.setHandlerStyle({pointRadius: 1,fillColor:'white',strokeColor:'#ff0000'},olSelectCircle.handler);
    },
    selectionPoint: function() {
    		this.activateControl(olSelectPoint);  	
    		olSelectPoint.handler.style = OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']);
				OpenLayers.Util.setHandlerStyle({pointRadius: 1,fillColor:'white',strokeColor:'#ff0000'},olSelectPoint.handler);
    },
    selectionRectangle: function() {
    		this.activateControl(olSelectRectangle);
				OpenLayers.Util.setHandlerStyle(OpenLayers.Feature.Vector.style['default'],olSelectRectangle.handler);
				OpenLayers.Util.setHandlerStyle({pointRadius: 1,fillColor:'white',strokeColor:'#ff0000'},olSelectRectangle.handler);
    },
    selectionPolygone: function() {
    		this.activateControl(olSelectPolygone);
				OpenLayers.Util.setHandlerStyle(OpenLayers.Feature.Vector.style['default'],olSelectPolygone.handler);
				OpenLayers.Util.setHandlerStyle({pointRadius: 1,fillColor:'white',strokeColor:'#ff0000'},olSelectPolygone.handler);
    },

    selectionLigne: function() {
    		this.activateControl(olSelectLigne);
				OpenLayers.Util.setHandlerStyle(OpenLayers.Feature.Vector.style['default'],olSelectLigne.handler);
				OpenLayers.Util.setHandlerStyle({pointRadius: 1,fillColor:'white',strokeColor:'#ff0000'},olSelectLigne.handler);
    },


    measureLine: function() {
    		this.activateControl(olMeasureLine);
    },
    measurePoly: function() {
    		this.activateControl(olMeasurePoly);
    },
    setLayerOpacity: function(idLayer,opacValue){
    	this.sendX_Load('act=setLayerOpacity&metaindex='+idLayer+'&opac='+opacValue);
    },
    checkAllLayer: function(visible){
    	if(visible) var visibilite = 'ON';
    	else var visibilite = 'OFF';
    	this.sendX_Load('act=checkalllayer&status='+visibilite);
    },
    changeLayerVisibility: function(layerIndex,visible){
    	if(visible) var visibilite = 'ON';
    	else var visibilite = 'OFF';
    	this.sendX_Load('act=changeLayerVisibilityByMetaindex&metaindex='+layerIndex+'&status='+visibilite);
    },
    changeGroupeVisibilityByRadio: function(grpName,aIndex_Layer){
    	var ar = aIndex_Layer.join("harivao");
    	this.sendX_Load('act=changeGrpShowRadio&grpName='+grpName+'&layers='+aIndex_Layer);
    },
    ChangeGroupVisibilityByLayerMetaindex: function(aIndex_Layer,status){
    	var ar = aIndex_Layer.join(",");
    	if(status) var visibilite = 'ON';
    	else var visibilite = 'OFF';
    	this.sendX_Load('act=ChangeGroupVisibilityByLayerMetaindex&metaindexes='+ar+'&status='+visibilite);
    },
    setSize: function() {},
    
	// affiche le liste des menus sélections
  affMenuSelection : function () {
		var debId = 15;
		if(!Utils.$('navselection')) {
	  	aL = this.getOffset('sub9','offsetLeft');
	  	aT = this.getOffset('sub9','offsetTop');
			aH = Utils.$('sub9').offsetHeight;
			aW = Utils.$('sub9').offsetWidth;
			
			var divSel = document.createElement('div');
			document.body.appendChild(divSel) ;
	  	divSel.id = 'navselection';
	  	Ext.DomHelper.applyStyles(divSel,{
				'display': 'block',
				'position': 'absolute',
				'width': aW,
				'top': aT+aH+1,
				'left': aL,
				'zIndex': '2000',
				'overflow': 'hidden'
			});				
			
			var ulL = document.createElement('ul');
			divSel.appendChild(ulL) ;
			
			this.drawSelMenu(ulL,'15','a');
			this.drawSelMenu(ulL,'16','b');
			this.drawSelMenu(ulL,'17','c');
			this.drawSelMenu(ulL,'18','d');
			
	  	myTips = new Tips($$('.cbtipsel'), {
				className: 'cbtc',
				maxTitleChars: 50
			});
  	}else {
  		this.switchMenu('navselection');
  		var tabA = Utils.$('navselection').getElementsByTagName('a');
  		for(var i = 0; i < tabA.length; i++){
  			if(tabA[i].style.backgroundImage == "url(profils/default/images/sub9.gif)") {
					tabA[i].$tmp.myText = "Sélection par point";
				}
				else if(tabA[i].style.backgroundImage == "url(profils/default/images/sub9a.gif)") {
					tabA[i].$tmp.myText = "Sélection par ligne";
				}
				else if(tabA[i].style.backgroundImage == "url(profils/default/images/sub9b.gif)") {
					tabA[i].$tmp.myText = "Sélection par rectangle";
				}
				else if(tabA[i].style.backgroundImage == "url(profils/default/images/sub9c.gif)") {
					tabA[i].$tmp.myText = "Sélection par cercle";
				}
				else if(tabA[i].style.backgroundImage == "url(profils/default/images/sub9d.gif)") {
					tabA[i].$tmp.myText = "Sélection par polygone";
				}
  		}
  	}
  },
	drawSelMenu : function(ulparent,rang,bgextension){		
		// sélection par rectangle
		
			var l6 = document.createElement('li');
			ulparent.appendChild(l6) ;
			var a2 = document.createElement('a');
			l6.appendChild(a2) ;
					
			/*
	  	var l6 = this.createAndAppend('li',ulL,true);
	  	var a2 = this.createAndAppend('a',l6,true);
	  	*/
	  	a2.id = 'sub'+rang;
			a2.className = 'cbtipsel';
	  	a2.style.backgroundImage = "url(profils/default/images/sub9"+bgextension+".gif)";
			a2.href = '#';
			a2.title = 'Sélection par rectangle';
	  	a2.onclick = function() {
	  		sub9Bg = Utils.$('sub9').style.backgroundImage;
	  		currBg = this.style.backgroundImage;
	  		Utils.$('sub9').style.backgroundImage = currBg;
	  		Utils.$('sub'+rang).style.backgroundImage = sub9Bg;
				Utils.$('navselection').style.display = "none";
	  		gMap.swithNavselection();
	  	};
			a2.onmouseout = function() {
				hideSel();
			};
			a2.onmouseover = function() {
				clearTimeSel();
			};
	},
  swithNavselection : function (){
		this.navCurrent('sub',9,13);
		if(Utils.$('sub9').style.backgroundImage == "url(profils/default/images/sub9.gif)") {
			gMap.selectionPoint();
			Utils.$("sub9").$tmp.myText = "Sélection par point";
		}
		else if(Utils.$('sub9').style.backgroundImage == "url(profils/default/images/sub9a.gif)") {
			gMap.selectionLigne();
			Utils.$("sub9").$tmp.myText = "Sélection par ligne";
		}
		else if(Utils.$('sub9').style.backgroundImage == "url(profils/default/images/sub9b.gif)") {
			gMap.selectionRectangle();
			Utils.$("sub9").$tmp.myText = "Sélection par rectangle";
		}
		else if(Utils.$('sub9').style.backgroundImage == "url(profils/default/images/sub9c.gif)") {
			gMap.selectionCircle();
			Utils.$("sub9").$tmp.myText = "Sélection par circle";
		}
		else if(Utils.$('sub9').style.backgroundImage == "url(profils/default/images/sub9d.gif)") {
			gMap.selectionPolygone();
			Utils.$("sub9").$tmp.myText = "Sélection par polygone";
		}
		else {
			gMap.selectionPoint();
			Utils.$("sub9").$tmp.myText = "Sélection par point";
		}
	},
	navCurrent : function(nomNav,iCur,nbreNav) {
		for(nav=1;nav<=nbreNav;nav++){
			var cur = Utils.$(nomNav+nav);		
			if(cur) {
				if (iCur == nav) {
					cur.className="current";
				}else {
					cur.className="";
				}
			}
		}
	},
	getOffset : function(element,attr) {
		var offset=0;
		element = Utils.$(element);
		while(element){
			offset+=element[attr];
			element=element.offsetParent
		}
		return offset;
	},
	switchMenu : function(obj1) {
		if(Utils.$(obj1)) {
			obj1 = Utils.$(obj1);
		}
		if (obj1.style.display != "block" ) {
			obj1.style.display = 'block';
		}
		else {
			obj1.style.display = 'none';
		}
	},
	createAndAppend : function(tag,parentObj,bool) {
		if(bool) {
			var newElement = document.createElement(tag);
		}else {
			var newElement = document.createTextNode(tag);
		}
		if(arguments[3]) {
			Utils.$(parentObj).insertBefore(newElement,Utils.$(parentObj).firstChild);
		}else {
			Utils.$(parentObj).appendChild(newElement);
		}
		return newElement;
	}
});

var gsMapTools = new Class ({
    mode: 0,
    initialize: function(){
    },
    setMode: function(){
    }
});



