	var map;
	var geocoder;
	var pageZip;
	var pageProduct;

	$(document).ready(function() {
	    //$("input.finderZip").numeric();

	    pageZip = $.jqURL.get("z");
	    pageProduct = $.jqURL.get("p");

	    if (pageZip != "") {
	        $('#addressInput').val(pageZip);
	    }

	    load();
	});
	
	
function load() {
	if (GBrowserIsCompatible()) {
	    geocoder = new GClientGeocoder();
	    map = new GMap2(document.getElementById('map'));
   
		//create control & position it with padding 
		//for the cloud effect...
		var mapControl = new GLargeMapControl3D();
		var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(90, 90));
		
		map.addControl(mapControl, topRight);		
		map.setCenter(new GLatLng(38, -97), 3);//center on us
		
        if(pageZip) {
            searchLocations2(pageZip);
        }
	}
}

function searchLocations() {

    var address = $('#addressInput').val();
    var city = $('#txtCity').val();
    var state = $('#ddlStates').val();
    pageProduct = "";

    if ( (city.length > 1 && city != "City") && (state != "-1") ) {
        //using city / state
        geocoder.getLatLng(city + ", " + state, function(latlng) {
            if (!latlng) {
                var sidebar = document.getElementById('sidebar');
                sidebar.innerHTML = '<span style="color:#ff0000;"><strong>&bull;&nbsp;Address not found.</strong></span>';
            } else {
                searchLocationsNear(latlng);
            }
        });
    }else if ( address.length > 1 && address != "Zip" ) {
        //using zip
        geocoder.getLatLng(address, function(latlng) {
            if (!latlng) {
                var sidebar = document.getElementById('sidebar');
                sidebar.innerHTML = '<span style="color:#ff0000;"><strong>' + address + ' not found.</strong></span>';
            } else {
                searchLocationsNear(latlng);
            }
        });
    }else if( (address.length < 1 || address == "Zip") && (city.length < 1 || city == "City") || (state == "-1") ){
        var errorText = "<div style='float:left;margin-left:5px;'>Enter a city and state or zip to proceed.</div>";
         $('#divError').show();
         $('#snError').html(errorText);         
         return false;
    }    
}

function searchLocations2(address) {
	
	geocoder.getLatLng(address.toString(), function(latlng) {
		if (!latlng) {
			var sidebar = document.getElementById('sidebar');
			sidebar.innerHTML = '<span style="color:#ff0000;"><strong>'+address+' not found.</strong></span>';			 
		} else {
			searchLocationsNear(latlng);
		}
	});
}

function searchLocationsNear(center) {
    $('#divError').show();
    $('#snError').html('');

    $("#activityIndicator").show();

    var product = "";
    
    if(pageProduct){
        product = pageProduct;
    } else {
        product = $('#ddlProduct').val();    
    }   
     

    //var searchUrl = "stores.xml"; + "&pd=" + f
    var searchUrl = "xml/getstores.ashx?lt=" + center.lat() + "&ln=" + center.lng() + "&p="+product;

    GDownloadUrl(searchUrl, function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');

        //reset map
        map.clearOverlays();

        if (markers.length == 0) {
            $("#activityIndicator").hide();
            $('#divError').show();
            $('#snError').html("No results found.");
            map.setCenter(new GLatLng(38, -97), 3); //b'ville
            return;
        }

        var bounds = new GLatLngBounds();

        //parse xml, add points		
        for (var i = 0; i < markers.length; i++) {
            //xml data
            var address = markers[i].getAttribute('streetAddress');
            var city = markers[i].getAttribute('city');
            var phone = markers[i].getAttribute('phone');
            var state = markers[i].getAttribute('state');
            var zip = markers[i].getAttribute('zip');
            //additional
            var type = markers[i].getAttribute('type');
            var green = markers[i].getAttribute('prod');


            //var distance = parseFloat(markers[i].getAttribute	('distance'));
            var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lon')));

            var storeType = "";
            if (type == "1") {
                storeType = "Walmart";
            } else {
                storeType = "Neighborhood Market";
            }

            var products = "<div class='wcproducts'><span class='smHeader'>Products available:</span><ul><li>White Cloud</li><li>White Cloud Ultra</li>";
            if (green == "1") {
                products += "<li>Green Earth</li>";
            }
            products += "</ul></div>";

            var marker = createMarker(point, storeType, address, city, state, zip, phone, products);
            map.addOverlay(marker);
            bounds.extend(point);

        }
        map.setCenter(bounds.getCenter(), 10); //map.getBoundsZoomLevel(bounds)

        $("#activityIndicator").hide();

    });


}

function createMarker(point, name, address, city, state, zip, phone, products) {
	
    var baseIcon = new GIcon(G_DEFAULT_ICON);
    baseIcon.shadow = "/images/cloud_shadow.png";
    baseIcon.iconSize = new GSize(26, 26);
    baseIcon.shadowSize = new GSize(36, 34);
    baseIcon.iconAnchor = new GPoint(26, 26);
    baseIcon.infoWindowAnchor = new GPoint(17, 28);
	
	var cloudIcon = new GIcon(baseIcon);
    cloudIcon.image = "/images/cloud_icon.png";

    // Set up our GMarkerOptions object
    markerOptions = { icon: cloudIcon };
    var marker = new GMarker(point, markerOptions);

    var html = '<b>'+name+'</b><br />'+address+'<br />'+city + ', ' + state + ' ' + zip+'<br />'+phone+'<br />' + products + '</span>';

    GEvent.addListener(marker, "click", function() {
        var newPoint = new GLatLng(500, point.lng() + 200);
        map.panTo(newPoint);
        marker.openInfoWindowHtml(html);
    });

    return marker;
}