var map;
var markerArray = [];
var marker;

function initMap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(48.080667, 11.529014), 3);
    }
}

function initMapAnnotations() {
    if (GBrowserIsCompatible()) {
      map = new GMap2(document.getElementById("map"));
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
      map.setCenter(new GLatLng(48.080667, 11.529014), 3);

      var url = GDownloadUrl("/rest?method=tweets", function(data, responseCode) {
    	  
      var xml = GXml.parse(data);
        
      var markers = xml.documentElement.getElementsByTagName("item");        
        
        for (var i = 0; i < markers.length; i++) {
          var tweetId = markers[i].getElementsByTagName("id").item(0).firstChild.nodeValue;
          var twitter_username = '';
          if (markers[i].getElementsByTagName("twitter_username").item(0).firstChild) {
        	  twitter_username = markers[i].getElementsByTagName("twitter_username").item(0).firstChild.nodeValue;
          } else {
        	  console.debug('twitter username could not be found: ' + tweetId);
        	  twitter_username = '';
        	  continue;
          }
          var twitter_screen_name = markers[i].getElementsByTagName("twitter_screen_name").item(0).firstChild.nodeValue;
          var twitter_profile_image = markers[i].getElementsByTagName("twitter_profile_image").item(0).firstChild.nodeValue;
          var created = markers[i].getElementsByTagName("time").item(0).firstChild.nodeValue;
          var latitude = markers[i].getElementsByTagName("latitude").item(0).firstChild.nodeValue;
          var longitude = markers[i].getElementsByTagName("longitude").item(0).firstChild.nodeValue;
          var street = markers[i].getElementsByTagName("street").item(0).firstChild.nodeValue;
          var city = '';
          if (markers[i].getElementsByTagName("city").item(0).firstChild) {
          	city = markers[i].getElementsByTagName("city").item(0).firstChild.nodeValue;
          }
          
          latitude = parseFloat(latitude);
          longitude = parseFloat(longitude);
          
          var name = 'Blitzer';
          var bShowMarker = false;
          var point = new GLatLng(latitude, longitude);
          
          if (showRadar == tweetId) {
          	map.setCenter(point, 17);
          	bShowMarker = true;
          }
          
          var html = "<img style=\"margin-right: 2px; \" src=\"" + twitter_profile_image + "\" align=\"left\" /><div class=\"annotation\"><b>" + name + "</b> <br/>" + street + "<br />" + city + "<br />" + created;
          html += "<br />gemeldet von <a href=\"http://www.twitter.com/" + twitter_username + "\" />" + twitter_username + " </a></div>";      	  
          
          markerArray.push(createMarker(point, html, i, bShowMarker));
        } // for
        
        var markerCluster = new MarkerClusterer(map, markerArray);

        
      }); // var 
    }
  }

function createMarker(point, myHtml, number, bShowMarker) {
	  var icon = new GIcon(G_DEFAULT_ICON);
  	  icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png";
  	  
	  var marker = new GMarker(point, {icon: icon});
	  marker.value = number;
	  GEvent.addListener(marker, "click", function() {
	    map.openInfoWindowHtml(point, myHtml);
	  });
	  
	  if (bShowMarker == true) {
		  map.openInfoWindowHtml(point, myHtml);
	  }
	  
	  return marker;
	}


function initDisplayLinks() {

	dojo.query("ul#displayLinks li").forEach(function(clickedNode, index) {
		
		var iPhoneDisplayImageNode = dojo.byId('iPhoneDisplay');
		
	    dojo.connect(clickedNode, 'mouseover', function(e){
	    	
	    	dojo.query("ul#displayLinks li").forEach(function(node, index) {
	    		dojo.removeClass(node, "active");
	    	});
	    	
	    	dojo.addClass(clickedNode, "active");
	    	
	    	dojo.byId(iPhoneDisplayImageNode).src = '/img/' + clickedNode.id;
	    });
	});		
}

function initSubmitForm() {
	var geocoder = new GClientGeocoder();
	
    dojo.connect(dojo.byId('submitRadar'), 'click', function(e) {
    	
    	if (dojo.byId('street').value != '' && dojo.byId('zip').value != '' && dojo.byId('city').value != '') {
    		getAddressForSubmit(getAddressValues());
    	}
    });
}

function initSearch() {
	var geocoder = new GClientGeocoder();

    dojo.connect(dojo.byId('address'), 'onfocus', function(e) {
    	if (dojo.byId('address').value == 'Stadt oder Adresse') {
    		dojo.byId('address').value = '';
    	}
    });	
	
    dojo.connect(dojo.byId('search'), 'click', function(e) {
    		showAddress(dojo.byId('address').value);
    });
    
	dojo.connect(dojo.byId("address"), 'onkeypress', function(e) {
		if (e.keyCode == dojo.keys.ENTER) {
			showAddress(dojo.byId('address').value);
		}
	});
}

function getAddressValues() {
	var value;
	value = dojo.byId('street').value;
	value += ', ' + dojo.byId('zip').value;
	value += ' ' + dojo.byId('city').value;
	return value;
}

function showAddress(address) {
	
	var geocoder = new GClientGeocoder();
	
	geocoder.getLatLng(
		address,
	    function(point) {
	      if (!point) {

	      } else {

	        map.setCenter(point, 13);
	        /*
	        var marker = new GMarker(point);
	        map.addOverlay(marker);
	        marker.openInfoWindowHtml(address);
	        */
	      }
	    }
	);
}

function getAddressForSubmit(address) {
	
	var geocoder = new GClientGeocoder();
	
	geocoder.getLatLng(
		address,
	    function(point) {
	      if (!point) {

	      } else {
	    	  dojo.byId('latitude').value = point.lat();
	    	  dojo.byId('longitude').value = point.lng();
	    	  dojo.byId('createForm').submit();
	      }
	    }
	);
}


