/**
   @file  djgm_rmap.js
   @brief Rent house map.

   <pre>
   Create: 2007/01/29, Mon, 01:13:37
   Update: 2007/01/29
   </pre>

   Copyright (C) 2007. All Rights Reserved.
   @author À¹§¡®a (Dai, Juin-Jia)
           [jjdai@mercury.cs.nthu.edu.tw, jjdai.bbs@moca.csie.chu.edu.tw]
*/

//@ ===== Global Variable(s) =====
var g_oMap = null;
var g_oCurMaker = null;
var g_oSelLatLng = null;
var g_bFlag = false;
var g_bMoveFlag = false;

//@ ===== Function(s) / Class(s) =====
function djgm_RmapOnInfoWinClose()
{
    if ( false == g_bMoveFlag )
    {
        g_oSelLatLng = null;
    }
}  //@ END OF djgm_RmapOnClearOverlays()

function djgm_RmapOnMoveEnd(sInFn)
{
    var oBounds = g_oMap.getBounds();
    var oSouthWest = oBounds.getSouthWest();
    var oNorthEast = oBounds.getNorthEast();


    sMyUrl = "gmap_rget.php?GpsL=" + oSouthWest.lng() +
                      "&GpsR=" + oNorthEast.lng() +
                      "&GpsU=" + oNorthEast.lat() +
                      "&GpsD=" + oSouthWest.lat();
    if ( '' != sInFn )
    {
        sMyUrl = sMyUrl + "&file=" + sInFn;
    }

    GDownloadUrl(sMyUrl, djgm_RmapRecvHandler);
}  //@ END OF djgm_RmapOnMoveEnd()

function djgm_RmapCreateMarker(oInPoint, sInTxt)
{
    //var oIcon = new GIcon();
    //oIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    //oIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    //oIcon.iconSize = new GSize(12, 20);
    //oIcon.shadowSize = new GSize(22, 20);
    //oIcon.iconAnchor = new GPoint(6, 20);
    //oIcon.infoWindowAnchor = new GPoint(5, 1);
    //var oNewMarker = new GMarker(oInPoint, oIcon);
    var oNewMarker = new GMarker(oInPoint);
    GEvent.addListener(oNewMarker, "click", function() {
        oNewMarker.openInfoWindowHtml(sInTxt);
        document.getElementById("message").innerHTML = oNewMarker.getPoint().toString()
                                                       + ' => ' + sInTxt;
        if ( false == g_bMoveFlag )
        {
            g_oSelLatLng = new GLatLng(oNewMarker.getPoint().lat(), oNewMarker.getPoint().lng());
        }
    });

    return oNewMarker;
}  //@ END OF djgm_RmapCreateMarker()

function djgm_RmapRecvHandler(sInData, iInResponseCode)
{
//alert(sInData);
//return;
    var oXml = GXml.parse(sInData);
    var oMarkers = oXml.documentElement.getElementsByTagName("marker");

    if ( true == g_bFlag )
    {
        g_bMoveFlag = true;
        g_oMap.clearOverlays();
        g_bMoveFlag = false;
    }

    for ( var iI = 0; iI < oMarkers.length; iI++ )
    {
        var oPoint = new GLatLng(parseFloat(oMarkers[iI].getAttribute("lat")),
                                 parseFloat(oMarkers[iI].getAttribute("lon")));

        oNewMaker = djgm_RmapCreateMarker(oPoint, oMarkers[iI].getAttribute("txt"));
        g_oMap.addOverlay(oNewMaker);
        if ( null != g_oSelLatLng && oPoint.lat() == g_oSelLatLng.lat() && oPoint.lng() == g_oSelLatLng.lng() )
        {
            g_bMoveFlag = true;
            oNewMaker.openInfoWindowHtml(oMarkers[iI].getAttribute("txt"));
            g_bMoveFlag = false;
        }
    }

    g_bFlag = true;
    g_oSelLatLng = null;
}  //@ END OF djgm_RmapRecvHandler()

function djgm_SetupRmap(fInLon, fInLat, sInTxt, sInFn)
{
    if ( GBrowserIsCompatible() )
    {
        g_oMap = new GMap2(document.getElementById("map"));
        g_oMap.addControl(new GLargeMapControl());
        g_oMap.addControl(new GMapTypeControl());
        g_oMap.addControl(new GScaleControl());
        g_oMap.addControl(new GOverviewMapControl());

        GEvent.addListener(g_oMap, "moveend", djgm_RmapOnMoveEnd);
        GEvent.addListener(g_oMap, "infowindowclose", djgm_RmapOnInfoWinClose);

        //g_oMap.setCenter(new GLatLng(fInLat, fInLon), 14, G_HYBRID_MAP);
        g_oMap.setCenter(new GLatLng(fInLat, fInLon), 14);
        //if ( '' != sInFn )
        //{
        //    oMarker = djgm_RmapCreateMarker(g_oMap.getCenter(), sInTxt);
        //    g_oMap.addOverlay(oMarker);
        //}
        g_oMap.openInfoWindow(g_oMap.getCenter(), document.createTextNode(sInTxt));
        g_oSelLatLng = new GLatLng(fInLat, fInLon);

        //djgm_RmapOnMoveEnd(sInFn);
    }
}  //@ END OF djgm_SetupSelLonLat()


