var ajax_actualrequests=[];
$(window).unload( function () {
 {
  ajaxrequest_abortall(); 
 }
});

function ajaxrequest_abortall()
{
 for(var i=0;i<ajax_actualrequests.length;i++)
 {
  var ax=ajax_actualrequests[i];	
  ax.abort(); 
 }
 ajax_actualrequests=[];
}

function ajaxrequest(data,jaxapars)
{
 if(typeof jaxapars=='undefined') var jaxapars={};
// var url=systemdata.http_path+'/'+systemdata.index_path+'/index.php'+'?command=ajaxrequest&sitemode=rawdata&ajaxrequest=1';
 var url=systemdata.http_path+'/'+systemdata.index_name+'?command=ajaxrequest&sitemode=rawdata&ajaxrequest=1';
 jaxapars.url=url;
 jaxapars.data=data;
 jaxapars.data['ajaxcontrol']=1;
 return ajaxrequest0(jaxapars);
}

function ajaxrequest0(params)
{
 var url         =getarraykey(params,'url');
 var method      =getarraykey(params,'method','POST'); 
 var async       =getarraykey(params,'async',true); // if async=false, ajax-call  wait until ready
 var cursor      =getarraykey(params,'cursor',false);
 var wait        =getarraykey(params,'wait',false);
 var javastat    =getarraykey(params,'javastat',false);
 var data        =getarraykey(params,'data',{});
 if(cursor) cursor_wait();
 if(wait)       java_wait_on(false);	
 if(javastat)   java_active_on();	
 var returndata=false;
 var axrq=$.ajax({ 
   type: method, 
   url: url, 
   data : data, 
   async : async,
   success: function(data, textStatus, jqXHR)
   { 
    if(cursor) cursor_clear();
    if(wait)   java_wait_off();
    if(javastat)   java_active_off();	
    returndata=ajax_request_ok(data,params);
   }, 
   error: function(jqXHR,textStatus, errorThrown)
   { 
    if(cursor) cursor_clear();
    if(wait)   java_wait_off();
    if(javastat)   java_active_off();	
	ajax_request_error(textStatus,params);
	returndata=false;
   },
   complete: function(jqXHR, textStatus)
   { 
    if(params.callbackallways) params.callbackallways(returndata,params);
    array_kill(ajax_actualrequests,axrq);
   } 
 });
 ajax_actualrequests.push(axrq);
 return returndata;
}

function ajax_request_ok(rawdata,params)
{
 var async=getarraykey(params,'async',true);  
 var loadmode=getarraykey(params,'loadmode');
 var rawdisp=getarraykey(params,'rawdisp');
 if(rawdisp=='message') alert(rawdata); 
 if(rawdisp=='params') print_data(params); 
 if(rawdisp=='window')  write_window(rawdata);
 var json=getarraykey(params,'json',1);
 if(json) var xdata=read_json(rawdata);
 if(!xdata) return ajax_request_error('no jsonformat',params,rawdata);
 if(xdata.error==true) return ajax_request_error(xdata.errtext+' '+xdata.command,params,rawdata,xdata);
 var data=xdata.data;
 ajax_request_handle(data,params);
 return data;
}

function ajax_request_error(textStatus,params,rawdata,xdata)
{
 var rawdisp=getarraykey(params,'rawdisp');
 if(rawdisp=='message') alert(textStatus);
 if(rawdisp=='window')  write_window(textStatus);
 if(params.callbackerror) params.callbackerror(textStatus,params,rawdata,xdata);
 params.callbackerror=false;
}

function ajax_request_handle(data,params)
{
 var destination =getarraykey(params,'destination');
 var loadmode    =getarraykey(params,'loadmode','destination');
 switch(loadmode)
 {
  case 'data'        : $.extend(destination,data); 
                       break;
  case 'destination' : //$(destination).empty(); 
                       $(destination).html(data); 
                       break;
  case 'setval'      : $(destination).val(data); 
                       break;
  case 'append'      : $(destination).append(data); 
                       break;
  case 'after'       : $(destination).after(data); 
                       break;
  case 'substitute'  : $(destination).after(data); 
	                   $(destination).remove(); 
				 	   break;
  case 'setattr'     : var attr =getarraykey(params,'attr'); 
	                   if(attr) $(destination).attr(attr,data); 
				 	   break;
  case 'message'     : myalert(data); break;
  case 'message_reload': 
                       myalert(data); 
					   myreload();
					   break;
  case 'addclass'    : $(destination).addClass(data);
 					   break; 
  case 'delclass'    : $(destination).removeClass(data);
 					   break; 
  case 'showmodal'   : $(data).modal();
 					   break; 
  case 'display'     : print_data(data); break;
  case 'window'      : write_window(data); break;
  case 'return'      : break; 
  case 'refreshelements': ajax_refresh_elements(data); 
					   break; 
  case 'callback'    : if(params.callback)  params.callback(data,params);
                       params.callback=false;
					   break; 
  case 'overlay'     : var ovparams=getarraykey(params,'ovparams',{});
                       ovparams.html=data;
                       js_overlay_on(ovparams);
 					   break; 
  case 'overlaypars' : js_overlay_on(data);
 					   break; 
  case 'seturl'      : seturl(data);
 					   break; 
  case 'location'    : var x=$(destination);
                       seturl(x);
 					   break; 
  case 'submit'      : myform_submit(destination);
 					   break; 
  case 'refreshlist' : refresh_list(data);
	                   break;
  case 'refreshitem' : refresh_item(data);
	                   break;
  case 'refreshitems': refresh_items(data);
	                   break;
  case 'click'       : $(destination).click();
 					   break; 
  case 'reload'      : myreload();
 					   break; 
  case 'showmodal'   : $(data).modal();
 					   break; 
  case 'closemodal'  : $.modal.close();
 					   break; 
  case 'evaldata'    : eval(data);
 					   break; 
  case 'evaldest'    : eval(destination);
 					   break; 

 }
 if(params.callbackafter)  params.callbackafter(data,params);
 params.callbackafter=false;
}

function ajax_refresh_call(subcommand,element)
{
 var data={'command':'refreshcall','subcommand':subcommand,'ajaxrequest':1};
 if(element) data.element=element;
 $('.hasrefreshcallactive').addClass('refreshcallactive');
 ajaxrequest(data,{loadmode:'callback',callback:ajax_refresh_call_callback,callbackerror: ajax_refresh_call_callbackerror});
}
function ajax_refresh_call_callback(data)
{
 ajax_refresh_elements(data);
 $('.hasrefreshcallactive').removeClass('refreshcallactive');
}
function ajax_refresh_call_callbackerror()
{
 $('.hasrefreshcallactive').removeClass('refreshcallactive');
}

function ajax_refresh_elements(data)
{
 if(!data) return;
 var refresh_html=data.refresh_html;
 if(refresh_html)
 for(var key in refresh_html)
 {
  $(key).html(refresh_html[key]);	 
 }

 var refresh_vals=data.refresh_vals;
 if(refresh_vals)
 for(var key in refresh_vals)
 {
  $(key).val(refresh_vals[key]);	 
 }

 var refresh_append=data.refresh_append;
 if(refresh_append)
 for(var key in refresh_append)
 {
  $(key).append(refresh_append[key]);	 
 }
 
 var play_sound=data.play_sound;
 if(play_sound)
 for(var key in play_sound)
 {
  dba_sound_start(play_sound[key]);
 }

 var image_data=data.image_data;
 if(image_data)
 for(var key in image_data)
 {
  $(key).attr('src',image_data[key]);	 
 }

 var refresh_data=data.refresh_data;
 if(refresh_data)
 for(var key in refresh_data)
 {
  var refdata=get_sysdata(key,{});
  $.extend(refdata,refresh_data[key]);	 
  set_sysdata(key,refdata);
 }
 var message_data=data.message_data;
 if(message_data)
 for(var key in message_data)
 {
  var message=message_data[key];	
  myalert(message);
 }
 var refresh_command=data.refresh_command;
 if(refresh_command)
 for(var key in refresh_command)
 {
  var refcommand=refresh_command[key];	 
  eval(refcommand);
 }
 
 var addclass=data.addclass;
 if(addclass)
 for(var key in addclass)
 {
  $(key).addClass(addclass[key]);	 
 }
 var delclass=data.delclass;
 if(delclass)
 for(var key in delclass)
 {
  $(key).removeClass(delclass[key]);	 
 }

 var seturl1=data.seturl;
 if(seturl1)
 for(var key in seturl1)
 {
  seturl(seturl1[key]);	 
 }
 
 var setfocus=data.setfocus;
 if(setfocus) $(setfocus).focus();	 
}


function execute_java(params)
{
 var url         =getarraykey(params,'url');
 var destination =getarraykey(params,'destination');
 var loadmode    =getarraykey(params,'loadmode','destination');
 var method      =getarraykey(params,'method','POST'); 
 var afterload   =getarraykey(params,'afterload',false);  params.afterload=false;
 var async       =getarraykey(params,'async',false);  
 var data        =getarraykey(params,'data',{});
 params.returndata=false;
 if(!async) cursor_wait();
 $.ajax({ 
   type: method, 
   url: url, 
   data : data, 
   async : async,
   success: function(data){ 
    switch(loadmode)
    {
     case 'data'        : $.extend(destination,data); break;
     case 'destination' : $(destination).empty(); 
                          $(destination).html(data); 
                          break;
     case 'append'      : $(destination).append(data); 
                          break;
     case 'after'       : $(destination).after(data); 
                          break;
     case 'substitute'  : $(destination).replaceWith(data); 
						  break;
     case 'message'     : alert(data); 
	                      break;
     case 'return'      : break; // nada
    }
    if(!async) cursor_clear(); 
    params.returndata=data;
    if(afterload)  afterload(params);
   }, 
   error: function(data){ 
    if(!async) cursor_clear(); 
    alert( "AJAX Error: " + data);
   } 
 });
}


function  call_overlay(command,params)
{
 if(typeof params=='undefined') params={};
 params.command=command;
 ajaxrequest(params,{loadmode:'overlaypars',rawdisp:'xxxmessage'});
}


function ajax_quickcall(data,ajaxparams)
{
 if(typeof data=='undefined')       data={};
 if(typeof ajaxparams=='undefined') ajaxparams={};
 ajaxparams.rawdisp='xxxmessage';
 ajaxrequest(data,ajaxparams);
}

function refresh_items(data)
{
 if(!data) return;
 for(var key in data) refresh_item(data[key]);
}

function refresh_item(item)
{
 var dest =getarraykey(item,'dest');
 switch(item.cmd)
 {
  case 'add': 
   $(dest).append(item.html);
   break;
  case 'delete': 
   $(dest).remove();
   break;
  case 'append': 
   $(dest).append(item.html);
   break;
  case 'substitute': 
   $(dest).replaceWith(item.html);
   break;
  case 'html': 
   $(dest).html(item.html);
   break;
 }
}


function refresh_listitems(data)
{
 if(!data) return;
 var parent=$(data.parent);
 for(var key in data.items)
 {
  var item=data.items[key];
  var dest =getarraykey(item,'dest');
  if(!dest) dest=$('#'+key,parent);
  switch(item.cmd)
  {
   case 'add': 
    $(parent).append(item.html);
    continue;
   case 'delete': 
    $(dest).remove();
    continue;
   case 'append': 
    $(dest).append(item.html);
    continue;
   case 'substitute': 
    $(dest).replaceWith(item.html);
    continue;
   case 'html': 
    $(dest).html(item.html);
    continue;
   }
 }
}


function refresh_list(list)
{
 for(var i=0;i<list.length;i++)
 {
  var command=list[i].command;
  if(!command) continue;
  var data=list[i].data;
  if(!data) continue;
  switch(command)
  {
   case 'refreshitems': 
    refresh_listitems(data);
    break;
  }
 }
}


var java_active_status=0;

function java_active_off()
{
 if(java_active_status) java_active_status=0;
 js_overlay_off();	
}

function java_active_on()
{
 if(java_active_status) return;
 java_active_status=1;
 params={};
 params.duration=2;
 var html='';
 html='<div align="center">'+html+'</div>';
 params.html=html;
 js_overlay_on(params);
}






