/* backendURL */
var backendURL = "backend_js.php";
/* zmienna, która określa jak często łączyć się z serwerem*/
var updateInterval = 1.5; // w sekundach
// ustawione na true, wyświetla szczegółowy komunikat o błędach
var debugMode = false;
/* rozpoczyna zapisywanie wiadomości w pamięci podręcznej */
var cache = new Array();
/* jeśli zbyt długo nie będzie odpowiedzi z serwera - próbujemy jeszcze raz */
var serverTime = new Date();
/* czy serwer kontaktuje się z php */
var interacting = false;

function reqInit() {
	pe = new PeriodicalExecuter(doRequest, updateInterval);
	//alert('yeah');
}

/* funkcja wywołana po wciśnięciu przycisku "wyślij" */
var cfblock = true;
function sendCForm(evt)
{
	cfblock = true;
	var params = {};
	params.exe_action = 'cf_send';
	params.cf_nazwisko = $F('cf_nazwisko');
	params.cf_email = $F('cf_email');
	params.cf_temat = $F('cf_temat');
	params.cf_tresc = $F('cf_tresc');
	cache.push(params);
	Event.stop(evt);
	doRequest();
}

/* obsługuje odpowiedź na zgłoszenie do moderacji */
function sendCFormRet(resp) {
	if(debugMode&&$("debug")) $("debug").innerHTML = resp.action + ' '+ resp.kom;
	//showKom(resp.kom,resp.kom_status);
	$('cf_kom').update('<strong>'+resp.kom+'</strong>');
	if(resp.kom_status!='error') {
		$('cf_nazwisko').setValue('');
		$('cf_email').setValue('');
		$('cf_temat').setValue('');
		$('cf_tresc').setValue('');
	}
}

/* wysyła asynchroniczne żądanie */
function doRequest()
{
	try
	{
		var serwerAktT=new Date();
		var sMinely = Math.round((serwerAktT.getTime() - serverTime.getTime())/1000);
		if(interacting&&sMinely<20) return;
		interacting = true;
		serverTime = new Date();//zerujemy czas interakcji z serwerem
		
		// przechowa parametry potrzebne do wykonania żądania na serwerze
		var params = {};
		// jeśli w kolejce czekają wiadomości, to pobiera najstarszą
		if (cache.length>0) {
			params = cache.shift();
		}
		else {//jeśli cache jest pusty
			interacting = false;
			return;
		}

		if(debugMode&&$("debug")) $("debug").innerHTML = params.action;
		//$("debug").innerHTML += ' '+params.action;
		// wywołuje działania po stronie serwera
		var ar = new Ajax.Request(backendURL, {
			method: 'post',
			parameters: params,
			onFailure: function(tr) {
				//alert('Error code: ' + tr.status + '\n');
				//alert(tr.responseText);
				interacting = false;
				},
			onSuccess: function(tr) {
				interacting = false;
				var resp = {};
				try {
					resp = tr.responseText.evalJSON();
					if(resp.exe_action=='cf_send') sendCFormRet(resp);
				}
				catch(err) {
					if(debugMode&&$("debug")) $("debug").innerHTML = 'err1: '+tr.responseText;
				}
				//if (tr.responseText) $("debug").innerHTML = (tr.responseText);
			}
		});
	}
	catch(err)
	{
		if(debugMode&&$("debug")) $("debug").innerHTML = 'err1: '+err.description;
		//alert(err.description);
	}
}
