element.phoneNumber.initPhoneNumberElement = function()

in javascript/ui/element/phonenumber.js [100:160]


element.phoneNumber.initPhoneNumberElement = function(opt_lookupTree,
    opt_countryId, opt_onEnter) {
  var self = this;
  var phoneNumberElement = element.phoneNumber.getPhoneNumberElement.call(this);
  var countrySelectorElement = element.phoneNumber.getCountrySelectorElement
      .call(this);
  var errorElement = element.phoneNumber.getPhoneNumberErrorElement.call(this);
  var lookupTree = opt_lookupTree || firebaseui.auth.data.country.LOOKUP_TREE;
  var availableCountries = lookupTree.getCountries();
  if (availableCountries.length == 0) {
    throw new Error('No available countries provided.');
  }
  // Selects the default country.
  element.phoneNumber.selectDefaultCountry_.call(
      self, lookupTree, opt_countryId);

  // Initialize the country selector button.
  element.listenForActionEvent(this, countrySelectorElement, function(e) {
    element.phoneNumber.handleCountrySelectorButtonClick_.call(
        self, lookupTree);
  });
  // Initialize the text input.
  element.listenForInputEvent(this, phoneNumberElement, function(e) {
    // Clear the error message.
    if (element.isShown(errorElement)) {
      element.setValid(phoneNumberElement, true);
      element.hide(errorElement);
    }
    // Get national number.
    var nationalNumber = goog.string.trim(
        element.getInputValue(phoneNumberElement) || '');
    // Get current country ID selected.
    var selectedCountry = firebaseui.auth.data.country.getCountryByKey(
        this.phoneNumberSelectedCountryId_);
    // Get matching countries if national number countains it.
    var countries = lookupTree.search(nationalNumber);
    var predefinedDefaultCountryAvailable =
        element.phoneNumber.isCountryAvailable_(
            element.phoneNumber.DEFAULT_COUNTRY_ID,
            availableCountries);
    // If country code provided with national number and it does not match the
    // selected one, update active selection.
    if (countries.length && countries[0].e164_cc != selectedCountry.e164_cc) {
      // Pick first one.
      var country = countries[0];
      element.phoneNumber.selectCountry.call(
          self,
          // For +1, use US as default.
          (country.e164_cc == '1' && predefinedDefaultCountryAvailable) ?
          element.phoneNumber.DEFAULT_COUNTRY_ID :
          country.e164_key,
          lookupTree);
    }
  });

  if (opt_onEnter) {
    element.listenForEnterEvent(this, phoneNumberElement, function(e) {
      opt_onEnter();
    });
  }
};