/* WAZNE
Na stronie musisz umiescic w naglowno odnosniki do tego pliku ze sktyptem i ze stylami "suggestStyle"
*/

var stype="flights";
var locationURL = window.location.href;
if(locationURL.search("hotels.php")>0) { stype="hotels"; }
else if(locationURL.search("cars.php")>0) { stype="cars"; }
var selection=-1;
var tekst="";
var req = createXMLHttpRequest();

//tablica zmiennych  (id elementow) pod ktorymi maja sie pojawiac sugestie
var elements = new Array("city1","city2");
//nazwy tych pol, najlepiej poprostu numerowac, tak jak nizej, choc mozna sobie jakos inaczej nazwac (nie testowano dla innych nazw)
//jeli bedziemy dodawac elementy, trzeba rowniez pozmieniac troche w arkuszu styli "suggestStyle.css"
var suggestionElement = new Array("suggestion1","suggestion2");

//jesli nie zmienialismy nazw elementow wyzej, to pozostawiamy bez zmian dwie ponizsze wartosci, jesli zmienialismy, to ustawiamy na pierwszy element
var actualSuggestion="suggestion1";
var actualFocus="city1";

//Jesli zmieniamy w stylach cokolwiek (szczegolnie wysokosc elementow, czcionke, lub rozmiar czcionki), to ta wartosc nizej rowniez nalezy zmienic (najlepiej testowo)
var height = 19;

//Szerokosc pola sugestii, jesli zmieniamy w stylach, to tutaj nalezy ustawic na taka sama wartosc, choc wydaje mi sie, ze wszystko sie powinno zmiescic
var width = '350px';

//link do obrazka samolociku
var linkToImage = "img/airport_icon.gif";

//Tworzy element XMLHTTpRequest (uwzglednia rozne przegladarki)
function createXMLHttpRequest()
{
	try
	{
		return(new ActiveXObject("Msxml2.XMLHTTP"));
	}catch(e){}
	try
	{
		return(new ActiveXObject("Microsoft.XMLHTTP"));
	}catch(e){}
	try
	{
		return(new XMLHttpRequest());
	}catch(e){}

	return null;
}

//Wiadomo, po co tak duzo pisac, jak mozna napisac $()
function $(id)
{
	return document.getElementById(id);
}

//funkcja pobiera pozycje absolutna elementow, pod ktorymi maja sie pojawic podpowiedzi potrzebne to jest, zeby pojawialy sie w dobrym miejscu
function getAbsPos(element, side)
{
    position = 0;
	if(side=="Top")
		position+=parseInt(element.style.height);
	while (element != null)
	{
		position += element["offset" + side];
        element = element.offsetParent;
    }

	return position;
}

//Funkcja uruchamiana na starcie, dodaje div'y z podpowiedziami do strony (Mozna na sztywno, ale duzo zmiany kodu, wiec odradzam)
function addSuggestDiv(element,suggestionName)
{
	suggest=document.createElement(suggestionName);
	suggest.id=suggestionName;
	suggest.className = suggestionName;
	suggest.style.visibility ="hidden";
	hide();

	suggest.style.top=getAbsPos(element, "Top");
	suggest.style.left=getAbsPos(element, "Left");
	document.body.appendChild(suggest);
	element.setAttribute("autocomplete","off");
	element.onfocus = function(){setActualSuggestion(element);}
	element.onblur = function(){unset();}
}

//Funkcja ustawiajaca zmienna globalna (zeby wiedziec na ktorym elemencie aktualnie pracujemy)
function setActualSuggestion(element)
{
	element.value="";
	actualFocus=element.id;
	for(i=0;i<elements.length;i++)
	{
		if(elements[i]==element.id)
		{
			actualSuggestion=suggestionElement[i];
		}
	}
}

//funkcja chowa pole z podpowiedziami i zeruje zmienne, wywoluje tez funkcje ukrywajaca element iframe
function unset()
{
	hide();
	$(actualSuggestion).innerHTML="";
	$(actualSuggestion).style.visibility ="hidden";
	selection=-1;
	tekst="";
}

//Funkcja przetwarzajaca odpowiedz z serwera i wywolujaca funkcje dodajaca podpowiedzi
function parseResponse()
{
	if (req.readyState == 4)
	{
		str = req.responseText.split("\n");
		$(actualSuggestion).innerHTML="";
		dlugosc=str.length;
		if(str.length>16)
		{
			dlugosc=16;
		}

		for(i=0; i < dlugosc - 1; i++)
		{
			addSuggestIntoDiv(str[i],i);
		}


		if(str.length <2)
		{
			$(actualSuggestion).style.visibility ="hidden";
			hide();
		}
		else
		{
			$(actualSuggestion).style.visibility ="visible";
			show($(actualSuggestion),dlugosc-1);
		}
	}
}

//Funkcja  wywolujaca plik *.php, ktory zwraca nam odpowiedzi
function searchSuggest()
{

	if (req.readyState == 4 || req.readyState == 0)
	{
		req.open("GET", 'searchSuggest.php?search=' + tekst +'&stype='+stype, true);
		req.onreadystatechange = parseResponse;
		req.send(null);
	}
}

//Funkcja wywolywana przy kazdym nacisnieciu klawisza (potrzebna, aby na biezaca uaktualniac podpowiedzi)
function keyUp(element)
{
	if(element.value != tekst)//cos sie zmienilo
	{

		tekst = element.value;
		if(tekst.length>2)
		{
			if(selection>-1)
			{
				$(selection).className = "suggest_link";
				selection=-1;
			}
			searchSuggest();
		}
	}

	if(element.value == "")
	{
		if(selection>-1)
		{
			$(selection).className = "suggest_link";
			selection=-1;
		}
		$(actualSuggestion).innerHTML="";
		$(actualSuggestion).style.visibility ="hidden";
		hide();
	}

}

//Funkcja reagujaca na nacisniecie kursorow, lub entera, dzieki temu jest tez mozliwe poruszanie sie po podpowiedziach za pomoca stralek
function keyDown(e, element)
{
	kod = (window.event) ? window.event.keyCode : e.which;
	var count = $(actualSuggestion).childNodes.length;

	if(kod == 40)//dol
	{
		if(selection+1<count)
		{
			selection ++;
		}
		$(selection).className= "mouse_over";
		if(selection-1>-1)
		{
			$(selection-1).className = "suggest_link";
		}
	}
	if(kod == 38)// gora
	{
		if(selection -1>-1)
		{
			selection --;
		}
		else
		{
			selection = -1;
			$(selection+1).className = "suggest_link";
			return false;
		}
		$(selection).className= "mouse_over";
		if(selection+1<=count)
		{
			$(selection+1).className = "suggest_link";
		}
	}

	if(kod == 13) //enter
	{
		if(selection >-1 && selection < count)
		{
			click($(selection));
			return false;
		}
	}
	return true;
}

//Funkcja dodajaca poszczegolne podpowiedzi i ustawaijaca ich wlasciwosci
function addSuggestIntoDiv(suggestionString, id)
{
	suggest = document.createElement("suggest_link");
	suggest.innerHTML = '<div class="suggest_link" id="'+id+'" onmousedown="click(this)"; onmouseover="onOver(this);"  onmouseout="onOut(this)";><img style="display:inline; vertical-align:middle" src='+linkToImage+'>' + suggestionString + '</div>';

	$(actualSuggestion).appendChild(suggest);
	$(id).onmousedown = function(){click(this);}
}

//Funkcja zmieniajaca clase elementu, na ktory najechala wlasnie myszka, dzieki temu uzyskujemy efekt podswietlenia
function onOver(element)
{
	if(selection>-1)
	{
		$(selection).className = "suggest_link";
		selection=-1;
	}

	element.className = "mouse_over";
}

//Funkcja ustawajaca klase elementu na taka, jak byla przed najechaniem mysza. Reaguje na opuszczenie przez kursor jej obszaru
function onOut(element)
{
	element.className = "suggest_link";
}

//Funkcja wywolywana po nacisnieciu entera na elemencie, lub kliknieciu na niego mysza. Ustawia wszystkie wartosci, na poczatkowe, i dodaje do pola input wybrany element
function click(element)
{
	value = element.innerHTML;
	//Nalezy usunac fragment, w ktorym sa informacje o obrazku samolocika
	value = value.split(">");
	value = value[value.length-1];
	$(actualFocus).value = value;
	tekst = $(actualFocus).value;
	$(actualSuggestion).style.visibility ="hidden";
	$(actualSuggestion).innerHTML="";
	selection=-1;
	hide();
	return false;
}

//funkcja pokazujaca element iframe (pod spodem wyswietlanych podpowiedzi), inaczej w IE przeswitywalyby pola SELECT
function show(element, count)
{
	hide();
	shimmer = document.createElement('iframe');
	shimmer.id='shimmer';
	shimmer.style.position='absolute';
	shimmer.style.width=width;
	shimmer.style.height=((count*height)+2).toString()+'px';
	shimmer.style.top=element.offsetTop;
	shimmer.style.left=element.offsetLeft;
	shimmer.style.zIndex='800';
	shimmer.setAttribute('frameborder','0');
	document.body.appendChild(shimmer);
}

//Funkcja ukrywa element iframe, (wywolywana jest, gdy chowamy podpowiedzi)
function hide()
{
	if(shimmer = $('shimmer'))
		document.body.removeChild(shimmer);
}

//Przy starcie strony dodawane sa niezbedne elementy, mozna by to bylo dodac bezposrednio do strony, ale za duzo zmian by to wymagalo
window.onload = function()
{
	for(i=0;i<elements.length;i++)
	{
		addSuggestDiv($(elements[i]),suggestionElement[i]);
		$(elements[i]).onkeydown = function(event)
		{
			if(!keyDown(event, $(this.id)))
			{
				return false;
			}
		}

		$(elements[i]).onkeyup = function()
		{
			keyUp($(this.id));
		}
	}
}