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.PrefixSelect.js

/**
 * Select Module
 *  @param {object} window  global object
 *  @param {function} $ jQuery library
 *  @param {object} EventMgr EventMgr library
 *  @param {object} App Application
 *  @return {object} api
 */
App.PrefixSelect = function(window, $, EventMgr, App) {
  'use strict';

  var CACHE = {},
      selectPrefixSelector = '.i-myselect_is_prefix',
      inputPrefixSelector = 'input.i-input_has_prefix',
      timeOutId;

  function $content() {
    return App.Common.selectorCache('.i-form-wr');
  }

  function inputPrefixHandlerWrapper(e) {
    var self = this;
    clearTimeout(timeOutId);
    timeOutId = setTimeout(function() {
       inputPrefixHandler(self);
    }, 300);
  }
  /**
   * Input prefix handler
   *
   **/
  function inputPrefixHandler(elem, isInit) {
    var value = elem.value,
        tabId = elem.getAttribute('data-tabid'),
        prefixSelectName = elem.getAttribute('data-prefix-name'),
        selectIndex = getSelectIndex(tabId, prefixSelectName),
        prevPrefix = elem.getAttribute('data-prefix'),
        findObject = findInSelect(value, selectIndex),
        selectElem;
    if (isInit) {
      selectElem = $('#' + tabId + '-' + prefixSelectName + ' li.selected')
        .trigger('click', [null, { isIgnore: true }]);
      var prefix = selectElem.attr('data-code');
      var mask = selectElem.attr('data-mask');
      //set data-prefix
      elem.setAttribute('data-prefix', prefix);
      //set data-mask
      if (mask) {
        elem.setAttribute('data-mask', mask);
        EventMgr.trigger('inputMaskChangeBySetvalues', { elem: elem, mask: mask, value: value });
      }
      return;
    }
    //set find prefix value
    if (findObject.isFind && prevPrefix !== findObject.prefix) {
      $($('#' + tabId + '-' + prefixSelectName + ' li[data-code="' + findObject.prefix + '"]:not(".selected")')[0])
        .trigger('click', [null, { isIgnore: true }]);
      //set data-prefix
      elem.setAttribute('data-prefix', findObject.prefix);
      if (findObject.mask) {
        elem.setAttribute('data-mask', findObject.mask);
        EventMgr.trigger('inputMaskChangeBySetvalues', { elem: elem, mask: findObject.mask, value: value });
      }
    }
  }
  //get cached index
  function getSelectIndex(tabId, name) {
    if (!CACHE[tabId]) {
      CACHE[tabId] = {};
    } else if (CACHE[tabId][name]) {
      return CACHE[tabId][name];
    }

    CACHE[tabId][name] = makeIndex(tabId, name);
    return CACHE[tabId][name];
  }
  //make select values index
  function makeIndex(tabId, name) {
    var items = $('#' + tabId + '-' + name + ' li'),
        l = items.length,
        index = {};
    while (l--) {
      index[items[l].getAttribute('data-code')] = { mask: items[l].getAttribute('data-mask')};
    }
    return index;
  }
  //find in select index
  function findInSelect(value, selectIndex) {
    var searchPrefix = String(value).replace(/\)/g, '').replace(/\(/g, '').replace(/\s/g, '');
    for (var i = 0, l = String(value).length; i < l; i++) {
      if (selectIndex[searchPrefix]) {
        return { isFind: true, prefix: searchPrefix, mask: selectIndex[searchPrefix].mask };
      }
      searchPrefix = searchPrefix.substring(0, searchPrefix.length - 1);
    }
    return { isFind: false };
  }
  //remove value ignore white spaces
  function removeIgnoreWhiteSpace(replacement, value) {
    var valueArr = String(value).split(''),
        replacementArr = String(replacement).split(''),
        replacementLength = replacementArr.length,
        ii = 0;
    for (var i = 0, l = valueArr.length; i < l; i++) {
      if (valueArr[i] !== ' ' &&
          valueArr[i] !== '(' &&
          valueArr[i] !== ')' &&
          valueArr[i] !== '_' &&
          valueArr[i] !== '-') {

        if (valueArr[i] === replacementArr[ii]) {
          ii++;
          valueArr[i] = '';
          if (replacementLength === ii) {
            break;
          }
        }
      } else {
        valueArr[i] = '';
      }
    }
    return valueArr.join('');
  }
  /**
   * Select prefix handler 
   *
   **/
  function prefixHandler(e, data, d) {
    if (d && d.isIgnore) {
      return;
    }
    var targetName = this.getAttribute('data-targetinput'),
        tabId = this.getAttribute('data-tabid'),
        $target = $('#' + targetName + '-' + tabId),
        targetPrefix = $target.attr('data-prefix'),
        key = this.value,
        value = $target.val(),
        $selectElem = $('#' + tabId + '-' + this.getAttribute('name') + ' li[data-val="' + key + '"]'),
        newPrefix = $selectElem.attr('data-code'),
        mask = $selectElem.attr('data-mask');
    //remove prev prefix
    value = removeIgnoreWhiteSpace(targetPrefix, value);
    //just insert to 1st position
    value = newPrefix + value;
    $target.val(value);
    if (mask) {
      EventMgr.trigger('inputMaskChangeBySetvalues', { elem: $target[0], mask: mask, value: value });
    }
    //set new prefix
    $target.attr('data-prefix', newPrefix);
  }

  function checkInitValue(e, data) {
    var tabId = data.tabId;
    $('#cont-' + tabId + ' .i-input_has_prefix').each(function() {
        inputPrefixHandler(this, true);
    });
  }

  function init() {
    EventMgr.on($content(), selectPrefixSelector, 'change', prefixHandler);
    EventMgr.on($content(), inputPrefixSelector, 'change', inputPrefixHandlerWrapper);
    EventMgr.on($content(), inputPrefixSelector, 'keyup', inputPrefixHandlerWrapper);
    EventMgr.bind('appendForm', checkInitValue);
  }

  var api = {
    init: init
  };

  return api;

} (window, $, EventMgr, App);