Roo/bootstrap/PhoneInput.js
[roojs1] / Roo / bootstrap / PhoneInput.js
1 Roo.bootstrap.PhoneInput = function(config) {
2     Roo.bootstrap.PhoneInput.superclass.constructor.call(this, config);
3 };
4
5 Roo.extend(Roo.bootstrap.PhoneInput, Roo.bootstrap.TriggerField,  {
6         
7         triggerList : true,
8         
9         listWidth: undefined,
10         
11         selectedClass: 'active',
12         
13         dialCodeMapping: [],
14         
15         defaultCountry: 'hk',//
16         
17         preferedCountries: [],//
18         
19         getAutoCreate : function()
20         {
21             var align = this.labelAlign || this.parentLabelAlign();
22             var id = Roo.id();
23             
24             for (var i = 0; i < this.allCountries.length; i++) {
25               var c = this.allCountries[i];
26               this.allCountries[i] = {
27                 name: c[0],
28                 iso2: c[1],
29                 dialCode: c[2],
30                 priority: c[3] || 0,
31                 areaCodes: c[4] || null
32               };
33               this.dialCodeMapping[c[2]] = {
34                   name: c[0],
35                   iso2: c[1],
36                   priority: c[3] || 0,
37                   areaCodes: c[4] || null
38               };
39             }
40             
41             var cfg = {
42                 cls: 'form-group',
43                 cn: []
44             };
45             
46             var input =  {
47                 tag: 'input',
48                 id : id,
49                 type : 'number',
50                 cls : 'form-control tel-input',
51                 autocomplete: 'new-password'
52             };
53             
54             if (this.name) {
55                 input.name = this.name;
56             }
57             
58             if (this.disabled) {
59                 input.disabled = true;
60             }
61             
62             var flag_container = {
63                 tag: 'div',
64                 cls: 'flag-box',
65                 cn: [
66                     {
67                         tag: 'div',
68                         cls: 'flag'
69                     },
70                     {
71                         tag: 'div',
72                         cls: 'caret'
73                     }
74                 ]
75             };
76             
77             var box = {
78                 tag: 'div',
79                 cls: this.hasFeedback ? 'has-feedback' : '',
80                 cn: [
81                     input,
82                     {
83                         tag: 'input',
84                         cls: 'dial-code-holder',
85                         disabled: true
86                     }
87                 ]
88             };
89             
90             var container = {
91                 cls: 'roo-select2-container input-group',
92                 cn: [
93                     flag_container,
94                     box
95                 ]
96             };
97             
98             if (this.fieldLabel.length) {
99                 var indicator = {
100                     tag: 'i',
101                     tooltip: 'This field is required'
102                 };
103                 
104                 var label = {
105                     tag: 'label',
106                     'for':  id,
107                     cls: 'control-label',
108                     cn: []
109                 };
110                 
111                 var label_text = {
112                     tag: 'span',
113                     html: this.fieldLabel
114                 };
115                 
116                 indicator.cls = 'roo-required-indicator text-danger fa fa-lg fa-star left-indicator';
117                 label.cn = [
118                     indicator,
119                     label_text
120                 ];
121                 
122                 if(this.indicatorpos == 'right') {
123                     indicator.cls = 'roo-required-indicator text-danger fa fa-lg fa-star right-indicator';
124                     label.cn = [
125                         label_text,
126                         indicator
127                     ];
128                 }
129                 
130                 if(align == 'left') {
131                     container = {
132                         tag: 'div',
133                         cn: [
134                             container
135                         ]
136                     };
137                     
138                     if(this.labelWidth > 12){
139                         label.style = "width: " + this.labelWidth + 'px';
140                     }
141                     if(this.labelWidth < 13 && this.labelmd == 0){
142                         this.labelmd = this.labelWidth;
143                     }
144                     if(this.labellg > 0){
145                         label.cls += ' col-lg-' + this.labellg;
146                         input.cls += ' col-lg-' + (12 - this.labellg);
147                     }
148                     if(this.labelmd > 0){
149                         label.cls += ' col-md-' + this.labelmd;
150                         container.cls += ' col-md-' + (12 - this.labelmd);
151                     }
152                     if(this.labelsm > 0){
153                         label.cls += ' col-sm-' + this.labelsm;
154                         container.cls += ' col-sm-' + (12 - this.labelsm);
155                     }
156                     if(this.labelxs > 0){
157                         label.cls += ' col-xs-' + this.labelxs;
158                         container.cls += ' col-xs-' + (12 - this.labelxs);
159                     }
160                 }
161             }
162             
163             cfg.cn = [
164                 label,
165                 container
166             ];
167             
168             var settings = this;
169             
170             ['xs','sm','md','lg'].map(function(size){
171                 if (settings[size]) {
172                     cfg.cls += ' col-' + size + '-' + settings[size];
173                 }
174             });
175             
176             this.store = new Roo.data.Store({
177                 proxy : new Roo.data.MemoryProxy({}),
178                 reader : new Roo.data.JsonReader({
179                     fields : [
180                         {
181                             'name' : 'name',
182                             'type' : 'string'
183                         },
184                         {
185                             'name' : 'iso2',
186                             'type' : 'string'
187                         },
188                         {
189                             'name' : 'dialCode',
190                             'type' : 'string'
191                         },
192                         {
193                             'name' : 'priority',
194                             'type' : 'string'
195                         },
196                         {
197                             'name' : 'areaCodes',
198                             'type' : 'string'
199                         }
200                     ]
201                 })
202             });
203             
204             this.store.proxy.data = {
205                 success: true,
206                 data: this.allCountries
207             };
208             
209             return cfg;
210         },
211         
212         initEvents : function()
213         {
214             this.createList();
215             Roo.bootstrap.PhoneInput.superclass.initEvents.call(this);
216             
217             this.indicator = this.indicatorEl();
218             this.flag = this.flagEl();
219             this.dialCodeHolder = this.dialCodeHolderEl();
220             
221             this.trigger = this.el.select('div.flag-box',true).first();
222             this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
223             
224             var _this = this;
225             
226             (function(){
227                 var lw = _this.listWidth || Math.max(_this.inputEl().getWidth(), _this.minListWidth);
228                 _this.list.setWidth(lw);
229             }).defer(100);
230             
231             this.list.on('mouseover', this.onViewOver, this);
232             this.list.on('mousemove', this.onViewMove, this);
233             //this.list.on('scroll', this.onViewScroll, this);
234             
235             this.tpl = '<li><a href="#"><div class="flag {iso2}"></div>{name} <span class="dial-code">+{dialCode}</span></a></li>';
236
237             this.view = new Roo.View(this.list, this.tpl, {
238                 singleSelect:true, store: this.store, selectedClass: this.selectedClass
239             });
240             
241             this.view.on('click', this.onViewClick, this);
242             //this.select(default country)
243             
244         },
245         
246         onTriggerClick : function(e)
247         {
248             Roo.log('trigger click');
249             if(this.disabled || !this.triggerList){
250                 return;
251             }
252             
253             if(this.isExpanded()){
254                 this.collapse();
255                 this.hasFocus = false;
256             }else {
257                 this.store.load({});
258                 this.hasFocus = true;
259                 this.expand();
260             }
261         },
262         
263         isExpanded : function()
264         {
265             return this.list.isVisible();
266         },
267         
268         collapse : function()
269         {
270             if(!this.isExpanded()){
271                 return;
272             }
273             this.list.hide();
274             Roo.get(document).un('mousedown', this.collapseIf, this);
275             Roo.get(document).un('mousewheel', this.collapseIf, this);
276             this.fireEvent('collapse', this);
277             this.validate();
278         },
279         
280         expand : function()
281         {
282             Roo.log('expand');
283
284             if(this.isExpanded() || !this.hasFocus){
285                 return;
286             }
287             
288             var lw = this.listWidth || Math.max(this.inputEl().getWidth(), this.minListWidth);
289             this.list.setWidth(lw);
290             
291             this.list.show();
292             this.restrictHeight();
293             
294             Roo.get(document).on('mousedown', this.collapseIf, this);
295             Roo.get(document).on('mousewheel', this.collapseIf, this);
296             
297             this.fireEvent('expand', this);
298         },
299         
300         restrictHeight : function()
301         {
302             this.list.alignTo(this.inputEl(), this.listAlign);
303             this.list.alignTo(this.inputEl(), this.listAlign);
304         },
305         
306         onViewOver : function(e, t)
307         {
308             if(this.inKeyMode){
309                 return;
310             }
311             var item = this.view.findItemFromChild(t);
312             
313             if(item){
314                 var index = this.view.indexOf(item);
315                 this.select(index, false);
316             }
317         },
318
319         // private
320         onViewClick : function(view, doFocus, el, e)
321         {
322             var index = this.view.getSelectedIndexes()[0];
323             
324             var r = this.store.getAt(index);
325             
326             if(r){
327                 this.onSelect(r, index);
328             }
329             if(doFocus !== false && !this.blockFocus){
330                 this.inputEl().focus();
331             }
332         },
333         
334         onViewMove : function(e, t)
335         {
336             this.inKeyMode = false;
337         },
338         
339         select : function(index, scrollIntoView)
340         {
341             Roo.log(index);
342             Roo.log(scrollIntoView);
343             
344             this.selectedIndex = index;
345             this.view.select(index);
346             if(scrollIntoView !== false){
347                 var el = this.view.getNode(index);
348                 if(el){
349                     this.list.scrollChildIntoView(el, false);
350                 }
351             }
352         },
353         
354         createList : function()
355         {
356             this.list = Roo.get(document.body).createChild({
357                 tag: 'ul',
358                 cls: 'typeahead typeahead-long dropdown-menu tel-list',
359                 style: 'display:none'
360             });
361             this.list.setVisibilityMode(Roo.Element.DISPLAY).originalDisplay = 'block';;
362         },
363         
364         collapseIf : function(e)
365         {
366             var in_combo  = e.within(this.el);
367             var in_list =  e.within(this.list);
368             var is_list = (Roo.get(e.getTarget()).id == this.list.id) ? true : false;
369             
370             if (in_combo || in_list || is_list) {
371                 return;
372             }
373             this.collapse();
374         },
375         
376         onSelect : function(record, index)
377         {
378             if(this.fireEvent('beforeselect', this, record, index) !== false){
379                 
380                 this.setFlagClass(record.data.iso2);
381                 this.setDialCode(record.data.dialCode);
382                 this.hasFocus = false;
383                 this.collapse();
384                 this.fireEvent('select', this, record, index);
385             }
386         },
387         
388         flagEl : function()
389         {
390             var flag = this.el.select('div.flag',true).first();
391             if(!flag){
392                 return false;
393             }
394             return flag;
395         },
396         
397         dialCodeHolderEl : function()
398         {
399             var d = this.el.select('input.dial-code-holder',true).first();
400             if(!d){
401                 return false;
402             }
403             return d;
404         },
405         
406         setDialCode : function(v)
407         {
408             this.dialCodeHolder.dom.value = '+'+v;
409         },
410         
411         setFlagClass : function(n)
412         {
413             this.flag.dom.className = 'flag '+n;
414         },
415         
416         getValue : function()
417         {
418             var v = this.inputEl().getValue();
419             if(this.dialCodeHolder) {
420                 v = this.dialCodeHolder.dom.value+this.inputEl().getValue();
421             }
422             return v;
423         },
424         
425         setValue : function(v)
426         {
427             var d = this.getDialCode(v);
428             this.value = v;
429             
430             if(!d || d.length == 0) {
431                 if(this.rendered){
432                     this.inputEl().dom.value = (v === null || v === undefined ? '' : v);
433                 }
434                 return;
435             }
436             
437             this.setFlagClass(this.dialCodeMapping[d].iso2);
438             this.setDialCode(d);
439             this.inputEl().dom.value = v.replace('+'+d,'');
440         },
441         
442         getDialCode : function(v = '')
443         {
444             if (v.length == 0) {
445                 return this.dialCodeHolder.dom.value;
446             }
447             
448             var dialCode = "";
449             // only interested in international numbers (starting with a plus)
450             if (v.charAt(0) != "+") {
451                 return false;
452             }
453             var numericChars = "";
454             for (var i = 1; i < v.length; i++) {
455               var c = v.charAt(i);
456               if (!isNaN(c)) {
457                 numericChars += c;
458                 if (this.dialCodeMapping[numericChars]) {
459                   dialCode = v.substr(1, i);
460                 }
461                 if (numericChars.length == 4) {
462                   break;
463                 }
464               }
465             }
466             return dialCode;
467         },
468         
469         validate : function()
470         {
471             //
472             return false;
473         },
474         
475         allCountries : [
476           [
477             "Afghanistan (‫افغانستان‬‎)",
478             "af",
479             "93"
480           ],
481           [
482             "Albania (Shqipëri)",
483             "al",
484             "355"
485           ],
486           [
487             "Algeria (‫الجزائر‬‎)",
488             "dz",
489             "213"
490           ],
491           [
492             "American Samoa",
493             "as",
494             "1684"
495           ],
496           [
497             "Andorra",
498             "ad",
499             "376"
500           ],
501           [
502             "Angola",
503             "ao",
504             "244"
505           ],
506           [
507             "Anguilla",
508             "ai",
509             "1264"
510           ],
511           [
512             "Antigua and Barbuda",
513             "ag",
514             "1268"
515           ],
516           [
517             "Argentina",
518             "ar",
519             "54"
520           ],
521           [
522             "Armenia (Հայաստան)",
523             "am",
524             "374"
525           ],
526           [
527             "Aruba",
528             "aw",
529             "297"
530           ],
531           [
532             "Australia",
533             "au",
534             "61",
535             0
536           ],
537           [
538             "Austria (Österreich)",
539             "at",
540             "43"
541           ],
542           [
543             "Azerbaijan (Azərbaycan)",
544             "az",
545             "994"
546           ],
547           [
548             "Bahamas",
549             "bs",
550             "1242"
551           ],
552           [
553             "Bahrain (‫البحرين‬‎)",
554             "bh",
555             "973"
556           ],
557           [
558             "Bangladesh (বাংলাদেশ)",
559             "bd",
560             "880"
561           ],
562           [
563             "Barbados",
564             "bb",
565             "1246"
566           ],
567           [
568             "Belarus (Беларусь)",
569             "by",
570             "375"
571           ],
572           [
573             "Belgium (België)",
574             "be",
575             "32"
576           ],
577           [
578             "Belize",
579             "bz",
580             "501"
581           ],
582           [
583             "Benin (Bénin)",
584             "bj",
585             "229"
586           ],
587           [
588             "Bermuda",
589             "bm",
590             "1441"
591           ],
592           [
593             "Bhutan (འབྲུག)",
594             "bt",
595             "975"
596           ],
597           [
598             "Bolivia",
599             "bo",
600             "591"
601           ],
602           [
603             "Bosnia and Herzegovina (Босна и Херцеговина)",
604             "ba",
605             "387"
606           ],
607           [
608             "Botswana",
609             "bw",
610             "267"
611           ],
612           [
613             "Brazil (Brasil)",
614             "br",
615             "55"
616           ],
617           [
618             "British Indian Ocean Territory",
619             "io",
620             "246"
621           ],
622           [
623             "British Virgin Islands",
624             "vg",
625             "1284"
626           ],
627           [
628             "Brunei",
629             "bn",
630             "673"
631           ],
632           [
633             "Bulgaria (България)",
634             "bg",
635             "359"
636           ],
637           [
638             "Burkina Faso",
639             "bf",
640             "226"
641           ],
642           [
643             "Burundi (Uburundi)",
644             "bi",
645             "257"
646           ],
647           [
648             "Cambodia (កម្ពុជា)",
649             "kh",
650             "855"
651           ],
652           [
653             "Cameroon (Cameroun)",
654             "cm",
655             "237"
656           ],
657           [
658             "Canada",
659             "ca",
660             "1",
661             1,
662             ["204", "226", "236", "249", "250", "289", "306", "343", "365", "387", "403", "416", "418", "431", "437", "438", "450", "506", "514", "519", "548", "579", "581", "587", "604", "613", "639", "647", "672", "705", "709", "742", "778", "780", "782", "807", "819", "825", "867", "873", "902", "905"]
663           ],
664           [
665             "Cape Verde (Kabu Verdi)",
666             "cv",
667             "238"
668           ],
669           [
670             "Caribbean Netherlands",
671             "bq",
672             "599",
673             1
674           ],
675           [
676             "Cayman Islands",
677             "ky",
678             "1345"
679           ],
680           [
681             "Central African Republic (République centrafricaine)",
682             "cf",
683             "236"
684           ],
685           [
686             "Chad (Tchad)",
687             "td",
688             "235"
689           ],
690           [
691             "Chile",
692             "cl",
693             "56"
694           ],
695           [
696             "China (中国)",
697             "cn",
698             "86"
699           ],
700           [
701             "Christmas Island",
702             "cx",
703             "61",
704             2
705           ],
706           [
707             "Cocos (Keeling) Islands",
708             "cc",
709             "61",
710             1
711           ],
712           [
713             "Colombia",
714             "co",
715             "57"
716           ],
717           [
718             "Comoros (‫جزر القمر‬‎)",
719             "km",
720             "269"
721           ],
722           [
723             "Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)",
724             "cd",
725             "243"
726           ],
727           [
728             "Congo (Republic) (Congo-Brazzaville)",
729             "cg",
730             "242"
731           ],
732           [
733             "Cook Islands",
734             "ck",
735             "682"
736           ],
737           [
738             "Costa Rica",
739             "cr",
740             "506"
741           ],
742           [
743             "Côte d’Ivoire",
744             "ci",
745             "225"
746           ],
747           [
748             "Croatia (Hrvatska)",
749             "hr",
750             "385"
751           ],
752           [
753             "Cuba",
754             "cu",
755             "53"
756           ],
757           [
758             "Curaçao",
759             "cw",
760             "599",
761             0
762           ],
763           [
764             "Cyprus (Κύπρος)",
765             "cy",
766             "357"
767           ],
768           [
769             "Czech Republic (Česká republika)",
770             "cz",
771             "420"
772           ],
773           [
774             "Denmark (Danmark)",
775             "dk",
776             "45"
777           ],
778           [
779             "Djibouti",
780             "dj",
781             "253"
782           ],
783           [
784             "Dominica",
785             "dm",
786             "1767"
787           ],
788           [
789             "Dominican Republic (República Dominicana)",
790             "do",
791             "1",
792             2,
793             ["809", "829", "849"]
794           ],
795           [
796             "Ecuador",
797             "ec",
798             "593"
799           ],
800           [
801             "Egypt (‫مصر‬‎)",
802             "eg",
803             "20"
804           ],
805           [
806             "El Salvador",
807             "sv",
808             "503"
809           ],
810           [
811             "Equatorial Guinea (Guinea Ecuatorial)",
812             "gq",
813             "240"
814           ],
815           [
816             "Eritrea",
817             "er",
818             "291"
819           ],
820           [
821             "Estonia (Eesti)",
822             "ee",
823             "372"
824           ],
825           [
826             "Ethiopia",
827             "et",
828             "251"
829           ],
830           [
831             "Falkland Islands (Islas Malvinas)",
832             "fk",
833             "500"
834           ],
835           [
836             "Faroe Islands (Føroyar)",
837             "fo",
838             "298"
839           ],
840           [
841             "Fiji",
842             "fj",
843             "679"
844           ],
845           [
846             "Finland (Suomi)",
847             "fi",
848             "358",
849             0
850           ],
851           [
852             "France",
853             "fr",
854             "33"
855           ],
856           [
857             "French Guiana (Guyane française)",
858             "gf",
859             "594"
860           ],
861           [
862             "French Polynesia (Polynésie française)",
863             "pf",
864             "689"
865           ],
866           [
867             "Gabon",
868             "ga",
869             "241"
870           ],
871           [
872             "Gambia",
873             "gm",
874             "220"
875           ],
876           [
877             "Georgia (საქართველო)",
878             "ge",
879             "995"
880           ],
881           [
882             "Germany (Deutschland)",
883             "de",
884             "49"
885           ],
886           [
887             "Ghana (Gaana)",
888             "gh",
889             "233"
890           ],
891           [
892             "Gibraltar",
893             "gi",
894             "350"
895           ],
896           [
897             "Greece (Ελλάδα)",
898             "gr",
899             "30"
900           ],
901           [
902             "Greenland (Kalaallit Nunaat)",
903             "gl",
904             "299"
905           ],
906           [
907             "Grenada",
908             "gd",
909             "1473"
910           ],
911           [
912             "Guadeloupe",
913             "gp",
914             "590",
915             0
916           ],
917           [
918             "Guam",
919             "gu",
920             "1671"
921           ],
922           [
923             "Guatemala",
924             "gt",
925             "502"
926           ],
927           [
928             "Guernsey",
929             "gg",
930             "44",
931             1
932           ],
933           [
934             "Guinea (Guinée)",
935             "gn",
936             "224"
937           ],
938           [
939             "Guinea-Bissau (Guiné Bissau)",
940             "gw",
941             "245"
942           ],
943           [
944             "Guyana",
945             "gy",
946             "592"
947           ],
948           [
949             "Haiti",
950             "ht",
951             "509"
952           ],
953           [
954             "Honduras",
955             "hn",
956             "504"
957           ],
958           [
959             "Hong Kong (香港)",
960             "hk",
961             "852"
962           ],
963           [
964             "Hungary (Magyarország)",
965             "hu",
966             "36"
967           ],
968           [
969             "Iceland (Ísland)",
970             "is",
971             "354"
972           ],
973           [
974             "India (भारत)",
975             "in",
976             "91"
977           ],
978           [
979             "Indonesia",
980             "id",
981             "62"
982           ],
983           [
984             "Iran (‫ایران‬‎)",
985             "ir",
986             "98"
987           ],
988           [
989             "Iraq (‫العراق‬‎)",
990             "iq",
991             "964"
992           ],
993           [
994             "Ireland",
995             "ie",
996             "353"
997           ],
998           [
999             "Isle of Man",
1000             "im",
1001             "44",
1002             2
1003           ],
1004           [
1005             "Israel (‫ישראל‬‎)",
1006             "il",
1007             "972"
1008           ],
1009           [
1010             "Italy (Italia)",
1011             "it",
1012             "39",
1013             0
1014           ],
1015           [
1016             "Jamaica",
1017             "jm",
1018             "1876"
1019           ],
1020           [
1021             "Japan (日本)",
1022             "jp",
1023             "81"
1024           ],
1025           [
1026             "Jersey",
1027             "je",
1028             "44",
1029             3
1030           ],
1031           [
1032             "Jordan (‫الأردن‬‎)",
1033             "jo",
1034             "962"
1035           ],
1036           [
1037             "Kazakhstan (Казахстан)",
1038             "kz",
1039             "7",
1040             1
1041           ],
1042           [
1043             "Kenya",
1044             "ke",
1045             "254"
1046           ],
1047           [
1048             "Kiribati",
1049             "ki",
1050             "686"
1051           ],
1052           [
1053             "Kosovo",
1054             "xk",
1055             "383"
1056           ],
1057           [
1058             "Kuwait (‫الكويت‬‎)",
1059             "kw",
1060             "965"
1061           ],
1062           [
1063             "Kyrgyzstan (Кыргызстан)",
1064             "kg",
1065             "996"
1066           ],
1067           [
1068             "Laos (ລາວ)",
1069             "la",
1070             "856"
1071           ],
1072           [
1073             "Latvia (Latvija)",
1074             "lv",
1075             "371"
1076           ],
1077           [
1078             "Lebanon (‫لبنان‬‎)",
1079             "lb",
1080             "961"
1081           ],
1082           [
1083             "Lesotho",
1084             "ls",
1085             "266"
1086           ],
1087           [
1088             "Liberia",
1089             "lr",
1090             "231"
1091           ],
1092           [
1093             "Libya (‫ليبيا‬‎)",
1094             "ly",
1095             "218"
1096           ],
1097           [
1098             "Liechtenstein",
1099             "li",
1100             "423"
1101           ],
1102           [
1103             "Lithuania (Lietuva)",
1104             "lt",
1105             "370"
1106           ],
1107           [
1108             "Luxembourg",
1109             "lu",
1110             "352"
1111           ],
1112           [
1113             "Macau (澳門)",
1114             "mo",
1115             "853"
1116           ],
1117           [
1118             "Macedonia (FYROM) (Македонија)",
1119             "mk",
1120             "389"
1121           ],
1122           [
1123             "Madagascar (Madagasikara)",
1124             "mg",
1125             "261"
1126           ],
1127           [
1128             "Malawi",
1129             "mw",
1130             "265"
1131           ],
1132           [
1133             "Malaysia",
1134             "my",
1135             "60"
1136           ],
1137           [
1138             "Maldives",
1139             "mv",
1140             "960"
1141           ],
1142           [
1143             "Mali",
1144             "ml",
1145             "223"
1146           ],
1147           [
1148             "Malta",
1149             "mt",
1150             "356"
1151           ],
1152           [
1153             "Marshall Islands",
1154             "mh",
1155             "692"
1156           ],
1157           [
1158             "Martinique",
1159             "mq",
1160             "596"
1161           ],
1162           [
1163             "Mauritania (‫موريتانيا‬‎)",
1164             "mr",
1165             "222"
1166           ],
1167           [
1168             "Mauritius (Moris)",
1169             "mu",
1170             "230"
1171           ],
1172           [
1173             "Mayotte",
1174             "yt",
1175             "262",
1176             1
1177           ],
1178           [
1179             "Mexico (México)",
1180             "mx",
1181             "52"
1182           ],
1183           [
1184             "Micronesia",
1185             "fm",
1186             "691"
1187           ],
1188           [
1189             "Moldova (Republica Moldova)",
1190             "md",
1191             "373"
1192           ],
1193           [
1194             "Monaco",
1195             "mc",
1196             "377"
1197           ],
1198           [
1199             "Mongolia (Монгол)",
1200             "mn",
1201             "976"
1202           ],
1203           [
1204             "Montenegro (Crna Gora)",
1205             "me",
1206             "382"
1207           ],
1208           [
1209             "Montserrat",
1210             "ms",
1211             "1664"
1212           ],
1213           [
1214             "Morocco (‫المغرب‬‎)",
1215             "ma",
1216             "212",
1217             0
1218           ],
1219           [
1220             "Mozambique (Moçambique)",
1221             "mz",
1222             "258"
1223           ],
1224           [
1225             "Myanmar (Burma) (မြန်မာ)",
1226             "mm",
1227             "95"
1228           ],
1229           [
1230             "Namibia (Namibië)",
1231             "na",
1232             "264"
1233           ],
1234           [
1235             "Nauru",
1236             "nr",
1237             "674"
1238           ],
1239           [
1240             "Nepal (नेपाल)",
1241             "np",
1242             "977"
1243           ],
1244           [
1245             "Netherlands (Nederland)",
1246             "nl",
1247             "31"
1248           ],
1249           [
1250             "New Caledonia (Nouvelle-Calédonie)",
1251             "nc",
1252             "687"
1253           ],
1254           [
1255             "New Zealand",
1256             "nz",
1257             "64"
1258           ],
1259           [
1260             "Nicaragua",
1261             "ni",
1262             "505"
1263           ],
1264           [
1265             "Niger (Nijar)",
1266             "ne",
1267             "227"
1268           ],
1269           [
1270             "Nigeria",
1271             "ng",
1272             "234"
1273           ],
1274           [
1275             "Niue",
1276             "nu",
1277             "683"
1278           ],
1279           [
1280             "Norfolk Island",
1281             "nf",
1282             "672"
1283           ],
1284           [
1285             "North Korea (조선 민주주의 인민 공화국)",
1286             "kp",
1287             "850"
1288           ],
1289           [
1290             "Northern Mariana Islands",
1291             "mp",
1292             "1670"
1293           ],
1294           [
1295             "Norway (Norge)",
1296             "no",
1297             "47",
1298             0
1299           ],
1300           [
1301             "Oman (‫عُمان‬‎)",
1302             "om",
1303             "968"
1304           ],
1305           [
1306             "Pakistan (‫پاکستان‬‎)",
1307             "pk",
1308             "92"
1309           ],
1310           [
1311             "Palau",
1312             "pw",
1313             "680"
1314           ],
1315           [
1316             "Palestine (‫فلسطين‬‎)",
1317             "ps",
1318             "970"
1319           ],
1320           [
1321             "Panama (Panamá)",
1322             "pa",
1323             "507"
1324           ],
1325           [
1326             "Papua New Guinea",
1327             "pg",
1328             "675"
1329           ],
1330           [
1331             "Paraguay",
1332             "py",
1333             "595"
1334           ],
1335           [
1336             "Peru (Perú)",
1337             "pe",
1338             "51"
1339           ],
1340           [
1341             "Philippines",
1342             "ph",
1343             "63"
1344           ],
1345           [
1346             "Poland (Polska)",
1347             "pl",
1348             "48"
1349           ],
1350           [
1351             "Portugal",
1352             "pt",
1353             "351"
1354           ],
1355           [
1356             "Puerto Rico",
1357             "pr",
1358             "1",
1359             3,
1360             ["787", "939"]
1361           ],
1362           [
1363             "Qatar (‫قطر‬‎)",
1364             "qa",
1365             "974"
1366           ],
1367           [
1368             "Réunion (La Réunion)",
1369             "re",
1370             "262",
1371             0
1372           ],
1373           [
1374             "Romania (România)",
1375             "ro",
1376             "40"
1377           ],
1378           [
1379             "Russia (Россия)",
1380             "ru",
1381             "7",
1382             0
1383           ],
1384           [
1385             "Rwanda",
1386             "rw",
1387             "250"
1388           ],
1389           [
1390             "Saint Barthélemy",
1391             "bl",
1392             "590",
1393             1
1394           ],
1395           [
1396             "Saint Helena",
1397             "sh",
1398             "290"
1399           ],
1400           [
1401             "Saint Kitts and Nevis",
1402             "kn",
1403             "1869"
1404           ],
1405           [
1406             "Saint Lucia",
1407             "lc",
1408             "1758"
1409           ],
1410           [
1411             "Saint Martin (Saint-Martin (partie française))",
1412             "mf",
1413             "590",
1414             2
1415           ],
1416           [
1417             "Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)",
1418             "pm",
1419             "508"
1420           ],
1421           [
1422             "Saint Vincent and the Grenadines",
1423             "vc",
1424             "1784"
1425           ],
1426           [
1427             "Samoa",
1428             "ws",
1429             "685"
1430           ],
1431           [
1432             "San Marino",
1433             "sm",
1434             "378"
1435           ],
1436           [
1437             "São Tomé and Príncipe (São Tomé e Príncipe)",
1438             "st",
1439             "239"
1440           ],
1441           [
1442             "Saudi Arabia (‫المملكة العربية السعودية‬‎)",
1443             "sa",
1444             "966"
1445           ],
1446           [
1447             "Senegal (Sénégal)",
1448             "sn",
1449             "221"
1450           ],
1451           [
1452             "Serbia (Србија)",
1453             "rs",
1454             "381"
1455           ],
1456           [
1457             "Seychelles",
1458             "sc",
1459             "248"
1460           ],
1461           [
1462             "Sierra Leone",
1463             "sl",
1464             "232"
1465           ],
1466           [
1467             "Singapore",
1468             "sg",
1469             "65"
1470           ],
1471           [
1472             "Sint Maarten",
1473             "sx",
1474             "1721"
1475           ],
1476           [
1477             "Slovakia (Slovensko)",
1478             "sk",
1479             "421"
1480           ],
1481           [
1482             "Slovenia (Slovenija)",
1483             "si",
1484             "386"
1485           ],
1486           [
1487             "Solomon Islands",
1488             "sb",
1489             "677"
1490           ],
1491           [
1492             "Somalia (Soomaaliya)",
1493             "so",
1494             "252"
1495           ],
1496           [
1497             "South Africa",
1498             "za",
1499             "27"
1500           ],
1501           [
1502             "South Korea (대한민국)",
1503             "kr",
1504             "82"
1505           ],
1506           [
1507             "South Sudan (‫جنوب السودان‬‎)",
1508             "ss",
1509             "211"
1510           ],
1511           [
1512             "Spain (España)",
1513             "es",
1514             "34"
1515           ],
1516           [
1517             "Sri Lanka (ශ්‍රී ලංකාව)",
1518             "lk",
1519             "94"
1520           ],
1521           [
1522             "Sudan (‫السودان‬‎)",
1523             "sd",
1524             "249"
1525           ],
1526           [
1527             "Suriname",
1528             "sr",
1529             "597"
1530           ],
1531           [
1532             "Svalbard and Jan Mayen",
1533             "sj",
1534             "47",
1535             1
1536           ],
1537           [
1538             "Swaziland",
1539             "sz",
1540             "268"
1541           ],
1542           [
1543             "Sweden (Sverige)",
1544             "se",
1545             "46"
1546           ],
1547           [
1548             "Switzerland (Schweiz)",
1549             "ch",
1550             "41"
1551           ],
1552           [
1553             "Syria (‫سوريا‬‎)",
1554             "sy",
1555             "963"
1556           ],
1557           [
1558             "Taiwan (台灣)",
1559             "tw",
1560             "886"
1561           ],
1562           [
1563             "Tajikistan",
1564             "tj",
1565             "992"
1566           ],
1567           [
1568             "Tanzania",
1569             "tz",
1570             "255"
1571           ],
1572           [
1573             "Thailand (ไทย)",
1574             "th",
1575             "66"
1576           ],
1577           [
1578             "Timor-Leste",
1579             "tl",
1580             "670"
1581           ],
1582           [
1583             "Togo",
1584             "tg",
1585             "228"
1586           ],
1587           [
1588             "Tokelau",
1589             "tk",
1590             "690"
1591           ],
1592           [
1593             "Tonga",
1594             "to",
1595             "676"
1596           ],
1597           [
1598             "Trinidad and Tobago",
1599             "tt",
1600             "1868"
1601           ],
1602           [
1603             "Tunisia (‫تونس‬‎)",
1604             "tn",
1605             "216"
1606           ],
1607           [
1608             "Turkey (Türkiye)",
1609             "tr",
1610             "90"
1611           ],
1612           [
1613             "Turkmenistan",
1614             "tm",
1615             "993"
1616           ],
1617           [
1618             "Turks and Caicos Islands",
1619             "tc",
1620             "1649"
1621           ],
1622           [
1623             "Tuvalu",
1624             "tv",
1625             "688"
1626           ],
1627           [
1628             "U.S. Virgin Islands",
1629             "vi",
1630             "1340"
1631           ],
1632           [
1633             "Uganda",
1634             "ug",
1635             "256"
1636           ],
1637           [
1638             "Ukraine (Україна)",
1639             "ua",
1640             "380"
1641           ],
1642           [
1643             "United Arab Emirates (‫الإمارات العربية المتحدة‬‎)",
1644             "ae",
1645             "971"
1646           ],
1647           [
1648             "United Kingdom",
1649             "gb",
1650             "44",
1651             0
1652           ],
1653           [
1654             "United States",
1655             "us",
1656             "1",
1657             0
1658           ],
1659           [
1660             "Uruguay",
1661             "uy",
1662             "598"
1663           ],
1664           [
1665             "Uzbekistan (Oʻzbekiston)",
1666             "uz",
1667             "998"
1668           ],
1669           [
1670             "Vanuatu",
1671             "vu",
1672             "678"
1673           ],
1674           [
1675             "Vatican City (Città del Vaticano)",
1676             "va",
1677             "39",
1678             1
1679           ],
1680           [
1681             "Venezuela",
1682             "ve",
1683             "58"
1684           ],
1685           [
1686             "Vietnam (Việt Nam)",
1687             "vn",
1688             "84"
1689           ],
1690           [
1691             "Wallis and Futuna (Wallis-et-Futuna)",
1692             "wf",
1693             "681"
1694           ],
1695           [
1696             "Western Sahara (‫الصحراء الغربية‬‎)",
1697             "eh",
1698             "212",
1699             1
1700           ],
1701           [
1702             "Yemen (‫اليمن‬‎)",
1703             "ye",
1704             "967"
1705           ],
1706           [
1707             "Zambia",
1708             "zm",
1709             "260"
1710           ],
1711           [
1712             "Zimbabwe",
1713             "zw",
1714             "263"
1715           ],
1716           [
1717             "Åland Islands",
1718             "ax",
1719             "358",
1720             1
1721           ]
1722       ]
1723 });