﻿// JScript File

//<![CDATA[
//function Map () {

function initialize() {
    var myLatlng = new google.maps.LatLng(65, 25);
		  var myOptions = {
			zoom: 5,
			center: myLatlng,
			navigationControl: true,
			navigationControlOptions: {
			  style: google.maps.NavigationControlStyle.DEFAULT
			},
			mapTypeControlOptions: {
			  style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
			},

			scaleControl: false,
			
			mapTypeId: google.maps.MapTypeId.ROADMAP
		  }

      map = new google.maps.Map(document.getElementById("map_g"), myOptions);

      var gmarkers = [];
      var htmls = [];
      i = 0;
      j = 0;
             

      // A function to create the marker and set up the event window
      function createMarker(point,name,html, seoIcon) {
        var marker = new GMarker(point, seoIcon);
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
          document.getElementById("gm_info").innerHTML = html;
        });

        return marker;
      }

      
      places=[];

      distance=[];
      markersArray=[];
	  infowindowsArray=[];


          // Read the data from asemat.xml
          downloadUrl("../xml/asemat.xml", function(doc) {
          var xmlDoc = xmlParse(doc);
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      
          
              for (var i = 0; i < markers.length; i++) {
				  
                    // obtain the attributes of each marker
                    var lat = parseFloat(markers[i].getAttribute("lat"));
                    var lng = parseFloat(markers[i].getAttribute("lng"));
                    var point = new google.maps.LatLng(lat,lng);
                    var city = markers[i].getAttribute("city");
                    var name = markers[i].getAttribute("name");
                    var html = "<div class='gm_info_window'>";

		

                    //html += "onmouseover=this.style.cursor='pointer';heat("+i+");  "
                    //html += "onmouseout='cool("+i+")'>"

                    html += "<b>" + markers[i].getAttribute("name") + "</b><br/>" + markers[i].getAttribute("addr") + "<br/>" + markers[i].getAttribute("city");
                    if (markers[i].getAttribute("phone") != "") {
                        html += "<br/>" + markers[i].getAttribute("phone");
                    }
                    if (markers[i].getAttribute("cellphone") != "") {
                        html += "<br/>" + markers[i].getAttribute("cellphone");
                    } 
                    if (markers[i].getAttribute("email") != "") {
                        html += "<br/>" + markers[i].getAttribute("email");
                    } 
                    if (markers[i].getAttribute("www") != "") {
                        html += "<br/><a target='_blank' href='" + markers[i].getAttribute("www") + "'>" + markers[i].getAttribute("www") + "</a>";
                    } 
                    
                    html += "<br/>" + markers[i].getAttribute("info") + "</div>";
                    html = html.replace(/\[br]/ig, "<br />");

                    var label = markers[i].getAttribute("label");
                    
                    var seoIcon = new google.maps.MarkerImage('../layout/seo_icon_ball.png',
					          new google.maps.Size(20, 20),
					          new google.maps.Point(0, 0),
					          new google.maps.Point(10, 10));
                    
                    places.push({point:point,label:label,html:html,seoIcon:seoIcon,city:city,name:name,lat:lat,lng:lng}); 
                
              }
          
              if (google.loader.ClientLocation) {
                latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
                searchNear(latlng,'');
              } else {
                latlng = new google.maps.LatLng(60, 25);
                searchNear(latlng,'');
              }
              
          });
		
    }

  

  function addClick(marker,n) {
                var infowindow;
                infowindow = new google.maps.InfoWindow({
							content: places[n].html
						});
						
                google.maps.event.addListener(marker, 'click', function() {
																		
					closeInfowindows();
					infowindow.open(map,marker);
					infowindowsArray.push(infowindow);
					document.getElementById("gm_info").innerHTML = places[n].html;
				  }); 
				  
  }
  
  function distanceFrom(from,to) {
			  //var R = 6371; // km (change this constant to get miles)
			  var R = 6371000; // meters
			  var lat1 = from.lat();
			  var lon1 = from.lng();
			  var lat2 = to.lat();
			  var lon2 = to.lng();
			  var dLat = (lat2-lat1) * Math.PI / 180;
			  var dLon = (lon2-lon1) * Math.PI / 180;
			  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
				Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 )
			*
				Math.sin(dLon/2) * Math.sin(dLon/2);
			  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
			  var d = R * c;
			  return d;
    }
			
	// Deletes all markers in the array by removing references to them
	function deleteOverlays() {
		
	  if (markersArray.length != 0) {
		var i=0;
		for (i=0;i<markersArray.length;i++) {
			//alert(i);

		  	markersArray[i].setMap(null);

		}
		markersArray.length = 0;
	  }
	}
	
	function closeInfowindows() {
	  if (infowindowsArray.length != 0) {
		  var i=0;
			for (i=0;i<infowindowsArray.length;i++) {
			  infowindowsArray[i].close();
			}
			infowindowsArray.length = 0;
	  }
	}
  
  function searchNear(point,address) {
	  		
            deleteOverlays();
            document.getElementById("gm_info").innerHTML = "";
            map.setCenter(point);
            map.setZoom(7);

            for(i=0;i<places.length;i++) {
            
                distance[i] = distanceFrom(point,places[i].point);
                
                if (distance[i] < 50000) {

                    if (places[i].city.toLowerCase() == address.toLowerCase()) {
                    
                        seoIcon2 = new google.maps.MarkerImage('../layout/seo_icon_ball2.png',
					              new google.maps.Size(20, 20),
					              new google.maps.Point(0, 0),
					              new google.maps.Point(10, 10));
                        
                        places[i].seoIcon = seoIcon2;
                        
                        var marker = new google.maps.Marker({
									position: places[i].point,
									map: map,
									icon: places[i].seoIcon
						});
                        
                        markersArray.push(marker);

						addClick(marker,i);
						
                        document.getElementById("gm_info").innerHTML += places[i].html;
                        document.getElementById("gm_info").innerHTML += "<br/>";

                    } else {
                
                       var marker = new google.maps.Marker({
									position: places[i].point,
									map: map,
									icon: places[i].seoIcon
						});
                        
                        markersArray.push(marker);

						addClick(marker,i);
						
                        document.getElementById("gm_info").innerHTML += places[i].html;
                        document.getElementById("gm_info").innerHTML += "<br/>";
                    }
                }
            } 
              
  }


    var attract;

    function heat(num){
    attract = new GMarker(places[num].point);
    map.addOverlay(attract);
    //map.closeInfoWindow();
    }

    function cool(num){
    map.removeOverlay(attract);
    }

      
   function showAddress(address,station) {
        
        if (station != '') {
            gmSearchDealer(station,address);
        } else {
		    geocoder = new google.maps.Geocoder();

		    geocoder.geocode( { 'address': address + ',finland'}, function(results, status) {
		      if (status == google.maps.GeocoderStatus.OK) {
                searchNear(results[0].geometry.location,address);

		      } else {
			    alert("Hakuehtosi:'" + address + "' ei tuottanut tuloksia");
		      }
		    });
		}
    }
    
    function gmSearchDealer(dealer,address) {
        
		var str = '';
		corp=[];
		lat=[];
		lng=[];
		for(i=0;i<places.length;i++) {
			str = places[i].name;
			str = str.toLowerCase();
			dealer = dealer.toLowerCase();
			if (str.search(dealer) != -1) {
				corp.push({id:i,lat:places[i].lat,lng:places[i].lng});
				
			}
		}
		
		if (corp.length==0) {
		    if (address != '') {
		        alert('Hakemaanne asemaa:"' + dealer + '" ei löytynyt. Etsitään annetulla paikkakunnalla.');
		        showAddress(address,'');
		    } else {
			    alert('Hakemaanne asemaa:"' + dealer + '" ei löytynyt');
			}
		} else if (corp.length==1) {
			viewOne(corp[0].id);

			//viewInfo(corp[0].id);
		} else {
			//alert("useampi hakutulos");	
			for(n=0;n<corp.length;n++) {
				lat.push(corp[n].lat);
				lng.push(corp[n].lng);
				
			}
			lat.sort();
			lng.sort();
			var midlat;
			var midlng;
			midlat = (lat[0] + lat[lat.length-1])/2;
			midlng = (lng[0] + lng[lng.length-1])/2;
			
			var point = new google.maps.LatLng(midlat,midlng);
			viewSearched(point,corp);
		}
	} //gmSearchdealer()
	
	function viewSearched(point,corp) {
			document.getElementById('gm_info').innerHTML = '';
            deleteOverlays();
			var dist;
			var zoom = 10;
			

            for(i=0;i<places.length;i++) {
            	
				for(n=0;n<corp.length;n++) {
					if (corp[n].id == i)	{
					    
						if (distanceFrom(point,places[i].point) < 100000 && zoom > 7) {
							zoom=7;
							
						} else if (distanceFrom(point,places[i].point) > 500000 && zoom > 3) {
							zoom=3;
							
						} else if (distanceFrom(point,places[i].point) > 250000 && zoom > 4) {
							zoom=4;
								
						} else if (distanceFrom(point,places[i].point) > 150000 && zoom > 5) {
							zoom=5;
							
						} else if (distanceFrom(point,places[i].point) > 100000 && zoom > 6) {
							zoom=6;
							
						}
						
						var marker = new google.maps.Marker({
							position: places[i].point,
							map: map,
							icon: places[i].seoIcon			
						});
						markersArray.push(marker);
				        document.getElementById("gm_info").innerHTML += places[i].html;
				        document.getElementById("gm_info").innerHTML += "<br/>";
						addClick(marker,i);
						
					}
				}
                
            } // for ends
			
			map.setCenter(point);
			map.setZoom(zoom);
	} //viewSearched()
	
	function viewOne(id) {
	    document.getElementById('gm_info').innerHTML = '';
		deleteOverlays();
		//alert('tulee funktioon viewOne(' + id + ')');

				var marker = new google.maps.Marker({
					position: places[id].point,
					map: map,
					icon: places[id].seoIcon			
				});
				markersArray.push(marker);
				document.getElementById("gm_info").innerHTML += places[id].html;
				addClick(marker,id);
				//viewInfo(i);
				map.setCenter(places[id].point);
				map.setZoom(7);
				return;

	} //viewOne()
	
	

//}
    //]]>

