/** * JS for the "request info" form. *  *  *//** * Runs on page load. *  *  */$(document).ready(function() {    $('#source_1').bind('change', source1Onchange);});/** * Onchange handler for the "source_1" <select> element. Retrieves source_2 * values from the server via Ajax. *  *  */function source1Onchange(event) {    var source_1 = $(this)[0].options[$(this)[0].selectedIndex].value;    $.ajax({        url: 'about/get_source_2_as_xml',        type: 'POST',        data: 'source_1=' + source_1,        success: populateSource2,        error: sourceError    });}/** * Fires whether request is successful or not. Checks for errors, shows/hides * "source_2", <select>, etc. *  *  */function sourceError() {    source2Prep();    $('#source_2').show();    $('#source_2')[0].options.length = 0;    var opt = new Option('An error has occurred...', '');    addOption($('#source_2')[0], opt, 0);}/** * Populates "source_2" <select> with options. *  *  */function populateSource2(xml) {    // Hide source_2 <select> if nothing is selected in source_1 <select>.    if ($('#source_1')[0].selectedIndex == 0) {        $('#source_2').hide();        return;    }    source2Prep();    // Add "please select" first option.    var opt = new Option('Please select...', '');    addOption($('#source_2')[0], opt, 0);    // Get <source> tags from XML retrieved from server.    var xml_sources = xml.getElementsByTagName('source');    // Add an <option> for each <source> in the XML.    for (var i = 0; i < xml_sources.length; i++) {        var source = xml_sources[i].childNodes[0].nodeValue;        var opt = new Option(source, source);        addOption($('#source_2')[0], opt, i + 1);    }    // Make sure "please select" option is selected.    $('#source_2')[0].selectedIndex = 0;}/** * Shows or hides "source_2" <select>. *  *  */function source2Prep() {    if ($('#source_2').length) {        // Show source_2 <select> in case it was previously hidden.        $('#source_2').show();        $('#source_2')[0].options.length = 0;    } else {        // Create source_2 <select>.        var source_2 = document.createElement('SELECT');        $(source_2).attr({ id:'source_2', name:'source_2' });        $('#source_1').parent().append(source_2);    }}/** * Adds an option to a <select>. *  *  */function addOption(select, opt, index) {    if ($.browser.msie) {        select.add(opt, index);    } else {        select.appendChild(opt);    }}