var globalNodesDetail = new Object();
var globalAllNodesNum = 0;
var globalFinishNodesNum = 0;
var globalTimeStamp;
var globalCondition = '';
var globalResponse = new Object();

function loadRmcMon() {
    // Find the rmcmon tab
    var rmcMonTab = $('#rmcmon');

    // Add the stauts bar first. id = 'rmcMonStatus'
    var rmcStatusBar = createStatusBar('rmcMonStatus');
    rmcStatusBar.find('div').append(createLoader());
    rmcMonTab.append(rmcStatusBar);

    // Add the configure button
    var configButton = createButton('Configure');
    configButton.hide();
    configButton.click(function() {
        if ($('#rmcMonConfig').is(':hidden')) {
            $('#rmcMonConfig').show();
        } else {
            $('#rmcMonConfig').hide();
        }
    });
    rmcMonTab.append(configButton);

    // Add configure div
    rmcMonTab.append("<div id='rmcMonConfig'></div>");
    $('#rmcMonConfig').hide();

    // Load the configure div's content
    loadRmcMonConfigure();

    // Add the content of the rmcmon
    rmcMonTab
            .append("<div id='rmcMonShow'><div id='rmcmonSummary'></div><div id='rmcmonDetail'></div><div id='nodeDetail'></div></div>");
    $('#nodeDetail').hide();

    // Check the software work status by platform (Linux and AIX)
    $.ajax({
        url : 'lib/systemcmd.php',
        dataType : 'json',
        data : {
            cmd : 'ostype'
        },

        success : rsctRpmCheck
    });
}

function loadRmcMonConfigure() {
    // Get the configure div and clean its content
    var rmcmonCfgDiv = $('#rmcMonConfig');
    rmcmonCfgDiv.empty();

    // Add the start button
    var startButton = createButton('Start');
    rmcmonCfgDiv.append(startButton);
    startButton.click(function() {
        $('#rmcMonStatus div').empty().append(createLoader());
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'webrun',
                tgt : '',
                args : 'rmcstart;compute',
                msg : ''
            },

            success : function(data) {
                $('#rmcMonStatus div').empty().append(data.rsp[0]);
            }
        });
    });

    // Add the stop button
    var stopButton = createButton('Stop');
    rmcmonCfgDiv.append(stopButton);
    stopButton.click(function() {
        $('#rmcMonStatus div').empty().append(createLoader());
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'monstop',
                tgt : '',
                args : 'rmcmon',
                msg : ''
            },

            success : function(data) {
                $('#rmcMonStatus div').empty().append(data.rsp[0]);
            }
        });
    });

    // Add the cancel button
    var cancelButton = createButton('Cancel');
    rmcmonCfgDiv.append(cancelButton);
    cancelButton.click(function() {
        $('#rmcMonConfig').hide();
    });
}

function rsctRpmCheck(data) {
    // Linux has to check the rscp first
    if ('aix' != data.rsp) {
        $.ajax({
            url : 'lib/systemcmd.php',
            dataType : 'json',
            data : {
                cmd : 'rpm -q rsct.core'
            },

            success : function(data) {
                if (-1 != data.rsp.indexOf("not")) {
                    $('#rmcMonStatus div')
                            .empty()
                            .append(
                                    'Please install the <a href="http://www14.software.ibm.com/webapp/set2/sas/f/rsct/rmc/download/home.html" target="install_window">RSCT</a> first.<br/>'
                                            + 'You can find more support from <a href="http://xcat.svn.sourceforge.net/viewvc/xcat/xcat-core/trunk/xCAT-client/share/doc/xCAT2-Monitoring.pdf" target="pdf_window">xCAT2-Monitoring.pdf</a>');
                } else {
                    xcatrmcRpmCheck();
                }
            }
        });
    } else {
        xcatrmcRpmCheck();
    }
}

function xcatrmcRpmCheck() {
    $.ajax({
        url : 'lib/systemcmd.php',
        dataType : 'json',
        data : {
            cmd : 'rpm -q xCAT-rmc rrdtool'
        },

        success : function(data) {
            var softInstallStatus = data.rsp.split(/\n/);
            var needHelp = false;
            $('#rmcMonStatus div').empty();
            // Check the xcat-rmc
            if (-1 != softInstallStatus[0].indexOf("not")) {
                needHelp = true;
                $('#rmcMonStatus div')
                        .append(
                                'Please install the <a href="http://xcat.sourceforge.net/#download" target="install_window">xCAT-rmc</a> first.<br/>');
            }

            // Check the rrdtool
            if (-1 != softInstallStatus[1].indexOf("not")) {
                needHelp = true;
                $('#rmcMonStatus div')
                        .append(
                                'Please install the <a href="http://oss.oetiker.ch/rrdtool/download.en.html" target="install_window">RRD-tool</a> first.<br/>');
            }

            // Add help info or load the rmc show
            if (needHelp) {
                $('#rmcMonStatus div')
                        .append(
                                'You can find more support form <a href="http://xcat.svn.sourceforge.net/viewvc/xcat/xcat-core/trunk/xCAT-client/share/doc/xCAT2-Monitoring.pdf" target="pdf_window">xCAT2-Monitoring.pdf</a>');
            } else {
                rmcWorkingCheck();
            }
        }
    });
}

function rmcWorkingCheck() {
    $('#rmcMonStatus div').empty().append("Checking RMC working status");
    $('#rmcMonStatus div').append(createLoader());
    $('#rmcmon button:first').show();
    $.ajax({
        url : 'lib/cmd.php',
        dataType : 'json',
        data : {
            cmd : 'monls',
            tgt : '',
            args : 'rmcmon',
            msg : ''
        },

        success : function(data) {
            if (-1 != data.rsp[0].indexOf("not-monitored")) {
                $('#rmcMonStatus div').empty().append(
                        "Please start the RMC Monitoring first");
                return;
            }
            loadRmcMonShow();
        }
    });
}

function removeStatusBar() {
    if (globalAllNodesNum == globalFinishNodesNum) {
        $('#rmcMonStatus').remove();
    }

    $('#rmcmonDetail [title]').tooltip({
        position : [ 'center', 'right' ]
    });
}

function loadRmcMonShow() {
    $('#rmcMonStatus div').empty().append("Getting summary data");
    $('#rmcMonStatus div').append(createLoader());

    // Load the rmc status summary
    $.ajax({
        url : 'lib/cmd.php',
        dataType : 'json',
        data : {
            cmd : 'webrun',
            tgt : '',
            args : 'rmcshow;summary;PctTotalTimeIdle,PctRealMemFree',
            msg : ''
        },

        success : function(data) {
            showRmcSummary(data.rsp[0]);
        }
    });
}

function showRmcSummary(returnData) {
    var attributes = returnData.split(';');
    var attr;
    var attrName;
    var attrValues;
    var attrDiv;
    var summaryTable = $('<table><tbody></tbody></table>');
    var summaryRow;
    globalTimeStamp = new Array();

    // Update the rmc status area
    $('#rmcMonStatus div').empty().append("Getting nodes data").append(
            createLoader());
    // Load each nodes' status
    $.ajax({
        url : 'lib/cmd.php',
        dataType : 'json',
        data : {
            cmd : 'webrun',
            tgt : '',
            args : 'rmcshow;compute;PctTotalTimeIdle,PctRealMemFree',
            msg : ''
        },

        success : function(data) {
            parseRmcData(data.rsp);
        }
    });

    // Create the timestamp, the flot only use the UTC time, so had to change the value, to show the right time
    var tempDate = new Date();
    var tempOffset = tempDate.getTimezoneOffset();
    var tempTime = tempDate.getTime() - 3600000;
    for (var i = 0; i < 60; i++) {
        tempDate.setTime(tempTime + i * 60000);
        globalTimeStamp.push(tempDate.getTime());
    }

    // Show the summary data
    $('#rmcmonSummary').empty().append('<h3>Overview</h3><hr />');
    $('#rmcmonSummary').append(summaryTable);

    for (attr in attributes) {
        var tempTd = $('<td style="border:0px;padding:15px 5px;"></td>');
        var tempArray = [];
        var temp = attributes[attr].indexOf(':');
        attrName = attributes[attr].substr(0, temp);
        attrValues = attributes[attr].substr(temp + 1).split(',');

        if (0 == (attr % 3)) {
            summaryRow = $('<tr></tr>');
            summaryTable.append(summaryRow);
        }
        summaryRow.append(tempTd);
        attrDiv = $('<div id="monitor-sum-div' + attr
                + '" class="monitor-sum-div"></div>');
        tempTd.append(attrDiv);
        for (var i in attrValues) {
            tempArray.push([ globalTimeStamp[i], Number(attrValues[i]) ]);
        }

        $.jqplot('monitor-sum-div' + attr, [ tempArray ], {
            series : [ {
                showMarker : false
            } ],
            axes : {
                xaxis : {
                    label : attrName,
                    renderer : $.jqplot.DateAxisRenderer,
                    numberTicks : 5,
                    tickOptions : {
                        formatString : '%R',
                        show : true,
                        fontSize : '10px'
                    }
                },
                yaxis : {
                    tickOptions : {
                        formatString : '%.2f',
                        fontSize : '10px'
                    }
                }
            }
        });
    }
}

function parseRmcData(returnData) {
    var nodeName;
    var nodeStatus;

    $('#rmcmonDetail').empty().append('<h3>Detail</h3><hr/>');

    // Add the table for show nodes
    var detailUl = $('<ul style="margin:0px;padding:0px;"></ul>');
    // Update the table area
    $('#rmcmonDetail ul').remove();
    $('#rmcmonDetail').append(detailUl);

    globalAllNodesNum = returnData.length;
    globalFinishNodesNum = 0;
    for (var i in returnData) {
        var temp = returnData[i].indexOf(':');
        ;
        nodeName = returnData[i].substr(0, temp);
        nodeStatus = returnData[i].substr(temp + 1).replace(/(^\s*)|(\s*$)/g,
                '');

        if ('OK' != nodeStatus) {
            globalFinishNodesNum++;
            detailUl.append(createUnkownNode(nodeName));
            removeStatusBar();
            continue;
        }
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'webrun',
                tgt : '',
                args : 'rmcshow;' + nodeName
                        + ';PctTotalTimeIdle,PctRealMemFree',
                msg : nodeName
            },

            success : function(data) {
                showRmcNodes(data.rsp, data.msg);
            }
        });
    }
}

function createUnkownNode(nodeName) {
    var tempLi = '<li class="monitor-unknown ui-corner-all monitor-node-li" id="'
            + nodeName
            + '" '
            + 'title="Name:'
            + nodeName
            + '<br/>Unknown"></li>';
    return tempLi;
}

function createErrorNode(nodeName) {
    var tempLi = '<li class="monitor-error ui-corner-all monitor-node-li id="'
            + nodeName + '" ' + 'title="Name:' + nodeName + '<br/>Error"></li>';
}

function showRmcNodes(data, nodename) {
    var attrname = '';
    var values = '';
    var position = 0;
    var index = 0;
    var classname = '';
    var tempObj = {};

    for (index in data) {
        position = data[index].indexOf(':');
        attrname = data[index].substr(0, position);
        values = data[index].substr(position + 1);
        // Error node, cannot get the last hour's data
        if (!values) {
            $('#rmcmonDetail ul').append(createErrorNode(nodename));
            if (globalNodesDetail[nodename]) {
                delete (globalNodesDetail[nodename]);
            }
            return;
        }

        // Normal node, save the values
        tempObj[attrname] = values;
    }

    globalNodesDetail[nodename] = tempObj;

    // Get each average
    var cpuAvg = 0;
    var memAvg = 0;
    var tempSum = 0;
    var tempArray = globalNodesDetail[nodename]['PctTotalTimeIdle'].split(',');
    for (index = 0; index < tempArray.length; index++) {
        tempSum += Number(tempArray[index]);
    }
    cpuAvg = parseInt(tempSum / index);

    tempArray = globalNodesDetail[nodename]['PctRealMemFree'].split(',');
    tempSum = 0;
    for (index = 0; index < tempArray.length; index++) {
        tempSum += Number(tempArray[index]);
    }
    memAvg = parseInt(tempSum / index);

    if (cpuAvg >= 10 && memAvg <= 90) {
        classname = 'monitor-normal';
    } else {
        classname = 'mornitor-warning';
    }

    var normalLi = $('<li class="' + classname
            + ' ui-corner-all monitor-node-li" id="' + nodename + '" title="'
            + 'Name:' + nodename + '<br/> CpuIdle: ' + cpuAvg
            + '%<br/> MemFree: ' + memAvg + '%"></li>');

    $('#rmcmonDetail ul').append(normalLi);
    normalLi.bind('click', function() {
        showNode($(this).attr('id'));
    });

    // Check if the process finished
    globalFinishNodesNum++;
    removeStatusBar();
}

function showNode(nodeName) {
    var nodeTable = $('<table><tbody></tbody></table>');
    var backButton = createButton('Go back to all nodes');
    var nodeRow;
    var parseNum = 0;

    $('#rmcmonDetail').hide();
    $('#nodeDetail').empty().show();
    $('#nodeDetail').append('<h3>' + nodeName + ' Detail</h3><hr />');
    $('#nodeDetail').append(backButton);
    backButton.bind('click', function() {
        $('#nodeDetail').hide();
        $('#rmcmonDetail').show();
    });

    $('#nodeDetail').append(nodeTable);

    for (var attr in globalNodesDetail[nodeName]) {
        var tempTd = $('<td style="border:0px;padding:1px 1px;"></td>');
        var attrChat = $('<div id="monitor-node-div' + nodeName + attr
                + '" class="monitor-node-div"></div>');
        if (0 == parseNum % 4) {
            nodeRow = $('<tr></tr>');
            nodeTable.append(nodeRow);
        }
        nodeRow.append(tempTd);
        parseNum++;

        tempTd.append(attrChat);
        var tempData = globalNodesDetail[nodeName][attr].split(',');
        var tempArray = [];
        for (var i in tempData) {
            tempArray.push([ globalTimeStamp[i], Number(tempData[i]) ]);
        }

        $.jqplot('monitor-node-div' + nodeName + attr, [ tempArray ], {
            series : [ {
                showMarker : false
            } ],
            axes : {
                xaxis : {
                    label : attr,
                    renderer : $.jqplot.DateAxisRenderer,
                    numberTicks : 5,
                    tickOptions : {
                        formatString : '%R',
                        show : true,
                        fontSize : '10px'
                    }
                },
                yaxis : {
                    tickOptions : {
                        formatString : '%.2f',
                        fontSize : '10px'
                    }
                }
            }
        });
    }
}

/**
 * Load the rmc event tab
 */
function loadRmcEvent() {
    // Find the rmcevent tab

    // Add the stauts bar first
    var rmcStatusBar = createStatusBar('rmcEventStatus');
    rmcStatusBar.find('div').append(createLoader());
    $('#rmcevent').append(rmcStatusBar);
    $('#rmcevent').append('<div id="rmcEventDiv"></div>');

    $.ajax({
        url : 'lib/cmd.php',
        dataType : 'json',
        data : {
            cmd : 'webrun',
            tgt : '',
            args : 'lsevent;-O;1000',
            msg : ''
        },

        success : showEventLog
    });
}

/**
 * Get all conditions
 */
function getConditions() {
    if (!globalCondition) {
        $('#rmcEventStatus div').empty()
                .append('Getting predefined conditions').append(createLoader());
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'webrun',
                tgt : '',
                args : 'lscondition',
                msg : ''
            },

            success : function(data) {
                $('#rmcEventStatus div').empty();
                $('#rmcEventButtons').show();
                globalCondition = data.rsp[0];
            }
        });
    } else {
        $('#rmcEventButtons').show();
    }
}

/**
 * Get all response
 */
function getResponse() {
    var tempFlag = false;
    // Get all response first
    for (var i in globalResponse) {
        tempFlag = true;
        break;
    }

    if (!tempFlag) {
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'webrun',
                tgt : '',
                args : 'lsresponse',
                msg : ''
            },

            success : function(data) {
                var resps = data.rsp[0].split(';');
                for (var i in resps) {
                    var name = resps[i];
                    name = name.substr(1, (name.length - 2));
                    globalResponse[name] = 1;
                }
            }
        });
    }
}

/**
 * Show all the event in the rmc event tab
 * 
 * @param data Response from the xcat server
 */
function showEventLog(data) {
    $('#rmcEventStatus div').empty();
    // rsct not installed
    if (data.rsp[0] && (-1 != data.rsp[0].indexOf('lsevent'))) {
        $('#rmcEventStatus div').append('Please install RSCT first!');
        return;
    }
    var eventDiv = $('#rmcEventDiv');
    eventDiv.empty();

    // Get conditions and responses, save in the global
    getConditions();
    getResponse();

    var eventTable = new DataTable('lsEventTable');
    eventTable.init([ 'Time', 'Type', 'Content' ]);

    for (var i in data.rsp) {
        var row = data.rsp[i].split(';');
        eventTable.add(row);
    }

    eventDiv.append(eventTable.object());
    $('#lsEventTable').dataTable({
        'iDisplayLength' : 50,
        'bLengthChange' : false,
        "sScrollX" : "100%",
        "bAutoWidth" : true
    });

    // Add the configure button
    loadRmcEventConfig();

    // Unsort on the content column
    $('#lsEventTable thead tr th').eq(2).unbind('click');
}

/**
 * Add the configure button into rmc event tab
 */
function loadRmcEventConfig() {
    // Create action bar
    var actionBar = $('<div class="actionBar"></div>');
    var chCondScopeLnk = $('<a>Change condition scope</a>');
    chCondScopeLnk.bind('click', function() {
        chCondScopeDia();
    });

    var mkCondRespLnk = $('<a>Make/remove associatione</a>');
    mkCondRespLnk.bind('click', function() {
        mkCondRespDia();
    });

    var startCondRespLnk = $('<a>Start/stop association</a>');
    startCondRespLnk.bind('click', function() {
        startStopCondRespDia();
    });

    // Actions
    var actionsLnk = '<a>Actions</a>';
    var actsMenu = createMenu([ chCondScopeLnk, mkCondRespLnk, startCondRespLnk ]);

    // Create an action menu
    var actionsMenu = createMenu([ [ actionsLnk, actsMenu ] ]);
    actionsMenu.superfish();
    actionsMenu.css('display', 'inline-block');
    actionBar.append(actionsMenu);

    // Create a division to hold actions menu
    var menuDiv = $('<div id="lsEventTable_menuDiv" class="menuDiv"></div>');
    $('#lsEventTable_wrapper').prepend(menuDiv);
    menuDiv.append(actionBar);
    $('#lsEventTable_filter').appendTo(menuDiv);
}

/**
 * Show the make association dialogue
 */
function mkCondRespDia() {
    var diaDiv = $('<div title="Configure Association" id="mkAssociation" class="tab"></div>');
    var mkAssociationTable = '<center><table><thead><tr><th>Condition Name</th><th>Response Name</th></tr></thead>';
    mkAssociationTable += '<tbody><tr><td id="mkAssCond">';
    // Add the conditions into fieldset
    if (!globalCondition) {
        mkAssociationTable += 'Getting predefined conditions, open this dislogue later';
    } else {
        mkAssociationTable += createConditionTd(globalCondition);
    }

    mkAssociationTable += '</td><td id="mkAssResp">Please select condition first</td></tr></tbody></table></center>';
    diaDiv.append(mkAssociationTable);
    diaDiv.append('<div id="selectedResp" style="display: none;" ><div>');
    // Change the response field when click the condition
    diaDiv.find('input:radio').bind('click',
        function() {
            diaDiv.find('#mkAssResp').empty().append('Getting response').append(createLoader());
            $.ajax({
                url : 'lib/cmd.php',
                dataType : 'json',
                data : {
                    cmd : 'webrun',
                    tgt : '',
                    args : 'lscondresp;"'
                            + $(this).attr('value') + '"',
                    msg : ''
                },

                success : function(data) {
                    var tempHash = new Object();
                    var oldSelectedResp = '';
                    var showStr = '';
                    if (data.rsp[0]) {
                        var names = data.rsp[0].split(';');
                        for (var i in names) {
                            var name = names[i];
                            name = name.substr(1,
                                    name.length - 2);
                            tempHash[name] = 1;
                        }
                    }

                    for (var name in globalResponse) {
                        if (tempHash[name]) {
                            showStr += '<input type="checkbox" checked="checked" value="'
                                    + name
                                    + '">'
                                    + name
                                    + '<br/>';
                            oldSelectedResp += ';' + name;
                        } else {
                            showStr += '<input type="checkbox" value="'
                                    + name
                                    + '">'
                                    + name
                                    + '<br/>';
                        }
                    }

                    diaDiv.find('#mkAssResp').empty()
                            .append(showStr);
                    diaDiv.find('#selectedResp').empty()
                            .append(oldSelectedResp);
                }
            });
        });

    diaDiv.dialog({
        modal : true,
        width : 620,
        height : 600,
        close : function(event, ui) {
            $(this).remove();
        },
        buttons : {
            'Ok' : function() {
                var newResp = new Object();
                var oldResp = new Object();
                var oldString = '';
                var newString = '';

                // Get the old seelected responses
                var conditionName = $(this).find('#mkAssCond :checked').attr(
                        'value');
                if (!conditionName) {
                    return;
                }
                var temp = $(this).find('#selectedResp').html();
                if (!temp) {
                    return;
                }
                var tempArray = temp.substr(1).split(';');
                for (var i in tempArray) {
                    oldResp[tempArray[i]] = 1;
                }

                // Get the new selected responses
                $(this).find('#mkAssResp input:checked').each(function() {
                    var respName = $(this).attr('value');
                    newResp[respName] = 1;
                });

                for (var i in newResp) {
                    if (oldResp[i]) {
                        delete oldResp[i];
                        delete newResp[i];
                    }
                }

                // Add the response which are delete
                for (var i in oldResp) {
                    oldString += ',"' + i + '"';
                }
                if ('' != oldString) {
                    oldString = oldString.substr(1);
                }

                // Add the response which are new add
                for (var i in newResp) {
                    newString += ',"' + i + '"';
                }
                if ('' != newString) {
                    newString = newString.substr(1);
                }

                if (('' != oldString) || ('' != newString)) {
                    $('#rmcEventStatus div').empty().append(
                            'Create/remove associations ').append(
                            createLoader());
                    $.ajax({
                        url : 'lib/cmd.php',
                        dataType : 'json',
                        data : {
                            cmd : 'webrun',
                            tgt : '',
                            args : 'mkcondresp;"' + conditionName + '";+'
                                    + newString + ':-' + oldString,
                            msg : ''
                        },

                        success : function(data) {
                            $('#rmcEventStatus div').empty()
                                    .append(data.rsp[0]);
                            ;
                        }
                    });
                }
                $(this).dialog('close');
            },
            'Cancel' : function() {
                $(this).dialog('close');
            }
        }
    });
}

/**
 * Show the make condition dialogue
 */
function chCondScopeDia() {
    var diaDiv = $('<div title="Change Condition Scope" id="chScopeDiaDiv" class="tab"></div>');
    var tableContent = '<center><table id="changeScopeTable" ><thead><tr><th>Condition Name</th><th>Group Name</th></tr></thead>';

    tableContent += '<tbody><tr><td id="changePreCond">';
    // Add the conditions into fieldset
    if ('' == globalCondition) {
        tableContent += 'Getting predefined conditions, open this dialogue later';
    } else {
        tableContent += createConditionTd(globalCondition);
    }
    tableContent += '</td><td id="changeGroup">';

    // Add the groups into table
    var groups = $.cookie('groups').split(',');
    for (var i in groups) {
        tableContent += '<input type="checkbox" value="' + groups[i] + '">'
                + groups[i] + '<br/>';
    }

    tableContent += '</td></tr></tbody></table></center>';
    diaDiv.append(tableContent);
    // Fieldset to show status
    diaDiv.append('<fieldset id="changeStatus"></fieldset>');
    // Create the dislogue
    diaDiv.dialog({
        modal : true,
        width : 500,
        height : 600,
        close : function(event, ui) {
            $(this).remove();
        },
        buttons : {
            'Ok' : function() {
                $('#changeStatus').empty().append('<legend>Status</legend>');
                var conditionName = $('#changePreCond :checked').attr('value');
                var groupName = '';
                $('#changeGroup :checked').each(function() {
                    if ('' == groupName) {
                        groupName += $(this).attr('value');
                    } else {
                        groupName += ',' + $(this).attr('value');
                    }
                });

                if (undefined == conditionName) {
                    $('#changeStatus').append('Please select conditon');
                    return;
                }

                if ('' == groupName) {
                    $('#changeStatus').append('Please select group');
                    return;
                }

                $('#changeStatus').append(createLoader());
                $.ajax({
                    url : 'lib/cmd.php',
                    dataType : 'json',
                    data : {
                        cmd : 'webrun',
                        tgt : '',
                        args : 'mkcondition;change;' + conditionName + ';'
                                + groupName,
                        msg : ''
                    },

                    success : function(data) {
                        $('#changeStatus img').remove();
                        if (-1 != data.rsp[0].indexOf('Error')) {
                            $('#changeStatus').append(data.rsp[0]);
                        } else {
                            $('#rmcEventStatus div').empty()
                                    .append(data.rsp[0]);
                            $('#chScopeDiaDiv').remove();
                        }
                    }
                });
            },
            'Cancel' : function() {
                $(this).dialog('close');
            }
        }
    });
}

/**
 * Show the make response dialogue
 */
function mkResponseDia() {
    var diaDiv = $('<div title="Make Response"><div>');
    diaDiv.append('Not yet supported.');

    diaDiv.dialog({
        modal : true,
        width : 400,
        close : function(event, ui) {
            $(this).remove();
        },
        buttons : {
            'Ok' : function() {
                $(this).dialog('close');
            },
            'Cancel' : function() {
                $(this).dialog('close');
            }
        }
    });
}

/**
 * Start the condition and response associations
 */
function startStopCondRespDia() {
    var diaDiv = $('<div title="Start/Stop Association" id="divStartStopAss" class="tab"><div>');
    diaDiv.append('Getting conditions').append(createLoader());

    if (!globalCondition) {
        $.ajax({
            url : 'lib/cmd.php',
            dataType : 'json',
            data : {
                cmd : 'webrun',
                tgt : '',
                args : 'lscondition',
                msg : ''
            },

            success : function(data) {
                if (data.rsp[0]) {
                    globalcondition = data.rsp[0];
                    $('#divStartStopAss').empty().append(
                            createAssociationTable(globalCondition));
                    $('#divStartStopAss')
                            .dialog("option", "position", 'center');
                } else {
                    $('#divStartStopAss').empty().append(
                            'There are no conditions');
                }
            }
        });
    } else {
        diaDiv.empty().append(createAssociationTable(globalCondition));
    }

    diaDiv.dialog({
        modal : true,
        width : 570,
        height : 600,
        close : function(event, ui) {
            $(this).remove();
        },
        buttons : {
            'Close' : function() {
                $(this).dialog('close');
            }
        }
    });

    $('#divStartStopAss button').bind(
            'click',
            function() {
                var operationType = '';
                var conditionName = $(this).attr('name');
                if ('Start' == $(this).html()) {
                    operationType = 'start';
                } else {
                    operationType = 'stop';
                }

                $(this).parent().prev().empty().append(createLoader());
                $('#divStartStopAss').dialog('option', 'disabled', true);
                $.ajax({
                    url : 'lib/cmd.php',
                    dataType : 'json',
                    data : {
                        cmd : 'webrun',
                        tgt : '',
                        args : operationType + 'condresp;' + conditionName,
                        msg : operationType + ';' + conditionName
                    },

                    success : function(data) {
                        var conditionName = '';
                        var newOperationType = '';
                        var associationStatus = '';
                        var backgroudColor = '';
                        if ('start' == data.msg.substr(0, 5)) {
                            newOperationType = 'Stop';
                            conditionName = data.msg.substr(6);
                            associationStatus = 'Monitored';
                            backgroudColor = '#ffffff';
                        } else {
                            newOperationType = 'Start';
                            conditionName = data.msg.substr(5);
                            associationStatus = 'Not Monitored';
                            backgroudColor = '#fffacd';
                        }

                        var button = $('#divStartStopAss button[name="'
                                + conditionName + '"]');
                        if (data.rsp[0]) {
                            $('#rmcEventStatus div').empty().append(
                                    'Getting associations\' status').append(
                                    createLoader());
                            $('#rmcEventButtons').hide();
                            button.html(newOperationType);
                            button.parent().prev().html(associationStatus);
                            button.parent().parent().css('background-color',
                                    backgroudColor);
                            globalCondition = '';
                            getConditions();
                        } else {
                            button.html('Error');
                        }

                        $('#divStartStopAss').dialog('option', 'disabled',
                                false);
                    }
                });
            });
}

/**
 * Stop the condition and response associations
 */
function stopCondRespDia() {
    var diaDiv = $('<div title="Stop Association" id="stopAss"><div>');
    diaDiv.append('Getting conditions').append(createLoader());

    $.ajax({
        url : 'lib/cmd.php',
        dataType : 'json',
        data : {
            cmd : 'webrun',
            tgt : '',
            args : 'lscondition;-m',
            msg : ''
        },

        success : function(data) {
            if (data.rsp[0]) {
                $('#stopAss').empty().append(
                        createConditionTable(data.rsp[0]));
                $('#stopAss').dialog("option", "position", 'center');
            } else {
                $('#stopAss').empty().append(
                        'There is not monitored condition.');
            }
        }
    });

    diaDiv.dialog({
        modal : true,
        width : 570,
        close : function(event, ui) {
            $(this).remove();
        },
        buttons : {
            'Stop' : function() {
                var conditionName = $('#stopAss :checked').attr('value');
                if (!conditionName) {
                    alert('Select condition name please.');
                    return;
                }
                $('#rmcEventStatus div').empty().append(
                        'Stoping monitor on ' + conditionName).append(
                        createLoader());
                $.ajax({
                    url : 'lib/cmd.php',
                    dataType : 'json',
                    data : {
                        cmd : 'webrun',
                        tgt : '',
                        args : 'stopcondresp;' + conditionName,
                        msg : ''
                    },

                    success : function(data) {
                        $('#rmcEventStatus div').empty().append(data.rsp[0]);
                    }
                });
                $(this).dialog('close');
            },
            'Cancel' : function() {
                $(this).dialog('close');
            }
        }
    });
}

/**
 * Create the condition table for dialogue
 * 
 * @param cond Condition
 */
function createConditionTd(cond) {
    var conditions = cond.split(';');
    var name = '';
    var showStr = '';
    for (var i in conditions) {
        name = conditions[i];
        // Because there is status and quotation marks in name, 
        // we must delete the status and quotation marks
        name = name.substr(1, name.length - 6);
        showStr += '<input type="radio" name="preCond" value="' + name + '">' + name + '<br/>';
    }

    return showStr;
}

/**
 * Create the association table for dialogue, which show the status and start/stop associations
 * 
 * @param cond Condition
 */
function createAssociationTable(cond) {
    var conditions = cond.split(';');
    var name = '';
    var tempLength = '';
    var tempStatus = '';
    var showStr = '<center><table><thead><tr><th>Condition Name</th><th>Status</th><th>Start/Stop</th></tr></thead>';
    showStr += '<tbody>';

    for (var i in conditions) {
        name = conditions[i];
        tempLength = name.length;
        tempStatus = name.substr(tempLength - 3);
        name = name.substr(1, tempLength - 6);

        if ('Not' == tempStatus) {
            showStr += '<tr style="background-color:#fffacd;"><td>' + name
                    + '</td><td>Not Monitored</td>';
            showStr += '<td><button id="button" name="' + name
                    + '">Start</button></td>';
        } else {
            showStr += '<tr><td>' + name + '</td><td>Monitored</td>';
            showStr += '<td><button id="button" name="' + name
                    + '">Stop</button></td>';
        }
        showStr += '</tr>';
    }

    showStr += '<tbody></table></center>';

    return showStr;
}