/****************** Implementation by Felixone.it *******************/

var gmpopstyle = "font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"; // you may edit this style
var gmpath = "";  // optional if needed for image including last slash

var GMclass = GMclass ? " class='"+GMclass+"'" : "";
var rmap = null;
var directions;
var mrk;

var baseIcon = new GIcon();
baseIcon.shadow = GMicshadow;
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

function loadRMap() {
  if (GMnames.length == 1 && GMStype[0] != "") {
    GMzoom = parseInt(GMSzoom[0]);
    gmtype = parseInt(GMStype[0]);
  } else getGMConf(GMcookie);
  if (GBrowserIsCompatible()) {
    rmap = new GMap2(document.getElementById("rmap"));
    directions = new GDirections(rmap, document.getElementById("route"));
    if (GMctrl) rmap.addControl(GMapctrl);
    if (GMtype) rmap.addControl(new GMapTypeControl());
    if (GMscale) rmap.addControl(new GScaleControl());
    if (GMoview) rmap.addControl(new GOverviewMapControl());
    if (GMnonorm) rmap.removeMapType(G_NORMAL_MAP);
    if (GMnosat) rmap.removeMapType(G_SATELLITE_MAP);
    if (GMnohybr) rmap.removeMapType(G_HYBRID_MAP);
    if (GMground) rmap.addMapType(G_PHYSICAL_MAP);
    if (gmtype) rmap.setMapType(rmap.getMapTypes()[gmtype]);
    rmap.enableContinuousZoom();
    rmap.setCenter(GMcenter, GMzoom);
    var maxlat = 0;
    var minlat = 1000;
    var maxlng = -1000;
    var minlng = 1000;
    for (var i=0; i<GMnames.length; i++) {
      if (GMlats[i] != "" && GMlngs[i] != "") {
        var point = new GLatLng(GMlats[i],GMlngs[i]);
        var icon = new GIcon(baseIcon);
        icon.image = GMicon.replace(/##/, GMnum);
        maxlat = Math.max(maxlat,GMlats[i]);
        minlat = Math.min(minlat,GMlats[i]);
        maxlng = Math.max(maxlng,GMlngs[i]);
        minlng = Math.min(minlng,GMlngs[i]);
        var rightlat = (maxlat-minlat)/2 + minlat;
        var rightlng = (minlng-maxlng)/2 + maxlng;
        rightpoint = new GLatLng(rightlat,rightlng);
        rmap.setCenter(rightpoint, GMzoom);
        rmap.addOverlay(createMarker(point, GMnames[i], GMaddrs[i], GMtown[i], GMstate[i], GMcountry[i], GMpic[i], GMlink[i], GMdescr[i], icon, i));
        if (i > 0) {
          setZoom(GMzoom,minlat,maxlat,minlng,maxlng,rightpoint);
        }
      }
      GMnum++;
    }
  }
}

function createMarker(point, name, address, town, state, country, pic, link, descr, ic, i) {
  var marker = new GMarker(point, ic);
  var panoDiv = document.createElement('div');
  if (address != "") address += "<br>";
  if (state != "" && town != "") {
    town += ", " + state+"<br>";
  } else if (town != "") town += "<br>";
  if (country != "") country += "<br>";
  var fulladdr = address+town+country;
  fulladdr = fulladdr.replace(/<br>/gi, ", ");
  fulladdr = fulladdr.replace(/,\s*$/, "");
  if (pic != "") pic = "<img src='"+gmpath+pic+"' border='0'><br>";
  if (descr != "") descr += "<br>";
  if (link != "") link = "<a href='"+link+"' target='_blank'"+GMclass+">"+link.replace(/^https?:\/\//i,"")+"</a>";
  var direc = (GMdirec) ? "<tr><td>Get it from:<br><input type=\"text\" id=\"from\" style=\"width:250px\"> <input type=\"button\" value=\" Go \" onClick=\"loadDir(document.getElementById('from').value, '"+fulladdr+"')\"><br>Insert a complete address with town and country.</td></tr>" : "";
  var stview = (GMstview) ? "<a href=\"javascript:;\" onClick=\"rmap.getInfoWindow().maximize()\">Street View</a>" : "";
  var gmpophtml = "<table width='300' border='0' cellpadding='0' cellspacing='0' style='"+gmpopstyle+"'><tr><td align='left'><b>"+name+"</b><br>"+address+town+country+stview+"<br></td></tr><tr><td align='left'>"+pic+descr+link+"<br></td></tr>"+direc+"</table>";
  GEvent.addListener(marker, "click", function() {
    mrk = marker;
    pano = createStView(panoDiv, point);
    xnode = panoDiv;
    var mcont = (GMstview) ? {maxContent:panoDiv,maxTitle:"Street View - Near by: " + address} : null;
    marker.openInfoWindowHtml(gmpophtml, mcont);
  });
  GEvent.addListener(rmap.getInfoWindow(), "maximizeend", function () {fullView();});
  return marker;
}

function setZoom(z,minlat,maxlat,minlng,maxlng,lastpoint) {
  var zoom = z;
  var bounds = rmap.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  if (minlat < southWest.lat() || maxlat > northEast.lat() || minlng < southWest.lng() || maxlng > northEast.lng()) {
    zoom--; rmap.setCenter(lastpoint, zoom);
    setZoom(zoom,minlat,maxlat,minlng,maxlng,lastpoint);
  }
}

function loadDir(fromdir, todir) {
  if (fromdir.replace(/ /g,"") != "") {
    directions.load("from: "+ fromdir + " to: " + todir);
//    mrk.closeInfoWindow();
//    rmap.removeOverlay(mrk);
  } else alert("The from address is required");
}


