/* This script was originally found on Stack Overflow
 *
 * https://stackoverflow.com/a/63425707
 *
 * Modified by me, G2.
 */

function filter(e) {
    if (e.button != 0) {
        return;
    }

    // Find the element that was clicked on, and the parent of that element
    let target = e.target;
    let parent = target.parentElement;

    if (target.classList.contains("app")) {
        taskbarAppClicked(target, zIndex);
        return;
    }

    if (parent == null) {
        return;
    }

    let mainWindow = parent.closest('.window');

    if (mainWindow == null) {
        return;
    }

    // Move windows to front if clicked, this solution isn't great but it does work.
    moveToFront(mainWindow);

    if (!target.classList.contains("draggable") | mainWindow.classList.contains("maximized")) {
        return;
    }

    target.style.cursor = "url(assets/images/cursors/windows7_move.webp) 11 12, auto";

    parent.moving = true;

    if (e.clientX) {
        parent.oldX = e.clientX; // If they exist then use Mouse input
        parent.oldY = e.clientY;
    } else {
        parent.oldX = e.touches[0].clientX; // Otherwise use touch input
        parent.oldY = e.touches[0].clientY;
    }

    parent.oldLeft = window.getComputedStyle(parent).getPropertyValue('left').split('px')[0] * 1;
    parent.oldTop = window.getComputedStyle(parent).getPropertyValue('top').split('px')[0] * 1;

    document.onmousemove = dr;
    document.ontouchmove = dr;

    function dr(event) {
        event.preventDefault();

        if (!parent.moving) {
        return;
        }
        if (event.clientX) {
        parent.distX = event.clientX - parent.oldX;
        parent.distY = event.clientY - parent.oldY;
        } else {
        parent.distX = event.touches[0].clientX - parent.oldX;
        parent.distY = event.touches[0].clientY - parent.oldY;
        }

        parent.style.left = parent.oldLeft + parent.distX + "px";
        parent.style.top = parent.oldTop + parent.distY + "px";
    }

    function endDrag() {
        target.style.cursor = "url(assets/images/cursors/windows7_arrow.webp), auto";
        parent.moving = false;
    }

    parent.onmouseup = endDrag;
    parent.ontouchend = endDrag;
}

document.onmousedown = filter;
document.ontouchstart = filter;