/**
 * Bazowy obiekt formularza z mechanizmem transmisji przez AJAX;
 * Kluczowym elementem jest:
 * 1. metoda: this.obj.rysuj()
 * 2. property: this.obj.AJAXsrc; adres danych AJAX pobieranych
 * 
 * @constructor
 * @author	Tomasz Łukawski
 * @type	TForm_object
 */
TForm_object	= function()
{
	//-- domyślne;
	var param = {
		send_ajax_on_select	:true,
		image_src_on_load	:'/images/loading5.gif',
		show_loading_progress:true,
		id:('FO_'+parseInt(Math.random(0,1)*10000000)),
		opakowanie	:false,
		AJAXsrc		:'',
		pack		: undefined
		}
	for (var i in arguments[0]) if (typeof(arguments[0][i])!= 'function') param[i]=arguments[0][i];
		
	this.obj			= _c('div',param);
	this.obj.created	= false;
	/**
	 * Funkcja wywoływana przez mechanizm AJAX.
	 * Domyślna funkcja obsługująca dane zwrotne przesłane do obiektu.
	 */
	this.obj.load	= function( dane )
	{
		while (ch = this.firstChild) this.removeChild(ch);
		this.innerHTML = '';
		if (this.rysuj != undefined) this.rysuj( dane );
	}
	/**
	 * Funkcja wywoływana w trakcie pobierania danych z AJAX
	 */
	this.obj.onload	= function()
	{
		while (ch = this.firstChild) this.removeChild(ch);
		if (this.show_loading_progress) 
		{
			if (this.image_src_on_load != '') 
				this.innerHTML = '<img src="' + this.image_src_on_load + '">';
			else 
				this.innerHTML = '<div>...</div>';
		}
	}
	
	/**
	 * Funkcja wywoływana na zakończenie setByAjax();
	 */
	this.obj.do_zmiany	= function( dane )
	{
		for (this.i in dane)
			if (typeof(dane[this.i]) != 'object')
			{					
				//-- jeżeli 'string' to wykonaj uaktualnienie obiektu
				if (dane[this.i] != '')
					{
						var id	= dane[this.i];
						var adr = id.match(/\([a-z_]*\)/g);
						//--
						if (adr != null) //--adresowanie względne;
						{
							adr = String(adr);
							adr = adr.replace(/[\(\)]/g, '');
							var o = this[adr];
						}
						else //-- adresowanie bezwzględne
 						{
							var o = _get(id);
							adr = id;
						}
						//-- 		
						if (o != null) 
						{
							var dane_ok = false;
							//-- sprawdzamy czy w odpowiedzi przyszły dane do obiektu
							if (dane['wynik_set'] != undefined)							
								if (dane['wynik_set'][adr] != undefined) dane_ok = true;
							//-- jeśli TRUE to wrzuć do funkcji load();
							if (dane_ok) 
							{
								if (o.load != undefined) o.load(dane['wynik_set'][adr]);
							}
							else //-- jeśli FLASE to pobierz ajaxem;
 							{
								if (o.getByAjax != undefined) o.getByAjax();
							}
						}
					}
			}
			else
			//-- jeśli dane to "obiekt" to przypisz wartości z danych do obiektu
			{
				if (this.i == 'wynik_set') continue;
				for (this.j in dane[this.i])
					if (dane[this.i][this.j]!='function')
						obj[this.j]=dane[this.i][this.j];
			}
	}	

	
	this.obj.opakuj	= function( o )
	{
		this.pack = new TFormModul( {tytul:this.tytul} );
		this.pack.append( this );
		(this.stan=='minimize')?this.pack.minimize():this.pack.maximize();
		this.uchwyt	= this.pack;
	}
	this.obj.minimize	= function(){ if (this.pack != undefined) this.pack.minimize(); }
	this.obj.maximize	= function(){ if (this.pack != undefined) this.pack.maximize(); }
	this.obj.packHide	= function(){ (this.pack != undefined) ? this.pack.hide(): this.hide(); }
	this.obj.packShow	= function(){ (this.pack != undefined) ? this.pack.show(): this.show(); }
	this.obj.uchwyt	= this.obj;
	//--
	return this.obj;		
}


/**
 * Opakowanie elementów formularza (wartstwa modulu( title + body ) )
 * @param {Object} param
 */
TFormModul	= function()
{
	//-- domyślne;
	var param = {className:'modul'}
	for (var i in arguments[0]) if (typeof(arguments[0][i]!= 'function')) param[i]=arguments[0][i];
	
	this.obj	= _c('div',param);
	this.obj.stan	= 'maximize';
	this.obj.setParam( param );
	this.obj.rysuj	= function()
	{
		this._tytul	= _c('div',{className:'title'});
		this.b	= _c('span',{className:'title_tekst'}); 
		this.b.apC( _cTxt(this.tytul));
		this.min	= _c('span',{className:'minimize',parent:this});
		this.min.onclick	= function() {this.parent.minimize()}
		this.max	= _c('span',{className:'maximize',parent:this});
		this.max.onclick	= function() {this.parent.maximize()}
		this._tytul.apC( this.b );
		this._tytul.apC( this.min );
		this._tytul.apC( this.max );
		this._body	= _c('div',{className:'body'});
		//--
		this.apC( this._tytul );		
		this.apC( this._body );		
	}
	this.obj.append	= function( o )
	{
		this._body.apC( o );
	}
	this.obj.minimize	= function()
	{
		this._body.hide();
		this.max.show();
		this.min.hide();
	}
	this.obj.maximize	= function()
	{
		this._body.show();
		this.max.hide();
		this.min.show();
	}
	this.obj.rysuj();
	(this.obj.stan=='maximize') ? this.obj.maximize() : this.obj.minimize() ;
	//--
	this.obj.uchwyt = this.obj;
	return this.obj;
}


//-- aliasy obiektu;
TFO			= TForm_object;
TFormObject = TForm_object;
//--

