deepdyve = {
	tagsToDiscard : ["script","style"],
	relatedTo: null,
	num: 5,
	apiKey: '',
    fieldName: '',
    docId: '',
    dataSources: [],
    host: 'www.deepdyve.com',
	grabFrom: function() {
		var documentText;
		if (this.relatedTo != null && document.getElementById(deepdyve.relatedTo))
			documentText = deepdyve.stripHTML(document.getElementById(deepdyve.relatedTo).innerHTML);
		else
			documentText = deepdyve.stripHTML(document.body.innerHTML);
    	return documentText.replace(/\s+/g, ' ');
	},
	stripHTML : function(c) {
		var regex = new RegExp('^([^<]*)(<[^>]*>)', 'g');
		var matches = regex.exec(c);
		var result = "";
		var ignoreMode = false;
		var ignoreTags = new Array();
		if (matches == null) result = c;
		while (matches != null) {
			var tag = matches[2];
			//detect ignore start tag
			for (i = 0; i<this.tagsToDiscard.length; i++) {
				var re = new RegExp("<"+this.tagsToDiscard[i], "i");
				if (tag.match(re)) {
					ignoreMode = true;
					ignoreTags.push(this.tagsToDiscard[i]);
				}
			}
			//append content
			if (!ignoreMode)
				result = result + matches[1];
			//detect ignore end tag
			for (i =0;i<this.tagsToDiscard.length;i++) {
				var re = new RegExp("<[ ]*/"+this.tagsToDiscard[i],"i");
				if (tag.match(re)) {
					if (ignoreTags[ignoreTags.length-1] == this.tagsToDiscard[i]) {
						ignoreTags.pop();
					};
					if (ignoreTags.length ==0) {
						ignoreMode=false;
					}
				}
			}
			//process remaining content
			var discard = matches[0].length;
			c = c.substring(discard);
			var regex = new RegExp('^([^<]*)(<[^>]*>)', 'g');
			matches = regex.exec(c);
		}
		return result;
	},
	getMLT: function() {
		var headID = document.getElementsByTagName("head")[0];  
		var newScript = document.createElement('script');  
		newScript.type = 'text/javascript';

        if (deepdyve.fieldName && deepdyve.docId) {
		    newScript.src = 'http://'+deepdyve.host+'/mlt?fieldName='+deepdyve.fieldName+'&docId='+deepdyve.docId+'&n='+deepdyve.num+'&key='+deepdyve.apiKey+'&'+deepdyve.encodeDataSources(deepdyve.dataSources);
        } else {
		    var formattedQuery = encodeURIComponent(deepdyve.grabFrom().substring(0, 1200));
		    //alert('length = '+formattedQuery.length);
		    newScript.src = 'http://'+deepdyve.host+'/mlt?query='+formattedQuery+'&n='+deepdyve.num+'&key='+deepdyve.apiKey;
        }
		headID.appendChild(newScript);
	},
    encodeDataSources: function(a) {
        if (a.length === 0) {
            return '';
        }
        var stringBuffer = [];
        var i, len;
        for (i = 0, len = a.length; i < len; i++) {
            stringBuffer.push(encodeURIComponent(a[i]));
        }
        return 'ds=' + stringBuffer.join(',');
    },
	showMLT: function(response) {
		var stringBuffer = [];
		for (var i=0; i < response.length; i++) {
			stringBuffer.push('<li><a href="http://'+deepdyve.host+response[i].url+'">'+response[i].internal_title+'</a></li>');
		}
		document.getElementById("deepdyveMLTContent").innerHTML = stringBuffer.join('');
	},
	addEvent: function(obj, evType, fn) { 
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, false); 
			return true;
		} else if (obj.attachEvent) {
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			return false;
		}
	}
	
}

deepdyve.addEvent(window, 'load', deepdyve.getMLT);
