Ext.namespace('Mk');

/**
 * Uniwersalny obiekt window 
 * Okno to jest tak skonfigurowane aby :
 * 	nie wychodziło poza okno przeglądarki (metoda przeciagnij i upuść),
 *  zmniejszyło swoje rozmiary jeżeli okno przeglądarki jest mniejsze
 *  
 * @class Mk.Window
 * @extends Ext.Window
 * 
 * @param {Object} config - konfiguracja indywidualna window
 */
Mk.Window = function(config){			
	
	config = config || {};
	config.listeners = config.listeners || {};
	
	if(Ext.isDefined(config.listeners.show))
		show = config.listeners.show

	Ext.apply(config.listeners,{
		scope:config.listeners.scope || this
		,show : function(container){					
			container.resizeAfterLayout(container);
			if(typeof show != "undefined")
				show.call(this,container);
		}
	});	
	
	Ext.EventManager.onWindowResize(this.resizeAfterBrowserWindowResize, this);
	
	Mk.Window.superclass.constructor.call(this,
		Ext.applyIf(config,{
			buttonAlign		: 'right'
			,closeAction	: 'close'
			,width			: 500
			,y				: 10		
			,closable		: true
			,maximizable	: true			
			,collapsible	: false			
			,autoScroll		: true
			,hideParent		: true
			,modal			: true
			,constrainHeader: true
			,initHidden		: !(Ext.isEmpty(config.aShow) || config.aShow == true)
		})
	);
	
}

Ext.extend(Mk.Window, Ext.Window,{

	/**
	 * 
	 */
	resizeAfterBrowserWindowResize: function(){
		this.resizeAfterLayout(this);
	}
	
	
	/**
	 * Zmienia rozmiar okna i wyśrodkowuje je
	 * @param {Mk.Window} container
	 */
	,resizeAfterLayout: function(container){
		try{
			var screenHeight = window.innerHeight,
				screenWidth = window.innerWidth,		
				pageX = (screenWidth/2-container.getWidth()/2);
				pageY = (screenHeight/2-container.getHeight()/2);
				
			if( typeof(screenHeight) == 'undefined') {
				screenHeight = Ext.getBody().getViewSize().height;
				pageX = (screenWidth/2-container.getWidth()/2);
			}
			if( typeof(screenWidth) == 'undefined') { 
				screenWidth = Ext.getBody().getViewSize().width;
				pageY = (screenHeight/2-container.getHeight()/2);
			}
			
			if(pageX > 0 && pageY >0)
				container.setPosition(pageX,pageY);
	
			//Zmniejsza okno jezeli nie miesci sie we viewporcie przegladarki minimalny rozmiar viewportu to 150
			if (container.getHeight() > screenHeight && container.getHeight() != (screenHeight - 30) && screenHeight!=0 && screenHeight > 150){
				container.setAutoScroll(true);				
				container.setHeight(screenHeight - 30);
				container.setWidth(container.getWidth() + 20);
			}
		
			// zwieksza okno jezeli jest taka mozliwosc - zmniejsza tylko jezeli jest opcja rozwiniecia okna bez uzycia scrolla
			if(container.getLayoutTarget().isScrollable()){			
				var windowItemsHeight = 0;
				for (var i=0; i<container.items.length; i++){
					windowItemsHeight += container.items.get(i).getHeight();
				}
				
				if(screenHeight > (windowItemsHeight+30)){				
					container.setHeight(windowItemsHeight + 55);
					container.setAutoScroll(false); // ?? trzeba sprawdzic z wiekrza iloscia itemsow
				}			
			}
		}
		catch(e){ }
		
	}
	
});
