// AJAX management
function getXhrObject()
{
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
	{
		xhr = new XMLHttpRequest();
	}
	else
	{
		if(window.ActiveXObject) // Internet Explorer 
		{
			try
			{
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e)
			{ 	
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else // XMLHttpRequest non supporté par le navigateur
		{
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
			xhr = false; 
		} 
	}
	return xhr;
}

// create request and send form
function send_form(url, button)
{
	if(document.getElementById("suggestions").style.display == "none")
	{
		var what = document.forms["main"].elements["what"].value;
		if(document.forms["main"].elements["where"].value.replace("/^\s+/", "").replace("/\s+$/", "") == "")
		{
			var where = "";
		}
		else
		{
			var where = url_key_global;
		}
		if((where == "") || (where != "" && where.length > 2))
		{
			var xhr = getXhrObject();

			xhr.onreadystatechange = function()
			{
				if(xhr.readyState == 4 && xhr.status == 200)
				{
					window.location.href = xhr.responseText;
				}
			}
			
			xhr.open("POST", url+"ajax/ajax_url.php",true);

			xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");

			xhr.send("&what=" + what + "&where=" + where + "&button=" + button);
		}
	}
}

// Get position X
function positionX (obj)
{
	var x = 0;

	do
	{
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	while (obj);
	return x;
}

// Get position Y
function positionY (obj)
{
	var y = 0;
	do
	{
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	while (obj);
	return y;
}

// Submit formulaire
function form_validation(event, url, mouse)
{
	if((event.keyCode == 13 || mouse == 1) && document.getElementById("suggestions").style.display == "none")
	{
		send_form(url, 1);
	}
}

// Load location
function get_location(event, url, location)
{
	if((event.keyCode == 38) || (event.keyCode == 40))
	{
		item_selected = -1;
		for(i = 0; i<document.getElementById("suggestions-list").getElementsByTagName("li").length; i++)
		{
			if(document.getElementById("suggestions-list").getElementsByTagName("li")[i].className == "suggest-over")
			{
				item_selected = i;
			}
		}
		if(item_selected != -1)
		{
			if(event.keyCode == 38 && (item_selected - 1) >= 0)
			{
				document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].className = "suggest-out";
				document.getElementById("suggestions-list").getElementsByTagName("li")[(item_selected - 1)].className = "suggest-over";
				item_selected = item_selected - 1;
			}
			if(event.keyCode == 40 && (item_selected + 1) < document.getElementById("suggestions-list").getElementsByTagName("li").length)
			{
				document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].className = "suggest-out";
				document.getElementById("suggestions-list").getElementsByTagName("li")[(item_selected + 1)].className = "suggest-over";
				item_selected = item_selected + 1;
			}
			if(document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetTop < document.getElementById("suggestions-list").scrollTop)
			{
				document.getElementById("suggestions-list").scrollTop = document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetTop;
			}
			if((document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetTop + document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetHeight) > (document.getElementById("suggestions-list").scrollTop + document.getElementById("suggestions-list").offsetHeight))
			{
				document.getElementById("suggestions-list").scrollTop = document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetTop + document.getElementById("suggestions-list").getElementsByTagName("li")[item_selected].offsetHeight - document.getElementById("suggestions-list").offsetHeight;
			}
		}
		else
		{
			if(document.getElementById("suggestions-list").getElementsByTagName("li").length > 0)
			{
				document.getElementById("suggestions-list").getElementsByTagName("li")[0].className = "suggest-over";
				document.getElementById("suggestions-list").scrollTop = document.getElementById("suggestions-list").offsetHeight;
			}
		}
	}
	else if(event.keyCode == 13)
	{
		if(document.getElementById("suggestions").style.display == "none")
		{
			send_form(url, 1);
		}
		else
		{
			selected_item = 0;
			for(i = 0; i<document.getElementById("suggestions-list").getElementsByTagName("li").length; i++)
			{
				if(document.getElementById("suggestions-list").getElementsByTagName("li")[i].className == "suggest-over")
				{
					selected_item = i;
					
				}
			}
			
			if(selected_item != 0)
			{
				attribute_location(document.getElementById("suggestions-list").getElementsByTagName("li")[selected_item]);
			}
			else if(document.getElementById("suggestions-list").getElementsByTagName("li").length != 0)
			{
				attribute_location(document.getElementById("suggestions-list").getElementsByTagName("li")[0]);
			}
		}
	}
	else
	{
		if(location.length > 1)
		{
		var xhr = getXhrObject();

		xhr.onreadystatechange = function()
		{
			if(xhr.readyState == 4 && xhr.status == 200)
			{
				document.getElementById("suggestions-list").innerHTML = xhr.responseText;
				document.getElementById("suggestions").style.display = "block";
			}
		}
		
		xhr.open("POST", url+"ajax/ajax_location.php",true);

		xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");

		xhr.send("location=" + location);
		}
		else
		{
			document.getElementById("suggestions").style.display = "none"
		}
	}
}

function selected_item(item_position)
{
	for(i = 0; i<document.getElementById("suggestions-list").getElementsByTagName("li").length; i++)
	{
		if(i == item_position)
		{
			document.getElementById("suggestions-list").getElementsByTagName("li")[i].className = "suggest-over";
		}
		else
		{
			document.getElementById("suggestions-list").getElementsByTagName("li")[i].className = "suggest-out";
		}
	}
}

function attribute_location(element)
{
	document.getElementById("where").value = element.innerHTML;
	url_key_global = element.getAttribute("value");
	document.getElementById("suggestions").style.display = "none";
}
