function encodePoly(str) {
	return escape(str).replace('+', '%2B').replace('&', '%26').replace('@', '%40');
}

function center(obj) {
	var y1;
	if (self.innerHeight) {
		y1 = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		y1 = document.documentElement.clientHeight;
	} else if (document.body) {
		y1 = document.body.clientHeight;
	}
	var x1;
	if (self.innerWidth) {
		x1 = self.innerWidth;
	} else if (document.documentElement && document.documentElement.clientWidth) {
		x1 = document.documentElement.clientWidth;
	} else if (document.body) {
		x1 = document.body.clientWidth;
	}
	
	var y2;
	if (self.pageYOffset) {
		y2 = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		y2 = document.documentElement.scrollTop;
	} else if (document.body) {
		y2 = document.body.scrollTop;
	}
	var x2;
	if (self.pageXOffset) {
		x2 = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollLeft) {
		x2 = document.documentElement.scrollLeft;
	} else if (document.body) {
		x2 = document.body.scrollLeft;
	}
	
	obj = $(obj);
	obj.style.top  = Math.max(y2+ 10, y2 + (y1 - obj.offsetHeight) / 2) + 'px';
	obj.style.left = (x2 + (x1 - obj.offsetWidth) / 2) + 'px';
}

/**
 * Zeigt ein Popup-Layer mit verdunkeltem Hintergrund an und "versteckt" alle Select-Boxen.
 */
function popup(obj, callback) {
	obj = _(obj);
	_remove(obj);
	_('container').parentNode.appendChild(obj);
	if (obj.getAttribute('src')) {
		new Ajax.Updater(obj, obj.getAttribute('src'), {
			evalScripts: true,
			onComplete: function(tp) {
				__('select').each(function(sel) 
				{
					if (!_isParent(sel, obj)) 
					{
						sel.origVisibility = sel.style.visibility;
						sel.style.visibility = 'hidden';
					}
				});
				_show(obj);
				var f = __('#' + _(obj).id + ' .firstfocus');
				if (f.length > 0) {
					f[0].focus();
				} else {
					var forms = obj.getElementsByTagName('form');
					if (forms.length) {
						setTimeout(function() {
							try {
								Form.focusFirstElement(forms[0]);
							} catch (e) {}
						}, 100);
					}
				}
				
				obj.style.top = Math.max(0, window.getScrollTop() + ((window.getInnerHeight() - obj.offsetHeight) / 2) ) + 'px';
				setTimeout(function() {
					obj.style.top = Math.max(0, window.getScrollTop() + ((window.getInnerHeight() - obj.offsetHeight) / 2) ) + 'px';
				}, 100);
				
				if (callback) callback();
			}
		});
	} else {
		__('select').each(function(sel) {
			if (!_isParent(sel, obj)) {
				sel.origVisibility = sel.style.visibility;
				sel.style.visibility = 'hidden';
			}
		});
		_show(obj);
		var f = __('#' + _(obj).id + ' .firstfocus');
		if (f.length > 0) {
			f[0].focus();
		} else {
			var forms = obj.getElementsByTagName('form');
			if (forms.length) {
				try {
					Form.focusFirstElement(forms[0]);
				} catch (e) {}
			}
		}
		
		obj.style.top = Math.max(0, window.getScrollTop() + ((window.getInnerHeight() - obj.offsetHeight) / 2) ) + 'px';
		setTimeout(function() {
			obj.style.top = Math.max(0, window.getScrollTop() + ((window.getInnerHeight() - obj.offsetHeight) / 2) ) + 'px';
		}, 100);
	}
}

var __abto;
var __aato;

/**
 * Schliesst ein Popup-Layer und zeigt alle Select-Boxen wieder an.
 */
function popdown(obj) {
	if (__abto) clearTimeout(__abto);
	if (__aato) clearTimeout(__aato);
	__abto = null;
	__aato = null;
	_hide(obj);
	__('select').each(function(sel) {
		try {
			if (sel.origVisibility || sel.style.visibility == 'hidden') {
				sel.style.visibility = sel.origVisibility;
			}
		} catch(e) {}
	});
}

var Artikelzeile = {
	remove: function(tr) {
		var rows = tr.parentNode.rows;
		var s = null;
		while (s = tr.nextSibling) {
			if (s.nodeType === 1) {
				if (!s.id) {
					_remove(s);
				} else {
					break;
				}
			} else {
				_remove(s);
			}
		}
		
		var i = tr.rowIndex;
		i = i - rows[0].rowIndex;
		_remove(tr);
		var pos = parseInt(tr.id.substr(3));
		if (rows.length) { 
			for (var i, l = rows.length; i < l; i++) {
				if (rows[i].id) rows[i].id = 'row' + pos++;
			}
		}
	},
	
	add: function(from, to, before) {
		var first = from.rows[0];
		if (before) {
			for (var i = 0, l = from.rows.length; i < l; i++) {
				to.insertBefore(from.rows[0], before);
			}
		} else {
			for (var i = 0, l = from.rows.length; i < l; i++) {
				to.appendChild(from.rows[0]);
			}
		}
		
		var s = first, pos = parseInt(first.id.substr(3));
		for (var i = s.rowIndex - s.parentNode.rows[0].rowIndex, l = to.rows.length; i < l; i++) {
			if (to.rows[i].id) to.rows[i].id = 'row' + pos++;
		}
	},
	
	replace: function(tr, from) {
		var i = tr.rowIndex;
		var to = tr.parentNode;
		i = i - to.rows[0].rowIndex;
		Artikelzeile.remove(tr);
		Artikelzeile.add(from, to, to.rows[i]);
	}
};


//function _checkEnter(event, onEnter) {
//	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
//	if (keyCode == 13) {
//		if (onEnter) onEnter();
//		return true;
//	}
//	
//	return false;
//}



var NiceTitle = {
	_tto: null,
	_cache: {},
	disabled: false,
	
	reposition: function(t, p) {
		var mr = window.getInnerWidth() + window.getScrollLeft();
		if (p[0] + t.offsetWidth > mr) {
			p[0] = mr - t.offsetWidth;
		}
		t.style.left = p[0] + 'px';
		var mb = window.getInnerHeight() + window.getScrollTop();
		if (p[1] + t.offsetHeight > mb) {
			p[1] = p[1] - 40 - t.offsetHeight;
		}
		t.style.top = p[1] + 30 + 'px';
		
	},
	
	show: function(title, event) {
		var p = Event.pointer(event);
		var t = _('title');
		if (_visible(t)) return;
		if (NiceTitle._tto) clearTimeout(NiceTitle._tto);
		if (title.substr(0, 4) == 'url:' && !NiceTitle._cache[title]) {
			NiceTitle._cache[title] = true;
			var time = (new Date()).getTime();
			new Ajax.Request(title.substr(4), {
				onSuccess: function(tp) {
					if (NiceTitle._cache[title] === false) {
						NiceTitle._cache[title] = tp.responseText;
						return;
					}
					
					NiceTitle._cache[title] = tp.responseText;
					_('title_content').innerHTML = tp.responseText;
					t.style.left = p[0] + 'px';
					t.style.top  = p[1] + 'px';
					var now = (new Date()).getTime();
					if (now - time >= 400) {
						NiceTitle.disable();
						__('select').each(function(sel) 
						{
							try {
								sel.origVisibility = sel.style.visibility;
								sel.style.visibility = 'hidden';
							} catch (e) {}								
						});
						_show(t);
						NiceTitle.reposition(t, p);
					} else {
						NiceTitle._tto = (function() {
							NiceTitle.disable();
							__('select').each(function(sel) 
							{
								try {
									sel.origVisibility = sel.style.visibility;
								sel.style.visibility = 'hidden';
								} catch (e) {}
							});
							_show(t);
							NiceTitle.reposition(t, p);
						}).delay((time + 400 - now) / 1000);
					}
				}
			});
		} else {
			if (NiceTitle._cache[title] && title.substr(0, 4) == 'url:') {
				title = NiceTitle._cache[title];
				if (title === true) return false;
			}
			
			NiceTitle._tto = (function() {
				_('title_content').innerHTML = title;
				t.style.left = p[0] + 'px';
				t.style.top  = p[1] + 'px';
				_show(t);
				NiceTitle.reposition(t, p);
				NiceTitle.disable();
				__('select').each(function(sel) 
				{
					try {
						sel.origVisibility = sel.style.visibility;
						sel.style.visibility = 'hidden';
					} catch (e) {}
				});
			}).delay(0.4);
		}
	},
	
	disable: function() {
		NiceTitle._disabled = true;
		setTimeout(function() {
			NiceTitle._disabled = false;
		}, 100);
	},

	hide: function(title) {
		if (NiceTitle._disabled) return;
		if (NiceTitle._cache[title] && NiceTitle._cache[title] === true) NiceTitle._cache[title] = false;
		if (NiceTitle._tto) clearTimeout(NiceTitle._tto);
		_hide('title');
		var t = _('title');
		__('select').each(function(sel) {
			try {sel.style.visibility = sel.origVisibility;} catch (e) {}
		});
	},

	update: function() {
		(function() {
			P.select('.nice_title').each(function(element) {
				if (element.title) {
					if (element.title.substr(0, 4) == 'url:' && NiceTitle._cache[element.title]) NiceTitle._cache[element.title] = null;
					Event.bind(element, 'mousemove', NiceTitle.show.bind(element).curry(element.title));
					Event.bind(element, 'mouseout', NiceTitle.hide.bind(element).curry(element.title));
					Event.bind(element, 'mousedown', NiceTitle.hide.bind(element).curry(element.title));
					element.title = '';
				}
			});
		}).defer();
	}
}

Event.bind(document, 'dom:ready', NiceTitle.update);
Ajax.Responders.register({
	onComplete: NiceTitle.update
});