
var DialogFadeIn = 100;
var DialogFadeOut = 100;
var _DEBUG = 1;

function onFormSubmitAjax(form, opts)
{
   var confirm_msg = "";
   var confirm = false;

   if(opts === undefined) opts = {};

   if(opts.confirm !== undefined)
   {
      confirm_msg = opts.confirm;
      confirm = true;
   }

   var msg;
   // by default popup "Updating"
   if(opts.msg === undefined) {
      msg = "Updating";
   }
   else {
      msg = opts.msg;
   }

   $.xcore_onSuccess = opts.onSuccess;
   $.xcore_onError = opts.onError;

   if($.xcore_onError == null)

   ResetFormErrorMessages(form);

   if(confirm)
   {
      $('#blockUI_dialog_confirm_msg').html(confirm_msg);

      // set default button labels
      if($('#blockUI_dialog_confirm_button_yes').val() == '')
         $('#blockUI_dialog_confirm_button_yes').val('OK');
         
      if($('#blockUI_dialog_confirm_button_no').val() == '')
         $('#blockUI_dialog_confirm_button_no').val('Cancel');

      $.blockUI({
         message: $('#blockUI_dialog_confirm'),
         fadeIn:  DialogFadeIn,
         fadeOut: 0
      });

      $('#blockUI_dialog_confirm_button_yes').click(function() {
         SubmitAjax(form,msg);
         return;
      });

      $('#blockUI_dialog_confirm_button_no').click(function() {
         $.unblockUI({fadeOut: 0});
         return;
      });

      return;
   }

   SubmitAjax(form, msg, opts);
   return false; // !! otherwise it will submit
}

function SubmitAjax(form,msg,opts)
{
   var options =
   {
      // target:        '#output',   // target element(s) to be updated with server response
      success:       onAjaxSuccess,  // post-submit callback
      error:         onAjaxError,

      // $.ajax options can be used here too, for example:
      dataType: 'json',
      timeout:   30000 // 30 seconds
   };

   if(msg)
   {
       blockUIAndMessage(msg);
   }

   $('#'+form).ajaxForm();
   $('#'+form).ajaxSubmit(options);
}

function blockUIAndMessage(msg)
{
    $.blockUI({
        message: '<p><img src="../libs/images/busy.gif" />&nbsp;&nbsp;'+
            '<span style="position:relative;top:-3px;"><strong>'+
            msg+' ... </strong></span></p>',
        fadeIn:  DialogFadeIn,
        fadeOut: DialogFadeOut
    });
}


function onFormReset(form)
{
   $('#'+form).resetForm();

   ResetFormErrorMessages(form);
   return false; // !! otherwise it will submit
}

function ResetFormErrorMessages(form)
{
   // reset error messages on t_xxx elements
   $('#'+form).find('div').each(function(k,v)
   {
      if((/^t_/).test(v.id)) $('#'+v.id).html('');
   });
}

function onAjaxSuccess(responseData, statusText, xhr, form)
{
   $.blockUI.responseData = responseData;

   if(responseData.result) // success
   {
      if(responseData.onSuccessFunction !== undefined)
      {
         if(responseData.onSuccessParams !== undefined) {
            eval(responseData.onSuccessFunction+'('+responseData.onSuccessParams+');');
         }
         else {
            eval(responseData.onSuccessFunction+'();');
         }
      }

      if(responseData.redirect_url != "")
      {
         $(location).attr('href', responseData.redirect_url);
      }
      else
      {
         setTimeout($.unblockUI({fadeOut:DialogFadeOut}), 100);
      }
   }
   else // error
   {
      if(responseData.onError !== undefined)
      {
         if(responseData.onErrorParams !== undefined)
            responseData.onError(responseData.onErrorParams);
         else
            responseData.onError();
      }

      $('#blockUI_dialog_alert_msg').html(responseData.dialog_message);
      $('#blockUI_dialog_alert_button').val(responseData.dialog_button);

      // set error messages
      $.each(responseData, function(key,val)
      {
         if((/^id_/).test(key)) $('#'+key).html(val);
      });

      $.blockUI({
         message: $('#blockUI_dialog_alert'),
         fadeIn:  0,
         fadeOut: DialogFadeOut
      });
   }
}

function onAjaxError(event, XMLHttpRequest, ajaxOptions, thrownError)
{
   $.unblockUI();
   if(_DEBUG)
      alert(event+ajaxOptions+thrownError);
   else
      alert('*** INTERNAL ERROR *** ');
}

function onDocumentReady()
{
   // to be overriden
}

$(document).ready(function()
{
   $('#blockUI_dialog_alert_button').click(function()
   {
      $.unblockUI({fadeOut: DialogFadeOut});
      if($.unblockUI.redirect_url != "")
      {
         var url = $.unblockUI.redirect_url;
         $.unblockUI.redirect_url="";
         $(location).attr('href', url);
      }
      return false;
   });

   $('form').submit(function()
   {
      //return false;
   });

   $("table.TblBeeClass tr:visible:even",this).addClass("TblEvenRows");
   $("table.TblBeeClass tr:visible:odd",this).addClass("TblOddRows");

   /*
   if(jQuery().dropShadow)
   {
      $(".DropShadow").dropShadow();
   }
   */
   onDocumentReady();
});

