var map;
var geocoder;
//var center_address='';
var postedZip='';
var postedState='';
var posted=false;

var markers = new Array();
var current = 0;
var currentId = 0;

var statesZoom = new Array();

statesZoom['Alaska'] = 3;
statesZoom['California'] = 5;
statesZoom['Connecticut'] = 8;
statesZoom['Delaware'] = 8;
statesZoom['District Of Columbia'] = 8;
statesZoom['Florida'] = 5;
statesZoom['Idaho'] = 5;
statesZoom['Maryland'] = 7;
statesZoom['Massachusetts'] = 7;
statesZoom['Minnesota'] = 5;
statesZoom['Montana'] = 5;
statesZoom['Nevada'] = 5;
statesZoom['New Hampshire'] = 7;
statesZoom['New Jersey'] = 7;
statesZoom['New York state'] = 5;
statesZoom['Rhode Island'] = 8;
statesZoom['South Carolina'] = 7;
statesZoom['Tennessee'] = 7;
statesZoom['Texas'] = 5;
statesZoom['Vermont'] = 7;

statesZoom['Alberta, Canada'] = 4;
statesZoom['British Columbia, Canada'] = 4;
statesZoom['Manitoba, Canada'] = 4;
statesZoom['Newfoundland, Canada'] = 4;
statesZoom['Northwest Territories, Canada'] = 3;
statesZoom['Nunavut, Canada'] = 2;
statesZoom['Ontario, Canada'] = 5;
statesZoom['Prince Edward Island, Canada'] = 7;
statesZoom['Quebec, Canada'] = 4;
statesZoom['Saskatchewan, Canada'] = 4;
statesZoom['Yukon Territory, Canada'] = 4;

/*
var zip_default;
language == 'es' ? zip_default = 'c&oacute;digo postal' : zip_default = 'zip / postal code';
*/

/*
var searchable_zip_default;
language == 'es' ? searchable_zip_default = 'digo postal' : searchable_zip_default = 'zip / postal code';

var replaceable_zip_default;
language == 'es' ? replaceable_zip_default = 'codigo postal' : replaceable_zip_default = 'zip / postal code';
*/

/*
var state_default;
language == 'es' ? state_default = 'estado / provincia' : state_default = 'state / province';
*/



$(document).ready(function() {

  // only zip OR state, not both
  
  $('#fac-gh-state').change(function() {
    $('#fac-gh-zip').val(replaceable_zip_default);
  });
  
  $('#fac-gh-zip').change(function() {
    $('#fac-gh-state').val('');
  });
  
  // get posted variables
  postedZip = $('#posted-zip').html();
  postedState = $('#posted-state').html();
  
  if(postedZip) {
  	$('#fac-gh-zip').val(postedZip);
  	posted = true;
  }
  
  if(postedState) {
  	$('#fac-gh-state').val(postedState);
  	posted = true;
  }
  
  // map
  var latlng = new google.maps.LatLng(40, -96);
  var myOptions = {
  
    zoom: 3,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: false,
    scrollwheel: false
  };

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  geocoder = new google.maps.Geocoder(); 

  // markers
  var directions = true;
  var selected = new Array();
  var infoWindows = new Array();
  
  $('#marker-info').find('.marker').each(function(i){
    var m_name = $(this).find('.name').text();
	var m_lat = $(this).find('.lat').text();
	var m_long = $(this).find('.long').text();
	var m_id = $(this).find('.id').text();
	var m_order = $(this).find('.order-by-distance').text();

	var m_latlng = new google.maps.LatLng(m_lat,m_long);
	var m_icon = get_off_icon(m_order);
	
	// create marker
	markers[i] = new google.maps.Marker({
      position: m_latlng,
      map: map,
      name: m_name,
      icon: m_icon,
      id: m_id
	});
	
	selected[i] = false;
	
    // add a listener to open the tooltip when a user clicks on one of the markers
    google.maps.event.addListener(markers[i], 'click', function() {
      writeMapInfo(m_id);
      
      current=i;
      currentId=m_id;
      markers[i].setIcon(get_on_icon(m_order));
    });
    
  });
  
  // go to zip/state (if they have been posted)
  
  if (posted) {
  	submitAddress();
  }
  
});


function submitAddress() {
  var zip = $('#fac-gh-zip').val();
  var state = $('#fac-gh-state').val();
  var zoomLevel = 6;
  
  if (zip != '' && zip.search(searchable_zip_default) == -1) {
    zoomLevel = 10;
    findAddress(zip, 'zip', zoomLevel);
  } else if (state != '' && state != state_default) {
    if (statesZoom[state]) {
      zoomLevel = statesZoom[state];
    }
    findAddress(state, 'state', zoomLevel);
  } else {
    alert('Please enter a zip code or state/province.');
  }
}

function findAddress(address, type, zoomNum) {
	var centerLat = $('#center-latitude').html();
	var centerLng = $('#center-longitude').html();
	
	if (centerLat != '' && centerLng != '') {
		map.setCenter(new google.maps.LatLng(centerLat, centerLng));
		map.setZoom(zoomNum);
	} else {
		alert('Geocode failed. '+$('#error-holder').html());
	}
}

function directionsLink(dest) {
	var base_url;
	language == 'es' ? base_url = 'http://maps.google.es' : base_url = 'http://maps.google.com';
	//var source = center_address.replace(/ /gi, "+");
	var destination = dest.replace(/ /gi, "+");
	//var url = base_url + "/maps?saddr=" + source + "&daddr=" + destination;
	var url = base_url + "/maps?saddr=&daddr=" + destination;
	return url;
}

function writeMapInfo(m_id) {
  var m_data = $('#m-id-'+m_id);

    var m_name = m_data.find('.name').text();
	var m_address = m_data.find('.address').text();
	var m_city = m_data.find('.city').text();
	var m_state = m_data.find('.state').text();
	var m_postal = m_data.find('.postal-code').text();
	var m_country = m_data.find('.country').text();
	var m_phone = m_data.find('.phone').text();
	var m_website = m_data.find('.website').text();
	var m_hours = m_data.find('.hours').text();
	var m_services = m_data.find('.services').text();
	
	m_website_href = m_website.search('http://') != -1 ? m_website : 'http://' + m_website;
	m_website = m_website.replace('www.', '');
	
	var m_full_address = m_address + ", " + m_city + ", " + m_state + " " + m_postal + ", " + m_country;
	
	var directions_text = language == 'es' ? "c&oacute;mo llegar" : "get directions";
	var hours_text = language == 'es' ? "Horas de Operaci&oacute;n" : "Hours";
	var services_text = language == 'es' ? "Servicios" : "Services";
	//var show_services_text = language == 'es' ? "mostrar servicios" : "show services";
	//var show_other_text = language == 'es' ? "mostrar direcci&oacute;n y horario" : "show address and hours";
	var show_services_text = "show services";
	var show_other_text = "show address and hours";
	
	var m_html='<div class="info-window-text hide-services"><div class="m-name">'+m_name+'</div><div class="where-and-when"><div class="m-full-address '+m_country+'-full-address"><div class="m-address">'+m_address+'</div><div class="city-state-postal"><span class="m-city">'+m_city+'</span><span class="state-comma">, </span><span class="m-state">'+m_state+'</span> <span class="m-postal">'+m_postal+'</span></div><div class="m-country">'+m_country+'</div></div><div class="directions-website-phone"><div class="m-directions"><a href="'+directionsLink(m_full_address)+'" target="_blank">'+directions_text+'</a></div><div class="m-website"><a href="'+m_website_href+'" target="_blank" >'+m_website+'</a></div><div class="m-phone">'+m_phone+'</div></div><div class="m-hours"><div class="m-hours-heading">'+hours_text+'</div>'+m_hours+'</div><a class="show-link" href="javascript:show_services()">'+show_services_text+' &raquo;</a></div><div class="m-services"><div class="m-services-heading">'+services_text+'</div>'+m_services+'<br><a class="show-link" href="javascript:show_where_and_when()">'+show_other_text+' &raquo;</a></div>';
  
  $('#map-info-inner').html(m_html);
  
    var prev_m_data = $('#m-id-'+currentId);
	var prev_m_order = prev_m_data.find('.order-by-distance').text();
	var prev_m_icon = get_off_icon(prev_m_order);
	
    markers[current].setIcon(prev_m_icon);
}

function get_off_icon(num) {
  var n = num != '' && num<6 ? num : '';
  return '/~optwork/wp-content/themes/optionline/images/markerOff'+n+'.png';
}

function get_on_icon(num) {
  var n = num != '' && num<6 ? num : '';
  return '/~optwork/wp-content/themes/optionline/images/markerOn'+n+'.png';
}

function show_services() {
  $(".info-window-text").addClass("hide-where-and-when");
  $(".info-window-text").removeClass("hide-services");
}


function show_where_and_when() {
  $(".info-window-text").addClass("hide-services");
  $(".info-window-text").removeClass("hide-where-and-when");
}
