// ==================================================
//
//				Basic Funktionen
//
// ==================================================
// Sucht einen bestimmten Frame
// ==================================================

	function DSPFindFrame(win,name)
	{
		var i,hit,frame,max;
		
		max = win.frames.length;
		
		for(i=0; i<max; i++)
		{
			frame = win.frames[i];
			
			if(frame.name == name) return(frame);
			else
			{
				if(frame.frames.length > 0)
				{
					hit = DSPFindFrame(frame,name);
					if(hit != null) return(hit);
				}
			}
		}
		
		return(null);
	}

// ==================================================
// Veranlasst das dieser Frame neu geladen wird
// ==================================================

	function DSPReloadFrame(win,name)
	{
		var frame;
		
		frame = DSPFindFrame(win,name);
		
		if(frame != null)
		{
			frame.location.href = frame.location.href;
		}
	}
	
// ==================================================
// Sucht ein bestimmtes Element
// ==================================================

	function DSPGetElementById(win,name)
	{
		var i,current,hit,frame,max;
	
		current = win.document.getElementById(name);
	
		if(current == null)
		{
			max = win.frames.length;
	
			for(i=0; i<max; i++)
			{
				frame   = win.frames[i];
				current = frame.document.getElementById(name);
			
				if(current) return(current);
				else
				{
					if(frame.frames.length > 0)
					{
						hit = DSPGetElementById(frame,name);
						if(hit != null) return(hit);
					}
				}
			}
		
			return(null);
		}
		else return(current);
	}

// ==================================================
// Sucht ein Event-Objekte (IE)
// ==================================================

	function DSPFindEvent(win)
	{
		var i,hit,frame,max;
		
		if(win.event && win.event != null)
		{
			return(win.event);
		}
		else
		{
			max = win.frames.length;
			
			for(i=0; i<max; i++)
			{
				frame = win.frames[i];
				
				if(frame.event && frame.event != null) 
				{
					return(frame.event);
				}
				else
				{
					if(frame.frames.length > 0)
					{
						hit = DSPFindEvent(frame);
						if(hit != null) return(hit);
					}
				}
			}
			
			return(null);
		}
	}

// ==================================================
// Window initialisieren
// ==================================================

	function DSPSetupFrame(page,x,y,width,height,frameid)
	{
		var view,url,frame;
	
		if(page.indexOf("url://") != -1)
		{
			url = DSPGetURL(page.substr(6));
		}
		else
		{
			if(page.indexOf("http://") == -1) url = DSPGetPageCall(page);
				else url = page;
		}

		frame = DSPGetElementById(top,frameid);
		frame.setAttribute("maximize","0");
		frame.setAttribute("initialwidth",width);
		frame.setAttribute("initialheight",height);
	
		if(!ie5 && !ns6) 
		{
			window.open(url,"","width=width,height=height,scrollbars=1");
		}
		else
		{
			frame.style.left    = x + "px";
			frame.style.top     = y + "px";
			frame.style.width   = width  + "px";
			frame.style.height  = height + "px";
			
			DSPCenterFrame(frameid,width,height);
			frame.style.display = '';
			
			view	 = DSPGetElementById(top,frameid + "__frame");
			view.src = url;
			view.focus();
		}
	}
	
// ==================================================
// Fenster Maximieren-Button
// ==================================================

	function DSPMaximizeFrame(frameid)
	{
		var icon,frame;
		var browser,state;
	
		frame	= DSPGetElementById(top,frameid);
		browser = DSPGetBrowser();
		state	= frame.getAttribute("maximize");
		
		if(state == "0")
		{
			icon = DSPGetElementById(top,frameid + "__maximizeicon");
			icon.setAttribute("src",frame.getAttribute("restoreicon"));
			
			switch(browser)
			{
				case "IE":
				{
					frame.style.width  = top.document.body.clientWidth  + "px";
					frame.style.height = top.document.body.clientHeight + "px";
					break;
				}
				case "SAFARI":
				case "GECKO":
				{
					frame.style.width  = top.innerWidth  - 20 + "px";
					frame.style.height = top.innerHeight - 20 + "px";
					break;
				}
			}
			
			frame.setAttribute("maximize","1");
		}
		else
		{
			icon = DSPGetElementById(top,frameid + "__maximizeicon");
			icon.setAttribute("src",frame.getAttribute("maximizeicon"));
			frame.style.width  = frame.getAttribute("initialwidth");
			frame.style.height = frame.getAttribute("initialheight");
			frame.setAttribute("maximize","0");
		}
	
		switch(browser)
		{
			case "IE":
			{
				frame.style.left = top.document.body.scrollLeft + "px";
				frame.style.top  = top.document.body.scrollTop  + "px";
				break;
			}
			case "SAFARI":
			case "GECKO":
			{
				frame.style.left = top.pageXOffset + "px";
				frame.style.top  = top.pageYOffset + "px";
				break;
			}
		}
	}

// ==================================================
// Fenster Schliessen-Button
// ==================================================

	function DSPCloseFrame(frameid)
	{
		var element;
	
		element = DSPGetElementById(top,frameid);
		element.style.display = "none";
		
		element = DSPGetElementById(top,frameid + "__frame");
		element.src = "/shared/dspdesktop/dialogs/emptydialog.html";		
	}

// ==================================================
// Fenster Schliessen-Button
// ==================================================

	function DSPSaveAndCloseFrame(form,frameid)
	{
		document.forms[form].elements['submit'].click();
		DSPCloseFrame(frameid);
	}

// ==================================================
// Dragfunktion
// ==================================================

	function DSPStartDragFrame(e,frameid)
	{
		var frame;
	
		frame         	= document.getElementById(frameid);
		frame.offsetx 	= ie5 ? event.clientX : e.clientX;
		frame.offsety 	= ie5 ? event.clientY : e.clientY;
		DSPCurrentFrame	= frame;
	
		document.getElementById(frameid + "__content").style.display = "none";
	
		frame.tempx        = parseInt(frame.style.left);
		frame.tempy        = parseInt(frame.style.top);
		frame.dragapproved = true;
		frame.onmousemove  = DSPDragFrame;
	}

// ========================================
// Position der zentrierten Flaeche
// ========================================

	function DSPCenterFrame(frameid,width,height)
	{
		var frame;
		var pos = {x:0,y:0};

		frame = top.document.getElementById(frameid);
	
		if(frame)
		{
			if(top.innerWidth)
			{
				pos.x = (top.innerWidth  - width)  / 2;
				pos.y = (top.innerHeight - height) / 2;
			}
			else
			{
				pos.x = (top.document.body.offsetWidth  - width)  / 2;
				pos.y = (top.document.body.offsetHeight - height) / 2;
			}
		
			if(pos.y > 30) pos.y -= 30;

			frame.style.left = pos.x;
			frame.style.top  = pos.y;
		}
	}

// ==================================================
// Dragfunktion
// ==================================================

	function DSPDragFrame(e)
	{
		if(ie5 && DSPCurrentFrame.dragapproved && event.button == 1)
		{
			DSPCurrentFrame.style.left = DSPCurrentFrame.tempx + event.clientX - DSPCurrentFrame.offsetx + "px";
			DSPCurrentFrame.style.top  = DSPCurrentFrame.tempy + event.clientY - DSPCurrentFrame.offsety + "px";
		}
		else
		{
			if(ns6 && DSPCurrentFrame.dragapproved)
			{
				DSPCurrentFrame.style.left = DSPCurrentFrame.tempx + e.clientX - DSPCurrentFrame.offsetx + "px";
				DSPCurrentFrame.style.top  = DSPCurrentFrame.tempy + e.clientY - DSPCurrentFrame.offsety + "px";
			}
		}
	}

// ==================================================
// Drag beenden
// ==================================================

	function DSPStopDragFrame(frameid)
	{
		var frame;
	
		frame              = document.getElementById(frameid);
		frame.dragapproved = false;
		frame.onmousemove  = null;
		DSPCurrentFrame	   = null;
	
		document.getElementById(frameid + "__content").style.display = "";
	}

// ==================================================
// Ruft ein Serverscript auf
// ==================================================

	function DSPCall(methode,param)
	{
		window.location = DSPGetCall(methode,param);
	}

// ==================================================
// Skaliert ein Bild (Seitenverhaeltnis bleibt)
// ==================================================

	function DSPFitImage(name,width,height)
	{
		var image,sx,sy;
		
		image	= document.getElementById(name);
		sx 		= width   / image.width;
		sy 		= height  / image.height;
	
		if(sx <= sy) mode = 1;
			else mode = 2;
	
		switch(mode)
		{
			case 1:
			{
				if(image.width > width) image.width = width; break;
			}
			default:
			{
				if(image.height > height) image.height = height; break;
			}
		}
	}

// ==================================================
// Dialog beenden
// ==================================================

	function DSPCloseDialog()
	{
		window.close();
	}

// ==================================================
// Dialog oeffnen
// ==================================================

	function DSPOpenDialog(page,w,h,name)
	{
		var url=DSPGetPageCall(page);
		window.open(url,name,'resizable=0,scrollbars=0,width=' + w + ',height=' + h);
	}

// ==================================================
// Dialog oeffnen
// ==================================================

	function DSPOpenBrowser(page,w,h,name)
	{
		var url=DSPGetPageCall(page);
		window.open(url,name,'toolbar=1,location=1,menubar=1,resizable=1,scrollbars=1,width=' + w + ',height=' + h);
	}
	
// ==================================================
// Dialog erstellen
// ==================================================

	function DSPCreateDialog(methode,param,w,h,name)
	{
		var url=DSPGetCall(methode,param);
		window.open(url,name,'resizable=0,scrollbars=0,width=' + w + ',height=' + h);
	}

// ==================================================
// Markiertes Element im Popup finden
// ==================================================

	function DSPGetSelected(popup)
	{
		var i;
		
		for(i=0; i < popup.options.length; i++)
		{
			if(popup.options[i].selected) return(popup.options[i].value);
		}
		
		return("");
	}

// ==================================================
// [Editor] Ermittelt die absolute Position des Elements
// ==================================================

	function DSPGetElementPosition(element)
	{
		var pos = {x:0,y:0};
	
		while(element)
		{
			pos.x  += element.offsetLeft;
			pos.y  += element.offsetTop;
			element = element.offsetParent;
		}
	
		return(pos);
	}

// ==================================================
// [Editor] Ermittelt die Groesse in Pixel des Elements
// ==================================================

	function DSPGetElementSize(element)
	{
		var size    = {width:0,height:0};
		size.width  = element.clientWidth;
		size.height = element.clientHeight;
	
		return(size);
	}

// ==================================================
// [Editor] Schaltet den Editormodus ein oder aus
// ==================================================

	function DSPEditPage(mode,current)
	{
		var components;
	
		if(DSPCurrentPage.EditorSupport != null)
		{
			components = DSPCurrentPage.EditorElements;
	
			if(mode == true)
			{
				DSPShowEdit(components,current);
			}
			else DSPHideEdit(components);
		}
	}

// ==================================================
// [Editor] Schaltet die Konturen der Elemente aus
// ==================================================

	function DSPHideEdit(list)
	{
		var element,id;
	
		for(i=0; i < list.length; i++)
		{
			id 	  = list[i];
			element = document.getElementById(id + "_CMSID");
	
			if(element != null)
			{
				document.body.removeChild(element);
			}
		}
	}

// ==================================================
// [Editor] Schaltet die Konturen der Elemente ein
// ==================================================

	function DSPShowEdit(list,current)
	{
		var element,id;
		var select;
		var color,pos,size;
	
		for(i=0; i < list.length; i++)
		{
			id		= list[i];
			element = document.getElementById(id);
	
			if(element != null)
			{
				if(id == current) color = "red";
					else color = "blue";
	
				pos    = DSPGetElementPosition(element);
				size   = DSPGetElementSize(element);
				select = document.getElementById(id + "_CMSID")
	
				if(select == null)
				{
					select = document.createElement("DIV");
					select.setAttribute("onclick","DSPCall('onEdit','" + id + "');");
					select.setAttribute("id",id + "_CMSID");
					select.setAttribute("title",id);
	
					document.body.appendChild(select);
				}
	
				select.style.position	 = "absolute";
				select.style.left		 = pos.x;
				select.style.top		 = pos.y;
				select.style.width		 = size.width;
				select.style.height		 = size.height;
				select.style.borderWidth = 1;
				select.style.borderStyle = "solid";
				select.style.borderColor = color;
			}
		}
	}

// ========================================
// Erstellt eine absolute URL
// ========================================

	function DSPGetURL(path)
	{
		var url;

		if(path.indexOf("http://") == -1)
		{
			if(path.indexOf("/") == 0)
			{
				url = "http://" + window.location.host + path;
			}
			else 
			{
				url = "http://" + window.location.host + "/" + path;
			}
			
			return(url);
		}
		else return(path);
	}
	
// ========================================
// Loescht alle Options
// ========================================

	function DSPResetPopup(input)
	{
		var max = input.options.length;
		
		for(i=0; i < max; i++)
		{
			input.remove(0);
		}
	}
	
// ========================================
// Selektioniert einen Menuitem
// ========================================

	function DSPSelectPopup(input,value)
	{
		var list = input.getElementsByTagName("OPTION");
			
		for(i=0; i < list.length; i++)
		{
			if(list[i].text == value)
			{
				input.selectedIndex = i;
				return;
			}
		}
	}

// ========================================
// Selektioniert einen Menuitem
// ========================================

	function DSPSelectPopupValue(input,value)
	{
		var list = input.getElementsByTagName("OPTION");
			
		for(i=0; i < list.length; i++)
		{
			if(list[i].value == value)
			{
				input.selectedIndex = i;
				return
			}
		}
	}
	
// ========================================
// Prueft den Browser
// ========================================

	function DSPGetBrowser()
	{
		var client;
		
		client = navigator.userAgent.toLowerCase();
		
		if(client.indexOf("msie") != -1)
		{
			return("IE");
		}
		
		if(client.indexOf("gecko") != -1)
		{
			return("GECKO");
		}
		
		if(client.indexOf("safari") != -1)
		{
			return("SAFARI");
		}	

		return("unknown");
	}

// ========================================
// filter unerwuenschte keyevents heraus
// ========================================

	function DSPProtectedKeys(event,browser) 
	{	
		var current,keycode,kind;
	
		current = DSPGetBrowser();
	
		switch(current)
		{
			case "IE":
			{
				keycode = event.keyCode;
				kind	= event.srcElement.tagName; 
				break;
			}
			default:
			{
				keycode = event.which;
				kind	= event.target.tagName; 
				break;
			}
		}
		
		if(current == browser)
		{
			if(keycode == 8)
			{
				if(kind != "INPUT" && kind != "TEXTAREA")
				{
					return(false);
				}
			}
		}
	
		return(true);	
	}

// ========================================
// Wechselt ein Bild aus
// ========================================

	function DSPSetImage(name,layer,path)
	{
		if(!document.images[name]) document.layers[layer].document.images[name].src = path; 
			else document.images[name].src = path;
	}

// ========================================
//
//			   class CSSParser
//
// ========================================
// Konstruktor
// ========================================

function CSSParser()
{
	this.dspNames  = new Array();	// Bezeichner
	this.dspValues = new Array();	// Werte

// ========================================
// Uebergibt ein Property
// ========================================

	this.getProperty = function(name)
	{
		var i;
		
		for(i=0; i < this.dspNames.length; i++)
		{
			if(this.dspNames[i] == name)
			{
				return(this.dspValues[i]);
			}
		}
		
		return("");
	}
	
// ========================================
// Prueft das Property existiert
// ========================================

	this.existProperty = function(name)
	{
		var i;
		
		for(i=0; i < this.dspNames.length; i++)
		{
			if(this.dspNames[i] == name)
			{
				return(true);
			}
		}
		
		return(false);
	}
	
// ========================================
// Zerlegt die Properties
// ========================================

	this.parse = function(text)
	{
		var i,name,value,token,regex;

		regex = new RegExp("[;:]");
		token = text.split(regex);

		for(i=0; i < token.length; i += 2)
		{
			name  = this.trim(token[i]);

			if(i+1 < token.length)
			{
				value = this.trim(token[i+1]);						

				this.dspNames.push(name);
				this.dspValues.push(value)
			}
		}
	}

// ========================================
// Trennt Leerzeichen ab
// ========================================

	this.trim = function(text)
	{
		var start,end;

		if(text != "")
		{
			if(text.charAt(0) == ' ')
			{
				for(start = 0; start < text.length; start++)
				{
					if(text.charAt(start) == ' ') 
					{
						start++; break;
					}
				}
			}
			else start = 0;

			if(text.charAt(text.length - 1) == ' ')
			{
				for(end = text.length - 1; end >= 0; end--)
				{
					if(text.charAt(end) == ' ') 
					{
						end--; break;
					}
				}
			}
			else end = text.length; 

			text = text.substring(start,end);
		}

		return(text);
	}

	return(this);
}

// ========================================
//
//			   class DSPPage
//
// ========================================
// Konstruktor
// ========================================

function DSPPage(name,id,session)
{
	this.dspName	 	= name;
	this.dspID       	= id;
	this.dspSessionID	= session;
	this.dspListener	= new Array();
	
// ========================================
// Action-Listener
// ========================================

	this.addListener = function(component,action,method)
	{
		var listener;

		listener 		 = new Object();
		listener.event 	 = component + "@" + action;
		listener.handler = method;
		
		this.dspListener.push(listener);
	}
	
// ========================================
// Get Action-Listener
// ========================================

	this.getListeners = function(component,action)
	{
		var list,key;
		
		key  = component + "@" + action;
		list = new Array();
		
		for(var i=0; i < this.dspListener.length; i++)
		{
			if(this.dspListener[i].event == key)
			{
				list.push(this.dspListener[i]);
			}
		}
		
		return(list);
	}
	
// ========================================
// Action ausfuehren
// ========================================

	this.requestAction = function(component,script,param)
	{
		var text;
		
		text  = "http://" + window.location.host + "/action_dsp?";
		text += "SET=local&"
		text += "PAGE="		+ this.dspName	+ "&";
		text += "SCRIPT="	+ component  	+ "@" + script + "&";
		text += "PARAM=" 	+ param 		+ "&";
		text += "ID=" 		+ this.dspID	+ "&";
		text += "SESSION="	+ this.dspSessionID;
		
		window.location = text;
	}
	
// ========================================
// Action-Listener
// ========================================

	this.action = function(component,action,param)
	{
		var result,listener;
		var list;
		
		list = this.getListeners(component,action);
		
		for(var i=0; i < list.length; i++)
		{
			listener = list[i];
			result 	 = listener.handler(component,action,param);
			
			if(result == false)
			{
				return;
			}
		}
		
		this.requestAction(component,"listener",param);
	}
}

// ==================================================
// Parameter
// ==================================================

var ie5 = document.all && document.getElementById;
var ns6	= document.getElementById && !document.all;
