﻿//// Maptraveler ( © 2007 buienradar.nl)
//// Version		1.0
//// Author		B. Hendriks
////
//// Maptraveler is a script that displays parts of a (map)image, and enables the navigation and zoom on these images.
//// 

//// Global variables ////
// Variables for mapdisplaystatus
var x = 1;
var y = 1;
var zoomfactor = 1;
// Variable for map part definition
// First map contains of only one image
var mapsizes = new Array(new Array(640, 480, 1),
                       new Array(1600, 1200, 5),
					   new Array(3200, 2400, 10));
// Location of the mappart images
// var mapimgpath = "http://www2.sat24.com/";
var mapimgpath = "";
// Name of map destination object 
var mapdestination = "map";
// Viewersize
var viewerSizeX = 0;
var viewerSizeY = 0;

//// public functions ////
function init(viewerWidth, viewerHeight, startX, startY, zoom) {
    zoomfactor = zoom;
    x = startX;
    y = startY;
    viewerSizeX = viewerWidth;
    viewerSizeY = viewerHeight;
    draw();
}

function navigate(xOffset, yOffset) {
    calculatedsize = (viewerSizeX / (mapsizes[zoomfactor - 1][0] / mapsizes[zoomfactor - 1][2]));

    if (x + xOffset > 0 && x + xOffset <= (mapsizes[zoomfactor - 1][2] - (calculatedsize - 1))) {
        if (y + yOffset > 0 && y + yOffset <= (mapsizes[zoomfactor - 1][2] - (calculatedsize - 1))) {
            x = x + xOffset;
            y = y + yOffset;
            draw();
        }
    }
}

function zoom(zoomrate) {
    var newZoomFactor = zoomfactor + zoomrate;
    // ch eck if zoming out of the maplimits
    if (zoomfactor + zoomrate > 0 && zoomfactor + zoomrate <= mapsizes.length) {
        x = Math.floor((((x - 1) / mapsizes[zoomfactor - 1][2]) * mapsizes[newZoomFactor - 1][2]) + 1);
        y = Math.floor((((y - 1) / mapsizes[zoomfactor - 1][2]) * mapsizes[newZoomFactor - 1][2]) + 1);

        zoomfactor = newZoomFactor;
        draw();
    }
}

//// private functions ////
function draw() {
    if (document.getElementById(mapdestination) == null) return;
    document.getElementById(mapdestination).innerHTML = "";
    for (newY = y; newY < (y + (viewerSizeX / (mapsizes[zoomfactor - 1][0] / mapsizes[zoomfactor - 1][2]))); newY++) {
        for (newX = x; newX < (x + (viewerSizeX / (mapsizes[zoomfactor - 1][0] / mapsizes[zoomfactor - 1][2]))); newX++) {
            imgfilename = "image.ashx?country=eu&type=zoom&format=" + mapsizes[zoomfactor - 1][0] + "x" + mapsizes[zoomfactor - 1][1] + PadDigits(newY, 3) + PadDigits(newX, 3) + "&rnd=" + Math.round(Math.random() * 1000000);
            imgtag = "<img src='" + mapimgpath + imgfilename + "' width='" + ((mapsizes[zoomfactor - 1][0] / mapsizes[zoomfactor - 1][2]) - 15) + "' height='" + (mapsizes[zoomfactor - 1][1] / mapsizes[zoomfactor - 1][2]) + "' alt='" + imgfilename + "' />";
            document.getElementById(mapdestination).innerHTML += imgtag;
        }
        document.getElementById(mapdestination).innerHTML += "<br />";
    }
}

function PadDigits(n, totalDigits) {
    n = n.toString();
    var pd = '';
    if (totalDigits > n.length) {
        for (i = 0; i < (totalDigits - n.length); i++) {
            pd += '0';
        }
    }
    return pd + n.toString();
}