/**
 * Vue MVC pour les fonctions de carto FOAD.
 *
 * @see VueCarto
 * @package offre
 */
var VueCartoFoad = Class.create(VueCarto, {

	/**
	 * Constructeur : création des éléments d'interface (boutons...).
	 */
	initialize: function($super, modele, controleur) {

		// appel constructeur VueCarto
		$super(modele, controleur, true);

		// zoom
		var options_zoom = {
			buttonStartingStyle: {
				display: 'block',
				color: 'black',
				background: 'white',
				textAlign: 'center',
				border: '1px solid gray',
				padding: '1px 3px 1px 3px',
				cursor: 'pointer',
				fontFamily: 'Arial',
				fontSize: '12px'
			},
			buttonHTML: 'Zoom',
			buttonZoomingHTML: 'Tracez un rectangle',
			buttonZoomingStyle: {
				background:'yellow'
			},
			backButtonEnabled: false
		}
		this.map.addControl(new DragZoomControl({}, options_zoom, {}));
	},

	/**
	 * Affiche les drapeaux tels qu'ils sont définis dans le Modèle
	 */
	affiche_drapeaux: function() {

		var vue = window['controleur']._vue;

		////////////////////////////////////////////////////////////////////////
		// création icônes pour les réseaux

		// icône de base dont dériveront les autres
		var icone_base = new GIcon(G_DEFAULT_ICON);
		icone_base.iconSize = new GSize(32, 32);
		icone_base.shadow = '/offre/images/foad/ombre.png';
		icone_base.printShadow = '/offre/images/foad/ombre.gif';
		icone_base.shadowSize = new GSize(49, 32);
		icone_base.iconAnchor = new GPoint(16, 32);
		icone_base.infoWindowAnchor = new GPoint(16, 2);

		// icône de chaque réseau, dérivée de l'icône de base, en changeant le
		// fichier image pour affichage et impression
		var icones = new Array();
		icones['Pyramide'] = new GIcon(icone_base);
		icones['Pyramide'].image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png';
		icones['Pyramide'].printImage = '/offre/images/foad/markerP.gif';
		icones['Pyramide'].mozPrintImage = icones['Pyramide'].printImage;
		icones['EOF_Afpa'] = new GIcon(icone_base);
		icones['EOF_Afpa'].image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png';
		icones['EOF_Afpa'].printImage = '/offre/images/foad/markerA.gif';
		icones['EOF_Afpa'].mozPrintImage = icones['EOF_Afpa'].printImage;
		icones['Pico_Draaf'] = new GIcon(icone_base);
		icones['Pico_Draaf'].image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/green-dot.png';
		icones['Pico_Draaf'].printImage = '/offre/images/foad/markerD.gif';
		icones['Pico_Draaf'].mozPrintImage = icones['Pico_Draaf'].printImage;
		icones['Sarapp_App'] = new GIcon(icone_base);
		icones['Sarapp_App'].image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png';
		icones['Sarapp_App'].printImage = '/offre/images/foad/markerS.gif';
		icones['Sarapp_App'].mozPrintImage = icones['Sarapp_App'].printImage;

		////////////////////////////////////////////////////////////////////////
		// création des drapeaux
		this._modele.liste_drapeaux.each(function(drapeau) {

			var point, marqueur, infobulle, liste_contacts;

			// création marqueur
			point = new GLatLng(
				parseFloat(drapeau.lat),
				parseFloat(drapeau.lng)
			);
			if (icones[drapeau.reseau] != null) {
				marqueur = new GMarker(point, {
					icon: icones[drapeau.reseau]
				});
			}
			else {
				// réseau inconnu
				marqueur = new GMarker(point);
			}

			// ajout marqueur
			vue.map.addOverlay(marqueur);

			// info bulle : sigle
			infobulle = '<div class="infobulle"><h4>'
				+ drapeau.lib
				+ '</h4><p>';
			// adresse
			if (drapeau.adr0 != '') infobulle += drapeau.adr0 + '<br />';
			if (drapeau.adr1 != '') infobulle += drapeau.adr1 + '<br />';
			if (drapeau.adr2 != '') infobulle += drapeau.adr2 + '<br />';
			if (drapeau.adr3 != '') infobulle += drapeau.adr3 + '<br />';
			infobulle += drapeau.codpos
				+ ' '
				+ drapeau.ville
				+ ' '
				+ drapeau.cedex
				+ '<br />'
				+ 'T&eacute;l : '
				+ drapeau.tel.replace(
					/(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/,
					'$1 $2 $3 $4 $5'
				);
			if (drapeau.fax != '') {
				infobulle += '<br />Fax : ' + drapeau.fax.replace(
					/(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/,
					'$1 $2 $3 $4 $5'
				);
			}
			// lien fiche of
			if (drapeau.id_of != '') {
				infobulle += '<br /><a href="http://www.cariforef-mp.asso.fr/1-14433-Fiche-organisme.php?num=' +
					drapeau.id_of +
					'" target="_blank">Fiche d&eacute;taill&eacute;e</a>';
			}
			// contacts : UL
			infobulle += '</p>';
			liste_contacts = new Array();
			drapeau.contacts.each(function(contact) {
				
				var txt_contact;
				
				if (contact.nom) {

					// construction du LI de ce contact
					txt_contact = '<li>'
						+ contact.nom
						+ ' '
						+ contact.fonction;
					if (contact.tel) {
						txt_contact += '<br />' + contact.tel.replace(
							/(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/,
							'$1 $2 $3 $4 $5'
						);
					}
					if (contact.mail) {
						txt_contact += '<br /><a href="mailto:'
							+ contact.mail 
							+ '">'
							+ contact.mail
							+ '</a>';
					}
					txt_contact += '</li>';
					liste_contacts.push(txt_contact);
				}		
			});
			// on ajoute les contacts s'il y en a au moins un
			if (liste_contacts.length > 0) {
				infobulle += '<h5>Contacts</h5><ul>'
					+ liste_contacts.join("\n")
					+ '</ul>';
			}

			// horaires
			infobulle += '<h5>Horaires</h5><p>'
				+ drapeau.horaires
				+ '</p></div>';

			// affectation de l'infobulle au drapeau
			marqueur.bindInfoWindowHtml(infobulle);

		});
	},

	/**
	 * Implémentation de Observer.Update. Appelé par le Modèle quand ses données
	 * ont été modifiées.
	 *
	 * @argument contexte {String} Précise quelles données ont changé.
	 */
	mise_a_jour: function(contexte) {
		switch (contexte) {
			case 'debut_requete':
				// le modèle vient de lancer une requête ajax, on affiche
				// l'image d'attente
				$('img_attente').show();
				break;
			case 'fin_requete':
				// si le modèle n'a plus de requete ajax en cours, on masque
				// l'image d'attente
				if (this._modele.compteur_requetes <= 0) {
					$('img_attente').hide();
				}
				break;
			case 'liste_drapeaux':
				// le modèle vient de recevoir la liste des drapeaux
				this.affiche_drapeaux();
				break;
			default:
				break;
		}
	}
});