function doCallback( cbFunc, cbData )
{
  if ( typeof cbFunc == 'function' )
  {
    if ( cbData )
    {
      cbFunc.call( this, cbData );
    }
    else
    {
      cbFunc.call( this );
    }
  }
}

function getComments( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var url;
    var boxId = params.boxId;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      if ( !params.objId )
      {
        throw 'Parameter objId is missing.';
      }

      if ( !params.objType )
      {
        throw 'Parameter objType is missing.';
      }

      var comment_guest = '';

      if ( params.comment_guest )
      {
        comment_guest = '/comment_guest:1';
      }

      url = '/callback/ajax/comments/obj_id:' + params.objId + '/obj_type:' + params.objType + '/interest:' + params.interest + '/ajax_id:' + boxId + comment_guest + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    if ( !params.formData )
    {
      jQuery.get( url,
             function( data ) {
               if ( data != '' )
               {
                  var box = jQuery( '#' + boxId );
                  var action_bar = box.parent().prev( '.action-bar' );
                  box.html( data ).show();
                  action_bar.find( 'li.action-bar-open' ).show();
                  action_bar.find( 'li a' ).removeClass( 'active' );
                  action_bar.find( 'li.comment-this a' ).addClass( 'active' );
               }

               doCallback( params.callback );
               hideAjaxLoader();
             }
      );
    }
    else
    {
      jQuery.post( url,
              params.formData,
              function( data ) {
                if ( data != '' )
                {
                  var box = jQuery( '#' + boxId );
                  var action_bar = box.parent().prev( '.action-bar' );
                  box.html( data ).show();
                  action_bar.find( 'li.action-bar-open' ).show();
                  action_bar.find( 'li a' ).removeClass( 'active' );
                  action_bar.find( 'li.comment-this a' ).addClass( 'active' );
                }

                doCallback( params.callback );
                hideAjaxLoader();
              }
      );
    }
/*
    jQuery.post(  url,
             function( data ) {
              var box = jQuery( '#' + boxId );
              box.html( '' )
                 .append( data )
                 .show();

              if ( data != '' )
              {
                var action_bar = box.parent().prev( '.action-bar' );
                action_bar.find( 'li.action-bar-open' ).show();
                action_bar.find( 'li a' ).removeClass( 'active' );
                action_bar.find( 'li.comment-this a' ).addClass( 'active' );
//                box.css( 'margin-bottom', '10px' );
              }
             }
          );
*/
  }
  catch ( e ) {
//    alert( e );
  }
}

function getBirthdays( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;


    var url = '/callback/ajax/next_birthdays/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getVisitors( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;


    var url = '/callback/ajax/profile_visits/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getObjectPhotos( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var url;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/object_photos/obj_id:' + params.objId + '/obj_type:' + params.objType + '/user_id:' + params.userId + '/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getObjectVideos( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var url;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/object_videos/obj_id:' + params.objId + '/obj_type:' + params.objType + '/user_id:' + params.userId + '/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getObjectParticipants( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var url;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/object_participants/obj_id:' + params.objId + '/obj_type:' + params.objType + '/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        box.html( data );
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getHypes( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var url;
    var boxId = params.boxId;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      if ( !params.objId )
      {
        throw 'Parameter objId is missing.';
      }

      if ( !params.objType )
      {
        throw 'Parameter objType is missing.';
      }

      url = '/callback/ajax/hypes/obj_id:' + params.objId + '/obj_type:' + params.objType + '/interest:' + params.interest + '/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );
        box.html( data ).slideDown( 1000 );

        if ( data != '' )
        {
          var action_bar = box.parent().prev( '.action-bar' );
          action_bar.find( 'li.action-bar-open' ).show();
          action_bar.find( 'li a' ).removeClass( 'active' );
          action_bar.find( 'li.hypes a' ).addClass( 'active' );
//          box.css( 'margin-bottom', '10px' );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getFriendsForEdit( params )
{
  showAjaxLoader();

  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var search = '';
    var url = '';

    if ( params.isSearch )
    {
      search = '/search:1';
    }

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/my/friends/edit/ajax_id:' + boxId + search + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    if ( !params.formData )
    {
      jQuery.get( url,
             function( data ) {
               if ( data != '' )
               {
                 jQuery( '#' + boxId ).html( data );
               }

               doCallback( params.callback );
               hideAjaxLoader();
             }
      );
    }
    else
    {
      jQuery.post( url,
              params.formData,
              function( data ) {
                if ( data != '' )
                {
                  jQuery( '#' + boxId ).html( data );
                }

                doCallback( params.callback );
                hideAjaxLoader();
              }
      );
    }
  }
  catch ( e ) {
    hideAjaxLoader();
//    alert( e );
  }
}

function getFan_ofForEdit( params )
{
  showAjaxLoader();

  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var search = '';
    var url = '';

    if ( params.isSearch )
    {
      search = '/search:1';
    }

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/my/fan_of/edit/ajax_id:' + boxId + search + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    if ( !params.formData )
    {
      jQuery.get( url,
             function( data ) {
               if ( data != '' )
               {
                 jQuery( '#' + boxId ).html( data );
               }

               doCallback( params.callback );
               hideAjaxLoader();
             }
      );
    }
    else
    {
      jQuery.post( url,
              params.formData,
              function( data ) {
                if ( data != '' )
                {
                  jQuery( '#' + boxId ).html( data );
                }

                doCallback( params.callback );
                hideAjaxLoader();
              }
      );
    }
  }
  catch ( e ) {
    hideAjaxLoader();
//    alert( e );
  }
}

function getWidgetForEdit( params )
{
  showAjaxLoader();

  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var search = '';
    var url = '';

    if ( params.isSearch )
    {
      search = '/search:1';
    }

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      url = '/callback/ajax/my/widget/edit/ajax_id:' + boxId + search + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    if ( !params.formData )
    {
      jQuery.get( url,
             function( data ) {
               if ( data != '' )
               {
                 jQuery( '#' + boxId ).html( data );
               }

               doCallback( params.callback );
               hideAjaxLoader();
             }
      );
    }
    else
    {
      jQuery.post( url,
              params.formData,
              function( data ) {
                if ( data != '' )
                {
                  jQuery( '#' + boxId ).html( data );
                }

                doCallback( params.callback );
                hideAjaxLoader();
              }
      );
    }
  }
  catch ( e ) {
    hideAjaxLoader();
//    alert( e );
  }
}

function getRecommend( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var url;
    var boxId = params.boxId;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      if ( !params.objId )
      {
        throw 'Parameter objId is missing.';
      }

      if ( !params.objType )
      {
        throw 'Parameter objType is missing.';
      }

      url = '/callback/ajax/recommend/obj_id:' + params.objId + '/obj_type:' + params.objType + '/interest:' + params.interest + '/ajax_id:' + boxId + '/item_id:' + params.itemId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(  url,
             function( data ) {
              var box = jQuery( '#' + boxId );
              box.html( '' )
                 .append( data )
                 .show();

              if ( data != '' )
              {
                var action_bar = box.parent().prev( '.action-bar' );
                action_bar.find( 'li.action-bar-open' ).show();
                action_bar.find( 'li a' ).removeClass( 'active' );
                action_bar.find( 'li.recomment-this a' ).addClass( 'active' );
//                box.css( 'margin-bottom', '10px' );
              }
             }
          );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getReport( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var url;
    var boxId = params.boxId;

    if ( params.url )
    {
      url = params.url;
    }
    else
    {
      if ( !params.objId )
      {
        throw 'Parameter objId is missing.';
      }

      if ( !params.objType )
      {
        throw 'Parameter objType is missing.';
      }

      url = '/callback/ajax/report/obj_id:' + params.objId + '/obj_type:' + params.objType + '/interest:' + params.interest + '/ajax_id:' + boxId + '/item_id:' + params.itemId + '?' + String( Math.floor( Math.random() * 100000 ) );
    }

    jQuery.post(  url,
             function( data ) {
              var box = jQuery( '#' + boxId );
              box.html( '' )
                 .append( data )
                 .show();

              if ( data != '' )
              {
                var action_bar = box.parent().prev( '.action-bar' );
                action_bar.find( 'li.action-bar-open' ).show();
                action_bar.find( 'li a' ).removeClass( 'active' );
                action_bar.find( 'li.report-this a' ).addClass( 'active' );
//                box.css( 'margin-bottom', '10px' );
              }
             }
          );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getCommunityNews( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var url = '/callback/ajax/community_news/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );

        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function getFBNews( params )
{
  try
  {
    if ( !params.boxId )
    {
      throw 'Parameter boxId is missing.';
    }

    var boxId = params.boxId;
    var url = '/callback/ajax/fb_news/ajax_id:' + boxId + '?' + String( Math.floor( Math.random() * 100000 ) );

    jQuery.post(
      url,
      function( data ) {
        var box = jQuery( '#' + boxId );

        if ( data )
        {
          box.html( data );
        }
      }
    );
  }
  catch ( e ) {
//    alert( e );
  }
}

function closeAjaxBox( boxId, duration )
{
  try
  {
    var box = jQuery( '#' + boxId );
    var action_bar = box.parent().prev( '.action-bar' );

    if ( !duration )
    {
      duration = 500;
    }

    box.fadeOut( duration );
    action_bar.find( 'li.action-bar-open' ).fadeOut( duration );
    action_bar.find( 'li a' ).removeClass( 'active' );
  }
  catch ( e ) {
//    alert( e );
  }
}

function __( str )
{
  if ( !str )
  {
    return '';
  }

  var result = '';
  str = String( str );

  if ( str.length > 0 )
  {
    result = str;

    jQuery.ajax( {
      url:      '/ajax/action/shared/translate',
      async:    false,
      type:     'post',
      data:     { str: str },
      success:  function( response )
                {
                  if ( response.success )
                  {
                    result = String( response.message );
                  }
                },
      dataType: 'json'
    } );
  }

  return result;
}

