var Gmap;
var geocoder;

function loadResultsMap(form, type) {
	loadMap();
//	alert ( location.href.substring(0,location.href.lastIndexOf("/")+1) )
	if (type == 'state') {
		showStateResults (form, type);
	} else if (type == 'store') {
		_storeId = getQuery('store');
		showStoreResults(_storeId);		
	} else if (type== 'nearest'){
		showResults(form, type);
	} //else
} //loadResultsMap

function loadStoreMap(_storeId) {
	loadMap();
	showStoreResults(_storeId);		
} //loadResultsMap


function loadMap() {
  if (GBrowserIsCompatible()) {
	geocoder = new GClientGeocoder();
    locMapDiv = document.getElementById('loc_map');
	Gmap = new GMap2( locMapDiv, { size: new GSize(700,320) });
	Gmap.addControl(new GSmallMapControl());
	Gmap.addControl(new GMapTypeControl());
//	Gmap.setCenter(new GLatLng(40, -100), 4);
  } else {
	  alert ('Your browser is not compatible with Google Maps.  Store locator will not function');
  } //else
} //loadMap

function showResults(form, type) {
	//clear any existing results from state search
	var loc_results = document.getElementById('loc_results');
	loc_results.innerHTML = '&nbsp;';
//	alert (loc_results.innerHtml);
 var markers = '';
 if (type=='nearest') {
	 var form_distance = form.distance.value;
	 var form_address = form.address.value;
	 var form_city = form.city.value;
	 var form_state = form.state.value;
	 var form_zip = form.zip.value;
	 var form_limit = form.limit.value;
	 var searchUrl = location.href.substring(0,location.href.lastIndexOf("/")+1) + 'apps/loc/map_xml.php?address=' + form_address  + '&city=' + form_city + '&state=' + form_state + '&zip=' + form_zip + '&distance=' + form_distance + '&limit=' + form_limit + '&type=nearest';
 } //if
 GDownloadUrl(searchUrl, function(data) {
   var xml = GXml.parse(data);
   var markers = xml.documentElement.getElementsByTagName('marker');
   Gmap.clearOverlays();
   var loc_sidebar = document.getElementById('loc_sidebar');
   loc_sidebar.innerHTML = '';
   if (markers.length == 0) {
	 loc_sidebar.innerHTML = 'No results found.';
	 Gmap.setCenter(new GLatLng(40, -100), 4);
	 return;
   }
   var bounds = new GLatLngBounds();
   for (var i = 0; i < markers.length; i++) {
	   //can i make this an array?
	 var name = markers[i].getAttribute('name');
	 var address = markers[i].getAttribute('address');
	 var distance = parseFloat(markers[i].getAttribute('distance'));
	 var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
							 parseFloat(markers[i].getAttribute('lng')));
	 var city = markers[i].getAttribute('city');
	 var state = markers[i].getAttribute('state');
	 var zip = markers[i].getAttribute('zip');
	 var hours = markers[i].getAttribute('hours');
	 var hours_sat = markers[i].getAttribute('hours_sat');
	 var phone = markers[i].getAttribute('phone');
	 var fax = markers[i].getAttribute('fax');
	 var promo = markers[i].getElementsByTagName('promotion');
	 var promo_name = [];
	 var promo_desc = [];
	 for (var ii = 0; ii <promo.length; ii++) {
		 promo_name[ii] = promo[ii].getAttribute('name');
		 promo_desc[ii] = promo[ii].getAttribute('description');
	 }//for
	 
	 var marker = createMarker(point, i, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, type);
	 Gmap.addOverlay(marker);
	 var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, i, type, promo_name, promo_desc);
	 loc_sidebar.appendChild(sidebarEntry);
	 bounds.extend(point);
   } //for
   Gmap.setCenter(bounds.getCenter(), Gmap.getBoundsZoomLevel(bounds));
   
   //remove border from deselected entry
   GEvent.addListener(Gmap,"infowindowclose", function() {
   document.getElementById(lastLetter).style.border="none";
   document.getElementById(lastLetter).style.backgroundColor = '#fff';
   });
   
 });
} // showResults

function showStateResults(form, type, page) {
 var markers = '';
 var form_state = form;
 var searchUrl = location.href.substring(0,location.href.lastIndexOf("/")+1) + 'apps/loc/map_xml.php?state=' + form_state + '&type=state&page=' + page;
 GDownloadUrl(searchUrl, function(data) {
   var xml = GXml.parse(data);
   var markers = xml.documentElement.getElementsByTagName('marker');
   var pages = xml.documentElement.getElementsByTagName('pages');
   var page_cur = pages[0].getAttribute('current');
   var page_tot = pages[0].getAttribute('total');
   var results_low = pages[0].getAttribute('results_low');
   var results_hi = pages[0].getAttribute('results_hi');
   var results_tot = pages[0].getAttribute('results_tot');
//   var promo = markers.getElementsByTageName('promotion');
   
   Gmap.clearOverlays();
   var loc_sidebar = document.getElementById('loc_sidebar');
   loc_sidebar.innerHTML = '';
   if (markers.length == 0) {
	 loc_sidebar.innerHTML = 'No results found.';
	 Gmap.setCenter(new GLatLng(40, -100), 4);
	 return;
   }
   var bounds = new GLatLngBounds();
   for (var i = 0; i < markers.length; i++) {
	   //can i make this an array?
	 var name = markers[i].getAttribute('name');
	 var address = markers[i].getAttribute('address');
	 var distance = parseFloat(markers[i].getAttribute('distance'));
	 var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
							 parseFloat(markers[i].getAttribute('lng')));
	 var city = markers[i].getAttribute('city');
	 var state = markers[i].getAttribute('state');
	 var zip = markers[i].getAttribute('zip');
	 var hours = markers[i].getAttribute('hours');
	 var hours_sat = markers[i].getAttribute('hours_sat');
	 var phone = markers[i].getAttribute('phone');
	 var fax = markers[i].getAttribute('fax');
     var promo_name = [];
	 var promo_desc = [];
	 var promo = markers[i].getElementsByTagName('promotion');
	 for (var ii = 0; ii < promo.length; ii++) {
		 promo_name[ii] = promo[ii].getAttribute('name');
		 promo_desc[ii] = promo[ii].getAttribute('description');
	 }//for
	 
	 var marker = createMarker(point, i, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, type);
	 Gmap.addOverlay(marker);
	 var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, i, type, promo_name, promo_desc);
	 loc_sidebar.appendChild(sidebarEntry);
	 bounds.extend(point);
   } //for
   
   resultsPane(form_state, page_cur, page_tot, results_low, results_hi, results_tot);
   
   Gmap.setCenter(bounds.getCenter(), Gmap.getBoundsZoomLevel(bounds));
   
   //remove border from deselected entry
   GEvent.addListener(Gmap,"infowindowclose", function() {
   document.getElementById(lastLetter).style.border="none";
   document.getElementById(lastLetter).style.backgroundColor = '#fff';
   });
   
 });
} // showStateResults

function showStoreResults(_storeId) {
	//clear any existing results from state search
	var loc_results = document.getElementById('loc_results');
	loc_results.innerHTML = '&nbsp;';
//	alert (loc_results.innerHtml);
	var markers = '';
	var distance = 0;
	var type = 'state';
 	var searchUrl = location.href.substring(0,location.href.lastIndexOf("/")+1) + 'apps/loc/map_xml.php?type=store&store=' + _storeId;
 	
 GDownloadUrl(searchUrl, function(data) {
   var xml = GXml.parse(data);
   var markers = xml.documentElement.getElementsByTagName('marker');
   Gmap.clearOverlays();
   var loc_sidebar = document.getElementById('loc_sidebar');
   loc_sidebar.innerHTML = '';
   if (markers.length == 0) {
	 loc_sidebar.innerHTML = 'No results found.';
	 Gmap.setCenter(new GLatLng(40, -100), 4);
	 return;
   }
   var bounds = new GLatLngBounds();
   for (var i = 0; i < markers.length; i++) {
	   //can i make this an array?
	 var name = markers[i].getAttribute('name');
	 var address = markers[i].getAttribute('address');
//	 var distance = parseFloat(markers[i].getAttribute('distance'));
	 var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
							 parseFloat(markers[i].getAttribute('lng')));
	 var city = markers[i].getAttribute('city');
	 var state = markers[i].getAttribute('state');
	 var zip = markers[i].getAttribute('zip');
	 var hours = markers[i].getAttribute('hours');
	 var hours_sat = markers[i].getAttribute('hours_sat');
	 var phone = markers[i].getAttribute('phone');
	 var fax = markers[i].getAttribute('fax');
	 var promo = markers[i].getElementsByTagName('promotion');
	 var promo_name = [];
	 var promo_desc = [];
	 for (var ii = 0; ii <promo.length; ii++) {
		 promo_name[ii] = promo[ii].getAttribute('name');
		 promo_desc[ii] = promo[ii].getAttribute('description');
	 }//for
	 
	 var marker = createMarker(point, i, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, type);
	 Gmap.addOverlay(marker);
	 var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, i, type, promo_name, promo_desc);
	 loc_sidebar.appendChild(sidebarEntry);
	 bounds.extend(point);
   } //for
   Gmap.setCenter(bounds.getCenter(), Gmap.getBoundsZoomLevel(bounds));
   
   //remove border from deselected entry
   GEvent.addListener(Gmap,"infowindowclose", function() {
   document.getElementById(lastLetter).style.border="none";
   document.getElementById(lastLetter).style.backgroundColor = '#fff';
   });
   
 });
} // showStoreResults



function createMarker(point, index, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, type) {
	// Create a base icon for all markers
	var baseIcon = new GIcon(G_DEFAULT_ICON); //G_DEFAULT_ICON
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	// Create a lettered icon for this point using icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	
//	if (type != 'state') {
		var letteredIcon = new GIcon(baseIcon); //GIcon(baseIcon)
		letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
		// Set up GMarkerOptions object
		markerOptions = { icon:letteredIcon };
		//create marker and listeners
		var marker = new GMarker(point, markerOptions);
//	} else {
//		var marker = new GMarker(point);
//	}
	
	var html = '<b>' + name + '</b> <br/>' + address;
	GEvent.addListener(marker, 'click', function() {
	// Create an array that will hold the tabs  
/*	var tabs = [];  
	// Create tabs and add them to the array  
	tabs.push(new GInfoWindowTab('Address', '<b>' + name + '</b> <br/>' + address + '<br/>' + city + ', ' + state + ' ' +zip ));  
	tabs.push(new GInfoWindowTab('Hours', '<table><tr> <td> <b>M-F:</b> </td> <td>'+ hours +'</td></tr><tr><td> <b> Sat: </b> </td><td>' + hours_sat + '</td></tr></table>'));  
	tabs.push(new GInfoWindowTab('Contact', '<table><tr> <td> <b>Phone:</b> </td> <td>' + phone +'</td> </tr> <tr> <td> <b> Fax: </b> </td><td>' + fax + '</td></tr></table>'));  
	marker.openInfoWindowTabsHtml(tabs);
*/
	marker.openInfoWindowHtml('<b>' + name + '</b> <br/>' + address + '<br/>' + city + ', ' + state + ' ' +zip );
	document.getElementById(letter).style.border = '2px solid #000000';
	document.getElementById(letter).style.backgroundColor = '#eee';
	lastLetter=letter;
	});
  return marker;
} //createMarker



function createSidebarEntry(marker, name, address, distance, city, state, zip, hours, hours_sat, phone, fax, index, type, promo_name, promo_desc) {
	var div = document.createElement('div');
	// Create a lettered icon for this point using icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	var promoHtml = '';
	var promoHtml = '<strong>Active Promotions: </strong><br />';
	for (var iii = 0; iii < promo_name.length; iii++) {
		promoHtml = promoHtml + '<a href=index.php?option=com_content&view=article&id=78>' + promo_name[iii] + '</a><br />';
	}//for

	
	var html = 	'<table border="0" cellpadding="0" cellspacing="0" id="loc_results" width="100%">' +
					'<tr>' +
						'<td valign="top" width="34%"><span style="font-size:24px; background:#FE766A; font-family:monospace">' + letter + '</span>';
					if (type == 'state') {
						html = html + '<span style="font-size:16px; margin-left: 5px;">' + name + '</span>';
					} else {
						html = html + '<span style="font-size:16px; margin-left: 5px;">' + name + '</span> (' +  distance.toFixed(1) + ' mi.)';
					} //else
					
					html = html +
						'</td>' +
						'<td width="66%" valign="top" rowspan="4">' + 'Open Monday through Friday' + hours + ', Saturday ' + hours_sat + '<br />' +
						promoHtml +
						'</td>' +
					'</tr>' +
//					'<tr bgcolor="#F2C024">' +
//						'<td width="34%"><b>Address</b></td>' +
//						'<td width="33%"><b>Hours</b></td>' +
//						'<td width="33%"><b>Contact</b></td>' +
//					'</tr>' +
//					'<tr>' +
//						'<td>' + address + '</td>' +
//						'<td><b> M-F: </b>' + hours + '</td>' +
//						'<td><b> P: </b>' + phone + '</td>' +
//					'</tr>' +
//					'<tr>' +
//						'<td>' + city + ', ' + state + ' ' + zip + '</td>' +
//						'<td><b> Sat: </b>' + hours_sat + '</td>' +
//						'<td><b> F: </b>' + fax + '</td>' +
//					'</tr>' +
					'<tr>' +
						'<td valign="top" style="padding:0.25em">' + address + '</td>' +
					'</tr>' +
					'<tr>' +
						'<td valign="top">' + city + ', ' + state + ' ' + zip + '</td>' +
					'</tr>' +
					'<tr>' +
						'<td valign="top"><b> P: </b>' + phone + ' | <b>F: </b>' + fax + '</td>' +
					'</tr>' +
					'<tr>' +
					    '<td colspan="2"><hr></td>' +
					'</tr>' +
				'</table>';

	div.id = letter;
	div.innerHTML = html;
	div.style.visibility = 'visible';
	div.style.cursor = 'pointer';
	div.style.marginBottom = '5px'; 
	GEvent.addDomListener(div, 'click', function() {
	GEvent.trigger(marker, 'click'); 
/*	document.getElementById(letter).style.border = '2px solid #000000';
	lastLetter=letter; */
	});
	GEvent.addDomListener(div, 'mouseover', function() {
	div.style.backgroundColor = '#eee';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
	div.style.backgroundColor = '#fff';
	});
	
	return div;
} //createSidebarEntry

function resultsPane (state, current, total, low, hi, results_tot) {
	next = current;
	next++;
	prev = current - 1;
	var loc_results = document.getElementById('loc_results');
	html = 	'<table width="100%" border="0">' +
			'  <tr id="loc_results_header">' +
		    '  <td>' +
//			'	<td width="15%" colspan="2">Results: ' + results_tot + '</td>' +
			'   Results: ' + results_tot + ' | Displaying: ' + low + '-' + hi + ' | Page ' + current + ' of ' + total +
//			'	<td>Showing: ' + low + ' - ' + hi + '</td>' +
//			'  </tr>' +
//			'  <tr>' +
//			'	<td>Page: </td>' +
//			'	<td colspan="2">' + current +' of ' + total + '</td>' +
//			'  </tr>' +
//			'  <tr>';
			' <br />';
	if (current <= 1) {
		html = html + '' ;
	} else {
		html = html + '<a href="javascript:showStateResults(\'' + state +'\', \'state\', ' + prev +')">Previous</a>&nbsp;&nbsp;';
	} //else
	if (current < total) {
		html = html + 	'<a href="javascript:showStateResults(\'' + state +'\', \'state\',  ' + next +')">Next</a>';
	} else {
		html = html + '&nbsp;';
	}//else
	html = html +	'	&nbsp;' +
					'  </td>' +
					'  </tr>' +
					'</table>' +
					'<p>&nbsp;</p>';

	loc_results.innerHTML = html;
}//resultsPane


function storeDirections () {
	directionsWindow= window.open ("/tst/directions.php", "directionsWindow",
    "status=1,scrollbars=1,width=640,height=480");
} //storeDirections

function getQuery( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
