var map;
var markers = [];
var infoWindow;
var locationSelect;

function load() {
	// set map on element
	map = new google.maps.Map(document.getElementById("mapk"), {
		center: new google.maps.LatLng(38,22), // 38.349124,22.971496
		zoom: 7,
		mapTypeId: 'roadmap',
		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
  	});
  	
  	infoWindow = new google.maps.InfoWindow();
  	
  	locationSelect = document.getElementById("locationSelect");
  	//locationSelect = document.getElementById("locbb");
  	locationSelect.onchange = function() {
  		var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
  		if (markerNum != "none"){
  			google.maps.event.trigger(markers[markerNum], 'click');
  		}
  	};
}


function downloadUrl(url, callback) {
	var request = window.ActiveXObject ?
		new ActiveXObject('Microsoft.XMLHTTP') :
		new XMLHttpRequest;
		
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			request.onreadystatechange = doNothing;
			callback(request.responseText, request.status);
		}
	};
	
	request.open('GET', url, true);
	request.send(null);
}

function parseXml(str) {
	if (window.ActiveXObject) {
		var doc = new ActiveXObject('Microsoft.XMLDOM');
		doc.loadXML(str);
		return doc;
	} else if (window.DOMParser) {
		return (new DOMParser).parseFromString(str, 'text/xml');
	}
}

function clearLocations() {
	infoWindow.close();
	for (var i = 0; i < markers.length; i++) {
		markers[i].setMap(null);
	}
	markers.length = 0;
	
	locationSelect.innerHTML = "";
	var option = document.createElement("option");
	option.value = "none";
	
	if (lang == 'gr') {
  		option.innerHTML = "Δείτε τα αποτελέσματα:";
  	} else if (lang == 'en') {
  		option.innerHTML = "View results:";
  	}
	locationSelect.appendChild(option);
}

function createOption(name, num, gps) {
  var option = document.createElement("option");
  option.value = num;
  option.innerHTML = name;
  locationSelect.appendChild(option);
}


function createMarker(latlng,name,address, city, state, postcode, telephone1, telephone2, mobile, fax, emaila) {
	
	if (lang == 'gr') {
  		var directions = "<a href='http://maps.google.com/maps?daddr="+latlng+"' title='' target='_blank'>οδηγίες</a>";
  	} else if (lang == 'en') {
  		var directions = "<a href='http://maps.google.com/maps?daddr="+latlng+"' title='' target='_blank'>directions</a>";
  	}
	
	var html = "<p><span id='iwin'>"+"<b>" + name + "</b> <br/>" + address + "<br/>" + "<br/>" + city + " " + state + " " + postcode + "<br/>" + telephone1 + "<br/>" + telephone2 + "<br/>" + mobile + "<br/>" + fax + "<br/>" + "<a href='mailto:"+emaila+"' title=''>"+emaila+ "<br/><br/>" + directions + "</span></p>";
	var marker = new google.maps.Marker({
		map: map,
		position: latlng
	});
	
	google.maps.event.addListener(marker, 'click', function() {
		infoWindow.setContent(html);
		infoWindow.open(map, marker);
	});
	
	markers.push(marker);
}


function getLocs() {
  	clearLocations();
  	
  	// get state from select box
  	var state = document.getElementById('state').value;
  	
  	if (lang == 'gr') {
  		var searchUrl = path+'/etairia/alysida-katasthmaton/phpsqlsearch_genxml.php?state=' + state;	
  	} else if (lang == 'en') {
  		var searchUrl = path+'/eng/company/sales-network/phpsqlsearch_genxml.php?state=' + state;
  	}
  	
  	
  	//var searchUrl = path+'/etairia/alysida-katasthmaton/sylor-map.xml';
	
	downloadUrl(searchUrl, function(data) {
		var xml = parseXml(data);
		var markerNodes = xml.documentElement.getElementsByTagName("marker");
		var bounds = new google.maps.LatLngBounds();
		for (var i = 0; i < markerNodes.length; i++) {
			var name = markerNodes[i].getAttribute("name");
			var address = markerNodes[i].getAttribute("address");
			var city = markerNodes[i].getAttribute("city");
			var state = markerNodes[i].getAttribute("state");
			var postcode = markerNodes[i].getAttribute("postcode");
			var telephone1 = markerNodes[i].getAttribute("telephone-a");
			var telephone2 = markerNodes[i].getAttribute("telephone-b");
			var mobile = markerNodes[i].getAttribute("mobile");
			var fax = markerNodes[i].getAttribute("fax");
			var emaila = markerNodes[i].getAttribute("email-a");			
			var latlng = new google.maps.LatLng(
				parseFloat(markerNodes[i].getAttribute("lat")),
				parseFloat(markerNodes[i].getAttribute("lng"))
			);
			
			//createOption(city+' - '+name, i, latlng);
			createOption(state+' - '+city, i, latlng);
			createMarker(latlng, name, address, city, state, postcode, telephone1, telephone2, mobile, fax, emaila);
			bounds.extend(latlng);
		}
		
		map.fitBounds(bounds);
		locationSelect.style.visibility = "visible";
		locationSelect.onchange = function() {
			var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
			google.maps.event.trigger(markers[markerNum], 'click');
		};
		if (markerNodes.length < 3) {
			map.setZoom(7);
		};
	});
}





function searchLocations() {
 var address = document.getElementById("addressInput").value;
 var geocoder = new google.maps.Geocoder();
 geocoder.geocode({address: address}, function(results, status) {
   if (status == google.maps.GeocoderStatus.OK) {
	searchLocationsNear(results[0].geometry.location);
   } else {
	 alert(address + ' not found');
   }
 });
}


function searchLocationsNear() {
 clearLocations(); 

 var radius = document.getElementById('radiusSelect').value;
 //var searchUrl = path+'/etairia/ektheseis-new/phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
 var searchUrl = path+'/etairia/ektheseis-new/phpsqlsearch_genxml.php';
 downloadUrl(searchUrl, function(data) {
   var xml = parseXml(data);
   var markerNodes = xml.documentElement.getElementsByTagName("marker");
   var bounds = new google.maps.LatLngBounds();
   for (var i = 0; i < markerNodes.length; i++) {
	 var name = markerNodes[i].getAttribute("name");
	 var address = markerNodes[i].getAttribute("address");
	 //var distance = parseFloat(markerNodes[i].getAttribute("distance"));
	 var latlng = new google.maps.LatLng(
		  parseFloat(markerNodes[i].getAttribute("lat")),
		  parseFloat(markerNodes[i].getAttribute("lng")));

	 createOption(name,  i);
	 createMarker(lat,lng, name, address);
	 bounds.extend(latlng);
   }
   map.fitBounds(bounds);
   locationSelect.style.visibility = "visible";
   locationSelect.onchange = function() {
	 var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
	 google.maps.event.trigger(markers[markerNum], 'click');
   };
  });
}


function doNothing() {}

