var xmlHttp

var IE = document.all ? true : false;

function loadContent(url, target, name, value)
{
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = escape(name) + "=" + escape(value);
		target.innerHTML = '<div id="loader"></div>';
		
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				target.innerHTML = text;
			}
		});
	}
	
	return false;
}

function findAddress()
{
	url = 'http://www.trainertrofee.nl/postcode.php';
	
	if(document.tour.postcodenl1.value == '' || document.tour.postcodenl2.value == '' || document.tour.huisnr1.value == '')
		return false;
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = "postcode=" + escape(document.tour.postcodenl1.value) + escape(document.tour.postcodenl2.value) + "&number=" + escape(document.tour.huisnr1.value);
		
		document.tour.straat.value = '';
		document.tour.woonplaats.value	= '';
		
		xmlPostRequest(url, query, function()
		{
			if(xmlDoc = xmlResponse(true))
			{
				if(xmlDoc.getElementsByTagName("street")[0].childNodes[0] != null)
					document.tour.straat.value = 
						xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue;
				if(xmlDoc.getElementsByTagName("city")[0].childNodes[0] != null)
					document.tour.woonplaats.value = 
						xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
  
			}
		});
	}
	
	return false;	
}

function xmlResponse(xml)
{
	if(xmlHttp.readyState == 4)
	{
		if(xmlHttp.status == 200)
		{
			if(xml)
				return xmlHttp.responseXML.documentElement;
			else
				return xmlHttp.responseText;
		}
	}
	
	return false;
}

function xmlPostRequest(url, query, onReadyState)
{
	xmlHttp.open("POST", url, true);
	xmlHttp.onreadystatechange = onReadyState;
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
	xmlHttp.send(query);
}

function GetXmlHttpObject()
{
	var xmlHttp = null;
	try
	{
		xmlHttp = new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function $()
{ 
	var elements = new Array(); 
	for (var i = 0; i < arguments.length; i++)
	{ 
		var element = arguments[i]; 
		if (typeof element == 'string') 
			element = document.getElementById(element); 
		if (arguments.length == 1) 
			return element; 
		elements.push(element); 
	} 
	return elements; 
}

function getOffsetLeft(obj)
{
  var offsetLeft = $(obj).offsetLeft;

  while (obj = $(obj).offsetParent)
  {
	offsetLeft += obj.offsetLeft;
  }

  return offsetLeft;

}

function getOffsetTop(obj)
{
  var offsetTop = $(obj).offsetTop;

  while (obj = $(obj).offsetParent)
  {
	offsetTop += obj.offsetTop;
  }

  return offsetTop;

}

function showDropdown(sender, target, pos, autohide)
{
	if(!sender.className.match(' _active'))
		sender.className += ' _active';
	target.sender = sender;
	target.menupos = pos;
	var elements = document.getElementsByTagName('div');
	
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].className.match('dropdown') && elements[i] != target)
			hideDropdown(elements[i], true);
	}
	
	if(target.style.display != 'block')
	{
		//fade(target, 0, 10 ,100)
	}
	
	target.style.display = 'block';
	
	
	
	if(target.offsetWidth < sender.offsetWidth)
		target.style.width = (sender.offsetWidth - 12) + 'px';
	
	var top  = getOffsetTop(sender) + sender.offsetHeight + 1;
	
	if(pos == "right center")
	{
		var left = getOffsetLeft(sender) + sender.offsetWidth + 2;
		var top = getOffsetTop(sender);
	}
	else if(pos == "right")
	{
		var left = (getOffsetLeft(sender) + sender.offsetWidth) - target.offsetWidth;
	}
	else
	{
		var left = getOffsetLeft(sender);
	}
	
	if((left + target.offsetWidth > document.body.offsetWidth))
	{
		left = document.body.offsetWidth - target.offsetWidth;
	}
	target.style.left = left + 'px';
	target.style.top  = top + 'px';
	
	if(target.offsetHeight + top > document.documentElement.clientHeight)
	{
		target.style.maxHeight = (document.documentElement.clientHeight - 20 - top) + 'px';
	}
	
	document.onclick = function()
	{
		for(i = 0; i < elements.length; i++)
		{
			if(elements[i].className.match('dropdown') && elements[i].doNotHide != true)
			{
				hideDropdown(elements[i], true);
			}
		}
	}
	
	target.doNotHide = true;
	setTimeout("$('" + target.id + "').doNotHide = false;", 100);
	
	target.onclick = function()
	{
		this.doNotHide = true;
		setTimeout("$('" + this.id + "').doNotHide = false;", 100)
	}
	
	return false;
}

function hideDropdowns()
{
	var elements = document.getElementsByTagName('div');
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].className.match('dropdown') && elements[i].doNotHide != true)
		{
			hideDropdown(elements[i], true);
		}
	}
}

function hideDropdown(target, hide)
{
	if(hide == true)
	{
		target.style.display = 'none';
		if(sender = target.sender)
			sender.className = sender.className.replace(' _active', '');
	}
	else
	{
		clearTimeout(target.timeout);
		target.timeout = setTimeout("hideDropdwn($('" + target.id + "'), true);", 250);
	}
}


function go(url)
{
	location.href = url;
}

function fade(el, start, dir, end, fn, vars)
{
	el = $(el)
	clearTimeout(el.o);
	start += dir;
	el.style.filter = 'alpha(opacity=' + start + ')';
	el.style.opacity = (start/100);
	if((dir > 0 && end <= start) || (dir < 0 && end >= start))
	{
		el.style.filter = 'alpha(opacity=' + end + ')';
		el.style.opacity = (end/100);
		if(fn != 'undefined')
		{
			if(vars)
				eval(fn + '(' + vars + ')');
			else
				eval(fn);
		}
	}
	else
		el.o = setTimeout("fade('" + el.id + "'," + start + ", " + dir + ", " + end + ", '" + fn + "', '" + vars + "')", 6);
}

function active(sender)
{
	sender.className = 'active';
}

function search(sender, target, value, url)
{
	clearTimeout(sender.s);
	sender.s = setTimeout("loadContent('" + url + "', $('" + target.id + "'), 'search', '" + value + "')", 1000);
}

function getSuggestions(url, name, value, sender, target)
{
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = escape(name) + "=" + value;
		target.innerHTML = '<div id="loader"></div>';
		
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				target.innerHTML = text;
				showDropdown(sender, target);
	
				var el = target.getElementsByTagName('a');
				for(i = 0; i < el.length; i++)
				{
					el[i].onclick = function(){
						sender.value = this.innerHTML;
						sender.focus();
						hideDropdowns(this);
					}
				}
			}
		});
	}
	
	return false;
}

function walkSuggestions(sender, target)
{
	var KeyID = getKeyCode();
	
	var selectedIndex = -1;
	var go = 0;
	var elements = target.getElementsByTagName('a');
	
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].className == '_active')
		{
			selectedIndex = i;
		}
		elements[i].className = '';
	}
	
	if(KeyID == 38)
		go = -1;
	if(KeyID == 40)
		go = 1;
	
	selectedIndex = (selectedIndex < 0 && KeyID != 13) ? 0 : selectedIndex + go;
	
	if(selectedIndex > -1 && elements[selectedIndex])
		elements[selectedIndex].className = '_active';
	
	if(KeyID == 13)
	{
		
		sender.value = elements[selectedIndex].innerHTML;
		target.style.display = 'none';
		return false;
	}
	return true;
}

function getKeyCode(evt)
{
	if(IE) evt = event;
	var keyCode; 
	if ("which" in evt)
	{
		KeyID = evt.which;  
	} 
	else if ("keyCode" in evt)  
	{  
		KeyID = evt.keyCode; 
	} 
	else if ("keyCode" in window.event)
	{  
		KeyID = window.event.keyCode; 
	} 
	else if ("which" in window.event)  
	{  
		KeyID = evt.which; 
	}
	return KeyID;
}

function suggest(sender, target, url, name, value, evt)
{
	sender.onkeydown = function(){ 
		var KeyID = getKeyCode();
		if(KeyID == 9)
		{
			hideDropdown(target, true);
		}
		return walkSuggestions(sender, target);
		
	}
	
	if(value.length < 1)
		return false;
	
	var KeyID = getKeyCode();

	if(KeyID == 27)
	{
		hideDropdown(target)
		return false;
	}
	
	if(KeyID != 38 && KeyID != 40 && KeyID != 13)
	{
		target.style.display = 'none';
		clearTimeout(this.timeout);
		this.timeout = setTimeout(function(){
			getSuggestions(url, name, value, sender, target);
		}, 250);
	}
}

