﻿// Globals
var map; //the GMap2 itself
var centreLat = 2.0;
var centreLon = 2.0;
var centreLatClose = 2.0;
var centreLonClose = 2.0;
var initialZoom = 1;
var closeZoom = 2;
var imageWraps = true; //SET THIS TO false TO PREVENT THE IMAGE WRAPPING AROUND

var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0, "<a href=''>.</a>");
var copyrightCollection = new GCopyrightCollection(".");
    copyrightCollection.addCopyright(copyright);
var pic_tileLayers = [new GTileLayer(copyrightCollection, 0, 17)];
var pic_customMap;
var proj;
      
//************************************************************************
// jQuery

$(document).ready(function() {
    //$("#Navigation").hide();
    $("#Content").append("init done");
});    // $(document).ready


function Initialize() { InitializeGMap(); }
function Finalize() { return GUnload(); }

function FullView() { map.setCenter(new GLatLng(centreLat, centreLon), closeZoom, pic_customMap); }
function CloseView() { map.setCenter(new GLatLng(centreLatClose, centreLonClose), initialZoom , pic_customMap); }



//************************************************************************
// GMAP

function InitializeGMap() {
    if (GBrowserIsCompatible()) {
        
        pic_tileLayers[0].getTileUrl = customGetTileURL;
        pic_tileLayers[0].isPng = function() { return false; };
        pic_tileLayers[0].getOpacity = function() { return 1.0; };
      
        proj = new CustomProjection(8, imageWraps);
        pic_customMap = new GMapType(pic_tileLayers, proj, "Pic", { maxResolution: 7, minResolution: 0, errorMessage: "Data not available" });

        map = new GMap2(document.getElementById("map"), { mapTypes: [pic_customMap] });
        var cp=new GControlPosition( G_ANCHOR_TOP_RIGHT,0 );
        map.addControl(new GSmallZoomControl(), cp );
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
        map.enableScrollWheelZoom();
        map.setCenter(new GLatLng(centreLat, centreLon), initialZoom, pic_customMap);
    }
     
}

 

function customGetTileURL(a, b) {
    //converts tile x,y into keyhole string

    var c = Math.pow(2, b);

    var d = a.x;
    var e = a.y;
    var f = "t";
    for (var g = 0; g < b; g++) {
        c = c / 2;
        if (e < c) {
            if (d < c) { f += "q" }
            else { f += "r"; d -= c }
        }
        else {
            if (d < c) { f += "t"; e -= c }
            else { f += "s"; d -= c; e -= c }
        }
    }
    return "res/img/tiles/" + f + ".jpg"
}
function CustomProjection(a, b) {
    this.imageDimension = 65536;
    this.pixelsPerLonDegree = [];
    this.pixelOrigin = [];
    this.tileBounds = [];
    this.tileSize = 256;
    this.isWrapped = b;
    var b = this.tileSize;
    var c = 1;
    for (var d = 0; d < a; d++) {
        var e = b / 2;
        this.pixelsPerLonDegree.push(b / 360);
        this.pixelOrigin.push(new GPoint(e, e));
        this.tileBounds.push(c);
        b *= 2;
        c *= 2
    }
}

CustomProjection.prototype = new GProjection();

CustomProjection.prototype.fromLatLngToPixel = function(latlng, zoom) {
    var c = Math.round(this.pixelOrigin[zoom].x + latlng.lng() * this.pixelsPerLonDegree[zoom]);
    var d = Math.round(this.pixelOrigin[zoom].y + (-2 * latlng.lat()) * this.pixelsPerLonDegree[zoom]);
    return new GPoint(c, d)
};
CustomProjection.prototype.fromLatLngToPixel = function(latlng, zoom) {
    var c = Math.round(this.pixelOrigin[zoom].x + latlng.lng() * this.pixelsPerLonDegree[zoom]);
    var d = Math.round(this.pixelOrigin[zoom].y + (-2 * latlng.lat()) * this.pixelsPerLonDegree[zoom]);
    return new GPoint(c, d)
};

CustomProjection.prototype.fromPixelToLatLng = function(pixel, zoom, unbounded) {
    var d = (pixel.x - this.pixelOrigin[zoom].x) / this.pixelsPerLonDegree[zoom];
    var e = -0.5 * (pixel.y - this.pixelOrigin[zoom].y) / this.pixelsPerLonDegree[zoom];
    return new GLatLng(e, d, unbounded)
};

CustomProjection.prototype.tileCheckRange = function(tile, zoom, tilesize) {
    var tileBounds = this.tileBounds[zoom];
    if (tile.y < 0 || tile.y >= tileBounds) { return false; }
    if (this.isWrapped) {
        if (tile.x < 0 || tile.x >= tileBounds) {
            tile.x = tile.x % tileBounds;
            if (tile.x < 0) { tile.x += tileBounds }
        }
    }
    else {
        if (tile.x < 0 || tile.x >= tileBounds) { return false; }
    }
    return true;
}

CustomProjection.prototype.getWrapWidth = function(zoom) {
    return this.tileBounds[zoom] * this.tileSize;
}

function getWindowHeight() {
    if (window.self && self.innerHeight) {
        return self.innerHeight;
    }
    if (document.documentElement && document.documentElement.clientHeight) {
        return document.documentElement.clientHeight;
    }
    return 0;
}

function resizeMapDiv() {
    //Resize the height of the div containing the map.
    //Do not call any map methods here as the resize is called before the map is created.
    var d = document.getElementById("map");
    var offsetTop = 0;
    for (var elem = d; elem != null; elem = elem.offsetParent) {
        offsetTop += elem.offsetTop;
    }
    var height = getWindowHeight() - offsetTop - 16;
    if (height >= 0) {
        d.style.height = height + "px";
    }
}
