﻿if (typeof (EIS) == 'undefined') EIS = {};

EIS.TravelTime = function() {

    this.drawMarkerWithTabWindow = drawMarkerWithTabWindow;
    this.removeTravelTimeOverlay = removeTravelTimeOverlay;
    this.formatTravelTime = formatTravelTime;
    this.getWelcmCenterTravelTime = getWelcmCenterTravelTime;
    this.createPublicDisplayCenterMarkerWithEWindow = createPublicDisplayCenterMarkerWithEWindow;
    this.createPublicDisplayDestinationMarkersWithEWindow = createPublicDisplayDestinationMarkersWithEWindow;
    this.createEWinString = createEWinString;
    this.getWelcmCenterTravelTimeByTMCSetID = getWelcmCenterTravelTimeByTMCSetID;
    this.getWelcmCenterTravelTimeByTMCSetIDViaProxy = getWelcmCenterTravelTimeByTMCSetIDViaProxy;

    function drawMarkerWithTabWindow(_imgURL, _gLatLng, _travelInfo, _map, _objOverlay, _display) {
        var newIcon = new GIcon(G_DEFAULT_ICON);
        newIcon.image = _imgURL;
        var markerOptions = { icon: newIcon };
        var marker = new GMarker(_gLatLng, markerOptions);
        GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(_travelInfo) });
        var arryOvery = _objOverlay.getValue()
        arryOvery.push(marker);
        _objOverlay.setValue(arryOvery);
        _map.addOverlay(marker);
        if (_display) marker.openInfoWindowHtml(_travelInfo);

    }


    function removeTravelTimeOverlay(_map, _ovlayArry) {
        if (_ovlayArry.length > 0) {
            for (i = 0; i < _ovlayArry.length; i++) {
                _map.removeOverlay(_ovlayArry[i]);
            }

            // reset the _ovlayArry length
            _ovlayArry.length = 0;
        }
    }


    function formatTravelTime(dMinute) {

        if (dMinute >= 60) {
            var Hours = Math.floor(dMinute / 60);
            var Minutes = dMinute % 60;
            return Hours + " hr " + ((Minutes > 0) ? Minutes + " min" : "");
        }
        else {
            return dMinute + " min";
        }


    }

    function getWelcmCenterTravelTime(_token, _routeid) {
        //        alert(_routeid);
        var tUrl = "InrixProxy1.ashx?Action=";
        tUrl += "GetRoute&token=" + _token;
        //        alert(_odpairID);
        tUrl += "&RouteId=" + _routeid;

        try {

            var xmlLoader = new EIS.LoadXml(tUrl, null, "GET", null, false);

            xmlLoader.load();

            //alert(xmlLoader._method);

            var xml = xmlLoader.getXmlResponse();

            // get traveltime, distance
            var route = xml.getElementsByTagName("Route")[0];
            //            alert(route.getAttribute("travelTimeMinutes"));
            //            alert(route.getAttribute("totalDistance"));
            // must reset the array first 
            totalTravelTime.length = 0;
            distance.length = 0;

            //only one data element in the array
            totalTravelTime.push(route.getAttribute("travelTimeMinutes"));
            distance.push(route.getAttribute("totalDistance"));

        }
        catch (err) {
            //            alert('An error occurred: " + err.description);
            totalTravelTime.length = 0;
            distance.length = 0;
            totalTravelTime.push('-1');
            distance.push('-1');
        }

    }

    function getWelcmCenterTravelTimeByTMCSetIDViaProxy(_token, _tmcsetID) {
        var aryTTM = new Array();
        var aryTMCLength = new Array();
        var aryTTMNormal = new Array();
        var _minute;
        var _speed;
        var _refspeed;
        var _length;
        var _currentTTM;
        var _normalTTM;
        var tUrl;

        tUrl = "InrixProxy1.ashx?Action=";
        tUrl += "GetRealTimeRoadSpeedInSet&token=" + _token;
        //        alert(_odpairID);
        tUrl += "&TmcSetId=" + _tmcsetID;

        try {

            var xmlLoader = new EIS.LoadXml(tUrl, null, "GET", null, false);

            xmlLoader.load();

            //alert(xmlLoader._method);

            var xml = xmlLoader.getXmlResponse();
            //alert(xml.xml);

            $(xml).find("TMC").each(function() {
                _minute = $(this).attr("travelTimeMinutes");
                _speed = $(this).attr("speed");
                _refspeed = $(this).attr("reference");
                aryTTM.push(_minute);
                _length = parseFloat(_speed) * parseFloat(_minute) / 60.0;
                aryTMCLength.push(_length);
                // normal travel time is distance/reference speed(free flow speed)
                aryTTMNormal.push((_length / _refspeed) * 60.0);

            });


        }
        catch (err) {
            //            alert('An error occurred: " + err.description);
            totalTravelTime.length = 0;
            distance.length = 0;
            totalTravelTime.push('-1');
            distance.push('-1');
        }

        $.protify(aryTTM, true);
        _currentTTM = aryTTM.sumALL();
        //$.protify(aryTTMNormal, true);
        //_normalTTM = aryTTMNormal.sumALL();
        $.protify(aryTMCLength, true);
        _length = aryTMCLength.sumALL();

        //output data to page variables
        // must reset the array first 
        totalTravelTime.length = 0;
        distance.length = 0;

        //only one data element in the array
        totalTravelTime.push(_currentTTM);
        distance.push(_length);
    }

    // noted: function getWelcmCenterTravelTimeByTMCSetID requires jquery-protify.js to be included in the host page
    // this direct call can have xdomain script security issue
    function getWelcmCenterTravelTimeByTMCSetID(_token, _tmcsetID) {
        var aryTTM = new Array();
        var aryTMCLength = new Array();
        var aryTTMNormal = new Array();
        var _minute;
        var _speed;
        var _refspeed;
        var _length;
        var _currentTTM;
        var _normalTTM;
        var tUrl;

        tUrl = 'http://ws.inrix.com/Traffic/Inrix.ashx?Action=GetRealTimeRoadSpeedInSet&Token=' + _token + '&TmcSetId=' + _tmcsetID + '&SpeedOutputFields=Speed,Reference,TTM'

        $.ajax({
            type: "GET",
            url: tUrl,
            dataType: "xml",
            success: function(xml) {
                try {
                    txt = xml.xml;
                    $(xml).find("TMC").each(function() {
                        _minute = $(this).attr("travelTimeMinutes");
                        _speed = $(this).attr("speed");
                        _refspeed = $(this).attr("reference");
                        aryTTM.push(_minute);
                        _length = parseFloat(_speed) * parseFloat(_minute) / 60.0;
                        aryTMCLength.push(_length);
                        // normal travel time is distance/reference speed(free flow speed)
                        aryTTMNormal.push((_length / _refspeed) * 60.0);

                    });

                } catch (er) {
                    //  alert(er.description);
                    //displayRouteNotFoundMsg();  // only used for testing, not for production; function located on host page

                    totalTravelTime.length = 0;
                    distance.length = 0;
                    totalTravelTime.push('-1');
                    distance.push('-1');
                    return false;
                }
            },
            error: function(xhr, status, er) {
                //displayAjaxCallFailureMsg('TMCSet with ID ' + _TMCSetID);  // only for testing, not for production; function located on host page
                return false;
            },
            cache: false,
            async: false
        });

        $.protify(aryTTM, true);
        _currentTTM = aryTTM.sumALL();
        //$.protify(aryTTMNormal, true);
        //_normalTTM = aryTTMNormal.sumALL();
        $.protify(aryTMCLength, true);
        _length = aryTMCLength.sumALL();

        //output data to page variables
        // must reset the array first 
        totalTravelTime.length = 0;
        distance.length = 0;

        //only one data element in the array
        totalTravelTime.push(_currentTTM);
        distance.push(_length);

    }

    function createPublicDisplayCenterMarkerWithEWindow(locMarker, ewinHTML, ewinStyle, toggled, _map, _objOverlay) {

        var newIcon = new GIcon(G_DEFAULT_ICON);
        //            newIcon.image = "Image/red-pushpin.png";
        newIcon.image = "Image/icon_rt_start.png";
        var markerOptions = { icon: newIcon };
        var marker = new GMarker(locMarker, markerOptions);
        // ========== Open a *new* EWindow  ==========
        var ew = new EWindow(_map, ewinStyle);
        if (toggled == 1) {
            var _tempObj = _objOverlay.getValue()
            _tempObj.push(ew);
            _objOverlay.setValue(_tempObj);
            _tempObj = null;
        };

        _map.addOverlay(ew);
        ew.openOnMarker(marker, ewinHTML);

        return marker;
    }


    function createPublicDisplayDestinationMarkersWithEWindow(locMarker, ewinHTML, ewinStyle, toggled, _map, _objOverlay) {

        var newIcon = new GIcon(G_DEFAULT_ICON);
        newIcon.image = "Image/icon_rt_end.png";
        var markerOptions = { icon: newIcon };
        var marker = new GMarker(locMarker, markerOptions);
        var _curMap = gmap.getValue();
        // ========== Open a *new* EWindow  ==========
        var ew = new EWindow(_map, ewinStyle);
        if (toggled == 1) {
            var _tempObj = _objOverlay.getValue()
            _tempObj.push(ew);
            _objOverlay.setValue(_tempObj);
            _tempObj = null;
        };

        _map.addOverlay(ew);
        ew.openOnMarker(marker, ewinHTML);

        _map = null;
        return marker;
    }

    function createEWinString(header, content, headeronly) {
        // use table tag
        //            return '<table border="0" cellpadding="0" cellspacing="0"><tr><td width="100%" class="EWTitle" nowrap>' + header + '<\/td><\/tr>' +
        //               '<tr><td nowrap>' + content + '<\/td><\/tr><\/table>';

        // use div tag
        var sText;
        sText = '<div class="EWTitle">' + header + '</div>';
        if (headeronly == 0) {
            sText += '<div class="EWContent">' + content + '</div>';
        };
        return sText;
    }

}