////////////////////////////////////
// adekker 17/08/2009
// Citation Services 
////////////////////////////////////

function dbCitation(data, type, source) {
	this.data = data;
	this.type = type;
	this.source = source;
}
var dbCitations = new Array();


function loadCitation(dbCitation) {	
	CitationDWR.getCitationID(dbCitation.type, dbCitation.data, { 
		callback:function(citation) { drawCitation(citation, dbCitation); },
		timeout: 10000
	});
}

function drawCitation(citation, dbCitation) {

	// Remove citation suffix
	var type = dbCitation.type;
	var source = dbCitation.source;
	var cit = "citation";
	var srcLabel = type.substring(0,type.indexOf(cit)-1);	
	
    var cellFuncs = [
        // Cell 1
        function(data) { 
        	
            var authors = new Array();
            for (i in data.authorCollection) {
                authors.push(data.authorCollection[i].fullName);
            }
            
            var ret = "";
            
            if (authors != null)
            	ret += "<span class=pubauthors>"+ authors.join(',')+"</span> ";
            if (data.journalIssue.yearOfPublication != null && data.journalIssue.yearOfPublication > 0)
            	ret += "<span class=pubauthors>("+data.journalIssue.yearOfPublication+")</span>";
            if (data.title != null)
            	ret += "<br><span class=pubtitle>"+data.title+"</span> ";
            if (data.journalIssue.journal.title != null)
            	ret += "<br><span class=pubjournal>"+data.journalIssue.journal.title+"</span>";
            if (data.journalIssue.volume != null)
            	ret += " <span class=pubvolume>"+data.journalIssue.volume+",</span> ";
            if (data.pageInfo != null)
            	ret +="<span class=pubjournal>"+data.pageInfo+"</span> ";
            if (source != null && source != "CiteXplore")
            	ret +="<span class=pubjournal>(Source: "+source+")</span>";
            if (data.externalId != null && data.dataSource != null)
            	ret += " [<span><a target=_blank href='http://www.ebi.ac.uk/citexplore/citationDetails.do?externalId=" + data.externalId + "&dataSource="+data.dataSource+"' title='Search "+data.externalId + " at CiteXplore'>"+srcLabel+":"+data.externalId+"<img src='images/linkext.gif' border='0' /></a></span>]";
            if (data.abstractText != null && trim(data.abstractText).length > 0) {
            	ret += "<br><a href='#"+data.externalId+"' id=toggleCitAbstract"+data.externalId+" onclick=\"javascript: toggleAbstract('"+data.externalId+"')\" style=\"cursor: pointer\">[show Abstract]</a>"
            		+"<br><span class=citAbstract style='display: none' id=citAbstract"+data.externalId+">"+data.abstractText+"</span>";
            }

            return ret;
        }
    ];

    var options = {
        rowCreator:function(options) { return document.createElement("tr"); },
        cellCreator:function(options) { 
        	
        	var td = document.createElement("td");
        	td.className = "chebiDataContent";
        	
        	return td;
        },
        escapeHtml:false
    };

   	dwr.util.addRows("citations", [citation], cellFuncs, options);
}

function toggleAbstract(id) {

	var citAbs = document.getElementById("citAbstract"+id);
	
    if(citAbs.style.display !="none") {
        dwr.util.setValue("toggleCitAbstract"+id,"[show Abstract]"); 
        citAbs.style.display ="none";    
    } else {
        dwr.util.setValue("toggleCitAbstract"+id,"[hide Abstract]"); 
        citAbs.style.display ="block";
    }
}

//Before and After DWR runs
dwr.engine.setPreHook(function() {
	document.getElementById("citationWait").style.display = 'inline';
});

dwr.engine.setPostHook(postHook);
function postHook() {
	document.getElementById("citationWait").style.display = 'none';
}

function errorHandler(msg) { 
	postHook(); 
}

function testCitationConnection() {
	
	dwr.engine.setErrorHandler(errorHandler);
	
	CitationDWR.getCitationID("MED", "1234", {
		callback: function(msg) {
			dwr.util.removeAllRows("citations");
			document.getElementById("citationHeader").deleteCell(2);
			document.getElementById("citationHeader").deleteCell(1);
			for (i in dbCitations) loadCitation(dbCitations[i]);
		},
		timeout: 4000
	});
}

//Remove the white spaces from begin and end.
function trim(str) {
	return str.replace(/^\s+|\s+$/g, '') ;
}
