Considering your restrictions and the severe lack of identifying elements in your HTML output, there is no really nice way to do this... still it is possible. You could try something like this:
First create an array of the Bibliography items:
var biblioArr = [];
var i = 1;
// Create array of bibliography items.
$("h3").nextAll("p").each(function(){ // Find each <p> after <h3>
biblioArr[i] = $(this).html(); // Add <p> html to array
i = i+1;
});
Now find the corresponding markers in the text and change the HTML:
i = 1;
// Add each array item to corresponding text as anchor titles.
$("h2").nextUntil("h3").each(function(){ // Find each <p> after <h2> until <h3>
var textHtml = $(this).html(); // Grab the content of <p>
if (textHtml.indexOf("["+i+"]") >= 0) { // If index found in this <p>
textHtml = textHtml.replace("["+i+"]", "[<a href='#' class='biblio-anchor' title='"+biblioArr[i]+"'>"+i+"</a>]"); // Create new anchor
$(this).html(textHtml); // Add new content
i = i+1;
}
});
You can style the rollover/popup/title/tooltip however you wish.
Please note that this assumes that your bibliography items always appear in sequence (i.e. 2 always follows 1). Also note that this kind of thing is much better suited for server-side execution, the performance of jquery in these situations may not be too good.
Another alternative is to use a pre-existing plugin such as this one.