	 		//global ajaxCalls array which saves informations for each ajaxcall:
		 		// ajaxCalls[iceId]['waitstatus'] //for handling the waitingmessage effect:
		 																				//nowait -> no waitmessage shown
		 																				//busy ->  waitmessage effect is active -> we must wait
		 																				//ready -> waitmessage effect is ready => new content can be shown
		 		//ajaxCalls[iceId]['active'] // 0 or 1 -> We only make new Ajaxcall to server is active=0 (1 indicates that the ajaxcall for this iceId is not ready)
		 		//ajaxCalls[iceId]['dceId']	 // effecthandling: if a waitmessage should be shown this id is neccessary (dceId is foldout and the waitmessage is generated for the parentId of this dceId)

		 		var IMG_AJAX_LOADING = '/images/ajax_loading.gif';

	 		var ajaxCalls=new Array();
			function xajaxCall(iceId,params,displayWait,dceId) {
			 	if (loadedAll) {
				  if (danpfeAjaxDebug) alert('xajax Call iceId:'+iceId+' Params:'+params);
					if (params) {

					}
					if (!ajaxCalls[iceId]) {
	        	ajaxCalls[iceId]=new Array();
	        }
	        if (ajaxCalls[iceId]['active']==1)
	        	return;

	        ajaxCalls[iceId]['active']=1;
	        ajaxCalls[iceId]['waitstatus']='nowait';
	        if (displayWait && dceId) {
	        	ajaxCalls[iceId]['waitstatus']='busy';
	        	ajaxCalls[iceId]['dceId']=dceId;


	        	var myEffect = new fx.Height(dceId , {duration: 300, onComplete: function () {displayWaitInContainer(iceId)}});
	        	myEffect.toggle();
	        }
	        //Scroll to the contentid if given:
	        if (dceId) {
		       //var myScrollEffect = new fx.Scroll();
			     //myScrollEffect.scrollTo(dceId);
			    }

	        var arguments=new Array();
	        arguments[0]=iceId;
	        //if a form should be posted:
	        if (params.substring(0,5)=='POST:') {
	        	arguments[1]=xajax.getFormValues(params.substring(5));
					}
					else {
	        	arguments[1]=params;
	        }

	        // if new ID is given in params, replace page ID in xajaxRequestUri
	        var _a = arguments[1].toQueryParams();
	       	if (_a['id'] || _a['elname']) {
	       		var xajaxRequestUriParams = xajaxRequestUri.toQueryParams();

	       		if (_a['id']) xajaxRequestUriParams['id'] = _a['id'];
	       		if (_a['elname']) xajaxRequestUriParams['elname'] = _a['elname'];

	       		xajaxRequestUri = '/index.php?' + Hash.toQueryString( xajaxRequestUriParams );
	       	}

	        return xajax.call("handleXajaxRequest", arguments, 1, iceId);

	        // window.setTimeout("response('"+contentid+"')",5000);
	      }
			}






			function checkForAjax() {
				if(window.XMLHttpRequest)  {
				 // typeof XMLHttpRequest
				 return true;
				}
				else if (window.ActiveXObject) {
				 return true;
				}
				else {
				 return false;
				}
			}

      var loadControl=new Array();
      var loadControlLoops=0;
      var loadControlState=true;
      var loadedAll=false;


      //loads a JavaScript on Demand...
      // optional you can pass a functionname which is used to check if the script was loaded
      function loadJavaScript(file,checkvar) {
        if (checkvar != '') {
        	loadControl.push(checkvar);
        	loadControlState=false;
        }
        var head = document.getElementsByTagName("head")[0];
				script = document.createElement('script');
				script.type = 'text/javascript';
				script.src = file;
				head.appendChild(script)
    		//document.write('<script type="text/javascript" src="'+file+'" ></script>');
      }

      // check (500ms*100 => 50sec) if the loaded JavaScripts are ready
      // if they are ready the function calls start();

      function waitAndStart() {
      	var check=true;
      	for(i=0;i<loadControl.length;i++) {
					eval('if (!self.'+loadControl[i]+') check=false');
				}

      	if (check==false ) {
      		if (loadControlLoops<10) {
      			loadControlLoops++;
      			window.setTimeout('waitAndStart()','500');
      		}
      		else {
      			//load fails... :-(
      			if (danpfeAjaxDebug) alert('loading script fails!');
      		}
      	}
      	else {

      		start();
      	}
      }




      function start() {
	     	loadedAll=true;
	     	if (danpfeAjaxDebug) alert('all scripts loaded');
	     	substituteLinks();
	     	substituteReplaces();
      }





      function displayWaitInContainer(iceId) {
           if (ajaxCalls[iceId]['dceId']) {
             var waiter;
           	 contentid=ajaxCalls[iceId]['dceId'];
	       	   //if (!ajaxCalls[iceId]['waitmessage']) {
	       	     //first call for iceId=> create waiter div
		      	   waiter=document.createElement('div');
		      	   waiter.innerHTML='<div class="feajax-message"><div class="msg">ładowanie...</div><img src="'+IMG_AJAX_LOADING+'"></div>';
		      	   //waiter.setAttribute('class','feajax-message');
		      	   waiter.setAttribute('style','visibility:hidden;');
		      	   //waiter.id=iceId;
		      	   ajaxCalls[iceId]['waitmessage']=waiter;
		      	   contentidobj=$(contentid);
		      	   containerid=contentidobj.parentNode.id;
		      	   $(containerid).appendChild(waiter);
		    			//}
		    			//else {
		    			 //waiter=ajaxCalls[iceId]['waitmessage'];
		    			 //waiter.innerHTML='<div class="feajax-message"><div class="msg">ładowanie...</div><img src="/images/ajax_loading.gif"></div>';
		    			//}
	      	   var myEffect = new fx.Opacity(waiter , {duration: 200, onComplete: function() { ajaxCalls[iceId]['waitstatus']='ready'; }}); // alert('set to ready'+ajaxCalls[iceId]['waitstatus']);
	       	   myEffect.hide();
	       	   myEffect.toggle();

	       }
      }
      function finishAjaxRequest(iceId) {
        if (danpfeAjaxDebug) alert('xajax Call is ready for ICE:'+iceId+' waitstatus'+ajaxCalls[iceId]['waitstatus']);
      	if (ajaxCalls[iceId]['waitstatus']=='nowait') {
      	  ajaxCalls[iceId]['active']=0;
      	}
      	else {
      		 hideWaitAndShowCounter=0;
      		hideWaitAndShow(iceId);
      	}
      }

      // hides The waitmessage and after that shows the content again
      // (waits till effectstate is ready)
      var hideWaitAndShowCounter=0;
      function hideWaitAndShow(iceId) {
     	 //alert('testdamit warte '+ajaxCalls[iceId]['waitstatus']+'iceId'+iceId);

         if (ajaxCalls[iceId]['waitstatus']!='nowait') {

         		//we must wait for finishing effects...before Hiding the waitmessage again
	         if (ajaxCalls[iceId]['waitstatus']!='ready') {
	          hideWaitAndShowCounter++;
	          if (hideWaitAndShowCounter<5) {
	      	  	window.setTimeout(function () { hideWaitAndShow(iceId);} ,'500');
	      	  }
	      	  else {
	      	  	if (danpfeAjaxDebug) alert('error hideWaitAndShow');
	      	  }
	      	 }
	      	 else {
	      		ajaxCalls[iceId]['waitmessage'].innerHTML='<div class="feajax-message"><div class="msg">ładowanie zakończone</div></div>';
	      		 var myEffect = new fx.Opacity(ajaxCalls[iceId]['waitmessage'] , {duration: 200, onComplete:function () {foldDownContentForICE(iceId)}});
		       	 myEffect.toggle();
		       }
      	}
      }
      //Finishs the waitermessage effect and sets ajaxCalls[iceId]['active']=0
      function foldDownContentForICE(iceId) {
      	//	if (danpfeAjaxDebug) alert('foldDownContentForICE ICE:'+ajaxCalls[iceId]['dceId']);
     		 var myEffect = new fx.Height(ajaxCalls[iceId]['dceId'] , {duration: 400, onComplete: function () {  ajaxCalls[iceId]['active']=0; }});
      	 myEffect.toggle();

				ajaxCalls[iceId]['waitmessage'].remove();
      }




      function substituteLinks() {
      	if (danpfeAjaxDebug) alert('start   substituteLinks');
      	var a = document.getElementsByTagName("a");
				for (var i = 0; i < a.length; i++)
				{
					var o = a[i];


				//	var r = /ajaxsl-?(\w*)?/.exec(o.id); if (r)

					if (Element.hasClassName(o, 'ajaxsl')) //o.getAttribute('class',0)=='ajaxsl'
					{
						//if (r[1]) {
						//	var href=$(o.id).getAttribute('href',0);
							o.setAttribute('href','javascript: '+o.getAttribute('onclick',0));

						//	$(o.id).setAttribute('onclick','ajaxCall("'+r[1]+'","'+href+'")');
							  if (danpfeAjaxDebug) alert('ajaxsl simplelink substituted. Href set to # automatically'+o.getAttribute('href',0));
						//}
					}
				}
      }


      function substituteReplaces() {
      	var a = document.getElementsByTagName("*");
				for (var i = 0; i < a.length; i++)
				{
					var o = a[i];
					//if (o.id != '')
					//	alert(o.id);

					var r = /ajaxreplace-?(\w*)?/.exec(o.id);
					if (r)
					{
						if (r[1]) {
							var href=$(o.id).getAttribute('href',0);
							$(o.id).setAttribute('href','');
							$(o.id).setAttribute('onclick','xajaxCall("'+r[1]+'","'+href+'")');
						}
					}
				}
      }
      function isFunction(a)
			 {
			      return (typeof a == 'function');
			 }


    	function doEffect(effect,id) {
    		// var myEffect = new fx.Height(id , {duration: 500});
    		// var myEffect = new fx.Opacity('root' , {duration: 500});
    		// myEffect.custom(1, 0.5);
      	// myEffect.toggle();

    	}