// --------------------
// Standard Script File with all definitions
// Is always loaded.
// --------------------

// Deutsche Umlate
var oe= unescape("%F6");
var Oe= unescape("%D6");
var ue= unescape("%FC");
var Ue= unescape("%DC");
var ae = unescape("%E4");
var Ae = unescape("%C4");
var sz = unescape("%DF");

// Determine Browser
var IS_MOZ = true; // DOM kompatibel - default
var IS_MSIE = false; // MS IE
if(navigator.appName == 'Microsoft Internet Explorer') 
{
	IS_MOZ = false;
	IS_MSIE = true;
}


/*
 * This functions opens a popup
 */
function PopUp(title, url, center, top, left, height, width, scrollbars, menubar, locationbar, statusbar, resizable, fullscreen) 
{
	// Aktuelle Höhen und Breiten beziehen
	if (document.all) {
		w = document.body.clientWidth;
		h = document.body.clientHeight;
	} else if (document.layers) {
		w = window.innerWidth;
		h = window.innerHeight;
	}

	var leftCenter = (w - width)/2, topCenter = (h - height)/2;

	// Optionen zusammenstellen
	var options = "";

	if (scrollbars) options += "scrollbars=yes, ";
	else options +="scrollbars=no, ";

	if (menubar) options +="menubar=yes, ";
	else options +="menubar=no, ";

	options +="width=" + width + ", ";
	options +="height=" + height +", ";

	if (center) options += "left=" + leftCenter + ", top=" + topCenter + ", ";
	else options += "left=" + left + ", top=" + top +", ";

	if (locationbar) options +="locationbar=yes, ";
	else options +="locationbar=no, ";

	if (statusbar) options += "statusbar=yes, ";
	else options +="statusbar=no, ";

	if (resizable) options += "resizable=yes, ";
	else options += "resizable=no, ";

	if (fullscreen) options += "fullscreen=yes, ";
	else options += "fullscreen=no, ";

	// Fenster öffnen ;-)
	window.open(url,title,options);
			
}



/**
 * Position class
 */
Position = function(x,y) {
	this.x = (x == null) ? 0 : x;
	this.y = (y == null) ? 0 : y;

	this.add = function(pos) {
		if(pos != null) {
			this.x += pos.x;
			this.y += pos.y;
		}
	}
}

/**
 * ArrayList class
 */
ArrayList = function() {
	var items = new Array();

	this.add = function(item) {
		items.push(item);
	}

	this.remove = function(item) {
		newitems = new Array(items.length-1);
		var pos = -1;
		var i = 0;
		for(i; i < items.length; i++) {
			if(items[i] == item) {
				pos = i;
				i++
				break;
			} else newitems[i] = items[i];
		}
		for(i; i < items.length; i++) {
			newitems[i-1] = items[i];
		}
		items = newitems;
		return pos;
	}

	this.get = function(pos) {
		if(pos >= items.length) throw 'Index out of bounds';
		return items[pos];
	}

	this.set = function(pos, item) {
		if(pos >= items.length) throw 'Index out of bounds';
		items[pos] = item;
	}

	this.length = function() {
		return items.length;
	}

	this.contains = function(item) {
		for(var i=0; i<items.length; i++)
			if(items[i] == item) return true;
		return false;
	}
}


/*
 * This Class describes the VirtualEventManager
 */
VirtualEventManager = function() 
{
	var events = new Array();

	var register = function(element, otype, omethod, utype, umethod) {
		// el: element, ot: original type, om: original method, ut: used type, um: usesd method
		events.push({'el':element, 'ot':otype, 'om':omethod, 'ut':utype, 'um':umethod});
	}

	this.registerEventListener = function(element,etype,emethod) {
		if(element) {
			var eventtype = null;
			var eventmethod = null;
			if(IS_MSIE) {
				switch(etype) {
					case 'anyclick' : {
						element.attachEvent('onclick',emethod);
						register(element, etype, emethod, 'onclick', emethod);
						element.attachEvent('oncontextmenu',emethod);
						register(element, etype, emethod, 'oncontextmenu', emethod);
						break;
					}
					case 'doubleclick' : {
						element.attachEvent('ondblclick',emethod);
						register(element, etype, emethod, 'ondblclick', emethod);
						break;
					}
					default : {
						element.attachEvent('on'+etype,emethod);
						register(element, etype, emethod, 'on'+etype, emethod);
						break;
					}
				}

			} else { /* capture events in bubble phase (same as in IE) */
				switch(etype) {
					case 'anyclick' : {
						element.addEventListener('click',emethod,false);
						register(element, etype, emethod, 'click', emethod);
						break;
					}
					case 'doubleclick' : {
						var detectdblclick = function(e) { if(e.detail == 2) emethod(e); }
						element.addEventListener('click',detectdblclick,false);
						register(element, etype, emethod, 'click', detectdblclick);
						break;
					}
					default : {
						element.addEventListener(etype,emethod,false);
						register(element, etype, emethod, etype, emethod);
						break;
					}
				}
			}
		}
	}

	this.unregisterEventListener = function(element,etype,emethod) {
		if(element && etype && emethod) {
			var len = events.length;
			for(var i=0; i<len; i++) {
				var e = events[i];
				if(e['el'] == element && e['ot'] == etype && e['om'] == emethod) {
					if(IS_MSIE) e['el'].detachEvent(e['ut'],e['um']);
					else e['el'].removeEventListener(e['ut'],e['um'],false);
					events[i] = null;
					// don't break because there can be more than one listeners
				}
			}
		}
	}

	var removeAllEventListeners = function() {
		var len = events.length;
		if(IS_MSIE)
			for(var i=0; i<len; i++) {
				var e = events[i];
				if(e) e['el'].detachEvent(e['ut'],e['um']);
			}
		else
			for(var i=0; i<len; i++) {
				var e = events[i];
				if(e) e['el'].removeEventListener(e['ut'],e['um'],false);
			}
	}

	if(IS_MSIE) window.attachEvent('onunload',removeAllEventListeners);
	else window.addEventListener('unload',removeAllEventListeners,false);
}

var eventmanager = new VirtualEventManager();


/*
 * Opens the resourc manager from the editor
 */
function resctl_openresmgr(clientid) {
	if(clientid) {
		var method = clientid+'_UpdateResource';
		var hid = document.getElementById(clientid);
		if(hid && hid.value)
			openResourceManager(method,hid.value);
		else
			openResourceManager(method);
	}
}


/*
 * Removes the image of the specified resource control
 */
function resctl_delres(clientid) {
	changed = true;
	var container = document.getElementById(clientid+'_div');
	var hid = document.getElementById(clientid);
	if(container && hid) {
		while(container.childNodes.length > 1) container.removeChild(container.lastChild);
		hid.value = -1;
	}
}


/*
 * Opens the resource manager from the editor
 */
function editor_openresmgr(depid) 
{
	var el = editor.getDepositedElement(depid);
	var id = null;
	if(el) {
		var tag = el.tagName.toLowerCase();
		if(tag == 'img' || tag == 'embed') {
			var url = el.src;
			var lastslashpos = url.lastIndexOf("/");
			var filename = url.substr((lastslashpos < 0) ? 0 : lastslashpos+1);
			var dotpos = filename.indexOf(".");
			id = filename.substr(0,(dotpos < 0) ? filename.length : dotpos);
		}
	}
	openResourceManagerFromEditorControl(id);
}


/*
 * Opens the resource manager from the editor control
 * resid: Current resource dbid
 */
function openResourceManagerFromEditorControl(resid) 
{
    var param = 'Caller=Editor&DbId=' + resid;	
	var url = config['url']['resourcemanager'] + '?' + param;
	return window.open(url,'resource','dependent=yes,fullscreen=no,scrollbars=no,menubar=no,locationbar=no,resizable=yes,status=no,left=120, top=100,width=750,height=400').focus();	
}


/*
 * Opens the resource manager from the resource control
 * controlId: ClientId of ResourceControl
 * resid: Current resource dbid
 */
function openResourceManagerFromResourceControl(controlId, resid) 
{
    var param = 'Caller=ResourceControl&ResourceControlId=' + controlId + "&DbId=" + resid;	
	var url = config['url']['resourcemanager'] + '?' + param;
	return window.open(url,'resource','dependent=yes,fullscreen=no,scrollbars=no,menubar=no,locationbar=no,resizable=yes,status=no,left=120, top=100,width=750,height=400').focus();	
}

/*
 * Updates the specified resource control with the specified resource
 * cliendId: The clientid of the resource control
 * resource: resource object describing the new resource
 */
function UpdateResource(clientId, ressource)
{
    var resourceControl = document.getElementById(clientId);
    var resourceControl_Div = document.getElementById(clientId + "_div");
    
    changed = true; //Inform the page that something changed
     
    //Remove all childControls except the first, which is the plus   					
	while (resourceControl_Div.childNodes.length > 1) 
	{
	    resourceControl_Div.removeChild(resourceControl_Div.lastChild);
	}
			
	// Append control content
	resourceControl_Div.appendChild(ressource.getElement(document));
			
    // Update control postback input field
	resourceControl.innerText = ressource.getDbId();
}


function debug(text) {
	/* do nothing here
	logdiv = document.getElementById('logger');
	if(logdiv != null) {
		logdiv.appendChild(document.createTextNode(text));
		logdiv.appendChild(document.createElement('br'));
	} else alert('log: '+text); */
}


/*
 * This Function positions a div
 * sDiv: The Div Tag
 * sProperty: property object
 */ 
function flevDivPositionValue(sDiv, sProperty) { // v2.1, Marja Ribbers-de Vroed, FlevOOware
	this.opera = (window.opera); // Opera 5+
	this.ns4 = (document.layers); // Netscape 4.x
	this.ns6 = (document.getElementById && !document.all && !this.opera); // Netscape 6+
	this.ie = (document.all);  // Internet Explorer 4+
    var sValue = ""; docObj = eval("MM_findObj('" + sDiv + "')"); if (docObj == null) {return 0;}
	if ((sProperty == "left") || (sProperty == "top")) {
		if (!this.ns4) {docObj = docObj.style;} 
		sValue = eval("docObj." + sProperty);
		if ((this.ie) && (sValue == "")) { // IE (on PC) bug with nested layers
			if (sProperty == "top") { sValue = eval(sDiv + ".offsetTop"); } 
			else { sValue = eval(sDiv + ".offsetLeft"); } 
		};
	}
	else {
		if (this.opera) {
			docObj = docObj.style;
			if (sProperty == "height") { sValue = docObj.pixelHeight; } 
			else if (sProperty == "width") { sValue = docObj.pixelWidth; } 
		}
		else if (this.ns4) {sValue = eval("docObj.clip." + sProperty);} 
		else if (this.ns6) {sValue = document.defaultView.getComputedStyle(docObj, "").getPropertyValue(sProperty); } 
	    else if (this.ie) { 
			if (sProperty == "width") { sValue = eval(sDiv + ".offsetWidth"); } 
			else if (sProperty == "height") { sValue = eval(sDiv + ".offsetHeight"); } 
		}
   	}
	sValue = (sValue == "") ? 0 : sValue; 
	if (isNaN(sValue)) { if (sValue.indexOf('px') > 0) { sValue = sValue.substring(0,sValue.indexOf('px')); } } 
	return parseInt(sValue); 
}

/*
 * Pos
 */
function flevPersistentLayer() 
{ // v3.3, Marja Ribbers-de Vroed, FlevOOware
	var sD = arguments[0], oD = eval("MM_findObj('" + sD + "')"), iWW, iWH, iSX, iSY, iT = 10, sS = "";
	if (!document.layers) {oD = oD.style;}
	if (oD.tmpTimeout != null) {clearTimeout(oD.tmpTimeout);}
	var sXL = arguments[1], sXC = arguments[2], sXR = arguments[3], sYT = arguments[4], sYC = arguments[5], sYB = arguments[6];
	var iS = (arguments.length > 7) ? parseInt(arguments[7]) : 0, iPx = (arguments.length > 8) ? parseInt(arguments[8]) : 0;
	if (window.innerWidth) { // NS4, NS6 and Opera
		var oW = window; iWW = oW.innerWidth; iWH = oW.innerHeight; iSX = oW.pageXOffset; iSY = oW.pageYOffset; }
	else if (document.documentElement && document.documentElement.clientWidth) { // IE6 in standards compliant mode
		var oDE = document.documentElement; iWW = oDE.clientWidth; iWH = oDE.clientHeight; iSX = oDE.scrollLeft; iSY = oDE.scrollTop; }
	else if (document.body) { // IE4+
		var oDB = document.body; iWW = oDB.clientWidth; iWH = oDB.clientHeight; iSX = oDB.scrollLeft; iSY = oDB.scrollTop; }
	else {return;}
	var iCX = iNX = flevDivPositionValue(sD, 'left'), iCY = iNY = flevDivPositionValue(sD, 'top');
	if (sXL != "") {iNX = iSX + parseInt(sXL);} 
	else if (sXC != "") {iNX = Math.round(iSX + (iWW/2) - (flevDivPositionValue(sD, 'width')/2));}
	else if (sXR != "") {iNX = iSX + iWW - (flevDivPositionValue(sD, 'width') + parseInt(sXR));}
	if (sYT != "") {iNY = iSY + parseInt(sYT);}
	else if (sYC != "") {iNY = Math.round(iSY + (iWH/2) - (flevDivPositionValue(sD, 'height')/2));}
	else if (sYB != "") {iNY = iSY + (iWH - flevDivPositionValue(sD, 'height') - parseInt(sYB));}
	if ((iCX != iNX) || (iCY != iNY)) {
		if (iS > 0) {
			if (iPx > 0) { iT = iS;
				var iPxX = iPx, iPxY = iPx, iMX = Math.abs(iCX - iNX), iMY = Math.abs(iCY - iNY);
				// take care of diagonal movement
				if (iMX < iMY) {iPxY = (iMX != 0) ? ((iMY/iMX)*iPx) : iPx;}
				else {iPxX = (iMY != 0) ? ((iMX/iMY)*iPx) : iPx;}
				if (iPxX >= iMX) {iPxX = Math.min(Math.ceil(iPxX), iPx);}
				if (iPxY >= iMY) {iPxY = Math.min(Math.ceil(iPxY), iPx);}
				// temporary X/Y coordinates
				if ((iCX < iNX) && (iCX + iPxX < iNX)) {iNX = iCX + iPxX;}
				if ((iCX > iNX) && (iCX - iPxX > iNX)) {iNX = iCX - iPxX;}
				if ((iCY < iNY) && (iCY + iPxY < iNY)) {iNY = iCY + iPxY;}
				if ((iCY > iNY) && (iCY - iPxY > iNY)) {iNY = iCY - iPxY;} }
			else { 
				var iMX = ((iNX - iCX) / iS), iMY = ((iNY - iCY) / iS); 
				iMX = (iMX > 0) ? Math.ceil(iMX) : Math.floor(iMX); iNX = iCX + iMX; 
				iMY = (iMY > 0) ? Math.ceil(iMY) : Math.floor(iMY); iNY = iCY + iMY; } }
		if ((parseInt(navigator.appVersion)>4 || navigator.userAgent.indexOf("MSIE")>-1) && (!window.opera)) {sS="px";}
		if (iMX != 0) {eval("oD.left = '" + iNX + sS + "'");}
		if (iMY != 0) {eval("oD.top = '" + iNY + sS + "'");} }
	var sF = "flevPersistentLayer('" + sD + "','" + sXL + "','" + sXC + "','" + sXR + "','" + sYT + "','" + sYC + "','" + sYB + "'," + iS + "," + iPx + ")";
	oD.tmpTimeout = setTimeout(sF,10);
}

/*
 * Pos
 */
function flevInitPersistentLayer() { // v3.3, Marja Ribbers-de Vroed, FlevOOware
	if (arguments.length < 8) {return;}
	var sD = arguments[0]; if (sD == "") {return;}
	var	oD = eval("MM_findObj('" + sD + "')"); if (!oD) {return;}
	var iCSS = parseInt(arguments[1]);
	var sXL = arguments[2], sXC = arguments[3], sXR = arguments[4], sYT = arguments[5], sYC = arguments[6], sYB = arguments[7];
	var iS = (arguments.length > 8) ? parseInt(arguments[8]) : 0, iPx = (arguments.length > 9) ? parseInt(arguments[9]) : 0;
	if (iCSS != 0) { if (!document.layers) {oD = oD.style;} sXL = parseInt(oD.left), sYT = parseInt(oD.top);}
	var sF = "flevPersistentLayer('" + sD + "','" + sXL + "','" + sXC + "','" + sXR + "','" + sYT + "','" + sYC + "','" + sYB + "'," + iS + "," + iPx + ")";
	eval(sF);
}
		
			
/*
 * This function finds a object
 */
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}


/*
 * Opens the resource manager from the resource control
 * DEPRECATED
 *
 *function openResourceManager(method,resid) {
 *	var param = '';
 *	if(resid && resid != '' && resid > 0) {
 *		param = '&action=show&type=item&id=' + resid;
 *	}
 *	var url = config['url']['resourcemanager'] + '?method=' + method + param;
 *	return window.open(url,'resource','dependent=yes,fullscreen=no,scrollbars=no,menubar=no,locationbar=no,resizable=yes,status=no,left=120, top=100,width=750,height=400').focus();	
 *}
 *
 */