//================================================================================
// Plik:	form.js
// Autor: Przemysław Nogaj
// Opis:	Zbiór funkcji do obsługi formularzy i RPC
//================================================================================


	//============================================================================
	// Uaktualnienie listy slave w zależności od wartości wybranej w master
	//============================================================================
	function select_update_slave(master, slave, data)
	{
		var opt = new Option('-- wybierz --', 0, false, false);
		var id = master.options[master.selectedIndex].value;
		
		slave.options.length=0;
		slave.options[slave.length] = opt;
		
		for (var i = 0; i < data.length; i++) 
		{
			if(data[i][0]== id)
			{
				opt = new Option(data[i][2], data[i][1], false, false);
				slave.options[slave.length] = opt;
			}
		}
		
		slave.onchange(0);
	}

	//============================================================================
	// Funkcja dodaje zawartosc pola edycyjnego do listy
	//============================================================================
	function select_add_val(v, l)
	{
		if( v.value=='' )
		{
			alert('Nie mogę dodać pustej wartośći do listy');
		}
		else
		{
			var opt = new Option(v.value, -1, false, false);
			l.options[l.length] = opt;
		}
	}
 
	//============================================================================
 	// Usunięcie zaznaczonej wartości z listy
	//============================================================================
	function select_del_val(l)
	{
		if( l.length==0 )
		{
			alert('Lista jest pusta');
			return;
		}

		if( l.selectedIndex==-1 )
		{
			alert('Proszę zaznaczyć element do usunięcia');
			return;
		}
		
		for (var i = 0; i < l.options.length; i++) 
		{
			if (l.options[i].selected)
			{
				l.options[i]=null;
				i--;
			}
		}
	}
 
	//============================================================================
 	// Wyczyszczenie listy
	//============================================================================
	function select_clear(l)
	{
		if( l.length==0 )
		{
			alert('Lista jest już pusta');
			return;
		}
		
		l.length = 0;
	}
 
	//============================================================================
 	// Skopiowanie zaznaczonych elementów z listy src do dst
	//============================================================================
	function select_copy(src, dst)
	{
		if( src.length==0 )
		{
			alert('Lista źródłowa jest pusta');
			return;
		}

		if( src.selectedIndex==-1 )
		{
			alert('Proszę zaznaczyć element do skopiowania');
			return;
		}
		
		var sopt;
		var dopt;
		
		for (var i = 0; i < src.options.length; i++) 
		{
			if (src.options[i].selected)
			{
				sopt = src.options[i];
				dopt = new Option(sopt.text, sopt.value, false, false);
				dst.options[dst.length] = dopt;
			}
		}
	}
 
	//============================================================================
 	// Skopiowanie wszystkich elementów z listy src do dst
	//============================================================================
	function select_copyall(src, dst)
	{
		if( src.length==0 )
		{
			alert('Lista źródłowa jest pusta');
			return;
		}

		var sopt;
		var dopt;
		
		for (var i = 0; i < src.options.length; i++) 
		{
			sopt = src.options[i];
			dopt = new Option(sopt.text, sopt.value, false, false);
			dst.options[dst.length] = dopt;
		}
	}

	//============================================================================
	// Uaktualnienie zawartości elementu wartością z listy
	//============================================================================
	function set_value_from_list(src, dst, dstid)
	{
		dst.value = src.options[src.selectedIndex].text;
		dstid.value = src.options[src.selectedIndex].value;
	}

	//============================================================================
	// Uaktualnienie zawartości elementu wartością z listy
	// i zaznaczenie elementów na innej liście zgodnie
	// z przekazaną maską
	//============================================================================
	function set_value_and_mask_from_list(src, dst, dstid, mask)
	{
		var check;
		set_value_from_list(src, dst, dstid);

		for (var i = 0; i < dst.options.length; i++) 
		{
			check = true;
			
			src.options[i].selected = check;
		}
	}

	//============================================================================
	// Ukrycie obiektu
	//============================================================================
	function hide(object) 
	{
    if (document.getElementById && document.getElementById(object) != null)
        node = document.getElementById(object).style.visibility='hidden';
    else if (document.layers && document.layers[object] != null)
        document.layers[object].visibility = 'hidden';
    else if (document.all)
        document.all[object].style.visibility = 'hidden';
	}

	//============================================================================
	// szukanie obiektu
	//============================================================================
	function MM_findObj(n, d) 
	{ 
		var p,i,x;  
		
		if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) 
		{
			d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
		}
		
		if(!(x=d[n])&&d.all) 
			x=d.all[n]; 
			
		for (i=0;!x&&i<d.forms.length;i++) 
			x=d.forms[i][n];
			
		for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
			x=MM_findObj(n,d.layers[i].document);
			
		if(!x && document.getElementById) 
			x=document.getElementById(n); 

		return x;
	}
							
	//============================================================================
	// wywołanie rpc dla zdarzenia onClick obiektu <SELECT>
	//============================================================================
	function call_remote_from_list(caller, rpname, module)
	{
		var script = document.createElement('script');
		var obj		 = MM_findObj(caller);
		var	id		 = obj.selectedIndex;

		id = obj.options[id].value;

		obj	=	MM_findObj(rpname);
		
		script.setAttribute('src','index.php?call='+rpname+'&module='+module+'&id='+id);
		script.setAttribute('language','Javascript');
		script.setAttribute('type','text/javascript');
		document.getElementsByTagName('head').item(0).appendChild(script);
		
		rjsStatusboxWrite('Pobieram dane...');
	};
							
	//============================================================================
	// wywołanie rpc dla zdarzenia onClick obiektu <BUTTON>
	//============================================================================
	function call_remote_from_btn(caller, rpname, module)
	{
		var script = document.createElement('script');
		
		script.setAttribute('src','index.php?call='+rpname+'&module='+module);
		script.setAttribute('language','Javascript');
		script.setAttribute('type','text/javascript');
		document.getElementsByTagName('head').item(0).appendChild(script);
	};							

	//============================================================================
	// wywołanie rpc dla zdarzenia onClick obiektu <BUTTON> z wartościami 
	// z list Master i Slave
	// Uwaga! 
	//	Funkcja zachowana w celu wstecznej kompatybilności! Nie rozwijać
	//============================================================================
	function call_remote_from_btnEx(caller, rpname, listS, listM, module)
	{
		var script	= document.createElement('script');
		var obj			= MM_findObj(caller);
		var	val			= 0;
		var	exp			= 0;
		var id			= 0;
		
		// Zmieniamy etykietę buttona...
		//obj.value = 'Czekaj';

		// Pobieramy ID wybranego elementu MASTER
		obj	= MM_findObj(listM);
		id	= obj.selectedIndex;	

		// Zliczamy maskę
		obj	= MM_findObj(listS);
		for (var i = 0; i < obj.options.length; i++) 
		{
			if(obj.options[i].selected==true)
			{
				exp = obj.options[i].value-1;
				val = val + Math.pow(2, exp);
			}
		}
		
		// Wysyłamy...	?call='name'&val='x'&id='y'
		script.setAttribute('src','index.php?call='+rpname+'&module='+module+'&val='+val+'&id='+id);
		script.setAttribute('language','Javascript');
		script.setAttribute('type','text/javascript');
		document.getElementsByTagName('head').item(0).appendChild(script);
	};

	//============================================================================
	// wywołanie rpc dla zdarzenia onClick obiektu <BUTTON> z lista wielu parametrów
	//============================================================================
	function call_remote_from_btnMulti(caller, rpname, module)
	{
		var script	= document.createElement('script');
		var obj			= MM_findObj(caller);
		var	val			= 0;
		var vals		=	'';
		var	exp			= 0;
		var id			= 0;
		var	objn		=	'';
		
		// Zmieniamy etykietę buttona...
		//obj.value = 'Czekaj';

		// lista parametrów...
		for(var cnt=3; cnt<arguments.length; cnt++)
		{
			objn	=	arguments[cnt];
			
			if(objn=='yesnoN')
			{
				objn	= 'yesno';
				val		=	'n';
			}
			else if(objn=='yesnoY')
			{
				objn	= 'yesno';
				val		=	'y';
			}
			else
			{			
				obj		= MM_findObj(objn);
				val		=	obj.toString();
	
				if(val.indexOf('Input'))
				{
					val = obj.value;
				}
				else
				{
					if(val.indexOf('Input'))
					{
						val = obj.selectedIndex;
					}
					else
					{
						val	=	'?';
					}
				}
			}

			// Dodajemy parametry i ich wartości do url'a
			vals += '&'+objn+'='+val;
		}
		

		// Wysyłamy...	?call='name'&val1='x'&val2='y'...&valn='z'
		script.setAttribute('src','index.php?call='+rpname+'&module='+module+vals);
		script.setAttribute('language','Javascript');
		script.setAttribute('type','text/javascript');
		document.getElementsByTagName('head').item(0).appendChild(script);
	};


	
	//============================================================================
	// Funkcja czysci tekst w polu statusowym
	//============================================================================
	function status_clear()
	{
		document.getElementById('rjsStatBody').removeChild(document.getElementById('rjsStatBody').childNodes[0]);
	}
	//============================================================================
	// Funkcja zamyka okienko ze statusem
	//============================================================================
	function status_close(capt, txt, pos_left, pos_top)
	{
		document.getElementById('rjsStatusBody').style.display='none';
	}
	//============================================================================
	// Funkcja wyswietlajaca okienko ze statusem
	//============================================================================
	function status_show(capt, txt, pos_left, pos_top)
	{
		var ctn_text	=	document.createTextNode(txt);
		var ctn_capt	=	document.createTextNode(capt);
		var nodes			= document.getElementById('rjsStatusBody').childNodes.length;

		if(nodes)
		{
			for(i=nodes-1; i>-1; i--)
			{
				document.getElementById('rjsStatusBody').removeChild(document.getElementById('rjsStatusBody').childNodes[i]);
			}
		}
		
		document.getElementById('rjsStatusBody').appendChild(ctn_text);

		if (document.getElementById('rawea_statusdivcapt').childNodes.length)
		document.getElementById('rawea_statusdivcapt').removeChild(document.getElementById('rawea_statusdivcapt').childNodes[0]);
		document.getElementById('rawea_statusdivcapt').appendChild(ctn_capt);
		
		document.getElementById('rawea_statusdiv').style.display='block';

		
		<!-- ---------------------- Pozycjonowanie diva ----------------------------- -->

		var	sizeX				=	0;
		var	sizeY				=	0;
		var pos					= 0;
		var browser			=	0;
		var browserName	=	navigator.appName;
		var browserVer	=	parseInt(navigator.appVersion);

		if(browserName=="Microsoft Internet Explorer")
		{
			browser	=	1;
		}
		else
		{
			if(browserName=="Netscape")
			{
				browser	=	2;
			}
		}

		if(browser==2)
		{
			sizeX = innerHeight; 
			sizeY = innerWidth; 
		}
		else if(browser==1)
		{	
			sizeX = document.body.offsetHeight; 
			sizeY = document.body.offsetWidth; 
		}
		
		if(pos_top==-1)
		{
			pos_top = (sizeY-256)/2;
		}
		
		if(pos_left==-1)
		{
			pos_left = (sizeX-256)/2+200;
		}
		pos_top = (sizeY-256)/2;
		pos_left = (sizeX-320)/2;

		document.getElementById('rawea_statusdiv').style.top	= pos_top;
		document.getElementById('rawea_statusdiv').style.left	= pos_left;
	}
	function status_appendText(txt)
	{
		var ctn	=	document.createTextNode(txt);
		document.getElementById('rjsStatusBody').appendChild(ctn);
	}
	function status_newLine()
	{
		var ctn	=	document.createElement("br");
		document.getElementById('rjsStatusBody').appendChild(ctn);
	}
	function status_bold(mode)
	{
		var ctn = 0;
		if(mode)	ctn	=	document.createElement("b");
		else			ctn	=	document.createElement("\b");
		
		document.getElementById('rjsStatusBody').appendChild(ctn);
	}

	
	
	//============================================================================
	// Pokaz panel
	//============================================================================
	function showpanel(showpanel)
	{
		document.getElementById(showpanel).style.zIndex	= 101;
	}
	//============================================================================
	// Ukryj panel
	//============================================================================
	function hidepanel(hidepanel)
	{
		document.getElementById(hidepanel).style.zIndex	= -101;
	}
	//============================================================================
	// Usuniecie starego tekstu i wpisanie nowego do okreslonego DIV'a
	//============================================================================
	function div_writer(div_name, body_text)
	{
		var content	=	document.createTextNode(body_text);
		var nodes		= document.getElementById(div_name).childNodes.length;

		if(nodes)
		{
			for(i=nodes-1; i>-1; i--)
			{
				document.getElementById(div_name).removeChild(document.getElementById(div_name).childNodes[i]);
			}
		}
		
		document.getElementById(div_name).appendChild(content);
	}
	//============================================================================
	// Usuniecie starego tekstu i wpisanie nowego do okreslonego DIV'a
	//============================================================================
	function div_append(div_name, body_text)
	{
		var content	=	document.createTextNode(body_text);
		var nodes		= document.getElementById(div_name).childNodes.length;

		document.getElementById(div_name).appendChild(content);
	}
	//============================================================================
	// Usuniecie starego tekstu i wpisanie nowego do okreslonego DIV'a
	//============================================================================
	function ctrl_writable(ctrl_name, writable, text)
	{
		var ctrl = document.getElementById(ctrl_name);

		if(ctrl)
		{
			if(writable)
			{
				ctrl.value = '';
				ctrl.style.color 			= '#000000';
				ctrl.style.background =	'#ffffff';
				ctrl.disabled					=	false;
			}
			else
			{
				ctrl.value = '-- '+text+' --';
				ctrl.style.color			= '#800000';
				ctrl.style.background =	'#d8d8e0';
				ctrl.disabled					=	true;
			}
		}
	}
	//============================================================================
	//============================================================================
