var minmagnitude = 2;
var url = "racekites1.xml";
//var url = "testwrite.asp";
var latitude = 52.48;
var longitude = 2.15;
var zoom = 5;
var type = "map";
var map;
var timeOut = 165;
var i=0;
var items;
var yellowicon; var blueicon; var whiteicon; var greenicon;
//Detect IE5.5+
var isMSIE = false;
var isOpera = false;
var MSIEversion=0;

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ 
 var ffversion=new Number(RegExp.$1); 
 if (ffversion>=3) {
   var isFF3 = true;
 }
}


if (navigator.appVersion.indexOf("MSIE")!=-1) {
  temp=navigator.appVersion.split("MSIE");
  MSIEversion=parseFloat(temp[1]);
}
if (MSIEversion>=5.5 || isFF3) { //NON IE browser will return 0
  isMSIE = true;
}
if (navigator.userAgent.indexOf("Opera")!=-1) {
  isOpera = true;
  isMSIE = false;
}

// Center map on the given coordinates and chooses either satellite, hybrid or map type
function recenter(latitude, longitude, zoom, type) {
  map.setCenter(new GLatLng(latitude, longitude));
  map.setZoom(zoom);
  if (type == 'sat') {
    map.setMapType(G_SATELLITE_MAP);
  } else if (type == 'hybrid') {
    map.setMapType(G_HYBRID_MAP);
  } else {
    map.setMapType(G_NORMAL_MAP);
  }
}

// Creates a marker whose info window displays the given text
function createMarker(point, magnitude, link, title, thisDescription, thisParking, thisSitesize, thisFacilities, thisUsername, thisLat, thisLong) {
   switch (magnitude) {
   case "2":
        var marker = new GMarker(point,whiteicon);
	break;
   case "3":
        var marker = new GMarker(point,greenicon);
	break;
   case "4":
        var marker = new GMarker(point,blueicon);
	break;
   case "5":
        var marker = new GMarker(point,yellowicon);
	break;
   default:
        var marker = new GMarker(point);
   }


    	var zoomCopyright = '<tr><td align="center" height="25" valign="middle"><img src="../images/common/zoomIn.gif">';
         zoomCopyright = zoomCopyright + '&nbsp;<a href="javascript:zoomIn(' + thisLat + ',' + thisLong + ', 15);"><img src="../images/common/zoom1.gif" border="0"/></span></a>';
    	 zoomCopyright = zoomCopyright + '&nbsp;<a href="javascript:zoomIn(' + thisLat + ',' + thisLong + ', 12);"><img src="../images/common/zoom2.gif" border="0"/></span></a>';
      	 zoomCopyright = zoomCopyright + '&nbsp;<a href="javascript:zoomIn(' + thisLat + ',' + thisLong + ', 8);"><img src="../images/common/zoom3.gif" border="0"/></span></a>';
      	 zoomCopyright = zoomCopyright + '&nbsp;<a href="javascript:zoomIn(' + thisLat + ',' + thisLong + ', 5);"><img src="../images/common/zoom4.gif" border="0"/></span></a>';
      	 zoomCopyright = zoomCopyright + '&nbsp;<a href="javascript:zoomIn(' + thisLat + ',' + thisLong + ', 3);"><img src="../images/common/zoom5.gif" border="0"/></span></a>';
	 zoomCopyright = zoomCopyright + '&nbsp;<img src="../images/common/zoomOut.gif"></td></tr>';
	 zoomCopyright = zoomCopyright + '<tr><td align="center" style="color : #aaaaaa; padding : 0px; background : #ffffff;">&copy; copyright racekites.com</td></tr>';



   var html = '<div id="marker1"><table border="0" width="300">';
   html = html + '<tr><td style="border-bottom : 1px solid #cccccc; padding : 5px;"><img src="../images/common/blue_arrow01.gif">&nbsp;<strong>Location : ' + title +'</strong></td></tr>';
   html = html + '<tr><td style="padding : 5px;">' + thisDescription + '</td></tr>';
   html = html + '<tr><td style="border-bottom : 1px solid #cccccc; padding : 5px;"><strong>Parking</strong></td></tr>';
   html = html + '<tr><td style="padding : 5px;">' + thisParking + '</td></tr>';
   html = html + '<tr><td style="border-bottom : 1px solid #cccccc; padding : 5px;"><strong>Facilities</strong></td></tr>';
   html = html + '<tr><td style="padding : 5px;">' + thisFacilities + '</td></tr>';
   html = html + '<tr><td style="border-bottom : 1px solid #cccccc; padding : 5px;"><strong>Size</strong></td></tr>';
   html = html + '<tr><td style="padding : 5px; border-bottom : 1px solid #cccccc; ">' + thisSitesize +  '</td></tr>';
   html = html + '<tr><td align="center"><a href="http://maps.google.com/maps?saddr=&daddr=' + thisLat + ',' + thisLong + '" target="racekitesDirections"><img src="../images/locations/motorway.gif" border="0"></a></td></tr>';
   html = html + '<tr><td style="padding : 5px;" align="center"><a href="http://maps.google.com/maps?saddr=&daddr=' + thisLat + ',' + thisLong + '" target="racekitesDirections">Get Directions</a><br/></td></tr>';
   html = html + '<tr><td style="padding : 5px;"><center>Added by <strong>' + thisUsername + '</strong></center></td></tr>';
   html = html + zoomCopyright;
   html = html + '</table></div>';


   GEvent.addListener(marker, "click", function() {
     marker.openInfoWindowHtml(html);
   });

   return marker;
}

function zoomIn(latitude, longitude, level) {
		map.setCenter(new GLatLng(latitude, longitude), level);	
	}

function zoomOut(latitude, longitude, level) {
		map.setCenter(new GLatLng(latitude, longitude), level);	
	}


function onLoad() {
  if (!GBrowserIsCompatible()) {
    var err = document.getElementById("errmsg");
    err.style.visibility = "visible";
  } else {
    getParameters();
    var baseicon = new GIcon();
    baseicon.image = "http://labs.google.com/ridefinder/images/mm_20_white.png";
    baseicon.shadow = "http://www.racekites.com/images/locations/google_20_shadow.png";
    baseicon.iconSize = new GSize(12, 20);
    baseicon.shadowSize = new GSize(22, 20);
    baseicon.iconAnchor = new GPoint(6, 20);
    baseicon.infoWindowAnchor = new GPoint(5, 1);

    whiteicon = new GIcon(baseicon);
    whiteicon.image = "http://labs.google.com/ridefinder/images/mm_20_white.png";
    yellowicon = new GIcon(baseicon);
    yellowicon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
    greenicon = new GIcon(baseicon);
    greenicon.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
    blueicon = new GIcon(baseicon);
    blueicon.image = "http://www.racekites.com/images/locations/google_20.png";

    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl());


		/*
		// display lat/long in div
		GEvent.addListener(map, "moveend", function() {
  			var center = map.getCenter();
  			document.getElementById("message").innerHTML = center.toString();  		
			});
		*/

		 GEvent.addListener(map, "infowindowopen", function() {
  			document.getElementById("crosshair").style.visibility = "hidden";
  			})

 		 GEvent.addListener(map, "infowindowclose", function() {
  			document.getElementById("crosshair").style.visibility = "visible";
  			})
			

    if (type == 'sat') {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_SATELLITE_MAP);
    } else if (type == 'hybrid') {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_HYBRID_MAP);
    } else {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_NORMAL_MAP);
    }

    var request = GXmlHttp.create();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
    	if (request.readyState == 4) {


        var xmlDoc = request.responseXML;


        var pubDate =  xmlDoc.documentElement.getElementsByTagName("pubDate")[0].firstChild.nodeValue;
	document.getElementById('pubDate').firstChild.nodeValue = ". Last update on " + pubDate + ".";
        items = xmlDoc.documentElement.getElementsByTagName("item");
        window.setTimeout(mapOne,timeOut);


      }
    }
    request.send(null);

    // Monitor the window resize event and let the map know when it occurs
    if (window.attachEvent) {
      window.attachEvent("onresize", function() {this.map.checkResize()} );
    } else {
      window.addEventListener("resize", function() {this.map.checkResize()} , false);
    }


	GEvent.addListener(map, "moveend", function() {
        	var center = map.getCenter();
		
        	document.locationForm.locationForm_Lat.value = center.lat().toFixed(4);
        	document.locationForm.locationForm_Lng.value = center.lng().toFixed(4);
			
      	});



    if (document.getElementById("latitude")) {
      var center = map.getCenter();
      document.getElementById("latitude").innerHTML = center.lat().toFixed(4);
      document.getElementById("longitude").innerHTML = center.lng().toFixed(4);

      GEvent.addListener(map, "moveend", function() {
        var center = map.getCenter();
        document.getElementById("latitude").innerHTML = center.lat().toFixed(4);
      document.getElementById("longitude").innerHTML = center.lng().toFixed(4);
      });
    }




  }
}

function getValueByTagName(node, tag) {
  var a = node[i].getElementsByTagName(tag)[0];
  if (a) {
    if (a.firstChild && a.firstChild.nodeValue) {
      return(a.firstChild.nodeValue);
    }
  } else {
  alert ('node[i] is null: tag=' + tag);
  }
}

function mapOne() {
  if ( i < items.length ) {
    var max=Math.min(i+10, items.length);
    while (i < max) {

      if (isMSIE)
      {
      	thisLat = getValueByTagName(items,'geo:lat');
      	thisLong = getValueByTagName(items,'geo:long');
      }
      else
      {
      	thisLat = getValueByTagName(items,'lat');
      	thisLong = getValueByTagName(items,'long');
      }

      var point = new GLatLng(parseFloat(thisLat), parseFloat(thisLong));

	/*
      if (isMSIE ) {
        var point = new GLatLng(parseFloat(getValueByTagName(items,'geo:lat')),
                               parseFloat(getValueByTagName(items,'geo:long')));
      } else {
        var point = new GLatLng(parseFloat(getValueByTagName(items,'lat')),
                               parseFloat(getValueByTagName(items,'long')));
      }*/

      var title = getValueByTagName(items,'title');
      var link = getValueByTagName(items,'link');
      //var date = getValueByTagName(items,'description');
      var thisDescription = getValueByTagName(items,'description');
      var thisParking = getValueByTagName(items,'parking');
      var thisSitesize = getValueByTagName(items,'sitesize');
      var thisFacilities = getValueByTagName(items,'factilities');
      var thisUsername = getValueByTagName(items,'username');



      if (isMSIE ) {
        var magnitude = getValueByTagName(items,'dc:subject');
      } else {
        var magnitude = getValueByTagName(items,'subject');
      }
      if (magnitude >= minmagnitude) {
        var marker = createMarker(point, magnitude, link, title, thisDescription, thisParking, thisSitesize, thisFacilities, thisUsername, thisLat, thisLong);
        map.addOverlay(marker);
      }
      i++;
    }
    if (document.getElementById('loadingMessage')) {
      document.getElementById('loadingMessage').innerHTML= '<span style="font-size : 14px; color : #FF7200;"><strong>Loading</span><span style="font-size : 14px; color : #4691ec;"> ' + max + '</span><span style="font-size : 14px; color : #FF7200;"> of</span><span style="font-size : 14px; color : #4691ec;"> ' + items.length + '</strong></span>' ;
    }
    window.setTimeout(mapOne,timeOut);
  } else {
    document.getElementById('loading').style.visibility='hidden';
  }
}

function linkToThisPage() {
  var curURL = new String(location.href);
  var baseURL = curURL.split('?')[0];
  var curzoom = map.getZoom();
  var center = map.getCenter();
  var curlat = center.lat().toFixed(4);;
  var curlon = center.lng().toFixed(4);;
  var curtype;
  if (map.getCurrentMapType() == G_SATELLITE_MAP) {
    curtype = 'sat';
  } else if (map.getCurrentMapType() == G_HYBRID_MAP) {
    curtype = 'hybrid';
  } else {
    curtype = 'map';
  }

  var url = baseURL + "?lat=" + curlat + "&lon=" + curlon + "&type=" + curtype + "&zoom=" + curzoom;
  location.href=url;
}

function getParameters() {
  var url = new String(location.href);
  if (url.indexOf('?') > -1) {
    var queryString = url.split('?');
    if (queryString[1].length > 0) {
      var paramString = queryString[1];
      var params = paramString.split("&");
      for (var i=0; i<= params.length-1; i++){
        var curParam= params[i].split("=");
        if (curParam[1].length > 0) {
	  var param=curParam[0].toLowerCase();
          switch (param) {
            case "lon":
              var curlon = curParam[1];
	      if ((curlon >=-180 ) && (curlon <= 180)) {
                longitude = curParam[1];
	      }
              break;
            case "lat":
              var curlat = curParam[1];
	      if ((curlat >=-180 ) && (curlat <= 180)) {
                latitude = curlat;
	      }
              break;
            case "zoom":
              var curzoom = curParam[1];
	      if ((curzoom >=1 ) && (curzoom <= 18)) {
	        zoom = parseInt(curzoom);
	      }
              break;
            case "type":
              if ( curParam[1].toLowerCase() == 'sat' ) {
                type = "sat";
              } else if ( curParam[1].toLowerCase() == 'hybrid' ) {
                type = "hybrid";
              } else {
                type = "map";
              }
              break;
          }
	}
      }
    }
  }
}

