var map = null;
var geocoder = null;

function load(nlCountryName, activePartnerId, zl) {
  if (GBrowserIsCompatible()) 
  {

	if(nlCountryName.length < 1)
	{
		return;
	}
	
	if(document.getElementById('partner_legend'))
	{
	
		/* only show the legend if the country is "nederland" */
		if(nlCountryName == 'nederland')
		{
			document.getElementById('partner_legend').style.display = 'block';
		}
		else
		{
			document.getElementById('partner_legend').style.display = 'none';
		}
	}
	
	map = new GMap2(document.getElementById("google_map"));
	map.addControl(new GLargeMapControl());
	//map.addControl(new GMapTypeControl());
	//map.setCenter(new GLatLng(52.05,5.4), 1); center of the netherlands
	map.setCenter(new GLatLng(0,0),0);

	var icon = new GIcon();
	icon.image = "/data/static/images/google/marker.png";
	icon.shadow = "/data/static/images/google/shadow.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

	/* Creates a marker at the given point with the given number label */
	function createMarker(point, pid, naam, partnerType) 
	{
		var markerIcon = icon;
		
		if(partnerType > 0)
		{
			markerIcon.image = "/data/static/images/google/"+ partnerType +".png"
		}
				
		var marker = new GMarker(point, markerIcon);
		
		GEvent.addListener(marker, "click", function() 
			{
				marker.openInfoWindowHtml('<div class="google_overlay"><h3>' + naam + '</h3><div><a style="text-decoration:none;" onmouseover="highlightPartner(' + pid + ');" href="#partner' + pid + '"><img style="vertical-align:middle;" src="/data/static/images/google/information.png" border="0" />&nbsp;&nbsp;info</a></div>');
				
			}
		);
		return marker;
	}
	
	function in_array( what, where )
	{
		for(var i = 0; i < where.length; i++)
		{
			if(what == where[i])
			{
				return true;
			}
		}
		return false;
	}
	
	//GDownloadUrl("/data/static/partner/partner_flash/" + nlCountryName + '.xml', function(data, responseCode) 
	GDownloadUrl("/data/static/partner/partner_flash/getxml.php?country=" + nlCountryName, function(data, responseCode) 
	{
		map.clearOverlays();
		
		var imgUrl = '/data/prins/partner/logo/';
				
		var xml = GXml.parse(data);
		
		var markers = xml.documentElement.getElementsByTagName("partner");
		
		var country = xml.documentElement.getAttribute("name");
		
		var bounds = new GLatLngBounds();
		
		var partners = '';
		
		for (var i = 0; i < markers.length; i++) 
		{
			var pId = markers[i].getAttribute("id");
			var name = 	markers[i].getElementsByTagName("name");
			var image_logo = markers[i].getElementsByTagName("image_logo");
			var address = markers[i].getElementsByTagName("address_1");
			var url = markers[i].getElementsByTagName("url");
			var phone = markers[i].getElementsByTagName("phone");
			var fax = markers[i].getElementsByTagName("fax");
			var email = markers[i].getElementsByTagName("email");
			var city = markers[i].getElementsByTagName("city");
			var zipcode = markers[i].getElementsByTagName("zipcode");
			var description = markers[i].getElementsByTagName("description");
			
			var image_logo = markers[i].getElementsByTagName("image_logo");
			
			var rolesTag = markers[i].getElementsByTagName("roles");
			
			var partnerLpgTypes = new Array();
			
			var partnerTypes = new Array();
			
			var applicationTypes = new Array();
			
			var partnerText = '';
			
			var choosenPartnerLpgType = 1;
			if(document.getElementById('partnerlpgtype'))
			{
					choosenPartnerLpgType = document.getElementById('partnerlpgtype').options[document.getElementById('partnerlpgtype').selectedIndex].value;
			}
			
			
			if(rolesTag &&  rolesTag[0])
			{
				var roles = rolesTag[0].getElementsByTagName("role");
				
				for(x = 0; x < roles.length; x++)
				{

					/* ignore suppliers */
					if(roles[x].getElementsByTagName("partnertype")[0] && roles[x].getElementsByTagName("partnertype")[0].firstChild != null && roles[x].getElementsByTagName("partnertypeid")[0].firstChild.nodeValue != 5)
					{
						/* only add the text for the currently selected LPG type */
						if(roles[x].getElementsByTagName("partnerlpgtypeid")[0] && roles[x].getElementsByTagName("partnerlpgtypeid")[0].firstChild != null && roles[x].getElementsByTagName("partnerlpgtypeid")[0].firstChild.nodeValue == choosenPartnerLpgType)
						{
							if(roles[x].getElementsByTagName("partnertype")[0] && roles[x].getElementsByTagName("partnertype")[0].firstChild != null)
							{
								partnerText += roles[x].getElementsByTagName("partnertype")[0].firstChild.nodeValue;
								
								if(roles[x].getElementsByTagName("partnertypeid")[0] && roles[x].getElementsByTagName("partnertypeid")[0].firstChild != null)
								{
									iconId = roles[x].getElementsByTagName("partnertypeid")[0].firstChild.nodeValue;
								}
								
							}
							
							if(roles[x].getElementsByTagName("partnerlpgtype")[0] && roles[x].getElementsByTagName("partnerlpgtype")[0].firstChild != null)
							{
								partnerText += ' ' + roles[x].getElementsByTagName("partnerlpgtype")[0].firstChild.nodeValue;
								
							}
							
							if(roles[x].getElementsByTagName("applicationtype")[0] && roles[x].getElementsByTagName("applicationtype")[0].firstChild != null)
							{
								partnerText += ' ' + roles[x].getElementsByTagName("applicationtype")[0].firstChild.nodeValue;
								
							}
							partnerText += '<br />';
							
							
							
						}
						
						if(roles[x].getElementsByTagName("partnertypeid")[0] && roles[x].getElementsByTagName("partnertypeid")[0].firstChild != null)
						{
							partnerTypes[x] = roles[x].getElementsByTagName("partnertypeid")[0].firstChild.nodeValue;
						
						}
										
						
						if(roles[x].getElementsByTagName("partnerlpgtypeid")[0] && roles[x].getElementsByTagName("partnerlpgtypeid")[0].firstChild != null)
						{
							partnerLpgTypes[x] = roles[x].getElementsByTagName("partnerlpgtypeid")[0].firstChild.nodeValue;
							
						}
											
						
						if(roles[x].getElementsByTagName("applicationtypeid")[0] && roles[x].getElementsByTagName("applicationtypeid")[0].firstChild != null)
						{
							applicationTypes[x] = roles[x].getElementsByTagName("applicationtypeid")[0].firstChild.nodeValue;
							
						}
					}
					

					//alert(roles[x].getElementsByTagName("partnertype")[0].firstChild.nodeValue);
				}
				
			}
			

			/* only show distributors with the choosen lpg type */
			if(in_array(choosenPartnerLpgType, partnerLpgTypes) && !in_array(5, partnerTypes))
			{
			
				partners += '<table width="100%" cellspacing="0" cellpadding="3" class="inactive" id="partner' + pId + '">';
				partners += '	<tr>';
				partners += '		<td width="260">';
				partners += '			<h3>' + name[0].firstChild.nodeValue + '</h3>';
				partners += '			<span class="partnertype">' + partnerText + '</span>';
				if(address[0] && address[0].firstChild != null)
				{
					partners += '			<span>' + address[0].firstChild.nodeValue + '</span><br/>';
				}
				
				if(zipcode[0] && zipcode[0].firstChild != null)
				{
					partners += '			<span>' + zipcode[0].firstChild.nodeValue + '</span><br/>';
				}
				
				if(city[0] && city[0].firstChild != null)
				{
					partners += '			<span>' + city[0].firstChild.nodeValue + '</span><br/>';
				}
				
				partners += '		</td>';
				partners += '		<td width="260">';
				if(phone[0] && phone[0].firstChild != null)
				{
					partners += '			<br /><br /><span>' + phone[0].firstChild.nodeValue + '</span><br/>';
				}
				
				if(fax[0] && fax[0].firstChild != null)
				{
					partners += '			<span>' + fax[0].firstChild.nodeValue + '</span><br/>';
				}
				
				
				if(email[0] && email[0].firstChild != null)
				{
					var email = email[0].firstChild.nodeValue;
					partners += '			<span><a href="mailto:' + email + '">' + email + '</span><br/>';
				}
				
				
				if(url[0] && url[0].firstChild != null)
				{
					var url = url[0].firstChild.nodeValue;
					if(url.substr(0, 7) != 'http://')
					{
						url = 'http://' + url;
					}
					
					partners += '			<span><a target="_blank" href="' + url + '">' + url + '</a></span><br/>';
				}
				
				partners += '		</td>';
				partners += '		<td style="vertical-align:middle;">';
				partners += '			<a href="#google_map" onclick="load(\'' + country + '\',' + pId + ');"><img src="/data/static/images/google/map.png" border="0"/></a>';
				partners += '		</td>';
				
				partners += '		<td style="vertical-align:middle;" align="center">';
				if(image_logo[0] && image_logo[0].firstChild != null)
				{
					partners += '			<img width="75" src="' + imgUrl + pId + '_' + image_logo[0].firstChild.nodeValue + '" />';
				}
				partners += '		</td>';
				partners += '	</tr>';
				
				if(description[0] && description[0].firstChild != null)
				{
					partners += '	<tr><td colspan="4">' + description[0].firstChild.nodeValue + '</td></tr>';
				}
				
				partners += '</table>';
				
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("long")));
				
				bounds.extend(point); 
				
				if(point)
				{
					/* always show a green icon if LPG type is CNG (but only for nederland and india) */
					//if( (nlCountryName == 'nederland' || nlCountryName == 'india') && in_array(2, partnerLpgTypes))
					//{
					//	iconId = 2;
					//}
					//else
					//{
					//	iconId = partnerTypes[0];
					//}
				
					if(!iconId)
					{
						iconId = partnerTypes[0];
					}
					
				
					//theMarker = createMarker(point, pId, name[0].firstChild.nodeValue, partnerType[0].firstChild.nodeValue);
					theMarker = createMarker(point, pId, name[0].firstChild.nodeValue, iconId);
					map.addOverlay(theMarker);
					/* pop the active item, if there is one */
					if(activePartnerId != null && activePartnerId == pId)
					{
						GEvent.trigger(theMarker, "click");
						
					}
				}
			}
		}
		
		document.getElementById('partnersbycountry').innerHTML = partners;
		
		if(activePartnerId != null)
		{
			highlightPartner(activePartnerId);
		}
		
		if(zl != null && zl > 0)
		{
			zoomLevel = zl;
		}
		else
		{
		
			switch(nlCountryName)
			{
				/* zoomed out all the way is 1 */
				case 'azie':
				case 'india':
					zoomLevel = 2;
					break;
				case 'z_amerika':
				case 'n_amerika':
					zoomLevel = 3;
					break;
				case 'frankrijk':
				case 'ijsland':
				case 'noorwegen':
				case 'oekraine':
				case 'polen':
				case 'uk':
				case 'zweden':
					zoomLevel = 5;
					break;
				case 'griekenland':
				case 'bosnieherzegrowina':
				case 'bulgarije':
				case 'duitsland':
				case 'italie':
				case 'letland':
				case 'portugal':
				case 'serviemontenegro':
				case 'tsjechie':
				case 'zwitserland':
				case 'oostenrijk':
					zoomLevel = 6;
					break;
				case 'lithouwen':
				case 'nederland':
				case 'belgie':
				case 'kroatie':
				case 'macedonie':
				case 'slovenie':
					zoomLevel = 7;
					break;
				case 'luxemburg':
					zoomLevel = 8;
					break;
				default:
					zoomLevel = 4;
					break;
			}
		}

		//map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds)); 
		
		map.setCenter(bounds.getCenter(), zoomLevel); 
	});
		
	//map.setMapType(G_SATELLITE_TYPE);	
	//map.setMapType(G_HYBRID_MAP);
	map.setMapType(G_NORMAL_MAP);

  }
}



function googleMaps()
{
	document.body.onunload= GUnload;
	if(location.href.indexOf('/nl/') != -1)
	{
		var options = document.getElementById('continent').options;
		for (var i = 0; i < options.length; i++) 
		{
			if(options[i].value == 'europa')
			{
				document.getElementById('continent').selectedIndex = i;
			}
		}

		var options = document.getElementById('country').options;
		for (var i = 0; i < options.length; i++) 
		{
			if(options[i].value == 'nederland')
			{
				document.getElementById('country').selectedIndex = i;
			}
		}


		document.getElementById('country').style.display = 'block';
		load('nederland');
	}
	else
	{
		load('azie');
	}
}

function googleMapsIndia()
{
	document.body.onunload= GUnload;
	load('india', null, 4);
}


function chooseContinent(continent)
{
	/* reset the country selectbox */
	document.getElementById('country').selectedIndex = 0;
	
	
	
	if(continent == 'europa')
	{
		document.getElementById('country').style.display = 'block';
		document.getElementById('country_select_text').style.visibility = 'visible';
	}
	else
	{
		document.getElementById('country').style.display = 'none';
		document.getElementById('country_select_text').style.visibility = 'hidden';
		load(continent);
	}
	
	ajax_refresh(false);
	
}

function chooseCountry(country)
{
	load(country);
}

function changeType()
{
	ajax_refresh(true);

	if(document.getElementById('continent').selectedIndex == 0)
	{
		return;
	}

	var continent = document.getElementById('continent').options[document.getElementById('continent').selectedIndex].value;
	
	if(continent == 'europa')
	{
		if(document.getElementById('country').selectedIndex == 0)
		{
			return;
		}
		else
		{
			//load(document.getElementById('country').options[document.getElementById('country').selectedIndex].value);
		}
	}
	else
	{
		//load(continent);
	}
	
}

function highlightPartner(pid)
{
	var el = document.getElementById('partnersbycountry');
	var partnerTables = document.getElementsByTagName("table");
	
	for (var i = 0; i < partnerTables.length; i++) 
	{
		partnerTables[i].setAttribute("class", "inactive"); 
	}
	
	var activePartner = document.getElementById('partner' + pid);
	
	activePartner.setAttribute("class", "active");
	activePartner.setAttribute("className", "active");
	
}

function in_array( what, where )
{
	for(var i = 0; i < where.length; i++)
	{
		if(what == where[i])
		{
			return true;
		}
	}
	return false;
}

function getXmlHttpRequest()
{
	/* all browsers */
	if (window.XMLHttpRequest)
	{
		return new XMLHttpRequest();
	}
	/* except for IE */
	else if (window.ActiveXObject)
	{
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return false;
}

function ajax_refresh(updateContinents)
{
	/* get Ajax object */
	var ajax = getXmlHttpRequest();
	
	/* do Ajax request (JSON string expected) */
	ajax.onreadystatechange = function()
	{
		/* check request status */
		if (ajax.readyState == 4)
		{
			/* create string variable with ajax response text as value */
			eval('var json = ' + ajax.responseText);

			/* update the country en continent list */
			var countries = json.countries;
			var continents = json.continents;
			var countryNames = json.country_names;
			var continentNames = json.continent_names;
			
			countrySelect = document.getElementById('country');
			continentSelect = document.getElementById('continent');
						
			countrySelect.options.length = 0;
			for(i = 0; i < countries.length; i++)
			{
				countrySelect.options[countrySelect.options.length] = new Option(countryNames[i], countries[i]);
			}
			
			if(updateContinents)
			{
				continentSelect.options.length = 0;
				for(i = 0; i < continents.length; i++)
				{
					continentSelect.options[continentSelect.options.length] = new Option(continentNames[i], continents[i]);
				}
			}
			
		}
	}
	
	var choosenPartnerLpgType = 1;
	if(document.getElementById('partnerlpgtype'))
	{
			choosenPartnerLpgType = document.getElementById('partnerlpgtype').options[document.getElementById('partnerlpgtype').selectedIndex].value;
	}
	

	/* create ajax request */
	ajax.open('POST', '/distributor-lists.html?cmd=ajax&lpg_type=' + choosenPartnerLpgType + '&language=' + language, true);

	/* set request header */
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	/* send ajax request */
	ajax.send(null);

}

