var nnOpenerWindow;
var nnLoader = null;

function setOpenerWindow(w) {
	nnOpenerWindow = w;
}
function getOpenerWindow() {
	return nnOpenerWindow;
}

function NNLoader(aHref, singleStartNodeId) {
	/*
	 *	public
	 */
	this.href = aHref;
	this.width = 600;
	this.height = 480;
	this.startNodes = new Array();
	this.callbackFunction = null;
	nnLoader = this;
	
	if (singleStartNodeId) {
		this.startNodes.push(singleStartNodeId);
	}

	/*
	 *	private
	 */
	var windowName = 'nnWindow';

	/*
	 *	methods
	 */
	 
	this.callback = function(nnCallback) {
		var nnWindow = this.getNNWindow();
		
		if (!nnWindow) {
			alert('Could not open NetNavigator');
			return false;
		}
		
		if (typeof(nnWindow.setOpenerWindow)!="undefined") {
			nnWindow.setOpenerWindow(window);
		} else {
			nnWindow.opener.setOpenerWindow(window);
		}
		
		var nnApplet = this.getNNApplet(nnWindow);
		if (nnApplet) {
			if (this.startNodes.length == 1) {
				nnApplet.setNodeToOpen(this.startNodes[0]);
			} else {
				nnApplet.setNodesToOpen(this.startNodes.join(';'));
			}
			
			if (typeof(nnCallback)!="undefined") {				
				this.callbackFunction = nnCallback;
				nnWindow.executeCallback();
			}
			
		} else {
			var loadHref = this.href;
			if (this.startNodes.length > 0) {
				var beginning = '?id=';
				if (loadHref.indexOf('?')>-1) {
					beginning = '&id=';
				}
				loadHref += beginning;
				loadHref += this.startNodes.join('&id=');
			}		
			
			if (typeof(nnCallback)!="undefined") {
				this.callbackFunction = nnCallback;
			}
			nnWindow.location.href = loadHref;
		}
		
		nnWindow.focus();
	};
	
	this.load = function() {
		this.callback(null);
	};
	
	this.addStartNodeId = function(id) {
		this.startNodes.push(id);
	}

	this.getNNWindow = function() {
		return window.open('',windowName,'width='+this.width+',height='+this.height+',location=no,menubar=no,resizable=yes,scrollbars=no,status=yes,toolbar=no');
	}

	this.getNNApplet = function(aWindow) {
		return aWindow.document.applets['nn'];
	}
}


