﻿var lat, lng;

function OSGridToLatLong(x, y) {

//    //check to see if lat coords in the correct length
    var tempy = y + "";
//    var i = tempy.length
//    while (i < 6) {
//        tempy = tempy + "0";
//        i = i + 1;
//    }


//    //check to see if long coords in the correct length
    var tempx = x + "";
//    var j = tempx.length
//    while (j < 6) {
//        tempx = tempx + "0";
//        j = j + 1;
//    }



    var E = tempx, N = tempy;

    var a = 6377563.396, b = 6356256.910;              // Airy 1830 major & minor semi-axes
    var F0 = 0.9996012717;                             // NatGrid scale factor on central meridian
    var lat0 = 49 * Math.PI / 180, lon0 = -2 * Math.PI / 180;  // NatGrid true origin
    var N0 = -100000, E0 = 400000;                     // northing & easting of true origin, metres
    var e2 = 1 - (b * b) / (a * a);                          // eccentricity squared
    var n = (a - b) / (a + b), n2 = n * n, n3 = n * n * n;

    var lat = lat0, M = 0;
    do {
        lat = (N - N0 - M) / (a * F0) + lat;

        var Ma = (1 + n + (5 / 4) * n2 + (5 / 4) * n3) * (lat - lat0);
        var Mb = (3 * n + 3 * n * n + (21 / 8) * n3) * Math.sin(lat - lat0) * Math.cos(lat + lat0);
        var Mc = ((15 / 8) * n2 + (15 / 8) * n3) * Math.sin(2 * (lat - lat0)) * Math.cos(2 * (lat + lat0));
        var Md = (35 / 24) * n3 * Math.sin(3 * (lat - lat0)) * Math.cos(3 * (lat + lat0));
        M = b * F0 * (Ma - Mb + Mc - Md);                // meridional arc

    } while (N - N0 - M >= 0.00001);  // ie until < 0.01mm

    var cosLat = Math.cos(lat), sinLat = Math.sin(lat);
    var nu = a * F0 / Math.sqrt(1 - e2 * sinLat * sinLat);              // transverse radius of curvature
    var rho = a * F0 * (1 - e2) / Math.pow(1 - e2 * sinLat * sinLat, 1.5);  // meridional radius of curvature
    var eta2 = nu / rho - 1;

    var tanLat = Math.tan(lat);
    var tan2lat = tanLat * tanLat, tan4lat = tan2lat * tan2lat, tan6lat = tan4lat * tan2lat;
    var secLat = 1 / cosLat;
    var nu3 = nu * nu * nu, nu5 = nu3 * nu * nu, nu7 = nu5 * nu * nu;
    var VII = tanLat / (2 * rho * nu);
    var VIII = tanLat / (24 * rho * nu3) * (5 + 3 * tan2lat + eta2 - 9 * tan2lat * eta2);
    var IX = tanLat / (720 * rho * nu5) * (61 + 90 * tan2lat + 45 * tan4lat);
    var X = secLat / nu;
    var XI = secLat / (6 * nu3) * (nu / rho + 2 * tan2lat);
    var XII = secLat / (120 * nu5) * (5 + 28 * tan2lat + 24 * tan4lat);
    var XIIA = secLat / (5040 * nu7) * (61 + 662 * tan2lat + 1320 * tan4lat + 720 * tan6lat);

    var dE = (E - E0), dE2 = dE * dE, dE3 = dE2 * dE, dE4 = dE2 * dE2, dE5 = dE3 * dE2, dE6 = dE4 * dE2, dE7 = dE5 * dE2;
    lat = lat - VII * dE2 + VIII * dE4 - IX * dE6;
    var lon = lon0 + X * dE - XI * dE3 + XII * dE5 - XIIA * dE7;

    return (lat.toDeg() + ", " + lon.toDeg());
}

Number.prototype.toDeg = function() {  // convert radians to degrees (signed)
    return this * 180 / Math.PI;
}

function SplitCords(cords) {

    var myString = cords;
    var myArray = myString.split(',');
    lat = myArray[0]
    lng = myArray[1]

}

function load(bDefaultLocation) {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(lat, lng), 10);
        loadData(map, bDefaultLocation);
    }
}

function loadIrishMap() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(53.2739084, -7.4945478), 7);
        loadData(map);
    }
}

var display;
var arrLocations = new Array();
var baseIcon = new GIcon();

baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);


// A function to create the marker and set up the event window
function createMarker(point, status, html) {
    var marker
    ChoseIcon(status);
    marker = new GMarker(point, baseIcon);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function ChoseIcon(status) {
    switch (status) {
        case "0":
            baseIcon.image = "/content/images/map/homeIcon.png";
            break;
        case "1":
            baseIcon.image = "/content/images/map/yellowIcon.png";
            break;
        case "5":
        case "7":
            baseIcon.image = "/content/images/map/redIcon.png";
            break;
        case "3":
            baseIcon.image = "/content/images/map/blueIcon.png";
            break;
        case "4":
        case "2":
        case "6":
            baseIcon.image = "/content/images/map/greenIcon.png";
            break;
        default:
            baseIcon.image = "/content/images/map/yellowIcon.png";
    }

}

/*
* convert geodesic co-ordinates to OS grid reference
*   see www.gps.gov.uk/guidecontents.asp Annex C
*/
function LatLongToOSGrid(lt, ln) {
    var lat = lt * Math.PI / 180, lon = ln * Math.PI / 180;

    var a = 6377563.396, b = 6356256.910;          // Airy 1830 major & minor semi-axes
    var F0 = 0.9996012717;                         // NatGrid scale factor on central meridian
    var lat0 = (49).toRad(), lon0 = (-2).toRad();  // NatGrid true origin
    var N0 = -100000, E0 = 400000;                 // northing & easting of true origin, metres
    var e2 = 1 - (b * b) / (a * a);                      // eccentricity squared
    var n = (a - b) / (a + b), n2 = n * n, n3 = n * n * n;

    var cosLat = Math.cos(lat), sinLat = Math.sin(lat);
    var nu = a * F0 / Math.sqrt(1 - e2 * sinLat * sinLat);              // transverse radius of curvature
    var rho = a * F0 * (1 - e2) / Math.pow(1 - e2 * sinLat * sinLat, 1.5);  // meridional radius of curvature
    var eta2 = nu / rho - 1;

    var Ma = (1 + n + (5 / 4) * n2 + (5 / 4) * n3) * (lat - lat0);
    var Mb = (3 * n + 3 * n * n + (21 / 8) * n3) * Math.sin(lat - lat0) * Math.cos(lat + lat0);
    var Mc = ((15 / 8) * n2 + (15 / 8) * n3) * Math.sin(2 * (lat - lat0)) * Math.cos(2 * (lat + lat0));
    var Md = (35 / 24) * n3 * Math.sin(3 * (lat - lat0)) * Math.cos(3 * (lat + lat0));
    var M = b * F0 * (Ma - Mb + Mc - Md);              // meridional arc

    var cos3lat = cosLat * cosLat * cosLat;
    var cos5lat = cos3lat * cosLat * cosLat;
    var tan2lat = Math.tan(lat) * Math.tan(lat);
    var tan4lat = tan2lat * tan2lat;

    var I = M + N0;
    var II = (nu / 2) * sinLat * cosLat;
    var III = (nu / 24) * sinLat * cos3lat * (5 - tan2lat + 9 * eta2);
    var IIIA = (nu / 720) * sinLat * cos5lat * (61 - 58 * tan2lat + tan4lat);
    var IV = nu * cosLat;
    var V = (nu / 6) * cos3lat * (nu / rho - tan2lat);
    var VI = (nu / 120) * cos5lat * (5 - 18 * tan2lat + tan4lat + 14 * eta2 - 58 * tan2lat * eta2);

    var dLon = lon - lon0;
    var dLon2 = dLon * dLon, dLon3 = dLon2 * dLon, dLon4 = dLon3 * dLon, dLon5 = dLon4 * dLon, dLon6 = dLon5 * dLon;

    var N = I + II * dLon2 + III * dLon4 + IIIA * dLon6;
    var E = E0 + IV * dLon + V * dLon3 + VI * dLon5;
    return (Math.round(E) + "," + Math.round(N))
    // return gridrefNumToLet(E, N, 8);
}

// extend Number object with methods for converting degrees/radians

Number.prototype.toRad = function() {  // convert degrees to radians
    return this * Math.PI / 180;
}
