var StartIcon;
var StationIcon;
var EndIcon;

var GoogleMap;
var IsRouteStarted = false;
var StartMarker = null;
var EndMarker = null;

var LastPoint;
var LastName;
var LastText;

var StartPoint;
var EndPoint;

var Geocoder;
var MapName;

function CreateMap(MapCenterX, MapCenterY, Zoom, onMapClick){
	var GoogleMapObj = document.getElementById("map");
	GoogleMap = new GMap2(GoogleMapObj);
	MapName = "NavitiaMap";
	MapCenter(MapCenterX, MapCenterY, Zoom);
	GoogleMap.addControl(new GLargeMapControl());
	GoogleMap.addControl(new GMapTypeControl());
	GoogleMap.enableDoubleClickZoom();
	GoogleMap.enableContinuousZoom();
	function wheelZoom(a) {
		if ((a.detail || -a.wheelDelta) < 0)
		GoogleMap.zoomIn();
		else
		GoogleMap.zoomOut();
	}
	GoogleMap.addControl(new GOverviewMapControl());
	Geocoder = new GClientGeocoder();
	InitIcon();
	GEvent.addListener(GoogleMap, "click", onMapClick);
}

function ShowPointTab(CoordX, CoordY, PointName, PointAdress, ImagePath){
    var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
    var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);
    var l_shadow = "../images/small_shadow.png";
    var l_iconSize= new GSize(22,42);
    var l_shadowSize =  new GSize(50,42);
    var l_iconAnchor = new GPoint(11, 42);
    var l_Icon = CreateIcon(ImagePath,l_shadow, l_iconSize, l_shadowSize,l_iconAnchor);
    //var l_Icon = CreateIcon(ImagePath);
    var newMarker  = new GMarker(Point, l_Icon);

	//alert(l_TabCoord);
	
        var markerText = "<b>" + PointName + "<br>Adresse : " + PointAdress+ "</b><br><br><div id=\"map1\" style=\"HEIGHT: 300px\"><\div>";
        var k=0;
        var infoPoint = [new GInfoWindowTab("Information" , markerText)];

        //======================================
           GEvent.addListener(newMarker, "click", function() {newMarker.openInfoWindowTabsHtml(infoPoint,{ maxWidth:400});
		   
//		   alert("ok");
           var foo = new GMap2(document.getElementById("map1"));
           var pt = new GLatLng(Point.lat(),Point.lng());
           foo.setCenter(pt, 16,G_SATELLITE_MAP);
           foo.addControl(new GSmallZoomControl());
           var m = new GMarker(pt,l_Icon);
           foo.addOverlay(m);});
        //========================================
    //GoogleMap.addOverlay(newMarker);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function ShowPoint(CoordX, CoordY, PointName, ImagePath){
    var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
    var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);

    var l_shadow = "../images/small_shadow.png";
    var l_iconSize= new GSize(12, 20);
    var l_shadowSize =  new GSize(22, 20);
    var l_iconAnchor = new GPoint(6, 20);
    var l_Icon = CreateIcon(ImagePath,l_shadow, l_iconSize, l_shadowSize,l_iconAnchor);
    //var l_Icon = CreateIcon(ImagePath);
    var newMarker  = new GMarker(Point, l_Icon);

    if (arguments.length <= 4)
    {
        var markerText = "<b>" + PointName + "</b>";
        var infoPoint = [
        new GInfoWindowTab("Information", markerText),
        new GInfoWindowTab("Bus", "This is bus content"),
        new GInfoWindowTab("Metro", "This is Metro content"),
        new GInfoWindowTab("RER", "This is RER content")
        ];
        GEvent.addListener(newMarker, "click", function() {
            //newMarker.openInfoWindowHtml(markerText);
            newMarker.openInfoWindowTabsHtml(infoPoint);
        });
    }
    else
    {
       var markerTabs = new Array();
        markerTabs.push(new GInfoWindowTab("<b>" + Nom + "</b>", "<b>" + PointName + "</b>"));

        for(var i = 4; i < arguments.length; i = i + 2)
        {
            markerTabs.push(new GInfoWindowTab("<b>" + arguments[i] + "</b>", "<b>" + arguments[i + 1] + "</b>"));
        }
        GEvent.addListener(newMarker, "click", function(){
            newMarker.openInfoWindowTabsHtml(markerTabs);
          // newMarker.openInfoWindowTabsHtml(infoTabs);
        });
    }
    GoogleMap.addOverlay(newMarker);
    newMarker.openInfoWindowTabsHtml(infoTabs);
}


function ShowPointSimple(CoordX, CoordY, PointName, ImagePath) {

  var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
  var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);
	var l_shadow = "images/small_shadow.png";
	var l_iconSize= new GSize(12, 20);
	var l_shadowSize =  new GSize(22, 20);
	var l_iconAnchor = new GPoint(6, 20);
	var l_Icon = CreateIcon(ImagePath,l_shadow, l_iconSize, l_shadowSize,l_iconAnchor);
  var newMarker  = new GMarker(Point, l_Icon);

  var markerText = "<b>" + PointName + "</b>";
  GEvent.addListener(newMarker, "click", function() {
    newMarker.openInfoWindowHtml(markerText);
  } );
  GoogleMap.addOverlay(newMarker);
}

function ShowIsochronPoint(CoordX, CoordY, ImagePath)
{
  var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
  var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);

  var l_Icon = CreateIsochronIcon(ImagePath);
  var newMarker  = new GMarker(Point, l_Icon);
  GoogleMap.addOverlay(newMarker);
}

function ShowLine(DepX, DepY, ArrX, ArrY, Color) {
  var la_DepCoord = Lamb_WGS84(DepX, DepY);
  var la_ArrCoord = Lamb_WGS84(ArrX, ArrY);

  var PointDep = new GLatLng(la_DepCoord[1],la_DepCoord[0]);
  var PointArr = new GLatLng(la_ArrCoord[1],la_ArrCoord[0]);

  var PointList = new Array();
  PointList.push(PointDep);
  PointList.push(PointArr);
  lo_LineOverlay = new GPolyline(PointList, Color, 5); 
  GoogleMap.addOverlay(lo_LineOverlay);
}

function ShowDashedLine(DepX, DepY, ArrX, ArrY, Color)
{
    var la_segmentLength;
    var la_ecart;
 var zoom =GoogleMap.getZoom();
 //alert(zoom);
    	switch (GoogleMap.getZoom())
    {
        case 12:
            la_segmentLength = 10;
            la_ecart = 50;
            break;
        case 13:
            la_segmentLength = 10;
            la_ecart = 50;
            break;
        case 14:
            la_segmentLength = 10;
            la_ecart = 30;
            break;
        case 15:
            la_segmentLength = 10;
            la_ecart = 20;
            break;
        default:
            la_segmentLength = 10;
            la_ecart = 50;
            break;
    }

	var SegmentedList = GetSegmentedLine(new Array(DepX, DepY), new Array(ArrX, ArrY), la_segmentLength, la_ecart);

    for (var i = 0; i < SegmentedList.length; i += 2)
    {

        var la_DepCoord = Lamb_WGS84(SegmentedList[i][0], SegmentedList[i][1]);
        var la_ArrCoord = Lamb_WGS84(SegmentedList[i + 1][0], SegmentedList[i + 1][1]);

        var PointDep = new GLatLng(la_DepCoord[1], la_DepCoord[0]);
        var PointArr = new GLatLng(la_ArrCoord[1], la_ArrCoord[0]);

        var PointList = new Array();
        PointList.push(PointDep);
        PointList.push(PointArr);

        GoogleMap.addOverlay(new GPolyline(PointList, Color, 5));
    }
}

function CreateIsochronIcon(ps_ImagePath){
    var Icon = new GIcon();
    //Icon.transparent = ps_ImagePath;
    Icon.image = ps_ImagePath;
    Icon.iconSize = new GSize(15, 15);
    Icon.iconAnchor = new GPoint(7, 7);
    return Icon;
}

function CreateIcon(ps_ImagePath, ps_shadow, ps_iconSize, ps_shadowSize,ps_iconAnchor){
    var Icon = new GIcon();
    Icon.image = ps_ImagePath;
    Icon.shadow = ps_shadow;    //"../images/small_shadow.png";
    Icon.iconSize = ps_iconSize;    //new GSize(12, 20);
    Icon.shadowSize = ps_shadowSize;   //new GSize(22, 20);
    //Icon.iconAnchor = new GPoint(6, 20);
    //Icon.iconAnchor = new GPoint(11, 42); ps_iconAnchor = new GPoint(11, 42);
    Icon.iconAnchor = ps_iconAnchor;
    Icon.infoWindowAnchor = new GPoint(6, 1);
   // Icon.infoWindowAnchor = new GPoint(6, 1);
    return Icon;
}

function InitIcon() {
  StartIcon = new GIcon();
  StartIcon.image = "./images/Start.png";
  StartIcon.shadow = "./images/shadow50.png";
  StartIcon.iconSize = new GSize(20, 34);
  StartIcon.shadowSize = new GSize(37, 34);
  StartIcon.iconAnchor = new GPoint(9, 34);
  StartIcon.infoWindowAnchor = new GPoint(9, 2);
  StartIcon.infoShadowAnchor = new GPoint(18, 25);

  StationIcon= new GIcon();
  StationIcon.image = "./images/mm_20_yellow.png";
  StationIcon.shadow = "./images/mm_20_shadow.png";
  StationIcon.iconSize = new GSize(12, 20);
  StationIcon.shadowSize = new GSize(22, 20);
  StationIcon.iconAnchor = new GPoint(6, 20);
  StationIcon.infoWindowAnchor = new GPoint(6, 1);

  EndIcon = new GIcon();;
  EndIcon.image = "./images/End.png";
  EndIcon.shadow = "./images/shadow50.png";
  EndIcon.iconSize = new GSize(20, 34);
  EndIcon.shadowSize = new GSize(37, 34);
  EndIcon.iconAnchor = new GPoint(9, 34);
  EndIcon.infoWindowAnchor = new GPoint(9, 2);
  EndIcon.infoShadowAnchor = new GPoint(18, 25);
}

// This method is called when the user clicks on a point on the map.
/*
function onMapClick(overlay, point) {
  if (overlay !== null) {
    return;
  }
  if (!IsRouteStarted) {
    GoogleMap.clearOverlays();
    StartPoint = point;
    EndPoint = null;
    IsRouteStarted = true;
    StartMarker = new GMarker(point, StartIcon);
    GoogleMap.addOverlay(StartMarker);
  } else {
    EndMarker = new GMarker(point, EndIcon);
    GoogleMap.addOverlay(EndMarker);
  }
}
*/

function onMapClick_EntryPointSelect(overlay, point)
{
    if (overlay != null)
    {
        OverlayPoint = overlay.getPoint();
        if (OverlayPoint == StartPoint)
            lb_IsStart = true;
        else lb_IsStart = false;
            GoogleMap.removeOverlay(overlay);
        if (lb_IsStart)
            StartPoint = null;
        else EndPoint = null;
    }
    else
    {
        var l_PanelRunning = document.getElementById("PnlRunning");
        if (QueryString("isochron") == "1")
        {
            GoogleMap.clearOverlays();
            StartPoint = point;
            EndPoint = null;
            StartMarker = new GMarker(StartPoint, StartIcon);
            GoogleMap.addOverlay(StartMarker);
            document.getElementById("EdtDeparture").value = GetPointValue(point);
            if (l_PanelRunning)
            {
                l_PanelRunning.style.display = ""
            }
            var Button = document.getElementById("btnPlan");
            Button.click();
        }
        else
        {
            if (!StartPoint)
            {
                GoogleMap.clearOverlays();
                StartPoint = point;
                EndPoint = null;
                StartMarker = new GMarker(StartPoint, StartIcon);
                GoogleMap.addOverlay(StartMarker);
                document.getElementById("EdtDeparture").value = GetPointValue(point);
                document.getElementById("EdtDestination").focus();
		        document.getElementById("EdtDestination").select();
            }
            else
            {
                EndPoint = point;
                EndMarker = new GMarker(EndPoint, EndIcon);
                GoogleMap.addOverlay(EndMarker);
                document.getElementById("EdtDestination").value = GetPointValue(point);
		        document.getElementById("EdtDeparture").focus();
		        document.getElementById("EdtDeparture").select();
            }
            if ((StartPoint) && (EndPoint))
            {
                if (l_PanelRunning)
                {
                    l_PanelRunning.style.display = ""
                }
                var Button = document.getElementById("btnPlan");
                Button.click();
            }
        }
    }
}


function GetPointValue(point)
{
    var la_result = WGS_ED50(point.x, point.y);
    return la_result[0] + "-" + la_result[1];
}

function MapCenter(pf_LamberX, pf_LamberY, pi_scale){
      la_Result = Lamb_WGS84(pf_LamberX, pf_LamberY);
      GoogleMap.setCenter(new GLatLng(la_Result[1], la_Result[0]), pi_scale);
}

//You can call this function to convert a continuous line to the discrete line
function GetSegmentedLine(StartPoint, EndPoint, SegmentLength, Ecart)
{
    var SegmentedList = new Array();
    var startX, startY, endX, endY;
    var largeur = Math.sqrt(Math.pow(StartPoint[0]-EndPoint[0],2));
    var longueur =  Math.sqrt(Math.pow(StartPoint[1]-EndPoint[1],2));
    //alert(largeur);
   // alert(longueur);
    if (StartPoint[0] > EndPoint[0])
    {
        endX = StartPoint[0];
        startX = EndPoint[0];
    }
    else
    {
        startX = StartPoint[0];
        endX = EndPoint[0];
    }

    if (StartPoint[1] > EndPoint[1])
    {
        endY = StartPoint[1];
        startY = EndPoint[1];
    }
    else
    {
        startY = StartPoint[1];
        endY = EndPoint[1];
    }

    //To assert the well running of this function we return the started
    //and the end points in this case
     if (StartPoint[0] == EndPoint[0] && StartPoint[1] == EndPoint[1])
    {
        SegmentedList.push(StartPoint);
        SegmentedList.push(EndPoint);
        return SegmentedList;
    }
    if (largeur < longueur)
    {
        var a = (StartPoint[1] - EndPoint[1]) / (StartPoint[0] - EndPoint[0]);
        var b = StartPoint[1] - StartPoint[0] * a;
        var x;
        for (y = startY; y < endY - SegmentLength; y = y + SegmentLength + Ecart)
        {
            SegmentedList.push(new Array((y - b)/a, y));
            SegmentedList.push(new Array((y + SegmentLength-b)/a, y + SegmentLength));
        }
        if(y > endY)
        {
            y= endY;
        }
        SegmentedList.push(new Array((y - b)/a, y));
        SegmentedList.push(new Array((endY-b)/a, endY));

        return SegmentedList;
    }
    else
    {
        var a = (StartPoint[1] - EndPoint[1]) / (StartPoint[0] - EndPoint[0]);
        var b = StartPoint[1] - StartPoint[0] * a;
        var x;
        for (x = startX; x < endX - SegmentLength; x = x + SegmentLength + Ecart)
        {
            SegmentedList.push(new Array(x, a * x + b));
            SegmentedList.push(new Array(x + SegmentLength, a * (x + SegmentLength) + b));
        }
        if(x > endX)
        {
            x= endX;
        }
        SegmentedList.push(new Array(x, a * x + b));
        SegmentedList.push(new Array(endX, a * endX + b));

        return SegmentedList;
    }
}