//--------------------------------------------------------------------------
// AcesaAucat.js
//--------------------------------------------------------------------------
// Javascript per dibuixar el mapa d'Acesa i Aucat i carregar les icones des de XML
//--------------------------------------------------------------------------

//<![CDATA[
	
	// Creem un objecte ACESA_AUCAT i ho definim tot a dins per no omplir
	// el namespace global amb moltes definicions i funcions. Així mantenim
	// el function closure i només posem ACESA_AUCAT al namespace global.
	ACESA_AUCAT = {};

  // Inicialitzem els atributs de la classe que necessitem
  ACESA_AUCAT.Atributs = UTILS_GMAPS.AtributsClass;
	// Coordenades i Zoom per inici a zona "global" Acesa i Aucat
	ACESA_AUCAT.Atributs.latIni = 41.674630;		// Latitud inicial del mapa
	ACESA_AUCAT.Atributs.lngIni = 1.290680;			// Longitud inicial del mapa
	ACESA_AUCAT.Atributs.zoomIni = 8;						// Nivell de zoom inicial del mapa
	// Coordenades pel mapa
	ACESA_AUCAT.Atributs.coordenadesPermeses = new GLatLngBounds(new GLatLng(39.59722324495565,-2.0819091796875), new GLatLng(43.27720532212024, 4.39453125));

	
	//---------- Funció principal ----------
	// Inicialitzem el mapa, parsegem els XML amb els punts amb "incidencies" i posem un marker per cada un amb la seva info.
	ACESA_AUCAT.load = function() {
		if (GBrowserIsCompatible()) {
			// Posem els valors dels checkboxes (valors per defecte si acabem d'obrir o valors guardats a la cookie de sessió.
			UTILS_GMAPS.posarValorOpcions();

			// Inicialitzem el mapa
			UTILS_GMAPS.inicialitzarMapa( ACESA_AUCAT.Atributs );

			// Creem "div" per mostrar msg de "Carregant..."
			UTILS_GMAPS.crearCarregant();
			UTILS_GMAPS.mostrarCarregant(UTILS_GMAPS.getTextIdioma( UTILS_GMAPS.getIdiomaActual(), UTILS_GMAPS.IDIOMA.TEXTS.CARREGANT ));

			// Carreguem les zones i els trams pel nivell de servei.
			ACESA_AUCAT.ompleTrams();
			ACESA_AUCAT.ompleZones();
			// Creem els markers pels trams
			//UTILS_GMAPS.crearMarkersTrams( ACESA_AUCAT.Atributs.map );	// POSANT I TREIENT NOMÉS ELS TRAMS QUE TOQUEN

			// Carreguem les sortides
			ACESA_AUCAT.ompleSortides();
			
			// Parsegem els XML i mostrem els markers que toqui
			ACESA_AUCAT.parseShow();
			
			// Pintem les línies de les icones a la seva coordenada real
			//UTILS_GMAPS.dibuixarLiniaIcones( ACESA_AUCAT.Atributs );

			// Posem un listener de l'event de zoom per repintar les línies de les icones a la seva coordenada real
			/*
			GEvent.addListener(ACESA_AUCAT.Atributs.map, "zoomend", function(oldLevel, newLevel) {
				if ( oldLevel != newLevel )
					UTILS_GMAPS.dibuixarLiniaIcones( ACESA_AUCAT.Atributs );
			});
			*/

			// Posem un listener de l'event de moviment per controlar els límits del mapa
			GEvent.addListener(ACESA_AUCAT.Atributs.map, "move", function() {
				UTILS_GMAPS.checkBounds( ACESA_AUCAT.Atributs );
			});
		}
	};

	// Parsegem els XML i mostrem els markers que toqui
	ACESA_AUCAT.parseShow = function() {
			// Mostrem missatge d'avís d'actualització
			UTILS_GMAPS.mostrarCarregant(UTILS_GMAPS.getTextIdioma( UTILS_GMAPS.getIdiomaActual(), UTILS_GMAPS.IDIOMA.TEXTS.ACTUALITZANT ));

			// Eliminem les dades prévies dels SLs, equipaments i nivells de servei
			UTILS_GMAPS.netejarSL( ACESA_AUCAT.Atributs );
			UTILS_GMAPS.netejarEquips( ACESA_AUCAT.Atributs );
			UTILS_GMAPS.netejarNivellsServei();

			// Parsegem els fitxers XML dels SL, els Equips i els Nivells de Servei per ACESA
			UTILS_GMAPS.parsejarSL_gmaps( ACESA_AUCAT.Atributs, "./xml/acesa/logical.xml", "ACESA" );
			UTILS_GMAPS.parsejarEquips( ACESA_AUCAT.Atributs, "./xml/acesa/equipment.xml", "ACESA" );
			UTILS_GMAPS.parsejarNivellsServei( ACESA_AUCAT.Atributs, "./xml/acesa/serviceLevels.xml", ACESA_AUCAT.tramsSortidesManager, "ACESA" );	// DMR 30-11-09: Passem la concessio (3er paràmetre)per poder posar un offset als identificadors d'Aucat
			// Parsegem els fitxers XML dels SL, els Equips i els Nivells de Servei per AUCAT
			UTILS_GMAPS.parsejarSL_gmaps( ACESA_AUCAT.Atributs, "./xml/aucat/logical.xml", "AUCAT" );
			UTILS_GMAPS.parsejarEquips( ACESA_AUCAT.Atributs, "./xml/aucat/equipment.xml", "AUCAT" );
			UTILS_GMAPS.parsejarNivellsServei( ACESA_AUCAT.Atributs, "./xml/aucat/serviceLevels.xml", ACESA_AUCAT.tramsSortidesManager, "AUCAT" );	// DMR 30-11-09: Passem la concessio (3er paràmetre) per poder posar un offset als identificadors d'Aucat

			// Mostrem només els markers que estan seleccionats.
			ACESA_AUCAT.esperaShow();
	}

	//---------- Funcions que fem servir per ensenyar o amagar les icones ----------
	ACESA_AUCAT.esperaShow = function() {
		if ( ( ACESA_AUCAT.Atributs.m_bLogicsCarregatsAcesa == true ) &&
		 		 ( ACESA_AUCAT.Atributs.m_bEquipsCarregatsAcesa == true ) &&
				 ( ACESA_AUCAT.Atributs.m_bLogicsCarregatsAucat == true ) &&
		 		 ( ACESA_AUCAT.Atributs.m_bEquipsCarregatsAucat == true ) ) {
		 	// Fem una espera activa de 500ms per donar un marge a les dades.
		 	UTILS_ABERTIS.sleep( 500 );
		 	
			// Actualitzem la data
			UTILS_GMAPS.actualizarData( 'dataActualitzacio' );

		 	// Un cop hem acabat de carregar les 2 concessions, afegim els panells q hem
			// agrupat (els d'accés) a l'array de panells visibles al màxim nivell de zoom.
			UTILS_GMAPS.afegirPanellsAgrupats( ACESA_AUCAT.Atributs );

			// Comprovem que la data dels fitxers és OK.
			// Si no ho és, esborrem tot (no mostrem dades) i ensenyem un missatge d'error.
			// Si és ok, esborrem el misstage d'error (per si l'haviem mostrat)
			if ( UTILS_GMAPS.AtributsClass.m_bDataOk ) {
				// Amaguem el msg d'error
				UTILS_GMAPS.mostrarMsgErrorDates( "" );
			}
			else {
				// Eliminem les dades prévies dels SLs, equipaments i nivells de servei
				UTILS_GMAPS.netejarSL( ACESA_AUCAT.Atributs );
				UTILS_GMAPS.netejarEquips( ACESA_AUCAT.Atributs );
				UTILS_GMAPS.netejarNivellsServei();
				
				// Mostrem el msg d'error
				UTILS_GMAPS.crearMsgErrorDates();
				UTILS_GMAPS.mostrarMsgErrorDates( UTILS_GMAPS.getTextIdioma( UTILS_GMAPS.getIdiomaActual(), UTILS_GMAPS.IDIOMA.TEXTS.FORA_SERVEI ) );
			}

		 	
		 	// Mostrem/amaguem les icones
		 	ACESA_AUCAT.showHideMarkers();
		 	ACESA_AUCAT.tramsSortidesManager();
			
			// Reiniciem booleans
			ACESA_AUCAT.Atributs.m_bLogicsCarregatsAcesa = false;
			ACESA_AUCAT.Atributs.m_bEquipsCarregatsAcesa = false;
			ACESA_AUCAT.Atributs.m_bLogicsCarregatsAucat = false;
			ACESA_AUCAT.Atributs.m_bEquipsCarregatsAucat = false;

			// Creem un timer per cridar al parseig dels XML cada 5 minuts
			setTimeout("ACESA_AUCAT.parseShow()", UTILS_GMAPS.CONSTANTS_CLASS.MINUTS_REFRESC*60*1000);	// setTimeout espera X milisegons. Esperem 5 minuts.
		}
		else {
			// Encara no hem acabat de llegir el fitxer. Tornem a mirar-ho al cap de mig segón.
			setTimeout("ACESA_AUCAT.esperaShow()", 500 );	// Tornem a executar aquesta funció mig segón + tard
		}
	}
	ACESA_AUCAT.showHideMarkers = function() {
		// Agafem els valors de les opcions (per tenir-los guardats)
		UTILS_GMAPS.getOpcions();
		
		// SLs
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_OBRES] == true), ACESA_AUCAT.Atributs.m_arrayObres ); 
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_ACCIDENT] == true), ACESA_AUCAT.Atributs.m_arrayAccidents ); 
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_TRANSIT] == true), ACESA_AUCAT.Atributs.m_arrayTransit ); 
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_METEO] == true), ACESA_AUCAT.Atributs.m_arrayMeteo ); 
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_INCIDENCIES] == true), ACESA_AUCAT.Atributs.m_arrayIncidencies ); 
		// Equipaments
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_CAMARES] == true), ACESA_AUCAT.Atributs.m_arrayCamares ); 
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_PANELLS] == true), ACESA_AUCAT.Atributs.m_arrayPanells );
		ACESA_AUCAT.showHide( (UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_ESTACIO_METEO] == true), ACESA_AUCAT.Atributs.m_arrayEstMeteo ); 
	}
	ACESA_AUCAT.showHide = function ( bVisible, array ) {
		for ( var index = 0; index < array.length; index++ ) {
			if ( bVisible == true )
				array[index].show();
			else
				array[index].hide();
		}
	}

	// Funció que utilitza el MarkerManager de google per mostrar els trams (el que toqui segons el nivell de zoom)
	// i les sortides (només en un nivell determinat de zoom).
	ACESA_AUCAT.tramsSortidesManager= function() {
		// POSANT I TREIENT TOTS ELS TRAMS CADA VEGADA
		// Agafem els valors de les opcions (per tenir-los guardats)
		UTILS_GMAPS.getOpcions();

		// Si no tenim creat el marker manager, el creem. Si no, el buidem.
		if ( ACESA_AUCAT.Atributs.markerManager == null ) {
    	// Creem el Marker Manager
    	ACESA_AUCAT.Atributs.markerManager = new MarkerManager(ACESA_AUCAT.Atributs.map);
    }
    else {
    	ACESA_AUCAT.Atributs.markerManager.clearMarkers();
    }
    
    // Afegim les sortides (només al màxim nivell de zoom)
    ACESA_AUCAT.Atributs.markerManager.addMarkers(UTILS_GMAPS.getSortides(ACESA_AUCAT.Atributs, ACESA_AUCAT.Sortides), UTILS_GMAPS.CONSTANTS_CLASS.MAX_ZOOM);

    // Afegim els trams (per cada nivell de zoom, posem uns trams diferents).
    for ( iZoom = UTILS_GMAPS.CONSTANTS_CLASS.MIN_ZOOM; iZoom <= UTILS_GMAPS.CONSTANTS_CLASS.MAX_ZOOM; iZoom++ ) {
    	ACESA_AUCAT.Atributs.markerManager.addMarkers(UTILS_GMAPS.getTrams(ACESA_AUCAT, iZoom), iZoom, iZoom);
    }

		// Afegim els panells del nivell 5 de zoom (si estan marcats).
		if ( UTILS_GMAPS.AtributsClass.m_arrayChecks[UTILS_GMAPS.CONSTANTS_CLASS.OPCIONS_PANELLS] == true ) {
	    ACESA_AUCAT.Atributs.markerManager.addMarkers(UTILS_GMAPS.getPanells(ACESA_AUCAT.Atributs), UTILS_GMAPS.CONSTANTS_CLASS.MAX_ZOOM);
		}

    // Refresquem el Marker Manager per que es dibuixin els trams i les sortides
    ACESA_AUCAT.Atributs.markerManager.refresh();

	}

//]]>
