/*
 * selftest.ajax.js Version 1.0 (Jan Sugarek)
 * - subor obsahuje ajax na otestovanie funkcnosti spojenia v pripade zlyhania
 * - pre ostatne skripty su urcene funkcie:
 * 			- selftest_start(set_url) - spustenie testu na urcenej adrese
 *			- selftest_status() - pouzivane ako zabezpecenie  v if vetve proti posielaniu dalsich poziadaviek
 *
 * v1.0 (21.7.2008)
 */

// url na ktorej ziskame data
var selftest_url_request = "request/selftest.request.php";

// xmlHTTP objekct
var selftest_xml_http = createXmlHttpRequestObject();

// objekty
var selftest_e_console = false;

var selftest_error_interval = 500; // v pripade chyby s objektom opakuje poziadavku po tomto case
var selftest_interval = 1000;
var selftest_countdown_start = 10;
var selftest_ok = true; // podla toho ine objekty vedia ci mozu odosielat dalsie poziadavky
var selftest_inprogress = false;

// inicializacna funcia pre user ajax
function selftest_init(e_console)
{
	selftest_e_console = e_console;
}

/*
 * Funkcia inicializuje test. Ak uz nejaky test prebieha nespusti dalsi
 * VSTUP:  set_url - adresa, s ktorou zlyhalo spojenie. Tato adresa je testovana
 * VYSTUP: ziadny
 */
function selftest_start(set_url)
{
	if(selftest_inprogress) return;
	selftest_inprogress = true;
	selftest_ok = false;

	selftest_url_request = set_url;
	selftest_output_timeout(selftest_countdown_start);
}

/*
 * Funkcia poskytuje informaciu o tom ci moze objekt odoslat dalsiu poziadavku
 * ak true - spojenie je v poriadku, ak false nesmie
 */
function selftest_status()
{
	return selftest_ok;
}

/*
 * Funkcia riadi upozornenie pouzivatela na zlyhanie spojenia. A tiez spusta test po urcitom case automaticky
 */
function selftest_output_timeout(count)
{
	var sec_text = "";
	if(count <= 0 || count > 4) sec_text = "sekúnd";
	else if(count > 1 && count <= 4) sec_text = "sekundy";
	else sec_text = "sekundu";
	report_error('SELF-TEST: Vyskytli sa problémy so spojením na adresu \'' + selftest_url_request + '\'. Stránka automaticky otestuje spojenie o ' + count + ' ' + sec_text, false);
	if(count <= 0)
	{
		report_message('SELF-TEST: Prebieha test spojenia...', false);
		selftest_request();
		return;
	}
	count--;
	setTimeout('selftest_output_timeout('+count+')', selftest_interval);
}


function selftest_request()
{
	if(selftest_xml_http)
	{
		try
		{
			if(selftest_xml_http.readyState == 4 || selftest_xml_http.readyState == 0)
			{
				var params = "selftest";

				selftest_xml_http.open("POST", selftest_url_request, true);
				selftest_xml_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				selftest_xml_http.onreadystatechange = selftest_handle_response;

				selftest_xml_http.send(params);
			}
			else
			{
				setTimeout("selftest_request();", selftest_error_interval);
			}
		}
		catch(e)
		{
			report_errror(e.toString(), true);
		}
	}
}


/*
 * Precitanie odpovede
 */
function selftest_handle_response(){
	if(selftest_xml_http.readyState == 4){
		if(selftest_xml_http.status == 200){
			try{
				selftest_read_response();
			}
			catch(e)
			{
				if(e.length == 0)
				{
					selftest_inprogress = false;
					selftest_start(selftest_url_request);
				}
				else{
					report_error(e.toString(), true);
				}
			}
		}
		else{
			selftest_inprogress = false;
			selftest_start(selftest_url_request);
		}
	}
}

function selftest_read_response()
{
	// precitanie odpovede a zistenie ci obsahuje chybove hlasky
	var response = selftest_xml_http.responseText;

	report_success('Spojenie bolo obnovené', false);
	selftest_ok = true;
	selftest_inprogress = false;
}