new.jade 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. extends ../layout
  2. block scripts
  3. script(src="https://js.recurly.com/v3/recurly.js")
  4. script(type='text/javascript').
  5. window.recomendedCurrency = '#{currency}'
  6. window.countryCode = '#{countryCode}'
  7. window.plan_code = '#{plan_code}'
  8. window.recurlyApiKey = "!{settings.apis.recurly.publicKey}"
  9. window.couponCode = "#{couponCode}"
  10. block content
  11. - locals.supressDefaultJs = true
  12. script(data-main=jsPath+'main.js', src=jsPath+'libs/require.js', baseurl=jsPath)
  13. .content.content-alt
  14. .container(ng-controller="NewSubscriptionController" ng-cloak)
  15. .row.card-group
  16. .col-md-5.col-md-push-4
  17. .card.card-highlighted
  18. .page-header
  19. .row
  20. .col-xs-9
  21. h2 {{planName}}
  22. .col-xs-3
  23. div.dropdown.changePlanButton.pull-right(ng-cloak, dropdown)
  24. a.btn.btn-default.dropdown-toggle(
  25. href="#",
  26. data-toggle="dropdown",
  27. dropdown-toggle
  28. )
  29. | {{currencyCode}} ({{plans[currencyCode]['symbol']}})
  30. span.caret
  31. ul.dropdown-menu(role="menu")
  32. li(ng-repeat="(currency, value) in plans")
  33. a(
  34. ng-click="changeCurrency(currency)",
  35. ) {{currency}} ({{value['symbol']}})
  36. hr.thin
  37. .row
  38. .col-md-12.text-center
  39. div(ng-if="trialLength")
  40. span !{translate("first_few_days_free", {trialLen:'{{trialLength}}'})}
  41. span(ng-if="discountMonths && discountRate")   - {{discountMonths}} #{translate("month")}s {{discountRate}}% Off
  42. div(ng-if="price")
  43. strong {{price.currency.symbol}}{{price.next.total}}
  44. span(ng-if="monthlyBilling") #{translate("every")} #{translate("month")}
  45. span(ng-if="!monthlyBilling") #{translate("every")} #{translate("year")}
  46. div(ng-if="normalPrice")
  47. span.small Normally {{price.currency.symbol}}{{normalPrice}}
  48. .row
  49. div(sixpack-switch="subscription-form")
  50. .col-md-12(sixpack-default)
  51. form(ng-show="planName",novalidate)
  52. .row
  53. .col-md-12
  54. .form-group
  55. .row
  56. .col-md-6
  57. label.radio-inline
  58. input.paymentTypeOption(type="radio",value="credit_card", ng-model="paymentMethod.value")
  59. i.fa.fa-cc-mastercard.fa-3x
  60. span  
  61. i.fa.fa-cc-visa.fa-3x
  62. .col-md-6
  63. label.radio-inline
  64. input.paymentTypeOption(type="radio", value="paypal", ng-model="paymentMethod.value")
  65. i.fa.fa-cc-paypal.fa-3x
  66. .alert.alert-warning.small(ng-show="genericError")
  67. strong {{genericError}}
  68. span(ng-hide="paymentMethod.value == 'paypal'")
  69. .row
  70. .col-md-12
  71. .form-group
  72. div.alert.alert-warning.small(ng-hide="validation.correctCvv") #{translate("invalid")} CVV
  73. div.alert.alert-warning.small(ng-hide="validation.correctCardNumber") #{translate("invalid")} #{translate("credit_card_number")}
  74. .row
  75. .col-md-6
  76. .form-group(ng-class="validation.number == false || validation.errorFields.number ? 'has-error' : ''")
  77. input.form-control(ng-model='data.number', ng-blur="validateCardNumber()", placeholder="#{translate('credit_card_number')}")
  78. .col-md-3
  79. .form-group(ng-class="validation.correctCvv == false || validation.errorFields.cvv ? 'has-error' : ''")
  80. input.form-control(ng-model='data.cvv', ng-blur="validateCvv()", placeholder="CVV")
  81. .row
  82. .col-md-12
  83. div.alert.alert-warning.small(ng-hide="validation.correctExpiry") #{translate("invalid")} #{translate("expiry")}
  84. .row
  85. .col-md-3
  86. .form-group(ng-class="validation.correctExpiry == false || validation.errorFields.month ? 'has-error' : ''")
  87. select.form-control(data-recurly='month', ng-change="validateExpiry()", ng-model='data.month')
  88. option(value="", disabled, selected) Month
  89. option(value="01") 01
  90. option(value="02") 02
  91. option(value="03") 03
  92. option(value="04") 04
  93. option(value="05") 05
  94. option(value="06") 06
  95. option(value="07") 07
  96. option(value="08") 08
  97. option(value="09") 09
  98. option(value="10") 10
  99. option(value="11") 11
  100. option(value="12") 12
  101. .col-md-4
  102. .form-group(ng-class="validation.correctExpiry == false || validation.errorFields.year ? 'has-error' : ''")
  103. select.form-control(data-recurly='year', ng-change="validateExpiry()", ng-model='data.year')
  104. option(value="", disabled, selected) Year
  105. option(value="2016") 2016
  106. option(value="2017") 2017
  107. option(value="2018") 2018
  108. option(value="2019") 2019
  109. option(value="2020") 2020
  110. option(value="2021") 2021
  111. option(value="2022") 2022
  112. option(value="2023") 2023
  113. option(value="2024") 2024
  114. option(value="2025") 2025
  115. option(value="2026") 2026
  116. .row
  117. .col-md-6
  118. .form-group(ng-class="validation.errorFields.first_name ? 'has-error' : ''")
  119. input.form-control(type='text', value='', maxlength='255', , onkeyup='', data-recurly="first_name", ng-model="data.first_name", required, placeholder="#{translate('first_name')}")
  120. .col-md-6
  121. .form-group(ng-class="validation.errorFields.last_name ? 'has-error' : ''")
  122. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="last_name", ng-model="data.last_name", required, placeholder="#{translate('last_name')}")
  123. hr
  124. .row
  125. .col-md-12
  126. .form-group(ng-class="validation.errorFields.address1 ? 'has-error' : ''")
  127. label #{translate("billing_address")}
  128. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.address1", placeholder="#{translate('address')}")
  129. .form-group(ng-class="validation.errorFields.address2 ? 'has-error' : ''")
  130. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.address2", placeholder="#{translate('address')}")
  131. .form-group(ng-class="validation.errorFields.state ? 'has-error' : ''")
  132. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.state", placeholder="#{translate('state')}")
  133. .row
  134. .col-md-7
  135. .form-group(ng-class="validation.errorFields.city ? 'has-error' : ''")
  136. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="city", ng-model="data.city", placeholder="#{translate('city')}")
  137. .col-md-5(ng-class="validation.errorFields.postal_code ? 'has-error' : ''")
  138. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="postal_code", ng-model="data.postal_code", placeholder="#{translate('zip_post_code')}")
  139. .row
  140. .col-md-7
  141. .form-group(ng-class="validation.errorFields.country ? 'has-error' : ''")
  142. select.form-control(data-recurly="country", ng-model="data.country", ng-change="updateCountry()", required)
  143. mixin countries_options()
  144. .row
  145. .col-md-8
  146. if (showCouponField)
  147. .form-group
  148. input.form-control(type='text', ng-blur="applyCoupon()", ng-model="data.coupon", placeholder="#{translate('coupon')}")
  149. .row
  150. .col-md-8
  151. if (showVatField)
  152. .form-group
  153. input.form-control(type='text', ng-blur="applyVatNumber()", ng-model="data.vat_number", placeholder="#{translate('vat_number')}")
  154. .row
  155. .col-xs-7
  156. .form-group
  157. button.btn.btn-success(ng-click="submit()", ng-disabled="processing", sixpack-convert="payment-left-menu-bottom") #{translate("upgrade_now")}
  158. .col-xs-3.pricingBreakdown
  159. div(ng-if="price.next.subtotal != price.next.total") Subtotal
  160. div(ng-if="price.next.tax!='0.00'") Tax
  161. div
  162. strong Total
  163. .col-xs-2
  164. div(ng-if="price.next.subtotal != price.next.total").pull-right {{price.currency.symbol}}{{price.next.subtotal}}
  165. div(ng-if="price.next.tax!='0.00'").pull-right {{price.currency.symbol}}{{price.next.tax}}
  166. div.pull-right
  167. strong {{price.currency.symbol}}{{price.next.total}}
  168. .col-md-12(sixpack-when="simple")
  169. form(
  170. ng-if="planName"
  171. name="simpleCCForm"
  172. novalidate
  173. )
  174. div.payment-method-toggle
  175. a.payment-method-toggle-switch(
  176. href
  177. ng-click="setPaymentMethod('credit_card');"
  178. ng-class="paymentMethod.value === 'credit_card' ? 'payment-method-toggle-switch-selected' : ''"
  179. )
  180. i.fa.fa-cc-mastercard.fa-2x
  181. span  
  182. i.fa.fa-cc-visa.fa-2x
  183. span  
  184. i.fa.fa-cc-amex.fa-2x
  185. a.payment-method-toggle-switch(
  186. href
  187. ng-click="setPaymentMethod('paypal');"
  188. ng-class="paymentMethod.value === 'paypal' ? 'payment-method-toggle-switch-selected' : ''"
  189. )
  190. i.fa.fa-cc-paypal.fa-2x
  191. .alert.alert-warning.small(ng-show="genericError")
  192. strong {{genericError}}
  193. div(ng-if="paymentMethod.value === 'credit_card'")
  194. .row
  195. .col-xs-6
  196. .form-group(ng-class="validation.errorFields.first_name || inputHasError(simpleCCForm.firstName) ? 'has-error' : ''")
  197. label(for="first-name") #{translate('first_name')}
  198. input#first-name.form-control(
  199. type="text"
  200. maxlength='255'
  201. data-recurly="first_name"
  202. name="firstName"
  203. ng-model="data.first_name"
  204. required
  205. )
  206. span.input-feedback-message {{ simpleCCForm.firstName.$error.required ? 'This field is required' : '' }}
  207. .col-xs-6
  208. .form-group(for="last-name",ng-class="validation.errorFields.last_name || inputHasError(simpleCCForm.lastName)? 'has-error' : ''")
  209. label(for="last-name") #{translate('last_name')}
  210. input#last-name.form-control(
  211. type="text"
  212. maxlength='255'
  213. data-recurly="last_name"
  214. name="lastName"
  215. ng-model="data.last_name"
  216. required
  217. )
  218. span.input-feedback-message {{ simpleCCForm.lastName.$error.required ? 'This field is required' : '' }}
  219. .form-group(ng-class="validation.correctCardNumber == false || validation.errorFields.number || inputHasError(simpleCCForm.ccNumber) ? 'has-error' : ''")
  220. label(for="card-no") #{translate("credit_card_number")}
  221. input#card-no.form-control(
  222. type="text"
  223. ng-model="data.number"
  224. name="ccNumber"
  225. ng-focus="validation.correctCardNumber = true; validation.errorFields.number = false;"
  226. ng-blur="validateCardNumber();"
  227. required
  228. cc-format-card-number
  229. )
  230. span.input-feedback-message {{ simpleCCForm.ccNumber.$error.required ? 'This field is required' : 'Please re-check the card number' }}
  231. .row
  232. .col-xs-6
  233. .form-group.has-feedback(ng-class="validation.correctExpiry == false || validation.errorFields.expiry || inputHasError(simpleCCForm.expiry) ? 'has-error' : ''")
  234. label #{translate("expiry")}
  235. input.form-control(
  236. type="text"
  237. ng-model="data.mmYY"
  238. name="expiry"
  239. placeholder="MM / YY"
  240. ng-focus="validation.correctExpiry = true; validation.errorFields.expiry = false;"
  241. ng-blur="updateExpiry(); validateExpiry()"
  242. required
  243. cc-format-expiry
  244. )
  245. span.input-feedback-message {{ simpleCCForm.expiry.$error.required ? 'This field is required' : 'Please re-check the expiry date' }}
  246. .col-xs-6
  247. .form-group.has-feedback(ng-class="validation.correctCvv == false || validation.errorFields.cvv || inputHasError(simpleCCForm.cvv) ? 'has-error' : ''")
  248. label #{translate("security_code")}
  249. input.form-control(
  250. type="text"
  251. ng-model="data.cvv"
  252. ng-focus="validation.correctCvv = true; validation.errorFields.cvv = false;"
  253. ng-blur="validateCvv()"
  254. name="cvv"
  255. required
  256. cc-format-sec-code
  257. )
  258. .form-control-feedback
  259. a.form-helper(
  260. href
  261. tabindex="-1"
  262. tooltip-template="'cvv-tooltip-tpl.html'"
  263. tooltip-trigger="mouseenter"
  264. tooltip-append-to-body="true"
  265. ) ?
  266. span.input-feedback-message {{ simpleCCForm.cvv.$error.required ? 'This field is required' : 'Please re-check the security code' }}
  267. div
  268. .form-group(ng-class="validation.errorFields.country || inputHasError(simpleCCForm.country) ? 'has-error' : ''")
  269. label(for="country") #{translate('country')}
  270. select#country.form-control(
  271. data-recurly="country"
  272. ng-model="data.country"
  273. name="country"
  274. ng-change="updateCountry()"
  275. required
  276. )
  277. mixin countries_options()
  278. span.input-feedback-message {{ simpleCCForm.country.$error.required ? 'This field is required' : '' }}
  279. if (showVatField)
  280. .form-group
  281. label(for="vat-no") #{translate('vat_number')}
  282. input#vat-no.form-control(
  283. type="text"
  284. ng-blur="applyVatNumber()"
  285. ng-model="data.vat_number"
  286. )
  287. if (showCouponField)
  288. .form-group
  289. label(for="coupon-code") #{translate('coupon_code')}
  290. input#coupon-code.form-control(
  291. type="text"
  292. ng-blur="applyCoupon()"
  293. ng-model="data.coupon"
  294. )
  295. p(ng-if="paymentMethod.value === 'paypal'") #{translate("paypal_upgrade")}
  296. div.price-breakdown(ng-if="price.next.tax !== '0.00'")
  297. hr.thin
  298. span Total:
  299. strong {{price.currency.symbol}}{{price.next.total}}
  300. span ({{price.currency.symbol}}{{price.next.subtotal}} + {{price.currency.symbol}}{{price.next.tax}} tax)
  301. span(ng-if="monthlyBilling") #{translate("every")} #{translate("month")}
  302. span(ng-if="!monthlyBilling") #{translate("every")} #{translate("year")}
  303. hr.thin
  304. div.payment-submit
  305. button.btn.btn-success.btn-block(
  306. ng-click="submit()"
  307. ng-disabled="processing || !isFormValid(simpleCCForm);"
  308. sixpack-convert="payment-left-menu-bottom"
  309. )
  310. span(ng-show="processing")
  311. i.fa.fa-spinner.fa-spin
  312. |  
  313. | {{ paymentMethod.value === 'credit_card' ? '#{translate("upgrade_cc_btn")}' : '#{translate("upgrade_paypal_btn")}' }}
  314. .col-md-3.col-md-pull-4
  315. if showStudentPlan == 'true'
  316. a.btn-primary.btn.plansPageStudentLink(
  317. href,
  318. ng-click="switchToStudent()"
  319. ) #{translate("half_price_student")}
  320. .card.card-first
  321. .paymentPageFeatures
  322. h3 #{translate("unlimited_projects")}
  323. p #{translate("create_unlimited_projects")}
  324. h3
  325. if plan.features.collaborators == -1
  326. - var collaboratorCount = 'Unlimited'
  327. else
  328. - var collaboratorCount = plan.features.collaborators
  329. | #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
  330. p #{translate("work_on_single_version")}. #{translate("view_collab_edits")} in real time.
  331. h3 #{translate("full_doc_history")}
  332. p #{translate("see_what_has_been")}
  333. span.added #{translate("added")}
  334. | #{translate("and")}
  335. span.removed #{translate("removed")}.
  336. | #{translate("restore_to_any_older_version")}.
  337. h3 #{translate("sync_to_dropbox")}
  338. p
  339. | #{translate("acces_work_from_anywhere")}.
  340. | #{translate("work_offline_and_sync_with_dropbox")}.
  341. hr
  342. p.small.text-center We're confident that you'll love ShareLaTeX, but if not you can cancel anytime. We'll give you your money back, no questions asked, if you let us know within 30 days.
  343. hr
  344. span                  
  345. a(href="https://www.positivessl.com" style="font-family: arial; font-size: 10px; color: #212121; text-decoration: none;")
  346. img(src="https://www.positivessl.com/images-new/PositiveSSL_tl_trans.png" alt="SSL Certificate" title="SSL Certificate" border="0")
  347. div(style="font-family: arial;font-weight:bold;font-size:15px;color:#86BEE0;")
  348. a(href="https://www.positivessl.com" style="color:#86BEE0; text-decoration: none;")
  349. script(type="text/javascript").
  350. ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
  351. script(
  352. type="text/ng-template"
  353. id="cvv-tooltip-tpl.html"
  354. )
  355. p For #[strong Visa, MasterCard and Discover], the #[strong 3 digits] on the #[strong back] of your card.
  356. p For #[strong American Express], the #[strong 4 digits] on the #[strong front] of your card.
  357. mixin countries_options()
  358. option(value='', disabled, selected) #{translate("country")}
  359. option(value='-') --------------
  360. option(value='AF') Afghanistan
  361. option(value='AL') Albania
  362. option(value='DZ') Algeria
  363. option(value='AS') American Samoa
  364. option(value='AD') Andorra
  365. option(value='AO') Angola
  366. option(value='AI') Anguilla
  367. option(value='AQ') Antarctica
  368. option(value='AG') Antigua and Barbuda
  369. option(value='AR') Argentina
  370. option(value='AM') Armenia
  371. option(value='AW') Aruba
  372. option(value='AC') Ascension Island
  373. option(value='AU') Australia
  374. option(value='AT') Austria
  375. option(value='AZ') Azerbaijan
  376. option(value='BS') Bahamas
  377. option(value='BH') Bahrain
  378. option(value='BD') Bangladesh
  379. option(value='BB') Barbados
  380. option(value='BE') Belgium
  381. option(value='BZ') Belize
  382. option(value='BJ') Benin
  383. option(value='BM') Bermuda
  384. option(value='BT') Bhutan
  385. option(value='BO') Bolivia
  386. option(value='BA') Bosnia and Herzegovina
  387. option(value='BW') Botswana
  388. option(value='BV') Bouvet Island
  389. option(value='BR') Brazil
  390. option(value='BQ') British Antarctic Territory
  391. option(value='IO') British Indian Ocean Territory
  392. option(value='VG') British Virgin Islands
  393. option(value='BN') Brunei
  394. option(value='BG') Bulgaria
  395. option(value='BF') Burkina Faso
  396. option(value='BI') Burundi
  397. option(value='KH') Cambodia
  398. option(value='CM') Cameroon
  399. option(value='CA') Canada
  400. option(value='IC') Canary Islands
  401. option(value='CT') Canton and Enderbury Islands
  402. option(value='CV') Cape Verde
  403. option(value='KY') Cayman Islands
  404. option(value='CF') Central African Republic
  405. option(value='EA') Ceuta and Melilla
  406. option(value='TD') Chad
  407. option(value='CL') Chile
  408. option(value='CN') China
  409. option(value='CX') Christmas Island
  410. option(value='CP') Clipperton Island
  411. option(value='CC') Cocos [Keeling] Islands
  412. option(value='CO') Colombia
  413. option(value='KM') Comoros
  414. option(value='CD') Congo [DRC]
  415. option(value='CK') Cook Islands
  416. option(value='CR') Costa Rica
  417. option(value='HR') Croatia
  418. option(value='CU') Cuba
  419. option(value='CY') Cyprus
  420. option(value='CZ') Czech Republic
  421. option(value='DK') Denmark
  422. option(value='DG') Diego Garcia
  423. option(value='DJ') Djibouti
  424. option(value='DM') Dominica
  425. option(value='DO') Dominican Republic
  426. option(value='NQ') Dronning Maud Land
  427. option(value='TL') East Timor
  428. option(value='EC') Ecuador
  429. option(value='EG') Egypt
  430. option(value='SV') El Salvador
  431. option(value='EE') Estonia
  432. option(value='ET') Ethiopia
  433. option(value='FK') Falkland Islands [Islas Malvinas]
  434. option(value='FO') Faroe Islands
  435. option(value='FJ') Fiji
  436. option(value='FI') Finland
  437. option(value='FR') France
  438. option(value='GF') French Guiana
  439. option(value='PF') French Polynesia
  440. option(value='TF') French Southern Territories
  441. option(value='FQ') French Southern and Antarctic Territories
  442. option(value='GA') Gabon
  443. option(value='GM') Gambia
  444. option(value='GE') Georgia
  445. option(value='DE') Germany
  446. option(value='GH') Ghana
  447. option(value='GI') Gibraltar
  448. option(value='GR') Greece
  449. option(value='GL') Greenland
  450. option(value='GD') Grenada
  451. option(value='GP') Guadeloupe
  452. option(value='GU') Guam
  453. option(value='GT') Guatemala
  454. option(value='GG') Guernsey
  455. option(value='GW') Guinea-Bissau
  456. option(value='GY') Guyana
  457. option(value='HT') Haiti
  458. option(value='HM') Heard Island and McDonald Islands
  459. option(value='HN') Honduras
  460. option(value='HK') Hong Kong
  461. option(value='HU') Hungary
  462. option(value='IS') Iceland
  463. option(value='IN') India
  464. option(value='ID') Indonesia
  465. option(value='IE') Ireland
  466. option(value='IM') Isle of Man
  467. option(value='IL') Israel
  468. option(value='IT') Italy
  469. option(value='JM') Jamaica
  470. option(value='JP') Japan
  471. option(value='JE') Jersey
  472. option(value='JT') Johnston Island
  473. option(value='JO') Jordan
  474. option(value='KZ') Kazakhstan
  475. option(value='KE') Kenya
  476. option(value='KI') Kiribati
  477. option(value='KW') Kuwait
  478. option(value='KG') Kyrgyzstan
  479. option(value='LA') Laos
  480. option(value='LV') Latvia
  481. option(value='LS') Lesotho
  482. option(value='LY') Libya
  483. option(value='LI') Liechtenstein
  484. option(value='LT') Lithuania
  485. option(value='LU') Luxembourg
  486. option(value='MO') Macau
  487. option(value='MK') Macedonia [FYROM]
  488. option(value='MG') Madagascar
  489. option(value='MW') Malawi
  490. option(value='MY') Malaysia
  491. option(value='MV') Maldives
  492. option(value='ML') Mali
  493. option(value='MT') Malta
  494. option(value='MH') Marshall Islands
  495. option(value='MQ') Martinique
  496. option(value='MR') Mauritania
  497. option(value='MU') Mauritius
  498. option(value='YT') Mayotte
  499. option(value='FX') Metropolitan France
  500. option(value='MX') Mexico
  501. option(value='FM') Micronesia
  502. option(value='MI') Midway Islands
  503. option(value='MD') Moldova
  504. option(value='MC') Monaco
  505. option(value='MN') Mongolia
  506. option(value='ME') Montenegro
  507. option(value='MS') Montserrat
  508. option(value='MA') Morocco
  509. option(value='MZ') Mozambique
  510. option(value='NA') Namibia
  511. option(value='NR') Nauru
  512. option(value='NP') Nepal
  513. option(value='NL') Netherlands
  514. option(value='AN') Netherlands Antilles
  515. option(value='NT') Neutral Zone
  516. option(value='NC') New Caledonia
  517. option(value='NZ') New Zealand
  518. option(value='NI') Nicaragua
  519. option(value='NE') Niger
  520. option(value='NG') Nigeria
  521. option(value='NU') Niue
  522. option(value='NF') Norfolk Island
  523. option(value='VD') North Vietnam
  524. option(value='MP') Northern Mariana Islands
  525. option(value='NO') Norway
  526. option(value='OM') Oman
  527. option(value='QO') Outlying Oceania
  528. option(value='PC') Pacific Islands Trust Territory
  529. option(value='PK') Pakistan
  530. option(value='PW') Palau
  531. option(value='PS') Palestinian Territories
  532. option(value='PA') Panama
  533. option(value='PZ') Panama Canal Zone
  534. option(value='PY') Paraguay
  535. option(value='YD') People's Democratic Republic of Yemen
  536. option(value='PE') Peru
  537. option(value='PH') Philippines
  538. option(value='PN') Pitcairn Islands
  539. option(value='PL') Poland
  540. option(value='PT') Portugal
  541. option(value='PR') Puerto Rico
  542. option(value='QA') Qatar
  543. option(value='RO') Romania
  544. option(value='RU') Russia
  545. option(value='RW') Rwanda
  546. option(value='RE') Réunion
  547. option(value='BL') Saint Barthélemy
  548. option(value='SH') Saint Helena
  549. option(value='KN') Saint Kitts and Nevis
  550. option(value='LC') Saint Lucia
  551. option(value='MF') Saint Martin
  552. option(value='PM') Saint Pierre and Miquelon
  553. option(value='VC') Saint Vincent and the Grenadines
  554. option(value='WS') Samoa
  555. option(value='SM') San Marino
  556. option(value='SA') Saudi Arabia
  557. option(value='SN') Senegal
  558. option(value='RS') Serbia
  559. option(value='CS') Serbia and Montenegro
  560. option(value='SC') Seychelles
  561. option(value='SL') Sierra Leone
  562. option(value='SG') Singapore
  563. option(value='SK') Slovakia
  564. option(value='SI') Slovenia
  565. option(value='SB') Solomon Islands
  566. option(value='ZA') South Africa
  567. option(value='GS') South Georgia and the South Sandwich Islands
  568. option(value='KR') South Korea
  569. option(value='ES') Spain
  570. option(value='LK') Sri Lanka
  571. option(value='SR') Suriname
  572. option(value='SJ') Svalbard and Jan Mayen
  573. option(value='SZ') Swaziland
  574. option(value='SE') Sweden
  575. option(value='CH') Switzerland
  576. option(value='ST') São Tomé and Príncipe
  577. option(value='TW') Taiwan
  578. option(value='TJ') Tajikistan
  579. option(value='TZ') Tanzania
  580. option(value='TH') Thailand
  581. option(value='TG') Togo
  582. option(value='TK') Tokelau
  583. option(value='TO') Tonga
  584. option(value='TT') Trinidad and Tobago
  585. option(value='TA') Tristan da Cunha
  586. option(value='TN') Tunisia
  587. option(value='TR') Turkey
  588. option(value='TM') Turkmenistan
  589. option(value='TC') Turks and Caicos Islands
  590. option(value='TV') Tuvalu
  591. option(value='UM') U.S. Minor Outlying Islands
  592. option(value='PU') U.S. Miscellaneous Pacific Islands
  593. option(value='VI') U.S. Virgin Islands
  594. option(value='UG') Uganda
  595. option(value='UA') Ukraine
  596. option(value='AE') United Arab Emirates
  597. option(value='GB') United Kingdom
  598. option(value='US') United States
  599. option(value='UY') Uruguay
  600. option(value='UZ') Uzbekistan
  601. option(value='VU') Vanuatu
  602. option(value='VA') Vatican City
  603. option(value='VE') Venezuela
  604. option(value='VN') Vietnam
  605. option(value='WK') Wake Island
  606. option(value='WF') Wallis and Futuna
  607. option(value='EH') Western Sahara
  608. option(value='YE') Yemen
  609. option(value='ZM') Zambia
  610. option(value='AX') Åland Islands