﻿var gmarkers = [];
var gicons = [];
var tooltip = document.createElement("div");
var CanSend = true;
var map;
var CheckedService = 0;
var MainPort;
var shipStatus, shipBeam, shipCallsign, shipCourse, shipDepth, shipDest, shipETA, shipIMO, shipLength, shipMMSI, shipSpeed, shipService, shipDetails, shipType, lastupdate;
//---------------Downloading AIS message web service--------------------------------------------
function GetServiceWS(x, y, radius) {
    var url = "http://ship.shortseaservice.com/ShipPosition/Radius?x=" + x + "&y=" + y + "&Radius=" + radius + "&tempID=" + (new Date()).getTime() + "&jsoncallback=?";
    $.getJSON(url, function (data) {
        OnDownloadAISSuccess(data);
    });
    //    $.ajax({
    //        type: "GET",
    //        url: "http://ship.shortseaservice.com/ShipPosition/Radius?x=" + x + "&y=" + y + "&Radius=" + radius + "&tempID=" + (new Date()).getTime(),
    //        contentType: "application/json; charset=utf-8",
    //        dataType: "json",
    //        success: OnDownloadAISSuccess,
    //        failure: OnDownloadAISFailure
    //    });
}
function OnDownloadAISSuccess(result) {
    ShowMarkerts(result);
    ShowPositionsPages();
}
function OnDownloadAISFailure(result) {

}
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
function DownloadingAISByRadius(x, y, radius) {
    GetServiceWS(x, y, radius);
}
function ShowMarkerts(AisMessages) {
    SetMarkertStatus();
    for (var i = 0; i < AisMessages.length; i++) {
        var ais = AisMessages[i];
        var html = CompsitonHtml(ais);
        var point = new GLatLng(ais.X, ais.Y);
        createMarker(point, ais.ShipName, ais.Category, ais.Destination, ais.Cog, ais.MMSI,ais.ServiceID, html);
    }
    RemoveOldMarkert();

}
function CompsitonHtml(ais) {

    var eta = JsonDateToDate(ais.ETA);
    var streta = "--";
    if (eta.getFullYear() != 1900)
        streta = eta.format("ddd HH:MM");
    var lastDate = JsonDateToDate(ais.LastUpdate);
    var html = "<div>" + "<h4>" + ais.ShipName + "</h4>";  
    if (ais.ServiceID != 0) {
        html += "<a href='Service.aspx?ServiceID="+ais.ServiceID+"&RouteID="+ais.RouteID+"'>" + shipService + "</a>";
        html += "<br />" + shipStatus + ": " + ais.Status;
    }
    else {
        html += shipStatus + ": " + ais.Status;
    }
    var subhtml1;
    if (ais.ImageUrl && ais.ImageUrl != "") {
        html += "</div><div style='width:320px'>";
        subhtml1 = "<div style='float:left;width:160px'><p>";
    }
    else {
        html += "</div><div>";
        subhtml1 = "<div><p>";
    }
    subhtml1 += shipType + ": " + ais.Category
                    + "<br />" + shipSpeed + ": " + ais.Sog + " kn"
                    + "<br />" + shipCourse + ": " + ais.Cog
                    + "<br />" + shipLength + ": " + ais.Length + " m"
                    + "<br />" + shipBeam + ": " + ais.Width + " m";
//                    + "<br />" + shipDepth + ": " + ais.Depth + " m";
//    if (ais.ServiceID != 0) {
//        if (CheckedService != 0 && CheckedService == ais.ServiceID)
//            subhtml1 += "<br />" + shipDest + ": " + ais.Destination + " " + "<input type='checkbox' id='checkboxService" + ais.ServiceID + "' onclick=\"serviceBoxClick(this," + ais.ServiceID + ")\" checked class=\"CheckBox\" />";
//        else
//            subhtml1 += "<br />" + shipDest + ": " + ais.Destination + " " + "<input type='checkbox' id='checkboxService" + ais.ServiceID + "' onclick=\"serviceBoxClick(this," + ais.ServiceID + ")\" class=\"CheckBox\" />";
//    }
//    else
    subhtml1 += "<br />" + shipDest + ": " + ais.Destination;
    subhtml1 += "<br />" + shipCallsign + ": " + ais.Callsign;
    subhtml1 += "<br />" + shipETA + ": " + streta
    if (ais.ShipDetails && ais.ShipDetails != "") {
        subhtml1 += "<br /><a href='" + ais.ShipDetails + "' target='_blank'>" + shipDetails + "</a>";
    }
    subhtml1 += "<br />" + lastupdate + ": " + lastDate.format("ddd HH:MM");
    subhtml1 += "</p></div>";
    html += subhtml1;
    if (ais.ImageUrl && ais.ImageUrl != "") {
        var rightdiv = "<div style='width='155px' height='125px''><img src='" + ais.ImageUrl + "' width='150px' height='120px' /></div>";
        html += rightdiv;
    }
    else {
        //var rightdiv = "<div style='width='155px' height='125px''><img src='" + "http://photos.marinetraffic.com/ais/showphoto.aspx?size=thumb&mmsi="+ais.MMSI + "' width='150px' height='120px' /></div>";
        //html += rightdiv;
    }
    html += "</div>";
    return html;

}
function serviceBoxClick(chkBox, ServiceID) {
    var chkBoxID = "checkboxService" + ServiceID;
    ResetShip();
    if (chkBox.checked) {
        CheckedService = ServiceID;
        $("#" + chkBoxID).attr("checked", "true");
        ShowServiceShips(ServiceID);
    }
    else {
        $("#" + chkBoxID).attr("checked", "false");
        CheckedService = 0;
        myshow_all();
    }
}
function ShowServiceShips(ServiceID) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].serviceid == ServiceID) {
            gmarkers[i].show();
        }
        else {
            gmarkers[i].hide();
        }
    }
    makeSidebar();
}
//----------------------------------------------------------------------------------
//---------------Init google map----------------------------------------------------
function iniGoogleMaps(mapCenter, mapIndex) {
    map = new GMap2(document.getElementById("map_canves"));
    map.setCenter(mapCenter, mapIndex);
    map.setUIToDefault();
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();
    map.getInfoWindow();
    map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
    HiddenTooltips();
    GetServiceWS(mapCenter.y, mapCenter.x, 60);
    window.setInterval("AutoRefresh()", 45000);
    window.setInterval("AutoSetCanSend()", 10000);
    GEvent.addListener(map, "moveend", function () {
        if (CanSend) {
            AutoRefresh();
        }
    });
    myshow_all();
}
function AutoRefresh() {
    if (GBrowserIsCompatible()) {
        var center = map.getCenter();
        GetServiceWS(center.y, center.x, 60);
        CanSend = false;
    }
}
function AutoSetCanSend() {
    CanSend = true;
}

//----------------tooltips-----------------------------------------------------------
function HiddenTooltips() {
    tooltip.style.visibility = "hidden";
}
function ShowTooltips(gmarker) {
    tooltip.innerHTML = gmarker.tooltip;
    var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0, 0), true), map.getZoom());
    var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(gmarker.getPoint(), map.getZoom());
    var anchor = gmarker.getIcon().iconAnchor;
    var width = gmarker.getIcon().iconSize.width;
    var height = tooltip.clientHeight;
    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y - anchor.y - height));
    pos.apply(tooltip);
    tooltip.style.visibility = "visible";
}
//---------------ship market----------------------------------------------------------
function AddMarkert(gmarket) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].mmsi === gmarket.mmsi) {
            map.removeOverlay(gmarkers[i]);
            gmarkers[i] = gmarket;
            map.addOverlay(gmarket);
            return;
        }
    }
    gmarkers.push(gmarket);
    map.addOverlay(gmarket);
    return;
}
function RemoveOldMarkert() {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].isNew == false) {
            map.removeOverlay(gmarkers[i]);
            gmarkers.splice(i, 1);
        }
    }
}
function SetMarkertStatus() {
    for (var i = 0; i < gmarkers.length; i++) {
        gmarkers[i].isNew = false;
    }
}
function createMarker(point, name, category, dest, cog, mmsi,ServiceID, html) {
    var gicon = GetShipIcon(category, cog);
    var marker = new GMarker(point, gicon);
    marker.tooltip = '<div class="tooltip">' + name + "<br />" + category + '</div>';
    marker.mycategory = category;
    marker.myname = name;
    marker.mydest = dest;
    marker.mmsi = mmsi;
    marker.serviceid = ServiceID;
    marker.isNew = true;
    GEvent.addListener(marker, "click", function () {
        marker.openInfoWindowHtml(html);
    });
    AddMarkert(marker);
    GEvent.addListener(marker, "mouseover", function () {
        ShowTooltips(marker);
    });
    GEvent.addListener(marker, "mouseout", function () {
        HiddenTooltips();
    });
}
//---------end market------------------------------------------------------------------
//---------------create ship gicons----------------------------------------------------
function GetShipIcon(category, cog) {
    var intCategory = 1;
    if (category == "passenger") {
        intCategory = 2;
    }
    else if (category == "cargo") {
        intCategory = 3;
    }
    else if (category == "tanker") {
        intCategory = 4;
    }
    else if (category == "highspeed" || category == "pleasure" || category == "sailing" || category == "notdefined") {
        intCategory = 5;
    }
    else if (category == "fishing" || category == "search" || category == "military" || category == "towing" || category == "pilot" || category == "tug") {
        intCategory = 1;
    }
    iniShipIcons(intCategory);
    var Defaulticon = "Default" + intCategory;
    var gicon;
    if (!cog || cog == "" || cog == 0)
        gicon = gicons[Defaulticon];
    else if (cog > 348 || cog <= 11)
        gicon = gicons[Defaulticon + "N"];
    else if (cog > 11 && cog <= 33)
        gicon = gicons[Defaulticon + "NE1"];
    else if (cog > 33 && cog <= 56)
        gicon = gicons[Defaulticon + "NE2"];
    else if (cog > 56 && cog <= 78)
        gicon = gicons[Defaulticon + "NE3"];
    else if (cog > 78 && cog <= 101)
        gicon = gicons[Defaulticon + "E"];
    else if (cog > 101 && cog <= 123)
        gicon = gicons[Defaulticon + "ES1"];
    else if (cog > 123 && cog <= 146)
        gicon = gicons[Defaulticon + "ES2"];
    else if (cog > 146 && cog <= 168)
        gicon = gicons[Defaulticon + "ES3"];
    else if (cog > 168 && cog <= 191)
        gicon = gicons[Defaulticon + "S"];
    else if (cog > 191 && cog <= 213)
        gicon = gicons[Defaulticon + "SW1"];
    else if (cog > 213 && cog <= 236)
        gicon = gicons[Defaulticon + "SW2"];
    else if (cog > 236 && cog <= 258)
        gicon = gicons[Defaulticon + "SW3"];
    else if (cog > 258 && cog <= 281)
        gicon = gicons[Defaulticon + "W"];
    else if (cog > 281 && cog <= 303)
        gicon = gicons[Defaulticon + "WN1"];
    else if (cog > 303 && cog <= 326)
        gicon = gicons[Defaulticon + "WN2"];
    else if (cog > 326 && cog <= 348)
        gicon = gicons[Defaulticon + "WN3"];
    else
        gicon = gicons[Defaulticon];
    return gicon;
}
function CreateShipIcon(imgRoot, shipname, direction) {
    var Ship = new GIcon(G_DEFAULT_ICON, imgRoot + shipname + "_" + direction + ".png");
    Ship.iconSize = new GSize(24, 24);
    Ship.iconAnchor = new GPoint(12, 12); ;
    Ship.infoWindowAnchor = new GPoint(11, 11); ;
    Ship.shadowSize = new GSize(1, 1);
    return Ship;
}
function iniShipIcons(Category) {
    var Defaulticon = "Default" + Category;
    if (gicons[Defaulticon]) {
    }
    else {
        var imgRoot = 'http://ship.shortseaservice.com/Content/images/ships/';
        var shipname = "Ship" + Category;
        var ShipIconDefault = CreateShipIcon(imgRoot, shipname, "E");
        var ShipE = CreateShipIcon(imgRoot, shipname, "E");
        var ShipS = CreateShipIcon(imgRoot, shipname, "S");
        var ShipW = CreateShipIcon(imgRoot, shipname, "W");
        var ShipN = CreateShipIcon(imgRoot, shipname, "N");
        var ShipNE1 = CreateShipIcon(imgRoot, shipname, "NE1");
        var ShipNE2 = CreateShipIcon(imgRoot, shipname, "NE2");
        var ShipNE3 = CreateShipIcon(imgRoot, shipname, "NE3");
        var ShipES1 = CreateShipIcon(imgRoot, shipname, "ES1");
        var ShipES2 = CreateShipIcon(imgRoot, shipname, "ES2");
        var ShipES3 = CreateShipIcon(imgRoot, shipname, "ES3");
        var ShipSW1 = CreateShipIcon(imgRoot, shipname, "SW1");
        var ShipSW2 = CreateShipIcon(imgRoot, shipname, "SW2");
        var ShipSW3 = CreateShipIcon(imgRoot, shipname, "SW3");
        var ShipWN1 = CreateShipIcon(imgRoot, shipname, "WN1");
        var ShipWN2 = CreateShipIcon(imgRoot, shipname, "WN2");
        var ShipWN3 = CreateShipIcon(imgRoot, shipname, "WN1");
        gicons[Defaulticon + "E"] = ShipE;
        gicons[Defaulticon + "S"] = ShipS;
        gicons[Defaulticon + "W"] = ShipW;
        gicons[Defaulticon + "N"] = ShipN;
        gicons[Defaulticon + "NE1"] = ShipNE1;
        gicons[Defaulticon + "NE2"] = ShipNE2;
        gicons[Defaulticon + "NE3"] = ShipNE3;
        gicons[Defaulticon + "ES1"] = ShipES1;
        gicons[Defaulticon + "ES2"] = ShipES2;
        gicons[Defaulticon + "ES3"] = ShipES3;
        gicons[Defaulticon + "SW1"] = ShipSW1;
        gicons[Defaulticon + "SW2"] = ShipSW2;
        gicons[Defaulticon + "SW3"] = ShipSW3;
        gicons[Defaulticon + "WN1"] = ShipWN1;
        gicons[Defaulticon + "WN2"] = ShipWN2;
        gicons[Defaulticon + "WN3"] = ShipWN3;
        gicons[Defaulticon] = ShipIconDefault;
    }
}
//---------------end create ship gicons----------------------------------------------------

//----------------------positions pages----------------------------------------------------
function ResetShip() {
    var sailingbox = document.getElementById("sailingbox");
    var fishingbox = document.getElementById("fishingbox");
    var towingbox = document.getElementById("towingbox");
    var militarybox = document.getElementById("militarybox");
    var pleasurebox = document.getElementById("pleasurebox");
    var highspeedbox = document.getElementById("highspeedbox");
    var pilotbox = document.getElementById("pilotbox");
    var searchbox = document.getElementById("searchbox");
    var tugbox = document.getElementById("tugbox");
    var passengerbox = document.getElementById("passengerbox");
    var cargobox = document.getElementById("cargobox");
    var tankerbox = document.getElementById("tankerbox");
    var notdefinedbox = document.getElementById("notdefinedbox");
    var CheckboxMainPort = document.getElementById("CheckboxMainPort");

    if (!sailingbox) {
        return;
    }

    sailingbox.checked = true;
    fishingbox.checked = true;
    towingbox.checked = true;
    militarybox.checked = true;
    pleasurebox.checked = true;
    highspeedbox.checked = true;
    pilotbox.checked = true;
    searchbox.checked = true;
    tugbox.checked = true;
    passengerbox.checked = true;
    cargobox.checked = true;
    tankerbox.checked = true;
    notdefinedbox.checked = true;
    CheckboxMainPort.checked = false;
}
function ShowPositionsPages() {
    var sailingbox = document.getElementById("sailingbox");
    var fishingbox = document.getElementById("fishingbox");
    var towingbox = document.getElementById("towingbox");
    var militarybox = document.getElementById("militarybox");
    var pleasurebox = document.getElementById("pleasurebox");
    var highspeedbox = document.getElementById("highspeedbox");
    var pilotbox = document.getElementById("pilotbox");
    var searchbox = document.getElementById("searchbox");
    var tugbox = document.getElementById("tugbox");
    var passengerbox = document.getElementById("passengerbox");
    var cargobox = document.getElementById("cargobox");
    var tankerbox = document.getElementById("tankerbox");
    var notdefinedbox = document.getElementById("notdefinedbox");
    var CheckboxMainPort = document.getElementById("CheckboxMainPort");
    if (CheckedService == 0) {
        if (!tugbox) {
            myshow_all();
            return;
        }
        if (tugbox && tugbox.checked) {
            show("tug");
        }
        else {
            hide("tug");
        }
        if (passengerbox && passengerbox.checked) {
            show("passenger");
        }
        else {
            hide("passenger");
        }
        if (cargobox && cargobox.checked) {
            show("cargo");
        }
        else {
            hide("cargo");
        }
        if (tankerbox && tankerbox.checked) {
            show("tanker");
        }
        else {
            hide("tanker");
        }
        if (notdefinedbox && notdefinedbox.checked) {
            show("notdefined");
        }
        else {
            hide("notdefined");
        }
        if (sailingbox && sailingbox.checked) {
            show("sailing");
        }
        else {
            hide("sailing");
        }
        if (fishingbox && fishingbox.checked) {
            show("fishing");
        }
        else {
            hide("fishing");
        }
        if (towingbox && towingbox.checked) {
            show("towing");
        }
        else {
            hide("towing");
        }
        if (militarybox && militarybox.checked) {
            show("military");
        }
        else {
            hide("military");
        }

        if (pleasurebox && pleasurebox.checked) {
            show("pleasure");
        }
        else {
            hide("pleasure");
        }
        if (highspeedbox && highspeedbox.checked) {
            show("highspeed");
        }
        else {
            hide("highspeed");
        }
        if (pilotbox && pilotbox.checked) {
            show("pilot");
        }
        else {
            hide("pilot");
        }
        if (searchbox && searchbox.checked) {
            show("search");
        }
        else {
            hide("search");
        }
        if (CheckboxMainPort && CheckboxMainPort.checked) {
            ShowDestMainPort(CheckboxMainPort, MainPort);
        }
        else {
            makeSidebar();
        }
    }
    else {
        ResetShip();
        ShowServiceShips(CheckedService);
    }
}
function show(category) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].mycategory == category) {
            gmarkers[i].show();
        }
    }
    var chkbox = document.getElementById(category + "box");
    if (chkbox)
        chkbox.checked = true;
}
function hide(category) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].mycategory == category) {
            gmarkers[i].hide();
        }
    }
    var chkbox = document.getElementById(category + "box");
    if (chkbox)
        chkbox.checked = false;
    map.closeInfoWindow();
}
function makeSidebar() {
    var html = "";
    for (var i = 0; i < gmarkers.length; i++) {
        if (!gmarkers[i].isHidden() && gmarkers[i].myname!="") {
            html += '<a class="shiplist" href="javascript:myclick(' + i + ')" onmouseover="mymouseover(' + i + ')" onmouseout="mymouseout()" >' + gmarkers[i].myname + '</a><br>';
        }
    }
    var mapleft = document.getElementById("div_shiptable");
    if (mapleft)
        mapleft.innerHTML = html;
}
function myshow_all() {
    show("military");
    show("fishing");
    show("towing");
    show("sailing");
    show("pleasure");
    show("highspeed");
    show("pilot");
    show("search");
    show("tug");
    show("passenger");
    show("cargo");
    show("tanker");
    show("notdefined");
    makeSidebar();
}
function myhide_all() {
    hide("military");
    hide("fishing");
    hide("towing");
    hide("sailing");
    hide("pleasure");
    hide("highspeed");
    hide("pilot");
    hide("search");
    hide("tug");
    hide("passenger");
    hide("cargo");
    hide("tanker");
    hide("notdefined");
    makeSidebar();
}
function ShowDestMainPort(box, portname) {
    if (box.checked) {
        ShowHideMainDest(0, portname)
    }
    else {
        ShowHideMainDest(1, portname)
    }
    makeSidebar();

}
function ShowHideMainDest(type, portname) {
    portname = portname.toLowerCase();
    if (type == 0) {
        for (var i = 0; i < gmarkers.length; i++) {
            if (gmarkers[i].mydest.toLowerCase().indexOf(portname) != -1) {
                gmarkers[i].show();
            }
            else
                gmarkers[i].hide();
        }
    }
    else {
        myshow_all();
    }
}

//-----------------------------------------------------------------------------------------
