var execution_stack=[];

var state={params:{command:'home'}};
execution_stack.push(state);



function execute_java(params)
{
 var url         =getarraykey(params,'url',sys_javavars['indexscript'],true);
 var sitemode    =getarraykey(params,'sitemode','command',true);
 var destination =getarraykey(params,'destination','#'+sitemode+'_destination',true);
 var loadmode    =getarraykey(params,'loadmode','destination',true);
 var method      =getarraykey(params,'method','POST'); 
 var afterload   =getarraykey(params,'afterload',false);  params.afterload=false;
 var async       =getarraykey(params,'async',false);  

 if(loadmode=='destination')
 {
  var state={params:params};
  execution_stack.push(state);
 }
 
 if(loadmode=='substitute')
 {
  var state=execution_stack.pop(); 
  state.params.requestparams=getarraykey(params,'requestparams',false);
  state.params.command      =getarraykey(params,'command');
  execution_stack.push(state);
 }
 
 params.post_data=myserialize(sys_javavars.post_data);
 // print_data(params);
 cursor_wait();
 switch(method)
 {
  case 'POSTPAR'  : var data=getarraykey(params,'requestparams');
                    method='POST';
					break;
  case 'GETPAR'   : var data=getarraykey(params,'requestparams');
                    method='GET';
					break;
  default         : var data=params;break;
 }
 $.ajax({ 
   type: method, 
   url: url, 
   data : data, 
   async : async,
   success: function(data){ 
    cursor_clear(); 
    switch(loadmode)
    {
     case 'data'        : $.extend(destination,data); break;
     case 'destination' : $(destination).empty(); 
                          $(destination).html(data); 
                          break;
     case 'substitute'  : var x=$(destination);
	                      $(x).after(data); 
	                      $(x).remove(); 
						  break;
     case 'message'     : alert(data); break;
     case 'return'      : break; // nada
    }
    params.returndata=data;
    if(afterload)  afterload(params);
   }, 
   error: function(data){ 
    cursor_clear(); 
    alert( "AJAX Error: " + data);
   } 
 });
}


function restore_stack(add_requestparams)
{
 var state=execution_stack.pop(); // actuell first
 if(!state) return;
 var state=execution_stack.pop(); // now last perfil
 if(!state) return;
 var params=state.params;
 if(typeof(add_requestparams)!='undefined')
 {
  var rq=getarraykey(params,'requestparams');
  if(rq) rq=myunserialize(rq); else rq={};
  rq=myextend(rq,add_requestparams);
  params.requestparams=myserialize(rq);
 }
 execute_java(params);
}

function restore_back()
{
 history.go(-1);
}


