google.load("maps", "3", {other_params:"sensor=false"});

var cache = [];
var $j = jQuery.noConflict();

$j(document).ready(function($)
{
	//Build list items and points
	if ($("#localdirectory").length != 0)
	{		
		var directoryItem;
		var i=0;
		var highlightCircle = null;
		var currentMarker = null;
		
		// Check to see if this browser can run the Google API
		if (window.XMLHttpRequest)
		{// code for IE7+, Firefox, Chrome, Opera, Safari
			xmlhttp = new XMLHttpRequest();
		}
		else
		{// code for IE6, IE5
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		xmlhttp.open("GET",'directory.xml',false);
		xmlhttp.send();
		xmlDoc = xmlhttp.responseXML;
		
		//Prepare the map
		$("#contact-form").after('<div id="map-area" style="position: relative;"><div id="map-canvas" style="position: absolute; left: 17px; top: 26px; width: 302px; height: 302px"></div></div>');
		var bounds = new google.maps.LatLngBounds();
		var geocoder = new google.maps.Geocoder();
		var mapOptions = 
		{
			mapTypeControl: false,
			navigationControl: true,
			navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
			mapTypeId: google.maps.MapTypeId.ROADMAP      
		};
		var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
		google.maps.event.addListener(map, 'click', function(){
			infoWindow.close();
		});
		
		var resultsets = xmlDoc.getElementsByTagName("resultset");
		var localppccount = 0;
		for(var count=0;count<resultsets.length;count++)
		{
			if(resultsets[count].attributes.getNamedItem("segment").value == 'localppc')
			{
				var results = resultsets[count].getElementsByTagName("result");
				for(var counted=0; counted<results.length; counted++)
				{
					directoryItem = new DirectoryItem();
					
					if (results[counted].getElementsByTagName("address")[0].childNodes[0] != null)
					{
						directoryItem.count = localppccount +1;
						directoryItem.name = results[counted].getElementsByTagName("name")[0].childNodes[0].nodeValue;
						directoryItem.address = results[counted].getElementsByTagName("address")[0].childNodes[0].nodeValue + ' ';
						if (results[counted].getElementsByTagName("city")[0].childNodes[0] != null)
						{
							directoryItem.address += results[counted].getElementsByTagName("city")[0].childNodes[0].nodeValue + ', ';
						}
						directoryItem.address += results[counted].getElementsByTagName("state")[0].childNodes[0].nodeValue + ' ';
						directoryItem.address += results[counted].getElementsByTagName("zipcode")[0].childNodes[0].nodeValue;
						directoryItem.phone = results[counted].getElementsByTagName("phone")[0].childNodes[0].nodeValue;
						if (results[counted].getElementsByTagName("clickurl")[0].childNodes[0] != null)
						{
							directoryItem.url = results[counted].getElementsByTagName("clickurl")[0].childNodes[0].nodeValue;
						}
							
						if(resultsets[count].attributes.getNamedItem("segment").value == 'localppc')
						{
							var dataxmls = results[counted].getElementsByTagName("data");
							for(counteddata = 0;counteddata < dataxmls.length;counteddata++)
							{
								if(dataxmls[counteddata].attributes.getNamedItem("key").value == "avgRating")
								{
									directoryItem.rating = dataxmls[counteddata].attributes.getNamedItem("value").value;
								}
								else
								{
									directoryItem.rating = 0;
								}
							}
						}


						directoryItem.buildMarker(map,localppccount,bounds,geocoder);
						localppccount++;
						if (localppccount > 9) {break;}
					}
				}
			}
		}
		if (localppccount < 10)
		{
			for(var count=0;count<resultsets.length;count++)
			{
				if(resultsets[count].attributes.getNamedItem("segment").value == 'courtesy')
				{
					var results = resultsets[count].getElementsByTagName("result");
					for(var counted=0; counted<results.length; counted++)
					{
						directoryItem = new DirectoryItem();
						
						if (results[counted].getElementsByTagName("address")[0].childNodes[0] != null)
						{
							directoryItem.count = localppccount +1;
							directoryItem.name = results[counted].getElementsByTagName("name")[0].childNodes[0].nodeValue;
							directoryItem.address = results[counted].getElementsByTagName("address")[0].childNodes[0].nodeValue + ' ';
							if (results[counted].getElementsByTagName("city")[0].childNodes[0] != null)
							{
								directoryItem.address += results[counted].getElementsByTagName("city")[0].childNodes[0].nodeValue + ', ';
							}
							directoryItem.address += results[counted].getElementsByTagName("state")[0].childNodes[0].nodeValue + ' ';
							directoryItem.address += results[counted].getElementsByTagName("zipcode")[0].childNodes[0].nodeValue;
							directoryItem.phone = results[counted].getElementsByTagName("phone")[0].childNodes[0].nodeValue;
							if (results[counted].getElementsByTagName("clickurl")[0].childNodes[0] != null)
							{
								directoryItem.url = results[counted].getElementsByTagName("clickurl")[0].childNodes[0].nodeValue;
							}
								
							if(resultsets[count].attributes.getNamedItem("segment").value == 'localppc')
							{
								var dataxmls = results[counted].getElementsByTagName("data");
								for(counteddata = 0;counteddata < dataxmls.length;counteddata++)
								{
									if(dataxmls[counteddata].attributes.getNamedItem("key").value == "avgRating")
									{
										directoryItem.rating = dataxmls[counteddata].attributes.getNamedItem("value").value;
									}
									else
									{
										directoryItem.rating = 0;
									}
								}
							}
	
							directoryItem.buildMarker(map,localppccount,bounds,geocoder);
							localppccount++;
							if (localppccount > 9) {break;}
						}
					}
				}
			}
		}
	}

	preLoadImages("/images/directory/option1_selected.jpg", "/images/directory/option2_selected.jpg", "/images/directory/option3_selected.jpg");

	if ($("#contact-content").length != 0)
	{
	       $(".option-button:first-child").attr('src','/images/directory/option1_selected.jpg');
	       $(".option-pane:first-child").siblings().hide();

	       $(".option-button").css('cursor','pointer')
               .click(function()
               {
                       var div = $(this).attr('name');
                       $(div).fadeIn('fast').siblings().hide();
                       $(this).siblings().attr('src',function(){
                           return $(this).attr('src').replace('_selected','_norm');
                       });
                       $(this).attr('src',function(){
                           return $(this).attr('src').replace('_norm','_selected');
                       });
               });
        }
});

//DirectoryItem object
function DirectoryItem()
{
	var prevmark = null;
	this.count;
	this.name = '';
	this.address = '';
	this.phone = '';
	this.url ='';
	this.rating = 0;
	this.html = '';
	
	this.buildMarker = function(map,localppccount,bounds,geocoder)
	{
		var infowindowLevel = 0;
		var name = this.name;
		var phone = this.phone;
		var url = '';
		if (this.url != '')
		{
			url = ' - <a href="' + this.url + '" target="_blank">Web Site</a>';
		}
		var address = this.address;
		geocoder.geocode(
		{'address': this.address},
		function(results, status)
		{
			if (status != google.maps.GeocoderStatus.OK) 
			{
				//alert('Sorry, we were unable to geocode that address.');
			} 
			else 
			{
				point = results[0].geometry.location;
				var num = localppccount + 1;
				var image = 'images/map marker/map-marker-' + num + '.png';
				var marker = new google.maps.Marker({
					position: point, 
					map: map,
					icon: image
				});
				bounds.extend(point);
				map.setCenter(bounds.getCenter());
				map.fitBounds(bounds);
				var contentString = 
					'<div id="mapcontent">' +
					name.substr(0,40) + '<br />' +
					results[0].address_components[0].long_name + ' ' + results[0].address_components[1].long_name + '<br />' +
					results[0].address_components[3].long_name + ', ' +
					'CA ' +
					results[0].address_components[7].long_name + '<br />' +
					'P: ' + phone.substr(0,3) + '-' + phone.substr(3,3) + '-' + phone.substr(6,4) +
					url +
					'<br>Directions: <b>To here</b><br />Start address:<form action="directions.php" method="post">' + '<input type="text" SIZE=20 name="saddr" id="saddr" value="" /><br>' + '<INPUT value="Get Directions" TYPE="SUBMIT">' + '<input type="hidden" name="daddr" value="' + address + '"/>' +
					'</div>';
				var infowindow = new google.maps.InfoWindow({
					content: contentString
				});
				google.maps.event.addListener(marker, 'click', function() {
					infowindow.setZIndex(++infowindowLevel);
					infowindow.open(map,marker);
				});
 				var imgTag = document.getElementById("marker" + num);
				//imgTag.onmouseover = function(){highlightCurrentMarker(marker)};
				imgTag.onclick=function(){
					google.maps.event.trigger(marker,"click")
				};
			}
		});
	};
}

function preLoadImages()
{
	var args_len = arguments.length;
	for (var i = args_len; i--;)
	{
		var cacheImage = document.createElement('img');
		cacheImage.src = arguments[i];
		cache.push(cacheImage);
	}
}
