﻿var gm_map = null;
var gm_maparray = new Array();
var gm_geocoder = null;
var gm_displayHtml = "";
var gm_marker = null;
var gm_point = null;
var gm_MapState = new gm_state();

function gm_state()
{
    this.OpenImg = new gm_navimage("/images/ui/btn-view-map.gif");
    this.CloseImg = new gm_navimage("/images/ui/btn-close-map.gif");
    this.CurrOpen = null;
}

function gm_MapDetail(sDisplayHtml, sGeocodeAddress, fLat, fLong)
{
    this.DisplayHtml = sDisplayHtml;
    this.GeocodeAddress = sGeocodeAddress;
    this.Latitude = fLat;
    this.Longitude = fLong;
    this.IsOpen = false;
}

function gm_navimage(sSrc)
{
    var oImg = new Image();
    oImg.src = sSrc;
    return oImg;
}

function gm_addAddressToMap(response)
{
    if (!response || response.Status.code != 200)
    {
        gm_point = new GLatLng(34.622895, -81.691408);
        gm_map.setCenter(gm_point, 7);
        gm_marker = new GMarker(gm_point);
        gm_map.addOverlay(gm_marker);
        GEvent.addListener(gm_marker, 'click', function() { gm_marker.openInfoWindowHtml(gm_displayHtml); });
        gm_marker.openInfoWindowHtml("Unfortunately this address<br />could not be plotted on the map.");
    }
    else
    {
        var gm_place = response.Placemark[0];
        gm_point = new GLatLng(gm_place.Point.coordinates[1], gm_place.Point.coordinates[0]);
        gm_map.setCenter(gm_point, 14);
        gm_marker = new GMarker(gm_point);
        gm_map.addOverlay(gm_marker);
        GEvent.addListener(gm_marker, 'click', function() { gm_marker.openInfoWindowHtml(gm_displayHtml); });
        gm_marker.openInfoWindowHtml(gm_displayHtml);
    }
}

function gm_showLocation(address)
{
  gm_geocoder.getLocations(address, gm_addAddressToMap);
}

function gm_createMarker(gm_point, msg)
{
    var gm_marker = new GMarker(gm_point);
    GEvent.addListener(gm_marker, 'click', function() { gm_marker.openInfoWindowHtml(msg); });
    return gm_marker;
}

function gm_showMap(oRefBtn)
{
    var sCanvasId = oRefBtn.id.substring(3, oRefBtn.id.length);
    var oRefBtnImg = oRefBtn.getElementsByTagName("img")[0];
    
    if (gm_MapState.CloseImg.src == oRefBtnImg.src)
    {
        var anim_mapcontainer = new YAHOO.util.Anim(sCanvasId, { height: { to: 0 } }, .8, YAHOO.util.Easing.easeInStrong);
        anim_mapcontainer.animate();
        oRefBtnImg.src = gm_MapState.OpenImg.src;
        gm_state.CurrOpen = null;
        GUnload();
    }
    else
    {
        if (gm_state.CurrOpen != null)
            gm_showMap(gm_state.CurrOpen);
        gm_state.CurrOpen = oRefBtn;
        var anim_mapcontainer = new YAHOO.util.Anim(sCanvasId, { height: { to: 313 } }, .8, YAHOO.util.Easing.easeOutStrong);
        anim_mapcontainer.onComplete.subscribe(gm_executeMap);
        anim_mapcontainer.animate();
        oRefBtnImg.src = gm_MapState.CloseImg.src;
    }

    function gm_executeMap()
    {
        gm_initialize(sCanvasId);
    }
}

function showMYMAP(oSRC, oID, addressValue)
    {
        //alert(oSRC.id);
        var oRefBtnImg = oSRC;
        var idArr = oSRC.id.split("_");
        var divID='';
	    var hID= '';
        for(i=0;i<idArr.length-1;i++)
        {
            divID+=idArr[i] + "_";
        }
        hID=divID+'h'+oID;
	    divID+=oID;
	    var sCanvasId = divID;
    	//initialize(divID);
    	var add = String(addressValue).split(",");
        var addressValue1='';
        for(i=0;i<add.length;i++)
        {
            addressValue1+=add[i] + "<br>";
        }
        var addValue='<div style="font-size:8pt; font-family:verdana;">' + addressValue1 + '<br>' + '<a href="http://maps.google.com/maps?daddr=' + addressValue + '" target="_blank">Get Directions</a>' + '</div>';
        gm_maparray[divID] = new gm_MapDetail(addValue,addressValue,'','');
        var oDIV = document.getElementById(divID);
	    var oHDN = document.getElementById(hID);
	    if(gm_MapState.CloseImg.src != oRefBtnImg.src)
	    {
        	oDIV.style.height="300";
        	oDIV.style.width="524";
        	oRefBtnImg.src = gm_MapState.CloseImg.src;
		    var anim_mapcontainer = new YAHOO.util.Anim(sCanvasId, { height: { to: 313 } }, .8, YAHOO.util.Easing.easeOutStrong);
            anim_mapcontainer.onComplete.subscribe(gm_executeMap);
            anim_mapcontainer.animate();
            gm_state.CurrOpen='Y'; 
	    }
	    else
	    {
		    oDIV.style.height="0";
        	oDIV.style.width="524";
        	oRefBtnImg.src = gm_MapState.OpenImg.src;
            gm_state.CurrOpen = null;
		    var anim_mapcontainer = new YAHOO.util.Anim(sCanvasId, { height: { to: 0 } }, .8, YAHOO.util.Easing.easeInStrong);
            anim_mapcontainer.animate();
            gm_state.CurrOpen = null;
            GUnload();
	    }
	    function gm_executeMap()
        {
            gm_initialize(sCanvasId);
        }
        event.returnValue=false;
        event.cancel=true;
        
    }   

function gm_initialize(sMapId)
{
    if (GBrowserIsCompatible())
    {
        gm_displayHtml = gm_maparray[sMapId].DisplayHtml;
        gm_map = new GMap2(document.getElementById(sMapId));
        
        if (gm_maparray[sMapId].Latitude != 0 && gm_maparray[sMapId].Longitude != 0)
        {
            gm_point = new GLatLng(gm_maparray[sMapId].Latitude, gm_maparray[sMapId].Longitude);
            gm_map.setCenter(gm_point, 14);
            gm_marker = gm_createMarker(gm_point, gm_displayHtml);
            gm_map.addOverlay(gm_marker);
            gm_marker.openInfoWindowHtml(gm_displayHtml);
        }
        else
        {
            gm_geocoder = new GClientGeocoder();
            gm_showLocation(gm_maparray[sMapId].GeocodeAddress);
        }
        
        gm_map.addControl(new GSmallMapControl());
    }
}