<?xml version="1.0" encoding="UTF-8"?>
<Module>

<ModulePrefs title="World Cricket Map" 
    height="250" 
    title_url="http://www.radioactiveyak.com/cricket"
    description="See the locations of all the current cricket matches around the world"
    author_location="London, UK"
    screenshot="http://software.intervention.com.au/GDS/images/igCricket_SS.jpg"    
    author="Reto Meier" 
    author_email="Cricket@RadioactiveYak.com" >
    <Require feature="analytics" /> 
    </ModulePrefs>    
    

<Content type="html" ><![CDATA[

<script src="http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=ABQIAAAACaxfWxorXwhnOi6od6zG2xRuQIRmSF9cqUPOVrqTMkcyrP3X5RSjwMh9cyxkAcxDkroQwPSpdDVoYQ" type="text/javascript"></script>

  <script>
     // Track this gadget using Google Analytics.
     _IG_Analytics("UA-51268-7", "/cricketMapModule");
  </script>

<div id="MAP___MODULE_ID___map" style="width: 100%; height: 100%;"></div>
  <div id="MAP___MODULE_ID___err"></div>
  <font size="-3"><div id="MAP___MODULE_ID___debug"></div></font>
  <font size="-3"><div id="MAP___MODULE_ID___msg" style="width:100%; text-align:center;"></div></font>

<script type="text/javascript">


function MAP___MODULE_ID__() {

  // ***************** GLOBAL VARIABLES ***************
    
  var map = new GMap2(document.getElementById("MAP___MODULE_ID___map"));
  var icon__MODULE_ID__ = new GIcon();
  this.mapType = G_DEFAULT_MAP_TYPES;  
  gameCount__MODULE_ID__ = 0;

  // ************* Object Methods ************* //
  
  this.processUserPrefs = function () {
    
	// set the height
	var height = 200;
	if (document.body.scrollHeight > document.body.offsetHeight)
	  height = document.body.scrollHeight-15;
	else
 	  height = document.body.offsetHeight-15;
	
	var heightString = height+"px";
	document.getElementById("MAP___MODULE_ID___map").style.height = heightString;

	icon__MODULE_ID__.image =  "http://software.intervention.com.au/GDS/images/igCricketMarkera.png";
	icon__MODULE_ID__.shadow = "http://software.intervention.com.au/GDS/images/igCricketMarkerShadow.png";
	icon__MODULE_ID__.iconSize = new GSize(21, 34);
	icon__MODULE_ID__.shadowSize = new GSize(39, 34);
	icon__MODULE_ID__.iconAnchor = new GPoint(10, 34);
	icon__MODULE_ID__.infoWindowAnchor = new GPoint(21, 1);

	this.mapType = G_HYBRID_MAP;
	
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.enableContinuousZoom();
    map.enableDoubleClickZoom(); 
    map.setCenter(new GLatLng(77,43.59375), 1);
	map.setMapType (this.mapType);	
  }  

	// Create a marker whose info window displays the given number.
	function createMarker__MODULE_ID__(point, number) {
		var marker = new GMarker(point, icon__MODULE_ID__);				

		// Show this marker's index in the info window when it is clicked.
		var html = number;
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
		});

		map.addOverlay(marker);	
		
		return marker;
	}

	function addMarkers__MODULE_ID__() {		 		  
		for (var i = 0; i < gameCount__MODULE_ID__; i++) {
		
	        var venue = venues__MODULE_ID__[i];
	        var procVenue = venue;	           	            
	        
	        var dt1 = new Date();
			var hourStamp1 = [dt1.getFullYear(), dt1.getMonth(), dt1.getDate(), dt1.getHours()].join("-");
	        
      		var geocodestr = 'http://software.intervention.com.au/GDS/Geocode.asmx/GCode?_venue=' + venue + '&random=' + hourStamp;

			result = addMarker__MODULE_ID__(geocodestr, i);
		}
	}
		
	function addMarker__MODULE_ID__(geocodestr, gameVal) 
	{
			var success = false;
 	  		_IG_FetchContent(geocodestr, function (responseText) {
				var parsestr = responseText;
				
				try {			
					var start = parsestr.indexOf(',');

					if (start == -1)
					return false;

					var latstr = "";

					var numeric = "0123456789.-";
					var idx = start-1;

					while (numeric.indexOf(parsestr.charAt(idx)) > -1) {
						latstr = parsestr.charAt(idx) + latstr;
						idx = idx-1;
					}
		
					var longstr = "";
					idx = start+1;
					
					while (numeric.indexOf(parsestr.charAt(idx)) > -1) {
						longstr = longstr + parsestr.charAt(idx);
						idx = idx+1;
					}
								
					var live = gameLinks__MODULE_ID__[gameVal];
					var info = team1s__MODULE_ID__[gameVal] + ' vs ' + team2s__MODULE_ID__[gameVal] + ' in ' + venues__MODULE_ID__[gameVal];
						
					var WINDOW_HTML = '<div style="width: 14em; FONT-FAMILY: Tahoma, Verdana, Arial, Sans-Serif; font-size: small">' + info + '<br/><FONT size="1"><a href=' + live + ' target="_blank">Live Score</a> from <a href="http://www.cricinfo.com" target="_blank">cricinfo.com</a></FONT></div>';									

					var infoTitle = WINDOW_HTML;

					var long = longstr;
					var lat = latstr;								
		    		var point = new GPoint(long, lat);														
	  				var marker = createMarker__MODULE_ID__(point, infoTitle);
			  							  			
  					gamesMapped__MODULE_ID__[gameVal] = true;
  				} catch (e) {
  					thisRef.displayMsg("Marker Create Failed:" + e.message); 
  				}
  			});		
  			return success;
	}
  
  // ************* Utility functions *********************

  this.displayMsg = function (string) {
    document.getElementById("MAP___MODULE_ID___msg").innerHTML = "<b>" + string + "</b><br>";
  } 
  
  // ********************* MAIN *************************	
	var team1s__MODULE_ID__ = new Array;
	var team2s__MODULE_ID__ = new Array;
	var venues__MODULE_ID__ = new Array;
	var gameLinks__MODULE_ID__ = new Array;
	var gamesMapped__MODULE_ID__ = new Array;
			
	var thisRef = this;  
	
	//thisRef.displayMsg("<a href="http://blog.radioactiveyak.com">Cricket Calendars</a>); 
	
    this.processUserPrefs();
    thisRef.displayMsg("Featuring The English Domestic Season"); 
    
	// Download the data in data.xml and load it on the map. 
	
    var dt = new Date();
    var hourStamp = [dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours()].join("-");

    var xmlStamp = [dt.getMonth(), dt.getDate()].join("");

//    _IG_FetchContent('http://software.intervention.com.au/gds/Service1.asmx/CurrentMatches?random=' + hourStamp, function(responseText) {
    _IG_FetchContent('http://software.intervention.com.au/CurrentMatches/CurrentMatches' + xmlStamp + '.xml?random=' + hourStamp, function(responseText) {
		var xmlobject = GXml.parse(responseText);
		var items = xmlobject.getElementsByTagName("item");		
					
		for (var i = 0; i < items.length; i++) {
			var titles = items[i].getElementsByTagName("title");
			var links = items[i].getElementsByTagName("link");

			var gameName = titles[0].firstChild.nodeValue;
			//gameName = gameName.substring(1)
			var link = links[0].firstChild.nodeValue;
			
			try {
					var titleArray = gameName.split("Vs ")[0];
	
					var alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'. ";
					var t1 = "";
					var k = 0;
					while ((alpha.indexOf(titleArray.charAt(k)) > -1) && (k < titleArray.length))
					{
					  t1 = t1 + gameName.charAt(k);
					  k++;
					}

					var t2base = "";
					var t2base = gameName.split("Vs ")[1];
					var t2 = "";
					
		   			var nextChar = 0;
					while ((t2base.charCodeAt(nextChar) > 64) || (t2base.charCodeAt(nextChar) == 32)) {
						t2 = t2 + t2base.charAt(nextChar);
						nextChar += 1;
					}
					
					var venueArray = gameName.split(" (");
					var venPart = venueArray[venueArray.length-1];
			  		var venue = venueArray[venueArray.length-1].slice(0,venPart.indexOf(')'));	

					// Grab just the score.
					var score = gameName.slice(0, gameName.lastIndexOf(' ('));
					
			  		
					team1s__MODULE_ID__[gameCount__MODULE_ID__] = t1;
					team2s__MODULE_ID__[gameCount__MODULE_ID__] = t2;
					venues__MODULE_ID__[gameCount__MODULE_ID__] = venue;
					gameLinks__MODULE_ID__[gameCount__MODULE_ID__] = link;
					gamesMapped__MODULE_ID__[gameCount__MODULE_ID__] = false;
					gameCount__MODULE_ID__ += 1;
				
			} catch (e) { 
				thisRef.displayMsg("Download Failed:" + e.message); 
			}

		}

		try {
			addMarkers__MODULE_ID__();				             
			} catch (e) { 
			thisRef.displayMsg("Parsing Failed:" + e.message); 
			}

	});    	
  
  // **************** END OF MAIN  ************************
}

var MAP___MODULE_ID___handle;
_IG_RegisterOnloadHandler(function() {
    MAP___MODULE_ID___handle = new MAP___MODULE_ID__();
});

</script>
]]>

</Content>
</Module>

