﻿//PREFIX ALL VARIABLES WITH CC AS WE DO NOT WANT THESE INTEREFERING 
//WITH ANY THIRD PARTY JAVASCRIPT AT A LATER DATE

var $j = jQuery.noConflict();
var cc_map = null;
var cc_mapRestrictionUnit = null;
var cc_MapStartPanPoint = null;
var cc_CurrentLat = null;
var cc_CurrentLon = null;
var cc_CurrentTitle = null;
var cc_CurrentImage = null;
var cc_CurrentAddress = null;
var cc_CurrentSiteType = null;
var cc_CurrentSiteId = null;
var cc_MapWebService = "/caravanclubapps/web services/MapWebService.asmx/";
var cc_ContentType = "application/json;charset=utf-8";
var cc_MapType = VEDashboardSize.Small;
var cc_MemberLoginUrl = null;

//Initialize Map
function InitalizeMap() {
    cc_map = new VEMap('myMap');
    cc_map.SetDashboardSize(cc_MapType);
    // NOTE: Need to re-factor anything using ctl00_MainContentPlaceHolder_vetoken to use class selector
    var tokenControl = document.getElementById("ctl00_MainContentPlaceHolder_vetoken");
    if (tokenControl == null) {
        tokenControl = $j(".vetoken");
    }
    if (tokenControl != null) {
        if (tokenControl.value != "") {
            cc_map.SetClientToken(tokenControl.value);
        }
    }
    
    var memberLoginUrl = document.getElementById("ctl00_MainContentPlaceHolder_MemberLoginUrl");
    if (memberLoginUrl != null) {
        cc_MemberLoginUrl = memberLoginUrl.value;
    }
    cc_map.LoadMap(new VELatLong(54.07100021839142, -2.783999517560005), 6);
    cc_map.AttachEvent("onclick", PixelClick);
    cc_map.AttachEvent("onendzoom", map_onendzoom);
    cc_map.AttachEvent("onendpan", map_onendpan);
    cc_map.AttachEvent("onstartpan", map_onstartpan);
}

//Geocode calculations for Restricing user on panning the map
var GeoCodeCalc = {};
GeoCodeCalc.EarthRadiusInMiles = 3956.0;
GeoCodeCalc.EarthRadiusInKilometers = 6367.0;
GeoCodeCalc.ToRadian = function (v) { return v * (Math.PI / 180); };
GeoCodeCalc.DiffRadian = function (v1, v2) {
    return GeoCodeCalc.ToRadian(v2) - GeoCodeCalc.ToRadian(v1);
};
GeoCodeCalc.CalcDistance = function (lat1, lng1, lat2, lng2, radius) {
    return radius * 2 * Math.asin(Math.min(1, Math.sqrt((Math.pow(Math.sin((GeoCodeCalc.DiffRadian(lat1, lat2)) / 2.0), 2.0) + Math.cos(GeoCodeCalc.ToRadian(lat1)) * Math.cos(GeoCodeCalc.ToRadian(lat2)) * Math.pow(Math.sin((GeoCodeCalc.DiffRadian(lng1, lng2)) / 2.0), 2.0)))));
};

cc_mapRestrictionUnit = GeoCodeCalc.EarthRadiusInMiles;

function map_onstartpan(e) {
    //Get the current map center point before panning begins
    cc_MapStartPanPoint = cc_map.GetCenter();
}
function map_onendpan(e) {
    //Get total distance panned from map center
    var distance = GeoCodeCalc.CalcDistance(
        "54.07100021839142",
        "-2.783999517560005",
        cc_map.GetCenter().Latitude,
        cc_map.GetCenter().Longitude,
        cc_mapRestrictionUnit
        );

    //Check distance panned from original center point
    if (distance > 500) {
        //Move map back to the last point that was
        //within the desired restriction radius
        cc_map.SetCenter(cc_MapStartPanPoint);
    }
}

function map_onendzoom(e) {
    //Check if the map is zoomed out further than
    //the set restriction
    if (e.zoomLevel < 6) {
        //Zoom the map back in to the restricted area
        cc_map.SetZoomLevel(6);
    }
} 
