	function remove(el){
		el.parentNode.removeChild(el);
	}


	function escapeTags(str){
		var ret = str.replace(/</g, "&lt;");
		ret = ret.replace(/>/g, "&gt;"); 
		return ret;
	} 

	function displayRow(row) {
		if (document.all){   
            row.style.display = "inline";           
        } else{
            row.style.display = "table-row";           
        }
	}
	
	
	function call_user_func(callback_func_ref){
		
		var ret = null;

		var args = "";
		
		if(typeof(callback_func_ref) == "object" && callback_func_ref.length > 2){
			for (var i = 2; i < callback_func_ref.length; ++i){
				if(args != "") {
					args = args + ", ";
				}
				args = args + "callback_func_ref[" + i + "]";
			}		
		}	
		
		for (var i = 1; i < arguments.length; ++i){
			if(args != "") {
				args = args + ",";
			}
			args = args + "arguments[" + i + "]";
		}		

		if(typeof(callback_func_ref) == "string"){
			eval("ret = " + callback_func_ref + "("+ args +");");
		}else if (typeof(callback_func_ref) == "function"){
			eval("ret = callback_func_ref(" + args +");");
		}else if(typeof(callback_func_ref[0]) == "string" && typeof(callback_func_ref[1]) == "string"){
			eval("ret = " + callback_func_ref[0] + "." + callback_func_ref[1] + "("+ args +");");
		}else if(typeof(callback_func_ref[0]) == "object" && typeof(callback_func_ref[1]) == "string"){	
			eval("ret = callback_func_ref[0]."+ callback_func_ref[1] +"(" + args +");");
		}else{
			dbmgError("Wrong callback reference");
		}
		return ret;
	}

  	function prependEventToObj(obj, func, eventName){
		if(obj[eventName]){
			obj.oldFunc = obj[eventName];				
			obj[eventName] = function(){
				func();
				return this.oldFunc();
			}
		}else{
			obj[eventName] = function(){
				return func();	
			}	
		}
  	}

	function ieHoverClassFlip(objs){
		for(var i = 0; i < objs.length; i++){
			objs[i].onmouseover = function(){
				CssClasses(this).add('iehover');
			}
			objs[i].onmouseout = function(){
				CssClasses(this).remove('iehover');
			}
/*
			attachEventToObj(objs[i], function(e){CssClasses(getEventTarget(e)).add('hover')}, "onmouseover");
			attachEventToObj(objs[i], function(e){CssClasses(getEventTarget(e)).remove('hover')}, "onmouseout");
*/
		}		
	}


	function attachEventToObj(obj, func, eventName, where){
		
		if(!where){
			where = "end";
		}
		
		if(!obj.eventHandlers){
			obj.eventHandlers = new Object();
		}	

		var ehs = obj.eventHandlers[eventName];

		if(!ehs){
			ehs = new Array();
			if(obj[eventName]){
				var temp = obj[eventName];
				ehs.push(temp);
			}
			obj.eventHandlers[eventName] = ehs;
		}
		if("end" == where){
			ehs.push(func);			
		}else if("begin" == where){
			ehs.unshift(func);
		}else{
			dbmgerror("Wrong point");
		}
		obj[eventName] = function(e){
			var ret = true;
			for(var i in obj.eventHandlers[eventName]){
				ret = call_user_func(ehs[i], e, ret);			
			}		
			return ret;
		}

	}

/*
	function makeSelectFromUl(ul){
		var res = document.createElement("select");
		var lis = ul.getElementsByTagName("li");
		for(var i = 0; i < lis.length; i++){
			var opt = new Option(lis[i].firstChild.data, lis[i].firstChild.data);
			
//			var opt = document.createElement("option");
//			opt.innerHTML = lis[i].firstChild.data;
//			opt.value
			
			res.options[res.options.length] = opt;
		}
		ul.parentNode.replaceChild(res, ul);
		return res;
	}
*/ 
  
  	function getEventTarget(e){
  		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;	
  	
  		return targ;
  	}
  
  
  
  function getChildrenByTagName(obj, tagName){
    var ret = new Array();
    var c = obj.childNodes;
    for(var i = 0; i < obj.childNodes.length; i++){
      if(obj.childNodes[i].nodeName.toUpperCase() == tagName.toUpperCase() ){
        ret[ret.length] = obj.childNodes[i];
      }
    }
    return ret;
  }

  function getChildrenByClassName(obj, className){
    var ret = new Array();
    var c = obj.childNodes;
    for(var i = 0; i < obj.childNodes.length; i++){
      if(obj.childNodes[i].className && CssClasses(obj.childNodes[i]).exists(className)){
        ret[ret.length] = obj.childNodes[i];
      }
    }
    return ret;
  }
  
  function moveAllChilds(elFrom, elTo){
  	var tt = null;
  	removeAllChilds(elTo);
  	while(elFrom.hasChildNodes()){
		tt = elFrom.removeChild(elFrom.firstChild);  	
  		elTo.appendChild(tt);
  	}
  }
  
  function removeAllChilds(el){
  	while(el.hasChildNodes()){
		el.removeChild(el.firstChild);  	
  	}
  }
  
	function dbmgAllert(par, timeout){
		var ol = makeList(par);
		alertWin = DBMGpopup.init(null, { 
						content: ol,
						title: "Info!",
						xposition: "fromCSS",
						yposition: "fromCSS",
						addClassname: "DBMGpopupInfo",
						minable: false
							}
					);			
		if(timeout){
			setTimeout("alertWin.close();", timeout);
		}
		
		alertWin.setCloseOnBlur();
		return alertWin;
	}

	function dbmgAlert(par, to){
		return dbmgAllert(par, to);
	}



	function dbmgDebug(par){
		var ol = makeList(par);
		var new_win = DBMGpopup.init(null, { 
						content: ol,
						title: "DEBUG!",
						xposition: "fromCSS",
						yposition: "fromCSS",
						addClassname: "DBMGpopupDebug",
						minable: true
							}
		);			
	}

	function dbmgError(par){

		var ol = makeList(par);
		var errorWin = DBMGpopup.init("errorWin", { 
						content: ol,
						title: "ERROR!",
						addClassname: "DBMGpopupError",
						minable: false
							}
					);
		errorWin.addButton("close", new Array(errorWin, "close"));				
		errorWin.exlusiveFocus();
		return errorWin;
	}

	function dbmgConfirm(par, callBackYes, callBackNo){
		var confirmWin = DBMGpopup.init(null, { 
						content: par,
						title: "CONFIRM!",
						addClassname: "DBMGpopupConfirm",
						minable: false
					}
				);
				
		var lid = confirmWin.registerListener("onClose", callBackNo);

		var yesBut = confirmWin.addButton("ja",  new Array(confirmWin, "removeListener", "onClose", lid));				
		attachEventToObj(yesBut, new Array(confirmWin, "close"), "onclick");
		attachEventToObj(yesBut, callBackYes, "onclick");

		
		var noBut = confirmWin.addButton("nein", function(){});				
		attachEventToObj(noBut, new Array(confirmWin, "close"), "onclick");

//		confirmWin.exlusiveFocus();
		confirmWin.setCloseOnBlur();
		return confirmWin;
	}


	function makeList(par){
		var ret = null;
		var par2 = par;
		
		if(par.nodeName == "OL" || par.nodeName == "UL"){
			return par2;
		}else if(typeof(par) != "object"){
			par2 = new Array();
			par2[0] = par;
		}
		
		ret = document.createElement("ol");
		var li = null;
		for(var e in par2){
			li = document.createElement("li");
			li.innerHTML = par2[e];				
			ret.appendChild(li);
		}
		return ret;
	}

	function debug(par){
		var te = par;
		
		if(typeof(par) == "object" ){
			te = new Array();
			for(var po in par){
				if(typeof(par[po]) != "function"){
					te.push(po + ": " + par[po]);
				}
			}
		}
		if(te){
			dbmgDebug(te, debug.caller);
		}
	}



	function getStyle(el,styleProp){
		var y = false;
		if(el[styleProp]){
			y = el[styleProp];
		}else{
			if (document.defaultView && document.defaultView.getComputedStyle){
				y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
			}else if (el.currentStyle){
				var i = styleProp.indexOf("-");
				if(i > -1){
					styleProp = styleProp.substr(0, i) +  styleProp.substr(i+1, 1).toUpperCase() + styleProp.substring(i + 2, styleProp.length);				
				}
				y = eval("el.currentStyle." + styleProp);
			}else{
				dbmgError("Wrong point");
			}
		}
		return y;
	}

	function getWinSize(){
		var ret = new Object();
		if (document.compatMode && document.compatMode != "BackCompat"){
		   ret.width = document.documentElement.clientWidth;
		   ret.height = document.documentElement.clientHeight;
		}else{
		   ret.width = document.body.clientWidth;
		   ret.height = document.body.clientHeight;
		}	
		return ret;
	}


function CssClassesHandler(object) { this.object = object }


function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

/*
Beispiel: 

div = document.getElementById('someId')

CssClasses(div).add('someClass')
CssClasses(div).remove('someClass')
CssClasses(div).flip('someClass')
*/


CssClassesHandler.prototype = {
    object      : null,
    
    all         : function() {
                    return this.object.className.split(/\s+/)
                },

    exists      : function(className) {
                    var classes = this.all()
                    for(var i = 0; i < classes.length; i++)
                        if(classes[i] == className) return true
                    return false
                },

    add         : function(className) {
                    var classes = this.all()
                    for(var i = 0; i < classes.length; i++)
                        if(classes[i] == className) return
                    this.object.className = this.object.className + " " + className
                },

    remove      : function(className) {
                    var classes = this.all()
                    var cn = ""
                    for(var i = 0; i < classes.length; i++)
                        if(classes[i] != className) cn = cn + " " + classes[i]
                    this.object.className = cn.substr(1)
                },

    set         : function(className, state) {
                    if(state)
                        this.add(className)
                    else
                        this.remove(className)
                },

    flip        : function(className) {
                    if(this.exists(className))
                        this.remove(className)
                    else
                        this.add(className)
                }
}

function CssClasses(object) {
    return new CssClassesHandler(object)
}
