Your IP : 18.219.40.177


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.ConfirmBox.js

/**
 *  ConfirmBox module
 *  @param {object} window  global object
 *  @param {function} $ jQuery library
 *  @param {object} EventMgr EventMgr library
 *  @param {object} App Application
 *  @return {object} api
 */
/*global App:true*/
/*global EventMgr:true*/
/*global $:true*/
App.ConfirmBox = function(window, $, EventMgr, App) {
  'use strict';

  var callbackOk,
      callbackCancel,
      args,
      checkbox,
      //show ConfirmBox Flag
      modalActive = false,

      ACTIVE_CLASS = 'active-modal';
  //ConfirmBox selector
  function $confirmBox() {
    return App.u.selectorCache('#modal');
  }
  //ConfirmBox message selector
  function $confirmBoxMessage() {
    return App.u.selectorCache('#modal_message');
  }
  //ConfirmBok OK button selector
  function $confirmBoxOk() {
    return App.u.selectorCache('#modal_ok');
  }
  //ConfirmBox Cancel button selector
  function $confirmBoxCancel() {
    return App.u.selectorCache('#modal_cancel');
  }
  //ConfirmBox form area
  function $confirmBoxForm() {
    return App.u.selectorCache('#modal_form');
  }
  //BODY selector
  function $body() {
    return App.u.selectorCache('body');
  }
  //detect postion nearest trget elem
  function detectPosition(self) {
    var $self = $(self),
        PADDING = 10,
        CONFIRMBOXWIDTH = 420,
        offset = $self.offset(),
        selfHeight = $self.height(),
        $confimBoxLocal = $confirmBox(),
        confirmBoxHeight = $confimBoxLocal.height(),
        windowWidth = window.innerWidth,
        windowHeight = window.innerHeight,
        top = offset.top + selfHeight + PADDING,
        left = offset.left - 137,
        defTop = windowHeight / 2 - selfHeight / 2 ,
        defLeft = windowWidth / 2 - CONFIRMBOXWIDTH / 2;
    //check for bottom border
    if (top + confirmBoxHeight > windowHeight) {
      top = windowHeight - confirmBoxHeight - selfHeight - 2 * PADDING;
    } else if (top < 0) {
      top = 0 + PADDING;
    }
    //check for right border
    if (left + CONFIRMBOXWIDTH > windowWidth) {
      left = windowWidth - CONFIRMBOXWIDTH;
    } else if (left < 0) {
      left = 0 + PADDING;
    }
    if (defTop - top > 320 || defLeft - left > 320) {
        //set new position
       $confimBoxLocal.css({
          top: top,
          left: left,
          marginLeft: 0,
          marginTop: 0
       });
    }
  }
  //Show ConfirmBox
  function confirmBoxShow(e, data) {
    var text = data.text,
        self = data.self;
    checkbox = data.checkbox || null;
    callbackOk = data.callbackOk || null;
    callbackCancel = data.callbackCancel || null;
    args = data.args || [];
    $body().addClass(ACTIVE_CLASS);
    if (data.warning) {
      $confirmBox().addClass('modal-with-warning');
      text = pageInfo.messages.warning + "</br>" + text;
    }
    $confirmBoxMessage().html(window.filterXSS(text));
    if (checkbox) {
      $confirmBoxForm().html(templates.formItemCheckbox({
        id: 'confirmbox',
        name: 'confirmcheckbox',
        desc: checkbox.msg,
        value: 'off',
        attrInput: 'id="confirmcheckbox"',
        dependFields: 'b-checkbox__wrapper_for_confirmbox l-form__row_type_checkbox'
      }));
    } else {
      $confirmBoxForm().html('');
    }
    if (self) {
      detectPosition(self);
    }
    $confirmBox().show();
    modalActive = true;
  }
  //Reset confirmBox settings
  function resetSettings() {
    callbackCancel = null;
    callbackOk = null;
    modalActive = false;
    checkbox = null;
    $confirmBox().css({
       top: '',
       left: '',
       marginLeft: '',
       marginTop: ''
    });
    $confirmBox().removeClass('modal-with-warning');
 }
  //OK Handler
  function confirmOkHandler(e) {
    if (modalActive === true) {
      $body().removeClass(ACTIVE_CLASS);
      $confirmBox().hide();
      if (App.u.isFunction(callbackOk)) {
        callbackOk.apply(window, args);
      }
      if (checkbox && App.u.isFunction(checkbox.cb)) {
        checkbox.cb.apply(window, [$('#confirmcheckbox').val()]);
      }
      resetSettings();
    }
  }
  //Cancel Handler
  function confirmCancelHandler(e) {
    if (modalActive === true) {
      $body().removeClass(ACTIVE_CLASS);
      $confirmBox().hide();
      if (App.u.isFunction(callbackCancel)) {
        callbackCancel.apply(window, args);
      }
      $confirmBoxForm().html('');
      resetSettings();
      return true;
    }
  }

  function init() {
    EventMgr.bind('confirmBoxShow', confirmBoxShow);
    EventMgr.obind($confirmBoxOk(), 'click', confirmOkHandler);
    EventMgr.obind($confirmBoxCancel(), 'click', confirmCancelHandler);
   // EventMgr.bind('escKeyUp', confirmCancelHandler);
    EventMgr.addToTriggerStack('escKeyUp', confirmCancelHandler, 0);
    EventMgr.bind('enterKeyUp', confirmOkHandler);
  }

  var api = {
    init: init
  };

  return api;

} (window, $, EventMgr, App);