/**
 * @projectDescription plugin do zarządzania przesuwaniem i zmianą wielkości okna akcji
 * Jeśli włączono "move", dla diva nagłówka dodaje klasę amHeaderMove.
 * Jeśli włączono "resize", dla głównego diva okna dodaje diva z klasą amWindowResize
 * 
 * @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.dynamicsetup = ActionsManager.setup; 

/**
 * Wzbogaca pierwotną metodę o dynamikę
 * 
 * @param {Object} params Obiekt parametrów. Obiekt zawiera następujące właściwości:
 * - move - czy można przesuwać (domyślnie false)
 * - resize - czy można przesuwać. Może być false (domyślnie), lub obiektem o właściwościach:
 *  - minWidth - minimalna szerokość 
 *  - minHeight - minimalna wysokość 
 *  - maxWidth - maksymalna szerokość 
 *  - maxHeight - maksymalna wysokość
 *  Powyższe cztery właściwości należy podawać jako liczby całkowite,np:
 * {'minWidth' : 300, 'minHeight' : 90, 'maxWidth' : 500, 'maxHeight' : 200} - dla takiego obiektu:
 * minimalna szerokość to 300px, 
 * minimalna wysokość to 90px,
 * maksymalna szerokość to 500px, 
 * maksymalna wysokość to 200px
 * Można oczywiście pominąć kilka lub wszystkie właściwości. Wówczas na pominietą właściwość nie będzie ograniczeń. 
 *   
 */
ActionsManager.setup = function(params){
	function pd(name, def) { if (typeof params[name] == "undefined") { params[name] = def; }; };
	
	pd("move", false);
	//pd("resize", {'minWidth' : 300, 'minHeight' : 90});
	pd("resize", false);
	if (params.resize && typeof params.resize != 'object')
		params.resize = {};
	
	if (typeof ActionsManager.mouseX == "undefined" && (params.move || params.resize)){
		if (document.addEventListener){
			document.addEventListener('mousemove',ActionsManager.mouseMove,false);
			document.addEventListener('mouseup',ActionsManager.mouseUp,false);
		}	
		else { 
			document.attachEvent('onmousemove',ActionsManager.mouseMove);
			document.attachEvent('onmouseup',ActionsManager.mouseUp);
		};
		parentObj = document.getElementsByTagName("body")[0];
		parentObj.onselectstart = function(){return false;};
		parentObj.ondragstart = function(){return false;};			
	};
	
	return ActionsManager.dynamicsetup(params);	
};

ActionsManager.objectDown = null;
ActionsManager.objectResize = null;


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

/**
 * Dopisanie do stworzonych obiektó zdarzeń obsługujących przesuwanie i zmianę rozmiarów
 * 
 * @param {AjaxAction} aaObject Obiekt podglądu
 */
ActionsManager.create = function(aaObject){
	ActionsManager.dynamiccreate(aaObject);
	if (aaObject.params.move){
		aaObject.objects.header.className += " amHeaderMove";
		aaObject.objects.header.onmousedown = function(){
			aaObject.position.x = ActionsManager.mouseX;
			aaObject.position.y = ActionsManager.mouseY;
			ActionsManager.objectDown = aaObject;
			aaObject.setZIndex();
		};
		aaObject.objects.header.onmouseup = function(){
			ActionsManager.objectDown = null;
		};
		aaObject.objects.header.onmousemove = function(){
			if (ActionsManager.objectDown == aaObject){
				if (!aaObject.element.style.left) {
					aaObject.element.style.left = aaObject.element.offsetLeft + 'px';
					aaObject.element.style.top = aaObject.element.offsetTop + 'px';
				};
				ActionsManager.move();
			};
		};
	};
	if (aaObject.params.resize){	
		aaObject.objects.windowResize = Mixed.createElement('div', aaObject.element, null, null, 'amWindowResize');
		aaObject.objects.windowResize.onmousedown = function(){
			aaObject.position.x = ActionsManager.mouseX;
			aaObject.position.y = ActionsManager.mouseY;
			ActionsManager.objectResize = aaObject;
			aaObject.setZIndex();
		};
		aaObject.objects.windowResize.onmouseup = function(){
			if (ActionsManager.objectResize == aaObject)
				ActionsManager.objectResize = null;
		};
		aaObject.objects.windowResize.onmousemove = function(){
			if (ActionsManager.objectResize && ActionsManager.objectResize == aaObject)
				ActionsManager.resize();
		};
	};
};

ActionsManager.mouseMove = function(e){
	ActionsManager.mouseX = (typeof e.pageX != "undefined") ? e.pageX : event.clientX;
	ActionsManager.mouseY = (typeof e.pageX != "undefined") ? e.pageY : event.clientY;
	
	ActionsManager.move();
	ActionsManager.resize();
		
};
ActionsManager.move = function(){
	var aamObject = ActionsManager.objectDown;
	if (!aamObject) return;
	x = Number(aamObject.element.style.left.substr(0,aamObject.element.style.left.length-2));
	y = Number(aamObject.element.style.top.substr(0,aamObject.element.style.top.length-2));
	aamObject.element.style.left = (x + (ActionsManager.mouseX - aamObject.position.x)) + 'px'; 
	aamObject.element.style.top = (y + (ActionsManager.mouseY - aamObject.position.y)) + 'px'; 
	aamObject.position.x = ActionsManager.mouseX;
	aamObject.position.y = ActionsManager.mouseY;
};
ActionsManager.resize = function(){
	var aarObject = ActionsManager.objectResize;
	if (!aarObject) return;
	if (!aarObject.element.style.width) {
		aarObject.element.style.width = aarObject.element.offsetWidth + 'px';
		aarObject.objects.container.style.height = aarObject.objects.container.offsetHeight + 'px';
	};		
	var w = Number(aarObject.element.style.width.substr(0,aarObject.element.style.width.length-2));
	var h = Number(aarObject.objects.container.style.height.substr(0,aarObject.objects.container.style.height.length-2));
	w = w + (ActionsManager.mouseX - aarObject.position.x);
	if (typeof aarObject.params.resize.minWidth !='undefined' && w < aarObject.params.resize.minWidth) w = aarObject.params.resize.minWidth;
	if (typeof aarObject.params.resize.maxWidth !='undefined' && w > aarObject.params.resize.maxWidth) w = aarObject.params.resize.maxWidth;
	h = h + (ActionsManager.mouseY - aarObject.position.y);
	if (typeof aarObject.params.resize.minHeight !='undefined' && h < aarObject.params.resize.minHeight) h = aarObject.params.resize.minHeight;
	if (typeof aarObject.params.resize.maxHeight !='undefined' && h > aarObject.params.resize.maxHeight) h = aarObject.params.resize.maxHeight;
	aarObject.element.style.width = w + 'px';
	aarObject.objects.container.style.height = h + 'px'; 
	aarObject.position.x = ActionsManager.mouseX;
	aarObject.position.y = ActionsManager.mouseY;
};

ActionsManager.mouseUp = function(e){
	if (ActionsManager.objectDown)
		ActionsManager.objectDown = null;
	if (ActionsManager.objectResize)
		ActionsManager.objectResize = null;
};
