function _gel(a) {
	return document.getElementById ? document.getElementById(a) : null
}

function _gelstn(a) {
	if (a=="*" && document.all)
		return document.all;

	return document.getElementsByTagName ? document.getElementsByTagName(a) : []

}

function _uc(a) {
	return a.toUpperCase()
}

function _trim(a) {
	return a.replace(/^\s*|\s*$/g,"")
}

function _esc(a) {
	return window.encodeURIComponent ? encodeURIComponent(a) : escape(a)
}

function _unesc(a) {
	return window.decodeURIComponent ? decodeURIComponent(a) : unescape(a)
};

function _hesc(a) {
	a=a.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	a=a.replace(/"/g,"&quot;").replace(/'/g,"&#39;");
	return a
}

function _striptags(a) {
	return a.replace(/<\/?[^>]+>/gi,"")
}

var ig_hb=0;

function _uid() {
	return "obj"+ig_hb++
}

function _min(a,b) {
	return a<b?a:b
}

function _max(a,b) {
	return a>b?a:b
}

var _et="", _source="", _pid="", _authpath="", _prefid="", _setp_url="/ig/setp", ig_6a="/ig/game", ig_k=null, ig_l=null;

function _args() {
	var a={}, b=document.location.search.substring(1), c=b.split("&");
	for (var d=0; d<c.length; d++) {
		var e=c[d].indexOf("=");
		if (e==-1)
			continue;
		var f=c[d].substring(0,e), g=c[d].substring(e+1);
		g=g.replace(/\+/g," ");
		a[f]=_unesc(g)
	}
	return a
}

function ig_h() {
	var a={pid:1,host:1,hl:1} ,b=_args() ,c="?";
	for (var d in b) {
		if (a[d]) {
			c+=d+"="+_esc(b[d])+"&"
		}
	}
	return c
}

function _xsetp(sName, sValue, sEvent) {
	//alert(sValue);
	var oAjax;
	oAjax				= new sack('index.php');
	oAjax.method		= "POST";
	oAjax.Synchron		= false;
	oAjax.setVar('event', sEvent);
	oAjax.setVar(sName, sValue);
	oAjax.runAJAX();
	sResponse = oAjax.response;

	var sError = "";

	try {
		if (sResponse.indexOf("###") != -1) {
			var aResponse = sResponse.split("###");
			sResponse = aResponse[0];
			sError = aResponse[1];
		}
	} catch (e) {
	}

	if (sError != "") {
		if (document.popup == null) document.popup = new isPopup();
		document.popup.show("OK", "Error", 360, 130, sError);
	}

	oAjax=null;
}

var bModulesLoaded=false, _table=null;

// erste Funktion
function _upc() {
	// module durchlaufen und in Variablen speichern
	// schon geladen? "mobildrag" laden?
	if (!bModulesLoaded) {
		initDrag(_table);
		// nur einmal durchlaufen pro Seitenaufruf
		bModulesLoaded=true
	}
}

// Objekt mit den Drag&Drop-Funktionen
var ig_c={
	obj:null,
	init:function(a,b) {
		// Funktion setzen, die bei "onmousedown" ausgeführt werden soll
		a.onmousedown=ig_c.start;
		a.obj=b;
		if (isNaN(parseInt(b.style.left)))
			b.style.left="0px";
		if (isNaN(parseInt(b.style.top)))
			b.style.top="0px";
		b.onDragStart=new Function;
		b.onDragEnd=new Function;
		b.onDrag=new Function
	},
	uninit:function(a,b) {
		window.clearInterval(b.za);
		a.onmousedown=null;
		a.obj=null;
		b.onDragStart=null;
		b.onDragEnd=null;
		b.onDrag=null
	},
	start:function(a) {
		var b=ig_c.obj=this.obj;
		a=ig_c.fixE(a);
		if (a.which!=1) {
			return true
		}
		b.onDragStart();
		b.lastMouseX=a.clientX;
		b.lastMouseY=a.clientY;
		if (ddm_.bIsSafari) {
			b.lastMouseY-=document.body.scrollTop
		}
		b.za=window.setInterval(ig__a(b,ig_9a()),10);
		document.onmouseup=ig_c.end;
		document.onmousemove=ig_c.drag;
		return false
	},
	drag:function(a) {
		a=ig_c.fixE(a);
		if (a.which==0) {
			return ig_c.end()
		}
		var b=ig_c.obj, c=a.clientY;
		if (ddm_.bIsSafari) {
			c-=document.body.scrollTop
		}
		var d=a.clientX;
		if (b.lastMouseX==d && b.lastMouseY==c) {
			return false
		}
		var e=parseInt(b.style.top), f=parseInt(b.style.left), g, h;
		g=f+d-b.lastMouseX;
		h=e+c-b.lastMouseY;
		b.style.left=g+"px";
		b.style.top=h+"px";
		b.lastMouseX=d;
		b.lastMouseY=c;
		b.onDrag(g,h);
		return false
	},
	end:function(a) {
		a=ig_c.fixE(a);
		document.onmousemove=null;
		document.onmouseup=null;
		window.clearInterval(ig_c.obj.za);
		var b=ig_c.obj.onDragEnd();
		ig_c.obj=null;
		return b
	},
	fixE:function(a) {
		if (typeof a=="undefined")
			a=window.event;
			if (typeof a.layerX=="undefined")
				a.layerX=a.offsetX;
			if (typeof a.layerY=="undefined")
				a.layerY=a.offsetY;
			if (typeof a.which=="undefined")
				a.which=a.button;
			return a
		}
	},
initDrag=function(elemModuleContainer) {
	// Tabellen-Element mit den Modulen
	ddm_.elemModuleContainer=elemModuleContainer;
	// die erste Reihe holen
	ddm_.elemTableRow=ddm_.elemModuleContainer.tBodies[0].rows[0];
	// die Zellen holen
	ddm_.aTableCells=ddm_.elemTableRow.cells;
	// alle drag&drop-Elemente
	ddm_.aDDElements=[];
	var iDDElementIndex=0;
	for (var i=0; i<ddm_.aTableCells.length; i++) {
		// gib mir die momentane Zelle
		var elemCurrentCell=ddm_.aTableCells[i];
		// filtere fixe Zellen aus
		if (elemCurrentCell.className.indexOf("fixed_col")!=-1)
			continue;
		// durchlaufe alle elemente in der zelle
		for (var j=0; j<elemCurrentCell.childNodes.length; j++) {
			// gib mir das momentane Element
			var elemCurrentElement=elemCurrentCell.childNodes[j];
			// wenn es ein DIV ist, dann nehme es als neues Objekt auf
			if (elemCurrentElement.tagName=="DIV") {
				ddm_.aDDElements[iDDElementIndex]=new DDObjekt(elemCurrentElement);
				iDDElementIndex++;
			}
		}
	}
};

// Drag&Drop-Manager
// globales Objekt, was so gut wie alles enthält
var ddm_={};

ddm_.sUserAgent=navigator.userAgent;
ddm_.bIsGecko=ddm_.sUserAgent.indexOf("Gecko")!=-1;
ddm_.bIsOpera=ddm_.sUserAgent.indexOf("Opera")!=-1;
ddm_.bIsSafari=ddm_.sUserAgent.indexOf("Safari")!=-1;
if (window.clipboardData && !window.XMLHttpRequest) {
	ddm_.bIsExplorer6=true;
} else {
	ddm_.bIsExplorer6=false;
}

// Versteckt den Container der die Module enthält
// Dies wird notwenig, wenn das DD-Element angefasst oder eingefügt wird
// und ist wie ein refesh der Seite, da kurz darauf "showModuleContainer" aufgerufen wird.
ddm_.hideModuleContainer=function() {
	ddm_.elemModuleContainer.style.display="none"
};
// Zeigt den Container der die Module enthält wieder an
ddm_.showModuleContainer=function() {
	ddm_.elemModuleContainer.style.display=""
};

// Ersatzbox beim Ziehen der Modulbox
ddm_.elemPlaceHolder=null;
// Erzeugen bzw./und Zurückgeben der Ersatzbox
ddm_.getPlaceHolderElement=function() {
	if (!ddm_.elemPlaceHolder) {
		ddm_.elemPlaceHolder=document.createElement("DIV");
		ddm_.elemPlaceHolder.className="modbox";
		ddm_.elemPlaceHolder.backgroundColor="";
		ddm_.elemPlaceHolder.style.border="2px dashed #aaa";
		ddm_.elemPlaceHolder.innerHTML="&nbsp;"
	}
	return ddm_.elemPlaceHolder
};

// allgemeine Funktion um ein Obkjekt um eine Methode zu erweitern.
ddm_.addMethod=function(a,b) {
	return function() {
		return a[b].apply(a,arguments)
	}
};

ddm_.Ga=function(a) {
	for (var b=0; b<ddm_.aDDElements.length; b++) {
		var c=ddm_.aDDElements[b];
		c._elemDDElement.pagePosLeft=ddm_.g(c._elemDDElement,true);
		c._elemDDElement.pagePosTop=ddm_.g(c._elemDDElement,false)
	}
	var d=a._elemDDElement.nextSibling;
	while (d) {
		d.pagePosTop-=a._elemDDElement.offsetHeight;
		d=d.nextSibling
	}
};

ddm_.g=function(a,b) {
	var c=0;
	while (a!=null) {
		c+=a["offset"+(b?"Left":"Top")];
		a=a.offsetParent
	}
	return c
};

// Positionsänderung des Moduls abspeichern
ddm_.savePosition=function() {
	var sPosition="";
	for (var b=0; b<ddm_.aTableCells.length; b++) {
		var c=ddm_.aTableCells[b];
		for (var d=0; d<c.childNodes.length-1; d++) {
			var e=c.childNodes[d];
			if (e.tagName=="DIV" && e.id!='' && c.id!='') {
				sPosition+=sPosition!=""?":":"";
				sPosition+=e.id+"#"+c.id;
			}
		}
	}
	// per AJAX senden
	_xsetp('sPosition', sPosition, 'on_MoveModule');
};

function DDObjekt(a) {
	this._urlMouseUp=ig_U;
	this._urlClick=ig_T;
	// Funktion zuweisen, was beim Anfang der DD-Phase gemacht werden soll
	this._dragStart=dragStart;
	// Funktion zuweisen, was während der DD-Phase gemacht werden soll
	this._drag=drag;
	// Funktion zuweisen, was nach der DD-Phase gemacht werden soll
	this._dragEnd=dragEnd;
	// Funktion zuweisen, die das Element im HTML verschiebt, die Position abspeichert und zurück gibt,
	// ob das Element wirklich verschoben wurde und nicht nur angefasst und wieder fallen gelassen wurde
	this._moveElement=moveElement;
	// Funktion zuweisen, die das DD-Element zurücksetzt.
	this._resetElement=resetElement;
	// Flag für die Kennzeichnung, ob das Element verschoben wurde
	this.bElementMoved=false;
	// das Element selbst, damit es nicht erst wieder mit "getElementByID" gesucht werden muss
	this._elemDDElement=a;
	// head und drag&drop handler
	this.head=_gel(a.id+"_head");
	// falls der drag&drop handler eine Url ist
	this.c=_gel(a.id+"_url");
	// wenn es einen head gibt
	if (this.head) {
		// cursor ändern
		this.head.style.cursor="move";
		//  init
		ig_c.init(this.head,this._elemDDElement);
		// vordefinierte Funktionen füllen
		this._elemDDElement.onDragStart=ddm_.addMethod(this,"_dragStart");
		this._elemDDElement.onDrag=ddm_.addMethod(this,"_drag");
		this._elemDDElement.onDragEnd=ddm_.addMethod(this,"_dragEnd");
		// wenn eine Url definiert ist
		if (this.c) {
			if (ddm_.bIsGecko) {
				this.c.onclick=ddm_.addMethod(this,"_urlClick")
			} else {
				this.c.onmouseup=ddm_.addMethod(this,"_urlMouseUp")
			}
		}
	}
}

// drag&drop-Objekt zurücksetzen
function resetElement() {
	if (this.head) {
		if (this.c) {
			this.c.onclick=null;
			this.c.onmouseup=null;
			this.c=null
		}
		ig_c.uninit(this.head,this._elemDDElement);
		this._elemDDElement.onDragStart=null;
		this._elemDDElement.onDrag=null;
		this._elemDDElement.onDragEnd=null;
		this.head=null
	}
	this._elemDDElement=null
}

function ig_U(a) {
	a=ig_c.fixE(a);
	if (this.bElementMoved || !this.c || !this.c.href || a.which!=1) {
		return true
	}
	if (this.c.target || a.shiftKey) {
		window.open(this.c.href,this.c.target)
	} else {
		document.location=this.c.href
	}
	return false
}

function ig_T(a) {
	if (!this.bElementMoved && this.c && this.c.href) {
		return true
	}
	return false
}

// Diese Funktion setz zu Beginn von Drag&Drop ein paar Werte aktuellen Modul, was bewegt werden soll
function dragStart() {
	ddm_.Ga(this);
	this.origNextSibling=this._elemDDElement.nextSibling;
	var a=ddm_.getPlaceHolderElement(), b=this._elemDDElement.offsetHeight;
	if (ddm_.bIsGecko) {
		b-=parseInt(a.style.borderTopWidth)*2
	}
	var c=this._elemDDElement.offsetWidth, d=ddm_.g(this._elemDDElement,true), e=ddm_.g(this._elemDDElement,false), iWindowWidth;

	// Da das zu bewegende Element mit der Eigenschaft "position:absolute"´versehen wird und
	// sich diese Eigenschaft auf das übergordnete Element bezieht und nicht auf ganze Fenster,
	// muss bei den Koordinaden eine Korrekur vorgenommen werden.
	// Die Seite wird mit "margin: 0 auto" zentriert. Dieses "auto" muss nun berechnet werden,
	// damit das DD-Element nicht springt, wenn man es anfasst.
	// Evtl. muss auch der y-Wert berechnet werden.
	// Dies kann umgangen werden, indem ein Klon des zu verschiebenden Elements gemacht wird,
	// der komplett außerhalb zu den anderen Elementen liegt.
	if (document.documentElement.clientWidth) {
		iWindowWidth = document.documentElement.clientWidth;
	} else {
		iWindowWidth = window.innerWidth;
	}
	var iError = (iWindowWidth - 980) / 2;
	if (iError > 0 && ddm_.bIsExplorer6) {
		d=d-iError;
	}
	ddm_.hideModuleContainer();
	this._elemDDElement.style.width=c+"px";
	a.style.height=b+"px";
	this._elemDDElement.parentNode.insertBefore(a,this._elemDDElement.nextSibling);
	this._elemDDElement.style.position="absolute";
	this._elemDDElement.style.zIndex=100;
	this._elemDDElement.style.left=d+"px";
	this._elemDDElement.style.top=e+"px";
	ddm_.showModuleContainer();
	this.bElementMoved=false;
	return false
}

function drag(a,b) {
	// wenn das Element noch nicht verschoben wurde, dann die Eigenschaften ändern
	if (!this.bElementMoved) {
		this._elemDDElement.style.filter="alpha(opacity=50)";
		this._elemDDElement.style.opacity=0.5;
		this.bElementMoved=true;
	}
	var c=null, d=100000000;
	for (var e=0; e<ddm_.aDDElements.length; e++) {
		var f=ddm_.aDDElements[e], g=Math.sqrt(Math.pow(a-f._elemDDElement.pagePosLeft,2)+Math.pow(b-f._elemDDElement.pagePosTop,2));
		if (f==this)
			continue;
		if (isNaN(g))
			continue;
		if (g<d) {
			d=g;
			c=f
		}
	}

	var i=ddm_.getPlaceHolderElement();
	if (c!=null && i.nextSibling!=c._elemDDElement) {
		c._elemDDElement.parentNode.insertBefore(i,c._elemDDElement);
		if (ddm_.bIsOpera) {
			document.body.style.display="none";
			document.body.style.display=""
		}
	}
}

function dragEnd() {
	// Wenn das Modul verschoben wurde, dann soll die Änderung gespeichert werden
	if (this._moveElement()) {
		// Änderung speichern
		ddm_.savePosition();
	}
	return true;
}

// Diese Funktion setz das verschobene Element an der gewünschten Stelle ein
// und gibt zurück, ob es auch wirklich an eine andere Stelle verschoben wurde.
// Dabei werden die vorher gesetzen CSS-Wert wieder zurückgesetzt.
function moveElement() {
	var bElementMoved=false;
	ddm_.hideModuleContainer();
	// CSS-Werte zurücksetzen
	this._elemDDElement.style.position="";
	this._elemDDElement.style.width="";
	this._elemDDElement.style.zIndex="";
	this._elemDDElement.style.filter="";
	this._elemDDElement.style.opacity="";
	// Die temporäre DIV-Box (gestrichelte Platzhalter) holen.
	var elemPlaceHolder=ddm_.getPlaceHolderElement();
	if (elemPlaceHolder.parentNode!=null) {
		if (elemPlaceHolder.nextSibling!=this.origNextSibling) {
			// Die verschobene Box einfügen
			elemPlaceHolder.parentNode.insertBefore(this._elemDDElement, elemPlaceHolder.nextSibling);
			bElementMoved=true
		}
		// Platzhalter löschen
		elemPlaceHolder.parentNode.removeChild(elemPlaceHolder)
	}
	ddm_.showModuleContainer();
	// Behebung eines Opera-Bugs: Die verschobene Box wird doppelt angezeigt.
	// Ein kurzes Refresh der gesamten Anzeige behebt das Problem.
	if (ddm_.bIsOpera) {
		document.body.style.display="none";
		document.body.style.display=""
	}
	return bElementMoved;
}

function ig__a(a,b) {
	return function() {
		var iWindowHeight=getWindowHeight(), d=document.body.scrollTop, e=4, f=0.05*iWindowHeight, g=d, h=a.offsetTop;
		if (a.lastMouseY<=f) {
			h=Math.max(0,a.offsetTop-e);
			g=Math.max(0,d-e)
		} else if (a.lastMouseY>=iWindowHeight-f) {
			h=Math.min(b-a.offsetHeight, a.offsetTop+e);
			g=Math.min(b-iWindowHeight, d+e)
		}
		var i=g-d;
		if (i!=0) {
			document.body.scrollTop=g;
			a.style.top=h+"px"
		}
	}
}

function getWindowHeight() {
	if (window.innerHeight<document.body.clientHeight) {
		return window.innerHeight
	}
	return document.body.clientHeight
}

function ig_9a() {
	if (document.body.scrollHeight>document.documentElement.clientHeight) {
		return document.body.scrollHeight
	} else {
		return document.documentElement.clientHeight
	}
};

function info(a) {
	b = _gel("info");
	if (b) {
		b.innerHTML = a + " | " + window.innerWidth + " | " + parseInt(_gel("page").style.width);
	}
}

trimWrapper = {
	trim : function(str, chars) {
		return trimWrapper.ltrim(trimWrapper.rtrim(str, chars), chars);
	},
	ltrim : function(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	},
	rtrim : function(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}
}

function focusElement(element)
{
	element.style.border = '1px solid #ffb300';
}

function blurElement(element)
{
	element.style.border = '1px solid #E5E5E5';
}