// Obsluga funkcjonalnosci typu Ajax

// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
	// w tej zmiennej bedzie referencja do obiektu XMLHttpRequest
	var xmlHttp;
	// to powinno zadzialac we wszystkich przegladarkach oprocz IE
	try
	{
		// probojemy stworzyc obiekt XMLHttpRequest
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		// zakładamy że przeglądarka to IE6 lub starszy
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
		// probujemy w kazdym z nich
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
		{
			try
			{
				// probujemy stworzyc obiekt XMLHttpRequest 
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch (e) {}
		}
	}
	// zwraca utworzony obiekt lub wyswietla komunikat o bledzie
	if (!xmlHttp)
		alert("Błąd podczas tworzenia obiektu XMLHttpRequest.");
	else
		return xmlHttp;
}

//////////////////////////////
//    M I N I A T U R Y
//////////////////////////////

// wywolanie otwarcia nowej strony lub zmiany tematyki lub grupy
// strona - numer strony miniatur do otwarcia
// akcja:
//  0 - otwarcie nowej strony, zmiana tematyki (aktualizacja miniatur i stron)
//  1 - wlaczenie/wylaczenie nowosci (skrypt musi przestawic tu wartosc zmiennej nowosc)
//  2 - zmiana grupy
//  3 - wyszukanie wzoru po kodzie
function otworzStrone(strona,akcja,lang)
{
	// tylko jesli xmlHttp różny od void
	if (xmlHttp)
	{
		// próba podłączenia do serwera
		try
		{
			// sciągamy pozostale parametry wywołania
			var grupa = document.getElementById("grupa").value;
			var tematyka = document.getElementById("tematyka").value;
			var nowosc = document.getElementById("nowosc").value;
			var kodProduktu = document.getElementById("kodProduktu").value;
			
			//jesli akcja=1 to zmieniamy wartosc nowosci na odwrotna
			if(akcja == 1) {
				if(nowosc == 1) {
					nowosc = 0;
				} else {
					nowosc = 1;
				}	
			}
			
			//zmieniamy wartosc akcji w taki sposob zeby wywolal sie odpowiedni kod w kontrolerze
			// i tworzymy string z parametrami
			switch (akcja) {
				case 0:
					var params = "grupa=" + grupa + "&tematyka=" + tematyka + "&nowosc=" + nowosc + "&strona=" + strona + "&akcja=1&lang=" + lang;
					break;
				case 1:
					var params = "grupa=" + grupa + "&tematyka=" + tematyka + "&nowosc=" + nowosc + "&strona=" + strona + "&akcja=1&lang=" + lang;
					break;
				case 2:
					var params = "grupa=" + grupa + "&tematyka=" + tematyka + "&nowosc=" + nowosc + "&strona=" + strona + "&akcja=2&lang=" + lang;
					break;
				case 3:
					var params = "kodProduktu=" + kodProduktu + "&akcja=5&lang=" + lang;
					break;
			}

			// inicjujemy połączenie ajax
			xmlHttp.open("GET", "../class/kontrolerAjax.php?" + params, true);
			// okreslamy ktora funkcja ma obsluzyc odpowiedz
			xmlHttp.onreadystatechange = handleRequestOtworzStrone;
			xmlHttp.send(null);
		}
		// komunikat o błędzie
		catch (e)
		{
			//alert("Nie mogę połączyć się z serwerem:\n" + e.toString());
			alert("Nie mozna połączyć się z serwerem.");
		}
	}
}

//funkcja obsługi wywoływana gdy zmienia się status połączenia http
//dla funkcji otworzStrone i zmienNowosc
function handleRequestOtworzStrone()
{
	// jeśli readyState = 4, jesteśmy gotowi do odczytu serverResponse
	if (xmlHttp.readyState == 4)
	{
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200)
		{
			try
			{
				// jest ok więc obsługujemy odpowiedź z serwera w osobnej funkcji
				responseOtworzStrone();
			}
			catch(e)
			{
				// komunikat o błędzie
				//alert("Error reading the response: " + e.toString());
				alert("Error reading the response. Please try again or contact administrator");
			}
		}
		else
		{
			// wyświetlenie komunikatu o statusie 
			//alert("There was a problem retrieving the data:\n" + xmlHttp.statusText);
			alert("There was a problem retrieving the data. Please try again or contact administrator");
		}
	}
}

//funkcja obslugi poprawnej odpowiedzi serwera
//dla funkcjcji otworzStrone i zmienNowosc
function responseOtworzStrone()
{
	// read the message from the server
	var xmlResponse = xmlHttp.responseXML;
	
	// wyłapywanie błędów xml'a w IE i Operze
	if (!xmlResponse || !xmlResponse.documentElement)
		throw("Nieprawidłowa struktura XML:\n" + xmlHttp.responseText);
	
	// wyłapywanie ewentualnych błędów w Firefoksie
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror") throw("Nieprawidłowa struktura XML.");
	
	// tworzymy referencje do dokumentu xml
	xmlRoot = xmlResponse.documentElement;

	// wyszukujemy wezly kolejnych sekcji strony i pakujemy do tablicy
	sekcjaNodes = xmlRoot.getElementsByTagName("sekcja");
		
	// generujemy odpowiednie HTML'e z kolejnych elementów tablicy
	var stronyHtml = sekcjaNodes[0].firstChild.data;
	var filterHtml =  sekcjaNodes[1].firstChild.data;
	var ikonyHtml = sekcjaNodes[2].firstChild.data;
	var etykietaHtml = sekcjaNodes[3].firstChild.data;
	
	// tworzymy referencje do obiektów na stronie
	etykietaDiv = document.getElementById("etykieta");
	stronyDiv = document.getElementById("strony");
	filterDiv = document.getElementById("filter");
	ikonyDiv = document.getElementById("ikonyContent");

	// wrzucamy treść do obiektów na stronie
	etykietaDiv.innerHTML = etykietaHtml;
	stronyDiv.innerHTML = stronyHtml;
	filterDiv.innerHTML = filterHtml;
	ikonyDiv.innerHTML = ikonyHtml;
	
	//sekcje podgladContent obslugujemy warunkowo, o ile jest w xml'u
	if(sekcjaNodes.length > 4) {
		var podgladHtml = sekcjaNodes[4].firstChild.data;
		podgladDiv = document.getElementById("podgladContent");
		//Generujemy tresc html
		podgladDiv.innerHTML = "<img src='../" + podgladHtml + ".jpg' alt='Zdjęcie pudełka' />";
		//Odpalamy funkcje ktora w to miejsce wstawi flasha o ile jest plug-in
		var so = new SWFObject(podgladHtml + ".swf", "mymovie", "295", "260", "5", "#FFFFF9");
		so.write("podgladContent");
	}
}

//////////////////////////////
//      P O D G L A D 
//////////////////////////////

// wywolanie otwarcia podgladu wzoru
function otworzPodglad(numer,lang)
{
	// tylko jesli xmlHttp różny od void
	if (xmlHttp)
	{
		// próba podłączenia do serwera
		try
		{
			// tworzymy string z parametrami
			var params = "numer=" + numer + "&akcja=3&lang=" + lang;
			// inicjujemy połączenie ajax
			xmlHttp.open("GET", "../class/kontrolerAjax.php?" + params, true);
			
			// okreslamy ktora funkcja ma obsluzyc odpowiedz
			xmlHttp.onreadystatechange = handleRequestOtworzPodglad;
			xmlHttp.send(null);
		}
		// komunikat o błędzie
		catch (e)
		{
			//alert("Nie mogę połączyć się z serwerem:\n" + e.toString());
			alert("Nie mogę połączyć się z serwerem");
		}
	}
}

//funkcja obsługi wywoływana gdy zmienia się status połączenia http
//dla funkcji otworzPodglad
function handleRequestOtworzPodglad()
{
	// jeśli readyState = 4, jesteśmy gotowi do odczytu serverResponse
	if (xmlHttp.readyState == 4)
	{
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200)
		{
			try
			{
				// jest ok więc obsługujemy odpowiedź z serwera w osobnej funkcji
				responseOtworzPodglad();
			}
			catch(e)
			{
				// komunikat o błędzie
				//alert("Error reading the response: " + e.toString());
				alert("Error reading the response. Please try again or contact administrator");
			}
		}
		else
		{
			// wyświetlenie komunikatu o statusie 
			//alert("There was a problem retrieving the data:\n" + xmlHttp.statusText);
			alert("There was a problem retrieving the data. Please try again or contact administrator");
		}
	}
}

//funkcja obslugi poprawnej odpowiedzi serwera
//dla funkcjcji otworzPodglad
function responseOtworzPodglad()
{
	// read the message from the server
	var xmlResponse = xmlHttp.responseXML;
	
	// wyłapywanie błędów xml'a w IE i Operze
	if (!xmlResponse || !xmlResponse.documentElement)
		throw("Nieprawidłowa struktura XML:\n" + xmlHttp.responseText);
	
	// wyłapywanie ewentualnych błędów w Firefoksie
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror") throw("Nieprawidłowa struktura XML.");
	
	// tworzymy referencje do dokumentu xml
	xmlRoot = xmlResponse.documentElement;

	// wyszukujemy wezly kolejnych sekcji strony i pakujemy do tablicy
	sekcjaNodes = xmlRoot.getElementsByTagName("sekcja");
		
	// wyciagamy html z xml'a
	var podgladHtml = sekcjaNodes[0].firstChild.data;
	
	// tworzymy referencje do obiektu
	podgladDiv = document.getElementById("podgladContent");

	// wrzucamy treść do obiektu na stronie
	podgladDiv.innerHTML = podgladHtml;
}

//////////////////////////////
//         R A M A 
//////////////////////////////

//ukrywa wyswietlona rame z duzym podgladem
function ukryjRame()
{
	var ramaDiv = document.getElementById("rama");
	ramaDiv.style.visibility = "hidden";
	ramaDiv.innerHTYML = "";
	
	// wyswietlamy ukryte pulldown'y bo w IE5 i IE6 wychodza na wierzch
	grupaDiv = document.getElementById("grupa");
	grupaDiv.style.visibility = "visible";
	tematykaDiv = document.getElementById("tematyka");
	tematykaDiv.style.visibility = "visible";
}

// wywolanie otwarcia podgladu wzoru
function otworzRame(numer,lang)
{
	// tylko jesli xmlHttp różny od void
	if (xmlHttp)
	{
		// próba podłączenia do serwera
		try
		{
			// tworzymy string z parametrami
			var params = "numer=" + numer + "&akcja=4&lang=" + lang;
			// inicjujemy połączenie ajax
			xmlHttp.open("GET", "../class/kontrolerAjax.php?" + params, true);
			
			// okreslamy ktora funkcja ma obsluzyc odpowiedz
			xmlHttp.onreadystatechange = handleRequestOtworzRame;
			xmlHttp.send(null);
		}
		// komunikat o błędzie
		catch (e)
		{
			//alert("Nie mogę połączyć się z serwerem:\n" + e.toString());
			alert("Nie mogę połączyć się z serwerem");
		}
	}
}

//funkcja obsługi wywoływana gdy zmienia się status połączenia http
//dla funkcji otworzRame
function handleRequestOtworzRame()
{
	// jeśli readyState = 4, jesteśmy gotowi do odczytu serverResponse
	if (xmlHttp.readyState == 4)
	{
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200)
		{
			try
			{
				// jest ok więc obsługujemy odpowiedź z serwera w osobnej funkcji
				responseOtworzRame();
			}
			catch(e)
			{
				// komunikat o błędzie
				//alert("Error reading the response: " + e.toString());
				alert("Error reading the response. Please try again or contact administrator");
			}
		}
		else
		{
			// wyświetlenie komunikatu o statusie 
			//alert("There was a problem retrieving the data:\n" + xmlHttp.statusText);
			alert("There was a problem retrieving the data. Please try again or contact administrator");
		}
	}
}

//funkcja obslugi poprawnej odpowiedzi serwera
//dla funkcji otworzRame
function responseOtworzRame()
{
	// read the message from the server
	var xmlResponse = xmlHttp.responseXML;
	
	// wyłapywanie błędów xml'a w IE i Operze
	if (!xmlResponse || !xmlResponse.documentElement)
		throw("Nieprawidłowa struktura XML:\n" + xmlHttp.responseText);
	
	// wyłapywanie ewentualnych błędów w Firefoksie
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror") throw("Nieprawidłowa struktura XML.");
	
	// tworzymy referencje do dokumentu xml
	xmlRoot = xmlResponse.documentElement;

	// wyszukujemy wezly kolejnych sekcji strony i pakujemy do tablicy
	sekcjaNodes = xmlRoot.getElementsByTagName("sekcja");
		
	// wyciagamy html z xml'a
	var podgladHtml = sekcjaNodes[0].firstChild.data;
	
	// tworzymy referencje do obiektu
	podgladDiv = document.getElementById("rama");

	// wrzucamy treść do obiektu na stronie
	podgladDiv.innerHTML = podgladHtml;
	podgladDiv.style.visibility = "visible";
	
	// ukrywamy pulldown'y bo w IE5 i IE6 wychodza na wierzch
	grupaDiv = document.getElementById("grupa");
	grupaDiv.style.visibility = "hidden";
	tematykaDiv = document.getElementById("tematyka");
	tematykaDiv.style.visibility = "hidden";
	
}
