/**
 * @projectDescription plugin do pozycjonowania okna akcji
 * 
 * @copyright 2007 Robert (nospor) Nodzewski
 * @author Robert Nodzewski (nospor at interia dot pl)
 * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
 * @version 1.0
 */


/**
 * Zapamiętanie pierwotnej metody
 */
ActionsManager.positionsetup = ActionsManager.setup; 

/**
 * Wzbogaca pierwotną metodę o pozycjonowanie
 * 
 * @param {Object} params Obiekt parametrów. Obiekt zawiera następujące właściwości:
 * - left - współrzędna x
 * - top - współrzędna y
 * - width - szerokość
 * - height - wysokość
 * - center - centrowanie okienka (domyślnie false). Może zawierać następujące wartości:
 *  - false - nie centrować
 *  - true - centrowanie względem okna przeglądarki (uwzględnia scrolle)
 *  - string - id diva, względem którego chcemy centrować
 *  - object - obiekt div, względem którego chcemy centrować
 */
ActionsManager.setup = function(params){
	function pd(name, def) { if (typeof params[name] == "undefined") { params[name] = def; }; };
	
	pd("center", false);
	
	return ActionsManager.positionsetup(params);	
};


/**
 * Zapamiętanie pierwotnej metody
 */
ActionsManager.positioncreate = ActionsManager.create; 

/**
 * Wycentrowanie okienka
 * 
 * @param {AjaxAction} aaObject Obiekt podglądu
 */
ActionsManager.create = function(aaObject){
	ActionsManager.positioncreate(aaObject);

	if (typeof aaObject.params.width != 'undefined')
		aaObject.element.style.width = aaObject.params.width + 'px'; 
	if (typeof aaObject.params.height != 'undefined')
		aaObject.objects.container.style.height = aaObject.params.height + 'px';
	var pageWidth, pageHeight,scrollLeft, scrollTop,centerDiv,xy;
	if (aaObject.params.center){
		pageWidth=0; pageHeight=0;
		scrollLeft = 0; scrollTop = 0;
		if (typeof aaObject.params.center == 'boolean'){ //wycentrowanie względem strony
			if( typeof( window.innerWidth ) == 'number' ) {
				pageWidth = window.innerWidth;
				pageHeight = window.innerHeight;
			} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
				pageWidth = document.documentElement.clientWidth;
				pageHeight = document.documentElement.clientHeight;
			} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
				pageWidth = document.body.clientWidth;
				pageHeight = document.body.clientHeight;
			};
			if( typeof( window.pageYOffset ) == 'number' ) {
				scrollTop = window.pageYOffset;
				scrollLeft = window.pageXOffset;
			} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
				scrollTop = document.body.scrollTop;
				scrollLeft = document.body.scrollLeft;
			} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
				scrollTop = document.documentElement.scrollTop;
				scrollLeft = document.documentElement.scrollLeft;
			};
		} else {
			if (typeof aaObject.params.center == 'string')
				centerDiv = document.getElementById(aaObject.params.center);
			else 
				centerDiv = aaObject.params.center;
			if (!centerDiv) return false;
			pageWidth = centerDiv.offsetWidth;	
			pageHeight = centerDiv.offsetHeight;
			xy = Mixed.getPosition(centerDiv);
			scrollLeft = xy.x + centerDiv.scrollLeft;
			scrollTop = xy.y + centerDiv.scrollTop; 
		};
		
		var aaWidth = aaObject.element.offsetWidth,diffhalf;	
		var aaHeight = aaObject.element.offsetHeight;
		if (aaWidth >= pageWidth){
			aaObject.element.style.left=scrollLeft + 'px';
		} else {
			diffhalf = Math.round((pageWidth - aaWidth)/2);
			aaObject.element.style.left = diffhalf + scrollLeft + 'px';
		};
		if (aaHeight >= pageHeight){
			aaObject.element.style.top=scrollTop + 'px';
		} else {
			diffhalf = Math.round((pageHeight - aaHeight)/2);
			aaObject.element.style.top = diffhalf + scrollTop + 'px';
		};
	};
	if (typeof aaObject.params.left != 'undefined')
		aaObject.element.style.left = aaObject.params.left + 'px'; 
	if (typeof aaObject.params.top != 'undefined')
		aaObject.element.style.top = aaObject.params.top + 'px'; 
};
