/*

Automatically fetches details of papers, given their PMID, fills
out the 'add paper' form in Nature Network.

*/

// ==UserScript==
// @name		Nature Network: add papers by PMID
// @namespace		http://www.postgenomic.com/userscripts
// @description		Allows you to add papers by PMID to NN
// @include		http://network.nature.com/publications/new
// ==/UserScript==

// http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=16757574

function do_lookup() {
	if (pmid_box.value.length <= 1) {
		alert("Enter a valid PubMed ID in the field to the left first.");
		return;
	}	

	var pubmed_url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=" + pmid_box.value;

	// call eUtils
	GM_xmlhttpRequest({
	method: 'GET',
	url: pubmed_url,
	onload: function(responseDetails) {
		var response_status=responseDetails.status;
		var response_text=null;
		if (response_status==200){
			var parser = new DOMParser;
			var dom = parser.parseFromString(responseDetails.responseText, "application/xml");	
			// article url
			var article_url = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&list_uids=" + pmid_box.value;
			document.getElementById('publication_url').value = article_url;

			// article title
			var entries = dom.getElementsByTagName('ArticleTitle');
			if (entries[0]) {
				document.getElementById('publication_title').value = entries[0].textContent;
			}

			// journal details
			var entries = dom.getElementsByTagName('Journal');
			if (entries[0]) {
				var titles = entries[0].getElementsByTagName('Title');
				if (titles[0]) {
					document.getElementById('publication_journal_name').value = titles[0].textContent;
				}
				var years = entries[0].getElementsByTagName('Year');	
				if (years[0]) {
					document.getElementById('publication_year').value = years[0].textContent;
				}
				var volumes = entries[0].getElementsByTagName('Volume');	
				if (volumes[0]) {
					document.getElementById('publication_volume').value = volumes[0].textContent;
				}		
			}

			// pages
			var entries = dom.getElementsByTagName('MedlinePgn');
			if (entries[0]) {
				document.getElementById('publication_pages').value = entries[0].textContent;
			}

			// the doi
			var entries = dom.getElementsByTagName('ArticleId');
			for (var i=0; i < entries.length; i++) {
				if (entries[i].getAttribute('IdType') == 'doi') {
					document.getElementById('publication_doi').value = entries[i].textContent;				
				}
			}

			// and authors (the trickiest one)
			var authors = "";
			var entries = dom.getElementsByTagName('Author');
			for (var i=0; i < entries.length; i++) {
				var initials = entries[i].getElementsByTagName('Initials');
				var surname = entries[i].getElementsByTagName('LastName');
				
				if (initials[0] && surname[0]) {
					if (authors) {authors = authors + ", ";}
					authors = authors + surname[0].textContent + ", " + initials[0].textContent;
				}	
			}
			if (authors) {
				document.getElementById('publication_authors').value = authors;				
			}
		} else {
			alert("PubMed returned an error (code " + response_status + "), sorry. Try again later?");
			return;
		}
	}
	});
}

// add a 'lookup' button
var button = document.createElement("input");
button.type = "button";
button.value = "look up details";
button.id = "look_up_pmid";
var pmid_box = document.getElementById("publication_pubmed_id");
button.addEventListener('click', do_lookup, false);

pmid_box.parentNode.insertBefore(button, pmid_box.nextSibling);

// listen out for clicks on the 'lookup' button

