// ############################################
// ### Script de génération GoogleMap
// ### © 2007 - Eddy Minet - InterPC
// ############################################
var obj_map_container = null;
var obj_list_points = null;
var GMAP = null;
var GEOCODER = null;
var GBOUNDS = null;
var GICON = null;
var Hp_Array = new Array();
var ErrorCallback = null;
// #################################################################
// ### InitGMap
// #################################################################
function InitGMap(p_map_container_id, p_ErrorCallback, p_liste_points_id, p_map_type) {
    if (p_ErrorCallback != null)
        ErrorCallback = p_ErrorCallback;
    if (p_liste_points_id != null)
        obj_list_points = $get(p_liste_points_id);

    obj_map_container = $get(p_map_container_id);
    
    if (obj_map_container == null)
        return;
        
    if (!GBrowserIsCompatible()) {
        showError("Votre navigateur n'est pas compatible.");
        return;
    }
    
    try {
        GMAP = new GMap2(obj_map_container);
        GMAP.setCenter(new GLatLng(47.0829, 2.39658), 5);
        if (p_map_type != null)
            SwitchMapType(p_map_type);
        GEOCODER = new GClientGeocoder();
        GBOUNDS = new GLatLngBounds();
		
		// icone
		GICON = new GIcon();
		GICON.image = "/images/gmap/marker_ico.png";
		GICON.shadow = "/images/gmap/marker_ombre.png";
		GICON.iconSize = new GSize(24, 36);
		GICON.shadowSize = new GSize(48, 36);
		GICON.iconAnchor = new GPoint(12, 36);
		GICON.infoWindowAnchor = new GPoint(14, 6);
		
    } catch(e) { showError(e.message); return; }
    
    ShowMap();
}
// #################################################################
// ### Error
// #################################################################
function showError(p_message) {
    if (ErrorCallback != null)
        ErrorCallback(p_message);
}
// #################################################################
// ### ShowMap
// #################################################################
function ShowMap() {
        
    // Trier les points
    Hp_Array.sort( function (a, b) { return (a.nom.toUpperCase()> b.nom.toUpperCase()) ? 1 : -1 } );
    
    // Récupérer chaque coordonnées
    for (var i=0; i<Hp_Array.length; i++) {
        if (obj_list_points != null)
            obj_list_points.innerHTML += '<div id="list_points_item_'+Hp_Array[i].id+'" class="list_points_item" onclick="ShowHotelPoint('+Hp_Array[i].id+');">' + Hp_Array[i].nom + '</div>';
        if (Hp_Array[i].LatLng == null)
			GetLatLng(Hp_Array[i]);
		else
			AddPoint(Hp_Array[i]);
    }
}
// #################################################################
// ### CreateHotelPoint
// #################################################################
function CreateHotelPoint(p_id, p_nom, p_adresse, p_cp, p_ville, p_pays, p_url, p_img_url) {
    p_adresse = p_adresse.toLowerCase().replace(p_nom.toLowerCase(), "");
    p_adresse = p_adresse.toLowerCase().replace(p_cp.toLowerCase(), "");
    p_adresse = p_adresse.toLowerCase().replace(p_ville.toLowerCase(), "");
    p_adresse = p_adresse.replace(/,/g, " ");
    p_adresse = p_adresse.replace(/ {2,}/g, " ");
    p_adresse = p_adresse.replace(/^\s/, "");
    p_adresse = p_adresse.replace(/\s$/, "");
    var HP = {id: p_id, nom: p_nom, address: p_adresse, cp: p_cp, ville: p_ville, pays: p_pays, LatLng: null, essais: 0, resolu: false, mark: null, image_url: p_img_url, url: p_url };
    HP.showInfo = function() {
        if (this.mark != null)
            this.mark.openInfoWindowHtml('<table border="0" cellpadding="2" cellspacing="0" class="divMapInfos"><tr><td><a href="'+this.url+'"><img border="0" src="'+this.image_url+'" alt="img" height="45" /></a></td><td><div class="divMapInfosHotel"><a href="'+this.url+'">'+this.nom+'</a><p>'+this.address+'</p><p>'+this.cp+' '+this.ville+'</p></div></td></tr></table>');
        setSelectedItem(this.id);
    }
    Hp_Array.push(HP); 
    return HP;
}
// #################################################################
// ### setSelectedItem
// #################################################################
function setSelectedItem(p_id) {
	if ($get("PointsCarte").isEmpty)
		return;
    var all_divs = $get("PointsCarte").getElementsByTagName("div");
    for (var i=0; i<all_divs.length; i++)
        all_divs[i].className = all_divs[i].className.replace(" selected", "");

    var obj_item = $get("list_points_item_" + p_id);
    obj_item.className += " selected";
}
// #################################################################
// ### GetLatLng
// #################################################################
function GetLatLng(p_HotelPoint) {
    var A = p_HotelPoint.address + " " + p_HotelPoint.cp + " " + p_HotelPoint.ville + " " + p_HotelPoint.pays;
    switch (p_HotelPoint.essais) {
        case 1:
            A = p_HotelPoint.cp + " " + p_HotelPoint.ville + " " + p_HotelPoint.pays;
            break;
    }
    GEOCODER.getLatLng(
        A, 
        function(p_latlong) { GeoCoderCallBack(p_latlong, p_HotelPoint); }
        );
}
// #################################################################
// ### GeoCoderCallBack
// #################################################################
function GeoCoderCallBack(p_latlong, HP) {   
    if (p_latlong == null) {
        HP.essais++;
        if (HP.essais < 2)
            GetLatLng(HP);
        else if (HP.onfail != null)
				HP.onfail();
    }
    else {
        HP.LatLng = p_latlong
        AddPoint(HP);
    }
    
}
// #################################################################
// ### AddPoint
// #################################################################
function AddPoint(p_HP) {
    GBOUNDS.extend(p_HP.LatLng);
    GMAP.setCenter(GBOUNDS.getCenter());
	if (Hp_Array.length == 1)
		GMAP.setZoom(14);
	else
	    GMAP.setZoom(GMAP.getBoundsZoomLevel(GBOUNDS));
    
    var m_opt = {
        title: "Cliquez pour plus d'info ...",
		icon: GICON
    }
    p_HP.mark = new GMarker(p_HP.LatLng, m_opt );
    
    GEvent.addListener(p_HP.mark, "click", 
        function() {
            p_HP.showInfo();
        }
    );
    
    
    GMAP.addOverlay(p_HP.mark);
    
	if (p_HP.onload != null)
		p_HP.onload();
}
// #################################################################
// ### ShowHotelPoint
// #################################################################
function ShowHotelPoint(p_PointId) {
    for (var i=0; i<Hp_Array.length; i++) {
        if (Hp_Array[i].id == p_PointId) {
            // aller vers le point
            //GMAP.panTo(Hp_Array[i].mark.getPoint());
            // Afficher l'info
            Hp_Array[i].showInfo();
            return;
        }
    }
}
// #################################################################
// ### ZoomMapPlus
// #################################################################
function ZoomMapPlus() {
    GMAP.zoomIn();
}
// #################################################################
// ### ZoomMapMoins
// #################################################################
function ZoomMapMoins() {
    GMAP.zoomOut();
}
// #################################################################
// ### SwitchMapType
// #################################################################
function SwitchMapType(p_map_type) {
    GMAP.setMapType( p_map_type );
    $get("MapbtCarte").className = 
    $get("MapbtSate").className = 
    $get("MapbtHybrid").className = "";
    switch (p_map_type) {
        case G_NORMAL_MAP:
            $get("MapbtCarte").className = "selected";
            $get("hidden_MapTypeState").value = "G_NORMAL_MAP";
            break;
        case G_SATELLITE_MAP:
            $get("MapbtSate").className = "selected";
            $get("hidden_MapTypeState").value = "G_SATELLITE_MAP";
            break;
        case G_HYBRID_MAP:
            $get("MapbtHybrid").className = "selected";
            $get("hidden_MapTypeState").value = "G_HYBRID_MAP";
            break;
    }
}
// #################################################################
// ### SwitchCarteVisible
// #################################################################
function SwitchCarteVisible(p_visible) {
    var carteIsVisible = p_visible != null ? !p_visible : $get("tlbMap").style.height != "0px";
    $get("tlbMap").style.height = carteIsVisible ? "0px" : "";
    obj_map_container.style.visibility = carteIsVisible ? "hidden" : "visible";
    $get("imgShowHideCarte_1").src = carteIsVisible ? "images/gmap/arrow_down.gif" : "images/gmap/arrow_up.gif";
    $get("imgShowHideCarte_2").src = carteIsVisible ? "images/gmap/arrow_down.gif" : "images/gmap/arrow_up.gif";
    $get("spanShowHideCarte").innerHTML = carteIsVisible ? "afficher la carte" : "masquer la carte";
	$get("hidden_MapVisibilityState").value = !carteIsVisible;
}

// #################################################################
// ### Raccourcis
// #################################################################
function $get(p_id) {
	var obj = document.getElementById(p_id);
	if (obj == null)
		obj = { isEmpty: true };
    return obj;
}
