/* these are necessary for IE to use SVG poly overlays*/
var _mSvgForced = true;
var _mSvgEnabled = true;

var mapTags = []; // array for map markers

Date.prototype.getTimestamp = function()
{
  return this.getUTCFullYear() + "," + this.getUTCMonth() + "," + this.getUTCDate() + "," + this.getUTCHours() + "," + this.getUTCMinutes();
};

var Mappr = {
  gmap           : null,
  markerOpt      : null,
  markerMgr      : null,
  markers        : [],
  pcGeo          : {ab:{lt:57.131086,lg:-2.122482},al:{lt:51.748873,lg:-0.328511}, b:{lt:52.4792,lg:-1.910378},ba:{lt:51.412421,lg:-2.364541},bb:{lt:53.755406,lg:-2.456299},bd:{lt:53.795331,lg:-1.754943},bh:{lt:50.725566,lg:-1.871704},bl:{lt:53.636852,lg:-2.30806},bl:{lt:53.597754,lg:-2.453484},bn:{lt:50.850784,lg:-0.142862},br:{lt:51.412584,lg:0.024843},bs:{lt:51.454813,lg:-2.598741},bt:{lt:54.601176,lg:-5.925854},ca:{lt:54.884411,lg:-2.913138},cb:{lt:52.196481,lg:0.063253},cf:{lt:51.481597,lg:-3.180885},ch:{lt:53.225184,lg:-2.937352},cm:{lt:51.68025,lg:0.842547},cm:{lt:51.756745,lg:0.426735},co:{lt:51.888418,lg:0.911281},cr:{lt:51.362751,lg:-0.071633},ct:{lt:51.278952,lg:1.079734},cv:{lt:52.410338,lg:-1.509154},cw:{lt:53.112178,lg:-2.416255},da:{lt:51.446531,lg:0.206018},dd:{lt:56.460856,lg:-2.9588},de:{lt:52.903346,lg:-1.511342},dg:{lt:55.073,lg:-3.58},dh:{lt:54.777922,lg:-1.55439},dl:{lt:54.550379,lg:-1.526809},dn:{lt:53.523749,lg:-1.13163},dt:{lt:50.710347,lg:-2.4513},dy:{lt:52.517257,lg:-2.09395}, e:{lt:51.514997,lg:-0.058707},ec:{lt:51.52416,lg:-0.096177},eh:{lt:55.95246,lg:-3.193287},en:{lt:51.65707,lg:-0.064145},ex:{lt:50.735387,lg:-3.495332},fk:{lt:55.944042,lg:-3.808719},fy:{lt:53.815688,lg:-3.043205}, g:{lt:55.860728,lg:-4.250792},gl:{lt:51.853212,lg:-2.242429},gu:{lt:51.246095,lg:-0.552293},ha:{lt:51.55141,lg:-0.30637},ha:{lt:51.577621,lg:-0.34071},hd:{lt:53.647016,lg:-1.78919},hg:{lt:54.001474,lg:-1.531793},hp:{lt:51.752211,lg:-0.504525},hr:{lt:52.065748,lg:-2.628451},hs:{lt:58.213,lg:-6.381},hu:{lt:53.739795,lg:-0.345166},hx:{lt:53.720845,lg:-1.873504},ig:{lt:51.559686,lg:0.068347},ip:{lt:52.072326,lg:1.134822},iv:{lt:57.501885,lg:-4.268315},ka:{lt:55.575944,lg:-4.499006},kt:{lt:51.408237,lg:-0.297472},kw:{lt:58.516048,lg:-3.243888},ky:{lt:56.130216,lg:-3.129049}, l:{lt:53.402051,lg:-2.979837},la:{lt:54.039125,lg:-2.793106},ld:{lt:52.293074,lg:-3.366511},le:{lt:52.63265,lg:-1.128715},ll:{lt:53.097323,lg:-3.790283},ln:{lt:53.281461,lg:-0.64398},ls:{lt:53.798097,lg:-1.551366},lu:{lt:51.865456,lg:-0.434819}, m:{lt:53.478484,lg:-2.23557},me:{lt:51.359086,lg:0.491901},mk:{lt:52.006042,lg:-0.726102},ml:{lt:55.803476,lg:-3.967203}, n:{lt:51.520203,lg:-0.118901},ne:{lt:54.981782,lg:-1.626919},ng:{lt:52.955748,lg:-1.148847},nn:{lt:52.243672,lg:-0.882083},np:{lt:51.672555,lg:-3.032227},nr:{lt:52.624078,lg:1.307184},nw:{lt:51.533313,lg:-0.144693},ol:{lt:53.557605,lg:-2.113629},ox:{lt:51.729639,lg:-1.28049},pa:{lt:55.845502,lg:-4.426747},pe:{lt:52.590276,lg:-0.235437},ph:{lt:56.466959,lg:-3.561785},pl:{lt:50.369212,lg:-4.143605},po:{lt:50.798947,lg:-1.089521},pr:{lt:53.754842,lg:-2.708077},rg:{lt:51.453118,lg:-0.969128},rh:{lt:51.234337,lg:-0.133752},rm:{lt:51.585869,lg:0.184763}, s:{lt:53.378922,lg:-1.471616},sa:{lt:51.633739,lg:-3.920433},se:{lt:51.495933,lg:-0.093868},sg:{lt:51.910265,lg:-0.196037},sk:{lt:53.408558,lg:-2.147592},sl:{lt:51.526973,lg:-0.515586},sl:{lt:51.536391,lg:-0.6262},sm:{lt:51.370446,lg:-0.192906},sn:{lt:51.556859,lg:-1.772107},so:{lt:50.910069,lg:-1.394062},sp:{lt:51.079263,lg:-1.79336},sr:{lt:54.909048,lg:-1.388008},ss:{lt:51.549178,lg:0.687521},ss:{lt:51.535534,lg:0.736419},st:{lt:53.026,lg:-2.172},sw:{lt:51.499157,lg:-0.143114},sy:{lt:52.725146,lg:-2.734015},ta:{lt:51.077473,lg:-3.191758},td:{lt:55.658105,lg:-2.818431},tf:{lt:52.70311,lg:-2.494334},tn:{lt:51.140576,lg:0.272052},tq:{lt:50.485191,lg:-3.520637},tr:{lt:50.260052,lg:-5.055824},ts:{lt:54.57292,lg:-1.20781},tw:{lt:51.44756,lg:-0.322264},ub:{lt:51.519643,lg:-0.369392}, w:{lt:51.513606,lg:-0.149799},wa:{lt:53.394843,lg:-2.558947},wc:{lt:51.524142,lg:-0.123356},wd:{lt:51.647,lg:-0.4},wf:{lt:53.686549,lg:-1.473713},wn:{lt:53.573918,lg:-2.630737},wr:{lt:52.199959,lg:-2.207516},ws:{lt:52.576095,lg:-1.978659},wv:{lt:52.585124,lg:-2.115862},yo:{lt:53.958128,lg:-1.080271},ze:{lt:60.152,lg:-1.168},je:{lt:49.2,lg:-2.1333},im:{lt:54.15147,lg:-4.4819153},gy:{lt:49.452881,lg:-2.543269}},
  iconImgNormal  : "http://labs.google.com/ridefinder/images/mm_20_blue.png",
  icon           : null,

  popupResize : function()
  {
  },

  popup : function( markerUrl, options )
  {
    var def = { "zIndex":"200",
                "top":"",
                "left":"",
                "width":($(window).width()-100)+"px",
                "height":($(window).height()-100)+"px",
                "blank":"#000",
                "blankFade":"0.75",
                "background":"#fff",
                "border":"0px solid #000",
                "padding":"20px",
                "mapBorder":"0px solid #ccc",
                "close":true,
                "closeString":"X",
                "closeStyle":"float:right; padding:3px 10px",
                "showControls":true,
                "control":null,
                "centreOnTags":false,
                "startZoom":12,
                "startLat":53.700365,
                "startLong":-1.505127
              };
    var settings = $.extend( def, options );
    if( settings.blank!="" )
    {
      var blank = $("#Mappr_blank");
      if( blank.size()==0 )
      {
        blank = $("<div></div>").attr("id","Mappr_blank").css( { "zIndex":(settings.zIndex-2), "display":"none", "position":"absolute", "top":"0px", "left":"0px", "width":$(window).width()+"px", "height":($(document).height()>$(window).height()?$(document).height():$(window).height())+"px" } );
        $(document.body).append( blank );
      }
      blank.fadeTo( 0, 0 );
      blank.css( { "display":"block" } );
      blank.css( { "background-color":settings.blank } );
      blank.fadeTo( 200, settings.blankFade );
    }
    var layer = $("#Mappr_popup");
    if( layer.size()==0 )
    {
      layer = $("<div></div>").attr("id","Mappr_popup").css( { "display":"none" } );
      $(document.body).append( layer );
    }
    layer.html("");
    if( settings.close )
    {
      var close = $("<div></div>").html("<a href=\"#\""+(settings.closeStyle==""?"":" style=\""+settings.closeStyle+"\"")+" onclick=\"return Mappr.popupClose();\">"+settings.closeString+"</a>");
      layer.append( close );
    }
    var map = $("<div></div>").attr("id","map").css( { "border":settings.mapBorder, "width":settings.width, "height":settings.height, "margin":settings.padding } );
    map.html("Loading...");
    layer.append( map );

    layer.css( { "border":settings.border, "background-color":settings.background } );
    layer.css( { "z-index":settings.zIndex, "position":"absolute", "width":(parseInt(settings.width)+(parseInt(settings.padding)*2))+"px", "height":(parseInt(settings.height)+(parseInt(settings.padding)*2))+"px"  } );
    if( settings.top=="" )
    {
      settings.top  = ((( $(window).height()-parseInt(map.css("height"))-(parseInt(settings.padding)*2) ) / 2) + $(window).scrollTop())+"px";
    }
    if( settings.left=="" )
    {
      settings.left = ((( $(window).width()-parseInt(map.css("width"))-(parseInt(settings.padding)*2) ) / 2) + $(window).scrollLeft())+"px";
    }

    layer.css( { "top":settings.top, "left":settings.left } );
    if( !( $.browser.msie && $.browser.version<7 ) )
    {
      layer.css( { "position":"fixed" } );
    }
    mapTags = [];
    layer.fadeIn(100);

    var iframe = $("#Mappr_iframe");
    if( iframe.size()==0 )
    {
      iframe = $("<iframe></iframe>").attr("src","").attr("frameBorder","0").attr("id","Mappr_iframe").css( { "background-color":"#000", "z-index":(settings.zIndex-1), "position":"absolute", "top":(parseInt(layer.css("top")))+"px", "left":(parseInt(layer.css("left")))+"px", "width":layer.width()+"px", "height":layer.height()+"px", "border":"0px" } );
    }
    iframe.fadeTo( 0, 1 );
    $(document.body).append( iframe );

    $.get( markerUrl, function( content ) {
        eval( content );

        if( settings.centreOnTags && mapTags.length > 0 && typeof( options.startLat ) == "undefined" && typeof( options.startLong ) == "undefined" )
        {
          settings.startLat  = 0;
          settings.startLong = 0;

          for( var i = 0 ; i < mapTags.length ; i++ )
          {
            settings.startLat  += mapTags[i].latitude;
            settings.startLong += mapTags[i].longitude;
          }

          settings.startLat  = settings.startLat  / mapTags.length;
          settings.startLong = settings.startLong / mapTags.length;
        }

        Mappr.init( settings.showControls, settings.startLat, settings.startLong, settings.startZoom, mapTags, settings );
      } );

    $('.video').hide();

    return false;
  },

  popupClose : function()
  {
    $("#Mappr_popup").fadeOut( 400, function() { $("#Mappr_popup").hide() } );
    $("#Mappr_blank").fadeOut( 400, function() { $("#Mappr_blank").hide() } );
    $("#Mappr_iframe").fadeOut( 0,  function() { $("#Mappr_iframe").hide() } );

    $('.video').show();

    return false;
  },

  init : function( controls, lat, lng, zoom, initMarkers, settings )
  {
    if( !(GBrowserIsCompatible()) )
    {
      return;
    }
    window.onunload = function(){GUnload();};
    lat = (typeof(lat)=="undefined"?20:lat);
    lng = (typeof(lng)=="undefined"?0:lng);
    zoom = (typeof(zoom)=="undefined"?0:zoom);
    Mappr.GMapExtend();

    Mappr.gmap = new GMap2($("#map")[0],{mapTypes:[G_NORMAL_MAP,G_HYBRID_MAP,G_SATELLITE_MAP]});

    if( typeof(controls) != "undefined" && controls )
    {
      Mappr.gmap.addControl(new GMapTypeControl());
      Mappr.gmap.addControl(new GLargeMapControl());
      Mappr.gmap.enableDoubleClickZoom();
      Mappr.gmap.enableContinuousZoom();
      Mappr.gmap.enableScrollWheelZoom();

      if( settings.control != null )
      {
        Mappr.gmap.addControl( settings.control );
      }
    }

    Mappr.gmap.setCenter(new GLatLng(lat, lng), zoom);

    var icon = new GIcon();
    icon.image = Mappr.iconImgNormal;
    icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);
    Mappr.markerOpt = {icon:icon, draggable:false};
    Mappr.createMarkers( initMarkers );
  },

  reloadMarkers: function( markerUrl )
  {
    $.get( markerUrl, function( content ) {
        eval( content );

        Mappr.createMarkers( mapTags );
      } );
  },

  createMarkers: function( initMarkers )
  {
    Mappr.clearMarkers();

    for( var i = 0; typeof( initMarkers ) != "undefined" && i < initMarkers.length; i++ )
    {
      Mappr.createMarker( initMarkers[i] );
    }
  },

  createMarker: function( mapMarker )
  {
    if( Mappr.gmap === null || !(GBrowserIsCompatible()) )
    {
      return;
    }

    var marker = new GMarker( new GLatLng( mapMarker.latitude, mapMarker.longitude ), { icon: mapMarker.getPin(), title: mapMarker.title } );
    marker.info  = mapMarker.info;
    marker.uri   = mapMarker.uri;
    marker.popup = mapMarker.popup;
    if( typeof(marker.info) != "undefined" && marker.info !== null && marker.info !== "")
    {
      GEvent.addDomListener(marker, "click", marker.showInfo );
    }
    else
    if( typeof(marker.info) != "undefined" && marker.info !== null && marker.info !== "")
    {
      GEvent.addDomListener(marker, "mouseover", marker.showFooter );
      GEvent.addDomListener(marker, "mouseout", marker.clearFooter );
    }
    else
    if( typeof(marker.uri) != "undefined" && marker.uri !== null && marker.uri !== "")
    {
      GEvent.addDomListener(marker, "click", marker.goUri );
    }

    if( typeof(mapMarker.domEventBindings) != "undefined" && mapMarker.domEventBindings !== null)
    {
      GEvent.addDomListener( getElt(mapMarker.domEventBindings.source), "mouseover", function(){marker.hiLite()} );
      GEvent.addDomListener( getElt(mapMarker.domEventBindings.source), "mouseout",  function(){marker.loLite()} );
      GEvent.addDomListener( getElt(mapMarker.domEventBindings.source), mapMarker.domEventBindings.event, mapMarker.domEventBindings.action );
    }
    Mappr.markers[Mappr.markers.length] = marker;
    Mappr.gmap.addOverlay(marker);
  },

  clearMarkers: function()
  {
    for( var i = 0; Mappr.markers !== null && i < Mappr.markers.length; i++ )
    {
      Mappr.gmap.removeOverlay( Mappr.markers[i]  );
    }
    Mappr.markers = [];
  },

  Marker: function( latitude, longitude, info, uri, img, width, height, tzOffset, domEventBindings, title )
  {
    this.latitude   = latitude;
    this.longitude  = longitude;
    this.info       = info;
    this.uri        = uri;
    this.img        = img;
    this.tzOffset   = isNaN(parseFloat(tzOffset))?(0):parseFloat(tzOffset);
    this.domEventBindings = domEventBindings;
    this.title      = title;
    this.getPin     = function(icon2)
    {
      var icon = new GIcon();
      icon.image = Mappr.iconImgNormal;
      icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
      icon.iconSize = new GSize(12, 20);
      icon.shadowSize = new GSize(22, 20);
      icon.iconAnchor = new GPoint(6, 20);
      icon.infoWindowAnchor = new GPoint(5, 1);
      if( typeof(img)!="undefined" && img!=null && img!="" )
      {
        icon.image = img;
      }
      else
      {
        icon.image = Mappr.iconImgNormal;
      }
      if( width>0 && height>0 )
      {
        icon.iconSize = new GSize(width, height);
        icon.shadowSize = new GSize(width+10, height);
        icon.iconAnchor = new GPoint(width/2, height/2);
        icon.infoWindowAnchor = new GPoint(width/2, 1);
      }
      return icon;
    }
  },

  DomEventBinding : function( source, event, action )
  {
    this.source  = source;
    this.event   = event;
    this.action  = action;
  },

  GMapExtend : function()
  {
    GMarker.prototype.showInfo = function(zoom)
    {
      this.openInfoWindowHtml( this.info );
      if(zoom && ! Mappr.gmap.getBounds().contains( this.getPoint() ) ){Mappr.gmap.setZoom(1);}
    };
    GMarker.prototype.showFooter = function()
    {
      $("#mapInfo").html(this.info);
    };
    GMarker.prototype.clearFooter = function()
    {
      $("#mapInfo").html("");
    };
    GMarker.prototype.goUri = function()
    {
      document.location.href = this.uri;
    };

    GMarker.prototype.hiLite = function()
    {
      if( Mappr.gmap.getBounds().contains( this.getPoint() ) )
      {
        this.setImage(Mappr.iconImgHLight);
      }
    };
    GMarker.prototype.loLite = function()
    {
      this.setImage(Mappr.iconImgNormal);
    };
  }
};
/*
 * Use this to initialise a map on document load
$(document).ready(function()
{
//  Mappr.init(false,53.700365,-1.505127,10, mapTags);
});
 */

