var map = null;
var xml = null;
var state = 0;
var lat = 0;
var lng = 0;


extend = function (subClass, baseClass) {
   function inheritance () {}
   inheritance.prototype = baseClass.prototype;
   subClass.prototype = new inheritance ();
   subClass.prototype.constructor = subClass;
   subClass.baseConstructor = baseClass;
   subClass.superClass = baseClass.prototype;
}

function VGLoad(coderegion, mode, param, ville)
{
	map = gInitMap(coderegion);
	if (map != null) 
	{			
		switch(coderegion)
		{ // définition du centrage en fonction de la région
			case '1': // bordeaux
				lat = 44.833333000;
				lng = -0.566667000;
				zoom = 7;
				break;
			case '2': // bourgogne - beaujolais
				lat = 46.777493;
				lng = 4.86145;
				zoom = 7;
				break;
			case '4': // champagne
				lat = 49.254809;
				lng = 4.033699;
				zoom = 7;
				break;
			case '5': // sud ouest
				lat = 43.926754;
				lng = 1.587229;
				zoom = 7;
				break;
			case '6': // loire - vendée
				lat = 47.327654;
				lng = 0.241699;
				zoom = 7;
				break;
			case '10': // provence - corse
				lat = 43.277205;
				lng = 6.677197;
				zoom = 7;
				break;
			case '12': // savoie - jura
				lat = 46.13417;
				lng = 6.152344;
				zoom = 7;
				break;
			case '16': // vallée du rhône
				lat = 44.558185;
				lng = 4.752274;
				zoom = 7;
				break;
			case '17': // alsace
				lat = 48.583333000;
				lng = 7.750000000;
				zoom = 7;
				break;
			case '18': // languedoc roussillon
				lat = 43.617188;
				lng = 3.88092;
				zoom = 7;
				break;
			case '19': // cognac charente
				lat = 45.691792;
				lng = -0.325127;
				zoom = 7;
				break;
			default: // france
				lat = 47.025206001585396;
				lng = 3.22998046875;
				zoom = 5;
			
		}
		
		
	
		if(mode != 'search')
			document.getElementById(mode).innerHTML = "";
		
				
		map.addControl(new DragZoomControl());
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMapTypeControl());
		map.enableScrollWheelZoom();	
		
		var paramode = '';
		if(param.indexOf('mode') == -1)
			var paramode = '&mode='+mode;			 
		
		//map.addControl(new SearchControl());
		map.setCenter(new GLatLng(lat,lng), zoom);
		if(ville != null)
		{
			
			
			var geocoder = new GClientGeocoder();
			geocoder.getLocations(ville + ' ville, France', function(res){
				if (res.Status.code!=200) {	
				    alert('La ville '+ville+' n\'a pas été trouvée.');
					return false;
				}
		
				var pm=res.Placemark[0];
		
				lat = pm.Point.coordinates[1];
				lng = pm.Point.coordinates[0];
				zoom = 8;
				map.setCenter(new GLatLng(lat,lng), zoom);
				map.importXML("chargeXml.php?lat="+lat+"&lng="+lng+'&'+param+paramode);
			});	
		}
		else
		{
			//map.setCenter(new GLatLng(lat,lng), zoom);	
			if(coderegion > 0)
			{
				if(mode != 'itineraire')
				{
					if(document.getElementById('filtre').checked) // tous les vignerons, y compris les non localisés
						xmlurl="chargeXml.php?region="+coderegion+"&filtre=none&"+param+paramode;
					else // uniquement les localisés
						xmlurl="chargeXml.php?region="+coderegion+'&'+param+paramode;
				}
				else
					xmlurl="chargeXml.php?region="+coderegion+'&'+param+paramode;
					
			}
			else
				xmlurl="chargeXml.php?region="+coderegion+'&'+param+paramode;
			
			//if(mode == 'search')
				//xmlurl = '';
			if(mode != 'search')
				map.importXML(xmlurl);
			
		}		
	}
}

function VGoogleMap (container, coderegion) {	
	this.bounds  = new GLatLngBounds();
	this.markers = new Array();
	this.listmarkers = new Array();
	this.htmls = new Array();
	this.icons = new Array();
	this.coderegion = coderegion;	
	
	GMap2.call (this, container);
	
	this.importXML = function (url) {
		 GDownloadUrl(url, function(data) {			
		  	var latcoord = [];
			var lngcoord = [];
			
				xml = GXml.parse(data);
				//alert('test');
				this.markers = xml.documentElement.getElementsByTagName("marker");
				var msgTxt = xml.documentElement.getElementsByTagName('msg')[0].getAttribute('txt');

				var mode = xml.documentElement.getElementsByTagName("modeaff")[0].getAttribute("valeur");
				
								
				//document.getElementById('onglet-ouvert').innerHTML  = '';
				//if(this.markers.length > 0){	
				var nbResultat = this.markers.length;
				if(nbResultat > 0)
				{
							
					var page = 1;
					if(nbResultat > 1)
						var txtVigneron = ' vignerons';
					else
						var txtVigneron = ' vigneron';
					
					var listeID = '';
					if(mode == 'itineraire')
						listeID = ' id="listepanier"';
					var content = '<div style="padding-left:20px">Résultat de la recherche : <strong class="envaleur">'+nbResultat+txtVigneron+'</strong></div><div id="p'+page+'" class="pageResult"><ul'+listeID+'>';
					
					var limitePage = 6;
					var nbPage = Math.ceil(nbResultat/limitePage);
					var debut = 0;
					var nbEnCours = 1;
					
				
					for (var i = 0; i < nbResultat; i++) 
					{
						var numadh = markers[i].getAttribute("numadh");
						var numdomaine = markers[i].getAttribute("numdomaine");
						var domaine = markers[i].getAttribute("domaine");
						var adr1 = markers[i].getAttribute("adresse1");
						var adr2 = markers[i].getAttribute("adresse2");
						var ville = markers[i].getAttribute("ville");
						var cp = markers[i].getAttribute("cp");
						var tel = markers[i].getAttribute("tel");
						var fax = markers[i].getAttribute("fax");	
						var localise = markers[i].getAttribute("localise");
						
						var chaine = new String(domaine);
																		
						latcoord[i] = parseFloat(markers[i].getAttribute("lat"));
						lngcoord[i] = parseFloat(markers[i].getAttribute("lng"));
						if(localise == 'oui')
						{
							var point = new GLatLng(latcoord[i], lngcoord[i]);									
							
							var marker = map.createMarker(i, point, mode, numadh, numdomaine, domaine);
							map.addOverlay(marker);
							//alert(url)
							/*if(map.coderegion > 0)
							{*/
							if(mode == 'selection')
							{
								content += '<li class="adh"><a href="javascript:map.markerClicked(map,'+i+')" class="lienDomaine">'+domaine+'</a><a href="javascript:;" onclick="addcart('+numdomaine+');return false;" class="btblanc" style="width:132px;position:absolute;top:2px;right:72px;">Ajouter à mon itinéraire</a><a href="annuaire.php?page_annu=oenotourisme&numadh='+ numadh +'" class="btorange" style="width:68px;position:absolute;top:2px;right:-13px;">voir la fiche</a></li>';
							}
							else
							{
								content += '<li class="adh-iti" id="li_'+numdomaine+'"><a href="javascript:savoirPlus('+numdomaine+')" class="lienDomaine">'+domaine+'</a><a href="annuaire.php?page_annu=oenotourisme&numadh='+ numadh +'" class="btorange" style="width:68px;position:absolute;top:6px;right:94px;">voir la fiche</a><a href="javascript:;" onclick="supprcart('+numdomaine+');return false;" class="btrouge" style="width:68px;position:absolute;top:6px;right:10px;">Supprimer</a><div id="plus'+numdomaine+'" class="adh-iti-more"></div></li>';
							}
						}
						else
						{
							/*if(map.coderegion > 0)
							{	*/	
							if(mode == 'selection')
							{
								 content += '<li class="adh">' +domaine+' (non localisé) <a href="javascript:;" onclick="addcart('+numdomaine+');return false;" class="btblanc" style="width:132px;position:absolute;top:2px;right:72px;">Ajouter à mon itinéraire</a><a href="annuaire.php?page_annu=oenotourisme&numadh='+ numadh +'" class="btorange" style="width:68px;position:absolute;top:2px;right:-13px;">voir la fiche</a></li>';						
							
							}
							else
							{
								content += '<li class="adh-iti" id="li_'+numdomaine+'"><a href="javascript:savoirPlus('+numdomaine+')" class="lienDomaine">'+domaine+'</a><a href="annuaire.php?page_annu=oenotourisme&numadh='+ numadh +'" class="btorange" style="width:68px;position:absolute;top:6px;right:94px;">voir la fiche</a><a href="javascript:;" onclick="supprcart('+numdomaine+');return false;" class="btrouge" style="width:68px;position:absolute;top:6px;right:10px;">Supprimer</a><div id="plus'+numdomaine+'" class="adh-iti-more"></div></li>';
							}
						}	
						
						if(mode == 'selection')
						{
							var j= nbEnCours%6;
							if(j == 0 || nbEnCours == this.markers.length)
							{
								content += '</ul></div>';
								
								if(i < this.markers.length){
									page++;
									content += '<div id="p'+page+'"class="pageResult"><ul>';
								}
							}
							nbEnCours++;
						}
					}
					
					if(mode == 'selection')
					{
						var htmlPages = '';
						
						if(nbPage > 1)
						{
							pagination = new Pagination('p', 'pagination', nbPage, 4);					
							htmlPages = pagination.showPageNav();
							
						}
						//alert(content);
						document.getElementById(mode).innerHTML =  content + '<div id="pagination">'+htmlPages+'</div>';
						pagination.showRecords(1);
					}
					else
					{
						
						document.getElementById(mode).innerHTML =  content + '</ul></div>';
						Sortable.create('listepanier', {onUpdate:function(){changer_ordre(Sortable.serialize('listepanier'));} });						
					}					
				}
				
				if(msgTxt != '')
				{
					//alert(msgTxt);	
					document.getElementById(mode).innerHTML = msgTxt + document.getElementById(mode).innerHTML;
				}
		
			/*else
			{
				alert('Aucun vigneron n\'a été trouvé.');				
			}*/
        }, 'application/x-www-form-urlencoded');
	}	
	
	this.createMarker = function(i, point, mode, numadh, numdomaine, nom) {

		var icone = new GIcon(G_DEFAULT_ICON); 
		icone.image = 'lib/vinGoogleMap/icons/logovif.png';
		icone.shadow = 'lib/vinGoogleMap/icons/shadow-logovif.png';
	
	   this.listmarkers[i] = new GMarker(point,{icon:icone,title:nom});	   
	
	   var html = '';
		if (nom != '') html = '<a href="annuaire.php?page_annu=oenotourisme&numadh='+ numadh +'" class="envaleur"><strong>'+ nom +'</strong></a><br/><br/>';
		/*for(var j = 0; j < icones.length; j++)
		{
			html += '<img src="'+icones[j][0]+'" alt="'+icones[j][1]+'" title="'icones[j][1]+'" />';	
		}*/
		//html += '<i>';		
		/*if (adr1 != '') html += adr1+'<br/>';
		if (adr2 != '') html += adr2+'<br />';
		if (cp != '') html += cp+' ';
		if (ville != '') html += ville;
		html += '</i><br/>';
		if (tel != '') html += 'tel : '+tel+'<br/>';
		if (fax != '') html += 'fax : '+fax+'<br/>';*/
		/*if(this.coderegion > 0)
		{*/
		if(mode == 'selection')
			html += '<a href="javascript:;"  class="btblanc" style="width:132px;" onclick="addcart('+numdomaine+');return false;">Ajouter à mon itinéraire</a>';		
		else
			html += '<a href="javascript:;"  class="btblanc" style="width:170px;" onclick="supprcart('+numadh+');return false;">Supprimer de mon itinéraire</a>';
		/*}
		else
		{
			html += '<a href="javascript:;"  class="btblanc" style="width:132px;" onclick="map.supprcart('+numadh+');return false;">Supprimer de mon itinéraire</a>';
		}*/
		this.htmls[i] = html;
	
	     GEvent.addListener( this.listmarkers[i], 'click', function() {
       
		 map.markerClicked(map, i);
      });

      return  this.listmarkers[i];
    }
	this.openInfoWindow = function (html, i) {
		this.listmarkers[i].openInfoWindowHtml(html);
	}
	
	this.markerClicked = function(map, i){
		 map.openInfoWindow(this.htmls[i], i);
	}
	
		
	/*this.trafic = function(state){
		if(state == 1)
		{
			map.removeOverlay(trafficInfo);
			state = 0;
		}
		else
		{
			 var trafficOptions = {incidents:true};
			 var trafficInfo = new GTrafficOverlay(trafficOptions);
			 map.addOverlay(trafficInfo);
			 state = 1;
		}
	}
	*/
	this.doSearch = function(){	
		var geocoder = new GClientGeocoder();
		geocoder.getLocations(document.getElementById('inputsearch').value + ' france', function(res){
			if (res.Status.code!=G_GEO_SUCCESS) {
				alert('Lieu introuvable');
				return false;
			}
			
			var pm=res.Placemark[0];
		
			map.setCenter(new GLatLng(pm.Point.coordinates[1], pm.Point.coordinates[0]), 10);
	
		});
	}	
}

extend (VGoogleMap, GMap2);


function gInitMap(coderegion) {
	return GBrowserIsCompatible() ? new VGoogleMap(document.getElementById('VGM_map'), coderegion) : null;
}


