/**
 * @author michal
 */
function Window(me){

	var added = false;
	
	var contentEl = new Ext.Element(document.createElement('div'));
	contentEl.update(getContent(me.url));
	contentEl.applyStyles({
		width: '100%',
		height: '100%'
	})
	
	var el = new Ext.Window({
		title: me.title,
		iconCls: me.icon ? 'icon' : 'frame_tab',
		headerStyle: 'background-image: url(' + me.icon + ')',
		width: me.width,
		height: me.height,
		manager: me.manager,
		expandOnShow: false,
		animCollapse: false,
		maximizable: true,
		
		items: [contentEl],
		tools: [{
			id: 'minus',
			handler: me.onCollapse
		}, {
			id: 'gear',
			handler: me.onGear
		}]
	});
	
	el.on('activate', me.onActivate);
	el.on('move', me.onMove);
	el.on('resize', onResize);
	el.on('maximize', setMaximize);
	el.on('restore', setRestore);
	el.on('close', me.onClose);
	el.on('beforeclose', me.beforeClose);
	
	function getContent(url){
		return '<iframe style="width: 100%; height: 100%; border: none;" src="' + url + '" />';
	}
	
	function show(x, y){
		if (!added) {
			el.render('desktop');
			
			var handlers = Ext.get(el.el).query('.x-resizable-handle');
			for (var i = handlers.length - 1; i >= 0; i--) {
				Ext.get(handlers[i]).on('mousedown', me.onActivate);
			};
			
			added = true;
			layout.desktopResize();
		}
		el.show();
		
		if (!el.maximized) {
			el.setPosition(x, y);
		}
	}
	
	this.show = show;
	
	this.setUrl = function(url){
		contentEl.update(getContent(url));
	}
	
	this.setTitle = function(title){
		el.setTitle(title);
	}
	
	this.setIcon = function(icon){
		if (added) {
			var header = Ext.get(Ext.get(el.el).query('.x-window-header'));
			if (icon) {
				header.setStyle('background-image', 'url(' + icon + ')');
				header.removeClass('frame_tab');
				header.addClass('favicon');
			}
			else {
				header.setStyle('background-image');
				header.removeClass('favicon');
				header.addClass('frame_tab');
			}
		}
		else {
			el.iconCls = icon ? 'icon' : 'frame_tab';
			el.headerStyle = 'background-image: url(' + icon + ')';
		}
	}
	
	this.hide = function(){
		if (added) {
			el.hide();
		}
	}
	
	this.destroy = function(){
		if (added) {
			el.destroy();
		}
	}
	
	this.toFront = function(){
		if (added) {
			el.toFront();
		}
	}
	
	this.maximize = function(){
		show();
		el.maximize();
	}
	
	this.restore = function(){
		if (added) {
			el.restore();
		}
	}
	
	function onResize(win, width, height){
		if (!win.maximized) {
			me.width = width;
			me.height = height;
			me.onResize(width, height);
		}
	}
	
	function setMaximize(){
		me.onMaximize();
		Ext.get(Ext.get(el.el).query('.x-tool-minus')).hide();
		
		// kvuli vyplneni prostoru po pripadnych scrollbarech
		Ext.get('desktop').addClass('no-scroll');
		el.hide();
		el.show();
	}
	
	function setRestore(){
		me.onRestore();
		Ext.get(Ext.get(el.el).query('.x-tool-minus')).hide().show();
		
		// zobrazit scrollbary
		Ext.get('desktop').removeClass('no-scroll');
	}
}


