/**
 * Load netboot page
 * 
 * @param tgtNodes Targets to run rnetboot against
 */
function loadNetbootPage(tgtNodes) {
    // Get node OS
    var osHash = new Object();
    var nodes = tgtNodes.split(',');
    for (var i in nodes) {
        var os = getNodeAttr(nodes[i], 'os');
        var osBase = os.match(/[a-zA-Z]+/);
        if (osBase) {
            nodes[osBase] = 1;
        }
    }
    
    // Get nodes tab
    var tab = getNodesTab();
    
    // Generate new tab ID
    var inst = 0;
    var newTabId = 'netbootTab' + inst;
    while ($('#' + newTabId).length) {
        // If one already exists, generate another one
        inst = inst + 1;
        newTabId = 'netbootTab' + inst;
    }

    // Create netboot form
    var netbootForm = $('<div class="form"></div>');

    // Create status bar
    var statBarId = 'netbootStatusBar' + inst;
    var statusBar = createStatusBar(statBarId).hide();
    netbootForm.append(statusBar);

    // Create loader
    var loader = createLoader('netbootLoader');
    statusBar.find('div').append(loader);

    // Create info bar
    var infoBar = createInfoBar('Cause the range of nodes to boot to network');
    netbootForm.append(infoBar);

    // Create target node or group input
    var target = $('<div><label for="target">Target node range:</label><input type="text" name="target" value="' + tgtNodes + '" title="The node or node range to boot to network"/></div>');
    netbootForm.append(target);

    // Create options
    var optsDIV = $('<div></div>');
    var optsLabel = $('<label>Options:</label>');    
    var optsList = $('<ul></ul>');
    var opt = $('<li></li>');
    optsList.append(opt);
    optsDIV.append(optsLabel);
    optsDIV.append(optsList);
    netbootForm.append(optsDIV);
    
    // Create boot order checkbox
    var bootOrderChkBox = $('<input type="checkbox" id="s" name="s"/>');
    opt.append(bootOrderChkBox);
    opt.append('Set the boot device order');
    // Create boot order input
    var bootOrder = $('<li><label for="bootOrder">Boot order:</label><input type="text" name="bootOrder"/></li>');
    bootOrder.hide();
    optsList.append(bootOrder);
    
    // Create force reboot checkbox
    optsList.append('<li><input type="checkbox" id="F" name="F"/>Force reboot</li>');
    // Create force shutdown checkbox
    optsList.append('<li><input type="checkbox" id="f" name="f"/>Force immediate shutdown of the partition</li>');
    if (osHash['AIX']) {
        // Create iscsi dump checkbox
        optsList.append('<li><input type="checkbox" id="I" name="I"/>Do a iscsi dump on AIX</li>');
    }
    
    // Show boot order when checkbox is checked
    bootOrderChkBox.bind('click', function(event) {
        if ($(this).is(':checked')) {
            bootOrder.show();
        } else {
            bootOrder.hide();
        }
    });

    // Determine plugin
    var tmp = tgtNodes.split(',');
    for ( var i = 0; i < tmp.length; i++) {
        var mgt = getNodeAttr(tmp[i], 'mgt');
        // If it is zvm
        if (mgt == 'zvm') {
            // Add IPL input
            netbootForm.append('<div><label for="ipl">IPL:</label><input type="text" name="ipl" title="The virtual address to IPL"/></div>');
            break;
        }
    }

    // Generate tooltips
    netbootForm.find('div input[title]').tooltip({
        position: "center right",
        offset: [-2, 10],
        effect: "fade",
        opacity: 0.7,
        predelay: 800,
        events : {
            def : "mouseover,mouseout",
            input : "mouseover,mouseout",
            widget : "focus mouseover,blur mouseout",
            tooltip : "mouseover,mouseout"
        }
    });
    
    /**
     * Ok
     */
    var okBtn = createButton('Ok');
    okBtn.bind('click', function(event) {
        // Remove any warning messages
        $(this).parent().parent().find('.ui-state-error').remove();
        
        // Check inputs
        var ready = true;
        var inputs = $("#" + newTabId + " input[type='text']:visible");
        for ( var i = 0; i < inputs.length; i++) {
            if (!inputs.eq(i).val()) {
                inputs.eq(i).css('border', 'solid #FF0000 1px');
                ready = false;
            } else {
                inputs.eq(i).css('border', 'solid #BDBDBD 1px');
            }
        }

        // Generate arguments
        var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
        var optStr = '';
        var opt;
        for ( var i = 0; i < chkBoxes.length; i++) {
            opt = chkBoxes.eq(i).attr('name');
            optStr += '-' + opt;
            
            // If it is the boot order
            if (opt == 's') {
                // Get the boot order
                optStr += ';' + $('#' + newTabId + ' input[name=bootOrder]').val();
            }
            
            // Append ; to end of string
            if (i < (chkBoxes.length - 1)) {
                optStr += ';';
            }
        }

        // If no inputs are empty
        if (ready) {
            // Get nodes
            var tgts = $('#' + newTabId + ' input[name=target]').val();

            // Get IPL address
            var ipl = $('#' + newTabId + ' input[name=ipl]');
            if (ipl) {
                optStr += 'ipl=' + ipl.val();
            }

            // Disable all inputs and Ok button
            $('#' + newTabId + ' input').attr('disabled', 'disabled');
            $(this).attr('disabled', 'true');

            /**
             * (1) Boot to network
             */
            $.ajax( {
                url : 'lib/cmd.php',
                dataType : 'json',
                data : {
                    cmd : 'rnetboot',
                    tgt : tgts,
                    args : optStr,
                    msg : 'out=' + statBarId + ';cmd=rnetboot;tgt=' + tgts
                },

                success : updateStatusBar
            });

            // Show status bar
            statusBar.show();
        } else {
            // Show warning message
            var warn = createWarnBar('Please provide a value for each missing field.');
            warn.prependTo($(this).parent().parent());
        }
    });
    netbootForm.append(okBtn);

    // Append to discover tab
    tab.add(newTabId, 'Boot', netbootForm, true);

    // Select new tab
    tab.select(newTabId);
}