var canvas;
var loupe;
var img;
var ratio;
var topmargin;

window.onload = function() {
    canvas = document.getElementById("canvastp1");
    var context = canvas.getContext("2d");
    img = document.getElementById("ardeche");
    var hRatio = canvas.width / img.width;
    var vRatio = canvas.height / img.height;
    ratio = Math.min(hRatio, vRatio);
    topmargin = (canvas.height - img.height * ratio) / 2;
    context.drawImage(img, 0, 0, img.width, img.height,
        0, topmargin, img.width * ratio, img.height * ratio);
    canvas.addEventListener('mousemove', zoom, false);
    canvas.addEventListener('mouseout', hide, false);

    loupe = document.getElementById("loupe");
    context = loupe.getContext("2d");
    context.drawImage(img, 0, 0);
};

function zoom(evt) {
    var mousePos = getMousePos(canvas, evt); /* get mouse position */
    loupe.style.display = "inline"; /* make glass visible */

    /* process x axis */
    var canvasXMargin = window.getComputedStyle(canvas).getPropertyValue('margin-left');
    canvasXMargin = canvasXMargin.substr(0, canvasXMargin.length - 2);
    var marginLeft = Number(canvasXMargin) + mousePos.x + 15;
    loupe.style.marginLeft = marginLeft + "px";

    /* process y axis */
    var marginTop = mousePos.y + 15;
    loupe.style.marginTop = marginTop + "px";
    var actualPos = mousePos.y - topmargin;

    /* clear and redraw glass */
    var context = loupe.getContext("2d");
    context.clearRect(0, 0, loupe.width, loupe.height);
    context.drawImage(img,
        (mousePos.x - loupe.width / 8) / ratio, (actualPos - loupe.height / 8) / ratio,
        loupe.width, loupe.height, 0, 0, loupe.width, loupe.height);
}

function getMousePos(canvas, evt) {
    var rect = canvas.getBoundingClientRect();
    return {
        x: evt.clientX - rect.left,
        y: evt.clientY - rect.top
    };
}

function hide() {
    loupe.style.display = "none";
}
