/* vim: set ts=2 sw=2 sts=2 et: */
/**
 * Common controller
 *
 * @category   X-Cart
 * @package    X-Cart
 * @subpackage JS Library
 * @author     Ruslan R. Fazlyev <rrf@x-cart.com>
 * @version    $Id: controller.js 103 2011-02-11 20:03:55Z max $
 * @link       http://www.x-cart.com/
 * @see        ____file_see____
 */

function xauthTogglePopup(link, mode)
{
  xauthLoadingChecker(true);

  return !popupOpen(
    'xauth_layer.php' + (mode ? '?mode=' + mode : ''),
    null,
    {
      width: 435,
      height: 285,
      closeOnEscape: true
    }
  );
}

function xauthLoadingChecker(reset)
{
  if (reset) {
    arguments.callee.counter = 0;
  }

  if (0 < jQuery('.xauth-popup-rpx iframe').length) {
    jQuery('.xauth-popup-rpx iframe').load(
      function() {
        jQuery('.xauth-bg-loading').remove();
      }
    );

  } else if (100 > arguments.callee.counter) {
      setTimeout(arguments.callee, 300);
      arguments.callee.counter++;
  }
}
xauthLoadingChecker.counter = 0;

function xauthOpenProductShare(button)
{
  var product = jQuery('h1').eq(0).html();
  var description = jQuery('.product-details .descr').html();

  if (!product) {
    return false;
  }

  product = xauthRPXEscape(product);

  RPXNOW.language_preference = xauth_rpx_language;
  RPXNOW.ssl = 'https' == xauth_http_protocol;

  RPXNOW.loadAndRun(
    ['Social'],
    function () {
      var activity = new RPXNOW.Social.Activity(
        lbl_xauth_rpx_share_comment,
        substitute(lbl_xauth_rpx_look_this_product, 'product', product),
        self.location + ''
      );

      activity.setTitle(lbl_xauth_rpx_share_comment);
      activity.setDescription(description ? xauthRPXEscape(description) : product);
      activity.addActionLink(product, self.location + '');

      var image = jQuery('#product_thumbnail');
      var images = jQuery('.dpimages-icons-box a');

      if (0 < image.length) {
        var imc = new RPXNOW.Social.ImageMediaCollection();

        imc.addImage(image.attr('src'), self.location + '');

        if (0 < images.length) {
          images.each(
            function() {
              var i = jQuery(this);
              imc.addImage(i.attr('href'), self.location + '');
            }
          );
        }

        activity.setMediaItem(imc);
      }

      RPXNOW.Social.publishActivity(
        activity,
        {
          urlShortening: true
        }
      );
    }
  );

  return true;
}

function xauthOpenCartItemShare(elm)
{
  var tbl = jQuery(elm).parents('table').eq(0);
  var product = jQuery('.details a', tbl).html();
  var description = jQuery('.details .descr', tbl).html();
  var url = jQuery('.details a', tbl).attr('href');

  if (!tbl.length || !product || !url) {
    return false;
  }

  if (url.search(/^\//) != -1) {
    url = 'http://' + xauth_current_host + url;

  } else if (url.search(/^https?:\/\//) == -1) {
    url = xauth_catalogs_customer + '/' + url;
  }

  product = xauthRPXEscape(product);

  RPXNOW.language_preference = xauth_rpx_language;
  RPXNOW.ssl = 'https' == xauth_http_protocol;

  RPXNOW.loadAndRun(
    ['Social'],
    function () {
      var activity = new RPXNOW.Social.Activity(
        lbl_xauth_rpx_share_comment,
        substitute(lbl_xauth_rpx_look_this_product, 'product', product),
        url
      );

      activity.setTitle(lbl_xauth_rpx_share_comment);
      activity.setDescription(description ? xauthRPXEscape(description) : product);
      activity.addActionLink(product, url);

      var image = jQuery('.image img', tbl);

      if (0 < image.length) {
        var imc = new RPXNOW.Social.ImageMediaCollection();
        imc.addImage(image.attr('src'), url);
        activity.setMediaItem(imc);
      }

      RPXNOW.Social.publishActivity(
        activity,
        {
          urlShortening: true
        }
      );
    }
  );

  return true;
}

function xauthOpenInvoiceShare(elm)
{
  RPXNOW.language_preference = xauth_rpx_language;
  RPXNOW.ssl = 'https' == xauth_http_protocol;

  RPXNOW.loadAndRun(
    ['Social'],
    function () {
      var activity = new RPXNOW.Social.Activity(
        lbl_xauth_rpx_share_comment,
        lbl_xauth_rpx_invoice_share_note,
        xauth_catalogs_customer
      );

      activity.setTitle(lbl_xauth_rpx_share_comment);

      RPXNOW.Social.publishActivity(
        activity,
        {
          urlShortening: true
        }
      );
    }
  );

  return true;
}

function xauthRPXEscape(str)
{
  str = str.replace(/<\/?[^>]+>/gi, '').substr(0, 1600);

  var len = str.length;
  var collect = '';
  var c, x;
  for (var i = 0; i < len; i++) {
    if (str.charCodeAt(i) <= 127) {
        collect += str.substr(i, 1);

    } else {
        c = str.charCodeAt(i).toString(16);
        for (x = c.length; x < 4; x++) {
          c = '0' + c;
        }
        collect += '\\u' + c;
    }
  }

  return collect;
}

setTimeout(
  function() {
    jQuery(document).ready(
      function() {
        if (jQuery('#dialog-message .xauth-err').length) {
          jQuery('#dialog-message').clearQueue();
        }

        jQuery('a,input,button').filter(
          function() {
            return 'undefined' != typeof(this.onclick)
              && this.onclick
              && this.onclick.toString().search(/popupOpen..login\.php../) != -1;
          }
        ).click(
          function() {
            xauthLoadingChecker(true);
          }
        );

        if ((self.location + '').search(/login.php/) != -1) {
          xauthLoadingChecker(true);
        }
      }
    );
  },
  500
);

