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 ShowPointTab(CoordX, CoordY, PointName,PointAdress, ImagePath,ps_TableListBus,ps_TableListMetro,ps_TableListTrain,ps_TableListTram,ps_TableListRER,ps_TableListAvion,ps_TableListBateau,ps_TableListNavette){
    var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
    var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);
    var ListLignes="";
    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);

        var markerText = "<b>" + PointName + "<br>Adresse : " + PointAdress+ "</b><br><br><div id=\"map1\" style=\"HEIGHT: 300px\"><\div>";
        var l_InformationTable;
        var p_Table, p_TableLigne;
        var k=0;
        var infoPoint = [
        new GInfoWindowTab("Information" , markerText)];
        for(var i = 4; i < arguments.length; i = i + 1)
        {
         k=0;
         l_InformationTable = arguments[i].split("|");
         p_Table="<table border=1><tr><td><b>Ligne</td><td><b>Direction</td><td><b>Prochain passage</td></tr>";
         if(l_InformationTable.length >2)
         {
          for(var j= 1 ; j < l_InformationTable.length; j++ )
          {
            if(k == 3)
            {
              p_TableLigne+="</tr>";
              p_Table+= p_TableLigne;
              k=0
            }
            if(k==0) p_TableLigne = "<tr>";

            p_TableLigne += "<td>" + l_InformationTable[j] +"</td>";
            k++;
          }
         p_Table+="</table>";

         infoPoint.push(new GInfoWindowTab(l_InformationTable[0], p_Table));
         }
        }
        //======================================
           GEvent.addListener(newMarker, "click", function() {newMarker.openInfoWindowTabsHtml(infoPoint,{ maxWidth:400});
           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());
          // foo.addControl(new GMapTypeControl());
          //foo.addControl(new GLargeMapControl());
           var m = new GMarker(pt,l_Icon);
           foo.addOverlay(m);});
        //========================================
       // GEvent.addListener(newMarker, "click", function() {
            //newMarker.openInfoWindowHtml(markerText);
            //newMarker.openInfoWindowTabsHtml(infoPoint);
            //newMarker.showMapBlowup();
       // });
    //}
    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(22, 42);
    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);
    if (arguments.length > 4)
        newMarker.openInfoWindowTabsHtml(infoTabs);
}

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);
  GoogleMap.addOverlay(new GPolyline(PointList, Color, 5));
}

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 = "/extension/NavitiaPack/design/standard/images/Start.png";
  StartIcon.shadow = "/extension/NavitiaPack/design/standard/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 = "/extension/NavitiaPack/design/standard/images/End.png";
  EndIcon.shadow = "/extension/NavitiaPack/design/standard/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("Departure").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("DepartureLibelle").value = "Vous avez saisi votre arret sur la carte";
                document.getElementById("DestinationLibelle").value = "Saisissez votre destination sur la carte";
                document.getElementById("Departure").value = GetPointValue(point);
                // document.getElementById("Destination").focus();
		        // document.getElementById("Destination").select();
            }
            else
            {
                EndPoint = point;
                EndMarker = new GMarker(EndPoint, EndIcon);
                GoogleMap.addOverlay(EndMarker);
				document.getElementById("DestinationLibelle").value = "Vous avez saisi votre arret sur la carte";
                document.getElementById("Destination").value = GetPointValue(point);
                document.getElementById("IsClick").value = 1;

		        // document.getElementById("Departure").focus();
		        // document.getElementById("Departure").select();

            }

            if ((StartPoint) && (EndPoint))
            {
                //var Button = document.getElementById("btnPlan");
               	setTimeout('ClickEndButton()', 200);
            }

}

function ClickEndButton()
{
	var Button = document.getElementById("btnPlan");
	Button.click();
}

function onMapClick_MapResult(overlay, point) {
 if (overlay != null) {
	OverlayPoint = overlay.getPoint();
	if (OverlayPoint == StartPoint)
		lb_IsStart = true;
	else lb_IsStart = false;
	if (lb_IsStart)
  	{
		GoogleMap.removeOverlay(overlay);
		StartPoint = null;
  	}
	else EndPoint = null;
  }
}

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(parseFloat(pf_LamberX), parseFloat(pf_LamberY));
      GoogleMap.setCenter(new GLatLng(parseFloat(la_Result[1]), parseFloat(la_Result[0])), parseInt(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));
    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;
    }
}

/**
 *
 * @access public
 * @return void
 **/
function showDetailDeparture(){
	var div_detail  = document.getElementById("div_detailDeparture");
	var display = div_detail.style.display;
	if(display == 'none')
	{
		div_detail.style.display = 'block';
	}
	else
	{
		div_detail.style.display = 'none';
	}
}
function showDetailArrival(){
	var div_detail  = document.getElementById("div_detailArrival");
	var display = div_detail.style.display;
	if(display == 'none')
	{
		div_detail.style.display = 'block';
	}
	else
	{
		div_detail.style.display = 'none';
	}
}
/**
 *
 * @access public
 * @return void
 **/
function EntryPointSelect(selectName, entryPointValue)
{
	var selectId = document.getElementById(selectName);
	var i = 0;
	var ls_selectOption;
	for(i=0; i < selectId.length; i++)
	{
		ls_selectOption = selectId.options[i];
		ls_Point_Coord = ls_selectOption.value;
		ls_Point_Coord_tab = ls_Point_Coord.split("|");
		ls_Point_Coord_tab_count = ls_Point_Coord_tab.length;
		ls_Point_Coord_tab_coord = ls_Point_Coord_tab[ls_Point_Coord_tab_count-2] + "-" + ls_Point_Coord_tab[ls_Point_Coord_tab_count-1];
		if(ls_Point_Coord_tab_coord == entryPointValue )
		{
			ls_selectOption.selected = true;
		}
	}
}
function ShowEntryPointTab(CoordX, CoordY, PointName, ImagePath, selectName, DemandPoint, InputName,ps_TableListBus,ps_TableListMetro,ps_TableListTrain,ps_TableListTram,ps_TableListRER,ps_TableListAvion,ps_TableListBateau,ps_TableListNavette)
{
	var InputDemandPoint = document.getElementById(InputName);

//	if (InputDemandPoint)
//	{
	/*	if ( ((InputDemandPoint.value != "") && (InputDemandPoint.value == DemandPoint))
			|| (InputDemandPoint.value == ""))
		{*/
			var l_TabCoord = Lamb_WGS84(CoordX, CoordY);
			var Point = new GLatLng(l_TabCoord[1],l_TabCoord[0]);

			var l_shadow = "/extension/NavitiaPack/design/standard/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 PointCoord = CoordX + "-" + CoordY;
			var ls_func = "<a href=\"javascript:EntryPointSelect('"+ selectName + "', '" + PointCoord + "')\" ;>";
			var markerText = "<b>" + PointName + "<br><br />Pour selectionner ce point "+ls_func+"cliquer ici</a><br><br><div id=\"map1\" style=\"HEIGHT: 300px\"><\div>";
			var l_InformationTable;
			var p_Table, p_TableLigne;
			var k=0;
			var infoPoint = [new GInfoWindowTab("Information" , markerText)];
			//code à ajouter pour l'affichage des lignes
		/*	for(var i = 6; i < arguments.length; i = i + 1)
			{
				k=0;
				l_InformationTable = arguments[i].split("|");
				p_Table="<table border=1><tr><td><b>Ligne</td><td><b>Direction</td><td><b>Prochain passage</td></tr>";
				if(l_InformationTable.length >2)
				{
					for(var j= 1 ; j < l_InformationTable.length; j++ )
					{
						if(k == 3)
						{
						 p_TableLigne+="</tr>";
							p_Table+= p_TableLigne;
							k=0 ;
						}
						if(k==0) p_TableLigne = "<tr>";

						p_TableLigne += "<td>" + l_InformationTable[j] +"</td>";
						k++;
					}
					p_Table+="</table>";

					infoPoint.push(new GInfoWindowTab(l_InformationTable[0], p_Table));
				}
			}*/
			GEvent.addListener(newMarker, "click", function() {newMarker.openInfoWindowTabsHtml(infoPoint,{ maxWidth:400});
			 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);
		//}
//	}
}
