		var map;
		var xml;
		var state_xml;
		var a;
		var markers = new Array();
		var words = new Array();
		var find = new Array();
		var result = 0;
		var count;	
	
        var baseIcon = new GIcon();
		baseIcon.image = "32_marker_cc00cc.png";
		baseIcon.shadow = "http://maps.google.com/mapfiles/ms/icons/msmarker.shadow.png";
        baseIcon.iconSize = new GSize(32,32);
		baseIcon.shadowSize = new GSize(59, 32);
        baseIcon.iconAnchor = new GPoint(15, 32);
        baseIcon.infoWindowAnchor = new GPoint(15, 9);
        baseIcon.infoShadowAnchor = new GPoint(15, 25);	

        var icon = new GIcon(baseIcon);
		var newIcon = MapIconMaker.createMarkerIcon({width: 36, height: 36, primaryColor: "#11aa11", cornerColor: "#44dd44"});
		

		function load_search(count){//load markers and panel with most word matches first
			var stateid;
			var bgcolor;
			var party;
			var panel_html='';
			for(var k=count;k>0;--k){
				var match = 0;
				for (var i = 1; i < xml.documentElement.getElementsByTagName("member").length; i++){
					if(find[i] == k){
						match = 1;
						if(xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'R') {
							bgcolor = "d01c25";
							party = "Republican";
						}
						else if (xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'D') {
							bgcolor = "1f459c";
							party = "Democrat";
						}
						for(var j = 0; j < state_xml.documentElement.getElementsByTagName("state").length; j++) {
							if(state_xml.documentElement.getElementsByTagName("state")[j].getAttribute("name") == xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue)
								stateid = j;
						}
						document.getElementById('panel').innerHTML += '<div onmouseover="show_infowindow('+stateid+',\''+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+'\');" style="border-bottom:1px dashed #eee;padding:5px;background:#'+bgcolor+'"><a class="link" target="_blank" href="'+xml.documentElement.getElementsByTagName("website")[i].childNodes[0].nodeValue+'" onmouseover="show_infowindow('+stateid+',\''+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+'\');">'+xml.documentElement.getElementsByTagName("first_name")[i].childNodes[0].nodeValue+' '+xml.documentElement.getElementsByTagName("last_name")[i].childNodes[0].nodeValue+'</a><br><span class="text3"><B>'+party+' ('+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+')</B></span></div>';	
					}
				}
				//document.getElementById('panel').innerHTML += panel_html;
				if (match == 1 && k != 1) {// add spacer between results
					document.getElementById('panel').innerHTML += '<div style="border-bottom:1px dashed #888;padding:4px;"></div>';
				}	
			}
		}
		
		function search_node(node_value, count, i){//find number of word match in a node
			var word_start = 0;
			var word_end = 0;
			var word;
			var found = 0;
			find[i]= 0;
			for(var k=0;k<count;k++){//compare xml word with all search words
				word_start = 0;
				for (var j=0;j<node_value.length+1;j++){//seperate words in xml
					if ((node_value.charAt(j) == " ") || (node_value.charAt(j) == "\"") || (node_value.charAt(j) == ".") || (node_value.charAt(j) == ":") || (node_value.charAt(j) == "'") || (node_value.charAt(j) == ",") || j == node_value.length){
						word_end = j;
						word = node_value.substring(word_start,word_end);
						word = word.toLowerCase();
						if (words[k] == word)	{
							result = 1;
							find[i] = ++found; //no. of search words found in a node
							j = node_value.length + 1; //if one word match found in node, then move to next word search in the node
						}
						word_start = j + 1;
					}	
				}
			}
		}
		
		function search_xml(count){
			result = 0;
			var party;
			var xml_string;
			for (var i = 0; i < xml.documentElement.getElementsByTagName("member").length; i++) {//search node, if found in node move to next
					if(xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'R') {
						party = "Republican";
					}
					else if (xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'D') {
						party = "Democrat";
					}				
				xml_string = xml.documentElement.getElementsByTagName("first_name")[i].childNodes[0].nodeValue + ' ' + xml.documentElement.getElementsByTagName("last_name")[i].childNodes[0].nodeValue + ' ' + xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue + ' ' + xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue + ' ' + party;
				search_node(xml_string, count, i);
			}
			load_search(count);
			if (!result) {
				document.getElementById('panel').innerHTML = '<center class="text1">Search not found...<a href="#" onclick="document.getElementById(\'panel\').innerHTML = load_sidebar();" >show all</a><center>';
			}	
		}
		
		function search(string){			
//			map.clearOverlays();
			document.getElementById('panel').innerHTML = '';
			var string_start = 0;
			var string_end = 0;
			count = 0;
			for (var j=0;j<string.length+1;j++){//seperate words in search string and store in array
				if((string.charAt(j) == " ") || j == string.length){ //seperate words in search
					string_end = j; //alert (string_start);
					if(string_end - string_start != 0){//if not blank or space
						words[count] = string.substring(string_start,string_end); 
						words[count] = words[count].toLowerCase();//alert(words[count]);
						count++;
					}
					string_start = j + 1;
				}
			}//alert (count);
			if (string.length == 0){//if empty search, show all
				document.getElementById('panel').innerHTML = '<span align="center" class="text1">Search not found...<a href="#" onclick="document.getElementById(\'panel\').innerHTML = load_sidebar();" >show all</a><span>';
			}
			else{//if search string has words
				search_xml(count);	
			}
			return false;
		}

		function show_infowindow(state_id, state_name) {
			var bgcolor;
			var info_html = '<center><b class="text2">'+state_xml.documentElement.getElementsByTagName("state")[state_id].childNodes[0].nodeValue+' Senators</b></center>';
			for (var i = 0; i < xml.documentElement.getElementsByTagName("member").length; i++) {
				if (state_name == xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue) {
					if(xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'R') {
						bgcolor = "d01c25";
					}
					else if (xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'D') {
						bgcolor = "1f459c";
					}		
					info_html += '<div style="width:220px;border:1px solid #eee;padding:5px;background:#'+bgcolor+'"><a class="link" href="'+xml.documentElement.getElementsByTagName("website")[i].childNodes[0].nodeValue+'" target="_blank" title="senate.gov webpage">'+xml.documentElement.getElementsByTagName("first_name")[i].childNodes[0].nodeValue+' '+xml.documentElement.getElementsByTagName("last_name")[i].childNodes[0].nodeValue+'</a><br><span class="text3"><b>Office: </b>'+xml.documentElement.getElementsByTagName("address")[i].childNodes[0].nodeValue+'<br><b>Phone: </b>'+xml.documentElement.getElementsByTagName("phone")[i].childNodes[0].nodeValue+'<br><a class="link" href="'+xml.documentElement.getElementsByTagName("email")[i].childNodes[0].nodeValue+'" target="_blank" title="contact form on senate.gov">Contact</a></span></div>';;
				}
			}
			markers[state_id].openInfoWindowHtml(info_html);
		}			
		
		function load_state_marker(i){
			var statename = state_xml.documentElement.getElementsByTagName("state")[i].getAttribute("name");
			markers[i] = new GMarker(new GLatLng(state_xml.documentElement.getElementsByTagName("state")[i].getAttribute("lat"), state_xml.documentElement.getElementsByTagName("state")[i].getAttribute("lng")),{icon:newIcon, title: state_xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue} );
			map.addOverlay(markers[i]);
			GEvent.addListener(markers[i], "click", function() { 
				show_infowindow(i, statename);
			});
		}
		
		function load_sidebar () {
			var stateid;
			var panel_html = '';
			var bgcolor;
			var party;		
			for (var i = 0; i < xml.documentElement.getElementsByTagName("member").length; i++) {
				if(xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'R') {
					bgcolor = "d01c25";
					party = "Republican";
				}
				else if (xml.documentElement.getElementsByTagName("party")[i].childNodes[0].nodeValue == 'D') {
					bgcolor = "1f459c";
					party = "Democrat";
				}
				for(var j = 0; j < state_xml.documentElement.getElementsByTagName("state").length; j++) {
					if(state_xml.documentElement.getElementsByTagName("state")[j].getAttribute("name") == xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue)
						stateid = j;
				}
				panel_html += '<div onmouseover="show_infowindow('+stateid+',\''+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+'\');" style="border-bottom:1px dashed #eee;padding:5px;background:#'+bgcolor+'"><a class="link" target="_blank" href="'+xml.documentElement.getElementsByTagName("website")[i].childNodes[0].nodeValue+'" onmouseover="show_infowindow('+stateid+',\''+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+'\');">'+xml.documentElement.getElementsByTagName("first_name")[i].childNodes[0].nodeValue+' '+xml.documentElement.getElementsByTagName("last_name")[i].childNodes[0].nodeValue+'</a><br><span class="text3"><B>'+party+' ('+xml.documentElement.getElementsByTagName("state")[i].childNodes[0].nodeValue+')</B></span></div>';	
			}
			return panel_html;		
		}
		
		function load_map(sidebar) {
			GDownloadUrl("state_geocode.xml", function(data, responseCode) {
				state_xml = GXml.parse(data);
				GDownloadUrl("senators_cfm.xml", function(data, responseCode) {
					xml = GXml.parse(data);				
					for(var i = 0; i < state_xml.documentElement.getElementsByTagName("state").length; i++) {				
						load_state_marker(i);	
					}
					if(sidebar) {
						document.getElementById('panel').innerHTML = load_sidebar();
					}	
				});		
			});		
		}
		
		function load() {
		  if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map")); 
			map.addControl(new GSmallZoomControl());
			map.setCenter(new GLatLng(39,-96), 4); 

			document.getElementById("panel").style.height = (document.getElementById("win").offsetHeight - 500);
			document.getElementById("panel").style.overflow = "auto";
			
			load_map(1);
			
//			var adsOptions = {maxAdsOnMap:10, minZoomLevel:2, channel:"4299003002"};
//			var ads = new GAdsManager(map,"ca-pub-2773616400896769", adsOptions);
//			ads.enable();
			}
		}
			
		function load_demo() {
		  if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map")); 
			map.addControl(new GSmallZoomControl());
			map.setCenter(new GLatLng(39,-96), 3);
		
			load_map(1);

			document.getElementById("panel").style.height = (document.getElementById("control").offsetHeight - 155);
			document.getElementById("panel").style.overflow = "auto";
			
			var adsOptions = {maxAdsOnMap:10, minZoomLevel:2, channel:"7437244258"};
			var ads = new GAdsManager(map,"ca-pub-2773616400896769", adsOptions);
			ads.enable();
			}
		}
		
		function load_open() {
		  if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map")); 
			map.addControl(new GSmallZoomControl());
			map.setCenter(new GLatLng(39,-96), 3);

			load_map(1);

			document.getElementById("panel").style.height = (document.getElementById("control").offsetHeight - 155);
			document.getElementById("panel").style.overflow = "auto";
			
			var adsOptions = {maxAdsOnMap:10, minZoomLevel:2, channel:"1506309724"};
			var ads = new GAdsManager(map,"ca-pub-2773616400896769", adsOptions);
			ads.enable();
			}			
		} 
		
		function load_gadget() {
		  if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map")); 
			map.addControl(new GSmallZoomControl());
			map.setCenter(new GLatLng(39,-96), 3); 

			load_map(1);

			document.getElementById("panel").style.height = (document.getElementById("control").offsetHeight - 155);
			document.getElementById("panel").style.overflow = "auto";
			
			var adsOptions = {maxAdsOnMap:10, minZoomLevel:2, channel:"0435277105"};
			var ads = new GAdsManager(map,"ca-pub-2773616400896769", adsOptions);
			ads.enable();
			}			
		} 	