//
// Update DebianBugs interwiki links presentation
// based on bug status.
//

function update_debbugs_links() {

	var re = new RegExp("^(\\w+://[^/]+)/.*");
	var loc = re.exec(window.location.href);
	var url = loc[1] + "/cgi-bin/bugstatus";

	var buglinks = new Array();

	// Iterate through DebianBugs
	for (var i=0; i < document.links.length; i++) {
		var link = document.links[i];

		if (link.title == "DebianBug") {
			var bugnum = link.text;

			if (isNaN(parseInt(bugnum))) {
				bugnum = bugnum.replace(/^[^0-9]/g, '');
				bugnum = bugnum.replace(/^[^0-9].*/g, '');
			}

			if (isNaN(parseInt(bugnum))) {
				continue;
			}

			bugnum = parseInt(bugnum).toString();

			if (buglinks[bugnum] == undefined) {
				buglinks[bugnum] = new Array();
			}

			buglinks[bugnum].push(link);
		}
	}

	var bugnum;
	var query = new Array();
	for (bugnum in buglinks) {
		query.push("bug=" + bugnum);
	}

	var querystr = query.join(";");

	function update_buglinks(bugstatuses) {
		var bugnum;

		for (bugnum in bugstatuses) {
			for (var i in buglinks[bugnum]) {
				var buglink = buglinks[bugnum][i];
				var bugstatus = bugstatuses[bugnum];

				if (bugstatus.pending == "done") {
					var fixed_versions = bugstatus.fixed_versions.length ? ' in ' + bugstatus.fixed_versions.join(', ') : '';
					buglink.className = 'interwiki closed-bug';
					buglink.title = 'Closed' + fixed_versions + ': #' + bugstatus.id + ': ' + bugstatus.subject;
				} else {
					var found_versions = bugstatus.found_versions.length ? ' in ' + bugstatus.found_versions.join(', ') : '';
					buglink.className = 'interwiki open-bug';
					buglink.title = 'Open' + found_versions + ': #' + bugstatus.id + ': ' + bugstatus.subject;
				}
			}
		}
	}

	// Get bug statuses from script
	var requrl = url + "?" + querystr
	var req = new XMLHttpRequest();
	req.open("GET", requrl, true);
	req.setRequestHeader("Accept", "application/json");
	req.onreadystatechange = function () {
		if (req.readyState == 4) {
			if (req.status == 200) {
				var statuses = eval('('+req.responseText+')');
				update_buglinks(statuses);
			}
			req = null;
		}
	};

	req.send(null);
}

function add_load_event( funct ) {
	var old_onload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = funct;
	} else {
		window.onload = function() {
			old_onload();
			funct();
		}
	}
}

add_load_event( update_debbugs_links );
