var requiredFields = new Array();
var backwardsTransitions = new Array();

function markFieldAsInvalid(fieldName) {
    var id = 'label.' + fieldName;
    
    if (document.getElementById(id)) {
        document.getElementById(id).style.color=errColor;
    }
}
function markFieldAsValid(fieldName) {
    var id = 'label.' + fieldName;
    
    if (document.getElementById(id)) {
        document.getElementById(id).style.color=regColor;
    }
}
function markFieldAsRequired(fieldName, alias) {
    if (typeof(alias) == 'undefined') {
        alias = fieldName;
    }
    var id = 'label.' + fieldName;
    
    if (document.getElementById(id)) {
        var target = document.getElementById(id).firstChild;
        var text = target.data;
        if (text.indexOf(marker) < 0) {
            target.data = target.data + marker;
        }
    }
    if (!requiredFields.contains(alias)) {
        requiredFields.push(alias);
        maybeSetOnChange(alias);
    }
}
function markFieldAsNotRequired(fieldName, alias) {
    if (typeof(alias) == 'undefined') {
        alias = fieldName;
    }

    var id = 'label.' + fieldName;
    if(document.getElementById(id)) {
        var target = document.getElementById(id).firstChild;
        var text = target.data;
        if (text.indexOf(marker) >= 0) {
            text=text.replace(marker, "");
            target.data = text;
        }
    }
    if (requiredFields.contains(alias)) {
        requiredFields.remove(alias);
        maybeResetOnChange(alias);
    }
}
function MakeNextStepPossible() {
    var forward0 = document.getElementById('dcm:forward0');
    if (forward0) {
        forward0.style.display = 'inline';
        document.getElementById('dcm:inactiveforward0').style.display = 'none';
        document.getElementById('dcm:forward1').style.display = 'inline';
        document.getElementById('dcm:inactiveforward1').style.display = 'none';
    }
}
function MakeNextStepImpossible() {
    /* this functionality is currently disabled 
    var forward0 = document.getElementById('dcm:forward0');
    if (forward0) {
        forward0.style.display = 'none';
        document.getElementById('dcm:inactiveforward0').style.display = 'inline';
        document.getElementById('dcm:forward1').style.display = 'none';
        document.getElementById('dcm:inactiveforward1').style.display = 'inline';
    }
    */
}
function switchLabelColor(id, newcolor) {
    if (document.getElementById(id)) {
        document.getElementById(id).style.color=newcolor;
    }
}
function checkNextNavigation() {
    var nextIsAllowed = true;
    for (var i = 0; nextIsAllowed && i < requiredFields.length; i++) {
        nextIsAllowed &= atLeastOneHasValue(requiredFields[i]);
    }
    if (nextIsAllowed) {
        MakeNextStepPossible();
    } else {
        MakeNextStepImpossible();
    }
}
function atLeastOneHasValue(name) {
    var elems = document.getElementsByName(name);
    if (elems.length > 1 ) { // radio buttons
        for (var i = 0; i < elems.length; i++) {
            if (elems[i].checked) {
                return true;
            }
        }
    } else if (elems.length == 1) { // textbox or select
        if (elems[0].value && elems[0].value != "") {
            return true;
        }
    }
    return false;
}
function maybeSetOnChange(name) {
    var elems = document.getElementsByName(name);
    for (var i = 0; i < elems.length; i++) {
        if (typeof(elems[i].onchange) == 'function') {
            elems[i].originalOnchange = true;
        } else {
            elems[i].onchange = checkNextNavigation;
        }
    }
}
function maybeResetOnChange(name) {
    var elems = document.getElementsByName(name);
    for (var i = 0; i < elems.length; i++) {
        if (!elems[i].originalOnchange) {
            elems[i].onchange = null;
        }
    }
}
function setMaxLength(field, len) {
    var elems = document.getElementsByName(field);
    if (elems.length == 1) {
        elems[0].maxLength = len;
    }
}
function validateMinLength(field, len) {
    var elems = document.getElementsByName(field);
    if (elems.length == 1) {
        if (elems[0].value && elems[0].value.length < len) {
            return false;
        }
    }
    return true;
}
function validateRegex(field, regex, negate) {
    var elems = document.getElementsByName(field);
    if (elems.length == 1 && elems[0].value && elems[0].value != '') {
        if (elems[0].value.match(regex)) {
            if (negate) {
                return false;
            }
        } else if (!negate) {
            return false;
        }
    }
    return true;
}
function validateRequiredField(field) {
    return atLeastOneHasValue(field);
}
function clearErrors(errorDiv) {
    while (errorDiv.hasChildNodes()) {
        errorDiv.removeChild(errorDiv.firstChild);
    }
    errorDiv.style.display = 'none';
    var formElement = document.getElementById('dcm:form');
    if (formElement) {
        var labels = formElement.getElementsByTagName('p');
        for (var i = 0; i < labels.length; i++) {
            if (labels[i].style.color) {
                labels[i].style.color = regColor;
            }
        }
    }
}
function addErrorMessage(errordiv, label, message) {
    errordiv.style.display = 'block';
    var p = document.createElement('p');
    if (label != '') {
        var b = document.createElement('b');
        p.appendChild(b);
        var labelNode = document.createTextNode(label + ':');
        b.appendChild(labelNode);
    }
    if (message != '') {
        var messageNode = document.createTextNode(' ' + message);
        p.appendChild(messageNode);
    }
    errordiv.appendChild(p);
}

