/**
 * Load update page
 * 
 * @return Nothing
 */
function loadUpdatePage() {
	var repositoryDiv = $('<div id="repository"></div>');
	var rpmDiv = $('<div id="rpm"></div>');
	var statusDiv = createStatusBar("update");
	statusDiv.hide();

	$('#updateTab').append(statusDiv);
	$('#updateTab').append('<br/>');
	$('#updateTab').append(repositoryDiv);
	$('#updateTab').append(rpmDiv);

	var infoBar = createInfoBar('Select the repository to use and the RPMs to update, then click Update.');
	repositoryDiv.append(infoBar);

	repositoryDiv.append("<fieldset><legend>Repository</legend></fieldset>");
	$.ajax( {
		url : 'lib/systemcmd.php',
		dataType : 'json',
		data : {
			cmd : 'ostype'
		},

		success : showRepository
	});

	rpmDiv.append("<fieldset></fieldset>");
	$.ajax( {
		url : 'lib/systemcmd.php',
		dataType : 'json',
		data : {
			cmd : 'rpm -q xCAT-client perl-xCAT xCAT-server xCAT xCAT-rmc xCAT-UI'
		},

		success : showRpmInfo
	});
}

/**
 * Show the RPM Repository, it can use user's last choice and input
 * 
 * @param data
 *            Data returned from HTTP request
 * @return Nothing
 */
function showRepository(data) {
	var develRepository = "";
	var stableRepository = "";
	var show = "";

	// Get the corresponding repository by OS Type
	if ("aix" == data.rsp) {
		develRepository = "http://xcat.sourceforge.net/aix/devel/xcat-core/";
		stableRepository = "http://xcat.sourceforge.net/aix/xcat-core/";
	} else {
		develRepository = "http://xcat.sourceforge.net/yum/devel/xcat-core/";
		stableRepository = "http://xcat.sourceforge.net/yum/xcat-core/";
	}

	var repoList = $('<ol></ol>');

	// Display the Devel Repository, remember user's last selection
	show = show + "<li><input type='radio' ";
	if (1 == $.cookie('xcatrepository')) {
		show = show + "checked='true'";
	}
	show = show + "name='reporadio' value='" + develRepository + "'>";
	show = show + "<strong>Development</strong>: " + develRepository + "</li>";
	repoList.append(show);

	// Display the Stable Repository, remember user's last selection
	show = "<li><input type='radio' ";
	if (2 == $.cookie('xcatrepository')) {
		show = show + "checked='true'";
	}
	show = show + "name='reporadio' value='" + stableRepository + "' checked='true'>";
	show = show + "<strong>Stable</strong>: " + stableRepository + "</li>";
	repoList.append(show);

	// Display the Input Repository, remember user's last selection
	if (($.cookie('xcatrepository')) && (1 != $.cookie('xcatrepository'))
			&& (2 != $.cookie('xcatrepository'))) {
		show = "<li><input type='radio' checked='true' name='reporadio' value=''>Other: ";
		show += "<input style='width: 500px' id='repositoryaddr' value='"
				+ $.cookie('xcatrepository') + "'</li>";
	} else {
		show = "<li><input type='radio' name='reporadio' value=''>Other: ";
		show += "<input style='width: 500px' id='repositoryaddr' value=''</li>";
	}
	repoList.append(show);
	$('#repository fieldset').append(repoList);
}

/**
 * Show all xCAT RPMs
 * 
 * @param data
 *            Data returned from HTTP request
 * @return Nothing
 */
function showRpmInfo(data) {
	var rpms = null;
	var show = "";
	var rpmNames = new Array("xCAT-client", "perl-xCAT", "xCAT-server", "xCAT", "xCAT-rmc",
			"xCAT-UI");
	var temp = 0;
	if (null == data.rsp) {
		$('#rpm fieldset').append("Error getting RPMs!");
		return;
	}

	rpms = data.rsp.split(/\n/);
	// No rpm installed, return
	if (1 > rpms.length) {
		$('#rpm fieldset').append("No RPMs installed!");
		return;
	}

	// Clear the old data
	$('#rpm fieldset').children().remove();
	$('#rpm fieldset').append("<legend>xCAT RPMs</legend>");
	show = "<table id=rpmtable >";
	show += "<thead><tr>";
	show += "<th><input type='checkbox' id='selectall' value='' onclick='updateSelectAll()'></th>";
	show += "<th><b>Package Name</b></th><th><b>Version</b></th>";
	show += "</tr></thead>";
	for (temp = 0; temp < rpms.length; temp++) {
		// Empty line continue
		if ("" == rpms[temp]) {
			continue;
		}

		// The RPM is not installed, continue
		if (-1 != rpms[temp].indexOf("not")) {
			continue;
		}

		// Show the version in table
		show += "<tr>";
		show += "<td><input type='checkbox' value='" + rpmNames[temp] + "'></td>";
		show += "<td>" + rpmNames[temp] + "</td><td>"
				+ rpms[temp].substr(rpmNames[temp].length + 1) + "</td>";
		show += "</tr>";
	}
	show += "</table>";
	show += "<br\>";
	$('#rpm fieldset').append(show);

	// Add the update button
	var updateButton = createButton('Update');
	$('#rpm fieldset').append(updateButton);
	updateButton.bind('click', function() {
		updateRpm();
	});
}

/**
 * Select all checkboxes
 * 
 * @param Nothing
 * @return Nothing
 */
function updateSelectAll() {
	var check_status = $('#selectall').attr('checked');
	$('input:checkbox').attr('checked', check_status);
}

/**
 * Update selected xCAT RPMs
 * 
 * @return Nothing
 */
function updateRpm() {
	// Remove any warning messages
	$('#updateTab').find('.ui-state-error').remove();

	var rpmPath = $('input[type=radio]:checked').val();
	var rpmPathType = "0";
	var rpms = "";
	var temp = "";

	if (undefined == rpmPath) {
		rpmPath = "";
	}

	// Select other and we should use the value in the input
	if ("" == rpmPath) {
		// user input the repo, and we must stroe it in the cookie
		rpmPath = $('#repositoryaddr').val();
		rpmPathType = rpmPath;
	} else {
		if (-1 == rpmPath.toLowerCase().indexOf("devel")) {
			rpmPathType = "2";
		} else {
			rpmPathType = "1";
		}
	}

	$("input[type=checkbox]:checked").each(function() {
		temp = $(this).val();
		if ("" == temp) {
			return true;
		}

		var pattern = new RegExp("^" + temp + ",|," + temp + ",");
		if (pattern.test(rpms)) {
			return true;
		}
		rpms = rpms + temp + ",";
	});

	if (0 < rpms.length) {
		rpms = rpms.slice(0, -1);
	}

	// Check RPM and repository
	var errMsg = '';
	if (!rpms) {
		errMsg = "Please select an RPM!<br>";
	}

	if (!rpmPath) {
		errMsg += "Please select or specify a repository!";
	}

	if (!rpms || !rpmPath) {
		// Show warning message
		var warn = createWarnBar(errMsg);
		warn.prependTo($('#updateTab'));
		return;
	}

	// Remember users' choice and input
	$.cookie('xcatrepository', rpmPathType, {
		path : '/xcat',
		expires : 10
	});

	$('#update').show();
	$('#update div').empty();
	$('#update div').append("<p>Updating <b>" + rpms + "</b> from <b>" + rpmPath + "</b></p>");
	$('#update div').append("<img id='loadingpic' src='images/loader.gif'>");
	$('#rpm button').attr('disabled', 'true');

	// Send the update command to server
	$.ajax( {
		url : 'lib/cmd.php',
		dataType : 'json',
		data : {
			cmd : 'webrun',
			tgt : '',
			args : 'update;' + rpms + ";" + rpmPath,
			msg : ''
		},

		success : showUpdateResult
	});
}

/**
 * Show the results of the RPM update
 * 
 * @param data
 *            Data returned from HTTP request
 * @return Nothing
 */
function showUpdateResult(data) {
	var temp = 0;
	$('#loadingpic').remove();

	var resArray = data.rsp[0].split(/\n/);
	if (0 < resArray.length) {
		// Show last lines
		if (('' == resArray[resArray.length - 1]) && (resArray.length > 1)) {
			$('#update div').append('<pre>' + resArray[resArray.length - 2] + '</pre>');
		} else {
			$('#update div').append('<pre>' + resArray[resArray.length - 1] + '</pre>');
		}

		// Create link to show details
		$('#update div').append('<br/><a>Show details</a>');
		$('#update div a').css( {
			'color' : '#0000FF',
			'cursor' : 'pointer'
		}).bind('click', function() {
			// Toggle details and change text
			$('#resDetail').toggle();
			if ($('#update div a').text() == 'Show details') {
				$('#update div a').text('Hide details');
			} else {
				$('#update div a').text('Show details');
			}
		});

		var resDetail = $('<pre id="resDetail"></pre>');
		resDetail.hide();
		$('#update div').append(resDetail);
		for (temp = 0; temp < resArray.length; temp++) {
			resDetail.append(resArray[temp] + '<br/>');
		}
	}

	// Update the rpm info
	$.ajax( {
		url : 'lib/systemcmd.php',
		dataType : 'json',
		data : {
			cmd : 'rpm -q xCAT-client perl-xCAT xCAT-server xCAT xCAT-rmc xCAT-UI'
		},

		success : showRpmInfo
	});

	$('#rpm button').attr('disabled', '');
}