/**
 * Główna funkcja wywołująca procedurę na serwerze zgodnie z 
 * metodologią AJAX. Funkcja może przesyłać dane.
 * Funkcja zwraca true jeśli operacja zakończona powodzeniem,
 * false w przeciwnym przypadku
 *
 * @param string module nazwa modułu
 * @param string call nazwa metody do wywołania
 * @param string data łańcuch (URLencoded) z danymi
 * @return bool 
 *
 */ 
function pacAjaxSent(module, call, data)
{
	var ajax = null;
	
	// Utworzenie obiektu XMLHttpRequest
	if (window.XMLHttpRequest)			{ ajax = new XMLHttpRequest(); }
	else if (window.ActiveXObject)	{ ajax = new ActiveXObject("Microsoft.XMLHTTP") }
	
	if(ajax)
	{
		pacGuiShowCentered('pacGuiWait', 320, 16);
		
		var ok = true;

		// Budujemy zapytanie, bindujemy parametry
		ajax.open("POST", '/index.php5?MOD='+escape(module)+'&CALL='+escape(call), true);
		
		try
		{
			// Wysyłamy zapytanie
			ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		}
		catch(e)
		{
			ok = false;
		}
		
		if(ok)
		{
			ajax.onreadystatechange = function()
			{ 
				if (ajax.readyState==4)
				{
					pacGuiHide('pacGuiWait');

					try
					{				
				    var script  = document.createElement('script');
				    script.setAttribute('language','Javascript');
				    script.setAttribute('type','text/javascript');
				    script.text = ajax.responseText;
				    document.getElementsByTagName('head').item(0).appendChild(script);
					}
					catch(err)
					{
						var tp = ajax.responseText.indexOf('Fatal')-4;

						if(tp>0)
						{
							alert(ajax.responseText.substr(tp).replace(/<[^>]*>/g, ''));
						}
						else
						{
							alert(ajax.responseText.replace(/<[^>]*>/g, ''));
						}
					}
				}
			}
		
			ajax.send(data);
			return true;
		}
	}
	
	alert('Twoja przeglądarka nie wspiera technologii używanych przez portal fotal.pl, w związku z czym funkcja którą właśnie wybrałeś nie będzie działała poprawnie.\n\nProsimy o uaktualnienie przeglądarki do najnowszej możliwej wersji.');
	return false;
}



/**
 * Przetworzenie i wysłanie danych z formularza 
 *
 * UWAGA! Po parametrze call przekazać należy identyfikatory kolejnych
 * pól formularza, przy czym w przypadku grup obiektów checkbox i radio
 * posiadających wspólną nazwę w polu NAME podaje się wyłącznie identyfikator
 * jednego pola z grupy - funkcja automatycznie ustala nazwę pozostałych pól
 * z tak zdefiniowanej grupy.
 *
 * Format wartości przekazywanych do serwera:
 * edit:						wartość
 * textarea:				wartość
 * hidden:					wartość
 * text:						wartość
 * check (yesno):		wartość identyfikatora wybranego subelementu
 * check (grupa):		tablica identyfikatorów; zaznaczone elementy w podtablicy [1], pozostałe w [0]
 * radio:						wartość identyfikatora wybranego subelementu
 * select-one:			wartość identyfikatora wybranego subelementu
 * select-multiple:	tablica identyfikatorów wybranych subelementów
 * pozostałe:				wartość z pola value, innerHTML lub '???' jeśli poprzednie nie były dostępne
 *
 * @param string module nazwa modułu
 * @param string call nazwa metody do wywołania
 * @param string field1...n nazwa pola do wysłania
 * @return bool
 */
function pacAjaxSentForm(module, call)
{
	var	objn;
	var obj;
	var val;
	var data = '';
	var cnt = 2;
	var subCnt = 0;
	
  for(cnt=2; cnt<arguments.length; cnt++)
  {
    objn  = arguments[cnt];
    obj   = document.getElementById(objn);
    
    if(obj)
    {
    	switch(obj.type)
    	{
	      case 'edit':
	      case 'password':
	      case 'textarea':
      	case 'hidden':
	      case 'text':
	      case 'select-one':
	      	val = obj.value;
	      	break;
	      	
	      case 'select-multiple':
	      	if(obj.multiple)
	      	{
						for (subCnt=0; subCnt<obj.options.length; subCnt++) 
						{
							if (obj.options[subCnt].selected)
							{
								val = obj.options[subCnt].value;
					      data += '&'+objn+'[]='+encode(val);
							}
						}
	      		
	      		continue;
	      	}
	      	else
	      	{
	      		val = obj.value;
	      		break;
	      	}
	      	
      	case 'checkbox':
      		var objntmp = obj.name;
      		var objects = document.getElementsByName(objntmp);
      		var objCnt = objects.length;
      		
      		if(objCnt>1)
      		{
      			objn = objntmp;
	      		for(var subCnt=0; subCnt<objCnt; subCnt++)
	      		{
      				var s1l = objn.length+1;
      				var s2l = objects[subCnt].id.length;
      				val = objects[subCnt].id.substr(s1l, s2l-s1l);
      				
	      			if(objects[subCnt].checked==true)
	      			{
					      data += '&'+objn+'[1][]='+encode(val);
	      			}
	      			else
	      			{
					      data += '&'+objn+'[0][]='+encode(val);
	      			}
	      		} 
	      		continue;
      		}
      		else
      		{
	      		val = obj.checked.toString();
	      		break;
      		}
      	
      	case 'radio':
      		val = -1;
      		objn = obj.name;
      		var objects = document.getElementsByName(objn);
      		
      		for(var subCnt=0; subCnt<objects.length; subCnt++)
      		{
      			if(objects[subCnt].checked==true)
      			{
      				var s1l = objn.length+1;
      				var s2l = objects[subCnt].id.length;
      				val = objects[subCnt].id.substr(s1l, s2l-s1l);
      				break;
      			}
      		} 
      		break;
      	
    		default:
    			if(obj.value)	val = obj.value;
    			else if(obj.innerHTML)	val = obj.innerHTML;
    			else val = '???';
    			break;
    	}
    	
      // Dodajemy parametry i ich wartości do url'a
      
			val = val.replace(/\&/g,	"*amp*");
			val = val.replace(/\?/g,	"*ask*");
			val = val.replace(/\=/g,	"*eq*");
			val = val.replace(/\+/g,	"*pl*");
      data += '&'+objn+'='+encode(val);
    }
  }
  
  return pacAjaxSent(module, call, data);
}



/**
 * Wysłanie wartości zaznaczonego na liście elementu
 *
 * Format wartości przekazywanych do serwera:
 * SEL_ID=wartość&SEL_NAME=nazwapola
 *
 * @param string module nazwa modułu
 * @param string call nazwa metody do wywołania
 * @param string id identyfikator pola typu select
 * @return bool
 */
function pacAjaxSentSelect(module, call, id)
{
	var obj = document.getElementById(id);
	var val = null;
	
	if( obj )
	{
		if( (obj.length==0) || (obj.selectedIndex==-1) ) return;
		
		val = obj.options[obj.selectedIndex];
		
	  return pacAjaxSent(module, call, '&SEL_ID='+val.value+'&SEL_TEXT='+val.text+'&SEL_NAME='+id);
	}
	else
	{
		pacAjaxSent(module, call, '&SEL_ID=null&SEL_NAME=null');
	  return false;
	}
}
