// imgSwap() allows you to easily swap an image src

function focusElement(el) {
    if (el) {
        if (el.focus) {
            el.focus();
            if (el.select) {
                el.select();
            }
        }
    }
}


function imgSwap(imgId,url) {
    var img;
    if ( document.images ) {
	img = document.images[ imgId ];
    } else if ( document.all ) {
	img = document.all[ imgId ];
    }
    if ( img ) {
	img.src = url;
    }
}


// Submit the given form, making it look like the passed-in button was clicked.
// If the form does not exist, nothing happens.

function submitFormAs( formId, buttonName, myElement ) {
    var form = document.getElementById( formId );

    if ( form ) {
        var buttonx = document.createElement( "input" );
        buttonx.setAttribute( "type", "hidden" );
        buttonx.setAttribute( "name", buttonName+".x" );
        buttonx.setAttribute( "value", 1 );
        form.appendChild( buttonx );

        var buttony = document.createElement( "input" );
        buttony.setAttribute( "type", "hidden" );
        buttony.setAttribute( "name", buttonName+".y" );
        buttony.setAttribute( "value", 1 );
        form.appendChild( buttony );
        if (myElement) {
            var redirect;
            redirect = document.createElement( "input" );
            redirect.setAttribute( "type", "hidden" );
            redirect.setAttribute( "name", "redirect_url" );
            redirect.setAttribute( "value",myElement.baseURI );
            form.appendChild( redirect );
         }

        form.submit();

        // Must clean up the elements we created or else they will
        // still be there to cause confusion if the user uses the
        // browser back arrow.
        form.removeChild( buttonx );
        form.removeChild( buttony );
        if (redirect) {form.removeChild( redirect )};
    }
}


// Dewey Distro funtions for managing expanding/collapsing
// dewey hundred rows

function toggleID(objID){
    var element = document.getElementById( objID );

    if (element) {
        if (element.style.display == "none" ) {
            element.style.display = "";
        }
        else  {
            element.style.display = "none";
        }
    }
}

function toggleRow(section, row){
    var header_row = section + "_" + row + "_header";
    var detail_rows = section + "_" + row;
    toggleID(header_row);
    toggleID(detail_rows);
}

function togglePanel(panelID){
    if ( panelID == "readinglevel" ){
        toggleID("interestlevel");
        toggleID(panelID);
    }
    else {
        toggleID("readinglevel");
        toggleID(panelID);
    }
}

function toggleID(objID){
    var element = document.getElementById( objID );

    if (element) {
        if (element.style.display == "none" ) {
            element.style.display = "";
        }
        else  {
            element.style.display = "none";
        }
    }
}

function sentenceBuilderToggle(objID, linkID) {
    var link = document.getElementById(linkID);
    var table = document.getElementById(objID);
    if (link.innerHTML == 'More options...') {
        link.innerHTML = 'Less options...';
        table.style.display = "";
    }
    else {
        link.innerHTML = 'More options...';
        table.style.display = "none";
    }
}

function toggleDisabledById(objID, is_disabled) {
    var element = document.getElementById( objID );
    if (element) {
        element.disabled = is_disabled;
    }
}

// selects the radio button in the given form with the given name & value.
// deselects all other radio buttons with the same name in the form
function check_radio(form, radio_name, radio_value) {
    for (var i = 0; i < form.length; i++) {
        var input = form.elements[i];
        if (input.type == 'radio' && input.name == radio_name) {
            if (input.value == radio_value) {
                input.checked = true;
            }
            else {
                input.checked = false;
            }
        }
    }
}

// Utility function to dump contents of an object
var MAX_DUMP_DEPTH = 10;
function dumpObj(obj, name, indent, depth) {

        if (depth > MAX_DUMP_DEPTH) {
            return indent + name + ": <Maximum Depth Reached>\n";
        }

        if (typeof obj == "object") {
            var child = null;
            var output = indent + name + "\n";
            indent += "\t";

            for (var item in obj)
            {
                try {
                        child = obj[item];
                } catch (e) {
                        child = "<Unable to Evaluate>";
                }
                if (typeof child == "object") {
                        output += dumpObj(child, item, indent, depth + 1);
                } else {
                        output += indent + item + ": " + child + "\n";
                }
            }
                return output;
        } else {
            return obj;
        }
}
