module.exports = new Class({
	Extends: Vn.Object

	,initialize: function(moduleInfo, gui) {
		this.info = moduleInfo;
		this.gui = gui;
		this.conn = gui.conn;
		this.parent(null);
	}

	,open: function(batch) {
		this.batch = batch;
		this.createWindow();
	}
	
	,print: function() {
		this.window.print();
	}

	,includeCss: function(path) {
		var basePath = location.protocol +'//'+ location.host;
		basePath += location.port ? ':'+ location.port : '';
		basePath += location.pathname.substring(0,
			location.pathname.lastIndexOf('/'));
	
		var link = this.doc.createElement('link');
		link.rel = 'stylesheet';
		link.type = 'text/css';
		link.href = basePath +'/'+ path + Vn.getVersion();
		
		var head = this.doc.getElementsByTagName('head')[0];
		head.appendChild(link);
	}

	,createWindow: function() {
		var reportWindow = window.open(
			'js/hedera/report.html', '_blank',
			'height=650, width=950, resizable=yes, fullscreen=no,'+
			'titlebar=no, menubar=no, toolbar=no, location=no, scrollbars=yes'
		);
		
		if (!reportWindow) {
			Htk.Toast.showError(
				_('Please unlock popups and try again'));
			return false;
		}
		
		reportWindow.addEventListener('load', 
			this._onWindowLoad.bind(this));		
		this.window = reportWindow;
		return true;
	}
	
	,_onWindowLoad: function() {
		this.doc = this.window.document

		this.includeCss('reports/'+ this.info.path +'/style.css');
		
		var printButton = this.doc.getElementById('print');
		printButton.addEventListener('click', this.print.bind(this));
		Vn.Node.setText(printButton, _('Print'));
		
		this.onWindowCreate();
	}
	
	,onWindowCreate: function() {
		var builder = new Vn.Builder();
		builder.compileFile('reports/'+ this.info.path +'/ui.xml');

		var scope = this.scope = builder.load(this.doc, this);
		scope.link(null, {
			batch: this.batch,
			conn: this.conn
		});
		this.$ = scope.$;

		this.doc.body.appendChild(scope.$.report);
	}
});