//<![CDATA[

var map = null;
var geocoder = null;
var plines = null;

var address_marker = null	;

function GMapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		geocoder = new GClientGeocoder();

		map.setCenter(new GLatLng(orig_lat, orig_lng), zoom_orig);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
	}
	
	/* si hénergement */
	if (fromresa) {
		var point = new GLatLng(fromresa.lat, fromresa.lng);
		var info = GMapGetInfo(fromresa);
		fromresa.marker = GMapCreateMarkerFromPoint(point, GMapCreateIcon('', 0, 0), info);
		map.addOverlay(fromresa.marker);
		fromresa.marker.openInfoWindowHtml(info);
		map.setCenter(point, zoom_orig+1);
	}
}

function GMapUnLoad() {
	GUnload();
}

function GMapCreateIcon (img, w, h) {
	var ico = new GIcon();
	
	shadow = null;
	if (img == '' || w == 0 || h == 0) {
		img = "http://labs.google.com/ridefinder/images/mm_20_green.png";
		shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		w = 12; h = 20;
	}
	ico.iconSize = new GSize(w, h);
	ico.iconAnchor = new GPoint(w/2, h/2);
	ico.infoWindowAnchor = new GPoint(w/2, h/2);
	ico.image = img;
	if (shadow)
		ico.shadow = shadow;
	return ico;
}

function GMapShowRub(num) {
	var i;
	var n;
	var submenu = '';
	var first = true;
	
	if (!gmaprubs)
		return;
		
	for (i=0, n = gmaprubs.length; i<n; i++) {
		if (gmaprubs[i].rub_id == num) {
			if (first) {
				submenu += '<a class="first" href="javascript:GMapShowSubRub(' + gmaprubs[i].sousrub_id + ');">' + gmaprubs[i].sousrubrique + '</a>';
				first = false;
			}
			else
				submenu += '<a href="javascript:GMapShowSubRub(' + gmaprubs[i].sousrub_id + ');">' + gmaprubs[i].sousrubrique + '</a>';
		}
	}
	o = document.getElementById('gmap_submenu');
	if (o)
		o.innerHTML = '<div class="content">' + submenu + '</div>';
	
	GMapHideTrans();
	map.setCenter(new GLatLng(orig_lat, orig_lng), zoom_orig);
}

function GMapShowSubRub(num) {
	GMapHidePoints();
	GMapShowPoints(num);
}

function GMapHidePoints() {
	var i;
	var n;
	
	if (map)
		map.closeInfoWindow();
	
	for (i=0, n = gmappoints.length; i<n; i++) {
		if (typeof(gmappoints[i].marker) == 'object')
			gmappoints[i].marker.hide();
	}
	
	if (fromresa) {
		if (typeof(fromresa.marker) == 'object')
			fromresa.marker.hide();
	}
	
	if (address_marker) {
		if (typeof(address_marker) == 'object')
			address_marker.hide();
	}
	
}

function GMapShowPoints(num) {
	var i;
	var n;
	var submenu = '';
	
	if (!gmappoints)
		return;
	
	for (i=0, n = gmappoints.length; i<n; i++) {
		if (gmappoints[i].rubrique == num) {
			if (typeof(gmappoints[i].marker) == 'object')
				gmappoints[i].marker.show();
			else {
				var point = new GLatLng(gmappoints[i].latitude, gmappoints[i].longitude);
				gmappoints[i].marker = GMapCreateMarkerFromPoint(point, GMapGetIcon(gmappoints[i].rubrique), GMapGetInfo(gmappoints[i]));
				map.addOverlay(gmappoints[i].marker);
			}
		}
	}
}

function GMapCreateMarkerFromPoint(point, icon, info) {
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(info);
	});
	return marker;
}


function GMapGetIcon(rid) {
	var i;
	var n;
	var ico = null;
		
	if (gmapicons) {
		for (i=0,n = gmapicons.length; i<n; i++) {
			if (gmapicons[i].rid == rid) {
				if (typeof(gmapicons[i].icone) != 'object')
					gmapicons[i].icone = GMapCreateIcon(gmapicons[i].path, gmapicons[i].w, gmapicons[i].h);
				ico = gmapicons[i].icone;
				break;
			}
		}
	}
	
	if (!ico)
		ico = GMapCreateIcon('', 0, 0);
	
	return ico;
}

function GMapGetInfo (point) {
	var info = '';
	var extra = '';
	
	info += '<div class="gmap-infos">'
	if (point.photo != '')
		info += '<img src="' + point.photo + '" alt="" />';
	info += '<strong>' + point.intitule + '</strong><br /><br />';
	info += point.adresse + '<br />';
	info += point.codepostal + ' ' + point.ville + '<br />';
	
	if (point.tel != '')
		extra += GMapGetI18n('tel') + ' : ' + point.tel + '<br />';
	if (point.fax != '')
		extra += GMapGetI18n('fax') + ' : ' + point.fax + '<br />';
	if (point.web != '')
		extra += GMapGetI18n('web') + ' : ' + '<a href="' + point.web + '" target="_blanck">' + point.web + '</a><br />';
		
	if (extra != '')
		info += '<br />' + extra;
	
	info += '</div>'
	return info;
}

function GMapGetI18n(text) {
	var ret = '';
	var i;
	var n;
	
	if (gmapi18n) {
		for (i=0,n = gmapi18n.length; i<n; i++) {
			if (gmapi18n[i].nom == text) {
				ret = gmapi18n[i].val;
				break;
			}
		}
	}
	return ret;
}

function GMapShowTransRub() {
	var i;
	var n;
	var submenu = '';
	var first = true;
	
	if (!lignesbus)
		return;
	
	for (i=0, n = lignesbus.length; i<n; i++) {
		if (first) {
			submenu += '<a class="first" href="javascript:GMapShowTrans(' + lignesbus[i].id + ');">' + lignesbus[i].nom + '</a>';
			first = false;
		}
		else
			submenu += '<a href="javascript:GMapShowTrans(' + lignesbus[i].id + ');">' + lignesbus[i].nom + '</a>';
	}
	
	o = document.getElementById('gmap_submenu');
	if (o)
		o.innerHTML = '<div class="content">' + submenu + '</div>';
	
	map.setCenter(new GLatLng(orig_lat, orig_lng), zoom_orig);
}

function GMapShowTrans(id) {
	var i;
	var n;
	var j;
	var k;
	var ligne = null;

	GMapHidePoints();
	GMapHideTrans();
	
	if (!lignesbus)
		return;

	if (!lignesbus[id])
		return;

	if (typeof(lignesbus[id].markers) == 'object') {
		for (i=0, n=lignesbus[id].markers.length; i<n; i++) {
			lignesbus[id].markers[i].show();
		}
	}
	else {
		lignesbus[id].markers = [];
		
		var request = GXmlHttp.create();
		request.open("GET", lignesbus[id].fichier, true);
		request.onreadystatechange = function() {
	        if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
	         
				/* on pose les markers */
				for (i=0, n=markers.length; i<n; i++) {
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lng = parseFloat(markers[i].getAttribute("lng"));
					var point = new GLatLng(lat,lng);
					var html = markers[i].firstChild.nodeValue;
					var marker = GMapCreateMarkerFromPoint(point, GMapCreateIcon('', 0, 0), html);
					lignesbus[id].markers.push(marker);
					map.addOverlay(marker);
				}
		          
				/* on trace les lignes */
				var lines = xmlDoc.documentElement.getElementsByTagName("line");
				for (i=0, n=lines.length; i<n; i++) {
					var color = lines[i].getAttribute("color");
					var width  = parseFloat(lines[i].getAttribute("width"));
					var points = lines[i].getElementsByTagName("point");
					var pts = [];
					for (j=0, k=points.length; j<k; j++) {
						pts[j] = new GLatLng(parseFloat(points[j].getAttribute("lat")), parseFloat(points[j].getAttribute("lng")));
					}
					var poly = new GPolyline (pts, color, width);
					lignesbus[id].markers.push(poly);
					map.addOverlay(poly);
				}
			}
		}
		request.send(null);
	}
}

function GMapHideTrans() {
	var i;
	var n;
	var j; 
	var m;
	
	if (map)
		map.closeInfoWindow();
	
	if (!lignesbus)
		return;
	
	for (i=0, n = lignesbus.length; i<n; i++) {
		if (typeof(lignesbus[i].markers) == 'object') {
			for (j=0, m=lignesbus[i].markers.length; j<m; j++) {
				lignesbus[i].markers[j].hide();
			}
		}
	}
}

function GMapSearchAddress () {

	var address = document.getElementById("adresse").value;
	if (address) {
		geocoder.getLatLng(address, function(point) {
			if (point) {
				if (address_marker == null) {
					address_marker = new GMarker(point);
					map.addOverlay(address_marker);
				}
				else {
					address_marker.setPoint(point);
					address_marker.show();
				}
				address_marker.openInfoWindowHtml(address);
			}
		});
	}
}

function KeyGMapSearchAddress(e) {
	var key;
	if(window.event)
		key = window.event.keyCode; //IE
	else
		key = e.which; //firefox

	if (key == 13) {
		GMapSearchAddress();
		return false;
	}
	
	return true;
}

//]]
