var decartamap;

var zoom;
var routePoints = [];

$(document).ready(function () {
    if (typeof btnLocationGoHidden == 'undefined') {
        return;
    }
    JSRequest.setDynamicScriptTagMode();

    $(btnLocationGoHidden).hide();
    $(btnTravelDateHidden).hide();
    $(txtTravelDate).
        keydown(function (event) {
            return false;
        }).
        datepicker({
            mindate: '0d', maxDate: '3m', dateFormat: 'dd M yy', showOn: 'both',
            onSelect: function (date) {
                $(txtTravelDate).removeClass('watermark');
            }
        });

    $('#accordion ul[id$=_completionListElem]').appendTo('#accordion');
    $(btnRouteHidden).hide();
    if (typeof btnRoutePreview != 'undefined') {
        $(btnRoutePreview).click(previewClick);
    }
    //var btnRoutePreview = '# + btnRoutePreview.ClientID + ';
    //$(btnRoutePreview).click(previewClick);

    $(txtSuburb + ',' + txtStartSuburb + ',' + txtEndSuburb + ',' + txtTravelSuburb).
        autocomplete(autoCompletePath, { formatItem: function (row) { return row[0]; } }).
        result(function (event, row) { $(this).val(row[0]).next().val(row[1]); }).
        change(function () {
            $(txtRoad + ',' + txtStartRoad + ',' + txtEndRoad + ',' + txtTravelRoad).
                flushCache();
        });
    $(txtRoad).autocomplete(autoCompletePath, {
        extraParams: {
            suburb: function () { return $(txtSuburb).val().split(' - ')[0]; },
            postcode: function () { return $('#hidPostcode').val(); }
        }
    });
    $(txtStartRoad).autocomplete(autoCompletePath, {
        extraParams: {
            suburb: function () { return $(txtStartSuburb).val().split(' - ')[0]; },
            postcode: function () { return $('#hidStartPostcode').val(); }
        }
    });
    $(txtEndRoad).autocomplete(autoCompletePath, {
        extraParams: {
            suburb: function () { return $(txtEndSuburb).val().split(' - ')[0]; },
            postcode: function () { return $('#hidEndPostcode').val(); }
        }
    });
    $(txtTravelRoad).autocomplete(autoCompletePath, {
        extraParams: {
            suburb: function () { return $(txtTravelSuburb).val().split(' - ')[0]; },
            postcode: function () { return $('#hidTravelPostcode').val(); }
        }
    });

    //initMap();
    $('#mapDiv').hide();
    $('#mapPreviewClose').click(function () {
        $('#mapReplace,#mapDiv').toggle();
    });
});

/* Initialise the DeCarta map. */
function initMap() {
    decartamap = createMap($('#map_canvas'), 16, '-21 147');
    zoom = decartamap.getZoomController();
}

function getStartEnd() {
    var start = $(txtStartSuburb).val().split(' - ');
    var end = $(txtEndSuburb).val().split(' - ');
    return { startSuburb: start[0], startLGA: start[1],
        startPostcode: $('#hidStartPostcode').val(),
        startRoad: $(txtStartRoad).val().split(' - ')[0],
        endSuburb: end[0], endLGA: end[1],
        endPostcode: $('#hidEndPostcode').val(),
        endRoad: $(txtEndRoad).val().split(' - ')[0]
    };
}

function routeSearch() {
    return GeocodeRoute(HandleRouteSearch);
}

function previewClick() {
    return GeocodeRoute(HandleRoutePreview);
}

// Draw the (DeCarta) route on the map
function HandleRoutePreview(startPos, endPos) {
    var routePoints = [new Position(startPos.lat(), startPos.lng()),
        new Position(endPos.lat(), endPos.lng())];
    // Set rules of travel for determining the path of our route, and measurement.
    // Other options could be 'shortest', 'pedestrian', etc.
    var routePreference = new RoutePreference("Shortest", new UOM('KM'), "RMAN");

    routePreference.rule = "maneuver-rules";
    // Generate our route
    new RouteQuery().query(routePoints, routePreference, function (routeResponse) {
        // Simple Error checking
        if (!routeResponse) {
            $('#lblInfo').text('No routes found');
            return;
        }
        $('#mapReplace').hide();
        $('#mapDiv').show();
        decartamap.removeAllOverlays();
        decartamap.removeAllPins();
        // Decorations for our route
        var line = new DDSLine();
        line.setPositions(routeResponse.RouteGeometry);
        line.setWidth(6);
        line.setOpacity('60');
        line.setColor('(88.0.88)');
        // Add our route to the map
        decartamap.addOverlay(line);
        // Add origin and destination pins
        decartamap.addPin(new Pin(routePoints[0], null, null,
            new Icon(decartaImagePath + 'start.png', 21, 11, 42, 22)));
        decartamap.addPin(new Pin(routePoints[1], null, null,
            new Icon(decartaImagePath + 'end.png', 21, 11, 42, 22)));
        // Initialize the map over the center of our route
        decartamap.centerOnPosition(routeResponse.centerPosition, function () {
            zoom.zoomToNewLevel(zoom.getZoomLevelToFitBoundingBox(routeResponse.boundingBox));
        });
    });
}

function OnEventIdsComplete(result) {
    if (result == '') {
        $('#lblInfo').html('<span class=""errortext"">No Events found</span>');
        $(btnGo).attr('disabled', '');
        return;
    }
    $(fieldSuburbIds).attr('value', result);
    $(btnGo.ClientID).attr('disabled', '');
    $(btnRouteHidden).click();
}

function OnEventIdsError(result) {
    var stackTrace = result.get_stackTrace();
    var message = result.get_message();
    var statusCode = result.get_statusCode();
    var exceptionType = result.get_exceptionType();
    var timedout = result.get_timedOut();

    if (result == '') {
        $('#lblInfo').html('Error.');
    }
    $(btnGo).attr('disabled', '');
}

function validateSuburb(oSrc, args) {
    args.IsValid = args.Value != 'City/suburb name ' && args.Value != '';
}

function validateStreet(oSrc, args) {
    args.IsValid = args.Value != 'Road/street name' && args.Value != '';
}

function validateDate(oSrc, args) {
    args.IsValid = args.Value != 'Travel Date' && args.Value != '';
}
