var SciverseURL="http://searchapi.scopus.com/";
var SciverseTimeout="40000";
var citedByCount = null;
var inwardURL = null;
var authToken = null;
var authTokenStatusCode = null;
var ipAddress = null;
var contentAPIKey = null;
var searchStatusFlag = null;
citedByCount ='null';
inwardURL ='null';
authToken ='null';
authTokenStatusCode ='null';
ipAddress ='null';
contentAPIKey = 'null';
searchStatusFlag = 'false';
var sciverse = new sciverseInterface();
var Backend = new sciverseBackend();
var outputImage= new output();
outputImage.renderCitedbySearchimage ();
function output(){
// To render the output as image
this.renderCitedbySearchimage = function(){
var sciverseURL=SciverseURL;
var renderLocation= "citedBy";
var element = document.getElementById(renderLocation);
if(searchStatusFlag == "true"){
element.innerHTML='';
}else{
element.innerHTML='';
}
document.sciverseForm.searchButton.disabled = false;
}
}
var response=sciverse.response1;
function sciverseInterface(){
this._resultsValid = false;
this._results = null;
this._errors = null;
this._warnings = null;
this._search = null;
this._callback = null;
this._errorCallback = null;
this._renderLocation= "div_id";
this.Backend = new sciverseBackend();
// see here for explanation of "me":
// http://w3future.com/html/stories/callbacks.xml
var me = this;
//apiKey and it's setter
this._apiKey = null;
this.setApiKey = function(apiKey){
me._apiKey = apiKey;
}
this.search = function(searchObj){
me._resultsValid = false;
me._search = searchObj;
me.Backend.submitSearch(searchObj, me._apiKey, me.searchCallback);
}
}
//This class handles building and submitting the search request to the server as well as
//the callback response from the server.
function sciverseBackend(){
//For cited By search identifiers and input variables
this._doi = "doi";
this._eid = "eid";
this._scp = "scp";
this._pii = "pii";
this._issn = "issn";
this._isbn = "isbn";
this._vol = "vol";
this._issue = "issue";
this._title = "title";
this._firstPg = "firstPg";
this._artNo = "artNo";
this._busy = false;
this._sciverseCallback = null;
this._resultForm = null;
this._reqCounter = 0;
this._requests = {};
//Request static vars (should be config vars in a perfect world)
this._sciverseURL = SciverseURL+"citedBySearchSciverseAPI.url";
this._timeoutVal = SciverseTimeout;
this._responseOb=null;
//request field names
this._preventCache = "preventCache";
this._apiKey = "apiKey";
this._callback = "callback";
//useful callback strings
this._callbackStringStart = "sciverse.Backend._requests.";
this._callbackStringEnd = ".callback";
//useful url chars
this._equals = "=";
this._connector = "&";
this._post = "?";
//functions calling this method need to provide a callback method which is
//in the form function(response). This is due to the fact that this is an
//asyncronus library so when control is returned, processing is not done.
//When the search is complete submitSearch will call the callback function.
this.submitSearch = function(searchObj, apiKey, callback)
{
if(this._busy == true){
//debug.write("Search already in flight...ignoring search request");
return;
}else{
//set busy to true
this._busy = true;
//debug.write("Search submitted: query="+searchObj.getSearch());
this._sciverseCallback = callback;
var searchRequestURL = this._sciverseURL+this._post;
//add in browser cacheing prevention. This is used to change the generated URL
//slightly each time to prevent the browser from caching a response to identical searches.
//That's bad because if it happens the browser won't "run" the response.
searchRequestURL = this.appendVarToURL(searchRequestURL,this._preventCache,this.randomString());
//add in apiKey
searchRequestURL = this.appendVarToURL(searchRequestURL,this._apiKey,apiKey);
searchRequestURL = this.appendVarToURL(searchRequestURL,this._doi,searchObj.getDoi());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._eid,searchObj.getEid());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._scp,searchObj.getScp());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._pii,searchObj.getPii());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._issn,searchObj.getIssn());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._isbn,searchObj.getIsbn());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._vol,searchObj.getVol());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._issue,searchObj.getIssue());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._title,searchObj.getTitle());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._firstPg,searchObj.getFirstPg());
searchRequestURL = this.appendVarToURL(searchRequestURL,this._artNo,searchObj.getArtNo());
this.addRequestToHeader(searchRequestURL);
//setup a timeout in case bad things happen
}
}
//if the value is not null this appends a field and value to an URL
//and returns it. Otherwise it just returns the URL
this.appendVarToURL = function(url, field, value){
if(value != null && value != ""){
url += this._connector+field+this._equals+value;
return url;
}else{
return url;
}
}
//Adds an URL to the header of an HTML document in a javascript tag
//The purpose here is to cause the browser to load the new URL asyncronusly
this.addRequestToHeader = function(searchURL){
var head = document.getElementsByTagName("head")[0];
script = document.createElement('script');
script.id = 'sciverseSearch';
script.type = 'text/javascript';
script.src = searchURL;
head.appendChild(script);
}
//Creates a random string that is 20 chars long.
this.randomString = function() {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 20;
var randomstring = '';
for (var i=0; i