/******************************************************************************
			cleverbridge DHTML Environment Libary
			(c) Uwe Linsenboll for cleverbridge Feb 2005
				Rev.: Mar 2006
			requires JavaScript 1.2
							<script>
TODO: Test and finish drag drop
TODO: include ies event model. this will save us a lot of code.
TODO: disable support of toooo old browsers.
******************************************************************************/
//INITIALIZER
cleverEnvironment.instance = null;
function cleverEnvironment(){
	if(cleverEnvironment.instance){
		return cleverEnvironment.instance;
	} else{
		var tm = new Date().valueOf();
		var env = new Environment();
		cleverEnvironment.instance = env;
		try {
			env.appendStatement("Loading cleverEnvironment...");
			env.appendStatement(env.client.toString());
			env.client.fW = function(){return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;}
			env.client.fH = function(){return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;}
			document.body.id = document.body.id ? document.body.id : env.uniqueId();
			env.body = env.dhtmlObject(document.body.id);
			env.appendStatement("Setting dhtml body ["+document.body.id+"]"+env.body.element);
			try {
				env.body.fSX = function(){return cleverEnvironment().client.ns4 || cleverEnvironment().client.ns6 ? window.pageXOffset
				  : document.documentElement.scrollLeft ? document.documentElement.scrollLeft
				  : document.body.scrollLeft; }
				env.body.fSY = function(){return cleverEnvironment().client.ns4 || cleverEnvironment().client.ns6 ? window.pageYOffset
				  : document.documentElement.scrollTop ? document.documentElement.scrollTop
				  : document.body.scrollTop;}
				env.body.fCT = function(){return cleverEnvironment().body.fSY()};
				env.body.fCL = function(){return cleverEnvironment().body.fSX()};
				env.body.fCB = function(){return cleverEnvironment().body.fSY() + cleverEnvironment().client.fH();}
				env.body.fCR = function(){return cleverEnvironment().body.fSX() + cleverEnvironment().client.fW();}
			} catch(e){env.appendStatement(e.message);}
		} catch(e){env.appendStatement(e.message);}		
		env.appendStatement("cleverEnvironment has instance. ["+env.id+"]");
		env.appendStatement("Loading cleverEnvironment done.");
		env.time.instance = new Date().valueOf() - tm;
		return env;
	}
}
/*******************************************************************************
Public Class Environment
	   to create an instance of the environment.
*******************************************************************************/
function Environment(){
	this.storage = new Object();
	this.storage.uniqueId = 0;
	this.uniqueId = function(){
		this.storage.uniqueId++;
		return "jsEnvId"+this.storage.uniqueId;
	}
	this.id = this.uniqueId();
	this.statement = "\nnew Environment() ["+this.id+"]";
	this.appendStatement = function(s){
		this.statement += "\n"+s;
	}
	this.storage.dhtmlObject = new Object();
	this.dhtmlObject = function(id,nest){
		if(!this.storage.dhtmlObject[id]){this.storage.dhtmlObject[id] = new DhtmlObject(id,nest);} 
		return this.storage.dhtmlObject[id];
	}
	this.removeDhtmlObject = function(id){
		if(this.storage.dhtmlObject[id]){delete this.storage.dhtmlObject[id];}
	}
	this.storage.dhtmlObjectsByName = new Object();
	this.dhtmlObjectsByName = function(name,nest){
		if(!this.storage.dhtmlObjectsByName[name]){this.storage.dhtmlObjectsByName[name] = new DhtmlObjectsByName(name,nest);} 
		return this.storage.dhtmlObjectsByName[name];
	}
	this.storage.dhtmlObjectsByIdSequence = new Object();
	this.dhtmlObjectsByIdSequence = function(id){
		if(!this.storage.dhtmlObjectsByIdSequence[id]){this.storage.dhtmlObjectsByIdSequence[id] = new DhtmlObjectsByIdSequence(id);} 
		return this.storage.dhtmlObjectsByIdSequence[id];
	}
	this.client = new Client();
	if(!this.client.isValidBrowser()){
		return false;
	}
	this.unit = this.client.ns4 || this.client.opera ? "" : "px";
	this.loaded = new Object();
	this.time = new Object();
	this.toString = function(){return this.statement;}
	return this;
}

/*******************************************************************************
Public Class Client
	   create a Client object
*******************************************************************************/
//Construct the Object *********************************************************
function Client(){
		this.statement = "new Client()";
	this.agent = navigator.userAgent;
		this.statement += "\n\tuserAgent: "+this.agent;
	this.ver = navigator.appVersion;
		this.statement += "\n\tappVersion: "+this.ver;
	this.dom = document.getElementById ? true : false;
	this.opera5 = this.agent.indexOf("Opera 5") > -1 ? true : false;
	this.opera6 = this.agent.indexOf("Opera 6") > -1 ? true : false;
	this.opera7 = this.agent.indexOf("Opera 7") > -1 ? true : false;
	this.opera8 = this.agent.indexOf("Opera 8") > -1 ? true : false;
	this.opera9 = this.agent.indexOf("Opera/9") > -1 ? true : false;
	this.opera = this.opera5 || this.opera6 || this.opera7 || this.opera8 || this.opera9;
	this.ie4 = (document.all && !this.dom && !this.opera) ? true : false;
	this.ie7 = (this.ver.indexOf("MSIE 7") > -1 && this.dom && !this.opera) ? true : false;
	this.ie6 = (this.ver.indexOf("MSIE 6") > -1 && this.dom && !this.opera && !this.ie7) ? true : false;
	this.ie5 = (this.ver.indexOf("MSIE 5") > -1 && this.dom && !this.opera && !this.ie7 && !this.ie6) ? true : false; 
	this.ie = this.ie4 || this.ie5 || this.ie6 || this.ie7;
	this.mac = this.agent.indexOf("Mac") > -1 ? true : false;
	this.ns4 = (document.layers && !this.dom) ? true : false;
	this.ns6 = (this.dom && parseInt(this.ver) >= 5) ? true : false; //ns6 includes Mozilla
	this.isValidBrowser = function(){return this.dom || this.ie6 || this.ie7 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera};
		this.statement += "\n\tisValidBrowser: "+this.isValidBrowser();
	//check which event handling level applies
	this.eventLevel = 0;
	if (document.implementation){
		if (document.implementation.hasFeature('Events', '2.0') &! this.opera){
			this.eventLevel = 2;
		}
	}
	this.statement += "\n\teventLevel: "+this.eventLevel;
	//function for acutual scrolling position
	this.toString = function(){return this.statement;}
	return this;
}
function DhtmlObject(id,nest){
	nest = (!nest) ? "" : 'document.'+nest+'.';
	this.element = cleverEnvironment().client.dom ? document.getElementById(id) :
		cleverEnvironment().client.ie4 ? document.all[id] :
		cleverEnvironment().client.ns4 ?  eval(nest+"document.layers." +id) :
	    false;
	if (!this.element) {
		return;
	}
	//As IE mixes up attributes name and id we have to make sure, it really got the
	//tag with the _id_. if not we get the elements by name and check for the rigth id.
	if (this.element.id != id){
		this.element = false;
		var thisElements = cleverEnvironment().client.dom ? document.getElementsByName(id) :
			cleverEnvironment().client.ie4 ? document.all[name] :
			cleverEnvironment().client.ns4 ?  eval(nest+"document.layers." +id) : //This may probably not work, check syntax for old NS
			false; 
		for (var i=0;i<thisElements.length;i++){
			if (thisElements[i].id == id){
				this.element = thisElements[i];
			}
		}
		if (!this.element) {
			return; 
		}
	}
	//create element's css style access
	this.css = cleverEnvironment().client.dom || cleverEnvironment().client.ie4 ? this.element.style : this.element; 
	//create element's css style reference
	this.ref = cleverEnvironment().client.dom || cleverEnvironment().client.ie4 ? document : this.css.document;
	//create element's styleinformation
	this.fX = function(){return parseInt(this.css.left) || this.css.pixelLeft || this.getOffsetLeft() || 0;}
	this.fY = function(){return parseInt(this.css.top) || this.css.pixelTop || this.getOffsetTop() || 0;}
	this.fW = function(){return this.element.offsetWidth || this.css.clip.width || this.ref.width || this.css.pixelWidth || 0;}
	this.fH = function(){return this.element.offsetHeight || this.css.clip.height || this.ref.height || this.css.pixelHeight || 0;}
	this.c = 0; //Clip values
	if ((cleverEnvironment().client.dom || cleverEnvironment().client.ie4) && this.css.clip) {
		this.c = this.css.clip;
		this.c = this.c.slice(5,this.c.length-1); 
		this.c = this.c.split(' ');
		for (var i=0;i<4;i++){
			this.c[i]=parseInt(this.c[i])
		}
  	}
	this.ct = this.css.clip.top || this.c[0] || 0; 
	this.cr = this.css.clip.right || this.c[1] || this.fW() || 0;
	this.cb = this.css.clip.bottom || this.c[2] || this.fH() || 0; 
	this.cl = this.css.clip.left || this.c[3] || 0;
	//construct the object
	this.obj = id + "Object";
	eval(this.obj + "=this");
	//cleverEnvironment().appendStatement("new DhtmlObject('"+this.element.id+"') -> "+this.element.nodeName);
	return this;
}

//functions for IE coordinates for relative elements
DhtmlObject.prototype.getOffsetTop = function(){
	var curtop = 0;
	var obj = this.element; 
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y) {
		curtop += obj.y;
	}
	return curtop;
}
DhtmlObject.prototype.getOffsetLeft = function(){
  var curleft = 0;
  var obj = this.element; 
  if (obj.offsetParent){
  	 while (obj.offsetParent){
	 	   curleft += obj.offsetLeft
		   obj = obj.offsetParent;
	 }
  } else if (obj.x) {
  	curleft += obj.x;
  }
  return curleft;
}
/********************************************************************************
EventHandling for DhtmlObjects
********************************************************************************/
DhtmlObject.prototype.keepDocumentListener = function(listenerType){
	if(this.element['on'+listenerType]){
		var f = this.element['on'+listenerType];
		this.element['on'+listenerType] = "";
		this.addListener(new Listener(listenerType,f));
		//alert(this.element.id+": Ich hatte "+listenerType+"."+f);
	}
}
DhtmlObject.prototype.addListener = function(objListener){
	var alreadyTriggering = false;
	this.listener = this.listener ? this.listener : new Object();
	if (this.listener[objListener.type]){
		alreadyTriggering = true;
		if (this.listener[objListener.type][objListener.id]){
			return;
		}
	} else {
		this.listener[objListener.type]= new Object();
	}
	this.listener[objListener.type][objListener.id] = objListener;
	
	if (cleverEnvironment().client.eventLevel==2) {
		if(alreadyTriggering==false){
			this.keepDocumentListener(objListener.type);
		}
		if (!(this.element.addEventListener)){
			this.element= document; // Opera 7.2
		}	 
		objListener.dispatch = function(event){objListener.handler(new EventTrigger(event))};
		this.element.addEventListener(objListener.type, objListener.dispatch, true);
	}
	if (cleverEnvironment().client.eventLevel==0){
		if (alreadyTriggering==false){ //this was in condition above. seemed wrong! 14.05.2007
			this.keepDocumentListener(objListener.type);
		}	
		eval(privateTrigger_DOM0(objListener.type));
		
		this.element['on'+objListener.type] = privateEventTrigger;
		if (this.element.captureEvents){
			this.element.captureEvents('Event.'+objListener.type.toUpperCase());
		}	 
	}
}
DhtmlObject.prototype.removeListener = function(objListener) {
	var removeThisListener = false;
	var keepTrigger = false;
	this.listener = this.listener ? this.listener : new Object();
	for (listenerId in this.listener[objListener.type]){
		if (listenerId == objListener.id){
			delete this.listener[objListener.type][listenerId];
			removeThisListener = true;
			if (cleverEnvironment().client.eventLevel==2) {
				if (this.element==window && !(this.element.removeEventListener)){
					this.element= document; // Opera 7.2
				}	
				this.element.removeEventListener(objListener.type, objListener.dispatch, true);
			}
		} else{
			//alert("keep trigger");
			keepTrigger = true;
		}	
		
	}
	if (removeThisListener && !keepTrigger && cleverEnvironment().client.eventLevel==0) {
		delete this.listener[objListener.type];
		this.element['on'+objListener.type]= window.clientInformation ? null : window.undefined;
	}
}

function privateTrigger_DOM0(t){
	return 'function privateEventTrigger(e){return privateEventDispatch(e,this, \''+t+'\');}';
}
//only needed for lvl 0
function privateEventDispatch(e,eventSource,eventType){
	//eventSource and eventType are fallback, if e remains undef.
	//The event trigger object will then at least get the eventSource and the eventType.
	e = e ? e : window.event;
	var objEventTrigger = new EventTrigger(e,eventSource);
	var elisteners = new Array();
	var result = window.undefined;
	if(objEventTrigger.dhtmlCurrentTarget){
		for (listenerId in objEventTrigger.dhtmlCurrentTarget.listener[eventType]){
			elisteners[elisteners.length] = objEventTrigger.dhtmlCurrentTarget.listener[eventType][listenerId].handler;		
		}
	} else {
		return cleverEnvironment().appendStatement("Adding a listener to dhtml object for eventlvl 0 failed in privateEventDispatch!"+
			"(trigger has not the dhtml current target)");
	}
	for (var i=0;i<elisteners.length;i++){
    	var r = elisteners[i](objEventTrigger);
		if (r+''!='undefined'){
		   result = r;
		}
  	}
	return result;
}

/******************************************************************************
Drag and Drop Funktionen
******************************************************************************/
DhtmlObject.prototype.startDragDrop = function(optionalObjectToMove){
	this.moveListener = this.moveListener ? this.moveListener : new Listener('mousemove', function(eventTrigger){
			eventTrigger.dhtmlCurrentTarget.moveTo(eventTrigger.pageX - eventTrigger.dhtmlCurrentTarget.deltaX,eventTrigger.pageY - eventTrigger.dhtmlCurrentTarget.deltaY);
		});
	this.downListener = this.downListener ? this.downListener : new Listener('mousedown',function(eventTrigger){
			//alert(eventTrigger.dhtmlCurrentTarget.moveObject.element.id);
			eventTrigger.dhtmlCurrentTarget.deltaX = eventTrigger.currentTargetDeltaX;
			eventTrigger.dhtmlCurrentTarget.deltaY = eventTrigger.currentTargetDeltaY;
			eventTrigger.dhtmlCurrentTarget.addListener(eventTrigger.dhtmlCurrentTarget.moveListener);
		});
	this.upListener = this.upListener ? this.upListener : new Listener('mouseup',function(eventTrigger){
			eventTrigger.dhtmlCurrentTarget.removeListener(eventTrigger.dhtmlCurrentTarget.moveListener);
		});
	this.addListener(this.downListener);
	this.addListener(this.upListener);
}
/******************************************************************************
Funktionen zur Steuerung der CSS Eigenschaften (need measures)
******************************************************************************/
//Moving object to*************************************************************
DhtmlObject.prototype.moveTo = function(x,y){
	this.css.left=x+cleverEnvironment().unit; this.css.top=y+cleverEnvironment().unit;
}
//Show object******************************************************************
DhtmlObject.prototype.show = function(){
	this.css.visibility = "visible";
}
//Hide object******************************************************************
DhtmlObject.prototype.hide = function(){
	this.css.visibility = "hidden";
}
//Display object******************************************************************
DhtmlObject.prototype.display = function(){
	var sp = this.element.tagName.toLowerCase() == 'tr' ? cleverEnvironment().client.ie ? "inline" : "table-row" : "block";
	this.css.display = sp;
}
//Don't display object************************************************************
DhtmlObject.prototype.fold = function(){
	this.css.display = "none";
}
//TODO: diplay properties (take care of tr, td, etc... and their ie probs.)
//Resize Object to width,height (set width and height of object)
DhtmlObject.prototype.resizeTo = function(w,h){
	this.css.width=w+cleverEnvironment().unit;
	this.css.height=h+cleverEnvironment().unit;
}
//Clip and ClipAnimation
DhtmlObject.prototype.clipAnimation = function(shape,cT,sT,fT,cR,sR,fR,cB,sB,fB,cL,sL,fL,speed){
	//alert(shape+" "+cT+" "+sT+" "+fT+" "+cR+" "+sR+" "+fR+" "+cB+" "+sB+" "+fB+" "+cL+" "+sL+" "+fL+" "+speed);
	if (arguments.length == 14){
		var t=cT + sT > fT ? cT - sT : fT;
		var r=cR + sR < fR ? cR + sR : fR;
		var b=cB + sB < fB ? cB + sB : fB;
		var l=cL + sL > fL ? cL - sL : fL;
		this.clipTo(shape,t,r,b,l);
		if (t>fT || r<fR || b<fB || l>fL){
			setTimeout(this.obj+".clipAnimation('"+shape+"',"+t+","+sT+","+fT+","+r+","+sR+","+fR+","+b+","+sB+","+fB+","+l+","+sL+","+fL+","+speed+")",speed);			
		}
	}
}
DhtmlObject.prototype.clipTo = function(shape,t,r,b,l){
	var u = cleverEnvironment().unit;
	this.css.clip = shape+"("+t+u+" "+r+u+" "+b+u+" "+l+u+")";
}
//Write JS conform string to object *******************************************
DhtmlObject.prototype.writeTo = function(contentString,startHTML,endHTML){
    if (this.element.tagName.toLowerCase()=='input'
	   || this.element.tagName.toLowerCase()=='textarea') {
	   this.element.value = contentString;
	} else {
	  if (cleverEnvironment().client.ns4){
	  	  if(!startHTML){
	   	   		startHTML="";
		   		endHTML=""
	   	  }
	   	  this.ref.open("text/html"); 
	   	  this.ref.write(startHTML+text+endHTML); 
	   	  this.ref.close()
	   } else {
	   	 this.element.innerHTML = contentString;
	   }
	}
}
//Read JS conform string from Object *******************************************
DhtmlObject.prototype.readFrom = function(){
    if (this.element.tagName.toLowerCase()=='input'
	   || this.element.tagName.toLowerCase()=='textarea') {
	   return this.element.value;
	} else {
	  if (cleverEnvironment().client.ns4){
	  	  this.ref.open("text/html"); 
	   	  var innerHTML = this.ref.read(); //works? 
	   	  this.ref.close()
		  return innerHTML;
	   } else {
	   	 return this.element.innerHTML;
	   }
	}
}
/*******************************************************************************
Public Class Listener
	   create a Listener Object that can be used for
	   -	DhtmlObject.addListener
   	   -	DhtmlObject.removeListener
*******************************************************************************/
//Construct the Object *********************************************************
function Listener(eventType,eventHandler){
	this.id = cleverEnvironment().uniqueId();
	this.toString = function(){return "Listener exists: "+this.id;}
	this.type = eventType;
	this.handler = eventHandler;
	return this;
}
/*******************************************************************************
Public Class EventTrigger
		create a EventTrigger Object (will synchronize Event
		properties and several new)
*******************************************************************************/
//Construct the Object *********************************************************
function EventTrigger(event,targetNode){
	this.event = event;
	targetNode = targetNode ? targetNode : null;
	this.type = event.type;
	this.statement = "\nnew EventTrigger("+this.event+","+targetNode+")";
	
	this.currentTarget = targetNode != null ? targetNode : event.currentTarget ? event.currentTarget : null;
	if (this.currentTarget != null){
		if (this.currentTarget.nodeType == 3){ // defeat Safari bug
			this.currentTarget = this.currentTarget.parentNode;
		} //safari bug. also responsiblefor wrong calculation in prices?*/
		this.currentTarget.id = this.currentTarget.id ? this.currentTarget.id : cleverEnvironment().uniqueId();
		this.dhtmlCurrentTarget = cleverEnvironment().dhtmlObject(this.currentTarget.id);
	} else {
		this.statement+="\n\t-\tcurrentTarget: "+this.currentTarget;
	}
	this.target = event.target ? event.target : event.srcElement ? event.srcElement : null;
	if (this.target != null){
		if (this.target.nodeType == 3){ // defeat Safari bug
			this.target = this.target.parentNode;
		}
		/*The last 3 lines of code are especially for Safari. If an event takes place on an element that contains text,
		this text node, and not the element, becomes the target of the event. Therefore we check if the target's nodeType is 3,
		a text node. If it is we move to its parent node, the HTML element.*/
		this.target.id = this.target.id ? this.target.id : cleverEnvironment().uniqueId();
		this.dhtmlTarget = cleverEnvironment().dhtmlObject(this.target.id);
	} else {
		this.statement+="\n\t-\ttarget: "+this.target;
	}
	//gettngthe client positionof the event ???andere browser???
	this.clientX = event.clientX;
	this.clientY = event.clientY;
		this.statement+="\n\t-\tMouse Position Client x/y "+this.clientX+"/"+this.clientY;
	//getting the page position of the event
	var scrollX = cleverEnvironment().body.fSX();
	var scrollY = cleverEnvironment().body.fSY();
	this.pageX = cleverEnvironment().client.ns4 || cleverEnvironment().client.ns6 ? event.pageX : this.clientX + scrollX;
	this.pageY = cleverEnvironment().client.ns4 || cleverEnvironment().client.ns6 ? event.pageY : this.clientY + scrollY;
		this.statement+="\n\t-\tMouse Position Page x/y "+this.pageX+"/"+this.pageY;
	
	if (this.currentTarget != null && this.dhtmlCurrentTarget.element != null){
		this.currentTargetDeltaX =  this.pageX - this.dhtmlCurrentTarget.fX();
		this.currentTargetDeltaY = this.pageY - this.dhtmlCurrentTarget.fY();
			this.statement+="\n\t-\tcurrent target's delta: x/y "+this.currentTargetDeltaX+"/"+this.currentTargetDeltaY;
	}	
	if (this.target != null && this.dhtmlCurrentTarget.element != null){	
		this.targetDeltaX = this.target ? this.pageX - this.dhtmlTarget.fX() : this.currentTargetDeltaX;
		this.targetDeltaY = this.target ? this.pageY - this.dhtmlTarget.fY() : this.currentTargetDeltaY;
			this.statement+="\n\t-\ttarget's delta: x/y "+this.targetDeltaX+"/"+this.targetDeltaY;
	}	
	this.toString = function(){return this.statement;}
	//alert(this.toString());
	cleverEnvironment().currentEvent = this;
	return this;
}

/*******************************************************************************
Public Class DhtmlObjectsByName
	   create an object by element names that holds an arry of DhtmlObjects
*******************************************************************************/
//Construct the Object *********************************************************
function DhtmlObjectsByName(name,nest){
	nest = (!nest) ? "" : 'document.'+nest+'.';
	var thisElements = cleverEnvironment().client.dom ? document.getElementsByName(name) :
		cleverEnvironment().client.ie4 ? document.all[name] :
		cleverEnvironment().client.ns4 ?  eval(nest+"document.layers." +name) : //This may probably not work, check syntax for old NS
		false;
	if (!thisElements) {
		return cleverEnvironment().appendStatement("Can't find Name ("+name+")\n Using Netscape: Tag nesting may be wrong.");
	}
	//filter IE Bug: IE & Opera will also find elements which have ID with +name+.
	//only return elements with attribute name = +name+
	this.elements = new Array();
	var count = 0;
	for (var i=0;i<thisElements.length;i++){
		if (thisElements[i].name == name){
			if (!thisElements[i].id) {thisElements[i].id = cleverEnvironment().uniqueId();}
			this.elements[count] = cleverEnvironment().dhtmlObject(thisElements[i].id); //This cannot handle nesting at the time writing.
			count++;
		}
	}
	return this.elements;
}

/*******************************************************************************
Public Class DhtmlObjectsByIdSequence
	   create an object by element id that holds an arry of DhtmlObjects with 
	   id+rNo
*******************************************************************************/
//Construct the Object *********************************************************
function DhtmlObjectsByIdSequence(id){
	this.elements = new Array();
    //old behaviour (no module support)
    for (var i=0;i<100;i++){
		var o = cleverEnvironment().dhtmlObject(id+i+"");
		if (o.element){
			this.elements[this.elements.length] = o;
		}	
	}
	//new behaviour (module support)
    for (var m=0;m<10;m++){
        for (var i=0;i<100;i++){
		    var o = cleverEnvironment().dhtmlObject(id + "_" + m + "_" + i);
		    if (o.element){
			    this.elements[this.elements.length] = o;
		    }	
	    }   
    }
	
	/*var getSeqElement = function(seq,id,nest){
		var obj = cleverEnvironment().dhtmlObject(id+seq,nest);
		return obj.element ? obj : null;
	}	
	this.elements = new Array();
	var seq = 0;
	var element = getSeqElement(seq,id,nest); 
	while (element != null){
		this.elements[this.elements.length] = element;
		seq = seq+1;
		element = getSeqElement(seq,id,nest)
	}*/
	
	if (this.elements.length == 0){
		return cleverEnvironment().appendStatement("Can't find Id Sequence ("+id+")\n Using Netscape: Tag nesting may be wrong.");		
	} else {
		return this.elements;
	}
}
/*******************************************************************************
Public DomLoad (load javascript when dom is loaded, not after biniaries)
*******************************************************************************/
var DomLoaded =
{
	onload: [],
	loaded: function()
	{
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		for (i = 0;i < DomLoaded.onload.length;i++) DomLoaded.onload[i]();
	},
	load: function(fireThis)
	{
		this.onload.push(fireThis);
		if (document.addEventListener) 
			document.addEventListener("DOMContentLoaded", DomLoaded.loaded, null);
		if (/KHTML|WebKit/i.test(navigator.userAgent))
		{ 
			var _timer = setInterval(function()
			{
				if (/loaded|complete/.test(document.readyState))
				{
					clearInterval(_timer);
					delete _timer;
					DomLoaded.loaded();
				}
			}, 10);
		}
		/*@cc_on @*/
		/*@if (@_win32)
		var proto = "src='javascript:void(0)'";
		if (location.protocol == "https:") proto = "src=//0";
		document.write("<scr"+"ipt id=__ie_onload defer " + proto + "><\/scr"+"ipt>");
		var script = document.getElementById("__ie_onload");
		script.onreadystatechange = function() {
		    if (this.readyState == "complete") {
		        DomLoaded.loaded();
		    }
		};
		/*@end @*/
	    window.onload = DomLoaded.loaded;
	}
};
//Check for client's onload and add it to wondow.onload handlers
if (window.onload != null){
    DomLoaded.load(window.onload);
}
/*******************************************************************************
Public Class ImagePreloader
	   for preloading images for IE so that images are cached and only have
	   one request to the server
	   o   images: 	  an array of image urls to be preloaded
	   o   callback:  the function tobe raisedafter images are loaded
*******************************************************************************/
function ImagePreloader(images,callback){
	// store the callback
	this.callback = callback;
	// initialize internal state.
	this.nLoaded = 0;
	this.nProcessed = 0;
	this.aImages = new Array;
	// record the number of images.
	this.nImages = images.length;
	// for each image, call preload()
	for (var i=0;i<images.length;i++){ 
		this.preload(images[i]);
	}	
}
ImagePreloader.prototype.preload = function(image){
	// create new Image object and add to array
	var oImage = new Image;
	//this.aImages.push(oImage);
	this.aImages[this.aImages.length] = oImage;
	// set up event handlers for the Image object
	oImage.onload = ImagePreloader.prototype.onload;
	oImage.onerror = ImagePreloader.prototype.onerror;
	oImage.onabort = ImagePreloader.prototype.onabort;
	// assign pointer back to this.
	oImage.oImagePreloader = this;
	oImage.bLoaded = false;
	oImage.source = image;
	// assign the .src property of the Image object
	oImage.src = image;
}
ImagePreloader.prototype.onComplete = function(){
	this.nProcessed++;
	if (this.nProcessed == this.nImages){
		this.callback(this.aImages);
	}
}
ImagePreloader.prototype.onload = function(){
	this.bLoaded = true;
	this.oImagePreloader.nLoaded++;
	this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onerror = function(){
	this.bError = true;
	this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onabort = function(){
	this.bAbort = true;
	this.oImagePreloader.onComplete();
}

//Utils (adapt new library, but still fefer to old objects)
/*******************************************************************************
public static Utils
********************************************************************************/
var Utils = {
    /*******************************************************************************
    public static Utils.Debug
    ********************************************************************************/
    Debug: {
        _string: "",
        Append: function(string){this._string += string + "\n"; return this._string;},
        Get: function(){return this._string;},
        Throw : function(){alert(this._string);},
        Clear: function(){this._string = "";}
    },
    /*******************************************************************************
    public static Utils.UniqueID
    ********************************************************************************/
    UniqueID: {
        _current: 0,
        Get: function(){this._current++; return "UtilsGenerated" + this._current;}
    },
    /*******************************************************************************
    public static Utils.EventBinding
    ********************************************************************************/
    EventBinding: {
        ArrayOfListenerType: new Array("click","dblclick","mouseover","mouseout","change","focus","blur","mouseup","mousedown","submit"),
        Transform: function(handlerString){ //transform the xslt given String to functions
            var newF = "";
	        var functions = handlerString.split(";");
	        for (var a=0;a<functions.length;a++){
		        if (functions[a].length > 0){
			        var con = false;
			        /*  we can now check, if the function should only happen on a specific value of the src element, and build a condition.
			            Praise, we have the EventTrigger here! This can be extended for index, etc. We must ensure, that more than one value is possible.*/
			        if (functions[a].indexOf("onvalue[") > -1){
			            functions[a] = functions[a].replace("onvalue[", "if(trigger.dhtmlCurrentTarget && trigger.dhtmlCurrentTarget.element && trigger.dhtmlCurrentTarget.element.value && trigger.dhtmlCurrentTarget.element.value=='");
			            functions[a] = functions[a].replace("]=", "'){");
			            con = true;
			        }
			        functions[a] = functions[a].replace(/,/g,"','");
			        functions[a] = functions[a].replace("[", "(trigger,'");
			        functions[a] = functions[a].replace("trigger,']", "trigger]");
			        functions[a] = functions[a].replace("]","');");
			        functions[a] = functions[a].replace("trigger')", "trigger)");
			        if(con){
			            functions[a]+= "}"; //close the condition block, if there was one
			            con = false;
			        }
		        }
		        newF+= functions[a];
		    }
	        var f = new Function("trigger",""+newF+"");
	        return f;
        },
        Bind: function(handlerString, element){ //Binding only, no execute
            element.id = element.id ? element.id : Utils.UniqueID.Get();
            for (var i=0; i < thisAarrayOfListenerType.length; i++){
                if(element["on" + thisAarrayOfListenerType[i]]){
		            var f = this.Transform(handlerString);//old code of main TransformInlineEvent(handlerString);
		            element["on" + this.ArrayOfListenerType[i]] = "";
		            cleverEnvironment().dhtmlObject(element.id).addListener(new Listener(this.ArrayOfListenerType[i],f));
		        }
            }
        },
        ExecutiveBind: function(handlerString, element, event){ //Binding only, no execute
            if (!event){ //IE Event Model
                event = window.event;
            }
            element.id = element.id ? element.id : Utils.UniqueID.Get();
            for (var i=0; i < this.ArrayOfListenerType.length; i++){
                if(element["on" + this.ArrayOfListenerType[i]]){
		            var f = this.Transform(handlerString);
		            f(new EventTrigger(event,element));
		            element["on" + this.ArrayOfListenerType[i]] = "";
		            cleverEnvironment().dhtmlObject(element.id).addListener(new Listener(this.ArrayOfListenerType[i],f));
		        }
            }
        }
    },    
    /*******************************************************************************
    public static Utils.Nodes
    ********************************************************************************/
    Nodes: {
        Clear: function(node){
            while (node.childNodes.length >= 1){
                node.removeChild(node.firstChild);       
            }
        },
        GetFirstChildNode: function(node){
            for (var i = 0; i <= node.childNodes.length; i++){
                if (node.childNodes[i].nodeType == 1){
                    return node.childNodes[i];
                }
            }
        },
        CloneText: function(nodeTo,nodeFrom){
            var content = nodeFrom.value ? nodeFrom.value
                : nodeFrom.firstChild ? nodeFrom.firstChild.data
                : null;
            if (nodeTo.value){
                nodeTo.value = content;
            } else if (nodeTo.firstChild){
                nodeTo.firstChild.data = content;
            } else {
                nodeTo.appendChild(document.createTextNode(content));
            }
        },
        CloneEvents: function(nodeTo, nodeFrom){
            nodeTo.id = nodeTo.id ? nodeTo.id : Utils.UniqueID.Get();
            for(var i = 0; i < Utils.EventBinding.ArrayOfListenerType.length; i++){
                if (nodeFrom.getAttribute("on" + Utils.EventBinding.ArrayOfListenerType[i]) != null){
                    var f = nodeFrom.getAttribute("on" + Utils.EventBinding.ArrayOfListenerType[i]);
                    nodeTo["on" + Utils.EventBinding.ArrayOfListenerType[i]] = new Function("event",""+f+"");
                }
            }
            /*if (nodeTo.type && nodeTo.type == "submit"){ //add function that adds flag to remember id this button was pressed. TODO: but take care of before existing onclick!
                cleverEnvironment().dhtmlObject(nodeTo.id).addListener(new Listener("click", function(trigger){
                    trigger.dhtmlCurrentTarget.clicked = true;
                }));
            }*/
        },
        CloneDescendant: function(nodeTo,nodeFrom){
            for (var i=0;i<nodeFrom.childNodes.length;i++){
		        switch (nodeFrom.childNodes[i].nodeType){
                    case 1:
				        try {
					        var meClone = nodeFrom.childNodes[i].cloneNode(false);
					        var meNode = document.createElement(meClone.nodeName);
					        /*  Before appending!   */
					         if (meClone.getAttribute('type') != null){
						        if (meClone.getAttribute('type') == "radio" && cleverEnvironment().client.ie){
						            var checked = meClone.getAttribute('checked') != null ? " checked = \""+meClone.getAttribute('checked')+"\"" : ""; 
						            /*if ((meClone.getAttribute('name') && newFormNames[meClone.getAttribute('name')]) || !meClone.getAttribute('name')){
							            meNode = document.createElement('<input type="radio" name="'+Utils.UniqueID.Get()+'"'+checked+'"/>');
						            } else {
							            meNode = document.createElement('<input type="radio" name="'+meClone.getAttribute('name')+'"'+checked+'" />');
						            }*/	
					            }
					        }
					        if (meClone.getAttribute('type') != null){
						        meNode.type = meClone.getAttribute('type');
					        }
					        if (meClone.nodeName.toLowerCase() == "form"){ //name important for form, otherwise not
						        if (!meClone.getAttribute('name')){
							        meNode.name = Utils.UniqueID.Get();
						        } else {
							        meNode.name = meClone.getAttribute('name');
						        }	
						        if (meClone.getAttribute('method')){
							        meNode.method = meClone.getAttribute('method');
						        }
						    }
					        if (meClone.getAttribute('id') != null){
						        meNode.id = meClone.getAttribute('id');
					        }
					        else if (meClone.getAttribute('name')){
						        meNode.name = meClone.getAttribute('name');
					        }
					        nodeTo.appendChild(meNode);
					       /*   after appending!    */
					        if (meClone.getAttribute('checked') != null){
						        meNode.checked = meClone.getAttribute('checked');
					        }
					        if (meClone.getAttribute('selected') != null){
						        meNode.selected = meClone.getAttribute('selected');
					        }
					        if (meClone.getAttribute('class') != null){
						        meNode.className = meClone.getAttribute('class');
					        }
					        if (meClone.getAttribute('style') != null){
						        //Hier muss noch camelcasing rein für xxx-yyy css properties!
						        var properties = meClone.getAttribute('style').split(";")
						        for (var s = 0; s < properties.length; s++){
						            if (properties[s].match(/[A-Z]/i) != null){
						                var dlmt = properties[s].indexOf(":");
						                var property = properties[s].substring(0,dlmt).replace(/ /g, "");
						                var value = properties[s].substring(dlmt + 1, properties[s].length);
						                while (value.indexOf(" ") == 0){
						                    value = value.substring(1, value.length);
						                }
						                var prts = property.split("-");
						                property = prts[0];
						                for (var p = 1; p < prts.length; p++){
						                    property += prts[p].substring(0,1).toUpperCase() + prts[p].substring(1);
						                }
						                try {
						                    //alert("good|" + property + "|" + value + "|");
						                    if (property == "float"){
						                        meNode.style.cssFloat = value;
						                        meNode.style.styleFloat = value;
						                    } else {
						                        meNode.style[property] = value;
						                    }
						                } catch(e){
						                    //alert("bad|" + property + "|" + value + "|")
						                }
						            }
						        }
					        }
					        if (meClone.getAttribute('value') != null){
						        meNode.value = meClone.getAttribute('value');
					        } else {
						        meNode.value = "";
					        }
                            if (meClone.getAttribute('colspan') != null){
						        meNode.colSpan = meClone.getAttribute('colspan');
					        }
					        if (meClone.getAttribute('src') != null){
						        meNode.src = meClone.getAttribute('src');
					        }
					        if (meClone.getAttribute('width') != null){
						        meNode.width = meClone.getAttribute('width');
					        }
					        if (meClone.getAttribute('height') != null){
						        meNode.height = meClone.getAttribute('height');
					        }
					        if (meClone.getAttribute('alt') != null){
						        meNode.alt = meClone.getAttribute('alt');
					        }
					        if (meClone.getAttribute('title') != null){
						        meNode.title = meClone.getAttribute('title');
					        }
					        if (meClone.getAttribute('href') != null){
						        meNode.href = meClone.getAttribute('href');
					        }
					        
					        this.CloneEvents(meNode, meClone);
					        
					        if (meNode.nodeName.toLowerCase() == "textarea"){
						        meNode.value = nodeFrom.childNodes[i].childNodes[0].nodeValue;
					        }
					        if (cleverEnvironment().client.ie &&
						        nodeFrom.childNodes[i].nodeName.toLowerCase() == "table" &&
						        nodeFrom.childNodes[i].childNodes[0].nodeName.toLowerCase() != "tbody"){
						        var mnt = document.createElement("tbody");
						        meNode.appendChild(mnt)
						        meNode = mnt;
					        }
					        this.CloneDescendant(meNode,nodeFrom.childNodes[i]);
				        } catch(e){
					        alert(e.message);
				        }
				        break;
			        case 3:
				        if (nodeFrom.childNodes[i].nodeValue != null){
					        if (nodeFrom.nodeName.toLowerCase() != "textarea"){
						        var meTextNode = document.createTextNode(nodeFrom.childNodes[i].nodeValue);
						        nodeTo.appendChild(meTextNode);
						        this.CloneDescendant(meTextNode,nodeFrom.childNodes[i]);
					        }
				        }	
				        break;
			        case 4:	
				        nodeTo.innerHTML = nodeTo.innerHTML + nodeFrom.childNodes[i].nodeValue;
				        this.CloneDescendant(nodeTo,nodeFrom.childNodes[i]);
				        break;
			        /*case 8:
				        nodeTo.innerHTML = "<!-- "+nodeFrom.childNodes[i].nodeValue+" //-->";
				        break;*/
		        }	        	            
	        }		
        }
    }
}

/******************************************************************************

			cleverbridge Form Handling Libary
			(c) Uwe Linsenboll for cleverbridge May 2005
			
			requires JavaScript 1.2
			requires cleverbridge Environments
			requires cleverbridge Ajax
								 		
							<script>

TODO: formJumpers an window Objekt h?ngen (wie popup eventdisplay)
TODO: display event ?ber remove attribute 'style' und add attribute? um inline oder block oder table-row, etc. zu erhalten...
TODO:form init perfomanter (doppelte schleife zusammenfassen), get rid of global vars
******************************************************************************/
//INITIALIZER
function cleverForm(){
	if (cleverEnvironment().loaded.cleverForm){
		return cleverEnvironment();
	} else {
		var tm = new Date().valueOf();
		cleverEnvironment().appendStatement("Loading instance of cleverForm...");
		cleverEnvironment().loaded.cleverForm = true;
		try {
			cleverEnvironment().storage.dhtmlFormByName = new Object();
			cleverEnvironment().dhtmlFormByName = function(name){
				if(!cleverEnvironment().storage.dhtmlFormByName[name]){
					cleverEnvironment().storage.dhtmlFormByName[name] = new DhtmlForm(name);
					if(cleverEnvironment().storage.dhtmlFormByName[name].element){ 
						cleverEnvironment().storage.dhtmlFormByName[name].setListeners();
					}	
				} 
				return cleverEnvironment().storage.dhtmlFormByName[name];
			}
			cleverEnvironment().removeDhtmlFormByName = function(name){
				if(cleverEnvironment().storage.dhtmlFormByName[name]){delete cleverEnvironment().storage.dhtmlFormByName[name];}
			}
			var f = cleverEnvironment().dhtmlFormByName("cleverForm");
			var p = cleverEnvironment().dhtmlFormByName("cleverFormPriceScale");
		} catch(e){cleverEnvironment().appendStatement(e.message);}
		cleverEnvironment().appendStatement("Loading cleverForm done.");
		cleverEnvironment().time.cleverForm = new Date().valueOf() - tm;
		return cleverEnvironment();
	}
	
}


function formEventFocus(trigger){
	if(trigger.currentTarget.options && cleverForm().client.ie){
		var o = trigger.currentTarget.options;
		o[o.selectedIndex].className="focused";
	} else {
		trigger.dhtmlCurrentTarget.classNameRestore = trigger.currentTarget.className;
		trigger.currentTarget.className = trigger.currentTarget.className+" focused";
	}
}
function formEventBlur(trigger){
	if(trigger.currentTarget.options && cleverForm().client.ie){
		var o = trigger.currentTarget.options;
		o[o.selectedIndex].className="";
	} else {
		trigger.currentTarget.className = trigger.dhtmlCurrentTarget.classNameRestore;
	}
}
function formEventKeySubmit(trigger){
	if(trigger.event.keyCode==13){
		if (!cleverForm().dhtmlObject('cleverFormEventSubmit').element){
			var el = document.createElement("input");
			el.type = "hidden";
			el.id = "cleverFormEventSubmit";
			trigger.currentTarget.parentNode.appendChild(el);
			cleverForm().dhtmlObject('cleverFormEventSubmit').element = el;
		}
		var whose = cleverForm().dhtmlObject('cleverFormEventSubmit').element;
		whose.name = "eventSubmit";
		if (trigger.dhtmlCurrentTarget.element.name == "displayCurrencyId"){
			whose.value = "buttonupdategc"	
		} else if (trigger.dhtmlCurrentTarget.element.name == "language"){
			whose.value = "buttonupdategl"	
		} else {
			whose.value = cleverForm().dhtmlObject(trigger.dhtmlCurrentTarget.submitId).element ? cleverForm().dhtmlObject(trigger.dhtmlCurrentTarget.submitId).element.name : trigger.currentTarget.name;
		}
		//trigger.currentTarget.parentNode.appendChild(whose);
		//alert(whose.value);
	}
}
function formEventMouseSubmit(trigger){
	var updateOnly = false;
	if (arguments.length == 2 && arguments[1] == true){
	    updateOnly = true;
	}
	if (!cleverForm().dhtmlObject('cleverFormEventSubmit').element){
			var el = document.createElement("input");
			el.type = "hidden";
			el.id = "cleverFormEventSubmit";
			trigger.currentTarget.parentNode.appendChild(el);
			cleverForm().dhtmlObject('cleverFormEventSubmit').element = el;
		}
	var whose = cleverForm().dhtmlObject('cleverFormEventSubmit').element;
	whose.name = "eventSubmit";
	if (trigger.dhtmlCurrentTarget.element.name == "displayCurrencyId"){
		whose.value = "buttonupdategc"	
	} else if (trigger.dhtmlCurrentTarget.element.name == "language"){
		whose.value = "buttonupdategl"	
	} else if (updateOnly
	    || trigger.dhtmlCurrentTarget.element.name == "deliveryCountryId"
        || trigger.dhtmlCurrentTarget.element.id.indexOf("listener_quantity_up") > -1
        || trigger.dhtmlCurrentTarget.element.id.indexOf("listener_quantity_down") > -1){
		whose.value = "buttonupdate"	
	} else {
		whose.value = cleverForm().dhtmlObject(trigger.dhtmlCurrentTarget.submitId).element ? cleverForm().dhtmlObject(trigger.dhtmlCurrentTarget.submitId).element.name : trigger.currentTarget.name;
	}
	//trigger.currentTarget.parentNode.appendChild(whose);
	//alert(whose.value);
}


function DhtmlForm(formName){
	var searchForm = function(formName){
		for (var i=0;i<document.forms.length;i++){
			if (document.forms[i].name && document.forms[i].name == formName){
				return document.forms[i];
			}
		}
		return null;
	}
	this.element = eval("document."+formName) ? eval("document."+formName) : searchForm(formName);
	this.name = formName;
	if (this.element){
		this.element.id = this.element.id ? this.element.id : cleverForm().uniqueId();
		this.explore();
		cleverEnvironment().appendStatement("DhtmlForm "+this.element.name+" created.");
		return this;
	} else {
		cleverForm().appendStatement("DhtmlForm("+formName+") document."+formName+" does not exist");
		return null;
	}

}

DhtmlForm.prototype.explore = function(){
	this.elements = new Object();
	this.dhtmlObjects = new Object();
	this.dhtmlRadioObjects = new Object();
	var fe = this.element.elements;
	var submitIndex = 0;
	for (var i=0;i<fe.length;i++){
		var t = fe[i].type ? fe[i].type.toLowerCase() : fe[i].tagName.toLowerCase() == "textarea" ? "textarea" : null;
		if (t != null){ // &! (t == "hidden && fe[i].type
			if(t=="submit"){
				fe[i].id = fe[i].id ? fe[i].id : cleverForm().uniqueId();
				submitIndex++;
			} else {
				fe[i].submitIndex = submitIndex;
			}	
			//wenn radio, sortiere nach 'radiogroup'
			if (t=="radio" && fe[i].name != null){
				this.radiogroup = this.radiogroup ? this.radiogroup : new Object();
				this.radiogroup[fe[i].name] = this.radiogroup[fe[i].name] ? this.radiogroup[fe[i].name] : new Array();
				this.radiogroup[fe[i].name][this.radiogroup[fe[i].name].length] = fe[i];
			}
			this.elements[t] = this.elements[t] ? this.elements[t] : new Array();
			this.elements[t][this.elements[t].length] = fe[i];				
		}
	}
}
DhtmlForm.prototype.elementsByType = function(type){
	return this.elements[type] ? this.elements[type] : [];
}
DhtmlForm.prototype.dhtmlRadioGroupByName = function(name){
	if(this.dhtmlRadioObjects[name]){
		return this.dhtmlRadioObjects[name];
	}
	var rg = this.radiogroup[name] ? this.radiogroup[name] : [];
	this.dhtmlRadioObjects[name] = new Array();
	for (var i=0;i<rg.length;i++){
		rg[i].id = rg[i].id ? rg[i].id : cleverForm().uniqueId();
		var fo = cleverForm().dhtmlObject(rg[i].id);
		if (fo.element.submitIndex >= 0){
			if (fo.element.submitIndex == 0 &! this.elementsByType("submit")[0]){
				fo.submitId = null;
			} else { //TODO: das submitbutton zuweisen muss neu gemacht werden! (das hier ist nur ein hack, damit es funktioniert, wenn es kein element mehr nach dem letzen button gibt. NOGO! UNSICHER!
				fo.submitId = this.elementsByType("submit")[rg[i].submitIndex] ? this.elementsByType("submit")[rg[i].submitIndex].id : this.elementsByType("submit")[rg[i].submitIndex -1].id;
			}
		}
		this.dhtmlRadioObjects[name][this.dhtmlRadioObjects[name].length] = fo;
	}
	return this.dhtmlRadioObjects[name];
}
DhtmlForm.prototype.dhtmlObjectsByType = function(type){
	if(this.dhtmlObjects[type]){
		return this.dhtmlObjects[type];
	}
	var fe = this.elementsByType(type);
	this.dhtmlObjects[type] = new Array();
	for (var i=0;i<fe.length;i++){
		fe[i].id = fe[i].id ? fe[i].id : cleverForm().uniqueId();
		var fo = cleverForm().dhtmlObject(fe[i].id);
		if (fo.element.submitIndex >= 0){
			if (fo.element.submitIndex == 0 &! this.elementsByType("submit")[0]){
				fo.submitId = null;
			} else { //TODO: das submitbutton zuweisen muss neu gemacht werden! (das hier ist nur ein hack, damit es funktioniert, wenn es kein element mehr nach dem letzen button gibt.
                fo.submitId = this.elementsByType("submit")[fe[i].submitIndex] ? this.elementsByType("submit")[fe[i].submitIndex].id : this.elementsByType("submit")[fe[i].submitIndex - 1].id;
			}
		} 
		this.dhtmlObjects[type][this.dhtmlObjects[type].length] = fo;
	}
	return this.dhtmlObjects[type];
}
DhtmlForm.prototype.setListeners = function(){
	var selectOne = this.dhtmlObjectsByType('select-one');
	for (var i=0;i<selectOne.length;i++){
		if(cleverForm().client.ie){
			var o = selectOne[i].element.options;
			for(var n=0;n<o.length;n++){
				o[n].className="focused";
			}
			o[o.selectedIndex].className="";
		}
		bindXslFunction(selectOne[i]);
		//selectOne[i].addListener(new Listener('keypress',formEventKeySubmit));
		selectOne[i].addListener(new Listener('blur',formEventBlur));
		selectOne[i].addListener(new Listener('focus',formEventFocus));
	}
	var text = this.dhtmlObjectsByType('text');
	for (var i=0;i<text.length;i++){
		text[i].addListener(new Listener('keypress',formEventKeySubmit));
		text[i].addListener(new Listener('blur',formEventBlur));
		text[i].addListener(new Listener('focus',formEventFocus));
	}
	var password = this.dhtmlObjectsByType('password');
	for (var i=0;i<password.length;i++){
		password[i].addListener(new Listener('keypress',formEventKeySubmit));
		password[i].addListener(new Listener('blur',formEventBlur));
		password[i].addListener(new Listener('focus',formEventFocus));
	}
	var checkbox = this.dhtmlObjectsByType('checkbox');
	for (var i=0;i<checkbox.length;i++){
		bindXslFunction(checkbox[i]);
		checkbox[i].addListener(new Listener('keypress',formEventKeySubmit));
	}
	var radio = this.dhtmlObjectsByType('radio');
	for (var i=0;i<radio.length;i++){
		bindXslFunction(radio[i]);
		radio[i].addListener(new Listener('keypress',formEventKeySubmit));
	}
	var butto = this.dhtmlObjectsByType('button');
	for (var i=0;i<butto.length;i++){
		bindXslFunction(butto[i]);
		butto[i].addListener(new Listener('keypress',formEventKeySubmit));
	}
	var submit = this.dhtmlObjectsByType('submit');
	for (var i=0;i<submit.length;i++){
		submit[i].dhtmlForm = this;
		bindXslFunction(submit[i]);
		submit[i].addListener(new Listener('keypress',formEventKeySubmit));
	}
}

//Form Errors Jumpersetting*****************************************************
function stay(obj) {
	//obj.href='javascript:;';
	//obj.target='_self';
	return;
}




	/******************************************************************************

			cleverbridge Ajax Handling Libary
			(c) Uwe Linsenboll for cleverbridge January 2006
				Rev.: Mar 2006
			requires JavaScript 1.2
			requires cleverbridge Environment
			requires cleverbridge LanguageElement Array.

							<script>	   			 		  	  						
******************************************************************************/
//initializer

function cleverAjax(){
	if (cleverEnvironment().loaded.cleverAjax){
		return cleverEnvironment();
	} else {
		var tm = new Date().valueOf();
		cleverEnvironment().appendStatement("Loading cleverAjax...");
		cleverEnvironment().loaded.cleverAjax = true;
		cleverAjaxInit();
		cleverEnvironment().appendStatement("Loading cleverAjax done.");
		cleverEnvironment().time.cleverAjax = new Date().valueOf() - tm;
		return cleverEnvironment();
	}
	
}

function cleverAjaxInit(){
	try {
		cleverAjax().popObject = new EventContainer('cleverEventContainer');
		cleverAjax().popObject.moveTo(0,0);		
		cleverAjax().popObject.hide();
		cleverAjax().loadscreenObject = new EventContainer("cleverLoadScreen");
		cleverAjax().loadscreenObject.moveTo(0,0);		
		cleverAjax().loadscreenObject.hide();
		//preload all images out of the languageElement array.
		//This is deprecated when we handle popups via an ajax call at initializing.
		//We will then preload all imag tags out of the XML source.
		/*if (window.lang){
		   var string = "";
		   for (var id in window.lang) {
		   	   string+= window.lang[id];
		   }
		   var obj = document.createElement('div');
		   obj.innerHTML = string;
		   var theImages = obj.getElementsByTagName('img');
		   var imgs = new Array();
		   for (var i=0;i<theImages.length;i++){
		   	   imgs[i] = theImages[i].src		   
		   }
		   var ip = new ImagePreloader(imgs,function(){return true;});
		}*/
		
		if (cleverAjax().preset && cleverAjax().preset.cbJsEventXmlObjectUrl){
			var request = new AjaxRequest();
			request.open("GET",cleverAjax().preset.cbJsEventXmlObjectUrl);
			request.onresponse = function(request){
				try{
					var r = request.responseXML.getElementsByTagName("ajaxXmlObject");
					if(r && r.length > 0){
						cleverAjax().xmlObject = r[0];
					}
				} catch(e){
					//alert(e.message);
				}
			}
		}
		var o = cleverAjax().dhtmlObjectsByName('cleverEventContainer'); //DEPRECEATED BY IDSEQUENCE
		//var o = cleverAjax().dhtmlObjectsByIdSequence('cbJsEvent');
		for(var i=0;i<o.length;i++){
			o[i].element.href="javascript:stay();";	
			bindXslFunction(o[i]);			
		}
		var h = cleverAjax().dhtmlObjectsByIdSequence('cbJsHyperLink');
		for (var i=0; i < h.length; i++){
			h[i].element.href="javascript:stay();";	
		}
	} catch(e){cleverAjax().appendStatement(e.message)
		return false;
	}

}	

function bindXslFunction(DhtmlObject){
	if(DhtmlObject.element.onmouseover){
		var f = bindXslTransform(DhtmlObject.element.onmouseover(),DhtmlObject);
		DhtmlObject.element.onmouseover = "";
		DhtmlObject.addListener(new Listener('mouseover',f));
	}
	if(DhtmlObject.element.onmouseout){
		var f = bindXslTransform(DhtmlObject.element.onmouseout(),DhtmlObject);
		DhtmlObject.element.onmouseout = "";
		DhtmlObject.addListener(new Listener('mouseout',f));
	}
	if(DhtmlObject.element.onclick){
		var f = bindXslTransform(DhtmlObject.element.onclick(),DhtmlObject);
		DhtmlObject.element.onclick = "";
		DhtmlObject.addListener(new Listener('click',f));
	}
	if(DhtmlObject.element.onchange){
		var f = bindXslTransform(DhtmlObject.element.onchange(),DhtmlObject);
		DhtmlObject.element.onchange = "";
		DhtmlObject.addListener(new Listener('change',f));
	}
}

function bindXslTransform(str,obj){
	var newF = "";
	var functions = str.split(";");
	for (var a=0;a<functions.length;a++){
		if (functions[a].length > 0){
			functions[a] = functions[a].replace(/,/g,"','");
			functions[a] = functions[a].replace("[","(trigger,'");
			functions[a] = functions[a].replace("trigger,']","trigger]");
			functions[a] = functions[a].replace("]","');");
			functions[a] = functions[a].replace("trigger')","trigger)");
			if(functions[a].indexOf("xslDisplay") > -1){
				if (obj.element.nodeName.toLowerCase()=="input" && obj.element.type.toLowerCase()=="radio"){
					//alert("Gruppe:" + obj.element.name);
					var rg = cleverAjax().dhtmlFormByName(obj.element.form.name).dhtmlRadioGroupByName(obj.element.name);
					var allDone = false;
					obj.meDone = true;
					for (var i=0;i<rg.length;i++){
						if (rg[i].element != obj.element){
							var tD = functions[a].replace("xslDisplay(","xslFold(");
							rg[i].xslFold = rg[i].xslFold ? rg[i].xslFold+""+tD : tD;
							allDone = rg[i].meDone |! rg[i].element.onclick || rg[i].element.onclick.toString().indexOf("xslDisplay") < 0 ? true : false;
						}						
					}
					if (allDone){
						for (var i=0;i<rg.length;i++){
							var nf = new Function("trigger",""+rg[i].xslFold+"");
							rg[i].addListener(new Listener('click',nf));
							delete rg[i].xslFold;
							delete rg[i].meDone;
						}	
					}
				}
				var s = new Function("trigger",""+functions[a]+"");
				s(obj);
			}		
			//if(functions[a].indexOf("xslFold") > -1 || functions[a].indexOf("xslSwitchSrc") > -1){
			if(functions[a].indexOf("xslSwitchSrc") > -1){
				var s = new Function("trigger",""+functions[a]+"");
				s(obj);
			}
		}
		newF+= functions[a];
	}
	var t = new Function("trigger",""+newF+"");
	return t;
}
//Functions called from transformed xslt attribute
function xslSwitchSrc(trigger,idAndSrcArgs){
	for (var i=1;i<arguments.length;i++){
		//alert("Soll src Switchen: "+arguments[i]);
		var targetId = arguments[i].substring(0,arguments[i].indexOf("("));
		var targetSrc = arguments[i].substring(arguments[i].indexOf("(")+1,arguments[i].indexOf(")"));
		//alert(targetId + " : " +targetSrc);
		var n = trigger.event ? trigger.currentTarget : trigger.element ? trigger.element : null;
		if (cleverAjax().dhtmlObject(targetId).element && n!=null){
			if (!cleverAjax().dhtmlObject(targetId).originalSrc){
				cleverAjax().dhtmlObject(targetId).originalSrc = cleverAjax().dhtmlObject(targetId).element.src;
			}
			if (n.checked){
				cleverAjax().dhtmlObject(targetId).element.src = cleverAjax().dhtmlObject(targetId).originalSrc;
			} else {
				cleverAjax().dhtmlObject(targetId).element.src = targetSrc;
			}
		}
	}
	//alert(n.checked);
	n.checked =	n.checked ? true : false;
}

function xslRequest(trigger,requestURL){
	var n = trigger.event ? trigger.currentTarget : trigger.element ? trigger.element : null;
	n.id = n.id ? n.id : cleverAjax().uniqueId();
	
	//debugausgabe in textarea
	/*try {var t = document.createElement("textarea");
		var tt = document.createTextNode(requestURL)
		t.appendChild(tt);
		document.body.appendChild(t);
	} catch(e){alert(e.message);}*/

	//Loading screen
	cleverAjax().loadscreenObject.moveTo(0,0);
	cleverAjax().loadscreenObject.writeTo(cleverAjax().loadscreenObject.getContentFromXmlObject("infoCollection.loading"));
	cleverAjax().loadscreenObject.resizeTo(cleverAjax().body.fCR(),cleverAjax().body.fCB());
	var mT = cleverAjax().body.fCB() / 2 - cleverAjax().loadscreenObject.content.fH() / 2;
	cleverAjax().loadscreenObject.content.css.margin = mT + "px auto auto auto";
	cleverAjax().loadscreenObject.show();
	var loadScreenHide = function(){
		cleverAjax().loadscreenObject.hide();
	}
	var request = new AjaxRequest();
	//wenn das element ein submit button ist, dann gucke ob es seine form kennt und dessen methos post ist, setze einen post ab, ansonsten ist es ein normaler ger request!
	if (n.nodeName.toLowerCase() == "input" && n.type == "submit"){
		if (cleverAjax().dhtmlObject(n.id) && cleverAjax().dhtmlObject(n.id).dhtmlForm){
			var f = cleverAjax().dhtmlObject(n.id).dhtmlForm;
				//alert("Ich bin ein submit button und kenne meine Form: " + f.element.name);
			f.element.action = "javascript:stay();";
				//alert("Die action meiner From wurde gesetzt auf: " + f.element.action);
			if (f.element.method && f.element.method.toLowerCase() == "post"){
					//alert("Die Method meiner Form ist post. Ich muss alle formelemente auswerten und den poststring bauen.");
				var postStr = "";
				var select = f.dhtmlObjectsByType("select-one");
				var text = f.dhtmlObjectsByType("text");
				var hidden = f.dhtmlObjectsByType("hidden");
				var radio = f.dhtmlObjectsByType("radio");
				var check = f.dhtmlObjectsByType("checkbox");
				var pwd = f.dhtmlObjectsByType("password");
				var op = "";
				for (var i=0;i<select.length;i++){
					postStr+= op+select[i].element.name+"="+select[i].element.options[select[i].element.selectedIndex].value;
					op = "&";
				}
				for (var i=0;i<radio.length;i++){
					if (radio[i].element.checked){
						postStr+= op+radio[i].element.name+"="+radio[i].element.value;
						op = "&";
					}	
				}
				for (var i=0;i<check.length;i++){
					if (check[i].element.checked){
					    postStr+= op+check[i].element.name+"="+check[i].element.value;
					    op = "&";
					}    
				}
				for (var i=0;i<text.length;i++){
					postStr+= op+text[i].element.name+"="+text[i].element.value;
					op = "&";
				}
				for (var i=0;i<pwd.length;i++){
					postStr+= op+pwd[i].element.name+"="+pwd[i].element.value;
					op = "&";
				}
				for (var i=0;i<hidden.length;i++){
					postStr+= op+hidden[i].element.name+"="+hidden[i].element.value;
					op = "&";
				}
				//die submits nicht, nur der gedrückte, also er selbst. value ist hhier dann 1 für true (php braucht das so)
				postStr+= op+n.name+"=1";
				//TODO: chatrtgröße!!!
				if (cleverAjax().dhtmlObject('cleverContainerWidth').element != null){
					
					postStr+= op+ "chartwidth=750";
				}
				request.open("POST",requestURL,postStr);
			
				//debug
				/*var ttt = document.createTextNode("\n" + requestURL +"&"+ postStr);
				t.appendChild(ttt);*/
			
			} else {
				request.open("GET",requestURL);
			}
		} else {
			cleverAjax().appendStatement("cleverAjax: xslRequest(submitbutton kennt seine form nicht, kann nicht posten!)");
			return true;
		}
		n.disabled = true;// alert("Ich bin ein submitbutton und soll nimmer gedrückt werden!");
	} else {
		request.open("GET",requestURL);
	}
	request.onabort = function(request){
		if (n.nodeName.toLowerCase() == "input" && n.type == "submit"){
				n.disabled = false;
		}
		loadScreenHide();
		cleverAjax().appendStatement("cleverAjax: xslRequest(XmlRequest aborted!)");
		return true;
	}
	request.onresponse = function(request){
		try{
			var newFormNames = new Object();
			var newEventContainerObjects = new Array();
			var nodeFrom = request.responseXML.getElementsByTagName("ajaxXmlObject")[0];
			var nodeToId = request.responseXML.getElementsByTagName("ajaxXmlAttributes")[0] ? 
				request.responseXML.getElementsByTagName("ajaxXmlAttributes")[0].getElementsByTagName("ajaxContainerId")[0] ?
				request.responseXML.getElementsByTagName("ajaxXmlAttributes")[0].getElementsByTagName("ajaxContainerId")[0].firstChild.data :	
				null : null;
			if (n.nodeName.toLowerCase() == "input" && n.type == "submit"){
				n.disabled = false;
			}
			var removeDhtmlObjectsFrom = function(nodeRemoveFrom){
				for (var i=0;i<nodeRemoveFrom.childNodes.length;i++){
					try{					
						var currentNode = nodeRemoveFrom.childNodes[i];
						switch (currentNode.nodeType){
							case 1:
								//removing DhtmlObjetcs
								if (currentNode.id){
									cleverAjax().removeDhtmlObject(currentNode.id);
									cleverAjax().appendStatement("Removing DhtmlObject "+ currentNode.id);
								}
								if (currentNode.nodeName.toLowerCase() == "form" && currentNode.name){
									cleverAjax().appendStatement("Removing DhtmlForm "+ currentNode.name);
									cleverAjax().removeDhtmlFormByName(currentNode.name);
								}
								removeDhtmlObjectsFrom(currentNode);
								break;
							case 3:
								removeDhtmlObjectsFrom(currentNode);
								break;
						}
					} catch(e){
						cleverAjax().appendStatement("cleverAjax: xslRequest("+e+")");
					}
				}
			}
			var removeNodesFrom = function(nodeRemoveFrom){
				var secure = 0;
				while (nodeRemoveFrom.hasChildNodes() || secure < nodeRemoveFrom.childNodes.length){
					secure++;
					//alert(secure +" "+ nodeRemoveFrom.childNodes.length);
					nodeRemoveFrom.removeChild(nodeRemoveFrom.childNodes[0]);
				}
				//alert("habe alles removed mit secure: "+secure);
			}
			var cloneNodeTo = function(nodeTo,nodeFrom){
				for (var i=0;i<nodeFrom.childNodes.length;i++){
					//if (nodeFrom.childNodes[i].nodeType != 1 && nodeFrom.childNodes[i].nodeType != 3){
					//	alert(nodeFrom.childNodes[i].nodeName+" "+nodeFrom.childNodes[i].nodeType);
					//}	
					switch (nodeFrom.childNodes[i].nodeType){
						case 1:
							try {
								var meClone = nodeFrom.childNodes[i].cloneNode(false);
								var meNode = document.createElement(meClone.nodeName);
								if (meClone.getAttribute('type') &&
									meClone.getAttribute('type') == "radio" &&
									cleverAjax().client.ie){
									var checked = meClone.getAttribute('checked') ? " checked = \""+meClone.getAttribute('checked')+"\"" : ""; 
									if ((meClone.getAttribute('name') && newFormNames[meClone.getAttribute('name')]) || !meClone.getAttribute('name')){
										meNode = document.createElement('<input type="radio" name="'+cleverAjax().uniqueId()+'"'+checked+'"/>');
									} else {
										meNode = document.createElement('<input type="radio" name="'+meClone.getAttribute('name')+'"'+checked+'" />');
									}	
								}
								if (meClone.getAttribute('type') &&
									meClone.getAttribute('type') == "checkbox" &&
									cleverAjax().client.ie){
									var checked = meClone.getAttribute('checked') ? " checked = \""+meClone.getAttribute('checked')+"\"" : ""; 
									if ((meClone.getAttribute('name') && newFormNames[meClone.getAttribute('name')]) || !meClone.getAttribute('name')){
										meNode = document.createElement('<input type="checkbox" name="'+cleverAjax().uniqueId()+'"'+checked+'"/>');
									} else {
										meNode = document.createElement('<input type="checkbox" name="'+meClone.getAttribute('name')+'"'+checked+'" />');
									}	
								}
								//name important for form, otherwise not
								if (meClone.nodeName.toLowerCase() == "form"){
									if ((meClone.getAttribute('name') && newFormNames[meClone.getAttribute('name')]) || !meClone.getAttribute('name')){
										meNode.name = cleverAjax().uniqueId();
									} else {
										meNode.name = meClone.getAttribute('name');
									}	
									newFormNames[meNode.name] = true;
									if (meClone.getAttribute('method')){
										meNode.method = meClone.getAttribute('method');
									}
									meNode.action = "javascript:stay();";
								}
								else if (meClone.getAttribute('name')){
									meNode.name = meClone.getAttribute('name');
								}
								if (meClone.getAttribute('type')){
									meNode.type = meClone.getAttribute('type');
								}
								if (meClone.getAttribute('checked')){
									meNode.checked = meClone.getAttribute('checked');
								}
								if (meClone.getAttribute("selected")){
									meClone.getAttribute('selected');
								}
								if (meClone.getAttribute('id')){
									meNode.id = meClone.getAttribute('id');
								}
								if (meClone.getAttribute('class')){
									meNode.className = meClone.getAttribute('class');
								}
								if (meClone.getAttribute('value')){
									meNode.value = meClone.getAttribute('value');
								} else {
									meNode.value = "";
								}
								if (meClone.getAttribute('maxlength')){
									meNode.maxLength = meClone.getAttribute('maxlength');
								}
								if (meClone.getAttribute('target')){
									meNode.target = meClone.getAttribute('target');
								}
								if (meClone.getAttribute('src')){
									meNode.src = meClone.getAttribute('src');
								}
								if (meClone.getAttribute('href')){
									meNode.href = meClone.getAttribute('href');
								}
								if (meClone.getAttribute('onmouseover')){
									var f = meClone.getAttribute('onmouseover');
									meNode.onmouseover = new Function("",""+f+"");
								}							
								if (meClone.getAttribute('onmouseout')){
									var f = meClone.getAttribute('onmouseout');
									meNode.onmouseout = new Function("",""+f+"");
								}
								if (meClone.getAttribute('onchange')){
									var f = meClone.getAttribute('onchange');
									meNode.onchange = new Function("",""+f+"");
								}
								if (meClone.getAttribute('onclick')){
									var f = meClone.getAttribute('onclick');
									meNode.onclick = new Function("",""+f+"");
								}
								nodeTo.appendChild(meNode);
								
								if (meNode.name && meNode.name == "cleverEventContainer"){
										newEventContainerObjects[newEventContainerObjects.length] = meNode;
								}
								if (meNode.nodeName.toLowerCase() == "textarea"){
									meNode.value = nodeFrom.childNodes[i].childNodes[0].nodeValue;
								}
								if (cleverAjax().client.ie &&
									nodeFrom.childNodes[i].nodeName.toLowerCase() == "table" &&
									nodeFrom.childNodes[i].childNodes[0].nodeName.toLowerCase() != "tbody"){
									var mnt = document.createElement("tbody");
									meNode.appendChild(mnt)
									meNode = mnt;
								}
								cloneNodeTo(meNode,nodeFrom.childNodes[i]);
							} catch(e){
								cleverAjax().appendStatement("cleverAjax: xslRequest("+e+")");
							}
							break;
						case 3:
							if (nodeFrom.childNodes[i].nodeValue != null){
								if (nodeFrom.nodeName.toLowerCase() != "textarea"){
									var meTextNode = document.createTextNode(nodeFrom.childNodes[i].nodeValue);
									nodeTo.appendChild(meTextNode);
									cloneNodeTo(meTextNode,nodeFrom.childNodes[i]);
								}
							}	
							break;
						case 4:	
							nodeTo.innerHTML = nodeTo.innerHTML + nodeFrom.childNodes[i].nodeValue;
							cloneNodeTo(nodeTo,nodeFrom.childNodes[i]);
							break;
						/*case 8:
							nodeTo.innerHTML = "<!-- "+nodeFrom.childNodes[i].nodeValue+" //-->";
							break;*/
					}
				}		
			}
			if (nodeToId != null){			
				var c = cleverAjax().dhtmlObject(nodeToId);
				removeDhtmlObjectsFrom(c.element);
				removeNodesFrom(c.element);
				cloneNodeTo(c.element,nodeFrom);
				cleverAjax().removeDhtmlObject(nodeToId);
				cleverAjax().dhtmlObject(nodeToId);
				//forms updaten
				for (name in newFormNames){
					//alert("Try: "+name);
					delete cleverAjax().storage.dhtmlFormByName[name];
					cleverAjax().dhtmlFormByName(name);
					//alert(cleverAjax().dhtmlFormByName(name).element);
				}	
				//name = cleverEventContaiers updaten
				for(var i=0;i<newEventContainerObjects.length;i++){
					newEventContainerObjects[i].href="javascript:stay();";
					newEventContainerObjects[i].id = newEventContainerObjects[i].id ? newEventContainerObjects[i].id : cleverAjax().uniqueId();
					bindXslFunction(cleverAjax().dhtmlObject(newEventContainerObjects[i].id));			
				}
			}
			else {
				cleverAjax().appendStatement("cleverAjax: xslRequest(ajaxXml.ajaxXmlAttributes did not contain ajaxContainerId)");
			}
			//TODO: dahin, wo angehängt...
			window.scrollTo(0,0);
			loadScreenHide();
			//alert(cleverEnvironment().toString());
		
		    //debug string!
		    var debugStr = request.responseXML.getElementsByTagName("debugString");
		    if (debugStr.length > 0){
		        
		        var dn = document.getElementById("cbCurrentAjaxRequestDebug") ? document.getElementById("cbCurrentAjaxRequestDebug") : document.createElement("div");
		        dn.id = "cbCurrentAjaxRequestDebug";
		        dn.innerHTML = debugStr[0].firstChild.data.replace("DebugFiles", "DebugFiles (Current AjaxRequest)");
		        document.body.appendChild(dn);
		    }
		
		} catch(e){
			alert(e.message);
			cleverAjax().appendStatement("cleverAjax: xslRequest("+e+")");
			loadScreenHide();
			//alert("Error!" + e.message +  cleverEnvironment().toString());
		}
	}
}
function xslOpen(trigger,xmlURL){
	var request = new AjaxRequest();
	request.open("GET",xmlURL);
	request.onabort = function(request){
		return true;
	}
	request.onresponse = function(request){
		var c = new EventContainer(cleverAjax().uniqueId());
		//alert(request.responseText);
		c.onopen = function(){
			this.writeTo(request.responseText);
			for (id in this.listeners){
				this.envoker.removeListener(this.listeners[id]);
			}	
		}
		c.onclose = function(){
			try{
			for (id in this.listeners){
				this.envoker.addListener(this.listeners[id]);
			}	
			}catch(e){cleverAjax().appendStatement(e.message);alert(e.message);}
		}
		c.open(trigger);
	}
}
function xslDisplay(trigger){
	//Here, the trigger can be an EventTrigger or an dhtmlObject (Like java two different methods)!
	var n = trigger.event ? trigger.currentTarget : trigger.element ? trigger.element : null;
	var no = trigger.event ? trigger.dhtmlCurrentTarget : trigger.element ? trigger : null;
	if(n.nodeName.toLowerCase() == "input" && (n.type == "checkbox" || n.type == "radio")){
		for(var i=1;i<arguments.length;i++){
			if(n.checked){
				var dO = cleverAjax().dhtmlObject(arguments[i]);
				if (dO.element){
					dO.display();
				}	
				if (no && no.xslFold){
					eval(no.xslFold);
				}
			} else {
				var fO = cleverAjax().dhtmlObject(arguments[i]);
				if (fO.element){
					fO.fold();
				}
			}
		}
	} else if(n.nodeName.toLowerCase() == "select"){ //&& idArgs.indexOf(".") > -1){
		for(var i=1;i<arguments.length && arguments[i].indexOf(".") > -1;i++){
			var a = arguments[i].split(".");
			if(n.options[n.selectedIndex].value.indexOf(a[0]) > -1 || a[1] == n.currentlyDisplayed){
				var dO = cleverAjax().dhtmlObject(a[1]);
				if (dO.element){
					dO.display();
					n.currentlyDisplayed = a[1];
					//break;
				}
			} else {
				var dOO = cleverAjax().dhtmlObject(a[1]);
				//nicht falten wenn id in arguments die gleiche wie beim display eben ist!
				if (dOO.element){
					dOO.fold();
					//wenn countryId, stateId zurücksetzen (nicht schön hier, aber geht.)
					if (n.name.indexOf("CountryId") > -1){
					    var sn = document.getElementsByName(n.name.replace("Country",  "State"));
					    if (sn.length > 0){
					        sn[0].options[sn[0].selectedIndex].selected = false;
					        sn[0].options[0].selected = true;
					    }
					}
				}
			}
		}
		n.currentlyDisplayed = null;
	} else {
		for(var i=1;i<arguments.length;i++){
			if(n.checked){
				var dOb = cleverAjax().dhtmlObject(arguments[i]);
				if (dOb.element){
					dOb.display();
				}
			} else {
				var dOb = cleverAjax().dhtmlObject(arguments[i]);
				if (dOb.element){
					dOb.fold();
				}
			}
		}
		n.checked = n.checked ? false : true;
	}
}
function xslFold(trigger,idArgs){
	//Here, the trigger can be an EventTrigger or an dhtmlObject (Like java two different methods)!
	var n = trigger.event ? trigger.currentTarget : trigger.element ? trigger.element : null;
	if(n.nodeName.toLowerCase() == "select" && idArgs.indexOf(".") > -1){
		for(var i=1;i<arguments.length;i++){
			var a = arguments[i].split(".");
			if(n.options[n.selectedIndex].value.indexOf(a[0]) == -1){
				var fO = cleverAjax().dhtmlObject(a[1]);
				if (fO.element){
					fO.fold();
				}	
			}
		}
	} else {
		for(var i=1;i<arguments.length;i++){
			if(!(n.nodeName.toLowerCase() == "input" && n.type == "radio" &! n.checked)) {	
				var fO = cleverAjax().dhtmlObject(arguments[i]);
				if (fO.element){
					fO.fold();
				}	
			}
		
		}
	}
}
function xslShow(trigger,id){
	var enableClose = arguments.length > 2 && arguments[2] ? true : false;
	var context = id.split(".")[0];
	var element = id.split(".")[1];
	var p = cleverAjax().popObject;
	if(!cleverAjax().xmlObject){
	    p.writeTo("Loading data...");
	}
	else {
	    p.setContentFromXmlObject(id)
	    if (!p.headlineEnabled){
	        p.enableHeadline();
	    }   
        if (!p.closeEnabled && enableClose){
            p.enablePersistentClose();
        }
    }
	var toR = trigger.pageX + 20 + p.container.fW() < cleverAjax().body.fCR();
	var toL = trigger.pageX -20 - p.container.fW() > 0;// > cleverAjax().body.fCR();
	var x = toR ? trigger.pageX + 10 : toL ? trigger.pageX - p.container.fW() - 10 : 5;
    var toB = trigger.pageY + 10 + p.container.fH() < cleverAjax().body.fCB();
	var toT = trigger.pageY - 10 - p.container.fH() > cleverAjax().body.fCT();
	var y = toB |! toT ? trigger.pageY + 10 : trigger.pageY - p.container.fH() - 10;
	p.moveTo(x,y);
	setTimeout("cleverAjax().popObject.show()",10);
}
function xslHide(trigger){
	setTimeout("cleverAjax().popObject.hide();if(cleverAjax().popObject.closeEnabled){cleverAjax().popObject.disableClose();}",50);
	
}
function xslFocus(trigger,jumpToName){
	var jumpTo = cleverAjax().dhtmlObjectsByName(jumpToName);
	if(jumpTo.length >= 1){
		jumpTo[0].element.focus();
		var x = jumpTo[0].fX() - (cleverAjax().body.fCR() - cleverAjax().body.fCL()) / 2;
		var y = parseInt(jumpTo[0].fY() - (cleverAjax().body.fCB() - cleverAjax().body.fCT()) / 2);
		window.scrollTo(x,y);
	}
}
function xslDeclare(url){
	try{
		var request = new AjaxRequest();
		request.open("GET",url);
		request.onresponse = function(request){
			try{
				var r = request.responseXML.getElementsByTagName("ajaxXmlObject");
				if(r){
					cleverEnvironment().xmlObject = r;
				}
			} catch(e){
				alert(e.message);
			}
		}
		
	} catch(e){
		///alert(e.message);
	}
}

function xslSubmit(trigger,formName){
	
	formEventMouseSubmit(trigger);
	cleverAjax().dhtmlFormByName(formName).element.submit();
}
function xslUpdate(trigger,formName){
	formEventMouseSubmit(trigger, true);
	cleverAjax().dhtmlFormByName(formName).element.submit();
}



function xslPreDisplayDelay(id,time){
	var o = cleverEnvironment().dhtmlObject(id);
	if (o.element){
		o.fold();
		setTimeout("cleverEnvironment().dhtmlObject('"+id+"').display()",time);
	}
}

function cbOpenRecommendation(url, w){
    var r = new AjaxRequest();
    r.open("POST",url);
    r.onresponse = function(){
        var a = r.responseXML.getElementsByTagName("ajaxXmlObject")[0];
        var f = cleverEnvironment().dhtmlFormByName("cleverForm");
        if (f.element != null){
            var n = document.getElementById("cbRecommendationContainer");
            if (n == null){
                n = document.createElement("div");
                n.id = "cbRecommendationContainer";
                n.style.position = "absolute";
                n.style.display = "block";
                n.style.visibility = "hidden";
                f.element.appendChild(n);
            } else {
                Utils.Nodes.Clear(n);
            }
            var o = cleverEnvironment().dhtmlObject(n.id);
            /*var cw = cleverEnvironment().client.fW();
            var left = (cw - w) / 2;
            o.css.top = "50px";
            o.css.left = left + "px";
            o.css.width = w + "px";*/
            if (cleverAjax().client.ie){
				var cIe = document.getElementById("cbRecommendationContainerDependant") || document.createElement("iframe");
				cIe.src = "/images/blank.gif";
			   	cleverAjax().body.element.appendChild(cIe);
				cIe.id = "cbRecommendationContainerDependant";
			   	cIe.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
			   	cIe.style.position = "absolute";		
				/*cIe.style.top = "50px";
                cIe.style.left = left + "px";
                cIe.style.width = w + "px";*/
			}
            Utils.Nodes.CloneDescendant(o.element, a);
            o.css.visibility = "visible";
        }
    }
}
function cbCloseRecommendation(){ //should be returned, so that no submit is done;
    var o = cleverAjax().dhtmlObject("cbRecommendationContainer");
    if (o.element != null){
        o.fold();
        var d = cleverAjax().dhtmlObject("cbRecommendationContainerDependant");
        if (d.element != null){
            d.fold();
        }
    }
    return false;
}

/*******************************************************************************
********************************************************************************
Public Class AjaxRequest
	   cretae a request object
********************************************************************************
*******************************************************************************/
//Construct the Object *********************************************************
function AjaxRequest(){
	if(!cleverAjax()){return false;}
	try {this.request = new XMLHttpRequest();} catch(w3c) {
		try {this.request = new ActiveXObject("Msxml2.XMLHTTP");} catch(msie) {
			try {this.request = new ActiveXObject("Microsoft.XMLHTTP");} catch (e){
				cleverAjax().appendStatement("XMLRequest failed: \n\t"+w3x.message+"\n\t"+msie.message+"\n\t"+e.message);
			}
		}	
	}
	this.obj = "AjaxRequest" + cleverAjax().uniqueId() + "Object";
	eval(this.obj + "=this");
	return this;
}
AjaxRequest.prototype.open = function(reqmethod,URL,optionalParamStr){
	try {
		this.request.onreadystatechange = new Function(""+this.obj+".callback()");
		this.request.open(reqmethod,URL,true);
		this.request.setRequestHeader('If-Modified-Since','Sat, 1 Jan 2000 00:00:00 GMT');
		if (optionalParamStr != null && reqmethod.toLowerCase() == "post"){
			this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.request.setRequestHeader("Content-length", optionalParamStr.length);
      this.request.setRequestHeader("Connection", "close");
			this.request.send(optionalParamStr);
		} else {
			this.request.send(null);
		}	
	} catch(e){alert(e.message);cleverAjax().appendStatement("AjaxRequest.open: "+e.message);}
}

AjaxRequest.prototype.callback = function(){
	//TODO: Load event on readyStateChange nur?
	try {
		if(this.request.readyState == 4){
			if(this.request.status != 200 && this.request.status != 0){
				cleverAjax().appendStatement("AjaxRequest.onabort: "+this.request.statusText);
				if(this.onabort){this.onabort(this);}
			}
			if(this.request.responseXML || this.request.response){
				this.responseXML = this.request.responseXML;
				this.responseText = this.request.responseText;
				if(this.onresponse){this.onresponse(this);}
				else{return true;}
			} else {
				cleverAjax().appendStatement("AjaxRequest.onabort: XML seems invalid.");
				if(this.onabort){this.onabort(this);}
			}	
		} else if (this.request.readyState < 4 && this.request.readyState > 0) {
			if(this.onload){this.onload(this);}
		} else {
			if(this.onabort){this.onabort(this);}
			else{cleverAjax().appendStatement("AjaxRequest.onabort: "+this.request.statusText);}
		}
	} catch(e){cleverAjax().appendStatement("AjaxRequest.callback: "+e.message);}
}

/*******************************************************************************
********************************************************************************
Public Class EventContainer
	   create a EventContainer Object that can be used to drag around or pop up, etc.
********************************************************************************
*******************************************************************************/
//Construct the Object *********************************************************
function EventContainer(id){
	id = id ? id : cleverAjax().uniqueId();
	this.id = id;
	this.infocollections = new Object();
	cleverAjax().appendStatement("new EventContainer('"+this.id+"')");
	try {
		var c = document.createElement('div');
		//c.id = "eventContainer"+id;
		c.id = id;
		c.className = "eventContainerWrapper";
		cleverAjax().body.element.appendChild(c);
		this.container = cleverAjax().dhtmlObject(c.id);
		var cH = document.createElement('div');
		cH.id = c.id+"Header";
		cH.className = "eventContainerHeadline";
		c.appendChild(cH);
		this.header = cleverAjax().dhtmlObject(cH.id);
		var cC = document.createElement('div');
		cC.id = c.id+"Content";
		cC.className = "eventContainerContent";
		c.appendChild(cC);
		this.content = cleverAjax().dhtmlObject(cC.id);
		try {
			if (cleverAjax().client.ie){
			    var cIe = document.createElement("iframe");
				cIe.className = "eventContainerWrapper";
				cIe.src = "/images/blank.gif";
			   	cleverAjax().body.element.appendChild(cIe);
				cIe.id = cleverAjax().uniqueId();
			   	cleverAjax().appendStatement("dependant id: "+cIe.id);
			   	cIe.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
			   	cIe.style.position = "absolute";		
				//c.style.zIndex = cIe.style.zIndex + 1;
				//cC.style.zIndex = cIe.style.zIndex + 1;
				this.addDependant(cIe.id);
			}
		} catch(e){cleverAjax().appendStatement(e.message);
			alert(e.message);
			return false;
		}
	} catch(e){cleverAjax().appendStatement(e.message);
		alert(e.message);
		return false;
	}
	this.container.css.position = "absolute";
	return this;
}
EventContainer.prototype.disableClose = function(){
    var n = document.getElementById(this.id + "Close");
    var a = document.getElementById(this.id + "CloseA");
    delete cleverAjax().storage.dhtmlObject[n.id];
    delete cleverAjax().storage.dhtmlObject[a.id];
    n.parentNode.removeChild(n);
    this.closeEnabled = false;
}
EventContainer.prototype.enableClose = function(){
    var c = document.createElement("div");
    c.className = "eventContainerClose";
    c.id = this.id + "Close";
    this.header.element.appendChild(c);
    var co = cleverAjax().dhtmlObject(c.id);
    co.writeTo('<a href="javascript:stay();" class="eventContainerClose" id="'+this.id+'CloseA" />'+this.getContentFromXmlObject("webOrderProcessHelp.close")+'</a>');
    //this.header.writeTo('<div class="eventContainerClose"></div>');
	var ob = cleverAjax().dhtmlObject(this.id+'CloseA');
	ob.ec = this;
	ob.addListener(new Listener('click',function(trigger){
		trigger.dhtmlCurrentTarget.ec.close(true);
	}));
	this.closeEnabled = true;
}
EventContainer.prototype.enablePersistentClose = function(){
    var c = document.createElement("div");
    c.className = "eventContainerClose";
    c.id = this.id + "Close";
    this.header.element.appendChild(c);
    c.innerHTML = '<a href="javascript:stay();" class="eventContainerClose" id="'+this.id+'CloseA" />'+this.getContentFromXmlObject("webOrderProcessHelp.close")+'</a>';
    
    //this.header.writeTo('<div class="eventContainerClose"><a href="javascript:stay();" class="eventContainerClose" id="'+this.id+'Close" />'+this.getContentFromXmlObject("webOrderProcessHelp.close")+'</a></div>');
	var ob = cleverAjax().dhtmlObject(this.id+'CloseA');
	
	ob.ec = this;
	ob.addListener(new Listener('click',function(trigger){
		trigger.dhtmlCurrentTarget.ec.close(false);
	}));
    this.closeEnabled = true;
}
EventContainer.prototype.enableHeadline = function(){
    var h = document.createElement("h2");
    h.className = "eventContainerHeadline";
    h.id = this.id + "H2";
    this.header.element.appendChild(h);
    var ho = cleverAjax().dhtmlObject(h.id);
    ho.writeTo(this.getContentFromXmlObject("infoCollection.contextHelp"));
    this.headlineEnabled = true;
}
EventContainer.prototype.open = function(EventTrigger){
	if (!EventTrigger |! EventTrigger.event){
		return cleverAjax().appendStatement("EventContainer.open(): No EventTrigger!");
	}
	this.enableClose();
	this.envoker = EventTrigger.dhtmlCurrentTarget;
	this.listeners = new Object();
	for (id in this.envoker.listener[EventTrigger.type]){
		this.listeners[id] = this.envoker.listener[EventTrigger.type][id];
	}
	var toR = EventTrigger.pageX + 20 + this.container.fW() < cleverAjax().body.fCR();
	var x = toR ? EventTrigger.pageX + 10 : EventTrigger.pageX - this.container.fW() - 10;
	var toB = EventTrigger.pageY + 10 + this.container.fH() < cleverAjax().body.fCB();
	var toT = EventTrigger.pageY - 10 - this.container.fH() > cleverAjax().body.fCT();
	var y = toB |! toT ? EventTrigger.pageY + 10 : EventTrigger.pageY - this.container.fH() - 10;
	this.moveTo(x,y);
	this.show();
	if(this.onopen){
		this.onopen(this);
	}
}
EventContainer.prototype.close = function(){
	var remove = arguments.length > 0 ? arguments[0] : false;
	if(this.onclose){this.onclose(this);}
	this.disableClose();
	this.hide();
	if (remove){
	    this.remove();
    }
}
EventContainer.prototype.remove = function(){
	try{cleverAjax().removeDhtmlObject(this.container.id);
		document.removeChild(this.container.element);
	} catch(e){cleverAjax().appendStatement(e.message);}
}
//Add / remove dependent dhtmlObjectId. All functions handling an DhtmlObject will take care on the dependants,
//so that they "follow" the object (i.e. an iframe to defeat IE ActiveX level bug)
EventContainer.prototype.addDependant = function(id){
	this.dependant = this.dependant ? this.dependant : new Object();
	var d = cleverAjax().dhtmlObject(id);
	if (d.element){	
		this.dependant[id] = d;
		this.statement+= "\n\tadded dependant: "+id;
	}	
}
EventContainer.prototype.removeDependant = function(id){
	if (this.dependant){
		if (this.dependant[id]){
			delete this.dependant[id];
			this.statement+= "\n\tremoved dependant: "+id;
		}
	}
}
//css properties (dhtml functions, inherit DhtmlObject Libary)
EventContainer.prototype.moveTo = function(x,y){
	this.container.moveTo(x,y);
	for (id in this.dependant){
		this.dependant[id].moveTo(x,y);
	}
}
EventContainer.prototype.show = function(){
	this.container.show();
	for (id in this.dependant){
		this.dependant[id].show();
	}
}
EventContainer.prototype.hide = function(){
	this.container.hide();
	for (id in this.dependant){
		this.dependant[id].hide();
	}
}
EventContainer.prototype.resizeTo = function(w,h){
	this.container.resizeTo(w,h);
	for (id in this.dependant){
		this.dependant[id].resizeTo(w,h);		
	}
}

EventContainer.prototype.writeTo = function(content,headline){
	this.content.writeTo(content);
	if (cleverAjax().client.ie5 || cleverAjax().client.ie6){
		cleverPngHack(this.content.element);
	}
	for (id in this.dependant){
		this.dependant[id].resizeTo(this.container.fW(),this.container.fH());
	}
}

//Diese beiden verbessern!
//getContent abkoppeln?
//nicht in beiden auf das OxmlObjekt abfragen m?ssen!

//Das muss alles sinnvoller gemacht werdne. bisher kann ur eine infocollection übergeben werden, sonst ist alles im a.
//ggf. infocollection js konzept neu gestalten!
EventContainer.prototype.addInfoCollection = function(collectionId){
	this.infocollections[collectionId] = this.infocollections[collectionId] ? this.infocollections[collectionId] : new Object();
}
EventContainer.prototype.getContentFromXmlObject = function(nodeName){
	if (cleverAjax().xmlObject || (cleverAjax().ajaxset && cleverAjax().ajaxset.xmlObject)){
		nodeName = nodeName.replace("js.","");
		for (id in this.infocollections){
			nodeName = nodeName.replace("infoCollection.",id + ".");
		}	
		if (cleverAjax().xmlObject.getElementsByTagName(nodeName).length > 0){
			return cleverAjax().xmlObject.getElementsByTagName(nodeName)[0].firstChild.nodeValue;
		} else {
			return nodeName+" not found";
		}
	} else {
		return "Loading "+nodeName+"";
	}

}
EventContainer.prototype.setContentFromXmlObject = function(nodeName){
	if (cleverAjax().xmlObject || (cleverAjax().ajaxset && cleverAjax().ajaxset.xmlObject)){
		nodeName = nodeName.replace("js.","");
		if (cleverAjax().xmlObject.getElementsByTagName(nodeName).length > 0 ||
			(cleverAjax().ajaxset && cleverAjax().ajaxset.xmlObject.getElementsByTagName(nodeName).length > 0)){
			//this.header.writeTo('<h2>'+this.getContentFromXmlObject("infoCollection.contextHelp")+'</h2>');
			this.writeTo(this.getContentFromXmlObject(nodeName));
		} else {
			this.writeTo(nodeName+" not found");
		}
	} else {
		this.writeTo("Loading... set("+nodeName+")");
	}
}
/******************************************************************************
            cleverbridge Cart Prices Handling Libary
            (c) Uwe Linsenboll for cleverbridge August 2005
                requires JavaScript 1.2
                requires cleverbridge Environment libary
                                        
                            <script>
******************************************************************************/
//INITIALIZING
function cleverPrices(){
    if (cleverEnvironment().loaded.cleverPrices){
        return cleverEnvironment();
    } else {
        var tm = new Date().valueOf();
        cleverEnvironment().appendStatement("Loading cleverPrices...");
        cleverEnvironment().loaded.cleverPrices = true;
        cleverPricesInit();
        cleverEnvironment().appendStatement("Loading cleverPrices done.");
        cleverEnvironment().time.cleverPrices = new Date().valueOf() - tm;      
        return cleverEnvironment();
    }
    
}

String.prototype.toInt = function(){
    var output = "";
    for(i=0;i<this.length;i++){
       if(this.charAt(i) >= "0" && this.charAt(i) <= "9"){
            output+= this.charAt(i);
       }
    }
    output = isNaN(parseInt(output*1)) ? null : output*1;
    //alert(output);
    return output;
}


var globalFormat = null;
function getPriceFormat(intstr){
    intstr = ""+intstr;
    if (intstr == 0){
      intstr = "000"; 
    }  
    //cents
    else if(intstr.length <= 2){// && (globalFormat.charAt(globalFormat.length-3) < "0" || globalFormat.charAt(globalFormat.length-3) > "9")){
      //alert(globalFormat);
      var a = globalFormat.length-1;
      var aStr = globalFormat;
      while(globalFormat.charAt(a) < "0" || globalFormat.charAt(a) > "9"){
      	//alert("t"+globalFormat.charAt(a));
      	aStr = globalFormat.substring(0,a);
      	a--;
      }
      //alert(aStr);
      if (aStr.charAt(aStr.length-3) < "0" || aStr.charAt(aStr.length-3) > "9"){
      	intstr = "0"+intstr;	
      }
    }
    var charatintprice = intstr.length-1;
    var pricestr= "";
    for(var i=globalFormat.length-1;i>=0 && charatintprice >=0;i--){
        if(globalFormat.charAt(i) >= "0" && globalFormat.charAt(i) <= "9"){
            pricestr = intstr.charAt(charatintprice)+""+pricestr;
            charatintprice--;
        } else{
            pricestr = globalFormat.charAt(i)+""+pricestr;

        }
    }
    //get non digits before format number
    var run = true;
    var nondigitsbefore = "";
    for(var i=0;i<globalFormat.length;i++){
        if(globalFormat.charAt(i) >= "0" && globalFormat.charAt(i) <= "9"){
            run = false;
        } else {
            if(run){
                nondigitsbefore+= globalFormat.charAt(i);
            }
        }
    }
    pricestr = nondigitsbefore+""+pricestr;
    return pricestr;
}

function createPriceFormat(formatStr){
    globalFormat = formatStr;
}
function cleverPricesInit(){
    //New Pricing fpr product list
    var form = cleverPrices().dhtmlFormByName("cleverForm");
    if(!form.element){
        return cleverPrices().appendStatement("cleverPricesInit()->Form with desired name not found");
    }
    
    cleverPrices().keyRef = new Object(); //the hash for the keys to enable to get the objects via trigger
    cleverPrices().keyRef["vatSetId"] = new Object();
    
    //Pricing for 
    var priceStrObj = cleverPrices().dhtmlObject('eventCartPriceFormat');
    var priceStr = priceStrObj.element ? priceStrObj.element.firstChild ? priceStrObj.element.firstChild.data : priceStrObj.element.value : null;
    createPriceFormat(priceStr);
    
    var checkbox = form.dhtmlObjectsByType('checkbox');
    var cartListeners = new Array();
    itlDisplayCheck();
    for (var i=0;i<checkbox.length;i++){
        if (checkbox[i].element.id && checkbox[i].element.id.indexOf("listener_item") > -1){
            setDiscount(checkbox[i].element.id.substr(9));
            checkbox[i].addListener(new Listener('click',function(trigger){
                var itemStr = trigger.currentTarget.id.substr(9);
                var q = cleverPrices().dhtmlObject("quantity_"+itemStr);
                if (trigger.currentTarget.checked)
                {
                    q.writeTo(1);
                    add(itemStr);
                    result();
                }
                else 
                {
                    remove(itemStr);
                    result();
                    q.writeTo(0);
                }
            }));
            
        }
    }
    
    var button = form.dhtmlObjectsByType('button');
    for (var i=0;i<button.length;i++){
        //alert(button[i].element.id);
        if (button[i].element.id && button[i].element.id.indexOf("listener_quantity_down") > -1)
        {
            button[i].addListener(new Listener('click', function(trigger){
                var itemStr = "item" + trigger.currentTarget.id.substr(22);
                var q = cleverPrices().dhtmlObject("quantity_"+itemStr);
                var min = cleverPrices().dhtmlObject("quantity_min_"+itemStr).element ? cleverPrices().dhtmlObject("quantity_min_"+itemStr).readFrom().toInt() : 0;
                var dq = parseInt(q.element.value) - 1;
                if (q.element != null && dq >= min){
                    remove(itemStr)
                    q.element.value = dq >= min || dq == 0 ? dq : min;
                    q.css.visibility = "hidden";
                    add(itemStr);
                    result();
                    formEventMouseSubmit(trigger);
                    form.element.submit();
                }
            }));
        }
        if (button[i].element.id && button[i].element.id.indexOf("listener_quantity_up") > -1)
        {
            /*var preQ = cleverPrices().dhtmlObject("quantity_item" + button[i].element.id.substr(20));
            if (preQ.element)
            {
                preQ.element.readOnly = true;
            }*/
            button[i].addListener(new Listener('click', function(trigger){
                var itemStr = "item" + trigger.currentTarget.id.substr(20);
                var q = cleverPrices().dhtmlObject("quantity_"+itemStr);
                var max = cleverPrices().dhtmlObject("quantity_max_"+itemStr).element ? cleverPrices().dhtmlObject("quantity_max_"+itemStr).readFrom().toInt() : 0;
                var dq = parseInt(q.element.value) + 1;
                if (q.element != null && (dq <= max)){
                    remove(itemStr)
                    q.element.value = dq <= max || dq == 0 ? dq : max;
                    q.css.visibility = "hidden";
                    add(itemStr);
                    result();
                    formEventMouseSubmit(trigger);
                    form.element.submit();         
                }
                
            }));
        }
    }
    
}

function setDiscount(itemStr) {
    //alert(itemStr);
    var listener = cleverPrices().dhtmlObject("listener_"+itemStr);
    if (listener.element != null) {
        var prcnet = cleverPrices().dhtmlObject("prcnet_"+itemStr).element ?
            cleverPrices().dhtmlObject("prcnet_"+itemStr).readFrom().toInt() : null;        
        var oredgross = cleverPrices().dhtmlObject("redgross_"+itemStr).element ?
            cleverPrices().dhtmlObject("redgross_"+itemStr) : null;
        var orednet = cleverPrices().dhtmlObject("rednet_"+itemStr).element ?
            cleverPrices().dhtmlObject("rednet_"+itemStr) : null;            
            
        if (listener.element.checked){
            if (cleverPrices().dhtmlObject("redgross_"+itemStr).element){ //nur wenn es discount gibt klassennamen ?ndern
                cleverPrices().dhtmlObject("prcgross_"+itemStr).element.className = "priceInitial";
            }    
            if (cleverPrices().dhtmlObject("rednet_"+itemStr).element){ //nur wenn es discount gibt klassennamen ?ndern
                cleverPrices().dhtmlObject("prcnet_"+itemStr).element.className = "priceInitial";
            }
            if (oredgross != null){
                oredgross.css.display = "block";
            }
            if (orednet != null){
                orednet.css.display = "block";
            }
        } else {
            if (cleverPrices().dhtmlObject("redgross_"+itemStr).element){ //nur wenn es discount gibt klassennamen ?ndern
                cleverPrices().dhtmlObject("prcgross_"+itemStr).element.className = "price";
            }    
            if (cleverPrices().dhtmlObject("rednet_"+itemStr).element){ //nur wenn es discount gibt klassennamen ?ndern
                cleverPrices().dhtmlObject("prcnet_"+itemStr).element.className = "price";
            }
            if (oredgross != null){
                oredgross.css.display = "none";
            }
            if (orednet != null){
                orednet.css.display = "none";
            }
        }
    }
}


function GetCurrentPrices(itemStr) {
    var vatSetId = itemStr.split("_")[1];
    //unit preise holen
    cleverPrices().keyRef["unitNet"] = cleverPrices().keyRef["unitprcnet_"+itemStr] ? cleverPrices().keyRef["unitprcnet_"+itemStr] :
        cleverPrices().dhtmlObject("unitprcnet_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitprcnet_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["unitVat"] = cleverPrices().keyRef["unitprcvat_"+itemStr] ? cleverPrices().keyRef["unitprcvat_"+itemStr] :
       cleverPrices().dhtmlObject("unitprcvat_"+itemStr).element ?
       cleverPrices().dhtmlObject("unitprcvat_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["unitGross"] = cleverPrices().keyRef["unitprcgross_"+itemStr] ? cleverPrices().keyRef["unitprcgross_"+itemStr] :
        cleverPrices().dhtmlObject("unitprcgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitprcgross_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["prcNet"] = cleverPrices().keyRef["prcnet_"+itemStr] ? cleverPrices().keyRef["prcnet_"+itemStr] :
        cleverPrices().dhtmlObject("prcnet_"+itemStr).element ?
        cleverPrices().dhtmlObject("prcnet_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["prcVat"] = cleverPrices().keyRef["prcvat_"+itemStr] ? cleverPrices().keyRef["prcvat_"+itemStr] :
        cleverPrices().dhtmlObject("prcvat_"+itemStr).element ?
        cleverPrices().dhtmlObject("prcvat_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["prcGross"] = cleverPrices().keyRef["prcgross_"+itemStr] ? cleverPrices().keyRef["prcgross_"+itemStr] :
        cleverPrices().dhtmlObject("prcgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("prcgross_"+itemStr).readFrom().toInt() : null;
     //NEU initial
    cleverPrices().keyRef["itlGross"] = cleverPrices().keyRef["itlgross_"+itemStr] ? cleverPrices().keyRef["itlgross_"+itemStr] :
        cleverPrices().dhtmlObject("itlgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("itlgross_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["itlNet"] = cleverPrices().keyRef["itlnet_"+itemStr] ? cleverPrices().keyRef["itlnet_"+itemStr] :
        cleverPrices().dhtmlObject("itlnet_"+itemStr).element ?
        cleverPrices().dhtmlObject("itlnet_"+itemStr).readFrom().toInt() : null;
    //reduced
    cleverPrices().keyRef["redGross"] = cleverPrices().keyRef["redgross_"+itemStr] ? cleverPrices().keyRef["redgross_"+itemStr] :
        cleverPrices().dhtmlObject("redgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("redgross_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["redVat"] = cleverPrices().keyRef["redvat_"+itemStr] ? cleverPrices().keyRef["redvat_"+itemStr] :
        cleverPrices().dhtmlObject("redvat_"+itemStr).element ?
        cleverPrices().dhtmlObject("redvat_"+itemStr).readFrom().toInt() : null;        
    cleverPrices().keyRef["redNet"] = cleverPrices().keyRef["rednet_"+itemStr] ? cleverPrices().keyRef["rednet_"+itemStr] :
        cleverPrices().dhtmlObject("rednet_"+itemStr).element ?
        cleverPrices().dhtmlObject("rednet_"+itemStr).readFrom().toInt() : null;        
    //potential preise holen (für potential feature)
    cleverPrices().keyRef["unitPotNet"] = cleverPrices().keyRef["unitpotnet_"+itemStr] ? cleverPrices().keyRef["unitpotnet_"+itemStr] :
        cleverPrices().dhtmlObject("unitprdnet_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitprdnet_"+itemStr).readFrom().toInt() :
        cleverPrices().dhtmlObject("unitpotnet_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitpotnet_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["unitPotVat"] = cleverPrices().keyRef["unitpotvat_"+itemStr] ? cleverPrices().keyRef["unitpotvat_"+itemStr] :
        cleverPrices().dhtmlObject("unitprdvat_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitprdvat_"+itemStr).readFrom().toInt() :
        cleverPrices().dhtmlObject("unitpotvat_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitpotvat_"+itemStr).readFrom().toInt() : null;
    cleverPrices().keyRef["unitPotGross"] = cleverPrices().keyRef["unitpotgross_"+itemStr] ? cleverPrices().keyRef["unitpotgross_"+itemStr] :
        cleverPrices().dhtmlObject("unitprdgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitprdgross_"+itemStr).readFrom().toInt() :
        cleverPrices().dhtmlObject("unitpotgross_"+itemStr).element ?
        cleverPrices().dhtmlObject("unitpotgross_"+itemStr).readFrom().toInt() : null;
    //relevante subtotal zeile holen    
    cleverPrices().keyRef["subNet"] = cleverPrices().keyRef["prcnetPart_total_"+vatSetId] ? cleverPrices().keyRef["prcnetPart_total_"+vatSetId] :
        cleverPrices().dhtmlObject("prcnetPart_total_"+vatSetId).element ?
        cleverPrices().dhtmlObject("prcnetPart_total_"+vatSetId).readFrom().toInt() : null;
    cleverPrices().keyRef["subVat"] = cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] ? cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] :
        cleverPrices().dhtmlObject("prcvatPart_vat_"+vatSetId).element ?
        cleverPrices().dhtmlObject("prcvatPart_vat_"+vatSetId).readFrom().toInt() : null;
    cleverPrices().keyRef["subGross"] = cleverPrices().keyRef["prcgrossPart_total_"+vatSetId] ? cleverPrices().keyRef["prcgrossPart_total_"+vatSetId] :
        cleverPrices().dhtmlObject("prcgrossPart_total_"+vatSetId).element ?
        cleverPrices().dhtmlObject("prcgrossPart_total_"+vatSetId).readFrom().toInt() : null;
    //relevante netBase (f?r vat Zeile) holen
    cleverPrices().keyRef["netBase"] = cleverPrices().keyRef["prcnetBase_total_"+vatSetId] ? cleverPrices().keyRef["prcnetBase_total_"+vatSetId] :
        cleverPrices().dhtmlObject("prcnetBase_total_"+vatSetId).element ?
        cleverPrices().dhtmlObject("prcnetBase_total_"+vatSetId).readFrom().toInt() : null;
    //gesamt zeilen holen
    cleverPrices().keyRef["totNet"] = cleverPrices().keyRef["prcnet_total"] ? cleverPrices().keyRef["prcnet_total"] :
        cleverPrices().dhtmlObject("prcnet_total").element ?
        cleverPrices().dhtmlObject("prcnet_total").readFrom().toInt() : null;
    cleverPrices().keyRef["totVat"] = cleverPrices().keyRef["prcvat_vat"] ? cleverPrices().keyRef["prcvat_vat"] :
        cleverPrices().dhtmlObject("prcvat_vat").element ?
        cleverPrices().dhtmlObject("prcvat_vat").readFrom().toInt() : null;
    cleverPrices().keyRef["totGross"] = cleverPrices().keyRef["prcgross_total"] ? cleverPrices().keyRef["prcgross_total"] :
        cleverPrices().dhtmlObject("prcgross_total").element ?
        cleverPrices().dhtmlObject("prcgross_total").readFrom().toInt() : null;
        //NEU
    cleverPrices().keyRef["totItlNet"] = cleverPrices().keyRef["itlnet_total"] ? cleverPrices().keyRef["itlnet_total"] :
        cleverPrices().dhtmlObject("itlnet_total").element ?
        cleverPrices().dhtmlObject("itlnet_total").readFrom().toInt() : null;
    cleverPrices().keyRef["totItlGross"] = cleverPrices().keyRef["itlgross_total"] ? cleverPrices().keyRef["itlgross_total"] :
        cleverPrices().dhtmlObject("itlgross_total").element ?
        cleverPrices().dhtmlObject("itlgross_total").readFrom().toInt() : null;
}

function result(){
    //totals
    if (cleverPrices().keyRef["prcnet_total"] != null){
        cleverPrices().dhtmlObject("prcnet_total").writeTo(getPriceFormat(cleverPrices().keyRef["prcnet_total"]));
    }
    if (cleverPrices().keyRef["prcvat_total"] != null){
        cleverPrices().dhtmlObject("prcvat_total").writeTo(getPriceFormat(cleverPrices().keyRef["prcvat_total"]));
    }
    if (cleverPrices().keyRef["prcgross_total"] != null){
        cleverPrices().dhtmlObject("prcgross_total").writeTo(getPriceFormat(cleverPrices().keyRef["prcgross_total"]));
    }
    //NEU
    if (cleverPrices().keyRef["itlgross_total"] != null){
        cleverPrices().dhtmlObject("itlgross_total").writeTo(getPriceFormat(cleverPrices().keyRef["itlgross_total"]));
        itlDisplayCheck();
    }
    if (cleverPrices().keyRef["itlnet_total"] != null){
        cleverPrices().dhtmlObject("itlnet_total").writeTo(getPriceFormat(cleverPrices().keyRef["itlnet_total"]));
        itlDisplayCheck();
    }
    
    //vat set net bases and subtotal lines
    for (vatSetId in cleverPrices().keyRef["vatSetId"]){
        if (cleverPrices().keyRef["prcnetBase_total_"+vatSetId] != null){
            cleverPrices().dhtmlObject("prcnetBase_total_"+vatSetId).writeTo(getPriceFormat(cleverPrices().keyRef["prcnetBase_total_"+vatSetId]));
        }
        if (cleverPrices().keyRef["prcnetPart_total_"+vatSetId] != null){
            cleverPrices().dhtmlObject("prcnetPart_total_"+vatSetId).writeTo(getPriceFormat(cleverPrices().keyRef["prcnetPart_total_"+vatSetId]));
        }
        if (cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] != null){
            cleverPrices().dhtmlObject("prcvatPart_vat_"+vatSetId).writeTo(getPriceFormat(cleverPrices().keyRef["prcvatPart_vat_"+vatSetId]));
        }    
        if (cleverPrices().keyRef["prcnetPart_total_"+vatSetId] != null){
            cleverPrices().dhtmlObject("prcnetPart_total_"+vatSetId).writeTo(getPriceFormat(cleverPrices().keyRef["prcnetPart_total_"+vatSetId]));
        }    
    }
}  

function itlDisplayCheck(){
          //hide itl if itl == prc (not understandable for customer)
        if (cleverPrices().dhtmlObject("itlgross_total").element != null
            && cleverPrices().dhtmlObject("prcgross_total").element != null){
            if (cleverPrices().dhtmlObject("itlgross_total").readFrom() == cleverPrices().dhtmlObject("prcgross_total").readFrom()){
                cleverPrices().dhtmlObject("itlgross_total").css.visibility = "hidden";
            } else {
                cleverPrices().dhtmlObject("itlgross_total").css.visibility = "visible";
            }
        }
        if (cleverPrices().dhtmlObject("itlnet_total").element != null
            && cleverPrices().dhtmlObject("prcnet_total").element != null){
            if (cleverPrices().dhtmlObject("itlnet_total").readFrom() == cleverPrices().dhtmlObject("prcnet_total").readFrom()){
                cleverPrices().dhtmlObject("itlnet_total").css.visibility = "hidden";
            } else {
                cleverPrices().dhtmlObject("itlnet_total").css.visibility = "visible";
            }
        }
}
                         
function add(itemStr){
    var vatSetId = itemStr.split("_")[1];
    cleverPrices().keyRef["vatSetId"][vatSetId] = true;
    GetCurrentPrices(itemStr);
    
    var listener = cleverPrices().dhtmlObject("listener_"+itemStr);
    //quantity setzen
    var quantity = cleverPrices().dhtmlObject("quantity_"+itemStr);
    if (listener.element != null && quantity.element != null){
        quantity.writeTo(listener.element.value);
    }
    var q = quantity.readFrom().toInt();
    
    //discount verhalten
    setDiscount(itemStr);
    
    var r = cleverPrices().keyRef;
    //price für itemquantity berechnen und schreiben (quantity alter feature)
    if (r["unitNet"] != null && r["prcNet"] != null){
        var prc = r["unitNet"] * q;
        cleverPrices().keyRef["prcnet_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcnet_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitVat"] != null && r["prcVat"] != null){
        var prc = r["unitVat"] * q;
        cleverPrices().keyRef["prcvat_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcvat_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitGross"] != null && r["prcGross"] != null){
        var prc = r["unitGross"] * q;
        cleverPrices().keyRef["prcgross_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcgross_" + itemStr).writeTo(getPriceFormat(prc));
    }
    //total berechnen und in reference ablegen (quantity alter feature)
    if (r["totNet"] != null && r["unitNet"] != null){
        var tot = r["totNet"] + (r["unitNet"] * q);
        cleverPrices().keyRef["prcnet_total"] = tot;
    }
    if (r["totVat"] != null && r["unitVat"] != null){
        var tot = r["totVat"] + (r["unitVat"] * q);
        cleverPrices().keyRef["prcvat_total"] = tot;
    }
    if (r["totGross"] != null && r["unitGross"] != null){
        var tot = r["totGross"] + (r["unitGross"] * q);
        cleverPrices().keyRef["prcgross_total"] = tot;
    }
    //relevante net base addieren  und in reference ablegen (quantity alter feature)
    if (r["netBase"] != null && r["unitNet"] != null){
        var c = r["netBase"] + (r["unitNet"] * q);
        cleverPrices().keyRef["prcnetBase_total_"+vatSetId] = c;
    }
    //relevantes subtotal addieren und in reference ablegen (quantity alter feature)
    if (r["subNet"] != null && r["unitNet"] != null ){
        var c = r["subNet"] + (r["unitNet"] * q);
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    if (r["subVat"] != null && r["unitVat"] != null ){
        var c = r["subVat"] + (r["unitVat"] * q);
        cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] = c;
    }
    if (r["subGross"] != null && r["unitGross"] != null ){
        var c = r["subGross"] + (r["unitGross"] * q);
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
     //price für itemquantity berechnen und schreiben (potential feature)
   if (r["unitNet"] != null && r["prcNet"] != null){
        var prc = r["unitNet"] * q;
        cleverPrices().keyRef["prcnet_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcnet_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitVat"] != null && r["prcVat"] != null){
        var prc = r["unitVat"] * q;
        cleverPrices().keyRef["prcvat_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcvat_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitGross"] != null && r["prcGross"] != null){
        var prc = r["unitGross"] * q;
        cleverPrices().keyRef["prcgross_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcgross_" + itemStr).writeTo(getPriceFormat(prc));
    }
    //total addieren und in reference ablegen (potential feature)
    if (r["totNet"] != null){
        if (r["redNet"] != null){
            cleverPrices().keyRef["prcnet_total"] = r["totNet"] + r["redNet"];
        }
        else if (r["unitPotNet"] != null){
            var c = r["totNet"] + r["unitPotNet"] * q;
            cleverPrices().keyRef["prcnet_total"] = c;
        }
        //NEU
        if (r["totItlNet"] != null){
            c = r["totItlNet"] + r["unitPotNet"] * q;
            cleverPrices().keyRef["itlnet_total"] = c;
        }
    }
    if (r["totVat"] != null){
        if (r["redVat"] != null){
            cleverPrices().keyRef["prcvat_total"] = r["totVat"] + r["redVat"];
        }
        else if (r["unitPotVat"] != null){
            var c = r["totVat"] + r["unitPotVat"] * q;
            cleverPrices().keyRef["prcvat_total"] = c;
        }
    }
    if (r["totGross"] != null){
        if (r["redGross"] != null){
            cleverPrices().keyRef["prcgross_total"] = r["totGross"] + r["redGross"];
        }
        else if (r["unitPotGross"] != null){
            var c = r["totGross"] + r["unitPotGross"] * q;
            cleverPrices().keyRef["prcgross_total"] = c;
        }
        //NEU
        if (r["totItlGross"] != null){
            c = r["totItlGross"] + r["unitPotGross"] * q;
            cleverPrices().keyRef["itlgross_total"] = c;
        }
    }
    //NEU
    if (r["totItlNet"] != null && r["itlNet"] != null){
        var c = r["totItlNet"] + r["itlNet"];
        cleverPrices().keyRef["itlnet_total"] = c;
    }
    if (r["totItlGross"] != null && r["itlGross"] != null){
        var c = r["totItlGross"] + r["itlGross"];
        cleverPrices().keyRef["itlgross_total"] = c;
    }
    //relevante net base addieren und in reference ablegen (potential feature)
    if (r["netBase"] != null && r["unitPotNet"] != null){
        var c = r["netBase"] + r["unitPotNet"] * q;
        cleverPrices().keyRef["prcnetBase_total_"+vatSetId] = c;
    }
    //relevantes subtotal addieren und in reference ablegen (potential feature)
    if (r["subNet"] != null  && r["unitPotNet"] != null ){
        var c = r["subNet"] + r["unitPotNet"] * q;
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    if (r["subVat"] != null && r["unitPotVat"] != null ){
        var c = r["subVat"] + r["unitPotVat"] * q;
        cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] = c;
    }
    if (r["subGross"] != null && r["unitPotGross"] != null ){
        var c = r["subGross"] + r["unitPotGross"] * q;
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }


}

function remove(itemStr){
    var vatSetId = itemStr.split("_")[1];
    cleverPrices().keyRef["vatSetId"][vatSetId] = true;
    
    GetCurrentPrices(itemStr);
    
    var listener = cleverPrices().dhtmlObject("listener_"+itemStr);
    //quantity setzen
    var quantity = cleverPrices().dhtmlObject("quantity_"+itemStr);

    var q = quantity.readFrom().toInt();
    //discount verhalten
    setDiscount(itemStr);
    
    var r = cleverPrices().keyRef;
    //price für itemquantity berechnen und schreiben (quantity alter feature)
    if (r["unitNet"] != null && r["prcNet"] != null){
        var prc = r["unitNet"] * q;
        cleverPrices().keyRef["prcnet_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcnet_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitVat"] != null && r["prcVat"] != null){
        var prc = r["unitVat"] * q;
        cleverPrices().keyRef["prcvat_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcvat_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitGross"] != null && r["prcGross"] != null){
        var prc = r["unitGross"] * q;
        cleverPrices().keyRef["prcgross_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcgross_" + itemStr).writeTo(getPriceFormat(prc));
    }
    //total berechnen und in reference ablegen (quantity alter feature)
    if (r["totNet"] != null && r["unitNet"] != null){
        var tot = r["totNet"] - (r["unitNet"] * q);
        cleverPrices().keyRef["prcnet_total"] = tot;
    }
    if (r["totVat"] != null && r["unitVat"] != null){
        var tot = r["totVat"] - (r["unitVat"] * q);
        cleverPrices().keyRef["prcvat_total"] = tot;
    }
    if (r["totGross"] != null && r["unitGross"] != null){
        var tot = r["totGross"] - (r["unitGross"] * q);
        cleverPrices().keyRef["prcgross_total"] = tot;
    }
    //relevante net base addieren  und in reference ablegen (quantity alter feature)
    if (r["netBase"] != null && r["unitNet"] != null){
        var c = r["netBase"] - (r["unitNet"] * q);
        cleverPrices().keyRef["prcnetBase_total_"+vatSetId] = c;
    }
    //relevantes subtotal addieren und in reference ablegen (quantity alter feature)
    if (r["subNet"] != null && r["unitNet"] != null ){
        var c = r["subNet"] - (r["unitNet"] * q);
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    if (r["subVat"] != null && r["unitVat"] != null ){
        var c = r["subVat"] - (r["unitVat"] * q);
        cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] = c;
    }
    if (r["subGross"] != null && r["unitGross"] != null ){
        var c = r["subGross"] - (r["unitGross"] * q);
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    //price für itemquantity berechnen und schreiben (potential feature)
    if (r["unitPotNet"] != null && r["prcNet"] != null){
        var prc = 0;
        cleverPrices().keyRef["prcnet_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcnet_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitPotVat"] != null && r["prcVat"] != null){
        var prc = 0;
        cleverPrices().keyRef["prcvat_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcvat_" + itemStr).writeTo(getPriceFormat(prc));
    }
    if (r["unitPotGross"] != null && r["prcGross"] != null){
        var prc = 0;
        cleverPrices().keyRef["prcgross_" + itemStr] = prc;
        cleverPrices().dhtmlObject("prcgross_" + itemStr).writeTo(getPriceFormat(prc));
    }
    //total addieren und in reference ablegen (potential feature)
    if (r["totNet"] != null){
        if(r["redNet"] != null){
            cleverPrices().keyRef["prcnet_total"] = r["totNet"] - r["redNet"];
        }    
        else if(r["unitPotNet"] != null){
            var c = r["totNet"] - r["unitPotNet"] * q;
            cleverPrices().keyRef["prcnet_total"] = c;
        }    
        if (r["totItlNet"] != null){
            c = r["totItlNet"] - r["unitPotNet"] * q;
            cleverPrices().keyRef["itlnet_total"] = c;
        }
    }
    if (r["totVat"] != null){
        if (r["redVat"] != null){
            cleverPrices().keyRef["prcvat_total"] = r["totVat"] - r["redVat"];
        }
        else if (r["unitPotVat"] != null){
            var c = r["totVat"] - r["unitPotVat"] * q;
            cleverPrices().keyRef["prcvat_total"] = c;
        }
    }
    if (r["totGross"] != null){
        if (r["redGross"] != null){
            cleverPrices().keyRef["prcgross_total"] = r["totGross"] - r["redGross"];
        }
        else if(r["unitPotGross"] != null){
            var c = r["totGross"] - r["unitPotGross"] * q;
            cleverPrices().keyRef["prcgross_total"] = c;
        }    
        if (r["totItlGross"] != null){
            c = r["totItlGross"] - r["unitPotGross"] * q;
            cleverPrices().keyRef["itlgross_total"] = c;
        }
    }
    //NEU
    if (r["totItlNet"] != null && r["itlNet"] != null){
        var c = r["totItlNet"] - r["itlNet"];
        cleverPrices().keyRef["itlnet_total"] = c;
    }
    if (r["totItlGross"] != null && r["itlGross"] != null){
        var c = r["totItlGross"] - r["itlGross"];
        cleverPrices().keyRef["itlgross_total"] = c;
    }
    //relevante net base addieren und in reference ablegen (potential feature)
    if (r["netBase"] != null && r["unitPotNet"] != null){
        var c = r["netBase"] - r["unitPotNet"] * q;
        cleverPrices().keyRef["prcnetBase_total_"+vatSetId] = c;
    }
    //relevantes subtotal addieren und in reference ablegen (potential feature)
    if (r["subNet"] != null && r["unitPotNet"] != null){
        var c = r["subNet"] - r["unitPotNet"] * q;
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    if (r["subVat"] != null && r["unitPotVat"] != null ){
        var c = r["subVat"] - r["unitPotVat"] * q;
        cleverPrices().keyRef["prcvatPart_vat_"+vatSetId] = c;
    }
    if (r["subGross"] != null && r["unitPotGross"] != null ){
        var c = r["subGross"] - r["unitPotGross"] * q;
        cleverPrices().keyRef["prcnetPart_total_"+vatSetId] = c;
    }
    
}



/******************************************************************************
							<script>	   			 		  	  						
******************************************************************************/
function cleverInit(){
	try{
        var t = new Date().valueOf();
		var tStr = "\nTime Mesaurements:\n-------------------------\n";		

		var tEN = cleverEnvironment().time.instance;
		tStr+= "cleverEnvironment: "+tEN+"\n";

		var tPH = new Date().valueOf();
	  	if (cleverEnvironment().client.ie5 || cleverEnvironment().client.ie6) {		
			var aImg = ["/images/blank.gif","/images/shade.gif"];
			var loader = new ImagePreloader(aImg,function(){
				if (document.getElementById){
					var a = document.getElementById("cleverSecurityVerification");
					var b = document.getElementById("cleverContent");
					var c = document.getElementById("cleverOrderSteps");
					if (a!=null){cleverPngHack(a)}
					if (b!=null){cleverPngHack(b)}
					if (c!=null){cleverPngHack(c)}
					//cleverPngHack();
				}
			});
		}
	  	tPH = new Date().valueOf() - tPH;
	  	tStr+= "PngHack: "+tPH+"\n";

		try{
	  		cleverAjax();
		} catch(e){cleverEnvironment().appendStatement("Ajax: "+e.message);}
		var tAJ = cleverEnvironment().time.cleverAjax;
		tStr+= "cleverAjax: "+tAJ+"\n";
		cleverAjax().popObject.addInfoCollection("webOrderProcessHelp");
		
	 	try {
			cleverForm();
		} catch(e){cleverEnvironment().appendStatement("Form: "+e.message);}
		tFO = cleverEnvironment().time.cleverForm;
		tStr+= "cleverForm: "+tFO+"\n";		
		
		try{
			cleverPrices();
		} catch(e){cleverEnvironment().appendStatement("Prices: "+e.message);}
		var tPR = cleverEnvironment().time.cleverPrices;
		tStr+= "cleverPrices: "+tPR+"\n";


		var tA = tEN+tPH+tAJ+tFO+tPR;
		tStr+= "-------------------------\nAll: "+tA+"\n";		
		cleverEnvironment().appendStatement(tStr);

		t = new Date().valueOf() - t;
		cleverEnvironment().appendStatement("But initializing: "+t);
		
		//bind bulk_278 physical delivery display event conditions
		var c = document.getElementById("cbPurchaseHasPhysicalDelivery");
	    var hasPD = c != null && c.value == "true" ? true : false;
	    var h = document.getElementById("cbHandlerIsCustomerStreet");
	    var e = document.getElementById("cbEventIsCustomer");
	    if (hasPD && h != null && e != null){
		    h.style.display = "block";
		    var o = cleverAjax().dhtmlObject(e.id);
		    o.addListener(new Listener("click", function(){
			    var s = document.getElementById("cbHandlerIsCustomerStreet");
			    s.style.display = "block";
		    }));
	    }

	} catch(e){
		alert(e.message+"\n\n\n");
	}
} 
DomLoaded.load(cleverInit);

/*IE (until 6 ?) PNG Hack*/
function cleverPngHack(obj){
	var obj = obj ? obj : document;
	try{		
		var tagsToHack = new Array('img','h1','input','span','div','h2','h2','a');
		for(var t=0;t<tagsToHack.length;t++){
			var tags = obj.getElementsByTagName(tagsToHack[t]);
			if(tagsToHack[t] == 'img'){
				for (var i=0;i<tags.length;i++){
					if(tags[i].src.indexOf(".png") > -1){
						var pngHolder = tags[i];
						var src = pngHolder.src;
						pngHolder.src = "/images/blank.gif";
							  //as IE treats height as min-height we can use 1px height if height is not set.
							  //pngHolder.style.width = pngHolder.currentStyle.width.indexOf("auto") > -1 ? "1px" :  pngHolder.currentStyle.width;
							  //pngHolder.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=crop sizingMethod=image src='"+src+"')";
						pngHolder.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true sizingMethod=image src='"+src+"')";
						//alert(pngHolder.style.filter);
					}
				}
			} else {
		  	  	for (var i=0;i<tags.length;i++){
					if(tags[i].currentStyle.backgroundImage.indexOf(".png") > -1){
						//alert(tags[i].nodeName+" "+tags[i].name+" "+tags[i].id);
						var pngHolder = tags[i];
						var src = ""+pngHolder.currentStyle.backgroundImage;
						src = src.replace(/url\(\"/, "");
						src = src.replace(/\"\)/, "");
							  //as IE treats height as min-height we can use 1px height if height is not set.
						//alert(pngHolder.currentStyle.height+" "+src);
						pngHolder.style.height = pngHolder.currentStyle.height.indexOf("auto") > -1 ? "1px" :  pngHolder.currentStyle.height;
						pngHolder.style.backgroundImage = 'url(/images/blank.gif)';
						pngHolder.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true sizingMethod=crop src='"+src+"')";			
					}
				}
			}
		}

	} catch(e){return true;}
}