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