﻿var map = null;
var localSearch = new GlocalSearch();
var setDirection = null;

var isQuickTrip = false;
var isNoTrip = false;

var lastMarkerPoint = null;
var startMarkerPoint = null;
var lastTripPoint = null;

var lastMarkedUserMessageData = null;

var firstView = true;

var lastEntry = 0;

var latitude = 0, longitude = 0, tripMessage = "", tripMessageDateTime = "", accuracy = "";
var refreshMapIntervalID = null, searchNewTripIntervalID = null;
var userSenderImages = "", userSenderPins ="";
var type = 0, debugMsg = "";
var timeoutID = null;

var zoomLevel = 0;  // default zoom level
var firstPoint = true;
var action = 0;

var distance = 0;
var lastPointObject = null;

var newMarkerPoints = new Array();
var oldMarkerPoints = new Array();

var mapZoomBounds = null;

var isMile = true;

var wholeTripBounds = new GLatLngBounds();
var twoPointBounds = new GLatLngBounds();
var addTripPointBounds = new GLatLngBounds();

var allMarkers = new Array();
var markersToHide = new Array();

var distanceFromPrePoint = 0;

var indexMarkerScale = 1;

var ScaleMarkerPlcement = { ALLMARKERS:0, MSGMARKERS : 1, UNITHALF : 2, UNIT1 : 3, UNIT2 : 4, UNIT5 : 5, UNIT10 : 6, UNIT50 : 7};

var countryName = "";

var directionChange = false;
var initialMarkersXMLDoc = null;


function showMap()
{      
    if(map)             // dont recreate the map id already exists
        return;
        
    if (GBrowserIsCompatible())
    {
        var mapType = "Map";

        map = new GMap2($("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMenuMapTypeControl());
        map.enableScrollWheelZoom();
        map.doubleClickZoomEnabled();
        //map.addControl(new GOverviewMapControl());
        //map.addControl(new GZoomControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(214, 8)));
       
        map.enableContinuousZoom();
        
        mapType = getCookie("mapType");

        if(mapType)
        {
            mapType = parseInt(mapType);

            if(mapType == 2)
                map.setMapType(G_HYBRID_MAP);
            else if(mapType == 1)
                map.setMapType(G_SATELLITE_MAP);
            else
                map.setMapType(G_NORMAL_MAP);
        }

        GEvent.addListener(map, "zoomend", function(oldzoom, zoom) 
        { 
            if(zoom != 0)
            {
                zoomLevel=zoom;
                setCookie("mapZoomLevel", zoomLevel, 30, false, false, false);
            }
        });
        GEvent.addListener(map, "maptypechanged", function() 
        {
            var currentMapType = map.getCurrentMapType().getName();
            var currentMapTypeNumber = 0;
      
            switch(currentMapType.toLowerCase())
            {
                case "map":
                currentMapTypeNumber = 0;
                break;
                case "satellite":
                currentMapTypeNumber = 1;
                break;
                case "hybrid":
                currentMapTypeNumber = 2;
                break;
                default:
                currentMapTypeNumber = 0;
                break;
            }

            setCookie("mapType", currentMapTypeNumber, 30, false, false, false);
        }); 
    }  
    else
    {
        alert("You are using a browser which is incompatible with Google Maps.");
    }  
}

function showPreferences()
{
    var banner = $("banner");
    banner.style.display="";
    
    var showPreferences = $("showPreferences");
    var hidePreferences= $("hidePreferences");
    
    showPreferences.style.display = "none";
    hidePreferences.style.display = "";
    
    //setMapHeight(64);
    adjustFooterPos(64);
}

function hidePreferences()
{
    var showPreferences = $("showPreferences");
    var hidePreferences= $("hidePreferences");
    
    var banner = $("banner");
    banner.style.display="none";
    
    showPreferences.style.display = "";
    hidePreferences.style.display = "none";
    //setMapHeight(64);
    adjustFooterPos(64);
}


function setDistanceUnit()
{
    var rdoMiles = $("rdomile");
    var rdoKm = $("rdokm");
    //var distanceField = $("distanceField");
    //var frequencyDisUnit = $("frequencyDisUnit");
 
    var dist = 0;

    if(rdoMiles.checked)
    {
        dist = (parseInt(distance) / 1000).toFixed(1);
        dist = ((dist * 5)/8).toFixed(2)  + " Miles";
        //$setText(frequencyDisUnit, "miles");
        setSettings("distanceUnit", "Mile");
        setMarkerScaleUnit("Mile");
    }
    else
    {
        dist = (parseInt(distance) / 1000).toFixed(1) + " Km";
        //$setText(frequencyDisUnit, "km");
        setSettings("distanceUnit", "Km");
        setMarkerScaleUnit("Km");
    }
   
    //if(distanceField)
        //$setText(distanceField, dist);
        
    setPointsDistance();
}

// function to set distance unit in Scale of Marker placement
function setMarkerScaleUnit(distanceUnit)
{
    var pointsInDistance = $("pointsInDistance");
    var postFix = "";
    
    var optionForUnitHalf = pointsInDistance.options[2];
    
    if(distanceUnit.toLowerCase() == "mile")
    {
        postFix = "s";
        
        $setText(optionForUnitHalf, "Every 1/2 " + distanceUnit);
        optionForUnitHalf.title = "Show markers for 1/2 " + distanceUnit +" frequency";
    }
    else
    {
        $setText(optionForUnitHalf, "Every 500 Meters");
        optionForUnitHalf.title = "Show markers for 500 Meters frequency";
    }
    
    var optionForUnit1 = pointsInDistance.options[3];
    $setText(optionForUnit1, "Every 1 " + distanceUnit);
    optionForUnit1.title = "Show markers for 1 " + distanceUnit +" frequency";
    
    var optionForUnit2 = pointsInDistance.options[4];
    $setText(optionForUnit2, "Every 2 " + distanceUnit + postFix);
    optionForUnit2.title = "Show markers for 2 " + distanceUnit + postFix + " frequency";
    
    var optionForUnit5 = pointsInDistance.options[5];
    $setText(optionForUnit5, "Every 5 " + distanceUnit + postFix);
    optionForUnit5.title = "Show markers for 5 " + distanceUnit + postFix + " frequency";
    
    var optionForUnit10 = pointsInDistance.options[6];
    $setText(optionForUnit10, "Every 10 " + distanceUnit + postFix);
    optionForUnit10.title = "Show markers for 10 " + distanceUnit + postFix + " frequency";
    
    var optionForUnit50 = pointsInDistance.options[7];
    $setText(optionForUnit50, "Every 50 " + distanceUnit + postFix);
    optionForUnit50.title = "Show markers for 50 " + distanceUnit + postFix + " frequency";    
}

// set user preference settings in cookie
function setSettings(nodeName, value)
{
    var settingXML = getCookie("settingXML");
    
    var xmlObj = createXmlObject(settingXML); 
    var doc = null; 
        
    if(xmlObj.validXml)
    {
        doc = xmlObj.xmlDoc;
        var node = doc.getElementsByTagName(nodeName)[0];
    
        node.setAttribute("value", value.toString());
    }
    
    if(doc)
    {
        settingXML = getInnerXml(doc, xmlObj.browser);
    }
    
    setCookie("settingXML", settingXML, 30, false, false, false);
}

// get user preference settings from cookie
function loadSettings()
{
    var settingXML = getCookie("settingXML");

    if(settingXML)
    {
        var xmlObj = createXmlObject(settingXML); 
            
        if(xmlObj.validXml)
        {
            var doc = xmlObj.xmlDoc;
            var userPreferences = doc.getElementsByTagName("userPreferences");
            
            var distanceUnit = userPreferences[0].getElementsByTagName("distanceUnit")[0];
            
            if(!distanceUnit)
            {
                resetSettings();
                return;
            }
                
            distanceUnit = distanceUnit.getAttribute("value");
            setMarkerScaleUnit(distanceUnit);
        
            var rdo = $("rdo" + distanceUnit.toLowerCase());
            
            if(!rdo)
            {
                resetSettings();
                return;
            }
            
            rdo.checked = true;
            
            var tripZoomIndex = userPreferences[0].getElementsByTagName("tripZoom")[0];
            
            if(!tripZoomIndex)
            {
                resetSettings();
                return;
            }  
            
            tripZoomIndex = tripZoomIndex.getAttribute("value");     
            
            var zoomOn = $("zoomOn");
            zoomOn.selectedIndex = tripZoomIndex;
            
            var scaleMarker = userPreferences[0].getElementsByTagName("scaleMarkers")[0];
            
            if(!scaleMarker)
            {
                resetSettings();
                return;
            }  
            
            scaleMarker = scaleMarker.getAttribute("value");     
        
            var scaleOn = $("pointsInDistance");
            indexMarkerScale = scaleOn.selectedIndex = scaleMarker;
        }
    }
    else
    {
        resetSettings();
        loadSettings();
    }
}

function resetSettings()
{
    var settingXML = "<userPreferences>";
    settingXML += "<distanceUnit value=\"mile\" />";
    settingXML += "<tripZoom value=\"1\" />";
    settingXML += "<scaleMarkers value=\"0\" />";
    settingXML += "</userPreferences>";
    setCookie("settingXML", settingXML, 30, false, false, false);
}


function setMapZoomOn()
{
    var zoomOnDropDows = $("zoomOn");
    if(lastMarkerPoint)
    {
        var selectedIndex = zoomOnDropDows.selectedIndex;
        
        switch(selectedIndex)
        {
            case 0:  // zoom on National
            {
                showScaledMarkers();
                map.setZoom(7);
                map.setCenter(wholeTripBounds.getCenter());
                setCookie("mapZoomCenterLat", wholeTripBounds.getCenter().y, 30, false, false, false);
                setCookie("mapZoomCenterLong", wholeTripBounds.getCenter().x, 30, false, false, false);
            }
            break;
            case 1: // zoom on WholeTrip
            {
                showScaledMarkers();
                showTripPoints();
            }
            break;
            case 2: // zoom on latest point
            {
                showScaledMarkers();
                map.setZoom(map.getBoundsZoomLevel(twoPointBounds) - 3);
                map.setCenter(lastMarkerPoint);
                setCookie("mapZoomCenterLat", lastMarkerPoint.y, 30, false, false, false);
                setCookie("mapZoomCenterLong", lastMarkerPoint.x, 30, false, false, false);
            }
            break;
            default:
            break;
        }
        
        setSettings("tripZoom", selectedIndex);
    }
}

// show all markers
function showAllTripPoints()
{    
    if(allMarkers.length != 0)
    {  
        for(var i=0; i<allMarkers.length; i++)
        {
            allMarkers[i].marker.show();
        }
    }
}

// show message points
function showMsgPoints()
{    
    if(allMarkers.length != 0)
    {  
        var marker = allMarkers[0].marker;
        
        for(var i=1; i<allMarkers.length; i++)
        {
            marker = allMarkers[i].marker;
            
            if(allMarkers[i].type == 5)
                marker.show();
            else
                marker.hide();
        }
    }
}

function showFrequencyPoints(frequency)
{    
    var _distanceFrmLastPoint = 0;   
    
    if(allMarkers.length != 0)
    {
        var marker = allMarkers[0].marker;
        
        marker.show();
            
        for(var i=1; i<allMarkers.length; i++)
        {
            marker = allMarkers[i].marker;
            
            if( allMarkers[i].type == 5 )
                 marker.show();
            else
            {
                _distanceFrmLastPoint += allMarkers[i].distanceFrmLastPoint;
                
                var distanceInFormat = formatDistanceUnit(_distanceFrmLastPoint)
                
                if(distanceInFormat >= frequency)
                {
                    _distanceFrmLastPoint = 0;
                    marker.show();
                }
                else
                    marker.hide();
            }
        }
        
        marker = allMarkers[allMarkers.length-1].marker;   
        marker.show();
    }
}

// show frequency points according to selected option
function showScaledMarkers()
{
    var distanceFrmLastPoint = 0;   
    var preMarker = null
    
    if(allMarkers.length != 0)
    {
        var marker = allMarkers[0].marker;
        marker.show();
           
        switch(parseInt(indexMarkerScale))
        {
            case ScaleMarkerPlcement.ALLMARKERS :
            {
                showAllTripPoints();
            }
            break;
            case ScaleMarkerPlcement.MSGMARKERS :
            {
                showMsgPoints();
            }
            break;
            case ScaleMarkerPlcement.UNITHALF :
            {
                showFrequencyPoints(1/2);
            }
            break;
            case ScaleMarkerPlcement.UNIT1 :
            {
                showFrequencyPoints(1);
            }
            break;
            case ScaleMarkerPlcement.UNIT2 :
            {
                showFrequencyPoints(2);
            }
            break;
            case ScaleMarkerPlcement.UNIT5 :
            {
                showFrequencyPoints(5);
            }
            break;
            case ScaleMarkerPlcement.UNIT10 :
            {
                showFrequencyPoints(10);
            }
            break;
            case ScaleMarkerPlcement.UNIT50 :
            {
                showFrequencyPoints(50);
            }
            break;
            default:
            break;
            
        
        }
        
        marker = allMarkers[allMarkers.length-1].marker;   
        marker.show();
    }
}

function formatDistanceUnit(met)
{
    //var userPrefrence = $("userPrefrence");
    
    var rdoMiles = $("rdomile");
    var rdoKm = $("rdokm");
    
    var dist = met.toFixed(0);
    if(!rdoMiles.checked)
    {
            dist = (parseInt(dist) / 1000).toFixed(1);
    }
    else
    {
        dist = (parseInt(dist) / 1000).toFixed(1);
        dist = ((dist * 5)/8).toFixed(2);
    }

    return dist;
}

function setPolyline(markersArray)
{
    var wayPoints = new Array();
    
    for(var i=0; i < markersArray.length; i++)
    {
        wayPoints.push(markersArray[i].getPoint());
    }
    
    if(wayPoints.length > 1)
    {
        var polylineEncoder = new PolylineEncoder();
        var encodedPolyline = polylineEncoder.dpEncodeToGPolyline(wayPoints);
        map.addOverlay(encodedPolyline);
    }
}

function showTripPoints()
{
    map.setZoom(map.getBoundsZoomLevel(wholeTripBounds));
    map.setCenter(wholeTripBounds.getCenter());
    setCookie("mapZoomCenterLat", wholeTripBounds.getCenter().y, 30, false, false, false);
    setCookie("mapZoomCenterLong", wholeTripBounds.getCenter().x, 30, false, false, false);
}

function isNationalTrip()
{
    var distance = distanceBetweenPoints(startMarkerPoint, lastMarkerPoint);
    
    var result = true;

    if (distance < 200000)      //200 km for a local trip, above that is treated as a national trip.
        result = false;

    return result;
    
}

function setMapStartEndPoints(quickTripParam, noTripParam, actionParam, isLogged, canViewTripParam)
{   
    var noTrip = $("noTrip");
    var mapLocalVar = $("map");
    var mapShow = $("showMap");
    var privacySetting = $("privacySetting");
    var blueHeader= $("blueHeader");
    var chatPopup = $("chatPopup");
    
    if(noTripParam) // check quick trip existence
        isNoTrip = (noTripParam.toLowerCase() === 'true');
    else
        isNoTrip = false;
        
    if(canViewTripParam) // check can view trip
        canViewTrip = (canViewTripParam.toLowerCase() === 'true');
    else
        canViewTrip = false;
        
    action = actionParam;

    if(isNoTrip && canViewTrip)
    {
        if(chatPopup)
            chatPopup.style.display = "none";
        
        searchNewTripInterval();
        mapLocalVar.style.display = "none";
        mapShow.style.display = "";
        noTrip.style.display = "";
        privacySetting.style.display = "none";
    }
    else if(!canViewTrip)
    {
        mapLocalVar.style.display = "none";
        mapShow.style.display = "none";
        noTrip.style.display = "none";
        privacySetting.style.display = "";
        blueHeader.style.display = "none";
    }
    else
    {
        noTrip.style.display = "none";
        mapLocalVar.style.display = "";
        mapShow.style.display = "";
        blueHeader.style.display = "";

        if(quickTripParam) // check quick trip existence
            isQuickTrip = (quickTripParam.toLowerCase() === 'true');
        else
           isQuickTrip = false;
           
        var count = 0;
        lastEntry = 0;
        var startLocation = $("startLocation").value;
        var endLocation = $("endLocation").value;

        allMarkers = new Array();
        firstPoint = true;
        startMarkerPoint = null;
        lastMarkerPoint = null;
        tripZoomSet = false;

        showMap();
        connectedUsers($("connectedUsersXML").value);
        
        var direction = $("directions");
        direction.innerHTML = "";

        loadSettings();
 
        setMapHeight(64);
        
        var savedZoomLevel = getCookie("mapZoomLevel");
        
        if(savedZoomLevel == "" || isNaN(savedZoomLevel) )
            zoomLevel = 8;
        else
            zoomLevel = parseInt(getCookie("mapZoomLevel"));

        if(!isQuickTrip)
        {
            var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;
            setDirection = new GDirections(map, direction);
            setDirection.load(sourceToDestiny, { locale: "whatever", preserveViewport: false });

            GEvent.addListener(setDirection, "load", function()
            {
                lastTripPoint = setDirection.getMarker(1).getLatLng();
                var startPoint = setDirection.getMarker(0).getLatLng();
                
                var polyLine = setDirection.getPolyline();
               
                polyLine.color = "#FD8B23";
                polyLine.opacity = 0.7;
                
                var newPolyLine = polyLine;
                map.addOverlay(newPolyLine);

                wholeTripBounds.extend(startPoint);
                wholeTripBounds.extend(lastTripPoint);
                twoPointBounds.extend(startPoint);  
                    
                distance = setDirection.getDistance().meters;
                distance = formatDistance(distance);
                setDistanceField(distance);
                
                setOldPoints();   
            });
        }
        else // if quick trip exists then set center at first point 
        {
            var tripLog = $("tripLog");
            
            if(tripLog)
                tripLog.style.width = "70%";
  
            var lat = $("lat").value;
            lat = lat.replace(/\#\$\#/g, "");

            if(lat == "")
                setNoTripPointsMessage( "Quick Trip Started, awaiting location points...");
            
            setOldPoints();
        }
    }
     
    return false;
}

function setOldPoints()
{
    var userimage = $("enRouteUserImage").value;

    var point = null;
    
    // get the markers xml info from the trip that has already been taken
    var intialMarkersXML =  $xmlDecode($("initialMarkersXML").value);
    initialMarkersXMLDoc = GXml.parse(intialMarkersXML);
    
    var markers = initialMarkersXMLDoc.documentElement.getElementsByTagName("marker");
    
   
    lastEntry = $("lastEntryId").value;
    
    var userMessageData = new Object();

    //if(latitude.length >= 1)
    if(markers.length >=1)
    {
        userMessageData = getUserDataFromNode(markers[0]);
        
        point = getPointFromNode(markers[0]);
         
        if(userMessageData.type == 6 || point== null)
        {
            fillUserMessage(null, userMessageData);
        }
        else 
        {
           
            if(point!= null)
            {
                userMessageData.markerIcon = "images/smallCarRight.png";
                userMessageData.point = point;
                userMessageData.debugMsg = markers[0].getAttribute("debugMsg");
                //userMessageData.accuracy = markers[0].getAttribute("accuracy");
                startMarkerPoint = point;
                map.setCenter(point, zoomLevel);
                wholeTripBounds.extend(point);
                twoPointBounds.extend(point);    
                userMessageData.marker = placeMarkerAtPoint(point, userMessageData.message, userMessageData.messageDateTime, userMessageData, "images/smallCarRight.png");
                
                oldMarkerPoints.push(userMessageData);
            }
        }
    }
              
    for (var i = 1; i < markers.length-1; i++)
    {
        userMessageData = getUserDataFromNode(markers[i]);
        point = getPointFromNode(markers[i]); 
        
        if(userMessageData.type == 6 || ( userMessageData.type == 5 && point == null ))
        {
            fillUserMessage(point, userMessageData, userMessageData.message);
        }
        else 
        {
            if(point != null )
            {
                twoPointBounds = new GLatLngBounds();
                
                userMessageData.point = point;
                userMessageData.debugMsg = markers[i].getAttribute("debugMsg");
                userMessageData.accuracy = markers[i].getAttribute("accuracy");
                
                //startMarkerPoint = point;
                if(isQuickTrip)
                    setDistanceCovered(point);
                else
                    setDistanceLeft(point);
                
                twoPointBounds.extend(startMarkerPoint);

                lastMarkerPoint = startMarkerPoint; 

                startMarkerPoint = point;
                
                wholeTripBounds.extend(point);
                twoPointBounds.extend(point);
                
                userMessageData.marker = placeMarkerAtPoint(point, userMessageData.message, userMessageData.messageDateTime, userMessageData);
                oldMarkerPoints.push(userMessageData);
                
                lastPointObject = userMessageData;
            }
        }
    }

    if(markers.length > 1)
    {
        var latestPointIndex = markers.length-1;
         
        userMessageData = getUserDataFromNode(markers[latestPointIndex]);
        
        if(userMessageData.type == 6)
        {
            fillUserMessage(null, userMessageData);
            
            if(lastPointObject)
                placeMarkerAtPoint(lastPointObject.point, lastPointObject.message, lastPointObject.messageDateTime, lastPointObject, userimage);

        }
        else 
        {
            point = getPointFromNode(markers[latestPointIndex]);
            
            if(point!=null)
            {
                if( userMessageData.type == 5 && point == null )
                    fillUserMessage(null, userMessageData);
                else
                {
                    userMessageData.point = point;
                    userMessageData.debugMsg = markers[latestPointIndex].getAttribute("debugMsg");
                    userMessageData.markerIcon = userimage;
                         
                    wholeTripBounds.extend(point);
                    twoPointBounds.extend(point);

                    lastMarkerPoint = point;                               
                    
                    if(isQuickTrip)
                        setDistanceCovered(point);
                    else
                        setDistanceLeft(point);
                        
                    userMessageData.marker = placeMarkerAtPoint(point, userMessageData.message, userMessageData.messageDateTime, userMessageData, userimage);
                    
                    oldMarkerPoints.push(userMessageData);
                    lastPointObject = userMessageData;
                    
                    lastMarkedUserMessageData = userMessageData;
                }
            }
        }
    }  

    if(point)
    {               
        setMapZoomOn();
    }
  
    if(lastPointObject && lastPointObject.marker)
	{
	    setMarkerScale();
	}
	
    //polylinesForOldPoints();
    setRefreshMapInterval();      
}


function getUserDataFromNode(node)
{
    var userMessageData = new Object();
        
    userMessageData.type = parseInt( node.getAttribute("type") );
    userMessageData.message = node.getAttribute("msg");
    userMessageData.messageDateTime = node.getAttribute("msgDateTime");
    userMessageData.senderImage = node.getAttribute("senderImg");
    userMessageData.senderPin = node.getAttribute("senderPin");
    userMessageData.pointId = node.getAttribute("entryId");
    userMessageData.accuracy = node.getAttribute("accuracy");
    
    return userMessageData;
}

function getPointFromNode(node)
{
    var point = null;
    
    var lat = node.getAttribute("lat");
    var lng = node.getAttribute("lng");
    
    if(lat != "" && lng!= "" && lat != "0" && lng != "0")
    {
        point = new GLatLng( parseFloat(lat), parseFloat(lng) );
    }
    /*
    else if(lat == "0" || lng == "0")       
    {
        point = "0";
    }
    */
    
    
    return point;
}

function setZoomFromCookie()
{
    var boundCenter = null;
                
    if(getCookie("mapZoomCenterLat") && getCookie("mapZoomCenterLong"))
        boundCenter = new GLatLng(getCookie("mapZoomCenterLat"), getCookie("mapZoomCenterLong"));
    
    if(zoomLevel && boundCenter)
    {
        map.setZoom(zoomLevel);
        map.setCenter(boundCenter);
    }
    else
    {
        map.setZoom(map.getBoundsZoomLevel(wholeTripBounds));
        map.setCenter(wholeTripBounds.getCenter());
    }
}

// load polylines at start
// creating polylines for already added markers
var startPoint = null;
var directionPolyLine = new GDirections();

function polylinesForOldPoints()
{
    return;
    var wayPoints = new Array();
   
    for(var i=0; i < oldMarkerPoints.length; i++)
    {
        if(oldMarkerPoints[i].point)
            wayPoints.push(oldMarkerPoints[i].point);
    }
    
    if(wayPoints.length > 1)
    {
        var polylineEncoder = new PolylineEncoder();
        var encodedPolyline = polylineEncoder.dpEncodeToGPolyline(wayPoints);
        map.addOverlay(encodedPolyline);
    }
}

  
// create polylines for coming points
function polylinesForNewPoints()
{
    // disabling polylines for new points
    //return;
    if(newMarkerPoints[0])
    {
        clearRefreshMapInterval();
        pointsAndLinesForNewPoint();
    }
    else
    {   
        setRefreshMapInterval();
    }
}

function pointsAndLinesForNewPoint()
{
    var pointAttributes = new Object();
    pointAttributes = newMarkerPoints[0];
    
    //pointAttribute.message
    //pointAttribute.point 
    //pointAttribute.messageDateTime;
    //pointAttribute.debugMsg;
    //pointAttribute.type;
    //pointAttribute.markerIcon
    
    var point = pointAttributes.point;
    
    if(point.x && point.y)
    {
        if(!startMarkerPoint)
        {       
            twoPointBounds = new GLatLngBounds(); 
            wholeTripBounds = new GLatLngBounds(); 
             
            pointAttributes.markerIcon = "images/smallCarRight.png";
            placeMarkerAtPoint(point, pointAttributes.message, pointAttributes.messageDateTime, pointAttributes, pointAttributes.markerIcon);

            startMarkerPoint = point;        
            //setCenterToPoint(point);
            
            if(lastMarkerPoint)
                twoPointBounds.extend(lastMarkerPoint);
            
            twoPointBounds.extend(point);
            
            wholeTripBounds.extend(point);
            //zoomLevel = parseInt(getCookie("mapZoomLevel"));
            setCookie("mapZoomCenterLat", point.y, 30, false, false, false);
            setCookie("mapZoomCenterLong", point.x, 30, false, false, false);
            //lastMarkerPoint = startMarkerPoint;

            map.setZoom(Math.min(17, map.getBoundsZoomLevel(twoPointBounds)));
            map.setCenter(twoPointBounds.getCenter());
            
            //map.setZoom(map.getBoundsZoomLevel(twoPointBounds));
            //map.setCenter(point);
            
            //setMapZoomForCurrentPoint();
            
            newMarkerPoints.splice(0, 1);       
            polylinesForNewPoints();
        }
        else
        {
            //var directionPolyLine = new GDirections();
           // directionPolyLine.pointObject = pointAttributes;

            if(!lastMarkerPoint)
                lastMarkerPoint = startMarkerPoint;
            
            //directionPolyLine.loadFromWaypoints([lastMarkerPoint,point],{getPolyline:true});
                
            //GEvent.addListener(directionPolyLine,"load", function() 
            //{
                //var bounds = new GLatLngBounds();
                //var twoPointBounds = new GLatLngBounds();
               // var polyline = directionPolyLine.getPolyline();
                //var n = polyline.getVertexCount();
                //var p = polyline.getVertex(n-1);
               
                var pointObject = pointAttributes;//directionPolyLine.pointObject;
                
                //var polyOptions = {geodesic:true};
                //var straightPolyLine = new GPolyline([lastMarkerPoint,p], "#ff0000", 5, 1, polyOptions);
                
                //var straightDistance = straightPolyLine.getLength();
                //var roadDistance = directionPolyLine.getDistance().meters;

                var dist = 0;
                dist = straightDistance = distanceBetweenPoints(lastMarkerPoint, point);
               /*
               if(roadDistance > 3 * straightDistance)
                {
                    //map.addOverlay(straightPolyLine);
                    
                    if(isQuickTrip)
                    {
                        dist = distanceFromPrePoint = straightDistance;
                        dist += distance;

                        distance = dist;

                        dist = formatDistance(distance);
                        setDistanceField(dist);
                    }
                    else
                    {
                        dist = straightDistance;

                        distanceFromPrePoint = distanceFromStart(p);

                        distance = dist;

                        dist = formatDistance(dist);
                        setDistanceField(dist);
                    }
                }
                else
                */
                
                {
                    //map.addOverlay(polyline);
                    
                    if(isQuickTrip)
                        setDistanceCovered(point);
                    else
                        setDistanceLeft(point);
                }
 
                //changeLastMarkerIcon();
                
                var returnMarker = placeMarkerAtPoint(point, pointObject.message, pointObject.messageDateTime, pointObject, pointObject.markerIcon);

                twoPointBounds =  new GLatLngBounds();
                twoPointBounds.extend(lastMarkerPoint);
                twoPointBounds.extend(point);
                
                wholeTripBounds.extend(point);
        
                lastMarkerPoint = point;

                if(newMarkerPoints.length == 1)
                {
                    lastPointObject = newMarkerPoints[0];
                    lastPointObject.marker = returnMarker;
                    lastPointObject.point = lastMarkerPoint;
                    lastPointObject.distanceCovered = distance;
                }
                
                startMarkerPoint = point;
                newMarkerPoints.splice(0, 1);

                //checkValidPoint(lastMarkerPoint.y, lastMarkerPoint.x);
                //setMapZoomForCurrentPoint();
        
                polylinesForNewPoints();        
            //});
        }
    }
    else
    {
        newMarkerPoints.splice(0, 1);
        polylinesForNewPoints();
    }
}

function changeLastMarkerIcon()
{

    var lastUserImageMarkerObj = null;
    
    if(lastMarkedUserMessageData)  // change icon of previous point according to its point
        lastUserImageMarkerObj = lastMarkedUserMessageData;
    else if( allMarkers.length > 2 )
        lastMarkedUserMessageData = allMarkers[allMarkers.length - 1];
    /*
    else if( allMarkers.length > 1 )
        lastMarkedUserMessageData = allMarkers[allMarkers.length - 1];
    */
        
    //else
        //lastMarkedUserMessageData = allMarkers[allMarkers.length - 1];
    if(lastUserImageMarkerObj)
    {
        var lastMarker = lastUserImageMarkerObj.marker;
                 
        //startMarkerPoint = lastPointObject.point;
        
        var objMarker = allMarkers[allMarkers.length - 1];
 
        //map.removeOverlay(lastMarker);
                     
        var newMarker = null;
        var iconFile = null;
        
        switch(lastUserImageMarkerObj.type)
        {
            case (3):
                if(lastUserImageMarkerObj.accuracy <= 20 )
                    iconFile = "images/blue-dot.png";
                else if(lastUserImageMarkerObj.accuracy <= 40 )
                    iconFile = "images/yellow-dot.png";
                else //if(userMessageData.accuracy >= 80 )
                    iconFile = "images/red-dot.png";
                //iconFile = "images/blue-dot.png";
            break;
            case (4):
                iconFile = "images/purple-dot.png";
            break;
            case (5):
                iconFile = "images/green-dot.png";
            break;
            default:
            break;
        }

        var icon = customizeMarker(iconFile, "images/marker-shadow.png");
       
        if(!iconFile)
            newMarker = new GMarker(lastMarker.getPoint().point);
        else
            newMarker = new GMarker(lastMarker.getPoint(), icon);
                 
        newMarker.my_html = lastMarker.my_html;
                                
        GEvent.addListener(newMarker, "click", function()
        {
            newMarker.bindInfoWindowHtml(newMarker.my_html);
            newMarker.openInfoWindowHtml(newMarker.my_html);
        });
        
        //lastMarkedUserMessageData.marker = newMarker;
        //lastMarkedUserMessageData.markerIcon = icon;
        
        map.removeOverlay(lastMarker);
        //map.removeOverlay(objMarker.marker);
        
        map.addOverlay(newMarker);
        
        //lastMarker.setImage(iconFile);
        //objMarker.marker = newMarker;
        
        lastMarkedUserMessageData = allMarkers[allMarkers.length - 1];
    }
}


function setMapZoomForCurrentPoint()
{
    var dropDown = $("zoomOn");
    var selectedIndex = dropDown.selectedIndex;
    
    switch(selectedIndex)
    {
        case 0:  // zoom on National
        {
            map.panTo(lastMarkerPoint);
            map.setCenter(wholeTripBounds.getCenter());
            setCookie("mapZoomCenterLat", wholeTripBounds.getCenter().y, 30, false, false, false);
            setCookie("mapZoomCenterLong", wholeTripBounds.getCenter().x, 30, false, false, false);
        }
        break;
        case 1: // zoom on WholeTrip
        {
            map.panTo(wholeTripBounds.getCenter());
            map.setCenter(wholeTripBounds.getCenter());
            
            if(map.getBoundsZoomLevel(wholeTripBounds) < zoomLevel)
            {
                map.setZoom(Math.min(17, map.getBoundsZoomLevel(wholeTripBounds)));
            }
            
            setCookie("mapZoomCenterLat", wholeTripBounds.getCenter().y, 30, false, false, false);
            setCookie("mapZoomCenterLong", wholeTripBounds.getCenter().x, 30, false, false, false);
    
            //map.setCenter(wholeTripBounds.getCenter());
            //map.panTo(wholeTripBounds.getCenter());

            //setCookie("mapZoomCenterLat", wholeTripBounds.getCenter().y, 30, false, false, false);
            //setCookie("mapZoomCenterLong", wholeTripBounds.getCenter().x, 30, false, false, false);
        }
        break;
        case 2: // zoom on latest point
        {
            /*
            map.panTo(twoPointBounds.getCenter());
            map.setCenter(twoPointBounds.getCenter());
            setCookie("mapZoomCenterLat", twoPointBounds.getCenter().y, 30, false, false, false);
            setCookie("mapZoomCenterLong", twoPointBounds.getCenter().x, 30, false, false, false);
            */
            map.panTo(lastMarkerPoint);
            map.setCenter(lastMarkerPoint);
            setCookie("mapZoomCenterLat", lastMarkerPoint.y, 30, false, false, false);
            setCookie("mapZoomCenterLong", lastMarkerPoint.x, 30, false, false, false);
            
        }
        break;
        default:
        break;
    }
}

function checkValidPoint(lat, lon)
{    
    var loader = new ajaxLoader();
    var postData = "lat="+ lat + "&long=" + lon + "&entryID=" + lastEntry;
    
    loader.onLoadComplete = function()
    {
    
    }
    
    loader.post("saveValidPoint.aspx", null, postData);
}

// refresh map to get route data
function setRefreshMapInterval()
{
    if(!refreshMapIntervalID)
        refreshMapIntervalID = window.setInterval("getLatestLocation()", 10000);
}

function resetRefreshMapInterval()
{
    clearRefreshMapInterval();
    setRefreshMapInterval();
}

function clearRefreshMapInterval()
{
    if (refreshMapIntervalID)
    {
        window.clearInterval(refreshMapIntervalID);
        refreshMapIntervalID = null;
    }
}

// set map interval to get new trip
function searchNewTripInterval()
{
    if(!searchNewTripIntervalID)
        searchNewTripIntervalID = window.setInterval("getNewTrip()", 20000);
}

function resetNewTripInterval()
{
    clearNewTripInterval();
    searchNewTripInterval();
}

function clearNewTripInterval()
{
    if (searchNewTripIntervalID)
    {
        window.clearInterval(searchNewTripIntervalID);
        searchNewTripIntervalID = null;
    }
}


function timeOut(fieldID, errorFieldID, waitingID, icon)
{
    var call = "";
    
    if(timeoutID == null)
    {
        directionChange = false;
        call = "showAddress('" + fieldID + "', '" + errorFieldID + "', '" + waitingID + "', '" + icon + "')";
        timeoutID = window.setTimeout(call, 1000);
    }
}

function clearTimeOut()
{
    clearTimeout(timeoutID);
    timeoutID = null;
}

function createLHSMenu()
{
    if(!$("topMenu")) // create left menu item interface if not exists
    {
        var LHSItems = "<div id='topMenu' style='width: 95%; font-size: 14px; font-weight: bold; color: White;'";
        LHSItems += "clear: both;>";
        LHSItems += "<table style='width: 100%;'>";
        LHSItems += "<tr>";
        LHSItems += "<td id='tripMessagesTopMenu' class='topMenuSelected'>";
        LHSItems += "Results Found";
        LHSItems += "</td>";
        LHSItems += "</tr>";
        LHSItems += "</table>";
        LHSItems += "</div>";
        LHSItems += "<div id='resultsFound' style='width:92%;padding-left:8px;'></div>";
        
        var lhsContainer = $("lhsContainerMessages");
        lhsContainer.innerHTML = LHSItems;
    }
}

function showAddressFrmLatLong(address, field, errorFieldID, icon) 
{
    var geocoder = new GClientGeocoder();
    
    geocoder.getLocations(address, function(result)
    {
        var error = $(errorFieldID);
        //var waitingImg = $(waitingID);

        if (result.Status.code == G_GEO_SUCCESS) 
        {
            //map.clearOverlays(); // clear all old markers
            $("resultsFound").innerHTML = ""; // set blank LHS container
            addTripPointBounds = new GLatLngBounds();

            for(var i=0; i<result.Placemark.length; i++)
            {
                var placeFound = result.Placemark[i].address;
                var placeLat = result.Placemark[i].Point.coordinates[1];
                var placeLng = result.Placemark[i].Point.coordinates[0];
                var placePoint = new GLatLng(placeLat, placeLng);
                
                var html = "<div style = 'color:red; font-size:14px; height:22px; font-family:Arial, Helvetica,sans-serif'> " + placeFound + "</div>"
	                        "<div style = 'color:red; font-size:14px;  height:22px; font-family:Arial, Helvetica,sans-serif'>Latitude: " + placeLat + ", Longitude: " + placeLng + "</div>" ;

                var marker = placeMarker(placePoint, html, icon, field);
                
                fillLeftMenuDirection(field, placeFound, placePoint, marker);         
            }
            
            error.src = "images/activeTrip.gif";
            error.style.display = "none";
        }
        else
        {
            map.clearOverlays(); // clear all old markers
            $("resultsFound").innerHTML = ""; // set blank LHS container
            addTripPointBounds = new GLatLngBounds();
            
            error.src = "images/error.gif";
            error.style.display = "";
            var resultsFound = $("resultsFound");

            var container = $create("div", "", "userMessageContainer");
            
            var div = $create("div");
            var span = $create("span", "", "", "No place found");
   
            div.appendChild(span);
            container.appendChild(div);
            resultsFound.appendChild(container);
        } 
        //error.style.display = ""; 
        //waitingImg.style.display = "none";     
    }
    );
}

function showAddress(fieldID, errorFieldID, waitingID, icon) 
{
    var field = $(fieldID);
    var fieldValue = field.value;
    createLHSMenu();

    $("distance").value = "";
    
    if(fieldValue == "")
    {
        setErrorMessage(fieldID);
        //map.clearOverlays(); // clear all old markers
        $("resultsFound").innerHTML = ""; // set blank LHS container
        var error = $(errorFieldID);
        error.style.display = "none";
        clearTimeOut();
        return;
    }
    
    //var waitingImg = $(waitingID);
    //var error = $(fieldID);
    //waitingImg.style.display = "";  
    //error.style.display = "none";  
    
    localSearch.setSearchCompleteCallback(null, function()
    {
        if (localSearch.results[0])
        {
            //map.clearOverlays(); // clear all old markers
            $("resultsFound").innerHTML = ""; // set blank LHS container
            addTripPointBounds = new GLatLngBounds();
            
            for(var i=0; i<localSearch.results.length; i++)
            {
                var streetAddress = localSearch.results[i].streetAddress;
                var city = localSearch.results[i].city;
                var country = localSearch.results[i].country;
                
                var placeFound = streetAddress + ", " + city + ", " + country;
                var placeLat = localSearch.results[i].lat;
                var placeLng = localSearch.results[i].lng;
                var placePoint = new GLatLng(placeLat, placeLng);
                
                var html = "<div style = 'color:red; font-size:14px; height:22px; font-family:Arial, Helvetica,sans-serif'> " + placeFound + "</div>"
	                        "<div style = 'color:red; font-size:14px;  height:22px; font-family:Arial, Helvetica,sans-serif'>Latitude: " + placeLat + ", Longitude: " + placeLng + "</div>" ;

                var marker = placeMarker(placePoint, html, icon, field);
                
                fillLeftMenuDirection(field, placeFound, placePoint, marker);         
            }
            
            var error = $(errorFieldID);
            error.src = "images/activeTrip.gif";
            error.style.display = "none";
            //waitingImg.style.display = "none";  
            
        }
        else
        {
            showAddressFrmLatLong(fieldValue, field, errorFieldID, icon);
        } 
        
        clearTimeOut(); 
    });

    //localSearch.setCenterPoint(countryName);
    localSearch.execute(fieldValue + "," + countryName);
}

function fillLeftMenuDirection(field, placeFound, point, marker)
{
    var resultsFound = $("resultsFound");
    
    var container = $create("div", "", "userMessageContainer");
    
    var div = $create("div");
    var span = $create("span", "", "", placeFound);
    
    addTripPointBounds.extend(point);
    map.panTo(addTripPointBounds.getCenter());
    
    container.onclick = function()
    {
        map.panTo(point);
        marker.openInfoWindowHtml(marker.html);  
        field.value = placeFound;
    };
      
    div.appendChild(span);
    container.appendChild(div);
    resultsFound.appendChild(container);
}

//place the marker on the place show the popup on click of that marker
function placeMarker(point, completeAddress, icon, field)
{   
    var marker = null;

	if(icon)
	{
	    icon = customizeMarker(icon, "images/marker-shadow.png");
	    marker = new GMarker(point, {draggable: true, icon:icon});
	}
	else
        marker = new GMarker(point, {draggable: true});
        
	var lat = point.x;
	var lon = point.y;
	
	var html = null;
	html = "<div style = 'color:red; font-size:14px; height:22px; font-family:Arial, Helvetica,sans-serif'> " + completeAddress + "</div>"
	        "<div style = 'color:red; font-size:14px;  height:22px; font-family:Arial, Helvetica,sans-serif'>Latitude: " + lat + ", Longitude: " + lon + "</div>" ;
	
	marker.html = html;
	
	GEvent.addListener(marker,"click", function()
	{
	    marker.openInfoWindowHtml(html);
	    marker.bindInfoWindowHtml(html);
	    marker.openInfoWindowHtml(html);
    });
    
    if(icon)
	{
        GEvent.addListener(marker, "dragstart", function() 
        {
            marker.closeInfoWindow();
        });

        geocoder = new GClientGeocoder();

        GEvent.addListener(marker, "dragend", function() 
        {
            getDragedLoc(marker.getPoint(), field, false);
        });
    }
    
    map.addOverlay(marker);

    return marker;
}

var geocoder = null;

function getDragedLoc(latlng, field, isPlaceDirection) 
{
    var address = "";
    var seprator = "";
    
    var administrativeArea = null;
    var subAdministrativeArea = null;
    var locality = null;
    var thoroughFare = null;
    var postalCode = null;
    
    if (latlng) 
    {
        geocoder.getLocations(latlng, function(addresses) 
        {
            if(addresses.Status.code != 200) 
            {
                alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
            }
            else 
            {
                //address = addresses.Placemark[0].address;
                administrativeArea = addresses.Placemark[0].AddressDetails.Country.AdministrativeArea;
                
                if(administrativeArea)
                    subAdministrativeArea = administrativeArea.SubAdministrativeArea;
                
                if(subAdministrativeArea)  
                    locality = subAdministrativeArea.Locality;
                    
                if(locality)  
                    thoroughFare = locality.Thoroughfare;
                    
                if(locality)
                    postalCode = locality.PostalCode;
                
                if(thoroughFare)
                {
                    address = thoroughFare.ThoroughfareName;
                    seprator = ",";
                }
                if(subAdministrativeArea)
                {
                    //address += seprator + subAdministrativeArea.SubAdministrativeAreaName;
                    //seprator = ",";
                }
                if(locality)
                {
                    address += seprator + locality.LocalityName;
                    seprator = ",";
                }
                
                if(!address)
                    address = addresses.Placemark[0].address;
                
                if(!isPlaceDirection)
                {
                    var html = "<div style = 'color:red; font-size:14px; height:22px; font-family:Arial, Helvetica,sans-serif'> " + address + "</div>"
                    "<div style = 'color:red; font-size:14px;  height:22px; font-family:Arial, Helvetica,sans-serif'>" + latlng + "</div>" ;

                    map.openInfoWindow(latlng, html);
                }
                
                field.value = address;
            }
        });
    }
}

function customizeMarker(imageID, imageShadow)
{
    if(!imageShadow)
        imageShadow = "images/marker-shadow.png";
    
    var icon = new GIcon();
    icon.image = imageID;
    //icon.shadow = imageShadow;   
    
    icon.shadowSize = new GSize(40, 32);
    icon.iconAnchor = new GPoint(15, 32);
    icon.infoWindowAnchor = new GPoint(9, 2);

    return icon;
}

function resetMap()
{
    return;
    var direction = $("directions");
    //direction.style.display = ""; 
    direction.innerHTML = "";
        
    var startLocation = $("startLocation").value;
    var endLocation = $("endLocation").value;

    setDirection = new GDirections(map, direction);
    var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;
    setDirection.load(sourceToDestiny, {locale:"whatever", preserveViewport:true} );
    GEvent.addListener(setDirection, "load", success);
    GEvent.addListener(setDirection, "error", failure);  

    setMapHeight(64);
    //defaultLocation(8);
//    clearRefreshMapInterval();
//    refreshMapIntervalID = window.setInterval("getLatestLocation()", 5000);
}

var checkReset = false;
var latestPoint = null;

var refreshInProgress = false;
function getLatestLocation()
{

    refreshInProgress = true;
    var count = 0;
    var isDebugMode = $("isDebugMode").value;
    
    var postData = "lastEntryId=" + lastEntry + "&isDebugMode=" + isDebugMode +"&alreadyConnectedIds="+alreadyConnectedIds;
    var latestRouteData = "";
    var messageDateTime = "";
    
    var lat = "";
    var lon = "";
    var message = "";
    var debugMessage = "";
    var pointType = 0;
    var senderImages = "";
    var senderPins = "";
    var accuracyStr = "";
    
    var getLatestRoute = new ajaxLoader();

    getLatestRoute.onLoadComplete = function()
    {
        var response = getLatestRoute.responseHTML;
        
        var latestRouteData = response.split("&%&")[0];
        var connectedUsersXML = response.split("&%&")[1];
        
        connectedUsers(connectedUsersXML);

        if (latestRouteData == "reset")
        {
            //lastEntry = 0;
            //map.clearOverlays();
            //setMapStartEndPoints();
            //clearRefreshMapInterval();
            searchNewTripInterval();
        }
        else if (latestRouteData == "abandon")
        {
            showAbandonedOverLay();
            var abandonTripMsg = $("abandonTripMsg");
            clearRefreshMapInterval();
            searchNewTripInterval();
        }
        else if (latestRouteData == "endTrip")
        {
            
            $("isTripEnd").value = "true";
            clearRefreshMapInterval();
            searchNewTripInterval();
            
            
        }
        else if (latestRouteData.indexOf("$error") != -1)
        {
            alert(latestRouteData);
        }
        else if(latestRouteData.indexOf("$$pinNumber$$") != -1)
        {
            var pinNumber = response.split("&%&")[0];
            pinNumber = pinNumber.split("=")[1];
    
            if(pinNumber)
                window.open("viewTrip.aspx?action=" + action + "&pinNumber=" + pinNumber, "_self");
        }
        else if (latestRouteData != "")
        {        
            var userimage = $("enRouteUserImage").value;

            latestRouteData = latestRouteData.split("&$&");
                
            lat = latestRouteData[0];
            lon = latestRouteData[1];
            lastEntry = latestRouteData[2];
            message = latestRouteData[3];
            messageDateTime = latestRouteData[4];
            pointType = latestRouteData[5];
            debugMessage = latestRouteData[6];
            senderImages =latestRouteData[7];
            senderPins = latestRouteData[8];
            accuracyStr = latestRouteData[9];
            
            latitude = lat.split("#$#");
            longitude = lon.split("#$#");
            tripMessage = message.split("#$#");
            tripMessageDateTime = messageDateTime.split("#$#");
            debugMsg = debugMessage.split("#$#");
            type = pointType.split("#$#");
            userSenderImages =senderImages.split("#$#");
            userSenderPins = senderPins.split("#$#");
            userAccuracy = accuracyStr.split("#$#");
            
            var point = null;
             
            for (var i = 0; i < latitude.length - 1; i++)
            {
                var userMessageData = new Object();
                userMessageData.type = parseInt(type[i]);
                userMessageData.message = tripMessage[i];
                userMessageData.messageDateTime = tripMessageDateTime[i];
                userMessageData.senderImage = userSenderImages[i];
                userMessageData.senderPin = userSenderPins[i];
                userMessageData.accuracy  = userAccuracy[i];
                
                if(userMessageData.type == 6)
                {
                    fillUserMessage(null, userMessageData);
                
                    if(userMessageData.message.indexOf("Trip Ended : ")!=-1)
                    {
                        hideOverLay();
                        $("isTripEnd").value = "true";
                        clearRefreshMapInterval();
                        searchNewTripInterval();
                    }
                    
                }
                else 
                {
                    point = new GLatLng(latitude[i], longitude[i]);

                    userMessageData.point = point;
                    userMessageData.debugMsg = debugMsg[i];
                
                    newMarkerPoints.push(userMessageData);
                    count++;
                }
            }
            
            var latestPointIndex = latitude.length - 1;

            if(latitude.length > 0)
            {
                //lastPointObject = new Object(); 

                userMessageData = new Object();

                userMessageData.type = parseInt(type[latestPointIndex]);
                userMessageData.message = tripMessage[latestPointIndex];
                userMessageData.messageDateTime = tripMessageDateTime[latestPointIndex];
                userMessageData.senderImage = userSenderImages[latestPointIndex];
                userMessageData.senderPin = userSenderPins[latestPointIndex];
                userMessageData.accuracy  = userAccuracy[latestPointIndex];
                
                if(userMessageData.type == 6 || ( userMessageData.type == 5 && (latitude[i] == "0" || longitude[i] =="0")))
                {
                    fillUserMessage(null, userMessageData);
                }
                else 
                {
                    point = new GLatLng(latitude[latestPointIndex], longitude[latestPointIndex]);

                    userMessageData.point = point;
                    userMessageData.debugMsg = debugMsg[latestPointIndex];
                    userMessageData.markerIcon = userimage;
                
                    newMarkerPoints.push(userMessageData);
                    
                    if(userMessageData.message.indexOf("Trip Ended : ")!=-1)
                    {
                        hideOverLay();
                        $("isTripEnd").value = "true";
                        clearRefreshMapInterval();
                        searchNewTripInterval();
                    }
                    
                }
                
                lastPointObject = userMessageData;
            }  
            
            polylinesForNewPoints();
            setMapZoomForCurrentPoint();
            // check the distance filter set for points        
            //setPointsDistance();  
            changeLastMarkerIcon();     
        }
        
        refreshInProgress = false;
    };

    var tripInstanceIDField = $("tripInstanceIDField");
    
    if(tripInstanceIDField)
        getLatestRoute.post("latestRouteData.aspx?tripInstanceIDField="+tripInstanceIDField.value, null, postData);
    else
        getLatestRoute.post("latestRouteData.aspx", null, postData);
        
        //getLatestRoute.post("latestRouteData.aspx", null, postData);
        
//    if (latestPoint != null)
//    {
//        setTripZoom();
//    }

}

//  resize the overlay to the window size
function resizeAbandonedOverlay()
{
    var overlay = $("abandonedOverlay");
    
    var dimensions = $getWindowDim();

    overlay.style.height = document.documentElement.scrollHeight + "px";
    overlay.style.width = document.documentElement.scrollWidth + "px";
    
    var abandonedTrip = $("abandonedTrip");
    abandonedTrip.style.top = ((dimensions.height-200)/2) + "px";
    abandonedTrip.style.left = ((dimensions.width - 400) / 2) + "px";      
}

//  show the overlay
function showAbandonedOverLay()
{
    var overlay = $("abandonedOverlay");
    overlay.style.display = "";
    
    var abandonedTrip = $("abandonedTrip");
    abandonedTrip.style.display = "";
    
    resizeAbandonedOverlay();  
}

function getNewTrip()
{
    var newTrip = "";
    var postData = "lastEntryId=" + lastEntry;
    var pinNumber = null;
    var response = null;
    
    var tripInstanceIDField = $("tripInstanceIDField");
   
    var getNewTrip = new ajaxLoader();

    getNewTrip.onLoadComplete = function()
    {
        response = getNewTrip.responseHTML;
        
        if(response.indexOf("$$pinNumber$$") != -1)
        {
            response = response.split("&%&")[0];
            pinNumber = response.split("=")[1];
        
            if(pinNumber)
                window.open("viewTrip.aspx?action=" + action + "&pinNumber=" + pinNumber, "_self");
        }
    };

    if(tripInstanceIDField)
        getNewTrip.post("latestRouteData.aspx?tripInstanceIDField="+tripInstanceIDField.value, null, postData);
    else
        getNewTrip.post("latestRouteData.aspx", null, postData);
        
    //getNewTrip.post("latestRouteData.aspx", null, postData);
}


var latestMapZoomTimeout = null;

function setDistanceLeft(point)
{
    if(!point)
        return;
    var dist = distanceFromDest(point);

    distanceFromPrePoint = distanceFromStart(point);
   
    distance = dist;
    
    dist = formatDistance(dist);
    setDistanceField(dist);
}

function setDistanceCovered(point)
{
    if(!point)
        return;
        
    var dist = distanceFromStart(point);
    
    distanceFromPrePoint = dist;
    dist += distance;

    distance = dist;

    dist = formatDistance(distance);
    setDistanceField(dist);
}

function setDistanceField(dist)
{
    return;
    var distanceField = $("distanceField");
        
    if(distanceField)
        $setText($("distanceField"), dist);
}

function setTripZoom(point)
{
    //var len = allMarkers.length;

    if (tripZoomSet)
    {
        if(point)
            map.panTo(point);
        return;
    }
    tripZoomSet = true;

    if (isNationalTrip())
    {
        zoomLevel = 13;
    }
    else
        zoomLevel = 16;

    
    map.setZoom(zoomLevel);
    map.panTo(point);
//    var bounds = new GLatLngBounds();

//    bounds.extend(startMarkerPoint);
//    bounds.extend(lastMarkerPoint);
    //map.panTo(point);
    //        bounds.extend(allMarkers[len - 2].getPoint());
//    var len = allMarkers.length;

//    if (len >= 3)
//    {
//        // in case we have a point going off route.. doesnt affect the current zoom code
//        bounds.extend(allMarkers[len - 1].getPoint());
//        bounds.extend(allMarkers[len - 2].getPoint());
//        bounds.extend(allMarkers[len - 3].getPoint());
//    }
//    else
//    {
//        bounds.extend(startMarkerPoint);
//        // in case we have a point going off route.. doesnt affect the current zoom code
//        for (var i = 0; i < len; i++)
//        {
//            bounds.extend(allMarkers[i].getPoint());
//        }
//    }

//    
//    bounds.extend(lastMarkerPoint);
//    
//    var latestZoomLevelRequired = map.getBoundsZoomLevel(bounds);
//    var boundsCenter = bounds.getCenter()
//    
//    //if (zoomLevel < latestZoomLevelRequired)
//    {
//        map.setZoom(latestZoomLevelRequired);
//        //map.panTo(boundsCenter);
//    }
    //else
        //map.panTo(point);
    //map.panTo(boundsCenter);

}
function markLocationOnMap()
{ 
    try
    {
        if(count < 1)
        {
            var point = new GLatLng(latitude[count], longitude[count]);
            placeMarkerAtPoint(point, ""); 
            count++;
        }
        else
        {
            clearRefreshMapInterval();
        }
    }
    catch (err) { alert(err.description); }
    finally
    {
    }
}

function initialize(startLocation, endLocation, country)
{
    showMap();
     
    countryName = country;
    
    setMapHeight(10);
    
    var field = $("startLocation");

    if(endLocation)
    {
        field.value = startLocation;
        placeDirection(); 
    }
    else
        setLocation(startLocation, field); 
}

function isTextChangeFun()
{
    isTextChange = true;
    $("distance").value = "";
}

var isTextChange = false;
var pointsArray = [];
var addressArray = null;
var geo = new GClientGeocoder();

function placeDirection()
{ 
    try
    {   
        clearTimeOut();
          
        var startLocation = "";
        var endLocation = "";
        
        if(directionChange)
        {
            startLocation = $("startCoordinate").value;
            endLocation = $("endCoordinate").value;
        }
        else
        {
            startLocation = $("startLocation").value;   
            endLocation = $("endLocation").value;  
        }
        
        //if(!startLocation || !endLocation)
        //{
            //startLocation = $("startLocation").value;   
            //endLocation = $("endLocation").value;
        //}
        
        if(startLocation == "")
        {
            setErrorMessage("errorStartLoc");
            return;
        }
        
        if(endLocation == "")
        {
            setErrorMessage("errorEndLoc");
            return;
        }

        var errorStartLoc = $("errorStartLoc");
        var errorEndLoc = $("errorEndLoc");

        if((errorStartLoc.src).indexOf("error.gif") != -1 || (errorEndLoc.src).indexOf("error.gif") != -1 )
        {
            return;
        }
        
        var getDirectiolLoading = $("getDirectiolLoading");
        getDirectiolLoading.style.display = "";  
    
        addressArray = new Array(startLocation, endLocation);
        pointsArray.length = 0;
        getGDirections();
    }
    catch(err){alert(err.description);}
    finally
    { 
    } 
}

function getGDirections()
{
    try
    {   
        var geo = new GClientGeocoder();
    
        for (address in addressArray)   
        {
            geo.getLatLng(addressArray[address], function(point)
            {               
                if (point) 
                {
                    pointsArray.push(point);
                }   
            }
        );
        }

        var startLocation = addressArray[0];
        var endLocation = addressArray[1];

        var direction = $("lhsContainerMessages");
        direction.innerHTML = "";

        if(setDirection)
            setDirection.clear();
            
        map.clearOverlays();

        setDirection = new GDirections(map, direction);
        var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;
        
        setDirection.load(sourceToDestiny, { locale: "whatever", preserveViewport: false });
        
        geocoder = new GClientGeocoder();
        
        //GEvent.addListener(setDirection, "load", onGDirectionsLoad);
        GEvent.addListener(setDirection, "addoverlay", onGDirectionsAddOverlay); 
        GEvent.addListener(setDirection, "error", onGDirectionsError);        
    }
    catch(err){alert(err.description);}
    finally
    { 
    }    
}

var newMarkers = [];
var latLngs = [];
var icons = [];

function onGDirectionsAddOverlay()
{ 
    for (var i=0; i<newMarkers.length; i++)
    {
        map.removeOverlay(newMarkers[i]);
    }

    for (var i=0; i<=setDirection.getNumRoutes(); i++)
    {
        var originalMarker = setDirection.getMarker(i);
        latLngs[i] = originalMarker.getLatLng();
        icons[i] = originalMarker.getIcon();
        newMarkers[i] = new GMarker(latLngs[i],{icon:icons[i], draggable:true, title:'Draggable'});
        map.addOverlay(newMarkers[i]);

        GEvent.addListener(newMarkers[i], "dragend", function()
        {
            var points = [];
            
            for (var i=0; i<newMarkers.length; i++)
            {
                points[i]= newMarkers[i].getLatLng();
            }
        
            setDirection.loadFromWaypoints(points);
        });

        copyClick(newMarkers[i],originalMarker);

        map.removeOverlay(originalMarker);
        directionChange = true;
        onGDirectionsLoad();
    }
}

function copyClick(newMarker,oldMarker)
{
    GEvent.addListener(newMarker, 'click', function()
    {
        GEvent.trigger(oldMarker,'click');
    });
}

function onGDirectionsError()
{
    pointsArray.length = 0;

    localSearch.clearResults();
        
    for (address in addressArray)   
    {
        localSearch.setSearchCompleteCallback(null, callBackToGetPoint(address));
        localSearch.execute(addressArray[address] + "," + countryName);
    }
}

function callBackToGetPoint(addressNumber)
{
    return function() 
    {
        if (localSearch.results[0]) 
        {
            var resultLat = localSearch.results[0].lat;
            var resultLng = localSearch.results[0].lng;
            var resultLocation = new GLatLng(resultLat, resultLng);
            var city = localSearch.results[0].city;
            pointsArray.push(resultLocation);
        }
        else
        {
            var geocoder = new GClientGeocoder();
    
            geocoder.getLatLng(addressArray[addressNumber], function(point)
            {               
                if (!point) 
                {
                    setDirectionErrorMessage("");
                } 
            }
            );
            
            pointsArray.push(addressArray[addressNumber]);
        }
        
        if (pointsArray.length == addressArray.length)
            getPlacesDirection();   
    }
}

function getPlacesDirection()
{
    try
    {   
        var startLocation = pointsArray[0];
        var endLocation = pointsArray[1];
   
        var direction = $("lhsContainerMessages");
        direction.innerHTML = "";
        
        if(setDirection)
            setDirection.clear();

        setDirection = new GDirections(map, direction);
        var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;
        setDirection.load(sourceToDestiny, { locale: "whatever", preserveViewport: false });
        
        GEvent.addListener(setDirection, "addoverlay", onGDirectionsAddOverlay);
        //GEvent.addListener(setDirection, "load", onGDirectionsLoad);
        GEvent.addListener(setDirection, "error", handleErrors);        
    }
    catch(err){alert(err.description);}
    finally
    { 
    }    
}

// function to get the value in the Direction div
// and place the marker at the location
function setLocation(homeLocation, field) 
{   
    var geo = new GClientGeocoder();

    geo.getLocations(homeLocation, function (result)
    {
        if(result.Placemark)
        {
            // ===== Look for the bounding box of the first result =====

            var N = result.Placemark[0].ExtendedData.LatLonBox.north;
            var S = result.Placemark[0].ExtendedData.LatLonBox.south;
            var E = result.Placemark[0].ExtendedData.LatLonBox.east;
            var W = result.Placemark[0].ExtendedData.LatLonBox.west;

            var bounds = new GLatLngBounds(new GLatLng(S,W), new GLatLng(N,E));
            
            setZoomOnCountry(result.Placemark[0].AddressDetails.Country.CountryName, bounds.getCenter(), result.Placemark[0].address, field);
            
            //placeMarker(bounds.getCenter(), result.Placemark[0].address);
            $("startLocation").value = homeLocation; 
            
        }
        else
        {
            var homePoint = new GLatLng("53.414966", "-2.193079");
            setZoomOnCountry("UK", homePoint, "Stockport, UK", field);

            //placeMarker(homePoint, "Stockport, UK");
            $("startLocation").value = "sk4 3jw";
        }
    });
} 

function setZoomOnCountry(country, markerPoint, markerAddress, field)
{
    var geo = new GClientGeocoder();

    geo.getLocations(country, function (result)
    {
        if(result.Placemark)
        {
            // ===== Look for the bounding box of the first result =====

            var N = result.Placemark[0].ExtendedData.LatLonBox.north;
            var S = result.Placemark[0].ExtendedData.LatLonBox.south;
            var E = result.Placemark[0].ExtendedData.LatLonBox.east;
            var W = result.Placemark[0].ExtendedData.LatLonBox.west;

            var bounds = new GLatLngBounds(new GLatLng(S,W), new GLatLng(N,E));

            // Choose a zoom level that fits
            var zoom = map.getBoundsZoomLevel(bounds);
            map.setCenter(bounds.getCenter(),zoom);  
            placeMarker(markerPoint, markerAddress, "images/iconA.png", field);
          
        }
        else
        {
            var homePoint = new GLatLng("53.414966", "-2.193079");
            map.setCenter(homePoint, 6);
            $("startLocation").value = "sk4 3jw";
            placeMarker(homePoint, "Stockport, UK", "images/iconA.png", field);
        }
    });
}

//    var search = new GlocalSearch();
//    
//    search.setSearchCompleteCallback(null, function()
//    {
//        if (search.results[0])
//        {		
//            var Address = search.results[0];
//            var resultLat = Address.lat;
//            var resultLng = Address.lng;
//            var streetAddress = Address.streetAddress;            
//            var city = Address.city;
//            var region = Address.region;
//            var country = Address.country;
//            var completeAddress =  "<div>" + streetAddress + "</div><div>" + city + "," + region + "," + country + "</div>";

//            placeMarker(new GLatLng(resultLat,resultLng), completeAddress);

//            //placeEmptyMarkerAtPoint(resultLat, resultLng, completeAddress);
//        }

//    });	
//    search.execute(homeLocation);
//}

function getLocationLatLng(location)
{
   var search = new GlocalSearch();
   var result = null;
    search.setSearchCompleteCallback(null, function()
    {
        if (search.results[0])
        {
            result = search.results;
        }

    });
    search.execute(location);

    return result;
}

// place the marker on the place show the popup on click of that marker
function placeEmptyMarkerAtPoint(resultLat, resultLng, message)
{
    var point = new GLatLng(resultLat,resultLng);

    var icon = customizeMarker("images/green-dot.png", "images/marker-shadow.png");

    var marker = null;
    
	var html = null;
	var htmlmessage = null;

    marker = new GMarker(point, icon);
    
    html = "<div style = 'color:red;  height:22px; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + message + "</div> ";

	GEvent.addListener(marker, "click", function()
	{
	    marker.openInfoWindowHtml(html);
	    marker.bindInfoWindowHtml(html);
	    marker.openInfoWindowHtml(html);
	});
	
	setCenterToPoint(point);
	
	map.addOverlay(marker);
	
	if(message != "")
	    marker.openInfoWindowHtml(html);
}

// place the marker on the place show the popup on click of that marker
function placeMarkerAtPoint(pointToMark, message, messageDateTime, userMessageData, markerPointIcon)
{
    if (typeof (messageDateTime) == "undefined")
        messageDateTime = new Date();

    //var point = new GLatLng(resultLat,resultLng);

    var iconFile = null;    
    var accuracyMessage = "";
    
    if (markerPointIcon)
    {
        iconFile = markerPointIcon; 
        if(userMessageData.accuracy <= 20 )
        {
            accuracyMessage += "Point Accuracy : Good";
        }
        else if(userMessageData.accuracy <= 40 )
        {
            accuracyMessage += "Point Accuracy : Fair";
        }
        else //if(userMessageData.accuracy >= 80 )
        {
            accuracyMessage += "Point Accuracy : Low";
        }
    }
    else
    {   
        switch(userMessageData.type)
        {   
            case (1) :
                iconFile = "images/smallCarRight.png";
                
            case (3):
                
                if(userMessageData.accuracy <= 20 )
                {
                    iconFile = "images/blue-dot.png";
                    accuracyMessage += "Point Accuracy : Good";
                    
                }
                else if(userMessageData.accuracy <= 40 )
                {
                    iconFile = "images/yellow-dot.png";
                    accuracyMessage += "Point Accuracy : Fair";
                }
                else //if(userMessageData.accuracy >= 80 )
                {
                    iconFile = "images/red-dot.png";
                    accuracyMessage += "Point Accuracy : Low";
                }
            break;
            case (4):
                iconFile = "images/purple-dot.png";
            break;
            case (5):
                if(userMessageData.accuracy <= 20 )
                {
                    accuracyMessage += "Point Accuracy : Good";
                }
                else if(userMessageData.accuracy <= 40 )
                {
                    accuracyMessage += "Point Accuracy : Fair";
                }
                else //if(userMessageData.accuracy >= 80 )
                {
                    accuracyMessage += "Point Accuracy : Low";
                }
                iconFile = "images/green-dot.png";
            break;
            default:
            break;
        }
	}
     
    var icon = customizeMarker(iconFile);

    var marker = null;
    
	var html = null;
	var htmlmessage = null;

	var distanceMessage = "";
	
	if (!isQuickTrip)
	{
	
	    if(pointToMark)
	    {
	        var distanceRemaining = distanceFromDest(pointToMark);
	        distanceRemaining = formatDistance(distanceRemaining);
	        distanceMessage = "Distance Left : " + distanceRemaining;
	    }
	}
	else
	{
	    //var distanceCovered = distanceFromStart(point);
	    distanceCovered = formatDistance(distance);
	    distanceMessage = "Distance Covered : " + distanceCovered;
	}
	
	marker = new Object();
	
	if(pointToMark)
	{
	    marker = new GMarker( pointToMark, { icon: icon, zIndexProcess:orderOfImportance } );
	    marker.pointId = userMessageData.pointId;
	}
	else
	{
	    marker.getPoint = function(){ return false };
	    marker.show = function(){ return };
	}
	
	var debugMsgHtml = "";
	
	if(userMessageData.debugMsg)
	{
	    debugMsgHtml = "<div style = 'color:blue;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> " + userMessageData.debugMsg + "</div>" ;
	}
	
	if (userMessageData.type == 5 || userMessageData.type == 4)
	{
	    html = "<div title='" + encodeMyHtml(unescape(message)) + "' class='ellipsis' style = 'color:red;  height:22px; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + unescape(message) + "</div> "
	            + "<div style = 'color:red;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> Time : " + messageDateTime + "</div>" 
	            + "<div style = 'height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + distanceMessage + "</div>"
	            + "<div style = 'height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + accuracyMessage + "</div>"
	            + debugMsgHtml;
	    
	    marker.my_html = html;
	    	
	    if (userMessageData)
	    {
	        userMessageData.marker = marker;
	        fillUserMessage(marker, userMessageData);
	    }
	}
	else
	{
	    html = "<div style = 'color:red;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> " + messageDateTime + "</div>" 
	           + "<div style = ' height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + distanceMessage + "</div>"
	           + "<div style = 'height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + accuracyMessage + "</div>"
	           + debugMsgHtml
	           
	    marker.my_html = html;
	    userMessageData.marker = marker;
	}
	
	userMessageData.distanceCovered = distance;
	
	
	if( pointToMark )
	{
	    GEvent.addListener(marker, "click", function()
	    {
            markerOnClick(marker, userMessageData, message, pointToMark);
	    });

        map.addOverlay(marker);
	}
	
	var markerObj = new Object();
	
	markerObj.distanceFrmLastPoint = distanceFromPrePoint;
	markerObj.marker = marker;
	markerObj.type = userMessageData.type;
	markerObj.accuracy = userMessageData.accuracy;
	
	allMarkers.push(markerObj);
    //userMessageData.distanceFrmPrePoint = distanceFromPrePoint;

	return marker;
}

function setMarkerScale()
{
    var lastPointMarker = lastPointObject.marker;
    var lastMarkeType = lastPointObject.type;
    
    var distanceFrmLastPoint = 0;   

    switch(parseInt(indexMarkerScale))
    {
        case ScaleMarkerPlcement.ALLMARKERS :
        {
            lastPointMarker.show();
        }
        break;
        case ScaleMarkerPlcement.MSGMARKERS :
        {
            if(lastMarkeType == 5)
                lastPointMarker.show();
            else
                lastPointMarker.hide();
        }
        break;
        case ScaleMarkerPlcement.UNITHALF :
        {
            showFrequencyPoints(1/2);
        }
        break;
        case ScaleMarkerPlcement.UNIT1 :
        {
            showFrequencyPoints(1);
        }
        break;
        case ScaleMarkerPlcement.UNIT2 :
        {
            showFrequencyPoints(2);
        }
        break;
        case ScaleMarkerPlcement.UNIT5 :
        {
            showFrequencyPoints(5);
        }
        break;
        case ScaleMarkerPlcement.UNIT10 :
        {
            showFrequencyPoints(10);
        }
        break;
        case ScaleMarkerPlcement.UNIT50 :
        {
            showFrequencyPoints(50);
        }
        break;
        default:
        break;
    }
}

function setMarkerOnDistance(distanceFrequency)
{
    if(lastPointObject.distanceFrmPrePoint >= distanceFrequency)
    {
        lastPointObject.marker.show();
    }
//    else
//    {        
//        if(isNationalTrip())
//        {
//            lastPointObject.marker.hide();
//        }
//        else
//        {   
//            lastPointObject.marker.show();
//        }
//    }
}

function setPointsDistance()
{
    var frequency =  $("pointsInDistance");
    indexMarkerScale = frequency.selectedIndex;
    
    showScaledMarkers();
    
    setSettings("scaleMarkers", indexMarkerScale);
}

function isNationalTrip()
{
    var result = false;

    var zoomOnDropDows = $("zoomOn");
    var selectedIndex = zoomOnDropDows.selectedIndex;
    
    if(selectedIndex == 0)
        result = true;
    
	return result;
}

function markerOnClick(marker, userMessageData,  message, pointToMark)
{
    marker.bindInfoWindowHtml(marker.my_html);
    marker.openInfoWindowHtml(marker.my_html);
    return;
    
    var html = null;
	var htmlmessage = null;

	var distanceMessage = "";
	
	var messageDateTime = userMessageData.messageDateTime;
	
	if (typeof (messageDateTime) == "undefined")
        messageDateTime = new Date();
        
	if (!isQuickTrip)
	{
	    var distanceRemaining = distanceFromDest(pointToMark);
	    distanceRemaining = formatDistance(distanceRemaining);
	    distanceMessage = "Distance Left : " + distanceRemaining;
	}
	else
	{
	    //var distanceCovered = distanceFromStart(point);
	    distanceCovered = formatDistance(userMessageData.distanceCovered);
	    distanceMessage = "Distance Covered : " + distanceCovered;
	}

	var debugMsgHtml = "";
	
	if(userMessageData.debugMsg)
	{
	    debugMsgHtml = "<div style = 'color:blue;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> " + userMessageData.debugMsg + "</div>" ;
	}
	
	if (userMessageData.type == 5 || userMessageData.type == 4)
	{
	    html = "<div style = 'color:red;  height:22px; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + unescape(message) + "</div> "
	            + "<div style = 'color:red;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> Time : " + messageDateTime + "</div>" 
	            + "<div style = 'height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + distanceMessage + "</div>"
	            + debugMsgHtml;
	    
	    marker.my_html = html;
	}
	else
	{
	    html = "<div style = 'color:red;  height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'> " + messageDateTime + "</div>" 
	           + "<div style = ' height:22px; font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + distanceMessage + "</div>"
	           + debugMsgHtml
	    marker.my_html = html;
	}
	
	userMessageData.marker.my_html = marker.my_html;
    marker.bindInfoWindowHtml(html);
    marker.openInfoWindowHtml(html);
}

function onGDirectionsLoad()
{
    //map.clearOverlays();
    
    //var errorStartLoc = $("errorStartLoc");
    //var errorEndLoc = $("errorEndLoc");
   //errorStartLoc.style.display = "";    
    //errorStartLoc.src = "images/activeTrip.gif";  
    //errorEndLoc.style.display = "";    
    //errorEndLoc.src = "images/activeTrip.gif";
    
    var getDirectiolLoading = $("getDirectiolLoading");
    getDirectiolLoading.style.display = "none"; 
    
    if(setDirection.getDistance())
    {
        var distance = setDirection.getDistance().meters;
        var journeyTime = setDirection.getDuration().seconds;
        $("distance").value = distance;
        $("journeyTime").value = journeyTime;
        
        var endPoint = setDirection.getMarker(1).getLatLng();
        var startPoint = setDirection.getMarker(0).getLatLng();
        $("startCoordinate").value = startPoint.y + "," + startPoint.x;
        $("endCoordinate").value = endPoint.y + "," + endPoint.x;
        
        getDragedLoc(startPoint, $("startLocation"), true);
        getDragedLoc(endPoint, $("endLocation"), true);

        //$("startCoordinate").value = pointsArray[0].y + "," + pointsArray[0].x;
        //$("endCoordinate").value = pointsArray[1].y + "," + pointsArray[1].x;
        
        var status = $("status");
        status.style.visibility = "hidden";
        
        var getDirection = $("getDirection");
        var saveTrip = $("saveTrip");
        getDirection.value = "Re-Calculate";
        saveTrip.style.display = ""; 
    }
}

// set the center point of the map 
function setCenterToPoint(point)
{
    map.setCenter(point, zoomLevel);
}

// Set Default location on the map
function defaultLocation(setZoom)
{
    //map.setCenter(setDirection.getBounds().getCenter());
    //map.setZoom(map.getBoundsZoomLevel(setDirection.getBounds()));
    
//    if (setZoom)
//        zoomLevel = setZoom;
//    else
//        zoomLevel = 5;
//        
//    map.setCenter(new GLatLng(53.414956, -2.193089), zoomLevel);

    
   // var point = new GLatLng(53.414956, -2.193089);
    //placeMarkerAtPoint(point, "Stockport"); 
    return;
}

// Handle errors on setting Direction 
function handleErrors()
{   
    try
    {
        if (setDirection.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);

        else if (setDirection.getStatus().code == G_GEO_SERVER_ERROR)
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);

        else if (setDirection.getStatus().code == G_GEO_MISSING_QUERY)
            setDirectionErrorMessage("Error Code - " + setDirection.getStatus().code);

        else if (setDirection.getStatus().code == G_UNAVAILABLE_ADDRESS) 
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);         

        else if (setDirection.getStatus().code == G_GEO_BAD_KEY)
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);

        else if (setDirection.getStatus().code == G_GEO_BAD_REQUEST)
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);

        else 
            setDirectionErrorMessage(" Error Code - " + setDirection.getStatus().code);
    }
    catch(err)
    {
        setDirectionErrorMessage("");
    }
}



function setDirectionErrorMessage(code)
{
    var failuremsg = $("failuremsg");
    $setText(failuremsg,"Can not get direction." + code);
    var status = $("status");
 
    var errorEndLoc = $("getDirectiolLoading");
    errorEndLoc.style.display = "none"; 
    status.style.visibility = "visible";
    $setOpacity(status, 100);
    window.setTimeout("removeDirectionFailText()", 8000);
    setMarkerAtValidPoint();
}

function removeDirectionFailText()
{
    var status = $("status");
    $fadeOutObject(status, 20, 2);
}

function setMarkerAtValidPoint()
{
    var errorStartLoc = $("errorStartLoc");
    var errorEndLoc = $("errorEndLoc");
    
    if((errorStartLoc.src).indexOf("error.gif") == -1 )
    {
        var startLocation = $("startLocation");
        setPointAtAddress(startLocation.value);
    }
    else if((errorEndLoc.src).indexOf("error.gif") == -1 )
    {
        var endLocation = $("endLocation");
        setPointAtAddress(endLocation.value);
    }
}

function setPointAtAddress(postcode) 
{    
    localSearch.setSearchCompleteCallback(null, function() 
    {
        if (localSearch.results[0])
        {
            var resultLat = localSearch.results[0].lat;
            var resultLng = localSearch.results[0].lng;
            var resultLocation = new GLatLng(resultLat, resultLng);
            map.clearOverlays();
            zoomLevel = 15;
            placeMarker(resultLocation, postcode);
            setCenterToPoint(resultLocation);
        }
        else
        {
            var geocoder = new GClientGeocoder();
    
            geocoder.getLatLng(postcode, function(point)
            {               
                if (point) 
                {
                    map.clearOverlays();
                    zoomLevel = 15;
                    placeMarker(point, postcode);
                    setCenterToPoint(point);
                }   
            }
            );
        }     
    });

    localSearch.execute(postcode);
}

function setMapHeight(heightDecrease)
{
    return;
    var showMapDiv = $("showMap");
    var mapDiv = $("map");
    var lhsContainer = $("lhsContainerMessages");
    
    var browser = navigator.userAgent.toLowerCase();
    
    var headerHeight = $("header").offsetHeight; 
    var footerHeight = $("footer").offsetHeight;
    
    var BlueContainer = $("banner").offsetHeight; 
    var pageMetrics = new splatPageMetrics();
    pageMetrics.init();

    if(browser.indexOf("msie") == -1)
    {
        lhsContainer.style.height = (pageMetrics.contentHeight - headerHeight - BlueContainer - footerHeight - heightDecrease) + "px";
        mapDiv.style.height = (pageMetrics.contentHeight - headerHeight - BlueContainer - footerHeight - 6) + "px";
    } 
    else
    {
        lhsContainer.style.height = (pageMetrics.contentHeight - headerHeight - BlueContainer - footerHeight - heightDecrease - 5) + "px";
        mapDiv.style.height = (pageMetrics.contentHeight - headerHeight - BlueContainer - footerHeight - 9) + "px";
    }
       
}

function setLatLong() 
{   
    showMap();
    
    try
    {                      
        var lat = $("lat").value;    
        var lon = $("long").value;
        var message = $("tripMessage").value;
        var messageDateTime = $("tripMessageDateTime").value;

        setMapHeight(64);

        latitude = lat.split("#$#");
        longitude = lon.split("#$#");
        tripMessage = message.split("#$#");
        tripMessageDateTime = messageDateTime.split("#$#");

        var point = new GLatLng(latitude[0], longitude[0]);
        placeMarkerAtPoint(point, tripMessage[0]); 
        setGPSInterval();
    }
    catch (err) { alert(err.description); }
    finally
    { 
    } 
}

function fillUserMessage(marker, userMessageData)
{
    removeNoUserMessage();
   
    var message = userMessageData.message;
    //alert("hjer"+ unescape(message));
   
    message = unescape(message);
    userMessageData.message = unescape(userMessageData.message);
    
    var debugMsgDiv = null;
    var loginUsersPin = $("currentPin").value;
    var currentPin = userMessageData.senderPin;
    
    var result = (loginUsersPin === currentPin);
    
    var userMessagesContainer = $("userMessagesContainer");
    
    var mainContainer = $create("div", "", "userMessageContainer");
    mainContainer.style.paddingTop = "2px";
    mainContainer.style.paddingBottom = "2px";
    var messageDiv = null;

    if(userMessageData.type == 6)
    {
        messageDiv = $create("div");

        var messageTable = $create("table");
        messageTable.style.cellPadding = "0";
        messageTable.style.cellSpacing = "0";
        var tbody = $create("tbody");

        var row = $create("tr");

        var cell1 = $create("td");
        cell1.style.textAlign = "center";
        cell1.style.width = "50px";
        var img = $create("img");
        img.src = userMessageData.senderImage;;

        cell1.appendChild(img); 
        row.appendChild(cell1);
        
        var cell2=$create("td");                
        var span = $create("span", "", "", userMessageData.message + " - " + userMessageData.messageDateTime);
        span.style.lineHeight = "20px";
        cell2.appendChild(span);                
        row.appendChild(cell2);

        tbody.appendChild(row);
        
        mainContainer.style.color="green";
        messageTable.appendChild(tbody);
        messageDiv.appendChild(messageTable);
    }
    else if(result && userMessageData.type == 5)
    {
        messageDiv = $create("div");
        
        var messageTable = $create("table");
        messageTable.style.cellPadding = "0";
        messageTable.style.cellSpacing = "0";
        
        var tbody = $create("tbody");

        var row = $create("tr");

        var cell1 = $create("td");
        cell1.style.textAlign = "center";
        cell1.style.width = "50px";
        var img = $create("img");
        img.src = getMessagePic(message);

        cell1.appendChild(img); 
        row.appendChild(cell1);

        var cell2=$create("td");                
        var span = $create("span", "", "", userMessageData.message + " - " + userMessageData.messageDateTime);
        span.style.lineHeight = "20px";

        cell2.appendChild(span);                
        row.appendChild(cell2);

        tbody.appendChild(row);
        messageTable.appendChild(tbody);
        messageDiv.appendChild(messageTable);
    }
    else
        messageDiv = $create("div", "", "", userMessageData.message + " - " + userMessageData.messageDateTime);
        
    mainContainer.appendChild(messageDiv);
    
    if(marker && marker.getPoint())
    {
        var point = userMessageData.marker.getPoint();                  
        
        var markerMessage = userMessageData.marker.my_html;
        
        mainContainer.onclick = function()
        {
            {
                map.panTo(point);
            }

            markerOnClick(userMessageData.marker, userMessageData,  message, point);
            //userMessageData.marker.openInfoWindow(markerMessage);
        };
    }
            
    if(userMessagesContainer.childNodes.length == 0)
       userMessagesContainer.appendChild(mainContainer);
    else
        userMessagesContainer.insertBefore(mainContainer, userMessagesContainer.childNodes[0]);  
}

function getMessagePic(message)
{
    var messageImage = "";
    
    if(message.toLowerCase() == "coffee break" || message.toLowerCase() == "coffee break over")
    {
        messageImage = "images/coffee.png";
    }
    else if((message.toLowerCase().indexOf("trip started : ")!=-1) || (message.toLowerCase().indexOf("trip ended : ")!=-1))
    {
        messageImage = "images/smallCarTripIcon.png";
    }
    else if(message.toLowerCase() == "finished call/sms response" || message.toLowerCase() == "responding to an incoming call/sms")
    {
        messageImage = "images/phone.png";
    }
    else if(message.toLowerCase() == "lunch break" || message.toLowerCase() == "lunch break over")
    {
        messageImage = "images/lunch.png";
    }
    else if(message.toLowerCase() == "stuck in traffic" || message.toLowerCase() == "traffic jam clear")
    {
        messageImage = "images/traffic.png";
    }
    else if(message.toLowerCase() == "making a call"|| message.toLowerCase() == "phone call break over")
    {
        messageImage = "images/phone.png";
    }
    else
    {
         messageImage = $("enRouteUserImage").value;
    }
    
    return messageImage;
}


function addUserMessage(message)
{
    removeNoUserMessage();
    var userMessagesContainer = $("userMessagesContainer");
    
    message = unescape(message);
    
    var d = $create("div", "", "userMessageContainer");
    var s = $create("div", "", "", message);
    
    d.appendChild(s);
    
    if(userMessagesContainer.childNodes.length == 0)
       userMessagesContainer.appendChild(d);
    else
        userMessagesContainer.insertBefore(d, userMessagesContainer.childNodes[0]);  
}

function setNoTripPointsMessage(message)
{
    //var noUserMessage = $("noUserMessage");
    //var homePoint = new GLatLng("53.414966", "-2.193079");
    //map.setCenter(homePoint, 6);
    //$setText(noUserMessage, message);
    
    message = unescape(message);
    
    var userMessagesContainer = $("userMessagesContainer");
    var d = $create("div", "noUserMessage", "noUserMessage");
    var s = $create("div", "", "", " No User Messages");
    
    d.appendChild(s);
    userMessagesContainer.appendChild(d);
    
    var locFrmIP = $("locFrmIP").value;
    zoomToLocation(locFrmIP, message);
}
            
function zoomToLocation(address, message) 
{
    var geo = new GClientGeocoder();

    geo.getLocations(address, function (result)
    {
        if(result.Placemark)
        {
            // ===== Look for the bounding box of the first result =====

            var N = result.Placemark[0].ExtendedData.LatLonBox.north;
            var S = result.Placemark[0].ExtendedData.LatLonBox.south;
            var E = result.Placemark[0].ExtendedData.LatLonBox.east;
            var W = result.Placemark[0].ExtendedData.LatLonBox.west;

            var bounds = new GLatLngBounds(new GLatLng(S,W), new GLatLng(N,E));

            // Choose a zoom level that fits
            var zoom = map.getBoundsZoomLevel(bounds);

            map.setCenter(bounds.getCenter(),zoom);
        }
        else
        {
            var homePoint = new GLatLng("53.414966", "-2.193079");
            map.setCenter(homePoint, 6);
        }
        
        var noUserMessage = $("noUserMessage");
        
        if(noUserMessage)
            $setText(noUserMessage, message);
    });
} 

function clearUserMessages()
{
    var userMessagesContainer = $("userMessagesContainer");
    userMessagesContainer.innerHTML = "";
    var d = $create("div", "noUserMessage", "noUserMessage");
    var s = $create("div", "", "", " No User Messages");
    d.appendChild(s);
    userMessagesContainer.appendChild(d);
}


var alreadyConnectedIds = "0";
var connectedUsersCount = 0;
var anonyUsersCount = 0;

function connectedUsers(connectedUsersXML)
{

    //clearUserMessages(); // clear old messages

    /* Sample XML 
        <users>
            <loginUser>
                <userInfo userName="" image="" description="" trackType=""/>";
            </loginUser>
            <anonymousUserInfo userName="Web User" userCount=""/>";
        </usres>
    */
    if(connectedUsersXML == "")
        return;
               
    var path = window.parent.SERVER;                     
    //var connectedUsersTable = $create("table");
    
    var connectedUsersTable = $("connectedUsersTable");
    //var connectedUsersXML = $("connectedUsersXML").value;
    
    connectedUsersXML = $xmlDecode(connectedUsersXML);
    var rootText = $("rootText");
    
    if(connectedUsersXML)
    {
        var xmlObj = createXmlObject(connectedUsersXML); 
            
        if(xmlObj.validXml)
        {
            var doc = xmlObj.xmlDoc;
            
            var users = doc.getElementsByTagName("users")[0];
            var rootImage = $("rootImage");
            
            if(!rootImage.src)
                rootImage.src =  path + users.getAttribute("connectedImg");  
            
            
            
            //var connectedUsersCount = parseInt(users.getAttribute("count"));
            
            var loginUser = doc.getElementsByTagName("loginUser")[0].childNodes;
            var anonymousUser = doc.getElementsByTagName("anonymousUserInfo")[0];

            //var tbody = $create("tbody");
            //var tbody = connectedUsersTable.firstChild;
            var tbody = $("connectedUsersTableBody");
            
            if(tbody.lastChild)
                tbody.removeChild(tbody.lastChild);
                      
            
            for(var i=0; i<loginUser.length; i++)
            {
                connectedUsersCount++;
                alreadyConnectedIds += "," + loginUser[i].getAttribute("trackId");
                
                var userName = loginUser[i].getAttribute("userName");
                var image = loginUser[i].getAttribute("image");
                var description = loginUser[i].getAttribute("description");
                var trackType = parseInt(loginUser[i].getAttribute("trackType"));
                
                var row = $create("tr");
                row.style.height="20px";
                
                var cell1 = $create("td");
                cell1.style.textAlign = "center";
                var img = $create("img");
                img.src = path + image;
                img.title = description;
                
                cell1.appendChild(img); 
                row.appendChild(cell1);
                
                var textForUser = userName;
                
                if(trackType == 1)
                    textForUser += "( following from iPhone )";
                else
                    textForUser += "( following from web )";
                
                var cell2=$create("td");                
                var span = $create("span", "", "", textForUser);
                
                cell2.appendChild(span);                
                row.appendChild(cell2);
                
                tbody.appendChild(row);
            }
            
            if(anonymousUser)
            {
                var userName = anonymousUser.getAttribute("userName");
                var userCount = anonymousUser.getAttribute("count");
                
                anonyUsersCount = parseInt(userCount);
                
                var image = anonymousUser.getAttribute("image");

                var row = $create("tr");
                row.style.height="20px";
                
                var cell1 = $create("td");
                cell1.style.textAlign = "center";
                var img = $create("img");
                img.src = path + image;
                img.title = "Web User";
                
                cell1.appendChild(img); 
                row.appendChild(cell1);
                                
                var cell2=$create("td");        
                
                var textForAnonymous = userName + "( " +userCount + " )";
                        
                var span = $create("span", "", "", textForAnonymous);
                
                cell2.appendChild(span);                
                row.appendChild(cell2);
                
                tbody.appendChild(row);
            }
            
            connectedUsersTable.appendChild(tbody);
        }
    }
    
    
    var connectedUsersString = "";
    $setText(rootText, (connectedUsersCount + anonyUsersCount) + " Users have connected and viewed this trip");   
    
    if((connectedUsersCount + anonyUsersCount) == 0 )
            {
                $("rootImage").src = "";
                $("rootImage").style.display = "none";
            }
            
    
    //var connectedUsers = $("connectedUsers");
    //connectedUsers.innerHTML = "";
    //connectedUsers.appendChild(connectedUsersTable);
}

function showConnectedUsers()
{
    var image = $("rootImage");
    var connectedUsers = $("connectedUsers");
    
    var connectedUsersCount = $("connectedUsersCount");
    
    var connectedUsersContainer = $("connectedUsersContainer");
    
    var lhsContainer = $("lhsMessagesContainer");
    
    var path = window.parent.SERVER;
    
    var height = 0;
    var totalLHSHeight = lhsContainer.offsetHeight;
    
    if(image.src == path + "images/plus.gif")
    {  
        connectedUsers.style.display = "";
        //height = connectedUsers.offsetHeight;
        height = connectedUsersContainer.offsetHeight;
        image.src = path + "images/minus.gif";
        
        //lhsContainer.style.height = totalLHSHeight - height + "px";
        //$("lhsMessagesContainer").style.height = totalLHSHeight - height    + "px";
        $("lhsContainerMessages").style.height = totalLHSHeight - height   + "px";
        $("directions").style.height = totalLHSHeight - height  + "px";
        
    }
    else
    {
        height = connectedUsers.offsetHeight;
        //height = connectedUsersContainer.offsetHeight;
        connectedUsers.style.display = "none";
        image.src = path + "images/plus.gif";
        //lhsContainer.style.height = totalLHSHeight + height + "px";
        
        //$("lhsMessagesContainer").style.height = totalLHSHeight + height    + "px";
        $("lhsContainerMessages").style.height = totalLHSHeight - connectedUsersCount.offsetHeight + 'px' ; //+ height   + "px";
        $("directions").style.height = totalLHSHeight  - connectedUsersCount.offsetHeight + 'px'; //+ height   + "px";
    }
}

function removeNoUserMessage()
{
    var removeNoUserMessage = $("noUserMessage");
    if (removeNoUserMessage)
    {
        var userMessagesContainer = $("userMessagesContainer");
        userMessagesContainer.innerHTML = "";
    }
}

function showUserMessages()
{
    if(isQuickTrip)
        return;
        
    var userMessagesContainer = $("userMessagesContainer");
    var directions = $("directions");
    var lhsContainerMessages = $("lhsContainerMessages");

    $display(userMessagesContainer, true);
    $display(directions, false);
    $display(lhsContainerMessages, true);
    
    $("tripMessagesTopMenu").className = "topMenuSelected";
    $("directionsTopMenu").className = "topMenuUnselected";
    
}

function showDirections()
{
    var userMessagesContainer = $("userMessagesContainer");
    var directions = $("directions");
    //var lhsContainerMessages = $("lhsContainerMessages");
    
    directions.style.padding = "0px";
    
    directions.style.height = $("lhsMessagesContainer").offsetHeight - $("connectedUsersContainer").offsetHeight + "px";
    
    //$display(lhsContainerMessages, false);
    $display(userMessagesContainer, false);
    $display(directions, true);

    $("tripMessagesTopMenu").className = "topMenuUnselected";
    $("directionsTopMenu").className = "topMenuSelected";
    
    
}

function distanceFromDest(point)
{
    var dist = point.distanceFrom(lastTripPoint);
    return dist;
}

function distanceFromStart(point)
{
    var dist = 0;
    
    if(startMarkerPoint)
        dist = point.distanceFrom(startMarkerPoint);
    
    return dist;
}

function distanceBetweenPoints(point1, point2)
{
    var dist = point1.distanceFrom(point2);
    return dist;
}

function formatDistance(met)
{
    //var userPrefrence = $("userPrefrence");
    
    var rdoMiles = $("rdomile");
    var rdoKm = $("rdokm");
    
    var dist = met.toFixed(0);
    
    //var isInMile = (userPrefrence.value.toLowerCase() === 'true');

    if(!rdoMiles.checked)
    {
//        if (parseInt(dist) > 1000)
//        {
            dist = (parseInt(dist) / 1000).toFixed(1) + " Km";
//        }
    }
    else
    {
        dist = (parseInt(dist) / 1000).toFixed(1);
        dist = ((dist * 5)/8).toFixed(2)  + " Miles";
    }

    return dist;
}

function checkHomeBoundTrip(point)
{
    var temp = null;
    firstPoint = false;    

    if (distanceFromDest(point) < distanceFromStart(point))
    {
        //$setText($("tripDirection"), "HomeBound");
        temp = $("startLocation").value;
        $("startLocation").value = $("endLocation").value;
        $("endLocation").value = temp;

        // reset the map..
        return true;
        // reverse the start / end points
//        temp = startMarkerPoint;
//        startMarkerPoint = lastMarkerPoint;
//        lastMarkerPoint = temp;
    }

    return false;
}

function getPlaceGeoCode(search, targetResult)
{
    var marker = [];
    var miniMarker = [];
    var html = [];
    var precis = [];
    var iwn = 0;
    var poet = [];
    var latitude = [];
    var longitude = [];
    var country = [];

    var geo = new GClientGeocoder();
    var lat = [];
    var lng = [];
    var bounds = new GLatLngBounds();
    var Accu = [];

    // red mini marker icon
    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    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);


    var status = [];
    status[G_GEO_SUCCESS] = "Success";
    status[G_GEO_MISSING_ADDRESS] = "Missing Address";
    status[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address";
    status[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address";
    status[G_GEO_BAD_KEY] = "Bad Key";
    status[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries";
    status[G_GEO_SERVER_ERROR] = "Server Error"

    //var now = new Date();
    lat.length = 0;
    geo.getLocations(search, function(result)
    {
        // show status code

        //document.getElementById("message").innerHTML = status[result.Status.code] + "<br>";

        if (result.Status.code == G_GEO_SUCCESS)
        {
            targetResult = result;

            //start stopwatch
            //var then = new Date();
            // Loop through the results, placing markers
            for (var i = 0; i < result.Placemark.length; i++)
            {
                lat[i] = result.Placemark[i].Point.coordinates[1];
                lng[i] = result.Placemark[i].Point.coordinates[0];
                html[i] = "<small>" + (i + 1) + ": </small> " + result.Placemark[i].address;
                Accu[i] = "";
                if (result.Placemark[i].AddressDetails)
                {
                    Accu[i] = result.Placemark[i].AddressDetails.Accuracy;
                }
                precis[i] = 3 * html[i].split(",").length;
                var point = new GLatLng(lat[i], lng[i]);
                var coords = "<small> (" + lat[i] + ", " + lng[i] + ")</small>";


                marker[i] = new GMarker(point, { title: i + 1 }); ;
                // map.addOverlay(marker[i]);
                miniMarker[i] = new GMarker(point, icon);
                //if (overV.getOverviewMap()) overV.getOverviewMap().addOverlay(miniMarker[i]);
                //bounds.extend(marker[i].getPoint());
                var addr = result.Placemark[i].address;
                if (result.Placemark[i].AddressDetails)
                {
                    var iso = result.Placemark[i].AddressDetails.Country.CountryNameCode;
                }
                //createIW(i + 1, marker[i], lat[i], lng[i], addr, iso);
                //document.getElementById("message").innerHTML += "<a href=javascript:go(" + lat[i] + "," + lng[i] + "," + precis[i] + "," + i + ")>" +html[i] + " " + coords + " " + Accu[i] + "</a><br>";
            }



            //// stopwatch display
            //var delay = (then - now) / 1000;
            //document.getElementById("message").innerHTML += "<small>" + delay + " seconds</small>";



            //// center to first result
            //go(lat[0], lng[0], precis[0], 0);
        }
    }
);


}


function placeCustomMarker(lat, lng, markerIcon, infoWindowHTML)
{
    var icon = customizeMarker("images/green-dot.png", "images/marker-shadow.png");

    var marker = null;

    var html = null;
    var htmlmessage = null;

    marker = new GMarker(point, icon);
}

function setHistoryMapPoints(quickTripParam, canViewTripParam)
{
    var mapLocalVar = $("map");
    var mapShow = $("showMap");
    var privacySetting = $("privacySetting");
    var blueHeader= $("blueHeader");
     
    var canViewTrip = false;
    
     if(canViewTripParam) // check can view trip
        canViewTrip = (canViewTripParam.toLowerCase() === 'true');
    else
        canViewTrip = false;
        
    if(!canViewTrip)
    {
        mapLocalVar.style.display = "none";
        mapShow.style.display = "none";
        blueHeader.style.display = "none";
        privacySetting.style.display = "";
    }
    else
    {
        mapLocalVar.style.display = "";
        mapShow.style.display = "";
        blueHeader.style.display = "";
        privacySetting.style.display = "none";
        
        if(quickTripParam) // check quick trip existence
            isQuickTrip = (quickTripParam.toLowerCase() === 'true');
        else
           isQuickTrip = false;
           
        var count = 0;
        lastEntry = 0;
        var startLocation = $("startLocation").value;
        var endLocation = $("endLocation").value;
        allMarkers = new Array();
        firstPoint = true;
        startMarkerPoint = null;
        lastMarkerPoint = null;
        tripZoomSet = false;

        showMap();
        clearUserMessages();
        
        var direction = $("directions");
        direction.innerHTML = "";
               
        setMapHeight(64);
                                
        loadSettings();
        connectedUsers($("connectedUsersXML").value);   
        
        var directionsTopMenu = $("directionsTopMenu");
        
        // Cant set directions for a quick fuck!    
        if(!isQuickTrip)
        {
            var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;

            setDirection = new GDirections(map, direction);
            setDirection.load(sourceToDestiny, { locale: "whatever", preserveViewport: false });

            GEvent.addListener(setDirection, "load", function()
            {
                lastTripPoint = lastMarkerPoint = setDirection.getMarker(1).getLatLng();
                startMarkerPoint = setDirection.getMarker(0).getLatLng();
                
                var polyLine = setDirection.getPolyline();
               
                polyLine.color = "#FD8B23";
                polyLine.opacity = .90;
                
                var newPolyLine = polyLine;
                map.addOverlay(newPolyLine);
                
                setDistanceLeft(startMarkerPoint);
                wholeTripBounds.extend(startMarkerPoint);
                wholeTripBounds.extend(lastTripPoint);
                twoPointBounds.extend(startMarkerPoint);

                setHistoryPoints();
            });
        }
        else // if quick trip exists then set center at first point 
        {
            setHistoryPoints();
        }
    }
     
    return false;
}

function setHistoryPoints()
{
    var lat = $("lat").value;
    var lon = $("long").value;
    var message = $("tripMessage").value;
    var messageDateTime = $("tripMessageDateTime").value;
    var debugMessgage = $("debugMsg").value;
    var type = $("type").value;
    var senderImages = $("senderImages").value;
    var senderPins = $("senderUsersPin").value;
    var accuracyStr = $("accuracyStr").value;
    
    latitude = lat.split("#$#");
    longitude = lon.split("#$#");
    tripMessage = message.split("#$#");
    tripMessageDateTime = messageDateTime.split("#$#");
    debugMsg = debugMessgage.split("#$#");
    type = type.split("#$#");
    userSenderImages = senderImages.split("#$#");
    userSenderPins = senderPins.split("#$#");
    
    accuracy = accuracyStr.split("#$#");
            
    var userimage = $("enRouteUserImage").value;
                
    var point = new GLatLng(latitude[0], longitude[0]);
    startMarkerPoint = point;
    wholeTripBounds.extend(point);
    twoPointBounds.extend(point);
    var userMessageData = new Object();

    userMessageData.message = tripMessage[0];
    userMessageData.messageDateTime = tripMessageDateTime[0];
    userMessageData.type = parseInt(type[0]);
    userMessageData.senderImage = userSenderImages[0];
    userMessageData.senderPin = userSenderPins[0];
    userMessageData.accuracy = accuracy[0];
    
    if(userMessageData.type == 6)
    {
        fillUserMessage(null, userMessageData);
    }
    else
    {
        userMessageData.point = point;
        userMessageData.debugMsg = debugMsg[0];
        userMessageData.markerIcon = "images/smallCarRight.png";
    
        if(isQuickTrip)
            setDistanceCovered(point);
        else
            setDistanceLeft(point);
                
        setCenterToPoint(point);
        lastMarkerPoint = startMarkerPoint;  
        userMessageData.marker = placeMarkerAtPoint(point, tripMessage[0], tripMessageDateTime[0], userMessageData, "images/smallCarRight.png");

        oldMarkerPoints.push(userMessageData);
    }
    
    for (var i = 1; i < latitude.length - 1; i++)
    {
        twoPointBounds = new GLatLngBounds();
        userMessageData = new Object();

        userMessageData.message = tripMessage[i];
        userMessageData.messageDateTime = tripMessageDateTime[i];
        userMessageData.type = parseInt(type[i]);
        userMessageData.senderImage = userSenderImages[i];
        userMessageData.senderPin = userSenderPins[i];
        userMessageData.accuracy = accuracy[i];
    
        if(userMessageData.type == 6)
        {
            fillUserMessage(null, userMessageData);
        }
        else
        {
            point = null;
            
            if(latitude[i]!= "" && latitude[i]!="0" 
                && longitude[i]!= "" && longitude[i]!="0" 
            )
                point = new GLatLng(latitude[i], longitude[i]);
            else
            {
                // test
                point = null;
            }
            
            userMessageData.point = point;
            userMessageData.debugMsg = debugMsg[i];
                
            userMessageData.marker = placeMarkerAtPoint(point, tripMessage[i], tripMessageDateTime[i], userMessageData);

            if(isQuickTrip)
                setDistanceCovered(point);
            else
                setDistanceLeft(point);
            
            twoPointBounds.extend(startMarkerPoint);

            lastMarkerPoint = startMarkerPoint; 
            
            if(point)
            {
                startMarkerPoint = point;
                
                wholeTripBounds.extend(point);
                twoPointBounds.extend(point);
            }
            
            oldMarkerPoints.push(userMessageData);
            lastPointObject = userMessageData;
        }
    }
    
    if(latitude.length > 1)
    {
        var latestPointIndex = latitude.length-1;
        
        userMessageData = new Object();

        userMessageData.message = tripMessage[latestPointIndex];
        userMessageData.messageDateTime = tripMessageDateTime[latestPointIndex];
        userMessageData.type = parseInt(type[latestPointIndex]);
        userMessageData.senderImage = userSenderImages[latestPointIndex];
        userMessageData.senderPin = userSenderPins[latestPointIndex];
        userMessageData.accuracy = accuracy[latestPointIndex];
        
        if(userMessageData.type == 6)
        {
            fillUserMessage(null, userMessageData);
            placeMarkerAtPoint(point, lastPointObject.message, lastPointObject.messageDateTime, lastPointObject, userimage);
        }
        else
        {
        
            if(latitude[i]!= "" && latitude[i]!="0" 
                && longitude[i]!= "" && longitude[i]!="0" 
            )
                point = new GLatLng(latitude[latestPointIndex], longitude[latestPointIndex]);
            else
            {
                // test
                point = null;
            }
            
            
        
            userMessageData.point = point;
            userMessageData.debugMsg = debugMsg[latestPointIndex];
            userMessageData.markerIcon = userimage;
            
            if(point)
            {
                twoPointBounds.extend(point);                        
                wholeTripBounds.extend(point);

                lastMarkerPoint = point;                               
                //setCenterToPoint(point);
                
                if(isQuickTrip)
                    setDistanceCovered(point);
                else
                    setDistanceLeft(point);
            }
            
            userMessageData.marker = placeMarkerAtPoint(point, tripMessage[latestPointIndex], tripMessageDateTime[latestPointIndex], userMessageData, userimage);
            lastPointObject = userMessageData;
            oldMarkerPoints.push(userMessageData);
        }
    }
    
   //window.setTimeout("setMapZoomOn()", 1000);
   setMapZoomOn();
    
    polylinesForOldPoints(); 
}



// function to set map points in iPhone
function iPhoneSetMapPoints(quickTripParam)
{
    if(quickTripParam) // check quick trip existence
        isQuickTrip = (quickTripParam.toLowerCase() === 'true');
    else
       isQuickTrip = false;
 
   setMapContainerParam();
  
    var count = 0;
    lastEntry = 0;
    var startLocation = $("startLocation").value;
    var endLocation = $("endLocation").value;
    allMarkers = new Array();
    firstPoint = true;
    startMarkerPoint = null;
    lastMarkerPoint = null;
    tripZoomSet = false;
    var sourceToDestiny = "from: " + startLocation + " to: " + endLocation;

    showMapOnIphone();

    if(!isQuickTrip)
    {
        setDirection = new GDirections(map);
        setDirection.load(sourceToDestiny, { locale: "whatever", preserveViewport: false });

        GEvent.addListener(setDirection, "load", function()
        {
            var lat = $("lat").value;
            var lon = $("long").value;
            var message = "";
            var messageDateTime = "";

            lastMarkerPoint = setDirection.getMarker(1).getLatLng();
            startMarkerPoint = setDirection.getMarker(0).getLatLng();

            iPhoneGetLatestPoints();
            iPhoneResetRefreshMapInterval();
            return false;
        });
    }
    else  
    {
        var lat = $("lat").value;
        var lon = $("long").value;
        //var messageDateTime = "";
        lastEntry = $("lastEntryId").value;
        var latitude = lat.split("#$#");
        var longitude = lon.split("#$#");
        //var tripMessageDateTime = "";
        var bounds = new GLatLngBounds();
        var point = new GLatLng(latitude[0], longitude[0]);
        startMarkerPoint = point;
        setCenterToPoint(point);
        bounds.extend(point);
        //placeMarker(point, "Start Trip");
        //var userMessageData = new Object();
        
        //userMessageData.message = "Quick Trip Start";
        //userMessageData.point = point;
        //userMessageData.messageDateTime = tripMessageDateTime;
        iphonePlaceMarker(latitude[0], longitude[0], "Quick Trip Start", "tripStart.png");
        
         for (var i = 1; i < latitude.length; i++)
         {
            point = new GLatLng(latitude[i], longitude[i]);

            bounds.extend(point);
            iphonePlaceMarker(latitude[i], longitude[i], "");

        }
        
        //placeMarkerAtPoint(lat, lon, "Quick Trip Start", messageDateTime, userMessageData, "tripStart.png");
        //setDistanceCovered(point);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
        iPhoneGetLatestPoints();
        iPhoneSetRefreshMapInterval();
        return false;
    }
     
    return false;
}

function iPhoneGetLatestPoints()
{
    var count = 0;
    var postData = "lastEntryId=" + lastEntry;
    var latestRouteData = "";
    
    var lat = "";
    var lon = "";
    
    var getLatestRoute = new ajaxLoader();

    getLatestRoute.onLoadComplete = function()
    {
        latestRouteData = getLatestRoute.responseHTML;

        if (latestRouteData == "reset")
        {
            lastEntry = 0;
            map.clearOverlays();
            iPhoneSetMapPoints();
        }
        else if (latestRouteData != "")
        {
            latestRouteData = latestRouteData.split("&$&");

            lat = latestRouteData[0];
            lon = latestRouteData[1];
            lastEntry = latestRouteData[2];

            latitude = lat.split("#$#");
            longitude = lon.split("#$#");

            for (var i = 0; i < latitude.length; i++)
            {
                var point = new GLatLng(latitude[i], longitude[i]);

                if (firstPoint && !isQuickTrip)
                {
                    if (checkHomeBoundTrip(point))
                    {
                        // refresh the map with reverse direction
                        iPhoneSetMapPoints();
                        return;
                    }
                }

                iphonePlaceMarker(latitude[i], longitude[i], "");
                //placeMarkerAtPoint(point, tripMessage[i], tripMessageDateTime[i], userMessageData);
                count++;
            }

            var len = allMarkers.length;
            var latestMarkerIndex = count - 1;

            var latestPoint = new GLatLng(latitude[latestMarkerIndex], longitude[latestMarkerIndex]);

            //setCenterToPoint(latestPoint);

            //if (!isQuickTrip)
                //setDistanceLeft(latestPoint);
            //else
            //{
                //setDistanceCovered(point);
               // map.panTo(latestPoint);
            //}

            if (tripMessage[latestMarkerIndex] == "")
                map.closeInfoWindow();

            // dont set the zoom for first view of the map and set on the next check for points
            if (firstView)
            {
                if (!isQuickTrip)
                    setTripZoom(latestPoint);
                
                firstView = false;
            }
            else
                map.panTo(latestPoint);
        }
        //setTripZoom(latestPoint);
    };

    var tripInstanceIDField = $("tripInstanceIDField");
    
    if(tripInstanceIDField)
        getLatestRoute.post("latestRouteData.aspx?tripInstanceIDField="+tripInstanceIDField.value, null, postData);
    else
        getLatestRoute.post("latestRouteData.aspx", null, postData);
        
    //getLatestRoute.post("latestRouteData.aspx", null, postData);  
}


function iPhoneSetRefreshMapInterval()
{
    if(!refreshMapIntervalID)
        refreshMapIntervalID = window.setInterval("iPhoneGetLatestPoints()", 10000);
}

function iPhoneResetRefreshMapInterval()
{
    clearRefreshMapInterval();
    iPhoneSetRefreshMapInterval();
}

//place the marker on the place show the popup on click of that marker
function iphonePlaceMarker(resultLat, resultLng, message, markerPointIcon, type)
{   
    var point = new GLatLng(resultLat,resultLng);

    var iconFile = "green-dot.png";

    if (markerPointIcon)
        iconFile = markerPointIcon; 
        
    var icon = customizeMarker(iconFile);

    var marker = null;
    
	var html = null;
	var htmlmessage = null;
	
	if (message != "")
	    marker = new GMarker(point, icon);
	else
        marker = new GMarker(point);

	map.addOverlay(marker);
	
	var markerObj = new Object();
	markerObj.distanceFrmPrePoint = distanceFromPrePoint;
	markerObj.marker = marker;
	markerObj.type = 3;
	
	allMarkers.push(markerObj);
}


function showMapOnIphone()
{      
    if(map)             // dont recreate the map id already exists
        return;
        
    if (GBrowserIsCompatible())
    {    
        map = new GMap2($("map"));   
        map.addControl(new GLargeMapControl());
        map.addControl(new GMenuMapTypeControl());
        map.enableScrollWheelZoom();
        map.doubleClickZoomEnabled();
//        map.addControl(new GOverviewMapControl());
//        map.addControl(new GZoomControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(214, 8)));
        
        map.enableContinuousZoom();

        GEvent.addListener(map, "zoomend", function(oldzoom, zoom) 
        { 
            zoomLevel=zoom; 
        });   
    }  
    else
    {
        alert("You are using a browser which is incompatible with Google Maps.");
    }  
}


function setMapContainerParam()
{
    var dim = $getWindowDim();
       
    var mapDiv = $("map");
   
    var height = dim.height; 
    var width = dim.width; 
    mapDiv.style.width = width + "px";   
    mapDiv.style.height = height + "px"; 
}

// function to set friends on map
function showFriendsOnMap(respnseXml)
{
    /*XML 
        <enroute>
            <user pin="lxovuo" firstName="raj" lastName="curwen" imagepath="uploadedImages/80381ba5-e796-44ca-af3a-5f390be2f937_42x40.jpg" tripName="quickTrip">
                <routedata pin=\"" + pin + "\" lat=\"" + lat + "\" lon=\"" + lon + "\" message=\"" + message + "\" timestamp=\"" + messageDateTime + "\" />";
            </user>
            
            <user pin="uyetcf" firstName="Karan" lastName="Chhabra" imagepath="uploadedImages/"></user>
            <user pin="wizkid" firstName="Amit" lastName="Yadav" imagepath="uploadedImages/3202955a-3580-418f-b69b-34a1591551ab_42x40.jpg"></user>
        </enroute>
    */
    
    respnseXml = $decodeText(respnseXml);
    var isNoTrip = true;
    
    var xmlObj = createXmlObject(respnseXml); 
   
    var noTrip = $("noTrip");
    var mapLocalVar = $("map");
    var mapShow = $("showMap");
    var tripStatus = $("tripStatus");

    var bounds = new GLatLngBounds();
            
    var point = null;
        
    if(xmlObj.validXml)
    {
        var user = xmlObj.xmlDoc.getElementsByTagName("user");           
        var point = null;
        var count = 0;
         
        for(var i= 0; i < user.length; i++)
        {      
            var imagepath = user[i].getAttribute("imagepath");
            var firstName = user[i].getAttribute("firstname");
            var lastName = user[i].getAttribute("lastname");
            var tripName = user[i].getAttribute("tripname");
                 
            var routedata = user[i].getElementsByTagName("routedata");

//            if(routedata.length > 0)
//            {
                isNoTrip = false;
                var fullName = firstName + " " + lastName;
                var pin = user[i].getAttribute("pin");
                var lat = user[i].getAttribute("lat");
                var lon = user[i].getAttribute("lon");
                var message =  $decodeText(user[i].getAttribute("message"));
                var timestamp = user[i].getAttribute("timestamp");
                point = new GLatLng(lat, lon);

                startMarkerPoint = point;
                
                if(count == 0)
                {
                    noTrip.style.display = "none";
                    mapLocalVar.style.display = "";
                    mapShow.style.display = "";
                    showMap();
                    setMapHeight(35);
                    
                    startMarkerPoint = point;
                    setCenterToPoint(point);
                    bounds.extend(point);

                }
                
                count++;
                bounds.extend(point);

                var userMessageData = new Object();

                userMessageData.message = message;
                userMessageData.point = point;
                userMessageData.messageDateTime = timestamp;
                userMessageData.pin = pin;
                userMessageData.fullName = fullName;

                if(tripName.toLowerCase() == "quicktrip")
                    userMessageData.status = "On Quick Trip";
                else
                    userMessageData.status = "On Trip " + tripName;
                                
                placePicAtPoint(pin, lat, lon, message, timestamp, userMessageData, imagepath, fullName);
            //}
        }

        if(isNoTrip)
        {
            mapLocalVar.style.display = "none";
            mapShow.style.display = "";
            noTrip.style.display = "";
        }  
        else
        {
            //setDistanceCovered(point);
            map.setZoom(map.getBoundsZoomLevel(bounds));
            map.setCenter(bounds.getCenter());
        }
    } 
}

function placePicAtPoint(pin, resultLat, resultLng, message, messageDateTime, userMessageData, markerPointIcon)
{
    if (typeof (messageDateTime) == "undefined")
        messageDateTime = new Date();

    var point = new GLatLng(resultLat,resultLng);

    var icon = null;
    
    if(markerPointIcon)
        icon = customizeMarker(markerPointIcon);

    var marker = null;
    
	var html = null;
	var htmlmessage = null;
	var distanceMessage = "";
	
//	if (!isQuickTrip)
//	{
//	    var distanceRemaining = distanceFromDest(point);
//	    distanceRemaining = formatDistance(distanceRemaining);
//	    distanceMessage = "Distance Left : " + distanceRemaining;
//	}
//	else
//	{
//	    var distanceCovered = distanceFromStart(point);
//	    distanceCovered = formatDistance(distanceCovered);
//	    distanceMessage = "Distance Covered : " + distanceCovered;
//	}
	
	if(icon)
	    marker = new GMarker(point, icon);
	else
	    marker = new GMarker(point);
		
	if (message != "")
	{
	    html = "<div><div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + unescape(message) + "&nbsp;&nbsp;&nbsp;" 
	            + "&nbsp;&nbsp;<input type='button' title=\"Follow " + userMessageData.fullName +"\" onclick=\"showTrip('" + pin + "', 2);\" "
	            + "style=\"background-image:url(images/right-green.png); background-color:transparent;background-repeat:no-repeat;"
	            + "width:25px;border:none;cursor:pointer;height:18px;\"/></div>"
	            + "<div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'>Time : " + messageDateTime + "</div>" 
	            + "</div>";
	}
	else
	{
	    html = "<div><div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'>"
	            + "&nbsp;&nbsp;<input type='button' title=\"Follow " + userMessageData.fullName +"\" onclick=\"showTrip('" + pin + "', 2);\" "
	            + "style=\"background-image:url(images/right-green.png); background-color:transparent;background-repeat:no-repeat;"
	            + "width:25px;border:none;cursor:pointer;height:18px;\"/></div>"
	            + "<div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'>Time : " + messageDateTime + "</div>" 
	            + "</div>";
	            
//	    html = "<b style = 'color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'> Time : " + messageDateTime + "</b>" +
//	     "<br/> <span style = 'font-size:12px; font-family:Arial, Helvetica,sans-serif'>" + distanceMessage + "</span>";  
	}

    if (userMessageData)
    {
        userMessageData.marker = marker;
        fillFriendsMessage(userMessageData);
    }
    
	GEvent.addListener(marker, "click", function()
	{
	    //marker.openInfoWindowHtml(html);
	    marker.bindInfoWindowHtml(html);
	    marker.openInfoWindowHtml(html);
	});
	
	map.addOverlay(marker);
	
	//allMarkers.push(marker);
	
	if(message != "")
	    marker.openInfoWindowHtml(html);
}

function fillFriendsMessage(userMessageData)
{
    removeNoUserMessage();
    var userMessagesContainer = $("userMessagesContainer");
                    
    var d = $create("div", "", "userMessageContainer");
    d.title = userMessageData.fullName + " (" + userMessageData.pin + ")  -  " +  userMessageData.status;
    var s = $create("span", "", "ellipsisContent", userMessageData.fullName + " (" + userMessageData.pin + ")  -  " +  userMessageData.status);
    s.style.width="280px";
    s.style.paddingLeft="8px";
    
    d.appendChild(s);
    
    var point = userMessageData.marker.getPoint();
    var distanceRemaining = "";
    
//    if (!isQuickTrip)
//    {
//        distanceRemaining = formatDistance(distanceFromDest(point));
//    }
    
    var markerMessage = "<div><div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + userMessageData.pin + "&nbsp;&nbsp;&nbsp;" 
	            + "&nbsp;&nbsp;<input type='button' title=\"Follow " + userMessageData.pin +"\" onclick=\"showTrip('" + userMessageData.pin + "', 2);\" "
	            + "style=\"background-image:url(images/right-green.png); background-color:transparent;background-repeat:no-repeat;"
	            + "width:25px;border:none;cursor:pointer;height:18px;\"/></div>"
	            + "<div style='height:22px;color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'>Time : " + userMessageData.messageDateTime + "</div>" 
	            + "</div>";
	    
    //var markerMessage = "<b style = 'color:red; font-size:14px; font-family:Arial, Helvetica,sans-serif'> " + userMessageData.pin + "<br/> Time : " + userMessageData.messageDateTime + "</b>"+
                        //"<br/> <span style = 'font-size:12px; font-family:Arial, Helvetica,sans-serif'>Distance Left : " + distanceRemaining + "</span>";
                        
    d.onclick = function()
    {
        {
            map.panTo(point);
        }

        userMessageData.marker.openInfoWindow(markerMessage);
    };
            
    if(userMessagesContainer.childNodes.length == 0)
       userMessagesContainer.appendChild(d);
    else
        userMessagesContainer.insertBefore(d, userMessagesContainer.childNodes[0]);  
}

function addFriend()
{
    var mapView = $("contentBody");
    var friendsView = $("friends");
    var refreshMap = $("refreshMap");
    var addFriend = $("addFriend");
    var friendOnMapHeading = $("friendOnMapHeading");
    var sepratorManageFriend = $("sepratorManageFriend");
    var sepratorRefresh = $("sepratorRefresh");
    
    mapView.style.display = "none";
    friendsView.style.display = "";
    refreshMap.style.display = "none";
    addFriend.style.display = "none";
    sepratorManageFriend.style.display = "none";
    sepratorRefresh.style.display = "none";
    
    $setText(friendOnMapHeading, "Add/Remove friends from Map");
    
    
    var noOfRows = $("totalImgRows").value;
    
    for (var i=0; i < noOfRows; i++)
    {
        imgOnLoad(i);           
    }
}

function backToView()
{
    var mapView = $("contentBody");
    
    if(mapView.style.display == "none")
        backToMap()
    else
        window.location = "homePage.aspx";
}

function backToMap()
{
    var mapView = $("contentBody");
    var friendsView = $("friends");
    var refreshMap = $("refreshMap");
    var addFriend = $("addFriend");
    var friendOnMapHeading = $("friendOnMapHeading");
    var sepratorManageFriend = $("sepratorManageFriend");
    var sepratorRefresh = $("sepratorRefresh");

    sepratorManageFriend.style.display = "";
    mapView.style.display = "";
    friendsView.style.display = "none";
    refreshMap.style.display = "";
    addFriend.style.display = "";
    sepratorRefresh.style.display = "";
    $setText(friendOnMapHeading, "Friends on Map");
}


function toggleLHSContainer()
{

    if(!map)
        return;
    var lhsContainer = $("lhsContainer");
    var mapDiv = $("map");
    
    var lhsWasVisible = true;
    
    if(lhsContainer.style.display =="none")
    {
        lhsWasVisible = false;
        $display(lhsContainer, true);
        mapDiv.style.width = "72%";
    }   
    else
    {
        $display(lhsContainer, false);
        mapDiv.style.width = "100%";
    }
    
    map.checkResize();
}

function orderOfImportance(marker,b) 
{
    return 1;
}

function encodeMyHtml(text) 
{
     //text = escape(text.htmlToEncode.value);
     
     text = text.replace(/'/g,"&#39;");
     text = text.replace(/"/g,"&#34;");
     return text;
} 

