var ua = navigator.userAgent.toLowerCase(),os,browser,version,data;

function checkBrowser() {
    if (detect('konqueror')) {browser = "Konqueror"; os = "Linux";}
    else if (detect('safari')) browser = "Safari";
    else if (detect('omniweb')) browser = "OmniWeb";
    else if (detect('firefox')) browser = "Firefox";
    else if (detect('opera')) browser = "Opera";
    else if (detect('gecko')) browser = "Gecko based";
    else if (detect('webtv')) browser = "WebTV";
    else if (detect('icab')) browser = "iCab";
    else if (detect('msie')) browser = "Internet Explorer";
    else if (!detect('compatible')) {browser = "Netscape Navigator"; version = ua.charAt(8);}
    else browser = "An unknown browser";

    if (!version) version = ua.charAt(stringposition + data.length);

    if (!os) {
       if (detect('linux')) os = "Linux";
       else if (detect('x11')) os = "Unix";
       else if (detect('mac')) os = "Mac";
       else if (detect('win')) os = "Windows";
       else os = "An unknown operating system";
    }
}

function detect(text) {
   stringposition = ua.indexOf(text) + 1;
   data = text;
   return stringposition;
}

function outputValues() {
   var outputs = ['browser','browser version','operating system','user agent string (in lowercase)']
   var outputs2 = [browser, version, os, ua]
   for (i=0; i<outputs.length; i++) {
       para = document.createElement('p');
       document.body.appendChild(para);
       para.appendChild(document.createTextNode('Your ' + outputs[i] + ' is: ' + outputs2[i]))
   }
}

//window.onload = function() {
//   checkBrowser();
//   outputValues();
//}

//<![CDATA[

var markers = [];
var broadcasts = [];
var gmarkers = [];
var gmarkersType = [];
var map;
var timeOut=100;
var i=0;
var BLURFACTOR=0.01;
var blueicon;
var redicon;
var j;


function mapit() {
    
	if (detect('safari')) {
		alert("We're sorry, this map is not currently compatible with this browser.");
	} else if (GBrowserIsCompatible()) {
	
		// arrays to hold copies of the markers
		j = 0;
		
		// create the map
		map = new GMap(document.getElementById("map"));

		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.centerAndZoom(new GPoint(-94.75, 40.50), 14);

		// create custom icons

		redicon = new GIcon();
		redicon.image = "http://www.apmstations.org/images/mm_20_red.png";
		redicon.shadow = "http://www.apmstations.org/images/mm_20_shadow.png";
		redicon.iconSize = new GSize(12, 20);
		redicon.shadowSize = new GSize(22, 20);
		redicon.iconAnchor = new GPoint(6, 20);
		redicon.infoWindowAnchor = new GPoint(5, 1);
		
		// This function picks up the click and opens the corresponding info window. Not used right now
		function myclick(i) {
			gmarkers[i].openInfoWindowHtml(htmls[i]);
		}

		// Read the data from example.xml
		var request = GXmlHttp.create();
		request.open("GET", "googleMapData.xml", true);
		
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				// obtain the array of markers and loop through it
				markers = xmlDoc.documentElement.getElementsByTagName("station");
//			broadcasts = xmlDoc.documentElement.getElementsByTagName("broadcast");
				i=0;
				window.setTimeout(mapOne,timeOut);
			}
		}
		request.send(null);
	} else {
		alert("Sorry, the Google Maps API is not compatible with this browser.");
	}
}    


// A function to create the marker and set up the event window
function createMarker(point, callletters, market, frequency, broadcastTimeString, lat, lng) {
//			alert('point is ' + point + ',\ncallletters is ' + callletters + ',\ncity is ' + city + ',\nstate is ' + state + ',\nfrequency is ' + frequency + ',\nday is ' + day + ',\ntime is ' + time + '\n');

	var marker = new GMarker(point, redicon);
	var	thisHTMLText =  "<div class=\"overlaySize\"><strong><p class=\"overlayText\">"
						+ callletters 
						+ " " 
						+ frequency 
						+ "</strong><br />" 
						+ market 
						+ "</p><div class=\"overlayTextSmall\">" 
						+ broadcastTimeString
						+ "</div></div>";
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(thisHTMLText);
	});
	// save the info we need to use later
	gmarkers[j] = marker;
	j++;
	return marker;
}



function mapOne() {

	if (i < markers.length) {
	
		//var max=Math.min(i+10, markers.length);
		max = markers.length;
		 
		while (i < max){
		
			// obtain the attribues of each marker
			var lat = blur(parseFloat(markers[i].getAttribute("lat")));
			var lng = blur(parseFloat(markers[i].getAttribute("long")));
			var point = new GPoint(lng,lat);
			var callletters = markers[i].getAttribute("callletters");
			var market = markers[i].getAttribute("market");
			var frequency = markers[i].getAttribute("frequency");
			//var day = markers[i].getAttribute("day");
			//var time = markers[i].getAttribute("time");
			//var logo = markers[i].getAttribute("logo");
			//var website = markers[i].getAttribute("website");


			var broadcasts = markers[i].getElementsByTagName("broadcast");
			var broadcastTimeString = "";
			for (z = 0; z < broadcasts.length; z++) {
			
				days = "";
				if (broadcasts[z].getAttribute("day") == "M") {
					days = "Mondays";
				} else if (broadcasts[z].getAttribute("day") == "Tu") {
					days = "Tuesdays";
				} else if (broadcasts[z].getAttribute("day") == "W") {
					days = "Wednesdays";
				} else if (broadcasts[z].getAttribute("day") == "Th") {
					days = "Thursdays";	
				} else if (broadcasts[z].getAttribute("day") == "F") {
					days = "Fridays";
				} else if (broadcasts[z].getAttribute("day") == "Sa") {
					days = "Saturdays";
				} else if (broadcasts[z].getAttribute("day") == "Su") {
					days = "Sundays";
				} else if (broadcasts[z].getAttribute("day") == "SaSu") {
					days = "Saturdays and Sundays";
				} else if (broadcasts[z].getAttribute("day") == "SuSa") {
					days = "Saturdays and Sundays";
				} else if (broadcasts[z].getAttribute("day") == "SuF") {
					days = "Sundays and Fridays";
				} else if (broadcasts[z].getAttribute("day") == "SuMTuWThFSa") {
					days = "Sundays through Saturdays";
				} else if (broadcasts[z].getAttribute("day") == "SuMTuWThF") {
					days = "Sundays through Fridays";
				} else if (broadcasts[z].getAttribute("day") == "MTuWThF") {
					days = "Mondays through Fridays";
				} else if (broadcasts[z].getAttribute("day") == "MTuWTh") {
					days = "Mondays through Thursdays";
				} else if (broadcasts[z].getAttribute("day") == "MWThF") {
					days = "Mondays, Wednesdays, Thursdays and Fridays";
				} else {
					days = broadcasts[z].getAttribute("day");
				}
				
				broadcastTimeString += days + " " + broadcasts[z].getAttribute("start_time") + "<br />";
			}
			
			// create the marker
			var marker = createMarker(point, callletters, market, frequency, broadcastTimeString, lat, lng);
			map.addOverlay(marker);
			i++;
		}
		if (document.getElementById('loadingMessage')) {
			document.getElementById('loadingMessage').innerHTML = "Loading: " + i + " of " + markers.length;
			window.setTimeout(mapOne,timeOut);
		}
	} else {
		document.getElementById('loading').style.visibility = 'hidden';
	}	
}
function blur(theNumber) {
	// This function nudges points slightly, so two or more points in the same city are less likely to lay on top of each other.
	var roundDirection = Math.round(Math.random());
	if (roundDirection == 1) {
		theNumber = theNumber + BLURFACTOR;
	} else {
		theNumber = theNumber - BLURFACTOR;
	}
	return theNumber;	
}

function selectState(u) {
	var idx = u.selectedIndex;
	var val = u.options[idx].value;
	var zoomArray = val.split(',');
	if (val != "") {
		map.centerAndZoom(new GPoint(parseFloat(zoomArray[1]),parseFloat(zoomArray[2])), parseInt(zoomArray[0]));
		map.zoomTo(parseInt(zoomArray[0]));
	}
}

    //]]>