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')
			{
				if(inputs[i].type == 'radio' || inputs[i].type == 'checkbox')
				{
					if(inputs[i].checked)
					{
						query += escape(inputs[i].name) + "=" + escape(inputs[i].value) + "&";
					}
				}
				else
				{
					query += escape(inputs[i].name) + "=" + escape(inputs[i].value) + "&";
				}
				
			}
		}
		
		target.style.display = 'block';
		
		$('mini-loader').style.display = 'inline';
		$('loader').t = setTimeout(function(){
			$('loader').style.display = 'block';
			$('mini-loader').style.display = 'none';
		}, 1000);
		
		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);
		
		$('mini-loader').style.display = 'inline';
		$('loader').t = setTimeout(function(){
			$('loader').style.display = 'block';
			$('mini-loader').style.display = 'none';
		}, 1000);
		
		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;
}

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)
		{
			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, 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 addEvent(element, listener, handler)
{
	var flow = "add:";
	//if the system is not set up, set it up, and
	// store any outside script's event registration in the first handler slot
	if(typeof element[listener] != 'function' || 
	typeof element[listener + '_num'] == 'undefined'){
		flow += " 1a";
		element[listener + '_num'] = 0;
		if(typeof element[listener] == 'function'){
			flow += ", 1ai";
			element[listener + 0] = element[listener];
			element[listener + '_num']++;
		}else
			flow += ", 1aii";
		element[listener] = function(e){
			var r = true;
			e = (e) ? e : window.event;
			for(var i = 0; i < element[listener + '_num']; i++)
				if(element[listener + i](e) === false) r = false;
			return r;
		}
	}else
		flow += ", 1b";
	//assign handler
	for(var i = 0; i < element[listener + '_num']; i++)
		if(element[listener + i] == handler){
			flow += ", 2a";
			return flow;
		}
	flow += ", 2b";
	element[listener + element[listener + '_num']] = handler;
	element[listener + '_num']++;
}

function removeEvent(element, listener, handler)
{
	var flow = "remove:";
	//if the system is not set up, or there are no handlers to remove, exit
	if(typeof element[listener] != 'function' || 
	typeof element[listener + '_num'] == 'undefined' || 
	element[listener + '_num'] == 0){
		flow += " 1a";
		return flow;
	}else
		flow += " 1b";
	//loop through handlers,
	//  if target handler is reached, begin overwriting each
	//  handler with the handler in front of it until one before the last
	var found = false;
	for(var i = 0; i < element[listener + '_num']; i++){
		if(!found){
			found = element[listener + i] == handler;
			if(found){
				flow += ", 2a("+i+")";
			}
		}
		if(found && (i+1) < element[listener + '_num'])
			element[listener + i] = element[listener + (i+1)];
	}
	//if handler was found, decrement the handler count
	if(found){
		flow += ", --";
		element[listener + '_num']--;
	}else
		flow += ", 2b";
}

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 hideLabel(sender, def)
{
	if(sender.className == 'label')
	{
		sender.className = '';
		sender.value = '';
	}
	
	sender.onblur = function(){
		if(sender.value == '')
		{
			sender.className = 'label';
			sender.value = def;
		}
	}
}

function search(sender, target, value)
{
	clearTimeout(sender.s);
	sender.s = setTimeout(function(){
		var url = location + '';
		// go to first page
		url = url.replace(/\/page\/([0-9]*)/i, '');
		if(url.match(/\?/g))
		{
			var qs = '&q=' + value;
		}
		else
		{
			var qs = '?q=' + value;
		}
		loadContent(url + qs, target, 'asearch', 1);
	}, 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);
	}
}

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 showHide(el, target)
{
	var visible = (target.style.display != 'none')
	if(!visible)
	{
		target.style.display = 'block'
		el.className = 'arrow_close'
	}
	else
	{
		target.style.display = 'none'
		el.className = 'arrow_open'		
	}
	return false
}

function getAddress(url)
{
	if(xmlHttp = GetXmlHttpObject())
	{				
		var query = "zip=" + escape($('contact-recepient-zip').value) + '&nr=' + escape($('contact-recepient-no').value);
		
		xmlPostRequest(url, query, function()
		{
			if(text = xmlResponse())
			{
				var result = text.split('|');
				if(result[0] == 'ok')
				{
					$('contact-recepient-street').value = result[1];
					$('contact-recepient-city').value = result[2];
				}
			}
		});
	}
	
	return false;
}
