var home_icon = null;
var map = null;
var geocoder = null;
var bounds = null;

$(function () {
  initialize();
});

function initialize() {
  if (GBrowserIsCompatible()) {
    home_icon = new GIcon();
    home_icon.image = '/sites/all/modules/custom/dlocator/house.png';
    home_icon.shadow = '/sites/all/modules/custom/dlocator/house_shadow.png';
    home_icon.iconSize = new GSize(33, 32);
    home_icon.shadowSize = new GSize(33, 32);
    home_icon.iconAnchor = new GPoint(11, 30);
    home_icon.infoWindowAnchor = new GPoint(11, 2);

    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(36, -95), 4);
    map.addControl(new GLargeMapControl());
    map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl());
    map.enableDoubleClickZoom();

    geocoder = new GClientGeocoder();
    
    var address = $.getURLParam("location");
    if (address) {
      $('address_input').value = address;
      showAddress(address)
    }
    else {
      $('address_input').value = "";
      $('address_input').focus();
      processIP(15);
    }
  }
}

function createMarker(point, info, icon) {
  icon = (icon) ? icon : G_DEFAULT_ICON;
  var marker = new GMarker(point, icon);
  marker.info = info;
  GEvent.addListener(marker, "click", function() {
    this.openInfoWindowHtml( this.info, { maxWidth: 250 } );
    map.panTo(point);
  });
  return marker;
}

function searchaction(data) {
  var result = Drupal.parseJson(data);
  if (result.ErrorCode == 0) {
    bounds = new GLatLngBounds();
    map.clearOverlays();
    bounds.extend(new GLatLng(result.Origin_Latitude, result.Origin_Longitude));
    map.setCenter(new GLatLng(result.Origin_Latitude, result.Origin_Longitude), 13);
       
    if(result.MEMBERS.Member.length == 0) {
      alert("Your address or zip code was found but no member stores could be found. Try a wider range.");
    }

    //iterate through data returned w/jquery
    for (x = 0; x < result.MEMBERS.Member.length; x++ ) {
      var point = new GLatLng(result.MEMBERS.Member[x].Latitude, result.MEMBERS.Member[x].Longitude);
      
      //add a marker on the map
      var info = '<div class="member_map"><p><span class="member_info">' + result.MEMBERS.Member[x].Name + '</span> ' + Math.round(result.MEMBERS.Member[x].Distance*10)/10 + ' mi.</p>'
      info +=  '<p><span class="member_phone"> Tel:' +result.MEMBERS.Member[x].Telephone +'</span><br/>';
      info += result.MEMBERS.Member[x].Address1 + '<br/>';
      info += result.MEMBERS.Member[x].City + ' ' + result.MEMBERS.Member[x].State + ' ' + result.MEMBERS.Member[x].PostalCode + '<br/>';
      info += '<a href="http://'+result.MEMBERS.Member[x].URL + '" target="_blank">'+result.MEMBERS.Member[x].URL+'</a> </p>';

      bounds.extend(point)
      
      //add an info panel
      map.addOverlay( createMarker(point, info) );
    }
    //centermap
    map.setCenter( bounds.getCenter(), map.setZoom( map.getBoundsZoomLevel(bounds)));
  }
}

function processIP(miles) {
  bounds = new GLatLngBounds();
  $.get("dlocator/process_ip/"+miles  , null, searchaction );
}

function showAddress(address) {
  if (geocoder) {
    geocoder.getLatLng( address, processAddress );
  }
}

function processAddress(point) {
  if (!point) {
    alert("Address was not found");
  } 
  else {
    bounds = new GLatLngBounds();
    bounds.extend(point);
    map.clearOverlays();
    address = $('address_input').value;
    miles = $("#miles").val();
    map.addOverlay( createMarker(point, "<p>" + address + "</p>", home_icon) );
   
    $.get("dlocator/process_point/"+point.lat()+'/'+point.lng()+'/'+miles  , null, searchaction );
  }
}

/* Copyright (c) 2006 Mathias Bank (http://www.mathias-bank.de)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * Thanks to Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
 */
jQuery.extend({
/**
* Returns get parameters.
*
* If the desired param does not exist, null will be returned
*
* @example value = $.getURLParam("paramName");
*/ 
 getURLParam: function(strParamName){
	  var strReturn = "";
	  var strHref = window.location.href;
	  var bFound=false;
	  
	  var cmpstring = strParamName + "=";
	  var cmplen = cmpstring.length;

	  if ( strHref.indexOf("?") > -1 ){
	    var strQueryString = strHref.substr(strHref.indexOf("?")+1);
	    var aQueryString = strQueryString.split("&");
	    for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
	      if (aQueryString[iParam].substr(0,cmplen)==cmpstring){
	        var aParam = aQueryString[iParam].split("=");
	        strReturn = aParam[1];
	        bFound=true;
	        break;
	      }
	      
	    }
	  }
	  if (bFound==false) return null;
	  return strReturn;
	}
});
