(function(){
	// define a namespace, as a TAG URI label (RFC 4151)
	var ns = "tag:kmi.open.ac.uk,2008:Watson:";
	var base = "http://watson.kmi.open.ac.uk/MOAW/";
		
	// create the object that holds 'public' functions
	window[ns] = {
	init: 	function() {
	    $.ajax = function(x){
	      Watson.entitySearch(x.data.q, {
		callback: function(d){
		    var tt = '';
		    var i = 1;
		    for (t in d) {
		      i++;
		      tt += d[t][0] + ' |' + i + '\n';
		      window[ns].cache[d[t][0]+' '] = d[t];
		    }
		    x.success(tt);
		    //setTimeout('window["tag:kmi.open.ac.uk,2008:Watson:"].tooltips()', 1500);
		  }});
	    }    
	    // init
	    window[ns].$ = jQuery.noConflict(true);
	    window[ns].cache = {};
	    window[ns].cacheTT = {};
	    window[ns].counter = 0;
	    window[ns].$("input").autocomplete("/foo/", {
	      minChars: 3,
		  //width: 310,
		  matchContains: true,
		  autoFill: false,
		  multiple: true,
		  multipleSeparator:' ',
		  max: 15,
		  formatItem: function(row, nb, max){
		  var uri = row[0];		  
		  
		  var desc = window[ns].cache[uri];
		  window[ns].cacheTT[window[ns].counter] = '';
		  for (i=2; i < desc.length; i+=2){
		    window[ns].cacheTT[window[ns].counter] += '<b>'+desc[i]+': </b>'+desc[i+1]+'<br/>';
		  }
		  window[ns].cacheTT[window[ns].counter] += '<a href="http://watson.kmi.open.ac.uk/WatsonWUI/entity_look_up.html?q='+desc[0]+'" target="_new">More...</a>';
		  result = '<span id="nid'+window[ns].counter+'" style="width:100%">'
		    + '<img src="';
		  if (desc[1] == "Class")
		    result += 'http://watson.kmi.open.ac.uk/WatsonWUI/images/C.jpg';
		  else if (desc[1] == "Property")
		    result += 'http://watson.kmi.open.ac.uk/WatsonWUI/images/P.jpg';
		  else 
		    result += 'http://watson.kmi.open.ac.uk/WatsonWUI/images/I.jpg';
		  result += '"> '+uri + '</span>';
		  setTimeout('window["tag:kmi.open.ac.uk,2008:Watson:"].tooltip('+(window[ns].counter++)+')', 500);
		  return result;
		}
	      });					
	  },
	tooltip: function(id) {
	    window["tag:kmi.open.ac.uk,2008:Watson:"].$('#nid'+id).tooltip({
	      track: false,
		  top: 0,
		  left: 5,
		  bodyHandler: function() {
		  return window[ns].cacheTT[id];
		  //		  return window["tag:kmi.open.ac.uk,2008:Watson:"].cache[id];
		}
	      });
	  }
	};
	
	// script loader		
	function loadScript(src, callback) {
	  var newScript = document.createElement('script');
	  newScript.type = 'text/javascript';
		newScript.src = src;
		if (callback !== null) {
		  newScript.onload = callback;
		}
		document.getElementsByTagName("head")[0].appendChild(newScript);
	}

	function loadStyle(href) {
   	       var cssNode = document.createElement('link');
		cssNode.type = 'text/css';
		cssNode.rel = 'stylesheet';
		cssNode.href = href;
		cssNode.media = 'screen';
		document.getElementsByTagName("head")[0].appendChild(cssNode);
    }
	
	// load jQuery, it will be public accessible
	// as window[ns].$
	loadScript(base + 'lib/jquery/jquery.js', function(){
		loadScript(base + 'lib/jquery-autocomplete/lib/jquery.bgiframe.min.js');
		loadScript(base + 'lib/jquery-autocomplete/lib/jquery.dimensions.js');
		loadScript(base + 'lib/jquery-autocomplete/lib/jquery.ajaxQueue.js');
		loadScript(base + 'lib/jquery-autocomplete/lib/thickbox-compressed.js');
		loadScript(base + 'lib/jquery-autocomplete/jquery.autocomplete.js');
		loadScript(base + 'lib/jquery-tooltip/jquery.tooltip.js');
		loadScript(base + 'lib/jquery-autocomplete/localdata.js');	
	});

	loadStyle(base + 'lib/jquery-autocomplete/jquery.autocomplete.css');
	loadStyle(base + 'lib/jquery-tooltip/jquery.tooltip.css');

	// load DWR/Watson and initialise
	loadScript('http://watson.kmi.open.ac.uk/WatsonWUI/dwr/interface/Watson.js', function(){
		loadScript('http://watson.kmi.open.ac.uk/WatsonWUI/dwr/engine.js', function(){
			dwr.engine._defaultPath = 'http://watson.kmi.open.ac.uk/WatsonWUI/dwr';
			Watson._path = 'http://watson.kmi.open.ac.uk/WatsonWUI/dwr';
			dwr.engine.setRpcType(dwr.engine.ScriptTag);
			setTimeout('window["' + ns + '"].init()', 1500);
		});	
	});	
		
})();

