var modal, win, cancel, cancelDelegate;

function CloseModal(isCancel) {
    modal.className = 'off';
    win.className = 'off';
    if (isCancel && cancelDelegate) cancelDelegate();
}
function MaskOnly() {
    modal.className = 'postback';
    win.className = 'off';
    cancelDelegate = false;
}
function OpenModal(contentsID, showCancelButton, onCancelDelegate) {
    var content = document.getElementById(contentsID);
    cancelDelegate = onCancelDelegate;
    modal.className = 'on';
    win.className = 'on';
    found = false;
    for (var i = 0; i < win.childNodes.length; i++) {
        if (win.childNodes[i].nodeType != 3) {
            if (win.childNodes[i].id == contentsID) {
                win.childNodes[i].style.display = '';
                found = true;
            }
            else win.childNodes[i].style.display = 'none';
        }
    }
    if (showCancelButton) {
        content.insertBefore(cancel, content.firstChild);
        cancel.style.display = '';
    }
    var field = ReturnFirstFormFieldChild(content);
    if (field) field.focus(); //focuses on the first input field in the modal window
    if (!found) alert('Error: Contents of modal window not found!');
}
function SetupModal() {
    if (!modal || !win || !cancel) {
        modal = document.getElementById('modal');
        win = document.getElementById('window');
        cancel = document.getElementById('cancelbutton');
        CloseModal();
    }
}
setTimeout(SetupModal, 0);


function ReturnFirstFormFieldChild(elem) {
    for (var i = 0; i < elem.childNodes.length; i++) {
        if (elem.childNodes[i].nodeName == 'SELECT' || elem.childNodes[i].nodeName == 'INPUT')
            return elem.childNodes[i];
        var result = ReturnFirstFormFieldChild(elem.childNodes[i]);
        if (result) return result;
    }
    return false;
}
