var $ = function (id)
{
	return document.getElementById(id);
}

var mouse = { button:false, x:0, y:0 };

function initModix()
{
	// Node-Objekt-Erweiterung um die Funktion contains()
	// Ist für IsMouseEnter/IsMouseLeave notwendig
	if (window.Node && Node.prototype && !Node.prototype.contains)
	{
		Node.prototype.contains = function (arg)
		{
			return !!(this.compareDocumentPosition(arg) & 16);
		}
	}

	addEvent(document, "mousedown", function(e)
	{
		mouse.button = true;
		if (e.stopPropagation) e.stopPropagation();
		return true;
	});

	addEvent(document, "mouseup",  function(e)
	{
		mouse.button = false;
		if (e.stopPropagation) e.stopPropagation();
		return true;
	});

	addEvent(document, "mousemove", function(e)
	{
		if (window.event)
		{
			mouse.x = window.event.clientX;
			mouse.y = window.event.clientY;
		}
		else
		{
			mouse.x = e.pageX;
			mouse.y = e.pageY;
		}
		if (e.stopPropagation) e.stopPropagation();
		if (e.preventDefault) e.preventDefault();
		return true;
	});
}

addEvent(window, "DOMContentLoaded", function () { removeEvent(window, "load", initModix); initModix(); });
addEvent(window, "load", initModix);

function getAbsPos(elem)
{
	var x = 0, y = 0;
	while (elem != null)
	{
		x += elem.offsetLeft;
		y += elem.offsetTop;
		elem = elem.offsetParent;
	}

	return { "x":x, "y":y };
}

function setOpacity(elem, opacity)
{
	elem.style.opacity = opacity || '1.0';
	elem.style.MozOpacity = opacity || '1.0';
	elem.style.KhtmlOpacity = opacity || '1.0';
	elem.style.filter = (opacity === undefined ? 'none': 'Alpha(style=0, opacity=' + Math.round(opacity * 100) + ')');
}

function setUnselectable(elem)
{
	if (elem == undefined) { return; }
	addEvent(elem, "selectstart", function () { return false; });
	elem.style.MozUserSelect = "none";
	elem.style.KhtmlUserSelect = "none";
	elem.unselectable = "on";
}

function IsMouseEnter(elem, e)
{
	e = e || window.event;
	var target = e.target || e.srcElement;
	var fromElement = e.relatedTarget || e.fromElement || false;

	if (fromElement == false) { return true; }
	if (elem.contains(fromElement) || fromElement == elem)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function IsMouseLeave(elem, e)
{
	e = e || window.event;
	var target = e.target || e.srcElement;
	var toElement = e.relatedTarget || e.toElement || false;

	if (toElement == false) { return true; }
	if (elem.contains(toElement) || toElement == elem)
	{
		return false;
	}
	else
	{
		return true;
	}
}

// John Resigs "Flexible Javascript Events"
// http://ejohn.org/projects/flexible-javascript-events/
function addEvent(obj, type, fn)
{
	if (obj.attachEvent)
	{
		obj['e' + type + fn] = fn;
		obj[type + fn] = function() { obj['e' + type + fn](window.event); }
		obj.attachEvent('on' + type, obj[type + fn]);
	}
	else
	{
		obj.addEventListener(type, fn, false);
	}
}

function removeEvent(obj, type, fn)
{
	if (obj.detachEvent)
	{
		obj.detachEvent('on' + type, obj[type + fn]);
		obj[type + fn] = null;
	}
	else
	{
		obj.removeEventListener(type, fn, false);
	}
}

function getScrollLeft() { return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0; }
function getScrollTop() { return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0; }
function getViewportWidth() { return window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth || 0; }
function getViewportHeight() { return window.innerHeight || document.documentElement.clientHeight || document.getElementsByTagName('body')[0].clientHeight || 0; }

function trim(text)
{
	return text.replace(/^(\s|\&nbsp\;)+/, '').replace (/(\s|\&nbsp\;)+$/, '');
}

function setBgXOffset(elem, xOffset)
{
	elem.style.backgroundPosition =  xOffset + 'px ' + /.+\s([-0-9a-zA-Z]+)/.exec(elem.style.backgroundPosition)[1]
}

function setBgYOffset(elem, yOffset)
{
	elem.style.backgroundPosition = /([-0-9a-zA-Z]+)\s.+/.exec(elem.style.backgroundPosition)[1] + ' ' + yOffset + 'px'
}

function setCheckbox(which, inputId)
{
	switch (/.+\s([-0-9a-zA-Z]+)/.exec(which.style.backgroundPosition)[1])
	{
		case '0px':
			$(inputId).value = '1';
			setBgYOffset(which, '-13');
			reloadSearchForm();
			break;
		case '-13px':
			$(inputId).value = '';
			setBgYOffset(which, '0');
			reloadSearchForm();
			break;
	}
}

function setListCheckbox(which)
{
	switch (/.+\s([-0-9a-zA-Z]+)/.exec(which.style.backgroundPosition)[1])
	{
		case '0px':
			setBgYOffset(which, '-13');
			break;
		case '-13px':
			setBgYOffset(which, '0');
			break;
	}
}

function setRadiobox(which, inputName, inputValue, reload)
{
	if (/.+\s([-0-9a-zA-Z]+)/.exec(which.style.backgroundPosition)[1] == '0px')
	{
		$(inputName).value = inputValue;

		divs = document.getElementsByTagName("div");
		for (var i = 0; i < divs.length; i++)
		{
			if (divs[i].className == 'elemRadioBox' && /([-0-9a-zA-Z]+)_.+/.exec(divs[i].id)[1] == inputName)
			{
				if (/.+\s([-0-9a-zA-Z]+)/.exec(divs[i].style.backgroundPosition)[1] == '-13px')
				{
					setBgYOffset(divs[i], '0');
				}
			}
		}

		setBgYOffset(which, '-13');
		if (reload == undefined || reload == true) { reloadSearchForm(); }
	}
}

function formatNumber(num)
{
	if (typeof num == 'string')
	{
		num = parseFloat(num);
	}
	
	if (num < 0)
	{
		var sign = '-';
		num = -num;
	}
	else
	{
		var sign = '';
	}

	num = num.toString();

	var decPoint = num.indexOf('.');
	if (decPoint != -1)
	{
		var intPlaces = num.substr(0, decPoint);
		var decPlaces = num.substr(decPoint + 1);
	}
	else
	{
		var intPlaces = num;
		var decPlaces = '';
	}

	if (intPlaces.length > 3)
	{		
		var intPlacesOut = intPlaces.substr(intPlaces.length - 3);
	}
	else
	{
		var intPlacesOut = intPlaces;
	}
	for (var i = intPlaces.length - 6; i >= -2; i -= 3)
	{
		if (i >= 0)
		{
			intPlacesOut = intPlaces.substr(i, 3) + '.' + intPlacesOut;
		}
		else
		{
			intPlacesOut = intPlaces.substr(0, 3 + i) + '.' + intPlacesOut;
			break;
		}
	}
	return sign + intPlacesOut + (decPoint != -1 ? ',' + decPlaces : '');
}

var openSelectBox = '';
var selectBoxJustOpened = false;

addEvent(document, "click", function(e)
{
	if (selectBoxJustOpened == true)
	{
		selectBoxJustOpened = false;
		return;
	}

	if (openSelectBox != '')
	{
		$(openSelectBox + 'SelectBoxItems').style.display = 'none';
		openSelectBox = '';
	}
});

function expandSelectBox(box)
{
	if (openSelectBox != '')
	{
		$(openSelectBox + 'SelectBoxItems').style.display = 'none';
		openSelectBox = '';
		return;
	}

	if ($(box + 'SelectBoxItems').style.display != 'block')
	{
		$(box + 'SelectBoxItems').style.display = 'block';
		openSelectBox = box;
		selectBoxJustOpened = true;
	}
}

function setSelectBoxItem(item, itemText)
{
	var id = /(\w+)-SelectBoxItem-([A-Za-z0-9\|]*)/.exec(item);

	if ($(id[1] + '-SelectBoxItem-' + $(id[1]).value))
	{
		$(id[1] + '-SelectBoxItem-' + $(id[1]).value).style.fontWeight = 'normal';
	}
	$(id[1] + '-SelectBoxItem-' + id[2]).style.fontWeight = 'bold';

	$(id[1]).value = id[2];
	$(id[1] + 'SelectBoxActiveItem').innerHTML = itemText;
	$(id[1] + 'SelectBoxItems').style.display = 'none';

	reloadSearchForm();
	$('resultList').focus();
}