/*To get it working in a right way, it's a must to import Google Maps Api v2
 *<script src="http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=YOUR_KEY" type="text/javascript"></script>
*/
var map = null;
var geocoder = null;

var errors = {};

var markers = {};
var currentMarker = 0;


function futurlink_partner_map_initialize(places_list, bubbles_list) {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_partners"));
    map.setCenter(new GLatLng(40.413, -3.690), 1);
    map.addControl(new GSmallMapControl());
    geocoder = new GClientGeocoder();
    futurlink_partner_map_loadAllMarkers(places_list, bubbles_list);
  }
}


function futurlink_partner_map_showCoordinates(latitude, longitude, branchKey, partnerKey, bubble){
  var newPoint = new GLatLng(latitude, longitude, true);
  var marker = new GMarker(newPoint);
  markers[branchKey] = markers[branchKey] || {};
  markers[branchKey][partnerKey] = marker;
  markers[branchKey][partnerKey]['message'] = bubble;
  markers[branchKey][partnerKey].bindInfoWindowHtml(bubble);
  currentMarker += 1;
  map.addOverlay(marker);
  markers[branchKey]['toggled'] = true;
}

function futurlink_partner_map_showAddress(address, branchKey, partnerKey, bubble, times) {
  if (geocoder) {
    geocoder.getLatLng(address, function(point) {
        if (!point) {
          if(times < 8){
            setTimeout('futurlink_partner_map_showAddress("'+address+'", "'+branchKey+'", "'+partnerKey+'", "'+ bubble +'", ' + (times+1) +');', 800)
          }else
            errors[partnerKey] = address;
        } else {
          var marker = new GMarker(point);
          markers[branchKey] = markers[branchKey] || {};
          markers[branchKey][partnerKey] = marker;
          markers[branchKey][partnerKey]['message'] = bubble;
          markers[branchKey][partnerKey].bindInfoWindowHtml(bubble);
          currentMarker += 1;
          map.addOverlay(marker);
          markers[branchKey]['toggled'] = true;
        }
      }
    );
  }
}

function futurlink_partner_map_toggleBranchMarkers(branchKey, isBranch){
  if (markers[branchKey]){
    //check first use of toggle, and assign right value
    if(markers[branchKey]['toggled'] != undefined){
      if(!isBranch && markers[branchKey]['toggled'])
        return
      else
        markers[branchKey]['toggled'] = !markers[branchKey]['toggled'];
    }else{
      markers[branchKey]['toggled'] = false;
    }
    if (!markers[branchKey]['toggled'])
      futurlink_partner_map_hideBranchMarkers(branchKey)
    else
      futurlink_partner_map_showBranchMarkers(branchKey)
  }
}

function futurlink_partner_map_hideBranchMarkers(branchKey){
  for (var i in markers[branchKey]){
    if (i != 'toggled'){
      markers[branchKey][i].hide();
    }
  }
}

function futurlink_partner_map_showBranchMarkers(branchKey){
  for (var i in markers[branchKey]){
    if (i != 'toggled'){
      markers[branchKey][i].show();
    }
  }
}

function futurlink_partner_map_showBubble(branchKey, partnerKey){
   if (markers[branchKey][partnerKey])
    markers[branchKey][partnerKey].openInfoWindowHtml(markers[branchKey][partnerKey]['message']);
}

function futurlink_partner_map_loadAllMarkers(places, bubbles){
  //it will iterate through a list of lists, each one designing a branch with all partners associated
  elems = 0;
  for (var i in places){
    for(var j in places[i]){
      var comps = j.split('_');
      if( comps[1] == 'coordinates'){
        var latlong = places[i][j].split(',');//lattitude, longitude coordinates
        futurlink_partner_map_showCoordinates(latlong[0], latlong[1], i, comps[0], bubbles[i][comps[0]]);
      }else{
        futurlink_partner_map_showAddress(places[i][j], i, comps[0], bubbles[i][comps[0]], 0); //full address
      }
      
      elems += 1;
    }
  }
}

function showErrors(){
  var a = ""
  for (var i in errors){
    a += i + ": " + errors[i] + "\n";
  }
 }