﻿var flashRunning = new Object();

function AttachEvent(obj, evt, fnc, useCapture) {
    if (!useCapture) useCapture = false;
    if (obj.addEventListener) {
        obj.addEventListener(evt, fnc, useCapture);
        return true;
    } else if (obj.attachEvent) {
        return obj.attachEvent("on" + evt, fnc);
    }
    else {
        MyAttachEvent(obj, evt, fnc);
        obj['on' + evt] = function() { MyFireEvent(obj, evt) };
    }
}
function MyAttachEvent(obj, evt, fnc) {
    if (!obj.myEvents) obj.myEvents = {};
    if (!obj.myEvents[evt]) obj.myEvents[evt] = [];
    var evts = obj.myEvents[evt];
    evts[evts.length] = fnc;
}
function MyFireEvent(obj, evt) {
    if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
    var evts = obj.myEvents[evt];
    for (var i = 0, len = evts.length; i < len; i++) evts[i]();
}

function doFlashMouseOver(e, triggerElementId, flashId) {
    if (!e) e = window.event;

    var targetElement = (e.target ? e.target : e.srcElement);

    if (isSelfOrChildRecursive(document.getElementById(triggerElementId), targetElement) || isSelfOrChildRecursive(document.getElementById(flashId), targetElement)) {
        if (!flashRunning[flashId]) {
            flashRunning[flashId] = true;
            var flash = document.getElementById(flashId);
            var flashElement = flash.parentNode;
            flashElement.style.display = 'block';

            flash.showFlorian(flashId);
        }
    }

    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}

function flashStopped(flashId) {
    var flash = document.getElementById(flashId);
    var flashElement = flash.parentNode;
    flashElement.style.display = 'none';
}

function isSelfOrChildRecursive(parentObj, childObj) {
    while (childObj != null) {
        if (childObj == parentObj) return true;

        childObj = childObj.parentNode;
    }

    return false;
}

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return [curleft, curtop];
}

function doFlashMouseOut(e, triggerElementId, flashId) {
    if (!e) e = window.event;

    var mousepos = [e.clientX, e.clientY];

    var obj = document.getElementById(triggerElementId);
    var position = findPos(obj);
    var size = [obj.offsetWidth, obj.offsetHeight];

    if ((mousepos[0] < position[0]) || (mousepos[0] > (position[0] + size[0])) ||
           (mousepos[1] < position[1]) || (mousepos[1] > (position[1] + size[1]))) {
        if (flashRunning[flashId]) {
            flashRunning[flashId] = false;
            var flash = document.getElementById(flashId);
            var flashElement = flash.parentNode;
            flash.hideFlorian();
        }
    }
}

function initFlashMouseOverOut(triggerElementId, flashId) {
    var triggerElement = document.getElementById(triggerElementId);

    AttachEvent(triggerElement, 'mouseover', function(event) { doFlashMouseOver(event, triggerElementId, flashId); }, true);
    AttachEvent(document.body, 'mouseout', function(event) { doFlashMouseOut(event, triggerElementId, flashId); }, true);
}