/**
 * Global variables
 */
var provisionTabs; // Provision tabs

/**
 * Set the provision tab
 * 
 * @param obj Tab object
 */
function setProvisionTab(obj) {
    provisionTabs = obj;
}

/**
 * Get the provision tab
 * 
 * @param Nothing
 * @return Tab object
 */
function getProvisionTab() {
    return provisionTabs;
}

/**
 * Load provision page
 */
function loadProvisionPage() {
    // If the page is loaded
    if ($('#content').children().length) {
        // Do not load again
        return;
    }

    // Get OS image names
    if (!$.cookie('imagenames')){
        $.ajax( {
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'tabdump',
                tgt : '',
                args : 'osimage',
                msg : ''
            },

            success : setOSImageCookies
        });
    }

    // Get groups
    if (!$.cookie('groups')){
        $.ajax( {
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'extnoderange',
                tgt : '/.*',
                args : 'subgroups',
                msg : ''
            },

            success : setGroupsCookies
        });
    }
    
    // Create info bar
    var infoBar = createInfoBar('Select a platform to provision or re-provision a node on, then click Ok.');
    
    // Create provision page
    var provPg = $('<div class="form"></div>');
    provPg.append(infoBar);

    // Create provision tab
    var tab = new Tab('provisionPageTabs');
    setProvisionTab(tab);
    tab.init();
    $('#content').append(tab.object());

    // Create radio buttons for platforms
    var hwList = $('<ol>Platforms available:</ol>');
    var esx = $('<li><input type="radio" name="hw" value="esx" checked/>ESX</li>');
    var kvm = $('<li><input type="radio" name="hw" value="kvm"/>KVM</li>');
    var zvm = $('<li><input type="radio" name="hw" value="zvm"/>z\/VM</li>');
    var ipmi = $('<li><input type="radio" name="hw" value="ipmi"/>iDataPlex</li>');
    var blade = $('<li><input type="radio" name="hw" value="blade"/>BladeCenter</li>');
    var hmc = $('<li><input type="radio" name="hw" value="hmc"/>System p</li>');
    
    hwList.append(esx);
    hwList.append(kvm);
    hwList.append(zvm);
    hwList.append(blade);
    hwList.append(ipmi);
    hwList.append(hmc);
    provPg.append(hwList);

    /**
     * Ok
     */
    var okBtn = createButton('Ok');
    okBtn.bind('click', function(event) {
        // Get hardware that was selected
        var hw = $(this).parent().find('input[name="hw"]:checked').val();
        
        var inst = 0;
        var newTabId = hw + 'ProvisionTab' + inst;
        while ($('#' + newTabId).length) {
            // If one already exists, generate another one
            inst = inst + 1;
            newTabId = hw + 'ProvisionTab' + inst;
        }
        
        // Create an instance of the plugin
        var title = '';
        var plugin;
        switch (hw) {
            case "kvm":
                plugin = new kvmPlugin();
                title = 'KVM';
                break;
            case "esx":
                plugin = new esxPlugin();
                title = 'ESX';
                break;
            case "blade":
                plugin = new bladePlugin();
                title = 'BladeCenter';
                break;
            case "hmc":
                plugin = new hmcPlugin();
                title = 'System p';
                break;
            case "ipmi":
                plugin = new ipmiPlugin();
                title = 'iDataPlex';
                break;
            case "zvm":
                plugin = new zvmPlugin();
                title = 'z/VM';
                break;
        }

        // Select tab
        tab.add(newTabId, title, '', true);
        tab.select(newTabId);
        plugin.loadProvisionPage(newTabId);
    });
    provPg.append(okBtn);
    
    // Create resources tab
    var resrcPg = $('<div class="form"></div>');

    // Create info bar
    var resrcInfoBar = createInfoBar('Select a platform to view its current resources.');
    resrcPg.append(resrcInfoBar);

    // Create radio buttons for platforms
    var rsrcHwList = $('<ol>Platforms available:</ol>');
    esx = $('<li><input type="radio" name="rsrcHw" value="esx" checked/>ESX</li>');
    kvm = $('<li><input type="radio" name="rsrcHw" value="kvm"/>KVM</li>');
    zvm = $('<li><input type="radio" name="rsrcHw" value="zvm"/>z\/VM</li>');
    ipmi = $('<li><input type="radio" name="rsrcHw" value="ipmi"/>iDataPlex</li>');
    blade = $('<li><input type="radio" name="rsrcHw" value="blade"/>BladeCenter</li>');
    hmc = $('<li><input type="radio" name="rsrcHw" value="hmc"/>System p</li>');
    
    rsrcHwList.append(esx);
    rsrcHwList.append(kvm);
    rsrcHwList.append(zvm);
    rsrcHwList.append(blade);
    rsrcHwList.append(ipmi);
    rsrcHwList.append(hmc);
    
    resrcPg.append(rsrcHwList);

    var okBtn = createButton('Ok');
    okBtn.bind('click', function(event) {
        // Get hardware that was selected
        var hw = $(this).parent().find('input[name="rsrcHw"]:checked').val();

        // Generate new tab ID
        var newTabId = hw + 'ResourceTab';
        if (!$('#' + newTabId).length) {
            // Create loader
            var loader = $('<center></center>').append(createLoader(hw + 'ResourceLoader'));

            // Create an instance of the plugin
            var plugin = null;
            var displayName = "";
            switch (hw) {
                case "kvm":
                    plugin = new kvmPlugin();
                    displayName = "KVM";
                    break;
                case "esx":
                    plugin = new esxPlugin();
                    displayName = "ESX";
                    break;
                case "blade":
                    plugin = new bladePlugin();
                    displayName = "BladeCenter";
                    break;
                case "hmc":
                    plugin = new hmcPlugin();
                    displayName = "System p";
                    break;
                case "ipmi":
                    plugin = new ipmiPlugin();
                    displayName = "iDataPlex";
                    break;
                case "zvm":
                    plugin = new zvmPlugin();
                    displayName = "z\/VM";
                    break;
            }
            
            // Add resource tab and load resources
            tab.add(newTabId, displayName, loader, true);
            plugin.loadResources();
        }

        // Select tab
        tab.select(newTabId);
    });
    
    resrcPg.append(okBtn);    

    // Add provision tab
    tab.add('provisionTab', 'Provision', provPg, false);
    // Add image tab
    tab.add('imagesTab', 'Images', '', false);
    // Add resource tab
    tab.add('resourceTab', 'Resources', resrcPg, false);
    
    // Load tabs onselect
    $('#provisionPageTabs').bind('tabsselect', function(event, ui){ 
        // Load image page 
        if (!$('#imagesTab').children().length && ui.index == 1) {
            $('#imagesTab').append($('<center></center>').append(createLoader('')));
            loadImagesPage();
        }
    });
    
    // Open the quick provision tab
    if (window.location.search) {
        tab.add('quickProvisionTab', 'Quick Provision', '', true);
        tab.select('quickProvisionTab');
        
        var provForm = $('<div class="form"></div>');
        $('#quickProvisionTab').append(provForm);
        appendProvisionSection('quick', provForm);
    }
}