var closeTimer = '';
var closeTimerSub = '';
var closeTimerHideNow = '';

document.onclick = documentClicked;

function documentClicked(e) {
    var target = '';
    if (e)
        target = e.target;
    else if (event)
        target = event.srcElement;
    elementClicked(target);
}

function elementClicked(element) {
    if (!arguments.length)
        element = document.getElementById('prvElement');
    var subpopupId = document.getElementById('subpopupId').value;
    if (subpopupId) {
        var subpopupClickId = document.getElementById('subpopupClickId').value;
        if (element.id==subpopupClickId)
            return;
        if (!isInVisiblePopup(element, "sub")) {
            var subpopupIsTemplate = document.getElementById('subpopupIsTemplate').value;
            hideElement(subpopupId, subpopupIsTemplate);
            document.getElementById('subpopupId').value = '';
            document.getElementById('subpopupClickId').value = '';
            document.getElementById('subpopupIsTemplate').value = 'false';
        }
    }
    var popupId = document.getElementById('popupId').value;
    if (popupId) {
        var popupClickId = document.getElementById('popupClickId').value;
        if (element.id==popupClickId)
            return;
        if (!isInVisiblePopup(element)) {
            var popupIsTemplate = document.getElementById('popupIsTemplate').value;
            hideElement(popupId, popupIsTemplate);
            document.getElementById('popupId').value = '';
            document.getElementById('popupClickId').value = '';
            document.getElementById('popupIsTemplate').value = 'false';
        }
    }
}

function isInVisiblePopup(element, sub){
    if (!sub)
        sub = '';
    if (element.id && element.id.search("closePopup")>-1)
        return false;
    var popupId = document.getElementById(sub + 'popupId').value;
    var popupClickId = document.getElementById(sub + 'popupClickId').value;
    if (!popupId || !popupClickId)
        return true;
    var visiblePopup = document.getElementById(popupId);
    var visiblePopupClick = document.getElementById(popupClickId);
    while (element.parentNode){
        if (element==visiblePopup || element==visiblePopupClick)
            return true;
        element = element.parentNode
    }
    return false;
} 

function highlightElements() {
    for (i = 0; i<arguments.length; i++) {
        element = document.getElementById(arguments[i]);
        if (element.nodeName.toLowerCase()=="img") {
            //element.style.width--;
            element.style.border = "solid blue 1px";
            //element.style.marginRight = "1px";
        }
    }
}

function unhighlightElements(white) {
    for (i = 1; i<arguments.length; i++) {
        element = document.getElementById(arguments[i]);
        if (element.nodeName.toLowerCase()=="img") {
            //element.style.width++;
            element.style.border = "solid " + white + " 1px";
            //element.style.marginRight = "0px";
        }
    }
}

function changeImageSrc(elementId, imgSrc) {
    if (imgSrc) {
        if (document.getElementById(elementId).src!=imgSrc) {
            document.getElementById('oldImgSrc').value = document.getElementById(elementId).src;
            document.getElementById(elementId).src = imgSrc;
        }
    } else {
        document.getElementById(elementId).src = document.getElementById('oldImgSrc').value;
    }
}

// Show or Hide an Element
function toggleElement(elementId, clickElementId, sub) {
    if (!sub)
        sub = '';
    element = document.getElementById(elementId);
    if (element.style.display=="block") {
        var isTemplate = document.getElementById(sub + 'popupIsTemplate').value;
        hideElement(elementId, isTemplate);
        document.getElementById(sub + 'popupId').value = '';
        document.getElementById(sub + 'popupClickId').value = '';
        document.getElementById(sub + 'popupIsTemplate').value = 'false';
    } else {
        showElement(elementId, clickElementId, sub);
    }
}

function showElement(elementId, clickElementId, sub) {
    if (!sub)
        sub = '';
    if (sub)
        elementClicked(document.getElementById(elementId).parentNode); //hide stuff
    else
        elementClicked(); //hide stuff
    element = document.getElementById(elementId);
    element.style.display = "block";
    document.getElementById(sub + 'popupId').value = elementId;
    document.getElementById(sub + 'popupClickId').value = clickElementId;
    document.getElementById(sub + 'popupIsTemplate').value = 'false';
}

function hideTemplateElement(templateElementId) {
    if (!templateElementId)
        return;
    templateElement = document.getElementById(templateElementId);
    origParent = templateElement.parentNode; 
    if (origParent.nodeName=="dyn_elements")
        return;
    document.getElementById("dyn_elements").appendChild(templateElement);
}

function hideElement(elementId, isTemplate) {
    if (isTemplate)
        hideTemplateElement(document.getElementById(elementId).firstChild.id);
    document.getElementById(elementId).style.display = "none";
}
