var xmlHttp

var IE = document.all ? true : false;

function postForm(url, target, form, hideLoader)
{
	if(xmlHttp = GetXmlHttpObject())
	{
		
		var query = "";
		
		var inputs = form.elements;
		for(i = 0; i < inputs.length; i++)
		{
			if(inputs[i].tagName.toLowerCase() == 'input' ||
				inputs[i].tagName.toLowerCase() == 'textarea' ||
				inputs[i].tagName.toLowerCase() == 'select')
			{
				query += escape(inputs[i].name) + "=" + escape(inputs[i].value) + "&";
			}
		}
		
		target.style.display = 'block';
		if(!hideLoader)
			target.innerHTML = '<div id="loader"></div>';
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				target.innerHTML = text;
			}
		});
	}
	return false;
}

function loadContent(url, target, name, value, hide_loader)
{
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = escape(name) + "=" + escape(value);
		if(!hide_loader)
		target.innerHTML = '<div id="loader"></div>';
		
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				target.innerHTML = text;
			}
		});
	}
	
	return false;
}

function loadPictures(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;
				if(target.id != 'pictures')
					fade(target, 0, 10, 100, "clearThumbnails();");
				processThumbnails();
			}
		});
	}
	
	return false;
}

function findAddress(url)
{
	if(document.register_form.postcode.value == '' || document.register_form.address.value == '')
		return false;
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = "postcode=" + escape(document.register_form.postcode.value) + "&number=" + escape(document.register_form.address.value);
		
		document.register_form.street.value = '';
		document.register_form.city.value	= '';
		
		xmlPostRequest(url, query, function()
		{
			if(xmlDoc = xmlResponse(true))
			{
				if(xmlDoc.getElementsByTagName("street")[0].childNodes[0] != null)
					document.register_form.street.value = 
						xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue;
				if(xmlDoc.getElementsByTagName("city")[0].childNodes[0] != null)
					document.register_form.city.value = 
						xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
  
			}
		});
	}
	
	return false;	
}

var processing = false;

function processThumbnails()
{
	processing = true;
	
	var divs = document.getElementsByTagName('div');
	var total = 0;
	for(i = 0; i < divs.length; i++)
	{
		if(divs[i].className == 'thumbnail')
		{
			var imgHeight = divs[i].getElementsByTagName('img').item(0).offsetHeight;
			/*var marginTop = Math.round((100 - imgHeight) / 2);
			divs[i].getElementsByTagName('img').item(0).style.marginTop = marginTop + 'px';*/
			total++;
		}
	}
	displayThumbnails(0, total);
}

function displayThumbnails(current, total)
{
	var thumbs = document.getElementsByTagName('div');
	var list = new Array();
	var p = 0;
	for(i = 0; i < thumbs.length; i++)
	{
		if(thumbs[i].className == 'thumbnail')
		{
			list[p] = thumbs[i];
			p++;
		}
	}
	if(list.length > 0)
	{
		fade(list[current].id, 0, 25, 100);
		current++;
		if(current < total)
		{
			setTimeout("displayThumbnails(" + current + ", " + total + ")", 50);
		}
		else
		{
			clearThumbnails();
			processing = false;
		}
	}
	else
	{
		clearThumbnails();
		processing = false;
	}
}

function clearThumbnails()
{
	$('gallery').style.filter = '';
	$('pictures').style.filter = '';
}

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)
{
	
	query = query + '&ajax=1';
	
	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, noautohide)
{
	if(!sender.className.match(' _active'))
		sender.className += ' _active';
	target.sender = sender;
	target.menupos = pos;
	var elements = document.getElementsByTagName('div');
	
	if(typeof(noautohide) == 'undefined')
	{
		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';
	
	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 if(pos == "left")
	{
		var left = getOffsetLeft(sender) - target.offsetWidth;
		var top = getOffsetTop(sender);
	}
	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.replace(/<[\/]?u>/ig,'');
						sender.focus();
						hideDropdowns(this);
					}
					var regex = new RegExp('(' + value + ')', 'i')
					el[i].innerHTML = el[i].innerHTML.replace(regex, '<u>$1</u>');
				}
			}
		});
	}
	
	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;
			target.scrollTop = i * elements[i].offsetHeight - target.offsetHeight + (elements[i].offsetHeight * 3);
		}
		elements[i].className = '';
	}
	
	if(KeyID == 38)
		go = -1;
	if(KeyID == 40)
		go = 1;
	
	selectedIndex = (selectedIndex + go < 0 && KeyID != 13) ? -1 : selectedIndex + go;
	
	if(selectedIndex > -1 && elements[selectedIndex])
		elements[selectedIndex].className = '_active';
		
	if((KeyID == 13 || (KeyID == 9 && selectedIndex > -1)) && target.style.display != 'none')
	{
		sender.value = elements[selectedIndex].innerHTML.replace(/<[\/]?u>/ig,'');
		hideDropdowns();
		if(KeyID != 9)
		{
			return false;
		}
	}
	if(KeyID == 9 && selectedIndex == -1)
	{
		hideDropdowns();
	}
	return true;
}

function getKeyCode()
{
	var evt = window.event ? event : e
	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(){ 
		return walkSuggestions(sender, target);
		
	}
	sender.onblur = function()
	{
		clearTimeout(sender.timeout);
	}
	
	if(value.length < 1)
		return false;
	
	var KeyID = getKeyCode();

	if(KeyID == 27)
	{
		hideDropdown(target)
		return false;
	}
	
	if(KeyID != 38 && KeyID != 40 && KeyID != 13 && KeyID != 9)
	{
		target.style.display = 'none';
		clearTimeout(sender.timeout);
		sender.timeout = setTimeout(function(){
			getSuggestions(url, name, value, sender, target);
		}, 250);
	}
}

function randomPassword(length)
{
	chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	pass = "";
	for(x=0;x<length;x++)
	{
		i = Math.floor(Math.random() * 62);
		pass += chars.charAt(i);
	}
	return pass;
}

function urlencode(str) {
return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

function loadFormDesign(spacer)
{
	var el = document.getElementsByTagName('input');
	for(i = 0; i < el.length; i++)
	{
		if(el[i].type == 'checkbox')
		{
			el[i].style.visibility = 'hidden';
			el[i].style.position = 'absolute';
			var img = document.createElement('img');
			img.checkbox = el[i];
			
			if(el[i].checked)
				img.className = 'checkbox checkbox_checked';
			else
				img.className = 'checkbox';
			img.src = spacer;
			img.onclick = function(){
				this.checkbox.click();
				if(this.checkbox.checked)
					this.className = 'checkbox checkbox_checked';
				else
					this.className = 'checkbox';
			}
			el[i].parentNode.insertBefore(img,el[i]);
		}
		if(el[i].type == 'radio')
		{
			el[i].style.visibility = 'hidden';
			el[i].style.position = 'absolute';
			var img = document.createElement('img');
			if(el[i].checked)
				img.className = 'radio radio_checked';
			else
				img.className = 'radio';
			img.src = spacer;
			el[i].img = img;
			img.radio = el[i];
			img.onclick = function(){
				this.radio.click();
				var radios = document.getElementsByTagName('input');
				for(i = 0; i < radios.length; i++)
				{
					if(radios[i].name == this.radio.name)
						radios[i].img.className = 'radio';
				}
				if(this.radio.checked)
					this.className = 'radio radio_checked';
				else
					this.className = 'radio';
				
			}
			el[i].parentNode.insertBefore(img,el[i]);
		}
	}
}

function checkForm(form)
{
	if(form.name == 'form_stap1')
	{
		if(!$('heart1').checked && !$('heart2').checked && !$('heart3').checked)
		{
			showDropdown($('heart3').parentNode, $('hartje'), 'right center');
			return false;
		}		
	}
	if(form.name == 'form_stap2')
	{
		if(form.message.value.length < 1)
		{
			showDropdown(form.message, $('boodschap'), 'right center');
			return false;
		}		
	}
	return true;
}

function formError(field, error_field)
{
	if(!error_field)
		error_field = 'error';
		
	var elements = document.getElementsByTagName('*');
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].name == field || elements[i].id == field)
		{
			showDropdown(elements[i], $(error_field), 'left', true);
			return;
		}
	}
}

function getAddress(url)
{
	var postcode = $('postcode').value
	var house	 = $('house').value;
	
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = "postcode=" + escape(postcode) + "&house=" + escape(house);
		
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				var result = text.split('|');
				
				if(result[0] == 'ok')
				{
					$('city').value = result[2];
					$('street').value = result[1];
				}
			}
		});
	}
}
