diff --git a/.gitignore b/.gitignore index 093572a0..8f025dc9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,15 @@ -.DS_Store -tools/geo/json/_cities.json -dev -build/ +node_modules/ +*.log +dist/ +.vite/ +coverage/ + +# Build artifacts +dev/ min/ -tools/geo/json/countries.json -index.json -._* -build -downloads -*~ -*.swp + +# Generated test files +test/extracted/ + +# Temporary test files +test-build.html diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..aebeecd9 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,185 @@ +# OxJS Codebase Analysis + +## Overview +OxJS is a JavaScript UI framework created around 2008, predating modern JavaScript build tools and module systems. It uses a custom build system and loading mechanism that was innovative for its time but needs modernization. + +## Current Architecture + +### 1. Module Structure +The codebase is organized into distinct modules: +- **Ox**: Core library with utilities (Array, String, Math, Type, etc.) +- **UI**: User interface components and themes +- **Geo**: Geographic utilities +- **Image**: Image manipulation utilities +- **Unicode**: Unicode utilities + +Each module follows the pattern: +``` +source/ +├── ModuleName/ +│ ├── ModuleName.js (module loader) +│ ├── js/ (JavaScript files) +│ └── json/ (locale and config files) +``` + +### 2. Custom Import/Loading System + +#### Core Loader (`source/Ox.js`) +- The framework uses a custom `Ox.load()` function instead of ES modules +- Loading process: + 1. Detects script path from ` + > Ox.COUNTRIES.length + 354 + > Ox.sum(Ox.test.array) + 354 + > Ox.test.array + [196, 73, 10, 8, 28, 24, 14, 1] + @*/ + Ox.COUNTRIES = data.countries; + //@ Ox.LANGUAGES <[o]> Array of ISO 639-1 language codes and names + Ox.LANGUAGES = data.languages; + + Ox.GEO_COLORS = { + + 'North America': [0, 0, 255], + 'Northern America': [0, 0, 255], + + 'South America': [0, 255, 0], + 'Southern America': [0, 255, 0], + 'Caribbean': [192, 255, 192], + 'Central America': [0, 128, 0], + + 'Europe': [255, 255, 0], + 'Western Europe': [255, 255, 0], + 'Northern Europe': [255, 255, 192], + 'Southern Europe': [128, 128, 0], + 'Eastern Europe': [255, 192, 0], + + 'Africa': [255, 0, 255], + 'Northern Africa': [255, 0, 255], + 'Southern Africa': [255, 128, 255], + 'Middle Africa': [128, 0, 128], + 'Western Africa': [128, 0, 255], + 'Eastern Africa': [255, 0, 128], + + 'Asia': [255, 0, 0], + 'Eastern Asia': [255, 0, 0], + 'South-Eastern Asia': [255, 128, 128], + 'Southern Asia': [128, 0, 0], + 'Western Asia': [255, 128, 0], + 'Central Asia': [128, 64, 0], + + 'Oceania': [0, 255, 255], + 'Australia and New Zealand': [0, 255, 255], + 'Micronesia': [192, 255, 255], + 'Melanesia': [0, 128, 128], + 'Polynesia': [128, 128, 255], + + 'Antarctica': [128, 128, 128] + + }; + + //@ Functions + + /*@ + Ox.getCountryByCode Returns a country object for a given country code + (code) -> Country object + code ISO 3166 country code + > Ox.getCountryByCode('US').name + 'United States' + @*/ + Ox.getCountryByCode = Ox.getCountryByCountryCode = function(code) { + var country; + code = code.toUpperCase(); + Ox.forEach(Ox.COUNTRIES, function(c) { + if (c.code == code) { + country = c; + return false; // break + } + }); + return country; + }; + + /*@ + Ox.getCountryByGeoname Returns a country object for a given geoname + (name) -> Country object + name Geoname + > Ox.getCountryByGeoname('Los Angeles, California, United States').code + 'US' + > Ox.getCountryByGeoname('The Bottom, Saba, Bonaire, Sint Eustatius and Saba').code + 'BQ' + @*/ + Ox.getCountryByGeoname = function(geoname) { + // fixme: UAE correction doesn't belong here, fix in map + geoname = (geoname || '').replace(' - United Arab Emirates', ', United Arab Emirates') + return Ox.getCountryByName(Ox.splitGeoname(geoname).pop()); + }; + + /*@ + Ox.getCountryByName Returns a country object for a given country name + (name) -> Country object + name Country name + > Ox.getCountryByName('United States').code + 'US' + > Ox.getCountryByName('USA').code + 'US' + @*/ + Ox.getCountryByName = function(name) { + var country; + Ox.forEach(Ox.COUNTRIES, function(c) { + if (name == c.name || name == c.googleName || name == c.imdbName) { + country = c; + return false; // break + } + }); + return country; + }; + + /*@ + Ox.getFlagByCountryCode Returns an image URL for a given country code + (code[, size]) -> Image URL + code Country code (like 'FR') + size Image size (16, 64 or 256) + @*/ + Ox.getFlagByCountryCode = function(code, size) { + var country = Ox.getCountryByCode(code); + code = country ? country.code : 'NTHH'; + size = size || 16; + return Ox.PATH + 'Geo/png/flags/' + size + '/' + code + '.png'; + }; + + /*@ + Ox.getFlagByGeoname Returns an image URL for a given geoname + (geoname[, size]) -> Image URL + geoname Geoname (like 'France' or 'Paris, France') + size Image size (16, 64 or 256) + @*/ + Ox.getFlagByGeoname = function(geoname, size) { + var country = Ox.getCountryByGeoname(geoname), + code = country ? country.code : 'NTHH'; + size = size || 16; + return Ox.PATH + 'Geo/png/flags/' + size + '/' + code + '.png'; + }; + + /*@ + Ox.getFlagByLanguage Returns an image URL for a given language + (language[, size]) -> Image URL + language Language (like "French") + size Image size (16, 64 or 256) + @*/ + Ox.getFlagByLanguage = function(language, size) { + var country, code; + language = language.toLowerCase() + .replace(' languages', '') + .replace(' sign language', ''); + Ox.COUNTRIES.forEach(function(c) { + if (c.languages && c.languages.map(function(language) { + return language.toLowerCase(); + }).indexOf(language) > -1) { + country = c; + return false; // break + } + }); + code = country ? country.flag || country.code : 'NTHH'; + return Ox.PATH + 'Geo/png/flags/' + size + '/' + code + '.png'; + }; + + /*@ + Ox.getGeoColor Returns a color for a continent or region + (str) -> RGB + str Continent or region + @*/ + Ox.getGeoColor = function(str) { + return Ox.GEO_COLORS[str] || [128, 128, 128]; + }; + + /*@ + Ox.getLanguageCodeByName Returns a language code + (str) -> Two-letter ISO 639-1 language code, or original string + str Language name + @*/ + Ox.getLanguageCodeByName = function(str) { + var language = Ox.getObject(Ox.LANGUAGES, 'name', Ox.toTitleCase(str)); + return language ? language.code : str; + }; + + /*@ + Ox.getLanguageNameByCode Returns a language name + (str) -> Language name, or original string + str Two-letter ISO 639-1 language code + @*/ + Ox.getLanguageNameByCode = function(str) { + var language = Ox.getObject(Ox.LANGUAGES, 'code', str); + return language ? language.name : str; + }; + + /*@ + Ox.splitGeoname Splits a geoname into its component parts + (geoname) -> <[s]> Components + geoname Geoname + @*/ + Ox.splitGeoname = function(geoname) { + var countries = [ + 'Bonaire, Sint Eustatius and Saba', + 'Saint Helena, Ascension and Tristan da Cunha' + ], + split; + countries.forEach(function(country) { + if (Ox.endsWith(geoname, country)) { + geoname = geoname.replace(country, country.replace(', ', '; ')); + } + }); + split = geoname.split(', '); + countries.forEach(function(country) { + if (Ox.endsWith(Ox.last(split), country.replace(', ', '; '))) { + Ox.last(split, country); + } + }); + return split; + }; + + /* + Ox.getScript( + 'https://maps.googleapis.com/maps/api/js?callback=Ox.GoogleMapsCallback&sensor=false', + function() { + callback(true); + } + ); + */ + + callback(true); + + }); + +} diff --git a/min/Geo/json/Geo.json b/min/Geo/json/Geo.json new file mode 100644 index 00000000..99817867 --- /dev/null +++ b/min/Geo/json/Geo.json @@ -0,0 +1,7347 @@ +{ + "countries": [ + { + "area": 175767626.27131784, + "code": "AC", + "continent": "Africa", + "dependency": [ + "Saint Helena, Ascension and Tristan da Cunha" + ], + "east": -14.2892646, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/0/09/Ascension_Island_flag_proposal_B.png", + "lat": -7.9467166, + "lng": -14.3559158, + "name": "Ascension", + "north": -7.8876128, + "region": "Western Africa", + "south": -7.9942974, + "west": -14.4235038, + "wikipediaName": "Ascension Island" + }, + { + "area": 783355889.3382671, + "code": "AD", + "continent": "Europe", + "east": 1.786639, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/19/Flag_of_Andorra.svg", + "lat": 42.546245, + "lng": 1.601554, + "name": "Andorra", + "north": 42.655791, + "region": "Southern Europe", + "south": 42.4287632, + "west": 1.4087181 + }, + { + "area": 190384162117.00742, + "code": "AE", + "continent": "Asia", + "created": { + "country": [ + "Abu Dhabi", + "Ajman", + "Dubai", + "Fujairah", + "Sharjah", + "Umm al-Quwain" + ], + "created": "merged", + "date": "1971-12-02" + }, + "east": 56.4053766, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cb/Flag_of_the_United_Arab_Emirates.svg", + "lat": 23.424076, + "lng": 53.847818, + "name": "United Arab Emirates", + "north": 26.0696541, + "region": "Western Asia", + "south": 22.6315138, + "west": 51.4997702 + }, + { + "area": 5633926847.122248, + "code": "AE-AJ", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 56.1267431, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/07/Flag_of_Dubai.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 25.4052165, + "lng": 55.5136433, + "name": "Ajman", + "north": 25.4501956, + "region": "Western Asia", + "south": 24.73617, + "west": 55.4236511 + }, + { + "area": 133976873888.98026, + "code": "AE-AZ", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 56.023933, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d8/Flag_of_Abu_Dhabi.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 23.4677235, + "lng": 53.7369154, + "name": "Abu Dhabi", + "north": 25.246815, + "region": "Western Asia", + "south": 22.6319311, + "west": 51.4997702 + }, + { + "area": 11057979120.389898, + "code": "AE-DU", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 56.211487, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/07/Flag_of_Dubai.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 24.9821547, + "lng": 55.402868, + "name": "Dubai", + "north": 25.3538421, + "region": "Western Asia", + "south": 24.605052, + "west": 54.8967829 + }, + { + "area": 3515325446.7377033, + "code": "AE-FU", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 56.3760899, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cb/Flag_of_the_United_Arab_Emirates.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 25.4110762, + "lng": 56.2482277, + "name": "Fujairah", + "north": 25.667782, + "region": "Western Asia", + "south": 24.907855, + "west": 55.96323 + }, + { + "area": 7552878633.56744, + "code": "AE-RK", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1972-02-11", + "dissolved": "joined" + }, + "east": 56.297054, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6d/Flag_of_Sharjah.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 25.5675233, + "lng": 55.8913207, + "name": "Ras al-Khaimah", + "north": 26.0788481, + "region": "Western Asia", + "south": 24.834166, + "west": 55.75471 + }, + { + "area": 8351635081.128588, + "code": "AE-SH", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 56.381176, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6d/Flag_of_Sharjah.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 25.0753974, + "lng": 55.7578403, + "name": "Sharjah", + "north": 25.5135598, + "region": "Western Asia", + "south": 24.7916701, + "west": 55.349777, + "wikipediaName": "Sharjah (emirate)" + }, + { + "area": 1705010012.9681716, + "code": "AE-UQ", + "continent": "Asia", + "created": { + "country": [ + "Trucial States" + ], + "created": "merged", + "date": "1971-12-01" + }, + "dissolved": { + "country": [ + "United Arab Emirates" + ], + "date": "1971-12-02", + "dissolved": "merged" + }, + "east": 55.953869, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fb/Flag_of_Umm_al-Qaiwain.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-01" + }, + "lat": 25.5204824, + "lng": 55.7133909, + "name": "Umm al-Quwain", + "north": 25.6733149, + "region": "Western Asia", + "south": 25.323967, + "west": 55.5175201 + }, + { + "area": 1345340995552.5718, + "code": "AF", + "continent": "Asia", + "east": 74.8898619, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Afghanistan.svg", + "languages": [ + "Pashtu", + "Dari" + ], + "lat": 33.93911, + "lng": 67.709953, + "name": "Afghanistan", + "north": 38.4908767, + "region": "Southern Asia", + "south": 29.3772, + "west": 60.5170005 + }, + { + "area": 6507807256.075687, + "code": "AG", + "continent": "South America", + "east": -61.6574192, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/89/Flag_of_Antigua_and_Barbuda.svg", + "lat": 17.060816, + "lng": -61.796428, + "name": "Antigua and Barbuda", + "north": 17.729564, + "region": "Caribbean", + "south": 16.9325319, + "west": -62.347657 + }, + { + "area": 2656822148.5968294, + "code": "AI", + "continent": "South America", + "created": { + "country": [ + "Saint Christopher-Nevis-Anguilla" + ], + "created": "merged", + "date": "1983-09-19" + }, + "dependency": [ + "United Kingdom" + ], + "east": -62.9224348, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b4/Flag_of_Anguilla.svg", + "lat": 18.220554, + "lng": -63.068615, + "name": "Anguilla", + "north": 18.5955719, + "region": "Caribbean", + "south": 18.1499463, + "west": -63.4293939 + }, + { + "area": 35807592588.87033, + "code": "AIDJ", + "continent": "Africa", + "dependency": [ + "France" + ], + "dissolved": { + "country": [ + "Djibouti" + ], + "date": "1977-06-27", + "dissolved": "renamed" + }, + "east": 43.4169731, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 11.825138, + "lng": 42.590275, + "name": "French Afar and Issas", + "north": 12.7133956, + "region": "Eastern Africa", + "south": 10.9319442, + "west": 41.7597221, + "wikipediaName": "French Territory of the Afars and the Issas" + }, + { + "area": 50466764872.140465, + "code": "AL", + "continent": "Europe", + "east": 21.0572394, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/36/Flag_of_Albania.svg", + "languages": [ + "Albanian" + ], + "lat": 41.153332, + "lng": 20.168331, + "name": "Albania", + "north": 42.6610819, + "region": "Southern Europe", + "south": 39.6447296, + "west": 19.2639041 + }, + { + "area": 74364226651.78856, + "code": "AM", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-09-23" + }, + "east": 46.634222, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2f/Flag_of_Armenia.svg", + "languages": [ + "Armenian" + ], + "lat": 40.069099, + "lng": 45.038189, + "name": "Armenia", + "north": 41.300993, + "region": "Western Asia", + "south": 38.840244, + "west": 43.4472118 + }, + { + "area": 467596462541.78906, + "code": "ANHH", + "continent": "South America", + "dependency": [ + "Netherlands" + ], + "dissolved": { + "country": [ + "Bonaire, Sint Eustatius and Saba", + "Cura\u00e7ao", + "Sint Maarten" + ], + "date": "2010-10-10", + "dissolved": "split" + }, + "east": -62.9228, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/92/Flag_of_the_Netherlands_Antilles_%281986-2010%29.svg", + "lat": 12.2248767, + "lng": -68.8108849, + "name": "Netherlands Antilles", + "north": 18.0516, + "region": "Caribbean", + "south": 11.9224, + "west": -69.299 + }, + { + "area": 2055207622038.109, + "code": "AO", + "continent": "Africa", + "disputes": [ + "Cabinda" + ], + "east": 24.0844443, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9d/Flag_of_Angola.svg", + "independence": { + "country": [ + "Portugal" + ], + "date": "1975-11-11" + }, + "lat": -11.202692, + "lng": 17.873887, + "name": "Angola", + "north": -4.3879444, + "region": "Middle Africa", + "south": -18.039104, + "west": 11.669562 + }, + { + "area": 104997033.29673876, + "code": "AO-CAB", + "continent": "Africa", + "created": { + "country": [ + "Portugal" + ], + "created": "split", + "date": "1975-08-01" + }, + "disputed": [ + "Angola" + ], + "dissolved": { + "country": [ + "Angola" + ], + "date": "1975-11-11", + "dissolved": "joined" + }, + "east": 12.2682953, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/22/Flag_of_Cabinda.svg", + "lat": -5.556549, + "lng": 12.18984, + "name": "Cabinda", + "north": -5.5409834, + "region": "Middle Africa", + "south": -5.6216234, + "west": 12.1627235 + }, + { + "area": 33291563518969.44, + "code": "AQ", + "continent": "Antarctica", + "dependency": [ + "Argentina", + "Australia", + "Chile", + "France", + "New Zealand", + "Norway", + "United Kingdom" + ], + "east": 179.9999999999, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/68/Flag_of_the_Antarctic_Treaty.svg", + "lat": -72.5255643899, + "lng": 0, + "name": "Antarctica", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": -179.9999999999 + }, + { + "area": 6346680075284.267, + "code": "AR", + "continent": "South America", + "dependencies": [ + "Argentine Antarctica", + "Antarctica" + ], + "east": -53.637481, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1a/Flag_of_Argentina.svg", + "lat": -38.416097, + "lng": -63.616672, + "name": "Argentina", + "north": -21.7808136, + "region": "Southern America", + "south": -55.0577146, + "west": -73.5603601 + }, + { + "area": 4531351701195.581, + "code": "AR-AQ", + "continent": "Antarctica", + "dependency": [ + "Argentina" + ], + "east": -25, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/01/Flag_of_Tierra_del_Fuego_province_in_Argentina.svg", + "lat": -72.5255643899, + "lng": -49.5, + "name": "Argentine Antarctica", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": -74 + }, + { + "area": 3900152374.8784447, + "code": "AS", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "east": -169.4185568, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/87/Flag_of_American_Samoa.svg", + "lat": -14.305941, + "lng": -170.6962002, + "name": "American Samoa", + "north": -14.1551045, + "region": "Polynesia", + "south": -14.3824778, + "west": -170.8468222 + }, + { + "area": 168518540127.9662, + "code": "AT", + "continent": "Europe", + "east": 17.1607489, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/41/Flag_of_Austria.svg", + "lat": 47.516231, + "lng": 14.550072, + "name": "Austria", + "north": 49.0206081, + "region": "Western Europe", + "south": 46.372299, + "west": 9.5307834 + }, + { + "area": 21533004061653.816, + "code": "AU", + "continent": "Oceania", + "dependencies": [ + "Ashmore and Cartier Islands", + "Australian Antarctic Territory", + "Christmas Island", + "Cocos Islands", + "Coral Sea Islands", + "Heard Island and McDonald Islands", + "Norfolk Island", + "Antarctica" + ], + "east": 159.105459, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/b9/Flag_of_Australia.svg", + "languages": [ + "Aboriginal", + "Australian", + "Gunwinggu" + ], + "lat": -25.274398, + "lng": 133.775136, + "name": "Australia", + "north": -9.2210836, + "region": "Australia and New Zealand", + "south": -54.7772185, + "west": 112.9214544 + }, + { + "area": 552499290234.8615, + "code": "AU-AC", + "continent": "Oceania", + "dependency": [ + "Australia" + ], + "east": 127.6312338, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/b9/Flag_of_Australia.svg", + "lat": -12.5333333, + "lng": 123.5333333, + "name": "Ashmore and Cartier Islands", + "north": -9.7309344, + "region": "Australia and New Zealand", + "south": -15.3055948, + "west": 119.4354328 + }, + { + "area": 10668713086967.64, + "code": "AU-AQ", + "continent": "Antarctica", + "dependency": [ + "Australia" + ], + "east": 160, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/b9/Flag_of_Australia.svg", + "lat": -72.5255643899, + "lng": 102.3166666667, + "name": "Australian Antarctic Territory", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": 44.6333333333 + }, + { + "area": 7533838341216.605, + "code": "AU-CS", + "continent": "Oceania", + "dependency": [ + "Australia" + ], + "east": 169.8124453, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/b9/Flag_of_Australia.svg", + "lat": -19.3919547, + "lng": 155.8560646, + "name": "Coral Sea Islands", + "north": -7.5286054, + "region": "Australia and New Zealand", + "south": -30.0000002, + "west": 141.0550345, + "wikipediaName": "Coral Sea Islands Territory" + }, + { + "area": 512368143.2744644, + "code": "AW", + "continent": "South America", + "created": { + "country": [ + "Netherlands Antilles" + ], + "created": "split", + "date": "1986-01-01" + }, + "dependency": [ + "Netherlands" + ], + "east": -69.86588, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f6/Flag_of_Aruba.svg", + "lat": 12.52111, + "lng": -69.968338, + "name": "Aruba", + "north": 12.6233784, + "region": "Caribbean", + "south": 12.4117656, + "west": -70.0660256 + }, + { + "area": 13862996517.973103, + "code": "AX", + "continent": "Europe", + "dependency": [ + "Finland" + ], + "east": 21.4858534, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/52/Flag_of_%C3%85land.svg", + "lat": 60.3385485, + "lng": 20.2712585, + "name": "\u00c5land Islands", + "north": 60.7411127, + "region": "Northern Europe", + "south": 59.7272227, + "west": 19.2633194 + }, + { + "area": 186807274085.63242, + "code": "AZ", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-08-30" + }, + "disputes": [ + "Nagorno-Karabakh" + ], + "east": 50.3680657, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/dd/Flag_of_Azerbaijan.svg", + "languages": [ + "Azerbaijani" + ], + "lat": 40.143105, + "lng": 47.576927, + "name": "Azerbaijan", + "north": 41.9123402, + "region": "Western Asia", + "south": 38.3919901, + "west": 44.7646831 + }, + { + "area": 8726630575.197157, + "code": "AZ-NK", + "continent": "Asia", + "disputed": [ + "Azerbaijan" + ], + "east": 47.1954658, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8d/Flag_of_Nagorno-Karabakh.svg", + "lat": 40.1263658, + "lng": 46.5008174, + "name": "Nagorno-Karabakh", + "north": 40.4144162, + "region": "Western Asia", + "south": 39.4456576, + "west": 46.2474941, + "wikipediaName": "Nagorno-Karabakh Republic" + }, + { + "area": 94681777434.67616, + "code": "BA", + "continent": "Europe", + "created": { + "country": [ + "Yugoslavia" + ], + "created": "split", + "date": "1992-03-01" + }, + "east": 19.621935, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bf/Flag_of_Bosnia_and_Herzegovina.svg", + "languages": [ + "Bosnian" + ], + "lat": 43.915886, + "lng": 17.679076, + "name": "Bosnia and Herzegovina", + "north": 45.2766262, + "region": "Southern Europe", + "south": 42.5564068, + "west": 15.7223665 + }, + { + "area": 808358096.5728474, + "code": "BB", + "continent": "South America", + "east": -59.4200975, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ef/Flag_of_Barbados.svg", + "lat": 13.193887, + "lng": -59.543198, + "name": "Barbados", + "north": 13.335126, + "region": "Caribbean", + "south": 13.0449995, + "west": -59.6510303 + }, + { + "area": 311553243410.7361, + "code": "BD", + "continent": "Asia", + "created": { + "country": [ + "Pakistan" + ], + "created": "split", + "date": "1971-12-16" + }, + "east": 92.6801153, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f9/Flag_of_Bangladesh.svg", + "languages": [ + "Bengali" + ], + "lat": 23.684994, + "lng": 90.356331, + "name": "Bangladesh", + "north": 26.6342434, + "region": "Southern Asia", + "south": 20.7543802, + "west": 88.0085887 + }, + { + "area": 61144636854.214005, + "code": "BE", + "continent": "Europe", + "east": 6.4081241, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/65/Flag_of_Belgium.svg", + "languages": [ + "Flemish" + ], + "lat": 50.503887, + "lng": 4.469936, + "name": "Belgium", + "north": 51.5051449, + "region": "Western Europe", + "south": 49.497013, + "west": 2.5449406 + }, + { + "area": 546016014803.1511, + "code": "BF", + "continent": "Africa", + "created": { + "country": [ + "Upper Volta" + ], + "created": "renamed", + "date": "1984-08-04" + }, + "east": 2.4042926, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/31/Flag_of_Burkina_Faso.svg", + "languages": [ + "More" + ], + "lat": 12.238333, + "lng": -1.561593, + "name": "Burkina Faso", + "north": 15.0851111, + "region": "Western Africa", + "south": 9.3938888, + "west": -5.5211114 + }, + { + "area": 169561070289.8746, + "code": "BG", + "continent": "Europe", + "east": 28.6075898, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Bulgaria.svg", + "languages": [ + "Bulgarian" + ], + "lat": 42.733883, + "lng": 25.48583, + "name": "Bulgaria", + "north": 44.2151673, + "region": "Eastern Europe", + "south": 41.2354469, + "west": 22.3559007 + }, + { + "area": 3699913281.9765654, + "code": "BH", + "continent": "Asia", + "east": 50.8228639, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2c/Flag_of_Bahrain.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-12-16" + }, + "lat": 26.0667, + "lng": 50.5577, + "name": "Bahrain", + "north": 26.3265283, + "region": "Western Asia", + "south": 25.5798401, + "west": 50.3781509 + }, + { + "area": 49389727203.80458, + "code": "BI", + "continent": "Africa", + "east": 30.8501728, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/50/Flag_of_Burundi.svg", + "lat": -3.373056, + "lng": 29.918886, + "name": "Burundi", + "north": -2.309987, + "region": "Eastern Africa", + "south": -4.4692284, + "west": 29.000993 + }, + { + "area": 231377534721.0831, + "code": "BJ", + "continent": "Africa", + "created": { + "country": [ + "Dahomey" + ], + "created": "renamed", + "date": "1975-11-30" + }, + "east": 3.8433429, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0a/Flag_of_Benin.svg", + "lat": 9.30769, + "lng": 2.315834, + "name": "Benin", + "north": 12.4086111, + "region": "Western Africa", + "south": 6.2356319, + "west": 0.7766672 + }, + { + "area": 130170840.36823143, + "code": "BL", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -62.7892148, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 17.9, + "lng": -62.833333, + "name": "Saint Barth\u00e9lemy", + "north": 17.960853, + "region": "Caribbean", + "south": 17.8708287, + "west": -62.9118453 + }, + { + "area": 361672833.23584133, + "code": "BM", + "continent": "North America", + "dependency": [ + "United Kingdom" + ], + "east": -64.6473774, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bf/Flag_of_Bermuda.svg", + "lat": 32.3078, + "lng": -64.7505, + "name": "Bermuda", + "north": 32.391305, + "region": "Northern America", + "south": 32.24705, + "west": -64.886788 + }, + { + "area": 16615065722.487818, + "code": "BN", + "continent": "Asia", + "east": 115.3635623, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9c/Flag_of_Brunei.svg", + "googleName": "Brunei Darussalam", + "imdbName": "Brunei Darussalam", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1984-01-01" + }, + "lat": 4.535277, + "lng": 114.727669, + "name": "Brunei", + "north": 5.0471668, + "region": "South-Eastern Asia", + "south": 4.002508, + "west": 114.0760633 + }, + { + "area": 1914088188060.917, + "code": "BO", + "continent": "South America", + "east": -57.453803, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/de/Flag_of_Bolivia_%28state%29.svg", + "languages": [ + "Aymara" + ], + "lat": -16.290154, + "lng": -63.588653, + "name": "Bolivia", + "north": -9.669323, + "region": "Southern America", + "south": -22.8980899, + "west": -69.64499 + }, + { + "area": 411198929182.0769, + "code": "BQ", + "continent": "South America", + "created": { + "country": [ + "Netherlands Antilles" + ], + "created": "merged", + "date": "2010-10-10" + }, + "dependency": [ + "Netherlands" + ], + "east": -62.9457768, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1e/Flag_of_Bonaire.svg", + "lat": 15.1657632, + "lng": -65.68337005, + "name": "Bonaire, Sint Eustatius and Saba", + "north": 18.3069449, + "region": "Caribbean", + "south": 12.0245815, + "west": -68.4209633, + "wikipediaName": "Caribbean Netherlands" + }, + { + "area": 5548593919831.322, + "code": "BQAQ", + "continent": "Antarctica", + "dependency": [ + "United Kingdom" + ], + "east": -20, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Flag_of_the_British_Antarctic_Territory.svg", + "lat": -72.5255643899, + "lng": -50, + "name": "British Antarctic Territory", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": -80 + }, + { + "area": 18016100144861.344, + "code": "BR", + "continent": "South America", + "east": -34.792908, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/0/05/Flag_of_Brazil.svg", + "languages": [ + "Tupi", + "Brazilian" + ], + "lat": -14.235004, + "lng": -51.92528, + "name": "Brazil", + "north": 5.2716019, + "region": "Southern America", + "south": -33.7517528, + "west": -73.982817 + }, + { + "area": 490185328604.69745, + "code": "BS", + "continent": "South America", + "east": -72.7120686, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/93/Flag_of_the_Bahamas.svg", + "googleName": "The Bahamas", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1973-07-10" + }, + "lat": 25.03428, + "lng": -77.39628, + "name": "Bahamas", + "north": 27.263362, + "region": "Caribbean", + "south": 20.9121311, + "west": -79.5377959, + "wikipediaName": "The Bahamas" + }, + { + "area": 61586519695.02172, + "code": "BT", + "continent": "Asia", + "east": 92.1252321, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/91/Flag_of_Bhutan.svg", + "lat": 27.514162, + "lng": 90.433601, + "name": "Bhutan", + "north": 28.360825, + "region": "Southern Asia", + "south": 26.702016, + "west": 88.7464735 + }, + { + "area": 1987185942406.8538, + "code": "BUMM", + "continent": "Asia", + "dissolved": { + "country": [ + "Myanmar" + ], + "date": "1989-06-18", + "dissolved": "renamed" + }, + "east": 101.1702717, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1d/Flag_of_Myanmar_%281974-2010%29.svg", + "languages": [ + "Burmese" + ], + "lat": 21.913965, + "lng": 95.956223, + "name": "Burma", + "north": 28.5478351, + "region": "South-Eastern Asia", + "south": 9.6053198, + "west": 92.171808 + }, + { + "area": 68205327.80421972, + "code": "BV", + "continent": "Antarctica", + "dependency": [ + "Norway" + ], + "east": 3.4879756, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Flag_of_Norway.svg", + "lat": -54.423199, + "lng": 3.413194, + "name": "Bouvet Island", + "north": -54.400322, + "region": "Antarctica", + "south": -54.4623789, + "west": 3.335499 + }, + { + "area": 980095616844.6542, + "code": "BW", + "continent": "Africa", + "east": 29.3753036, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fa/Flag_of_Botswana.svg", + "lat": -22.328474, + "lng": 24.684866, + "name": "Botswana", + "north": -17.778137, + "region": "Southern Africa", + "south": -26.9075451, + "west": 19.998905 + }, + { + "area": 345533040726.3922, + "code": "BY", + "continent": "Europe", + "created": { + "country": [ + "Byelorussian Soviet Socialist Republic" + ], + "created": "renamed", + "date": "1991-08-25" + }, + "east": 32.7768202, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/85/Flag_of_Belarus.svg", + "independence": { + "country": [ + "Soviet Union" + ], + "date": "1991-08-25" + }, + "languages": [ + "Belarusian" + ], + "lat": 53.709807, + "lng": 27.953389, + "name": "Belarus", + "north": 56.172494, + "region": "Eastern Europe", + "south": 51.262011, + "west": 23.1783377 + }, + { + "area": 345533040726.3922, + "code": "BYAA", + "continent": "Europe", + "dependency": [ + "Soviet Union" + ], + "dissolved": { + "country": [ + "Belarus" + ], + "date": "1991-08-25", + "dissolved": "renamed" + }, + "east": 32.7768202, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/46/Flag_of_Byelorussian_SSR.svg", + "lat": 53.709807, + "lng": 27.953389, + "name": "Byelorussian Soviet Socialist Republic", + "north": 56.172494, + "region": "Eastern Europe", + "south": 51.262011, + "west": 23.1783377 + }, + { + "area": 54811369908.70548, + "code": "BZ", + "continent": "South America", + "created": { + "country": [ + "British Honduras" + ], + "created": "renamed", + "date": "1973-06-01" + }, + "east": -87.4537253, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e7/Flag_of_Belize.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1973-06-01" + }, + "lat": 17.189877, + "lng": -88.49765, + "name": "Belize", + "north": 18.4959419, + "region": "Central America", + "south": 15.8856189, + "west": -89.2275879 + }, + { + "area": 20574297060671.438, + "code": "CA", + "continent": "North America", + "east": -52.6194086, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/cf/Flag_of_Canada.svg", + "languages": [ + "Cree", + "Nisga'a" + ], + "lat": 56.130366, + "lng": -106.346771, + "name": "Canada", + "north": 83.115061, + "region": "Northern America", + "south": 41.6765559, + "west": -141.00187 + }, + { + "area": 536938084.815205, + "code": "CC", + "continent": "Asia", + "dependency": [ + "Australia" + ], + "east": 96.9300556, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/74/Flag_of_the_Cocos_%28Keeling%29_Islands.svg", + "googleName": "Cocos (Keeling) Islands", + "imdbName": "Cocos (Keeling) Islands", + "lat": -12.1707796, + "lng": 96.8417392, + "name": "Cocos Islands", + "north": -11.8219891, + "region": "South-Eastern Asia", + "south": -12.2088942, + "west": 96.8155574, + "wikipediaName": "Cocos (Keeling) Islands" + }, + { + "area": 4437461670331.977, + "code": "CD", + "continent": "Africa", + "created": { + "country": [ + "Zaire" + ], + "created": "renamed", + "date": "1997-05-17" + }, + "east": 31.3146115, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6f/Flag_of_the_Democratic_Republic_of_the_Congo.svg", + "imdbName": "The Democratic Republic Of Congo", + "languages": [ + "Lingala" + ], + "lat": -4.038333, + "lng": 21.758664, + "name": "Democratic Republic of the Congo", + "north": 5.3920026, + "region": "Middle Africa", + "south": -13.459035, + "west": 12.1855092 + }, + { + "area": 1411025431928.9167, + "code": "CF", + "continent": "Africa", + "east": 27.4583051, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6f/Flag_of_the_Central_African_Republic.svg", + "lat": 6.611111, + "lng": 20.939444, + "name": "Central African Republic", + "north": 11.0179569, + "region": "Middle Africa", + "south": 2.2208575, + "west": 14.4150981 + }, + { + "area": 810512052374.2054, + "code": "CG", + "continent": "Africa", + "east": 18.6436111, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/92/Flag_of_the_Republic_of_the_Congo.svg", + "googleName": "Congo", + "imdbName": "Congo", + "lat": -0.228021, + "lng": 15.827659, + "name": "Republic of the Congo", + "north": 3.707791, + "region": "Middle Africa", + "south": -5.0289487, + "west": 11.1495478 + }, + { + "area": 76574669332.10374, + "code": "CH", + "continent": "Europe", + "east": 10.4923401, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/08/Flag_of_Switzerland_%28Pantone%29.svg", + "languages": [ + "Romansh", + "Swiss German" + ], + "lat": 46.818188, + "lng": 8.227512, + "name": "Switzerland", + "north": 47.8084546, + "region": "Western Europe", + "south": 45.81792, + "west": 5.95608 + }, + { + "area": 479232148086.64526, + "code": "CI", + "continent": "Africa", + "east": -2.493031, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/86/Flag_of_Cote_d%27Ivoire.svg", + "googleName": "Ivory Coast", + "lat": 7.539989, + "lng": -5.54708, + "name": "C\u00f4te d'Ivoire", + "north": 10.7400151, + "region": "Western Africa", + "south": 4.3510071, + "west": -8.6020589, + "wikipediaName": "Ivory Coast" + }, + { + "area": 1327046744594.7834, + "code": "CK", + "continent": "Oceania", + "dependency": [ + "New Zealand" + ], + "east": -157.3216064, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/35/Flag_of_the_Cook_Islands.svg", + "lat": -21.236736, + "lng": -159.777671, + "name": "Cook Islands", + "north": -8.916606, + "region": "Polynesia", + "south": -21.9591364, + "west": -165.8580933 + }, + { + "area": 16138765657013.834, + "code": "CL", + "continent": "South America", + "dependencies": [ + "Chilean Antarctic Territory", + "Antarctica" + ], + "east": -66.4182016, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/78/Flag_of_Chile.svg", + "languages": [ + "Mapudungun" + ], + "lat": -35.675147, + "lng": -71.542969, + "name": "Chile", + "north": -17.4983293, + "region": "Southern America", + "south": -55.9797808, + "west": -109.454801 + }, + { + "area": 3421632917229.316, + "code": "CL-AQ", + "continent": "Antarctica", + "dependency": [ + "Chile" + ], + "east": -53, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8d/Flag_of_Magallanes%2C_Chile.svg", + "lat": -72.5255643899, + "lng": -71.5, + "name": "Chilean Antarctic Territory", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": -90 + }, + { + "area": 1079541457211.6615, + "code": "CM", + "continent": "Africa", + "east": 16.1944079, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4f/Flag_of_Cameroon.svg", + "lat": 7.369722, + "lng": 12.354722, + "name": "Cameroon", + "north": 13.083335, + "region": "Middle Africa", + "south": 1.6558999, + "west": 8.4947635 + }, + { + "area": 21444604637248.695, + "code": "CN", + "continent": "Asia", + "dependencies": [ + "Hong Kong", + "Macau" + ], + "east": 134.7728099, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fa/Flag_of_the_People%27s_Republic_of_China.svg", + "languages": [ + "Mandarin", + "Hakka", + "Cantonese", + "Tibetan", + "Chinese", + "Chaozhou", + "Shanghainese", + "Hokkien", + "Naxi", + "Shanxi", + "Min Nan", + "Uighur" + ], + "lat": 35.86166, + "lng": 104.195397, + "name": "China", + "north": 53.560974, + "region": "Eastern Asia", + "south": 18.1535216, + "west": 73.4994136 + }, + { + "area": 3227545859888.26, + "code": "CO", + "continent": "South America", + "east": -66.851923, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/21/Flag_of_Colombia.svg", + "lat": 4.570868, + "lng": -74.297333, + "name": "Colombia", + "north": 13.3973501, + "region": "Southern America", + "south": -4.22711, + "west": -81.7359299 + }, + { + "area": 12998110.19815648, + "code": "CP", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -109.1993179, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 10.284842, + "lng": -109.2162498, + "name": "Clipperton Island", + "north": 10.3134499, + "region": "Central America", + "south": 10.2820702, + "west": -109.2332915 + }, + { + "area": 318414348310.5174, + "code": "CR", + "continent": "South America", + "east": -82.5526571, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_Costa_Rica_%28state%29.svg", + "lat": 9.748917, + "lng": -83.753428, + "name": "Costa Rica", + "north": 11.2196808, + "region": "Central America", + "south": 5.4991534, + "west": -87.0945131 + }, + { + "area": 280640895305.775, + "code": "CSHH", + "continent": "Europe", + "dissolved": { + "country": [ + "Czech Republic", + "Slovakia" + ], + "date": "1993-01-01", + "dissolved": "split" + }, + "east": 22.5589339, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cb/Flag_of_the_Czech_Republic.svg", + "lat": 49.39355365, + "lng": 17.32476145, + "name": "Czechoslovakia", + "north": 51.0557185, + "region": "Eastern Europe", + "south": 47.7313888, + "west": 12.090589 + }, + { + "area": 176788955025.32986, + "code": "CSXX", + "continent": "Europe", + "created": { + "country": [ + "Yugoslavia" + ], + "created": "renamed", + "date": "2003-02-04" + }, + "dissolved": { + "country": [ + "Serbia", + "Montenegro" + ], + "date": "2006-06-05", + "dissolved": "split" + }, + "east": 23.0063915, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/90/Flag_of_Serbia_and_Montenegro.svg", + "lat": 44.01958135, + "lng": 20.7200918, + "name": "Serbia and Montenegro", + "north": 46.1894461, + "region": "Southern Europe", + "south": 41.8497166, + "west": 18.4337921 + }, + { + "area": 3073356240.6199794, + "code": "CTKI", + "continent": "Oceania", + "dependency": [ + "United Kingdom", + "United States" + ], + "dissolved": { + "country": [ + "Kiribati" + ], + "date": "1979-07-12", + "dissolved": "merged" + }, + "east": -171.075486, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Gilbert_and_Ellice_Islands.svg", + "lat": -2.955756, + "lng": -171.39963095, + "name": "Canton and Enderbury Islands", + "north": -2.7642201, + "region": "Micronesia", + "south": -3.1472919, + "west": -171.7237759 + }, + { + "area": 435017353019.0518, + "code": "CU", + "continent": "South America", + "east": -74.1322231, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bd/Flag_of_Cuba.svg", + "lat": 21.521757, + "lng": -77.781167, + "name": "Cuba", + "north": 23.2767521, + "region": "Caribbean", + "south": 19.8258994, + "west": -85.071256 + }, + { + "area": 77368961930.72092, + "code": "CV", + "continent": "Africa", + "east": -22.6577782, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/38/Flag_of_Cape_Verde.svg", + "independence": { + "country": [ + "Portugal" + ], + "date": "1975-07-05" + }, + "languages": [ + "Kabuverdianu", + "Kriolu" + ], + "lat": 15.1217288, + "lng": -23.6050817, + "name": "Cape Verde", + "north": 17.2052865, + "region": "Western Africa", + "south": 14.8023513, + "west": -25.3609944 + }, + { + "area": 2622894061.474846, + "code": "CW", + "continent": "South America", + "created": { + "country": [ + "Netherlands Antilles" + ], + "created": "merged", + "date": "2010-10-10" + }, + "dependency": [ + "Netherlands" + ], + "east": -68.6398315, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b1/Flag_of_Cura%C3%A7ao.svg", + "lat": 12.16957, + "lng": -68.99002, + "name": "Cura\u00e7ao", + "north": 12.3924356, + "region": "Caribbean", + "south": 11.9780353, + "west": -69.1623668 + }, + { + "area": 344624352.6729794, + "code": "CX", + "continent": "Asia", + "dependency": [ + "Australia" + ], + "east": 105.7126474, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/67/Flag_of_Christmas_Island.svg", + "lat": -10.447525, + "lng": 105.690449, + "name": "Christmas Island", + "north": -10.4123743, + "region": "South-Eastern Asia", + "south": -10.5700879, + "west": 105.5333161 + }, + { + "area": 25433013804.42087, + "code": "CY", + "continent": "Asia", + "disputes": [ + "Northern Cyprus" + ], + "east": 34.6045, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d4/Flag_of_Cyprus.svg", + "lat": 35.126413, + "lng": 33.429859, + "name": "Cyprus", + "north": 35.7071999, + "region": "Western Asia", + "south": 34.632303, + "west": 32.2687076 + }, + { + "area": 14756720233.830664, + "code": "CY-NC", + "continent": "Asia", + "disputed": [ + "Cyprus" + ], + "east": 34.5883512, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1e/Flag_of_the_Turkish_Republic_of_Northern_Cyprus.svg", + "lat": 35.32864295, + "lng": 33.594625, + "name": "Northern Cyprus", + "north": 35.6958526, + "region": "Western Asia", + "south": 34.9614333, + "west": 32.6008988 + }, + { + "area": 135538457364.93378, + "code": "CZ", + "continent": "Europe", + "created": { + "country": [ + "Czechoslovakia" + ], + "created": "merged", + "date": "1993-01-01" + }, + "east": 18.8592361, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cb/Flag_of_the_Czech_Republic.svg", + "languages": [ + "Czech" + ], + "lat": 49.817492, + "lng": 15.472962, + "name": "Czech Republic", + "north": 51.0557185, + "region": "Eastern Europe", + "south": 48.5518081, + "west": 12.090589 + }, + { + "area": 176094999206.0812, + "code": "DDDE", + "continent": "Europe", + "dissolved": { + "country": [ + "Germany" + ], + "date": "1990-10-03", + "dissolved": "merged" + }, + "east": 15.0418962, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f6/Flag_of_German_Democratic_Republic.svg", + "lat": 52.42802665, + "lng": 12.4594401, + "name": "East Germany", + "north": 54.68469, + "region": "Western Europe", + "south": 50.1713633, + "west": 9.876984 + }, + { + "area": 554893218804.3876, + "code": "DE", + "continent": "Europe", + "created": { + "country": [ + "East Germany", + "West Germany" + ], + "created": "merged", + "date": "1990-10-03" + }, + "east": 15.0418962, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/ba/Flag_of_Germany.svg", + "languages": [ + "German", + "Eastern Frisian", + "Sorbian", + "Low German" + ], + "lat": 51.165691, + "lng": 10.451526, + "name": "Germany", + "north": 55.058347, + "region": "Western Europe", + "south": 47.2701115, + "west": 5.8663425 + }, + { + "area": 482186388933.63434, + "code": "DEDE", + "continent": "Europe", + "dissolved": { + "country": [ + "Germany" + ], + "date": "1990-10-03", + "dissolved": "merged" + }, + "east": 13.8396371, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/ba/Flag_of_Germany.svg", + "lat": 51.16422925, + "lng": 9.8529898, + "name": "West Germany", + "north": 55.058347, + "region": "Western Europe", + "south": 47.2701115, + "west": 5.8663425 + }, + { + "area": 362584546.5342261, + "code": "DG", + "continent": "Asia", + "dependency": [ + "British Indian Ocean Territory" + ], + "east": 72.4943804, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6e/Flag_of_the_British_Indian_Ocean_Territory.svg", + "lat": -7.3195005, + "lng": 72.4228556, + "name": "Diego Garcia", + "north": -7.2332526, + "region": "Southern Asia", + "south": -7.4435391, + "west": 72.3540901 + }, + { + "area": 35807592588.87033, + "code": "DJ", + "continent": "Africa", + "created": { + "country": [ + "French Afar and Issas" + ], + "created": "renamed", + "date": "1977-06-27" + }, + "east": 43.4169731, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/34/Flag_of_Djibouti.svg", + "independence": { + "country": [ + "France" + ], + "date": "1977-06-27" + }, + "lat": 11.825138, + "lng": 42.590275, + "name": "Djibouti", + "north": 12.7133956, + "region": "Eastern Africa", + "south": 10.9319442, + "west": 41.7597221 + }, + { + "area": 156971442579.48773, + "code": "DK", + "continent": "Europe", + "dependencies": [ + "Faroe Islands", + "Greenland" + ], + "east": 15.1972813, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9c/Flag_of_Denmark.svg", + "languages": [ + "Danish" + ], + "lat": 56.26392, + "lng": 9.501785, + "name": "Denmark", + "north": 57.7518131, + "region": "Northern Europe", + "south": 54.5591211, + "west": 8.0725589 + }, + { + "area": 1237179673.7944572, + "code": "DM", + "continent": "South America", + "east": -61.2403035, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/c4/Flag_of_Dominica.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1978-11-03" + }, + "lat": 15.414999, + "lng": -61.370976, + "name": "Dominica", + "north": 15.6400639, + "region": "Caribbean", + "south": 15.207682, + "west": -61.4798301 + }, + { + "area": 106440578993.17665, + "code": "DO", + "continent": "South America", + "east": -68.3234068, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9f/Flag_of_the_Dominican_Republic.svg", + "lat": 18.735693, + "lng": -70.162651, + "name": "Dominican Republic", + "north": 19.9317185, + "region": "Caribbean", + "south": 17.4700909, + "west": -72.0075099 + }, + { + "area": 231377534721.0831, + "code": "DYBJ", + "continent": "Africa", + "dissolved": { + "country": [ + "Benin" + ], + "date": "1975-11-30", + "dissolved": "renamed" + }, + "east": 3.8433429, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0a/Flag_of_Benin.svg", + "lat": 9.30769, + "lng": 2.315834, + "name": "Dahomey", + "north": 12.4086111, + "region": "Western Africa", + "south": 6.2356319, + "west": 0.7766672, + "wikipediaName": "Republic of Dahomey" + }, + { + "area": 4079600969545.9604, + "code": "DZ", + "continent": "Africa", + "east": 11.9999997, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_Algeria.svg", + "languages": [ + "Tamashek" + ], + "lat": 28.033886, + "lng": 1.659626, + "name": "Algeria", + "north": 37.089829, + "region": "Northern Africa", + "south": 18.968147, + "west": -8.6666671 + }, + { + "area": 16168736425.77416, + "code": "EA", + "continent": "Africa", + "dependency": [ + "Spain" + ], + "east": -2.9232245, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Flag_Ceuta.svg", + "lat": 35.5917321, + "lng": -4.152717, + "name": "Ceuta and Melilla", + "north": 35.9179899, + "region": "Northern Africa", + "south": 35.2654743, + "west": -5.3822095, + "wikipediaName": "Ceuta" + }, + { + "area": 1390937132987.864, + "code": "EC", + "continent": "South America", + "east": -75.188794, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e8/Flag_of_Ecuador.svg", + "lat": -1.831239, + "lng": -78.183406, + "name": "Ecuador", + "north": 1.6647727, + "region": "Southern America", + "south": -5.0143511, + "west": -92.0107728 + }, + { + "area": 91158981019.11528, + "code": "EE", + "continent": "Europe", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-08-20" + }, + "east": 28.2101389, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8f/Flag_of_Estonia.svg", + "languages": [ + "Estonian" + ], + "lat": 58.595272, + "lng": 25.013607, + "name": "Estonia", + "north": 59.7001935, + "region": "Northern Europe", + "south": 57.5093155, + "west": 21.7643126 + }, + { + "area": 1302913144530.2227, + "code": "EG", + "continent": "Africa", + "created": { + "country": [ + "United Arab Republic" + ], + "created": "renamed", + "date": "1971-09-01" + }, + "east": 36.8945446, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fe/Flag_of_Egypt.svg", + "languages": [ + "Egyptian (Ancient)" + ], + "lat": 26.820553, + "lng": 30.802498, + "name": "Egypt", + "north": 31.671535, + "region": "Northern Africa", + "south": 21.9999999, + "west": 24.6967748 + }, + { + "area": 1302913144530.2227, + "code": "EGEG", + "continent": "Africa", + "dissolved": { + "country": [ + "Egypt" + ], + "date": "1971-09-01", + "dissolved": "renamed" + }, + "east": 36.8945446, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/53/Flag_of_Syria.svg", + "lat": 26.820553, + "lng": 30.802498, + "name": "United Arab Republic", + "north": 31.671535, + "region": "Northern Africa", + "south": 21.9999999, + "west": 24.6967748 + }, + { + "area": 657218896448.5967, + "code": "EH", + "continent": "Africa", + "disputed": [ + "Morocco" + ], + "east": -8.666666, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/26/Flag_of_the_Sahrawi_Arab_Democratic_Republic.svg", + "googleName": "Western Sahara", + "imdbName": "Western Sahara", + "lat": 24.215527, + "lng": -12.885834, + "name": "Sahrawi", + "north": 27.6666776, + "region": "Northern Africa", + "south": 20.7709613, + "west": -17.1051121, + "wikipediaName": "Sahrawi Arab Democratic Republic" + }, + { + "area": 454503611784.04706, + "code": "ER", + "continent": "Africa", + "east": 43.1429772, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/29/Flag_of_Eritrea.svg", + "lat": 15.179384, + "lng": 39.782334, + "name": "Eritrea", + "north": 18.0212099, + "region": "Eastern Africa", + "south": 12.354723, + "west": 36.4333479 + }, + { + "area": 3642765521262.5747, + "code": "ES", + "continent": "Europe", + "dependencies": [ + "Canary Islands", + "Ceuta and Melilla" + ], + "east": 4.3279852, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/9/9a/Flag_of_Spain.svg", + "languages": [ + "Spanish", + "Galician", + "Catalan", + "Basque" + ], + "lat": 40.463667, + "lng": -3.74922, + "name": "Spain", + "north": 43.790362, + "region": "Southern Europe", + "south": 27.6378104, + "west": -18.1606357 + }, + { + "area": 2105395255131.262, + "code": "ET", + "continent": "Africa", + "east": 47.9999999, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/71/Flag_of_Ethiopia.svg", + "languages": [ + "Amharic" + ], + "lat": 9.145, + "lng": 40.489673, + "name": "Ethiopia", + "north": 14.8942145, + "region": "Eastern Africa", + "south": 3.4041356, + "west": 32.997734 + }, + { + "area": 18914071949433.992, + "code": "EU", + "continent": "Europe", + "east": 34.6045, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg", + "lat": 51.2480166, + "lng": 1.664671, + "name": "European Union", + "north": 70.0922932, + "region": "Western Europe", + "south": 32.40374, + "west": -31.275158 + }, + { + "area": 602169947135.1476, + "code": "FI", + "continent": "Europe", + "dependencies": [ + "\u00c5land Islands" + ], + "east": 31.5870999, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_Finland.svg", + "languages": [ + "Finnish", + "Saami" + ], + "lat": 61.92411, + "lng": 25.748151, + "name": "Finland", + "north": 70.0922932, + "region": "Northern Europe", + "south": 59.7025822, + "west": 20.5474108 + }, + { + "area": 472715141753.4359, + "code": "FJ", + "continent": "Oceania", + "east": -178.2301068, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/ba/Flag_of_Fiji.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1970-10-10" + }, + "lat": -17.713371, + "lng": 178.065032, + "name": "Fiji", + "north": -12.480116, + "region": "Melanesia", + "south": -20.6759701, + "west": 176.9094944 + }, + { + "area": 32328823430.619804, + "code": "FK", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "east": -57.7161145, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/83/Flag_of_the_Falkland_Islands.svg", + "lat": -51.796253, + "lng": -59.523613, + "name": "Falkland Islands", + "north": -51.2332592, + "region": "Southern America", + "south": -52.3952965, + "west": -61.3477064 + }, + { + "area": 1933971039488.7449, + "code": "FM", + "continent": "Oceania", + "created": { + "country": [ + "Pacific Islands" + ], + "created": "split", + "date": "1986-11-03" + }, + "east": 163.0355912, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e4/Flag_of_the_Federated_States_of_Micronesia.svg", + "imdbName": "Federated States of Micronesia", + "independence": { + "country": [ + "United States" + ], + "date": "1986-11-03" + }, + "lat": 6.8874574, + "lng": 158.2150717, + "name": "Micronesia", + "north": 10.1196133, + "region": "Micronesia", + "south": 3.8224419, + "west": 138.0549824, + "wikipediaName": "Federated States of Micronesia" + }, + { + "area": 8435784826.553218, + "code": "FO", + "continent": "Europe", + "dependency": [ + "Denmark" + ], + "east": -6.251564, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/3c/Flag_of_the_Faroe_Islands.svg", + "languages": [ + "Faroese" + ], + "lat": 61.892635, + "lng": -6.911806, + "name": "Faroe Islands", + "north": 62.3940993, + "region": "Northern Europe", + "south": 61.3909051, + "west": -7.691905 + }, + { + "area": 62124826982781.19, + "code": "FQHH", + "continent": "Antarctica", + "dependency": [ + "France" + ], + "dissolved": { + "country": [ + "Ad\u00e9lie Land", + "French Southern Territories" + ], + "date": "1979", + "dissolved": "split" + }, + "east": 142.1833333333, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a7/Flag_of_the_French_Southern_and_Antarctic_Lands.svg", + "lat": -47.5741173399, + "lng": 88.8927164167, + "name": "French Southern and Antarctic Territories", + "north": -10.0971059, + "region": "Antarctica", + "south": -85.0511287798, + "west": 35.6020995, + "wikipediaName": "French Southern and Antarctic Lands" + }, + { + "area": 1227159963368.9717, + "code": "FR", + "continent": "Europe", + "dependencies": [ + "Ad\u00e9lie Land", + "Clipperton Island", + "French Afar and Issas", + "French Guiana", + "French Polynesia", + "French Southern and Antarctic Territories", + "French Southern Territories", + "Guadeloupe", + "Martinique", + "Mayotte", + "New Caledonia", + "R\u00e9union", + "Saint Barth\u00e9lemy", + "Saint Martin", + "Saint Pierre and Miquelon", + "Wallis and Futuna", + "New Hebrides", + "Antarctica" + ], + "east": 9.5600678, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "languages": [ + "French", + "Breton", + "Corsican" + ], + "lat": 46.227638, + "lng": 2.213749, + "name": "France", + "north": 51.0889618, + "region": "Western Europe", + "south": 41.3423276, + "west": -5.1412279 + }, + { + "area": 568730876782.7081, + "code": "FR-AQ", + "continent": "Antarctica", + "created": { + "country": [ + "French Southern and Antarctic Territories" + ], + "created": "merged", + "date": "1979" + }, + "dependency": [ + "France" + ], + "east": 142.1833333333, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a7/Flag_of_the_French_Southern_and_Antarctic_Lands.svg", + "lat": -72.5255643899, + "lng": 139.1083333333, + "name": "Ad\u00e9lie Land", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": 136.0333333333 + }, + { + "area": 1227159963368.9717, + "code": "FXFR", + "continent": "Europe", + "dissolved": { + "country": [ + "France" + ], + "date": "1997", + "dissolved": "joined" + }, + "east": 9.5600678, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 46.227638, + "lng": 2.213749, + "name": "Metropolitan France", + "north": 51.0889618, + "region": "Western Europe", + "south": 41.3423276, + "west": -5.1412279 + }, + { + "area": 452514159064.17694, + "code": "GA", + "continent": "Africa", + "east": 14.5205562, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/04/Flag_of_Gabon.svg", + "lat": -0.803689, + "lng": 11.609444, + "name": "Gabon", + "north": 2.3181094, + "region": "Middle Africa", + "south": -3.9583722, + "west": 8.6990528 + }, + { + "area": 805219897437.0283, + "code": "GB", + "continent": "Europe", + "dependencies": [ + "Canton and Enderbury Islands", + "New Hebrides", + "Akrotiri and Dhekelia", + "Anguilla", + "Bermuda", + "British Antarctic Territory", + "British Honduras", + "British Indian Ocean Territory", + "British Virgin Islands", + "Cayman Islands", + "Ellice Islands", + "England", + "Falkland Islands", + "Gibraltar", + "Gilbert and Ellice Islands", + "Gilbert Islands", + "Guernsey", + "Isle of Man", + "Jersey", + "Montserrat", + "Northern Ireland", + "Pitcairn Islands", + "Saint Christopher-Nevis-Anguilla", + "Saint Helena, Ascension and Tristan da Cunha", + "Scotland", + "South Georgia and the South Sandwich Islands", + "Southern Rhodesia", + "Trucial States", + "Turks and Caicos Islands", + "Wales", + "Antarctica" + ], + "disputes": [ + "Sealand" + ], + "east": 1.7629159, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg", + "googleName": "UK", + "languages": [ + "Cornish", + "English", + "British" + ], + "lat": 55.36275335, + "lng": -3.4434703, + "name": "United Kingdom", + "north": 60.8607515, + "region": "Northern Europe", + "south": 49.8647552, + "west": -8.6498565 + }, + { + "area": 3763147324.393127, + "code": "GB-AD", + "continent": "Asia", + "dependency": [ + "United Kingdom" + ], + "east": 33.7422416, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg", + "lat": 34.7836031, + "lng": 33.3210707, + "name": "Akrotiri and Dhekelia", + "north": 35.0030771, + "region": "Western Asia", + "south": 34.5641291, + "west": 32.8998998 + }, + { + "area": 363979825232.1402, + "code": "GB-ENG", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": 1.7629159, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/be/Flag_of_England.svg", + "languages": [ + "Middle English", + "Old English" + ], + "lat": 52.3555177, + "lng": -1.1743197, + "name": "England", + "north": 55.8111127, + "region": "Northern Europe", + "south": 49.8647552, + "west": -6.4177822 + }, + { + "area": 25435929475.451546, + "code": "GB-NIR", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -5.4268101, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/88/Ulster_banner.svg", + "lat": 54.7877149, + "lng": -6.4923145, + "name": "Northern Ireland", + "north": 55.31294, + "region": "Northern Europe", + "south": 54.02261, + "west": -8.17754 + }, + { + "area": 326224251952.7849, + "code": "GB-SCT", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -0.7246751, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/10/Flag_of_Scotland.svg", + "lat": 56.4906712, + "lng": -4.2026458, + "name": "Scotland", + "north": 60.8607515, + "region": "Northern Europe", + "south": 54.6332381, + "west": -8.6498565 + }, + { + "area": 2225.6905961695456, + "code": "GB-SL", + "continent": "Europe", + "disputed": [ + "United Kingdom" + ], + "east": 1.4808727056, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e5/Flag_of_Sealand.svg", + "lat": 51.8951666666, + "lng": 1.4805, + "name": "Sealand", + "north": 51.8953618934, + "region": "Northern Europe", + "south": 51.8949714399, + "west": 1.4801272944 + }, + { + "area": 47051070593.04867, + "code": "GB-WLS", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -2.6497994, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/59/Flag_of_Wales_2.svg", + "languages": [ + "Welsh" + ], + "lat": 52.1306607, + "lng": -3.7837117, + "name": "Wales", + "north": 53.4356935, + "region": "Northern Europe", + "south": 51.3749686, + "west": -5.6700973 + }, + { + "area": 190384162117.00742, + "code": "GBAE", + "continent": "Asia", + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Abu Dhabi", + "Ajman", + "Dubai", + "Fujairah", + "Ras al-Khaimah", + "Sharjah", + "Umm al-Quwain" + ], + "date": "1971-12-01", + "dissolved": "split" + }, + "east": 56.4053766, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/03/Flag_of_the_Trucial_States.svg", + "lat": 23.424076, + "lng": 53.847818, + "name": "Trucial States", + "north": 26.0696541, + "region": "Western Asia", + "south": 22.6315138, + "west": 51.4997702 + }, + { + "area": 54811369908.70548, + "code": "GBBZ", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Belize" + ], + "date": "1973-06-01", + "dissolved": "renamed" + }, + "east": -87.4537253, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8a/Flag_of_British_Honduras.svg", + "lat": 17.189877, + "lng": -88.49765, + "name": "British Honduras", + "north": 18.4959419, + "region": "Central America", + "south": 15.8856189, + "west": -89.2275879 + }, + { + "area": 15756536319.603956, + "code": "GBKN", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Anguilla", + "Saint Kitts and Nevis" + ], + "date": "1983-09-19", + "dissolved": "split" + }, + "east": -62.5396943, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d3/Flag_of_St_Kitts-Nevis-Anguilla.svg", + "lat": 17.84486445, + "lng": -62.9845441, + "name": "Saint Christopher-Nevis-Anguilla", + "north": 18.5955719, + "region": "Caribbean", + "south": 17.094157, + "west": -63.4293939 + }, + { + "area": 2804675774.3776283, + "code": "GD", + "continent": "South America", + "east": -61.3779974, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_Grenada.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1974-02-07" + }, + "lat": 12.1165, + "lng": -61.679, + "name": "Grenada", + "north": 12.5301829, + "region": "Caribbean", + "south": 11.9848728, + "west": -61.8027279 + }, + { + "area": 156088824232.12457, + "code": "GE", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-04-08" + }, + "disputes": [ + "Abkhazia", + "South Ossetia" + ], + "east": 46.736119, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0f/Flag_of_Georgia.svg", + "languages": [ + "Georgian" + ], + "lat": 42.315407, + "lng": 43.356892, + "name": "Georgia", + "north": 43.586627, + "region": "Western Asia", + "south": 41.054942, + "west": 40.0066113, + "wikipediaName": "Georgia (country)" + }, + { + "area": 22762380667.00968, + "code": "GE-AB", + "continent": "Asia", + "disputed": [ + "Georgia" + ], + "east": 42.149976, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/27/Flag_of_Abkhazia.svg", + "languages": [ + "Abkhazian" + ], + "lat": 42.9737816, + "lng": 41.4421799, + "name": "Abkhazia", + "north": 43.584541, + "region": "Western Asia", + "south": 42.4107362, + "west": 40.0103256 + }, + { + "area": 9503348376.03357, + "code": "GE-SK", + "continent": "Asia", + "disputed": [ + "Georgia" + ], + "east": 44.569049, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/12/Flag_of_South_Ossetia.svg", + "lat": 42.0756944, + "lng": 43.9540462, + "name": "South Ossetia", + "north": 42.633717, + "region": "Western Asia", + "south": 41.733082, + "west": 43.4199111 + }, + { + "area": 5965501850653.527, + "code": "GEHH", + "continent": "Oceania", + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Ellice Islands", + "Gilbert Islands" + ], + "date": "1976-01-01", + "dissolved": "split" + }, + "east": -173.8042016, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Gilbert_and_Ellice_Islands.svg", + "lat": -2.27450675, + "lng": 175.5, + "name": "Gilbert and Ellice Islands", + "north": 9.0601953, + "region": "Micronesia", + "south": -13.6092088, + "west": 164.8042016 + }, + { + "area": 2305225292151.7285, + "code": "GEKI", + "continent": "Oceania", + "created": { + "country": [ + "Gilbert and Ellice Islands" + ], + "created": "merged", + "date": "1976-01-01" + }, + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Kiribati" + ], + "date": "1979-07-12", + "dissolved": "merged" + }, + "east": -178.8042016, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Gilbert_and_Ellice_Islands.svg", + "lat": 3.3833333, + "lng": 173, + "name": "Gilbert Islands", + "north": 9.0601953, + "region": "Micronesia", + "south": -2.3269492, + "west": 164.8042016 + }, + { + "area": 2268831935617.5347, + "code": "GETV", + "continent": "Oceania", + "created": { + "country": [ + "Gilbert and Ellice Islands" + ], + "created": "merged", + "date": "1976-01-01" + }, + "dependency": [ + "United Kingdom" + ], + "dissolved": { + "country": [ + "Tuvalu" + ], + "date": "1978-10-01", + "dissolved": "renamed" + }, + "east": -173.8042016, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Gilbert_and_Ellice_Islands.svg", + "lat": -8, + "lng": 178, + "name": "Ellice Islands", + "north": -2.3126027, + "region": "Polynesia", + "south": -13.6092088, + "west": 169.8042016 + }, + { + "area": 131703152816.22295, + "code": "GF", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -51.6335964, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 3.933889, + "lng": -53.125782, + "name": "French Guiana", + "north": 5.7571896, + "region": "Southern America", + "south": 2.109287, + "west": -54.5544379 + }, + { + "area": 1382842945.3438478, + "code": "GG", + "continent": "Europe", + "dependencies": [ + "Alderney", + "Herm", + "Sark" + ], + "dependency": [ + "United Kingdom" + ], + "east": -2.158637, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fa/Flag_of_Guernsey.svg", + "lat": 49.465691, + "lng": -2.585278, + "name": "Guernsey", + "north": 49.7323662, + "region": "Northern Europe", + "south": 49.3996333, + "west": -2.6757403 + }, + { + "area": 18496510.77872923, + "code": "GG-AL", + "continent": "Europe", + "dependency": [ + "Guernsey" + ], + "east": -2.1599001, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f3/Flag_of_Alderney.svg", + "lat": 49.7137136, + "lng": -2.1997945, + "name": "Alderney", + "north": 49.7323662, + "region": "Northern Europe", + "south": 49.7013753, + "west": -2.2343906 + }, + { + "area": 2835852.5652514817, + "code": "GG-HE", + "continent": "Europe", + "dependency": [ + "Guernsey" + ], + "east": -2.4410724, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b8/Flag_of_Herm.svg", + "lat": 49.472872, + "lng": -2.4492132, + "name": "Herm", + "north": 49.4831115, + "region": "Northern Europe", + "south": 49.4626538, + "west": -2.4582871 + }, + { + "area": 13510368.339833157, + "code": "GG-SA", + "continent": "Europe", + "dependency": [ + "Guernsey" + ], + "east": -2.3425271, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/64/Flag_of_Sark.svg", + "lat": 49.4301912, + "lng": -2.3609034, + "name": "Sark", + "north": 49.4485712, + "region": "Northern Europe", + "south": 49.4071203, + "west": -2.3829667 + }, + { + "area": 351664755314.6241, + "code": "GH", + "continent": "Africa", + "east": 1.1993625, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/19/Flag_of_Ghana.svg", + "lat": 7.946527, + "lng": -1.023194, + "name": "Ghana", + "north": 11.1666675, + "region": "Western Africa", + "south": 4.7388737, + "west": -3.260786 + }, + { + "area": 12812781.728020666, + "code": "GI", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -5.3386837, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/02/Flag_of_Gibraltar.svg", + "lat": 36.137741, + "lng": -5.345374, + "name": "Gibraltar", + "north": 36.1551188, + "region": "Southern Europe", + "south": 36.1087953, + "west": -5.3663194 + }, + { + "area": 5684397767796.773, + "code": "GL", + "continent": "North America", + "dependency": [ + "Denmark" + ], + "east": -11.3123192, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/09/Flag_of_Greenland.svg", + "languages": [ + "Greenlandic", + "East-Greenlandic" + ], + "lat": 71.706936, + "lng": -42.604303, + "name": "Greenland", + "north": 83.609581, + "region": "Northern America", + "south": 59.7774011, + "west": -73.0350638 + }, + { + "area": 27660622705.98084, + "code": "GM", + "continent": "Africa", + "east": -13.7986107, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_The_Gambia.svg", + "googleName": "The Gambia", + "lat": 13.443182, + "lng": -15.310139, + "name": "Gambia", + "north": 13.8263891, + "region": "Western Africa", + "south": 13.0651826, + "west": -16.8136312, + "wikipediaName": "The Gambia" + }, + { + "area": 497835096177.14996, + "code": "GN", + "continent": "Africa", + "east": -7.637853, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ed/Flag_of_Guinea.svg", + "languages": [ + "Malinka" + ], + "lat": 9.945587, + "lng": -9.696645, + "name": "Guinea", + "north": 12.6746168, + "region": "Western Africa", + "south": 7.1909091, + "west": -15.0782061 + }, + { + "area": 6556021366.668401, + "code": "GP", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -61.0016727, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/7d/Flag_of_Guadeloupe_%28local%29_variant.svg", + "lat": 16.265, + "lng": -61.551, + "name": "Guadeloupe", + "north": 16.514251, + "region": "Caribbean", + "south": 15.8320009, + "west": -61.8090819 + }, + { + "area": 374349308049.2413, + "code": "GQ", + "continent": "Africa", + "east": 11.3333, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/31/Flag_of_Equatorial_Guinea.svg", + "lat": 1.650801, + "lng": 10.267895, + "name": "Equatorial Guinea", + "north": 3.8142257, + "region": "Middle Africa", + "south": -1.4599463, + "west": 5.602367 + }, + { + "area": 693935829152.6224, + "code": "GR", + "continent": "Europe", + "east": 29.6451476, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/5c/Flag_of_Greece.svg", + "languages": [ + "Greek, Ancient (to 1453)", + "Greek" + ], + "lat": 39.074208, + "lng": 21.824312, + "name": "Greece", + "north": 41.7490577, + "region": "Southern Europe", + "south": 34.8010211, + "west": 19.3724227 + }, + { + "area": 448320344053.2159, + "code": "GS", + "continent": "Antarctica", + "dependency": [ + "United Kingdom" + ], + "east": -26.2689113, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ed/Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg", + "lat": -54.429579, + "lng": -36.587909, + "name": "South Georgia and the South Sandwich Islands", + "north": -53.9749413, + "region": "Antarctica", + "south": -59.4842948, + "west": -38.2436013 + }, + { + "area": 194673246823.7558, + "code": "GT", + "continent": "South America", + "east": -88.2256154, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ec/Flag_of_Guatemala.svg", + "lat": 15.783471, + "lng": -90.230759, + "name": "Guatemala", + "north": 17.8156973, + "region": "Central America", + "south": 13.7400214, + "west": -92.2318359 + }, + { + "area": 1662939203.6335418, + "code": "GU", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "east": 144.9565361, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/07/Flag_of_Guam.svg", + "lat": 13.444304, + "lng": 144.793731, + "name": "Guam", + "north": 13.6542247, + "region": "Micronesia", + "south": 13.2461906, + "west": 144.6183806 + }, + { + "area": 68271976061.1821, + "code": "GW", + "continent": "Africa", + "east": -13.6275045, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/01/Flag_of_Guinea-Bissau.svg", + "independence": { + "country": [ + "Portugal" + ], + "date": "1974-09-10" + }, + "lat": 11.803749, + "lng": -15.180413, + "name": "Guinea-Bissau", + "north": 12.6847224, + "region": "Western Africa", + "south": 10.8599702, + "west": -16.7117356 + }, + { + "area": 448583282781.9713, + "code": "GY", + "continent": "South America", + "east": -56.49112, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/99/Flag_of_Guyana.svg", + "lat": 4.860416, + "lng": -58.93018, + "name": "Guyana", + "north": 8.5482551, + "region": "Southern America", + "south": 1.164724, + "west": -61.414905 + }, + { + "area": 2675258279.897878, + "code": "HK", + "continent": "Asia", + "dependency": [ + "China" + ], + "east": 114.4064451, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/5b/Flag_of_Hong_Kong.svg", + "lat": 22.396428, + "lng": 114.109497, + "name": "Hong Kong", + "north": 22.561968, + "region": "Eastern Asia", + "south": 22.153415, + "west": 113.835078 + }, + { + "area": 898379286.1072774, + "code": "HM", + "continent": "Antarctica", + "dependency": [ + "Australia" + ], + "east": 73.7760832, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/b/b9/Flag_of_Australia.svg", + "lat": -53.08181, + "lng": 73.504158, + "name": "Heard Island and McDonald Islands", + "north": -52.9616166, + "region": "Antarctica", + "south": -53.191547, + "west": 73.25124 + }, + { + "area": 329593680778.0184, + "code": "HN", + "continent": "South America", + "east": -83.1360769, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/82/Flag_of_Honduras.svg", + "lat": 15.199999, + "lng": -86.241905, + "name": "Honduras", + "north": 17.4171037, + "region": "Central America", + "south": 12.9842246, + "west": -89.355148 + }, + { + "area": 219254644975.7154, + "code": "HR", + "continent": "Europe", + "created": { + "country": [ + "Yugoslavia" + ], + "created": "split", + "date": "1991-10-08" + }, + "east": 19.4480523, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1b/Flag_of_Croatia.svg", + "languages": [ + "Croatian" + ], + "lat": 45.7533427, + "lng": 15.9891256, + "name": "Croatia", + "north": 46.5545821, + "region": "Southern Europe", + "south": 42.3922652, + "west": 13.4896912 + }, + { + "area": 69236306770.87717, + "code": "HT", + "continent": "South America", + "east": -71.621754, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/56/Flag_of_Haiti.svg", + "languages": [ + "Haitian" + ], + "lat": 18.971187, + "lng": -72.285215, + "name": "Haiti", + "north": 20.0896142, + "region": "Caribbean", + "south": 18.0220783, + "west": -74.4809103 + }, + { + "area": 162789619928.83163, + "code": "HU", + "continent": "Europe", + "east": 22.8977483, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/c1/Flag_of_Hungary.svg", + "languages": [ + "Hungarian" + ], + "lat": 47.162494, + "lng": 19.503304, + "name": "Hungary", + "north": 48.585233, + "region": "Eastern Europe", + "south": 45.7370425, + "west": 16.1136812 + }, + { + "area": 546016014803.1511, + "code": "HVBF", + "continent": "Africa", + "dissolved": { + "country": [ + "Burkina Faso" + ], + "date": "1984-08-04", + "dissolved": "renamed" + }, + "east": 2.4042926, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4a/Flag_of_Upper_Volta.svg", + "lat": 12.238333, + "lng": -1.561593, + "name": "Upper Volta", + "north": 15.0851111, + "region": "Western Africa", + "south": 9.3938888, + "west": -5.5211114, + "wikipediaName": "Republic of Upper Volta" + }, + { + "area": 102301591792.1246, + "code": "IC", + "continent": "Africa", + "dependency": [ + "Spain" + ], + "east": -13.2548812, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b0/Flag_of_the_Canary_Islands.svg", + "lat": 28.5960844, + "lng": -15.70778805, + "name": "Canary Islands", + "north": 29.5544184, + "region": "Northern Africa", + "south": 27.6377504, + "west": -18.1606949 + }, + { + "area": 9594565020426.38, + "code": "ID", + "continent": "Asia", + "disputes": [ + "East Timor" + ], + "east": 141.0195621, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9f/Flag_of_Indonesia.svg", + "googleName": "Republic of Indonesia", + "languages": [ + "Indonesian", + "Balinese" + ], + "lat": -0.789275, + "lng": 113.921327, + "name": "Indonesia", + "north": 5.9068839, + "region": "South-Eastern Asia", + "south": -10.997112, + "west": 95.004677 + }, + { + "area": 136961104671.18498, + "code": "IE", + "continent": "Europe", + "east": -5.9947001, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/45/Flag_of_Ireland.svg", + "languages": [ + "Irish Gaelic", + "Gaelic" + ], + "lat": 53.41291, + "lng": -8.24389, + "name": "Ireland", + "north": 55.3885, + "region": "Northern Europe", + "south": 51.4219377, + "west": -10.66958, + "wikipediaName": "Republic of Ireland" + }, + { + "area": 66175066395.60376, + "code": "IL", + "continent": "Asia", + "east": 35.896244, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d4/Flag_of_Israel.svg", + "languages": [ + "Yiddish", + "Hebrew" + ], + "lat": 31.046051, + "lng": 34.851612, + "name": "Israel", + "north": 33.332805, + "region": "Western Asia", + "south": 29.4906463, + "west": 34.2673871 + }, + { + "area": 1412207340.395639, + "code": "IM", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -4.308328, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_the_Isle_of_Man.svg", + "lat": 54.236107, + "lng": -4.548056, + "name": "Isle of Man", + "north": 54.418247, + "region": "Northern Europe", + "south": 54.04464, + "west": -4.8301808 + }, + { + "area": 9615713680843.55, + "code": "IN", + "continent": "Asia", + "dependencies": [ + "Jammu and Kashmir" + ], + "east": 97.395555, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/4/41/Flag_of_India.svg", + "languages": [ + "Telugu", + "Malayalam", + "Ladakhi", + "Marathi", + "Punjabi", + "Chhattisgarhi", + "Gujarati", + "Indian", + "Hindi", + "Rajasthani", + "Kannada", + "Konkani", + "Assamese", + "Nagpuri" + ], + "lat": 20.593684, + "lng": 78.96288, + "name": "India", + "north": 35.5043404, + "region": "Southern Asia", + "south": 6.7471389, + "west": 68.1623859 + }, + { + "area": 183577268308.88663, + "code": "IN-JK", + "continent": "Asia", + "dependency": [ + "India" + ], + "east": 79.3058506, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/4/41/Flag_of_India.svg", + "lat": 34.1490875, + "lng": 76.8259652, + "name": "Jammu and Kashmir", + "north": 35.5054274, + "region": "Southern Asia", + "south": 32.2922694, + "west": 73.750507 + }, + { + "area": 34218784588.192184, + "code": "IO", + "continent": "Asia", + "dependencies": [ + "Diego Garcia" + ], + "dependency": [ + "United Kingdom" + ], + "east": 72.4946969, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6e/Flag_of_the_British_Indian_Ocean_Territory.svg", + "lat": -7.3347556, + "lng": 72.4242325, + "name": "British Indian Ocean Territory", + "north": -5.2356445, + "region": "Southern Asia", + "south": -7.4440709, + "west": 71.2365532 + }, + { + "area": 842965703341.2957, + "code": "IQ", + "continent": "Asia", + "disputes": [ + "Neutral Zone" + ], + "east": 48.5759163, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f6/Flag_of_Iraq.svg", + "lat": 33.223191, + "lng": 43.679291, + "name": "Iraq", + "north": 37.380932, + "region": "Western Asia", + "south": 29.0612079, + "west": 38.7936029 + }, + { + "area": 2964307206158.564, + "code": "IR", + "continent": "Asia", + "east": 63.3333366, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/ca/Flag_of_Iran.svg", + "languages": [ + "Parsee", + "Persian" + ], + "lat": 32.427908, + "lng": 53.688046, + "name": "Iran", + "north": 39.7816755, + "region": "Southern Asia", + "south": 25.0594286, + "west": 44.0318907 + }, + { + "area": 189720716980.4097, + "code": "IS", + "continent": "Europe", + "east": -13.4958153, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/ce/Flag_of_Iceland.svg", + "languages": [ + "Icelandic" + ], + "lat": 64.963051, + "lng": -19.020835, + "name": "Iceland", + "north": 66.5663183, + "region": "Northern Europe", + "south": 63.2961021, + "west": -24.5465239 + }, + { + "area": 1282291932897.9644, + "code": "IT", + "continent": "Europe", + "east": 18.5205015, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/0/03/Flag_of_Italy.svg", + "languages": [ + "Italian", + "Latin", + "Sicilian", + "Sardinian", + "Neapolitan", + "Ladino" + ], + "lat": 41.87194, + "lng": 12.56738, + "name": "Italy", + "north": 47.092, + "region": "Southern Europe", + "south": 35.4929201, + "west": 6.6267201 + }, + { + "area": 202249893.62638405, + "code": "JE", + "continent": "Europe", + "dependency": [ + "United Kingdom" + ], + "east": -2.0104646, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1c/Flag_of_Jersey.svg", + "lat": 49.214439, + "lng": -2.13125, + "name": "Jersey", + "north": 49.2621314, + "region": "Northern Europe", + "south": 49.1598142, + "west": -2.2546394 + }, + { + "area": 21098041404.1928, + "code": "JM", + "continent": "South America", + "east": -76.183159, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0a/Flag_of_Jamaica.svg", + "lat": 18.109581, + "lng": -77.297508, + "name": "Jamaica", + "north": 18.5253104, + "region": "Caribbean", + "south": 17.7057243, + "west": -78.3688461 + }, + { + "area": 192654449675.157, + "code": "JO", + "continent": "Asia", + "east": 39.301154, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/c0/Flag_of_Jordan.svg", + "lat": 30.585164, + "lng": 36.238414, + "name": "Jordan", + "north": 33.3746878, + "region": "Western Asia", + "south": 29.1850361, + "west": 34.9583368 + }, + { + "area": 6748094849742.678, + "code": "JP", + "continent": "Asia", + "east": 153.9874306, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/9/9e/Flag_of_Japan.svg", + "languages": [ + "Ryukyuan", + "Japanese" + ], + "lat": 36.204824, + "lng": 138.252924, + "name": "Japan", + "north": 45.5227719, + "region": "Eastern Asia", + "south": 24.0460446, + "west": 122.9338302 + }, + { + "area": 4565866.285081814, + "code": "JTUM", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "United States Minor Outlying Islands" + ], + "date": "1986", + "dissolved": "merged" + }, + "east": -169.5171052, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e5/Flag_of_Johnston_Atoll_%28local%29.svg", + "lat": 16.7322716, + "lng": -169.5308371, + "name": "Johnston Island", + "north": 16.7411326, + "region": "Polynesia", + "south": 16.7265491, + "west": -169.5434874, + "wikipediaName": "Johnston Atoll" + }, + { + "area": 347276559114.394, + "code": "KAKH", + "continent": "Asia", + "created": { + "country": [ + "Khmer Republic" + ], + "created": "renamed", + "date": "1975-04-17" + }, + "dissolved": { + "country": [ + "Cambodia" + ], + "date": "1989-05-01", + "dissolved": "renamed" + }, + "east": 107.627687, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/83/Flag_of_Cambodia.svg", + "lat": 12.565679, + "lng": 104.990963, + "name": "Kampuchea", + "north": 14.6901791, + "region": "South-Eastern Asia", + "south": 9.2768081, + "west": 102.333542, + "wikipediaName": "People's Republic of Kampuchea" + }, + { + "area": 961403763583.1138, + "code": "KE", + "continent": "Africa", + "east": 41.9068317, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Kenya.svg", + "languages": [ + "Swahili" + ], + "lat": -0.023559, + "lng": 37.906193, + "name": "Kenya", + "north": 5.0334209, + "region": "Eastern Africa", + "south": -4.6796816, + "west": 33.9098212 + }, + { + "area": 417817066861.2235, + "code": "KG", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-08-31" + }, + "east": 80.2265594, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/c7/Flag_of_Kyrgyzstan.svg", + "languages": [ + "Kyrgyz" + ], + "lat": 41.20438, + "lng": 74.766098, + "name": "Kyrgyzstan", + "north": 43.2653569, + "region": "Central Asia", + "south": 39.180254, + "west": 69.250998 + }, + { + "area": 347276559114.394, + "code": "KH", + "continent": "Asia", + "created": { + "country": [ + "Kampuchea" + ], + "created": "renamed", + "date": "1989-05-01" + }, + "east": 107.627687, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/83/Flag_of_Cambodia.svg", + "languages": [ + "Central Khmer" + ], + "lat": 12.565679, + "lng": 104.990963, + "name": "Cambodia", + "north": 14.6901791, + "region": "South-Eastern Asia", + "south": 9.2768081, + "west": 102.333542 + }, + { + "area": 347276559114.394, + "code": "KHKA", + "continent": "Asia", + "dissolved": { + "country": [ + "Kampuchea" + ], + "date": "1975-04-17", + "dissolved": "renamed" + }, + "east": 107.627687, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a8/Flag_of_the_Khmer_Republic.svg", + "lat": 12.565679, + "lng": 104.990963, + "name": "Khmer Republic", + "north": 14.6901791, + "region": "South-Eastern Asia", + "south": 9.2768081, + "west": 102.333542 + }, + { + "area": 8019481073582.918, + "code": "KI", + "continent": "Oceania", + "created": { + "country": [ + "Canton and Enderbury Islands", + "Gilbert Islands" + ], + "created": "merged", + "date": "1979-07-12" + }, + "east": -150.1958942, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d3/Flag_of_Kiribati.svg", + "independence": { + "country": [ + "United Kingdom", + "United States" + ], + "date": "1979-07-12" + }, + "lat": 1.8668577, + "lng": -157.3599202, + "name": "Kiribati", + "north": 4.6999585, + "region": "Micronesia", + "south": -11.4465192, + "west": 169.5215322 + }, + { + "area": 16808179818.356485, + "code": "KM", + "continent": "Africa", + "disputes": [ + "Anjouan", + "Moh\u00e9li" + ], + "east": 44.5405698, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/94/Flag_of_the_Comoros.svg", + "independence": { + "country": [ + "France" + ], + "date": "1975-07-06" + }, + "lat": -11.6455, + "lng": 43.3333, + "name": "Comoros", + "north": -11.3646394, + "region": "Eastern Africa", + "south": -12.4138212, + "west": 43.2194215 + }, + { + "area": 1351202438.2582128, + "code": "KM-A", + "continent": "Africa", + "disputed": [ + "Comoros" + ], + "dissolved": { + "country": [ + "Comoros" + ], + "date": "2002-03-10", + "dissolved": "joined" + }, + "east": 44.536171, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/58/Flag_of_Anjouan.svg", + "lat": -12.2138145, + "lng": 44.4370606, + "name": "Anjouan", + "north": -12.0634182, + "region": "Eastern Africa", + "south": -12.388629, + "west": 44.1931056 + }, + { + "area": 433890115.14031255, + "code": "KM-M", + "continent": "Africa", + "disputed": [ + "Comoros" + ], + "dissolved": { + "country": [ + "Comoros" + ], + "date": "2002-03-10", + "dissolved": "joined" + }, + "east": 43.8763046, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/32/Flag_of_Moh%C3%A9li.svg", + "lat": -12.3377376, + "lng": 43.7334089, + "name": "Moh\u00e9li", + "north": -12.2490952, + "region": "Eastern Africa", + "south": -12.3899703, + "west": 43.6219025 + }, + { + "area": 1246017604.5899081, + "code": "KN", + "continent": "South America", + "created": { + "country": [ + "Saint Christopher-Nevis-Anguilla" + ], + "created": "merged", + "date": "1983-09-19" + }, + "east": -62.5396943, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fe/Flag_of_Saint_Kitts_and_Nevis.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1983-09-19" + }, + "lat": 17.357822, + "lng": -62.782998, + "name": "Saint Kitts and Nevis", + "north": 17.4182012, + "region": "Caribbean", + "south": 17.094157, + "west": -62.8646171 + }, + { + "area": 651542072400.697, + "code": "KOJP", + "continent": "Asia", + "dissolved": { + "country": [ + "Japan" + ], + "date": "1910-08-22", + "dissolved": "joined" + }, + "east": 130.9232178, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/90/Flag_of_Korea_1882.svg", + "lat": 38.05884975, + "lng": 127.5483853, + "name": "Korea", + "north": 43.01159, + "region": "Eastern Asia", + "south": 33.1061095, + "west": 124.1735528, + "wikipediaName": "Korean Empire" + }, + { + "area": 328364393694.9923, + "code": "KP", + "continent": "Asia", + "east": 130.6884659, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/51/Flag_of_North_Korea.svg", + "lat": 40.339852, + "lng": 127.510093, + "name": "North Korea", + "north": 43.01159, + "region": "Eastern Asia", + "south": 37.6733322, + "west": 124.1735528 + }, + { + "area": 349372296031.2838, + "code": "KR", + "continent": "Asia", + "east": 130.9232178, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/09/Flag_of_South_Korea.svg", + "languages": [ + "Korean" + ], + "lat": 35.907757, + "lng": 127.766922, + "name": "South Korea", + "north": 38.6169312, + "region": "Eastern Asia", + "south": 33.1061095, + "west": 124.6081391 + }, + { + "area": 32035570981.040043, + "code": "KW", + "continent": "Asia", + "east": 48.4304579, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/aa/Flag_of_Kuwait.svg", + "lat": 29.31166, + "lng": 47.481766, + "name": "Kuwait", + "north": 30.1036993, + "region": "Western Asia", + "south": 28.5244463, + "west": 46.5530399 + }, + { + "area": 9794506562.796618, + "code": "KY", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "east": -79.7229976, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0f/Flag_of_the_Cayman_Islands.svg", + "lat": 19.3133, + "lng": -81.2546, + "name": "Cayman Islands", + "north": 19.7569685, + "region": "Caribbean", + "south": 19.262839, + "west": -81.4199933 + }, + { + "area": 5019847650736.817, + "code": "KZ", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-12-16" + }, + "east": 87.315415, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d3/Flag_of_Kazakhstan.svg", + "languages": [ + "Kazakh" + ], + "lat": 48.019573, + "lng": 66.923684, + "name": "Kazakhstan", + "north": 55.4419839, + "region": "Central Asia", + "south": 40.5685841, + "west": 46.4936719 + }, + { + "area": 769236378929.5938, + "code": "LA", + "continent": "Asia", + "east": 107.69483, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/56/Flag_of_Laos.svg", + "languages": [ + "Lao" + ], + "lat": 19.85627, + "lng": 102.495496, + "name": "Laos", + "north": 22.502872, + "region": "South-Eastern Asia", + "south": 13.90972, + "west": 100.0832139 + }, + { + "area": 25599974731.623253, + "code": "LB", + "continent": "Asia", + "east": 36.62372, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/59/Flag_of_Lebanon.svg", + "lat": 33.854721, + "lng": 35.862285, + "name": "Lebanon", + "north": 34.69209, + "region": "Western Asia", + "south": 33.0550256, + "west": 35.1037781 + }, + { + "area": 1000911440.6765518, + "code": "LC", + "continent": "South America", + "east": -60.8730984, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9f/Flag_of_Saint_Lucia.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1979-02-22" + }, + "lat": 13.909444, + "lng": -60.978893, + "name": "Saint Lucia", + "north": 14.110932, + "region": "Caribbean", + "south": 13.7081176, + "west": -61.0796719 + }, + { + "area": 307188145.3271731, + "code": "LI", + "continent": "Europe", + "east": 9.6356501, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/47/Flag_of_Liechtenstein.svg", + "lat": 47.166, + "lng": 9.555373, + "name": "Liechtenstein", + "north": 47.2705467, + "region": "Western Europe", + "south": 47.04829, + "west": 9.47162 + }, + { + "area": 108146322532.06985, + "code": "LK", + "continent": "Asia", + "created": { + "country": [ + "Ceylon" + ], + "created": "renamed", + "date": "1972-05-22" + }, + "east": 81.8787029, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/11/Flag_of_Sri_Lanka.svg", + "languages": [ + "Tamil", + "Sinhala" + ], + "lat": 7.873054, + "lng": 80.771797, + "name": "Sri Lanka", + "north": 9.8358504, + "region": "Southern Asia", + "south": 5.9190779, + "west": 79.6289063 + }, + { + "area": 108146322532.06985, + "code": "LKLK", + "continent": "Asia", + "dissolved": { + "country": [ + "Sri Lanka" + ], + "date": "1972-05-22", + "dissolved": "renamed" + }, + "east": 81.8787029, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/11/Flag_of_Sri_Lanka.svg", + "lat": 7.873054, + "lng": 80.771797, + "name": "Ceylon", + "north": 9.8358504, + "region": "Southern Asia", + "south": 5.9190779, + "west": 79.6289063, + "wikipediaName": "Dominion of Ceylon" + }, + { + "area": 214104980161.3113, + "code": "LR", + "continent": "Africa", + "east": -7.3692549, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b8/Flag_of_Liberia.svg", + "lat": 6.428055, + "lng": -9.429499, + "name": "Liberia", + "north": 8.551986, + "region": "Western Africa", + "south": 4.3154139, + "west": -11.4742481 + }, + { + "area": 55421396805.47649, + "code": "LS", + "continent": "Africa", + "east": 29.4557087, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4a/Flag_of_Lesotho.svg", + "languages": [ + "Sotho" + ], + "lat": -29.609988, + "lng": 28.233608, + "name": "Lesotho", + "north": -28.5708011, + "region": "Southern Africa", + "south": -30.6755788, + "west": 27.011231 + }, + { + "area": 106358319926.30257, + "code": "LT", + "continent": "Europe", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1990-03-11" + }, + "east": 26.8355913, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/11/Flag_of_Lithuania.svg", + "languages": [ + "Lithuanian" + ], + "lat": 55.169438, + "lng": 23.881275, + "name": "Lithuania", + "north": 56.4503175, + "region": "Northern Europe", + "south": 53.8968787, + "west": 20.9494113 + }, + { + "area": 4674257255.530052, + "code": "LU", + "continent": "Europe", + "east": 6.5309701, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/da/Flag_of_Luxembourg.svg", + "languages": [ + "Luxembourgish" + ], + "lat": 49.815273, + "lng": 6.129583, + "name": "Luxembourg", + "north": 50.18282, + "region": "Western Europe", + "south": 49.447779, + "west": 5.7356699 + }, + { + "area": 118717138606.8546, + "code": "LV", + "continent": "Europe", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1990-05-04" + }, + "east": 28.2414029, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/84/Flag_of_Latvia.svg", + "languages": [ + "Latvian" + ], + "lat": 56.879635, + "lng": 24.603189, + "name": "Latvia", + "north": 58.0855713, + "region": "Northern Europe", + "south": 55.6748581, + "west": 20.9677297 + }, + { + "area": 2385694115754.925, + "code": "LY", + "continent": "Africa", + "east": 25.146954, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/05/Flag_of_Libya.svg", + "lat": 26.3351, + "lng": 17.228331, + "name": "Libya", + "north": 33.1667871, + "region": "Northern Africa", + "south": 19.5004298, + "west": 9.3914664 + }, + { + "area": 1057837882590.855, + "code": "MA", + "continent": "Africa", + "disputes": [ + "Sahrawi" + ], + "east": -0.9969757, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2c/Flag_of_Morocco.svg", + "languages": [ + "Berber" + ], + "lat": 31.791702, + "lng": -7.09262, + "name": "Morocco", + "north": 35.9225072, + "region": "Northern Africa", + "south": 27.6666665, + "west": -13.1728913 + }, + { + "area": 7463646.767946672, + "code": "MC", + "continent": "Europe", + "east": 7.4397977, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ea/Flag_of_Monaco.svg", + "lat": 43.7384176, + "lng": 7.4246158, + "name": "Monaco", + "north": 43.7519029, + "region": "Western Europe", + "south": 43.7247428, + "west": 7.4091049 + }, + { + "area": 90672046125.44339, + "code": "MD", + "continent": "Europe", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-08-27" + }, + "disputes": [ + "Transnistria" + ], + "east": 30.162538, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/27/Flag_of_Moldova.svg", + "lat": 47.411631, + "lng": 28.369885, + "name": "Moldova", + "north": 48.491944, + "region": "Eastern Europe", + "south": 45.466904, + "west": 26.6168559 + }, + { + "area": 19725872725.2967, + "code": "MD-SN", + "continent": "Europe", + "disputed": [ + "Moldova" + ], + "east": 29.983877, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/93/Transnistria_State_Flag.svg", + "lat": 47.2152972, + "lng": 29.4638054, + "name": "Transnistria", + "north": 48.172153, + "region": "Eastern Europe", + "south": 46.556053, + "west": 28.5296401 + }, + { + "area": 29942034495.52669, + "code": "ME", + "continent": "Europe", + "created": { + "country": [ + "Serbia and Montenegro" + ], + "created": "merged", + "date": "2006-06-05" + }, + "east": 20.3577649, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/64/Flag_of_Montenegro.svg", + "lat": 42.708678, + "lng": 19.37439, + "name": "Montenegro", + "north": 43.558743, + "region": "Southern Europe", + "south": 41.8497166, + "west": 18.4337921 + }, + { + "area": 169903608.20528534, + "code": "MF", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -62.9703926, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/ec/Flag_of_Saint-Martin_%28local%29.svg", + "imdbName": "Saint Martin (French part)", + "lat": 18.08255, + "lng": -63.052251, + "name": "Saint Martin", + "north": 18.1251338, + "region": "Caribbean", + "south": 18.0462894, + "west": -63.1533267, + "wikipediaName": "Collectivity of Saint Martin" + }, + { + "area": 1166481756065.726, + "code": "MG", + "continent": "Africa", + "east": 50.4837799, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_Madagascar.svg", + "languages": [ + "Malagasy" + ], + "lat": -18.766947, + "lng": 46.869107, + "name": "Madagascar", + "north": -11.9519639, + "region": "Eastern Africa", + "south": -25.6065717, + "west": 43.1851395 + }, + { + "area": 1401538572034.8486, + "code": "MH", + "continent": "Oceania", + "created": { + "country": [ + "Pacific Islands" + ], + "created": "split", + "date": "1986-10-21" + }, + "east": 172.1701812, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2e/Flag_of_the_Marshall_Islands.svg", + "independence": { + "country": [ + "United States" + ], + "date": "1986-10-21" + }, + "languages": [ + "Marshallese" + ], + "lat": 7.131474, + "lng": 171.184478, + "name": "Marshall Islands", + "north": 14.673255, + "region": "Micronesia", + "south": 4.5729556, + "west": 160.7979585 + }, + { + "area": 5129054.21672786, + "code": "MIUM", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "United States Minor Outlying Islands" + ], + "date": "1986", + "dissolved": "merged" + }, + "east": -177.3695147, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2a/Flag_of_the_Midway_Islands_%28local%29.svg", + "lat": 28.2102937, + "lng": -177.3790097, + "name": "Midway Islands", + "north": 28.2150965, + "region": "Polynesia", + "south": 28.1963806, + "west": -177.3946094, + "wikipediaName": "Midway Atoll" + }, + { + "area": 36351891212.97518, + "code": "MK", + "continent": "Europe", + "created": { + "country": [ + "Yugoslavia" + ], + "created": "split", + "date": "1991-09-08" + }, + "east": 23.034093, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f8/Flag_of_Macedonia.svg", + "googleName": "Macedonia (FYROM)", + "imdbName": "Republic of Macedonia", + "languages": [ + "Macedonian" + ], + "lat": 41.608635, + "lng": 21.745275, + "name": "Macedonia", + "north": 42.373646, + "region": "Southern Europe", + "south": 40.8537826, + "west": 20.452423, + "wikipediaName": "Republic of Macedonia" + }, + { + "area": 2887946393570.568, + "code": "ML", + "continent": "Africa", + "disputes": [ + "Azawad" + ], + "east": 4.2666666, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/92/Flag_of_Mali.svg", + "languages": [ + "Bambara" + ], + "lat": 17.570692, + "lng": -3.996166, + "name": "Mali", + "north": 25.000012, + "region": "Western Africa", + "south": 10.147811, + "west": -12.2388849 + }, + { + "area": 1271270205170.716, + "code": "ML-AZ", + "continent": "Africa", + "created": { + "country": [ + "Mali" + ], + "created": "split", + "date": "2012-04-06" + }, + "disputed": [ + "Mali" + ], + "east": 4.249149, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/50/MNLA_flag.svg", + "lat": 19.94921905, + "lng": -1.157628, + "name": "Azawad", + "north": 25.0020452, + "region": "Western Africa", + "south": 14.8963929, + "west": -6.564405 + }, + { + "area": 1987185942406.8538, + "code": "MM", + "continent": "Asia", + "created": { + "country": [ + "Burma" + ], + "created": "renamed", + "date": "1989-06-18" + }, + "east": 101.1702717, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8c/Flag_of_Myanmar.svg", + "googleName": "Burma", + "lat": 21.913965, + "lng": 95.956223, + "name": "Myanmar", + "north": 28.5478351, + "region": "South-Eastern Asia", + "south": 9.6053198, + "west": 92.171808 + }, + { + "area": 2878341099123.783, + "code": "MN", + "continent": "Asia", + "east": 119.9319489, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4c/Flag_of_Mongolia.svg", + "languages": [ + "Mongolian" + ], + "lat": 46.862496, + "lng": 103.846656, + "name": "Mongolia", + "north": 52.1486965, + "region": "Eastern Asia", + "south": 41.5815201, + "west": 87.73762 + }, + { + "area": 87023510.08074442, + "code": "MO", + "continent": "Asia", + "dependency": [ + "China" + ], + "east": 113.5982798, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/63/Flag_of_Macau.svg", + "imdbName": "Macao", + "lat": 22.198745, + "lng": 113.543873, + "name": "Macau", + "north": 22.2170639, + "region": "Eastern Asia", + "south": 22.1097717, + "west": 113.5276053 + }, + { + "area": 89758868871.01183, + "code": "MP", + "continent": "Oceania", + "created": { + "country": [ + "Pacific Islands" + ], + "created": "split", + "date": "1978" + }, + "dependency": [ + "United States" + ], + "east": 146.0646485, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e0/Flag_of_the_Northern_Mariana_Islands.svg", + "lat": 15.0979, + "lng": 145.6739, + "name": "Northern Mariana Islands", + "north": 20.5534826, + "region": "Micronesia", + "south": 14.1103823, + "west": 144.886365 + }, + { + "area": 2456799235.0730696, + "code": "MQ", + "continent": "South America", + "dependency": [ + "France" + ], + "east": -60.8105278, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/c/c3/Flag_of_France.svg", + "lat": 14.641528, + "lng": -61.024174, + "name": "Martinique", + "north": 14.8784506, + "region": "Caribbean", + "south": 14.3886471, + "west": -61.2288666 + }, + { + "area": 1776283271981.1113, + "code": "MR", + "continent": "Africa", + "east": -4.8333343, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/43/Flag_of_Mauritania.svg", + "languages": [ + "Hassanya" + ], + "lat": 21.00789, + "lng": -10.940835, + "name": "Mauritania", + "north": 27.2944447, + "region": "Western Africa", + "south": 14.721273, + "west": -17.0701337 + }, + { + "area": 172028066.88426006, + "code": "MS", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "east": -62.1441758, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d0/Flag_of_Montserrat.svg", + "lat": 16.742498, + "lng": -62.187366, + "name": "Montserrat", + "north": 16.8240519, + "region": "Caribbean", + "south": 16.674821, + "west": -62.241322 + }, + { + "area": 1086681617.3557851, + "code": "MT", + "continent": "Europe", + "east": 14.5755001, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/73/Flag_of_Malta.svg", + "languages": [ + "Maltese" + ], + "lat": 35.937496, + "lng": 14.375416, + "name": "Malta", + "north": 36.0821467, + "region": "Southern Europe", + "south": 35.805811, + "west": 14.1835259 + }, + { + "area": 851215363747.2188, + "code": "MU", + "continent": "Africa", + "east": 63.5035945, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_Mauritius.svg", + "lat": -20.348404, + "lng": 57.552152, + "name": "Mauritius", + "north": -10.3192548, + "region": "Eastern Africa", + "south": -20.5255121, + "west": 56.5127181 + }, + { + "area": 104345084113.85146, + "code": "MV", + "continent": "Asia", + "east": 73.7192702, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0f/Flag_of_Maldives.svg", + "lat": 3.9870284, + "lng": 73.4977747, + "name": "Maldives", + "north": 7.1062798, + "region": "Southern Asia", + "south": -0.7035846, + "west": 72.6385815 + }, + { + "area": 303848886083.1222, + "code": "MW", + "continent": "Africa", + "east": 35.9241664, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d1/Flag_of_Malawi.svg", + "languages": [ + "Nyanja" + ], + "lat": -13.254308, + "lng": 34.301525, + "name": "Malawi", + "north": -9.3671539, + "region": "Eastern Africa", + "south": -17.1352784, + "west": 32.6788891 + }, + { + "area": 6511477391320.134, + "code": "MX", + "continent": "South America", + "east": -86.7105711, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fc/Flag_of_Mexico.svg", + "languages": [ + "Maya" + ], + "lat": 23.634501, + "lng": -102.552784, + "name": "Mexico", + "north": 32.7187631, + "region": "Central America", + "south": 14.534548, + "west": -118.383462 + }, + { + "area": 1578205782977.5474, + "code": "MY", + "continent": "Asia", + "east": 119.2658119, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/66/Flag_of_Malaysia.svg", + "languages": [ + "Malay" + ], + "lat": 4.210484, + "lng": 101.975766, + "name": "Malaysia", + "north": 7.363468, + "region": "South-Eastern Asia", + "south": 0.8538209, + "west": 99.640573 + }, + { + "area": 2038055757698.173, + "code": "MZ", + "continent": "Africa", + "east": 40.8391213, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d0/Flag_of_Mozambique.svg", + "independence": { + "country": [ + "Portugal" + ], + "date": "1975-06-25" + }, + "lat": -18.665695, + "lng": 35.529562, + "name": "Mozambique", + "north": -10.471202, + "region": "Eastern Africa", + "south": -26.8681086, + "west": 30.2155496 + }, + { + "area": 1851220222890.3416, + "code": "NA", + "continent": "Africa", + "created": { + "country": [ + "South Africa" + ], + "created": "split", + "date": "1990-05-21" + }, + "east": 25.2617519, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/00/Flag_of_Namibia.svg", + "lat": -22.95764, + "lng": 18.49041, + "name": "Namibia", + "north": -16.9634854, + "region": "Southern Africa", + "south": -28.9706387, + "west": 11.7242468 + }, + { + "area": 176206323767.27075, + "code": "NC", + "continent": "Oceania", + "dependency": [ + "France" + ], + "east": 168.1336819, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/23/Flag_of_New_Caledonia.svg", + "lat": -20.904305, + "lng": 165.618042, + "name": "New Caledonia", + "north": -19.5395087, + "region": "Melanesia", + "south": -22.8819479, + "west": 163.569721 + }, + { + "area": 2204036099775.763, + "code": "NE", + "continent": "Africa", + "east": 15.9990339, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f4/Flag_of_Niger.svg", + "languages": [ + "Djerma" + ], + "lat": 17.607789, + "lng": 8.081666, + "name": "Niger", + "north": 23.5000002, + "region": "Western Africa", + "south": 11.693756, + "west": 0.1666672 + }, + { + "area": 123433135.97297889, + "code": "NF", + "continent": "Oceania", + "dependency": [ + "Australia" + ], + "east": 167.9969269, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/48/Flag_of_Norfolk_Island.svg", + "lat": -29.040835, + "lng": 167.954712, + "name": "Norfolk Island", + "north": -28.9953881, + "region": "Australia and New Zealand", + "south": -29.1365875, + "west": 167.9162192 + }, + { + "area": 1410466875241.0466, + "code": "NG", + "continent": "Africa", + "disputes": [ + "Biafra" + ], + "east": 14.6779814, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/79/Flag_of_Nigeria.svg", + "languages": [ + "Yoruba", + "Ibo", + "Hausa" + ], + "lat": 9.081999, + "lng": 8.675277, + "name": "Nigeria", + "north": 13.8856449, + "region": "Western Africa", + "south": 4.2698571, + "west": 2.676932 + }, + { + "area": 132671097583.93817, + "code": "NG-BI", + "continent": "Africa", + "disputed": [ + "Nigeria" + ], + "dissolved": { + "country": [ + "Nigeria" + ], + "date": "1970-01-75", + "dissolved": "joined" + }, + "east": 9.472486, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/82/Flag_of_Biafra.svg", + "lat": 5.58841245, + "lng": 7.4213746, + "name": "Biafra", + "north": 6.899681, + "region": "Western Africa", + "south": 4.2771439, + "west": 5.3702632 + }, + { + "area": 314889117129.67786, + "code": "NHVU", + "continent": "Oceania", + "dependency": [ + "France", + "United Kingdom" + ], + "disputes": [ + "Tafea", + "Tanna", + "Vemerana" + ], + "dissolved": { + "country": [ + "Vanuatu" + ], + "date": "1980-07-30", + "dissolved": "renamed" + }, + "east": 170.2384597, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/42/Flag_of_Anglo-French_Joint_Naval_Commission.svg", + "lat": -15.376706, + "lng": 166.959158, + "name": "New Hebrides", + "north": -13.0724554, + "region": "Melanesia", + "south": -20.2522929, + "west": 166.5417588 + }, + { + "area": 23820142756.768612, + "code": "NHVU-TF", + "continent": "Oceania", + "disputed": [ + "New Hebrides" + ], + "dissolved": { + "country": [ + "New Hebrides" + ], + "date": "1980-05-26", + "dissolved": "joined" + }, + "east": 170.237299, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/64/Tafea_Flag.svg", + "lat": -18.7237827, + "lng": 169.0645056, + "name": "Tafea", + "north": -18.6213293, + "region": "Melanesia", + "south": -20.2504909, + "west": 168.9860777 + }, + { + "area": 1134264923.2196689, + "code": "NHVU-TN", + "continent": "Oceania", + "disputed": [ + "New Hebrides" + ], + "dissolved": { + "country": [ + "New Hebrides" + ], + "date": "1974-06-29", + "dissolved": "joined" + }, + "east": 169.5043658, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6d/Bandera_Tanna_Vanuatu.svg", + "lat": -19.5154862, + "lng": 169.3578201, + "name": "Tanna", + "north": -19.3156794, + "region": "Melanesia", + "south": -19.6575415, + "west": 169.2203521, + "wikipediaName": "Tanna (island)" + }, + { + "area": 8851103417.740273, + "code": "NHVU-VE", + "continent": "Oceania", + "disputed": [ + "New Hebrides" + ], + "dissolved": { + "country": [ + "New Hebrides" + ], + "date": "1980-07-24", + "dissolved": "joined" + }, + "east": 167.2610092, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/90/Flag_of_Vemerana.svg", + "lat": -15.3003549, + "lng": 166.9182097, + "name": "Vemerana", + "north": -14.6430503, + "region": "Melanesia", + "south": -15.6714696, + "west": 166.5414476 + }, + { + "area": 266184535261.75607, + "code": "NI", + "continent": "South America", + "east": -82.5920716, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/19/Flag_of_Nicaragua.svg", + "lat": 12.865416, + "lng": -85.207229, + "name": "Nicaragua", + "north": 15.0302755, + "region": "Central America", + "south": 10.7080549, + "west": -87.6910686 + }, + { + "area": 82535803584.80461, + "code": "NL", + "continent": "Europe", + "dependencies": [ + "Aruba", + "Bonaire, Sint Eustatius and Saba", + "Cura\u00e7ao", + "Netherlands Antilles", + "Sint Maarten" + ], + "east": 7.2275102, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/20/Flag_of_the_Netherlands.svg", + "googleName": "The Netherlands", + "languages": [ + "Dutch" + ], + "lat": 52.132633, + "lng": 5.291266, + "name": "Netherlands", + "north": 53.5560213, + "region": "Western Europe", + "south": 50.7503838, + "west": 3.357962 + }, + { + "area": 1872514739737.7063, + "code": "NO", + "continent": "Europe", + "dependencies": [ + "Bouvet Island", + "Peter I Island", + "Queen Maud Land", + "Svalbard and Jan Mayen", + "Antarctica" + ], + "east": 31.1682684, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Flag_of_Norway.svg", + "languages": [ + "Norwegian" + ], + "lat": 60.472024, + "lng": 8.468946, + "name": "Norway", + "north": 71.1854762, + "region": "Northern Europe", + "south": 57.959599, + "west": 4.5000962 + }, + { + "area": 225274128.2496104, + "code": "NO-PI", + "continent": "Antarctica", + "dependency": [ + "Norway" + ], + "east": -90.447166, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Flag_of_Norway.svg", + "lat": -68.7858824, + "lng": -90.6266444, + "name": "Peter I Island", + "north": -68.7121811, + "region": "Antarctica", + "south": -68.8936, + "west": -90.724297 + }, + { + "area": 363971215047.72833, + "code": "NP", + "continent": "Asia", + "east": 88.1992978, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9b/Flag_of_Nepal.svg", + "languages": [ + "Nepali" + ], + "lat": 28.394857, + "lng": 84.124008, + "name": "Nepal", + "north": 30.4469452, + "region": "Southern Asia", + "south": 26.3477794, + "west": 80.0522222 + }, + { + "area": 2278006059305.4453, + "code": "NQAQ", + "continent": "Antarctica", + "dependency": [ + "Norway" + ], + "east": 44.6333333333, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Flag_of_Norway.svg", + "lat": -72.5255643899, + "lng": 32.3166666667, + "name": "Queen Maud Land", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": 20 + }, + { + "area": 31542670.03488976, + "code": "NR", + "continent": "Oceania", + "east": 166.9589281, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/30/Flag_of_Nauru.svg", + "lat": -0.522778, + "lng": 166.931503, + "name": "Nauru", + "north": -0.5026395, + "region": "Micronesia", + "south": -0.5541894, + "west": 166.9095486 + }, + { + "area": 5015092061.62771, + "code": "NTHH", + "continent": "Asia", + "disputed": [ + "Iraq", + "Saudi Arabia" + ], + "dissolved": { + "country": [ + "Iraq", + "Saudi Arabia" + ], + "date": "1991", + "dissolved": "joined" + }, + "east": 46.6395783, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/2f/Flag_of_the_United_Nations.svg", + "lat": 29.0864144, + "lng": 45.67616515, + "name": "Neutral Zone", + "north": 29.2065879, + "region": "Western Asia", + "south": 28.9662409, + "west": 44.712752, + "wikipediaName": "Saudi-Iraqi neutral zone" + }, + { + "area": 416522426.3572096, + "code": "NU", + "continent": "Oceania", + "dependency": [ + "New Zealand" + ], + "east": -169.7743248, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/01/Flag_of_Niue.svg", + "lat": -19.054445, + "lng": -169.867233, + "name": "Niue", + "north": -18.95297, + "region": "Polynesia", + "south": -19.1555664, + "west": -169.9498487 + }, + { + "area": 3909215860500.712, + "code": "NZ", + "continent": "Oceania", + "dependencies": [ + "Cook Islands", + "Niue", + "Ross Dependency", + "Tokelau", + "Antarctica" + ], + "east": -176.1542248, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/3e/Flag_of_New_Zealand.svg", + "languages": [ + "Maori" + ], + "lat": -40.900557, + "lng": 174.885971, + "name": "New Zealand", + "north": -29.2313419, + "region": "Australia and New Zealand", + "south": -52.6194185, + "west": 165.8694369 + }, + { + "area": 4623828266526.1045, + "code": "NZ-AQ", + "continent": "Antarctica", + "dependency": [ + "New Zealand" + ], + "east": -150, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/3e/Flag_of_New_Zealand.svg", + "lat": -72.5255643899, + "lng": -175, + "name": "Ross Dependency", + "north": -60, + "region": "Antarctica", + "south": -85.0511287798, + "west": 160 + }, + { + "area": 880490866102.8378, + "code": "OM", + "continent": "Asia", + "east": 59.8393974, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/dd/Flag_of_Oman.svg", + "lat": 21.512583, + "lng": 55.923255, + "name": "Oman", + "north": 26.4053947, + "region": "Western Asia", + "south": 16.650336, + "west": 52.0000018 + }, + { + "area": 176575023701.57465, + "code": "PA", + "continent": "South America", + "east": -77.158488, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/ab/Flag_of_Panama.svg", + "lat": 8.537981, + "lng": -80.782127, + "name": "Panama", + "north": 9.647779, + "region": "Central America", + "south": 7.2035564, + "west": -83.0522411 + }, + { + "area": 8696244928787.729, + "code": "PCHH", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "Palau" + ], + "date": "1994-10-01", + "dissolved": "renamed" + }, + "east": 172.1701812, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/41/Flag_of_the_Trust_Territory_of_the_Pacific_Islands.svg", + "lat": 11.77731075, + "lng": 151.66970055, + "name": "Pacific Islands", + "north": 20.5534826, + "region": "Micronesia", + "south": 3.0011389, + "west": 131.1692199, + "wikipediaName": "Trust Territory of the Pacific Islands" + }, + { + "area": 2827602481279.1978, + "code": "PE", + "continent": "South America", + "east": -68.652329, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cf/Flag_of_Peru.svg", + "languages": [ + "Quechua" + ], + "lat": -9.189967, + "lng": -75.015152, + "name": "Peru", + "north": -0.038777, + "region": "Southern America", + "south": -18.3515803, + "west": -81.3285041 + }, + { + "area": 2925585941758.0215, + "code": "PF", + "continent": "Oceania", + "dependency": [ + "France" + ], + "east": -138.6094017, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/db/Flag_of_French_Polynesia.svg", + "lat": -17.679742, + "lng": -149.406843, + "name": "French Polynesia", + "north": -7.8956151, + "region": "Polynesia", + "south": -23.9062409, + "west": -153.9916491 + }, + { + "area": 2474419279944.0522, + "code": "PG", + "continent": "Oceania", + "disputes": [ + "Bougainville" + ], + "east": 159.4925058, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e3/Flag_of_Papua_New_Guinea.svg", + "independence": { + "country": [ + "Australia" + ], + "date": "1975-09-16" + }, + "languages": [ + "Korowai" + ], + "lat": -6.314993, + "lng": 143.95555, + "name": "Papua New Guinea", + "north": -0.8713195, + "region": "Melanesia", + "south": -11.6578607, + "west": 140.8419695 + }, + { + "area": 138121270013.83716, + "code": "PG-NSA", + "continent": "Oceania", + "disputed": [ + "Papua New Guinea" + ], + "dissolved": { + "country": [ + "Papua New Guinea" + ], + "date": "1998-12-24", + "dissolved": "joined" + }, + "east": 157.0857237, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e4/Flag_of_Bougainville.svg", + "lat": -6.053602, + "lng": 155.1907309, + "name": "Bougainville", + "north": -3.10944, + "region": "Melanesia", + "south": -6.8802301, + "west": 154.1180475, + "wikipediaName": "Autonomous Region of Bougainville" + }, + { + "area": 1789816879031.1318, + "code": "PH", + "continent": "Asia", + "east": 126.6043837, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/99/Flag_of_the_Philippines.svg", + "languages": [ + "Bicolano", + "Tagalog", + "Filipino" + ], + "lat": 12.879721, + "lng": 121.774017, + "name": "Philippines", + "north": 19.5740241, + "region": "South-Eastern Asia", + "south": 4.6134443, + "west": 116.7029193 + }, + { + "area": 2422273814248.002, + "code": "PK", + "continent": "Asia", + "dependencies": [ + "Azad Kashmir", + "Gilgit-Baltistan" + ], + "east": 77.8356668, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/32/Flag_of_Pakistan.svg", + "languages": [ + "Sindhi", + "Urdu" + ], + "lat": 30.375321, + "lng": 69.345116, + "name": "Pakistan", + "north": 37.084107, + "region": "Southern Asia", + "south": 23.6946946, + "west": 60.8729721 + }, + { + "area": 45509111052.29749, + "code": "PK-JK", + "continent": "Asia", + "dependency": [ + "Pakistan" + ], + "east": 75.2642401, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Azad_Kashmir.svg", + "lat": 33.8866588, + "lng": 73.9359821, + "name": "Azad Kashmir", + "north": 35.1311016, + "region": "Southern Asia", + "south": 32.7637389, + "west": 73.394078 + }, + { + "area": 137718195471.22104, + "code": "PK-NA", + "continent": "Asia", + "dependency": [ + "Pakistan" + ], + "east": 77.8293243, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/37/Flag_of_Gilgit-Baltistan_United_Movement.svg", + "lat": 35.952035, + "lng": 74.5931921, + "name": "Gilgit-Baltistan", + "north": 37.0841069, + "region": "Southern Asia", + "south": 34.5106098, + "west": 72.5046597, + "wikipediaName": "Gilgit\u2013Baltistan" + }, + { + "area": 446716337927.05286, + "code": "PL", + "continent": "Europe", + "east": 24.1458931, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/1/12/Flag_of_Poland.svg", + "languages": [ + "Polish" + ], + "lat": 51.919438, + "lng": 19.145136, + "name": "Poland", + "north": 54.8358123, + "region": "Eastern Europe", + "south": 49.0020252, + "west": 14.1228641 + }, + { + "area": 958418242.0384462, + "code": "PM", + "continent": "North America", + "dependency": [ + "France" + ], + "east": -56.1189376, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/74/Flag_of_Saint-Pierre_and_Miquelon.svg", + "lat": 46.8852, + "lng": -56.3159, + "name": "Saint Pierre and Miquelon", + "north": 47.1442704, + "region": "Northern America", + "south": 46.7491058, + "west": -56.405632 + }, + { + "area": 78563020813.92622, + "code": "PN", + "continent": "Oceania", + "dependency": [ + "United Kingdom" + ], + "east": -124.7721577, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/88/Flag_of_the_Pitcairn_Islands.svg", + "imdbName": "Pitcairn", + "lat": -24.3764907, + "lng": -128.3243466, + "name": "Pitcairn Islands", + "north": -23.9144684, + "region": "Polynesia", + "south": -25.0798075, + "west": -130.7507388 + }, + { + "area": 20352524871.789093, + "code": "PR", + "continent": "South America", + "dependency": [ + "United States" + ], + "east": -65.2211099, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/28/Flag_of_Puerto_Rico.svg", + "lat": 18.220833, + "lng": -66.590149, + "name": "Puerto Rico", + "north": 18.5160099, + "region": "Caribbean", + "south": 17.8814286, + "west": -67.9455471 + }, + { + "area": 19000981583.38278, + "code": "PS", + "continent": "Asia", + "east": 35.5740521, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/00/Flag_of_Palestine.svg", + "googleName": "Palestinian Territories", + "imdbName": "Occupied Palestinian Territory", + "lat": 31.952162, + "lng": 35.233154, + "name": "Palestine", + "north": 32.5520999, + "region": "Western Asia", + "south": 31.219691, + "west": 34.2187187, + "wikipediaName": "Palestinian territories" + }, + { + "area": 2408817279130.2983, + "code": "PT", + "continent": "Europe", + "east": -6.1902091, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/5c/Flag_of_Portugal.svg", + "languages": [ + "Portuguese" + ], + "lat": 39.399872, + "lng": -8.224454, + "name": "Portugal", + "north": 42.1542048, + "region": "Southern Europe", + "south": 32.40374, + "west": -31.275158 + }, + { + "area": 1404904017332.7883, + "code": "PUUM", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "United States Minor Outlying Islands" + ], + "date": "1986", + "dissolved": "merged" + }, + "east": -160.0045781, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e2/Flag_of_the_United_States_%28Pantone%29.svg", + "lat": 3.02849705, + "lng": -168.31455555, + "name": "United States Miscellaneous Pacific Islands", + "north": 6.4460001, + "region": "Polynesia", + "south": -0.389006, + "west": -176.624533 + }, + { + "area": 223039857524.5294, + "code": "PW", + "continent": "Oceania", + "created": { + "country": [ + "Pacific Islands" + ], + "created": "renamed", + "date": "1994-10-01" + }, + "east": 134.7210985, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/48/Flag_of_Palau.svg", + "independence": { + "country": [ + "United States" + ], + "date": "1994-10-01" + }, + "lat": 7.51498, + "lng": 134.58252, + "name": "Palau", + "north": 8.0940234, + "region": "Micronesia", + "south": 3.0011389, + "west": 131.1692199 + }, + { + "area": 790119534175.5375, + "code": "PY", + "continent": "South America", + "east": -54.258562, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/27/Flag_of_Paraguay.svg", + "languages": [ + "Guarani" + ], + "lat": -23.442503, + "lng": -58.443832, + "name": "Paraguay", + "north": -19.2877065, + "region": "Southern America", + "south": -27.5883343, + "west": -62.6380511 + }, + { + "area": 3095516473.858264, + "code": "PZPA", + "continent": "South America", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "Panama" + ], + "date": "1979-10-01", + "dissolved": "joined" + }, + "east": -79.5183885, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b0/Panama_Canal_Zone_Flag.png", + "lat": 9.15749335, + "lng": -79.7708426, + "name": "Panama Canal Zone", + "north": 9.4080584, + "region": "Central America", + "south": 8.9069283, + "west": -80.0232967 + }, + { + "area": 17127168330.193848, + "code": "QA", + "continent": "Asia", + "east": 51.6432601, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/65/Flag_of_Qatar.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1971-09-03" + }, + "lat": 25.354826, + "lng": 51.183884, + "name": "Qatar", + "north": 26.1830927, + "region": "Western Asia", + "south": 24.471118, + "west": 50.7500553 + }, + { + "area": 3712139898.917095, + "code": "RE", + "continent": "Africa", + "dependency": [ + "France" + ], + "east": 55.8365536, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/05/Proposed_flag_of_R%C3%A9union_%28ARF%29.svg", + "lat": -21.115141, + "lng": 55.536384, + "name": "R\u00e9union", + "north": -20.8717557, + "region": "Eastern Africa", + "south": -21.389622, + "west": 55.2164053 + }, + { + "area": 624886303271.2074, + "code": "RHZW", + "continent": "Africa", + "created": { + "country": [ + "Zimbabwe Rhodesia" + ], + "created": "renamed", + "date": "1979-06-01" + }, + "dependency": [ + "United Kingdom" + ], + "disputes": [ + "Rhodesia", + "Zimbabwe Rhodesia" + ], + "dissolved": { + "country": [ + "Zimbabwe" + ], + "date": "1980-04-18", + "dissolved": "renamed" + }, + "east": 33.0682357, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/af/Flag_of_Southern_Rhodesia.svg", + "lat": -19.015438, + "lng": 29.154857, + "name": "Southern Rhodesia", + "north": -15.609319, + "region": "Eastern Africa", + "south": -22.4245232, + "west": 25.237368 + }, + { + "area": 624886303271.2074, + "code": "RHZW-RH", + "continent": "Africa", + "disputed": [ + "Southern Rhodesia" + ], + "dissolved": { + "country": [ + "Zimbabwe Rhodesia" + ], + "date": "1979-06-01", + "dissolved": "renamed" + }, + "east": 33.0682357, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e1/Flag_of_Rhodesia.svg", + "lat": -19.015438, + "lng": 29.154857, + "name": "Rhodesia", + "north": -15.609319, + "region": "Eastern Africa", + "south": -22.4245232, + "west": 25.237368 + }, + { + "area": 624886303271.2074, + "code": "RHZW-ZR", + "continent": "Africa", + "created": { + "country": [ + "Rhodesia" + ], + "created": "renamed", + "date": "1979-06-01" + }, + "disputed": [ + "Southern Rhodesia" + ], + "dissolved": { + "country": [ + "Southern Rhodesia" + ], + "date": "1979-06-01", + "dissolved": "renamed" + }, + "east": 33.0682357, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/3f/Flag_of_Zimbabwe_Rhodesia.svg", + "lat": -19.015438, + "lng": 29.154857, + "name": "Zimbabwe Rhodesia", + "north": -15.609319, + "region": "Eastern Africa", + "south": -22.4245232, + "west": 25.237368 + }, + { + "area": 380064466914.12103, + "code": "RO", + "continent": "Europe", + "east": 29.7571015, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/73/Flag_of_Romania.svg", + "languages": [ + "Romanian", + "Romany" + ], + "lat": 45.943161, + "lng": 24.96676, + "name": "Romania", + "north": 48.265274, + "region": "Eastern Europe", + "south": 43.6190676, + "west": 20.2617593 + }, + { + "area": 146496588340.385, + "code": "RS", + "continent": "Europe", + "created": { + "country": [ + "Serbia and Montenegro" + ], + "created": "merged", + "date": "2006-06-05" + }, + "disputes": [ + "Kosovo" + ], + "east": 23.0063915, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/ff/Flag_of_Serbia.svg", + "languages": [ + "Serbian" + ], + "lat": 44.016521, + "lng": 21.005859, + "name": "Serbia", + "north": 46.1894461, + "region": "Southern Europe", + "south": 42.2315029, + "west": 18.8385221 + }, + { + "area": 40311984391065.12, + "code": "RU", + "continent": "Europe", + "created": { + "country": [ + "Soviet Union" + ], + "created": "renamed", + "date": "1991-12-25" + }, + "disputes": [ + "Chechnia" + ], + "east": -169.0452862, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/f/f3/Flag_of_Russia.svg", + "languages": [ + "Tatar", + "Russian", + "Chechen", + "Khanty" + ], + "lat": 61.52401, + "lng": 105.318756, + "name": "Russia", + "north": 81.8558999, + "region": "Eastern Europe", + "south": 41.185353, + "west": 19.6405525 + }, + { + "area": 25331592066.691013, + "code": "RU-CE", + "continent": "Europe", + "disputed": [ + "Russia" + ], + "dissolved": { + "country": [ + "Russia" + ], + "date": "2000-02-06", + "dissolved": "joined" + }, + "east": 46.6587, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d6/Flag_of_Chechen_Republic_of_Ichkeria.svg", + "lat": 43.4023301, + "lng": 45.7187468, + "name": "Chechnia", + "north": 44.0124, + "region": "Eastern Europe", + "south": 42.4747, + "west": 44.8337, + "wikipediaName": "Chechen Republic of Ichkeria" + }, + { + "area": 45227905253.20613, + "code": "RW", + "continent": "Africa", + "east": 30.8994008, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/17/Flag_of_Rwanda.svg", + "lat": -1.940278, + "lng": 29.873888, + "name": "Rwanda", + "north": -1.0475717, + "region": "Eastern Africa", + "south": -2.8398397, + "west": 28.8617547 + }, + { + "area": 3751482647024.711, + "code": "SA", + "continent": "Asia", + "disputes": [ + "Neutral Zone" + ], + "east": 55.6666999, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/0d/Flag_of_Saudi_Arabia.svg", + "languages": [ + "Arabic" + ], + "lat": 23.885942, + "lng": 45.079162, + "name": "Saudi Arabia", + "north": 32.154284, + "region": "Western Asia", + "south": 16.379528, + "west": 34.5489979 + }, + { + "area": 760523611659.6083, + "code": "SB", + "continent": "Oceania", + "east": 167.2830811, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/74/Flag_of_the_Solomon_Islands.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1978-07-07" + }, + "lat": -9.64571, + "lng": 160.156194, + "name": "Solomon Islands", + "north": -6.5892403, + "region": "Melanesia", + "south": -11.8616847, + "west": 155.4862405 + }, + { + "area": 746162640467.2219, + "code": "SC", + "continent": "Africa", + "east": 56.294294, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fc/Flag_of_Seychelles.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1976-06-29" + }, + "lat": -4.679574, + "lng": 55.491977, + "name": "Seychelles", + "north": -4.2097858, + "region": "Eastern Africa", + "south": -10.2270331, + "west": 46.2029599 + }, + { + "area": 2569708698803.2373, + "code": "SD", + "continent": "Africa", + "east": 38.5842192, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/01/Flag_of_Sudan.svg", + "lat": 12.862807, + "lng": 30.217636, + "name": "Sudan", + "north": 22.2249184, + "region": "Northern Africa", + "south": 9.3472209, + "west": 21.814939 + }, + { + "area": 1044765059535.7197, + "code": "SE", + "continent": "Europe", + "east": 24.1665923, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/4/4c/Flag_of_Sweden.svg", + "languages": [ + "Swedish" + ], + "lat": 60.128161, + "lng": 18.643501, + "name": "Sweden", + "north": 69.0600236, + "region": "Northern Europe", + "south": 55.3367024, + "west": 10.9631866 + }, + { + "area": 1810846354.6073165, + "code": "SG", + "continent": "Asia", + "east": 104.0856805, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/48/Flag_of_Singapore.svg", + "lat": 1.352083, + "lng": 103.819836, + "name": "Singapore", + "north": 1.4708809, + "region": "South-Eastern Asia", + "south": 1.166398, + "west": 103.6056246 + }, + { + "area": 2922147232484.421, + "code": "SH", + "continent": "Africa", + "dependencies": [ + "Ascension", + "Tristan da Cunha" + ], + "dependency": [ + "United Kingdom" + ], + "east": -5.6786442, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/00/Flag_of_Saint_Helena.svg", + "imdbName": "Saint Helena", + "lat": -22.6614639, + "lng": -10.051074, + "name": "Saint Helena, Ascension and Tristan da Cunha", + "north": -7.8876128, + "region": "Western Africa", + "south": -37.435315, + "west": -14.4235038 + }, + { + "area": 40410000316.55934, + "code": "SI", + "continent": "Europe", + "created": { + "country": [ + "Yugoslavia" + ], + "created": "split", + "date": "1991-06-25" + }, + "east": 16.6104836, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f0/Flag_of_Slovenia.svg", + "languages": [ + "Slovenian" + ], + "lat": 46.151241, + "lng": 14.995463, + "name": "Slovenia", + "north": 46.8766467, + "region": "Southern Europe", + "south": 45.421542, + "west": 13.375546 + }, + { + "area": 1482887848907.3154, + "code": "SITH", + "continent": "Asia", + "dissolved": { + "country": [ + "Thailand" + ], + "date": "1939-06-23", + "dissolved": "renamed" + }, + "east": 105.636812, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/dd/State_Flag_of_Thailand_%281916%29.svg", + "lat": 15.870032, + "lng": 100.992541, + "name": "Siam", + "north": 20.465143, + "region": "South-Eastern Asia", + "south": 5.612851, + "west": 97.343396 + }, + { + "area": 1290692178197.8298, + "code": "SJ", + "continent": "Europe", + "dependency": [ + "Norway" + ], + "east": 33.497093, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Flag_of_Norway.svg", + "lat": 77.553604, + "lng": 23.670272, + "name": "Svalbard and Jan Mayen", + "north": 80.834053, + "region": "Northern Europe", + "south": 70.827446, + "west": -9.07814 + }, + { + "area": 88196720093.83124, + "code": "SK", + "continent": "Europe", + "created": { + "country": [ + "Czechoslovakia" + ], + "created": "merged", + "date": "1993-01-01" + }, + "east": 22.5589339, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e6/Flag_of_Slovakia.svg", + "languages": [ + "Slovak" + ], + "lat": 48.669026, + "lng": 19.699024, + "name": "Slovakia", + "north": 49.6138051, + "region": "Eastern Europe", + "south": 47.7313888, + "west": 16.8331821 + }, + { + "area": 10423678348.427942, + "code": "SKIN", + "continent": "Asia", + "dissolved": { + "country": [ + "India" + ], + "date": "1975-05-16", + "dissolved": "joined" + }, + "east": 88.9108059, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1e/Flag_of_Sikkim_monarchy.svg", + "lat": 27.7306273, + "lng": 88.633784, + "name": "Sikkim", + "north": 28.128759, + "region": "Southern Asia", + "south": 27.079261, + "west": 88.0063541 + }, + { + "area": 115169551536.09772, + "code": "SL", + "continent": "Africa", + "east": -10.271651, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/17/Flag_of_Sierra_Leone.svg", + "languages": [ + "Mende" + ], + "lat": 8.460555, + "lng": -11.779889, + "name": "Sierra Leone", + "north": 9.9999724, + "region": "Western Africa", + "south": 6.8990253, + "west": -13.3020067 + }, + { + "area": 99401489.61355989, + "code": "SM", + "continent": "Europe", + "east": 12.5167041, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b1/Flag_of_San_Marino.svg", + "lat": 43.94236, + "lng": 12.457777, + "name": "San Marino", + "north": 43.992075, + "region": "Southern Europe", + "south": 43.8936809, + "west": 12.4034824 + }, + { + "area": 325161203164.1628, + "code": "SN", + "continent": "Africa", + "east": -11.348607, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Flag_of_Senegal.svg", + "languages": [ + "Wolof" + ], + "lat": 14.497401, + "lng": -14.452362, + "name": "Senegal", + "north": 16.6930544, + "region": "Western Africa", + "south": 12.3072891, + "west": -17.5298482 + }, + { + "area": 1751112904601.79, + "code": "SO", + "continent": "Africa", + "disputes": [ + "Somaliland" + ], + "east": 51.4130288, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a0/Flag_of_Somalia.svg", + "languages": [ + "Somali" + ], + "lat": 5.152149, + "lng": 46.199616, + "name": "Somalia", + "north": 11.9886144, + "region": "Eastern Africa", + "south": -1.6620412, + "west": 40.994373 + }, + { + "area": 178676578250.70306, + "code": "SO-SO", + "continent": "Africa", + "disputed": [ + "Somalia" + ], + "east": 47.3840332, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4d/Flag_of_Somaliland.svg", + "lat": 9.9869867, + "lng": 45.2993862, + "name": "Somaliland", + "north": 11.477937, + "region": "Eastern Africa", + "south": 8.36641, + "west": 42.6791382 + }, + { + "area": 212428124046.85706, + "code": "SR", + "continent": "South America", + "east": -53.9510244, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/60/Flag_of_Suriname.svg", + "independence": { + "country": [ + "Netherlands" + ], + "date": "1975-11-25" + }, + "lat": 3.919305, + "lng": -56.027783, + "name": "Suriname", + "north": 6.0092832, + "region": "Southern America", + "south": 1.837306, + "west": -58.0705059 + }, + { + "area": 1341809135383.3242, + "code": "SS", + "continent": "Africa", + "created": { + "country": [ + "Sudan" + ], + "created": "split", + "date": "2011-07-09" + }, + "east": 35.9489972, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/7a/Flag_of_South_Sudan.svg", + "lat": 7.9630921, + "lng": 30.1589303, + "name": "South Sudan", + "north": 12.2363886, + "region": "Northern Africa", + "south": 3.4889804, + "west": 23.4408493 + }, + { + "area": 21313876345.39563, + "code": "ST", + "continent": "Africa", + "east": 7.4630641, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4f/Flag_of_Sao_Tome_and_Principe.svg", + "imdbName": "Sao Tome and Principe", + "independence": { + "country": [ + "Portugal" + ], + "date": "1975-07-12" + }, + "lat": 0.18636, + "lng": 6.613081, + "name": "S\u00e3o Tom\u00e9 and Pr\u00edncipe", + "north": 1.7017723, + "region": "Middle Africa", + "south": -0.0140044, + "west": 6.4604759 + }, + { + "area": 50417565077338.46, + "code": "SUHH", + "continent": "Europe", + "dependencies": [ + "Byelorussian Soviet Socialist Republic", + "Ukrainian Soviet Socialist Republic" + ], + "dissolved": { + "country": [ + "Russia" + ], + "date": "1991-12-25", + "dissolved": "renamed" + }, + "east": -169.0452862, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a9/Flag_of_the_Soviet_Union.svg", + "lat": 58.49232995, + "lng": 105.29763315, + "name": "Soviet Union", + "north": 81.8558999, + "region": "Eastern Europe", + "south": 35.12876, + "west": 19.6405525 + }, + { + "area": 38076120767.46907, + "code": "SV", + "continent": "South America", + "east": -87.6837516, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/34/Flag_of_El_Salvador.svg", + "lat": 13.794185, + "lng": -88.89653, + "name": "El Salvador", + "north": 14.4505567, + "region": "Central America", + "south": 13.1554312, + "west": -90.1268106 + }, + { + "area": 88219949.20349692, + "code": "SX", + "continent": "South America", + "created": { + "country": [ + "Netherlands Antilles" + ], + "created": "merged", + "date": "2010-10-10" + }, + "dependency": [ + "Netherlands" + ], + "east": -63.0124785, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d3/Flag_of_Sint_Maarten.svg", + "lat": 18.0360643, + "lng": -63.0729747, + "name": "Sint Maarten", + "north": 18.0670042, + "region": "Caribbean", + "south": 18.0051244, + "west": -63.1334709 + }, + { + "area": 339302250446.3957, + "code": "SY", + "continent": "Asia", + "east": 42.376309, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/53/Flag_of_Syria.svg", + "languages": [ + "Aramaic" + ], + "lat": 34.802075, + "lng": 38.996815, + "name": "Syria", + "north": 37.320569, + "region": "Western Asia", + "south": 32.311136, + "west": 35.7165956 + }, + { + "area": 23821894148.669605, + "code": "SZ", + "continent": "Africa", + "east": 32.1348445, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1e/Flag_of_Swaziland.svg", + "lat": -26.522503, + "lng": 31.465866, + "name": "Swaziland", + "north": -25.7185194, + "region": "Southern Africa", + "south": -27.3173633, + "west": 30.7910943 + }, + { + "area": 1800697070.381934, + "code": "TA", + "continent": "Africa", + "dependency": [ + "Saint Helena, Ascension and Tristan da Cunha" + ], + "east": -12.2170051, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/89/Flag_of_Tristan_da_Cunha.svg", + "lat": -37.1160362, + "lng": -12.283989, + "name": "Tristan da Cunha", + "north": -37.0620265, + "region": "Western Africa", + "south": -37.435315, + "west": -12.7060318 + }, + { + "area": 12393865294.089338, + "code": "TC", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "east": -71.0860034, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a0/Flag_of_the_Turks_and_Caicos_Islands.svg", + "lat": 21.694025, + "lng": -71.797928, + "name": "Turks and Caicos Islands", + "north": 21.9623502, + "region": "Caribbean", + "south": 21.1921745, + "west": -72.4824716 + }, + { + "area": 2006647807098.5884, + "code": "TD", + "continent": "Africa", + "east": 24.0000011, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4b/Flag_of_Chad.svg", + "lat": 15.454166, + "lng": 18.732207, + "name": "Chad", + "north": 23.449235, + "region": "Middle Africa", + "south": 7.442975, + "west": 13.4699999 + }, + { + "area": 62334526361014.82, + "code": "TF", + "continent": "Antarctica", + "created": { + "country": [ + "French Southern and Antarctic Territories" + ], + "created": "merged", + "date": "1979" + }, + "dependency": [ + "France" + ], + "east": -175.037445, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a7/Flag_of_the_French_Southern_and_Antarctic_Lands.svg", + "lat": -29.91833755, + "lng": 110.28232725, + "name": "French Southern Territories", + "north": -10.0971059, + "region": "Antarctica", + "south": -49.7395692, + "west": 35.6020995, + "wikipediaName": "French Southern Lands" + }, + { + "area": 120255823745.81682, + "code": "TG", + "continent": "Africa", + "east": 1.8090501, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/68/Flag_of_Togo.svg", + "lat": 8.619543, + "lng": 0.824782, + "name": "Togo", + "north": 11.1394957, + "region": "Western Africa", + "south": 6.1123578, + "west": -0.1440418 + }, + { + "area": 1482887848907.3154, + "code": "TH", + "continent": "Asia", + "created": { + "country": [ + "Siam" + ], + "created": "renamed", + "date": "1939-06-23" + }, + "east": 105.636812, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a9/Flag_of_Thailand.svg", + "languages": [ + "Thai" + ], + "lat": 15.870032, + "lng": 100.992541, + "name": "Thailand", + "north": 20.465143, + "region": "South-Eastern Asia", + "south": 5.612851, + "west": 97.343396 + }, + { + "area": 329522215187.65686, + "code": "TJ", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-09-09" + }, + "east": 75.1539564, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d0/Flag_of_Tajikistan.svg", + "languages": [ + "Tajik" + ], + "lat": 38.861034, + "lng": 71.276093, + "name": "Tajikistan", + "north": 41.044367, + "region": "Central Asia", + "south": 36.6719898, + "west": 67.3420121 + }, + { + "area": 14977026562.249058, + "code": "TK", + "continent": "Oceania", + "dependency": [ + "New Zealand" + ], + "east": -171.1811113, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/8e/Flag_of_Tokelau.svg", + "lat": -9.2002, + "lng": -171.8484, + "name": "Tokelau", + "north": -8.531454, + "region": "Polynesia", + "south": -9.4448709, + "west": -172.5207405 + }, + { + "area": 55637000543.564026, + "code": "TL", + "continent": "Asia", + "created": { + "country": [ + "East Timor" + ], + "created": "renamed", + "date": "2002-05-20" + }, + "east": 127.3416347, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/26/Flag_of_East_Timor.svg", + "lat": -8.874217, + "lng": 125.727539, + "name": "Timor-Leste", + "north": -8.1268067, + "region": "South-Eastern Asia", + "south": -9.504195, + "west": 124.0429847 + }, + { + "area": 1053053629022.3019, + "code": "TM", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-10-27" + }, + "east": 66.7073531, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1b/Flag_of_Turkmenistan.svg", + "languages": [ + "Turkmen" + ], + "lat": 38.969719, + "lng": 59.556278, + "name": "Turkmenistan", + "north": 42.798844, + "region": "Central Asia", + "south": 35.12876, + "west": 52.4477432 + }, + { + "area": 298726938752.1581, + "code": "TN", + "continent": "Africa", + "east": 11.5992174, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/ce/Flag_of_Tunisia.svg", + "lat": 33.886917, + "lng": 9.537499, + "name": "Tunisia", + "north": 37.347132, + "region": "Northern Africa", + "south": 30.2280336, + "west": 7.5223135 + }, + { + "area": 137289778815.3862, + "code": "TO", + "continent": "Oceania", + "east": -173.7024841, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Tonga.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1970-06-04" + }, + "languages": [ + "Tonga (Tonga Islands)" + ], + "lat": -21.178986, + "lng": -175.198242, + "name": "Tonga", + "north": -15.5663926, + "region": "Polynesia", + "south": -21.4734606, + "west": -175.6813217 + }, + { + "area": 55637000543.564026, + "code": "TPTL", + "continent": "Asia", + "disputed": [ + "Indonesia" + ], + "dissolved": { + "country": [ + "Timor-Leste" + ], + "date": "2002-05-20", + "dissolved": "renamed" + }, + "east": 127.3416347, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/26/Flag_of_East_Timor.svg", + "lat": -8.874217, + "lng": 125.727539, + "name": "East Timor", + "north": -8.1268067, + "region": "South-Eastern Asia", + "south": -9.504195, + "west": 124.0429847 + }, + { + "area": 1161989188222.267, + "code": "TR", + "continent": "Asia", + "east": 44.818128, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/b4/Flag_of_Turkey.svg", + "languages": [ + "Turkish", + "Kurdish" + ], + "lat": 38.963745, + "lng": 35.243322, + "name": "Turkey", + "north": 42.1062391, + "region": "Western Asia", + "south": 35.8076804, + "west": 25.6636372 + }, + { + "area": 23111708729.84678, + "code": "TT", + "continent": "South America", + "east": -60.4924177, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/64/Flag_of_Trinidad_and_Tobago.svg", + "lat": 10.691803, + "lng": -61.222503, + "name": "Trinidad and Tobago", + "north": 11.3625357, + "region": "Caribbean", + "south": 10.0431694, + "west": -61.9310689 + }, + { + "area": 241113761289.51068, + "code": "TV", + "continent": "Oceania", + "created": { + "country": [ + "Ellice Islands" + ], + "created": "renamed", + "date": "1978-10-01" + }, + "east": 179.8710608, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/38/Flag_of_Tuvalu.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1978-10-01" + }, + "lat": -10.7280717, + "lng": 179.4726562, + "name": "Tuvalu", + "north": -5.64223, + "region": "Polynesia", + "south": -10.8009338, + "west": 176.0588907 + }, + { + "area": 350341930270.0106, + "code": "TW", + "continent": "Asia", + "east": 122.0069052, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/72/Flag_of_the_Republic_of_China.svg", + "lat": 23.69781, + "lng": 120.960515, + "name": "Taiwan", + "north": 26.3873533, + "region": "Eastern Asia", + "south": 20.5637908, + "west": 116.7118601, + "wikipediaName": "Republic of China" + }, + { + "area": 1471700292824.9873, + "code": "TZ", + "continent": "Africa", + "east": 40.4449653, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/38/Flag_of_Tanzania.svg", + "lat": -6.369028, + "lng": 34.888822, + "name": "Tanzania", + "north": -0.984397, + "region": "Eastern Africa", + "south": -11.7612536, + "west": 29.34 + }, + { + "area": 1189264281171.615, + "code": "UA", + "continent": "Europe", + "created": { + "country": [ + "Ukrainian Soviet Socialist Republic" + ], + "created": "renamed", + "date": "1991-08-24" + }, + "east": 40.2285809, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg", + "independence": { + "country": [ + "Soviet Union" + ], + "date": "1991-08-24" + }, + "languages": [ + "Ukrainian" + ], + "lat": 48.379433, + "lng": 31.16558, + "name": "Ukraine", + "north": 52.379581, + "region": "Eastern Europe", + "south": 44.386463, + "west": 22.1357201 + }, + { + "area": 1189264281171.615, + "code": "UAUA", + "continent": "Europe", + "dependency": [ + "Soviet Union" + ], + "dissolved": { + "country": [ + "Ukraine" + ], + "date": "1991-08-24", + "dissolved": "renamed" + }, + "east": 40.2285809, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/a6/Flag_of_Ukrainian_SSR.svg", + "lat": 48.379433, + "lng": 31.16558, + "name": "Ukrainian Soviet Socialist Republic", + "north": 52.379581, + "region": "Eastern Europe", + "south": 44.386463, + "west": 22.1357201 + }, + { + "area": 385675144891.08875, + "code": "UG", + "continent": "Africa", + "disputes": [ + "Rwenzururu" + ], + "east": 35.0330493, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4e/Flag_of_Uganda.svg", + "lat": 1.373333, + "lng": 32.290275, + "name": "Uganda", + "north": 4.2230008, + "region": "Eastern Africa", + "south": -1.4815419, + "west": 29.5734335 + }, + { + "area": 6637196376.701824, + "code": "UG-RW", + "continent": "Africa", + "disputed": [ + "Uganda" + ], + "dissolved": { + "country": [ + "Uganda" + ], + "date": "1982-08-13", + "dissolved": "joined" + }, + "east": 30.2977179, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/9/9c/Rwenzururu_flag.png", + "lat": 0.34385375, + "lng": 30.0552463, + "name": "Rwenzururu", + "north": 0.896104, + "region": "Eastern Africa", + "south": -0.2083965, + "west": 29.8127747 + }, + { + "area": 805219897437.0283, + "code": "UK", + "continent": "Europe", + "dependencies": [ + "Canton and Enderbury Islands", + "New Hebrides", + "Akrotiri and Dhekelia", + "Anguilla", + "Bermuda", + "British Antarctic Territory", + "British Honduras", + "British Indian Ocean Territory", + "British Virgin Islands", + "Cayman Islands", + "Ellice Islands", + "England", + "Falkland Islands", + "Gibraltar", + "Gilbert and Ellice Islands", + "Gilbert Islands", + "Guernsey", + "Isle of Man", + "Jersey", + "Montserrat", + "Northern Ireland", + "Pitcairn Islands", + "Saint Christopher-Nevis-Anguilla", + "Saint Helena, Ascension and Tristan da Cunha", + "Scotland", + "South Georgia and the South Sandwich Islands", + "Southern Rhodesia", + "Trucial States", + "Turks and Caicos Islands", + "Wales", + "Antarctica" + ], + "disputes": [ + "Sealand" + ], + "east": 1.7629159, + "exception": true, + "flagURL": "http://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg", + "googleName": "UK", + "languages": [ + "Cornish", + "English", + "British" + ], + "lat": 55.36275335, + "lng": -3.4434703, + "name": "United Kingdom", + "north": 60.8607515, + "region": "Northern Europe", + "south": 49.8647552, + "west": -8.6498565 + }, + { + "area": 11365264726647.027, + "code": "UM", + "continent": "Oceania", + "created": { + "country": [ + "Johnston Island", + "Midway Islands", + "United States Miscellaneous Pacific Islands", + "Wake Island" + ], + "created": "merged", + "date": "1986" + }, + "dependency": [ + "United States" + ], + "east": -160.0045781, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e2/Flag_of_the_United_States_%28Pantone%29.svg", + "lat": 13.91304525, + "lng": -176.69358055, + "name": "United States Minor Outlying Islands", + "north": 28.2150965, + "region": "Polynesia", + "south": -0.389006, + "west": 166.617417 + }, + { + "area": 53396251601769.51, + "code": "US", + "continent": "North America", + "dependencies": [ + "Canton and Enderbury Islands", + "American Samoa", + "Guam", + "Northern Mariana Islands", + "Johnston Island", + "Midway Islands", + "Pacific Islands", + "Panama Canal Zone", + "Puerto Rico", + "United States Minor Outlying Islands", + "United States Miscellaneous Pacific Islands", + "United States Virgin Islands", + "Wake Island" + ], + "east": -66.9497608, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e2/Flag_of_the_United_States_%28Pantone%29.svg", + "googleName": "USA", + "languages": [ + "Navajo", + "Creek", + "Cheyenne", + "Hawaiian", + "Sioux", + "Cherokee", + "American", + "Hopi", + "Shoshoni" + ], + "lat": 37.09024, + "lng": -95.712891, + "name": "United States", + "north": 71.389888, + "region": "Northern America", + "south": 18.9110642, + "west": 172.4546966 + }, + { + "area": 273721340317.7892, + "code": "UY", + "continent": "South America", + "east": -53.0779286, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/fe/Flag_of_Uruguay.svg", + "lat": -32.522779, + "lng": -55.765835, + "name": "Uruguay", + "north": -30.0852149, + "region": "Southern America", + "south": -34.9733882, + "west": -58.43915 + }, + { + "area": 1341174343594.3728, + "code": "UZ", + "continent": "Asia", + "created": { + "country": [ + "Soviet Union" + ], + "created": "split", + "date": "1991-09-01" + }, + "east": 73.148946, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/84/Flag_of_Uzbekistan.svg", + "languages": [ + "Uzbek" + ], + "lat": 41.377491, + "lng": 64.585262, + "name": "Uzbekistan", + "north": 45.590075, + "region": "Central Asia", + "south": 37.1722571, + "west": 55.9982179 + }, + { + "area": 859657.1984702328, + "code": "VA", + "continent": "Europe", + "east": 12.4584798, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/00/Flag_of_the_Vatican_City.svg", + "imdbName": "Holy See (Vatican City State)", + "lat": 41.902916, + "lng": 12.453389, + "name": "Vatican City", + "north": 41.9075614, + "region": "Southern Europe", + "south": 41.9002754, + "west": 12.445687 + }, + { + "area": 3574522769.0172334, + "code": "VC", + "continent": "South America", + "east": -61.1134244, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6d/Flag_of_Saint_Vincent_and_the_Grenadines.svg", + "lat": 13.2533835, + "lng": -61.196251, + "name": "Saint Vincent and the Grenadines", + "north": 13.3842132, + "region": "Caribbean", + "south": 12.5326587, + "west": -61.4610171 + }, + { + "area": 505622608362.1054, + "code": "VDVN", + "continent": "Asia", + "dissolved": { + "country": [ + "Vietnam" + ], + "date": "1976-07-02", + "dissolved": "merged" + }, + "east": 108.1925689, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6b/Flag_of_North_Vietnam_1945-1955.svg", + "lat": 19.69181855, + "lng": 105.26002, + "name": "North Vietnam", + "north": 23.3888341, + "region": "South-Eastern Asia", + "south": 15.994803, + "west": 102.3274711 + }, + { + "area": 1924084866701.1467, + "code": "VE", + "continent": "South America", + "east": -59.805666, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/06/Flag_of_Venezuela.svg", + "lat": 6.42375, + "lng": -66.58973, + "name": "Venezuela", + "north": 12.2019032, + "region": "Southern America", + "south": 0.6475291, + "west": -73.3515581 + }, + { + "area": 3020529274.913091, + "code": "VG", + "continent": "South America", + "dependency": [ + "United Kingdom" + ], + "east": -64.2704487, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/42/Flag_of_the_British_Virgin_Islands.svg", + "lat": 18.420695, + "lng": -64.639968, + "name": "British Virgin Islands", + "north": 18.7495529, + "region": "Caribbean", + "south": 18.3063328, + "west": -64.8504602 + }, + { + "area": 4527869653.723633, + "code": "VI", + "continent": "South America", + "dependency": [ + "United States" + ], + "east": -64.5654944, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f8/Flag_of_the_United_States_Virgin_Islands.svg", + "imdbName": "US Virgin Islands", + "lat": 18.335765, + "lng": -64.896335, + "name": "United States Virgin Islands", + "north": 18.41295, + "region": "Caribbean", + "south": 17.673884, + "west": -65.0854569 + }, + { + "area": 1303975005595.8723, + "code": "VN", + "continent": "Asia", + "created": { + "country": [ + "North Vietnam", + "South Vietnam" + ], + "created": "merged", + "date": "1976-07-02" + }, + "east": 109.4689751, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/2/21/Flag_of_Vietnam.svg", + "languages": [ + "Vietnamese" + ], + "lat": 14.058324, + "lng": 108.277199, + "name": "Vietnam", + "north": 23.393395, + "region": "South-Eastern Asia", + "south": 8.4127295, + "west": 102.14441 + }, + { + "area": 532017565567.03925, + "code": "VNVN", + "continent": "Asia", + "dissolved": { + "country": [ + "Vietnam" + ], + "date": "1976-07-02", + "dissolved": "merged" + }, + "east": 109.461465, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e9/Flag_of_South_Vietnam.svg", + "lat": 12.3190807, + "lng": 106.64693735, + "name": "South Vietnam", + "north": 16.2254319, + "region": "South-Eastern Asia", + "south": 8.4127295, + "west": 103.8324097 + }, + { + "area": 314889117129.67786, + "code": "VU", + "continent": "Oceania", + "created": { + "country": [ + "New Hebrides" + ], + "created": "renamed", + "date": "1980-07-30" + }, + "east": 170.2384597, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/b/bc/Flag_of_Vanuatu.svg", + "independence": { + "country": [ + "France", + "United Kingdom" + ], + "date": "1980-07-30" + }, + "lat": -15.376706, + "lng": 166.959158, + "name": "Vanuatu", + "north": -13.0724554, + "region": "Melanesia", + "south": -20.2522929, + "west": 166.5417588 + }, + { + "area": 29182466281.98004, + "code": "WF", + "continent": "Oceania", + "dependency": [ + "France" + ], + "east": -176.124841, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/d2/Flag_of_Wallis_and_Futuna.svg", + "lat": -14.2938, + "lng": -178.1165, + "name": "Wallis and Futuna", + "north": -13.1833201, + "region": "Polynesia", + "south": -14.3621244, + "west": -178.181752 + }, + { + "area": 19955941.345983617, + "code": "WKUM", + "continent": "Oceania", + "dependency": [ + "United States" + ], + "dissolved": { + "country": [ + "United States Minor Outlying Islands" + ], + "date": "1986", + "dissolved": "merged" + }, + "east": 166.660066, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/47/Flag_of_Wake_Island.svg", + "lat": 19.2854467, + "lng": 166.6499348, + "name": "Wake Island", + "north": 19.3096949, + "region": "Micronesia", + "south": 19.26969, + "west": 166.617417 + }, + { + "area": 10765472542.265308, + "code": "WS", + "continent": "Oceania", + "east": -171.405859, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/31/Flag_of_Samoa.svg", + "languages": [ + "Samoan" + ], + "lat": -13.759029, + "lng": -172.104629, + "name": "Samoa", + "north": -13.4344024, + "region": "Polynesia", + "south": -14.0765884, + "west": -172.7985992 + }, + { + "area": 22967893826.470978, + "code": "XK", + "continent": "Europe", + "created": { + "country": [ + "Serbia" + ], + "created": "split", + "date": "2008-02-17" + }, + "disputed": [ + "Serbia" + ], + "east": 21.7898669, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/1/1f/Flag_of_Kosovo.svg", + "googleName": "Kosova (Kosovo)", + "lat": 42.6026359, + "lng": 20.902977, + "name": "Kosovo", + "north": 43.269314, + "region": "Southern Europe", + "south": 41.852085, + "west": 20.014284, + "wikipediaName": "Republic of Kosovo" + }, + { + "area": 581768114676.5299, + "code": "YDYE", + "continent": "Asia", + "dissolved": { + "country": [ + "Yemen" + ], + "date": "1990-05-22", + "dissolved": "merged" + }, + "east": 53.0783, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/d/db/Flag_of_South_Yemen.svg", + "lat": 16.0246844, + "lng": 48.97548515, + "name": "South Yemen", + "north": 19.002331, + "region": "Western Asia", + "south": 13.0470378, + "west": 44.8726703 + }, + { + "area": 1045661358711.0955, + "code": "YE", + "continent": "Asia", + "created": { + "country": [ + "North Yemen", + "South Yemen" + ], + "created": "merged", + "date": "1990-05-22" + }, + "east": 54.5335554, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/8/89/Flag_of_Yemen.svg", + "lat": 15.552727, + "lng": 48.516388, + "name": "Yemen", + "north": 18.9996331, + "region": "Western Asia", + "south": 12.1081658, + "west": 41.8160553 + }, + { + "area": 215113232244.51578, + "code": "YEYE", + "continent": "Asia", + "dissolved": { + "country": [ + "Yemen" + ], + "date": "1990-05-22", + "dissolved": "merged" + }, + "east": 47.0087311, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/f/f6/Flag_of_North_Yemen.svg", + "lat": 15.0191335, + "lng": 45.1242575, + "name": "North Yemen", + "north": 17.4041709, + "region": "Western Asia", + "south": 12.6340961, + "west": 43.2397839, + "wikipediaName": "Yemen Arab Republic" + }, + { + "area": 1256673961.070732, + "code": "YT", + "continent": "Africa", + "dependency": [ + "France" + ], + "east": 45.3000288, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/4/4a/Flag_of_Mayotte_%28local%29.svg", + "lat": -12.8275, + "lng": 45.166244, + "name": "Mayotte", + "north": -12.6365371, + "region": "Eastern Africa", + "south": -13.0055279, + "west": 45.0181707 + }, + { + "area": 519488193285.855, + "code": "YUCS", + "continent": "Europe", + "dissolved": { + "country": [ + "Serbia and Montenegro" + ], + "date": "2003-02-04", + "dissolved": "renamed" + }, + "east": 23.034093, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/e/e7/Flag_of_the_Kingdom_of_Yugoslavia.svg", + "imdbName": "Federal Republic of Yugoslavia", + "languages": [ + "Serbo-Croatian" + ], + "lat": 43.86521465, + "lng": 18.2048195, + "name": "Yugoslavia", + "north": 46.8766467, + "region": "Southern Europe", + "south": 40.8537826, + "west": 13.375546 + }, + { + "area": 2269556756163.599, + "code": "ZA", + "continent": "Africa", + "dependencies": [ + "Bophuthatswana", + "Ciskei", + "Transkei", + "Venda" + ], + "east": 32.8909911, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/a/af/Flag_of_South_Africa.svg", + "languages": [ + "Xhosa", + "Afrikaans", + "Zulu" + ], + "lat": -30.559482, + "lng": 22.937506, + "name": "South Africa", + "north": -22.1253868, + "region": "Southern Africa", + "south": -34.8329773, + "west": 16.4608321 + }, + { + "area": 295434292273.01605, + "code": "ZA-BO", + "continent": "Africa", + "dependency": [ + "South Africa" + ], + "dissolved": { + "country": [ + "South Africa" + ], + "date": "1994-04-27", + "dissolved": "joined" + }, + "east": 28.2828041, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_Bophuthatswana.svg", + "lat": -26.95380165, + "lng": 25.54969205, + "name": "Bophuthatswana", + "north": -24.5065762, + "region": "Southern Africa", + "south": -29.4010271, + "west": 22.81658 + }, + { + "area": 22412104017.53, + "code": "ZA-CI", + "continent": "Africa", + "dependency": [ + "South Africa" + ], + "dissolved": { + "country": [ + "South Africa" + ], + "date": "1994-04-27", + "dissolved": "joined" + }, + "east": 28.0353449, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/c/cc/Flag_of_Ciskei.svg", + "lat": -32.7263335, + "lng": 27.4326999, + "name": "Ciskei", + "north": -31.834457, + "region": "Southern Africa", + "south": -33.61821, + "west": 26.8300549 + }, + { + "area": 60886162683.70658, + "code": "ZA-TR", + "continent": "Africa", + "dependency": [ + "South Africa" + ], + "dissolved": { + "country": [ + "South Africa" + ], + "date": "1994-04-27", + "dissolved": "joined" + }, + "east": 30.2847061, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/05/Flag_of_Transkei.svg", + "lat": -31.1167029, + "lng": 28.5573805, + "name": "Transkei", + "north": -30.2860409, + "region": "Southern Africa", + "south": -31.9473649, + "west": 26.8300549 + }, + { + "area": 20818352544.09461, + "code": "ZA-VE", + "continent": "Africa", + "dependency": [ + "South Africa" + ], + "dissolved": { + "country": [ + "South Africa" + ], + "date": "1994-04-27", + "dissolved": "joined" + }, + "east": 31.3348961, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/3/3a/Flag_of_Venda.svg", + "lat": -23.1701895, + "lng": 30.70374495, + "name": "Venda", + "north": -22.446344, + "region": "Southern Africa", + "south": -23.894035, + "west": 30.0725938 + }, + { + "area": 1393102931629.7065, + "code": "ZM", + "continent": "Africa", + "east": 33.7022218, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/0/06/Flag_of_Zambia.svg", + "lat": -13.133897, + "lng": 27.849332, + "name": "Zambia", + "north": -8.2032836, + "region": "Eastern Africa", + "south": -18.077418, + "west": 21.9963877 + }, + { + "area": 4437461670331.977, + "code": "ZRCD", + "continent": "Africa", + "dissolved": { + "country": [ + "Democratic Republic of the Congo" + ], + "date": "1997-05-17", + "dissolved": "renamed" + }, + "east": 31.3146115, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/5/5c/Flag_of_Zaire.svg", + "lat": -4.038333, + "lng": 21.758664, + "name": "Zaire", + "north": 5.3920026, + "region": "Middle Africa", + "south": -13.459035, + "west": 12.1855092 + }, + { + "area": 624886303271.2074, + "code": "ZW", + "continent": "Africa", + "created": { + "country": [ + "Southern Rhodesia" + ], + "created": "renamed", + "date": "1980-04-18" + }, + "east": 33.0682357, + "flagURL": "http://upload.wikimedia.org/wikipedia/commons/6/6a/Flag_of_Zimbabwe.svg", + "independence": { + "country": [ + "United Kingdom" + ], + "date": "1980-04-18" + }, + "languages": [ + "Shona" + ], + "lat": -19.015438, + "lng": 29.154857, + "name": "Zimbabwe", + "north": -15.609319, + "region": "Eastern Africa", + "south": -22.4245232, + "west": 25.237368 + } + ], + "languages": [ + {"code": "ar", "name": "Arabic"}, + {"code": "de", "name": "German"}, + {"code": "en", "name": "English"}, + {"code": "es", "name": "Spanish"}, + {"code": "fr", "name": "French"}, + {"code": "gr", "name": "Greek"}, + {"code": "hi", "name": "Hindi"}, + {"code": "it", "name": "Italian"}, + {"code": "ja", "name": "Japanese"}, + {"code": "ko", "name": "Korean"}, + {"code": "nl", "name": "Dutch"}, + {"code": "pt", "name": "Portuguese"}, + {"code": "ru", "name": "Russian"}, + {"code": "tr", "name": "Turkish"}, + {"code": "zh", "name": "Chinese"} + ] +} \ No newline at end of file diff --git a/min/Geo/json/locale.ar.json b/min/Geo/json/locale.ar.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/min/Geo/json/locale.ar.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/min/Geo/json/locale.de.json b/min/Geo/json/locale.de.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/min/Geo/json/locale.de.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/min/Geo/png/flags/16/AC.png b/min/Geo/png/flags/16/AC.png new file mode 100644 index 00000000..fda9b50b Binary files /dev/null and b/min/Geo/png/flags/16/AC.png differ diff --git a/min/Geo/png/flags/16/AD.png b/min/Geo/png/flags/16/AD.png new file mode 100644 index 00000000..28ff75f3 Binary files /dev/null and b/min/Geo/png/flags/16/AD.png differ diff --git a/min/Geo/png/flags/16/AE-AJ.png b/min/Geo/png/flags/16/AE-AJ.png new file mode 100644 index 00000000..77934b36 Binary files /dev/null and b/min/Geo/png/flags/16/AE-AJ.png differ diff --git a/min/Geo/png/flags/16/AE-AZ.png b/min/Geo/png/flags/16/AE-AZ.png new file mode 100644 index 00000000..4e448c8a Binary files /dev/null and b/min/Geo/png/flags/16/AE-AZ.png differ diff --git a/min/Geo/png/flags/16/AE-DU.png b/min/Geo/png/flags/16/AE-DU.png new file mode 100644 index 00000000..77934b36 Binary files /dev/null and b/min/Geo/png/flags/16/AE-DU.png differ diff --git a/min/Geo/png/flags/16/AE-FU.png b/min/Geo/png/flags/16/AE-FU.png new file mode 100644 index 00000000..0115ad6d Binary files /dev/null and b/min/Geo/png/flags/16/AE-FU.png differ diff --git a/min/Geo/png/flags/16/AE-RK.png b/min/Geo/png/flags/16/AE-RK.png new file mode 100644 index 00000000..0becdeee Binary files /dev/null and b/min/Geo/png/flags/16/AE-RK.png differ diff --git a/min/Geo/png/flags/16/AE-SH.png b/min/Geo/png/flags/16/AE-SH.png new file mode 100644 index 00000000..0becdeee Binary files /dev/null and b/min/Geo/png/flags/16/AE-SH.png differ diff --git a/min/Geo/png/flags/16/AE-UQ.png b/min/Geo/png/flags/16/AE-UQ.png new file mode 100644 index 00000000..59c90953 Binary files /dev/null and b/min/Geo/png/flags/16/AE-UQ.png differ diff --git a/min/Geo/png/flags/16/AE.png b/min/Geo/png/flags/16/AE.png new file mode 100644 index 00000000..0115ad6d Binary files /dev/null and b/min/Geo/png/flags/16/AE.png differ diff --git a/min/Geo/png/flags/16/AF.png b/min/Geo/png/flags/16/AF.png new file mode 100644 index 00000000..6e9618a7 Binary files /dev/null and b/min/Geo/png/flags/16/AF.png differ diff --git a/min/Geo/png/flags/16/AG.png b/min/Geo/png/flags/16/AG.png new file mode 100644 index 00000000..0bb315d8 Binary files /dev/null and b/min/Geo/png/flags/16/AG.png differ diff --git a/min/Geo/png/flags/16/AI.png b/min/Geo/png/flags/16/AI.png new file mode 100644 index 00000000..4cb8bd6a Binary files /dev/null and b/min/Geo/png/flags/16/AI.png differ diff --git a/min/Geo/png/flags/16/AIDJ.png b/min/Geo/png/flags/16/AIDJ.png new file mode 100644 index 00000000..c7765a9f Binary files /dev/null and b/min/Geo/png/flags/16/AIDJ.png differ diff --git a/min/Geo/png/flags/16/AL.png b/min/Geo/png/flags/16/AL.png new file mode 100644 index 00000000..4c692ee3 Binary files /dev/null and b/min/Geo/png/flags/16/AL.png differ diff --git a/min/Geo/png/flags/16/AM.png b/min/Geo/png/flags/16/AM.png new file mode 100644 index 00000000..72297fa4 Binary files /dev/null and b/min/Geo/png/flags/16/AM.png differ diff --git a/min/Geo/png/flags/16/ANHH.png b/min/Geo/png/flags/16/ANHH.png new file mode 100644 index 00000000..f9268456 Binary files /dev/null and b/min/Geo/png/flags/16/ANHH.png differ diff --git a/min/Geo/png/flags/16/AO-CAB.png b/min/Geo/png/flags/16/AO-CAB.png new file mode 100644 index 00000000..0a353507 Binary files /dev/null and b/min/Geo/png/flags/16/AO-CAB.png differ diff --git a/min/Geo/png/flags/16/AO.png b/min/Geo/png/flags/16/AO.png new file mode 100644 index 00000000..7f8813ff Binary files /dev/null and b/min/Geo/png/flags/16/AO.png differ diff --git a/min/Geo/png/flags/16/AQ.png b/min/Geo/png/flags/16/AQ.png new file mode 100644 index 00000000..233b730b Binary files /dev/null and b/min/Geo/png/flags/16/AQ.png differ diff --git a/min/Geo/png/flags/16/AR-AQ.png b/min/Geo/png/flags/16/AR-AQ.png new file mode 100644 index 00000000..b41cb81d Binary files /dev/null and b/min/Geo/png/flags/16/AR-AQ.png differ diff --git a/min/Geo/png/flags/16/AR.png b/min/Geo/png/flags/16/AR.png new file mode 100644 index 00000000..aac13db9 Binary files /dev/null and b/min/Geo/png/flags/16/AR.png differ diff --git a/min/Geo/png/flags/16/AS.png b/min/Geo/png/flags/16/AS.png new file mode 100644 index 00000000..ceb52b8f Binary files /dev/null and b/min/Geo/png/flags/16/AS.png differ diff --git a/min/Geo/png/flags/16/AT.png b/min/Geo/png/flags/16/AT.png new file mode 100644 index 00000000..b0b45d08 Binary files /dev/null and b/min/Geo/png/flags/16/AT.png differ diff --git a/min/Geo/png/flags/16/AU-AC.png b/min/Geo/png/flags/16/AU-AC.png new file mode 100644 index 00000000..dab1e3ce Binary files /dev/null and b/min/Geo/png/flags/16/AU-AC.png differ diff --git a/min/Geo/png/flags/16/AU-AQ.png b/min/Geo/png/flags/16/AU-AQ.png new file mode 100644 index 00000000..dab1e3ce Binary files /dev/null and b/min/Geo/png/flags/16/AU-AQ.png differ diff --git a/min/Geo/png/flags/16/AU-CS.png b/min/Geo/png/flags/16/AU-CS.png new file mode 100644 index 00000000..dab1e3ce Binary files /dev/null and b/min/Geo/png/flags/16/AU-CS.png differ diff --git a/min/Geo/png/flags/16/AU.png b/min/Geo/png/flags/16/AU.png new file mode 100644 index 00000000..dab1e3ce Binary files /dev/null and b/min/Geo/png/flags/16/AU.png differ diff --git a/min/Geo/png/flags/16/AW.png b/min/Geo/png/flags/16/AW.png new file mode 100644 index 00000000..04ef8099 Binary files /dev/null and b/min/Geo/png/flags/16/AW.png differ diff --git a/min/Geo/png/flags/16/AX.png b/min/Geo/png/flags/16/AX.png new file mode 100644 index 00000000..e993ee5a Binary files /dev/null and b/min/Geo/png/flags/16/AX.png differ diff --git a/min/Geo/png/flags/16/AZ-NK.png b/min/Geo/png/flags/16/AZ-NK.png new file mode 100644 index 00000000..7292ac65 Binary files /dev/null and b/min/Geo/png/flags/16/AZ-NK.png differ diff --git a/min/Geo/png/flags/16/AZ.png b/min/Geo/png/flags/16/AZ.png new file mode 100644 index 00000000..4e566836 Binary files /dev/null and b/min/Geo/png/flags/16/AZ.png differ diff --git a/min/Geo/png/flags/16/BA.png b/min/Geo/png/flags/16/BA.png new file mode 100644 index 00000000..5bb047f7 Binary files /dev/null and b/min/Geo/png/flags/16/BA.png differ diff --git a/min/Geo/png/flags/16/BB.png b/min/Geo/png/flags/16/BB.png new file mode 100644 index 00000000..c227eb61 Binary files /dev/null and b/min/Geo/png/flags/16/BB.png differ diff --git a/min/Geo/png/flags/16/BD.png b/min/Geo/png/flags/16/BD.png new file mode 100644 index 00000000..f3f24850 Binary files /dev/null and b/min/Geo/png/flags/16/BD.png differ diff --git a/min/Geo/png/flags/16/BE.png b/min/Geo/png/flags/16/BE.png new file mode 100644 index 00000000..5e85b3da Binary files /dev/null and b/min/Geo/png/flags/16/BE.png differ diff --git a/min/Geo/png/flags/16/BF.png b/min/Geo/png/flags/16/BF.png new file mode 100644 index 00000000..7dadf3b8 Binary files /dev/null and b/min/Geo/png/flags/16/BF.png differ diff --git a/min/Geo/png/flags/16/BG.png b/min/Geo/png/flags/16/BG.png new file mode 100644 index 00000000..c79cd332 Binary files /dev/null and b/min/Geo/png/flags/16/BG.png differ diff --git a/min/Geo/png/flags/16/BH.png b/min/Geo/png/flags/16/BH.png new file mode 100644 index 00000000..9d117523 Binary files /dev/null and b/min/Geo/png/flags/16/BH.png differ diff --git a/min/Geo/png/flags/16/BI.png b/min/Geo/png/flags/16/BI.png new file mode 100644 index 00000000..a8354f23 Binary files /dev/null and b/min/Geo/png/flags/16/BI.png differ diff --git a/min/Geo/png/flags/16/BJ.png b/min/Geo/png/flags/16/BJ.png new file mode 100644 index 00000000..2053d41b Binary files /dev/null and b/min/Geo/png/flags/16/BJ.png differ diff --git a/min/Geo/png/flags/16/BL.png b/min/Geo/png/flags/16/BL.png new file mode 100644 index 00000000..4b9e7b09 Binary files /dev/null and b/min/Geo/png/flags/16/BL.png differ diff --git a/min/Geo/png/flags/16/BM.png b/min/Geo/png/flags/16/BM.png new file mode 100644 index 00000000..7c4d4b1d Binary files /dev/null and b/min/Geo/png/flags/16/BM.png differ diff --git a/min/Geo/png/flags/16/BN.png b/min/Geo/png/flags/16/BN.png new file mode 100644 index 00000000..55712223 Binary files /dev/null and b/min/Geo/png/flags/16/BN.png differ diff --git a/min/Geo/png/flags/16/BO.png b/min/Geo/png/flags/16/BO.png new file mode 100644 index 00000000..326b417d Binary files /dev/null and b/min/Geo/png/flags/16/BO.png differ diff --git a/min/Geo/png/flags/16/BQ.png b/min/Geo/png/flags/16/BQ.png new file mode 100644 index 00000000..4600443e Binary files /dev/null and b/min/Geo/png/flags/16/BQ.png differ diff --git a/min/Geo/png/flags/16/BQAQ.png b/min/Geo/png/flags/16/BQAQ.png new file mode 100644 index 00000000..80bf461a Binary files /dev/null and b/min/Geo/png/flags/16/BQAQ.png differ diff --git a/min/Geo/png/flags/16/BR.png b/min/Geo/png/flags/16/BR.png new file mode 100644 index 00000000..374fe389 Binary files /dev/null and b/min/Geo/png/flags/16/BR.png differ diff --git a/min/Geo/png/flags/16/BS.png b/min/Geo/png/flags/16/BS.png new file mode 100644 index 00000000..2f66dc2d Binary files /dev/null and b/min/Geo/png/flags/16/BS.png differ diff --git a/min/Geo/png/flags/16/BT.png b/min/Geo/png/flags/16/BT.png new file mode 100644 index 00000000..bf6163cb Binary files /dev/null and b/min/Geo/png/flags/16/BT.png differ diff --git a/min/Geo/png/flags/16/BUMM.png b/min/Geo/png/flags/16/BUMM.png new file mode 100644 index 00000000..1e8b1b00 Binary files /dev/null and b/min/Geo/png/flags/16/BUMM.png differ diff --git a/min/Geo/png/flags/16/BV.png b/min/Geo/png/flags/16/BV.png new file mode 100644 index 00000000..88b9b5a1 Binary files /dev/null and b/min/Geo/png/flags/16/BV.png differ diff --git a/min/Geo/png/flags/16/BW.png b/min/Geo/png/flags/16/BW.png new file mode 100644 index 00000000..30287695 Binary files /dev/null and b/min/Geo/png/flags/16/BW.png differ diff --git a/min/Geo/png/flags/16/BY.png b/min/Geo/png/flags/16/BY.png new file mode 100644 index 00000000..924c0aca Binary files /dev/null and b/min/Geo/png/flags/16/BY.png differ diff --git a/min/Geo/png/flags/16/BYAA.png b/min/Geo/png/flags/16/BYAA.png new file mode 100644 index 00000000..124f7716 Binary files /dev/null and b/min/Geo/png/flags/16/BYAA.png differ diff --git a/min/Geo/png/flags/16/BZ.png b/min/Geo/png/flags/16/BZ.png new file mode 100644 index 00000000..5a6190cb Binary files /dev/null and b/min/Geo/png/flags/16/BZ.png differ diff --git a/min/Geo/png/flags/16/CA.png b/min/Geo/png/flags/16/CA.png new file mode 100644 index 00000000..ff9d5d63 Binary files /dev/null and b/min/Geo/png/flags/16/CA.png differ diff --git a/min/Geo/png/flags/16/CC.png b/min/Geo/png/flags/16/CC.png new file mode 100644 index 00000000..fdc7792b Binary files /dev/null and b/min/Geo/png/flags/16/CC.png differ diff --git a/min/Geo/png/flags/16/CD.png b/min/Geo/png/flags/16/CD.png new file mode 100644 index 00000000..f16bb205 Binary files /dev/null and b/min/Geo/png/flags/16/CD.png differ diff --git a/min/Geo/png/flags/16/CF.png b/min/Geo/png/flags/16/CF.png new file mode 100644 index 00000000..79ff0fa0 Binary files /dev/null and b/min/Geo/png/flags/16/CF.png differ diff --git a/min/Geo/png/flags/16/CG.png b/min/Geo/png/flags/16/CG.png new file mode 100644 index 00000000..e580d0c3 Binary files /dev/null and b/min/Geo/png/flags/16/CG.png differ diff --git a/min/Geo/png/flags/16/CH.png b/min/Geo/png/flags/16/CH.png new file mode 100644 index 00000000..fac8edfa Binary files /dev/null and b/min/Geo/png/flags/16/CH.png differ diff --git a/min/Geo/png/flags/16/CI.png b/min/Geo/png/flags/16/CI.png new file mode 100644 index 00000000..75828c1f Binary files /dev/null and b/min/Geo/png/flags/16/CI.png differ diff --git a/min/Geo/png/flags/16/CK.png b/min/Geo/png/flags/16/CK.png new file mode 100644 index 00000000..21d0d616 Binary files /dev/null and b/min/Geo/png/flags/16/CK.png differ diff --git a/min/Geo/png/flags/16/CL-AQ.png b/min/Geo/png/flags/16/CL-AQ.png new file mode 100644 index 00000000..66ce6e32 Binary files /dev/null and b/min/Geo/png/flags/16/CL-AQ.png differ diff --git a/min/Geo/png/flags/16/CL.png b/min/Geo/png/flags/16/CL.png new file mode 100644 index 00000000..ab43caa9 Binary files /dev/null and b/min/Geo/png/flags/16/CL.png differ diff --git a/min/Geo/png/flags/16/CM.png b/min/Geo/png/flags/16/CM.png new file mode 100644 index 00000000..a4af58f5 Binary files /dev/null and b/min/Geo/png/flags/16/CM.png differ diff --git a/min/Geo/png/flags/16/CN.png b/min/Geo/png/flags/16/CN.png new file mode 100644 index 00000000..fc8fa5ac Binary files /dev/null and b/min/Geo/png/flags/16/CN.png differ diff --git a/min/Geo/png/flags/16/CO.png b/min/Geo/png/flags/16/CO.png new file mode 100644 index 00000000..82adcd45 Binary files /dev/null and b/min/Geo/png/flags/16/CO.png differ diff --git a/min/Geo/png/flags/16/CP.png b/min/Geo/png/flags/16/CP.png new file mode 100644 index 00000000..c7765a9f Binary files /dev/null and b/min/Geo/png/flags/16/CP.png differ diff --git a/min/Geo/png/flags/16/CR.png b/min/Geo/png/flags/16/CR.png new file mode 100644 index 00000000..29693332 Binary files /dev/null and b/min/Geo/png/flags/16/CR.png differ diff --git a/min/Geo/png/flags/16/CSHH.png b/min/Geo/png/flags/16/CSHH.png new file mode 100644 index 00000000..026fb6de Binary files /dev/null and b/min/Geo/png/flags/16/CSHH.png differ diff --git a/min/Geo/png/flags/16/CSXX.png b/min/Geo/png/flags/16/CSXX.png new file mode 100644 index 00000000..008e60b2 Binary files /dev/null and b/min/Geo/png/flags/16/CSXX.png differ diff --git a/min/Geo/png/flags/16/CTKI.png b/min/Geo/png/flags/16/CTKI.png new file mode 100644 index 00000000..8f6b030c Binary files /dev/null and b/min/Geo/png/flags/16/CTKI.png differ diff --git a/min/Geo/png/flags/16/CU.png b/min/Geo/png/flags/16/CU.png new file mode 100644 index 00000000..9826f9ca Binary files /dev/null and b/min/Geo/png/flags/16/CU.png differ diff --git a/min/Geo/png/flags/16/CV.png b/min/Geo/png/flags/16/CV.png new file mode 100644 index 00000000..4e9337e9 Binary files /dev/null and b/min/Geo/png/flags/16/CV.png differ diff --git a/min/Geo/png/flags/16/CW.png b/min/Geo/png/flags/16/CW.png new file mode 100644 index 00000000..7614357c Binary files /dev/null and b/min/Geo/png/flags/16/CW.png differ diff --git a/min/Geo/png/flags/16/CX.png b/min/Geo/png/flags/16/CX.png new file mode 100644 index 00000000..6c5f9ccf Binary files /dev/null and b/min/Geo/png/flags/16/CX.png differ diff --git a/min/Geo/png/flags/16/CY-NC.png b/min/Geo/png/flags/16/CY-NC.png new file mode 100644 index 00000000..fd925b87 Binary files /dev/null and b/min/Geo/png/flags/16/CY-NC.png differ diff --git a/min/Geo/png/flags/16/CY.png b/min/Geo/png/flags/16/CY.png new file mode 100644 index 00000000..bc3ee861 Binary files /dev/null and b/min/Geo/png/flags/16/CY.png differ diff --git a/min/Geo/png/flags/16/CZ.png b/min/Geo/png/flags/16/CZ.png new file mode 100644 index 00000000..026fb6de Binary files /dev/null and b/min/Geo/png/flags/16/CZ.png differ diff --git a/min/Geo/png/flags/16/DDDE.png b/min/Geo/png/flags/16/DDDE.png new file mode 100644 index 00000000..e0a22e61 Binary files /dev/null and b/min/Geo/png/flags/16/DDDE.png differ diff --git a/min/Geo/png/flags/16/DE.png b/min/Geo/png/flags/16/DE.png new file mode 100644 index 00000000..6b1593fd Binary files /dev/null and b/min/Geo/png/flags/16/DE.png differ diff --git a/min/Geo/png/flags/16/DEDE.png b/min/Geo/png/flags/16/DEDE.png new file mode 100644 index 00000000..6b1593fd Binary files /dev/null and b/min/Geo/png/flags/16/DEDE.png differ diff --git a/min/Geo/png/flags/16/DG.png b/min/Geo/png/flags/16/DG.png new file mode 100644 index 00000000..8c318c9e Binary files /dev/null and b/min/Geo/png/flags/16/DG.png differ diff --git a/min/Geo/png/flags/16/DJ.png b/min/Geo/png/flags/16/DJ.png new file mode 100644 index 00000000..768a6e5f Binary files /dev/null and b/min/Geo/png/flags/16/DJ.png differ diff --git a/min/Geo/png/flags/16/DK.png b/min/Geo/png/flags/16/DK.png new file mode 100644 index 00000000..dcfab85a Binary files /dev/null and b/min/Geo/png/flags/16/DK.png differ diff --git a/min/Geo/png/flags/16/DM.png b/min/Geo/png/flags/16/DM.png new file mode 100644 index 00000000..4f4cde47 Binary files /dev/null and b/min/Geo/png/flags/16/DM.png differ diff --git a/min/Geo/png/flags/16/DO.png b/min/Geo/png/flags/16/DO.png new file mode 100644 index 00000000..91901d89 Binary files /dev/null and b/min/Geo/png/flags/16/DO.png differ diff --git a/min/Geo/png/flags/16/DYBJ.png b/min/Geo/png/flags/16/DYBJ.png new file mode 100644 index 00000000..2053d41b Binary files /dev/null and b/min/Geo/png/flags/16/DYBJ.png differ diff --git a/min/Geo/png/flags/16/DZ.png b/min/Geo/png/flags/16/DZ.png new file mode 100644 index 00000000..b8bdb758 Binary files /dev/null and b/min/Geo/png/flags/16/DZ.png differ diff --git a/min/Geo/png/flags/16/EA.png b/min/Geo/png/flags/16/EA.png new file mode 100644 index 00000000..77208be2 Binary files /dev/null and b/min/Geo/png/flags/16/EA.png differ diff --git a/min/Geo/png/flags/16/EC.png b/min/Geo/png/flags/16/EC.png new file mode 100644 index 00000000..ff1d490e Binary files /dev/null and b/min/Geo/png/flags/16/EC.png differ diff --git a/min/Geo/png/flags/16/EE.png b/min/Geo/png/flags/16/EE.png new file mode 100644 index 00000000..c670bb5f Binary files /dev/null and b/min/Geo/png/flags/16/EE.png differ diff --git a/min/Geo/png/flags/16/EG.png b/min/Geo/png/flags/16/EG.png new file mode 100644 index 00000000..e092a53b Binary files /dev/null and b/min/Geo/png/flags/16/EG.png differ diff --git a/min/Geo/png/flags/16/EGEG.png b/min/Geo/png/flags/16/EGEG.png new file mode 100644 index 00000000..78a4bde4 Binary files /dev/null and b/min/Geo/png/flags/16/EGEG.png differ diff --git a/min/Geo/png/flags/16/EH.png b/min/Geo/png/flags/16/EH.png new file mode 100644 index 00000000..ec2c3067 Binary files /dev/null and b/min/Geo/png/flags/16/EH.png differ diff --git a/min/Geo/png/flags/16/ER.png b/min/Geo/png/flags/16/ER.png new file mode 100644 index 00000000..3b522b6d Binary files /dev/null and b/min/Geo/png/flags/16/ER.png differ diff --git a/min/Geo/png/flags/16/ES.png b/min/Geo/png/flags/16/ES.png new file mode 100644 index 00000000..cbbc85a4 Binary files /dev/null and b/min/Geo/png/flags/16/ES.png differ diff --git a/min/Geo/png/flags/16/ET.png b/min/Geo/png/flags/16/ET.png new file mode 100644 index 00000000..7746fbc9 Binary files /dev/null and b/min/Geo/png/flags/16/ET.png differ diff --git a/min/Geo/png/flags/16/EU.png b/min/Geo/png/flags/16/EU.png new file mode 100644 index 00000000..ac52cd1c Binary files /dev/null and b/min/Geo/png/flags/16/EU.png differ diff --git a/min/Geo/png/flags/16/FI.png b/min/Geo/png/flags/16/FI.png new file mode 100644 index 00000000..b418ca2d Binary files /dev/null and b/min/Geo/png/flags/16/FI.png differ diff --git a/min/Geo/png/flags/16/FJ.png b/min/Geo/png/flags/16/FJ.png new file mode 100644 index 00000000..6aab9cc7 Binary files /dev/null and b/min/Geo/png/flags/16/FJ.png differ diff --git a/min/Geo/png/flags/16/FK.png b/min/Geo/png/flags/16/FK.png new file mode 100644 index 00000000..f21987e1 Binary files /dev/null and b/min/Geo/png/flags/16/FK.png differ diff --git a/min/Geo/png/flags/16/FM.png b/min/Geo/png/flags/16/FM.png new file mode 100644 index 00000000..34ab771a Binary files /dev/null and b/min/Geo/png/flags/16/FM.png differ diff --git a/min/Geo/png/flags/16/FO.png b/min/Geo/png/flags/16/FO.png new file mode 100644 index 00000000..8b5b93b9 Binary files /dev/null and b/min/Geo/png/flags/16/FO.png differ diff --git a/min/Geo/png/flags/16/FQHH.png b/min/Geo/png/flags/16/FQHH.png new file mode 100644 index 00000000..1cf52b3f Binary files /dev/null and b/min/Geo/png/flags/16/FQHH.png differ diff --git a/min/Geo/png/flags/16/FR-AQ.png b/min/Geo/png/flags/16/FR-AQ.png new file mode 100644 index 00000000..1cf52b3f Binary files /dev/null and b/min/Geo/png/flags/16/FR-AQ.png differ diff --git a/min/Geo/png/flags/16/FR.png b/min/Geo/png/flags/16/FR.png new file mode 100644 index 00000000..c7765a9f Binary files /dev/null and b/min/Geo/png/flags/16/FR.png differ diff --git a/min/Geo/png/flags/16/FXFR.png b/min/Geo/png/flags/16/FXFR.png new file mode 100644 index 00000000..c7765a9f Binary files /dev/null and b/min/Geo/png/flags/16/FXFR.png differ diff --git a/min/Geo/png/flags/16/GA.png b/min/Geo/png/flags/16/GA.png new file mode 100644 index 00000000..faaa8af6 Binary files /dev/null and b/min/Geo/png/flags/16/GA.png differ diff --git a/min/Geo/png/flags/16/GB-AD.png b/min/Geo/png/flags/16/GB-AD.png new file mode 100644 index 00000000..3b0a7a0f Binary files /dev/null and b/min/Geo/png/flags/16/GB-AD.png differ diff --git a/min/Geo/png/flags/16/GB-ENG.png b/min/Geo/png/flags/16/GB-ENG.png new file mode 100644 index 00000000..8d95c2d3 Binary files /dev/null and b/min/Geo/png/flags/16/GB-ENG.png differ diff --git a/min/Geo/png/flags/16/GB-NIR.png b/min/Geo/png/flags/16/GB-NIR.png new file mode 100644 index 00000000..28f8d20e Binary files /dev/null and b/min/Geo/png/flags/16/GB-NIR.png differ diff --git a/min/Geo/png/flags/16/GB-SCT.png b/min/Geo/png/flags/16/GB-SCT.png new file mode 100644 index 00000000..9459bc6c Binary files /dev/null and b/min/Geo/png/flags/16/GB-SCT.png differ diff --git a/min/Geo/png/flags/16/GB-SL.png b/min/Geo/png/flags/16/GB-SL.png new file mode 100644 index 00000000..4eda1993 Binary files /dev/null and b/min/Geo/png/flags/16/GB-SL.png differ diff --git a/min/Geo/png/flags/16/GB-WLS.png b/min/Geo/png/flags/16/GB-WLS.png new file mode 100644 index 00000000..c7510c51 Binary files /dev/null and b/min/Geo/png/flags/16/GB-WLS.png differ diff --git a/min/Geo/png/flags/16/GB.png b/min/Geo/png/flags/16/GB.png new file mode 100644 index 00000000..3b0a7a0f Binary files /dev/null and b/min/Geo/png/flags/16/GB.png differ diff --git a/min/Geo/png/flags/16/GBAE.png b/min/Geo/png/flags/16/GBAE.png new file mode 100644 index 00000000..0cd86ebc Binary files /dev/null and b/min/Geo/png/flags/16/GBAE.png differ diff --git a/min/Geo/png/flags/16/GBBZ.png b/min/Geo/png/flags/16/GBBZ.png new file mode 100644 index 00000000..9e6df012 Binary files /dev/null and b/min/Geo/png/flags/16/GBBZ.png differ diff --git a/min/Geo/png/flags/16/GBKN.png b/min/Geo/png/flags/16/GBKN.png new file mode 100644 index 00000000..17912a7c Binary files /dev/null and b/min/Geo/png/flags/16/GBKN.png differ diff --git a/min/Geo/png/flags/16/GD.png b/min/Geo/png/flags/16/GD.png new file mode 100644 index 00000000..87f77da5 Binary files /dev/null and b/min/Geo/png/flags/16/GD.png differ diff --git a/min/Geo/png/flags/16/GE-AB.png b/min/Geo/png/flags/16/GE-AB.png new file mode 100644 index 00000000..2ef346e8 Binary files /dev/null and b/min/Geo/png/flags/16/GE-AB.png differ diff --git a/min/Geo/png/flags/16/GE-SK.png b/min/Geo/png/flags/16/GE-SK.png new file mode 100644 index 00000000..5533d8ea Binary files /dev/null and b/min/Geo/png/flags/16/GE-SK.png differ diff --git a/min/Geo/png/flags/16/GE.png b/min/Geo/png/flags/16/GE.png new file mode 100644 index 00000000..60de6b58 Binary files /dev/null and b/min/Geo/png/flags/16/GE.png differ diff --git a/min/Geo/png/flags/16/GEHH.png b/min/Geo/png/flags/16/GEHH.png new file mode 100644 index 00000000..8f6b030c Binary files /dev/null and b/min/Geo/png/flags/16/GEHH.png differ diff --git a/min/Geo/png/flags/16/GEKI.png b/min/Geo/png/flags/16/GEKI.png new file mode 100644 index 00000000..8f6b030c Binary files /dev/null and b/min/Geo/png/flags/16/GEKI.png differ diff --git a/min/Geo/png/flags/16/GETV.png b/min/Geo/png/flags/16/GETV.png new file mode 100644 index 00000000..8f6b030c Binary files /dev/null and b/min/Geo/png/flags/16/GETV.png differ diff --git a/min/Geo/png/flags/16/GF.png b/min/Geo/png/flags/16/GF.png new file mode 100644 index 00000000..eeefe023 Binary files /dev/null and b/min/Geo/png/flags/16/GF.png differ diff --git a/min/Geo/png/flags/16/GG-AL.png b/min/Geo/png/flags/16/GG-AL.png new file mode 100644 index 00000000..4f803130 Binary files /dev/null and b/min/Geo/png/flags/16/GG-AL.png differ diff --git a/min/Geo/png/flags/16/GG-HE.png b/min/Geo/png/flags/16/GG-HE.png new file mode 100644 index 00000000..63b60a2b Binary files /dev/null and b/min/Geo/png/flags/16/GG-HE.png differ diff --git a/min/Geo/png/flags/16/GG-SA.png b/min/Geo/png/flags/16/GG-SA.png new file mode 100644 index 00000000..a843afbd Binary files /dev/null and b/min/Geo/png/flags/16/GG-SA.png differ diff --git a/min/Geo/png/flags/16/GG.png b/min/Geo/png/flags/16/GG.png new file mode 100644 index 00000000..b4b4d540 Binary files /dev/null and b/min/Geo/png/flags/16/GG.png differ diff --git a/min/Geo/png/flags/16/GH.png b/min/Geo/png/flags/16/GH.png new file mode 100644 index 00000000..64d04145 Binary files /dev/null and b/min/Geo/png/flags/16/GH.png differ diff --git a/min/Geo/png/flags/16/GI.png b/min/Geo/png/flags/16/GI.png new file mode 100644 index 00000000..2a5cf72c Binary files /dev/null and b/min/Geo/png/flags/16/GI.png differ diff --git a/min/Geo/png/flags/16/GL.png b/min/Geo/png/flags/16/GL.png new file mode 100644 index 00000000..b46d4444 Binary files /dev/null and b/min/Geo/png/flags/16/GL.png differ diff --git a/min/Geo/png/flags/16/GM.png b/min/Geo/png/flags/16/GM.png new file mode 100644 index 00000000..7c0a841e Binary files /dev/null and b/min/Geo/png/flags/16/GM.png differ diff --git a/min/Geo/png/flags/16/GN.png b/min/Geo/png/flags/16/GN.png new file mode 100644 index 00000000..e3c98078 Binary files /dev/null and b/min/Geo/png/flags/16/GN.png differ diff --git a/min/Geo/png/flags/16/GP.png b/min/Geo/png/flags/16/GP.png new file mode 100644 index 00000000..c87ddc5a Binary files /dev/null and b/min/Geo/png/flags/16/GP.png differ diff --git a/min/Geo/png/flags/16/GQ.png b/min/Geo/png/flags/16/GQ.png new file mode 100644 index 00000000..c5dd0a09 Binary files /dev/null and b/min/Geo/png/flags/16/GQ.png differ diff --git a/min/Geo/png/flags/16/GR.png b/min/Geo/png/flags/16/GR.png new file mode 100644 index 00000000..d56018f0 Binary files /dev/null and b/min/Geo/png/flags/16/GR.png differ diff --git a/min/Geo/png/flags/16/GS.png b/min/Geo/png/flags/16/GS.png new file mode 100644 index 00000000..64e19368 Binary files /dev/null and b/min/Geo/png/flags/16/GS.png differ diff --git a/min/Geo/png/flags/16/GT.png b/min/Geo/png/flags/16/GT.png new file mode 100644 index 00000000..e336321c Binary files /dev/null and b/min/Geo/png/flags/16/GT.png differ diff --git a/min/Geo/png/flags/16/GU.png b/min/Geo/png/flags/16/GU.png new file mode 100644 index 00000000..9e4f96db Binary files /dev/null and b/min/Geo/png/flags/16/GU.png differ diff --git a/min/Geo/png/flags/16/GW.png b/min/Geo/png/flags/16/GW.png new file mode 100644 index 00000000..e8aa2c72 Binary files /dev/null and b/min/Geo/png/flags/16/GW.png differ diff --git a/min/Geo/png/flags/16/GY.png b/min/Geo/png/flags/16/GY.png new file mode 100644 index 00000000..94f8733d Binary files /dev/null and b/min/Geo/png/flags/16/GY.png differ diff --git a/min/Geo/png/flags/16/HK.png b/min/Geo/png/flags/16/HK.png new file mode 100644 index 00000000..27093932 Binary files /dev/null and b/min/Geo/png/flags/16/HK.png differ diff --git a/min/Geo/png/flags/16/HM.png b/min/Geo/png/flags/16/HM.png new file mode 100644 index 00000000..dab1e3ce Binary files /dev/null and b/min/Geo/png/flags/16/HM.png differ diff --git a/min/Geo/png/flags/16/HN.png b/min/Geo/png/flags/16/HN.png new file mode 100644 index 00000000..586808fe Binary files /dev/null and b/min/Geo/png/flags/16/HN.png differ diff --git a/min/Geo/png/flags/16/HR.png b/min/Geo/png/flags/16/HR.png new file mode 100644 index 00000000..42b504c7 Binary files /dev/null and b/min/Geo/png/flags/16/HR.png differ diff --git a/min/Geo/png/flags/16/HT.png b/min/Geo/png/flags/16/HT.png new file mode 100644 index 00000000..add0370f Binary files /dev/null and b/min/Geo/png/flags/16/HT.png differ diff --git a/min/Geo/png/flags/16/HU.png b/min/Geo/png/flags/16/HU.png new file mode 100644 index 00000000..1b750b30 Binary files /dev/null and b/min/Geo/png/flags/16/HU.png differ diff --git a/min/Geo/png/flags/16/HVBF.png b/min/Geo/png/flags/16/HVBF.png new file mode 100644 index 00000000..107a8a07 Binary files /dev/null and b/min/Geo/png/flags/16/HVBF.png differ diff --git a/min/Geo/png/flags/16/IC.png b/min/Geo/png/flags/16/IC.png new file mode 100644 index 00000000..44f2d1e1 Binary files /dev/null and b/min/Geo/png/flags/16/IC.png differ diff --git a/min/Geo/png/flags/16/ID.png b/min/Geo/png/flags/16/ID.png new file mode 100644 index 00000000..3e6f75b5 Binary files /dev/null and b/min/Geo/png/flags/16/ID.png differ diff --git a/min/Geo/png/flags/16/IE.png b/min/Geo/png/flags/16/IE.png new file mode 100644 index 00000000..7cefb2a3 Binary files /dev/null and b/min/Geo/png/flags/16/IE.png differ diff --git a/min/Geo/png/flags/16/IL.png b/min/Geo/png/flags/16/IL.png new file mode 100644 index 00000000..aaa86f50 Binary files /dev/null and b/min/Geo/png/flags/16/IL.png differ diff --git a/min/Geo/png/flags/16/IM.png b/min/Geo/png/flags/16/IM.png new file mode 100644 index 00000000..d6f5a9cb Binary files /dev/null and b/min/Geo/png/flags/16/IM.png differ diff --git a/min/Geo/png/flags/16/IN-JK.png b/min/Geo/png/flags/16/IN-JK.png new file mode 100644 index 00000000..24b8327b Binary files /dev/null and b/min/Geo/png/flags/16/IN-JK.png differ diff --git a/min/Geo/png/flags/16/IN.png b/min/Geo/png/flags/16/IN.png new file mode 100644 index 00000000..3bb678c5 Binary files /dev/null and b/min/Geo/png/flags/16/IN.png differ diff --git a/min/Geo/png/flags/16/IO.png b/min/Geo/png/flags/16/IO.png new file mode 100644 index 00000000..8c318c9e Binary files /dev/null and b/min/Geo/png/flags/16/IO.png differ diff --git a/min/Geo/png/flags/16/IQ.png b/min/Geo/png/flags/16/IQ.png new file mode 100644 index 00000000..1aa2c607 Binary files /dev/null and b/min/Geo/png/flags/16/IQ.png differ diff --git a/min/Geo/png/flags/16/IR.png b/min/Geo/png/flags/16/IR.png new file mode 100644 index 00000000..048bc8e5 Binary files /dev/null and b/min/Geo/png/flags/16/IR.png differ diff --git a/min/Geo/png/flags/16/IS.png b/min/Geo/png/flags/16/IS.png new file mode 100644 index 00000000..e1d0b4dd Binary files /dev/null and b/min/Geo/png/flags/16/IS.png differ diff --git a/min/Geo/png/flags/16/IT.png b/min/Geo/png/flags/16/IT.png new file mode 100644 index 00000000..d6274554 Binary files /dev/null and b/min/Geo/png/flags/16/IT.png differ diff --git a/min/Geo/png/flags/16/JE.png b/min/Geo/png/flags/16/JE.png new file mode 100644 index 00000000..4f665692 Binary files /dev/null and b/min/Geo/png/flags/16/JE.png differ diff --git a/min/Geo/png/flags/16/JM.png b/min/Geo/png/flags/16/JM.png new file mode 100644 index 00000000..59c89671 Binary files /dev/null and b/min/Geo/png/flags/16/JM.png differ diff --git a/min/Geo/png/flags/16/JO.png b/min/Geo/png/flags/16/JO.png new file mode 100644 index 00000000..b173a1a8 Binary files /dev/null and b/min/Geo/png/flags/16/JO.png differ diff --git a/min/Geo/png/flags/16/JP.png b/min/Geo/png/flags/16/JP.png new file mode 100644 index 00000000..065d1b7f Binary files /dev/null and b/min/Geo/png/flags/16/JP.png differ diff --git a/min/Geo/png/flags/16/JTUM.png b/min/Geo/png/flags/16/JTUM.png new file mode 100644 index 00000000..98e71176 Binary files /dev/null and b/min/Geo/png/flags/16/JTUM.png differ diff --git a/min/Geo/png/flags/16/KAKH.png b/min/Geo/png/flags/16/KAKH.png new file mode 100644 index 00000000..7a6aa6ac Binary files /dev/null and b/min/Geo/png/flags/16/KAKH.png differ diff --git a/min/Geo/png/flags/16/KE.png b/min/Geo/png/flags/16/KE.png new file mode 100644 index 00000000..38671168 Binary files /dev/null and b/min/Geo/png/flags/16/KE.png differ diff --git a/min/Geo/png/flags/16/KG.png b/min/Geo/png/flags/16/KG.png new file mode 100644 index 00000000..021944c6 Binary files /dev/null and b/min/Geo/png/flags/16/KG.png differ diff --git a/min/Geo/png/flags/16/KH.png b/min/Geo/png/flags/16/KH.png new file mode 100644 index 00000000..e3dc5c35 Binary files /dev/null and b/min/Geo/png/flags/16/KH.png differ diff --git a/min/Geo/png/flags/16/KHKA.png b/min/Geo/png/flags/16/KHKA.png new file mode 100644 index 00000000..af62e535 Binary files /dev/null and b/min/Geo/png/flags/16/KHKA.png differ diff --git a/min/Geo/png/flags/16/KI.png b/min/Geo/png/flags/16/KI.png new file mode 100644 index 00000000..7294d820 Binary files /dev/null and b/min/Geo/png/flags/16/KI.png differ diff --git a/min/Geo/png/flags/16/KM-A.png b/min/Geo/png/flags/16/KM-A.png new file mode 100644 index 00000000..6c0b07f7 Binary files /dev/null and b/min/Geo/png/flags/16/KM-A.png differ diff --git a/min/Geo/png/flags/16/KM-M.png b/min/Geo/png/flags/16/KM-M.png new file mode 100644 index 00000000..e3941c37 Binary files /dev/null and b/min/Geo/png/flags/16/KM-M.png differ diff --git a/min/Geo/png/flags/16/KM.png b/min/Geo/png/flags/16/KM.png new file mode 100644 index 00000000..eba20bf0 Binary files /dev/null and b/min/Geo/png/flags/16/KM.png differ diff --git a/min/Geo/png/flags/16/KN.png b/min/Geo/png/flags/16/KN.png new file mode 100644 index 00000000..f174b015 Binary files /dev/null and b/min/Geo/png/flags/16/KN.png differ diff --git a/min/Geo/png/flags/16/KOJP.png b/min/Geo/png/flags/16/KOJP.png new file mode 100644 index 00000000..2a7dd885 Binary files /dev/null and b/min/Geo/png/flags/16/KOJP.png differ diff --git a/min/Geo/png/flags/16/KP.png b/min/Geo/png/flags/16/KP.png new file mode 100644 index 00000000..b724ccfa Binary files /dev/null and b/min/Geo/png/flags/16/KP.png differ diff --git a/min/Geo/png/flags/16/KR.png b/min/Geo/png/flags/16/KR.png new file mode 100644 index 00000000..aa6affd8 Binary files /dev/null and b/min/Geo/png/flags/16/KR.png differ diff --git a/min/Geo/png/flags/16/KW.png b/min/Geo/png/flags/16/KW.png new file mode 100644 index 00000000..e4d6d297 Binary files /dev/null and b/min/Geo/png/flags/16/KW.png differ diff --git a/min/Geo/png/flags/16/KY.png b/min/Geo/png/flags/16/KY.png new file mode 100644 index 00000000..52af6e0d Binary files /dev/null and b/min/Geo/png/flags/16/KY.png differ diff --git a/min/Geo/png/flags/16/KZ.png b/min/Geo/png/flags/16/KZ.png new file mode 100644 index 00000000..fef3fb90 Binary files /dev/null and b/min/Geo/png/flags/16/KZ.png differ diff --git a/min/Geo/png/flags/16/LA.png b/min/Geo/png/flags/16/LA.png new file mode 100644 index 00000000..1a52d08b Binary files /dev/null and b/min/Geo/png/flags/16/LA.png differ diff --git a/min/Geo/png/flags/16/LB.png b/min/Geo/png/flags/16/LB.png new file mode 100644 index 00000000..3129d9bf Binary files /dev/null and b/min/Geo/png/flags/16/LB.png differ diff --git a/min/Geo/png/flags/16/LC.png b/min/Geo/png/flags/16/LC.png new file mode 100644 index 00000000..384fe517 Binary files /dev/null and b/min/Geo/png/flags/16/LC.png differ diff --git a/min/Geo/png/flags/16/LI.png b/min/Geo/png/flags/16/LI.png new file mode 100644 index 00000000..86275607 Binary files /dev/null and b/min/Geo/png/flags/16/LI.png differ diff --git a/min/Geo/png/flags/16/LK.png b/min/Geo/png/flags/16/LK.png new file mode 100644 index 00000000..6b0173f9 Binary files /dev/null and b/min/Geo/png/flags/16/LK.png differ diff --git a/min/Geo/png/flags/16/LKLK.png b/min/Geo/png/flags/16/LKLK.png new file mode 100644 index 00000000..6b0173f9 Binary files /dev/null and b/min/Geo/png/flags/16/LKLK.png differ diff --git a/min/Geo/png/flags/16/LR.png b/min/Geo/png/flags/16/LR.png new file mode 100644 index 00000000..37f116bb Binary files /dev/null and b/min/Geo/png/flags/16/LR.png differ diff --git a/min/Geo/png/flags/16/LS.png b/min/Geo/png/flags/16/LS.png new file mode 100644 index 00000000..7f35e788 Binary files /dev/null and b/min/Geo/png/flags/16/LS.png differ diff --git a/min/Geo/png/flags/16/LT.png b/min/Geo/png/flags/16/LT.png new file mode 100644 index 00000000..8e5fd7d8 Binary files /dev/null and b/min/Geo/png/flags/16/LT.png differ diff --git a/min/Geo/png/flags/16/LU.png b/min/Geo/png/flags/16/LU.png new file mode 100644 index 00000000..54c57ff8 Binary files /dev/null and b/min/Geo/png/flags/16/LU.png differ diff --git a/min/Geo/png/flags/16/LV.png b/min/Geo/png/flags/16/LV.png new file mode 100644 index 00000000..4cab81ea Binary files /dev/null and b/min/Geo/png/flags/16/LV.png differ diff --git a/min/Geo/png/flags/16/LY.png b/min/Geo/png/flags/16/LY.png new file mode 100644 index 00000000..4cde74ae Binary files /dev/null and b/min/Geo/png/flags/16/LY.png differ diff --git a/min/Geo/png/flags/16/MA.png b/min/Geo/png/flags/16/MA.png new file mode 100644 index 00000000..c1d2cde9 Binary files /dev/null and b/min/Geo/png/flags/16/MA.png differ diff --git a/min/Geo/png/flags/16/MC.png b/min/Geo/png/flags/16/MC.png new file mode 100644 index 00000000..3e6f75b5 Binary files /dev/null and b/min/Geo/png/flags/16/MC.png differ diff --git a/min/Geo/png/flags/16/MD-SN.png b/min/Geo/png/flags/16/MD-SN.png new file mode 100644 index 00000000..0a9bc9c7 Binary files /dev/null and b/min/Geo/png/flags/16/MD-SN.png differ diff --git a/min/Geo/png/flags/16/MD.png b/min/Geo/png/flags/16/MD.png new file mode 100644 index 00000000..b68e4318 Binary files /dev/null and b/min/Geo/png/flags/16/MD.png differ diff --git a/min/Geo/png/flags/16/ME.png b/min/Geo/png/flags/16/ME.png new file mode 100644 index 00000000..25fb5bdc Binary files /dev/null and b/min/Geo/png/flags/16/ME.png differ diff --git a/min/Geo/png/flags/16/MF.png b/min/Geo/png/flags/16/MF.png new file mode 100644 index 00000000..98df45a1 Binary files /dev/null and b/min/Geo/png/flags/16/MF.png differ diff --git a/min/Geo/png/flags/16/MG.png b/min/Geo/png/flags/16/MG.png new file mode 100644 index 00000000..6576026a Binary files /dev/null and b/min/Geo/png/flags/16/MG.png differ diff --git a/min/Geo/png/flags/16/MH.png b/min/Geo/png/flags/16/MH.png new file mode 100644 index 00000000..ebdb5a15 Binary files /dev/null and b/min/Geo/png/flags/16/MH.png differ diff --git a/min/Geo/png/flags/16/MIUM.png b/min/Geo/png/flags/16/MIUM.png new file mode 100644 index 00000000..17b7c926 Binary files /dev/null and b/min/Geo/png/flags/16/MIUM.png differ diff --git a/min/Geo/png/flags/16/MK.png b/min/Geo/png/flags/16/MK.png new file mode 100644 index 00000000..227694f9 Binary files /dev/null and b/min/Geo/png/flags/16/MK.png differ diff --git a/min/Geo/png/flags/16/ML-AZ.png b/min/Geo/png/flags/16/ML-AZ.png new file mode 100644 index 00000000..4aa08135 Binary files /dev/null and b/min/Geo/png/flags/16/ML-AZ.png differ diff --git a/min/Geo/png/flags/16/ML.png b/min/Geo/png/flags/16/ML.png new file mode 100644 index 00000000..f6609fe6 Binary files /dev/null and b/min/Geo/png/flags/16/ML.png differ diff --git a/min/Geo/png/flags/16/MM.png b/min/Geo/png/flags/16/MM.png new file mode 100644 index 00000000..dbec08a6 Binary files /dev/null and b/min/Geo/png/flags/16/MM.png differ diff --git a/min/Geo/png/flags/16/MN.png b/min/Geo/png/flags/16/MN.png new file mode 100644 index 00000000..e33794d3 Binary files /dev/null and b/min/Geo/png/flags/16/MN.png differ diff --git a/min/Geo/png/flags/16/MO.png b/min/Geo/png/flags/16/MO.png new file mode 100644 index 00000000..960d7837 Binary files /dev/null and b/min/Geo/png/flags/16/MO.png differ diff --git a/min/Geo/png/flags/16/MP.png b/min/Geo/png/flags/16/MP.png new file mode 100644 index 00000000..b51d02d6 Binary files /dev/null and b/min/Geo/png/flags/16/MP.png differ diff --git a/min/Geo/png/flags/16/MQ.png b/min/Geo/png/flags/16/MQ.png new file mode 100644 index 00000000..e65a3f12 Binary files /dev/null and b/min/Geo/png/flags/16/MQ.png differ diff --git a/min/Geo/png/flags/16/MR.png b/min/Geo/png/flags/16/MR.png new file mode 100644 index 00000000..ecb422e7 Binary files /dev/null and b/min/Geo/png/flags/16/MR.png differ diff --git a/min/Geo/png/flags/16/MS.png b/min/Geo/png/flags/16/MS.png new file mode 100644 index 00000000..034800bd Binary files /dev/null and b/min/Geo/png/flags/16/MS.png differ diff --git a/min/Geo/png/flags/16/MT.png b/min/Geo/png/flags/16/MT.png new file mode 100644 index 00000000..d550d273 Binary files /dev/null and b/min/Geo/png/flags/16/MT.png differ diff --git a/min/Geo/png/flags/16/MU.png b/min/Geo/png/flags/16/MU.png new file mode 100644 index 00000000..6c0c8f3f Binary files /dev/null and b/min/Geo/png/flags/16/MU.png differ diff --git a/min/Geo/png/flags/16/MV.png b/min/Geo/png/flags/16/MV.png new file mode 100644 index 00000000..99200b28 Binary files /dev/null and b/min/Geo/png/flags/16/MV.png differ diff --git a/min/Geo/png/flags/16/MW.png b/min/Geo/png/flags/16/MW.png new file mode 100644 index 00000000..69cfafe4 Binary files /dev/null and b/min/Geo/png/flags/16/MW.png differ diff --git a/min/Geo/png/flags/16/MX.png b/min/Geo/png/flags/16/MX.png new file mode 100644 index 00000000..92e0b618 Binary files /dev/null and b/min/Geo/png/flags/16/MX.png differ diff --git a/min/Geo/png/flags/16/MY.png b/min/Geo/png/flags/16/MY.png new file mode 100644 index 00000000..34a98679 Binary files /dev/null and b/min/Geo/png/flags/16/MY.png differ diff --git a/min/Geo/png/flags/16/MZ.png b/min/Geo/png/flags/16/MZ.png new file mode 100644 index 00000000..5361f0b5 Binary files /dev/null and b/min/Geo/png/flags/16/MZ.png differ diff --git a/min/Geo/png/flags/16/NA.png b/min/Geo/png/flags/16/NA.png new file mode 100644 index 00000000..c60e6521 Binary files /dev/null and b/min/Geo/png/flags/16/NA.png differ diff --git a/min/Geo/png/flags/16/NC.png b/min/Geo/png/flags/16/NC.png new file mode 100644 index 00000000..d9a46ff0 Binary files /dev/null and b/min/Geo/png/flags/16/NC.png differ diff --git a/min/Geo/png/flags/16/NE.png b/min/Geo/png/flags/16/NE.png new file mode 100644 index 00000000..6ab99beb Binary files /dev/null and b/min/Geo/png/flags/16/NE.png differ diff --git a/min/Geo/png/flags/16/NF.png b/min/Geo/png/flags/16/NF.png new file mode 100644 index 00000000..93389448 Binary files /dev/null and b/min/Geo/png/flags/16/NF.png differ diff --git a/min/Geo/png/flags/16/NG-BI.png b/min/Geo/png/flags/16/NG-BI.png new file mode 100644 index 00000000..ad014ef9 Binary files /dev/null and b/min/Geo/png/flags/16/NG-BI.png differ diff --git a/min/Geo/png/flags/16/NG.png b/min/Geo/png/flags/16/NG.png new file mode 100644 index 00000000..d1329630 Binary files /dev/null and b/min/Geo/png/flags/16/NG.png differ diff --git a/min/Geo/png/flags/16/NHVU-TF.png b/min/Geo/png/flags/16/NHVU-TF.png new file mode 100644 index 00000000..cde6da26 Binary files /dev/null and b/min/Geo/png/flags/16/NHVU-TF.png differ diff --git a/min/Geo/png/flags/16/NHVU-TN.png b/min/Geo/png/flags/16/NHVU-TN.png new file mode 100644 index 00000000..b477b37c Binary files /dev/null and b/min/Geo/png/flags/16/NHVU-TN.png differ diff --git a/min/Geo/png/flags/16/NHVU-VE.png b/min/Geo/png/flags/16/NHVU-VE.png new file mode 100644 index 00000000..3d4a0cf0 Binary files /dev/null and b/min/Geo/png/flags/16/NHVU-VE.png differ diff --git a/min/Geo/png/flags/16/NHVU.png b/min/Geo/png/flags/16/NHVU.png new file mode 100644 index 00000000..91ca5641 Binary files /dev/null and b/min/Geo/png/flags/16/NHVU.png differ diff --git a/min/Geo/png/flags/16/NI.png b/min/Geo/png/flags/16/NI.png new file mode 100644 index 00000000..fa4e1619 Binary files /dev/null and b/min/Geo/png/flags/16/NI.png differ diff --git a/min/Geo/png/flags/16/NL.png b/min/Geo/png/flags/16/NL.png new file mode 100644 index 00000000..64fba947 Binary files /dev/null and b/min/Geo/png/flags/16/NL.png differ diff --git a/min/Geo/png/flags/16/NO-PI.png b/min/Geo/png/flags/16/NO-PI.png new file mode 100644 index 00000000..88b9b5a1 Binary files /dev/null and b/min/Geo/png/flags/16/NO-PI.png differ diff --git a/min/Geo/png/flags/16/NO.png b/min/Geo/png/flags/16/NO.png new file mode 100644 index 00000000..88b9b5a1 Binary files /dev/null and b/min/Geo/png/flags/16/NO.png differ diff --git a/min/Geo/png/flags/16/NP.png b/min/Geo/png/flags/16/NP.png new file mode 100644 index 00000000..4700a272 Binary files /dev/null and b/min/Geo/png/flags/16/NP.png differ diff --git a/min/Geo/png/flags/16/NQAQ.png b/min/Geo/png/flags/16/NQAQ.png new file mode 100644 index 00000000..88b9b5a1 Binary files /dev/null and b/min/Geo/png/flags/16/NQAQ.png differ diff --git a/min/Geo/png/flags/16/NR.png b/min/Geo/png/flags/16/NR.png new file mode 100644 index 00000000..03328a9d Binary files /dev/null and b/min/Geo/png/flags/16/NR.png differ diff --git a/min/Geo/png/flags/16/NTHH.png b/min/Geo/png/flags/16/NTHH.png new file mode 100644 index 00000000..6f854e26 Binary files /dev/null and b/min/Geo/png/flags/16/NTHH.png differ diff --git a/min/Geo/png/flags/16/NU.png b/min/Geo/png/flags/16/NU.png new file mode 100644 index 00000000..6ccf0b97 Binary files /dev/null and b/min/Geo/png/flags/16/NU.png differ diff --git a/min/Geo/png/flags/16/NZ-AQ.png b/min/Geo/png/flags/16/NZ-AQ.png new file mode 100644 index 00000000..fa927018 Binary files /dev/null and b/min/Geo/png/flags/16/NZ-AQ.png differ diff --git a/min/Geo/png/flags/16/NZ.png b/min/Geo/png/flags/16/NZ.png new file mode 100644 index 00000000..fa927018 Binary files /dev/null and b/min/Geo/png/flags/16/NZ.png differ diff --git a/min/Geo/png/flags/16/OM.png b/min/Geo/png/flags/16/OM.png new file mode 100644 index 00000000..6971bc9c Binary files /dev/null and b/min/Geo/png/flags/16/OM.png differ diff --git a/min/Geo/png/flags/16/PA.png b/min/Geo/png/flags/16/PA.png new file mode 100644 index 00000000..df2a1d0e Binary files /dev/null and b/min/Geo/png/flags/16/PA.png differ diff --git a/min/Geo/png/flags/16/PCHH.png b/min/Geo/png/flags/16/PCHH.png new file mode 100644 index 00000000..9d979f7f Binary files /dev/null and b/min/Geo/png/flags/16/PCHH.png differ diff --git a/min/Geo/png/flags/16/PE.png b/min/Geo/png/flags/16/PE.png new file mode 100644 index 00000000..25c4e6e3 Binary files /dev/null and b/min/Geo/png/flags/16/PE.png differ diff --git a/min/Geo/png/flags/16/PF.png b/min/Geo/png/flags/16/PF.png new file mode 100644 index 00000000..f98eac1f Binary files /dev/null and b/min/Geo/png/flags/16/PF.png differ diff --git a/min/Geo/png/flags/16/PG-NSA.png b/min/Geo/png/flags/16/PG-NSA.png new file mode 100644 index 00000000..789d3bae Binary files /dev/null and b/min/Geo/png/flags/16/PG-NSA.png differ diff --git a/min/Geo/png/flags/16/PG.png b/min/Geo/png/flags/16/PG.png new file mode 100644 index 00000000..f88ad0a6 Binary files /dev/null and b/min/Geo/png/flags/16/PG.png differ diff --git a/min/Geo/png/flags/16/PH.png b/min/Geo/png/flags/16/PH.png new file mode 100644 index 00000000..f6e6721a Binary files /dev/null and b/min/Geo/png/flags/16/PH.png differ diff --git a/min/Geo/png/flags/16/PK-JK.png b/min/Geo/png/flags/16/PK-JK.png new file mode 100644 index 00000000..eba77ca8 Binary files /dev/null and b/min/Geo/png/flags/16/PK-JK.png differ diff --git a/min/Geo/png/flags/16/PK-NA.png b/min/Geo/png/flags/16/PK-NA.png new file mode 100644 index 00000000..78d169ef Binary files /dev/null and b/min/Geo/png/flags/16/PK-NA.png differ diff --git a/min/Geo/png/flags/16/PK.png b/min/Geo/png/flags/16/PK.png new file mode 100644 index 00000000..96482f02 Binary files /dev/null and b/min/Geo/png/flags/16/PK.png differ diff --git a/min/Geo/png/flags/16/PL.png b/min/Geo/png/flags/16/PL.png new file mode 100644 index 00000000..fc539d95 Binary files /dev/null and b/min/Geo/png/flags/16/PL.png differ diff --git a/min/Geo/png/flags/16/PM.png b/min/Geo/png/flags/16/PM.png new file mode 100644 index 00000000..6ecf501f Binary files /dev/null and b/min/Geo/png/flags/16/PM.png differ diff --git a/min/Geo/png/flags/16/PN.png b/min/Geo/png/flags/16/PN.png new file mode 100644 index 00000000..9e51fbdb Binary files /dev/null and b/min/Geo/png/flags/16/PN.png differ diff --git a/min/Geo/png/flags/16/PR.png b/min/Geo/png/flags/16/PR.png new file mode 100644 index 00000000..5e1d2e88 Binary files /dev/null and b/min/Geo/png/flags/16/PR.png differ diff --git a/min/Geo/png/flags/16/PS.png b/min/Geo/png/flags/16/PS.png new file mode 100644 index 00000000..6c2f9bb5 Binary files /dev/null and b/min/Geo/png/flags/16/PS.png differ diff --git a/min/Geo/png/flags/16/PT.png b/min/Geo/png/flags/16/PT.png new file mode 100644 index 00000000..9d1d01df Binary files /dev/null and b/min/Geo/png/flags/16/PT.png differ diff --git a/min/Geo/png/flags/16/PUUM.png b/min/Geo/png/flags/16/PUUM.png new file mode 100644 index 00000000..c5cf5178 Binary files /dev/null and b/min/Geo/png/flags/16/PUUM.png differ diff --git a/min/Geo/png/flags/16/PW.png b/min/Geo/png/flags/16/PW.png new file mode 100644 index 00000000..e82586c4 Binary files /dev/null and b/min/Geo/png/flags/16/PW.png differ diff --git a/min/Geo/png/flags/16/PY.png b/min/Geo/png/flags/16/PY.png new file mode 100644 index 00000000..ac104fae Binary files /dev/null and b/min/Geo/png/flags/16/PY.png differ diff --git a/min/Geo/png/flags/16/PZPA.png b/min/Geo/png/flags/16/PZPA.png new file mode 100644 index 00000000..41405324 Binary files /dev/null and b/min/Geo/png/flags/16/PZPA.png differ diff --git a/min/Geo/png/flags/16/QA.png b/min/Geo/png/flags/16/QA.png new file mode 100644 index 00000000..e1183e4d Binary files /dev/null and b/min/Geo/png/flags/16/QA.png differ diff --git a/min/Geo/png/flags/16/RE.png b/min/Geo/png/flags/16/RE.png new file mode 100644 index 00000000..452f458d Binary files /dev/null and b/min/Geo/png/flags/16/RE.png differ diff --git a/min/Geo/png/flags/16/RHZW-RH.png b/min/Geo/png/flags/16/RHZW-RH.png new file mode 100644 index 00000000..7c2ae175 Binary files /dev/null and b/min/Geo/png/flags/16/RHZW-RH.png differ diff --git a/min/Geo/png/flags/16/RHZW-ZR.png b/min/Geo/png/flags/16/RHZW-ZR.png new file mode 100644 index 00000000..877490f9 Binary files /dev/null and b/min/Geo/png/flags/16/RHZW-ZR.png differ diff --git a/min/Geo/png/flags/16/RHZW.png b/min/Geo/png/flags/16/RHZW.png new file mode 100644 index 00000000..30fe5d7f Binary files /dev/null and b/min/Geo/png/flags/16/RHZW.png differ diff --git a/min/Geo/png/flags/16/RO.png b/min/Geo/png/flags/16/RO.png new file mode 100644 index 00000000..7f354465 Binary files /dev/null and b/min/Geo/png/flags/16/RO.png differ diff --git a/min/Geo/png/flags/16/RS.png b/min/Geo/png/flags/16/RS.png new file mode 100644 index 00000000..c3ce05d5 Binary files /dev/null and b/min/Geo/png/flags/16/RS.png differ diff --git a/min/Geo/png/flags/16/RU-CE.png b/min/Geo/png/flags/16/RU-CE.png new file mode 100644 index 00000000..21b5723a Binary files /dev/null and b/min/Geo/png/flags/16/RU-CE.png differ diff --git a/min/Geo/png/flags/16/RU.png b/min/Geo/png/flags/16/RU.png new file mode 100644 index 00000000..ce1cdac3 Binary files /dev/null and b/min/Geo/png/flags/16/RU.png differ diff --git a/min/Geo/png/flags/16/RW.png b/min/Geo/png/flags/16/RW.png new file mode 100644 index 00000000..ca9c458f Binary files /dev/null and b/min/Geo/png/flags/16/RW.png differ diff --git a/min/Geo/png/flags/16/SA.png b/min/Geo/png/flags/16/SA.png new file mode 100644 index 00000000..f53299ce Binary files /dev/null and b/min/Geo/png/flags/16/SA.png differ diff --git a/min/Geo/png/flags/16/SB.png b/min/Geo/png/flags/16/SB.png new file mode 100644 index 00000000..5ebe7374 Binary files /dev/null and b/min/Geo/png/flags/16/SB.png differ diff --git a/min/Geo/png/flags/16/SC.png b/min/Geo/png/flags/16/SC.png new file mode 100644 index 00000000..586f96b6 Binary files /dev/null and b/min/Geo/png/flags/16/SC.png differ diff --git a/min/Geo/png/flags/16/SD.png b/min/Geo/png/flags/16/SD.png new file mode 100644 index 00000000..8b428a1d Binary files /dev/null and b/min/Geo/png/flags/16/SD.png differ diff --git a/min/Geo/png/flags/16/SE.png b/min/Geo/png/flags/16/SE.png new file mode 100644 index 00000000..ec8f3ffe Binary files /dev/null and b/min/Geo/png/flags/16/SE.png differ diff --git a/min/Geo/png/flags/16/SG.png b/min/Geo/png/flags/16/SG.png new file mode 100644 index 00000000..4a1cc8e2 Binary files /dev/null and b/min/Geo/png/flags/16/SG.png differ diff --git a/min/Geo/png/flags/16/SH.png b/min/Geo/png/flags/16/SH.png new file mode 100644 index 00000000..8e4260f8 Binary files /dev/null and b/min/Geo/png/flags/16/SH.png differ diff --git a/min/Geo/png/flags/16/SI.png b/min/Geo/png/flags/16/SI.png new file mode 100644 index 00000000..93599d83 Binary files /dev/null and b/min/Geo/png/flags/16/SI.png differ diff --git a/min/Geo/png/flags/16/SITH.png b/min/Geo/png/flags/16/SITH.png new file mode 100644 index 00000000..d37338e7 Binary files /dev/null and b/min/Geo/png/flags/16/SITH.png differ diff --git a/min/Geo/png/flags/16/SJ.png b/min/Geo/png/flags/16/SJ.png new file mode 100644 index 00000000..88b9b5a1 Binary files /dev/null and b/min/Geo/png/flags/16/SJ.png differ diff --git a/min/Geo/png/flags/16/SK.png b/min/Geo/png/flags/16/SK.png new file mode 100644 index 00000000..6ce3d3ea Binary files /dev/null and b/min/Geo/png/flags/16/SK.png differ diff --git a/min/Geo/png/flags/16/SKIN.png b/min/Geo/png/flags/16/SKIN.png new file mode 100644 index 00000000..c977060b Binary files /dev/null and b/min/Geo/png/flags/16/SKIN.png differ diff --git a/min/Geo/png/flags/16/SL.png b/min/Geo/png/flags/16/SL.png new file mode 100644 index 00000000..a9b46da4 Binary files /dev/null and b/min/Geo/png/flags/16/SL.png differ diff --git a/min/Geo/png/flags/16/SM.png b/min/Geo/png/flags/16/SM.png new file mode 100644 index 00000000..bd989a12 Binary files /dev/null and b/min/Geo/png/flags/16/SM.png differ diff --git a/min/Geo/png/flags/16/SN.png b/min/Geo/png/flags/16/SN.png new file mode 100644 index 00000000..b5e1ae79 Binary files /dev/null and b/min/Geo/png/flags/16/SN.png differ diff --git a/min/Geo/png/flags/16/SO-SO.png b/min/Geo/png/flags/16/SO-SO.png new file mode 100644 index 00000000..15809cd2 Binary files /dev/null and b/min/Geo/png/flags/16/SO-SO.png differ diff --git a/min/Geo/png/flags/16/SO.png b/min/Geo/png/flags/16/SO.png new file mode 100644 index 00000000..4115bd42 Binary files /dev/null and b/min/Geo/png/flags/16/SO.png differ diff --git a/min/Geo/png/flags/16/SR.png b/min/Geo/png/flags/16/SR.png new file mode 100644 index 00000000..799599d1 Binary files /dev/null and b/min/Geo/png/flags/16/SR.png differ diff --git a/min/Geo/png/flags/16/SS.png b/min/Geo/png/flags/16/SS.png new file mode 100644 index 00000000..4c8ba5de Binary files /dev/null and b/min/Geo/png/flags/16/SS.png differ diff --git a/min/Geo/png/flags/16/ST.png b/min/Geo/png/flags/16/ST.png new file mode 100644 index 00000000..9da413c3 Binary files /dev/null and b/min/Geo/png/flags/16/ST.png differ diff --git a/min/Geo/png/flags/16/SUHH.png b/min/Geo/png/flags/16/SUHH.png new file mode 100644 index 00000000..e5443226 Binary files /dev/null and b/min/Geo/png/flags/16/SUHH.png differ diff --git a/min/Geo/png/flags/16/SV.png b/min/Geo/png/flags/16/SV.png new file mode 100644 index 00000000..da1ac252 Binary files /dev/null and b/min/Geo/png/flags/16/SV.png differ diff --git a/min/Geo/png/flags/16/SX.png b/min/Geo/png/flags/16/SX.png new file mode 100644 index 00000000..2b7f96f8 Binary files /dev/null and b/min/Geo/png/flags/16/SX.png differ diff --git a/min/Geo/png/flags/16/SY.png b/min/Geo/png/flags/16/SY.png new file mode 100644 index 00000000..78a4bde4 Binary files /dev/null and b/min/Geo/png/flags/16/SY.png differ diff --git a/min/Geo/png/flags/16/SZ.png b/min/Geo/png/flags/16/SZ.png new file mode 100644 index 00000000..d86c3c9e Binary files /dev/null and b/min/Geo/png/flags/16/SZ.png differ diff --git a/min/Geo/png/flags/16/TA.png b/min/Geo/png/flags/16/TA.png new file mode 100644 index 00000000..5f74662f Binary files /dev/null and b/min/Geo/png/flags/16/TA.png differ diff --git a/min/Geo/png/flags/16/TC.png b/min/Geo/png/flags/16/TC.png new file mode 100644 index 00000000..4d9453c8 Binary files /dev/null and b/min/Geo/png/flags/16/TC.png differ diff --git a/min/Geo/png/flags/16/TD.png b/min/Geo/png/flags/16/TD.png new file mode 100644 index 00000000..9c61a050 Binary files /dev/null and b/min/Geo/png/flags/16/TD.png differ diff --git a/min/Geo/png/flags/16/TF.png b/min/Geo/png/flags/16/TF.png new file mode 100644 index 00000000..1cf52b3f Binary files /dev/null and b/min/Geo/png/flags/16/TF.png differ diff --git a/min/Geo/png/flags/16/TG.png b/min/Geo/png/flags/16/TG.png new file mode 100644 index 00000000..5c59a96d Binary files /dev/null and b/min/Geo/png/flags/16/TG.png differ diff --git a/min/Geo/png/flags/16/TH.png b/min/Geo/png/flags/16/TH.png new file mode 100644 index 00000000..10b8c575 Binary files /dev/null and b/min/Geo/png/flags/16/TH.png differ diff --git a/min/Geo/png/flags/16/TJ.png b/min/Geo/png/flags/16/TJ.png new file mode 100644 index 00000000..f8b816da Binary files /dev/null and b/min/Geo/png/flags/16/TJ.png differ diff --git a/min/Geo/png/flags/16/TK.png b/min/Geo/png/flags/16/TK.png new file mode 100644 index 00000000..123dcb3e Binary files /dev/null and b/min/Geo/png/flags/16/TK.png differ diff --git a/min/Geo/png/flags/16/TL.png b/min/Geo/png/flags/16/TL.png new file mode 100644 index 00000000..75dde93b Binary files /dev/null and b/min/Geo/png/flags/16/TL.png differ diff --git a/min/Geo/png/flags/16/TM.png b/min/Geo/png/flags/16/TM.png new file mode 100644 index 00000000..009619b3 Binary files /dev/null and b/min/Geo/png/flags/16/TM.png differ diff --git a/min/Geo/png/flags/16/TN.png b/min/Geo/png/flags/16/TN.png new file mode 100644 index 00000000..262e35aa Binary files /dev/null and b/min/Geo/png/flags/16/TN.png differ diff --git a/min/Geo/png/flags/16/TO.png b/min/Geo/png/flags/16/TO.png new file mode 100644 index 00000000..d1d38b85 Binary files /dev/null and b/min/Geo/png/flags/16/TO.png differ diff --git a/min/Geo/png/flags/16/TPTL.png b/min/Geo/png/flags/16/TPTL.png new file mode 100644 index 00000000..75dde93b Binary files /dev/null and b/min/Geo/png/flags/16/TPTL.png differ diff --git a/min/Geo/png/flags/16/TR.png b/min/Geo/png/flags/16/TR.png new file mode 100644 index 00000000..8f21dc37 Binary files /dev/null and b/min/Geo/png/flags/16/TR.png differ diff --git a/min/Geo/png/flags/16/TT.png b/min/Geo/png/flags/16/TT.png new file mode 100644 index 00000000..d8e9018d Binary files /dev/null and b/min/Geo/png/flags/16/TT.png differ diff --git a/min/Geo/png/flags/16/TV.png b/min/Geo/png/flags/16/TV.png new file mode 100644 index 00000000..1124be5a Binary files /dev/null and b/min/Geo/png/flags/16/TV.png differ diff --git a/min/Geo/png/flags/16/TW.png b/min/Geo/png/flags/16/TW.png new file mode 100644 index 00000000..6e470274 Binary files /dev/null and b/min/Geo/png/flags/16/TW.png differ diff --git a/min/Geo/png/flags/16/TZ.png b/min/Geo/png/flags/16/TZ.png new file mode 100644 index 00000000..bc9283f8 Binary files /dev/null and b/min/Geo/png/flags/16/TZ.png differ diff --git a/min/Geo/png/flags/16/UA.png b/min/Geo/png/flags/16/UA.png new file mode 100644 index 00000000..4d663497 Binary files /dev/null and b/min/Geo/png/flags/16/UA.png differ diff --git a/min/Geo/png/flags/16/UAUA.png b/min/Geo/png/flags/16/UAUA.png new file mode 100644 index 00000000..fb361900 Binary files /dev/null and b/min/Geo/png/flags/16/UAUA.png differ diff --git a/min/Geo/png/flags/16/UG-RW.png b/min/Geo/png/flags/16/UG-RW.png new file mode 100644 index 00000000..f553a45e Binary files /dev/null and b/min/Geo/png/flags/16/UG-RW.png differ diff --git a/min/Geo/png/flags/16/UG.png b/min/Geo/png/flags/16/UG.png new file mode 100644 index 00000000..19ef3217 Binary files /dev/null and b/min/Geo/png/flags/16/UG.png differ diff --git a/min/Geo/png/flags/16/UK.png b/min/Geo/png/flags/16/UK.png new file mode 100644 index 00000000..3b0a7a0f Binary files /dev/null and b/min/Geo/png/flags/16/UK.png differ diff --git a/min/Geo/png/flags/16/UM.png b/min/Geo/png/flags/16/UM.png new file mode 100644 index 00000000..c5cf5178 Binary files /dev/null and b/min/Geo/png/flags/16/UM.png differ diff --git a/min/Geo/png/flags/16/US.png b/min/Geo/png/flags/16/US.png new file mode 100644 index 00000000..c5cf5178 Binary files /dev/null and b/min/Geo/png/flags/16/US.png differ diff --git a/min/Geo/png/flags/16/UY.png b/min/Geo/png/flags/16/UY.png new file mode 100644 index 00000000..c8c7c66a Binary files /dev/null and b/min/Geo/png/flags/16/UY.png differ diff --git a/min/Geo/png/flags/16/UZ.png b/min/Geo/png/flags/16/UZ.png new file mode 100644 index 00000000..f6cec613 Binary files /dev/null and b/min/Geo/png/flags/16/UZ.png differ diff --git a/min/Geo/png/flags/16/VA.png b/min/Geo/png/flags/16/VA.png new file mode 100644 index 00000000..316bfeb8 Binary files /dev/null and b/min/Geo/png/flags/16/VA.png differ diff --git a/min/Geo/png/flags/16/VC.png b/min/Geo/png/flags/16/VC.png new file mode 100644 index 00000000..3f61a82f Binary files /dev/null and b/min/Geo/png/flags/16/VC.png differ diff --git a/min/Geo/png/flags/16/VDVN.png b/min/Geo/png/flags/16/VDVN.png new file mode 100644 index 00000000..bf51fc78 Binary files /dev/null and b/min/Geo/png/flags/16/VDVN.png differ diff --git a/min/Geo/png/flags/16/VE.png b/min/Geo/png/flags/16/VE.png new file mode 100644 index 00000000..89d0d496 Binary files /dev/null and b/min/Geo/png/flags/16/VE.png differ diff --git a/min/Geo/png/flags/16/VG.png b/min/Geo/png/flags/16/VG.png new file mode 100644 index 00000000..ffd057eb Binary files /dev/null and b/min/Geo/png/flags/16/VG.png differ diff --git a/min/Geo/png/flags/16/VI.png b/min/Geo/png/flags/16/VI.png new file mode 100644 index 00000000..ec5b7432 Binary files /dev/null and b/min/Geo/png/flags/16/VI.png differ diff --git a/min/Geo/png/flags/16/VN.png b/min/Geo/png/flags/16/VN.png new file mode 100644 index 00000000..89931608 Binary files /dev/null and b/min/Geo/png/flags/16/VN.png differ diff --git a/min/Geo/png/flags/16/VNVN.png b/min/Geo/png/flags/16/VNVN.png new file mode 100644 index 00000000..df1072e1 Binary files /dev/null and b/min/Geo/png/flags/16/VNVN.png differ diff --git a/min/Geo/png/flags/16/VU.png b/min/Geo/png/flags/16/VU.png new file mode 100644 index 00000000..b14df92f Binary files /dev/null and b/min/Geo/png/flags/16/VU.png differ diff --git a/min/Geo/png/flags/16/WF.png b/min/Geo/png/flags/16/WF.png new file mode 100644 index 00000000..6ae4688a Binary files /dev/null and b/min/Geo/png/flags/16/WF.png differ diff --git a/min/Geo/png/flags/16/WKUM.png b/min/Geo/png/flags/16/WKUM.png new file mode 100644 index 00000000..f4219e64 Binary files /dev/null and b/min/Geo/png/flags/16/WKUM.png differ diff --git a/min/Geo/png/flags/16/WS.png b/min/Geo/png/flags/16/WS.png new file mode 100644 index 00000000..33996f2f Binary files /dev/null and b/min/Geo/png/flags/16/WS.png differ diff --git a/min/Geo/png/flags/16/XK.png b/min/Geo/png/flags/16/XK.png new file mode 100644 index 00000000..00c6cb60 Binary files /dev/null and b/min/Geo/png/flags/16/XK.png differ diff --git a/min/Geo/png/flags/16/YDYE.png b/min/Geo/png/flags/16/YDYE.png new file mode 100644 index 00000000..c84275c5 Binary files /dev/null and b/min/Geo/png/flags/16/YDYE.png differ diff --git a/min/Geo/png/flags/16/YE.png b/min/Geo/png/flags/16/YE.png new file mode 100644 index 00000000..3cda834b Binary files /dev/null and b/min/Geo/png/flags/16/YE.png differ diff --git a/min/Geo/png/flags/16/YEYE.png b/min/Geo/png/flags/16/YEYE.png new file mode 100644 index 00000000..5d497428 Binary files /dev/null and b/min/Geo/png/flags/16/YEYE.png differ diff --git a/min/Geo/png/flags/16/YT.png b/min/Geo/png/flags/16/YT.png new file mode 100644 index 00000000..aa496d50 Binary files /dev/null and b/min/Geo/png/flags/16/YT.png differ diff --git a/min/Geo/png/flags/16/YUCS.png b/min/Geo/png/flags/16/YUCS.png new file mode 100644 index 00000000..f497592b Binary files /dev/null and b/min/Geo/png/flags/16/YUCS.png differ diff --git a/min/Geo/png/flags/16/ZA-BO.png b/min/Geo/png/flags/16/ZA-BO.png new file mode 100644 index 00000000..10b7161c Binary files /dev/null and b/min/Geo/png/flags/16/ZA-BO.png differ diff --git a/min/Geo/png/flags/16/ZA-CI.png b/min/Geo/png/flags/16/ZA-CI.png new file mode 100644 index 00000000..41906a45 Binary files /dev/null and b/min/Geo/png/flags/16/ZA-CI.png differ diff --git a/min/Geo/png/flags/16/ZA-TR.png b/min/Geo/png/flags/16/ZA-TR.png new file mode 100644 index 00000000..2b37ea89 Binary files /dev/null and b/min/Geo/png/flags/16/ZA-TR.png differ diff --git a/min/Geo/png/flags/16/ZA-VE.png b/min/Geo/png/flags/16/ZA-VE.png new file mode 100644 index 00000000..bd493d97 Binary files /dev/null and b/min/Geo/png/flags/16/ZA-VE.png differ diff --git a/min/Geo/png/flags/16/ZA.png b/min/Geo/png/flags/16/ZA.png new file mode 100644 index 00000000..afa3b77e Binary files /dev/null and b/min/Geo/png/flags/16/ZA.png differ diff --git a/min/Geo/png/flags/16/ZM.png b/min/Geo/png/flags/16/ZM.png new file mode 100644 index 00000000..e9e2e84d Binary files /dev/null and b/min/Geo/png/flags/16/ZM.png differ diff --git a/min/Geo/png/flags/16/ZRCD.png b/min/Geo/png/flags/16/ZRCD.png new file mode 100644 index 00000000..16e263d6 Binary files /dev/null and b/min/Geo/png/flags/16/ZRCD.png differ diff --git a/min/Geo/png/flags/16/ZW.png b/min/Geo/png/flags/16/ZW.png new file mode 100644 index 00000000..5c01a4ad Binary files /dev/null and b/min/Geo/png/flags/16/ZW.png differ diff --git a/min/Geo/png/flags/256/AC.png b/min/Geo/png/flags/256/AC.png new file mode 100644 index 00000000..490fc034 Binary files /dev/null and b/min/Geo/png/flags/256/AC.png differ diff --git a/min/Geo/png/flags/256/AD.png b/min/Geo/png/flags/256/AD.png new file mode 100644 index 00000000..6dfb191e Binary files /dev/null and b/min/Geo/png/flags/256/AD.png differ diff --git a/min/Geo/png/flags/256/AE-AJ.png b/min/Geo/png/flags/256/AE-AJ.png new file mode 100644 index 00000000..87ab0002 Binary files /dev/null and b/min/Geo/png/flags/256/AE-AJ.png differ diff --git a/min/Geo/png/flags/256/AE-AZ.png b/min/Geo/png/flags/256/AE-AZ.png new file mode 100644 index 00000000..c029672c Binary files /dev/null and b/min/Geo/png/flags/256/AE-AZ.png differ diff --git a/min/Geo/png/flags/256/AE-DU.png b/min/Geo/png/flags/256/AE-DU.png new file mode 100644 index 00000000..87ab0002 Binary files /dev/null and b/min/Geo/png/flags/256/AE-DU.png differ diff --git a/min/Geo/png/flags/256/AE-FU.png b/min/Geo/png/flags/256/AE-FU.png new file mode 100644 index 00000000..b4c09d7b Binary files /dev/null and b/min/Geo/png/flags/256/AE-FU.png differ diff --git a/min/Geo/png/flags/256/AE-RK.png b/min/Geo/png/flags/256/AE-RK.png new file mode 100644 index 00000000..88a730ef Binary files /dev/null and b/min/Geo/png/flags/256/AE-RK.png differ diff --git a/min/Geo/png/flags/256/AE-SH.png b/min/Geo/png/flags/256/AE-SH.png new file mode 100644 index 00000000..88a730ef Binary files /dev/null and b/min/Geo/png/flags/256/AE-SH.png differ diff --git a/min/Geo/png/flags/256/AE-UQ.png b/min/Geo/png/flags/256/AE-UQ.png new file mode 100644 index 00000000..b9511859 Binary files /dev/null and b/min/Geo/png/flags/256/AE-UQ.png differ diff --git a/min/Geo/png/flags/256/AE.png b/min/Geo/png/flags/256/AE.png new file mode 100644 index 00000000..b4c09d7b Binary files /dev/null and b/min/Geo/png/flags/256/AE.png differ diff --git a/min/Geo/png/flags/256/AF.png b/min/Geo/png/flags/256/AF.png new file mode 100644 index 00000000..e07ac0c0 Binary files /dev/null and b/min/Geo/png/flags/256/AF.png differ diff --git a/min/Geo/png/flags/256/AG.png b/min/Geo/png/flags/256/AG.png new file mode 100644 index 00000000..030f68fd Binary files /dev/null and b/min/Geo/png/flags/256/AG.png differ diff --git a/min/Geo/png/flags/256/AI.png b/min/Geo/png/flags/256/AI.png new file mode 100644 index 00000000..ea37763a Binary files /dev/null and b/min/Geo/png/flags/256/AI.png differ diff --git a/min/Geo/png/flags/256/AIDJ.png b/min/Geo/png/flags/256/AIDJ.png new file mode 100644 index 00000000..85c9ed6b Binary files /dev/null and b/min/Geo/png/flags/256/AIDJ.png differ diff --git a/min/Geo/png/flags/256/AL.png b/min/Geo/png/flags/256/AL.png new file mode 100644 index 00000000..4952c0db Binary files /dev/null and b/min/Geo/png/flags/256/AL.png differ diff --git a/min/Geo/png/flags/256/AM.png b/min/Geo/png/flags/256/AM.png new file mode 100644 index 00000000..8df33124 Binary files /dev/null and b/min/Geo/png/flags/256/AM.png differ diff --git a/min/Geo/png/flags/256/ANHH.png b/min/Geo/png/flags/256/ANHH.png new file mode 100644 index 00000000..283870de Binary files /dev/null and b/min/Geo/png/flags/256/ANHH.png differ diff --git a/min/Geo/png/flags/256/AO-CAB.png b/min/Geo/png/flags/256/AO-CAB.png new file mode 100644 index 00000000..e9dc4645 Binary files /dev/null and b/min/Geo/png/flags/256/AO-CAB.png differ diff --git a/min/Geo/png/flags/256/AO.png b/min/Geo/png/flags/256/AO.png new file mode 100644 index 00000000..8af92b89 Binary files /dev/null and b/min/Geo/png/flags/256/AO.png differ diff --git a/min/Geo/png/flags/256/AQ.png b/min/Geo/png/flags/256/AQ.png new file mode 100644 index 00000000..007421b6 Binary files /dev/null and b/min/Geo/png/flags/256/AQ.png differ diff --git a/min/Geo/png/flags/256/AR-AQ.png b/min/Geo/png/flags/256/AR-AQ.png new file mode 100644 index 00000000..8c820561 Binary files /dev/null and b/min/Geo/png/flags/256/AR-AQ.png differ diff --git a/min/Geo/png/flags/256/AR.png b/min/Geo/png/flags/256/AR.png new file mode 100644 index 00000000..5ba818f6 Binary files /dev/null and b/min/Geo/png/flags/256/AR.png differ diff --git a/min/Geo/png/flags/256/AS.png b/min/Geo/png/flags/256/AS.png new file mode 100644 index 00000000..a1f44c34 Binary files /dev/null and b/min/Geo/png/flags/256/AS.png differ diff --git a/min/Geo/png/flags/256/AT.png b/min/Geo/png/flags/256/AT.png new file mode 100644 index 00000000..5f114158 Binary files /dev/null and b/min/Geo/png/flags/256/AT.png differ diff --git a/min/Geo/png/flags/256/AU-AC.png b/min/Geo/png/flags/256/AU-AC.png new file mode 100644 index 00000000..309586c7 Binary files /dev/null and b/min/Geo/png/flags/256/AU-AC.png differ diff --git a/min/Geo/png/flags/256/AU-AQ.png b/min/Geo/png/flags/256/AU-AQ.png new file mode 100644 index 00000000..309586c7 Binary files /dev/null and b/min/Geo/png/flags/256/AU-AQ.png differ diff --git a/min/Geo/png/flags/256/AU-CS.png b/min/Geo/png/flags/256/AU-CS.png new file mode 100644 index 00000000..309586c7 Binary files /dev/null and b/min/Geo/png/flags/256/AU-CS.png differ diff --git a/min/Geo/png/flags/256/AU.png b/min/Geo/png/flags/256/AU.png new file mode 100644 index 00000000..309586c7 Binary files /dev/null and b/min/Geo/png/flags/256/AU.png differ diff --git a/min/Geo/png/flags/256/AW.png b/min/Geo/png/flags/256/AW.png new file mode 100644 index 00000000..a61c6f0d Binary files /dev/null and b/min/Geo/png/flags/256/AW.png differ diff --git a/min/Geo/png/flags/256/AX.png b/min/Geo/png/flags/256/AX.png new file mode 100644 index 00000000..a8f4b3aa Binary files /dev/null and b/min/Geo/png/flags/256/AX.png differ diff --git a/min/Geo/png/flags/256/AZ-NK.png b/min/Geo/png/flags/256/AZ-NK.png new file mode 100644 index 00000000..b850a854 Binary files /dev/null and b/min/Geo/png/flags/256/AZ-NK.png differ diff --git a/min/Geo/png/flags/256/AZ.png b/min/Geo/png/flags/256/AZ.png new file mode 100644 index 00000000..477520e2 Binary files /dev/null and b/min/Geo/png/flags/256/AZ.png differ diff --git a/min/Geo/png/flags/256/BA.png b/min/Geo/png/flags/256/BA.png new file mode 100644 index 00000000..dd08612a Binary files /dev/null and b/min/Geo/png/flags/256/BA.png differ diff --git a/min/Geo/png/flags/256/BB.png b/min/Geo/png/flags/256/BB.png new file mode 100644 index 00000000..1289d0dc Binary files /dev/null and b/min/Geo/png/flags/256/BB.png differ diff --git a/min/Geo/png/flags/256/BD.png b/min/Geo/png/flags/256/BD.png new file mode 100644 index 00000000..8eeb76dd Binary files /dev/null and b/min/Geo/png/flags/256/BD.png differ diff --git a/min/Geo/png/flags/256/BE.png b/min/Geo/png/flags/256/BE.png new file mode 100644 index 00000000..16e87c49 Binary files /dev/null and b/min/Geo/png/flags/256/BE.png differ diff --git a/min/Geo/png/flags/256/BF.png b/min/Geo/png/flags/256/BF.png new file mode 100644 index 00000000..d12a1cd9 Binary files /dev/null and b/min/Geo/png/flags/256/BF.png differ diff --git a/min/Geo/png/flags/256/BG.png b/min/Geo/png/flags/256/BG.png new file mode 100644 index 00000000..1c752d65 Binary files /dev/null and b/min/Geo/png/flags/256/BG.png differ diff --git a/min/Geo/png/flags/256/BH.png b/min/Geo/png/flags/256/BH.png new file mode 100644 index 00000000..972fe08f Binary files /dev/null and b/min/Geo/png/flags/256/BH.png differ diff --git a/min/Geo/png/flags/256/BI.png b/min/Geo/png/flags/256/BI.png new file mode 100644 index 00000000..b6fdbb7b Binary files /dev/null and b/min/Geo/png/flags/256/BI.png differ diff --git a/min/Geo/png/flags/256/BJ.png b/min/Geo/png/flags/256/BJ.png new file mode 100644 index 00000000..af028f7e Binary files /dev/null and b/min/Geo/png/flags/256/BJ.png differ diff --git a/min/Geo/png/flags/256/BL.png b/min/Geo/png/flags/256/BL.png new file mode 100644 index 00000000..30f0b8c5 Binary files /dev/null and b/min/Geo/png/flags/256/BL.png differ diff --git a/min/Geo/png/flags/256/BM.png b/min/Geo/png/flags/256/BM.png new file mode 100644 index 00000000..d097c068 Binary files /dev/null and b/min/Geo/png/flags/256/BM.png differ diff --git a/min/Geo/png/flags/256/BN.png b/min/Geo/png/flags/256/BN.png new file mode 100644 index 00000000..4ab3d4d6 Binary files /dev/null and b/min/Geo/png/flags/256/BN.png differ diff --git a/min/Geo/png/flags/256/BO.png b/min/Geo/png/flags/256/BO.png new file mode 100644 index 00000000..181a4173 Binary files /dev/null and b/min/Geo/png/flags/256/BO.png differ diff --git a/min/Geo/png/flags/256/BQ.png b/min/Geo/png/flags/256/BQ.png new file mode 100644 index 00000000..6808cdce Binary files /dev/null and b/min/Geo/png/flags/256/BQ.png differ diff --git a/min/Geo/png/flags/256/BQAQ.png b/min/Geo/png/flags/256/BQAQ.png new file mode 100644 index 00000000..d5ae99b5 Binary files /dev/null and b/min/Geo/png/flags/256/BQAQ.png differ diff --git a/min/Geo/png/flags/256/BR.png b/min/Geo/png/flags/256/BR.png new file mode 100644 index 00000000..f4e77088 Binary files /dev/null and b/min/Geo/png/flags/256/BR.png differ diff --git a/min/Geo/png/flags/256/BS.png b/min/Geo/png/flags/256/BS.png new file mode 100644 index 00000000..bb355392 Binary files /dev/null and b/min/Geo/png/flags/256/BS.png differ diff --git a/min/Geo/png/flags/256/BT.png b/min/Geo/png/flags/256/BT.png new file mode 100644 index 00000000..e1e42d6f Binary files /dev/null and b/min/Geo/png/flags/256/BT.png differ diff --git a/min/Geo/png/flags/256/BUMM.png b/min/Geo/png/flags/256/BUMM.png new file mode 100644 index 00000000..cefc0b0c Binary files /dev/null and b/min/Geo/png/flags/256/BUMM.png differ diff --git a/min/Geo/png/flags/256/BV.png b/min/Geo/png/flags/256/BV.png new file mode 100644 index 00000000..702cefa7 Binary files /dev/null and b/min/Geo/png/flags/256/BV.png differ diff --git a/min/Geo/png/flags/256/BW.png b/min/Geo/png/flags/256/BW.png new file mode 100644 index 00000000..1564dee7 Binary files /dev/null and b/min/Geo/png/flags/256/BW.png differ diff --git a/min/Geo/png/flags/256/BY.png b/min/Geo/png/flags/256/BY.png new file mode 100644 index 00000000..fda62428 Binary files /dev/null and b/min/Geo/png/flags/256/BY.png differ diff --git a/min/Geo/png/flags/256/BYAA.png b/min/Geo/png/flags/256/BYAA.png new file mode 100644 index 00000000..632a091c Binary files /dev/null and b/min/Geo/png/flags/256/BYAA.png differ diff --git a/min/Geo/png/flags/256/BZ.png b/min/Geo/png/flags/256/BZ.png new file mode 100644 index 00000000..03810685 Binary files /dev/null and b/min/Geo/png/flags/256/BZ.png differ diff --git a/min/Geo/png/flags/256/CA.png b/min/Geo/png/flags/256/CA.png new file mode 100644 index 00000000..0a8728c8 Binary files /dev/null and b/min/Geo/png/flags/256/CA.png differ diff --git a/min/Geo/png/flags/256/CC.png b/min/Geo/png/flags/256/CC.png new file mode 100644 index 00000000..aa689ae7 Binary files /dev/null and b/min/Geo/png/flags/256/CC.png differ diff --git a/min/Geo/png/flags/256/CD.png b/min/Geo/png/flags/256/CD.png new file mode 100644 index 00000000..8c1b2661 Binary files /dev/null and b/min/Geo/png/flags/256/CD.png differ diff --git a/min/Geo/png/flags/256/CF.png b/min/Geo/png/flags/256/CF.png new file mode 100644 index 00000000..cac4f767 Binary files /dev/null and b/min/Geo/png/flags/256/CF.png differ diff --git a/min/Geo/png/flags/256/CG.png b/min/Geo/png/flags/256/CG.png new file mode 100644 index 00000000..c0bcf9c5 Binary files /dev/null and b/min/Geo/png/flags/256/CG.png differ diff --git a/min/Geo/png/flags/256/CH.png b/min/Geo/png/flags/256/CH.png new file mode 100644 index 00000000..28e8de10 Binary files /dev/null and b/min/Geo/png/flags/256/CH.png differ diff --git a/min/Geo/png/flags/256/CI.png b/min/Geo/png/flags/256/CI.png new file mode 100644 index 00000000..578872c7 Binary files /dev/null and b/min/Geo/png/flags/256/CI.png differ diff --git a/min/Geo/png/flags/256/CK.png b/min/Geo/png/flags/256/CK.png new file mode 100644 index 00000000..9db948b0 Binary files /dev/null and b/min/Geo/png/flags/256/CK.png differ diff --git a/min/Geo/png/flags/256/CL-AQ.png b/min/Geo/png/flags/256/CL-AQ.png new file mode 100644 index 00000000..dc99ddad Binary files /dev/null and b/min/Geo/png/flags/256/CL-AQ.png differ diff --git a/min/Geo/png/flags/256/CL.png b/min/Geo/png/flags/256/CL.png new file mode 100644 index 00000000..731cc505 Binary files /dev/null and b/min/Geo/png/flags/256/CL.png differ diff --git a/min/Geo/png/flags/256/CM.png b/min/Geo/png/flags/256/CM.png new file mode 100644 index 00000000..57386c42 Binary files /dev/null and b/min/Geo/png/flags/256/CM.png differ diff --git a/min/Geo/png/flags/256/CN.png b/min/Geo/png/flags/256/CN.png new file mode 100644 index 00000000..88690d38 Binary files /dev/null and b/min/Geo/png/flags/256/CN.png differ diff --git a/min/Geo/png/flags/256/CO.png b/min/Geo/png/flags/256/CO.png new file mode 100644 index 00000000..6f3e70ab Binary files /dev/null and b/min/Geo/png/flags/256/CO.png differ diff --git a/min/Geo/png/flags/256/CP.png b/min/Geo/png/flags/256/CP.png new file mode 100644 index 00000000..85c9ed6b Binary files /dev/null and b/min/Geo/png/flags/256/CP.png differ diff --git a/min/Geo/png/flags/256/CR.png b/min/Geo/png/flags/256/CR.png new file mode 100644 index 00000000..a9afb947 Binary files /dev/null and b/min/Geo/png/flags/256/CR.png differ diff --git a/min/Geo/png/flags/256/CSHH.png b/min/Geo/png/flags/256/CSHH.png new file mode 100644 index 00000000..3031353b Binary files /dev/null and b/min/Geo/png/flags/256/CSHH.png differ diff --git a/min/Geo/png/flags/256/CSXX.png b/min/Geo/png/flags/256/CSXX.png new file mode 100644 index 00000000..857a9f8d Binary files /dev/null and b/min/Geo/png/flags/256/CSXX.png differ diff --git a/min/Geo/png/flags/256/CTKI.png b/min/Geo/png/flags/256/CTKI.png new file mode 100644 index 00000000..05a59a8d Binary files /dev/null and b/min/Geo/png/flags/256/CTKI.png differ diff --git a/min/Geo/png/flags/256/CU.png b/min/Geo/png/flags/256/CU.png new file mode 100644 index 00000000..2dceeced Binary files /dev/null and b/min/Geo/png/flags/256/CU.png differ diff --git a/min/Geo/png/flags/256/CV.png b/min/Geo/png/flags/256/CV.png new file mode 100644 index 00000000..39cc3a53 Binary files /dev/null and b/min/Geo/png/flags/256/CV.png differ diff --git a/min/Geo/png/flags/256/CW.png b/min/Geo/png/flags/256/CW.png new file mode 100644 index 00000000..94e37af8 Binary files /dev/null and b/min/Geo/png/flags/256/CW.png differ diff --git a/min/Geo/png/flags/256/CX.png b/min/Geo/png/flags/256/CX.png new file mode 100644 index 00000000..b679abc6 Binary files /dev/null and b/min/Geo/png/flags/256/CX.png differ diff --git a/min/Geo/png/flags/256/CY-NC.png b/min/Geo/png/flags/256/CY-NC.png new file mode 100644 index 00000000..72fd3cb9 Binary files /dev/null and b/min/Geo/png/flags/256/CY-NC.png differ diff --git a/min/Geo/png/flags/256/CY.png b/min/Geo/png/flags/256/CY.png new file mode 100644 index 00000000..f23ed6de Binary files /dev/null and b/min/Geo/png/flags/256/CY.png differ diff --git a/min/Geo/png/flags/256/CZ.png b/min/Geo/png/flags/256/CZ.png new file mode 100644 index 00000000..3031353b Binary files /dev/null and b/min/Geo/png/flags/256/CZ.png differ diff --git a/min/Geo/png/flags/256/DDDE.png b/min/Geo/png/flags/256/DDDE.png new file mode 100644 index 00000000..44ce8863 Binary files /dev/null and b/min/Geo/png/flags/256/DDDE.png differ diff --git a/min/Geo/png/flags/256/DE.png b/min/Geo/png/flags/256/DE.png new file mode 100644 index 00000000..0fe6aec6 Binary files /dev/null and b/min/Geo/png/flags/256/DE.png differ diff --git a/min/Geo/png/flags/256/DEDE.png b/min/Geo/png/flags/256/DEDE.png new file mode 100644 index 00000000..0fe6aec6 Binary files /dev/null and b/min/Geo/png/flags/256/DEDE.png differ diff --git a/min/Geo/png/flags/256/DG.png b/min/Geo/png/flags/256/DG.png new file mode 100644 index 00000000..9f6dafc0 Binary files /dev/null and b/min/Geo/png/flags/256/DG.png differ diff --git a/min/Geo/png/flags/256/DJ.png b/min/Geo/png/flags/256/DJ.png new file mode 100644 index 00000000..5ae1a43c Binary files /dev/null and b/min/Geo/png/flags/256/DJ.png differ diff --git a/min/Geo/png/flags/256/DK.png b/min/Geo/png/flags/256/DK.png new file mode 100644 index 00000000..16c6d6c0 Binary files /dev/null and b/min/Geo/png/flags/256/DK.png differ diff --git a/min/Geo/png/flags/256/DM.png b/min/Geo/png/flags/256/DM.png new file mode 100644 index 00000000..434b52de Binary files /dev/null and b/min/Geo/png/flags/256/DM.png differ diff --git a/min/Geo/png/flags/256/DO.png b/min/Geo/png/flags/256/DO.png new file mode 100644 index 00000000..61f33f5c Binary files /dev/null and b/min/Geo/png/flags/256/DO.png differ diff --git a/min/Geo/png/flags/256/DYBJ.png b/min/Geo/png/flags/256/DYBJ.png new file mode 100644 index 00000000..af028f7e Binary files /dev/null and b/min/Geo/png/flags/256/DYBJ.png differ diff --git a/min/Geo/png/flags/256/DZ.png b/min/Geo/png/flags/256/DZ.png new file mode 100644 index 00000000..736c6b33 Binary files /dev/null and b/min/Geo/png/flags/256/DZ.png differ diff --git a/min/Geo/png/flags/256/EA.png b/min/Geo/png/flags/256/EA.png new file mode 100644 index 00000000..0d5e0493 Binary files /dev/null and b/min/Geo/png/flags/256/EA.png differ diff --git a/min/Geo/png/flags/256/EC.png b/min/Geo/png/flags/256/EC.png new file mode 100644 index 00000000..1c8e7ddc Binary files /dev/null and b/min/Geo/png/flags/256/EC.png differ diff --git a/min/Geo/png/flags/256/EE.png b/min/Geo/png/flags/256/EE.png new file mode 100644 index 00000000..0a70d834 Binary files /dev/null and b/min/Geo/png/flags/256/EE.png differ diff --git a/min/Geo/png/flags/256/EG.png b/min/Geo/png/flags/256/EG.png new file mode 100644 index 00000000..a8dc277c Binary files /dev/null and b/min/Geo/png/flags/256/EG.png differ diff --git a/min/Geo/png/flags/256/EGEG.png b/min/Geo/png/flags/256/EGEG.png new file mode 100644 index 00000000..2d73fa39 Binary files /dev/null and b/min/Geo/png/flags/256/EGEG.png differ diff --git a/min/Geo/png/flags/256/EH.png b/min/Geo/png/flags/256/EH.png new file mode 100644 index 00000000..a77c2a00 Binary files /dev/null and b/min/Geo/png/flags/256/EH.png differ diff --git a/min/Geo/png/flags/256/ER.png b/min/Geo/png/flags/256/ER.png new file mode 100644 index 00000000..9906c8db Binary files /dev/null and b/min/Geo/png/flags/256/ER.png differ diff --git a/min/Geo/png/flags/256/ES.png b/min/Geo/png/flags/256/ES.png new file mode 100644 index 00000000..1eeb535e Binary files /dev/null and b/min/Geo/png/flags/256/ES.png differ diff --git a/min/Geo/png/flags/256/ET.png b/min/Geo/png/flags/256/ET.png new file mode 100644 index 00000000..16f0dd2c Binary files /dev/null and b/min/Geo/png/flags/256/ET.png differ diff --git a/min/Geo/png/flags/256/EU.png b/min/Geo/png/flags/256/EU.png new file mode 100644 index 00000000..a7da645d Binary files /dev/null and b/min/Geo/png/flags/256/EU.png differ diff --git a/min/Geo/png/flags/256/FI.png b/min/Geo/png/flags/256/FI.png new file mode 100644 index 00000000..f9739824 Binary files /dev/null and b/min/Geo/png/flags/256/FI.png differ diff --git a/min/Geo/png/flags/256/FJ.png b/min/Geo/png/flags/256/FJ.png new file mode 100644 index 00000000..811fd073 Binary files /dev/null and b/min/Geo/png/flags/256/FJ.png differ diff --git a/min/Geo/png/flags/256/FK.png b/min/Geo/png/flags/256/FK.png new file mode 100644 index 00000000..836f2a27 Binary files /dev/null and b/min/Geo/png/flags/256/FK.png differ diff --git a/min/Geo/png/flags/256/FM.png b/min/Geo/png/flags/256/FM.png new file mode 100644 index 00000000..c383019c Binary files /dev/null and b/min/Geo/png/flags/256/FM.png differ diff --git a/min/Geo/png/flags/256/FO.png b/min/Geo/png/flags/256/FO.png new file mode 100644 index 00000000..36ded75f Binary files /dev/null and b/min/Geo/png/flags/256/FO.png differ diff --git a/min/Geo/png/flags/256/FQHH.png b/min/Geo/png/flags/256/FQHH.png new file mode 100644 index 00000000..b35a7efb Binary files /dev/null and b/min/Geo/png/flags/256/FQHH.png differ diff --git a/min/Geo/png/flags/256/FR-AQ.png b/min/Geo/png/flags/256/FR-AQ.png new file mode 100644 index 00000000..b35a7efb Binary files /dev/null and b/min/Geo/png/flags/256/FR-AQ.png differ diff --git a/min/Geo/png/flags/256/FR.png b/min/Geo/png/flags/256/FR.png new file mode 100644 index 00000000..85c9ed6b Binary files /dev/null and b/min/Geo/png/flags/256/FR.png differ diff --git a/min/Geo/png/flags/256/FXFR.png b/min/Geo/png/flags/256/FXFR.png new file mode 100644 index 00000000..85c9ed6b Binary files /dev/null and b/min/Geo/png/flags/256/FXFR.png differ diff --git a/min/Geo/png/flags/256/GA.png b/min/Geo/png/flags/256/GA.png new file mode 100644 index 00000000..0e012967 Binary files /dev/null and b/min/Geo/png/flags/256/GA.png differ diff --git a/min/Geo/png/flags/256/GB-AD.png b/min/Geo/png/flags/256/GB-AD.png new file mode 100644 index 00000000..d7cc7910 Binary files /dev/null and b/min/Geo/png/flags/256/GB-AD.png differ diff --git a/min/Geo/png/flags/256/GB-ENG.png b/min/Geo/png/flags/256/GB-ENG.png new file mode 100644 index 00000000..a6a8d40b Binary files /dev/null and b/min/Geo/png/flags/256/GB-ENG.png differ diff --git a/min/Geo/png/flags/256/GB-NIR.png b/min/Geo/png/flags/256/GB-NIR.png new file mode 100644 index 00000000..4616904a Binary files /dev/null and b/min/Geo/png/flags/256/GB-NIR.png differ diff --git a/min/Geo/png/flags/256/GB-SCT.png b/min/Geo/png/flags/256/GB-SCT.png new file mode 100644 index 00000000..4230c63e Binary files /dev/null and b/min/Geo/png/flags/256/GB-SCT.png differ diff --git a/min/Geo/png/flags/256/GB-SL.png b/min/Geo/png/flags/256/GB-SL.png new file mode 100644 index 00000000..dd10415c Binary files /dev/null and b/min/Geo/png/flags/256/GB-SL.png differ diff --git a/min/Geo/png/flags/256/GB-WLS.png b/min/Geo/png/flags/256/GB-WLS.png new file mode 100644 index 00000000..5f029373 Binary files /dev/null and b/min/Geo/png/flags/256/GB-WLS.png differ diff --git a/min/Geo/png/flags/256/GB.png b/min/Geo/png/flags/256/GB.png new file mode 100644 index 00000000..d7cc7910 Binary files /dev/null and b/min/Geo/png/flags/256/GB.png differ diff --git a/min/Geo/png/flags/256/GBAE.png b/min/Geo/png/flags/256/GBAE.png new file mode 100644 index 00000000..4fc27341 Binary files /dev/null and b/min/Geo/png/flags/256/GBAE.png differ diff --git a/min/Geo/png/flags/256/GBBZ.png b/min/Geo/png/flags/256/GBBZ.png new file mode 100644 index 00000000..4931c6e0 Binary files /dev/null and b/min/Geo/png/flags/256/GBBZ.png differ diff --git a/min/Geo/png/flags/256/GBKN.png b/min/Geo/png/flags/256/GBKN.png new file mode 100644 index 00000000..37b041f2 Binary files /dev/null and b/min/Geo/png/flags/256/GBKN.png differ diff --git a/min/Geo/png/flags/256/GD.png b/min/Geo/png/flags/256/GD.png new file mode 100644 index 00000000..b3f99335 Binary files /dev/null and b/min/Geo/png/flags/256/GD.png differ diff --git a/min/Geo/png/flags/256/GE-AB.png b/min/Geo/png/flags/256/GE-AB.png new file mode 100644 index 00000000..f611696f Binary files /dev/null and b/min/Geo/png/flags/256/GE-AB.png differ diff --git a/min/Geo/png/flags/256/GE-SK.png b/min/Geo/png/flags/256/GE-SK.png new file mode 100644 index 00000000..4ecbfc8b Binary files /dev/null and b/min/Geo/png/flags/256/GE-SK.png differ diff --git a/min/Geo/png/flags/256/GE.png b/min/Geo/png/flags/256/GE.png new file mode 100644 index 00000000..45ae64fd Binary files /dev/null and b/min/Geo/png/flags/256/GE.png differ diff --git a/min/Geo/png/flags/256/GEHH.png b/min/Geo/png/flags/256/GEHH.png new file mode 100644 index 00000000..05a59a8d Binary files /dev/null and b/min/Geo/png/flags/256/GEHH.png differ diff --git a/min/Geo/png/flags/256/GEKI.png b/min/Geo/png/flags/256/GEKI.png new file mode 100644 index 00000000..05a59a8d Binary files /dev/null and b/min/Geo/png/flags/256/GEKI.png differ diff --git a/min/Geo/png/flags/256/GETV.png b/min/Geo/png/flags/256/GETV.png new file mode 100644 index 00000000..05a59a8d Binary files /dev/null and b/min/Geo/png/flags/256/GETV.png differ diff --git a/min/Geo/png/flags/256/GF.png b/min/Geo/png/flags/256/GF.png new file mode 100644 index 00000000..e514d64d Binary files /dev/null and b/min/Geo/png/flags/256/GF.png differ diff --git a/min/Geo/png/flags/256/GG-AL.png b/min/Geo/png/flags/256/GG-AL.png new file mode 100644 index 00000000..4fb2b6bd Binary files /dev/null and b/min/Geo/png/flags/256/GG-AL.png differ diff --git a/min/Geo/png/flags/256/GG-HE.png b/min/Geo/png/flags/256/GG-HE.png new file mode 100644 index 00000000..b86a539b Binary files /dev/null and b/min/Geo/png/flags/256/GG-HE.png differ diff --git a/min/Geo/png/flags/256/GG-SA.png b/min/Geo/png/flags/256/GG-SA.png new file mode 100644 index 00000000..7d52fb9e Binary files /dev/null and b/min/Geo/png/flags/256/GG-SA.png differ diff --git a/min/Geo/png/flags/256/GG.png b/min/Geo/png/flags/256/GG.png new file mode 100644 index 00000000..e474a313 Binary files /dev/null and b/min/Geo/png/flags/256/GG.png differ diff --git a/min/Geo/png/flags/256/GH.png b/min/Geo/png/flags/256/GH.png new file mode 100644 index 00000000..0d300707 Binary files /dev/null and b/min/Geo/png/flags/256/GH.png differ diff --git a/min/Geo/png/flags/256/GI.png b/min/Geo/png/flags/256/GI.png new file mode 100644 index 00000000..33d366c0 Binary files /dev/null and b/min/Geo/png/flags/256/GI.png differ diff --git a/min/Geo/png/flags/256/GL.png b/min/Geo/png/flags/256/GL.png new file mode 100644 index 00000000..8e868693 Binary files /dev/null and b/min/Geo/png/flags/256/GL.png differ diff --git a/min/Geo/png/flags/256/GM.png b/min/Geo/png/flags/256/GM.png new file mode 100644 index 00000000..10ad16df Binary files /dev/null and b/min/Geo/png/flags/256/GM.png differ diff --git a/min/Geo/png/flags/256/GN.png b/min/Geo/png/flags/256/GN.png new file mode 100644 index 00000000..8de03161 Binary files /dev/null and b/min/Geo/png/flags/256/GN.png differ diff --git a/min/Geo/png/flags/256/GP.png b/min/Geo/png/flags/256/GP.png new file mode 100644 index 00000000..7ee59552 Binary files /dev/null and b/min/Geo/png/flags/256/GP.png differ diff --git a/min/Geo/png/flags/256/GQ.png b/min/Geo/png/flags/256/GQ.png new file mode 100644 index 00000000..89807252 Binary files /dev/null and b/min/Geo/png/flags/256/GQ.png differ diff --git a/min/Geo/png/flags/256/GR.png b/min/Geo/png/flags/256/GR.png new file mode 100644 index 00000000..440d65f9 Binary files /dev/null and b/min/Geo/png/flags/256/GR.png differ diff --git a/min/Geo/png/flags/256/GS.png b/min/Geo/png/flags/256/GS.png new file mode 100644 index 00000000..d2efd586 Binary files /dev/null and b/min/Geo/png/flags/256/GS.png differ diff --git a/min/Geo/png/flags/256/GT.png b/min/Geo/png/flags/256/GT.png new file mode 100644 index 00000000..9e867cf3 Binary files /dev/null and b/min/Geo/png/flags/256/GT.png differ diff --git a/min/Geo/png/flags/256/GU.png b/min/Geo/png/flags/256/GU.png new file mode 100644 index 00000000..1c3f1538 Binary files /dev/null and b/min/Geo/png/flags/256/GU.png differ diff --git a/min/Geo/png/flags/256/GW.png b/min/Geo/png/flags/256/GW.png new file mode 100644 index 00000000..42a85936 Binary files /dev/null and b/min/Geo/png/flags/256/GW.png differ diff --git a/min/Geo/png/flags/256/GY.png b/min/Geo/png/flags/256/GY.png new file mode 100644 index 00000000..60ff8252 Binary files /dev/null and b/min/Geo/png/flags/256/GY.png differ diff --git a/min/Geo/png/flags/256/HK.png b/min/Geo/png/flags/256/HK.png new file mode 100644 index 00000000..484366c3 Binary files /dev/null and b/min/Geo/png/flags/256/HK.png differ diff --git a/min/Geo/png/flags/256/HM.png b/min/Geo/png/flags/256/HM.png new file mode 100644 index 00000000..309586c7 Binary files /dev/null and b/min/Geo/png/flags/256/HM.png differ diff --git a/min/Geo/png/flags/256/HN.png b/min/Geo/png/flags/256/HN.png new file mode 100644 index 00000000..f0ac805d Binary files /dev/null and b/min/Geo/png/flags/256/HN.png differ diff --git a/min/Geo/png/flags/256/HR.png b/min/Geo/png/flags/256/HR.png new file mode 100644 index 00000000..14b4e572 Binary files /dev/null and b/min/Geo/png/flags/256/HR.png differ diff --git a/min/Geo/png/flags/256/HT.png b/min/Geo/png/flags/256/HT.png new file mode 100644 index 00000000..3e5596fb Binary files /dev/null and b/min/Geo/png/flags/256/HT.png differ diff --git a/min/Geo/png/flags/256/HU.png b/min/Geo/png/flags/256/HU.png new file mode 100644 index 00000000..d4cce04a Binary files /dev/null and b/min/Geo/png/flags/256/HU.png differ diff --git a/min/Geo/png/flags/256/HVBF.png b/min/Geo/png/flags/256/HVBF.png new file mode 100644 index 00000000..8c03e3d6 Binary files /dev/null and b/min/Geo/png/flags/256/HVBF.png differ diff --git a/min/Geo/png/flags/256/IC.png b/min/Geo/png/flags/256/IC.png new file mode 100644 index 00000000..16f0f675 Binary files /dev/null and b/min/Geo/png/flags/256/IC.png differ diff --git a/min/Geo/png/flags/256/ID.png b/min/Geo/png/flags/256/ID.png new file mode 100644 index 00000000..70370409 Binary files /dev/null and b/min/Geo/png/flags/256/ID.png differ diff --git a/min/Geo/png/flags/256/IE.png b/min/Geo/png/flags/256/IE.png new file mode 100644 index 00000000..0cccece1 Binary files /dev/null and b/min/Geo/png/flags/256/IE.png differ diff --git a/min/Geo/png/flags/256/IL.png b/min/Geo/png/flags/256/IL.png new file mode 100644 index 00000000..484f0657 Binary files /dev/null and b/min/Geo/png/flags/256/IL.png differ diff --git a/min/Geo/png/flags/256/IM.png b/min/Geo/png/flags/256/IM.png new file mode 100644 index 00000000..9f3d9f1e Binary files /dev/null and b/min/Geo/png/flags/256/IM.png differ diff --git a/min/Geo/png/flags/256/IN-JK.png b/min/Geo/png/flags/256/IN-JK.png new file mode 100644 index 00000000..3e64ebad Binary files /dev/null and b/min/Geo/png/flags/256/IN-JK.png differ diff --git a/min/Geo/png/flags/256/IN.png b/min/Geo/png/flags/256/IN.png new file mode 100644 index 00000000..5fe6fe97 Binary files /dev/null and b/min/Geo/png/flags/256/IN.png differ diff --git a/min/Geo/png/flags/256/IO.png b/min/Geo/png/flags/256/IO.png new file mode 100644 index 00000000..9f6dafc0 Binary files /dev/null and b/min/Geo/png/flags/256/IO.png differ diff --git a/min/Geo/png/flags/256/IQ.png b/min/Geo/png/flags/256/IQ.png new file mode 100644 index 00000000..703d1d72 Binary files /dev/null and b/min/Geo/png/flags/256/IQ.png differ diff --git a/min/Geo/png/flags/256/IR.png b/min/Geo/png/flags/256/IR.png new file mode 100644 index 00000000..7477e6cb Binary files /dev/null and b/min/Geo/png/flags/256/IR.png differ diff --git a/min/Geo/png/flags/256/IS.png b/min/Geo/png/flags/256/IS.png new file mode 100644 index 00000000..08687cd9 Binary files /dev/null and b/min/Geo/png/flags/256/IS.png differ diff --git a/min/Geo/png/flags/256/IT.png b/min/Geo/png/flags/256/IT.png new file mode 100644 index 00000000..8948ef23 Binary files /dev/null and b/min/Geo/png/flags/256/IT.png differ diff --git a/min/Geo/png/flags/256/JE.png b/min/Geo/png/flags/256/JE.png new file mode 100644 index 00000000..9a7379fa Binary files /dev/null and b/min/Geo/png/flags/256/JE.png differ diff --git a/min/Geo/png/flags/256/JM.png b/min/Geo/png/flags/256/JM.png new file mode 100644 index 00000000..e94e8154 Binary files /dev/null and b/min/Geo/png/flags/256/JM.png differ diff --git a/min/Geo/png/flags/256/JO.png b/min/Geo/png/flags/256/JO.png new file mode 100644 index 00000000..a3fa3791 Binary files /dev/null and b/min/Geo/png/flags/256/JO.png differ diff --git a/min/Geo/png/flags/256/JP.png b/min/Geo/png/flags/256/JP.png new file mode 100644 index 00000000..ae386948 Binary files /dev/null and b/min/Geo/png/flags/256/JP.png differ diff --git a/min/Geo/png/flags/256/JTUM.png b/min/Geo/png/flags/256/JTUM.png new file mode 100644 index 00000000..3abace53 Binary files /dev/null and b/min/Geo/png/flags/256/JTUM.png differ diff --git a/min/Geo/png/flags/256/KAKH.png b/min/Geo/png/flags/256/KAKH.png new file mode 100644 index 00000000..2b420003 Binary files /dev/null and b/min/Geo/png/flags/256/KAKH.png differ diff --git a/min/Geo/png/flags/256/KE.png b/min/Geo/png/flags/256/KE.png new file mode 100644 index 00000000..efb1ae6f Binary files /dev/null and b/min/Geo/png/flags/256/KE.png differ diff --git a/min/Geo/png/flags/256/KG.png b/min/Geo/png/flags/256/KG.png new file mode 100644 index 00000000..c37d5959 Binary files /dev/null and b/min/Geo/png/flags/256/KG.png differ diff --git a/min/Geo/png/flags/256/KH.png b/min/Geo/png/flags/256/KH.png new file mode 100644 index 00000000..7aae77be Binary files /dev/null and b/min/Geo/png/flags/256/KH.png differ diff --git a/min/Geo/png/flags/256/KHKA.png b/min/Geo/png/flags/256/KHKA.png new file mode 100644 index 00000000..9d601f7b Binary files /dev/null and b/min/Geo/png/flags/256/KHKA.png differ diff --git a/min/Geo/png/flags/256/KI.png b/min/Geo/png/flags/256/KI.png new file mode 100644 index 00000000..46151f0c Binary files /dev/null and b/min/Geo/png/flags/256/KI.png differ diff --git a/min/Geo/png/flags/256/KM-A.png b/min/Geo/png/flags/256/KM-A.png new file mode 100644 index 00000000..0d8fa42b Binary files /dev/null and b/min/Geo/png/flags/256/KM-A.png differ diff --git a/min/Geo/png/flags/256/KM-M.png b/min/Geo/png/flags/256/KM-M.png new file mode 100644 index 00000000..83bc5757 Binary files /dev/null and b/min/Geo/png/flags/256/KM-M.png differ diff --git a/min/Geo/png/flags/256/KM.png b/min/Geo/png/flags/256/KM.png new file mode 100644 index 00000000..d7a71780 Binary files /dev/null and b/min/Geo/png/flags/256/KM.png differ diff --git a/min/Geo/png/flags/256/KN.png b/min/Geo/png/flags/256/KN.png new file mode 100644 index 00000000..abea14b7 Binary files /dev/null and b/min/Geo/png/flags/256/KN.png differ diff --git a/min/Geo/png/flags/256/KOJP.png b/min/Geo/png/flags/256/KOJP.png new file mode 100644 index 00000000..4251db5e Binary files /dev/null and b/min/Geo/png/flags/256/KOJP.png differ diff --git a/min/Geo/png/flags/256/KP.png b/min/Geo/png/flags/256/KP.png new file mode 100644 index 00000000..97ff2d5c Binary files /dev/null and b/min/Geo/png/flags/256/KP.png differ diff --git a/min/Geo/png/flags/256/KR.png b/min/Geo/png/flags/256/KR.png new file mode 100644 index 00000000..69e74f74 Binary files /dev/null and b/min/Geo/png/flags/256/KR.png differ diff --git a/min/Geo/png/flags/256/KW.png b/min/Geo/png/flags/256/KW.png new file mode 100644 index 00000000..ac2b7490 Binary files /dev/null and b/min/Geo/png/flags/256/KW.png differ diff --git a/min/Geo/png/flags/256/KY.png b/min/Geo/png/flags/256/KY.png new file mode 100644 index 00000000..512b2c5e Binary files /dev/null and b/min/Geo/png/flags/256/KY.png differ diff --git a/min/Geo/png/flags/256/KZ.png b/min/Geo/png/flags/256/KZ.png new file mode 100644 index 00000000..2d04766c Binary files /dev/null and b/min/Geo/png/flags/256/KZ.png differ diff --git a/min/Geo/png/flags/256/LA.png b/min/Geo/png/flags/256/LA.png new file mode 100644 index 00000000..e916e489 Binary files /dev/null and b/min/Geo/png/flags/256/LA.png differ diff --git a/min/Geo/png/flags/256/LB.png b/min/Geo/png/flags/256/LB.png new file mode 100644 index 00000000..7ab31a06 Binary files /dev/null and b/min/Geo/png/flags/256/LB.png differ diff --git a/min/Geo/png/flags/256/LC.png b/min/Geo/png/flags/256/LC.png new file mode 100644 index 00000000..2aa90b83 Binary files /dev/null and b/min/Geo/png/flags/256/LC.png differ diff --git a/min/Geo/png/flags/256/LI.png b/min/Geo/png/flags/256/LI.png new file mode 100644 index 00000000..ed5e788d Binary files /dev/null and b/min/Geo/png/flags/256/LI.png differ diff --git a/min/Geo/png/flags/256/LK.png b/min/Geo/png/flags/256/LK.png new file mode 100644 index 00000000..94173a3a Binary files /dev/null and b/min/Geo/png/flags/256/LK.png differ diff --git a/min/Geo/png/flags/256/LKLK.png b/min/Geo/png/flags/256/LKLK.png new file mode 100644 index 00000000..94173a3a Binary files /dev/null and b/min/Geo/png/flags/256/LKLK.png differ diff --git a/min/Geo/png/flags/256/LR.png b/min/Geo/png/flags/256/LR.png new file mode 100644 index 00000000..697b0d78 Binary files /dev/null and b/min/Geo/png/flags/256/LR.png differ diff --git a/min/Geo/png/flags/256/LS.png b/min/Geo/png/flags/256/LS.png new file mode 100644 index 00000000..f7485622 Binary files /dev/null and b/min/Geo/png/flags/256/LS.png differ diff --git a/min/Geo/png/flags/256/LT.png b/min/Geo/png/flags/256/LT.png new file mode 100644 index 00000000..40c1447c Binary files /dev/null and b/min/Geo/png/flags/256/LT.png differ diff --git a/min/Geo/png/flags/256/LU.png b/min/Geo/png/flags/256/LU.png new file mode 100644 index 00000000..4586a59f Binary files /dev/null and b/min/Geo/png/flags/256/LU.png differ diff --git a/min/Geo/png/flags/256/LV.png b/min/Geo/png/flags/256/LV.png new file mode 100644 index 00000000..c4480e66 Binary files /dev/null and b/min/Geo/png/flags/256/LV.png differ diff --git a/min/Geo/png/flags/256/LY.png b/min/Geo/png/flags/256/LY.png new file mode 100644 index 00000000..d485bfb2 Binary files /dev/null and b/min/Geo/png/flags/256/LY.png differ diff --git a/min/Geo/png/flags/256/MA.png b/min/Geo/png/flags/256/MA.png new file mode 100644 index 00000000..137831c6 Binary files /dev/null and b/min/Geo/png/flags/256/MA.png differ diff --git a/min/Geo/png/flags/256/MC.png b/min/Geo/png/flags/256/MC.png new file mode 100644 index 00000000..70370409 Binary files /dev/null and b/min/Geo/png/flags/256/MC.png differ diff --git a/min/Geo/png/flags/256/MD-SN.png b/min/Geo/png/flags/256/MD-SN.png new file mode 100644 index 00000000..78d5508a Binary files /dev/null and b/min/Geo/png/flags/256/MD-SN.png differ diff --git a/min/Geo/png/flags/256/MD.png b/min/Geo/png/flags/256/MD.png new file mode 100644 index 00000000..37e6d307 Binary files /dev/null and b/min/Geo/png/flags/256/MD.png differ diff --git a/min/Geo/png/flags/256/ME.png b/min/Geo/png/flags/256/ME.png new file mode 100644 index 00000000..a945e1c4 Binary files /dev/null and b/min/Geo/png/flags/256/ME.png differ diff --git a/min/Geo/png/flags/256/MF.png b/min/Geo/png/flags/256/MF.png new file mode 100644 index 00000000..7453c148 Binary files /dev/null and b/min/Geo/png/flags/256/MF.png differ diff --git a/min/Geo/png/flags/256/MG.png b/min/Geo/png/flags/256/MG.png new file mode 100644 index 00000000..7e43ad3a Binary files /dev/null and b/min/Geo/png/flags/256/MG.png differ diff --git a/min/Geo/png/flags/256/MH.png b/min/Geo/png/flags/256/MH.png new file mode 100644 index 00000000..268d1b57 Binary files /dev/null and b/min/Geo/png/flags/256/MH.png differ diff --git a/min/Geo/png/flags/256/MIUM.png b/min/Geo/png/flags/256/MIUM.png new file mode 100644 index 00000000..fc83e780 Binary files /dev/null and b/min/Geo/png/flags/256/MIUM.png differ diff --git a/min/Geo/png/flags/256/MK.png b/min/Geo/png/flags/256/MK.png new file mode 100644 index 00000000..c414b2a2 Binary files /dev/null and b/min/Geo/png/flags/256/MK.png differ diff --git a/min/Geo/png/flags/256/ML-AZ.png b/min/Geo/png/flags/256/ML-AZ.png new file mode 100644 index 00000000..8816d21b Binary files /dev/null and b/min/Geo/png/flags/256/ML-AZ.png differ diff --git a/min/Geo/png/flags/256/ML.png b/min/Geo/png/flags/256/ML.png new file mode 100644 index 00000000..c0fd772c Binary files /dev/null and b/min/Geo/png/flags/256/ML.png differ diff --git a/min/Geo/png/flags/256/MM.png b/min/Geo/png/flags/256/MM.png new file mode 100644 index 00000000..34f268a8 Binary files /dev/null and b/min/Geo/png/flags/256/MM.png differ diff --git a/min/Geo/png/flags/256/MN.png b/min/Geo/png/flags/256/MN.png new file mode 100644 index 00000000..96ad8c5b Binary files /dev/null and b/min/Geo/png/flags/256/MN.png differ diff --git a/min/Geo/png/flags/256/MO.png b/min/Geo/png/flags/256/MO.png new file mode 100644 index 00000000..6f5da86a Binary files /dev/null and b/min/Geo/png/flags/256/MO.png differ diff --git a/min/Geo/png/flags/256/MP.png b/min/Geo/png/flags/256/MP.png new file mode 100644 index 00000000..dd59a1f2 Binary files /dev/null and b/min/Geo/png/flags/256/MP.png differ diff --git a/min/Geo/png/flags/256/MQ.png b/min/Geo/png/flags/256/MQ.png new file mode 100644 index 00000000..b189e953 Binary files /dev/null and b/min/Geo/png/flags/256/MQ.png differ diff --git a/min/Geo/png/flags/256/MR.png b/min/Geo/png/flags/256/MR.png new file mode 100644 index 00000000..5a9fae8e Binary files /dev/null and b/min/Geo/png/flags/256/MR.png differ diff --git a/min/Geo/png/flags/256/MS.png b/min/Geo/png/flags/256/MS.png new file mode 100644 index 00000000..ef179471 Binary files /dev/null and b/min/Geo/png/flags/256/MS.png differ diff --git a/min/Geo/png/flags/256/MT.png b/min/Geo/png/flags/256/MT.png new file mode 100644 index 00000000..c69ca42c Binary files /dev/null and b/min/Geo/png/flags/256/MT.png differ diff --git a/min/Geo/png/flags/256/MU.png b/min/Geo/png/flags/256/MU.png new file mode 100644 index 00000000..f8b13a7a Binary files /dev/null and b/min/Geo/png/flags/256/MU.png differ diff --git a/min/Geo/png/flags/256/MV.png b/min/Geo/png/flags/256/MV.png new file mode 100644 index 00000000..b8ea7b2f Binary files /dev/null and b/min/Geo/png/flags/256/MV.png differ diff --git a/min/Geo/png/flags/256/MW.png b/min/Geo/png/flags/256/MW.png new file mode 100644 index 00000000..ddd10fb2 Binary files /dev/null and b/min/Geo/png/flags/256/MW.png differ diff --git a/min/Geo/png/flags/256/MX.png b/min/Geo/png/flags/256/MX.png new file mode 100644 index 00000000..a34b86ab Binary files /dev/null and b/min/Geo/png/flags/256/MX.png differ diff --git a/min/Geo/png/flags/256/MY.png b/min/Geo/png/flags/256/MY.png new file mode 100644 index 00000000..8eff2fe6 Binary files /dev/null and b/min/Geo/png/flags/256/MY.png differ diff --git a/min/Geo/png/flags/256/MZ.png b/min/Geo/png/flags/256/MZ.png new file mode 100644 index 00000000..1a475016 Binary files /dev/null and b/min/Geo/png/flags/256/MZ.png differ diff --git a/min/Geo/png/flags/256/NA.png b/min/Geo/png/flags/256/NA.png new file mode 100644 index 00000000..0ad03448 Binary files /dev/null and b/min/Geo/png/flags/256/NA.png differ diff --git a/min/Geo/png/flags/256/NC.png b/min/Geo/png/flags/256/NC.png new file mode 100644 index 00000000..4d179cc7 Binary files /dev/null and b/min/Geo/png/flags/256/NC.png differ diff --git a/min/Geo/png/flags/256/NE.png b/min/Geo/png/flags/256/NE.png new file mode 100644 index 00000000..428a4475 Binary files /dev/null and b/min/Geo/png/flags/256/NE.png differ diff --git a/min/Geo/png/flags/256/NF.png b/min/Geo/png/flags/256/NF.png new file mode 100644 index 00000000..4f5bae78 Binary files /dev/null and b/min/Geo/png/flags/256/NF.png differ diff --git a/min/Geo/png/flags/256/NG-BI.png b/min/Geo/png/flags/256/NG-BI.png new file mode 100644 index 00000000..a3c0bada Binary files /dev/null and b/min/Geo/png/flags/256/NG-BI.png differ diff --git a/min/Geo/png/flags/256/NG.png b/min/Geo/png/flags/256/NG.png new file mode 100644 index 00000000..7f4ead0c Binary files /dev/null and b/min/Geo/png/flags/256/NG.png differ diff --git a/min/Geo/png/flags/256/NHVU-TF.png b/min/Geo/png/flags/256/NHVU-TF.png new file mode 100644 index 00000000..8183514b Binary files /dev/null and b/min/Geo/png/flags/256/NHVU-TF.png differ diff --git a/min/Geo/png/flags/256/NHVU-TN.png b/min/Geo/png/flags/256/NHVU-TN.png new file mode 100644 index 00000000..04056225 Binary files /dev/null and b/min/Geo/png/flags/256/NHVU-TN.png differ diff --git a/min/Geo/png/flags/256/NHVU-VE.png b/min/Geo/png/flags/256/NHVU-VE.png new file mode 100644 index 00000000..af2f011c Binary files /dev/null and b/min/Geo/png/flags/256/NHVU-VE.png differ diff --git a/min/Geo/png/flags/256/NHVU.png b/min/Geo/png/flags/256/NHVU.png new file mode 100644 index 00000000..25850b60 Binary files /dev/null and b/min/Geo/png/flags/256/NHVU.png differ diff --git a/min/Geo/png/flags/256/NI.png b/min/Geo/png/flags/256/NI.png new file mode 100644 index 00000000..612379fa Binary files /dev/null and b/min/Geo/png/flags/256/NI.png differ diff --git a/min/Geo/png/flags/256/NL.png b/min/Geo/png/flags/256/NL.png new file mode 100644 index 00000000..47b49ec5 Binary files /dev/null and b/min/Geo/png/flags/256/NL.png differ diff --git a/min/Geo/png/flags/256/NO-PI.png b/min/Geo/png/flags/256/NO-PI.png new file mode 100644 index 00000000..702cefa7 Binary files /dev/null and b/min/Geo/png/flags/256/NO-PI.png differ diff --git a/min/Geo/png/flags/256/NO.png b/min/Geo/png/flags/256/NO.png new file mode 100644 index 00000000..702cefa7 Binary files /dev/null and b/min/Geo/png/flags/256/NO.png differ diff --git a/min/Geo/png/flags/256/NP.png b/min/Geo/png/flags/256/NP.png new file mode 100644 index 00000000..e65d579c Binary files /dev/null and b/min/Geo/png/flags/256/NP.png differ diff --git a/min/Geo/png/flags/256/NQAQ.png b/min/Geo/png/flags/256/NQAQ.png new file mode 100644 index 00000000..702cefa7 Binary files /dev/null and b/min/Geo/png/flags/256/NQAQ.png differ diff --git a/min/Geo/png/flags/256/NR.png b/min/Geo/png/flags/256/NR.png new file mode 100644 index 00000000..d99a7484 Binary files /dev/null and b/min/Geo/png/flags/256/NR.png differ diff --git a/min/Geo/png/flags/256/NTHH.png b/min/Geo/png/flags/256/NTHH.png new file mode 100644 index 00000000..fe4052e0 Binary files /dev/null and b/min/Geo/png/flags/256/NTHH.png differ diff --git a/min/Geo/png/flags/256/NU.png b/min/Geo/png/flags/256/NU.png new file mode 100644 index 00000000..22e1fd79 Binary files /dev/null and b/min/Geo/png/flags/256/NU.png differ diff --git a/min/Geo/png/flags/256/NZ-AQ.png b/min/Geo/png/flags/256/NZ-AQ.png new file mode 100644 index 00000000..1c2326af Binary files /dev/null and b/min/Geo/png/flags/256/NZ-AQ.png differ diff --git a/min/Geo/png/flags/256/NZ.png b/min/Geo/png/flags/256/NZ.png new file mode 100644 index 00000000..1c2326af Binary files /dev/null and b/min/Geo/png/flags/256/NZ.png differ diff --git a/min/Geo/png/flags/256/OM.png b/min/Geo/png/flags/256/OM.png new file mode 100644 index 00000000..f8ca571f Binary files /dev/null and b/min/Geo/png/flags/256/OM.png differ diff --git a/min/Geo/png/flags/256/PA.png b/min/Geo/png/flags/256/PA.png new file mode 100644 index 00000000..7d0bc63a Binary files /dev/null and b/min/Geo/png/flags/256/PA.png differ diff --git a/min/Geo/png/flags/256/PCHH.png b/min/Geo/png/flags/256/PCHH.png new file mode 100644 index 00000000..23358a75 Binary files /dev/null and b/min/Geo/png/flags/256/PCHH.png differ diff --git a/min/Geo/png/flags/256/PE.png b/min/Geo/png/flags/256/PE.png new file mode 100644 index 00000000..0754a1b9 Binary files /dev/null and b/min/Geo/png/flags/256/PE.png differ diff --git a/min/Geo/png/flags/256/PF.png b/min/Geo/png/flags/256/PF.png new file mode 100644 index 00000000..3b03d715 Binary files /dev/null and b/min/Geo/png/flags/256/PF.png differ diff --git a/min/Geo/png/flags/256/PG-NSA.png b/min/Geo/png/flags/256/PG-NSA.png new file mode 100644 index 00000000..d7e2709b Binary files /dev/null and b/min/Geo/png/flags/256/PG-NSA.png differ diff --git a/min/Geo/png/flags/256/PG.png b/min/Geo/png/flags/256/PG.png new file mode 100644 index 00000000..fe3a5ff1 Binary files /dev/null and b/min/Geo/png/flags/256/PG.png differ diff --git a/min/Geo/png/flags/256/PH.png b/min/Geo/png/flags/256/PH.png new file mode 100644 index 00000000..b2c5de05 Binary files /dev/null and b/min/Geo/png/flags/256/PH.png differ diff --git a/min/Geo/png/flags/256/PK-JK.png b/min/Geo/png/flags/256/PK-JK.png new file mode 100644 index 00000000..a23abf1c Binary files /dev/null and b/min/Geo/png/flags/256/PK-JK.png differ diff --git a/min/Geo/png/flags/256/PK-NA.png b/min/Geo/png/flags/256/PK-NA.png new file mode 100644 index 00000000..9a0ba2d2 Binary files /dev/null and b/min/Geo/png/flags/256/PK-NA.png differ diff --git a/min/Geo/png/flags/256/PK.png b/min/Geo/png/flags/256/PK.png new file mode 100644 index 00000000..a27a1592 Binary files /dev/null and b/min/Geo/png/flags/256/PK.png differ diff --git a/min/Geo/png/flags/256/PL.png b/min/Geo/png/flags/256/PL.png new file mode 100644 index 00000000..ac548cf3 Binary files /dev/null and b/min/Geo/png/flags/256/PL.png differ diff --git a/min/Geo/png/flags/256/PM.png b/min/Geo/png/flags/256/PM.png new file mode 100644 index 00000000..e1d287a6 Binary files /dev/null and b/min/Geo/png/flags/256/PM.png differ diff --git a/min/Geo/png/flags/256/PN.png b/min/Geo/png/flags/256/PN.png new file mode 100644 index 00000000..4436bb7f Binary files /dev/null and b/min/Geo/png/flags/256/PN.png differ diff --git a/min/Geo/png/flags/256/PR.png b/min/Geo/png/flags/256/PR.png new file mode 100644 index 00000000..3e81f032 Binary files /dev/null and b/min/Geo/png/flags/256/PR.png differ diff --git a/min/Geo/png/flags/256/PS.png b/min/Geo/png/flags/256/PS.png new file mode 100644 index 00000000..6c061f19 Binary files /dev/null and b/min/Geo/png/flags/256/PS.png differ diff --git a/min/Geo/png/flags/256/PT.png b/min/Geo/png/flags/256/PT.png new file mode 100644 index 00000000..d41ec8f3 Binary files /dev/null and b/min/Geo/png/flags/256/PT.png differ diff --git a/min/Geo/png/flags/256/PUUM.png b/min/Geo/png/flags/256/PUUM.png new file mode 100644 index 00000000..53568eb0 Binary files /dev/null and b/min/Geo/png/flags/256/PUUM.png differ diff --git a/min/Geo/png/flags/256/PW.png b/min/Geo/png/flags/256/PW.png new file mode 100644 index 00000000..953f85f7 Binary files /dev/null and b/min/Geo/png/flags/256/PW.png differ diff --git a/min/Geo/png/flags/256/PY.png b/min/Geo/png/flags/256/PY.png new file mode 100644 index 00000000..274804b3 Binary files /dev/null and b/min/Geo/png/flags/256/PY.png differ diff --git a/min/Geo/png/flags/256/PZPA.png b/min/Geo/png/flags/256/PZPA.png new file mode 100644 index 00000000..f78c5b4c Binary files /dev/null and b/min/Geo/png/flags/256/PZPA.png differ diff --git a/min/Geo/png/flags/256/QA.png b/min/Geo/png/flags/256/QA.png new file mode 100644 index 00000000..ae0a3d5f Binary files /dev/null and b/min/Geo/png/flags/256/QA.png differ diff --git a/min/Geo/png/flags/256/RE.png b/min/Geo/png/flags/256/RE.png new file mode 100644 index 00000000..782f6edb Binary files /dev/null and b/min/Geo/png/flags/256/RE.png differ diff --git a/min/Geo/png/flags/256/RHZW-RH.png b/min/Geo/png/flags/256/RHZW-RH.png new file mode 100644 index 00000000..7e89ff04 Binary files /dev/null and b/min/Geo/png/flags/256/RHZW-RH.png differ diff --git a/min/Geo/png/flags/256/RHZW-ZR.png b/min/Geo/png/flags/256/RHZW-ZR.png new file mode 100644 index 00000000..744b6217 Binary files /dev/null and b/min/Geo/png/flags/256/RHZW-ZR.png differ diff --git a/min/Geo/png/flags/256/RHZW.png b/min/Geo/png/flags/256/RHZW.png new file mode 100644 index 00000000..e65944bd Binary files /dev/null and b/min/Geo/png/flags/256/RHZW.png differ diff --git a/min/Geo/png/flags/256/RO.png b/min/Geo/png/flags/256/RO.png new file mode 100644 index 00000000..19ef860a Binary files /dev/null and b/min/Geo/png/flags/256/RO.png differ diff --git a/min/Geo/png/flags/256/RS.png b/min/Geo/png/flags/256/RS.png new file mode 100644 index 00000000..9170f698 Binary files /dev/null and b/min/Geo/png/flags/256/RS.png differ diff --git a/min/Geo/png/flags/256/RU-CE.png b/min/Geo/png/flags/256/RU-CE.png new file mode 100644 index 00000000..2c72d05a Binary files /dev/null and b/min/Geo/png/flags/256/RU-CE.png differ diff --git a/min/Geo/png/flags/256/RU.png b/min/Geo/png/flags/256/RU.png new file mode 100644 index 00000000..3a120741 Binary files /dev/null and b/min/Geo/png/flags/256/RU.png differ diff --git a/min/Geo/png/flags/256/RW.png b/min/Geo/png/flags/256/RW.png new file mode 100644 index 00000000..ed009064 Binary files /dev/null and b/min/Geo/png/flags/256/RW.png differ diff --git a/min/Geo/png/flags/256/SA.png b/min/Geo/png/flags/256/SA.png new file mode 100644 index 00000000..892dbc00 Binary files /dev/null and b/min/Geo/png/flags/256/SA.png differ diff --git a/min/Geo/png/flags/256/SB.png b/min/Geo/png/flags/256/SB.png new file mode 100644 index 00000000..0871bade Binary files /dev/null and b/min/Geo/png/flags/256/SB.png differ diff --git a/min/Geo/png/flags/256/SC.png b/min/Geo/png/flags/256/SC.png new file mode 100644 index 00000000..52b790b8 Binary files /dev/null and b/min/Geo/png/flags/256/SC.png differ diff --git a/min/Geo/png/flags/256/SD.png b/min/Geo/png/flags/256/SD.png new file mode 100644 index 00000000..14127162 Binary files /dev/null and b/min/Geo/png/flags/256/SD.png differ diff --git a/min/Geo/png/flags/256/SE.png b/min/Geo/png/flags/256/SE.png new file mode 100644 index 00000000..34bf6b20 Binary files /dev/null and b/min/Geo/png/flags/256/SE.png differ diff --git a/min/Geo/png/flags/256/SG.png b/min/Geo/png/flags/256/SG.png new file mode 100644 index 00000000..37402f13 Binary files /dev/null and b/min/Geo/png/flags/256/SG.png differ diff --git a/min/Geo/png/flags/256/SH.png b/min/Geo/png/flags/256/SH.png new file mode 100644 index 00000000..e67b6663 Binary files /dev/null and b/min/Geo/png/flags/256/SH.png differ diff --git a/min/Geo/png/flags/256/SI.png b/min/Geo/png/flags/256/SI.png new file mode 100644 index 00000000..44cef2fa Binary files /dev/null and b/min/Geo/png/flags/256/SI.png differ diff --git a/min/Geo/png/flags/256/SITH.png b/min/Geo/png/flags/256/SITH.png new file mode 100644 index 00000000..fa3785fe Binary files /dev/null and b/min/Geo/png/flags/256/SITH.png differ diff --git a/min/Geo/png/flags/256/SJ.png b/min/Geo/png/flags/256/SJ.png new file mode 100644 index 00000000..702cefa7 Binary files /dev/null and b/min/Geo/png/flags/256/SJ.png differ diff --git a/min/Geo/png/flags/256/SK.png b/min/Geo/png/flags/256/SK.png new file mode 100644 index 00000000..7e28060f Binary files /dev/null and b/min/Geo/png/flags/256/SK.png differ diff --git a/min/Geo/png/flags/256/SKIN.png b/min/Geo/png/flags/256/SKIN.png new file mode 100644 index 00000000..36418234 Binary files /dev/null and b/min/Geo/png/flags/256/SKIN.png differ diff --git a/min/Geo/png/flags/256/SL.png b/min/Geo/png/flags/256/SL.png new file mode 100644 index 00000000..920e8c67 Binary files /dev/null and b/min/Geo/png/flags/256/SL.png differ diff --git a/min/Geo/png/flags/256/SM.png b/min/Geo/png/flags/256/SM.png new file mode 100644 index 00000000..69212113 Binary files /dev/null and b/min/Geo/png/flags/256/SM.png differ diff --git a/min/Geo/png/flags/256/SN.png b/min/Geo/png/flags/256/SN.png new file mode 100644 index 00000000..7d634356 Binary files /dev/null and b/min/Geo/png/flags/256/SN.png differ diff --git a/min/Geo/png/flags/256/SO-SO.png b/min/Geo/png/flags/256/SO-SO.png new file mode 100644 index 00000000..49def04b Binary files /dev/null and b/min/Geo/png/flags/256/SO-SO.png differ diff --git a/min/Geo/png/flags/256/SO.png b/min/Geo/png/flags/256/SO.png new file mode 100644 index 00000000..0a5cc3e4 Binary files /dev/null and b/min/Geo/png/flags/256/SO.png differ diff --git a/min/Geo/png/flags/256/SR.png b/min/Geo/png/flags/256/SR.png new file mode 100644 index 00000000..320ccc88 Binary files /dev/null and b/min/Geo/png/flags/256/SR.png differ diff --git a/min/Geo/png/flags/256/SS.png b/min/Geo/png/flags/256/SS.png new file mode 100644 index 00000000..2d0be92d Binary files /dev/null and b/min/Geo/png/flags/256/SS.png differ diff --git a/min/Geo/png/flags/256/ST.png b/min/Geo/png/flags/256/ST.png new file mode 100644 index 00000000..cff437db Binary files /dev/null and b/min/Geo/png/flags/256/ST.png differ diff --git a/min/Geo/png/flags/256/SUHH.png b/min/Geo/png/flags/256/SUHH.png new file mode 100644 index 00000000..afef1ad8 Binary files /dev/null and b/min/Geo/png/flags/256/SUHH.png differ diff --git a/min/Geo/png/flags/256/SV.png b/min/Geo/png/flags/256/SV.png new file mode 100644 index 00000000..0dcaf6a8 Binary files /dev/null and b/min/Geo/png/flags/256/SV.png differ diff --git a/min/Geo/png/flags/256/SX.png b/min/Geo/png/flags/256/SX.png new file mode 100644 index 00000000..d9f56e0f Binary files /dev/null and b/min/Geo/png/flags/256/SX.png differ diff --git a/min/Geo/png/flags/256/SY.png b/min/Geo/png/flags/256/SY.png new file mode 100644 index 00000000..2d73fa39 Binary files /dev/null and b/min/Geo/png/flags/256/SY.png differ diff --git a/min/Geo/png/flags/256/SZ.png b/min/Geo/png/flags/256/SZ.png new file mode 100644 index 00000000..8abb1f88 Binary files /dev/null and b/min/Geo/png/flags/256/SZ.png differ diff --git a/min/Geo/png/flags/256/TA.png b/min/Geo/png/flags/256/TA.png new file mode 100644 index 00000000..22c622f1 Binary files /dev/null and b/min/Geo/png/flags/256/TA.png differ diff --git a/min/Geo/png/flags/256/TC.png b/min/Geo/png/flags/256/TC.png new file mode 100644 index 00000000..4377d980 Binary files /dev/null and b/min/Geo/png/flags/256/TC.png differ diff --git a/min/Geo/png/flags/256/TD.png b/min/Geo/png/flags/256/TD.png new file mode 100644 index 00000000..d8dc585a Binary files /dev/null and b/min/Geo/png/flags/256/TD.png differ diff --git a/min/Geo/png/flags/256/TF.png b/min/Geo/png/flags/256/TF.png new file mode 100644 index 00000000..b35a7efb Binary files /dev/null and b/min/Geo/png/flags/256/TF.png differ diff --git a/min/Geo/png/flags/256/TG.png b/min/Geo/png/flags/256/TG.png new file mode 100644 index 00000000..fd691c9a Binary files /dev/null and b/min/Geo/png/flags/256/TG.png differ diff --git a/min/Geo/png/flags/256/TH.png b/min/Geo/png/flags/256/TH.png new file mode 100644 index 00000000..e5db9ea4 Binary files /dev/null and b/min/Geo/png/flags/256/TH.png differ diff --git a/min/Geo/png/flags/256/TJ.png b/min/Geo/png/flags/256/TJ.png new file mode 100644 index 00000000..24e2f433 Binary files /dev/null and b/min/Geo/png/flags/256/TJ.png differ diff --git a/min/Geo/png/flags/256/TK.png b/min/Geo/png/flags/256/TK.png new file mode 100644 index 00000000..671fb8af Binary files /dev/null and b/min/Geo/png/flags/256/TK.png differ diff --git a/min/Geo/png/flags/256/TL.png b/min/Geo/png/flags/256/TL.png new file mode 100644 index 00000000..31474b18 Binary files /dev/null and b/min/Geo/png/flags/256/TL.png differ diff --git a/min/Geo/png/flags/256/TM.png b/min/Geo/png/flags/256/TM.png new file mode 100644 index 00000000..7e32ec42 Binary files /dev/null and b/min/Geo/png/flags/256/TM.png differ diff --git a/min/Geo/png/flags/256/TN.png b/min/Geo/png/flags/256/TN.png new file mode 100644 index 00000000..7dc0deaa Binary files /dev/null and b/min/Geo/png/flags/256/TN.png differ diff --git a/min/Geo/png/flags/256/TO.png b/min/Geo/png/flags/256/TO.png new file mode 100644 index 00000000..b5e7a3f2 Binary files /dev/null and b/min/Geo/png/flags/256/TO.png differ diff --git a/min/Geo/png/flags/256/TPTL.png b/min/Geo/png/flags/256/TPTL.png new file mode 100644 index 00000000..31474b18 Binary files /dev/null and b/min/Geo/png/flags/256/TPTL.png differ diff --git a/min/Geo/png/flags/256/TR.png b/min/Geo/png/flags/256/TR.png new file mode 100644 index 00000000..942368c8 Binary files /dev/null and b/min/Geo/png/flags/256/TR.png differ diff --git a/min/Geo/png/flags/256/TT.png b/min/Geo/png/flags/256/TT.png new file mode 100644 index 00000000..296960c1 Binary files /dev/null and b/min/Geo/png/flags/256/TT.png differ diff --git a/min/Geo/png/flags/256/TV.png b/min/Geo/png/flags/256/TV.png new file mode 100644 index 00000000..b05f8dd9 Binary files /dev/null and b/min/Geo/png/flags/256/TV.png differ diff --git a/min/Geo/png/flags/256/TW.png b/min/Geo/png/flags/256/TW.png new file mode 100644 index 00000000..872be394 Binary files /dev/null and b/min/Geo/png/flags/256/TW.png differ diff --git a/min/Geo/png/flags/256/TZ.png b/min/Geo/png/flags/256/TZ.png new file mode 100644 index 00000000..12deda9e Binary files /dev/null and b/min/Geo/png/flags/256/TZ.png differ diff --git a/min/Geo/png/flags/256/UA.png b/min/Geo/png/flags/256/UA.png new file mode 100644 index 00000000..87e09285 Binary files /dev/null and b/min/Geo/png/flags/256/UA.png differ diff --git a/min/Geo/png/flags/256/UAUA.png b/min/Geo/png/flags/256/UAUA.png new file mode 100644 index 00000000..cfa57d2a Binary files /dev/null and b/min/Geo/png/flags/256/UAUA.png differ diff --git a/min/Geo/png/flags/256/UG-RW.png b/min/Geo/png/flags/256/UG-RW.png new file mode 100644 index 00000000..6ae552fd Binary files /dev/null and b/min/Geo/png/flags/256/UG-RW.png differ diff --git a/min/Geo/png/flags/256/UG.png b/min/Geo/png/flags/256/UG.png new file mode 100644 index 00000000..24f7a419 Binary files /dev/null and b/min/Geo/png/flags/256/UG.png differ diff --git a/min/Geo/png/flags/256/UK.png b/min/Geo/png/flags/256/UK.png new file mode 100644 index 00000000..d7cc7910 Binary files /dev/null and b/min/Geo/png/flags/256/UK.png differ diff --git a/min/Geo/png/flags/256/UM.png b/min/Geo/png/flags/256/UM.png new file mode 100644 index 00000000..53568eb0 Binary files /dev/null and b/min/Geo/png/flags/256/UM.png differ diff --git a/min/Geo/png/flags/256/US.png b/min/Geo/png/flags/256/US.png new file mode 100644 index 00000000..53568eb0 Binary files /dev/null and b/min/Geo/png/flags/256/US.png differ diff --git a/min/Geo/png/flags/256/UY.png b/min/Geo/png/flags/256/UY.png new file mode 100644 index 00000000..24c49025 Binary files /dev/null and b/min/Geo/png/flags/256/UY.png differ diff --git a/min/Geo/png/flags/256/UZ.png b/min/Geo/png/flags/256/UZ.png new file mode 100644 index 00000000..dfcbdfe8 Binary files /dev/null and b/min/Geo/png/flags/256/UZ.png differ diff --git a/min/Geo/png/flags/256/VA.png b/min/Geo/png/flags/256/VA.png new file mode 100644 index 00000000..64109612 Binary files /dev/null and b/min/Geo/png/flags/256/VA.png differ diff --git a/min/Geo/png/flags/256/VC.png b/min/Geo/png/flags/256/VC.png new file mode 100644 index 00000000..5704f335 Binary files /dev/null and b/min/Geo/png/flags/256/VC.png differ diff --git a/min/Geo/png/flags/256/VDVN.png b/min/Geo/png/flags/256/VDVN.png new file mode 100644 index 00000000..fec715eb Binary files /dev/null and b/min/Geo/png/flags/256/VDVN.png differ diff --git a/min/Geo/png/flags/256/VE.png b/min/Geo/png/flags/256/VE.png new file mode 100644 index 00000000..e0f974f0 Binary files /dev/null and b/min/Geo/png/flags/256/VE.png differ diff --git a/min/Geo/png/flags/256/VG.png b/min/Geo/png/flags/256/VG.png new file mode 100644 index 00000000..ad82be7c Binary files /dev/null and b/min/Geo/png/flags/256/VG.png differ diff --git a/min/Geo/png/flags/256/VI.png b/min/Geo/png/flags/256/VI.png new file mode 100644 index 00000000..fda2bf07 Binary files /dev/null and b/min/Geo/png/flags/256/VI.png differ diff --git a/min/Geo/png/flags/256/VN.png b/min/Geo/png/flags/256/VN.png new file mode 100644 index 00000000..8b2b8bca Binary files /dev/null and b/min/Geo/png/flags/256/VN.png differ diff --git a/min/Geo/png/flags/256/VNVN.png b/min/Geo/png/flags/256/VNVN.png new file mode 100644 index 00000000..d4b84a0b Binary files /dev/null and b/min/Geo/png/flags/256/VNVN.png differ diff --git a/min/Geo/png/flags/256/VU.png b/min/Geo/png/flags/256/VU.png new file mode 100644 index 00000000..9956847c Binary files /dev/null and b/min/Geo/png/flags/256/VU.png differ diff --git a/min/Geo/png/flags/256/WF.png b/min/Geo/png/flags/256/WF.png new file mode 100644 index 00000000..0c996c92 Binary files /dev/null and b/min/Geo/png/flags/256/WF.png differ diff --git a/min/Geo/png/flags/256/WKUM.png b/min/Geo/png/flags/256/WKUM.png new file mode 100644 index 00000000..45b867ac Binary files /dev/null and b/min/Geo/png/flags/256/WKUM.png differ diff --git a/min/Geo/png/flags/256/WS.png b/min/Geo/png/flags/256/WS.png new file mode 100644 index 00000000..0a7ca938 Binary files /dev/null and b/min/Geo/png/flags/256/WS.png differ diff --git a/min/Geo/png/flags/256/XK.png b/min/Geo/png/flags/256/XK.png new file mode 100644 index 00000000..d5aa44aa Binary files /dev/null and b/min/Geo/png/flags/256/XK.png differ diff --git a/min/Geo/png/flags/256/YDYE.png b/min/Geo/png/flags/256/YDYE.png new file mode 100644 index 00000000..ffc5751e Binary files /dev/null and b/min/Geo/png/flags/256/YDYE.png differ diff --git a/min/Geo/png/flags/256/YE.png b/min/Geo/png/flags/256/YE.png new file mode 100644 index 00000000..df0d8654 Binary files /dev/null and b/min/Geo/png/flags/256/YE.png differ diff --git a/min/Geo/png/flags/256/YEYE.png b/min/Geo/png/flags/256/YEYE.png new file mode 100644 index 00000000..914e08a0 Binary files /dev/null and b/min/Geo/png/flags/256/YEYE.png differ diff --git a/min/Geo/png/flags/256/YT.png b/min/Geo/png/flags/256/YT.png new file mode 100644 index 00000000..e0ad2a15 Binary files /dev/null and b/min/Geo/png/flags/256/YT.png differ diff --git a/min/Geo/png/flags/256/YUCS.png b/min/Geo/png/flags/256/YUCS.png new file mode 100644 index 00000000..f3fb49f1 Binary files /dev/null and b/min/Geo/png/flags/256/YUCS.png differ diff --git a/min/Geo/png/flags/256/ZA-BO.png b/min/Geo/png/flags/256/ZA-BO.png new file mode 100644 index 00000000..b542c47a Binary files /dev/null and b/min/Geo/png/flags/256/ZA-BO.png differ diff --git a/min/Geo/png/flags/256/ZA-CI.png b/min/Geo/png/flags/256/ZA-CI.png new file mode 100644 index 00000000..b510a53f Binary files /dev/null and b/min/Geo/png/flags/256/ZA-CI.png differ diff --git a/min/Geo/png/flags/256/ZA-TR.png b/min/Geo/png/flags/256/ZA-TR.png new file mode 100644 index 00000000..dccd4ae3 Binary files /dev/null and b/min/Geo/png/flags/256/ZA-TR.png differ diff --git a/min/Geo/png/flags/256/ZA-VE.png b/min/Geo/png/flags/256/ZA-VE.png new file mode 100644 index 00000000..d297a060 Binary files /dev/null and b/min/Geo/png/flags/256/ZA-VE.png differ diff --git a/min/Geo/png/flags/256/ZA.png b/min/Geo/png/flags/256/ZA.png new file mode 100644 index 00000000..3ef2d725 Binary files /dev/null and b/min/Geo/png/flags/256/ZA.png differ diff --git a/min/Geo/png/flags/256/ZM.png b/min/Geo/png/flags/256/ZM.png new file mode 100644 index 00000000..bd89ac46 Binary files /dev/null and b/min/Geo/png/flags/256/ZM.png differ diff --git a/min/Geo/png/flags/256/ZRCD.png b/min/Geo/png/flags/256/ZRCD.png new file mode 100644 index 00000000..457b1fe2 Binary files /dev/null and b/min/Geo/png/flags/256/ZRCD.png differ diff --git a/min/Geo/png/flags/256/ZW.png b/min/Geo/png/flags/256/ZW.png new file mode 100644 index 00000000..c34f8f00 Binary files /dev/null and b/min/Geo/png/flags/256/ZW.png differ diff --git a/min/Geo/png/flags/64/AC.png b/min/Geo/png/flags/64/AC.png new file mode 100644 index 00000000..f588ddd1 Binary files /dev/null and b/min/Geo/png/flags/64/AC.png differ diff --git a/min/Geo/png/flags/64/AD.png b/min/Geo/png/flags/64/AD.png new file mode 100644 index 00000000..06623a64 Binary files /dev/null and b/min/Geo/png/flags/64/AD.png differ diff --git a/min/Geo/png/flags/64/AE-AJ.png b/min/Geo/png/flags/64/AE-AJ.png new file mode 100644 index 00000000..62bca4d9 Binary files /dev/null and b/min/Geo/png/flags/64/AE-AJ.png differ diff --git a/min/Geo/png/flags/64/AE-AZ.png b/min/Geo/png/flags/64/AE-AZ.png new file mode 100644 index 00000000..cf634945 Binary files /dev/null and b/min/Geo/png/flags/64/AE-AZ.png differ diff --git a/min/Geo/png/flags/64/AE-DU.png b/min/Geo/png/flags/64/AE-DU.png new file mode 100644 index 00000000..62bca4d9 Binary files /dev/null and b/min/Geo/png/flags/64/AE-DU.png differ diff --git a/min/Geo/png/flags/64/AE-FU.png b/min/Geo/png/flags/64/AE-FU.png new file mode 100644 index 00000000..6b2345b3 Binary files /dev/null and b/min/Geo/png/flags/64/AE-FU.png differ diff --git a/min/Geo/png/flags/64/AE-RK.png b/min/Geo/png/flags/64/AE-RK.png new file mode 100644 index 00000000..c36e70c1 Binary files /dev/null and b/min/Geo/png/flags/64/AE-RK.png differ diff --git a/min/Geo/png/flags/64/AE-SH.png b/min/Geo/png/flags/64/AE-SH.png new file mode 100644 index 00000000..c36e70c1 Binary files /dev/null and b/min/Geo/png/flags/64/AE-SH.png differ diff --git a/min/Geo/png/flags/64/AE-UQ.png b/min/Geo/png/flags/64/AE-UQ.png new file mode 100644 index 00000000..6f1c6c9b Binary files /dev/null and b/min/Geo/png/flags/64/AE-UQ.png differ diff --git a/min/Geo/png/flags/64/AE.png b/min/Geo/png/flags/64/AE.png new file mode 100644 index 00000000..6b2345b3 Binary files /dev/null and b/min/Geo/png/flags/64/AE.png differ diff --git a/min/Geo/png/flags/64/AF.png b/min/Geo/png/flags/64/AF.png new file mode 100644 index 00000000..791f72f5 Binary files /dev/null and b/min/Geo/png/flags/64/AF.png differ diff --git a/min/Geo/png/flags/64/AG.png b/min/Geo/png/flags/64/AG.png new file mode 100644 index 00000000..1accfd15 Binary files /dev/null and b/min/Geo/png/flags/64/AG.png differ diff --git a/min/Geo/png/flags/64/AI.png b/min/Geo/png/flags/64/AI.png new file mode 100644 index 00000000..f4c929d3 Binary files /dev/null and b/min/Geo/png/flags/64/AI.png differ diff --git a/min/Geo/png/flags/64/AIDJ.png b/min/Geo/png/flags/64/AIDJ.png new file mode 100644 index 00000000..9ca1346a Binary files /dev/null and b/min/Geo/png/flags/64/AIDJ.png differ diff --git a/min/Geo/png/flags/64/AL.png b/min/Geo/png/flags/64/AL.png new file mode 100644 index 00000000..b406ed08 Binary files /dev/null and b/min/Geo/png/flags/64/AL.png differ diff --git a/min/Geo/png/flags/64/AM.png b/min/Geo/png/flags/64/AM.png new file mode 100644 index 00000000..f5d8a9dc Binary files /dev/null and b/min/Geo/png/flags/64/AM.png differ diff --git a/min/Geo/png/flags/64/ANHH.png b/min/Geo/png/flags/64/ANHH.png new file mode 100644 index 00000000..2fc1037b Binary files /dev/null and b/min/Geo/png/flags/64/ANHH.png differ diff --git a/min/Geo/png/flags/64/AO-CAB.png b/min/Geo/png/flags/64/AO-CAB.png new file mode 100644 index 00000000..b13554f9 Binary files /dev/null and b/min/Geo/png/flags/64/AO-CAB.png differ diff --git a/min/Geo/png/flags/64/AO.png b/min/Geo/png/flags/64/AO.png new file mode 100644 index 00000000..33514370 Binary files /dev/null and b/min/Geo/png/flags/64/AO.png differ diff --git a/min/Geo/png/flags/64/AQ.png b/min/Geo/png/flags/64/AQ.png new file mode 100644 index 00000000..de83d79b Binary files /dev/null and b/min/Geo/png/flags/64/AQ.png differ diff --git a/min/Geo/png/flags/64/AR-AQ.png b/min/Geo/png/flags/64/AR-AQ.png new file mode 100644 index 00000000..ab60b85c Binary files /dev/null and b/min/Geo/png/flags/64/AR-AQ.png differ diff --git a/min/Geo/png/flags/64/AR.png b/min/Geo/png/flags/64/AR.png new file mode 100644 index 00000000..3b2678c7 Binary files /dev/null and b/min/Geo/png/flags/64/AR.png differ diff --git a/min/Geo/png/flags/64/AS.png b/min/Geo/png/flags/64/AS.png new file mode 100644 index 00000000..66e75715 Binary files /dev/null and b/min/Geo/png/flags/64/AS.png differ diff --git a/min/Geo/png/flags/64/AT.png b/min/Geo/png/flags/64/AT.png new file mode 100644 index 00000000..1550838d Binary files /dev/null and b/min/Geo/png/flags/64/AT.png differ diff --git a/min/Geo/png/flags/64/AU-AC.png b/min/Geo/png/flags/64/AU-AC.png new file mode 100644 index 00000000..98ef1f55 Binary files /dev/null and b/min/Geo/png/flags/64/AU-AC.png differ diff --git a/min/Geo/png/flags/64/AU-AQ.png b/min/Geo/png/flags/64/AU-AQ.png new file mode 100644 index 00000000..98ef1f55 Binary files /dev/null and b/min/Geo/png/flags/64/AU-AQ.png differ diff --git a/min/Geo/png/flags/64/AU-CS.png b/min/Geo/png/flags/64/AU-CS.png new file mode 100644 index 00000000..98ef1f55 Binary files /dev/null and b/min/Geo/png/flags/64/AU-CS.png differ diff --git a/min/Geo/png/flags/64/AU.png b/min/Geo/png/flags/64/AU.png new file mode 100644 index 00000000..98ef1f55 Binary files /dev/null and b/min/Geo/png/flags/64/AU.png differ diff --git a/min/Geo/png/flags/64/AW.png b/min/Geo/png/flags/64/AW.png new file mode 100644 index 00000000..0d34ccf7 Binary files /dev/null and b/min/Geo/png/flags/64/AW.png differ diff --git a/min/Geo/png/flags/64/AX.png b/min/Geo/png/flags/64/AX.png new file mode 100644 index 00000000..22617f45 Binary files /dev/null and b/min/Geo/png/flags/64/AX.png differ diff --git a/min/Geo/png/flags/64/AZ-NK.png b/min/Geo/png/flags/64/AZ-NK.png new file mode 100644 index 00000000..eedc0516 Binary files /dev/null and b/min/Geo/png/flags/64/AZ-NK.png differ diff --git a/min/Geo/png/flags/64/AZ.png b/min/Geo/png/flags/64/AZ.png new file mode 100644 index 00000000..27351024 Binary files /dev/null and b/min/Geo/png/flags/64/AZ.png differ diff --git a/min/Geo/png/flags/64/BA.png b/min/Geo/png/flags/64/BA.png new file mode 100644 index 00000000..d22d573d Binary files /dev/null and b/min/Geo/png/flags/64/BA.png differ diff --git a/min/Geo/png/flags/64/BB.png b/min/Geo/png/flags/64/BB.png new file mode 100644 index 00000000..a7eb0296 Binary files /dev/null and b/min/Geo/png/flags/64/BB.png differ diff --git a/min/Geo/png/flags/64/BD.png b/min/Geo/png/flags/64/BD.png new file mode 100644 index 00000000..435e1b2b Binary files /dev/null and b/min/Geo/png/flags/64/BD.png differ diff --git a/min/Geo/png/flags/64/BE.png b/min/Geo/png/flags/64/BE.png new file mode 100644 index 00000000..215ebb43 Binary files /dev/null and b/min/Geo/png/flags/64/BE.png differ diff --git a/min/Geo/png/flags/64/BF.png b/min/Geo/png/flags/64/BF.png new file mode 100644 index 00000000..5597cc25 Binary files /dev/null and b/min/Geo/png/flags/64/BF.png differ diff --git a/min/Geo/png/flags/64/BG.png b/min/Geo/png/flags/64/BG.png new file mode 100644 index 00000000..b2885d2e Binary files /dev/null and b/min/Geo/png/flags/64/BG.png differ diff --git a/min/Geo/png/flags/64/BH.png b/min/Geo/png/flags/64/BH.png new file mode 100644 index 00000000..657353c2 Binary files /dev/null and b/min/Geo/png/flags/64/BH.png differ diff --git a/min/Geo/png/flags/64/BI.png b/min/Geo/png/flags/64/BI.png new file mode 100644 index 00000000..4a81f2b2 Binary files /dev/null and b/min/Geo/png/flags/64/BI.png differ diff --git a/min/Geo/png/flags/64/BJ.png b/min/Geo/png/flags/64/BJ.png new file mode 100644 index 00000000..db5b38cc Binary files /dev/null and b/min/Geo/png/flags/64/BJ.png differ diff --git a/min/Geo/png/flags/64/BL.png b/min/Geo/png/flags/64/BL.png new file mode 100644 index 00000000..1e6363e2 Binary files /dev/null and b/min/Geo/png/flags/64/BL.png differ diff --git a/min/Geo/png/flags/64/BM.png b/min/Geo/png/flags/64/BM.png new file mode 100644 index 00000000..04dad372 Binary files /dev/null and b/min/Geo/png/flags/64/BM.png differ diff --git a/min/Geo/png/flags/64/BN.png b/min/Geo/png/flags/64/BN.png new file mode 100644 index 00000000..e710aaf1 Binary files /dev/null and b/min/Geo/png/flags/64/BN.png differ diff --git a/min/Geo/png/flags/64/BO.png b/min/Geo/png/flags/64/BO.png new file mode 100644 index 00000000..265af26b Binary files /dev/null and b/min/Geo/png/flags/64/BO.png differ diff --git a/min/Geo/png/flags/64/BQ.png b/min/Geo/png/flags/64/BQ.png new file mode 100644 index 00000000..7c94b53f Binary files /dev/null and b/min/Geo/png/flags/64/BQ.png differ diff --git a/min/Geo/png/flags/64/BQAQ.png b/min/Geo/png/flags/64/BQAQ.png new file mode 100644 index 00000000..3fc47dd2 Binary files /dev/null and b/min/Geo/png/flags/64/BQAQ.png differ diff --git a/min/Geo/png/flags/64/BR.png b/min/Geo/png/flags/64/BR.png new file mode 100644 index 00000000..e9fca010 Binary files /dev/null and b/min/Geo/png/flags/64/BR.png differ diff --git a/min/Geo/png/flags/64/BS.png b/min/Geo/png/flags/64/BS.png new file mode 100644 index 00000000..1042e51a Binary files /dev/null and b/min/Geo/png/flags/64/BS.png differ diff --git a/min/Geo/png/flags/64/BT.png b/min/Geo/png/flags/64/BT.png new file mode 100644 index 00000000..b3592c46 Binary files /dev/null and b/min/Geo/png/flags/64/BT.png differ diff --git a/min/Geo/png/flags/64/BUMM.png b/min/Geo/png/flags/64/BUMM.png new file mode 100644 index 00000000..5ace82fc Binary files /dev/null and b/min/Geo/png/flags/64/BUMM.png differ diff --git a/min/Geo/png/flags/64/BV.png b/min/Geo/png/flags/64/BV.png new file mode 100644 index 00000000..06987872 Binary files /dev/null and b/min/Geo/png/flags/64/BV.png differ diff --git a/min/Geo/png/flags/64/BW.png b/min/Geo/png/flags/64/BW.png new file mode 100644 index 00000000..20a6571d Binary files /dev/null and b/min/Geo/png/flags/64/BW.png differ diff --git a/min/Geo/png/flags/64/BY.png b/min/Geo/png/flags/64/BY.png new file mode 100644 index 00000000..6f6db72e Binary files /dev/null and b/min/Geo/png/flags/64/BY.png differ diff --git a/min/Geo/png/flags/64/BYAA.png b/min/Geo/png/flags/64/BYAA.png new file mode 100644 index 00000000..d881813a Binary files /dev/null and b/min/Geo/png/flags/64/BYAA.png differ diff --git a/min/Geo/png/flags/64/BZ.png b/min/Geo/png/flags/64/BZ.png new file mode 100644 index 00000000..455b6c21 Binary files /dev/null and b/min/Geo/png/flags/64/BZ.png differ diff --git a/min/Geo/png/flags/64/CA.png b/min/Geo/png/flags/64/CA.png new file mode 100644 index 00000000..590c3775 Binary files /dev/null and b/min/Geo/png/flags/64/CA.png differ diff --git a/min/Geo/png/flags/64/CC.png b/min/Geo/png/flags/64/CC.png new file mode 100644 index 00000000..5ab1f617 Binary files /dev/null and b/min/Geo/png/flags/64/CC.png differ diff --git a/min/Geo/png/flags/64/CD.png b/min/Geo/png/flags/64/CD.png new file mode 100644 index 00000000..e65d6e84 Binary files /dev/null and b/min/Geo/png/flags/64/CD.png differ diff --git a/min/Geo/png/flags/64/CF.png b/min/Geo/png/flags/64/CF.png new file mode 100644 index 00000000..594b8081 Binary files /dev/null and b/min/Geo/png/flags/64/CF.png differ diff --git a/min/Geo/png/flags/64/CG.png b/min/Geo/png/flags/64/CG.png new file mode 100644 index 00000000..8fd8057c Binary files /dev/null and b/min/Geo/png/flags/64/CG.png differ diff --git a/min/Geo/png/flags/64/CH.png b/min/Geo/png/flags/64/CH.png new file mode 100644 index 00000000..3722af89 Binary files /dev/null and b/min/Geo/png/flags/64/CH.png differ diff --git a/min/Geo/png/flags/64/CI.png b/min/Geo/png/flags/64/CI.png new file mode 100644 index 00000000..5376ce25 Binary files /dev/null and b/min/Geo/png/flags/64/CI.png differ diff --git a/min/Geo/png/flags/64/CK.png b/min/Geo/png/flags/64/CK.png new file mode 100644 index 00000000..4af8efca Binary files /dev/null and b/min/Geo/png/flags/64/CK.png differ diff --git a/min/Geo/png/flags/64/CL-AQ.png b/min/Geo/png/flags/64/CL-AQ.png new file mode 100644 index 00000000..7808deed Binary files /dev/null and b/min/Geo/png/flags/64/CL-AQ.png differ diff --git a/min/Geo/png/flags/64/CL.png b/min/Geo/png/flags/64/CL.png new file mode 100644 index 00000000..63856fee Binary files /dev/null and b/min/Geo/png/flags/64/CL.png differ diff --git a/min/Geo/png/flags/64/CM.png b/min/Geo/png/flags/64/CM.png new file mode 100644 index 00000000..62c2091b Binary files /dev/null and b/min/Geo/png/flags/64/CM.png differ diff --git a/min/Geo/png/flags/64/CN.png b/min/Geo/png/flags/64/CN.png new file mode 100644 index 00000000..0ce3aedb Binary files /dev/null and b/min/Geo/png/flags/64/CN.png differ diff --git a/min/Geo/png/flags/64/CO.png b/min/Geo/png/flags/64/CO.png new file mode 100644 index 00000000..6f3b9cc8 Binary files /dev/null and b/min/Geo/png/flags/64/CO.png differ diff --git a/min/Geo/png/flags/64/CP.png b/min/Geo/png/flags/64/CP.png new file mode 100644 index 00000000..9ca1346a Binary files /dev/null and b/min/Geo/png/flags/64/CP.png differ diff --git a/min/Geo/png/flags/64/CR.png b/min/Geo/png/flags/64/CR.png new file mode 100644 index 00000000..57369309 Binary files /dev/null and b/min/Geo/png/flags/64/CR.png differ diff --git a/min/Geo/png/flags/64/CSHH.png b/min/Geo/png/flags/64/CSHH.png new file mode 100644 index 00000000..1b313678 Binary files /dev/null and b/min/Geo/png/flags/64/CSHH.png differ diff --git a/min/Geo/png/flags/64/CSXX.png b/min/Geo/png/flags/64/CSXX.png new file mode 100644 index 00000000..c50ca28a Binary files /dev/null and b/min/Geo/png/flags/64/CSXX.png differ diff --git a/min/Geo/png/flags/64/CTKI.png b/min/Geo/png/flags/64/CTKI.png new file mode 100644 index 00000000..16892100 Binary files /dev/null and b/min/Geo/png/flags/64/CTKI.png differ diff --git a/min/Geo/png/flags/64/CU.png b/min/Geo/png/flags/64/CU.png new file mode 100644 index 00000000..3bed8c02 Binary files /dev/null and b/min/Geo/png/flags/64/CU.png differ diff --git a/min/Geo/png/flags/64/CV.png b/min/Geo/png/flags/64/CV.png new file mode 100644 index 00000000..ef9276b0 Binary files /dev/null and b/min/Geo/png/flags/64/CV.png differ diff --git a/min/Geo/png/flags/64/CW.png b/min/Geo/png/flags/64/CW.png new file mode 100644 index 00000000..5b74d36a Binary files /dev/null and b/min/Geo/png/flags/64/CW.png differ diff --git a/min/Geo/png/flags/64/CX.png b/min/Geo/png/flags/64/CX.png new file mode 100644 index 00000000..19f082e0 Binary files /dev/null and b/min/Geo/png/flags/64/CX.png differ diff --git a/min/Geo/png/flags/64/CY-NC.png b/min/Geo/png/flags/64/CY-NC.png new file mode 100644 index 00000000..2847e7fc Binary files /dev/null and b/min/Geo/png/flags/64/CY-NC.png differ diff --git a/min/Geo/png/flags/64/CY.png b/min/Geo/png/flags/64/CY.png new file mode 100644 index 00000000..6b0aac6e Binary files /dev/null and b/min/Geo/png/flags/64/CY.png differ diff --git a/min/Geo/png/flags/64/CZ.png b/min/Geo/png/flags/64/CZ.png new file mode 100644 index 00000000..1b313678 Binary files /dev/null and b/min/Geo/png/flags/64/CZ.png differ diff --git a/min/Geo/png/flags/64/DDDE.png b/min/Geo/png/flags/64/DDDE.png new file mode 100644 index 00000000..61b0ecc7 Binary files /dev/null and b/min/Geo/png/flags/64/DDDE.png differ diff --git a/min/Geo/png/flags/64/DE.png b/min/Geo/png/flags/64/DE.png new file mode 100644 index 00000000..1cb323dd Binary files /dev/null and b/min/Geo/png/flags/64/DE.png differ diff --git a/min/Geo/png/flags/64/DEDE.png b/min/Geo/png/flags/64/DEDE.png new file mode 100644 index 00000000..1cb323dd Binary files /dev/null and b/min/Geo/png/flags/64/DEDE.png differ diff --git a/min/Geo/png/flags/64/DG.png b/min/Geo/png/flags/64/DG.png new file mode 100644 index 00000000..61437b60 Binary files /dev/null and b/min/Geo/png/flags/64/DG.png differ diff --git a/min/Geo/png/flags/64/DJ.png b/min/Geo/png/flags/64/DJ.png new file mode 100644 index 00000000..a857c743 Binary files /dev/null and b/min/Geo/png/flags/64/DJ.png differ diff --git a/min/Geo/png/flags/64/DK.png b/min/Geo/png/flags/64/DK.png new file mode 100644 index 00000000..4c02b1fa Binary files /dev/null and b/min/Geo/png/flags/64/DK.png differ diff --git a/min/Geo/png/flags/64/DM.png b/min/Geo/png/flags/64/DM.png new file mode 100644 index 00000000..4481a234 Binary files /dev/null and b/min/Geo/png/flags/64/DM.png differ diff --git a/min/Geo/png/flags/64/DO.png b/min/Geo/png/flags/64/DO.png new file mode 100644 index 00000000..ab65760f Binary files /dev/null and b/min/Geo/png/flags/64/DO.png differ diff --git a/min/Geo/png/flags/64/DYBJ.png b/min/Geo/png/flags/64/DYBJ.png new file mode 100644 index 00000000..db5b38cc Binary files /dev/null and b/min/Geo/png/flags/64/DYBJ.png differ diff --git a/min/Geo/png/flags/64/DZ.png b/min/Geo/png/flags/64/DZ.png new file mode 100644 index 00000000..abf80716 Binary files /dev/null and b/min/Geo/png/flags/64/DZ.png differ diff --git a/min/Geo/png/flags/64/EA.png b/min/Geo/png/flags/64/EA.png new file mode 100644 index 00000000..7ceb8ca0 Binary files /dev/null and b/min/Geo/png/flags/64/EA.png differ diff --git a/min/Geo/png/flags/64/EC.png b/min/Geo/png/flags/64/EC.png new file mode 100644 index 00000000..e8be86dc Binary files /dev/null and b/min/Geo/png/flags/64/EC.png differ diff --git a/min/Geo/png/flags/64/EE.png b/min/Geo/png/flags/64/EE.png new file mode 100644 index 00000000..6d3b0783 Binary files /dev/null and b/min/Geo/png/flags/64/EE.png differ diff --git a/min/Geo/png/flags/64/EG.png b/min/Geo/png/flags/64/EG.png new file mode 100644 index 00000000..6c0f3cdd Binary files /dev/null and b/min/Geo/png/flags/64/EG.png differ diff --git a/min/Geo/png/flags/64/EGEG.png b/min/Geo/png/flags/64/EGEG.png new file mode 100644 index 00000000..26c4bf25 Binary files /dev/null and b/min/Geo/png/flags/64/EGEG.png differ diff --git a/min/Geo/png/flags/64/EH.png b/min/Geo/png/flags/64/EH.png new file mode 100644 index 00000000..99341f97 Binary files /dev/null and b/min/Geo/png/flags/64/EH.png differ diff --git a/min/Geo/png/flags/64/ER.png b/min/Geo/png/flags/64/ER.png new file mode 100644 index 00000000..2feaeab5 Binary files /dev/null and b/min/Geo/png/flags/64/ER.png differ diff --git a/min/Geo/png/flags/64/ES.png b/min/Geo/png/flags/64/ES.png new file mode 100644 index 00000000..e6dff0c5 Binary files /dev/null and b/min/Geo/png/flags/64/ES.png differ diff --git a/min/Geo/png/flags/64/ET.png b/min/Geo/png/flags/64/ET.png new file mode 100644 index 00000000..3b85718a Binary files /dev/null and b/min/Geo/png/flags/64/ET.png differ diff --git a/min/Geo/png/flags/64/EU.png b/min/Geo/png/flags/64/EU.png new file mode 100644 index 00000000..5faf8220 Binary files /dev/null and b/min/Geo/png/flags/64/EU.png differ diff --git a/min/Geo/png/flags/64/FI.png b/min/Geo/png/flags/64/FI.png new file mode 100644 index 00000000..8dc76bd5 Binary files /dev/null and b/min/Geo/png/flags/64/FI.png differ diff --git a/min/Geo/png/flags/64/FJ.png b/min/Geo/png/flags/64/FJ.png new file mode 100644 index 00000000..4991e6b4 Binary files /dev/null and b/min/Geo/png/flags/64/FJ.png differ diff --git a/min/Geo/png/flags/64/FK.png b/min/Geo/png/flags/64/FK.png new file mode 100644 index 00000000..a6c0a855 Binary files /dev/null and b/min/Geo/png/flags/64/FK.png differ diff --git a/min/Geo/png/flags/64/FM.png b/min/Geo/png/flags/64/FM.png new file mode 100644 index 00000000..c4c50d28 Binary files /dev/null and b/min/Geo/png/flags/64/FM.png differ diff --git a/min/Geo/png/flags/64/FO.png b/min/Geo/png/flags/64/FO.png new file mode 100644 index 00000000..3e68bca8 Binary files /dev/null and b/min/Geo/png/flags/64/FO.png differ diff --git a/min/Geo/png/flags/64/FQHH.png b/min/Geo/png/flags/64/FQHH.png new file mode 100644 index 00000000..606bad01 Binary files /dev/null and b/min/Geo/png/flags/64/FQHH.png differ diff --git a/min/Geo/png/flags/64/FR-AQ.png b/min/Geo/png/flags/64/FR-AQ.png new file mode 100644 index 00000000..606bad01 Binary files /dev/null and b/min/Geo/png/flags/64/FR-AQ.png differ diff --git a/min/Geo/png/flags/64/FR.png b/min/Geo/png/flags/64/FR.png new file mode 100644 index 00000000..9ca1346a Binary files /dev/null and b/min/Geo/png/flags/64/FR.png differ diff --git a/min/Geo/png/flags/64/FXFR.png b/min/Geo/png/flags/64/FXFR.png new file mode 100644 index 00000000..9ca1346a Binary files /dev/null and b/min/Geo/png/flags/64/FXFR.png differ diff --git a/min/Geo/png/flags/64/GA.png b/min/Geo/png/flags/64/GA.png new file mode 100644 index 00000000..c4353da6 Binary files /dev/null and b/min/Geo/png/flags/64/GA.png differ diff --git a/min/Geo/png/flags/64/GB-AD.png b/min/Geo/png/flags/64/GB-AD.png new file mode 100644 index 00000000..1eeabe04 Binary files /dev/null and b/min/Geo/png/flags/64/GB-AD.png differ diff --git a/min/Geo/png/flags/64/GB-ENG.png b/min/Geo/png/flags/64/GB-ENG.png new file mode 100644 index 00000000..bfd06c9d Binary files /dev/null and b/min/Geo/png/flags/64/GB-ENG.png differ diff --git a/min/Geo/png/flags/64/GB-NIR.png b/min/Geo/png/flags/64/GB-NIR.png new file mode 100644 index 00000000..3f4ecc55 Binary files /dev/null and b/min/Geo/png/flags/64/GB-NIR.png differ diff --git a/min/Geo/png/flags/64/GB-SCT.png b/min/Geo/png/flags/64/GB-SCT.png new file mode 100644 index 00000000..db9086eb Binary files /dev/null and b/min/Geo/png/flags/64/GB-SCT.png differ diff --git a/min/Geo/png/flags/64/GB-SL.png b/min/Geo/png/flags/64/GB-SL.png new file mode 100644 index 00000000..cd4589be Binary files /dev/null and b/min/Geo/png/flags/64/GB-SL.png differ diff --git a/min/Geo/png/flags/64/GB-WLS.png b/min/Geo/png/flags/64/GB-WLS.png new file mode 100644 index 00000000..f742ccad Binary files /dev/null and b/min/Geo/png/flags/64/GB-WLS.png differ diff --git a/min/Geo/png/flags/64/GB.png b/min/Geo/png/flags/64/GB.png new file mode 100644 index 00000000..1eeabe04 Binary files /dev/null and b/min/Geo/png/flags/64/GB.png differ diff --git a/min/Geo/png/flags/64/GBAE.png b/min/Geo/png/flags/64/GBAE.png new file mode 100644 index 00000000..9cb6cf33 Binary files /dev/null and b/min/Geo/png/flags/64/GBAE.png differ diff --git a/min/Geo/png/flags/64/GBBZ.png b/min/Geo/png/flags/64/GBBZ.png new file mode 100644 index 00000000..b705ffa3 Binary files /dev/null and b/min/Geo/png/flags/64/GBBZ.png differ diff --git a/min/Geo/png/flags/64/GBKN.png b/min/Geo/png/flags/64/GBKN.png new file mode 100644 index 00000000..65f97b22 Binary files /dev/null and b/min/Geo/png/flags/64/GBKN.png differ diff --git a/min/Geo/png/flags/64/GD.png b/min/Geo/png/flags/64/GD.png new file mode 100644 index 00000000..bd546aa2 Binary files /dev/null and b/min/Geo/png/flags/64/GD.png differ diff --git a/min/Geo/png/flags/64/GE-AB.png b/min/Geo/png/flags/64/GE-AB.png new file mode 100644 index 00000000..56f3e147 Binary files /dev/null and b/min/Geo/png/flags/64/GE-AB.png differ diff --git a/min/Geo/png/flags/64/GE-SK.png b/min/Geo/png/flags/64/GE-SK.png new file mode 100644 index 00000000..049fde15 Binary files /dev/null and b/min/Geo/png/flags/64/GE-SK.png differ diff --git a/min/Geo/png/flags/64/GE.png b/min/Geo/png/flags/64/GE.png new file mode 100644 index 00000000..3db7ffbf Binary files /dev/null and b/min/Geo/png/flags/64/GE.png differ diff --git a/min/Geo/png/flags/64/GEHH.png b/min/Geo/png/flags/64/GEHH.png new file mode 100644 index 00000000..16892100 Binary files /dev/null and b/min/Geo/png/flags/64/GEHH.png differ diff --git a/min/Geo/png/flags/64/GEKI.png b/min/Geo/png/flags/64/GEKI.png new file mode 100644 index 00000000..16892100 Binary files /dev/null and b/min/Geo/png/flags/64/GEKI.png differ diff --git a/min/Geo/png/flags/64/GETV.png b/min/Geo/png/flags/64/GETV.png new file mode 100644 index 00000000..16892100 Binary files /dev/null and b/min/Geo/png/flags/64/GETV.png differ diff --git a/min/Geo/png/flags/64/GF.png b/min/Geo/png/flags/64/GF.png new file mode 100644 index 00000000..1d868e38 Binary files /dev/null and b/min/Geo/png/flags/64/GF.png differ diff --git a/min/Geo/png/flags/64/GG-AL.png b/min/Geo/png/flags/64/GG-AL.png new file mode 100644 index 00000000..0971902a Binary files /dev/null and b/min/Geo/png/flags/64/GG-AL.png differ diff --git a/min/Geo/png/flags/64/GG-HE.png b/min/Geo/png/flags/64/GG-HE.png new file mode 100644 index 00000000..66e5a9e3 Binary files /dev/null and b/min/Geo/png/flags/64/GG-HE.png differ diff --git a/min/Geo/png/flags/64/GG-SA.png b/min/Geo/png/flags/64/GG-SA.png new file mode 100644 index 00000000..23d01dad Binary files /dev/null and b/min/Geo/png/flags/64/GG-SA.png differ diff --git a/min/Geo/png/flags/64/GG.png b/min/Geo/png/flags/64/GG.png new file mode 100644 index 00000000..16144358 Binary files /dev/null and b/min/Geo/png/flags/64/GG.png differ diff --git a/min/Geo/png/flags/64/GH.png b/min/Geo/png/flags/64/GH.png new file mode 100644 index 00000000..1a44dfa2 Binary files /dev/null and b/min/Geo/png/flags/64/GH.png differ diff --git a/min/Geo/png/flags/64/GI.png b/min/Geo/png/flags/64/GI.png new file mode 100644 index 00000000..c829b37a Binary files /dev/null and b/min/Geo/png/flags/64/GI.png differ diff --git a/min/Geo/png/flags/64/GL.png b/min/Geo/png/flags/64/GL.png new file mode 100644 index 00000000..2dbb7022 Binary files /dev/null and b/min/Geo/png/flags/64/GL.png differ diff --git a/min/Geo/png/flags/64/GM.png b/min/Geo/png/flags/64/GM.png new file mode 100644 index 00000000..cd409ab5 Binary files /dev/null and b/min/Geo/png/flags/64/GM.png differ diff --git a/min/Geo/png/flags/64/GN.png b/min/Geo/png/flags/64/GN.png new file mode 100644 index 00000000..c00e5f6f Binary files /dev/null and b/min/Geo/png/flags/64/GN.png differ diff --git a/min/Geo/png/flags/64/GP.png b/min/Geo/png/flags/64/GP.png new file mode 100644 index 00000000..3f1a1d4f Binary files /dev/null and b/min/Geo/png/flags/64/GP.png differ diff --git a/min/Geo/png/flags/64/GQ.png b/min/Geo/png/flags/64/GQ.png new file mode 100644 index 00000000..abc41b19 Binary files /dev/null and b/min/Geo/png/flags/64/GQ.png differ diff --git a/min/Geo/png/flags/64/GR.png b/min/Geo/png/flags/64/GR.png new file mode 100644 index 00000000..1621ee84 Binary files /dev/null and b/min/Geo/png/flags/64/GR.png differ diff --git a/min/Geo/png/flags/64/GS.png b/min/Geo/png/flags/64/GS.png new file mode 100644 index 00000000..de9c110a Binary files /dev/null and b/min/Geo/png/flags/64/GS.png differ diff --git a/min/Geo/png/flags/64/GT.png b/min/Geo/png/flags/64/GT.png new file mode 100644 index 00000000..5ea3f1a9 Binary files /dev/null and b/min/Geo/png/flags/64/GT.png differ diff --git a/min/Geo/png/flags/64/GU.png b/min/Geo/png/flags/64/GU.png new file mode 100644 index 00000000..689c417b Binary files /dev/null and b/min/Geo/png/flags/64/GU.png differ diff --git a/min/Geo/png/flags/64/GW.png b/min/Geo/png/flags/64/GW.png new file mode 100644 index 00000000..152d0b44 Binary files /dev/null and b/min/Geo/png/flags/64/GW.png differ diff --git a/min/Geo/png/flags/64/GY.png b/min/Geo/png/flags/64/GY.png new file mode 100644 index 00000000..22e082ae Binary files /dev/null and b/min/Geo/png/flags/64/GY.png differ diff --git a/min/Geo/png/flags/64/HK.png b/min/Geo/png/flags/64/HK.png new file mode 100644 index 00000000..9fc627c6 Binary files /dev/null and b/min/Geo/png/flags/64/HK.png differ diff --git a/min/Geo/png/flags/64/HM.png b/min/Geo/png/flags/64/HM.png new file mode 100644 index 00000000..98ef1f55 Binary files /dev/null and b/min/Geo/png/flags/64/HM.png differ diff --git a/min/Geo/png/flags/64/HN.png b/min/Geo/png/flags/64/HN.png new file mode 100644 index 00000000..cb8998a6 Binary files /dev/null and b/min/Geo/png/flags/64/HN.png differ diff --git a/min/Geo/png/flags/64/HR.png b/min/Geo/png/flags/64/HR.png new file mode 100644 index 00000000..ac8fd7c8 Binary files /dev/null and b/min/Geo/png/flags/64/HR.png differ diff --git a/min/Geo/png/flags/64/HT.png b/min/Geo/png/flags/64/HT.png new file mode 100644 index 00000000..ba07d549 Binary files /dev/null and b/min/Geo/png/flags/64/HT.png differ diff --git a/min/Geo/png/flags/64/HU.png b/min/Geo/png/flags/64/HU.png new file mode 100644 index 00000000..de47fea4 Binary files /dev/null and b/min/Geo/png/flags/64/HU.png differ diff --git a/min/Geo/png/flags/64/HVBF.png b/min/Geo/png/flags/64/HVBF.png new file mode 100644 index 00000000..133ce5cd Binary files /dev/null and b/min/Geo/png/flags/64/HVBF.png differ diff --git a/min/Geo/png/flags/64/IC.png b/min/Geo/png/flags/64/IC.png new file mode 100644 index 00000000..8c29fabe Binary files /dev/null and b/min/Geo/png/flags/64/IC.png differ diff --git a/min/Geo/png/flags/64/ID.png b/min/Geo/png/flags/64/ID.png new file mode 100644 index 00000000..97f67d70 Binary files /dev/null and b/min/Geo/png/flags/64/ID.png differ diff --git a/min/Geo/png/flags/64/IE.png b/min/Geo/png/flags/64/IE.png new file mode 100644 index 00000000..2e47d286 Binary files /dev/null and b/min/Geo/png/flags/64/IE.png differ diff --git a/min/Geo/png/flags/64/IL.png b/min/Geo/png/flags/64/IL.png new file mode 100644 index 00000000..f01eb5cc Binary files /dev/null and b/min/Geo/png/flags/64/IL.png differ diff --git a/min/Geo/png/flags/64/IM.png b/min/Geo/png/flags/64/IM.png new file mode 100644 index 00000000..7d954265 Binary files /dev/null and b/min/Geo/png/flags/64/IM.png differ diff --git a/min/Geo/png/flags/64/IN-JK.png b/min/Geo/png/flags/64/IN-JK.png new file mode 100644 index 00000000..54dda830 Binary files /dev/null and b/min/Geo/png/flags/64/IN-JK.png differ diff --git a/min/Geo/png/flags/64/IN.png b/min/Geo/png/flags/64/IN.png new file mode 100644 index 00000000..d77f45c0 Binary files /dev/null and b/min/Geo/png/flags/64/IN.png differ diff --git a/min/Geo/png/flags/64/IO.png b/min/Geo/png/flags/64/IO.png new file mode 100644 index 00000000..61437b60 Binary files /dev/null and b/min/Geo/png/flags/64/IO.png differ diff --git a/min/Geo/png/flags/64/IQ.png b/min/Geo/png/flags/64/IQ.png new file mode 100644 index 00000000..55000232 Binary files /dev/null and b/min/Geo/png/flags/64/IQ.png differ diff --git a/min/Geo/png/flags/64/IR.png b/min/Geo/png/flags/64/IR.png new file mode 100644 index 00000000..f914bb13 Binary files /dev/null and b/min/Geo/png/flags/64/IR.png differ diff --git a/min/Geo/png/flags/64/IS.png b/min/Geo/png/flags/64/IS.png new file mode 100644 index 00000000..cf98600d Binary files /dev/null and b/min/Geo/png/flags/64/IS.png differ diff --git a/min/Geo/png/flags/64/IT.png b/min/Geo/png/flags/64/IT.png new file mode 100644 index 00000000..4bb07827 Binary files /dev/null and b/min/Geo/png/flags/64/IT.png differ diff --git a/min/Geo/png/flags/64/JE.png b/min/Geo/png/flags/64/JE.png new file mode 100644 index 00000000..0faeba0a Binary files /dev/null and b/min/Geo/png/flags/64/JE.png differ diff --git a/min/Geo/png/flags/64/JM.png b/min/Geo/png/flags/64/JM.png new file mode 100644 index 00000000..92347f21 Binary files /dev/null and b/min/Geo/png/flags/64/JM.png differ diff --git a/min/Geo/png/flags/64/JO.png b/min/Geo/png/flags/64/JO.png new file mode 100644 index 00000000..fae17bcd Binary files /dev/null and b/min/Geo/png/flags/64/JO.png differ diff --git a/min/Geo/png/flags/64/JP.png b/min/Geo/png/flags/64/JP.png new file mode 100644 index 00000000..2ccffb63 Binary files /dev/null and b/min/Geo/png/flags/64/JP.png differ diff --git a/min/Geo/png/flags/64/JTUM.png b/min/Geo/png/flags/64/JTUM.png new file mode 100644 index 00000000..75de3f85 Binary files /dev/null and b/min/Geo/png/flags/64/JTUM.png differ diff --git a/min/Geo/png/flags/64/KAKH.png b/min/Geo/png/flags/64/KAKH.png new file mode 100644 index 00000000..8292370b Binary files /dev/null and b/min/Geo/png/flags/64/KAKH.png differ diff --git a/min/Geo/png/flags/64/KE.png b/min/Geo/png/flags/64/KE.png new file mode 100644 index 00000000..320431ba Binary files /dev/null and b/min/Geo/png/flags/64/KE.png differ diff --git a/min/Geo/png/flags/64/KG.png b/min/Geo/png/flags/64/KG.png new file mode 100644 index 00000000..ce187c74 Binary files /dev/null and b/min/Geo/png/flags/64/KG.png differ diff --git a/min/Geo/png/flags/64/KH.png b/min/Geo/png/flags/64/KH.png new file mode 100644 index 00000000..81e02644 Binary files /dev/null and b/min/Geo/png/flags/64/KH.png differ diff --git a/min/Geo/png/flags/64/KHKA.png b/min/Geo/png/flags/64/KHKA.png new file mode 100644 index 00000000..11ace994 Binary files /dev/null and b/min/Geo/png/flags/64/KHKA.png differ diff --git a/min/Geo/png/flags/64/KI.png b/min/Geo/png/flags/64/KI.png new file mode 100644 index 00000000..cd1a3306 Binary files /dev/null and b/min/Geo/png/flags/64/KI.png differ diff --git a/min/Geo/png/flags/64/KM-A.png b/min/Geo/png/flags/64/KM-A.png new file mode 100644 index 00000000..c93183a6 Binary files /dev/null and b/min/Geo/png/flags/64/KM-A.png differ diff --git a/min/Geo/png/flags/64/KM-M.png b/min/Geo/png/flags/64/KM-M.png new file mode 100644 index 00000000..26a2778b Binary files /dev/null and b/min/Geo/png/flags/64/KM-M.png differ diff --git a/min/Geo/png/flags/64/KM.png b/min/Geo/png/flags/64/KM.png new file mode 100644 index 00000000..580cbfc0 Binary files /dev/null and b/min/Geo/png/flags/64/KM.png differ diff --git a/min/Geo/png/flags/64/KN.png b/min/Geo/png/flags/64/KN.png new file mode 100644 index 00000000..3caa3427 Binary files /dev/null and b/min/Geo/png/flags/64/KN.png differ diff --git a/min/Geo/png/flags/64/KOJP.png b/min/Geo/png/flags/64/KOJP.png new file mode 100644 index 00000000..e9146f46 Binary files /dev/null and b/min/Geo/png/flags/64/KOJP.png differ diff --git a/min/Geo/png/flags/64/KP.png b/min/Geo/png/flags/64/KP.png new file mode 100644 index 00000000..882d01a7 Binary files /dev/null and b/min/Geo/png/flags/64/KP.png differ diff --git a/min/Geo/png/flags/64/KR.png b/min/Geo/png/flags/64/KR.png new file mode 100644 index 00000000..5f99df30 Binary files /dev/null and b/min/Geo/png/flags/64/KR.png differ diff --git a/min/Geo/png/flags/64/KW.png b/min/Geo/png/flags/64/KW.png new file mode 100644 index 00000000..3af15bf9 Binary files /dev/null and b/min/Geo/png/flags/64/KW.png differ diff --git a/min/Geo/png/flags/64/KY.png b/min/Geo/png/flags/64/KY.png new file mode 100644 index 00000000..1242fec6 Binary files /dev/null and b/min/Geo/png/flags/64/KY.png differ diff --git a/min/Geo/png/flags/64/KZ.png b/min/Geo/png/flags/64/KZ.png new file mode 100644 index 00000000..d582df9f Binary files /dev/null and b/min/Geo/png/flags/64/KZ.png differ diff --git a/min/Geo/png/flags/64/LA.png b/min/Geo/png/flags/64/LA.png new file mode 100644 index 00000000..8ce81e41 Binary files /dev/null and b/min/Geo/png/flags/64/LA.png differ diff --git a/min/Geo/png/flags/64/LB.png b/min/Geo/png/flags/64/LB.png new file mode 100644 index 00000000..2a70d271 Binary files /dev/null and b/min/Geo/png/flags/64/LB.png differ diff --git a/min/Geo/png/flags/64/LC.png b/min/Geo/png/flags/64/LC.png new file mode 100644 index 00000000..94a6069f Binary files /dev/null and b/min/Geo/png/flags/64/LC.png differ diff --git a/min/Geo/png/flags/64/LI.png b/min/Geo/png/flags/64/LI.png new file mode 100644 index 00000000..b91f1457 Binary files /dev/null and b/min/Geo/png/flags/64/LI.png differ diff --git a/min/Geo/png/flags/64/LK.png b/min/Geo/png/flags/64/LK.png new file mode 100644 index 00000000..ba0057d0 Binary files /dev/null and b/min/Geo/png/flags/64/LK.png differ diff --git a/min/Geo/png/flags/64/LKLK.png b/min/Geo/png/flags/64/LKLK.png new file mode 100644 index 00000000..ba0057d0 Binary files /dev/null and b/min/Geo/png/flags/64/LKLK.png differ diff --git a/min/Geo/png/flags/64/LR.png b/min/Geo/png/flags/64/LR.png new file mode 100644 index 00000000..621e5443 Binary files /dev/null and b/min/Geo/png/flags/64/LR.png differ diff --git a/min/Geo/png/flags/64/LS.png b/min/Geo/png/flags/64/LS.png new file mode 100644 index 00000000..84af173e Binary files /dev/null and b/min/Geo/png/flags/64/LS.png differ diff --git a/min/Geo/png/flags/64/LT.png b/min/Geo/png/flags/64/LT.png new file mode 100644 index 00000000..2b8d12be Binary files /dev/null and b/min/Geo/png/flags/64/LT.png differ diff --git a/min/Geo/png/flags/64/LU.png b/min/Geo/png/flags/64/LU.png new file mode 100644 index 00000000..7e267113 Binary files /dev/null and b/min/Geo/png/flags/64/LU.png differ diff --git a/min/Geo/png/flags/64/LV.png b/min/Geo/png/flags/64/LV.png new file mode 100644 index 00000000..7ea186c4 Binary files /dev/null and b/min/Geo/png/flags/64/LV.png differ diff --git a/min/Geo/png/flags/64/LY.png b/min/Geo/png/flags/64/LY.png new file mode 100644 index 00000000..e993073a Binary files /dev/null and b/min/Geo/png/flags/64/LY.png differ diff --git a/min/Geo/png/flags/64/MA.png b/min/Geo/png/flags/64/MA.png new file mode 100644 index 00000000..bc0bc283 Binary files /dev/null and b/min/Geo/png/flags/64/MA.png differ diff --git a/min/Geo/png/flags/64/MC.png b/min/Geo/png/flags/64/MC.png new file mode 100644 index 00000000..97f67d70 Binary files /dev/null and b/min/Geo/png/flags/64/MC.png differ diff --git a/min/Geo/png/flags/64/MD-SN.png b/min/Geo/png/flags/64/MD-SN.png new file mode 100644 index 00000000..e94d13bc Binary files /dev/null and b/min/Geo/png/flags/64/MD-SN.png differ diff --git a/min/Geo/png/flags/64/MD.png b/min/Geo/png/flags/64/MD.png new file mode 100644 index 00000000..d3d14826 Binary files /dev/null and b/min/Geo/png/flags/64/MD.png differ diff --git a/min/Geo/png/flags/64/ME.png b/min/Geo/png/flags/64/ME.png new file mode 100644 index 00000000..ab3c9a2b Binary files /dev/null and b/min/Geo/png/flags/64/ME.png differ diff --git a/min/Geo/png/flags/64/MF.png b/min/Geo/png/flags/64/MF.png new file mode 100644 index 00000000..a4c1639f Binary files /dev/null and b/min/Geo/png/flags/64/MF.png differ diff --git a/min/Geo/png/flags/64/MG.png b/min/Geo/png/flags/64/MG.png new file mode 100644 index 00000000..ad53f0b4 Binary files /dev/null and b/min/Geo/png/flags/64/MG.png differ diff --git a/min/Geo/png/flags/64/MH.png b/min/Geo/png/flags/64/MH.png new file mode 100644 index 00000000..89810397 Binary files /dev/null and b/min/Geo/png/flags/64/MH.png differ diff --git a/min/Geo/png/flags/64/MIUM.png b/min/Geo/png/flags/64/MIUM.png new file mode 100644 index 00000000..bafe3935 Binary files /dev/null and b/min/Geo/png/flags/64/MIUM.png differ diff --git a/min/Geo/png/flags/64/MK.png b/min/Geo/png/flags/64/MK.png new file mode 100644 index 00000000..d959caa8 Binary files /dev/null and b/min/Geo/png/flags/64/MK.png differ diff --git a/min/Geo/png/flags/64/ML-AZ.png b/min/Geo/png/flags/64/ML-AZ.png new file mode 100644 index 00000000..c4cb9287 Binary files /dev/null and b/min/Geo/png/flags/64/ML-AZ.png differ diff --git a/min/Geo/png/flags/64/ML.png b/min/Geo/png/flags/64/ML.png new file mode 100644 index 00000000..758997ad Binary files /dev/null and b/min/Geo/png/flags/64/ML.png differ diff --git a/min/Geo/png/flags/64/MM.png b/min/Geo/png/flags/64/MM.png new file mode 100644 index 00000000..3ede4d0b Binary files /dev/null and b/min/Geo/png/flags/64/MM.png differ diff --git a/min/Geo/png/flags/64/MN.png b/min/Geo/png/flags/64/MN.png new file mode 100644 index 00000000..dde27eb6 Binary files /dev/null and b/min/Geo/png/flags/64/MN.png differ diff --git a/min/Geo/png/flags/64/MO.png b/min/Geo/png/flags/64/MO.png new file mode 100644 index 00000000..f89050b9 Binary files /dev/null and b/min/Geo/png/flags/64/MO.png differ diff --git a/min/Geo/png/flags/64/MP.png b/min/Geo/png/flags/64/MP.png new file mode 100644 index 00000000..ac8c1c2a Binary files /dev/null and b/min/Geo/png/flags/64/MP.png differ diff --git a/min/Geo/png/flags/64/MQ.png b/min/Geo/png/flags/64/MQ.png new file mode 100644 index 00000000..a2364eb3 Binary files /dev/null and b/min/Geo/png/flags/64/MQ.png differ diff --git a/min/Geo/png/flags/64/MR.png b/min/Geo/png/flags/64/MR.png new file mode 100644 index 00000000..14fcf987 Binary files /dev/null and b/min/Geo/png/flags/64/MR.png differ diff --git a/min/Geo/png/flags/64/MS.png b/min/Geo/png/flags/64/MS.png new file mode 100644 index 00000000..10228d72 Binary files /dev/null and b/min/Geo/png/flags/64/MS.png differ diff --git a/min/Geo/png/flags/64/MT.png b/min/Geo/png/flags/64/MT.png new file mode 100644 index 00000000..6d5f0d6e Binary files /dev/null and b/min/Geo/png/flags/64/MT.png differ diff --git a/min/Geo/png/flags/64/MU.png b/min/Geo/png/flags/64/MU.png new file mode 100644 index 00000000..025eecc4 Binary files /dev/null and b/min/Geo/png/flags/64/MU.png differ diff --git a/min/Geo/png/flags/64/MV.png b/min/Geo/png/flags/64/MV.png new file mode 100644 index 00000000..c6ebe154 Binary files /dev/null and b/min/Geo/png/flags/64/MV.png differ diff --git a/min/Geo/png/flags/64/MW.png b/min/Geo/png/flags/64/MW.png new file mode 100644 index 00000000..1e85c880 Binary files /dev/null and b/min/Geo/png/flags/64/MW.png differ diff --git a/min/Geo/png/flags/64/MX.png b/min/Geo/png/flags/64/MX.png new file mode 100644 index 00000000..ef7ac4f3 Binary files /dev/null and b/min/Geo/png/flags/64/MX.png differ diff --git a/min/Geo/png/flags/64/MY.png b/min/Geo/png/flags/64/MY.png new file mode 100644 index 00000000..a7c1104e Binary files /dev/null and b/min/Geo/png/flags/64/MY.png differ diff --git a/min/Geo/png/flags/64/MZ.png b/min/Geo/png/flags/64/MZ.png new file mode 100644 index 00000000..019cee63 Binary files /dev/null and b/min/Geo/png/flags/64/MZ.png differ diff --git a/min/Geo/png/flags/64/NA.png b/min/Geo/png/flags/64/NA.png new file mode 100644 index 00000000..1d125c6f Binary files /dev/null and b/min/Geo/png/flags/64/NA.png differ diff --git a/min/Geo/png/flags/64/NC.png b/min/Geo/png/flags/64/NC.png new file mode 100644 index 00000000..bf7e3dde Binary files /dev/null and b/min/Geo/png/flags/64/NC.png differ diff --git a/min/Geo/png/flags/64/NE.png b/min/Geo/png/flags/64/NE.png new file mode 100644 index 00000000..ee091127 Binary files /dev/null and b/min/Geo/png/flags/64/NE.png differ diff --git a/min/Geo/png/flags/64/NF.png b/min/Geo/png/flags/64/NF.png new file mode 100644 index 00000000..72f2f203 Binary files /dev/null and b/min/Geo/png/flags/64/NF.png differ diff --git a/min/Geo/png/flags/64/NG-BI.png b/min/Geo/png/flags/64/NG-BI.png new file mode 100644 index 00000000..bab75a89 Binary files /dev/null and b/min/Geo/png/flags/64/NG-BI.png differ diff --git a/min/Geo/png/flags/64/NG.png b/min/Geo/png/flags/64/NG.png new file mode 100644 index 00000000..b7282cbf Binary files /dev/null and b/min/Geo/png/flags/64/NG.png differ diff --git a/min/Geo/png/flags/64/NHVU-TF.png b/min/Geo/png/flags/64/NHVU-TF.png new file mode 100644 index 00000000..06557365 Binary files /dev/null and b/min/Geo/png/flags/64/NHVU-TF.png differ diff --git a/min/Geo/png/flags/64/NHVU-TN.png b/min/Geo/png/flags/64/NHVU-TN.png new file mode 100644 index 00000000..4069ddc7 Binary files /dev/null and b/min/Geo/png/flags/64/NHVU-TN.png differ diff --git a/min/Geo/png/flags/64/NHVU-VE.png b/min/Geo/png/flags/64/NHVU-VE.png new file mode 100644 index 00000000..a29396fd Binary files /dev/null and b/min/Geo/png/flags/64/NHVU-VE.png differ diff --git a/min/Geo/png/flags/64/NHVU.png b/min/Geo/png/flags/64/NHVU.png new file mode 100644 index 00000000..15f0ad08 Binary files /dev/null and b/min/Geo/png/flags/64/NHVU.png differ diff --git a/min/Geo/png/flags/64/NI.png b/min/Geo/png/flags/64/NI.png new file mode 100644 index 00000000..89246287 Binary files /dev/null and b/min/Geo/png/flags/64/NI.png differ diff --git a/min/Geo/png/flags/64/NL.png b/min/Geo/png/flags/64/NL.png new file mode 100644 index 00000000..1c704c5c Binary files /dev/null and b/min/Geo/png/flags/64/NL.png differ diff --git a/min/Geo/png/flags/64/NO-PI.png b/min/Geo/png/flags/64/NO-PI.png new file mode 100644 index 00000000..06987872 Binary files /dev/null and b/min/Geo/png/flags/64/NO-PI.png differ diff --git a/min/Geo/png/flags/64/NO.png b/min/Geo/png/flags/64/NO.png new file mode 100644 index 00000000..06987872 Binary files /dev/null and b/min/Geo/png/flags/64/NO.png differ diff --git a/min/Geo/png/flags/64/NP.png b/min/Geo/png/flags/64/NP.png new file mode 100644 index 00000000..22f7fed6 Binary files /dev/null and b/min/Geo/png/flags/64/NP.png differ diff --git a/min/Geo/png/flags/64/NQAQ.png b/min/Geo/png/flags/64/NQAQ.png new file mode 100644 index 00000000..06987872 Binary files /dev/null and b/min/Geo/png/flags/64/NQAQ.png differ diff --git a/min/Geo/png/flags/64/NR.png b/min/Geo/png/flags/64/NR.png new file mode 100644 index 00000000..cecffa76 Binary files /dev/null and b/min/Geo/png/flags/64/NR.png differ diff --git a/min/Geo/png/flags/64/NTHH.png b/min/Geo/png/flags/64/NTHH.png new file mode 100644 index 00000000..7617bcfb Binary files /dev/null and b/min/Geo/png/flags/64/NTHH.png differ diff --git a/min/Geo/png/flags/64/NU.png b/min/Geo/png/flags/64/NU.png new file mode 100644 index 00000000..c9ae9af4 Binary files /dev/null and b/min/Geo/png/flags/64/NU.png differ diff --git a/min/Geo/png/flags/64/NZ-AQ.png b/min/Geo/png/flags/64/NZ-AQ.png new file mode 100644 index 00000000..c25c4bd1 Binary files /dev/null and b/min/Geo/png/flags/64/NZ-AQ.png differ diff --git a/min/Geo/png/flags/64/NZ.png b/min/Geo/png/flags/64/NZ.png new file mode 100644 index 00000000..c25c4bd1 Binary files /dev/null and b/min/Geo/png/flags/64/NZ.png differ diff --git a/min/Geo/png/flags/64/OM.png b/min/Geo/png/flags/64/OM.png new file mode 100644 index 00000000..c88c7885 Binary files /dev/null and b/min/Geo/png/flags/64/OM.png differ diff --git a/min/Geo/png/flags/64/PA.png b/min/Geo/png/flags/64/PA.png new file mode 100644 index 00000000..28be731f Binary files /dev/null and b/min/Geo/png/flags/64/PA.png differ diff --git a/min/Geo/png/flags/64/PCHH.png b/min/Geo/png/flags/64/PCHH.png new file mode 100644 index 00000000..f90e698a Binary files /dev/null and b/min/Geo/png/flags/64/PCHH.png differ diff --git a/min/Geo/png/flags/64/PE.png b/min/Geo/png/flags/64/PE.png new file mode 100644 index 00000000..8d285fb5 Binary files /dev/null and b/min/Geo/png/flags/64/PE.png differ diff --git a/min/Geo/png/flags/64/PF.png b/min/Geo/png/flags/64/PF.png new file mode 100644 index 00000000..14d5fb90 Binary files /dev/null and b/min/Geo/png/flags/64/PF.png differ diff --git a/min/Geo/png/flags/64/PG-NSA.png b/min/Geo/png/flags/64/PG-NSA.png new file mode 100644 index 00000000..625de29d Binary files /dev/null and b/min/Geo/png/flags/64/PG-NSA.png differ diff --git a/min/Geo/png/flags/64/PG.png b/min/Geo/png/flags/64/PG.png new file mode 100644 index 00000000..b8689d4b Binary files /dev/null and b/min/Geo/png/flags/64/PG.png differ diff --git a/min/Geo/png/flags/64/PH.png b/min/Geo/png/flags/64/PH.png new file mode 100644 index 00000000..43320677 Binary files /dev/null and b/min/Geo/png/flags/64/PH.png differ diff --git a/min/Geo/png/flags/64/PK-JK.png b/min/Geo/png/flags/64/PK-JK.png new file mode 100644 index 00000000..aa231821 Binary files /dev/null and b/min/Geo/png/flags/64/PK-JK.png differ diff --git a/min/Geo/png/flags/64/PK-NA.png b/min/Geo/png/flags/64/PK-NA.png new file mode 100644 index 00000000..cc4c4753 Binary files /dev/null and b/min/Geo/png/flags/64/PK-NA.png differ diff --git a/min/Geo/png/flags/64/PK.png b/min/Geo/png/flags/64/PK.png new file mode 100644 index 00000000..b23aead2 Binary files /dev/null and b/min/Geo/png/flags/64/PK.png differ diff --git a/min/Geo/png/flags/64/PL.png b/min/Geo/png/flags/64/PL.png new file mode 100644 index 00000000..dcfb37fa Binary files /dev/null and b/min/Geo/png/flags/64/PL.png differ diff --git a/min/Geo/png/flags/64/PM.png b/min/Geo/png/flags/64/PM.png new file mode 100644 index 00000000..94fc0c50 Binary files /dev/null and b/min/Geo/png/flags/64/PM.png differ diff --git a/min/Geo/png/flags/64/PN.png b/min/Geo/png/flags/64/PN.png new file mode 100644 index 00000000..ac5cbd07 Binary files /dev/null and b/min/Geo/png/flags/64/PN.png differ diff --git a/min/Geo/png/flags/64/PR.png b/min/Geo/png/flags/64/PR.png new file mode 100644 index 00000000..04c32638 Binary files /dev/null and b/min/Geo/png/flags/64/PR.png differ diff --git a/min/Geo/png/flags/64/PS.png b/min/Geo/png/flags/64/PS.png new file mode 100644 index 00000000..b04e8e7c Binary files /dev/null and b/min/Geo/png/flags/64/PS.png differ diff --git a/min/Geo/png/flags/64/PT.png b/min/Geo/png/flags/64/PT.png new file mode 100644 index 00000000..aaff3922 Binary files /dev/null and b/min/Geo/png/flags/64/PT.png differ diff --git a/min/Geo/png/flags/64/PUUM.png b/min/Geo/png/flags/64/PUUM.png new file mode 100644 index 00000000..e78e68b3 Binary files /dev/null and b/min/Geo/png/flags/64/PUUM.png differ diff --git a/min/Geo/png/flags/64/PW.png b/min/Geo/png/flags/64/PW.png new file mode 100644 index 00000000..0cc09968 Binary files /dev/null and b/min/Geo/png/flags/64/PW.png differ diff --git a/min/Geo/png/flags/64/PY.png b/min/Geo/png/flags/64/PY.png new file mode 100644 index 00000000..6fd2854a Binary files /dev/null and b/min/Geo/png/flags/64/PY.png differ diff --git a/min/Geo/png/flags/64/PZPA.png b/min/Geo/png/flags/64/PZPA.png new file mode 100644 index 00000000..7369343d Binary files /dev/null and b/min/Geo/png/flags/64/PZPA.png differ diff --git a/min/Geo/png/flags/64/QA.png b/min/Geo/png/flags/64/QA.png new file mode 100644 index 00000000..f37565a5 Binary files /dev/null and b/min/Geo/png/flags/64/QA.png differ diff --git a/min/Geo/png/flags/64/RE.png b/min/Geo/png/flags/64/RE.png new file mode 100644 index 00000000..7b7cdf6f Binary files /dev/null and b/min/Geo/png/flags/64/RE.png differ diff --git a/min/Geo/png/flags/64/RHZW-RH.png b/min/Geo/png/flags/64/RHZW-RH.png new file mode 100644 index 00000000..a9d14303 Binary files /dev/null and b/min/Geo/png/flags/64/RHZW-RH.png differ diff --git a/min/Geo/png/flags/64/RHZW-ZR.png b/min/Geo/png/flags/64/RHZW-ZR.png new file mode 100644 index 00000000..8133115c Binary files /dev/null and b/min/Geo/png/flags/64/RHZW-ZR.png differ diff --git a/min/Geo/png/flags/64/RHZW.png b/min/Geo/png/flags/64/RHZW.png new file mode 100644 index 00000000..e95bc138 Binary files /dev/null and b/min/Geo/png/flags/64/RHZW.png differ diff --git a/min/Geo/png/flags/64/RO.png b/min/Geo/png/flags/64/RO.png new file mode 100644 index 00000000..27091c9b Binary files /dev/null and b/min/Geo/png/flags/64/RO.png differ diff --git a/min/Geo/png/flags/64/RS.png b/min/Geo/png/flags/64/RS.png new file mode 100644 index 00000000..935d7931 Binary files /dev/null and b/min/Geo/png/flags/64/RS.png differ diff --git a/min/Geo/png/flags/64/RU-CE.png b/min/Geo/png/flags/64/RU-CE.png new file mode 100644 index 00000000..17e7169c Binary files /dev/null and b/min/Geo/png/flags/64/RU-CE.png differ diff --git a/min/Geo/png/flags/64/RU.png b/min/Geo/png/flags/64/RU.png new file mode 100644 index 00000000..1734604e Binary files /dev/null and b/min/Geo/png/flags/64/RU.png differ diff --git a/min/Geo/png/flags/64/RW.png b/min/Geo/png/flags/64/RW.png new file mode 100644 index 00000000..3bbe5ea4 Binary files /dev/null and b/min/Geo/png/flags/64/RW.png differ diff --git a/min/Geo/png/flags/64/SA.png b/min/Geo/png/flags/64/SA.png new file mode 100644 index 00000000..609eb37f Binary files /dev/null and b/min/Geo/png/flags/64/SA.png differ diff --git a/min/Geo/png/flags/64/SB.png b/min/Geo/png/flags/64/SB.png new file mode 100644 index 00000000..2ea93a15 Binary files /dev/null and b/min/Geo/png/flags/64/SB.png differ diff --git a/min/Geo/png/flags/64/SC.png b/min/Geo/png/flags/64/SC.png new file mode 100644 index 00000000..90a5241c Binary files /dev/null and b/min/Geo/png/flags/64/SC.png differ diff --git a/min/Geo/png/flags/64/SD.png b/min/Geo/png/flags/64/SD.png new file mode 100644 index 00000000..ea44678a Binary files /dev/null and b/min/Geo/png/flags/64/SD.png differ diff --git a/min/Geo/png/flags/64/SE.png b/min/Geo/png/flags/64/SE.png new file mode 100644 index 00000000..8b5ad286 Binary files /dev/null and b/min/Geo/png/flags/64/SE.png differ diff --git a/min/Geo/png/flags/64/SG.png b/min/Geo/png/flags/64/SG.png new file mode 100644 index 00000000..3d6d9d67 Binary files /dev/null and b/min/Geo/png/flags/64/SG.png differ diff --git a/min/Geo/png/flags/64/SH.png b/min/Geo/png/flags/64/SH.png new file mode 100644 index 00000000..33482a3b Binary files /dev/null and b/min/Geo/png/flags/64/SH.png differ diff --git a/min/Geo/png/flags/64/SI.png b/min/Geo/png/flags/64/SI.png new file mode 100644 index 00000000..b740d16a Binary files /dev/null and b/min/Geo/png/flags/64/SI.png differ diff --git a/min/Geo/png/flags/64/SITH.png b/min/Geo/png/flags/64/SITH.png new file mode 100644 index 00000000..84ae0af1 Binary files /dev/null and b/min/Geo/png/flags/64/SITH.png differ diff --git a/min/Geo/png/flags/64/SJ.png b/min/Geo/png/flags/64/SJ.png new file mode 100644 index 00000000..06987872 Binary files /dev/null and b/min/Geo/png/flags/64/SJ.png differ diff --git a/min/Geo/png/flags/64/SK.png b/min/Geo/png/flags/64/SK.png new file mode 100644 index 00000000..82b55a73 Binary files /dev/null and b/min/Geo/png/flags/64/SK.png differ diff --git a/min/Geo/png/flags/64/SKIN.png b/min/Geo/png/flags/64/SKIN.png new file mode 100644 index 00000000..cee4458d Binary files /dev/null and b/min/Geo/png/flags/64/SKIN.png differ diff --git a/min/Geo/png/flags/64/SL.png b/min/Geo/png/flags/64/SL.png new file mode 100644 index 00000000..43a51755 Binary files /dev/null and b/min/Geo/png/flags/64/SL.png differ diff --git a/min/Geo/png/flags/64/SM.png b/min/Geo/png/flags/64/SM.png new file mode 100644 index 00000000..494a4f58 Binary files /dev/null and b/min/Geo/png/flags/64/SM.png differ diff --git a/min/Geo/png/flags/64/SN.png b/min/Geo/png/flags/64/SN.png new file mode 100644 index 00000000..f0439b59 Binary files /dev/null and b/min/Geo/png/flags/64/SN.png differ diff --git a/min/Geo/png/flags/64/SO-SO.png b/min/Geo/png/flags/64/SO-SO.png new file mode 100644 index 00000000..a60bae5d Binary files /dev/null and b/min/Geo/png/flags/64/SO-SO.png differ diff --git a/min/Geo/png/flags/64/SO.png b/min/Geo/png/flags/64/SO.png new file mode 100644 index 00000000..06a6ce57 Binary files /dev/null and b/min/Geo/png/flags/64/SO.png differ diff --git a/min/Geo/png/flags/64/SR.png b/min/Geo/png/flags/64/SR.png new file mode 100644 index 00000000..8845752c Binary files /dev/null and b/min/Geo/png/flags/64/SR.png differ diff --git a/min/Geo/png/flags/64/SS.png b/min/Geo/png/flags/64/SS.png new file mode 100644 index 00000000..17cf1140 Binary files /dev/null and b/min/Geo/png/flags/64/SS.png differ diff --git a/min/Geo/png/flags/64/ST.png b/min/Geo/png/flags/64/ST.png new file mode 100644 index 00000000..6d2f8289 Binary files /dev/null and b/min/Geo/png/flags/64/ST.png differ diff --git a/min/Geo/png/flags/64/SUHH.png b/min/Geo/png/flags/64/SUHH.png new file mode 100644 index 00000000..19a7651b Binary files /dev/null and b/min/Geo/png/flags/64/SUHH.png differ diff --git a/min/Geo/png/flags/64/SV.png b/min/Geo/png/flags/64/SV.png new file mode 100644 index 00000000..b6c52052 Binary files /dev/null and b/min/Geo/png/flags/64/SV.png differ diff --git a/min/Geo/png/flags/64/SX.png b/min/Geo/png/flags/64/SX.png new file mode 100644 index 00000000..276b2437 Binary files /dev/null and b/min/Geo/png/flags/64/SX.png differ diff --git a/min/Geo/png/flags/64/SY.png b/min/Geo/png/flags/64/SY.png new file mode 100644 index 00000000..26c4bf25 Binary files /dev/null and b/min/Geo/png/flags/64/SY.png differ diff --git a/min/Geo/png/flags/64/SZ.png b/min/Geo/png/flags/64/SZ.png new file mode 100644 index 00000000..8eb3463c Binary files /dev/null and b/min/Geo/png/flags/64/SZ.png differ diff --git a/min/Geo/png/flags/64/TA.png b/min/Geo/png/flags/64/TA.png new file mode 100644 index 00000000..bf1d320f Binary files /dev/null and b/min/Geo/png/flags/64/TA.png differ diff --git a/min/Geo/png/flags/64/TC.png b/min/Geo/png/flags/64/TC.png new file mode 100644 index 00000000..0690f4e5 Binary files /dev/null and b/min/Geo/png/flags/64/TC.png differ diff --git a/min/Geo/png/flags/64/TD.png b/min/Geo/png/flags/64/TD.png new file mode 100644 index 00000000..8c8ab448 Binary files /dev/null and b/min/Geo/png/flags/64/TD.png differ diff --git a/min/Geo/png/flags/64/TF.png b/min/Geo/png/flags/64/TF.png new file mode 100644 index 00000000..606bad01 Binary files /dev/null and b/min/Geo/png/flags/64/TF.png differ diff --git a/min/Geo/png/flags/64/TG.png b/min/Geo/png/flags/64/TG.png new file mode 100644 index 00000000..9c53c461 Binary files /dev/null and b/min/Geo/png/flags/64/TG.png differ diff --git a/min/Geo/png/flags/64/TH.png b/min/Geo/png/flags/64/TH.png new file mode 100644 index 00000000..16c95073 Binary files /dev/null and b/min/Geo/png/flags/64/TH.png differ diff --git a/min/Geo/png/flags/64/TJ.png b/min/Geo/png/flags/64/TJ.png new file mode 100644 index 00000000..d30f8a4e Binary files /dev/null and b/min/Geo/png/flags/64/TJ.png differ diff --git a/min/Geo/png/flags/64/TK.png b/min/Geo/png/flags/64/TK.png new file mode 100644 index 00000000..220ad834 Binary files /dev/null and b/min/Geo/png/flags/64/TK.png differ diff --git a/min/Geo/png/flags/64/TL.png b/min/Geo/png/flags/64/TL.png new file mode 100644 index 00000000..56e6cc1d Binary files /dev/null and b/min/Geo/png/flags/64/TL.png differ diff --git a/min/Geo/png/flags/64/TM.png b/min/Geo/png/flags/64/TM.png new file mode 100644 index 00000000..878a5be1 Binary files /dev/null and b/min/Geo/png/flags/64/TM.png differ diff --git a/min/Geo/png/flags/64/TN.png b/min/Geo/png/flags/64/TN.png new file mode 100644 index 00000000..2744ec0c Binary files /dev/null and b/min/Geo/png/flags/64/TN.png differ diff --git a/min/Geo/png/flags/64/TO.png b/min/Geo/png/flags/64/TO.png new file mode 100644 index 00000000..f2e9d732 Binary files /dev/null and b/min/Geo/png/flags/64/TO.png differ diff --git a/min/Geo/png/flags/64/TPTL.png b/min/Geo/png/flags/64/TPTL.png new file mode 100644 index 00000000..56e6cc1d Binary files /dev/null and b/min/Geo/png/flags/64/TPTL.png differ diff --git a/min/Geo/png/flags/64/TR.png b/min/Geo/png/flags/64/TR.png new file mode 100644 index 00000000..183a9819 Binary files /dev/null and b/min/Geo/png/flags/64/TR.png differ diff --git a/min/Geo/png/flags/64/TT.png b/min/Geo/png/flags/64/TT.png new file mode 100644 index 00000000..231f6f69 Binary files /dev/null and b/min/Geo/png/flags/64/TT.png differ diff --git a/min/Geo/png/flags/64/TV.png b/min/Geo/png/flags/64/TV.png new file mode 100644 index 00000000..b7b68d48 Binary files /dev/null and b/min/Geo/png/flags/64/TV.png differ diff --git a/min/Geo/png/flags/64/TW.png b/min/Geo/png/flags/64/TW.png new file mode 100644 index 00000000..d41adb92 Binary files /dev/null and b/min/Geo/png/flags/64/TW.png differ diff --git a/min/Geo/png/flags/64/TZ.png b/min/Geo/png/flags/64/TZ.png new file mode 100644 index 00000000..f3c73237 Binary files /dev/null and b/min/Geo/png/flags/64/TZ.png differ diff --git a/min/Geo/png/flags/64/UA.png b/min/Geo/png/flags/64/UA.png new file mode 100644 index 00000000..26897623 Binary files /dev/null and b/min/Geo/png/flags/64/UA.png differ diff --git a/min/Geo/png/flags/64/UAUA.png b/min/Geo/png/flags/64/UAUA.png new file mode 100644 index 00000000..2003d405 Binary files /dev/null and b/min/Geo/png/flags/64/UAUA.png differ diff --git a/min/Geo/png/flags/64/UG-RW.png b/min/Geo/png/flags/64/UG-RW.png new file mode 100644 index 00000000..d8cf2a25 Binary files /dev/null and b/min/Geo/png/flags/64/UG-RW.png differ diff --git a/min/Geo/png/flags/64/UG.png b/min/Geo/png/flags/64/UG.png new file mode 100644 index 00000000..ccd668cc Binary files /dev/null and b/min/Geo/png/flags/64/UG.png differ diff --git a/min/Geo/png/flags/64/UK.png b/min/Geo/png/flags/64/UK.png new file mode 100644 index 00000000..1eeabe04 Binary files /dev/null and b/min/Geo/png/flags/64/UK.png differ diff --git a/min/Geo/png/flags/64/UM.png b/min/Geo/png/flags/64/UM.png new file mode 100644 index 00000000..e78e68b3 Binary files /dev/null and b/min/Geo/png/flags/64/UM.png differ diff --git a/min/Geo/png/flags/64/US.png b/min/Geo/png/flags/64/US.png new file mode 100644 index 00000000..e78e68b3 Binary files /dev/null and b/min/Geo/png/flags/64/US.png differ diff --git a/min/Geo/png/flags/64/UY.png b/min/Geo/png/flags/64/UY.png new file mode 100644 index 00000000..2ea2dcc6 Binary files /dev/null and b/min/Geo/png/flags/64/UY.png differ diff --git a/min/Geo/png/flags/64/UZ.png b/min/Geo/png/flags/64/UZ.png new file mode 100644 index 00000000..00eb78a4 Binary files /dev/null and b/min/Geo/png/flags/64/UZ.png differ diff --git a/min/Geo/png/flags/64/VA.png b/min/Geo/png/flags/64/VA.png new file mode 100644 index 00000000..d8bb7879 Binary files /dev/null and b/min/Geo/png/flags/64/VA.png differ diff --git a/min/Geo/png/flags/64/VC.png b/min/Geo/png/flags/64/VC.png new file mode 100644 index 00000000..a903935e Binary files /dev/null and b/min/Geo/png/flags/64/VC.png differ diff --git a/min/Geo/png/flags/64/VDVN.png b/min/Geo/png/flags/64/VDVN.png new file mode 100644 index 00000000..9e058aa4 Binary files /dev/null and b/min/Geo/png/flags/64/VDVN.png differ diff --git a/min/Geo/png/flags/64/VE.png b/min/Geo/png/flags/64/VE.png new file mode 100644 index 00000000..6d0ec5ae Binary files /dev/null and b/min/Geo/png/flags/64/VE.png differ diff --git a/min/Geo/png/flags/64/VG.png b/min/Geo/png/flags/64/VG.png new file mode 100644 index 00000000..0f0b3955 Binary files /dev/null and b/min/Geo/png/flags/64/VG.png differ diff --git a/min/Geo/png/flags/64/VI.png b/min/Geo/png/flags/64/VI.png new file mode 100644 index 00000000..add0fdec Binary files /dev/null and b/min/Geo/png/flags/64/VI.png differ diff --git a/min/Geo/png/flags/64/VN.png b/min/Geo/png/flags/64/VN.png new file mode 100644 index 00000000..4b431067 Binary files /dev/null and b/min/Geo/png/flags/64/VN.png differ diff --git a/min/Geo/png/flags/64/VNVN.png b/min/Geo/png/flags/64/VNVN.png new file mode 100644 index 00000000..d95d93e1 Binary files /dev/null and b/min/Geo/png/flags/64/VNVN.png differ diff --git a/min/Geo/png/flags/64/VU.png b/min/Geo/png/flags/64/VU.png new file mode 100644 index 00000000..ed29683d Binary files /dev/null and b/min/Geo/png/flags/64/VU.png differ diff --git a/min/Geo/png/flags/64/WF.png b/min/Geo/png/flags/64/WF.png new file mode 100644 index 00000000..5194c2cf Binary files /dev/null and b/min/Geo/png/flags/64/WF.png differ diff --git a/min/Geo/png/flags/64/WKUM.png b/min/Geo/png/flags/64/WKUM.png new file mode 100644 index 00000000..8b18a515 Binary files /dev/null and b/min/Geo/png/flags/64/WKUM.png differ diff --git a/min/Geo/png/flags/64/WS.png b/min/Geo/png/flags/64/WS.png new file mode 100644 index 00000000..d20d3383 Binary files /dev/null and b/min/Geo/png/flags/64/WS.png differ diff --git a/min/Geo/png/flags/64/XK.png b/min/Geo/png/flags/64/XK.png new file mode 100644 index 00000000..6bd7a0db Binary files /dev/null and b/min/Geo/png/flags/64/XK.png differ diff --git a/min/Geo/png/flags/64/YDYE.png b/min/Geo/png/flags/64/YDYE.png new file mode 100644 index 00000000..66c58930 Binary files /dev/null and b/min/Geo/png/flags/64/YDYE.png differ diff --git a/min/Geo/png/flags/64/YE.png b/min/Geo/png/flags/64/YE.png new file mode 100644 index 00000000..e5277ba3 Binary files /dev/null and b/min/Geo/png/flags/64/YE.png differ diff --git a/min/Geo/png/flags/64/YEYE.png b/min/Geo/png/flags/64/YEYE.png new file mode 100644 index 00000000..f6018816 Binary files /dev/null and b/min/Geo/png/flags/64/YEYE.png differ diff --git a/min/Geo/png/flags/64/YT.png b/min/Geo/png/flags/64/YT.png new file mode 100644 index 00000000..59a71caf Binary files /dev/null and b/min/Geo/png/flags/64/YT.png differ diff --git a/min/Geo/png/flags/64/YUCS.png b/min/Geo/png/flags/64/YUCS.png new file mode 100644 index 00000000..84650765 Binary files /dev/null and b/min/Geo/png/flags/64/YUCS.png differ diff --git a/min/Geo/png/flags/64/ZA-BO.png b/min/Geo/png/flags/64/ZA-BO.png new file mode 100644 index 00000000..6046b993 Binary files /dev/null and b/min/Geo/png/flags/64/ZA-BO.png differ diff --git a/min/Geo/png/flags/64/ZA-CI.png b/min/Geo/png/flags/64/ZA-CI.png new file mode 100644 index 00000000..e6f4f0ba Binary files /dev/null and b/min/Geo/png/flags/64/ZA-CI.png differ diff --git a/min/Geo/png/flags/64/ZA-TR.png b/min/Geo/png/flags/64/ZA-TR.png new file mode 100644 index 00000000..35be48fe Binary files /dev/null and b/min/Geo/png/flags/64/ZA-TR.png differ diff --git a/min/Geo/png/flags/64/ZA-VE.png b/min/Geo/png/flags/64/ZA-VE.png new file mode 100644 index 00000000..dc7c376a Binary files /dev/null and b/min/Geo/png/flags/64/ZA-VE.png differ diff --git a/min/Geo/png/flags/64/ZA.png b/min/Geo/png/flags/64/ZA.png new file mode 100644 index 00000000..14c6959d Binary files /dev/null and b/min/Geo/png/flags/64/ZA.png differ diff --git a/min/Geo/png/flags/64/ZM.png b/min/Geo/png/flags/64/ZM.png new file mode 100644 index 00000000..7d733b58 Binary files /dev/null and b/min/Geo/png/flags/64/ZM.png differ diff --git a/min/Geo/png/flags/64/ZRCD.png b/min/Geo/png/flags/64/ZRCD.png new file mode 100644 index 00000000..c4ad22c3 Binary files /dev/null and b/min/Geo/png/flags/64/ZRCD.png differ diff --git a/min/Geo/png/flags/64/ZW.png b/min/Geo/png/flags/64/ZW.png new file mode 100644 index 00000000..e5446011 Binary files /dev/null and b/min/Geo/png/flags/64/ZW.png differ diff --git a/min/Image/Image.js b/min/Image/Image.js new file mode 100644 index 00000000..9b905fa8 --- /dev/null +++ b/min/Image/Image.js @@ -0,0 +1,820 @@ +'use strict'; + +Ox.load.Image = function(options, callback) { + + //@ Image + + /*@ + Ox.Image Generic image object + To render the image as an image element, use its `src()` method, to + render it as a canvas, use its `canvas` property. + (src, callback) -> undefined + (width, height[, background], callback) -> undefined + src Image source (local, remote or data URL) + width Width in px + height Height in px + background <[n]> Background color (RGB or RGBA) + callback Callback function + image Image object + @ Ox.Image(1, 1, [255, 0, 0], function(i) { Ox.test(i.pixel([0, 0]), [255, 0, 0, 255]); }) + undefined + @ Ox.Image(Ox.UI.PATH + 'themes/oxlight/png/icon16.png', function(i) { i.encode('foo', function(i) { i.decode(function(s) { Ox.test(s, 'foo'); })})}) + undefined + @*/ + Ox.Image = function() { + + var self = {}, + that = {}; + + function error(mode) { + throw new RangeError('PNG codec can\'t ' + mode + ' ' + ( + mode == 'encode' ? 'data' : 'image' + )); + } + + function getCapacity(bpb) { + var capacity = 0; + that.forEach(function(rgba) { + capacity += rgba[3] == 255 ? bpb * 3/8 : 0; + }); + return capacity; + } + + function getIndex(xy) { + return ( + Ox.mod(xy[0], self.width) + + Ox.mod(xy[1] * self.width, self.width * self.height) + ) * 4; + } + + function getXY(index) { + index /= 4; + return [index % self.width, Math.floor(index / self.width)]; + } + + function init() { + if (self.image) { + self.width = self.image.width; + self.height = self.image.height; + } + that.canvas = Ox.$('').attr({ + width: self.width, + height: self.height + }); + that.context = that.canvas[0].getContext('2d'); + if (self.image) { + that.context.drawImage(self.image, 0, 0); + } else if (!Ox.isEqual(self.background, [0, 0, 0, 0])) { + that.context.fillStyle = ( + self.background.length == 3 ? 'rgb' : 'rgba' + ) + '(' + self.background.join(', ') + ')'; + that.context.fillRect(0, 0, self.width, self.height); + } + self.imageData = that.context.getImageData( + 0, 0, self.width, self.height + ); + self.data = self.imageData.data; + self.callback(that); + } + + function parseDrawOptions(options) { + options = options || {}; + that.context.strokeStyle = options.width === 0 + ? 'rgba(0, 0, 0, 0)' : options.color || 'rgb(0, 0, 0)'; + that.context.fillStyle = options.fill || 'rgba(0, 0, 0, 0)'; + that.context.lineWidth = options.width !== void 0 + ? options.width : 1; + } + + function setSL(sl, d) { + var c = sl == 's' ? 1 : 2; + return that.map(function(rgba) { + var hsl = Ox.hsl([rgba[0], rgba[1], rgba[2]]); + hsl[c] = d < 0 ? hsl[c] * (d + 1) : hsl[c] + (1 - hsl[c]) * d; + return Ox.rgb(hsl).concat(rgba[3]); + }); + } + + /*@ + blur Apply blur filter + (val) -> The image object + val Amount of blur (1 to 5, more is slow) + @*/ + that.blur = function(val) { + var filter = [], + size = val * 2 + 1, + sum = 0 + Ox.loop(size, function(x) { + Ox.loop(size, function(y) { + var isInCircle = +(Math.sqrt( + Math.pow(x - val, 2) + Math.pow(y - val, 2) + ) <= val); + sum += isInCircle; + filter.push(isInCircle) + }); + }); + filter = filter.map(function(val) { + return val / sum; + }); + return that.filter(filter); + }; + + //@ canvas Canvas element + + /*@ + channel Reduce the image to one channel + (channel) -> The image object + channel 'r', 'g', 'b', 'a', 'h', 's' or 'l' + @*/ + that.channel = function(str) { + str = str[0].toLowerCase(); + return that.map(function(rgba) { + var i = ['r', 'g', 'b', 'a'].indexOf(str), rgb, val; + if (i > -1) { + return Ox.map(rgba, function(v, c) { + return str == 'a' + ? (c < 3 ? rgba[3] : 255) + : (c == i || c == 3 ? v : 0); + }); + } else { + i = ['h', 's', 'l'].indexOf(str); + val = Ox.hsl([rgba[0], rgba[1], rgba[2]])[i]; + rgb = i == 0 + ? Ox.rgb([val, 1, 0.5]) + : Ox.range(3).map(function() { + return Math.floor(val * 255); + }); + return rgb.concat(rgba[3]); + } + }); + }; + + //@ context 2D drawing context + + /*@ + contour Apply contour filter + () -> The image object + @*/ + that.contour = function(val) { + return that.filter([ + +1, +1, +1, + +1, -7, +1, + +1, +1, +1 + ]); + }; + + /*@ + depth Reduce the bit depth + (depth) -> The image object + depth Bits per channel (1 to 7) + @*/ + that.depth = function(val) { + var pow = Math.pow(2, 8 - val); + return that.map(function(rgba) { + return rgba.map(function(v, i) { + return i < 3 ? Math.floor(v / pow) * pow/* * 255 / val*/ : v; + }); + }); + }; + + /*@ + drawCircle Draws a circle + (point, radius, options) -> The image object + point <[n]> Center (`[x, y]`) + radius Radius in px + options Options + color CSS color + fill CSS color + width Line width in px + @*/ + that.drawCircle = function(point, radius, options) { + parseDrawOptions(options); + that.context.beginPath(); + that.context.arc(point[0], point[1], radius, 0, 2 * Math.PI); + that.context.fill(); + that.context.stroke(); + return that; + }; + + /*@ + drawLine Draws a line + (points, options) -> The image object + points <[a]> End points (`[[x1, y1], [x2, y2]]`) + options Options + color CSS color + width Line width in px + @*/ + that.drawLine = function(points, options, isPath) { + parseDrawOptions(options); + !isPath && that.context.beginPath(); + !isPath && that.context.moveTo(points[0][0], points[0][1]); + that.context.lineTo(points[1][0], points[1][1]); + !isPath && that.context.stroke(); + return that; + }; + + /*@ + drawPath Draws a path + (points, options) -> The image object + points <[a]> Points (`[[x1, y2], [x2, y2], ...]`) + options Options + color CSS color + fill CSS color + width Line width in px + @*/ + that.drawPath = function(points, options) { + var n = points.length; + parseDrawOptions(options); + that.context.beginPath(); + that.context.moveTo(points[0][0], points[0][1]); + Ox.loop(options.close ? n : n - 1, function(i) { + that.drawLine([points[i], points[(i + 1) % n]], options, true); + }); + that.context.fill(); + that.context.stroke(); + return that; + }; + + /*@ + drawRectangle Draws a rectangle + (point, size, options) -> The image object + point <[n]> Top left corner (`[x, y]`) + size <[n]> Width and height in px (`[w, h]`) + options Options + color CSS color + fill CSS color + width Line width in px + @*/ + that.drawRectangle = function(point, size, options) { + parseDrawOptions(options); + that.context.fillRect(point[0], point[1], size[0], size[1]); + that.context.strokeRect(point[0], point[1], size[0], size[1]); + return that; + }; + + /*@ + drawText Draws text + (text, point, options) -> The image object + text Text + point <[n]> Top left corner (`[x, y]`) + options Options + color CSS color + font CSS font + outline CSS border + textAlign CSS text-align + @*/ + that.drawText = function(text, point, options) { + options = options || {}; + var match = ( + options.outline || '0px rgba(0, 0, 0, 0)' + ).match(/^([\d\.]+)px (.+)$/), + outlineWidth = match[1], + outlineColor = match[2]; + that.context.fillStyle = options.color || 'rgb(0, 0, 0)'; + that.context.font = options.font || '10px sans-serif'; + that.context.strokeStyle = outlineColor; + that.context.lineWidth = outlineWidth; + that.context.textAlign = options.textAlign || 'start'; + that.context.fillText(text, point[0], point[1]) + that.context.strokeText(text, point[0], point[1]) + return that; + }; + + /*@ + edges Apply edges filter + () -> The image object + @*/ + that.edges = function(val) { + return that.filter([ + -1, -1, -1, + -1, +8, -1, + -1, -1, -1 + ]).saturation(-1); + }; + + /*@ + emboss Apply emboss filter + () -> The image object + @*/ + that.emboss = function(val) { + return that.filter([ + -1, -1, 0, + -1, 0, +1, + 0, +1, +1 + ], 128).saturation(-1); + }; + + /*@ + encode Encodes a string into the image + For most purposes, deflate and mode should be omitted, since the + defaults make the existence of the message harder to detect. A valid + use case for deflate and mode would be to first encode a more easily + detected decoy string, and only then the secret string: + `image.encode(decoy, false, 1, function(image) { + image.encode(secret, -1, callback); })`. + (str, callback) -> The image object (unmodified) + (str, deflate, callback) -> The image object (unmodified) + (str, mode, callback) -> The image object (unmodified) + (str, deflate, mode, callback) -> The image object (unmodified) + (str, mode, deflate, callback) -> The image object (unmodified) + str The string to be encoded + callback Callback function + image The image object (modified) + deflate If true, encode the string with deflate + mode Encoding mode + If mode is between -7 and 0, the string will be encoded one bit + per RGB byte, as the number of bits within that byte set to 1, + modulo 2, by flipping, if necessary, the most (mode -7) to least + (mode 0) significant bit. If mode is between 1 and 255, the + string will be encoded bitwise into all bits per RGB byte that, + in mode, are set to 1. + @*/ + that.encode = function(str) { + var callback = arguments[arguments.length - 1], + deflate = Ox.isBoolean(arguments[1]) ? arguments[1] + : Ox.isBoolean(arguments[2]) ? arguments[2] : true, + mode = Ox.isNumber(arguments[1]) ? arguments[1] + : Ox.isNumber(arguments[2]) ? arguments[2] : 0, + b = 0, bin, + // Array of bits per byte to be modified (0 is LSB) + bits = mode < 1 ? [-mode] : Ox.filter(Ox.range(8), function(i) { + return mode & 1 << i; + }), + cap = getCapacity(bits.length), len; + // Compress the string + str = Ox[deflate ? 'encodeDeflate' : 'encodeUTF8'](str); + len = str.length; + // Prefix the string with its length, as a four-byte value + str = Ox.pad(Ox.encodeBase256(len), 'left', 4, '\u0000') + str; + str.length > cap && error('encode'); + while (str.length < cap) { + str += str.substr(4, len); + } + str = str.slice(0, Math.ceil(cap)); + // Create an array of bit values + bin = Ox.flatten(Ox.map(str.split(''), function(chr) { + return Ox.range(8).map(function(i) { + return chr.charCodeAt(0) >> 7 - i & 1; + }); + })); + b = 0; + that.forEach(function(rgba, xy, index) { + // If alpha is not 255, the RGB values may not be preserved + if (rgba[3] == 255) { + Ox.loop(3, function(c) { + // fixme: use: var data = that.context.imageData.data[i + c] + var i = index + c; + Ox.forEach(bits, function(bit) { + if (( + mode < 1 + // If the number of bits set to 1, mod 2 + ? Ox.sum(Ox.range(8).map(function(bit) { + return +!!(self.data[i] & 1 << bit); + })) % 2 + // or the one bit in question + : +!!(self.data[i] & 1 << bit) + // is not equal to the data bit + ) != bin[b++]) { + // then flip the bit + self.data[i] ^= 1 << bit; + } + }); + }); + } + }, function() { + that.context.putImageData(self.imageData, 0, 0); + callback(that); + }); + return that; + }; + + /*@ + decode Decode encoded string + (callback) -> The image object (unmodified) + (deflate, callback) -> The image object (unmodified) + (mode, callback) -> The image object (unmodified) + (deflate, mode, callback) -> The image object (unmodified) + (mode, deflate, callback) -> The image object (unmodified) + deflate If true, decode the string with deflate + mode See encode method + callback Callback function + image The image object (modified) + @*/ + that.decode = function() { + var callback = arguments[arguments.length - 1], + deflate = Ox.isBoolean(arguments[0]) ? arguments[0] + : Ox.isBoolean(arguments[1]) ? arguments[1] : true, + mode = Ox.isNumber(arguments[0]) ? arguments[0] + : Ox.isNumber(arguments[1]) ? arguments[1] : 0, + bin = '', + // Array of bits per byte to be modified (0 is LSB) + bits = mode < 1 ? [-mode] : Ox.range(8).filter(function(i) { + return mode & 1 << i; + }), + done = 0, len = 4, str = ''; + that.forEach(function(rgba, xy, index) { + if (rgba[3] == 255) { + Ox.loop(3, function(c) { + var i = index + c; + Ox.forEach(bits, function(bit) { + bin += mode < 1 + // Read the number of bits set to 1, mod 2 + ? Ox.sum(Ox.range(8).map(function(bit) { + return +!!(self.data[i] & 1 << bit); + })) % 2 + // or the one bit in question + : +!!(self.data[i] & 1 << bit); + if (bin.length == 8) { + // Every 8 bits, add one byte to the string + str += Ox.char(parseInt(bin, 2)); + bin = ''; + if (str.length == len) { + if (++done == 1) { + // After 4 bytes, parse string as length + len = Ox.decodeBase256(str); + if ( + len <= 0 || + len > getCapacity(bits.length) - 4 + ) { + error('decode'); + } + str = ''; + } else { + // After length more bytes, break + return false; + } + } + } + }); + // If done == 2, break + return done < 2; + }); + // If done == 2, break + return done < 2; + } + }, function() { + try { + if (deflate) { + Ox.decodeDeflate(str, callback); + } else { + callback(Ox.decodeUTF8(str)); + } + } catch (e) { + error('decode'); + } + }); + return that; + }; + + /*@ + filter Pixel-wise filter function + Undocumented, see source code + (filter) -> The image object + (filter, bias) -> The image object + filter <[n]> Filter matrix + bias Bias + @*/ + that.filter = function(filter, bias) { + bias = bias || 0; + var filterSize = Math.sqrt(filter.length), + d = (filterSize - 1) / 2, + imageData = that.context.createImageData(self.width, self.height), + data = []; + self.imageData = that.context.getImageData(0, 0, self.width, self.height); + self.data = self.imageData.data; + Ox.loop(0, self.data.length, 4, function(i) { + var filterIndex = 0, + xy = getXY(i); + Ox.loop(3, function(c) { + data[i + c] = 0; + }); + Ox.loop(-d, d + 1, function(x) { + Ox.loop(-d, d + 1, function(y) { + var pixelIndex = getIndex([xy[0] + x, xy[1] + y]); + Ox.loop(3, function(c) { + data[i + c] += self.data[pixelIndex + c] * filter[filterIndex]; + }); + filterIndex++; + }); + }); + }); + Ox.loop(0, self.data.length, 4, function(i) { + Ox.loop(4, function(c) { + imageData.data[i + c] = c < 3 + ? Ox.limit(Math.round(data[i + c] + bias), 0, 255) + : self.data[i + c]; + }); + }); + that.context.putImageData(imageData, 0, 0); + self.imageData = imageData; + self.data = data; + return that; + }; + + /*@ + forEach Pixel-wise forEach loop + (fn) -> The image object + (fn, callback) -> The image object + fn Iterator function + rgba <[n]> RGBA values + xy <[n]> XY coordinates + i Pixel index + callback Callback function (if present, forEach is async) + @*/ + that.forEach = function(iterator, callback) { + var data = self.data, + forEach = callback ? Ox.nonblockingForEach : Ox.forEach; + forEach(Ox.range(0, data.length, 4), function(i) { + return iterator([ + data[i], data[i + 1], data[i + 2], data[i + 3] + ], getXY(i), i); + }, callback, 250); + return that; + }; + + /*@ + getSize Returns width and height + () -> Image size + width Width in px + height Height in px + @*/ + that.getSize = function() { + return {width: self.width, height: self.height}; + }; + + /*@ + hue Change the hue of the image + (val) -> The image object + val Hue, in degrees + @*/ + that.hue = function(val) { + return that.map(function(rgba) { + var hsl = Ox.hsl([rgba[0], rgba[1], rgba[2]]); + hsl[0] = (hsl[0] + val) % 360; + return Ox.rgb(hsl).concat(rgba[3]); + }); + }; + + /*@ + imageData Get or set image data + () -> ImageData object + data <+> CanvasPixelArray + see https://developer.mozilla.org/en/DOM/CanvasPixelArray + height Height in px + width Width in px + (imageData) -> Image object with new image data + imageData ImageData object + @*/ + that.imageData = function() { + if (arguments.length == 0) { + return self.imageData; + } else { + self.imageData = self.context.createImageData(arguments[0]); + } + }; + + /*@ + invert Apply invert filter + () -> The image object + @*/ + that.invert = function() { + return that.map(function(rgba) { + return [255 - rgba[0], 255 - rgba[1], 255 - rgba[2], rgba[3]]; + }); + }; + + /*@ + lightness Apply lightness filter + (val) -> The image object + val Amount, from -1 (darkest) to 1 (lightest) + @*/ + that.lightness = function(val) { + return setSL('l', val); + }; + + /*@ + map Pixel-wise map function + (fn) -> The image object + fn Iterator function + rgba <[n]> RGBA values + xy <[n]> XY coordinates + i Pixel index + @*/ + that.map = function(fn, callback) { + self.imageData = that.context.getImageData( + 0, 0, self.width, self.height + ); + self.data = self.imageData.data; + that.forEach(function(rgba, xy, i) { + fn(rgba, xy, i).forEach(function(val, c) { + self.data[i + c] = val; + }); + }); + that.context.putImageData(self.imageData, 0, 0); + return that; + }; + + /*@ + mosaic Apply mosaic filter + (size) -> The image object + size Mosaic size + @*/ + that.mosaic = function(size) { + that.forEach(function(rgba, xy) { + if (xy[0] % size == 0 && xy[1] % size == 0) { + Ox.loop(size, function(x) { + Ox.loop(size, function(y) { + var hsl, rgb, xy_ = [xy[0] + x, xy[1] + y]; + if ( + (x == 0 || y == 0) + && !(x == size - 1 || y == size - 1) + ) { + that.pixel(xy_, rgba.map(function(c, i) { + return i < 3 ? Math.min(c + 16, 255) : c; + })); + } else if ( + (x == size - 1 || y == size - 1) + && !(x == 0 || y == 0) + ) { + that.pixel(xy_, rgba.map(function(c, i) { + return i < 3 ? Math.max(c - 16, 0) : c; + })); + } else { + that.pixel(xy_, rgba); + } + }); + }); + } + }); + that.context.putImageData(self.imageData, 0, 0); + return that; + }; + + /*@ + motionBlur Apply motion blur filter + () -> The image object + @*/ + that.motionBlur = function() { + return that.filter([ + 0.2, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.2, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.2, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.2, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.2 + ]); + }; + + /*@ + photocopy Apply photocopy filter + () -> The image object + @*/ + that.photocopy = function(val) { + return that.saturation(-1).depth(1).blur(1); + }; + + /*@ + pixel Get or set pixel values + (xy) -> <[n]> RGBA values + (x, y) -> <[n]> RGBA values + (xy, val) -> The image object + (x, y, val) -> The image object + x X coordinate + y Y coordinate + xy <[n]> XY coordinates ([x, y]) + val <[n]> RGBA values + @*/ + that.pixel = function() { + var xy = Ox.isArray(arguments[0]) + ? arguments[0] : [arguments[0], arguments[1]], + val = arguments.length > 1 && Ox.isArray(Ox.last(arguments)) + ? Ox.last(arguments) : null, + i = getIndex(xy), + ret; + if (!val) { + ret = Ox.range(4).map(function(c) { + return self.data[i + c]; + }); + } else { + val.forEach(function(v, c) { + self.data[i + c] = v; + }); + that.context.putImageData(self.imageData, 0, 0); + ret = that; + } + return ret; + }; + + /*@ + posterize Apply posterize filter + () -> The image object + @*/ + that.posterize = function() { + return that.blur(3).map(function(rgba) { + return [ + Math.floor(rgba[0] / 64) * 64, + Math.floor(rgba[1] / 64) * 64, + Math.floor(rgba[2] / 64) * 64, + rgba[3] + ]; + }); + }; + + that.resize = function(width, height) { + // fixme: doesn't work this way + that.canvas.attr({ + width: width, + height: height + }); + return that; + }; + + /*@ + saturation Apply saturation filter + (val) -> The image object + val Amount, from -1 (lowest) to 1 (highest) + @*/ + that.saturation = function(val) { + return setSL('s', val); + }; + + /*@ + sharpen Apply sharpen filter + () -> The image object + @*/ + that.sharpen = function(val) { + return that.filter([ + -1, -1, -1, + -1, +9, -1, + -1, -1, -1 + ]); + }; + + /*@ + solarize Apply solarize filter + () -> The image object + @*/ + that.solarize = function() { + return that.map(function(rgba) { + return [ + rgba[0] < 128 ? rgba[0] : 255 - rgba[0], + rgba[1] < 128 ? rgba[1] : 255 - rgba[1], + rgba[2] < 128 ? rgba[2] : 255 - rgba[2], + rgba[3] + ]; + }); + }; + + /*@ + src Get or set the image source + () -> Data URL + (src) -> Image object with new source + src Image source (local, remote or data URL) + @*/ + that.src = function() { + var ret; + if (arguments.length == 0) { + ret = that.canvas[0].toDataURL(); + } else { + var callback = arguments[1]; + self.src = arguments[0]; + self.image = new Image(); + self.image.onload = function() { + self.width = self.image.width; + self.height = self.image.height; + that.canvas.attr({ + width: self.width, + height: self.height + }); + that.context.drawImage(self.image, 0, 0); + self.imageData = that.context.getImageData( + 0, 0, self.width, self.height + ); + self.data = self.imageData.data; + callback && callback(that); + } + self.image.src = self.src; + ret = that; + } + return ret; + }; + + self.callback = arguments[arguments.length - 1]; + if (arguments.length == 2) { + self.src = arguments[0]; + self.image = new Image(); + self.image.onload = init; + self.image.src = self.src; + } else { + self.width = arguments[0]; + self.height = arguments[1]; + self.background = arguments.length == 4 + ? arguments[2] : [0, 0, 0, 0]; + init(); + } + + }; + + callback(true); + +} + diff --git a/min/Ox.js b/min/Ox.js new file mode 100644 index 00000000..6e827102 --- /dev/null +++ b/min/Ox.js @@ -0,0 +1,2 @@ +/* OxJS v0.2.0 | (c) 2024 0x2620 | MIT License | oxjs.org */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Ox={})}(this,function(exports){"use strict";function typeOf(e){const t=Object.prototype.toString.call(e).slice(8,-1).toLowerCase();if("object"===t){if(null===e)return"null";if(e instanceof Array)return"array";if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return"number"===t&&isNaN$1(e)?"nan":t}function isArray(e){return Array.isArray(e)}function isBoolean(e){return"boolean"==typeof e}function isDate(e){return e instanceof Date&&!isNaN$1(e)}function isDefined(e){return void 0!==e}function isElement(e){return!(!e||1!==e.nodeType)}function isEmpty$1(e){return null==e||(isArray(e)||isString(e)?0===e.length:!!isObject(e)&&0===Object.keys(e).length)}function isEqual(e,t){if(e===t)return!0;const n=typeOf(e);if(n!==typeOf(t))return!1;if("array"===n){if(e.length!==t.length)return!1;for(let n=0;nt):[]}function values$1(e){return isObject(e)?Object.values(e):isArray(e)?[...e]:isString(e)?e.split(""):[]}const STACK_LENGTH=5e4;function slice(e,t,n){try{const r=Array.prototype.slice.call(e,t,n);if(0===r.length&&e.length>0)throw new Error("Broken slice implementation");return r}catch(r){const a=void 0===n?[t]:[t,n],o=[];let i,s;for("string"===typeOf(e)&&(e=e.split("")),s=e.length,i=0;i{"string"==typeof e?r.appendChild(document.createTextNode(e)):e&&r.appendChild(e)}),r}var DOM={documentReady:documentReady,$:$,createElement:createElement},DOMUtils=Object.freeze({__proto__:null,$:$,createElement:createElement,default:DOM,documentReady:documentReady});async function getFile(e,t){try{const n=await fetch(e),r=await n.text();return t&&t(r),r}catch(n){return console.error("Failed to get file:",e,n),t&&t(null),null}}async function getJSON(e,t){try{const n=await fetch(e),r=await n.json();return t&&t(r),r}catch(n){return console.error("Failed to get JSON:",e,n),t&&t(null),null}}async function post(e,t,n){try{const r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await r.json();return n&&n(a),a}catch(t){return console.error("Failed to post:",e,t),n&&n(null),null}}var Request={getFile:getFile,getJSON:getJSON,post:post},RequestUtils=Object.freeze({__proto__:null,default:Request,getFile:getFile,getJSON:getJSON,post:post});let LOCALE="en";const LOCALES={};async function setLocale(e,t){LOCALE=e,t&&t()}function _(e,t={}){return e}var Locale={LOCALE:LOCALE,LOCALES:LOCALES,setLocale:setLocale,_:_},LocaleUtils=Object.freeze({__proto__:null,get LOCALE(){return LOCALE},LOCALES:LOCALES,_:_,default:Locale,setLocale:setLocale});function wrap(e){return{value:e,_wrapped:!0}}const Core={wrap:wrap};function localStorage(e){let t;try{t=window.localStorage||{},t.setItem("OxJS.test",""),t.removeItem("OxJS.test")}catch(e){t={}}function n(r,a){let o;if(0===arguments.length){o={};for(const n in t)n.startsWith(e+".")&&(o[n.slice(e.length+1)]=JSON.parse(t[n]))}else if(1===arguments.length&&"string"==typeof r){const n=t[e+"."+r];o=void 0===n?void 0:JSON.parse(n)}else{const i="object"==typeof r?r:{[r]:a};for(const[n,r]of Object.entries(i))t[e+"."+n]=JSON.stringify(r);o=n}return o}return n.delete=function(...r){return(0===r.length?Object.keys(n()):r).forEach(n=>{delete t[e+"."+n]}),n},n}function loop(...e){const t=e.length,n=t>2?e[0]:0,r=e[t>2?1:0],a=4===t?e[2]:n<=r?1:-1,o=e[t-1];let i;for(i=n;(a>0?ir)&&!1!==o(i);i+=a);return i}function cache(e,t){var n={},r=(t=t||{}).async,a=t.key||JSON.stringify;return function(){var t=Array.prototype.slice.call(arguments),o=r?t.pop():null,i=a(t);if(i in n){if(!r)return n[i];setTimeout(function(){o(n[i])},0)}else{if(!r)return n[i]=e.apply(this,t);e.apply(this,t.concat(function(e){n[i]=e,o(e)}))}}}function debounce(e,t,n){var r;return function(){var a=this,o=arguments,i=n&&!r;clearTimeout(r),r=setTimeout(function(){r=null,n||e.apply(a,o)},t),i&&e.apply(a,o)}}function sequence(){var e=Array.prototype.slice.call(arguments);return function(){var t=Array.prototype.slice.call(arguments),n=this;e.forEach(function(e){e.apply(n,t)})}}function throttle(e,t){var n,r,a,o,i=0,s=function(){i=Date.now(),n=null,o=e.apply(r,a),n||(r=a=null)};return function(){var u=Date.now(),c=t-(u-i);return r=this,a=arguments,c<=0||c>t?(n&&(clearTimeout(n),n=null),i=u,o=e.apply(r,a),n||(r=a=null)):n||(n=setTimeout(s,c)),o}}function bind(e,t){var n=Array.prototype.slice.call(arguments,2);return function(){return e.apply(t,n.concat(Array.prototype.slice.call(arguments)))}}function identity(e){return e}function noop(){}function once(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(this,arguments)),t}}function constant(e){return function(){return e}}function compose(){var e=Array.prototype.slice.call(arguments);return function(){for(var t=Array.prototype.slice.call(arguments),n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}}function pipe(){var e=Array.prototype.slice.call(arguments);return function(){for(var t=Array.prototype.slice.call(arguments),n=0;n!r.includes(e)))},n.log=function(...e){if(!t.filterEnabled||t.filter.includes(e[0])){const t=new Date,n=`${t.toTimeString().split(" ")[0]}.${t.getMilliseconds().toString().padStart(3,"0")}`;return e.unshift(n),window.console&&window.console.log&&window.console.log(...e),e.join(" ")}}}();var Function={cache:cache,debounce:debounce,sequence:sequence,throttle:throttle,bind:bind,identity:identity,noop:noop,once:once,constant:constant,compose:compose,pipe:pipe,memoize:memoize,partial:partial},FunctionUtils=Object.freeze({__proto__:null,bind:bind,cache:cache,compose:compose,constant:constant,debounce:debounce,default:Function,identity:identity,memoize:memoize,noop:noop,once:once,partial:partial,pipe:pipe,sequence:sequence,throttle:throttle});function applyPolyfills(){Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null==this)throw new TypeError("this is null or not defined");var a=Object(this),o=a.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=new Array(i),a=0;a>>0;if("function"!=typeof e)throw new TypeError;for(var r=[],a=arguments.length>=2?arguments[1]:void 0,o=0;o>>0;if(0===a)return-1;var o=+t||0;if(Math.abs(o)===1/0&&(o=0),o>=a)return-1;for(n=Math.max(o>=0?o:a-Math.abs(o),0);n=0?n:n+t}function rad(e){return e*Math.PI/180}function random(e,t){return 0===arguments.length?Math.random():1===arguments.length?Math.floor(Math.random()*e):e+Math.floor(Math.random()*(t-e))}function round(e,t){var n=Math.pow(10,t||0);return Math.round(e*n)/n}function sign(e){return e>0?1:e<0?-1:0}function sinh(e){return(Math.exp(e)-Math.exp(-e))/2}function sum$1(e){return e.reduce(function(e,t){return e+(isNumber(t)?t:0)},0)}function tanh(e){return sinh(e)/cosh(e)}function getBearing(e,t){var n=rad(e.lat),r=rad(t.lat),a=rad(e.lng),o=rad(t.lng),i=Math.sin(o-a)*Math.cos(r),s=Math.cos(n)*Math.sin(r)-Math.sin(n)*Math.cos(r)*Math.cos(o-a);return(deg(Math.atan2(i,s))+360)%360}function getCenter(e){var t=0,n=0;return e.forEach(function(e){t+=e.lat,n+=e.lng}),{lat:t/e.length,lng:n/e.length}}function getCircle(e,t,n){var r=360/(n=n||36);return Array.from({length:n},function(n,a){return getPoint(e,r*a,t)})}function getDistance(e,t){var n=rad(e.lat),r=rad(t.lat),a=rad(t.lat-e.lat),o=rad(t.lng-e.lng),i=Math.sin(a/2)*Math.sin(a/2)+Math.cos(n)*Math.cos(r)*Math.sin(o/2)*Math.sin(o/2);return 6371e3*(2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i)))}function getPoint(e,t,n){var r=rad(e.lat),a=rad(e.lng);t=rad(t),n/=6371e3;var o=Math.asin(Math.sin(r)*Math.cos(n)+Math.cos(r)*Math.sin(n)*Math.cos(t)),i=a+Math.atan2(Math.sin(t)*Math.sin(n)*Math.cos(r),Math.cos(n)-Math.sin(r)*Math.sin(o));return{lat:deg(o),lng:deg(i)}}var Math$1={acosh:acosh,asinh:asinh,atanh:atanh,cosh:cosh,deg:deg,divmod:divmod,limit:limit,log:log,mod:mod,rad:rad,random:random,round:round,sign:sign,sinh:sinh,sum:sum$1,tanh:tanh,getBearing:getBearing,getCenter:getCenter,getCircle:getCircle,getDistance:getDistance,getPoint:getPoint},MathUtils=Object.freeze({__proto__:null,acosh:acosh,asinh:asinh,atanh:atanh,cosh:cosh,default:Math$1,deg:deg,divmod:divmod,getBearing:getBearing,getCenter:getCenter,getCircle:getCircle,getDistance:getDistance,getPoint:getPoint,limit:limit,log:log,mod:mod,rad:rad,random:random,round:round,sign:sign,sinh:sinh,sum:sum$1,tanh:tanh});function capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}function clean(e){return e.replace(/\s+/g," ").replace(/^\s+|\s+$/g,"")}function endsWith$1(e,t){return e.slice(-t.length)===t}function format(e,...t){return e.replace(/\{(\d+)\}/g,function(e,n){return isUndefined(t[n])?e:t[n]})}function isValidEmail(e){return/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(e)}function lowercase(e){return e.toLowerCase()}function pad$1(e,t,n,r){e=String(e),n=n||" ",r=r||"left";var a=Math.max(0,t-e.length),o=repeat(n,Math.ceil(a/n.length)).slice(0,a);return"left"===r||"both"===r?o+e:e+o}function parsePath$1(e){var t=/^(.+\/)?(.+?)(\.[^.]+)?$/.exec(e)||[];return{pathname:e,dirname:t[1]||"",filename:t[2]||"",extension:t[3]?t[3].slice(1):""}}function parseURL(e){var t=/^(?:(https?:)\/\/)?([\w.-]+)(:\d+)?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/.exec(e)||[];return{protocol:t[1]||"",hostname:t[2]||"",port:t[3]?t[3].slice(1):"",pathname:t[4]||"/",search:t[5]||"",hash:t[6]||""}}function removeHTML(e){return e.replace(/<[^>]*>/g,"")}function repeat(e,t){return new Array(t+1).join(e)}function reverse(e){return e.split("").reverse().join("")}function startsWith$1(e,t){return e.slice(0,t.length)===t}function stripTags$1(e){return e.replace(/<[^>]+>/g,"")}function toCamelCase(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}function toDashes(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}function toNumber(e){return+e}function toTitleCase(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()})}function toUnderscores(e){return e.replace(/[A-Z]/g,function(e){return"_"+e.toLowerCase()})}function truncate(e,t,n,r){if(n=n||"...",r=r||"right",e.length<=t)return e;if(t=Math.max(t-n.length,0),"left"===r)return n+e.slice(-t);if("center"===r){var a=Math.ceil(t/2),o=Math.floor(t/2);return e.slice(0,a)+n+e.slice(-o)}return e.slice(0,t)+n}function uppercase(e){return e.toUpperCase()}function words(e){return e.split(/\s+/).filter(function(e){return e.length>0})}function wordwrap(e,t,n,r){t=t||80,n=n||"\n";var a=[],o=e.split(" "),i="";return o.forEach(function(e){i&&(i+" "+e).length>t?(a.push(i),i=e):i=i?i+" "+e:e}),i&&a.push(i),a.join(n)}const char=String.fromCharCode;function splice(e,t,n){const r=e.split("");return Array.prototype.splice.apply(r,slice(arguments,1)),r.join("")}var String$1={capitalize:capitalize,clean:clean,endsWith:endsWith$1,format:format,isValidEmail:isValidEmail,lowercase:lowercase,pad:pad$1,parsePath:parsePath$1,parseURL:parseURL,removeHTML:removeHTML,repeat:repeat,reverse:reverse,startsWith:startsWith$1,stripTags:stripTags$1,toCamelCase:toCamelCase,toDashes:toDashes,toNumber:toNumber,toTitleCase:toTitleCase,toUnderscores:toUnderscores,truncate:truncate,uppercase:uppercase,words:words,wordwrap:wordwrap,char:char,splice:splice},StringUtils=Object.freeze({__proto__:null,capitalize:capitalize,char:char,clean:clean,default:String$1,endsWith:endsWith$1,format:format,isValidEmail:isValidEmail,lowercase:lowercase,pad:pad$1,parsePath:parsePath$1,parseURL:parseURL,removeHTML:removeHTML,repeat:repeat,reverse:reverse,splice:splice,startsWith:startsWith$1,stripTags:stripTags$1,toCamelCase:toCamelCase,toDashes:toDashes,toNumber:toNumber,toTitleCase:toTitleCase,toUnderscores:toUnderscores,truncate:truncate,uppercase:uppercase,words:words,wordwrap:wordwrap});function api(e,t){var n,r,a={cache:(t=t||{}).cache,enums:t.enums?(n=t.enums,r={},forEach(n,function(e,t){r[t]=e}),r):{},geo:t.geo,map:t.map||{},sort:t.sort||[],sums:t.sums||[],unique:t.unique||"id"},o=function(t,n){var r,o,s,c={},l={data:{},status:{code:200,text:"ok"}};return(t=t||{}).query?(t.query.conditions=i(t.query.conditions),l.data.items=e.filter(function(e){return u(e,t.query)})):l.data.items=clone(e),t.sort&&l.data.items.length>1&&(o=[],t.sort=(s=t.sort.concat(a.sort),s.map(function(e){return isString(e)?{key:e.slice(1),operator:"+"==e[0]?"+":"-"}:e})).filter(function(e){var t=-1==o.indexOf(e.key);return t&&o.push(e.key),t}),t.sort.forEach(function(e){var t=e.key;a.enums[t]?c[t]=function(e){return a.enums[t].indexOf(e)}:a.map[t]&&(c[t]=a.map[t])}),l.data.items=sortBy$1(l.data.items,t.sort,c)),t.positions?(r={},t.positions.forEach(function(e){r[e]=getIndex(l.data.items,a.unique,e)}),l.data={positions:r}):t.keys?(isUndefined(t.range)||(l.data.items=l.data.items.slice(t.range[0],t.range[1])),t.keys&&(l.data.items=l.data.items.map(function(e){var n={};return t.keys.forEach(function(t){n[t]=e[t]}),n})),l.data={items:l.data.items}):(r={},a.sums.forEach(function(e){r[e]=sum(l.data.items,e)}),l.data=extend(r,{items:l.data.items.length})),n&&n(l),l};function i(e){return e.map(function(e){var t=extend({},e);return t.conditions?t.conditions=i(t.conditions):t.value=isArray(t.value)?t.value.map(s):s(t.value),t})}function s(e){return isString(e)?e.toLowerCase():e}function u(e,t){var n="&"==t.operator;return forEach(t.conditions,function(r){var a=r.conditions?u(e,r):function(e,t){var n=t.key,r=t.operator.replace(/^!/,""),a=t.value,o=map[n]?map[n](e[n],e):e[n],i={"=":function(e,t){return isArray(t)?t.indexOf(e)>-1:isString(e)?e.toLowerCase().indexOf(t)>-1:e===t},"==":function(e,t){return isArray(t)?t.indexOf(e)>-1:e===t},"<":function(e,t){return isString(e)?-1==e.toLowerCase().localeCompare(t):e":function(e,t){return isString(e)?1==e.toLowerCase().localeCompare(t):e>t},">=":function(e,t){return isString(e)?e.toLowerCase().localeCompare(t)>-1:e>=t},"^":function(e,t){return isArray(t)?t.some(function(t){return startsWith(e,t)}):startsWith(e,t)},$:function(e,t){return isArray(t)?t.some(function(t){return endsWith(e,t)}):endsWith(e,t)}}[r](o,a);return"!"==t.operator[0]?!i:i}(e,r);return a&&"|"==t.operator?(n=!0,!1):a||"&"!=t.operator?void 0:(n=!1,!1)}),n}return o.enums=a.enums,o.map=a.map,o.sort=a.sort,o.sums=a.sums,a.cache&&(o=cache(o,{async:!0})),o}function compact(e){return filter(e,function(e){return null!=e})}function count(e,t){return filter(e,t||identity).length}function sort(e,t){var n=getSortValues(t?e.map(t):e);return e.sort(function(e,r){return e=t?t(e):e,r=t?t(r):r,n[e]n[r]?1:0})}function unique(e,t){var n=[];return e.length&&(t?e.forEach(function(e){var r=t(e);n.some(function(e){return t(e)===r})||n.push(e)}):n=e.filter(function(t,n){return e.indexOf(t)==n})),n}function zip(){var e=Array.prototype.slice.call(arguments);return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}function startsWith(e,t){return isString(e)&&0===e.toLowerCase().indexOf(t)}function endsWith(e,t){return isString(e)&&e.toLowerCase().indexOf(t)===e.length-t.length}function getIndex(e,t,n){var r=-1;return e.some(function(e,a){if(e[t]===n)return r=a,!0}),r}function sum(e,t){return e.reduce(function(e,n){return e+(n[t]||0)},0)}function sortBy$1(e,t,n){var r={};return(t=t||[]).forEach(function(t){var a=t.key,o=n&&n[a]?n[a]:identity;r[a]={},e.forEach(function(e){var t=o(e[a],e);r[a][t]||(r[a][t]=getSortValue(isString(t)?t.toLowerCase():t))})}),e.sort(function(e,a){var o=0;return t.some(function(t){var i=t.key,s=n&&n[i]?n[i]:identity,u=s(e[i],e),c=s(a[i],a),l=r[i][u],f=r[i][c];return lf&&(o="+"==t.operator?1:-1),0!==o}),o})}function getSortValue(e){var t=e;return isString(e)&&(t=e.toLowerCase().replace(/^\W+/,"").replace(/\d+/g,function(e){return e.padStart(16,"0")})),t}function getSortValues(e){var t={};return e.forEach(function(e){t[e]||(t[e]=getSortValue(e))}),t}function last$1(e,t){var n;return 1==arguments.length?n=e[e.length-1]:(e[e.length-1]=t,n=e),n}function makeArray(e){var t=typeOf(e);return"arguments"==t||"nodelist"==t?slice(e):"array"==t?e:[e]}function range(){var e=[];return loop.apply(null,slice(arguments).concat(function(t){e.push(t)})),e}var Array$1={api:api,compact:compact,count:count,sort:sort,unique:unique,zip:zip,last:last$1,makeArray:makeArray,range:range,slice:slice,max:max,min:min,forEach:forEach,len:len,map:map,filter:filter,values:values,keyOf:keyOf,isEmpty:isEmpty,contains:contains,random:random,char:char,splice:splice,clean:clean,repeat:repeat,loop:loop},ArrayUtils=Object.freeze({__proto__:null,api:api,char:char,clean:clean,compact:compact,contains:contains,count:count,default:Array$1,filter:filter,forEach:forEach,isEmpty:isEmpty,keyOf:keyOf,last:last$1,len:len,loop:loop,makeArray:makeArray,map:map,max:max,min:min,random:random,range:range,repeat:repeat,slice:slice,sort:sort,splice:splice,unique:unique,values:values,zip:zip});function getDayName(e,t){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][getDayOfWeek(e,t)]}function getDayOfWeek(e,t){return e=makeDate(e),t?e.getUTCDay():e.getDay()}function getDayOfYear(e,t){const n=(e=makeDate(e))-new Date(Date.UTC(getFullYear(e,t),0,1));return Math.floor(n/864e5)+1}function getDaysInMonth(e,t){return new Date(e,t+1,0).getDate()}function getDaysInYear(e){return isLeapYear(e)?366:365}function getFirstDayOfWeek(e,t){const n=getDayOfWeek(e=makeDate(e),t);return new Date(e.getTime()-864e5*n)}function getFullYear(e,t){return e=makeDate(e),t?e.getUTCFullYear():e.getFullYear()}function getHours(e,t){return e=makeDate(e),t?e.getUTCHours():e.getHours()}function getISODate(e,t){return formatDate$1(e,"%Y-%m-%d",t)}function getISOWeek(e,t){const n=getFullYear(e=makeDate(e),t),r=getFirstThursday(n,t),a=Math.floor((e-r)/6048e5)+1;if(a<1)return getISOWeek(new Date(n-1,11,31),t);if(a>52){if(e>=getFirstThursday(n+1,t))return 1}return a}function getISOYear(e,t){const n=getFullYear(e=makeDate(e),t),r=getISOWeek(e,t);return 1===r&&11===getMonth(e,t)?n+1:r>=52&&0===getMonth(e,t)?n-1:n}function getMinutes(e,t){return e=makeDate(e),t?e.getUTCMinutes():e.getMinutes()}function getMonth(e,t){return e=makeDate(e),t?e.getUTCMonth():e.getMonth()}function getMonthName(e,t){return["January","February","March","April","May","June","July","August","September","October","November","December"][getMonth(e,t)]}function getSeconds(e,t){return e=makeDate(e),t?e.getUTCSeconds():e.getSeconds()}function getMilliseconds(e,t){return e=makeDate(e),t?e.getUTCMilliseconds():e.getMilliseconds()}function getTimezoneOffset(e){return makeDate(e).getTimezoneOffset()}function getTimezoneOffsetString(e){const t=getTimezoneOffset(e),n=t<=0?"+":"-",r=Math.floor(Math.abs(t)/60),a=Math.abs(t)%60;return n+pad(r,2)+":"+pad(a,2)}function getUnixTime(e){return Math.floor(makeDate(e).getTime()/1e3)}function getWeek(e,t){e=makeDate(e);const n=new Date(Date.UTC(getFullYear(e,t),0,1)),r=Math.floor((e-n)/864e5);return Math.ceil((r+getDayOfWeek(n,t)+1)/7)}function isLeapYear(e){return e%4==0&&(e%100!=0||e%400==0)}function isValidDate(e){return e=makeDate(e),!isNaN(e.getTime())}function makeDate(e){return isDate(e)?e:isString(e)||isNumber(e)?new Date(e):isUndefined(e)?new Date:new Date(e)}function formatDate$1(e,t,n){e=makeDate(e);const r={"%a":()=>getDayName(e,n).substr(0,3),"%A":()=>getDayName(e,n),"%b":()=>getMonthName(e,n).substr(0,3),"%B":()=>getMonthName(e,n),"%c":()=>e.toLocaleString(),"%d":()=>pad(getDate(e,n),2),"%e":()=>pad(getDate(e,n),2," "),"%H":()=>pad(getHours(e,n),2),"%I":()=>pad((getHours(e,n)+11)%12+1,2),"%j":()=>pad(getDayOfYear(e,n),3),"%k":()=>pad(getHours(e,n),2," "),"%l":()=>pad((getHours(e,n)+11)%12+1,2," "),"%m":()=>pad(getMonth(e,n)+1,2),"%M":()=>pad(getMinutes(e,n),2),"%p":()=>getHours(e,n)<12?"AM":"PM","%S":()=>pad(getSeconds(e,n),2),"%u":()=>getDayOfWeek(e,n)||7,"%U":()=>pad(getWeek(e,n),2),"%V":()=>pad(getISOWeek(e,n),2),"%w":()=>getDayOfWeek(e,n),"%W":()=>pad(getWeek(e,n),2),"%x":()=>e.toLocaleDateString(),"%X":()=>e.toLocaleTimeString(),"%y":()=>pad(getFullYear(e,n)%100,2),"%Y":()=>getFullYear(e,n),"%z":()=>getTimezoneOffsetString(e),"%Z":()=>"","%%":()=>"%"};return(t=t||"%Y-%m-%d %H:%M:%S").replace(/%[a-zA-Z%]/g,e=>r[e]?r[e]():e)}function parseDate$1(e,t,n){return new Date(e)}function getDate(e,t){return e=makeDate(e),t?e.getUTCDate():e.getDate()}function getDay(e,t){return getDayOfWeek(e,t)}function getISODay(e,t){const n=getDayOfWeek(e,t);return 0===n?7:n}function getDayOfTheYear(e,t){return getDayOfYear(e,t)}function getFirstDayOfTheYear(e,t){const n=getFullYear(e=makeDate(e),t);return new Date(Date.UTC(n,0,1))}function setDate(e,t,n){return e=makeDate(e),n?e.setUTCDate(t):e.setDate(t),e}function setFullYear(e,t,n){return e=makeDate(e),n?e.setUTCFullYear(t):e.setFullYear(t),e}function setMonth(e,t,n){return e=makeDate(e),n?e.setUTCMonth(t):e.setMonth(t),e}function setHours(e,t,n){return e=makeDate(e),n?e.setUTCHours(t):e.setHours(t),e}function setMinutes(e,t,n){return e=makeDate(e),n?e.setUTCMinutes(t):e.setMinutes(t),e}function setSeconds(e,t,n){return e=makeDate(e),n?e.setUTCSeconds(t):e.setSeconds(t),e}function getFirstThursday(e,t){const n=new Date(Date.UTC(e,0,1)),r=(11-getDayOfWeek(n,t))%7;return new Date(n.getTime()+864e5*r)}function pad(e,t,n){n=n||"0";const r=String(e);return n.repeat(Math.max(0,t-r.length))+r}var Date$1={getDayName:getDayName,getDayOfWeek:getDayOfWeek,getDayOfYear:getDayOfYear,getDaysInMonth:getDaysInMonth,getDaysInYear:getDaysInYear,getFirstDayOfWeek:getFirstDayOfWeek,getFullYear:getFullYear,getHours:getHours,getISODate:getISODate,getISOWeek:getISOWeek,getISOYear:getISOYear,getMinutes:getMinutes,getMonth:getMonth,getMonthName:getMonthName,getSeconds:getSeconds,getMilliseconds:getMilliseconds,getTimezoneOffset:getTimezoneOffset,getTimezoneOffsetString:getTimezoneOffsetString,getUnixTime:getUnixTime,getWeek:getWeek,isLeapYear:isLeapYear,isValidDate:isValidDate,makeDate:makeDate,formatDate:formatDate$1,parseDate:parseDate$1,getDate:getDate,getDay:getDay,getISODay:getISODay,getDayOfTheYear:getDayOfTheYear,getFirstDayOfTheYear:getFirstDayOfTheYear,setDate:setDate,setFullYear:setFullYear,setMonth:setMonth,setHours:setHours,setMinutes:setMinutes,setSeconds:setSeconds},DateUtils=Object.freeze({__proto__:null,default:Date$1,formatDate:formatDate$1,getDate:getDate,getDay:getDay,getDayName:getDayName,getDayOfTheYear:getDayOfTheYear,getDayOfWeek:getDayOfWeek,getDayOfYear:getDayOfYear,getDaysInMonth:getDaysInMonth,getDaysInYear:getDaysInYear,getFirstDayOfTheYear:getFirstDayOfTheYear,getFirstDayOfWeek:getFirstDayOfWeek,getFullYear:getFullYear,getHours:getHours,getISODate:getISODate,getISODay:getISODay,getISOWeek:getISOWeek,getISOYear:getISOYear,getMilliseconds:getMilliseconds,getMinutes:getMinutes,getMonth:getMonth,getMonthName:getMonthName,getSeconds:getSeconds,getTimezoneOffset:getTimezoneOffset,getTimezoneOffsetString:getTimezoneOffsetString,getUnixTime:getUnixTime,getWeek:getWeek,isLeapYear:isLeapYear,isValidDate:isValidDate,makeDate:makeDate,parseDate:parseDate$1,setDate:setDate,setFullYear:setFullYear,setHours:setHours,setMinutes:setMinutes,setMonth:setMonth,setSeconds:setSeconds});function last(e){return e[e.length-1]}function sortBy(e,t){return e.slice().sort(function(e,n){var r=Array.isArray(t)?t.map(t=>e[t]):e[t],a=Array.isArray(t)?t.map(e=>n[e]):n[t];return r>a?1:r=1e6?"k":"";return t=isUndefined(t)?8:t,formatNumber((n?e/1e6:e).toPrecision(t))+" "+n+"m²"}function formatCount(e,t,n){return n=(n||t+"s")+(2===e?"{2}":""),(0===e?_("no"):formatNumber(e))+" "+_(1===e?t:n)}function formatCurrency(e,t,n){return t+formatNumber(e,n)}var formatPatterns=[["%",function(){return"%{%}"}],["c",function(){return"%D %r"}],["D",function(){return"%m/%d/%y"}],["ED",function(){return"%ES %T"}],["Ed",function(){return"%ES %R"}],["EL",function(){return _("%A, %B %e, %Y")}],["El",function(){return _("%B %e, %Y")}],["EM",function(){return _("%a, %b %e, %Y")}],["Em",function(){return _("%b %e, %Y")}],["ES",function(){return _("%m/%d/%Y")}],["Es",function(){return _("%m/%d/%y")}],["ET",function(){return _("%I:%M:%S %p")}],["Et",function(){return _("%I:%M %p")}],["F",function(){return"%Y-%m-%d"}],["h",function(){return"%b"}],["R",function(){return"%H:%M"}],["r",function(){return"%I:%M:%S %p"}],["T",function(){return"%H:%M:%S"}],["v",function(){return"%e-%b-%Y"}],["\\+",function(){return"%a %b %e %H:%M:%S %Z %Y"}],["A",function(e,t){return _(WEEKDAYS[(getDay(e,t)+6)%7])}],["a",function(e,t){return _(SHORT_WEEKDAYS[(getDay(e,t)+6)%7])}],["B",function(e,t){return _(MONTHS[getMonth(e,t)])}],["b",function(e,t){return _(SHORT_MONTHS[getMonth(e,t)])}],["C",function(e,t){return Math.floor(getFullYear(e,t)/100).toString()}],["d",function(e,t){return pad$1(getDate(e,t),2)}],["e",function(e,t){return pad$1(getDate(e,t),2," ")}],["G",function(e,t){return getISOYear(e,t)}],["g",function(e,t){return getISOYear(e,t).toString().slice(-2)}],["H",function(e,t){return pad$1(getHours(e,t),2)}],["I",function(e,t){return pad$1((getHours(e,t)+11)%12+1,2)}],["j",function(e,t){return pad$1(getDayOfTheYear(e,t),3)}],["k",function(e,t){return pad$1(getHours(e,t),2," ")}],["l",function(e,t){return pad$1((getHours(e,t)+11)%12+1,2," ")}],["M",function(e,t){return pad$1(getMinutes(e,t),2)}],["m",function(e,t){return pad$1(getMonth(e,t)+1,2)}],["p",function(e,t){return _(AMPM[Math.floor(getHours(e,t)/12)])}],["Q",function(e,t){return Math.floor(getMonth(e,t)/4)+1}],["S",function(e,t){return pad$1(getSeconds(e,t),2)}],["s",function(e,t){return Math.floor((+e-(t?getTimezoneOffset(e):0))/1e3)}],["U",function(e,t){return pad$1(getWeek(e,t),2)}],["u",function(e,t){return getISODay(e,t)}],["V",function(e,t){return pad$1(getISOWeek(e,t),2)}],["W",function(e,t){return pad$1(Math.floor((getDayOfTheYear(e,t)+(getFirstDayOfTheYear(e,t)||7)-2)/7),2)}],["w",function(e,t){return getDay(e,t)}],["X",function(e,t){var n=getFullYear(e,t);return Math.abs(n)+" "+_(BCAD[n<0?0:1])}],["x",function(e,t){var n=getFullYear(e,t);return Math.abs(n)+(n<1e3?" "+_(BCAD[n<0?0:1]):"")}],["Y",function(e,t){return getFullYear(e,t)}],["y",function(e,t){return getFullYear(e,t).toString().slice(-2)}],["Z",function(e,t){return t?"UTC":(e.toString().split("(")[1]||"").replace(")","")}],["z",function(e,t){return t?"+0000":getTimezoneOffsetString(e)}],["n",function(){return"\n"}],["t",function(){return"\t"}],["\\{%\\}",function(){return"%"}]].map(function(e){return[new RegExp("%"+e[0],"g"),e[1]]});function formatDate(e,t,n){return""===e?"":(e=makeDate(e),formatPatterns.forEach(function(r){t=t.replace(r[0],function(){return r[1](e,n)})}),t)}function formatDateRange(e,t,n){t=t||formatDate(new Date,"%Y-%m-%d");var r,a=!1,o=[e,t],i=o.map(function(e){return parseDate(e)}),s=o.map(function(e){var t=compact(/(-?\d+)-?(\d+)?-?(\d+)? ?(\d+)?:?(\d+)?:?(\d+)?/.exec(e));return t.shift(),t.map(function(e){return parseInt(e,10)})}),u=s.map(function(e){return e.length}),c=s[0][0]<0?"%X":"%Y",l=[c,"%B "+c,"%a, %b %e, "+c,"%a, %b %e, "+c+", %H:%M","%a, %b %e, "+c+", %H:%M","%a, %b %e, "+c+", %H:%M:%S"];return u[0]==u[1]&&(a=!0,loop(u[0],function(e){if(e1?"s":""):""})).join(" ")}function formatDegrees(e,t){var n=0,r=e<0?"-":"",a=formatDuration(Math.round(3600*Math.abs(e))).split(":");return 4==a.length&&(n=parseInt(a.shift(),10)),a[0]=24*n+parseInt(a[0],10),(t?"":r)+a[0]+"°"+a[1]+"'"+a[2]+'"'+("lat"==t?e<0?"S":"N":"lng"==t?e<0?"W":"E":"")}function formatDimensions(e,t){return e.map(function(e){return formatNumber(e)}).join(" × ")+(t?" "+t:"")}const formatResolution=formatDimensions;function formatDuration(e){for(var t=last(arguments),n="short"==t||"long"==t?t:"none",r=isNumber(arguments[1])?arguments[1]:0,a=(e=round(Math.abs(e),r),[Math.floor(e/31536e3),Math.floor(e%31536e3/86400),Math.floor(e%86400/3600),Math.floor(e%3600/60),formatNumber(e%60,r)]),o="short"==n?["y","d","h","m","s"]:"long"==n?["year","day","hour","minute","second"]:[],i=[a[0].toString().length,a[0]?3:a[1].toString().length,2,2,r?r+3:2];!a[0]&&a.length>("none"==n?3:1);)a.shift(),o.shift(),i.shift();return filter(map(a,function(e,t){return"none"==n?pad$1(e,"left",i[t],"0"):(isNumber(e)?e:parseFloat(e))?e+("long"==n?" ":"")+_(o[t]+("long"==n?1==e?"":2==e?"s{2}":"s":"")):""})).join("none"==n?":":" ")}function formatISBN(e,t,n){var r="";function a(e){var t=10==e.length?11:10;return(mod(t-sum$1(e.slice(0,-1).split("").map(function(t,n){return 10==e.length?parseInt(t)*(10-n):parseInt(t)*(n%2==0?1:3)})),t)+"").replace("10","X")}return 10==(e=e.toUpperCase().replace(/[^\dX]/g,"")).length&&(e=e.slice(0,-1).replace(/\D/g,"")+e.slice(-1)),10!=e.length&&13!=e.length||e.slice(-1)!=a(e)||(e.length==t?r=e:10!=e.length&&"978"!=e.slice(0,3)||(r=(e=10==e.length?"978"+e:e.slice(3)).slice(0,-1)+a(e))),n?[r.slice(-13,-10),r.slice(-10,-9),r.slice(-9,-6),r.slice(-6,-1),r.slice(-1)].join("-").replace(/^-+/,""):r}function formatNumber(e,t){for(var n=[],r=Math.abs(e).toFixed(t).split(".");r[0];)n.unshift(r[0].slice(-3)),r[0]=r[0].slice(0,-3);return r[0]=n.join(_(",")),(e<0?"-":"")+r.join(_("."))}function formatOrdinal(e){var t=formatNumber(e),n=t.length,r=t[n-1],a=n>1&&"1"==t[n-2],o=n>1&&!a;return t+=_("1"!=r||a?"2"!=r||a?"3"!=r||a?"th"+(contains("123",r)&&a?"{1"+r+"}":""):"rd"+(o?"{23}":""):"nd"+(o?"{22}":""):"st"+(o?"{21}":""))}function formatPercent(e,t,n){return formatNumber(e/t*100,n)+_("%")}function formatRoman(e){var t="";return forEach({M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},function(n,r){for(;e>=n;)t+=r,e-=n}),t}function formatSRT(e){return"\ufeff"+sortBy(e,["in","out"]).map(function(e,t){return[t+1,["in","out"].map(function(t){return formatDuration(e[t],3).replace(".",",")}).join(" --\x3e "),e.text].join("\r\n")}).join("\r\n\r\n")+"\r\n\r\n"}function formatString(e,t,n){return e.replace(/\{([^}]+)\}/g,function(e,r){for(var a,o=r.replace(/\\\./g,"\n").split(".").map(function(e){return e.replace(/\n/g,".")}),i=t||{};o.length;){if(!i[a=o.shift()]){i=null;break}i=i[a]}return null!==i?i:n?"{"+r+"}":""})}function formatUnit(e,t,n){return formatNumber(e,n)+(/^[:%]/.test(t)?"":" ")+t}function formatValue(e,t,n){var r,a=n?1024:1e3,o=PREFIXES.length;return forEach(PREFIXES,function(i,s){if(e1&&r--,a[i]=r<1/6?t+6*(n-t)*r:r<.5?n:r<2/3?t+6*(n-t)*(2/3-r):t})),a.map(function(e){return Math.round(255*e)})}function toHex(e){return e.map(function(e){return pad$1(e.toString(16).toUpperCase(),"left",2,"0")}).join("")}function toRGB(e){return range(3).map(function(t){return parseInt(e.substr(2*t,2),16)})}var ColorUtils=Object.freeze({__proto__:null,hsl:hsl,rgb:rgb,toHex:toHex,toRGB:toRGB});function encodeBase26(e){for(var t="";e;)t=String.fromCharCode(65+(e-1)%26)+t,e=Math.floor((e-1)/26);return t}function decodeBase26(e){return e.toUpperCase().split("").reverse().reduce(function(e,t,n){return e+(t.charCodeAt(0)-64)*Math.pow(26,n)},0)}function encodeBase32(e){return map(e.toString(32),function(e){return BASE_32_DIGITS[parseInt(e,32)]})}function decodeBase32(e){return parseInt(map(e.toUpperCase(),function(e){var t=BASE_32_DIGITS.indexOf(BASE_32_ALIASES[e]||e);return-1==t?" ":t.toString(32)}),32)}function encodeBase64(e){return btoa(encodeBase256(e)).replace(/=/g,"")}function decodeBase64(e){return decodeBase256(atob(e))}function encodeBase128(e){for(var t="";e;)t=char(127&e)+t,e>>=7;return t}function decodeBase128(e){return e.split("").reverse().reduce(function(e,t,n){return e+(t.charCodeAt(0)<<7*n)},0)}function encodeBase256(e){for(var t="";e;)t=char(255&e)+t,e>>=8;return t}function decodeBase256(e){return e.split("").reverse().reduce(function(e,t,n){return e+(t.charCodeAt(0)<<8*n)},0)}function encodeDeflate(e,t){var n,r,a=1+(e=encodeUTF8(e)).length,o=canvas(Math.ceil(a/3),1),i=(3-a%3)%3;for(e=char(i)+e+repeat("ÿ",i),loop(o.data.length,function(t){o.data[t]=t%4<3?e.charCodeAt(t-parseInt(t/4)):255}),o.context.putImageData(o.imageData,0,0),n=(e=atob(o.canvas.toDataURL().split(",")[1])).slice(16,20)+e.slice(29,33),r=e.slice(33,-12);r;)n+=(a=r.slice(0,4))+r.slice(8,12+(a=decodeBase256(a))),r=r.slice(12+a);return t&&t(n),n}function decodeDeflate(e,t){var n,r=new Image,a="‰PNG\r\n\n\0\0\0\rIHDR"+e.slice(0,4)+"\0\0\0\b\0\0\0"+e.slice(4,8),o=e.slice(8);function i(){throw new RangeError("Deflate codec can't decode data.")}for(;o;)a+=(n=o.slice(0,4))+"IDAT"+o.slice(4,8+(n=decodeBase256(n))),o=o.slice(8+n);a+="\0\0\0\0IEND®B`‚",r.onload=function(){e=slice(canvas(r).data).map(function(e,t){return t%4<3?char(e):""}).join("");try{e=decodeUTF8(e.slice(1,-e.charCodeAt(0)||void 0))}catch(e){i()}t(e)},r.onerror=i,r.src="data:image/png;base64,"+btoa(a)}function decodeURICompat(e){return decodeURI(function e(t){return t.toString().replace(/%(?![0-9A-Fa-f]{2})/g,"%25").replace(/(%[0-9A-Fa-f]{2})+/g,function(t){var n,r=t.split("%").slice(1);try{n=decodeURI("%"+r.join("%"))}catch(e){}return n||"%25"+r[0]+e(t.slice(3))})}(e))}function decodeURIComponentCompat(e){return decodeURIComponent(function e(t){return t.toString().replace(/%(?![0-9A-Fa-f]{2})/g,"%25").replace(/(%[0-9A-Fa-f]{2})+/g,function(t){var n,r=t.split("%").slice(1);try{n=decodeURIComponent("%"+r.join("%"))}catch(e){}return n||"%25"+r[0]+e(t.slice(3))})}(e))}function encodeUTF8(e){return map(e,function(e){var t=e.charCodeAt(0);return t<128?e:t<2048?String.fromCharCode(t>>6|192)+String.fromCharCode(63&t|128):String.fromCharCode(t>>12|224)+String.fromCharCode(t>>6&63|128)+String.fromCharCode(63&t|128)})}function decodeUTF8(e){var t,n=0,r=e.length,a="";function o(e,t){throw new RangeError("UTF-8 codec can't decode byte 0x"+e.toString(16).toUpperCase()+" at position "+t)}for(;n=192&&t[0]<240&&n=128&&t[1]<192?t[0]<224?(a+=String.fromCharCode((31&t[0])<<6|63&t[1]),n+=2):t[2]>=128&&t[2]<192?(a+=String.fromCharCode((15&t[0])<<12|(63&t[1])<<6|63&t[2]),n+=3):o(t[2],n+2):o(t[1],n+1):o(t[0],n);return a}function encodeEmailAddress$1(e,t){var n=["mailto:"+e,t||e].map(function(e){return map(e,function(e){var t=e.charCodeAt(0);return":"==e?":":"&#"+(Math.random()<.5?t:"x"+t.toString(16))+";"})});return''+n[1]+""}!function(){function e(t){return t.toString().replace(/%(?![0-9A-Fa-f]{2})/g,"%25").replace(/(%[0-9A-Fa-f]{2})+/g,function(t){var n,r=t.split("%").slice(1);return forEach(range(1,r.length+1),function(a){var o=range(a).map(function(e){return char(parseInt(r[e],16))}).join("");try{return decodeUTF8(o),n=t.slice(0,3*a)+e(t.slice(3*a)),!1}catch(e){}}),n||"%25"+r[0]+e(t.slice(3))})}decodeURIFn=function(t){return decodeURI(e(t))},decodeURIComponentFn=function(t){return decodeURIComponent(e(t))}}();var EncodingUtils=Object.freeze({__proto__:null,decodeBase128:decodeBase128,decodeBase256:decodeBase256,decodeBase26:decodeBase26,decodeBase32:decodeBase32,decodeBase64:decodeBase64,decodeDeflate:decodeDeflate,decodeURI:decodeURICompat,decodeURICompat:decodeURICompat,decodeURIComponent:decodeURIComponentCompat,decodeURIComponentCompat:decodeURIComponentCompat,decodeUTF8:decodeUTF8,encodeBase128:encodeBase128,encodeBase256:encodeBase256,encodeBase26:encodeBase26,encodeBase32:encodeBase32,encodeBase64:encodeBase64,encodeDeflate:encodeDeflate,encodeEmailAddress:encodeEmailAddress$1,encodeUTF8:encodeUTF8});function escapeRegExp(e){return(e+"").replace(/([\/\\^$*+?.\-|(){}[\]])/g,"\\$1")}var RegExpUtils=Object.freeze({__proto__:null,escapeRegExp:escapeRegExp}),defaultTags=[{name:"b"},{name:"bdi"},{name:"code"},{name:"em"},{name:"i"},{name:"q"},{name:"s"},{name:"span"},{name:"strong"},{name:"sub"},{name:"sup"},{name:"u"},{name:"blockquote"},{name:"cite"},{name:"div",optional:["style"],validate:{style:/^direction: rtl$/}},{name:"h1"},{name:"h2"},{name:"h3"},{name:"h4"},{name:"h5"},{name:"h6"},{name:"p"},{name:"pre"},{name:"li"},{name:"ol"},{name:"ul"},{name:"dl"},{name:"dt"},{name:"dd"},{name:"table"},{name:"tbody"},{name:"td"},{name:"tfoot"},{name:"th"},{name:"thead"},{name:"tr"},{name:"[]"},{name:"a",required:["href"],optional:["target"],validate:{href:/^((https?:\/\/|\/|mailto:).*?)/,target:/^_blank$/}},{name:"br"},{name:"iframe",optional:["width","height"],required:["src"],validate:{width:/^\d+$/,height:/^\d+$/,src:/^((https?:\/\/|\/).*?)/}},{name:"img",optional:["width","height"],required:["src"],validate:{width:/^\d+$/,height:/^\d+$/,src:/^((https?:\/\/|\/).*?)/}},{name:"figure"},{name:"figcaption"}],htmlEntities={'"':""","&":"&","'":"'","<":"<",">":">"},regexp={entity:/&[^\s]+?;/g,html:/[<&]/,tag:new RegExp("<\\/?("+["a","b","br","code","i","s","span","u"].join("|")+")\\/?>","gi")},salt=range(2).map(function(){return range(16).map(function(){return char(65+random(26))}).join("")});function addLinksInternal(e,t){return e.replace(/\b((https?:\/\/|www\.).+?)([.,:;!?)\]]*?(\s|$))/gi,function(e,t,n,r){return formatString('{url}{end}',{end:r,prefix:n="www."==n.toLowerCase()?"http://":"",url:t})}).replace(/\b([0-9A-Z.+\-_]+@(?:[0-9A-Z\-]+\.)+[A-Z]{2,6})\b/gi,'$1')}function decodeHTMLEntitiesInternal(e){return e.replace(new RegExp("("+values(htmlEntities).join("|")+")","g"),function(e){return keyOf(htmlEntities,e)}).replace(/&#([0-9A-FX]+);/gi,function(e,t){return char(/^X/i.test(t)?parseInt(t.slice(1),16):parseInt(t,10))})}function splitHTMLTags(e,t){var n=!1,r=[""];return t=t||[],forEach(e,function(e,a){n||"<"!=e||-1!=t.indexOf(a)||(n=!0,r.push("")),r[r.length-1]+=e,n&&">"==e&&(n=!1,r.push(""))}),r}function addLinks(e,t){var n=!1;return t?splitHTMLTags(e).map(function(e,t){var r=t%2;return r&&(/^'+n[1]+""}function encodeHTMLEntities(e,t){return map(String(e),function(e){var n=e.charCodeAt(0);return n<128?e=e in htmlEntities?htmlEntities[e]:e:t&&(e="&#x"+pad$1(n.toString(16).toUpperCase(),"left",4,"0")+";"),e})}function decodeHTMLEntities(e,t){return t?decodeHTMLEntities(normalizeHTML(e)):decodeHTMLEntitiesInternal(e)}function highlight(e,t,n,r){if(!t)return e;var a=0,o=[],i=[],s=0,u=isRegExp(t)?t:new RegExp(escapeRegExp(t),"gi"),c=['',""],l=[];function f(t){t.forEach(function(t){e=splice(e,t.position,t.length,t.value),i.forEach(function(e){t.position"+r.trim().replace(/"),salt.join(t.length-1)}).replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,n,r,a,o){return t.push(n+""+a.trim().replace(/"),salt.join(t.length-1)}).replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"$2").replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"$2").replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,function(e,t,n,r,a,o,i,s){return'"+n+""}).replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'$1').replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(e,t){return encodeEmailAddress(t)}).replace(/\n\n/g,"

").replace(new RegExp(salt.join("(\\d+)"),"g"),function(e,n){return t[parseInt(n)]})}function sanitizeHTML(e,t,n){n=n||[];var r={},a=0,o=["img","br"],i={},s={},u={},c=(t=t||defaultTags).map(function(e){return i[e.name]=n.concat(e.required||[]).concat(e.optional||[]),s[e.name]=e.required||[],u[e.name]=e.validate||{},e.name});return contains(c,"[]")&&(e=e.replace(/\[((\/|https?:\/\/|mailto:).+?) (.+?)\]/gi,'$3'),c=c.filter(function(e){return"[]"!=e})),normalizeHTML(e=(e=addLinks(e=splitHTMLTags(e).map(function(e,t){var n,l,f,p,d,g={},m=/([^=\ ]+)="([^"]+)"/g,h=!0;if(t%2&&(d=/<(\/)?([^\ \/]+)(.*?)(\/)?>/g.exec(e))){for(f=!isUndefined(d[1]),p=d[2],l=d[3].trim();n=m.exec(l);)i[p]&&contains(i[p],n[1])&&(g[n[1]]=n[2]);if(f||contains(o,p)||a++,!contains(c,p)||l.length&&isEmpty(g)?h=!1:!f&&s[p]&&s[p].forEach(function(e){isUndefined(g[e])&&(h=!1)}),h&&!isEmpty(g)&&forEach(g,function(e,t){if(!isUndefined(u[p][t])&&!u[p][t].exec(e))return h=!1,!1}),h&&f?h=!r[a]:r[a]=!h,f&&a--,h)return"<"+(f?"/":"")+p+(f||isEmpty(g)?"":" "+values(map(g,function(e,t){return t+'="'+e+'"'})).join(" "))+">"}return encodeHTMLEntities(decodeHTMLEntitiesInternal(e))}).join(""),!0)).replace(/\n\n/g,"

"))}function stripTags(e){return e.replace(/<.*?>/g,"")}var HTMLUtils=Object.freeze({__proto__:null,addLinks:addLinks,decodeHTMLEntities:decodeHTMLEntities,encodeEmailAddress:encodeEmailAddress,encodeHTMLEntities:encodeHTMLEntities,highlight:highlight,normalizeHTML:normalizeHTML,parseMarkdown:parseMarkdown,sanitizeHTML:sanitizeHTML,stripTags:stripTags});function asyncMap(e,t,n,r,a){var o=typeOf(t),i="object"==o?{}:[];a=last$1(arguments),e(t,function(e,t,r,a){n(e,t,r,function(e){i[t]=e,a()})},r=5==arguments.length?r:null,function(){a("string"==o?i.join(""):i)})}function asyncMapFn(e,t,n,r){e=makeArray(e),r=last$1(arguments),n=4==arguments.length?n:null,e.some(Array.isArray)?serialMap(e,function(e,n,r,a){parallelMap(makeArray(e),t,a)},r):parallelMap(e,t,r)}function nonblockingForEach(e,t,n,r,a){var o,i,s,u=0,c=last$1(arguments),l=typeOf(e);r=isFunction(c)?c:arguments[arguments.length-2],e="array"==l||"object"==l?e:slice(e),o="object"==l?Object.keys(e):range(e.length),a=a||1e3,i=len(e),n=5==arguments.length||4==arguments.length&&isFunction(c)?n:null,s=+new Date,function c(){forEach(o.slice(u),function(r){return r in e&&!1===t.call(n,e[r],r,e)?(u=i,!1):(u++,!(+new Date>=s+a)&&void 0)}),u>>=16;n&&a++}while(n)}return o}(e.size.toString());function r(e,t){var n,r,a,o;return o=e[3]+t[3],a=e[2]+t[2]+(o>>16),o&=65535,r=e[1]+t[1]+(a>>16),a&=65535,n=e[0]+t[0]+(r>>16),[n&=65535,r&=65535,a,o]}function a(e,t){return t=t||0,[e.charCodeAt(t+6)+(e.charCodeAt(t+7)<<8),e.charCodeAt(t+4)+(e.charCodeAt(t+5)<<8),e.charCodeAt(t+2)+(e.charCodeAt(t+3)<<8),e.charCodeAt(t+0)+(e.charCodeAt(t+1)<<8)]}!function o(i,s){var u,c=65536,l=new FileReader;l.onload=function(i){var u,l,f=i.target.result,p=f.length-8;for(u=0;u<=p;u+=8)n=r(n,a(f,u));e.size>>32-t}function n(e){var t,n="";for(t=7;t>=0;t--)n+=(e>>>4*t&15).toString(16);return n}var r,a,o,i,s,u,c,l,f,p=new Array(80),d=1732584193,g=4023233417,m=2562383102,h=271733878,y=3285377520,S=(e=encodeUTF8(e)).length,E=new Array;for(a=0;a>>29),E.push(S<<3&4294967295),r=0;r= browser.version) { + browserSupported = true; + } + }); + + Ox.UI = {}; + + Ox.UI.LoadingScreen = (function() { + + var $body = Ox.$('body'), + $screen = Ox.$('
') + .addClass('OxLoadingScreen') + .css({ + position: 'absolute', + left: 0, + top: 0, + right: 0, + bottom: 0, + padding: '4px', + background: 'rgb(' + ( + options.theme == 'oxlight' ? '240, 240, 240' + : options.theme == 'oxmedium' ? '144, 144, 144' + : '16, 16, 16' + ) + ')', + opacity: 1, + zIndex: 1000 + }), + css = { + position: 'absolute', + left: 0, + top: 0, + right: 0, + bottom: 0, + margin: 'auto', + MozUserSelect: 'none', + WebkitUserSelect: 'none' + }, + loadingInterval, + $icon, + deg = 0; + + browserSupported ? showIcon() : showWarning(); + + function showIcon() { + /* + // SVG transform performs worse than CSS transform + var src = Ox.PATH + 'UI/themes/' + options.theme + '/svg/symbolLoadingAnimated.svg' + Ox.getFile(src, function() { + Ox.$('') + .attr({ + src: src + }) + .css(Ox.extend({ + width: '32px', + height: '32px' + }, css)) + .on({ + mousedown: function(e) { + e.preventDefault(); + } + }) + .appendTo(div); + }); + */ + var src = Ox.PATH + 'UI/themes/' + options.theme + '/svg/symbolLoading.svg' + Ox.getFile(src, function() { + $icon = Ox.$('') + .attr({ + src: src + }) + .css(Ox.extend({ + width: '32px', + height: '32px' + }, css)) + .on({ + mousedown: function(e) { + e.preventDefault() + } + }) + .appendTo($screen); + }); + } + + function showWarning() { + var counter = 0; + browsers = browsers.filter(function(browser) { + return browser.url; + }); + isInternetExplorer ? browsers.pop() : browsers.shift(); + browsers.forEach(function(browser) { + browser.src = Ox.PATH + 'UI/png/browser' + browser.name.replace(' ', '') + '128.png'; + Ox.getFile(browser.src, function() { + ++counter == browsers.length && showIcons(); + }); + }); + function showIcons() { + var $box = Ox.$('
') + .css(Ox.extend({ + width: (browsers.length * 72) + 'px', + height: '72px' + }, css)) + .appendTo($screen); + browsers.forEach(function(browser, i) { + Ox.$('') + .attr({ + href: browser.url, + title: ( + browser.name == 'Chrome Frame' + ? Ox._('Install') : Ox._('Download') + ) + ' ' + browser.name + }) + .css({ + position: 'absolute', + left: (i * 72) + 'px', + width: '72px', + height: '72px' + }) + .append( + Ox.$('') + .attr({ + src: browser.src + }) + .css(Ox.extend({ + width: '64px', + height: '64px', + border: 0, + cursor: 'pointer' + }, css)) + .on({ + mousedown: function(e) { + e.preventDefault(); + } + }) + ) + .appendTo($box); + }); + } + } + + return { + hide: function() { + $('.OxLoadingScreen').animate({ + opacity: browserSupported ? 0 : 0.9 + }, 1000, function() { + if (browserSupported) { + clearInterval(loadingInterval); + loadingInterval = null; + $screen.remove(); + } else { + $screen.on({ + click: function() { + $screen.remove(); + } + }); + } + }); + }, + show: function() { + if (!loadingInterval) { + loadingInterval = setInterval(function() { + if ($icon) { + deg = (deg + 30) % 360; + $icon.css({ + MozTransform: 'rotate(' + deg + 'deg)', + OTransform: 'rotate(' + deg + 'deg)', + WebkitTransform: 'rotate(' + deg + 'deg)', + transform: 'rotate(' + deg + 'deg)' + }); + } + }, 83); + } + $screen.appendTo($body); + } + }; + + }()); + + Ox.documentReady(function() { + Ox.$('body').addClass('OxTheme' + Ox.toTitleCase(options.theme)); + options.showScreen && Ox.UI.LoadingScreen.show(); + }); + + loadUI(); + + function loadUI() { + + var path = Ox.PATH + 'UI/jquery/jquery.js?' + Ox.VERSION; + Ox.getFile(path, function() { + path = Ox.PATH + 'UI/json/UI.json?' + Ox.VERSION; + Ox.getJSON(path, function(data) { + var counter = 0, length; + if (!options.loadCSS) { + data.files = data.files.filter(function(file) { + return !Ox.endsWith(file, '.css'); + }); + } + if (!options.loadThemes) { + data.files = data.files.filter(function(file) { + return !Ox.contains(file, '/themes/'); + }); + } + length = data.files.length; + Ox.UI.IMAGES = data.images; + Ox.UI.THEMES = {}; + data.files.forEach(function(file) { + path = Ox.PATH + file + '?' + Ox.VERSION; + if (/\.jsonc$/.test(file)) { + Ox.getJSONC(path, function(data) { + var theme = /\/themes\/(\w+)\/json\//.exec(file)[1]; + Ox.UI.THEMES[theme] = data; + ++counter == length && initUI(); + }); + } else { + Ox.getFile(path, function() { + ++counter == length && initUI(); + }); + } + }); + }); + }); + + } + + function initUI() { + + Ox.documentReady(function() { + // fixme: is this the right place to do this? + $.browser.mozilla && Ox.$document.on('dragstart', function() { + return false; + }); + if (options.showScreen && options.hideScreen) { + Ox.UI.LoadingScreen.hide(); + } + callback(browserSupported); + }); + + } + +}; diff --git a/min/UI/css/UI.css b/min/UI/css/UI.css new file mode 100644 index 00000000..e38e888c --- /dev/null +++ b/min/UI/css/UI.css @@ -0,0 +1,2970 @@ +@import url("../themes/oxmedium/css/theme.css?0.1.3905"); +@import url("../themes/oxlight/css/theme.css?0.1.3905"); +@import url("../themes/oxdark/css/theme.css?0.1.3905"); +@import url("../themes/aqua/css/theme.css?0.1.3905"); + +/* +================================================================================ +Base +================================================================================ +*/ + +a { + text-decoration: none; +} +a:hover, .OxLink:hover { + text-decoration: underline; + cursor: pointer; +} +blockquote { + margin: 0 1.5em 0 1.5em; +} +body { + margin: 0; + cursor: default; + overflow: hidden; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + -webkit-user-select: none; + user-select: none; +} +code, pre { + font-family: Menlo, Monaco, DejaVu Sans Mono, Lucida Console, Consolas, Bitstream Vera Sans Mono, monospace; +} +div, input, textarea { + font-family: Lucida Grande, Segoe UI, DejaVu Sans, Lucida Sans Unicode, Helvetica, Arial, sans-serif; + font-size: 11px; +} +figure { + text-align: center; +} +h1, h2, h3, h4, h5, h6 { + margin: 0; + font-size: 16px; + font-weight: normal; +} +h2, h3, h4, h5, h6 { + font-size: 14px; +} +img { + -moz-user-drag: none; + -ms-user-drag: none; + -o-user-drag: none; + -webkit-user-drag: none; + user-drag: none; +} +ol, ul { + padding-left: 1.5em; + margin: 0; +} +dt { + float: left; + clear: left; + width: 40px; + font-weight: bold; + text-overflow: hidden; +} +dd { + margin-left: 40px; +} +p { + text-align: justify; +} +p:first-child { + margin-top: 0; +} +p:last-child { + margin-bottom: 0; +} +td { + padding: 0; + vertical-align: top; +} + +.OxSerif { + font-family: Georgia, Palatino, DejaVu Serif, Book Antiqua, Palatino Linotype, Times New Roman, serif; +} +.OxSansSerif { + font-family: Lucida Grande, Segoe UI, DejaVu Sans, Lucida Sans Unicode, Helvetica, Arial, sans-serif; +} +.OxMonospace { + font-family: Menlo, Monaco, DejaVu Sans Mono, Lucida Console, Consolas, Bitstream Vera Sans Mono, monospace; +} + +.OxSelectable { + cursor: text; + -moz-user-select: text; + -ms-user-select: text; + -o-user-select: text; + -webkit-user-select: text; + user-select: text; +} +.OxSelectable * { + cursor: text; +} +body.OxDragging .OxSelectable { + cursor: default; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + -webkit-user-select: none; + user-select: none; +} +body.OxDragging .OxSelectable * { + cursor: default; +} + +/* +================================================================================ +Audio +================================================================================ +*/ + +.OxAudioPlayer { + position: absolute; + height: 31px; +} +.OxAudioPlayer > * { + position: absolute; +} +.OxAudioPlayer > .OxListButton { + right: 0; + border-bottom-right-radius: 0; +} +.OxAudioPlayer > .OxMuteButton { + right: 151px; + top: 15px; +} +.OxAudioPlayer > .OxPlayButtons { + top: 15px; +} +.OxAudioPlayer > .OxButtonGroup.OxPlayButtons > .OxButton:first-child { + border-top-left-radius: 0; +} +.OxAudioPlayer > .OxPositionLabel { + top: 15px; + height: 13px; + padding-top: 1px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + font-size: 10px; +} +.OxAudioPlayer > .OxPositionSlider { + left: 46px; + top: 15px; +} +.OxAudioPlayer > .OxRepeatButton { + right: 31px; + border-bottom-right-radius: 0; +} +.OxAudioPlayer > .OxShuffleButton { + right: 15px; + border-bottom-right-radius: 0; +} +.OxAudioPlayer > .OxTrackLabel { + //left: 15px; + top: 0; + height: 13px; + padding-top: 1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + font-size: 10px; + text-overflow: ellipsis; +} +.OxAudioPlayer > .OxVolumeLabel { + top: 15px; + height: 13px; + padding-top: 1px; + border-top-right-radius: 0; + font-size: 10px; +} +.OxAudioPlayer > .OxVolumeSlider { + right: 35px; + top: 15px; +} + +/* +================================================================================ +Core +================================================================================ +*/ + +.OxContainer { + left: 0; + top: 0; + right: 0; + bottom: 0; + //overflow: hidden; + overflow: auto; +} +.OxContent { + //overflow: auto; +} + +/* +================================================================================ +Bars +================================================================================ +*/ + +.OxBar { + overflow: hidden; + white-space: nowrap; +} + +.OxProgressbar { + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; +} +.OxProgressbar .OxTrack { + float: left; + width: 14px; + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; + margin: -1px; +} +.OxProgressbar .OxProgress { + width: 14px; + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; + margin: -1px; +} +.OxProgressbar.OxSquared, +.OxProgressbar.OxSquared .OxTrack, +.OxProgressbar.OxSquared .OxProgress { + border-radius: 4px; +} + +.OxProgressbar .OxProgress.OxAnimate { + -webkit-animation: progress 1s linear infinite; +} +@-webkit-keyframes progress { + 0% { + background-position: 0 0; + } + 100% { + background-position: -32px 0; + } +} +.OxProgressbar .OxText { + float: left; + height: 14px; + //padding-top: 2px; + //font-size: 8px; + text-align: center; +} +.OxProgressbar .OxText.OxSmall { + //padding-top: 1px; + //font-size: 9px; +} +.OxProgressbar .OxButton { + float: left; + margin: -1px; +} + + +.OxResizebar { + z-index: 2; +} +.OxResizebar:hover > .OxSpace { + //background: rgba(128, 128, 128, 0.25); +} + +.OxResizebar.OxHorizontal { + width: 100%; + height: 5px; + margin: -2px 0 -2px 0; +} +.OxResizebar.OxHorizontal > .OxLine { + width: 100%; + height: 1px; +} +.OxResizebar.OxHorizontal > .OxSpace { + width: 100%; + height: 2px; +} + +.OxResizebar.OxVertical { + width: 5px; + height: 100%; + margin: 0 -2px 0 -2px; +} +.OxResizebar.OxVertical > .OxLine { + float: left; + width: 1px; + height: 100%; +} +.OxResizebar.OxVertical > .OxSpace { + float: left; + width: 2px; + height: 100%; +} + +.OxTabbar > .OxButtonGroup { + margin: 4px 0 0 4px; +} + +/* +================================================================================ +Calendar +================================================================================ +*/ + +.OxCalendar { + position: absolute; + overflow: hidden; +} + +.OxCalendar > .OxCalendarContainer { + position: absolute; + left: 0; + right: 0; + overflow: hidden; +} +.OxCalendar > .OxCalendarContent { + position: absolute; +} + +.OxCalendar .OxBackground { + position: absolute; + top: 0; + bottom: 0; +} +.OxCalendar .OxBackground > div { + position: absolute; + top: 0; + bottom: 0; +} + +.OxCalendar .OxLine { + position: absolute; +} + +.OxCalendar .OxEvent { + position: absolute; + height: 15px; + padding-top: 1px; + text-overflow: ellipsis; + cursor: pointer; + overflow: hidden; + white-space: nowrap; +} +.OxCalendar .OxEvent .OxEventText { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.OxCalendar .OxLine > .OxEvent { + //box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5); + border-radius: 4px; +} +.OxCalendar .OxLine > .OxEvent.OxCurrent { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.OxCalendar .OxTimeline { + position: absolute; + height: 16px; + //overflow: hidden; +} + +.OxCalendar .OxTimeline .OxEvent { + position: absolute; + border-radius: 0; + cursor: ew-resize; +} +.OxCalendar .OxOverlay { + position: absolute; + left: 0; + right: 0; + height: 16px; +} +.OxCalendar .OxOverlay div { + position: absolute; + height: 16px; + cursor: ew-resize; +} +.OxCalendar .OxOverlay div:nth-child(even) { + border-radius: 4px; +} + +.OxCalendar .OxCalendarControl, +.OxCalendar .OxEventControl { + position: absolute; +} +.OxCalendar .OxCalendarControl.OxCalendarButtonCenter { + left: 24px; +} +.OxCalendar .OxCalendarControl.OxCalendarButtonDown { + left: 24px; +} +.OxCalendar .OxCalendarControl.OxCalendarButtonLeft { + left: 4px; +} +.OxCalendar .OxCalendarControl.OxCalendarButtonRight { + left: 44px; +} +.OxCalendar .OxCalendarControl.OxCalendarButtonUp { + left: 24px; +} + +.OxCalendar .OxEventControl.OxEventName { + right: 24px; + width: 128px; + text-overflow: ellipsis; +} +.OxCalendar .OxEventControl.OxEventDeselectButton { + right: 4px; +} + +.OxCalendar .OxRange .OxArrow { + border-radius: 0; +} + + +/* +================================================================================ +Dialog +================================================================================ +*/ + +.OxDialog { + position: absolute; + border-radius: 8px; + z-index: 11; +} + +.OxDialog > .OxTitlebar { + position: absolute; + height: 24px; + text-align: center; + border-top-left-radius: 8px; + border-top-right-radius: 8px; +} + +.OxDialog > .OxTitlebar > .OxButton { + position: absolute; +} + +.OxDialog > .OxTitlebar > .OxTitle { + margin-top: 4px; + font-size: 11px; + font-weight: bold; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.OxDialog > .OxContent { + position: absolute; + left: 0; + top: 24px; + right: 0; + overflow: auto; +} + +.OxDialog > .OxButtonsbar { + position: absolute; + bottom: 0; + height: 24px; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + cursor: move; +} +.OxDialog > .OxButtonsbar > .OxButtonsLeft { + margin-left: 4px; + float: left; +} +.OxDialog > .OxButtonsbar > .OxButtonsRight { + margin-right: 4px; + float: right; +} +.OxDialog > .OxButtonsbar .OxButton { + margin: 4px 2px 4px 2px; +} + +.OxDialog > .OxResize { + position: absolute; + z-index: 12; +} +.OxDialog > .OxResizeTopLeft { + left: -2px; + top: -2px; + width: 10px; + height: 10px; + cursor: nwse-resize; +} +.OxDialog > .OxResizeTop { + left: 8px; + top: -2px; + right: 8px; + height: 5px; + cursor: ns-resize; +} +.OxDialog > .OxResizeTopRight { + right: -2px; + top: -2px; + width: 10px; + height: 10px; + cursor: nesw-resize; +} +.OxDialog > .OxResizeLeft { + left: -2px; + top: 8px; + width: 5px; + bottom: 8px; + cursor: ew-resize; +} +.OxDialog > .OxResizeRight { + right: -2px; + top: 8px; + width: 5px; + bottom: 8px; + cursor: ew-resize; +} +.OxDialog > .OxResizeBottomLeft { + left: -2px; + bottom: -2px; + width: 10px; + height: 10px; + cursor: nesw-resize; +} +.OxDialog > .OxResizeBottom { + left: 8px; + bottom: -2px; + right: 8px; + height: 5px; + cursor: ns-resize; +} +.OxDialog > .OxResizeBottomRight { + right: -2px; + bottom: -2px; + width: 10px; + height: 10px; + cursor: nwse-resize; +} + +/* +.OxDialogBox { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +*/ + +/* +================================================================================ +Document +================================================================================ +*/ + +.OxDocument { + padding: 8px; +} +.OxDocument div { + border-width: 0; + border-style: solid; + //font-family: Georgia, Palatino, DejaVu Serif, Book Antiqua, Palatino Linotype, Times New Roman, serif; + font-size: 12px; + line-height: 18px; +} +.OxDocument h1 { + font-weight: bold; + font-size: 20px; + line-height: 24px; +} +.OxDocument table { + border-spacing: 0; + //border: 1px solid red; +} +.OxDocument td { + padding: 0 4px 0 4px; + //border: 1px solid rgb(128, 128, 128); + vertical-align: top; +} +.OxDocument td:first-child { + padding-left: 0; +} +.OxDocument td:last-child { + padding-right: 0; +} + +.OxDocument code { + font-size: 12px; +} +.OxDocument .OxSyntaxHighlighter div { + font-size: 11px; + line-height: 16px; +} + +/* +================================================================================ +Documentation +================================================================================ +*/ + +.OxDocPage code { + //border: 1px solid rgb(232, 232, 232); + //background: rgb(248, 248, 248); + white-space: nowrap; +} +.OxDocPage .OxSection { + font-family: Lucida Grande, Segoe UI, DejaVu Sans, Lucida Sans Unicode, Helvetica, Arial, sans-serif; + font-weight: bold; + font-size: 12px; +} + +/* +================================================================================ +Drag & Drop +================================================================================ +*/ + +.OxDrag { + cursor: move; + opacity: 0.5; +} + +/* +================================================================================ +Forms +================================================================================ +*/ + +input { + border: 1px; +} +input, +textarea { + padding: 0; + //border: 1px; + margin: 0; +} +input[type=button], +input[type=reset], +input[type=submit] { + -moz-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type=image] { + cursor: default; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + -webkit-user-select: none; + user-select: none; +} +input:focus, +textarea:focus { + outline: none; +} +/* +input.OxXlarge { + height: 26px; + font-size: 19px; + padding: 0 12px 0 12px; + -moz-border-radius: 14px; + -ms-border-radius: 14px; + -webkit-border-radius: 14px; + border-radius: 14px; +} +input.OxLarge { + height: 22px; + font-size: 16px; + padding: 0 10px 0 10px; + -moz-border-radius: 12px; + -ms-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; +} +*/ +input.OxLarge { + height: 18px; + padding: 0 8px 0 8px; + font-size: 13px; + line-height: 18px; + border-radius: 10px; +} +input.OxMedium { + height: 14px; + padding: 0 6px 0 6px; + font-size: 11px; + line-height: 14px; + border-radius: 8px; +} +input.OxMedium.OxRounded { + padding: 0 6px 0 6px; + border-radius: 8px; +} +input.OxMedium.OxSquared { + border-radius: 4px; +} +input.OxMedium.OxSquare { + padding: 0 2px 0 2px; + border-radius: 0; +} +input.OxSmall { + height: 10px; + padding: 0 4px 0 4px; + font-size: 8px; + line-height: 10px; + border-radius: 6px; +} + +input[type=image] { + height: 10px; + width: 10px; + padding: 2px; +} +input[type=image].OxOverlay { + padding: 1px; +} + +input::-moz-focus-inner { + border: none; +} +textarea { + padding: 2px 6px; + border-width: 1px; + border-style: solid; + border-radius: 8px; + resize: none; +} +textarea.OxSquared { + border-radius: 4px; +} +textarea.OxSquare { + border-radius: 0; +} + +/* +-------------------------------------------------------------------------------- +OxArrayEditable +-------------------------------------------------------------------------------- +*/ + +.OxArrayEditable { + line-height: 14px; +} +.OxArrayEditable.OxArrayEditableInput { + padding: 4px; +} +.OxArrayEditable.OxArrayEditableTextarea .OxEditableElement { + padding: 4px; + border-top-width: 1px; + border-top-style: solid; +} +.OxArrayEditable.OxArrayEditableTextarea textarea { + padding: 4px; +} +.OxArrayEditable.OxArrayEditableTextarea .OxEditableElement:first-child { + border-top: 0px +} + +/* +-------------------------------------------------------------------------------- +OxButton +-------------------------------------------------------------------------------- +*/ +.OxButton { + border-width: 1px; + border-style: solid; + text-align: center; +} +.OxButton.OxOverlay { + border-width: 2px; +} +.OxButton.OxSymbol, +.OxButton.OxSymbol:active, +.OxButton.OxSymbol:focus { + padding: 2px; + border: 1px solid rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, 0); + -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + -ms-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + -o-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + box-shadow: 0 0 0 rgba(0, 0, 0, 0); +} +/* +-------------------------------------------------------------------------------- +OxButtonGroup +-------------------------------------------------------------------------------- +*/ +.OxButtonGroup { + display: table-cell; +} +.OxButtonGroup > .OxButton { + border-right-width: 0; + border-radius: 0; +} +.OxButtonGroup > .OxButton:last-child { + border-right-width: 1px; +} +.OxButtonGroup > .OxButton.OxOverlay:last-child { + border-right-width: 2px; +} +.OxButtonGroup > .OxButton.OxLarge:first-child { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.OxButtonGroup > .OxButton.OxLarge:last-child { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.OxButtonGroup > .OxButton.OxMedium:first-child { + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; +} +.OxButtonGroup > .OxButton.OxMedium:last-child { + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} +.OxButtonGroup > .OxButton.OxSmall:first-child { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.OxButtonGroup > .OxButton.OxSmall:last-child { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +.OxButtonGroup > .OxButton.OxTab { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.OxButtonGroup > .OxButton.OxTab:first-child { + border-bottom-left-radius: 0; +} +.OxButtonGroup > .OxButton.OxTab:last-child { + border-bottom-right-radius: 0; +} +.OxButtonGroup.OxSquared > .OxButton.OxMedium:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.OxButtonGroup.OxSquared > .OxButton.OxMedium:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +/* +-------------------------------------------------------------------------------- +OxCheckbox +-------------------------------------------------------------------------------- +*/ +div.OxCheckbox { + height: 16px; + border-radius: 8px; +} +input.OxCheckbox { + border-width: 1px; + border-style: solid; + border-radius: 8px; +} +.OxCheckboxGroup { + display: table-cell; +} +.OxCheckboxGroup.OxGroup > div.OxCheckbox { + float: left; +} +.OxCheckboxGroup.OxGroup > div.OxCheckbox { + //padding-right: 16px; + margin-right: -16px; +} +.OxCheckboxGroup.OxGroup > div.OxCheckbox:last-child { + //padding-right: 0; + margin-right: 0; +} +.OxCheckboxGroup.OxList > div.OxCheckbox { + margin-bottom: 8px; +} +.OxCheckboxGroup.OxList > div.OxCheckbox:last-child { + margin-bottom: 0; +} +/* +-------------------------------------------------------------------------------- +OxFileButton +-------------------------------------------------------------------------------- +*/ +.OxMenu .OxFileButton > .OxButton { + height: 16px; + margin: -1px 0 0 -6px; + border-width: 0; + background: transparent; + text-align: left; +} +/* +-------------------------------------------------------------------------------- +OxFileInput +-------------------------------------------------------------------------------- +*/ +.OxFileInput > .OxBar { + float: left; + border-width: 1px; + border-style: solid; + border-radius: 8px; +} +.OxFileInput > .OxFiles { + position: absolute; + top: 15px; + border-width: 1px; + border-style: solid; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} +.OxFileInput > .OxFiles .OxContent, +.OxFileInput > .OxFiles .OxItem:last-child { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} +.OxFileInput > .OxLabel { + float: left; +} +/* +-------------------------------------------------------------------------------- +OxForm +-------------------------------------------------------------------------------- +*/ +.OxFormDescription { + margin-bottom: 8px; +} +.OxFormItem { + margin-top: 8px; +} +.OxFormItem:first-child { + margin-top: 0; +} +.OxFormMessage { + //width: 100%; + height: 10px; + margin: 2px 8px 0 0; + text-align: right; + display: none; +} +/* +-------------------------------------------------------------------------------- +OxInput +-------------------------------------------------------------------------------- +*/ + +div.OxInput { + height: 16px; +} +div.OxInput.OxMedium { + height: 16px; +} +div.OxInput.OxRounded { + border-radius: 8px; +} +div.OxInput.OxSquared { + border-radius: 4px; +} +div.OxInput.OxSquare { + border-radius: 0; +} +div.OxInput > .OxInputLabel { + float: left; + padding: 0 6px 0 6px; +} +input.OxInput { + border-width: 1px; + border-style: solid; +} +div.OxInput > input.OxInput { + float: left; +} + +/* +-------------------------------------------------------------------------------- +OxEditableContent +-------------------------------------------------------------------------------- +*/ + +.OxEditableContent { + outline: none; + word-wrap: break-word; +} +.OxEditableContent.OxEditing { + white-space: pre-wrap; +} + +/* +-------------------------------------------------------------------------------- +OxEditableElement +-------------------------------------------------------------------------------- +*/ + +.OxEditableElement > .OxValue { + //cursor: pointer; + padding: 0 0 0 1px; + word-wrap: break-word; +} +.OxEditableElement div.OxInput { + padding: 0 1px 0 0; +} +.OxEditableElement input.OxInput { + padding: 0 1px 0 0; + //padding: 0; + border: 0; +} +.OxEditableElement textarea.OxInput { + padding: 0 0 0 1px; + border: 0; +} +.OxValue img, .OxEditableContent img { + max-width: 100%; + height: auto; +} +.OxValue iframe, .OxEditableContent iframe { + border: none; + overflow: hidden; + max-width: 100%; +} +.OxValue p, .OxEditableContent p { + clear: both; +} +.OxEditableContent *[lang=hi], .OxValue *[lang=hi] { + font-size: 14px; +} + +/* +-------------------------------------------------------------------------------- +OxInputGroup +-------------------------------------------------------------------------------- +*/ +.OxInputGroup { + height: 16px; +} +.OxInputGroup > div { + float: left; +} +/* +-------------------------------------------------------------------------------- +OxLabel +-------------------------------------------------------------------------------- +*/ +.OxLabel { + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; + padding: 0 6px 0 6px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.OxLabel.OxSquared { + border-radius: 4px; +} +.OxLabel.OxSquare { + padding: 0 3px 0 3px; + border-radius: 0; +} + +/* +-------------------------------------------------------------------------------- +OxObjectInput +-------------------------------------------------------------------------------- +*/ +.OxObjectInput > div { + margin-top: 8px; +} +.OxObjectInput > div:first-child { + margin-top: 0; +} +.OxObjectArrayInput > div { + padding: 8px 0 8px 0; + border-top-width: 1px; + border-top-style: dashed; + border-top-color: rgb(128, 128, 128); +} +.OxObjectArrayInput > div.OxFirst { + padding-top: 0; + border-top-width: 0; +} +.OxObjectArrayInput > div.OxLast { + padding-bottom: 0; +} + +/* +-------------------------------------------------------------------------------- +OxPicker +-------------------------------------------------------------------------------- +*/ +.OxPicker { + position: absolute; + z-index: 13; + border-radius: 0 8px 8px 8px; + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75); + -ms-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75); + -o-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75); + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75); +} +.OxPicker > div:first-child { + background: rgb(240, 240, 240); + border-radius: 0 8px 0 0; +} +.OxPicker > .OxBar { + border-radius: 0 0 8px 8px; +} +.OxPicker > .OxBar > .OxLabel { + float: left; + margin: 4px 0 4px 4px; +} +.OxPicker > .OxBar > .OxButton { + float: right; + margin: 4px 4px 4px 0; +} +/* +-------------------------------------------------------------------------------- +OxRange +-------------------------------------------------------------------------------- +*/ +.OxRange { + height: 16px; +} +.OxRange > .OxArrow { + float: right; +} +.OxRange > .OxArrow:first-child { + float: left; +} +.OxRange > .OxTrack { + float: right; + border-width: 1px; + border-style: solid; + height: 14px; + border-radius: 8px; +} +.OxRange > .OxTrack > div { + float: left; + height: 16px; + padding: 1px; + margin: -1px; +} +.OxRange > .OxTrack > div > img { + float: left; + height: 14px; + cursor: default; + -webkit-user-select: none; + -o-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.OxRange > .OxTrack > div > img.OxFirstChild { + border-top-left-radius: 7px; + border-bottom-left-radius: 7px; +} +.OxRange > .OxTrack > div > img.OxLastChild { + border-top-right-radius: 7px; + border-bottom-right-radius: 7px; +} +.OxRange > .OxTrack > div > img.OxFirstChild.OxLastChild { + margin-left: 7px; + border-radius: 0; +} +.OxRange > .OxTrack > .OxThumb { + float: left; + margin: -1px; + text-align: center; +} +.OxRange > .OxTrack > .OxThumb.OxTransparent { + border: 1px solid white; + background: rgba(255, 255, 255, 0.25); + box-shadow: 0 0 1px white inset; +} +/* +-------------------------------------------------------------------------------- +OxSelect +-------------------------------------------------------------------------------- +*/ +.OxSelect { + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; +} +.OxSelect.OxRounded.OxSelected { + border-radius: 8px 8px 0 0; +} +.OxSelect.OxSquared { + border-radius: 4px; +} +.OxSelect.OxSquared.OxSelected { + border-radius: 4px 4px 0 0; +} +.OxSelect.OxSquare { + border-radius: 0; +} +.OxSelect > .OxTitle { + float: left; + height: 14px; + padding-left: 6px; + border-width: 1px; + text-align: left; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.OxSelect > .OxButton { + float: right; + margin: -1px; +} +.OxLabelSelect > .OxLabel { + float: left; + margin: -1px; +} +.OxLabelSelect > .OxTitle { + border-left-width: 1px; + border-left-style: solid; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; +} +.OxLabelSelect.OxSquared > .OxTitle { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.OxLabelSelect.OxRounded.OxSelected { + border-bottom-left-radius: 8px; +} +.OxLabelSelect.Squared.OxSelected { + border-bottom-left-radius: 4px; +} +.OxLabelSelect.OxSelected > .OxTitle { + border-bottom-left-radius: 0; +} + +/* + +*/ +.OxButton.OxOverlapLeft, +.OxxxCheckbox.OxOverlapLeft, +.OxLabel.OxOverlapLeft, +.OxxxSelect.OxOverlapLeft { + padding-left: 20px; + padding-right: 8px; + margin-left: -16px; +} +.OxButton.OxOverlapRight, +.OxxxCheckbox.OxOverlapRight, +.OxLabel.OxOverlapRight, +.OxxxSelect.OxOverlapRight { + padding-left: 8px; + padding-right: 20px; + margin-right: -16px; +} +.OxButton[type=image].OxOverlapLeft { + padding-left: 17px; + padding-right: 3px; +} +.OxButton[type=image].OxOverlapRight { + padding-left: 3px; + padding-right: 17px; +} +.OxButtonGroup.OxOverlapLeft { + padding-left: 16px; + margin-left: -16px; +} +.OxButtonGroup.OxOverlapRight { + padding-right: 16px; + margin-right: -16px; +} +.OxButtonGroup.OxOverlapLeft > .OxButton[type=image].OxOverlapLeft { + padding-left: 18px; + padding-right: 2px; +} +.OxButtonGroup.OxOverlapRight > .OxButton[type=image].OxOverlapRight { + padding-left: 2px; + padding-right: 18px; +} +.OxCheckbox.OxOverlapLeft > .OxInput { + padding-left: 20px; + margin-left: -16px; +} +.OxCheckbox.OxOverlapRight > .OxLabel { + //padding-left: 8px; + padding-right: 20px; + margin-right: -16px; +} +.OxSelect.OxOverlapLeft { + //padding-left: 8px; + padding-left: 16px; + margin-left: -18px; +} +.OxSelect.OxOverlapRight { + //padding-left: 8px; + padding-right: 16px; + margin-right: -18px; +} + +/* +-------------------------------------------------------------------------------- +OxSpreadsheet +-------------------------------------------------------------------------------- +*/ + +.OxSpreadsheet { + border-width: 1px; + border-style: solid; + border-color: rgb(192, 192, 192); +} +.OxSpreadsheet > * { + float: left; +} + +/* +================================================================================ +Grids +================================================================================ +*/ + +.OxGrid { + background-size: 32px 32px; + background-position: 0 0, 16px 16px; +} + +/* +================================================================================ +Images +================================================================================ +*/ + +.OxReflection > img { + -moz-transform: scaleY(-1); + -ms-transform: scaleY(-1); + -o-transform: scaleY(-1); + -webkit-transform: scaleY(-1); + transform: scaleY(-1); +} + +/* +================================================================================ +ImageViewer +================================================================================ +*/ + +.OxImageViewer { + overflow: hidden; +} + +.OxImageViewer .OxInterface { + position: absolute; +} + +.OxImageViewer .OxScaleButton { + right: 52px; + top: 4px; +} +.OxImageViewer .OxZoomButton { + right: 4px; + top: 4px; +} + +.OxImageViewer .OxImage { + position: absolute; + cursor: move; +} + + +.OxImageViewer .OxImageOverview { + border-width: 2px; + border-style: solid; + right: 4px; + bottom: 4px; + overflow: hidden; +} +.OxImageViewer .OxImageOverlay { + position: absolute; + left: 0; + top: 0; +} +.OxImageViewer .OxImageOverlayArea { + position: absolute; +} +.OxImageViewer #OxImageOverlayCenter { + border-width: 2px; + border-style: solid; + cursor: move; +} +.OxImageViewer #OxImageOverlayBottom { + left: 0; + bottom: 0; + right: 0; +} +.OxImageViewer #OxImageOverlayLeft { + left: 0; +} +.OxImageViewer #OxImageOverlayRight { + right: 0; +} +.OxImageViewer #OxImageOverlayTop { + left: 0; + top: 0; + right: 0; +} + +/* +================================================================================ +Layers +================================================================================ +*/ + +.OxLayer { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + opacity: 0; + overflow: hidden; + z-index: 10; +} +.OxLayer.OxDialogLayer { + z-index: 10; +} +.OxLayer.OxMenuLayer { + z-index: 11; +} + +/* +================================================================================ +Lists +================================================================================ +*/ + +.OxCustomList > .OxContainer { + position: absolute; + top: 0; + bottom: 0; +} +.OxCustomList .OxPage { + position: absolute; +} + + +.OxIconList.OxBoth { + overflow-x: hidden; +} + +.OxIconList .OxPage { + position: absolute; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; +} +.OxInfoList .OxPage { + position: absolute; +} + +.OxIconList .OxItem { + float: left; + margin: 2px; + //opacity: 0.9; +} +.OxIconList .OxItem.OxHover, +.OxIconList .OxItem.OxSelected { + //opacity: 1; +} + +.OxIconList .OxItem > div, +.OxInfoList .OxInfoIcon > div { + position: relative; +} + +.OxIconList .OxItem > .OxIcon { + overflow: hidden; +} + +.OxIconList .OxItem > .OxIcon > img, +.OxIconList .OxItem > .OxIcon > .OxVideoPlayer, +.OxInfoList .OxInfoIcon > .OxIcon > img, +.OxInfoList .OxInfoIcon > .OxIcon > .OxVideoPlayer { + position: absolute; + left: 0; + right: 0; + bottom: 0; + margin: auto; + border: 2px solid rgba(0, 0, 0, 0); + cursor: pointer; + border-radius: 4px; +} + +.OxIconList .OxItem > .OxReflection, +.OxIconList .OxInfoIcon > .OxReflection { + overflow: hidden; +} + +.OxIconList .OxItem > .OxReflection > div, +.OxInfoList .OxInfoIcon > .OxReflection > div { + position: absolute; + left: 0; + top: 0; + right: 0; + margin: auto; +} + +.OxIconList .OxItem > .OxReflection > img, +.OxInfoList .OxInfoIcon > .OxReflection > img { + position: absolute; + left: 0; + top: 0; + right: 0; + margin: auto; +} + +.OxIconList .OxItem > .OxText, +.OxInfoList .OxInfoIcon > .OxText { + text-align: center; +} +.OxIconList .OxItem > .OxText > div, +.OxInfoList .OxInfoIcon > .OxText > div { + display: inline-block; + //font-size: 9px; + font-weight: bold; + text-align: center; + padding: 1px 2px; + border: 2px solid rgba(0, 0, 0, 0); + max-width: 124px; + word-wrap: break-word; + cursor: pointer; + border-radius: 4px; + //-moz-user-select: text; + //-ms-user-select: text; + //-o-user-select: text; + //-webkit-user-select: text; +} +.OxIconList .OxItem > .OxText > div > div, +.OxIconList .OxInfoIcon > .OxText > div > div > div { + //font-size: 9px; + font-weight: bold; + text-align: center; +} + +.OxInfoList .OxInfoIcon { + text-align: center; + //overflow: hidden; +} +.OxInfoList .OxInfoIcon .OxReflection { + overflow: hidden; +} + + +.OxTableList { + top: 0; + bottom: 0; +} + +.OxTableList .OxBar { + //z-index: 10; + //-moz-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.75); + //-ms-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.75); + //-webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.75); +} +.OxTableList .OxHead { + position: absolute; + left: 0; + height: 16px; + overflow: hidden; + white-space: nowrap; +} +.OxTableList .OxHead .OxHeadCell { + float: left; + height: 16px; + overflow: hidden; +} +.OxTableList .OxHead .OxHeadCell:first-child { + padding-left: 2px; +} +.OxTableList .OxHead .OxTitle { + float: left; + height: 14px; + padding: 2px 2px 0 2px; + font-weight: bold; + font-size: 10px; + text-overflow: ellipsis; + //cursor: pointer; + overflow: hidden; + white-space: nowrap; +} +.OxTableList .OxHead .OxTitle img { + display: block; + width: 10px; + height: 10px; + margin: 1px 0 0 -1px; +} +.OxTableList .OxHead .OxHeadCell .OxColumnStatus { + position: absolute; + right: 49px; + top: 2px; + font-size: 9px; + font-weight: normal; +} +.OxTableList .OxHead .OxHeadCell.OxSelected .OxTitle .OxColumnStatus { + right: 64px; +} +.OxTableList .OxHead .OxOrder { + float: left; + width: 10px; + height: 10px; + margin: 3px; + display: none; +} +.OxTableList .OxHead .OxHeadCell.OxSelected .OxOrder { + //cursor: pointer; + display: block; +} +.OxTableList .OxHead .OxResize { + float: left; + width: 5px; + height: 16px; +} +.OxTableList .OxHead .OxResize.OxResizable { + cursor: ew-resize; +} +.OxTableList .OxHead .OxResize div { + float: left; + width: 2px; + height: 16px; +} +.OxTableList .OxHead .OxResize div.OxCenter { + width: 1px; +} +.OxTableList .OxBar .OxSelect { + position: absolute; + height: 16px; + border-width: 0 1px 0 0; + border-style: solid; + font-size: 11px; + text-align: center; + cursor: pointer; + overflow: hidden; + border-radius: 0; +} +.OxTableList .OxBar .OxClear { + position: absolute; + right: 0; + height: 8px; + padding-top: 4px; + padding-bottom: 4px; + border-width: 0 1px 0 0; + border-style: solid; + cursor: pointer; +} + +.OxTableList .OxBody { + float: left; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; +} +.OxTableList .OxContent { + //width: 100%; +} +.OxTableList .OxItem { + height: 16px; +} +.OxTableList .OxItem .OxCell { + float: left; + height: 14px; + padding: 1px 4px 1px 4px; + border-right-width: 1px; + border-right-style: solid; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.OxTableList .OxItem .OxCell.OxEdit { + height: 16px; + padding: 0; +} +.OxTableList .OxItem .OxCell > img { + display: block; + width: 16px; + height: 16px; + margin: -1px 0 0 -4px; +} +.OxTableList .OxItem .OxSpace { + float: left; + width: 4px; + height: 16px; +} +.OxTableList .OxItem .OxLine { + float: left; + width: 1px; + height: 16px; +} +.OxTableList .OxItem.OxSelected .OxCell.OxClickable { + cursor: pointer; +} +.OxTableList .OxItem.OxSelected .OxCell.OxEditable { + cursor: text; +} +.OxTableList .OxItem.OxSelected.OxDrag .OxCell { + cursor: ns-resize; +} +.OxTableList .OxPage { + position: absolute; +} + +.OxTreeList .OxItem .OxCell { + height: 13px; + padding-top: 2px; + border-right-width: 0; + font-family: Menlo, Monaco, DejaVu Sans Mono, Bitstream Vera Sans Mono, Consolas, Lucida Console, monospace; +} +.OxTreeList .OxItem .OxCell img { + width: 10px; + height: 10px; + padding: 2px; +} + +/* +================================================================================ +Maps +================================================================================ +*/ + +.OxMap { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.OxMap > * { + position: absolute; +} + +.OxMap .OxRange .OxArrow { + border-radius: 0; +} + +.OxMap .OxMapControl, +.OxMap .OxPlaceControl { + position: absolute; + border-width: 2px; + z-index: 1; +} +.OxMap .OxMapControl.OxButton, +.OxMap .OxPlaceControl.OxButton { + width: 10px; + height: 10px; + padding: 1px; +} +.OxMap .OxMapControl.OxLabel, +.OxMap .OxPlaceControl.OxLabel { + height: 12px; + font-size: 10px; +} +.OxMap .OxMapControl.OxMapButtonCenter { + left: 24px; + top: 24px; +} +.OxMap .OxMapControl.OxMapButtonEast { + left: 44px; + top: 24px; +} +.OxMap .OxMapControl.OxMapButtonNorth { + left: 24px; + top: 4px; +} +.OxMap .OxMapControl.OxMapButtonSouth { + left: 24px; + top: 44px; +} +.OxMap .OxMapControl.OxMapButtonWest { + left: 4px; + top: 24px; +} +.OxMap .OxLabel.OxMapControl.OxMapScale { + right: 4px; + bottom: 19px; +} + +.OxMap .OxPlaceControl.OxPlaceFlag { + right: 180px; + top: 4px; + width: 12px; + height: 12px; + border-width: 2px; + border-style: solid; + border-radius: 8px; +} +.OxMap .OxPlaceControl.OxPlaceFlag > img { + width: 12px; + height: 12px; + border-radius: 6px; +} +.OxMap .OxPlaceControl.OxPlaceName { + right: 24px; + top: 4px; + width: 136px; + text-overflow: ellipsis; +} +.OxMap .OxPlaceControl.OxPlaceDeselectButton { + right: 4px; + top: 4px; +} + +.OxFlag { + width: 16px; + height: 16px; + border-radius: 8px; +} +.OxTypeIcon { + border-width: 2px; + border-style: solid; +} + +/* +================================================================================ +Menus +================================================================================ +*/ + +.OxMainMenu { + z-index: 9; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -ms-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); +} +.OxMainMenu.OxLarge { + height: 24px; + padding-left: 8px; +} +.OxMainMenu.OxMedium { + height: 20px; + padding-left: 6px; +} +.OxMainMenu.OxSmall { + height: 16px; + padding-left: 4px; +} +.OxMainMenu > .OxTitle { + float: left; +} +.OxMainMenu.OxLarge > .OxTitle { + height: 21px; + padding-left: 8px; + padding-right: 8px; + padding-top: 3px; + font-size: 14px; +} +.OxMainMenu.OxMedium > .OxTitle { + height: 17px; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + font-size: 11px; +} +.OxMainMenu.OxSmall > .OxTitle { + height: 14px; + padding-left: 4px; + padding-right: 4px; + padding-top: 2px; + font-size: 9px; +} +.OxMainMenu > .OxTitle:first-child { + font-weight: bold; +} +.OxMainMenu.OxLarge > .OxExtras { + float: right; + padding: 4px 12px 0 0; +} +.OxMainMenu.OxMedium > .OxExtras { + float: right; + padding: 2px 10px 0 0; +} +.OxMainMenu.OxSmall > .OxExtras { + float: right; + padding: 2px 8px 0 0; +} +.OxMainMenu > .OxExtras > * { + float: left; +} + +.OxMenu { + position: absolute; + display: none; + z-index: 12; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.OxMenu.OxLeft { + border-top-left-radius: 4px; +} +.OxMenu.OxRight { + border-top-right-radius: 4px; +} +.OxMenu .OxTop { + height: 4px; +} +.OxMenu.OxLeft .OxTop { + border-top-left-radius: 4px; +} +.OxMenu.OxRight .OxTop { + border-top-right-radius: 4px; +} +.OxMenu .OxBottom { + height: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} +.OxMenu .OxContainer { + background: transparent; + overflow: hidden; +} +.OxMenu .OxContent { + position: relative; + border-collapse: collapse; + border-spacing: 0; +} +.OxMenu.OxLarge .OxItem { + height: 20px; +} +.OxMenu.OxMedium .OxItem { + height: 16px; +} +.OxMenu.OxSmall .OxItem { + height: 12px; +} +.OxMenu.OxLarge .OxItem .OxCell { + height: 20px; + font-size: 14px; +} +.OxMenu.OxMedium .OxItem .OxCell { + height: 16px; + font-size: 11px; +} +.OxMenu.OxSmall .OxItem .OxCell { + height: 12px; + font-size: 9px; +} +.OxMenu .OxItem .OxCell.OxStatus { + padding-left: 4px; + text-align: right; +} +.OxMenu .OxItem .OxCell.OxIcon { + padding-left: 4px; +} +.OxMenu .OxItem .OxCell.OxIcon img { + position: relative; + top: 2px; +} +.OxMenu.OxLarge .OxItem .OxCell.OxIcon img { + width: 16px; + height: 16px; + border-radius: 2px; +} +.OxMenu.OxMedium .OxItem .OxCell.OxIcon img { + width: 12px; + height: 12px; + border-radius: 2px; +} +.OxMenu.OxSmall .OxItem .OxCell.OxIcon img { + width: 8px; + height: 8px; + border-radius: 1px; +} +.OxMenu .OxItem .OxCell.OxTitle { + padding-left: 4px; + white-space: nowrap; +} +.OxMenu .OxItem .OxCell.OxModifiers { + padding-left: 4px; + text-align: right; +} +.OxMenu .OxItem .OxCell.OxKey { + padding-right: 8px; +} +.OxMenu .OxItem .OxCell.OxSubmenu { + height: 13px; + padding-top: 3px; + padding-right: 8px; + text-align: right; +} +.OxMenu.OxLarge .OxItem .OxCell.OxSubmenu { + font-size: 10px; +} +.OxMenu.OxMedium .OxItem .OxCell.OxSubmenu { + font-size: 8px; +} +.OxMenu.OxSmall .OxItem .OxCell.OxSubmenu { + font-size: 6px; +} +.OxMenu.OxLarge .OxItem .OxCell.OxStatus, +.OxMenu.OxLarge .OxItem .OxCell.OxKey, +.OxMenu.OxLarge .OxItem .OxCell.OxSubmenu { + width: 12px; +} +.OxMenu.OxMedium .OxItem .OxCell.OxStatus, +.OxMenu.OxMedium .OxItem .OxCell.OxKey, +.OxMenu.OxMedium .OxItem .OxCell.OxSubmenu { + width: 10px; +} +.OxMenu.OxSmall .OxItem .OxCell.OxStatus, +.OxMenu.OxSmall .OxItem .OxCell.OxKey, +.OxMenu.OxSmall .OxItem .OxCell.OxSubmenu { + width: 8px; +} +.OxMenu .OxSpace { + height: 4px; +} +.OxMenu .OxLine { + height: 1px; +} +.OxMenu .OxScrollbar { + text-align: center; + display: none; +} +.OxMenu.OxLarge .OxScrollbar { + height: 16px; + padding-top: 4px; + font-size: 10px; +} +.OxMenu.OxMedium .OxScrollbar { + height: 13px; + padding-top: 3px; + font-size: 8px; +} +.OxMenu.OxSmall .OxScrollbar { + height: 10px; + padding-top: 2px; + font-size: 6px; +} + +/* +================================================================================ +Panels +================================================================================ +*/ + +.OxCollapsePanel > .OxBar { + position: relative; + z-index: 1; +} +.OxCollapsePanel > .OxBar > .OxButton { + float: left; + margin: 0 0 0 0; +} +.OxCollapsePanel > .OxBar > .OxTitle { + position: absolute; + margin: 1px 2px 0 2px; + font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.OxCollapsePanel > .OxBar > .OxExtras { + float: left; +} +.OxCollapsePanel > .OxBar > .OxExtras:last-child { + float: right; +} +.OxCollapsePanel > .OxBar > .OxExtras > * { + float: left; +} +.OxCollapsePanel > .OxBar > .OxExtras > .OxButton, +.OxCollapsePanel > .OxBar > .OxExtras > .OxButton:active, +.OxCollapsePanel > .OxBar > .OxExtras > .OxButton:focus { + padding: 3px; + border-width: 0; +} +.OxCollapsePanel > .OxBar > .OxExtras > input.OxMedium { + border-radius: 0; +} +.OxCollapsePanel > .OxBar > .OxExtras > .OxSelect { + width: 14px; + height: 14px; + padding: 1px; + border-width: 0; + border-radius: 0; + background: rgba(0, 0, 0, 0); +} +.OxCollapsePanel > .OxBar > .OxExtras > .OxSelect.OxFocus { + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} + + +.OxCollapsePanel > .OxContent { + position: relative; + left: 0; + right: 0; +} + +.OxPanel { + overflow: auto; +} + +.OxSlidePanel { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.OxSlidePanel > div, +.OxSlidePanel > div > div { + position: absolute; + top: 0; + bottom: 0; +} + +.OxSplitPanel { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; +} +.OxSplitPanel > * { + position: absolute; +} + +.OxSplitPanel_ { + display: -moz-box; + display: -ms-box; + display: -o-box; + display: -webkit-box; + display: box; + overflow: hidden; + -moz-box-flex: 0; + -ms-box-flex: 0; + -webkit-box-flex: 0; + box-flex: 0; +} +.OxSplitPanel_.OxHorizontal { + -moz-box-orient: horizontal; + -ms-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-box-orient: horizontal; + box-orient: horizontal; +} +.OxSplitPanel_.OxVertical { + -moz-box-orient: vertical; + -ms-box-orient: vertical; + -o-box-orient: vertical; + -webkit-box-orient: vertical; + box-orient: vertical; +} +.OxSplitPanel_ > * { + -moz-box-flex: 0; + -ms-box-flex: 0; + -webkit-box-flex: 0; + box-flex: 0; +} +.OxSplitPanel_ > .OxSeparator { + display: -webkit-box; + display: -moz-box; + display: box; + position: relative; + z-index: 2; +} +.OxSplitPanel_ > .OxSeparator > * { + -webkit-box-flex: 0; + box-flex: 0; +} +.OxSplitPanel_ > .OxSeparator > .OxLine { + background-color: black; +} +.OxSplitPanel_.OxHorizontal > .OxSeparator { + width: 5px; + margin: 0 -2px 0 -2px; + cursor: ew-resize; +} +.OxSplitPanel_.OxHorizontal > .OxSeparator > .OxLine { + width: 1px; +} +.OxSplitPanel_.OxHorizontal > .OxSeparator > .OxSpace { + width: 2px; +} +.OxSplitPanel_.OxVertical > .OxSeparator { + height: 5px; + margin: -2px 0 -2px 0; + cursor: ns-resize; +} +.OxSplitPanel_.OxVertical > .OxSeparator > .OxLine { + height: 1px; +} +.OxSplitPanel_.OxVertical > .OxSeparator > .OxSpace { + height: 2px; +} + +.OxTabPanel > .OxBar { + text-align: center; +} +.OxTabPanel > .OxBar > .OxButtonGroup { + position: absolute; + left: 0; + right: 0; + margin: auto; +} + +/* +================================================================================ +Requests +================================================================================ +*/ + +.OxLoadingIcon { + opacity: 0; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + -webkit-user-select: none; + user-select: none; +} + +.OxLoadingIcon.OxLarge { + width: 20px; + height: 20px; +} +.OxLoadingIcon.OxMedium { + width: 16px; + height: 16px; +} +.OxLoadingIcon.OxSmall { + width: 12px; + height: 12px; +} + +/* +================================================================================ +Scrollbars +================================================================================ +*/ + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} +::-webkit-scrollbar-button { + width: 8px; + height: 8px; +} +::-webkit-scrollbar-thumb { + border-radius: 8px; +} +::-webkit-scrollbar-track { + border-radius: 8px; +} + +body { + scrollbar-width: thin; + scrollbar-width: 8px; +} + +/* +================================================================================ +SourceViewer +================================================================================ +*/ + +.OxSourceViewer table { + border-collapse: collapse; +} +.OxSourceViewer td { + vertical-align: top; +} +.OxSourceViewer td.OxComment { + padding: 4px 8px 4px 8px; + border-right-width: 1px; + border-right-style: solid; + font-size: 14px; + line-height: 20px; +} +.OxSourceViewer td.OxComment > code { + padding: 1px 3px 1px 3px; + border-radius: 2px; + font-family: Menlo, Monaco, DejaVu Sans Mono, Bitstream Vera Sans Mono, Consolas, Lucida Console, monospace; + font-size: 11px; + line-height: 14px; +} +.OxSourceViewer td.OxComment > pre { + line-height: 16px; + margin: 4px 0 4px 0; + font-family: Menlo, Monaco, DejaVu Sans Mono, Bitstream Vera Sans Mono, Consolas, Lucida Console, monospace; + font-size: 11px; +} +.OxSourceViewer td.OxComment > pre > code { + padding: 0; +} + +/* +================================================================================ +SyntaxHightlighter +================================================================================ +*/ + +.OxSyntaxHighlighter > div { + display: table-cell; + padding: 4px; + font-family: Menlo, Monaco, DejaVu Sans Mono, Lucida Console, Consolas, Bitstream Vera Sans Mono, monospace; + line-height: 16px; +} +.OxSyntaxHighlighter > .OxLineNumbers { + text-align: right; + cursor: default; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.OxSyntaxHighlighter > .OxSourceCode { + white-space: nowrap; +} +.OxSyntaxHighlighter > .OxSourceCode .OxLinebreak { + //-moz-user-select: none; + //-ms-user-select: none; + //-o-user-select: none; + //-webkit-user-select: none; + //user-select: none; +} + +/* +================================================================================ +Video +================================================================================ +*/ + +.OxAnnotation { + border-width: 0 0 1px 0; + border-style: solid; + //padding: 4px 4px 0 4px; +} +.OxAnnotation:last-child { + border-width: 0; +} +/* +.OxAnnotation.OxEdit { + padding: 0; +} +.OxAnnotation textarea { + padding: 4px; + border: 0; +} +*/ + +.OxPosterMarker { + position: absolute; + display: none; +} +.OxPosterMarkerCenter { + position: absolute; + border: 1px solid rgba(255, 255, 255, 0.1); + background: transparent; +} +.OxPosterMarkerLeft, +.OxPosterMarkerRight { + position: absolute; + background: rgba(0, 0, 0, 0.5); +} + +.OxVideoAnnotationPanel { + overflow-x: hidden; + overflow-y: auto; +} +.OxVideoAnnotationPanel .OxVideoPlayer { + position: absolute; + margin: 4px; +} + + +.OxLargeVideoTimeline { + position: absolute; + height: 72px; + margin: 0 4px 0 4px; + overflow: hidden; +} +.OxLargeVideoTimeline > div { + position: absolute; + height: 72px; +} +.OxLargeVideoTimeline > div > img { + position: absolute; + top: 4px; +} +.OxLargeVideoTimeline .OxChapter, +.OxLargeVideoTimeline .OxCut { + position: absolute; + top: 62px; + width: 8px; + height: 8px; + margin-left: -4px; + z-index: 7; +} +.OxLargeVideoTimeline .OxMarkerPointIn { + position: absolute; + top: 63px; + width: 7px; + height: 7px; + margin-left: -6px; + z-index: 9; +} +.OxLargeVideoTimeline .OxMarkerPointOut { + position: absolute; + top: 63px; + width: 7px; + height: 7px; + z-index: 9; +} +.OxLargeVideoTimeline .OxMarkerPosition { + position: absolute; + top: 2px; + width: 11px; + height: 11px; + margin-left: -5px; + z-index: 9; +} +.OxLargeVideoTimeline .OxOverlay { + position: absolute; + height: 72px; + z-index: 8; +} +.OxLargeVideoTimeline .OxSubtitle { + position: absolute; + bottom: 9px; + max-height: 50px; + border: 1px solid rgba(255, 255, 255, 0.5); + padding: 1px; + background: rgba(0, 0, 0, 0.25); + font-size: 8px; + line-height: 10px; + text-align: center; + text-overflow: ellipsis; + text-shadow: rgba(0, 0, 0, 1) 1px 1px 1px; + color: rgb(255, 255, 255); + overflow: hidden; + z-index: 7; + -moz-box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + -ms-box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); +} +.OxLargeVideoTimeline .OxSubtitle.OxHighlight { + border-color: rgb(255, 255, 0); +} +.OxTimelineSmall { + position: absolute; +} +.OxTimelineSmall > div { + position: absolute; + height: 18px; + margin: 3px 4px 3px 4px; + overflow: hidden; +} +.OxTimelineSmall > div > img { + position: absolute; + left: 0; + top: 0; +} +.OxTimelineSmall > div > .OxTimelineSmallImage { + margin-top: 1px; +} + +.OxSmallVideoTimeline .OxInterface, +.OxBlockVideoTimeline .OxInterface { + position: absolute; + z-index: 9; +} +.OxSmallVideoTimeline .OxMarkerPlay { + position: absolute; + width: 14px; + height: 14px; + border-width: 1px; + border-style: solid; + border-radius: 8px; +} +.OxSmallVideoTimeline .OxMarkerPlay > div { + width: 10px; + height: 10px; + border-width: 2px; + border-style: solid; + border-radius: 7px; +} +.OxSmallVideoTimeline .OxMarkerPlay > div > div { + width: 8px; + height: 8px; + border-width: 1px; + border-style: solid; + border-radius: 5px; +} +.OxSmallVideoTimeline .OxMarkerPointIn, +.OxBlockVideoTimeline .OxMarkerPointIn { + position: absolute; + width: 7px; + height: 7px; + margin-left: -2px; + z-index: 8; +} +.OxSmallVideoTimeline .OxMarkerPointIn { + top: 15px; +} +.OxSmallVideoTimeline .OxMarkerPointOut, +.OxBlockVideoTimeline .OxMarkerPointOut { + position: absolute; + width: 7px; + height: 7px; + margin-left: 4px; + z-index: 8; +} +.OxSmallVideoTimeline .OxMarkerPointOut { + top: 15px; +} +.OxSmallVideoTimeline .OxMarkerPosition, +.OxBlockVideoTimeline .OxMarkerPosition { + position: absolute; + width: 11px; + height: 11px; + z-index: 8; +} +.OxSmallVideoTimeline .OxMarkerPosition { + top: 2px; +} + + +.OxVideoPlayer { + position: absolute; +} +.OxVideoPlayer.OxFocus { + -moz-box-shadow: 0 0 2px rgb(128, 128, 128); + -ms-box-shadow: 0 0 2px rgb(128, 128, 128); + -o-box-shadow: 0 0 2px rgb(128, 128, 128); + -webkit-box-shadow: 0 0 2px rgb(128, 128, 128); + box-shadow: 0 0 2px rgb(128, 128, 128); +} + +.OxVideoPlayer .OxBar.OxControls > * { + float: left; +} +.OxVideoPlayer .OxControls { + position: absolute; +} + +.OxVideoPlayer .OxFind { + position: absolute; + right: 0; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + display: none; +} +.OxVideoPlayer .OxFind > * { + float: left; +} +.OxVideoPlayer .OxFind .OxResults { + width: 24px; + padding-top: 2px; + font-size: 9px; + text-align: center; +} + +.OxVideoPlayer .OxInput { + background: transparent; + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} +.OxVideoPlayer div.OxInput.OxFocus { + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} +.OxVideoPlayer input.OxInput { + height: 16px; + //padding: 0 4px 0 4px; + border: 0; + border-radius: 8px; +} +.OxVideoPlayer .OxPositionInput > input.OxInput { + padding: 0 3px 0 3px; +} + +.OxVideoPlayer .OxSelect { + width: 16px; + height: 16px; + border-width: 0; + border-radius: 0; + background: rgba(0, 0, 0, 0); +} +.OxVideoPlayer .OxSelect > .OxButton { + margin: 0; +} + + +.OxVideoPlayer .OxCensoredIcon { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; +} + +.OxVideoPlayer .OxLoadingIcon { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; + opacity: 1; +} + +.OxVideoPlayer .OxLogo { + position: absolute; + opacity: 0.25; +} + +.OxVideoPlayer .OxPlayIcon { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; + border: 2px solid rgb(255, 255, 255); + background: rgba(0, 0, 0, 0.5); + opacity: 0; +} + +.OxVideoPlayer .OxPointMarker { + display: none; + position: absolute; + width: 16px; + height: 16px; + opacity: 0.5; +} +.OxVideoPlayer .OxPointMarkerInTop { + left: 4px; + top: 4px; +} +.OxVideoPlayer .OxPointMarkerInBottom { + left: 4px; + bottom: 4px; +} +.OxVideoPlayer .OxPointMarkerOutTop { + right: 4px; + top: 4px; +} +.OxVideoPlayer .OxPointMarkerOutBottom { + right: 4px; + bottom: 4px; +} + +.OxVideoPlayer .OxPosition { + height: 12px; + padding: 2px; + font-size: 9px; + text-align: center; +} + +.OxVideoPlayer .OxPositionInput { + display: none; +} + +.OxVideoPlayer .OxPoster { + position: absolute; +} + +.OxVideoPlayer .OxSettings { + position: absolute; + right: 0; + bottom: 16px; + display: none; +} +.OxVideoPlayer .OxSettings > div { + //width: 72px; +} +.OxVideoPlayer .OxSettings > .OxItem { + height: 14px; +} +.OxVideoPlayer .OxSettings > .OxItem:first-child { + height: 16px; + border-top-left-radius: 8px; + border-top-right-radius: 8px; +} +.OxVideoPlayer .OxSettings > .OxItem > * { + float: left; +} +.OxVideoPlayer .OxSettings > .OxItem > div { + width: 56px; + height: 12px; + padding: 1px 0 1px 8px; + font-size: 9px; + text-align: right; +} +.OxVideoPlayer .OxSettings > .OxItem > img { + width: 9px; + height: 9px; + padding: 2px 2px 3px 3px; +} +.OxVideoPlayer .OxSettings > .OxItem:first-child > div { + padding-top: 3px; +} +.OxVideoPlayer .OxSettings > .OxItem:first-child > img { + padding-top: 4px; +} +.OxVideoPlayer .OxSettings > .OxLine { + height: 1px; +} +.OxVideoPlayer .OxSettings > .OxSpace { + height: 2px; +} + +.OxVideoPlayer .OxSubtitle { + position: absolute; + left: 0; + right: 0; + text-align: center; + text-shadow: rgba(0, 0, 0, 1) 0 0 4px; + color: rgb(255, 255, 255); +} + +.OxVideoPlayer .OxTitle { + padding-top: 1px; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; +} + +.OxVideoPlayer .OxVideoContainer { + position: absolute; + background: rgb(0, 0, 0); + overflow: hidden; +} + +.OxVideoPlayer .OxVolume { + position: absolute; + left: 0; + height: 16px; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + display: none; +} +.OxVideoPlayer .OxVolume > * { + float: left; +} +.OxVideoPlayer .OxVolume .OxRange .OxTrack { + padding: 1px; + border: 0; +} +.OxVideoPlayer .OxVolume .OxRange .OxThumb { + padding: 1px 7px 1px 7px; + border: 0; +} +.OxVideoPlayer .OxVolume .OxVolumeValue { + width: 24px; + padding-top: 2px; + font-size: 9px; + text-align: center; +} + + + +.OxVideoPlayer .OxInput { + background-color: transparent; + background-image: none; + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} +.OxVideoPlayer div.OxInput.OxFocus { + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} + + +.OxVideoTimelinePlayer .OxPosition { + float: left; + height: 12px; + padding: 2px; + font-size: 9px; + text-align: center; +} +.OxVideoTimelinePlayer .OxPositionInput { + float: left; + display: none; +} +.OxVideoTimelinePlayer div.OxPositionInput { + background: transparent; + -moz-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} +.OxVideoTimelinePlayer div.OxPositionInput.OxFocus { + -moz-box-shadow: 0 0 0; + -o-box-shadow: 0 0 0; + -ms-box-shadow: 0 0 0; + -webkit-box-shadow: 0 0 0; + box-shadow: 0 0 0; +} +.OxVideoTimelinePlayer .OxPositionInput > input.OxInput { + height: 16px; + padding: 0 3px 0 3px; + border: 0; + border-radius: 8px; +} +.OxVideoTimelinePlayer .OxSelect { + width: 16px; + height: 16px; + border-width: 0; + border-radius: 0; + background: rgba(0, 0, 0, 0); +} +.OxVideoTimelinePlayer .OxSelect > .OxButton { + margin: 0; +} +.OxVideoTimelinePlayer .OxVideoBox { + border-top-width: 1px; + border-top-style: solid; + border-bottom-width: 1px; + border-bottom-style: solid; + background: rgb(0, 0, 0); +} + + + +.OxVideoPreview { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; +} +.OxVideoPreview > .OxFrame { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 16px; + overflow: hidden; +} +.OxVideoPreview > OxFrame > img { + position: absolute; +} +.OxVideoPreview > .OxTimeline { + position: absolute; + bottom: 0; + height: 16px; +} +.OxVideoPreview > .OxInterface { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + cursor: pointer; +} + +/* +================================================================================ +Miscellaneous +================================================================================ +*/ + +.OxColor { + border-radius: 8px; + padding: 0 4px 1px 4px; + overflow: hidden; + text-overflow: ellipsis; +} +.OxLabel.OxColor, .OxSelect.OxColor { + padding: 0; +} + +.OxLoadingScreen { + position: absolute; +} +.OxLoadingScreen > div { + position: absolute; + text-align: center; +} +.OxLoadingScreen > div > div { + margin-top: 4px; + opacity: 0; +} +.OxLoadingScreen.OxAuto { + left: 0; + top: 0; + right: 0; + bottom: 0; +} +.OxLoadingScreen.OxAuto > div { + left: 0; + top: 0; + right: 0; + bottom: 0; + margin: auto; +} + +.OxSpecialLink { + padding: 0 2px 0 2px; + border-radius: 2px; +} +.OxSpecialLink:hover { + text-decoration: none; +} + +.OxTextPage { + line-height: 16px; +} +.OxTextPage .OxInput, +.OxTextPage .OxLabel, +.OxTextPage .OxSelect { + line-height: 14px; +} + +.OxTooltip { + position: absolute; + padding: 1px 3px 1px 3px; + border-radius: 4px; + font-size: 9px; + //opacity: 0; + white-space: nowrap; + z-index: 1001; +} +.OxTooltip > div { + font-size: 9px; +} diff --git a/min/UI/jquery/jquery.js b/min/UI/jquery/jquery.js new file mode 100644 index 00000000..ad079a0b --- /dev/null +++ b/min/UI/jquery/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/min/UI/jquery/jquery.mousewheel.js b/min/UI/jquery/jquery.mousewheel.js new file mode 100644 index 00000000..9ebb9b3e --- /dev/null +++ b/min/UI/jquery/jquery.mousewheel.js @@ -0,0 +1,94 @@ +/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.6 + * + * Requires: 1.2.2+ + */ + +(function($) { + +var types = ['DOMMouseScroll', 'mousewheel']; + +if ($.event.fixHooks) { + for ( var i=types.length; i; ) { + $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; + } +} + +var supportsPassive = false; +try { + var opts = Object.defineProperty({}, 'passive', { + get: function() { + supportsPassive = true; + } + }); + window.addEventListener("test", null, opts); +} catch (e) {} + +$.event.special.mousewheel = { + setup: function() { + if ( this.addEventListener ) { + for ( var i=types.length; i; ) { + this.addEventListener( types[--i], handler, supportsPassive ? { passive: true } : false ); + } + } else { + this.onmousewheel = handler; + } + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i=types.length; i; ) { + this.removeEventListener( types[--i], handler, supportsPassive ? { passive: true } : false ); + } + } else { + this.onmousewheel = null; + } + } +}; + +$.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); + }, + + unmousewheel: function(fn) { + return this.unbind("mousewheel", fn); + } +}); + + +function handler(event) { + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; + event = $.event.fix(orgEvent); + event.type = "mousewheel"; + + // Old school scrollwheel delta + if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; } + if ( orgEvent.detail ) { delta = -orgEvent.detail/3; } + + // New school multidimensional scroll (touchpads) deltas + deltaY = delta; + + // Gecko + if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaY = 0; + deltaX = -1*delta; + } + + // Webkit + if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } + if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + return ($.event.dispatch || $.event.handle).apply(this, args); +} + +})(jQuery); diff --git a/min/UI/js/UI.js b/min/UI/js/UI.js new file mode 100644 index 00000000..4c90f45c --- /dev/null +++ b/min/UI/js/UI.js @@ -0,0 +1,2228 @@ +/* OxJS 0.1.3905 (c) 2023 0x2620, dual-licensed GPL/MIT, see https://oxjs.org for details */'use strict';Ox.AnnotationFolder=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({clickLink:null,collapsed:false,editable:false,highlight:'',highlightAnnotations:'none',id:'','in':0,item:'',items:[],keyboard:'',languages:'all',out:0,position:0,range:'all',selected:'',separator:';',showInfo:false,showWidget:false,sort:'position',translate:false,title:'',type:'text',users:'all',widgetSize:256,width:0}).options(options||{}).update(function(key,value){if(key=='highlight'){self.$annotations.options({highlight:value});} +if(key=='highlightAnnotations'){self.$annotations.options({highlightGroup:value});updateAnnotations();} +if(['in','out'].indexOf(key)>-1&&self.editing){var item=Ox.getObjectById(self.options.items,self.options.selected);if(item){item[key]=value;item.duration=self.options.out-self.options['in'];} +self.points=getPoints();} +if(key=='in'){self.options.range=='selection'&&updateAnnotations();}else if(key=='out'){self.options.range=='selection'&&updateAnnotations();}else if(key=='position'){if(self.options.range=='position'){crossesPoint()&&updateAnnotations();self.position=self.options.position;}}else if(key=='collapsed'){self.options.collapsed=!self.options.collapsed;self.$panel.options({collapsed:!self.options.collapsed});self.options.type=='event'&&self.$calendar.resizeCalendar() +self.options.type=='map'&&self.$map.resizeMap()}else if(key=='languages'){updateAnnotations();}else if(key=='range'){updateAnnotations();self.$annotations.options({placeholder:getPlaceholder()});}else if(key=='selected'){if(value===''){self.editing=false;} +if(value&&self.options.collapsed){self.$panel.options({animate:false});self.$panel.options({collapsed:false});self.$panel.options({animate:true});} +self.$annotations.options({selected:value});}else if(key=='sort'){self.sort=getSort();self.$annotations.options({sort:self.sort});showWarnings();}else if(key=='users'){updateAnnotations();}else if(key=='width'){if(self.widget){self.$outer.options({width:self.options.width});self.$inner.options({width:self.options.width});self.$widget.options({width:self.options.width});} +self.$annotations.options({width:self.options.type=='text'?self.options.width+8:self.options.width});}});if(self.options.selected){self.options.collapsed=false;} +self.annotations=getAnnotations();self.points=getPoints();self.position=self.options.position;self.sort=getSort();self.widget=self.options.type=='event'?'Calendar':self.options.type=='place'?'Map':'';self.$addButton=Ox.Button({id:'add',style:'symbol',title:'add',tooltip:Ox._('Add {0}',[self.options.item]) ++(self.options.keyboard?' ['+self.options.keyboard+']':''),type:'image'}).bindEvent({click:function(){that.triggerEvent('add',{value:''});}});self.$infoButton=Ox.Button({style:'symbol',title:'info',type:'image'}).bindEvent({click:function(){that.triggerEvent('info');}});self.$panel=Ox.CollapsePanel({collapsed:self.options.collapsed,extras:[self.options.editable?self.$addButton:self.$infoButton],size:16,title:self.options.title}).addClass('OxAnnotationFolder').bindEvent({toggle:toggleLayer});that.setElement(self.$panel);that.$content=self.$panel.$content;if(self.widget){self.widgetSize=self.options.showWidget*self.options.widgetSize;self.$outer=Ox.Element().css({display:'table-cell',width:self.options.width+'px'}).appendTo(that.$content);self.$inner=Ox.Element().css({height:self.widgetSize+'px',overflow:'hidden'}).appendTo(self.$outer);if(options.type=='event'){self.$widget=self.$calendar=Ox.Calendar({events:getEvents(),height:self.widgetSize,showZoombar:true,width:self.options.width,zoomOnlyWhenFocused:true}).css({width:self.options.width+'px',height:self.widgetSize+'px'}).bindEvent({select:function(data){if(!data.id&&self.options.selected&&isDefined(Ox.getObjectById(self.options.items,self.options.selected))){self.$annotations.options({selected:''});}else if(data.annotationIds&&data.annotationIds.indexOf(self.options.selected)==-1){self.$annotations.options({selected:data.annotationIds[0]});}}}).appendTo(self.$inner);}else{self.$widget=self.$map=Ox.Map({places:getPlaces(),showTypes:true,zoombar:true,zoomOnlyWhenFocused:true}).css({width:self.options.width+'px',height:self.widgetSize+'px'}).bindEvent({select:function(data){if((!data||!data.id)&&self.options.selected&&isDefined(Ox.getObjectById(self.options.items,self.options.selected))){self.$annotations.options({selected:''});}else if(data&&data.annotationIds&&data.annotationIds.indexOf(self.options.selected)==-1){self.$annotations.options({selected:data.annotationIds[0]});}}}).appendTo(self.$inner);} +self.$resizebar=Ox.Element({tooltip:Ox._('Drag to resize or click to toggle map')}).addClass('OxResizebar OxHorizontal').css({position:'absolute',top:self.widgetSize+'px',cursor:'ns-resize'}).append($('
').addClass('OxSpace')).append($('
').addClass('OxLine')).append($('
').addClass('OxSpace')).bindEvent({anyclick:toggleWidget,dragstart:dragstart,drag:drag,dragend:dragend}).appendTo(self.$outer);} +self.$annotations=Ox.ArrayEditable(Ox.extend({clickLink:self.options.clickLink,editable:self.options.editable,getSortValue:self.options.type=='text'?function(value){return Ox.stripTags(value);}:null,globalAttributes:['data','lang'],highlight:self.options.translate?Ox._(self.options.highlight):self.options.highlight,highlightGroup:self.options.highlightAnnotations,placeholder:Ox._('Loading...'),separator:self.options.separator,sort:self.sort,submitOnBlur:false,tooltipText:self.options.showInfo?function(item){return Ox.encodeHTMLEntities(item.user)+', ' ++Ox.formatDate(item.modified.slice(0,10),'%B %e, %Y');}:'',width:self.options.width,maxHeight:self.options.type=='text'?Infinity:void 0,type:self.options.type=='text'?'textarea':'input'},self.options.autocomplete?{autocomplete:function(value,callback){self.options.autocomplete(self.options.id,value,callback);},autocompleteReplace:self.options.type=='entity',autocompleteSelect:true,autocompleteSelectHighlight:true,autocompleteSelectMaxWidth:256,autocompleteSelectOffset:{left:0,top:0},autocompleteSelectUpdate:true,format:self.options.translate?function(value){return Ox._(value);}:null,unformat:function(value){return Ox.decodeHTMLEntities(Ox.stripTags(value));}}:{})).bindEvent({add:function(data){if(self.editing){} +that.triggerEvent('add',{value:data.value||''});},blur:function(data){if(data&&data.id&&data.id[0]=='_'){changeAnnotation(data);that.triggerEvent('blur');}else{that.triggerEvent('blur');}},change:changeAnnotation,'delete':removeAnnotation,edit:function(){self.editing=true;that.triggerEvent('edit');},insert:function(data){that.triggerEvent('insert',data);},open:function(){that.triggerEvent('open');},select:selectAnnotation,selectnext:function(){that.triggerEvent('selectnext');},selectprevious:function(){that.triggerEvent('selectprevious');},selectnone:function(){that.triggerEvent('selectnone');},submit:submitAnnotation}).appendTo(['event','place'].indexOf(self.options.type)>-1?self.$outer:that.$content);['0','1','2','3','4','5','6','7','8','9','b','backslash','closebracket','comma','dot','equal','e','f','g','h','i','minus','n','o','openbracket','p','shift_0','shift_equal','shift_g','shift_i','shift_minus','shift_o','slash','space','control_c','control_v',].forEach(function(key){key='key.'+key;self.$annotations.bindEvent(key,function(){that.triggerEvent(key);});});self.loaded=false;setTimeout(function(){self.$annotations.options({items:self.annotations,placeholder:getPlaceholder(),selected:self.options.selected});self.loaded=true;if(self.options.selected){if(self.options.collapsed){self.$panel.options({collapsed:false});} +selectAnnotation({id:self.options.selected});};});['0','1','2','3','4','5','6','7','8','9','b','backslash','closebracket','comma','dot','equal','f','g','h','i','minus','n','o','openbracket','p','shift_0','shift_equal','shift_g','shift_i','shift_minus','shift_o','slash','space','control_c','control_v',].forEach(function(key){key='key_'+key;self.$annotations.bindEvent(key,function(){that.triggerEvent(key);});});showWarnings();function changeAnnotation(data){var item=Ox.getObjectById(self.options.items,data.id);if(item.value!=data.value){item.value=data.value;that.triggerEvent('change',item);}} +function crossesPoint(){var positions=Ox.sort([self.position,self.options.position]);return self.points.some(function(point){return point>=positions[0]&&point<=positions[1];});} +function dragstart(){if(self.options.showWidget){Ox.$body.addClass('OxDragging');self.drag={startSize:self.options.widgetSize};}} +function drag(e){if(self.options.showWidget){self.options.widgetSize=Ox.limit(self.drag.startSize+e.clientDY,128,384);if(self.options.widgetSize>=248&&self.options.widgetSize<=264){self.options.widgetSize=256;} +self.$resizebar.css({top:self.options.widgetSize+'px'});self.$inner.css({height:self.options.widgetSize+'px'});self.$widget.options({height:self.options.widgetSize});}} +function dragend(e){if(self.options.showWidget){Ox.$body.removeClass('OxDragging');self.options.type=='event'?self.$calendar.resizeCalendar():self.$map.resizeMap();that.triggerEvent('resizewidget',{size:self.options.widgetSize});}} +function getAnnotations(){var annotations=Ox.filter(self.options.items,function(item){return self.editing&&item.id==self.options.selected||((self.options.range=='all'||(self.options.range=='selection'&&item['in']<=self.options.out&&item.out>=self.options['in'])||(self.options.range=='position'&&item['in']<=self.options.position&&item.out>=self.options.position))&&(self.options.languages=='all'||self.options.languages.some(function(language){return item.languages&&item.languages.indexOf(language)>-1;}))&&(self.options.users=='all'||self.options.users.indexOf(item.user)>-1));}).map(function(item){return Ox.extend(item,{group:self.options.highlightAnnotations=='none'?'':self.options.highlightAnnotations=='value'?item.value:item['in']+'-'+item.out});});return annotations;} +function getEvents(){var events=[];self.annotations.filter(function(item){return isDefined(item);}).forEach(function(item){var index=Ox.getIndexById(events,item.event.id);if(index==-1){events.push(Ox.extend({annotationIds:[item.id]},item.event))}else{events[index].annotationIds.push(item.id);}});return events;} +function getPlaceholder(){return'No '+self.options.title.toLowerCase()+(self.options.range=='position'?' at current position':self.options.range=='selection'?' in current selection':'');} +function getPlaces(){var places=[];self.annotations.filter(function(item){return isDefined(item);}).forEach(function(item){var index=Ox.getIndexById(places,item.place.id);if(index==-1){places.push(Ox.extend({annotationIds:[item.id]},item.place));}else{places[index].annotationIds.push(item.id);}});return places;} +function getPoints(){return Ox.unique(Ox.flatten(self.options.items.map(function(item){return[item['in'],item.out];})));} +function getSort(){return({duration:['-duration','+in',self.options.type=='text'?'+created':'+value'],position:['+in','+duration',self.options.type=='text'?'+created':'+value'],text:['+value','+in','+duration'],created:['+created','+in','+duration','+value']})[self.options.sort];} +function isDefined(item){return!!item[self.options.type]&&!!item[self.options.type].type;} +function removeAnnotation(data){var item;self.editing=false;if(self.widget){item=Ox.getObjectById(self.options.items,data.id);if(isDefined(item)){if(self.options.type=='event'){self.$calendar.options({selected:''}).options({events:getEvents()});}else{self.$map.options({selected:''}).options({places:getPlaces()});}}} +showWarnings();that.triggerEvent('remove',{id:data.id});} +function selectAnnotation(data){if(self.loaded){var item=Ox.getObjectById(self.options.items,data.id);self.options.selected=item?data.id:'';if(self.widget){if(self.options.type=='event'){self.$calendar.options({selected:item&&isDefined(item)?item.event.id:''}).panToEvent();}else{self.$map.options({selected:item&&isDefined(item)?item.place.id:''}).panToPlace();}} +that.triggerEvent('select',Ox.extend(data,item?{'in':item['in'],out:item.out,layer:self.options.id}:{}));}} +function showWarnings(){if(self.widget&&self.options.items.length){self.$annotations.find('.OxEditableElement').each(function(){var $element=$(this);if($element.data('id')&&!isDefined(Ox.getObjectById(self.options.items,$element.data('id')))){$element.addClass('OxWarning');}else{$element.removeClass('OxWarning');}});}} +function submitAnnotation(data){var item=Ox.getObjectById(self.options.items,data.id);if(item){item.value=data.value;self.editing=false;self.options.sort=='text'&&self.$annotations.reloadItems();that.triggerEvent('submit',item);}} +function toggleLayer(){self.options.collapsed=!self.options.collapsed;if(!self.options.collapsed&&self.options.type=='place'&&self.options.showWidget){self.$map.resizeMap();} +if(self.options.collapsed){self.editing&&that.blurItem();self.$annotations.loseFocus();} +that.triggerEvent('togglelayer',{collapsed:self.options.collapsed});} +function toggleWidget(){self.options.showWidget=!self.options.showWidget;self.widgetSize=self.options.showWidget*self.options.widgetSize;self.$resizebar.animate({top:self.widgetSize+'px'},250);self.$inner.animate({height:self.widgetSize+'px'},250);self.$widget.animate({height:self.widgetSize+'px'},250,function(){self.$widget.options({height:self.widgetSize});});that.triggerEvent('togglewidget',{collapsed:!self.options.showWidget});} +function updateAnnotations(){self.annotations=getAnnotations();self.$annotations.options({highlightGroup:self.options.highlightAnnotations!='none'});self.$annotations.options({items:self.annotations});self.$annotations.updateItemGroup();showWarnings();if(self.widget){self.options.type=='event'?self.$calendar.options({events:getEvents()}):self.$map.options({places:getPlaces()});}} +that.addItem=function(item){var pos=0;self.options.items.splice(pos,0,item);self.$panel.options({collapsed:false});self.$annotations.addItem(pos,Ox.extend(item,{group:item['in']+'-'+item.out})).options({selected:item.id}).editItem();showWarnings();self.points=getPoints();return that;};that.blurItem=function(){self.editing=false;self.$annotations.blurItem();return that;};that.editItem=function(){self.editing=true;self.$panel.options({collapsed:false});self.$annotations.editItem();return that;};that.gainFocus=function(){self.$annotations.gainFocus();return that;};that.getCurrentAnnotations=function(){return getAnnotations();};that.removeItem=function(){self.$annotations.removeItem();};that.selectItem=function(position){if(self.annotations.length){that.options({selected:self.annotations[position==0?0:self.annotations.length-1].id});self.$annotations.gainFocus();}else{that.triggerEvent(position==0?'selectnext':'selectprevious');}};that.updateItem=function(id,data){Ox.Log('AF','updateItem',id,data) +var item=Ox.getObjectById(self.options.items,id);Ox.forEach(data,function(value,key){item[key]=value;});item.group=self.options.highlightAnnotations=='none'?'':self.options.highlightAnnotations=='value'?item.value:item['in']+'-'+item.out;self.$annotations.updateItemGroup();if(id!=item.id){self.$annotations.find('.OxEditableElement').each(function(){var $element=$(this);if($element.data('id')==id){$element.data({id:item.id});}});self.options.selected=item.id;} +if(self.options.type=='entity'){if(data.value){self.$annotations.updateItem(data.value);}else{that.removeItem();}} +if(self.$widget){if(isDefined(item)){self.$widget.options(self.options.type=='event'?{events:getEvents()}:{places:getPlaces()}).options({selected:item[self.options.type].id});self.$widget[self.options.type=='event'?'panToEvent':'panToPlace']();}else{self.$widget.options({selected:''}).options(self.options.type=='event'?{events:getEvents()}:{places:getPlaces()});}} +if(!self.editing&&id!=item.id){self.$annotations.options({selected:self.options.selected});} +showWarnings();return that;};return that;};'use strict';Ox.AnnotationPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({calendarSize:256,clickLink:null,editable:false,enableExport:false,enableImport:false,highlight:'',highlightAnnotations:'none',highlightLayer:'*',itemName:{singular:'video',plural:'videos'},layers:[],mapSize:256,range:'all',selected:'',separator:';',showCalendar:false,showFind:false,showLayers:{},showMap:false,showUsers:false,sort:'position',width:256}).options(options||{}).update(function(key,value){if(key=='highlight'||key=='highlightLayer'){self.$folder.forEach(function($folder){$folder.options({highlight:getHighlight($folder.options('id'))});});}else if(key=='highlightAnnotations'){self.$folder.forEach(function($folder){$folder.options({highlightAnnotations:self.options.highlightAnnotations});});}else if(['in','out','position'].indexOf(key)>-1){self.$folder.forEach(function($folder){$folder.options(key,value);});}else if(key=='layers'){renderFolders();}else if(key=='selected'){self.options.editable&&updateEditMenu();if(value){var folder=getFolder(value) +folder&&folder.options({selected:value});}else{self.$folder.forEach(function($folder){$folder.options({selected:''});});}}else if(key=='showLayers'){self.options.layers.forEach(function(layer,index){self.$folder[index].options({collapsed:!self.options.showLayers[layer.id]});});}else if(key=='width'){self.$folder.forEach(function($folder){$folder.options({width:self.options.width-Ox.UI.SCROLLBAR_SIZE});});}}).addClass('OxAnnotationPanel');self.editing=false;self.languages=getLanguages();self.enabledLanguages=self.languages.map(function(language){return language.code;});if(self.options.showUsers){self.users=getUsers();self.enabledUsers=self.users;}else{self.enabledUsers='all';} +self.$menubar=Ox.Bar({size:16}).addClass('OxVideoPlayer').bindEvent({doubleclick:function(e){if($(e.target).is('.OxBar')){self.$folders.animate({scrollTop:0},250);}}});self.$folders=Ox.Element().css({overflowY:'scroll'});self.$folder=[];renderFolders();renderOptionsMenu();self.options.editable&&renderEditMenu();that.setElement(self.$panel=Ox.SplitPanel({elements:[{element:self.$menubar,size:16},{element:self.$folders}],orientation:'vertical'}));function getAnnotation(annotationId){var found=false,annotation;Ox.forEach(self.options.layers,function(layer,i){Ox.forEach(layer.items,function(item){if(item.id==annotationId){annotation=item;found=true;return false;}});if(found){return false;}});return annotation;} +function getFolder(annotationId){var found=false,folder;Ox.forEach(self.options.layers,function(layer,i){Ox.forEach(layer.items,function(item){if(item.id==annotationId){folder=self.$folder[i];found=true;return false;}});if(found){return false;}});return folder;} +function getHighlight(layer){return Ox.contains(['*',layer],self.options.highlightLayer)?self.options.highlight:'';} +function getLanguages(){return Ox.sortBy(Ox.map(Ox.unique(Ox.flatten(self.options.layers.map(function(layer){return layer.items.map(function(item){return item.languages;});}))),function(language){return{code:language,name:Ox.getLanguageNameByCode(language)};}),'name');} +function getUsers(){return Ox.sort(Ox.unique(Ox.flatten(self.options.layers.map(function(layer){return layer.items.map(function(item){return item.user;});}))));} +function insert(data){var id=data.id;Ox.InsertHTMLDialog(Ox.extend({callback:function(data){Ox.$elements[id].value(data.value).focusInput(data.position).triggerEvent('change',data.value);}},data)).open();} +function renderEditMenu(){var annotation,annotationTitle,folder,hasManualCalendarOrMap,isDefined,isEditable,isEntity,isEvent,isEventOrPlace,isPlace,isString,key,manageTitle,type,value;if(self.options.selected){annotation=getAnnotation(self.options.selected);folder=getFolder(self.options.selected);if(annotation&&folder){key=folder.options('id');type=folder.options('type');value=annotation.entity?annotation.entity.name:annotation.value;isEditable=annotation.editable;isEntity=!!annotation.entity;isEvent=type=='event';isPlace=type=='place';isEventOrPlace=isEvent||isPlace;isString=type!='text';isDefined=isEventOrPlace&&!!annotation[type]&&!!annotation[type].type;annotationTitle=folder.options('item')+': "'+Ox.stripTags(value)+'"';}} +hasManualCalendarOrMap=self.options.layers.some(function(layer){return layer.type=='event'||layer.type=='place';});manageTitle=Ox._((isDefined?'Edit':'Define')+' ' ++(isPlace?'Place':isEvent?'Event':'Place or Event')+'...');self.$editMenuButton&&self.$editMenuButton.remove();self.$editMenuButton=Ox.MenuButton({items:[].concat(self.options.layers.map(function(layer,i){return{id:'add'+layer.id,disabled:!layer.editable,title:Ox._('Add {0}',[layer.item]),keyboard:i<9?i+1+'':null}}),[{},{id:'deselect',title:Ox._('Deselect Annotation'),disabled:!self.options.selected||self.editing,keyboard:'escape'},{id:'edit',title:Ox._('Edit Annotation'),disabled:!self.options.selected||!isEditable||self.editing,keyboard:'return'},{id:'delete',title:Ox._('Delete Annotation'),disabled:!self.options.selected||!isEditable,keyboard:'delete'},{},{id:'insert',title:Ox._('Insert...'),disabled:isString||!self.editing,keyboard:'control i'},{id:'undo',title:Ox._('Undo Changes'),disabled:!self.editing,keyboard:'escape'},{id:'save',title:Ox._('Save Changes'),disabled:!self.editing,keyboard:isString?'return':'shift return'},],hasManualCalendarOrMap?[{},{id:'manage',title:manageTitle,disabled:!self.options.selected||!isEventOrPlace},]:[],isString?[{},{id:'annotation',title:annotationTitle,disabled:true}].concat(isEntity?[{id:'showentityinfo',title:Ox._('Show Entity Info'),keyboard:'e'}]:[],[{id:'findannotations',title:Ox._('Find in All {0}',[Ox.toTitleCase(self.options.itemName.plural)])},{id:'find',title:Ox._('Find in This {0}',[Ox.toTitleCase(self.options.itemName.singular)])}]):[],[{},{id:'import',title:Ox._('Import Annotations...'),disabled:!self.options.enableImport},{id:'export',title:Ox._('Export Annotations...'),disabled:!self.options.enableExport},]),maxWidth:256,style:'square',title:'edit',tooltip:Ox._('Editing Options'),type:'image'}).css({float:'right'}).bindEvent({click:function(data){if(Ox.startsWith(data.id,'add')){that.triggerEvent('add',{layer:data.id.slice(3),value:''});}else if(data.id=='delete'){getFolder(self.options.selected).removeItem();}else if(data.id=='deselect'){getFolder(self.options.selected).options({selected:''});}else if(data.id=='edit'){getFolder(self.options.selected).editItem();}else if(data.id=='export'){that.triggerEvent('exportannotations');}else if(data.id=='find'){that.triggerEvent('find',{value:value});}else if(data.id=='findannotations'){that.triggerEvent('findannotations',{key:key,value:value});}else if(data.id=='import'){that.triggerEvent('importannotations');}else if(data.id=='insert'){var id=$('.OxEditableElement div.OxInput').data('oxid'),element=$('.OxEditableElement textarea.OxInput')[0];insert({end:element.selectionEnd,id:id,selection:element.value.slice(element.selectionStart,element.selectionEnd),start:element.selectionStart,value:element.value});}else if(data.id=='manage'){that.triggerEvent('define',{id:getAnnotation(self.options.selected)[type].id,type:type});}else if(data.id=='save'){}else if(data.id=='showentityinfo'){that.triggerEvent('showentityinfo',annotation.entity);}else if(data.id=='undo'){}},hide:function(){var folder=self.options.selected?getFolder(self.options.selected):null;folder?folder.gainFocus():that.triggerEvent('focus');}}).appendTo(self.$menubar);} +function renderFolder(layer){var index=Ox.getIndexById(self.options.layers,layer.id),item=Ox.getObjectById(layer.items,self.options.selected),selected=item?item.id:'';self.$folder[index]=Ox.AnnotationFolder(Ox.extend({clickLink:self.options.clickLink,collapsed:!self.options.showLayers[layer.id],editable:self.options.editable,highlight:getHighlight(layer.id),highlightAnnotations:self.options.highlightAnnotations,id:layer.id,'in':self.options['in'],keyboard:index<9?index+1+'':'',out:self.options.out,position:self.options.position,range:self.options.range,selected:selected,separator:self.options.separator,sort:self.options.sort,width:self.options.width-Ox.UI.SCROLLBAR_SIZE},layer,layer.type=='event'?{showWidget:self.options.showCalendar,widgetSize:self.options.calendarSize}:layer.type=='place'?{showWidget:self.options.showMap,widgetSize:self.options.mapSize}:{})).bindEvent({add:function(data){that.triggerEvent('add',Ox.extend({layer:layer.id},data));},blur:function(){that.triggerEvent('blur');},change:function(data){that.triggerEvent('change',Ox.extend({layer:layer.id},data));},edit:function(){self.editing=true;renderEditMenu();that.triggerEvent('edit');},info:function(data){that.triggerEvent('info',{layer:layer.id});},insert:insert,key_e:function(data){var entity=getAnnotation(self.options.selected).entity;entity&&that.triggerEvent('showentityinfo',entity);},open:function(){that.triggerEvent('open');},remove:function(data){that.triggerEvent('remove',Ox.extend({layer:layer.id},data));},resizewidget:function(data){that.triggerEvent('resize'+(layer.type=='event'?'calendar':'map'),data);},select:function(data){selectAnnotation(data,index);},selectnext:function(){selectNext(layer.id,1);},selectprevious:function(){selectNext(layer.id,-1);},selectnone:selectNone,submit:function(data){that.triggerEvent('submit',Ox.extend({layer:layer.id},data));},togglelayer:function(data){self.options.showLayers[layer.id]=!data.collapsed;that.triggerEvent('togglelayer',Ox.extend({layer:layer.id},data));},togglewidget:function(data){that.triggerEvent('toggle'+(layer.type=='event'?'calendar':'map'),data);}}).appendTo(self.$folders);['0','1','2','3','4','5','6','7','8','9','b','backslash','closebracket','comma','dot','equal','f','g','h','i','minus','n','o','openbracket','p','shift_0','shift_equal','shift_g','shift_i','shift_minus','shift_o','slash','space','control_c','control_v',].forEach(function(key){key='key.'+key;self.$folder[index].bindEvent(key,function(){that.triggerEvent(key);});});} +function renderFolders(){self.$folders.empty();self.options.layers.forEach(function(layer,index){renderFolder(layer);});} +function renderOptionsMenu(){self.$optionsMenuButton&&self.$optionsMenuButton.remove();self.$optionsMenuButton=Ox.MenuButton({items:[].concat([{id:'showannotations',title:Ox._('Show Annotations'),disabled:true},{group:'range',min:1,max:1,items:[{id:'all',title:Ox._('All'),checked:self.options.range=='all'},{id:'selection',title:Ox._('In Current Selection'),checked:self.options.range=='selection'},{id:'position',title:Ox._('At Current Position'),checked:self.options.range=='position'}]},{},{id:'sortannotations',title:Ox._('Sort Annotations'),disabled:true},{group:'sort',min:1,max:1,items:[{id:'position',title:Ox._('By Position'),checked:self.options.sort=='position'},{id:'duration',title:Ox._('By Duration'),checked:self.options.sort=='duration'},{id:'text',title:Ox._('By Text'),checked:self.options.sort=='text'},{id:'created',title:Ox._('By Creation Time'),checked:self.options.sort=='created'}]}],self.options.showFind?[{},{id:'results',title:Ox._('Find Annotations'),disabled:true},{group:'results',max:1,items:[{id:'result_*',title:Ox._('All'),checked:self.options.highlightLayer=='*'}].concat(self.options.layers.map(function(result){return{id:'result_'+result.id,title:result.title,checked:result.id==self.options.highlightLayer};}))}]:[],self.options.editable?[{},{id:'highlightannotations',title:Ox._('Highlight Annotations'),disabled:true},{group:'highlight',max:1,items:[{id:'none',title:Ox._('None'),checked:self.options.highlightAnnotations=='none'},{id:'value',title:Ox._('Same Value'),checked:self.options.highlightAnnotations=='value'},{id:'selection',title:Ox._('Same Selection'),checked:self.options.highlightAnnotations=='selection'}]}]:[],self.languages.length>1?[{},{id:'languages',title:Ox._('Show Languages'),disabled:true},{group:'languages',min:1,max:-1,items:self.languages.map(function(language){return{id:language.code,title:Ox._(language.name),checked:Ox.contains(self.enabledLanguages,language.code)};})}]:[],self.options.showUsers&&self.users.length?[{},{id:'users',title:Ox._('Show Users'),disabled:true},{group:'users',min:0,max:-1,items:self.users.map(function(user){return{id:'user_'+user,title:Ox.encodeHTMLEntities(user),checked:self.enabledUsers=='all'||Ox.contains(self.enabledUsers,user)};})}]:[],self.options.showUsers&&self.users.length>1?[{},{id:'allusers',title:Ox._('Show All Users')},{id:'nousers',title:Ox._('Show No Users')}]:[]),style:'square',title:'set',tooltip:Ox._('Options'),type:'image'}).css({float:'left'}).bindEvent({change:function(data){var set={};if(data.id=='languages'){self.enabledLanguages=data.checked.map(function(checked){return checked.id;});self.$folder.forEach(function($folder){$folder.options({languages:self.enabledLanguages});});}else if(data.id=='users'){self.enabledUsers=data.checked.map(function(checked){return checked.id.slice(5);});self.$folder.forEach(function($folder){$folder.options({users:self.enabledUsers});});}else if(data.id=='results'){var layer=data.checked[0].id.split('_').pop() +that.options({highlightLayer:layer});that.triggerEvent('highlightlayer',self.options.highlightLayer);}else if(data.id=='highlight'){var value=data.checked[0].id +that.options({highlightAnnotations:value});that.triggerEvent('highlightannotations',self.options.highlightAnnotations);}else{self.options[data.id]=data.checked[0].id;set[data.id]=self.options[data.id];self.$folder.forEach(function($folder){$folder.options(set);});that.triggerEvent('annotations'+data.id,set);}},click:function(data){if(data.id=='allusers'){self.enabledUsers=Ox.clone(self.users);self.users.forEach(function(user){self.$optionsMenuButton.checkItem('user_'+user);});self.$folder.forEach(function($folder){$folder.options({users:self.enabledUsers});});}else if(data.id=='nousers'){self.enabledUsers=[];self.users.forEach(function(user){self.$optionsMenuButton.uncheckItem('user_'+user);});self.$folder.forEach(function($folder){$folder.options({users:self.enabledUsers});});}},hide:function(){var folder=self.options.selected?getFolder(self.options.selected):null;folder?folder.gainFocus():that.triggerEvent('focus');}}).appendTo(self.$menubar);} +function scrollToSelected(type){var $item=that.find('.OxEditableElement.OxSelected'),itemHeight=$item.height()+(type=='text'?8:0),itemTop=($item.offset()||{}).top,itemBottom=itemTop+itemHeight,height=self.$folders.height(),scrollTop=self.$folders.scrollTop(),top=self.$folders.offset().top;if(itemToptop+height){if(itemTop').attr({src:Ox.UI.getImageURL('markerPosition')}).addClass('OxMarkerPosition').appendTo(that);setPositionMarker();if(self.options.showPointMarkers){self.$pointMarker={};['in','out'].forEach(function(point){var titlecase=Ox.toTitleCase(point);self.$pointMarker[point]=Ox.$('').addClass('OxMarkerPoint'+titlecase).attr({src:Ox.UI.getImageURL('marker'+titlecase)}).appendTo(that);setPointMarker(point);});} +function addLine(i){self.$lines[i]=Ox.$('
').css({position:'absolute',left:self.margin/2+'px',top:i*(self.height+self.margin)+'px',width:self.options.width+'px',height:'24px',overflow:'hidden'}).appendTo(that);self.$images[i]=self.$image.clone().css({position:'absolute',marginLeft:-i*self.options.width+'px'}).appendTo(self.$lines[i]);self.$interfaces[i]=Ox.$('
').addClass('OxInterface OxTarget OxSpecialTarget').css({top:'2px',width:Math.round(self.options.duration)+'px',height:'20px',marginLeft:-i*self.options.width+'px'}).appendTo(self.$lines[i]);} +function doubleclick(e){var position;if($(e.target).is('.OxInterface')){position=getPosition(e);if(self.options.state=='selected'&&position>=self.options['in']&&position<=self.options.out){that.triggerEvent('edit');}else if(self.options.state!='editing'){that.triggerEvent('select');}}} +function getImage(){return Ox.SmallVideoTimelineImage({duration:self.options.duration,editing:self.options.editing,imageURL:self.options.getImageURL,'in':self.options['in'],mode:'editor',out:self.options.out,results:self.options.results,state:self.options.state,subtitles:Ox.clone(self.options.subtitles,true),type:self.options.type,width:Math.round(self.options.duration)}).bindEvent({loaded:updateTimelines});} +function getLines(){return Math.ceil(self.options.duration/self.options.width);} +function getPosition(e){return e.offsetX?e.offsetX:e.clientX-$(e.target).offset().left;} +function getSubtitle(position){var subtitle='';Ox.forEach(self.options.subtitles,function(v){if(v['in']<=position&&v.out>position){subtitle=v;return false;}});return subtitle;} +function getTooltip(e){} +function mousedown(e){if($(e.target).is('.OxInterface')){self.options.position=getPosition(e);setPositionMarker();if(!self.triggered){that.triggerEvent('position',{position:self.options.position});self.triggered=true;setTimeout(function(){self.triggered=false;},250);}}} +function mouseleave(){self.$tooltip.hide();} +function mousemove(e){var position,subtitle;if($(e.target).is('.OxInterface')){position=getPosition(e);subtitle=getSubtitle(position);self.$tooltip.options({title:subtitle?''+Ox.highlight(subtitle.text,self.options.find,'OxHighlight',true).replace(/\n/g,' ')+'
' ++Ox.formatDuration(subtitle['in'],3)+' - ' ++Ox.formatDuration(subtitle['out'],3):Ox.formatDuration(position)}).show(e.clientX,e.clientY);}else{self.$tooltip.hide();}} +function setCSS(){that.css({width:(self.options.width+self.margin)+'px',height:((self.height+self.margin)*self.lines)+4+'px'});} +function setPoint(point){setPointMarker(point);self.$image.options(point,self.options[point]);updateTimelines();} +function setPointMarker(point){var position=Math.round(self.options[point]);self.$pointMarker[point].css({left:(position%self.options.width)+'px',top:(Math.floor(position/self.options.width)*(self.height+self.margin)+15)+'px'});} +function setPositionMarker(){var position=Math.round(self.options.position);self.$positionMarker.css({left:(position%self.options.width)-1+'px',top:(Math.floor(position/self.options.width)*(self.height+self.margin)+2)+'px'});} +function setResults(){self.$image.options({results:self.options.results});updateTimelines();} +function setState(){self.$image.options({state:self.options.state});updateTimelines();} +function setSubtitles(){self.$image.options({subtitles:Ox.clone(self.options.subtitles,true)});updateTimelines();} +function setType(){self.$image=getImage();self.$images.forEach(function($image,i){self.$images[i].replaceWith(self.$images[i]=self.$image.clone().css({position:'absolute',marginLeft:-i*self.options.width+'px'}));});} +function setWidth(){self.lines=getLines();setCSS();Ox.loop(self.lines,function(i){if(self.$lines[i]){self.$lines[i].css({width:self.options.width+'px'});self.$images[i].css({marginLeft:(-i*self.options.width)+'px'});self.$interfaces[i].css({marginLeft:(-i*self.options.width)+'px'});}else{addLine(i);}});while(self.$lines.length>self.lines){self.$lines[self.$lines.length-1].remove();self.$lines.pop();self.$images.pop();} +setPositionMarker();if(self.options.showPointMarkers){setPointMarker('in');setPointMarker('out');}} +function updateTimelines(){self.$lines.forEach(function($line,i){$($line.children()[0]).replaceWith(self.$images[i]=self.$image.clone().css({position:'absolute',marginLeft:(-i*self.options.width)+'px'}));});} +return that;};'use strict';Ox.ClipPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({annotationsCalendarSize:256,annotationsMapSize:256,annotationsRange:'all',annotationsSort:'position',clipRatio:16/9,clips:[],clickLink:null,duration:0,editable:false,formatTitle:function(){return Ox.last(arguments);},getClipImageURL:null,'in':0,layers:[],out:0,position:0,selected:[],sort:[],sortOptions:[],showAnnotationsCalendar:false,showAnnotationsMap:false,showLayers:{},showUsers:false,view:'list',width:0}).options(options||{}).update({clips:function(){var action=self.options.clips.length&&self.options.view!='annotations'?'enableItem':'disableItem';self.$list.options({items:Ox.clone(self.options.clips),sort:getListSort(),sortable:isSortable()});self.$menu[action]('selectclip');self.$menu[action]('splitclip');updateStatus();},duration:updateStatus,height:function(){self.$list.size();},position:function(){if(self.options.view=='annotations'){self.$list.options({position:self.options.position});}},selected:selectClips,showLayers:function(){if(self.options.view=='annotations'){self.$list.options({showLayers:Ox.clone(self.options.showLayers)});}},sort:function(){updateSortElement();self.$list.options({sort:getListSort(),sortable:isSortable(),});},view:function(){updateView();self.$menu.checkItem(self.options.view);},width:function(){self.$list.options({width:self.options.width});}}).bindEvent({resize:function(data){self.$sortSelect.options({width:getSortSelectWidth(data.size)});self.$list.size();}});self.columns=[].concat([{align:'right',id:'index',format:function(value){return value+1;},operator:'+',title:Ox._('Index'),visible:false,width:60},{format:function(value,data){return data.annotation?data.annotation:data.item;},id:'id',operator:'+',sort:function(value,data){return data.sort;},title:Ox._('ID'),unique:true,width:60},{addable:false,id:'item',operator:'+',sort:function(value,data){return data.sort;}},{format:self.options.formatTitle,id:'title',operator:'+',sort:function(value,data){return data.sort;},title:Ox._('Title'),visible:true,width:120},{align:'right',editable:isEditable,format:function(value,data){return(isEditable(data)?['','']:['','']).join(Ox.formatDuration(value,3));},id:'in',operator:'+',sort:function(value,data){return data.sort;},title:Ox._('In'),visible:true,width:90},{align:'right',editable:isEditable,format:function(value,data){return(isEditable(data)?['','']:['','']).join(Ox.formatDuration(value,3));},id:'out',title:Ox._('Out'),visible:true,width:90},{align:'right',editable:isEditable,format:function(value,data){return(isEditable(data)?['','']:['','']).join(Ox.formatDuration(value,3));},id:'duration',operator:'+',sort:function(value,data){return data.sort;},title:Ox._('Duration'),visible:true,width:90},],hasVolume()?[{align:'right',editable:self.options.editable,format:function(value,data){return Ox.formatNumber(value,2);},id:'volume',operator:'+',sort:function(value,data){return data.sort;},title:Ox._('Volume'),visible:false,width:45},]:[],[{addable:false,id:'sort',operator:'+',visible:false}]);self.$menubar=Ox.Bar({size:24}).bindEvent({doubleclick:function(e){if($(e.target).is('.OxBar')){(self.options.view=='list'?self.$list.$body:self.$list).animate({scrollTop:0},250);}}});self.$menu=Ox.MenuButton({items:[{group:'view',min:1,max:1,items:[{id:'list',title:Ox._('View Clips as List'),checked:self.options.view=='list'},{id:'grid',title:Ox._('View Clips as Grid'),checked:self.options.view=='grid'},{id:'annotations',title:Ox._('View Annotations'),checked:self.options.view=='annotations'},]},{},{id:'selectclip',title:'Select Clip at Current Position',keyboard:'\\',disabled:self.options.clips.length==0||self.options.view=='annotations'},{id:'splitclip',title:'Split Clip at Current Position',keyboard:'shift \\',disabled:self.options.clips.length==0||self.options.view=='annotations'},{},{id:'split',title:Ox._('Split Selected Clips at Cuts'),disabled:!self.options.editable||self.options.selected.length==0||self.options.view=='annotations'},{id:'join',title:Ox._('Join Selected Clips at Cuts'),disabled:!self.options.editable||self.options.selected.length<2||self.options.view=='annotations'},{id:'makeeditable',title:Ox._('Make Selected Clips Editable'),disabled:!self.options.editable||self.options.selected.length==0||self.options.view=='annotations'}],title:'set',tooltip:Ox._('Options'),type:'image'}).css({float:'left',margin:'4px 2px 4px 4px'}).bindEvent({change:function(data){if(data.id=='view'){self.options.view=data.checked[0].id;updateView();that.triggerEvent('view',{view:self.options.view});}},click:function(data){if(data.id=='selectclip'){that.selectClip();self.$list.gainFocus();}else if(data.id=='splitclip'){splitClip();}else if(data.id=='split'){splitClips();}else if(data.id=='join'){joinClips();}else if(data.id=='makeeditable'){makeClipsEditable();}}}).appendTo(self.$menubar),self.$sortSelect=Ox.Select({items:self.options.sortOptions,value:self.options.sort[0].key,width:getSortSelectWidth(self.options.width)}).bindEvent({change:function(data){self.options.sort=[{key:data.value,operator:Ox.getObjectById(self.options.sortOptions,data.value).operator}];updateSortElement();that.triggerEvent('sort',self.options.sort);self.$list.options({sortable:isSortable()});}});self.$orderButton=Ox.Button({overlap:'left',title:getButtonTitle(),tooltip:getButtonTooltip(),type:'image'}).bindEvent({click:function(){self.options.sort=[{key:self.options.sort[0].key,operator:self.options.sort[0].operator=='+'?'-':'+'}];updateSortElement();that.triggerEvent('sort',self.options.sort);}});self.$sortElement=Ox.FormElementGroup({elements:[self.$sortSelect,self.$orderButton],float:'right'}).css({float:'right',margin:'4px 4px 4px 2px'}).appendTo(self.$menubar);self.$list=getList();self.$statusbar=Ox.Bar({size:16});self.$status=Ox.Element().css({marginTop:'2px',fontSize:'9px',textAlign:'center',textOverflow:'ellipsis'}).appendTo(self.$statusbar);that.setElement(self.$panel=Ox.SplitPanel({elements:[{element:self.$menubar,size:24},{element:self.$list},{element:self.$statusbar,size:16}],orientation:'vertical'}));updateStatus();function editClip(data){var value=self.$list.value(data.id,data.key);if(data.value!=value&&!(data.value===''&&value===null)){self.$list.value(data.id,data.key,data.value||null);that.triggerEvent('edit',data);}} +function getButtonTitle(){return self.options.sort[0].operator=='+'?'up':'down';} +function getButtonTooltip(){return Ox._(self.options.sort[0].operator=='+'?'Ascending':'Descending');} +function getEditable(ids){return ids.filter(function(id){return isEditable(Ox.getObjectById(self.options.clips,id));});} +function getList(){var $list;if(self.options.view=='list'){$list=Ox.TableList({columns:self.columns,columnsMovable:true,columnsRemovable:true,columnsResizable:true,columnsVisible:true,items:Ox.clone(self.options.clips),keys:['director','year','annotation'],pageLength:1000,scrollbarVisible:true,selected:self.options.selected,sort:getListSort(),sortable:isSortable(),unique:'id'});}else if(self.options.view=='grid'){$list=Ox.IconList({draggable:true,fixedRatio:self.options.clipRatio,item:function(data,sort,size){size=size||128;var ratio=data.videoRatio,fixedRatio=self.options.clipRatio,width=ratio>fixedRatio?size:Math.round(size*ratio/fixedRatio),height=Math.round(width/ratio),info,title=self.options.formatTitle(data),url=self.options.getClipImageURL(data.id,width,height);if(['text','position','duration','random'].indexOf(sort[0].key)>-1){info=Ox.formatDuration(data['in'])+' - ' ++Ox.formatDuration(data.out);}else{info=Ox.formatDuration(data['in'])+' - ' ++Ox.formatDuration(data.out);} +return{height:height,id:data.id,info:info,title:title,url:url,width:width};},items:self.options.clips,keys:['annotation','id','in','out'],orientation:'both',selected:self.options.selected,sort:getListSort(),unique:'id'});}else if(self.options.view=='annotations'){$list=Ox.AnnotationPanel({calendarSize:self.options.annotationsCalendarSize,clickLink:self.options.clickLink,editable:false,layers:self.options.layers,mapSize:self.options.annotationsMapSize,position:self.options.position,range:self.options.annotationsRange,showCalendar:self.options.showAnnotationsCalendar,showLayers:Ox.clone(self.options.showLayers),showMap:self.options.showAnnotationsMap,showUsers:self.options.showUsers,sort:self.options.annotationsSort,width:self.options.width}).bindEvent({select:function(data){that.triggerEvent('selectannotation',data);},open:function(data){}});$list.size=function(){$list.options({width:self.options.width});};return $list;} +$list.bindEvent({copy:function(data){that.triggerEvent('copy',data);},copyadd:function(data){that.triggerEvent('copyadd',data);},cut:function(data){if(self.options.editable){that.triggerEvent('cut',data);self.options.selected=[];selectClips();that.triggerEvent('select',{ids:[]});}},cutadd:function(data){if(self.options.editable){that.triggerEvent('cutadd',data);self.options.selected=[];selectClips();that.triggerEvent('select',{ids:[]});}},'delete':function(data){self.options.editable&&that.triggerEvent('delete',data);},key_backslash:function(data){that.selectClip();self.$list.gainFocus();},key_shift_backslash:function(data){splitClip();},move:function(data){data.ids.forEach(function(id,index){self.$list.value(id,'index',index);});that.triggerEvent('move',data);},open:function(data){that.triggerEvent('open',data);},paste:function(){self.options.editable&&that.triggerEvent('paste');},select:function(data){self.options.selected=data.ids;selectClips();that.triggerEvent('select',data);},sort:function(data){if(data.key=='in'){data.key='position';} +self.options.sort=[data];updateSortElement();self.$list.options({sortable:isSortable()});that.triggerEvent('sort',self.options.sort);},submit:function(data){var value=self.$list.value(data.id);if(data.key=='volume'){data.value=parseFloat(data.value);if(data.value>=1||Ox.isNaN(data.value)){data.value=1;}else if(data.value<0){data.value=0;} +self.$list.value(data.id,data.key,data.value);that.triggerEvent('edit',data);}else{data.value=Ox.parseDuration(data.value);if((data.key=='in'&&data.valuevalue['in'])||(data.key=='duration'&&data.value>0)){self.$list.value(data.id,data.key,data.value);if(data.key=='in'){self.$list.value(data.id,'duration',value.out-data.value);}else if(data.key=='out'){self.$list.value(data.id,'duration',data.value-value['in']);}else if(data.key=='duration'){self.$list.value(data.id,'out',value['in']+data.value);} +that.triggerEvent('edit',data);}else{self.$list.value(data.id,data.key,value[data.key]);}}}});return $list;} +function getListSort(){var sort=[{key:'index',operator:'+'}];if(self.options.sort&&self.options.sort.length){sort[0].operator=self.options.sort[0].operator;sort[0].key=Ox.getObjectById(self.columns,self.options.sort[0].key)?self.options.sort[0].key:'sort';if(self.options.sort[0].key=='position'){sort[0].key='in';}} +return sort;} +function getSortSelectWidth(width){return Math.min(144,width-52+Ox.UI.SCROLLBAR_SIZE);} +function isEditable(data){return self.options.editable&&!data.annotation;} +function isSortable(){return self.options.editable&&self.options.sort&&self.options.sort.length&&self.options.sort[0].key=='index'&&self.options.sort[0].operator=='+';} +function hasVolume(){return self.options.editable&&self.options.sort&&self.options.sort.length&&self.options.sort[0].key=='index'} +function joinClips(){var clips=getEditable(self.options.selected).map(function(id){return Ox.clone(Ox.getObjectById(self.options.clips,id));}),ids=[],join=[],joined;do{joined=false;Ox.forEach(clips,function(outClip){var outPoint=outClip.item+'/'+outClip.out;Ox.forEach(clips,function(inClip,index){var inPoint=inClip.item+'/'+inClip['in'];if(inPoint==outPoint){ids=Ox.unique(ids.concat([outClip.id,inClip.id]));join=Ox.unique(join.concat([outClip.id]));outClip.out=inClip.out;if(Ox.contains(join,inClip.id)){join.splice(join.indexOf(inClip.id),1);} +clips.splice(index,1);joined=true;return false;}});if(joined){return false;}});}while(joined);join=join.map(function(id){var clip=Ox.getObjectById(clips,id);return{'in':clip['in'],item:clip.item,out:clip.out};});if(ids.length){that.triggerEvent('join',{ids:ids,join:join});}} +function makeClipsEditable(){if(!self.options.editable){return} +var clips=self.options.clips.filter(function(clip){return Ox.contains(self.options.selected,clip.id)&&clip.annotation;});clips.forEach(function(clip){self.$list.value(clip.id,{annotation:''});that.triggerEvent('edit',{id:clip.id,key:'annotation',value:''});})} +function selectClips(){if(self.options.editable){self.$menu[self.options.selected.length>0?'enableItem':'disableItem']('split');self.$menu[self.options.selected.length>1?'enableItem':'disableItem']('join');self.$menu[self.options.selected.length>0?'enableItem':'disableItem']('makeeditable');} +self.$list.options({selected:self.options.selected});} +function splitClip(){that.selectClip();var index;Ox.forEach(self.options.clips,function(clip,i){if(clip.position<=self.options.position){index=i}else{return false;}});var clip=self.options.clips[index];if(clip){var position=self.options.position-clip.position+clip['in'];if(position!=clip['in']&&position!=clip['out']){var ids=[clip.id];var split=[{'in':clip['in'],'out':position,'item':clip.item},{'in':position,'out':clip['out'],'item':clip.item}];that.triggerEvent('split',{ids:ids,split:split});}}} +function splitClips(){var ids=getEditable(self.options.selected).filter(function(id){var clip=Ox.getObjectById(self.options.clips,id);return clip.cuts.length;}),split=Ox.flatten(ids.map(function(id){var clip=Ox.getObjectById(self.options.clips,id),cuts=[clip['in']].concat(clip.cuts).concat([clip.out]);return Ox.range(0,cuts.length-1).map(function(i){return{'in':cuts[i],item:clip.item,out:cuts[i+1]};});}));if(split.length>ids.length){that.triggerEvent('split',{ids:ids,split:split});}} +function updateSortElement(){self.$sortSelect.options({value:self.options.sort[0].key,});self.$orderButton.options({title:getButtonTitle(),tooltip:getButtonTooltip(),});} +function updateStatus(){self.$status.html(Ox.toTitleCase(Ox.formatCount(self.options.clips.length,'Clip')) ++', '+Ox.formatDuration(self.options.duration,3));} +function updateView(){var action=self.options.editable&&self.options.selected.length&&self.options.view!='annotations'?'enableItem':'disableItem';self.$menu[action]('split');self.$menu[self.options.editable&&self.options.selected.length>1&&self.options.view!='annotations'?'enableItem':'disableItem']('join');self.$menu[action]('makeeditable');self.$panel.replaceElement(1,self.$list=getList());} +that.getPasteIndex=function(){return self.$list.getPasteIndex();};that.invertSelection=function(){self.$list.invertSelection();};that.selectAll=function(){self.$list.selectAll();};that.selectClip=function(){var index;Ox.forEach(self.options.clips,function(clip,i){Ox.print('CLIP',i,clip.position,clip.duration,self.options.position) +if(clip.position<=self.options.position){index=i}else{return false;}});self.options.selected=[self.options.clips[index].id];selectClips();that.triggerEvent('select',{ids:self.options.selected});return that;};that.updateItem=function(id,data){self.options.clips[Ox.getIndexById(self.options.clips,id)]=data;self.$list.value(id,{duration:data.duration,'in':data['in'],out:data.out,sort:data.sort});return that;};return that;};'use strict';Ox.LargeVideoTimeline=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({chapters:[],cuts:[],disabled:false,duration:0,find:'',getImageURL:null,'in':0,matches:[],out:0,position:0,showInToOut:false,subtitles:[],type:'',width:0}).options(options||{}).update({find:setSubtitles,'in':function(){setPointMarker('in');},out:function(){setPointMarker('out');},position:setPosition,subtitles:setSubtitles,type:setType,width:setWidth}).addClass('OxLargeVideoTimeline OxMedia').on({mouseleave:mouseleave,mousemove:mousemove});if(!self.options.disabled){that.bindEvent({anyclick:click,dragstart:dragstart,drag:drag,dragend:dragend,touchstart:dragstart,touchmove:drag,touchend:dragend});} +self.$cuts=[];self.$pointMarker={};self.$tiles={};self.$tooltip=Ox.Tooltip({animate:false});self.center=Math.floor(self.options.width/2);self.fps=25;self.height=64;self.isAsync=self.options.getImageURL.length==3;self.tileWidth=1500;self.tiles=self.options.duration*self.fps/self.tileWidth;self.$timeline=$('
').css({left:self.center+'px'}).appendTo(that);setTimeout(setSubtitles);if(self.options.showInToOut){if(self.options['in']){$('
').addClass('OxOverlay').css({left:0,width:self.options['in']*self.fps+'px',}).appendTo(self.$timeline);} +if(self.options.out){$('
').addClass('OxOverlay').css({left:self.options.out*self.fps+'px',width:(self.options.duration-self.options.out)*self.fps+'px',}).appendTo(self.$timeline);}} +setTimeout(function(){var $cut=$('').addClass('OxCut').attr({src:Ox.UI.getImageURL('markerCut')}),$chapter=$('').addClass('OxChapter').attr({src:Ox.UI.getImageURL('markerChapter')}),chapters=self.options.chapters.slice(1).map(function(chapter){return chapter.position;});Ox.unique(chapters.concat(self.options.cuts)).forEach(function(v,i){self.$cuts[i]=(Ox.contains(chapters,v)?$chapter:$cut).clone().css({left:(v*self.fps)+'px'}).appendTo(self.$timeline);});});self.$markerPosition=$('').addClass('OxMarkerPosition').attr({src:Ox.UI.getImageURL('markerPosition')}).appendTo(that);setMarker();['in','out'].forEach(function(point){var titlecase=Ox.toTitleCase(point);self.$pointMarker[point]=$('').addClass('OxMarkerPoint'+titlecase).attr({src:Ox.UI.getImageURL('marker'+titlecase)}).appendTo(self.$timeline);setPointMarker(point);});setWidth();setPosition();function click(data){self.options.position=Ox.round(Ox.limit(getPosition(data),0,self.options.duration),3);setPosition();that.triggerEvent('position',{position:self.options.position});} +function dragstart(data){Ox.$body.addClass('OxDragging');self.drag={x:data.clientX};} +function drag(data){self.options.position=Ox.round(Ox.limit(self.options.position+(self.drag.x-data.clientX)/self.fps,0,self.options.duration),3);self.drag.x=data.clientX;setPosition();that.triggerEvent('positioning',{position:self.options.position});} +function dragend(){Ox.$body.removeClass('OxDragging');that.triggerEvent('position',{position:self.options.position});} +function getImageURL(i,callback){if(!self.isAsync){callback(self.options.getImageURL(self.options.type,i));}else{self.options.getImageURL(self.options.type,i,callback);}} +function getPosition(e){return self.options.position+(e.clientX-that.offset().left-self.center-1)/self.fps;} +function mouseleave(e){self.clientX=0;self.clientY=0;self.$tooltip.hide();} +function mousemove(e){self.clientX=e.clientX;self.clientY=e.clientY;updateTooltip();} +function setMarker(){self.$markerPosition.css({left:self.center+'px'});} +function setPointMarker(point){self.$pointMarker[point].css({left:(self.options[point]*self.fps)+'px'});} +function setPosition(){self.tile=Math.floor(self.options.position*self.fps/self.tileWidth);self.$timeline.css({marginLeft:(-self.options.position*self.fps)+'px'});Ox.loop(Math.max(self.tile-1,0),Math.min(self.tile+2,self.tiles),function(i){if(!self.$tiles[i]){if(self.isAsync){self.$tiles[i]=true;} +getImageURL(i,function(url){self.$tiles[i]=$('').attr({src:url}).css({left:(i*self.tileWidth)+'px'}).appendTo(self.$timeline);});}});if(self.clientX&&self.clientY){updateTooltip();}} +function setSubtitles(){that.find('.OxSubtitle').remove();self.$subtitles=[];self.options.subtitles.forEach(function(subtitle,i){var found=self.options.find&&subtitle.text.toLowerCase().indexOf(self.options.find.toLowerCase())>-1;self.$subtitles[i]=$('
').addClass('OxSubtitle'+(found?' OxHighlight':'')).css({left:Math.round(subtitle['in']*self.fps)+'px',width:Math.round(((subtitle.out-subtitle['in'])*self.fps)-2)+'px'}).html(Ox.highlight(subtitle.text,self.options.find,'OxHighlight',true)).appendTo(self.$timeline);});} +function setType(){Ox.forEach(self.$tiles,function($tile,i){getImageURL(i,function(url){$tile.attr({src:url});});});} +function setWidth(){self.center=Math.floor(self.options.width/2);that.css({width:self.options.width+'px'});self.$timeline.css({left:self.center+'px'});setMarker();} +function triggerPositionEvent(){that.triggerEvent('position',{position:self.options.position});} +function updateTooltip(){var position=getPosition(self);if(position>=0&&position<=self.options.duration){self.$tooltip.options({title:Ox.formatDuration(position,3)}).show(self.clientX,self.clientY);}else{self.$tooltip.hide();}} +return that;};'use strict';Ox.SmallVideoTimeline=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({_offset:0,disabled:false,duration:0,find:'',imageURL:'','in':0,invertHighlight:false,mode:'player',out:0,paused:false,results:[],showInToOut:false,showMilliseconds:0,state:'default',subtitles:[],width:256}).options(options||{}).update({duration:function(){self.$image.options({duration:self.options.duration});},imageURL:function(){self.$image.options({imageURL:self.options.imageURL});},'in':function(){self.$image.options({'in':self.options['in']});self.options.mode=='editor'&&setPointMarker('in');},out:function(){self.$image.options({out:self.options.out});self.options.mode=='editor'&&setPointMarker('out');},paused:function(){self.$positionMarker[self.options.paused?'addClass':'removeClass']('OxPaused');},position:function(){setPositionMarker();},results:function(){self.$image.options({results:self.options.results});},state:function(){self.$image.options({state:self.options.state});},subtitles:function(){self.$image.options({subtitles:self.options.subtitles});},width:function(){setWidth();}}).addClass('OxSmallVideoTimeline').css(Ox.extend({width:self.options.width+'px'},self.options.mode=='player'?{background:'rgb(0, 0, 0)',borderRadius:'8px'}:{}));self.height=self.options.mode=='player'?16:24;self.imageLeft=self.options.mode=='player'?8:4;self.imageWidth=self.options.width-(self.options.mode=='player'?16:8) +self.imageHeight=self.options.mode=='player'?16:18;self.interfaceLeft=self.options.mode=='player'?0:4;self.interfaceTop=self.options.mode=='player'?0:2;self.interfaceWidth=self.options.mode=='player'?self.options.width:self.imageWidth;that.css({height:self.height+'px'});self.$image=getTimelineImage().appendTo(that);self.$interface=Ox.Element({tooltip:getTooltip}).addClass('OxInterface').css({left:self.interfaceLeft+'px',top:self.interfaceTop+'px',width:self.interfaceWidth+'px',height:'20px'}).bindEvent({drag:function(data){mousedown(data);},dragend:function(data){self.triggered=false;mousedown(data);},mousedown:mousedown,touchend:function(data){self.triggered=false;mousedown(data);},touchmove:mousedown,touchstart:mousedown}).appendTo(that);self.$interface.$tooltip.css({textAlign:'center'});if(self.options.mode=='player'){self.$positionMarker=$('
').addClass('OxMarkerPlay'+(self.options.paused?' OxPaused':'')).append($('
').append($('
'))).appendTo(that);}else{self.$positionMarker=$('').addClass('OxMarkerPosition').attr({src:Ox.UI.getImageURL('markerPosition')}).appendTo(that);} +setPositionMarker();if(self.options.mode=='editor'){self.$pointMarker={};['in','out'].forEach(function(point){var titlecase=Ox.toTitleCase(point);self.$pointMarker[point]=$('').addClass('OxMarkerPoint'+titlecase).attr({src:Ox.UI.getImageURL('marker'+titlecase)}).appendTo(that);setPointMarker(point);});} +function getLeft(){return(self.options.showInToOut?self.options.position-self.options['in']:self.options.position)*self.imageWidth/self.options.duration;} +function getPosition(e){var position=((e.offsetX?e.offsetX:e.clientX-$(e.target).offset().left) +-(self.options.mode=='player'?8:0))*self.options.duration/self.imageWidth;position=Ox.limit(position,0,self.options.duration);if(self.options.showInToOut){position+=self.options['in'];} +return position;} +function getSubtitle(position){var subtitle='';Ox.forEach(self.options.subtitles,function(v){if(v['in']<=position&&v.out>position){subtitle=v;return false;}});return subtitle;} +function getTimelineImage(){return(self.options.imageURL?Ox.SmallVideoTimelineImage({duration:self.options.duration,imageURL:self.options.imageURL,'in':self.options['in'],invertHighlight:self.options.invertHighlight,mode:self.options.mode,out:self.options.out,results:self.options.results,showInToOut:self.options.showInToOut,subtitles:self.options.subtitles,state:self.options.state,type:self.options.type,width:self.imageWidth}):Ox.Element()).css({position:'absolute',left:self.imageLeft+'px',width:self.imageWidth+'px'});} +function getTooltip(e){var position=getPosition(e),subtitle=getSubtitle(position);return subtitle?''+Ox.highlight(subtitle.text,self.options.find,'OxHighlight').replace(/\n/g,'
')+'

'+Ox.formatDuration(subtitle['in'],self.options.showMilliseconds)+' - '+Ox.formatDuration(subtitle['out'],self.options.showMilliseconds):Ox.formatDuration(position,self.options.showMilliseconds);} +function mousedown(e){if(!self.options.disabled&&$(e.target).is('.OxInterface')){self.options.position=getPosition(e);setPositionMarker();if(!self.triggered){that.triggerEvent('position',{position:self.options.position});self.triggered=true;setTimeout(function(){self.triggered=false;},250);}}} +function setPointMarker(point){self.$pointMarker[point].css({left:self.imageLeft+Math.round(getLeft())+'px'});} +function setPositionMarker(){self.$positionMarker.css({left:self.interfaceLeft+Math.round(getLeft()) +-(self.options.mode=='editor'?5:0) ++self.options._offset+'px'});} +function setWidth(){self.imageWidth=self.options.width-(self.options.mode=='player'?16:8);self.interfaceWidth=self.options.mode=='player'?self.options.width:self.imageWidth;that.css({width:self.options.width+'px'});self.$image.options({width:self.imageWidth}).css({width:self.imageWidth+'px'});self.$interface.css({width:self.interfaceWidth+'px'});setPositionMarker();if(self.options.mode=='editor'){setPointMarker('in');setPointMarker('out');}} +return that;};'use strict';Ox.SmallVideoTimelineImage=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({duration:0,imageURL:'',invertHighlight:false,'in':0,mode:'player',out:0,results:[],showInToOut:false,state:'default',subtitles:[],type:'',width:256}).options(options||{}).update({imageURL:function(){self.$timeline.attr({src:self.options.imageURL});},'in':function(){self.$selection.attr({src:getImageURL('selection')});},out:function(){self.$selection.attr({src:getImageURL('selection')});},results:function(){self.$results.attr({src:getImageURL('results')});},selection:function(){self.$selection.attr({src:getImageURL('selection')});},subtitles:function(){self.$subtitles.attr({src:getImageURL('subtitles')});},state:function(){self.$selection.attr({src:getImageURL('selection')});},width:function(){var width=self.options.width;that.css({width:width+'px'});self.$results.attr({src:getImageURL('results')}).css({width:width+'px'});self.$selection.attr({src:getImageURL('selection')}).css({width:width+'px'});self.$subtitles.css({width:width+'px'});self.$timeline.css({width:width+'px'});}}).css({position:'absolute',width:self.options.width+'px'});if(self.options.showInToOut){self.pixelsPerSecond=(screen.width<1024?1024:screen.width)/self.options.duration;} +self.images=Ox.isString(self.options.imageURL)?1:Math.ceil(self.options.duration/3600);self.imageWidth=Ox.isString(self.options.imageURL)?1920:self.options.showInToOut?(self.pixelsPerSecond<=1?Math.round(self.options.duration):Math.round(self.options.duration*25)):Math.round(self.options.duration);self.height=self.options.mode=='editor'?24:16;self.imageHeight=self.options.mode=='editor'?18:16;self.imageTop=self.options.mode=='editor'?3:0;self.timelineTop=self.options.mode=='editor'?4:0;self.themeData=Ox.Theme.getThemeData();that.css({height:self.height+'px'});if(Ox.isString(self.options.imageURL)){self.$timeline=$('').attr({src:self.options.imageURL}).css({position:'absolute',top:self.timelineTop+'px',width:self.options.width+'px',height:'16px'}).appendTo(that);}else if(self.options.showInToOut){self.$timeline=getClipTimeline().css({position:'absolute',top:self.timelineTop+'px',width:self.options.width+'px',height:'16px'}).appendTo(that);}else{Ox.loop(self.images,function(i){$('').attr({src:self.options.imageURL(self.options.type,i)}).css({position:'absolute',left:(i*3600)+'px',top:self.timelineTop+'px',width:(i==self.images-1?self.imageWidth%3600||3600:3600)+'px',height:'16px'}).appendTo(that);});} +self.$subtitles=$('');self.$results=$('');self.$selection=$('');setTimeout(function(){self.$subtitles.attr({src:getImageURL('subtitles')}).css({position:'absolute',top:self.imageTop+'px',width:self.options.width+'px',height:self.imageHeight+'px'}).appendTo(that);self.$results.attr({src:getImageURL('results')}).css({position:'absolute',top:self.imageTop+'px',width:self.options.width+'px',height:self.imageHeight+'px'}).appendTo(that);self.$selection.attr({src:getImageURL('selection')}).css({position:'absolute',top:self.imageTop+'px',width:self.options.width+'px',height:self.imageHeight+'px'}).appendTo(that);that.triggerEvent('loaded');});function getClipTimeline(){var $canvas,context,image,firstTile,lastTile,tileHeight,tileOffset,tileWidth;if(self.pixelsPerSecond<=1){firstTile=Math.floor(self.options['in']/3600);lastTile=Math.floor(self.options.out/3600);tileHeight=16;tileOffset=-Math.round(self.options['in']%3600);tileWidth=3600;}else{firstTile=Math.floor(self.options['in']/60);lastTile=Math.floor(self.options.out/60);tileHeight=64;tileOffset=-Math.round(self.options['in']%60*25);tileWidth=1500;} +$canvas=$('').attr({width:self.imageWidth,height:tileHeight});context=$canvas[0].getContext('2d');Ox.loop(firstTile,lastTile+1,function(tileIndex){var $image=$('').one({load:function(){context.drawImage($image[0],tileOffset+(tileIndex-firstTile)*tileWidth,0);}}).attr({src:self.options.imageURL(tileHeight,tileIndex)});});return $canvas;} +function getImageURL(image,callback){var width=image=='results'||image=='selection'?self.options.width:self.imageWidth,height=self.imageHeight,canvas=$('').attr({width:width,height:height})[0],context=canvas.getContext('2d'),imageData=context.createImageData(width,height),data=imageData.data;if(image=='results'){var top=0,bottom=height;self.options.results.forEach(function(result){var left=Math.round(result['in']/self.options.duration*width),right=Math.round(result.out/self.options.duration*width)+1,rgb=self.themeData.videoTimelineResultGradient;Ox.loop(left,right,function(x){Ox.loop(top,bottom,function(y){var alpha=self.options.mode=='editor'&&(y==top||y==bottom-1)?255:128,color=rgb[[2,3,6].indexOf(x%4+y%4)>-1?0:1],index=x*4+y*4*width;data[index]=color[0];data[index+1]=color[1];data[index+2]=color[2];data[index+3]=alpha;});});});}else if(image=='selection'&&self.options.out>self.options['in']&&!self.options.showInToOut){var left=Math.round(self.options['in']/self.options.duration*width),right=Math.round(self.options.out/self.options.duration*width)+1,spans=self.options.invertHighlight?[{left:0,right:left},{left:right,right:width}]:[{left:left,right:right}],top=0,bottom=height,rgb=self.themeData[self.options.state=='editable'?'videoTimelineEditableGradient':self.options.state=='editing'?'videoTimelineEditingGradient':self.options.state=='selected'?'videoTimelineSelectedGradient':'videoTimelineDefaultGradient'];spans.forEach(function(span){Ox.loop(span.left,span.right,function(x){Ox.loop(top,bottom,function(y){var alpha=self.options.mode=='editor'&&(y==top||y==bottom-1)?255:128,color=rgb[[2,3,6].indexOf(x%4+y%4)>-1?0:1],index=x*4+y*4*width;data[index]=color[0];data[index+1]=color[1];data[index+2]=color[2];data[index+3]=alpha;});});});}else if(image=='subtitles'){var bottom=self.options.mode=='editor'?15:14,offset=self.options.showInToOut?(self.pixelsPerSecond<=1?-self.options['in']:-self.options['in']*25):0,subtitles=self.options.showInToOut?self.options.subtitles.filter(function(subtitle){return(subtitle['in']>=self.options['in']&&subtitle['in']<=self.options.out)||(subtitle.out>=self.options['in']&&subtitle.out<=self.options.out)||(subtitle['in']self.options.out)}):self.options.subtitles;subtitles.forEach(function(subtitle){var left=Math.round(subtitle['in']/self.options.duration*self.imageWidth)+offset,right=Math.round(subtitle.out/self.options.duration*self.imageWidth)+offset+1,top=bottom-subtitle.text.split('\n').length-2;Ox.loop(left,right,function(x){Ox.loop(top,bottom,function(y){var alpha=128,color=(y==top||y==bottom-1)?[0,0,0]:[255,255,255],index=x*4+y*4*width;data[index]=color[0];data[index+1]=color[1];data[index+2]=color[2];data[index+3]=alpha;});});});} +context.putImageData(imageData,0,0);return canvas.toDataURL();} +return that;};'use strict';Ox.VideoAnnotationPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({annotationsCalendarSize:256,annotationsHighlight:'none',annotationsMapSize:256,annotationsRange:'all',annotationsSeparator:';',annotationsSize:256,annotationsSort:'position',annotationsTooltip:Ox._('annotations'),audioTrack:'',autocomplete:null,censored:[],censoredIcon:'',censoredTooltip:'',clickLink:null,cuts:[],duration:0,enableDownload:false,enableImport:false,enableExport:false,enableSetPosterFrame:false,enableSubtitles:false,find:'',findLayer:'*',fps:25,getFrameURL:null,getLargeTimelineURL:null,getSmallTimelineURL:null,'in':0,itemName:{singular:'video',plural:'videos'},height:0,layers:[],loop:false,muted:false,out:0,paused:true,playbackRate:1,position:0,posterFrame:0,resolution:0,selected:'',selectResult:false,showAnnotations:false,showAnnotationsCalendar:false,showAnnotationsMap:false,showLargeTimeline:true,showLayers:{},showUsers:false,subtitles:[],subtitlesDefaultTrack:'en',subtitlesLayer:null,subtitlesOffset:0,subtitlesTrack:'en',timeline:'',timelines:[],videoRatio:16/9,videoSize:'small',video:'',volume:1,width:0}).options(options||{}).update({enableSubtitles:function(){self.$player.forEach(function($player){$player.options('enableSubtitles',self.options.enableSubtitles);});},height:setSizes,'in':function(){setPoint('in',self.options['in']);},loop:function(){self.$video.options({loop:self.options.loop});},out:function(){setPoint('out',self.options.out);},paused:function(){self.$player[0].options({paused:self.options.paused});},playbackRate:function(){self.$player[0].options({playbackRate:self.options.playbackRate});},position:function(){setPosition(self.options.position);},selected:function(){selectAnnotation(self.options.selected?Ox.getObjectById(self.annotations,self.options.selected):{id:''});},showAnnotations:function(){self.$mainPanel.toggleElement(1);},showLayers:function(){self.$annotationPanel.options({showLayers:Ox.clone(self.options.showLayers)});},timeline:function(){self.$menuButton.checkItem('timelines_'+self.options.timeline);updateTimelines();},volume:function(){self.$player[0].options({volume:self.options.volume});},width:setSizes}).bindEvent({key_0:toggleMuted,key_alt_left:function(){},key_alt_right:function(){},key_alt_shift_left:function(){},key_alt_shift_right:function(){},key_b:function(){self.annotations.length&&selectAnnotation(getNextAnnotation('annotation',-1));},key_backslash:function(){self.annotations.length&&selectAnnotation();},key_closebracket:function(){self.annotations.length&&movePositionTo('annotation',1);},key_comma:function(){movePositionTo('cut',-1);},key_control_c:function(){that.triggerEvent('copy',[{annotation:self.options.selected,'in':self.options['in'],out:self.options.out}]);},key_control_shift_c:function(){that.triggerEvent('copyadd',[{annotation:self.options.selected,'in':self.options['in'],out:self.options.out}]);},key_delete:function(){self.$annotationPanel.removeItem(true);},key_dot:function(){movePositionTo('cut',1);},key_down:function(){movePositionBy(self.sizes.timeline[0].width);},key_enter:function(){if(self.editing){blurAnnotation();}else if(isEditable()){editAnnotation();}},key_equal:function(){self.$player[0].changeVolume(0.1);},key_escape:function(){if(self.editing){blurAnnotation();}else if(self.options.selected){selectAnnotation({id:''});}},key_f:function(){setTimeout(function(){self.$findInput.focusInput(true);});},key_g:function(){self.results.length&&selectAnnotation(getNextAnnotation('result',1));},key_h:showKeyboardShortcuts,key_i:function(){setPoint('in',self.options.position);},key_k:function togglePlaybackRate(){that.options({playbackRate:self.options.playbackRate==1?2:self.options.playbackRate==2?0.5:1});},key_l:toggleLoop,key_left:function(){movePositionBy(-1/self.options.fps);},key_minus:function(){self.$player[0].changeVolume(-0.1);},key_n:function(){self.annotations.length&&selectAnnotation(getNextAnnotation('annotation',1));},key_o:function(){setPoint('out',self.options.position);},key_openbracket:function(){self.annotations.length&&movePositionTo('annotation',-1);},key_p:playInToOut,key_right:function(){movePositionBy(1/self.options.fps);},key_shift_0:function(){movePositionBy(-self.options.position);},key_shift_down:function(){movePositionBy(self.options.duration);},key_shift_enter:function(){if(self.editing){blurAnnotation();}else if(isEditable()){editAnnotation();}},key_shift_equal:function(){self.options.videoSize=='small'&&toggleSize();},key_shift_g:function(){self.results.length&&selectAnnotation(getNextAnnotation('result',-1));},key_shift_i:function(){goToPoint('in');},key_shift_left:function(){movePositionBy(-1);},key_shift_minus:function(){self.options.videoSize=='large'&&toggleSize();},key_shift_o:function(){goToPoint('out');},key_shift_p:function(){setPosition(self.options.posterFrame);},key_shift_right:function(){movePositionBy(1);},key_shift_up:function(){movePositionBy(-self.options.position);},key_slash:selectCut,key_space:togglePaused,key_up:function(){movePositionBy(-self.sizes.timeline[0].width);}});self.options.subtitles=options.subtitles!==void 0?self.options.subtitles:parseSubtitles();self.subtitlesTracks=Ox.sort(Ox.unique(Ox.flatten(self.options.subtitles.map(function(subtitle){return subtitle.tracks;})))).map(function(track){return{id:track,title:Ox._(track),checked:self.options.enableSubtitles&&track==self.options.subtitlesTrack};}).concat([{id:'',title:Ox._('None'),checked:!self.options.enableSubtitles}]);if(Ox.isObject(self.options.video[0])){self.resolutions=Ox.sort(Ox.unique(self.options.video.map(function(video){return video.resolution;}))).map(function(resolution){return{id:resolution+'',title:resolution+'p',checked:self.options.resolution==resolution};});self.audioTracks=Ox.sort(Ox.unique(self.options.video.map(function(video){return video.track;}))).map(function(track){return{id:track,title:Ox._(track),checked:self.options.audioTrack==track};});} +self.options.layers.forEach(function(layer,i){that.bindEvent('key_'+(i+1),function(){layer.editable?addAnnotation(layer.id):that.triggerEvent('info',{layer:layer.id});});});self.$player=[];self.$timeline=[];self.annotations=getAnnotations();self.controlsHeight=16;self.editing=false;self.margin=8;self.positions=getPositions();self.results=[];self.words=getWords();self.$editor=Ox.Element().addClass('OxVideoAnnotationPanel OxMedia').on({mousedown:function(e){var $target=$(e.target);if(!$target.is('.OxPosition')&&!$target.is('input')){that.gainFocus();} +if($target.is('.OxKeyboardFocus')){return;} +if(self.editing){self.focused=true;setTimeout(function(){that.gainFocus();self.focused=false;},25);}}});self.sizes=getSizes();['play','in','out'].forEach(function(type,i){self.$player[i]=Ox.VideoPlayer({censored:self.options.censored,censoredIcon:self.options.censoredIcon,censoredTooltip:self.options.censoredTooltip,controlsBottom:type=='play'?['play','playInToOut','volume','size','space','position']:['goto','set','space','position'],duration:self.options.duration,enableMouse:true,enablePosition:true,enableSubtitles:self.options.enableSubtitles,externalControls:true,find:getSubtitlesFind(),height:self.sizes.player[i].height,id:'player'+Ox.toTitleCase(type),'in':self.options['in'],loop:self.options.loop,muted:self.options.muted,out:self.options.out,paused:self.options.paused,playbackRate:self.options.playbackRate,position:type=='play'?self.options.position:self.options[type],posterFrame:self.options.posterFrame,resolution:self.options.resolution,showMarkers:true,showMilliseconds:3,sizeIsLarge:self.options.videoSize=='large',subtitles:Ox.clone(self.options.subtitles,true),subtitlesDefaultTrack:self.options.subtitlesDefaultTrack,subtitlesOffset:self.options.subtitlesOffset,subtitlesTrack:self.options.subtitlesTrack,type:type,video:type=='play'?self.options.video:self.options.getFrameURL,volume:self.options.volume,width:self.sizes.player[i].width}).css({left:self.sizes.player[i].left+'px',top:self.sizes.player[i].top+'px'}).bindEvent(Ox.extend({censored:function(){that.triggerEvent('censored');}},type=='play'?{loop:function(data){that.triggerEvent('loop',data);},muted:function(data){that.triggerEvent('muted',data);},paused:function(data){self.options.paused=data.paused;that.triggerEvent('paused',data);},playing:function(data){setPosition(data.position,true);},position:function(data){setPosition(data.position);},positioning:function(data){setPosition(data.position,false,true);},resolution:function(data){that.triggerEvent('resolution',data);},size:function(){toggleSize();},submit:function(){that.gainFocus();},subtitles:function(data){that.triggerEvent('subtitles',data);},volume:function(data){that.triggerEvent('volume',data);}}:{gotopoint:function(){goToPoint(type);},position:function(data){setPoint(type,data.position);},setpoint:function(){setPoint(type,self.options.position);}})).appendTo(self.$editor);});self.$timeline[0]=Ox.LargeVideoTimeline({cuts:self.options.cuts,duration:self.options.duration,find:getSubtitlesFind(),getImageURL:self.options.getLargeTimelineURL,id:'timelineLarge','in':self.options['in'],out:self.options.out,position:self.options.position,subtitles:getSubtitles(),type:self.options.timeline,width:self.sizes.timeline[0].width}).css({left:self.sizes.timeline[0].left+'px',top:self.sizes.timeline[0].top+'px'}).bindEvent({position:function(data){setPosition(data.position);},positioning:function(data){setPosition(data.position,false,true);}}).appendTo(self.$editor);self.$timeline[1]=Ox.BlockVideoTimeline({cuts:self.options.cuts,duration:self.options.duration,find:getSubtitlesFind(),getImageURL:self.options.getSmallTimelineURL,id:'timelineSmall','in':self.options['in'],out:self.options.out,position:self.options.position,results:find(self.options.find),showPointMarkers:true,state:self.options.selected?'selected':'default',subtitles:getSubtitles(),type:self.options.timeline,videoId:self.options.videoId,width:self.sizes.timeline[1].width}).css({left:self.sizes.timeline[1].left+'px',top:self.sizes.timeline[1].top+'px'}).bindEvent({edit:function(){if(isEditable()&&!self.editing){editAnnotation();}},position:function(data){setPosition(data.position);},select:function(){selectAnnotation(void 0,true);}}).appendTo(self.$editor);self.$menubar=Ox.Bar({size:16}).addClass('OxVideoPlayer').bindEvent({doubleclick:function(e){if($(e.target).is('.OxBar')){self.$editor.animate({scrollTop:0},250);}}});self.$keyboardShortcuts=$('
').css({margin:'16px'});[{key:Ox.SYMBOLS.space,action:Ox._('Play/Pause')},{key:'P',action:Ox._('Play In to Out')},{key:'K',action:Ox._('Toggle Playback Speed')},{key:'L',action:Ox._('Loop')},{key:'0',action:Ox._('Mute/Unmute')},{key:'-',action:Ox._('Turn Volume Down')},{key:'+',action:Ox._('Turn Volume Up')},{key:Ox.SYMBOLS.shift+'-',action:Ox._('Small Player')},{key:Ox.SYMBOLS.shift+'+',action:Ox._('Large Player')},{key:Ox.SYMBOLS.arrow_left,action:Ox._('Go One Frame Back')},{key:Ox.SYMBOLS.arrow_right,action:Ox._('Go One Frame Forward')},{key:Ox.SYMBOLS.shift+Ox.SYMBOLS.arrow_left,action:Ox._('Go One Second Back')},{key:Ox.SYMBOLS.shift+Ox.SYMBOLS.arrow_right,action:Ox._('Go One Second Forward')},{key:Ox.SYMBOLS.arrow_up,action:Ox._('Go One Line Up')},{key:Ox.SYMBOLS.arrow_down,action:Ox._('Go One Line Down')},{key:Ox.SYMBOLS.shift+Ox.SYMBOLS.arrow_up,action:Ox._('Go to First Frame')},{key:Ox.SYMBOLS.shift+Ox.SYMBOLS.arrow_down,action:Ox._('Go to Last Frame')},{key:'I',action:Ox._('Set In Point')},{key:'O',action:Ox._('Set Out Point')},{key:Ox.SYMBOLS.shift+'I',action:Ox._('Go to In Point')},{key:Ox.SYMBOLS.shift+'O',action:Ox._('Go to Out Point')},{key:'[',action:Ox._('Go to Previous Annotation')},{key:']',action:Ox._('Go to Next Annotation')},{key:'\\',action:Ox._('Select Current Annotation')},{key:'B',action:Ox._('Select Previous Annotation')},{key:'N',action:Ox._('Select Next Annotation')},{key:'<',action:Ox._('Go to Previous Cut')},{key:'>',action:Ox._('Go to Next Cut')},{key:'/',action:Ox._('Select Current Cut')},{key:'F',action:Ox._('Find')},{key:Ox.SYMBOLS.shift+'G',action:Ox._('Go to Previous Result')},{key:'G',action:Ox._('Go to Next Result')},{key:Ox.SYMBOLS['return'],action:Ox._('Edit/Submit')},{key:Ox.SYMBOLS.escape,action:Ox._('Cancel/Deselect')},{key:Ox.SYMBOLS.delete,action:Ox._('Delete')}].concat(Ox.filter(self.options.layers.slice(0,9).map(function(layer,i){return layer.editable?{key:i+1,action:Ox._('Add {0}',[layer.item])}:null;}))).forEach(function(shortcut){self.$keyboardShortcuts.append($('
').css({display:'table-row'}).append($('
').css({display:'table-cell',height:'16px',paddingRight:'16px',textAlign:'right'}).html(shortcut.key)).append($('
').css({display:'table-cell'}).html(shortcut.action)));});self.$menuButton=Ox.MenuButton({items:[].concat([{id:'size',title:Ox._('Large Player'),checked:self.options.videoSize=='large'},{id:'loop',title:Ox._('Loop'),checked:self.options.loop,keyboard:'l'},{},{id:'resolutions',title:Ox._('Resolution'),items:[{group:'resolution',min:1,max:1,items:self.resolutions}]}],self.audioTracks.length>1?[{id:'audioTracks',title:Ox._('Audio'),items:[{group:'audioTrack',min:1,max:1,items:self.audioTracks}]}]:[],self.options.subtitles.length?[{id:'subtitlesTracks',title:Ox._('Subtitles'),items:[{group:'subtitlesTrack',min:1,max:1,items:self.subtitlesTracks}]}]:[],[{id:'timelines',title:Ox._('Timeline'),items:[{group:'timeline',min:1,max:1,items:Ox.map(self.options.timelines,function(timeline){return Ox.extend({checked:timeline.id==self.options.timeline},timeline);})}]},{},{id:'gotoPosterFrame',title:Ox._('Go to Poster Frame'),keyboard:'shift p'},{id:'setPosterFrame',title:Ox._('Set Poster Frame'),disabled:!self.options.enableSetPosterFrame},{},{id:'downloadVideo',title:Ox._('Download Video...'),disabled:!self.options.enableDownload},{id:'downloadFrame',title:Ox._('Download Frame...'),disabled:!self.options.enableDownload},{id:'downloadSelection',title:Ox._('Download Selection...'),disabled:!self.options.enableDownload},{id:'embedSelection',title:Ox._('Embed Selection...')},{id:'linkToSelection',title:Ox._('Link to Selection...')},{},{id:'keyboard',title:Ox._('Keyboard Shortcuts...'),keyboard:'h'}]),style:'square',title:'set',tooltip:Ox._('Options'),type:'image'}).css({float:'left'}).bindEvent({click:function(data){var id=data.id;if(id=='gotoPosterFrame'){setPosition(self.options.posterFrame);}else if(id=='setPosterFrame'){self.options.posterFrame=self.options.position;self.$player.forEach(function($player){$player.options('posterFrame',self.options.posterFrame);});that.triggerEvent('posterframe',{position:self.options.posterFrame});}else if(id=='downloadVideo'){that.triggerEvent('downloadvideo');}else if(id=='downloadFrame'){that.triggerEvent('downloadframe',{'position':self.options.position});}else if(id=='downloadSelection'){that.triggerEvent('downloadselection',{'in':self.options['in'],out:self.options.out});}else if(id=='embedSelection'){that.triggerEvent('embedselection',{'in':self.options['in'],out:self.options.out});}else if(id=='linkToSelection'){that.triggerEvent('linktoselection',{'in':self.options['in'],out:self.options.out});}else if(id=='keyboard'){showKeyboardShortcuts();}},change:function(data){var enableSubtitles,id=data.id;if(id=='size'){toggleSize();}else if(id=='loop'){toggleLoop();}else if(id=='resolution'){self.options.resolution=parseInt(data.checked[0].id,10);self.$player[0].options({resolution:self.options.resolution});}else if(id=='audioTrack'){self.options.audioTrack=data.checked[0].id;self.$player[0].options({audioTrack:self.options.audioTrack});}else if(id=='subtitlesTrack'){enableSubtitles=!!data.checked[0].id;if(enableSubtitles!=self.options.enableSubtitles){that.triggerEvent('subtitles',{subtitles:enableSubtitles});} +self.options.subtitlesTrack=data.checked[0].id;setSubtitlesTrack();}else if(id=='timeline'){self.options.timeline=data.checked[0].id;updateTimelines();that.triggerEvent('timeline',{timeline:self.options.timeline});}},hide:function(){that.gainFocus();}}).appendTo(self.$menubar);self.$clearButton=Ox.Button({disabled:self.options.find==='',style:'symbol',title:'close',tooltip:Ox._('Clear'),type:'image'}).css({float:'right'}).bindEvent({click:function(){self.$findInput.clearInput();submitFindInput('');}}).appendTo(self.$menubar);self.$findInput=Ox.Input({autocomplete:self.words.map(function(word){return word.value;}),autocompleteReplace:false,autocompleteSelect:true,autocompleteSelectHighlight:true,autocompleteSelectMax:10,autocompleteSelectSubmit:true,changeOnKeypress:true,placeholder:Ox._('Find...'),value:self.options.find,width:128}).css({float:'right',background:'transparent'}).bindEvent({change:function(data){submitFindInput(data.value,false);},submit:function(data){submitFindInput(data.value,true);}}).appendTo(self.$menubar);self.$nextButton=Ox.Button({disabled:true,style:'symbol',title:'arrowRight',tooltip:Ox._('Next Result'),type:'image'}).css({float:'right'}).bindEvent({click:function(){selectAnnotation(getNextAnnotation('result',1));}}).appendTo(self.$menubar);self.$previousButton=Ox.Button({disabled:true,style:'symbol',title:'arrowLeft',tooltip:Ox._('Previous Result'),type:'image'}).css({float:'right'}).bindEvent({click:function(){selectAnnotation(getNextAnnotation('result',-1));}}).appendTo(self.$menubar);self.$results=$('
').css({float:'right',width:'36px',padding:'2px 4px 0 0',fontSize:'9px',textAlign:'right',cursor:'default',opacity:0.25}).html('0').appendTo(self.$menubar.$element);self.$annotationPanel=Ox.AnnotationPanel({autocomplete:self.options.autocomplete,calendarSize:self.options.annotationsCalendarSize,clickLink:self.options.clickLink,editable:true,enableExport:self.options.enableExport,enableImport:self.options.enableImport,highlight:self.options.find,highlightAnnotations:self.options.annotationsHighlight,highlightLayer:self.options.findLayer,'in':self.options['in'],itemName:self.options.itemName,layers:self.options.layers,mapSize:self.options.annotationsMapSize,out:self.options.out,position:self.options.position,range:self.options.annotationsRange,selected:self.options.selected,separator:self.options.annotationsSeparator,showCalendar:self.options.showAnnotationsCalendar,showFind:true,showLayers:Ox.clone(self.options.showLayers),showMap:self.options.showAnnotationsMap,showUsers:self.options.showUsers,sort:self.options.annotationsSort,width:self.options.annotationsSize}).bindEvent({add:function(data){addAnnotation(data.layer);},annotationsrange:function(data){self.options.annotationsRange=data.range;that.triggerEvent('annotationsrange',data);},annotationssort:function(data){self.options.annotationsSort=data.sort;that.triggerEvent('annotationssort',data);},blur:function(data){if(!self.focused&&!$('.OxDialogLayer').length&&!$('.OxMenuLayer').length){blurAnnotation();}},change:function(data){if(data.layer==self.options.subtitlesLayer){updateSubtitles();} +that.triggerEvent('editannotation',data);},define:function(data){that.triggerEvent('define',data);},edit:function(data){updateWords('remove');self.editing=true;setTimelineState();},exportannotations:function(){that.triggerEvent('exportannotations');},find:function(data){self.$findInput.options({value:data.value});submitFindInput(data.value,true);},findannotations:function(data){that.triggerEvent('findannotations',data);},focus:that.gainFocus,highlightannotations:function(data){self.options.annotationsHighlight=data;that.triggerEvent('annotationshighlight',data);},highlightlayer:function(data){self.options.findLayer=data;submitFindInput(self.$findInput.value(),false);that.triggerEvent('findlayer',data);},importannotations:function(){that.triggerEvent('importannotations');},info:function(data){that.triggerEvent('info',data);},open:function(){setPosition(self.options['in']);},remove:removeAnnotation,resize:resizeAnnotations,resizeend:resizeendAnnotations,resizecalendar:function(data){that.triggerEvent('resizecalendar',data);},resizemap:function(data){that.triggerEvent('resizemap',data);},select:function(data){selectAnnotation(data,!self.updating);},showentityinfo:function(data){that.triggerEvent('showentityinfo',data);},submit:submitAnnotation,toggle:toggleAnnotations,togglecalendar:function(data){self.options.showAnnotationsCalendar=!data.collapsed;that.triggerEvent('togglecalendar',data);},togglelayer:function(data){that.triggerEvent('togglelayer',{collapsed:data.collapsed,layer:data.layer});},togglemap:function(data){self.options.showAnnotationsMap=!data.collapsed;that.triggerEvent('togglemap',data);}});['0','1','2','3','4','5','6','7','8','9','b','backslash','closebracket','comma','dot','equal','f','g','h','i','minus','n','o','openbracket','p','shift_0','shift_equal','shift_g','shift_i','shift_minus','shift_o','slash','space','control_c','control_v',].forEach(function(key){key='key.'+key;self.$annotationPanel.bindEvent(key,function(){that.triggerEvent(key);});});that.setElement(self.$mainPanel=Ox.SplitPanel({elements:[{element:Ox.SplitPanel({elements:[{element:self.$menubar,size:16},{element:self.$editor}],orientation:'vertical'})},{collapsed:!self.options.showAnnotations,collapsible:true,element:self.$annotationPanel,resizable:true,resize:[192,256,320,384,448,512],size:self.options.annotationsSize,tooltip:self.options.annotationsTooltip}],orientation:'horizontal'}));self.options.find&&self.options.selectResult&&setTimeout(function(){submitFindInput(self.options.find,!self.options.selected);});function addAnnotation(layer){if(self.editing){self.editing=false;setTimelineState();self.$annotationPanel.blurItem();} +that.triggerEvent('addannotation',{'in':self.options['in'],layer:layer,out:self.options.out,value:''});} +function blurAnnotation(){updateWords('add');self.editing=false;setTimelineState();if(self.options.annotationsRange=='position'&&(self.options.positionself.options.out)){setPosition(self.options['in']);} +setTimeout(self.$annotationPanel.blurItem);} +function editAnnotation(){updateWords('remove');self.editing=true;setTimelineState();self.$annotationPanel.editItem();} +function find(query){var results=[];if(query.length){query=query.toLowerCase();results=self.annotations.filter(function(annotation){return Ox.contains(['*',annotation.layer],self.options.findLayer)&&Ox.decodeHTMLEntities(Ox.stripTags(annotation.value.toLowerCase())).indexOf(query)>-1;});} +return results;} +function getAnnotation(){var annotations=self.annotations.filter(function(annotation){return annotation['in']<=self.options.position&&annotation.out>=self.options.position}).sort(function(a,b){var aValue=self.options.position-a['in'],bValue=self.options.position-b['in'],ret=0;if(aValuebValue){ret=1;}else if(a.durationb.duration){ret=1;}else if(a.valueb.value){ret=1;} +return ret;});return annotations.length?annotations[0]:{id:''};} +function getAnnotations(){return Ox.flatten(self.options.layers.map(function(layer){return layer.items.map(function(item){return Ox.extend({layer:layer.id},item)});})).sort(sortAnnotations);} +function getAnnotationValue(annotationId){var found=false,value;Ox.forEach(self.options.layers,function(layer,i){Ox.forEach(layer.items,function(item){if(item.id==annotationId){value=item.value;found=true;return false;}});if(found){return false;}});return value;} +function getNextAnnotation(type,direction){var annotation,annotations=type=='annotation'?self.annotations:self.results,index,position;if(self.options.selected){index=Ox.getIndexById(annotations,self.options.selected);if(index>-1&&self.options.position==annotations[index]['in']){annotation=annotations[Ox.mod(index+direction,annotations.length)];}} +if(!annotation){position=getNextPosition(type,direction);annotations=annotations.filter(function(annotation){return annotation['in']==position;});annotation=annotations[direction==1?0:annotations.length-1];} +return annotation;} +function getNextPosition(type,direction){var positions;if(type=='annotation'){positions=self.positions;}else if(type=='cut'){positions=[0].concat(self.options.cuts,self.options.duration);}else if(type=='result'){positions=Ox.unique(self.results.map(function(result){return result['in'];}));} +return Ox.nextValue(positions,self.options.position,direction);} +function getPositions(){return Ox.unique(self.annotations.map(function(annotation){return annotation['in'];}));} +function getSelectedLayer(){var selectedLayer;Ox.forEach(self.options.layers,function(layer){Ox.forEach(layer.items,function(item){if(item.id==self.options.selected){selectedLayer=layer.id;return false;}});if(selectedLayer){return false;}});return selectedLayer;} +function getSizes(scrollbarIsVisible){var scrollbarWidth=Ox.UI.SCROLLBAR_SIZE,contentWidth=self.options.width +-(self.options.showAnnotations*self.options.annotationsSize)-1 +-(scrollbarIsVisible?scrollbarWidth:0),height,lines,size={player:[],timeline:[]},width,widths;function getHeight(){return size.player[0].height+self.controlsHeight ++size.timeline[0].height+lines*16 ++(lines+3)*self.margin;} +if(self.options.videoSize=='small'){width=0;widths=Ox.splitInt(contentWidth-4*self.margin,3);[1,0,2].forEach(function(v,i){size.player[v]={left:(i+0.5)*self.margin+width,top:self.margin/2,width:widths[i],height:Math.round(widths[1]/self.options.videoRatio)};width+=widths[i];});}else{size.player[0]={left:self.margin/2,top:self.margin/2,width:Math.round((contentWidth-3*self.margin+(self.controlsHeight+self.margin)/2*self.options.videoRatio)*2/3)};size.player[0].height=Math.round(size.player[0].width/self.options.videoRatio);size.player[1]={left:size.player[0].left+size.player[0].width+self.margin,top:size.player[0].top,width:contentWidth-3*self.margin-size.player[0].width};size.player[1].height=Math.ceil(size.player[1].width/self.options.videoRatio);size.player[2]={left:size.player[1].left,top:size.player[0].top+size.player[1].height+self.controlsHeight+self.margin,width:size.player[1].width,height:size.player[0].height-size.player[1].height-self.controlsHeight-self.margin};} +size.timeline[0]={left:self.margin/2,top:size.player[0].height+self.controlsHeight+1.5*self.margin,width:contentWidth-2*self.margin,height:64};size.timeline[1]={left:size.timeline[0].left,top:size.timeline[0].top+size.timeline[0].height+self.margin,width:size.timeline[0].width};lines=Math.ceil(self.options.duration/size.timeline[1].width);height=getHeight();self.$editor.css({overflowY:(scrollbarIsVisible&&height<=self.options.height-16)?'scroll':'auto'});return(!scrollbarIsVisible&&height>self.options.height-16)?getSizes(true):size;} +function getSubtitles(){return self.options.enableSubtitles?self.options.subtitles.filter(function(v){return Ox.contains(v.tracks,self.options.subtitlesTrack);}):[];} +function getSubtitlesFind(){return Ox.contains([self.options.subtitlesLayer,'*'],self.options.findLayer)?self.options.find:'';} +function getWords(){var words=[];Ox.forEach(Ox.count(Ox.words(self.annotations.map(function(annotation){return Ox.decodeHTMLEntities(Ox.stripTags(annotation.value.toLowerCase()));}).join(' '))),function(count,value){words.push({count:count,value:value});}) +return words.sort(function(a,b){return b.count-a.count;});} +function goToPoint(point){setPosition(self.options[point]);} +function isEditable(){var annotation=Ox.getObjectById(self.annotations,self.options.selected);return annotation&&annotation.editable;} +function movePositionBy(sec){setPosition(Ox.limit(self.options.position+sec,0,self.options.duration));} +function movePositionTo(type,direction){setPosition(getNextPosition(type,direction));} +function parseSubtitles(){return self.options.subtitlesLayer?self.options.layers.filter(function(layer){return layer.id==self.options.subtitlesLayer;})[0].items.map(function(subtitle){return{id:subtitle.id,'in':subtitle['in'],out:subtitle.out,text:subtitle.value.replace(/\n/g,' ').replace(//g,'\n'),tracks:subtitle.languages||[self.options.subtitlesDefaultTrack]};}):[];} +function playInToOut(){self.$player[0].playInToOut();} +function removeAnnotation(data){var layer=Ox.getObjectById(self.options.layers,data.layer),index=Ox.getIndexById(layer.items,data.id);self.options.selected=data.id;updateWords('remove');self.options.selected='';layer.items.splice(index,1);self.annotations=getAnnotations();self.positions=getPositions();self.options.find&&submitFindInput(self.options.find);self.editing=false;if(data.layer==self.options.subtitlesLayer){updateSubtitles();} +setTimelineState();self.$annotationPanel.removeItem();that.triggerEvent('removeannotation',data);} +function resizeAnnotations(data){self.options.annotationsSize=data.size;setSizes();self.$annotationPanel.options({width:data.size});} +function resizeendAnnotations(data){that.triggerEvent('annotationssize',{size:data.size});} +function selectAnnotation(data,moveToPosition){if(Ox.isUndefined(data)){data=getAnnotation();}else if(!data.id&&Ox.$elements[that.oxid]){that.gainFocus();} +if(data.id){var outOfRange=self.options.annotationsRange!='position'&&(self.options.positiondata.out) +if(moveToPosition&&outOfRange){setPosition(data['in']);} +if(!self.editing){setPoint('in',data['in'],true);setPoint('out',data.out,true);}} +if(!self.editing){self.options.selected=data.id;self.$annotationPanel.options({selected:self.options.selected});setTimelineState();that.triggerEvent('select',{id:self.options.selected});}} +function selectCut(){var points={'in':Ox.last(self.options.cuts),out:self.options.duration};Ox.forEach(self.options.cuts,function(cut,i){if(cut>self.options.position){points={'in':i==0?0:self.options.cuts[i-1],out:cut-1/self.options.fps};return false;}});setPoint('in',points['in']);setPoint('out',points.out);} +function setPoint(point,position,keepSelected){self.options[point]=position;if(self.options.selected&&!self.editing&&!keepSelected){selectAnnotation({id:''});} +self.$player.forEach(function($player){$player.options(point,self.options[point]);});self.$player[point=='in'?1:2].options({position:self.options[point]});self.$timeline.forEach(function($timeline){$timeline.options(point,self.options[point]);});if(self.options['in']>self.options.out){setPoint(point=='in'?'out':'in',position,keepSelected);}else{self.$annotationPanel.options({'in':self.options['in'],out:self.options.out});that.triggerEvent('points',{'in':self.options['in'],out:self.options.out,position:self.options.position});if(self.editing&&self.options.selected.length&&self.options.selected[0]!='_'){that.triggerEvent('editannotation',{id:self.options.selected,'in':self.options['in'],out:self.options.out,value:$('.OxEditableElement input:visible').val()});}}} +function setPosition(position,playing,dragging){var minute=Math.floor(position/60),previousMinute=Math.floor(self.options.position/60);self.options.position=position;!playing&&self.$player[0].options({position:self.options.position});self.$timeline.forEach(function($timeline){$timeline.options({position:self.options.position});});self.$annotationPanel.options({position:self.options.position});if((!playing||minute!=previousMinute)&&!dragging){that.triggerEvent(playing?'playing':'position',{position:!playing?self.options.position:minute*60});}} +function setSizes(){self.sizes=getSizes();self.$player.forEach(function($player,i){$player.options({height:self.sizes.player[i].height,width:self.sizes.player[i].width}).css({left:self.sizes.player[i].left+'px',top:self.sizes.player[i].top+'px'});});self.$timeline.forEach(function($timeline,i){$timeline.options({width:self.sizes.timeline[i].width}).css({left:self.sizes.timeline[i].left+'px',top:self.sizes.timeline[i].top+'px'});});} +function setSubtitlesTrack(){var enableSubtitles=self.options.subtitlesTrack!='',subtitles,toggleSubtitles=enableSubtitles!=self.options.enableSubtitles;self.options.enableSubtitles=enableSubtitles;if(toggleSubtitles){self.$player.forEach(function($player){$player.options({enableSubtitles:self.options.enableSubtitles});});that.triggerEvent('subtitles',{subtitles:self.options.enableSubtitles});}else{self.$player.forEach(function($player){$player.options({subtitlesTrack:self.options.subtitlesTrack});});} +self.$timeline.forEach(function($timeline){$timeline.options({subtitles:getSubtitles()});});} +function showKeyboardShortcuts(){var dialog=Ox.Dialog({buttons:[Ox.Button({id:'close',title:Ox._('Close')}).bindEvent({click:function(){dialog.close();}})],content:self.$keyboardShortcuts,height:384,keys:{enter:'close',escape:'close'},title:Ox._('Keyboard Shortcuts'),width:256}).open();} +function setTimelineState(){self.$timeline[1].options({state:self.editing?'editing':isEditable()?'editable':self.options.selected?'selected':'default'});} +function sortAnnotations(a,b){var ret=0;if(a['in']b['in']){ret=1;}else if(a.outb.out){ret=1;}else if(a.valueb.value){ret=1;} +return ret;} +function submitAnnotation(data){self.annotations=getAnnotations();self.positions=getPositions();updateWords('add');self.options.find&&submitFindInput(self.options.find);self.editing=false;if(data.layer==self.options.subtitlesLayer){updateSubtitles();} +setTimelineState();if(self.options.annotationsRange=='position'&&(self.options.positionself.options.out)){setPosition(self.options['in']);} +data['in']=self.options['in'];data.out=self.options.out;that.triggerEvent('editannotation',data);} +function submitFindInput(value,hasPressedEnter){self.options.find=value;self.results=find(self.options.find);self.$results.css({opacity:self.results.length?1:0.25}).html(self.results.length);self.$previousButton.options({disabled:!self.results.length});self.$nextButton.options({disabled:!self.results.length});self.$clearButton.options({disabled:!self.options.find});self.$player.forEach(function($player){$player.options({find:getSubtitlesFind()});});self.$timeline.forEach(function($timeline){$timeline.options({find:getSubtitlesFind()});});self.$timeline[1].options({results:self.results});if(hasPressedEnter){that.triggerEvent('find',{find:self.options.find});if(self.results.length){selectAnnotation(getNextAnnotation('result',1));that.gainFocus();}else{self.$findInput.focusInput(true);}} +self.$annotationPanel.options({highlight:self.options.find,highlightLayer:self.options.findLayer,});} +function toggleAnnotations(data){self.options.showAnnotations=!data.collapsed;setSizes();that.triggerEvent('toggleannotations',{showAnnotations:self.options.showAnnotations});} +function toggleLoop(){self.options.loop=!self.options.loop;self.$menuButton[self.options.loop?'checkItem':'uncheckItem']('loop');self.$player[0].toggleLoop();} +function toggleMuted(){self.$player[0].toggleMuted();} +function togglePaused(){self.$player[0].togglePaused();self.$player[0].options('paused')&&that.triggerEvent('position',{position:self.$player[0].options('position')});} +function toggleSize(){self.options.videoSize=self.options.videoSize=='small'?'large':'small';setSizes();self.$menuButton[self.options.videoSize=='small'?'uncheckItem':'checkItem']('size');self.$player[0].options({sizeIsLarge:self.options.videoSize=='large'});that.triggerEvent('togglesize',{size:self.options.videoSize});} +function updateSubtitles(){self.options.subtitles=parseSubtitles();self.$player.forEach(function($player){$player.options({subtitles:Ox.clone(self.options.subtitles,true)});});if(self.options.enableSubtitles){self.$timeline.forEach(function($timeline){$timeline.options({subtitles:getSubtitles()});});}} +function updateTimelines(){self.$timeline.forEach(function($timeline){$timeline.options({type:self.options.timeline});});} +function updateWords(action){var words=[];Ox.forEach(Ox.count(Ox.words(getAnnotationValue(self.options.selected)||'')),function(count,value){words.push({count:count,value:value});});words.forEach(function(word){var index=Ox.indexOf(self.words,function(w){return w.value===word.value;});if(action=='add'){if(index==-1){self.words.push({count:1,value:word.value});}else{self.words[index].count++;}}else if(index>-1){if(self.words[index].count==1){self.words.splice(index,1);}else{self.words[index].count--;}}});self.words.sort(function(a,b){return b.count-a.count;});self.$findInput.options({autocomplete:self.words.map(function(word){return word.value;})});} +that.addAnnotation=function(layer,annotation){self.$annotationPanel.addItem(layer,annotation);};that.getCurrentAnnotations=function(){return self.$annotationPanel.getCurrentAnnotations();};that.updateAnnotation=function(id,annotation){self.updating=true +if(annotation.id){self.options.selected=annotation.id;} +if(getSelectedLayer()==self.options.subtitlesLayer){updateSubtitles();} +self.$annotationPanel.updateItem(id,annotation);if(id!=annotation.id){self.annotations=getAnnotations();setTimelineState();} +self.updating=false};that.playInToOut=function(){self.$player[0].playInToOut();} +return that;};'use strict';Ox.VideoEditPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({annotationsCalendarSize:256,annotationsMapSize:256,annotationsRange:'all',annotationsSort:'position',clipRatio:16/9,clips:[],clipSize:256,clipTooltip:'clips',clipView:'list',clickLink:null,controlsTooltips:{},duration:0,editable:false,enableSubtitles:false,formatTitle:function(){return Ox.last(arguments);},fps:25,fullscreen:false,getClipImageURL:null,getLargeTimelineURL:null,height:0,'in':0,loop:false,layers:[],muted:false,out:0,paused:true,playbackRate:1,playInToOut:false,position:0,resolution:0,scaleToFill:false,selected:[],showAnnotationsCalendar:false,showAnnotationsMap:false,showClips:false,showLayers:{},showTimeline:false,showUsers:false,smallTimelineURL:'',sort:[],sortOptions:[],subtitles:[],subtitlesOffset:0,timeline:'',timelineTooltip:'timeline',type:'static',video:[],volume:1,width:0}).options(options||{}).update({clips:function(){self.$clipPanel.options({clips:Ox.clone(self.options.clips),sort:Ox.clone(self.options.sort)});},clipSize:function(){self.$mainPanel.resizeElement(1,self.options.clipSize);resizeClips({size:self.options.clipSize});},clipView:function(){self.$clipPanel.options({view:self.options.clipView});},duration:function(){self.$timeline&&self.$timeline.replaceWith(self.$timeline=getTimeline());},fullscreen:function(){self.$video.options({fullscreen:self.options.fullscreen});},height:function(){self.$video.options({height:getPlayerHeight()});self.$clipPanel.options({height:self.options.height});},'in':function(){setPoint('in',self.options['in']);},out:function(){setPoint('out',self.options.out);},paused:function(){self.$video.options({paused:self.options.paused});},playbackRate:function(){self.$video.options({playbackRate:self.options.playbackRate});},position:function(){self.$video.options({position:self.options.position});self.$timeline.options({position:self.options.position});self.$clipPanel.options({position:self.options.position});},selected:function(){self.$clipPanel.options({selected:self.options.selected});},showClips:function(){self.$mainPanel.toggleElement(1);},showLayers:function(){self.$clipPanel.options({showLayers:self.options.showLayers});},showTimeline:function(){self.$videoPanel.toggleElement(2);},smallTimelineURL:function(){self.$video.options({timeline:self.options.smallTimelineURL});},subtitles:function(){self.$video.options({subtitles:self.options.subtitles});self.$timeline.options({subtitles:self.options.enableSubtitles?self.options.subtitles:[]});},timeline:function(){self.$timeline.options({type:self.options.timeline});},video:function(){self.chapters=getChapters();self.cuts=getCuts();self.$video.options({chapters:self.chapters,video:self.options.video});self.$timeline.options({cuts:self.cuts});},volume:function(){self.$video.options({volume:self.options.volume});},width:function(){self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});}}).bindEvent({key_0:toggleMuted,key_backslash:function(){if(self.options.view!='annotations'){self.$clipPanel.selectClip();}},key_closebracket:function(){movePositionTo('chapter',1);},key_comma:function(){movePositionTo('cut',-1);},key_control_c:function(){that.triggerEvent('copy',[{annotation:self.options.selected,'in':self.options['in'],out:self.options.out}]);},key_control_v:function(){that.triggerEvent('paste');},key_dot:function(){movePositionTo('cut',1);},key_equal:function(){self.$video.changeVolume(0.1);},key_i:function(){setPoint('in',self.options.position,true);},key_left:function(){movePositionBy(-0.04);},key_minus:function(){self.$video.changeVolume(-0.1);},key_o:function(){setPoint('out',self.options.position,true);},key_openbracket:function(){movePositionTo('chapter',-1);},key_right:function(){movePositionBy(0.04);},key_shift_i:function(){goToPoint('in');},key_shift_left:function(){movePositionBy(-1);},key_shift_o:function(){goToPoint('out');},key_slash:function(){},key_shift_right:function(){movePositionBy(1);},key_space:togglePaused});self.chapters=getChapters();self.cuts=getCuts();self.fullscreen=false;self.listSizes=[144+Ox.UI.SCROLLBAR_SIZE,280+Ox.UI.SCROLLBAR_SIZE,416+Ox.UI.SCROLLBAR_SIZE],self.$menubar=Ox.Bar({size:24});self.$player=Ox.Element().css({overflowX:'hidden'});self.$video=Ox.VideoPlayer({chapters:self.chapters,controlsBottom:['play','playInToOut','volume','scale','timeline','previous','next','loop','position','settings'],controlsTooltips:self.options.controlsTooltips,controlsTop:['fullscreen','chapterTitle','open'],cuts:self.cuts,enableKeyboard:true,enableMouse:true,enablePosition:true,enableSubtitles:self.options.enableSubtitles,enableTimeline:true,externalControls:true,height:getPlayerHeight(),'in':self.options['in'],loop:self.options.loop,muted:self.options.muted,out:self.options.out,playbackRate:self.options.playbackRate,paused:self.options.paused,position:self.options.position,resolution:self.options.resolution,scaleToFill:self.options.scaleToFill,showMilliseconds:3,subtitles:self.options.subtitles,subtitlesOffset:self.options.subtitlesOffset,timeline:self.options.smallTimelineURL,video:self.options.video,volume:self.options.volume,width:getPlayerWidth()}).bindEvent({durationchange:function(data){self.options.duration=data.duration;setPosition(self.$video.options('position'),true);self.$clipPanel.options({duration:self.options.duration});},fullscreen:function(data){self.options.fullscreen=data.fullscreen;},loop:function(data){that.triggerEvent('loop',data);},key_control_v:function(){that.triggerEvent('paste');},muted:function(data){that.triggerEvent('muted',data);},open:function(data){var clip=Ox.last(self.options.clips.filter(function(clip){return clip.position<=self.options.position;}));that.triggerEvent('openlink',{annotation:clip.annotation,'in':clip['in'],item:clip.item,out:clip.out,position:clip['in']+self.options.position-clip['position'],});},paused:function(data){self.options.paused=data.paused;that.triggerEvent('paused',data);},playing:function(data){setPosition(data.position,true);},position:function(data){setPosition(data.position);},positioning:function(data){setPosition(data.position,false,true);},resolution:function(data){that.triggerEvent('resolution',data);},scale:function(data){that.triggerEvent('scale',data);},subtitles:function(data){self.$timeline.options({subtitles:data.subtitles?self.options.subtitles:[]});that.triggerEvent('subtitles',data);},subtitlestrack:function(data){var enableSubtitles=!!data.track;if(enableSubtitles!=self.options.enableSubtitles){self.options.enableSubtitles=enableSubtitles;that.triggerEvent('subtitles',{subtitles:enableSubtitles});} +self.$timeline.options({subtitles:enableSubtitles?self.options.subtitles:[]});},volume:function(data){that.triggerEvent('volume',data);}}).appendTo(self.$player);self.$controls=Ox.Element().addClass('OxMedia').bindEvent({toggle:toggleControls});self.$timeline=getTimeline().appendTo(self.$controls);self.$videoPanel=Ox.SplitPanel({elements:[{element:self.$menubar,size:24},{element:self.$player},{collapsed:!self.options.showTimeline,collapsible:true,element:self.$controls,size:80,tooltip:self.options.timelineTooltip}],orientation:'vertical'});self.$clipPanel=Ox.ClipPanel({annotationsCalendarSize:self.options.annotationsCalendarSize,annotationsMapSize:self.options.annotationsMapSize,annotationsRange:self.options.annotationsRange,annotationsSort:self.options.annotationsSort,clipRatio:self.options.clipRatio,clips:Ox.clone(self.options.clips),clickLink:self.options.clickLink,duration:self.options.duration,editable:self.options.editable,formatTitle:self.options.formatTitle,getClipImageURL:self.options.getClipImageURL,'in':self.options['in'],layers:Ox.clone(self.options.layers),out:self.options.out,position:self.options.position,selected:self.options.selected,showAnnotationsCalendar:self.options.showAnnotationsCalendar,showAnnotationsMap:self.options.showAnnotationsMap,showLayers:self.options.showLayers,showUsers:self.options.showUsers,sort:Ox.clone(self.options.sort),sortOptions:self.options.sortOptions,view:self.options.clipView,width:self.options.clipSize}).bindEvent({copy:function(data){that.triggerEvent('copy',data);},copyadd:function(data){that.triggerEvent('copyadd',data);},cut:function(data){that.triggerEvent('cut',data);},cutadd:function(data){that.triggerEvent('cutadd',data);},'delete':function(data){that.triggerEvent('delete',data);},edit:function(data){that.triggerEvent('edit',data);},join:function(data){that.triggerEvent('join',data);},move:function(data){that.triggerEvent('move',data);},open:function(data){setPosition(getClipById(data.ids[0])['position']);that.triggerEvent('open',data);},paste:function(){that.triggerEvent('paste');},resize:resizeClips,resizeend:resizeendClips,select:function(data){self.options.selected=data.ids;that.triggerEvent('select',data);},selectannotation:function(data){that.triggerEvent('selectannotation',data);},sort:function(data){self.options.sort=data;that.triggerEvent('sort',data);},split:function(data){that.triggerEvent('split',data);},toggle:toggleClips,view:function(data){that.triggerEvent('view',data);}});that.setElement(self.$mainPanel=Ox.SplitPanel({elements:[{element:self.$videoPanel},{collapsed:!self.options.showClips,collapsible:true,element:self.$clipPanel,resizable:true,resize:self.listSizes,size:self.options.clipSize,tooltip:self.options.clipTooltip}],orientation:'horizontal'}));function dragTimeline(data){self.options.position=data.position;self.$video.options({position:self.options.position});self.$clipPanel.options({position:self.options.position});} +function dragendTimeline(data){dragTimeline(data);that.triggerEvent('position',{position:self.options.position});} +function getChapters(){return self.options.clips.map(function(clip){return{position:clip.position,title:self.options.formatTitle(clip)};});} +function getClipById(id){return Ox.getObjectById(self.options.clips,id);} +function getClipsInSelection(){var clips=self.options.clips.filter(function(clip){var endPosition=clip.position+clip.duration;return(clip.position>=self.options['in']&&endPositionself.options['in'])||(clip.position=self.options.out)});return clips.map(function(clip,index){var dereference=false,endPosition=clip.position+clip.duration,inPoint=clip['in'],outPoint=clip.out;if(index==0&&clip.positionself.options.out){dereference=true;outPoint=Ox.round(clip.out+self.options.out-endPosition,3);} +return clip.annotation&&!dereference?clip.annotation:clip.item+'/'+inPoint+'-'+outPoint;});} +function getCuts(){var cuts=[];self.options.clips.forEach(function(clip,i){if(i>0){cuts.push(clip.position);} +clip.cuts.forEach(function(cut){cuts.push(clip.position+cut-clip['in']);});});return cuts;} +function getNextPosition(type,direction){var positions;if(type=='chapter'){positions=self.chapters.map(function(chapter){return chapter.position;});}else if(type=='cut'){positions=[0].concat(self.cuts,self.options.duration);} +return Ox.nextValue(positions,self.options.position,direction);} +function getPlayerHeight(){return self.options.height-24-32 +-self.options.showTimeline*80-1;} +function getPlayerWidth(){return self.options.width +-(self.options.showClips&&!self.fullscreen)*self.options.clipSize-1;} +function getTimeline(){return Ox.LargeVideoTimeline({chapters:self.chapters,cuts:self.cuts,duration:self.options.duration,getImageURL:self.options.getLargeTimelineURL,'in':self.options['in'],out:self.options.out,position:self.options.position,subtitles:self.options.enableSubtitles?self.options.subtitles:[],type:self.options.timeline,width:getTimelineWidth()}).css({left:'4px',top:'4px'}).bindEvent({key_left:function(){self.options.paused&&movePositionBy(-1/self.options.fps);},key_right:function(){self.options.paused&&movePositionBy(1/self.options.fps);},key_space:togglePaused,mousedown:that.gainFocus,position:dragendTimeline,positioning:dragTimeline,});} +function getTimelineWidth(){return self.options.width +-(self.options.showClips&&!self.fullscreen)*self.options.clipSize-16-1;} +function goToPoint(point){setPosition(self.options[point]);} +function movePositionBy(sec){setPosition(Ox.limit(self.options.position+sec,0,self.options.duration));} +function movePositionTo(type,direction){setPosition(getNextPosition(type,direction));} +function resizeClips(data){self.options.clipSize=data.size;self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});self.$clipPanel.options({width:data.size});} +function resizeendClips(data){that.triggerEvent('clipSize',data);} +function setPoint(point,position,triggerEvent){self.options[point]=position;self.$video.options(point,position);self.$timeline.options(point,position);self.$clipPanel.options(point,position);if(self.options['in']>self.options.out){setPoint(point=='in'?'out':'in',position);} +if(triggerEvent){that.triggerEvent('points',{'in':self.options['in'],out:self.options.out,position:self.options.position});}} +function setPosition(position,playing,dragging){var minute=Math.floor(position/60),previousMinute=Math.floor(self.options.position/60);self.options.position=position;!playing&&self.$video.options({position:self.options.position});self.$timeline.options({position:self.options.position});self.$clipPanel.options({position:self.options.position});if((!playing||minute!=previousMinute)&&!dragging){that.triggerEvent('position',{position:!playing?self.options.position:minute*60});}} +function toggleClips(data){self.options.showClips=!data.collapsed;self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});that.triggerEvent('toggleclips',{showClips:self.options.showClips});} +function toggleControls(data){self.options.showTimeline=!data.collapsed;self.$video.options({height:getPlayerHeight()});that.triggerEvent('toggletimeline',{showTimeline:self.options.showTimeline});} +function toggleMuted(){self.$video.toggleMuted();} +function togglePaused(){self.$video.togglePaused();self.$video.options('paused')&&that.triggerEvent('position',{position:self.$video.options('position')});} +that.getPasteIndex=function(){return self.$clipPanel.getPasteIndex();};that.getSelectedClips=function(){return self.options.selected.length?self.options.selected.map(function(id){var clip=getClipById(id);return(clip.annotation||clip.item+'/'+clip['in']+'-'+clip.out)+'/'+id;}):getClipsInSelection();};that.invertSelection=function(){self.$clipPanel.invertSelection();};that.selectAll=function(){self.$clipPanel.selectAll();};that.updateClip=function(id,data){self.options.clips[Ox.getIndexById(self.options.clips,id)]=data;self.$clipPanel.updateItem(id,data);};return that;};'use strict';(function(){var queue=[],queueSize=100,restrictedElements=[],requiresUserGesture=mediaPlaybackRequiresUserGesture(),unblock=[];Ox.VideoElement=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({autoplay:false,loop:false,muted:false,playbackRate:1,items:[],volume:1}).options(options||{}).update({items:function(){self.loadedMetadata=false;loadItems(function(){self.loadedMetadata=true;var update=true;if(self.currentItem>=self.numberOfItems){self.currentItem=0;} +if(!self.numberOfItems){self.video.src='';that.triggerEvent('durationchange',{duration:that.duration()});}else{if(self.currentItemId!=self.items[self.currentItem].id){self.items.some(function(item,i){if(item.id==self.currentItemId){self.currentItem=i;loadNextVideo();update=false;return true;}});if(update){self.currentItem=0;self.currentItemId=self.items[self.currentItem].id;}} +if(!update){that.triggerEvent('seeked');that.triggerEvent('durationchange',{duration:that.duration()});}else{setCurrentVideo(function(){that.triggerEvent('seeked');that.triggerEvent('durationchange',{duration:that.duration()});});}}});},playbackRate:function(){self.video.playbackRate=self.options.playbackRate;}}).css({width:'100%',height:'100%'});Ox.Log('Video','VIDEO ELEMENT OPTIONS',self.options);self.currentItem=0;self.currentTime=0;self.currentVideo=0;self.items=[];self.loadedMetadata=false;self.paused=true;self.seeking=false;self.loading=true;self.buffering=true;self.$videos=[getVideo(),getVideo()];self.$video=self.$videos[self.currentVideo];self.video=self.$video[0];self.volume=self.options.volume;self.muted=self.options.muted;self.$brightness=$('
').css({width:'100%',height:'100%',background:'rgb(0, 0, 0)',opacity:0}).appendTo(that);self.timeupdate=setInterval(function(){if(!self.paused&&!self.loading&&self.loadedMetadata&&self.items[self.currentItem]&&self.items[self.currentItem].out&&self.video.currentTime>=self.items[self.currentItem].out){setCurrentItem(self.currentItem+1);}},30);if(restrictedElements.length>0){unblock.push(setSource);setTimeout(function(){that.triggerEvent('requiresusergesture');})}else{setSource();} +function getCurrentTime(){var item=self.items[self.currentItem];return self.seeking||self.loading?self.currentTime:item?item.position+self.video.currentTime-item['in']:0;} +function getset(key,value){var ret;if(Ox.isUndefined(value)){ret=self.video[key];}else{self.video[key]=value;ret=that;} +return ret;} +function getVideo(){return getVideoElement().css({position:'absolute'}).on({ended:function(){if(self.video==this){setCurrentItem(self.currentItem+1);}},loadedmetadata:function(){},progress:function(){var video=this,item=self.items[self.currentItem],nextItem=Ox.mod(self.currentItem+1,self.numberOfItems),next=self.items[nextItem],nextVideo=self.$videos[Ox.mod(self.currentVideo+1,self.$videos.length)][0];if(self.video==video&&(video.preload!='none'||self.buffering)){if(clipCached(video,item)){self.video.preload='none';self.buffering=false;if(nextVideo!=self.video){nextVideo.preload='auto';}}}else if(!self.buffering&&nextVideo==video&&video.preload!='none'){if(clipCached(video,next)){video.preload='none';}} +function clipCached(video,item){var cached=false +Ox.range(video.buffered.length).forEach(function(i){if(video.buffered.start(i)<=item['in']&&self.video.buffered.end(i)>=item.out){cached=true}});return cached}},seeking:function(){},stop:function(){if(self.video==this){self.video.pause();that.triggerEvent('ended');}}}).attr({preload:'auto'}).hide().appendTo(that);} +function getVideoElement(){var video;if(requiresUserGesture){if(queue.length){video=queue.pop();}else{video=document.createElement('video');restrictedElements.push(video);}}else{video=document.createElement('video');} +video.playsinline=true +video.setAttribute('playsinline','playsinline') +video.setAttribute('webkit-playsinline','webkit-playsinline') +video.WebKitPlaysInline=true +return $(video);};function getVolume(){var volume=1;if(self.items[self.currentItem]&&Ox.isNumber(self.items[self.currentItem].volume)){volume=self.items[self.currentItem].volume;} +return self.volume*volume;} +function isReady($video,callback){if($video[0].seeking&&!self.paused&&!self.seeking){that.triggerEvent('seeking');Ox.Log('Video','isReady','seeking');$video.one('seeked',function(event){Ox.Log('Video','isReady','seeked');that.triggerEvent('seeked');callback($video[0]);});}else if($video[0].readyState){callback($video[0]);}else{that.triggerEvent('seeking');$video.one('loadedmetadata',function(event){callback($video[0]);});$video.one('seeked',function(event){that.triggerEvent('seeked');});}} +function loadItems(callback){var currentTime=0,items=self.options.items.map(function(item){return Ox.isObject(item)?Ox.clone(item,true):{src:item};});Ox.serialForEach(items,function(item){var callback=Ox.last(arguments);item['in']=item['in']||0;item.position=currentTime;if(item.out){item.duration=item.out-item['in'];} +if(item.duration){if(!item.out){item.out=item.duration;} +currentTime+=item.duration;item.id=getId(item);callback()}else{Ox.getVideoInfo(item.src,function(info){item.duration=info.duration;if(!item.out){item.out=item.duration;} +currentTime+=item.duration;item.id=getId(item);callback();});}},function(){self.items=items;self.numberOfItems=self.items.length;callback&&callback();});function getId(item){return item.id||item.src+'/'+item['in']+'-'+item.out;}} +function loadNextVideo(){if(self.numberOfItems<=1){return;} +var item=self.items[self.currentItem],nextItem=Ox.mod(self.currentItem+1,self.numberOfItems),next=self.items[nextItem],$nextVideo=self.$videos[Ox.mod(self.currentVideo+1,self.$videos.length)],nextVideo=$nextVideo[0];$nextVideo.one('loadedmetadata',function(){if(self.video!=nextVideo){nextVideo.currentTime=next['in']||0;}});nextVideo.src=next.src;nextVideo.preload='auto';} +function setCurrentItem(item){Ox.Log('Video','sCI',item,self.numberOfItems);var interval;if(item>=self.numberOfItems||item<0){if(self.options.loop){item=Ox.mod(item,self.numberOfItems);}else{self.seeking=false;self.ended=true;self.paused=true;self.video&&self.video.pause();that.triggerEvent('ended');return;}} +self.video&&self.video.pause();self.currentItem=item;self.currentItemId=self.items[self.currentItem].id;setCurrentVideo(function(){if(!self.loadedMetadata){self.loadedMetadata=true;that.triggerEvent('loadedmetadata');} +Ox.Log('Video','sCI','trigger itemchange',self.items[self.currentItem]['in'],self.video.currentTime,self.video.seeking);that.triggerEvent('sizechange');that.triggerEvent('itemchange',{item:self.currentItem});});} +function setCurrentVideo(callback){var css={},muted=self.muted,item=self.items[self.currentItem],next;Ox.Log('Video','sCV',item);['left','top','width','height'].forEach(function(key){css[key]=self.$videos[self.currentVideo].css(key);});self.currentTime=item.position;self.loading=true;if(self.video){self.$videos[self.currentVideo].hide();self.video.pause();} +self.currentVideo=Ox.mod(self.currentVideo+1,self.$videos.length);self.$video=self.$videos[self.currentVideo];self.video=self.$video[0];self.video.muted=true;if(self.$video.attr('src')!=item.src){self.loadedMetadata&&Ox.Log('Video','caching next item failed, reset src');self.video.src=item.src;} +self.video.preload='auto';self.video.volume=getVolume();self.video.playbackRate=self.options.playbackRate;self.$video.css(css);self.buffering=true;Ox.Log('Video','sCV',self.video.src,item['in'],self.video.currentTime,self.video.seeking);isReady(self.$video,function(video){var in_=item['in']||0;function ready(){Ox.Log('Video','sCV','ready');self.seeking=false;self.loading=false;self.video.muted=muted;!self.paused&&self.video.play();self.$video.show();callback&&callback();loadNextVideo();} +if(video.currentTime==in_){Ox.Log('Video','sCV','already at position');ready();}else{self.$video.one('seeked',function(){Ox.Log('Video','sCV','seeked callback');ready();});if(!self.seeking){Ox.Log('Video','sCV set in',video.src,in_,video.currentTime,video.seeking);self.seeking=true;video.currentTime=in_;if(self.paused){var promise=self.video.play();if(promise!==undefined){promise.then(function(){self.video.pause();self.video.muted=muted;}).catch(function(){self.video.pause();self.video.muted=muted;});}else{self.video.pause();self.video.muted=muted;}}}}});} +function setCurrentItemTime(currentTime){Ox.Log('Video','sCIT',currentTime,self.video.currentTime,'delta',currentTime-self.video.currentTime);isReady(self.$video,function(video){if(self.video==video){if(self.video.seeking){self.$video.one('seeked',function(){that.triggerEvent('seeked');self.seeking=false;});}else if(self.seeking){that.triggerEvent('seeked');self.seeking=false;} +video.currentTime=currentTime;}});} +function setCurrentTime(time){Ox.Log('Video','sCT',time);var currentTime,currentItem;self.items.forEach(function(item,i){if(time>=item.position&&time',currentItem,currentTime);if(currentItem!=self.currentItem){setCurrentItem(currentItem);} +self.seeking=true;self.currentTime=time;that.triggerEvent('seeking');setCurrentItemTime(currentTime);}else{self.currentTime=0;}} +function setSource(){Ox.Log('Video','self.loadedMetadata',self.loadedMetadata);self.loadedMetadata=false;loadItems(function(){setCurrentItem(0);self.options.autoplay&&setTimeout(function(){that.play();});});} +that.animate=function(){self.$video.animate.apply(self.$video,arguments);return that;};that.brightness=function(){var ret;if(arguments.length==0){ret=1-parseFloat(self.$brightness.css('opacity'));}else{self.$brightness.css({opacity:1-arguments[0]});ret=that;} +return ret;};that.buffered=function(){return self.video.buffered;};that.currentTime=function(){var ret;if(arguments.length==0){ret=getCurrentTime();}else{self.ended=false;setCurrentTime(arguments[0]);ret=that;} +return ret;};that.css=function(){self.$video.css.apply(self.$video,arguments);return that;};that.duration=function(){return self.items?Ox.sum(self.items.map(function(item){return item.duration;})):NaN;};that.muted=function(value){if(!Ox.isUndefined(value)){self.muted=value;} +return getset('muted',value);};that.pause=function(){self.paused=true;self.video.pause();return that;};that.play=function(){if(self.ended){that.currentTime(0);} +isReady(self.$video,function(video){self.ended=false;self.paused=false;self.seeking=false;video.play();});return that;};that.removeElement=function(){self.currentTime=getCurrentTime();self.loading=true;clearInterval(self.timeupdate);self.$videos.forEach(function($video){$video.attr({src:''});});return Ox.Element.prototype.removeElement.apply(that,arguments);};that.videoHeight=function(){return self.video.videoHeight;};that.videoWidth=function(){return self.video.videoWidth;};that.volume=function(value){if(Ox.isUndefined(value)){value=self.volume}else{self.volume=value;self.video.volume=getVolume();} +return value;};return that;};function mediaPlaybackRequiresUserGesture(){var video=document.createElement('video');video.play();return video.paused;} +function removeBehaviorsRestrictions(){if(restrictedElements.length>0){var rElements=restrictedElements;restrictedElements=[];rElements.forEach(function(video){video.load();});setTimeout(function(){var u=unblock;unblock=[];u.forEach(function(callback){callback();});},1000);} +while(queue.length-1||self.options.controlsBottom.indexOf('volume')>-1;self.millisecondsPerFrame=1000/self.options.fps;self.secondsPerFrame=1/self.options.fps;self.barHeight=16;self.width=self.options.fullscreen?window.innerWidth:self.options.width;self.height=self.options.fullscreen?window.innerHeight:self.options.height;self.videoWidth=self.options.width;self.videoHeight=self.options.height;self.results=[];loadSubtitles();if(self.options.enableKeyboard){that.bindEvent({key_0:toggleMuted,key_1:toggleScale,key_down:function(){goToNext('chapter',1);},key_equal:function(){changeVolume(0.1);},key_escape:hideControlMenus,key_f:focusFind,key_g:function(){goToNext('result',1);},key_k:function togglePlaybackRate(){that.options({playbackRate:self.options.playbackRate==1?2:self.options.playbackRate==2?0.5:1});},key_l:toggleLoop,key_left:function(){setPosition(self.options.position-self.secondsPerFrame);that.triggerEvent('position',{position:self.options.position});},key_minus:function(){changeVolume(-0.1);},key_p:playInToOut,key_right:function(){setPosition(self.options.position+self.secondsPerFrame);that.triggerEvent('position',{position:self.options.position});},key_shift_f:function(){self.options.enableFullscreen&&toggleFullscreen();},key_shift_g:function(){goToNext('result',-1);},key_shift_left:function(){setPosition(self.options.position-1);that.triggerEvent('position',{position:self.options.position});},key_shift_right:function(){setPosition(self.options.position+1);that.triggerEvent('position',{position:self.options.position});},key_space:togglePaused,key_up:function(){goToNext('chapter',-1);}});if(self.options.focus=='mouseenter'){that.on({mouseenter:function(){if(!self.inputHasFocus){that.gainFocus();}},mouseleave:function(){that.loseFocus();}});}else{that.on({click:function(){if(!Ox.Focus.focusedElementIsInput()){that.gainFocus();}}});}} +if((!self.options.externalControls&&(self.options.controlsTop.length||self.options.controlsBottom.length))){that.on({mouseenter:function(){showControls();self.mouseHasLeft=false;},mouseleave:function(){hideControls();self.mouseHasLeft=true;}});} +self.$videoContainer=Ox.Element().addClass('OxVideoContainer').css({top:self.options.externalControls&&self.options.controlsTop.length?'16px':0}).appendTo(that) +if(self.options.type=='play'){self.options.enableMouse&&self.$videoContainer.bindEvent({anyclick:function(e){var $target=$(e.target);if(!$target.is('.OxLogo')&&!$target.is('.OxCensoredIcon')){togglePaused();}},dragstart:dragstart,drag:drag,dragend:dragend});self.$video=Ox.VideoElement({items:self.video,loop:self.options.loop,muted:self.options.muted,playbackRate:self.options.playbackRate,volume:self.options.volume}).bindEvent(Ox.extend({durationchange:durationchange,ended:ended,itemchange:itemchange,loadedmetadata:loadedmetadata,requiresusergesture:requiresusergesture,seeked:seeked,seeking:seeking,sizechange:sizechange},self.options.progress?{progress:progress}:{})).appendTo(self.$videoContainer);self.$video.$element.css({position:'absolute'});self.$video.hide();}else{self.options.enableMouse&&self.$videoContainer.on({click:function(e){if(!$(e.target).is('.OxLogo')){goToPoint();}}});self.$video=$('
').appendTo(self.$videoContainer);self.$image=$('').attr({src:Ox.UI.PATH+'png/transparent.png'}).css({position:'absolute',width:'100%',height:'100%'}).appendTo(self.$video) +self.$brightness=$('
').css({position:'absolute',width:'100%',height:'100%',background:'rgb(0, 0, 0)',opacity:1-self.options.brightness}).appendTo(self.$video);} +if(self.options.poster){self.$poster=$('').addClass('OxPoster').attr({src:self.options.poster}).hide().one({load:function(){self.$poster.css(getVideoCSS(self.$poster[0].width,self.$poster[0].height)).show();self.posterIsVisible=true;}}).appendTo(self.$videoContainer);} +if(self.options.logo){self.$logo=$('').addClass('OxLogo').attr({src:self.options.logo}).css({cursor:self.options.logoLink?'pointer':'default'}).appendTo(self.$videoContainer);if(self.options.logoTitle){self.$logoTooltip=Ox.Tooltip({title:self.options.logoTitle});}} +self.$loadingIcon=Ox.LoadingIcon({video:true}).hide().appendTo(self.$videoContainer);if(!Ox.isEmpty(Ox.isObject(self.options.video[0])?getVideo():self.options.video)){showLoadingIcon();} +if(self.options.showIcon||self.options.showIconOnLoad){self.$playIcon=$('').addClass('OxPlayIcon OxVideo').attr({src:Ox.UI.getImageURL('symbol'+(self.options.paused?'Play':'Pause'),'videoIcon')}).appendTo(self.$videoContainer);if(self.options.showIcon){self.$playIcon.addClass('OxInterface');} +if(self.options.showIconOnLoad){self.iconIsVisible=true;}} +if(self.options.censored.length){self.$copyrightIcon=Ox.Element({element:'',tooltip:self.options.censoredTooltip}).addClass('OxCensoredIcon OxVideo').attr({src:Ox.UI.getImageURL('symbol'+self.options.censoredIcon,'videoIcon')}).hide().bindEvent({singleclick:function(){that.triggerEvent('censored');}}).appendTo(self.$videoContainer);} +if(self.options.showMarkers){self.$posterMarker={};['left','center','right'].forEach(function(position){var titleCase=Ox.toTitleCase(position);self.$posterMarker[position]=$('
').addClass('OxPosterMarker OxPosterMarker'+titleCase).appendTo(self.$videoContainer);});self.$pointMarker={};['in','out'].forEach(function(point){self.$pointMarker[point]={};['top','bottom'].forEach(function(edge){var titleCase=Ox.toTitleCase(point)+Ox.toTitleCase(edge);self.$pointMarker[point][edge]=$('').addClass('OxPointMarker OxPointMarker'+titleCase).attr({src:Ox.UI.getImageURL('marker'+titleCase)}).appendTo(self.$videoContainer);});});} +if(self.options.subtitles.length||true){self.$subtitle=$('
').addClass('OxSubtitle').appendTo(self.$videoContainer);} +['top','bottom'].forEach(function(edge){var titleCase=Ox.toTitleCase(edge);if(self.options['controls'+titleCase].length){self['$controls'+titleCase]=Ox.Bar({size:self.barHeight}).addClass('OxControls'+(self.options.externalControls?'':' OxOnScreen')).css({opacity:self.options.externalControls?1:0}).css(edge,0).appendTo(that);self.options['controls'+titleCase].forEach(function(control){if(control=='chapterTitle'){self.$chapterTitle=$('
').addClass('OxTitle').html(getChapterTitle()).appendTo(self['$controls'+titleCase].$element);}else if(control=='close'){self.$closeButton=Ox.Button({style:'video',title:'close',tooltip:Ox._('Close'),type:'image'}).bindEvent({click:function(){that.triggerEvent('close');}}).appendTo(self['$controls'+titleCase]);}else if(control=='find'){self.$findButton=Ox.Button({style:'video',title:'find',tooltip:Ox._('Find'),type:'image'}).bindEvent({click:toggleFind}).appendTo(self['$controls'+titleCase]);}else if(control=='fullscreen'){self.$fullscreenButton=Ox.Button({style:'video',tooltip:[Ox._('Enter Fullscreen'),Ox._('Exit Fullscreen')],type:'image',value:self.options.fullscreen?'shrink':'grow',values:['grow','shrink']}).bindEvent({click:function(){toggleFullscreen('button');}}).appendTo(self['$controls'+titleCase]);}else if(control=='goto'){self.$setButton=Ox.Button({style:'video',title:'goTo'+Ox.toTitleCase(self.options.type),tooltip:Ox._('Go to '+Ox.toTitleCase(self.options.type) ++' Point'),type:'image'}).bindEvent({click:goToPoint}).appendTo(self['$controls'+titleCase]);}else if(control=='loop'){self.$loopButton=Ox.Button({style:'video',tooltip:[Ox._('Don\'t Loop'),Ox._('Loop')],type:'image',value:self.options.loop?'RepeatAll':'RepeatNone',values:['RepeatAll','RepeatNone']}).bindEvent({click:function(){toggleLoop('button');}}).appendTo(self['$controls'+titleCase]);}else if(control=='mute'){self.$muteButton=Ox.Button({style:'video',tooltip:[Ox._('Mute'),Ox._('Unmute')],type:'image',value:self.options.muted?'unmute':'mute',values:['mute','unmute']}).bindEvent({click:function(){toggleMuted('button');}}).appendTo(self['$controls'+titleCase]);}else if(control=='next'){self.$nextChapterButton=Ox.Button({style:'video',title:'playNext',tooltip:Ox._('Next'),type:'image'}).bindEvent({click:function(){goToNext('chapter',1);}}).appendTo(self['$controls'+titleCase]);}else if(control=='open'){self.$openButton=Ox.Button({style:'video',title:'arrowRight',tooltip:self.options.controlsTooltips.open||'',type:'image'}).bindEvent({click:function(){that.triggerEvent('open');}}).appendTo(self['$controls'+titleCase]);}else if(control=='play'){self.$playButton=Ox.Button({style:'video',tooltip:[Ox._('Play'),Ox._('Pause')],type:'image',value:self.options.paused?'play':'pause',values:['play','pause']}).bindEvent({click:function(){togglePaused('button');}}).appendTo(self['$controls'+titleCase]);}else if(control=='playInToOut'){self.$playInToOutButton=Ox.Button({style:'video',title:'playInToOut',tooltip:Ox._('Play In to Out'),type:'image'}).bindEvent({click:playInToOut}).appendTo(self['$controls'+titleCase]);}else if(control=='position'){self.positionWidth=getPositionWidth();self.$position=Ox.Element({tooltip:Ox._(self.options.type=='play'?'Position':self.options.type=='in'?'In Point':'Out Point')}).addClass('OxPosition').css({width:self.positionWidth-4+'px'}).html(formatPosition()).on({click:function(){if(self.options.enablePosition){if(self.options.type=='play'){if(!self.options.paused){self.playOnSubmit=true;togglePaused();}else if(self.playOnLoad){self.playOnLoad=false;self.playOnSubmit=true;}} +self.$position.hide();self.$positionInput.value(formatPosition()).show().focusInput(false);}}}).appendTo(self['$controls'+titleCase]);self.$positionInput=Ox.Input({value:formatPosition(),width:self.positionWidth}).addClass('OxPositionInput').bindEvent({focus:function(){self.inputHasFocus=true;},blur:function(){self.inputHasFocus=false;submitPositionInput();},submit:function(){self.inputHasFocus=false;submitPositionInput();}}).appendTo(self['$controls'+titleCase].$element);self.$positionInput.children('input').css({width:(self.positionWidth-6)+'px',fontSize:'9px'});}else if(control=='previous'){self.$previousChapterButton=Ox.Button({style:'video',title:'playPrevious',tooltip:Ox._('Previous'),type:'image'}).bindEvent({click:function(){goToNext('chapter',-1);}}).appendTo(self['$controls'+titleCase]);}else if(control=='scale'){self.$scaleButton=Ox.Button({style:'video',tooltip:[Ox._('Scale to Fill'),Ox._('Scale to Fit')],type:'image',value:self.options.scaleToFill?'fit':'fill',values:['fill','fit']}).bindEvent('change',function(){toggleScale('button');}).appendTo(self['$controls'+titleCase]);}else if(control=='set'){self.$setButton=Ox.Button({style:'video',title:'set'+Ox.toTitleCase(self.options.type),tooltip:Ox._('Set '+Ox.toTitleCase(self.options.type) ++' Point'),type:'image'}).bindEvent({click:setPoint}).appendTo(self['$controls'+titleCase]);}else if(control=='settings'){self.$settingsButton=Ox.Button({style:'video',title:'set',tooltip:Ox._('Settings'),type:'image'}).bindEvent({click:function(){self.$settings.toggle();}}).appendTo(self['$controls'+titleCase]);self.$settings=renderSettings().appendTo(that);}else if(control=='size'){self.$sizeButton=Ox.Button({style:'video',tooltip:[Ox._('Larger'),Ox._('Smaller')],type:'image',value:self.options.sizeIsLarge?'shrink':'grow',values:['grow','shrink']}).bindEvent('change',toggleSize).appendTo(self['$controls'+titleCase]);}else if(control=='space'){self['$space'+titleCase]=$('
').html(' ').appendTo(self['$controls'+titleCase].$element);}else if(Ox.startsWith(control,'space')){$('
').css({width:parseInt(control.substr(5))+'px',height:'16px'}).appendTo(self['$controls'+titleCase].$element);}else if(control=='timeline'){if(self.options.duration){self.$timeline=getTimeline()}else{self.$timeline=Ox.Element().html(' ');} +self.$timeline.appendTo(self['$controls'+titleCase]);}else if(control=='title'){self.$title=$('
').addClass('OxTitle').html(self.options.title).appendTo(self['$controls'+titleCase].$element);}else if(control=='volume'){self.$volumeButton=Ox.Button({style:'video',title:getVolumeImage(),tooltip:Ox._('Volume'),type:'image'}).bindEvent({click:toggleVolume}).appendTo(self['$controls'+titleCase]);}else if(control=='zapHome'){self.$zapHomeButton=Ox.Button({style:'video',title:'up',tooltip:Ox._('Home Channel'),type:'image'}).bindEvent({click:function(){that.triggerEvent('zap',{direction:0});}}).appendTo(self['$controls'+titleCase]);}else if(control=='zapNext'){self.$zapNextButton=Ox.Button({style:'video',title:'right',tooltip:Ox._('Next Channel'),type:'image'}).bindEvent({click:function(){that.triggerEvent('zap',{direction:1});}}).appendTo(self['$controls'+titleCase]);}else if(control=='zapPrevious'){self.$zapPreviousButton=Ox.Button({style:'video',title:'left',tooltip:Ox._('Previous Channel'),type:'image'}).bindEvent({click:function(){that.triggerEvent('zap',{direction:-1});}}).appendTo(self['$controls'+titleCase]);}});}});if(self.options.enableFind){self.$find=$('
').addClass('OxControls OxFind').css({top:self.options.controlsTop.length?'16px':0}).appendTo(that);self.$results=Ox.Element({tooltip:Ox._('Results')}).addClass('OxResults').html('0').appendTo(self.$find);self.$previousResultButton=Ox.Button({disabled:true,style:'symbol',title:'arrowLeft',tooltip:Ox._('Previous'),type:'image'}).bindEvent({click:function(){goToNext('result',-1);}}).appendTo(self.$find);self.$nextResultButton=Ox.Button({disabled:true,style:'symbol',title:'arrowRight',tooltip:Ox._('Next'),type:'image'}).bindEvent({click:function(){goToNext('result',1);}}).appendTo(self.$find);self.$findInput=Ox.Input({changeOnKeypress:true,value:self.options.find}).bindEvent({blur:function(){self.inputHasFocus=false;},focus:function(){self.inputHasFocus=true;},change:function(data){submitFindInput(data.value,false);},submit:function(data){self.inputHasFocus=false;submitFindInput(data.value,true);}}).appendTo(self.$find);self.$clearButton=Ox.Button({disabled:!self.options.find,style:'symbol',title:'delete',tooltip:Ox._('Clear'),type:'image'}).bindEvent({click:function(){self.options.find='';self.results=[];self.$results.html('0');self.$findInput.clearInput();self.subtitle&&setSubtitleText();self.$timeline&&self.$timeline.options({find:self.options.find,results:self.results});}}).appendTo(self.$find);self.$hideFindButton=Ox.Button({style:'symbol',title:'close',tooltip:Ox._('Hide'),type:'image'}).bindEvent({click:toggleFind}).appendTo(self.$find);} +if(self.hasVolumeControl){self.$volume=$('
').addClass('OxControls OxVolume').css({bottom:self.options.controlsBottom.length?'16px':0}).appendTo(that);self.$hideVolumeButton=Ox.Button({style:'symbol',title:'close',tooltip:Ox._('Hide'),type:'image'}).bindEvent({click:toggleVolume}).appendTo(self.$volume);self.$muteButton=Ox.Button({style:'symbol',tooltip:[Ox._('Mute'),Ox._('Unmute')],type:'image',value:self.options.muted?'unmute':'mute',values:['mute','unmute']}).bindEvent({click:function(){toggleMuted('button');}}).appendTo(self.$volume);self.$volumeInput=Ox.Range({changeOnDrag:true,max:1,min:0,step:0.001,value:self.options.muted?0:self.options.volume}).bindEvent({change:function(data){setVolume(data.value);}}).appendTo(self.$volume);self.$volumeValue=$('
').addClass('OxVolumeValue').html(self.options.muted?0:Math.round(self.options.volume*100)).appendTo(self.$volume);} +self.options.type!='play'&&setPosition(self.options.position);self.results=[];setSizes(false,function(){self.options.fullscreen&&enterFullscreen();});function censor(){if(self.options.type=='play'){self.$video.brightness(self.censored?0.05:self.options.brightness).volume(self.censored?0.01:self.options.volume);}else{self.$brightness.css({opacity:1-(self.censored?0.05:self.options.brightness)});} +self.$copyrightIcon[self.censored?'show':'hide']();} +function changeVolume(num){self.hasVolumeControl&&showVolume();self.options.volume=Ox.limit(self.options.volume+num,0,1);setVolume(self.options.volume);self.$volumeInput&&self.$volumeInput.value(self.options.volume);} +function clearInterfaceTimeout(){clearTimeout(self.interfaceTimeout);self.interfaceTimeout=0;} +function dragstart(){Ox.$body.addClass('OxDragging');self.drag={position:self.options.position,paused:self.options.paused} +!self.options.paused&&togglePaused();} +function drag(e){setPosition(self.drag.position-e.clientDX/25);that.triggerEvent('positioning',{position:self.options.position});} +function dragend(){Ox.$body.removeClass('OxDragging');!self.drag.paused&&togglePaused();that.triggerEvent('position',{position:self.options.position});} +function durationchange(){self.videoWidth=self.$video.videoWidth();self.videoHeight=self.$video.videoHeight();self.videoCSS=getVideoCSS();self.posterMarkerCSS=getPosterMarkerCSS();self.$video.css(self.videoCSS);self.$poster&&self.$poster.css(self.videoCSS);self.$posterMarker&&Ox.forEach(self.$posterMarker,function(marker,position){marker.css(self.posterMarkerCSS[position]);});self.out=self.options.playInToOut&&self.out-1;}).map(function(annotation){return{id:annotation.id,'in':annotation['in'],out:annotation.out};}) +results=Ox.filter(self.options.annotations,function(annotation){return Ox.decodeHTMLEntities(Ox.stripTags(annotation.text.toLowerCase())).indexOf(query)>-1;}).map(function(annotation){return{id:annotation.id,'in':annotation['in'],out:annotation.out};});} +return results;} +function focusFind(){!self.interfaceIsVisible&&showControls();setTimeout(function(){if(self.$find.is(':hidden')){toggleFind();}else{self.$findInput.focusInput(true);}},0);} +function formatPosition(position){position=Ox.isUndefined(position)?self.options.position:position;return Ox.formatDuration(position,self.options.showMilliseconds);} +function getCensored(){var censored=false;Ox.forEach(self.options.censored,function(v){if(v['in']self.options.position){censored=true;return false;}});return censored;} +function getChapterTitle(){var chapterTitle='';self.options.chapters&&Ox.forEach(self.options.chapters,function(v,i){if(v.position<=self.options.position&&(i==self.options.chapters.length-1||self.options.chapters[i+1].position>self.options.position)){chapterTitle=v.title;return false;}});return chapterTitle;} +function getCSS(element){var css;if(element=='copyrightIcon'){css={width:self.iconSize+'px',height:self.iconSize+'px'};}else if(element=='controlsTop'||element=='controlsBottom'){css={width:self.width+'px'};}else if(element=='find'){css={width:Math.min(216,self.width)+'px'};}else if(element=='loadingIcon'){css={width:self.iconSize+'px',height:self.iconSize+'px'};}else if(element=='logo'){var logoHeight=Math.round(self.height/10),logoMargin=Math.round(self.height/20);css={left:logoMargin+'px',top:logoMargin+(self.controlsTopAreVisible?16:0)+'px',height:logoHeight+'px'};}else if(element=='player'){var height=self.options.fullscreen?window.innerHeight:self.height;if(self.options.externalControls){height+=(!!self.options.controlsTop.length+!!self.options.controlsBottom.length)*self.barHeight;} +css=Ox.extend({width:self.width+'px',height:height+'px'},self.options.fullscreen?{left:0,top:0}:{},self.exitFullscreen?{left:self.absoluteOffset.left,top:self.absoluteOffset.top}:{});}else if(element=='playIcon'){var playIconPadding=Math.round(self.iconSize*1/8),playIconSize=self.iconSize-2*playIconPadding-4;css={width:playIconSize+'px',height:playIconSize+'px',padding:playIconPadding+'px',borderRadius:Math.round(self.iconSize/2)+'px'};}else if(element=='progress'){css={width:self.timelineImageWidth+'px',marginLeft:-self.timelineImageWidth+'px'};}else if(element=='subtitle'){var offset=0,videoCSS;if(self.options.subtitlesOffset){videoCSS=getVideoCSS();offset=Math.floor((self.options.subtitlesOffset/100)*videoCSS.height)+videoCSS.top;offset=Math.max(offset,0);} +css={bottom:(Math.floor(self.height/16) ++offset ++(!!self.controlsBottomAreVisible*16))+'px',width:self.width+'px',fontSize:Math.floor(self.height/20)+'px',WebkitTextStroke:(self.height/1000)+'px rgb(0, 0, 0)'};}else if(element=='spaceBottom'||element=='timeline'){css={width:self.timelineWidth+'px'};}else if(element=='spaceTop'||element=='title'){css={width:getTitleWidth()+'px'};}else if(element=='videoContainer'){css={width:self.width+'px',height:self.height+'px'};}else if(element=='volume'){css={width:Math.min(184,self.width)};} +return css;} +function getPosition(e){if($.browser.mozilla){return Ox.limit((e.layerX-48-self.barHeight/2)/self.timelineImageWidth*self.$video.duration(),0,self.$video.duration());}else{return Ox.limit((e.offsetX-self.barHeight/2)/self.timelineImageWidth*self.$video.duration(),0,self.$video.duration());}}function getPositionWidth(){return 48+!!self.options.showMilliseconds*2 ++self.options.showMilliseconds*6;} +function getPosterMarkerCSS(){self.videoCSS=getVideoCSS();var left=Math.floor((self.videoCSS.width-self.videoCSS.height)/2),right=Math.ceil((self.videoCSS.width-self.videoCSS.height)/2);return{center:{left:self.videoCSS.left+left+'px',top:self.videoCSS.top+'px',width:(self.videoCSS.height-2)+'px',height:(self.videoCSS.height-2)+'px'},left:{left:self.videoCSS.left+'px',top:self.videoCSS.top+'px',width:left+'px',height:self.videoCSS.height+'px'},right:{left:self.videoCSS.left+left+self.videoCSS.height+'px',top:self.videoCSS.top+'px',width:right+'px',height:self.videoCSS.height+'px'}};} +function getProgressImageURL(){if(!self.timelineImageWidth)return;var width=self.timelineImageWidth,height=self.barHeight,canvas=$('').attr({width:width,height:height})[0],context=canvas.getContext('2d'),imageData,data;context.fillStyle='rgba(255, 0, 0, 0.5)';context.fillRect(0,0,width,height);imageData=context.getImageData(0,0,width,height),data=imageData.data;self.buffered.forEach(function(range){var left=Math.round(range[0]*width/self.$video.duration()),right=Math.round(range[1]*width/self.$video.duration());Ox.loop(left,right,function(x){Ox.loop(height,function(y){index=x*4+y*4*width;data[index+3]=0;});});});context.putImageData(imageData,0,0);return canvas.toDataURL();} +function getSubtitle(){var subtitle='';if(self.options.enableSubtitles){Ox.forEach(self.options.subtitles,function(v){if(v['in']<=self.options.position&&v.out>=self.options.position&&(!v.tracks||Ox.contains(v.tracks,self.options.subtitlesTrack))){subtitle=v.text;return false;}});} +return subtitle;} +function getSubtitles(){return self.options.enableSubtitles?self.options.subtitles.filter(function(v){return!v.tracks||Ox.contains(v.tracks,self.options.subtitlesTrack);}):[];} +function getTimeline(){var $timeline=Ox.SmallVideoTimeline({disabled:!self.options.enableTimeline,duration:self.options.duration,find:self.options.find,imageURL:self.options.timeline,'in':self.options['in'],invertHighlight:self.options.invertHighlight,mode:'player',out:self.options.out,paused:self.options.paused,position:self.options.position,results:self.results,showInToOut:self.options.playInToOut,showMilliseconds:self.options.showMilliseconds,subtitles:self.options.enableSubtitles?self.options.subtitles:[],width:getTimelineWidth()}).css({float:'left'}).css({background:'-moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).css({background:'-o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).css({background:'-webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).bindEvent({position:function(data){setPosition(data.position,'timeline');that.triggerEvent('position',{position:self.options.position});}});$timeline.children().css({marginLeft:getTimelineLeft()+'px'});$timeline.find('.OxInterface').css({marginLeft:getTimelineLeft()+'px'});return $timeline;} +function getTimelineLeft(){var left=0;Ox.forEach(self.options.controlsBottom,function(control){if(control=='timeline'){return false;} +left+=control=='position'?self.positionWidth:16});return left;} +function getTimelineWidth(){return(self.options.fullscreen?window.innerWidth:self.options.width)-self.options.controlsBottom.reduce(function(prev,curr){return prev+(curr=='timeline'||curr=='space'?0:Ox.startsWith(curr,'space')?parseInt(curr.substr(5)):curr=='position'?getPositionWidth():16);},0);} +function getTitleWidth(){return(self.options.fullscreen?window.innerWidth:self.options.width) +-self.options.controlsTop.reduce(function(prev,curr){return prev+(curr=='title'||curr=='chapterTitle'||curr=='space'?0:Ox.startsWith(curr,'space')?parseInt(curr.substr(5)):16);},0);} +function getVideo(){return self.options.video.filter(function(video){return(!self.options.audioTrack||video.track==self.options.audioTrack)&&(!self.options.resolution||video.resolution==self.options.resolution);});} +function getVideoCSS(videoWidth,videoHeight){var playerWidth=self.width,playerHeight=self.height,playerRatio=playerWidth/playerHeight,videoWidth=videoWidth||self.videoWidth,videoHeight=videoHeight||self.videoHeight,videoRatio=videoWidth/videoHeight,videoIsWider=videoRatio>playerRatio,width,height;if(self.options.scaleToFill){width=videoIsWider?playerHeight*videoRatio:playerWidth;height=videoIsWider?playerHeight:playerWidth/videoRatio;}else{width=videoIsWider?playerWidth:playerHeight*videoRatio;height=videoIsWider?playerWidth/videoRatio:playerHeight;} +width=Math.round(width);height=Math.round(height);return{left:Math.floor((playerWidth-width)/2),top:Math.floor((playerHeight-height)/2),width:width,height:height};} +function getVolumeImage(){var symbol;if(self.options.muted||self.options.volume==0){symbol='Unmute';}else if(self.options.volume<1/3){symbol='VolumeUp';}else if(self.options.volume<2/3){symbol='VolumeDown';}else{symbol='Mute';} +return symbol;} +function goToNext(type,direction){var position,positions;if(type=='chapter'&&self.options.chapters){positions=self.options.chapters.map(function(chapter){return chapter.position;});}else if(type=='result'&&self.results){positions=Ox.unique(self.results.map(function(result){return result['in'];}));} +if(positions){position=Ox.nextValue(positions,self.options.position,direction);setPosition(position);that.triggerEvent('position',{position:self.options.position});}} +function goToPoint(){that.triggerEvent('gotopoint');} +function hideControlMenus(){['find','settings','volume'].forEach(function(element){var $element=self['$'+element];$element&&$element.is(':visible')&&$element.animate({opacity:0},250,function(){$element.hide().css({opacity:1});});});} +function hideControls(){clearTimeout(self.interfaceTimeout);self.interfaceTimeout=setTimeout(function(){if(!self.exitFullscreen&&!self.inputHasFocus&&!self.mouseIsInControls){self.interfaceIsVisible=false;self.controlsTopAreVisible=false;self.controlsBottomAreVisible=false;self.$controlsTop&&self.$controlsTop.animate({opacity:0},250);self.$controlsBottom&&self.$controlsBottom.animate({opacity:0},250);hideControlMenus();self.$logo&&self.$logo.animate({top:getCSS('logo').top,opacity:0.25},250,function(){self.options.logoLink&&self.$logo.off('click');self.options.logoTitle&&self.$logo.off('mouseenter mouseleave');});self.$subtitle&&self.$subtitle.animate({bottom:getCSS('subtitle').bottom},250);}},self.options.fullscreen?2500:1000);} +function hideLoadingIcon(){self.$loadingIcon.hide().stop();} +function hideMarkers(){self.$posterMarker&&Ox.forEach(self.$posterMarker,function(marker){marker.hide();});self.$pointMarker&&Ox.forEach(self.$pointMarker,function(markers){Ox.forEach(markers,function(marker){marker.hide();});});} +function hidePoster(){if(self.loadedMetadata&&self.posterIsVisible){self.$poster.animate({opacity:0},250);self.posterIsVisible=false;}} +function isEqual(a,b){return Math.abs(a-b)<0.001;} +function itemchange(data){var item=self.$video.options('items')[data.item];Ox.Log('Video','ITEMCHANGE',item);} +function requiresusergesture(){Ox.Log('Video','requires user gesture');var $playIcon;function removeBehaviorsRestrictions(){window.removeEventListener('keydown',removeBehaviorsRestrictions);window.removeEventListener('mousedown',removeBehaviorsRestrictions);window.removeEventListener('touchstart',removeBehaviorsRestrictions);$playIcon.remove();showLoadingIcon();self.options.showIconOnLoad=false;} +window.addEventListener('keydown',removeBehaviorsRestrictions);window.addEventListener('mousedown',removeBehaviorsRestrictions);window.addEventListener('touchstart',removeBehaviorsRestrictions);hideLoadingIcon();$playIcon=$('').addClass('OxPlayIcon OxVideo OxInterface').attr({src:Ox.UI.getImageURL('symbolPlay','videoIcon')}).css(getCSS('playIcon')).css({opacity:1}).appendTo(self.$videoContainer);} +function loadImage(){self.$image.one({load:function(){hideLoadingIcon();}}).attr({src:self.options.video(Math.min(self.options.position,Math.floor(self.options.duration*self.options.fps)/self.options.fps),self.options.width)});} +function loadedmetadata(){Ox.Log('Video','LOADEDMETADATA') +var hadDuration=!!self.options.duration;self.loadedMetadata=true;self.videoWidth=self.$video.videoWidth();self.videoHeight=self.$video.videoHeight();self.videoCSS=getVideoCSS();self.posterMarkerCSS=getPosterMarkerCSS();self.$video.css(self.videoCSS);self.$poster&&self.$poster.css(self.videoCSS);self.$posterMarker&&Ox.forEach(self.$posterMarker,function(marker,position){marker.css(self.posterMarkerCSS[position]);});self.out=self.options.playInToOut&&self.out-1){self.options.subtitles=Ox.parseSRT(self.options.subtitles);loadedsubtitles();}else{Ox.get(self.options.subtitles,function(data){self.options.subtitles=Ox.parseSRT(data);loadedsubtitles();});self.options.subtitles=[];}}}} +function playing(){self.options.position=self.$video.currentTime();if((self.playInToOut&&self.options.position>=self.options.out)||(self.options.playInToOut&&self.options.position>=self.out)){if(self.options.loop){setPosition(self.options['in']);self.$video.play();}else{togglePaused();if(self.options.rewind){setTimeout(rewind,250);}else{setPosition(self.options.out?self.options.out:self.out);} +that.triggerEvent('ended');}}else{setPosition(self.options.position,'video');} +that.triggerEvent('playing',{position:self.options.position});} +function playInToOut(){if(self.options.out>self.options['in']){self.playInToOut=true;setPosition(self.options['in']);self.options.paused&&togglePaused();}} +function progress(){var buffered=self.$video.buffered();for(var i=0;iself.buffered[i][1]){self.buffered[i][0]=0;}} +self.$progress.attr({src:getProgressImageURL()});} +function renderSettings(){return Ox.VideoPlayerMenu({items:[{disabled:true,title:Ox._('Resolution')}].concat(self.resolutions.map(function(resolution){return{group:'resolution',id:resolution,checked:resolution==self.options.resolution,title:resolution+'p'};}),self.audioTracks.length>1?[{},{disabled:true,title:Ox._('Audio')}].concat(self.audioTracks.map(function(track){return{group:'audioTrack',id:track,checked:track==self.options.audioTrack,title:Ox._(track)};})):[],self.options.subtitles.length?[{},{disabled:true,title:Ox._('Subtitles')}].concat(self.subtitlesTracks.map(function(track){return{group:'subtitlesTrack',id:track,checked:self.options.enableSubtitles?track==self.options.subtitlesTrack:track=='',title:Ox._(track)};})):[],self.options.timelineTypes.length?[{},{disabled:true,title:Ox._('Timeline')}].concat(self.options.timelineTypes.map(function(type){return{group:'timeline',id:type.id,checked:type.id==self.options.timelineType,title:type.title};})):[],self.options.enableDownload?[{},{id:'download',title:Ox._('Download')}]:[])}).addClass('OxControls OxSettings').bindEvent({click:function(data){var resolution,type;if(data.group=='resolution'){resolution=parseInt(data.id,10);if(resolution!=self.options.resolution){self.options.resolution=resolution;setResolution();}}else if(data.group=='audioTrack'){self.options.audioTrack=data.id;setAudioTrack();}else if(data.group=='subtitlesTrack'){self.options.subtitlesTrack=data.id=='None'?'':data.id;self.options.enableSubtitles=!!self.options.subtitlesTrack;setSubtitlesTrack();}else if(data.group=='timeline'){type=self.options.timelineTypes[Ox.indexOf(self.options.timelineTypes,function(type){return type.title==title;})].id;if(type!=self.options.timelineType){self.options.timelineType=type;setTimelineType();}}else if(data.id=='download'){that.triggerEvent('download');}}});} +function rewind(){setPosition(self.options.playInToOut?self.options['in']:0);} +function seeked(){Ox.Log('Video','seeked') +clearTimeout(self.seekTimeout);self.seekTimeout=0;Ox.Log('Video','hide loading icon') +hideLoadingIcon();self.$video.show();self.$playIcon&&self.$playIcon.show();hidePoster();} +function seeking(){Ox.Log('Video','XX seeking') +if(!self.seekTimeout){self.seekTimeout=setTimeout(function(){self.$playIcon&&self.$playIcon.hide();Ox.Log('Video','XX show') +showLoadingIcon();},250);}} +function setAudioTrack(){updateVideo();} +function setCensored(){var censored=getCensored();if(censored!=self.censored){self.censored=censored;censor();}} +function setChapterTitle(){var chapterTitle=getChapterTitle();if(chapterTitle!=self.chapterTitle){self.chapterTitle=chapterTitle;self.$chapterTitle.html(self.chapterTitle)}} +function setMarkers(){self.$posterMarker&&Ox.forEach(self.$posterMarker,function(marker){isEqual(self.options.position,self.options.posterFrame)?marker.show():marker.hide();});self.$pointMarker&&Ox.forEach(self.$pointMarker,function(markers,point){Ox.forEach(markers,function(marker){isEqual(self.options.position,self.options[point])?marker.css({display:'block'}):marker.hide();});});} +function setPoint(){that.triggerEvent('setpoint');} +function setPosition(position,from){self.options.position=Ox.limit(position,self['in'],self.out);self.options.paused&&self.options.showMarkers&&setMarkers();self.options.censored.length&&setCensored();self.options.enableSubtitles&&self.$subtitle&&setSubtitle();self.$chapterTitle&&setChapterTitle();self.$position&&self.$position.html(formatPosition());if(self.options.type=='play'){if(self.loadedMetadata&&from!='video'){self.$video.currentTime(self.options.position);} +if(self.iconIsVisible){self.$playIcon.animate({opacity:0},250);self.iconIsVisible=false;} +self.$timeline&&self.$timeline.options({position:self.options.position});}else{loadImage();}} +function setResolution(){updateVideo();that.triggerEvent('resolution',{resolution:self.options.resolution});} +function setSize($element,css,animate,callback){if($element){if(animate){$element.animate(css,250,function(){callback&&callback();});}else{$element.css(css);callback&&callback();}}} +function setSizes(animate,callback){self.width=self.options.fullscreen?window.innerWidth:self.options.width;self.height=self.options.fullscreen?window.innerHeight:self.options.height;self.videoCSS=getVideoCSS();self.iconSize=Ox.limit(Math.round(self.height/10),16,32);if(self.$timeline||self.$spaceBottom){self.timelineWidth=getTimelineWidth();if(self.$timeline){self.timelineImageWidth=self.timelineWidth-self.barHeight;}} +setSize(that,getCSS('player'),animate,callback);setSize(self.$videoContainer,getCSS('videoContainer'),animate);setSize(self.$video,self.videoCSS,animate);setSize(self.$poster,self.videoCSS,animate);setSize(self.$logo,getCSS('logo'),animate);setSize(self.$loadingIcon,getCSS('loadingIcon'),animate);setSize(self.$playIcon,getCSS('playIcon'),animate);setSize(self.$copyrightIcon,getCSS('copyrightIcon'),animate);setSize(self.$subtitle,getCSS('subtitle'),animate);setSize(self.$controlsTop,getCSS('controlsTop'),animate);setSize(self.$title,getCSS('title'),animate);setSize(self.$chapterTitle,getCSS('title'),animate);setSize(self.$spaceTop,getCSS('spaceTop'),animate);setSize(self.$controlsBottom,getCSS('controlsBottom'),animate);setSize(self.$timeline,getCSS('timeline'),animate,function(){self.$timeline&&self.$timeline.options({width:self.timelineWidth});});setSize(self.$spaceBottom,getCSS('spaceBottom'),animate);setSize(self.$find,getCSS('find'),animate,function(){var width=Math.min(128,self.width-88);self.$findInput.options({width:width});self.$findInput.children('input').css({width:(width-12)+'px'});});setSize(self.$volume,getCSS('volume'),animate,function(){self.$volumeInput.options({size:Math.min(128,self.width-56)});});if(self.$posterMarker){self.posterMarkerCSS=getPosterMarkerCSS();Ox.forEach(self.$posterMarker,function(marker,position){setSize(marker,self.posterMarkerCSS[position],animate);});}} +function setSubtitle(){var subtitle=getSubtitle();if(subtitle!=self.subtitle){self.subtitle=subtitle;setSubtitleText();}} +function setSubtitleText(){self.$subtitle.html(self.subtitle?Ox.highlight(self.subtitle,self.options.find,'OxHighlight',true).replace(/\n/g,'
'):' 
 ');} +function setSubtitlesTrack(){var enableSubtitles=self.options.enableSubtitles&&!!self.options.subtitlesTrack;self.options.enableSubtitles=enableSubtitles;setSubtitle();self.$timeline&&self.$timeline.options({subtitles:getSubtitles()});if(enableSubtitles&&!!self.options.subtitlesTrack){that.triggerEvent('subtitlestrack',{track:self.options.subtitlesTrack});}else{that.triggerEvent('subtitles',{subtitles:self.options.enableSubtitles});}} +function setTimelineType(){that.triggerEvent('timeline',{timeline:self.options.timelineType});} +function setVideo(){if(Ox.isObject(self.options.video[0])){self.audioTracks=Ox.sort(Ox.unique(self.options.video.map(function(video){return video.track;})));if(!Ox.contains(self.audioTracks,self.options.audioTrack)){self.options.audioTrack=self.audioTracks[0];} +self.resolutions=Ox.sort(Ox.unique(self.options.video.map(function(video){return video.resolution;})));if(!Ox.contains(self.resolutions,self.options.resolution)){self.options.resolution=self.resolutions[0];} +self.video=getVideo();}else{self.video=[{src:self.options.video}];self.resolutions=[];self.audioTracks=[];}} +function setVolume(volume){self.options.volume=volume;if(!!self.options.volume==self.options.muted){toggleMuted();}else{self.$volumeButton&&self.$volumeButton.options({title:getVolumeImage()});self.$volumeValue&&self.$volumeValue.html(self.options.muted?0:Math.round(self.options.volume*100));} +!self.censored&&self.$video.volume(self.options.volume);that.triggerEvent('volume',{volume:self.options.volume});} +function showControls(){clearTimeout(self.interfaceTimeout);if(!self.interfaceIsVisible){self.interfaceIsVisible=true;if(self.$controlsTop){self.controlsTopAreVisible=true;} +if(self.$controlsBottom){self.controlsBottomAreVisible=true;} +self.$controlsTop&&self.$controlsTop.animate({opacity:1},250);self.$controlsBottom&&self.$controlsBottom.animate({opacity:1},250);['find','settings','volume'].forEach(function(element){var $element=self['$'+element];$element&&$element.is(':visible')&&$element.animate({opacity:1},250);});self.$logo&&self.$logo.animate({top:getCSS('logo').top,opacity:0.5},250,function(){self.options.logoLink&&self.$logo.on({click:function(){document.location.href=self.options.logoLink;}});self.options.logoTitle&&self.$logo.on({mouseenter:function(e){self.$logoTooltip.show(e);},mouseleave:self.$logoTooltip.hide});});self.$subtitle&&self.$subtitle.animate({bottom:getCSS('subtitle').bottom},250);}} +function showLoadingIcon(){self.$loadingIcon.start().show();} +function showVolume(){if(self.$volume){!self.interfaceIsVisible&&showControls();self.$volume.is(':hidden')&&toggleVolume();}} +function sizechange(){self.videoWidth=self.$video.videoWidth();self.videoHeight=self.$video.videoHeight();self.videoCSS=getVideoCSS();self.$video.css(self.videoCSS);};function submitFindInput(value,hasPressedEnter){self.options.find=value;self.results=find(self.options.find);if(self.$find){self.$results.html(self.results.length);self.$previousResultButton.options({disabled:!self.results.length});self.$nextResultButton.options({disabled:!self.results.length});self.$clearButton.options({disabled:!self.options.find});} +self.subtitle&&setSubtitleText();self.$timeline&&self.$timeline.options({find:self.options.find,results:self.results});if(hasPressedEnter){if(self.results.length){goToNext('result',1);that.gainFocus();}else{self.$findInput.focusInput(true);}} +that.triggerEvent('find',{find:self.options.find});} +function submitPositionInput(){self.$positionInput.hide();self.$position.html('').show();setPosition(Ox.parseDuration(self.$positionInput.value()));if(self.playOnSubmit){togglePaused();self.$video.play();self.playOnSubmit=false;} +if(self.focus=='mouseenter'&&!self.mouseHasLeft){that.gainFocus();} +self.mouseHasLeft&&hideControls();that.triggerEvent('position',{position:self.options.position});that.triggerEvent('submit');} +function toggleFind(){var show=self.$find.is(':hidden');!show&&self.$findInput.blurInput();self.$find.toggle();show&&self.$findInput.focusInput(false);} +function toggleFullscreen(from){var parentOffset,playOnFullscreen;self.options.fullscreen=!self.options.fullscreen;if(!self.options.paused){self.$video.pause();playOnFullscreen=true;} +if(self.options.fullscreen){self.$parent=that.parent();parentOffset=self.$parent.offset();self.absoluteOffset=that.offset();self.relativeOffset={left:self.absoluteOffset.left-parentOffset.left,top:self.absoluteOffset.top-parentOffset.top};that.detach().addClass('OxFullscreen').css({left:self.absoluteOffset.left+'px',top:self.absoluteOffset.top+'px',zIndex:1000}).appendTo(Ox.$body);if(self.options.externalControls){self.externalControls=true;self.options.externalControls=false;self.$videoContainer.css({top:0});} +setSizes(true,function(){playOnFullscreen&&self.$video.play();enterFullscreen();});}else{self.exitFullscreen=true;that.off('mousemove');that.find('.OxControls').trigger('mouseleave').off('mouseenter mouseleave');clearTimeout(self.interfaceTimeout);if(self.externalControls){self.options.externalControls=true;self.$videoContainer.css({top:'16px'});} +setSizes(true,function(){self.exitFullscreen=false;that.detach().removeClass('OxFullscreen').css({left:self.relativeOffset.left+'px',top:self.relativeOffset.top+'px',zIndex:1}).appendTo(self.$parent);playOnFullscreen&&self.$video.play();self.options.enableKeyboard&&that.gainFocus();});} +if(self.$fullscreenButton&&from!='button'){self.$fullscreenButton.toggle();} +that.triggerEvent('fullscreen',{fullscreen:self.options.fullscreen});} +function toggleLoop(from){self.options.loop=!self.options.loop;self.$video.options('loop',self.options.loop);if(self.$loopButton&&from!='button'){self.$loopButton.toggle();} +that.triggerEvent('loop',{loop:self.options.loop});} +function toggleMuted(from){self.hasVolumeControl&&showVolume();self.options.muted=!self.options.muted;self.$video.muted(self.options.muted);if(!self.options.muted&&!self.options.volume){self.options.volume=1;self.$video.volume(1);} +if(self.$muteButton&&from!='button'){self.$muteButton.toggle();} +self.$volumeButton&&self.$volumeButton.options({title:getVolumeImage()});self.$volumeInput&&self.$volumeInput.value(self.options.muted?0:self.options.volume);self.$volumeValue&&self.$volumeValue.html(self.options.muted?0:Math.round(self.options.volume*100));that.triggerEvent('muted',{muted:self.options.muted});} +function togglePaused(from){self.options.paused=!self.options.paused;self.$timeline&&self.$timeline.options({paused:self.options.paused});if(!self.loadedMetadata){return;} +if(self.options.paused){self.$video.pause();clearInterval(self.playInterval);if(self.options.showIcon){togglePlayIcon();self.$playIcon.animate({opacity:1},250);} +self.playInToOut=false;}else{hidePoster();if(self.options.playInToOut&&self.options.position>self.options.out-self.secondsPerFrame){setPosition(self.options['in']);} +self.$video.play();self.playInterval=setInterval(playing,self.millisecondsPerFrame);if(self.options.showIcon){self.$playIcon.animate({opacity:0},250,togglePlayIcon);}else if(self.options.showIconOnLoad){self.$playIcon.animate({opacity:0},250);} +self.options.showMarkers&&hideMarkers();} +if(self.$playButton&&from!='button'){self.$playButton.toggle();} +that.triggerEvent('paused',{paused:self.options.paused});self.options.paused&&that.triggerEvent('position',{position:self.options.position});} +function togglePlayIcon(){self.$playIcon.attr({src:Ox.UI.getImageURL('symbol'+(self.options.paused?'Play':'Pause'),'videoIcon')});} +function toggleScale(from){self.options.scaleToFill=!self.options.scaleToFill;self.videoCSS=getVideoCSS();self.$video.animate(self.videoCSS,250);self.$poster&&self.$poster.animate(self.videoCSS,250);self.$subtitle&&self.$subtitle.animate({bottom:getCSS('subtitle').bottom},250);if(self.$scaleButton&&from!='button'){self.$scaleButton.toggle();} +if(self.$posterMarker){self.posterMarkerCSS=getPosterMarkerCSS();Ox.forEach(self.$posterMarker,function(marker,position){marker.animate(self.posterMarkerCSS[position],250);});} +that.triggerEvent('scale',{scale:self.options.scaleToFill?'fill':'fit'});} +function toggleSize(){self.options.sizeIsLarge=!self.options.sizeIsLarge;that.triggerEvent('size',{size:self.options.sizeIsLarge?'large':'small'});} +function toggleVolume(){self.$volume.toggle();} +function updateVideo(){if(!self.options.paused){self.playOnLoad=true;togglePaused('button');} +self.loadedMetadata=false;showLoadingIcon();self.video=getVideo();self.$video.options({items:self.video});self.$playButton&&self.$playButton.options({disabled:true});} +that.changeVolume=function(num){changeVolume(num);return that;};that.playInToOut=function(){playInToOut();return that;};that.toggleLoop=function(){toggleLoop();return that;};that.togglePaused=function(){togglePaused();return that;};that.toggleMuted=function(){toggleMuted();return that;};return that;};Ox.VideoPlayerMenu=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({items:[]}).options(options||{}).update({}).on({click:function(e){var $target=$(e.target),group,id;that.hide();if(!$target.is('.OxLine')&&!$target.is('.OxSpace')&&!$target.is('.OxDisabled')){group=$target.parent().data().group;id=$target.parent().data().id;self.$items.filter(function($item){return $item.data().group==group;}).forEach(function($item){$($item.children()[1]).attr({src:Ox.UI.getImageURL('symbol'+($item.data().id==id?'Check':'None'))});});that.triggerEvent('click',{group:group,id:id});}}});self.$items=[];self.height=2;self.options.items.forEach(function(item){var $item;if(!Ox.isEmpty(item)){$item=$('
').addClass('OxItem'+(item.disabled?' OxDisabled':'')).data({group:item.group,id:item.id}).appendTo(that);if(!item.disabled){$item.on({mouseenter:function(){$(this).addClass('OxSelected');},mouseleave:function(){$(this).removeClass('OxSelected');}});} +$('
').html(item.title).appendTo($item);$('').attr({src:Ox.UI.getImageURL('symbol'+(item.checked?'Check':'None'))}).appendTo($item);self.$items.push($item);self.height+=14;}else{$('
').addClass('OxSpace').appendTo(that);$('
').addClass('OxLine').appendTo(that);$('
').addClass('OxSpace').appendTo(that);self.height+=5;}});that.css({height:self.height+'px'});return that;};'use strict';Ox.VideoPlayerPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({annotationsCalendarSize:256,annotationsMapSize:256,annotationsRange:'all',annotationsSize:256,annotationsSort:'position',annotationsTooltip:'annotations',audioTrack:'',censored:[],censoredIcon:'',censoredTooltip:'',clickLink:null,cuts:[],duration:0,enableDownload:false,enableSubtitles:false,find:'',fps:25,fullscreen:false,getLargeTimelineURL:null,height:0,'in':0,itemName:{singular:'video',plural:'videos'},layers:[],loop:false,muted:false,out:0,paused:true,playbackRate:1,playInToOut:false,position:0,poster:'',resolution:0,scaleToFill:false,selected:'',showAnnotations:false,showAnnotationsCalendar:false,showAnnotationsMap:false,showLayers:{},showTimeline:false,showUsers:false,smallTimelineURL:'',subtitles:[],subtitlesDefaultTrack:'English',subtitlesLayer:null,subtitlesOffset:0,subtitlesTrack:'English',timeline:'',timelineTooltip:'timeline',video:'',volume:1,width:0}).options(options||{}).update({fullscreen:function(){self.$video.options({fullscreen:self.options.fullscreen});},height:function(){self.$video.options({height:getPlayerHeight()});},'in':function(){setPoint('in',self.options['in']);},loop:function(){self.$video.options({loop:self.options.loop});},out:function(){setPoint('out',self.options.out);},paused:function(){self.$video.options({paused:self.options.paused});},playbackRate:function(){self.$video.options({playbackRate:self.options.playbackRate});},position:function(){self.$video.options({position:self.options.position});self.$timeline.options({position:self.options.position});self.$annotationPanel.options({position:self.options.position});},selected:function(){self.$annotationPanel.options({selected:self.options.selected});},showAnnotations:function(){self.$mainPanel.toggleElement(1);},showTimeline:function(){self.$videoPanel.toggleElement(1);},timeline:function(){self.$timeline.options({type:self.options.timeline});},volume:function(){self.$video.options({volume:self.options.volume});},width:function(){self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});}}).css({height:self.options.height+'px',width:self.options.width+'px'}).bindEvent({resize:resizeElement,key_0:toggleMuted,key_comma:function(){movePositionTo('cut',-1);},key_control_c:function(){that.triggerEvent('copy',[{annotation:self.options.selected,'in':self.options['in'],out:self.options.out}]);},key_control_shift_c:function(){that.triggerEvent('copyadd',[{annotation:self.options.selected,'in':self.options['in'],out:self.options.out}]);},key_dot:function(){movePositionTo('cut',1);},key_equal:function(){self.$video.changeVolume(0.1);},key_i:function(){self.$annotationPanel.options({selected:''});setPoint('in',self.options.position,false,true);},key_k:function togglePlaybackRate(){that.options({playbackRate:self.options.playbackRate==1?2:self.options.playbackRate==2?0.5:1});},key_l:toggleLoop,key_left:function(){movePositionBy(-1/self.options.fps);},key_minus:function(){self.$video.changeVolume(-0.1);},key_o:function(){self.$annotationPanel.options({selected:''});setPoint('out',self.options.position,false,true);},key_p:playInToOut,key_right:function(){movePositionBy(1/self.options.fps);},key_shift_down:function(){movePositionBy(self.options.duration);},key_shift_i:function(){goToPoint('in');},key_shift_left:function(){movePositionBy(-1);},key_shift_o:function(){goToPoint('out');},key_shift_right:function(){movePositionBy(1);},key_shift_up:function(){movePositionBy(-self.options.position);},key_slash:selectCut,key_space:togglePaused});self.options.subtitles=options.subtitles!==void 0?self.options.subtitles:parseSubtitles();self.fullscreen=false;self.results=[];self.$player=Ox.Element().css({overflow:'hidden'});self.$video=Ox.VideoPlayer({annotations:getAnnotations(),audioTrack:self.options.audioTrack,censored:self.options.censored,censoredIcon:self.options.censoredIcon,censoredTooltip:self.options.censoredTooltip,controlsTop:['fullscreen','title','find'],controlsBottom:['play','playInToOut','volume','scale','timeline','loop','position','settings'],enableDownload:self.options.enableDownload,enableFind:true,enableKeyboard:true,enableMouse:true,enablePosition:true,enableSubtitles:self.options.enableSubtitles,enableTimeline:true,find:self.options.find,fullscreen:self.options.fullscreen,height:getPlayerHeight(),'in':self.options['in'],loop:self.options.loop,muted:self.options.muted,out:self.options.out,paused:self.options.paused,position:self.options.position,resolution:self.options.resolution,scaleToFill:self.options.scaleToFill,subtitles:Ox.clone(self.options.subtitles,true),subtitlesDefaultTrack:self.options.subtitlesDefaultTrack,subtitlesOffset:self.options.subtitlesOffset,subtitlesTrack:self.options.subtitlesTrack,timeline:self.options.smallTimelineURL,video:self.options.video,volume:self.options.volume,width:getPlayerWidth()}).bindEvent({censored:function(){that.triggerEvent('censored');},download:function(data){that.triggerEvent('downloadvideo',data);},find:function(data){self.$timeline.options({find:data.find});self.$annotationPanel.options({highlight:data.find});that.triggerEvent('find',data);},fullscreen:function(data){self.options.fullscreen=data.fullscreen;},loop:function(data){that.triggerEvent('loop',data);},muted:function(data){that.triggerEvent('muted',data);},paused:function(data){self.options.paused=data.paused;that.triggerEvent('paused',data);},playing:function(data){setPosition(data.position,true);},position:function(data){setPosition(data.position);},positioning:function(data){setPosition(data.position,false,true);},resolution:function(data){that.triggerEvent('resolution',data);},scale:function(data){that.triggerEvent('scale',data);},select:selectAnnotation,subtitles:function(data){self.options.enableSubtitles=data.subtitles;self.$timeline.options({subtitles:getSubtitles()});that.triggerEvent('subtitles',data);},subtitlestrack:function(data){var enableSubtitles=!!data.track;if(enableSubtitles!=self.options.enableSubtitles){self.options.enableSubtitles=enableSubtitles;that.triggerEvent('subtitles',{subtitles:enableSubtitles});} +self.options.subtitlesTrack=data.track;self.$timeline.options({subtitles:getSubtitles()});},volume:function(data){that.triggerEvent('volume',data);}}).appendTo(self.$player);self.$controls=Ox.Element().addClass('OxMedia').bindEvent({toggle:toggleControls});self.$timeline=Ox.LargeVideoTimeline({cuts:self.options.cuts,duration:self.options.duration,find:self.options.find,getImageURL:self.options.getLargeTimelineURL,'in':self.options['in'],out:self.options.out,position:self.options.position,subtitles:getSubtitles(),videoId:self.options.videoId,type:self.options.timeline,width:getTimelineWidth()}).css({left:'4px',top:'4px'}).bindEvent({key_left:function(){self.options.paused&&movePositionBy(-1/self.options.fps);},key_right:function(){self.options.paused&&movePositionBy(1/self.options.fps);},key_space:togglePaused,mousedown:that.gainFocus,position:dragendTimeline,positioning:dragTimeline}).appendTo(self.$controls);self.$videoPanel=Ox.SplitPanel({elements:[{element:self.$player},{collapsed:!self.options.showTimeline,collapsible:true,element:self.$controls,size:80,tooltip:self.options.timelineTooltip}],orientation:'vertical'});self.$annotationPanel=Ox.AnnotationPanel({calendarSize:self.options.annotationsCalendarSize,clickLink:self.options.clickLink,editable:false,highlight:self.options.find,'in':self.options['in'],itemName:self.options.itemName,layers:self.options.layers,mapSize:self.options.annotationsMapSize,out:self.options.out,position:self.options.position,range:self.options.annotationsRange,selected:self.options.selected,showCalendar:self.options.showAnnotationsCalendar,showLayers:Ox.clone(self.options.showLayers),showMap:self.options.showAnnotationsMap,showUsers:self.options.showUsers,sort:self.options.annotationsSort,width:self.options.annotationsSize}).bindEvent({annotationsrange:function(data){self.options.annotationsRange=data.range;that.triggerEvent('annotationsrange',data);},annotationssort:function(data){self.options.annotationsSort=data.sort;that.triggerEvent('annotationssort',data);},info:function(data){that.triggerEvent('info',data);},open:function(){setPosition(self.options['in']);},resize:resizeAnnotations,resizeend:resizeendAnnotations,resizecalendar:function(data){that.triggerEvent('resizecalendar',data);},resizemap:function(data){that.triggerEvent('resizemap',data);},select:selectAnnotation,toggle:toggleAnnotations,togglecalendar:function(data){self.options.showAnnotationsCalendar=!data.collapsed;that.triggerEvent('togglecalendar',data);},togglelayer:function(data){that.triggerEvent('togglelayer',{collapsed:data.collapsed,layer:data.layer});},togglemap:function(data){self.options.showAnnotationsMap=!data.collapsed;that.triggerEvent('togglemap',data);}});['0','b','backslash','closebracket','comma','dot','equal','f','g','i','minus','n','o','openbracket','p','shift_0','shift_g','shift_i','shift_o','slash','space'].forEach(function(key){key='key_'+key;self.$annotationPanel.bindEvent(key,function(){that.triggerEvent(key);});});that.setElement(self.$mainPanel=Ox.SplitPanel({elements:[{element:self.$videoPanel},{collapsed:!self.options.showAnnotations,collapsible:true,element:self.$annotationPanel,resizable:true,resize:[192,256,320,384],size:self.options.annotationsSize,tooltip:self.options.annotationsTooltip}],orientation:'horizontal'}));function dragTimeline(data){self.options.position=data.position;self.$video.options({position:self.options.position});self.$annotationPanel.options({position:self.options.position});} +function dragendTimeline(data){dragTimeline(data);that.triggerEvent('position',{position:self.options.position});} +function getAnnotations(){return!self.options.layers?[]:Ox.flatten(self.options.layers.map(function(layer){return layer.items.map(function(item){return{id:item.id,'in':item['in'],out:item.out,text:item.value};});})).sort(sortAnnotations);} +function getNextPosition(type,direction){var positions;if(type=='cut'){positions=[0].concat(self.options.cuts,self.options.duration);} +return Ox.nextValue(positions,self.options.position,direction);} +function getPlayerHeight(){return self.options.height +-self.options.showTimeline*80-1;} +function getPlayerWidth(){return self.options.width +-(self.options.showAnnotations&&!self.fullscreen)*self.options.annotationsSize-1;} +function getSubtitles(){return self.options.enableSubtitles?self.options.subtitles.filter(function(v){return Ox.contains(v.tracks,self.options.subtitlesTrack);}):[];} +function getTimelineWidth(){return self.options.width +-(self.options.showAnnotations&&!self.fullscreen)*self.options.annotationsSize-16-1;} +function goToPoint(point){setPosition(self.options[point]);} +function playInToOut(){self.$video.playInToOut();} +function movePositionBy(sec){setPosition(Ox.limit(self.options.position+sec,0,self.options.duration));} +function movePositionTo(type,direction){setPosition(getNextPosition(type,direction));} +function parseSubtitles(){return self.options.subtitlesLayer?self.options.layers.filter(function(layer){return layer.id==self.options.subtitlesLayer;})[0].items.map(function(subtitle){return{id:subtitle.id,'in':subtitle['in'],out:subtitle.out,text:subtitle.value.replace(/\n/g,' ').replace(//g,'\n'),tracks:subtitle.languages||[self.options.subtitlesDefaultTrack]};}):[];} +function resizeAnnotations(data){self.options.annotationsSize=data.size;self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});self.$annotationPanel.options({width:data.size});} +function resizeendAnnotations(data){that.triggerEvent('annotationssize',data.size);} +function resizeElement(data){self.options.height=data.size;self.$video.options({height:getPlayerHeight()});} +function selectAnnotation(data){self.options.selected=data.id;if(self.options.selected){setPosition(data['in']);setPoint('in',data['in'],true);setPoint('out',data.out,true);} +self.$annotationPanel.options({selected:self.options.selected});that.triggerEvent('select',{id:self.options.selected});} +function selectCut(){var points={'in':Ox.last(self.options.cuts),out:self.options.duration};Ox.forEach(self.options.cuts,function(cut,i){if(cut>self.options.position){points={'in':i==0?0:self.options.cuts[i-1],out:cut-1/self.options.fps};return false;}});setPoint('in',points['in']);setPoint('out',points.out);} +function setPoint(point,position,keepSelected,triggerEvent){self.options[point]=position;if(self.options.selected&&!keepSelected){selectAnnotation({id:''});} +self.$video.options(point,position);self.$timeline.options(point,position);self.$annotationPanel.options(point,position);if(self.options['in']>self.options.out){setPoint(point=='in'?'out':'in',position,keepSelected);}else if(triggerEvent){that.triggerEvent('points',{'in':self.options['in'],out:self.options.out,position:self.options.position});}} +function setPosition(position,playing,dragging){var minute=Math.floor(position/60),previousMinute=Math.floor(self.options.position/60);self.options.position=position;!playing&&self.$video.options({position:self.options.position});self.$timeline.options({position:self.options.position});self.$annotationPanel.options({position:self.options.position});if((!playing||minute!=previousMinute)&&!dragging){that.triggerEvent('position',{position:!playing?self.options.position:minute*60});}} +function sortAnnotations(a,b){var ret=0;if(a['in']b['in']){ret=1;}else if(a.outb.out){ret=1;}else if(a.valueb.value){ret=1;} +return ret;} +function toggleAnnotations(data){self.options.showAnnotations=!data.collapsed;self.$video.options({width:getPlayerWidth()});self.$timeline.options({width:getTimelineWidth()});that.triggerEvent('toggleannotations',{showAnnotations:self.options.showAnnotations});} +function toggleControls(data){self.options.showTimeline=!data.collapsed;self.$video.options({height:getPlayerHeight()});that.triggerEvent('toggletimeline',{showTimeline:self.options.showTimeline});} +function toggleLoop(){self.$video.toggleLoop();} +function toggleMuted(){self.$video.toggleMuted();} +function togglePaused(){self.$video.togglePaused();self.$video.options('paused')&&that.triggerEvent('position',{position:self.$video.options('position')});} +that.toggleAnnotations=function(){self.$mainPanel.toggleElement(1);};that.toggleTimeline=function(){self.$videoPanel.toggleElement(1);};that.playInToOut=function(){self.$video.playInToOut();};return that;} +'use strict';Ox.VideoPreview=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({duration:0,getFrame:null,fps:25,frameRatio:16/9,height:256,position:void 0,scaleToFill:false,timeline:'',videoTooltip:null,width:256}).options(options||{}).update({height:function(){that.css({height:self.options.height+'px'});self.$frame.css(getFrameCSS());},position:function(){self.$frame.attr({src:self.options.getFrame(self.options.position)});},width:function(){that.css({width:self.options.width+'px'});stopLoading();self.$frame.attr({src:self.options.getFrame()}).css(getFrameCSS());self.$timeline&&self.$timeline.css({width:self.options.width+'px'});}}).addClass('OxVideoPreview').css({width:self.options.width+'px',height:self.options.height+'px'});self.loaded=[];self.queue=[];self.$frameElement=Ox.$('
').addClass('OxFrame').appendTo(that);self.$frame=Ox.$('').attr({src:self.options.getFrame(self.options.position)}).css(getFrameCSS()).appendTo(self.$frameElement);if(self.options.timeline){self.$timeline=$('').addClass('OxTimeline').attr({src:self.options.timeline}).css({width:self.options.width+'px'}).appendTo(that);} +self.$interface=Ox.Element({tooltip:function(event){var position=getPosition(event.clientX-that.offset().left),tooltip=Ox.isFunction(self.options.videoTooltip)?self.options.videoTooltip():self.options.videoTooltip;self.$frame.attr({src:getClosestFrame(position)});self.timeout&&clearTimeout(self.timeout);self.timeout=setTimeout(function(){self.$frame.attr({src:self.options.getFrame(position)});},250);return'
' ++(tooltip?tooltip+'
':'') ++''+Ox.formatDuration(position,2)+'' ++'
';}}).addClass('OxInterface').on({click:click,mouseenter:startLoading,mouseleave:function(){stopLoading();self.$frame.attr({src:self.options.getFrame(self.options.position)});}}).bindEvent({touchend:touchend,touchmove:touchmove,touchstart:startLoading}).appendTo(that);function click(e){that.triggerEvent('click',{position:getPosition(e.clientX-that.offset().left)});} +function getClosestFrame(position){return self.loaded.length==0?self.options.getFrame(self.options.position):self.loaded.sort(function(a,b){return Math.abs(a.position-position)-Math.abs(b.position-position);})[0].frame;} +function getFrameCSS(){var css={},elementWidth=self.options.width,elementHeight=self.options.height-(self.options.timeline?16:0),elementRatio=elementWidth/elementHeight,frameRatio=self.options.frameRatio,frameIsWider=frameRatio>elementRatio;if(self.options.scaleToFill){css.width=frameIsWider?elementHeight*frameRatio:elementWidth;css.height=frameIsWider?elementHeight:elementWidth/frameRatio;css.marginLeft=frameIsWider?(elementWidth-css.width)/2:0;css.marginTop=frameIsWider?0:(elementHeight-css.height)/2;}else{css.width=frameIsWider?elementWidth:elementHeight*frameRatio;css.height=frameIsWider?elementWidth/frameRatio:elementHeight;css.marginLeft=frameIsWider?0:(elementWidth-css.width)/2;css.marginTop=frameIsWider?(elementHeight-css.height)/2:0;} +return Ox.map(css,function(value){return Math.round(value)+'px';});} +function getPosition(x){return Math.round(self.options.duration*x/self.options.width*self.options.fps)/self.options.fps;} +function startLoading(){var last,steps=[Math.round(self.options.width/2)];while((last=steps[steps.length-1])>1){steps.push(Math.round(last/2));} +steps.forEach(function(step){Ox.loop(0,self.options.width,step,function(x){var position=getPosition(x),frame=self.options.getFrame(position);if(!self.loaded.some(function(image){return image.frame==frame;})&&!self.queue.some(function(image){return image.frame==frame;})){self.queue.push({frame:frame,position:position});}});});self.queue.length&&loadFrame();function loadFrame(){var image=self.queue.shift();$('').load(function(){self.loaded.push(image);self.queue.length&&loadFrame();}).attr({src:image.frame})}} +function stopLoading(){self.queue=[];self.timeout&&clearTimeout(self.timeout);} +function touchend(e){var position=getPosition(e.clientX-that.offset().left);stopLoading();self.$frame.attr({src:getClosestFrame(position)});that.triggerEvent('click',{position:position});} +function touchmove(e){var position=getPosition(e.clientX-that.offset().left);self.$frame.attr({src:getClosestFrame(position)});} +return that;};'use strict';Ox.VideoTimelinePanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({annotationsCalendarSize:256,annotationsMapSize:256,annotationsRange:'all',annotationsSize:256,annotationsSort:'position',annotationsTooltip:'annotations',audioTrack:'',censored:[],censoredIcon:'',censoredTooltip:'',clickLink:null,cuts:[],duration:0,followPlayer:false,getFrameURL:null,getLargeTimelineURL:null,height:0,'in':0,itemName:{singular:'video',plural:'videos'},layers:[],loop:false,muted:false,out:0,paused:true,playbackRate:1,position:0,resolution:0,selected:'',showAnnotations:false,showAnnotationsCalendar:false,showAnnotationsMap:false,showLayers:{},showUsers:false,smallTimelineURL:'',subtitles:[],timeline:'',timelines:[],video:'',volume:1,width:0}).options(options||{}).update({height:function(){self.$player.options({height:self.options.height});},paused:function(){self.$player.options({paused:self.options.paused});},playbackRate:function(){self.$player.options({playbackRate:self.options.playbackRate});},position:function(){setPosition(self.options.position);},showAnnotations:function(){self.$panel.toggleElement(1);},timeline:function(){self.$player.options({timeline:self.options.timeline});},width:function(){self.$player.options({width:getPlayerWidth()});}}).css({height:self.options.height+'px',width:self.options.width+'px'}).bindEvent({resize:resizeElement,key_0:toggleMuted,key_equal:function(){self.$video.changeVolume(0.1);},key_k:function togglePlaybackRate(){that.options({playbackRate:self.options.playbackRate==1?2:self.options.playbackRate==2?0.5:1});},key_minus:function(){self.$video.changeVolume(-0.1);},key_space:togglePaused});self.$player=Ox.VideoTimelinePlayer({audioTrack:self.options.audioTrack,censored:self.options.censored,censoredIcon:self.options.censoredIcon,censoredTooltip:self.options.censoredTooltip,cuts:self.options.cuts,duration:self.options.duration,followPlayer:self.options.followPlayer,getFrameURL:self.options.getFrameURL,getLargeTimelineURL:self.options.getLargeTimelineURL,height:self.options.height,muted:self.options.muted,paused:self.options.paused,playbackRate:self.options.playbackRate,position:self.options.position,resolution:self.options.resolution,smallTimelineURL:self.options.smallTimelineURL,subtitles:self.options.subtitles,timeline:self.options.timeline,timelines:self.options.timelines,video:self.options.video,videoRatio:self.options.videoRatio,volume:self.options.volume,width:getPlayerWidth()}).bindEvent({censored:function(){that.triggerEvent('censored');},follow:function(data){that.triggerEvent('follow',data);},muted:function(data){that.triggerEvent('muted',data);},paused:function(data){self.options.paused=data.paused;that.triggerEvent('paused',data);},playing:function(data){setPosition(data.position,true);},position:function(data){setPosition(data.position);},timeline:function(data){that.triggerEvent('timeline',data);},volume:function(data){that.triggerEvent('volume',data);}});self.$annotationPanel=Ox.AnnotationPanel({calendarSize:self.options.annotationsCalendarSize,clickLink:self.options.clickLink,editable:false,highlight:self.options.find,'in':self.options['in'],itemName:self.options.itemName,layers:self.options.layers,mapSize:self.options.annotationsMapSize,out:self.options.out,position:self.options.position,range:self.options.annotationsRange,selected:self.options.selected,showCalendar:self.options.showAnnotationsCalendar,showLayers:Ox.clone(self.options.showLayers),showMap:self.options.showAnnotationsMap,showUsers:self.options.showUsers,sort:self.options.annotationsSort,width:self.options.annotationsSize}).bindEvent({annotationsrange:function(data){self.options.annotationsRange=data.range;that.triggerEvent('annotationsrange',data);},annotationssort:function(data){self.options.annotationsSort=data.sort;that.triggerEvent('annotationssort',data);},info:function(data){that.triggerEvent('info',data);},open:function(){setPosition(self.options['in']);},resize:resizeAnnotations,resizeend:resizeendAnnotations,resizecalendar:function(data){that.triggerEvent('resizecalendar',data);},resizemap:function(data){that.triggerEvent('resizemap',data);},select:selectAnnotation,toggle:toggleAnnotations,togglecalendar:function(data){self.options.showAnnotationsCalendar=!data.collapsed;that.triggerEvent('togglecalendar',data);},togglelayer:function(data){that.triggerEvent('togglelayer',{collapsed:data.collapsed,layer:data.layer});},togglemap:function(data){self.options.showAnnotationsMap=!data.collapsed;that.triggerEvent('togglemap',data);}});that.setElement(self.$panel=Ox.SplitPanel({elements:[{element:self.$player},{collapsed:!self.options.showAnnotations,collapsible:true,element:self.$annotationPanel,resizable:true,resize:[192,256,320,384],size:self.options.annotationsSize,tooltip:self.options.annotationsTooltip}],orientation:'horizontal'}));function getPlayerWidth(){return self.options.width-self.options.showAnnotations*self.options.annotationsSize-1;} +function resizeAnnotations(data){self.options.annotationsSize=data.size;self.$player.options({width:getPlayerWidth()});self.$annotationPanel.options({width:data.size});} +function resizeendAnnotations(data){that.triggerEvent('annotationssize',data.size);} +function resizeElement(data){self.options.height=data.size;self.$player.options({height:self.options.height});} +function selectAnnotation(data){self.options.selected=data.id;if(self.options.selected){setPosition(data['in']);} +self.$annotationPanel.options({selected:self.options.selected});that.triggerEvent('select',{id:self.options.selected});} +function setPosition(position,playing){var minute=Math.floor(position/60),previousMinute=Math.floor(self.options.position/60);self.options.position=position;!playing&&self.$player.options({position:self.options.position});self.$annotationPanel.options({position:self.options.position});if(!playing||minute!=previousMinute){that.triggerEvent('position',{position:!playing?self.options.position:minute*60});}} +function toggleAnnotations(data){self.options.showAnnotations=!data.collapsed;self.$player.options({width:getPlayerWidth()});that.triggerEvent('toggleannotations',{showAnnotations:self.options.showAnnotations});} +function toggleMuted(){self.$player.toggleMuted();} +function togglePaused(){self.$player.togglePaused();self.$player.options('paused')&&that.triggerEvent('position',{position:self.$player.options('position')});} +that.toggleAnnotations=function(){self.$panel.toggleElement(1);};return that;};'use strict';Ox.VideoTimelinePlayer=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({audioTrack:'',censored:[],censoredIcon:'',censoredTooltip:'',cuts:[],duration:0,find:'',followPlayer:false,getFrameURL:null,getLargeTimelineURL:null,height:0,'in':0,matches:[],muted:false,out:0,paused:false,playbackRate:1,position:0,showMilliseconds:false,smallTimelineURL:'',subtitles:[],timeline:'',timelines:[],video:'',videoRatio:1,volume:1,width:0}).options(options||{}).update({height:setHeight,paused:function(){self.options.paused=!self.options.paused;togglePaused();},playbackRate:function(){self.$video.options({playbackRate:self.options.playbackRate});},position:setPosition,timeline:function(){self.$menuButton.checkItem('timelines_'+self.options.timeline);updateTimeline();},volume:function(){self.$video.options({volume:self.options.volume});},width:setWidth});self.fps=25;self.frame=self.options.position*self.fps;self.frames=self.options.duration*self.fps;self.tileWidth=1500;self.tileHeight=64;self.margin=8;self.contentWidth=self.options.width-2*self.margin;self.contentHeight=self.options.height-32;self.positionWidth=48 ++!!self.options.showMilliseconds*2 ++self.options.showMilliseconds*6;self.tiles=Math.ceil(self.frames/self.tileWidth);self.videoWidth=Math.round(self.tileHeight*self.options.videoRatio);self.lines=getLines();self.videoLines=getVideoLines();if(Ox.isObject(self.options.video[0])){self.audioTracks=Ox.sort(Ox.unique(self.options.video.map(function(video){return video.track;}))).map(function(track){return{id:track,title:Ox._(track),checked:self.options.audioTrack==track};});} +self.$menubar=Ox.Bar({size:16});self.$menuButton=Ox.MenuButton({items:[].concat(self.audioTracks.length>1?[{id:'audioTracks',title:Ox._('Audio'),items:[{group:'audioTrack',min:1,max:1,items:self.audioTracks}]}]:[],[{id:'timelines',title:Ox._('Timeline'),items:[{group:'timeline',min:1,max:1,items:Ox.map(self.options.timelines,function(timeline){return Ox.extend({checked:timeline.id==self.options.timeline},timeline);})}]},{},{id:'followPlayer',title:'Follow Player While Playing',checked:self.options.followPlayer}]),style:'square',title:'set',tooltip:Ox._('Options'),type:'image'}).css({float:'left'}).bindEvent({change:function(data){var id=data.id;if(id=='audioTrack'){self.options.audioTrack=data.checked[0].id;self.$video.options({audioTrack:self.options.audioTrack});}else if(id=='timeline'){self.options.timeline=data.checked[0].id;updateTimeline();that.triggerEvent('timeline',{timeline:self.options.timeline});}else if(id=='followPlayer'){self.options.followPlayer=data.checked;if(!self.options.paused&&self.options.followPlayer){self.scrollTimeout&&clearTimeout(self.scrollTimeout);scrollToPosition();} +that.triggerEvent('follow',{follow:self.options.followPlayer});}}}).appendTo(self.$menubar);self.$scrollButton=Ox.Button({style:'symbol',title:'arrowDown',tooltip:Ox._('Scroll to Player'),type:'image'}).css({float:'right'}).hide().bindEvent({click:function(){self.scrollTimeout&&clearTimeout(self.scrollTimeout);scrollToPosition();}}).appendTo(self.$menubar);self.$timelinePlayer=Ox.Element().addClass('OxMedia').css({overflowX:'hidden',overflowY:'auto'}).on({mousedown:mousedown,mouseleave:mouseleave,mousemove:mousemove,scroll:scroll}).bindEvent({mousedown:function(){this.gainFocus();},key_0:toggleMuted,key_down:function(){self.options.position+=self.contentWidth/self.fps;setPosition();},key_equal:function(){changeVolume(0.1);},key_enter:function(){scrollToPosition();},key_k:function togglePlaybackRate(){that.options({playbackRate:self.options.playbackRate==1?2:self.options.playbackRate==2?0.5:1});},key_left:function(){self.options.position-=self.videoWidth/self.fps;setPosition();},key_minus:function(){changeVolume(-0.1);},key_right:function(){self.options.position+=self.videoWidth/self.fps;setPosition();},key_shift_left:function(){self.options.position-=1/self.fps;setPosition();},key_shift_right:function(){self.options.position+=1/self.fps;setPosition();},key_space:function(){togglePaused()},key_up:function(){self.options.position-=self.contentWidth/self.fps;setPosition();},touchend:function(e){mousedown(e);mouseleave();},touchmove:mousedown,touchstart:mousedown});self.$playerbar=Ox.Bar({size:16});self.$playButton=Ox.Button({style:'symbol',title:'play',tooltip:Ox._('Play'),type:'image'}).css({float:'left'}).bindEvent({click:function(){togglePaused();}}).appendTo(self.$playerbar);self.$muteButton=Ox.Button({style:'symbol',title:self.options.muted?'unmute':'mute',tooltip:self.options.muted?Ox._('Unmute'):Ox._('Mute'),type:'image'}).css({float:'left'}).bindEvent({click:toggleMuted}).appendTo(self.$playerbar);self.$smallTimeline=getSmallTimeline().appendTo(self.$playerbar);self.$position=Ox.Element().addClass('OxPosition').css({width:self.positionWidth-4+'px'}).html(formatPosition()).on({click:function(){if(!self.options.paused){self.playOnSubmit=true;togglePaused();} +self.$position.hide();self.$positionInput.value(formatPosition()).show().focusInput(false);}}).appendTo(self.$playerbar);self.$positionInput=Ox.Input({value:formatPosition(),width:self.positionWidth}).addClass('OxPositionInput').bindEvent({blur:submitPositionInput,submit:submitPositionInput}).appendTo(self.$playerbar);self.$positionInput.children('input').css({width:(self.positionWidth-6)+'px',fontSize:'9px'});self.$panel=Ox.SplitPanel({elements:[{element:self.$menubar,size:16},{element:self.$timelinePlayer},{element:self.$playerbar,size:16}],orientation:'vertical'}).addClass('OxVideoTimelinePlayer');that.setElement(self.$panel);self.$lines=[];self.$timelines=[];self.$timeline=renderTimeline();Ox.loop(self.lines,function(i){addLine(i);});Ox.last(self.$lines).css({height:self.tileHeight+1.5*self.margin+'px'});self.$frameBox=$('
').addClass('OxVideoBox').css({position:'absolute',right:0,top:self.margin/2-1+'px',width:self.videoWidth+'px',height:self.tileHeight+'px'}).appendTo(self.$timelines[self.videoLines[1]][0]);self.$frame=Ox.VideoPlayer({audioTrack:self.options.audioTrack,censored:self.options.censored,censoredIcon:self.options.censoredIcon,censoredTooltip:self.options.censoredTooltip,duration:self.options.duration,height:self.tileHeight,position:self.options.position,scaleToFill:true,type:'in',video:self.options.getFrameURL,width:self.videoWidth}).bindEvent({censored:function(){that.triggerEvent('censored');}}).appendTo(self.$frameBox);$('
').addClass('OxFrameInterface').css({position:'absolute',left:0,top:0,width:self.videoWidth+'px',height:self.tileHeight+'px'}).appendTo(self.$frameBox);self.$videoBox=$('
').addClass('OxVideoBox').css({position:'absolute',right:0,top:self.margin/2-1+'px',width:self.videoWidth+'px',height:self.tileHeight+'px',zIndex:5}).appendTo(self.$timelines[self.videoLines[0]][0]);self.$video=Ox.VideoPlayer({audioTrack:self.options.audioTrack,censored:self.options.censored,censoredIcon:self.options.censoredIcon,censoredTooltip:self.options.censoredTooltip,duration:self.options.duration,height:self.tileHeight,muted:self.options.muted,paused:self.options.paused,playbackRate:self.options.playbackRate,position:self.options.position,scaleToFill:true,video:self.options.video,width:self.videoWidth}).bindEvent({censored:function(){that.triggerEvent('censored');},ended:function(){togglePaused(true);},playing:function(data){self.options.position=data.position;setPosition(true);}}).appendTo(self.$videoBox);$('
').addClass('OxFrameInterface OxVideoInterface').css({position:'absolute',left:0,top:0,width:self.videoWidth+'px',height:self.tileHeight+'px'}).appendTo(self.$videoBox);self.$tooltip=Ox.Tooltip({animate:false}).css({textAlign:'center'});setTimeout(function(){scrollToPosition();});function addLine(i){self.$lines[i]=$('
').css({position:'absolute',left:self.margin+'px',top:self.margin/2+i*(self.tileHeight+self.margin)+'px',width:self.contentWidth+'px',height:self.tileHeight+self.margin+'px',overflowX:'hidden'}).appendTo(self.$timelinePlayer);self.$timelines[i]=[self.$timeline.clone(true).css({width:self.frame+self.videoWidth+'px',marginLeft:-i*self.contentWidth+'px'}),self.$timeline.clone(true).css({marginLeft:-i*self.contentWidth+self.videoWidth-1+'px'})];self.$lines[i].append(self.$timelines[i][1]).append(self.$timelines[i][0]);} +function changeVolume(num){self.options.volume=Ox.limit(self.options.volume+num,0,1);setVolume();} +function formatPosition(position){position=Ox.isUndefined(position)?self.options.position:position;return Ox.formatDuration(position,self.options.showMilliseconds);} +function getLines(scrollbarIsVisible){var lines;if(scrollbarIsVisible){self.contentWidth-=Ox.UI.SCROLLBAR_SIZE;} +lines=Math.ceil((self.frames-1+self.videoWidth)/self.contentWidth);return!scrollbarIsVisible&&lines*(self.tileHeight+self.margin)+self.margin>self.contentHeight?getLines(true):lines;} +function getPosition(e){return(e.offsetX?e.offsetX:e.clientX-$(e.target).offset().left)/self.fps;} +function getPositionScrollTop(){var scrollTop=self.$timelinePlayer.scrollTop(),videoTop=[self.margin+Ox.min(self.videoLines)*(self.tileHeight+self.margin),self.margin+Ox.max(self.videoLines)*(self.tileHeight+self.margin)],offset=self.contentHeight-self.tileHeight-self.margin;return videoTop[0]scrollTop+offset?videoTop[1]-offset:null;} +function getSmallTimeline(){var $timeline=Ox.SmallVideoTimeline({duration:self.options.duration,imageURL:self.options.smallTimelineURL,mode:'player',paused:self.options.paused,position:self.options.position,showMilliseconds:self.options.showMilliseconds,width:getSmallTimelineWidth()}).css({float:'left'}).css({background:'-moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).css({background:'-o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).css({background:'-webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(64, 64, 64, 0.5))'}).bindEvent({position:function(data){self.options.position=data.position;setPosition();that.triggerEvent('position',{position:self.options.position});}});$timeline.children().css({marginLeft:'32px'});$timeline.find('.OxInterface').css({marginLeft:'32px'});return $timeline;} +function getSmallTimelineWidth(){return self.options.width-32-self.positionWidth;} +function getSubtitle(position){var subtitle='';Ox.forEach(self.options.subtitles,function(v){if(v['in']<=position&&v.out>position){subtitle=v;return false;}});return subtitle;} +function getVideoLine(){self.videoLine=Math.floor(getVideoFrame()/self.contentWidth);} +function getVideoLines(){var videoFrame=getVideoFrame(),videoLeft=videoFrame%self.contentWidth,lines=[];lines[0]=Math.floor(videoFrame/self.contentWidth);lines[1]=lines[0]+(videoLeft+self.videoWidth>self.contentWidth?1:0) +if(videoLeft+Math.floor(self.videoWidth/2)>self.contentWidth){lines.reverse();} +return lines;} +function getVideoFrame(){return Math.floor(self.options.position*self.fps);} +function mousedown(e){var $target=$(e.target),isTimeline=$target.is('.OxTimelineInterface'),isVideo=$target.is('.OxFrameInterface');if(isTimeline){self.options.position=getPosition(e);setPosition();if(!self.triggered){that.triggerEvent('position',{position:self.options.position});self.triggered=true;setTimeout(function(){self.triggered=false;},250);}}else if(isVideo){togglePaused();}} +function mouseleave(){self.$tooltip.hide();} +function mousemove(e){var $target=$(e.target),isTimeline=$target.is('.OxTimelineInterface'),isVideo=$target.is('.OxFrameInterface'),position,subtitle;if(isTimeline||isVideo){position=isTimeline?getPosition(e):self.options.position;subtitle=getSubtitle(position);self.$tooltip.options({title:(subtitle?''+Ox.highlight(subtitle.text,self.options.find,'OxHighlight').replace(/\n/g,'
')+'

':'')+Ox.formatDuration(position,3)}).show(e.clientX,e.clientY);}else{self.$tooltip.hide();}} +function renderTimeline(){var $timeline=$('
').css({position:'absolute',width:self.frames+'px',height:self.tileHeight+self.margin+'px',overflow:'hidden'});Ox.loop(self.tiles,function(i){$('').attr({src:self.options.getLargeTimelineURL(self.options.timeline,i)}).css({position:'absolute',left:i*self.tileWidth+'px',top:self.margin/2+'px'}).data({index:i}).appendTo($timeline);});$('
').addClass('OxTimelineInterface').css({position:'absolute',left:0,top:self.margin/2+'px',width:self.frames+'px',height:self.tileHeight+'px'}).appendTo($timeline);return $timeline;} +function scroll(){updateScrollButton();if(!self.options.paused&&self.options.followPlayer){self.scrollTimeout&&clearTimeout(self.scrollTimeout);self.scrollTimeout=setTimeout(function(){scrollToPosition();self.scrollTimeout=0;},2500);}} +function scrollToPosition(){var positionScrollTop=getPositionScrollTop();positionScrollTop&&self.$timelinePlayer.stop().animate({scrollTop:positionScrollTop},250,function(){self.$scrollButton.hide();});} +function setHeight(){self.contentHeight=self.options.height-32;if(!self.options.paused&&self.options.followPlayer){self.scrollTimeout&&clearTimeout(self.scrollTimeout);scrollToPosition();}} +function setPosition(fromVideo){var isPlaying=!self.options.paused,max,min,videoLines,videoLines_;self.options.position=Ox.limit(self.options.position,0,self.options.duration);self.frame=Math.floor(self.options.position*self.fps);videoLines=getVideoLines();videoLines_=Ox.flatten([self.videoLines,videoLines]);min=Ox.min(videoLines_);max=Ox.max(videoLines_);Ox.loop(min,max+1,function(i){self.$timelines[i][0].css({width:self.frame+self.videoWidth+'px'});});if(videoLines[1]!=self.videoLines[1]){self.$frameBox.detach().appendTo(self.$timelines[videoLines[1]][0]);} +if(videoLines[0]!=self.videoLines[0]){isPlaying&&self.$video.togglePaused();self.$videoBox.detach().appendTo(self.$timelines[videoLines[0]][0]);isPlaying&&self.$video.togglePaused();} +if(videoLines[0]!=videoLines[1]){self.$frame.options({position:self.paused?self.options.position:Math.floor(self.options.position)});} +if(fromVideo&&!self.scrollTimeout&&videoLines[1]!=self.videoLines[1]&&videoLines[1]>videoLines[0]){self.videoLines=videoLines;self.options.followPlayer?scrollToPosition():updateScrollButton();}else{self.videoLines=videoLines;} +if(!fromVideo){self.$video.options({position:self.options.position});self.$frame.options({position:self.options.position});scrollToPosition();} +self.$smallTimeline.options({position:self.options.position});self.$position.html(formatPosition());that.triggerEvent(fromVideo?'playing':'position',{position:self.options.position});} +function setSubtitles(){self.$timeline.find('.OxSubtitle').remove();self.$subtitles=[];self.options.subtitles.forEach(function(subtitle,i){var found=self.options.find&&subtitle.text.toLowerCase().indexOf(self.options.find.toLowerCase())>-1;self.$subtitles[i]=$('
').addClass('OxSubtitle'+(found?' OxHighlight':'')).css({position:'absolute',left:(subtitle['in']*self.fps)+'px',width:(((subtitle.out-subtitle['in'])*self.fps)-2)+'px'}).html(Ox.highlight(subtitle.text,self.options.find,'OxHighlight')).appendTo(self.$timeline);});} +function setTimeline(){self.$timelinePlayer.empty();} +function setVolume(){self.$video.options({volume:self.options.volume});that.triggerEvent('volume',{volume:self.options.volume});} +function setWidth(){self.contentWidth=self.options.width-2*self.margin;self.lines=getLines();Ox.loop(self.lines,function(i){if(self.$lines[i]){self.$lines[i].css({width:self.contentWidth+'px'});self.$timelines[i][0].css({marginLeft:-i*self.contentWidth+'px'});self.$timelines[i][1].css({marginLeft:-i*self.contentWidth+self.videoWidth-1+'px'});}else{addLine(i);}});while(self.$lines.length>self.lines){self.$lines[self.$lines.length-1].remove();self.$lines.pop();self.$timelines.pop();} +Ox.last(self.$lines).css({height:self.tileHeight+1.5*self.margin+'px'});if(!self.options.paused&&self.options.followPlayer){self.scrollTimeout&&clearTimeout(self.scrollTimeout);scrollToPosition();} +self.$smallTimeline.options({width:getSmallTimelineWidth()})} +function submitPositionInput(){self.$positionInput.hide();self.$position.html('').show();self.options.position=Ox.parseDuration(self.$positionInput.value());setPosition();if(self.playOnSubmit){togglePaused();self.playOnSubmit=false;} +that.triggerEvent('position',{position:self.options.position});} +function toggleMuted(){self.options.muted=!self.options.muted;self.$video.options({muted:self.options.muted});self.$muteButton.options({title:self.options.muted?'unmute':'mute',tooltip:self.options.muted?Ox._('Unmute'):Ox._('Mute')});that.triggerEvent('muted',{muted:self.options.muted});} +function togglePaused(fromVideo){self.options.paused=!self.options.paused;if(!self.options.paused&&self.options.followPlayer){self.scrollTimeout&&clearTimeout(self.scrollTimeout);scrollToPosition();} +!fromVideo&&self.$video.options({paused:self.options.paused});self.$playButton.options({title:self.options.paused?'play':'pause'});} +function updateScrollButton(){var scrollTop=self.$timelinePlayer.scrollTop(),positionScrollTop=getPositionScrollTop();if(positionScrollTop===null){self.$scrollButton.hide();}else{self.$scrollButton.options({title:positionScrollTop-1?self.options.items[self.selected].id:'';} +function getSelectedPosition(){return Ox.getIndexById(self.options.items,self.options.selected);} +function renderItems(blur){if(self.editing){self.options.items[getSelectedPosition()].value=that.find(self.options.type+':visible').val();} +that.empty();if(self.options.items.length==0){self.$items=[Ox.Editable({editable:false,placeholder:self.options.placeholder,type:self.options.type,value:''}).appendTo(that)];}else{sortItems();if(self.options.highlightGroup){var selectedItem=Ox.getObjectById(self.options.items,self.options.selected)||{};} +self.$items=self.options.items.map(function appendItem(item,i){if(i&&self.options.type=='input'){$('').addClass('OxSeparator').html(self.options.separator+' ').appendTo(that);} +return Ox.Editable({autocomplete:self.options.autocomplete,autocompleteReplace:self.options.autocompleteReplace,autocompleteReplaceCorrect:self.options.autocompleteReplaceCorrect,autocompleteSelect:self.options.autocompleteSelect,autocompleteSelectHighlight:self.options.autocompleteSelectHighlight,autocompleteSelectMaxWidth:self.options.autocompleteSelectMaxWidth,autocompleteSelectOffset:self.options.autocompleteSelectOffset,autocompleteSelectSubmit:self.options.autocompleteSelectSubmit,autocompleteSelectUpdate:self.options.autocompleteSelectUpdate,blurred:self.editing&&i==self.selected?blur:false,clickLink:self.options.clickLink,editable:self.options.editable&&item.editable,editing:self.editing&&i==self.selected,format:self.options.format,globalAttributes:self.options.globalAttributes,highlight:self.options.highlight,maxHeight:self.options.maxHeight,submitOnBlur:self.options.submitOnBlur,type:self.options.type,unformat:self.options.unformat,value:item.value,width:self.options.type=='input'?0:self.options.width-9}).addClass(item.id==self.options.selected?'OxSelected':'').addClass(self.options.highlightGroup&&item.group==selectedItem.group?'OxGroup':'').data({id:item.id,position:i}).bindEvent({blur:function(data){that.gainFocus();that.triggerEvent('blur',{id:item.id,value:data.value});self.blurred=true;setTimeout(function(){self.blurred=false;},250);},cancel:function(data){var id=$(this).data('id');self.editing=false;that.gainFocus();data.value===''?submitItem(id,''):that.triggerEvent('blur',data);},change:function(data){that.triggerEvent('change',{id:item.id,value:data.value});},edit:function(){if(item.id!=self.options.selected){selectItem(item.id);} +self.editing=true;that.$tooltip&&that.$tooltip.options({title:''});that.triggerEvent('edit');},insert:function(data){that.triggerEvent('insert',data);},open:function(data){that.triggerEvent('open');},submit:function(data){var id=$(this).data('id');self.editing=false;that.gainFocus();submitItem(id,data.value);}}).appendTo(that);});}} +function selectFirst(){if(self.selected>-1){self.selected>0?selectItem(0):that.triggerEvent('selectprevious');}} +function selectItem(idOrPosition){if(Ox.isString(idOrPosition)){self.options.selected=idOrPosition;self.selected=getSelectedPosition();}else{self.selected=idOrPosition;self.options.selected=getSelectedId();} +if(self.editing){self.editing=false;that.blurItem();} +that.find('.OxSelected').removeClass('OxSelected');that.find('.OxGroup').removeClass('OxGroup') +if(self.selected>-1){self.$items[self.selected].addClass('OxSelected');self.options.highlightGroup&&that.updateItemGroup()} +triggerSelectEvent();} +function selectLast(){if(self.selected>-1){self.selected-1){self.selected-1){self.selected>0?selectItem(self.selected-1):that.triggerEvent('selectprevious');}} +function singleclick(e){var $target=$(e.target),$element=$target.is('.OxEditableElement')?$target:$target.parents('.OxEditableElement'),position;if(!$target.is('.OxInput')){if($element.length){position=$element.data('position');if(position!=self.selected){selectItem(position);}else if(e.metaKey){selectNone();}}else if(!self.blurred){if(self.editing){that.blurItem();}else{if(self.selected>-1){selectNone();}else{that.triggerEvent('selectnone');}}} +that.gainFocus();}} +function sortItems(){if(!Ox.isEmpty(self.options.sort)){self.options.items=Ox.sortBy(self.options.items,self.options.sort,self.options.getSortValue?{value:self.options.getSortValue}:{});self.selected=getSelectedPosition();}} +function submitItem(id,value){var item=Ox.getObjectById(self.options.items,id);Ox.Log('AE','submitItem',id,item) +if(value===''){deleteItem(item.id);}else{that.triggerEvent(item.value===value?'blur':'submit',{id:item.id,value:value});item.value=value;}} +function tooltip(e){var $target=$(e.target),$element=$target.closest('.OxEditableElement'),position=$element.data('position'),item=self.options.items[position],isLink=$target.closest('a').length,click=isLink?'Shift-click':'Click',doubleclick=isLink?'shift-doubleclick':'doubleclick';return item===undefined||self.editing?'':(self.options.tooltipText?self.options.tooltipText(item)+'
':'')+(self.options.editable?Ox._(click+' to select')+(item.editable?Ox._(', '+doubleclick+' to edit'):''):'');} +var triggerSelectEvent=Ox.debounce(function(){that.triggerEvent('select',{id:self.options.selected});},true);that.addItem=function(position,item){if(self.options.editable){self.options.items.splice(position,0,item);renderItems();} +return that;};that.blurItem=function(){self.editing=false;self.$items.forEach(function($item){$item.options({editing:false});});return that;};that.editItem=function(){Ox.Log('AE','EDIT ITEM',self.options.editable,self.options.selected);if(self.options.editable&&self.options.selected){self.editing=true;self.$items[self.selected].options({editing:true});that.$tooltip&&that.$tooltip.options({title:''});}else if(!self.options.editable){that.triggerEvent('open');} +return that;};that.reloadItems=function(){renderItems();return that;};that.removeItem=function(){if(self.options.editable&&self.options.selected){deleteItem();} +return that;};that.updateItem=function(value){if(self.options.selected){self.$items[self.selected].options({value:value});}};that.updateItemGroup=function(){var group=self.selected>-1?self.options.items[self.selected].group:'';self.$items.forEach(function($item,index){$item[self.options.highlightGroup&&group&&self.options.items[index].group==group?'addClass':'removeClass']('OxGroup');});} +return that;};'use strict';Ox.ArrayInput=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({input:{get:Ox.Input,getEmpty:function(){return'';},isEmpty:function(value){return value==='';},setWidth:function($input,width){$input.options({width:width});}},label:'',max:0,sort:false,value:[],width:256}).options(options||{}).update({value:setValue,width:setWidths});self.options.value=self.options.value||[];if(self.options.label){self.$label=Ox.Label({title:self.options.label,width:self.options.width}).appendTo(that);} +self.$element=[];self.$input=[];self.$removeButton=[];self.$addButton=[];(self.options.value.length?self.options.value:[self.options.input.getEmpty()]).forEach(function(value,i){addInput(i,value);});self.options.value=getValue();function addInput(index,value,focus){self.$element.splice(index,0,Ox.Element().css({height:'16px',marginTop:self.options.label||index>0?'8px':0}).data({index:index}));if(index==0){self.$element[index].appendTo(that);}else{self.$element[index].insertAfter(self.$element[index-1]);} +self.$input.splice(index,0,self.options.input.get({width:self.options.width-48}).css({float:'left'}).bindEvent({change:function(data){if(self.options.sort&&!self.options.input.isEmpty(data.value)){sortInputs();} +self.options.value=getValue();that.triggerEvent('change',{value:self.options.value});}}).appendTo(self.$element[index]));if(value){self.$input[index].options({value:value})} +if(focus&&self.$input[index].focusInput){self.$input[index].focusInput(true);} +self.$removeButton.splice(index,0,Ox.Button({title:self.$input.length==1?'close':'remove',type:'image'}).css({float:'left',marginLeft:'8px'}).on({click:function(){var index=$(this).parent().data('index');if(!self.options.input.isEmpty(self.$input[index])){self.$input[index].value(self.options.input.getEmpty());self.options.value=getValue();that.triggerEvent('change',{value:self.options.value});} +if(self.$input.length==1){if(self.$input[0].focusInput){self.$input[0].focusInput(true);}}else{removeInput(index);that.triggerEvent('remove');}}}).appendTo(self.$element[index]));self.$addButton.splice(index,0,Ox.Button({disabled:index==self.options.max-1,title:'add',type:'image'}).css({float:'left',marginLeft:'8px'}).on({click:function(){var index=$(this).parent().data('index');addInput(index+1,self.options.input.getEmpty(),true);that.triggerEvent('add');}}).appendTo(self.$element[index]));updateInputs();} +function getValue(){return Ox.map(self.$input,function($input){return $input.value();}).filter(function(value){return!self.options.input.isEmpty(value);});};function removeInput(index){Ox.Log('Form','remove',index);['input','removeButton','addButton','element'].forEach(function(element){var key='$'+element;self[key][index].remove();self[key].splice(index,1);});updateInputs();} +function setValue(){while(self.$input.length){removeInput(0);} +(self.options.value.length?self.options.value:[self.options.input.getEmpty()]).forEach(function(value,i){addInput(i,value);});} +function setWidths(){self.$label&&self.$label.options({width:self.options.width});self.$element.forEach(function($element,i){$element.css({width:self.options.width+'px'});self.options.input.setWidth(self.$input[i],self.options.width-48);});} +function sortInputs(){Ox.sort(self.$element,function($element){return self.$input[$element.data('index')].value();}).forEach(function($element){$element.detach();});self.$element.forEach(function($element,i){$element.data({index:i}).appendTo(that);});} +function updateInputs(){self.$element.forEach(function($element,i){$element.data({index:i});self.$removeButton[i].options({title:self.$element.length==1?'close':'remove'});self.$addButton[i].options({disabled:self.$element.length==self.options.max});});} +that.setErrors=function(values){self.$input.forEach(function($input){$input[values.indexOf($input.value())>-1?'addClass':'removeClass']('OxError');});};return that;};'use strict';Ox.Button=function(options,self){self=self||{};var that=Ox.Element('',self).defaults({disabled:false,group:false,id:'',overlap:'none',selectable:false,size:'medium',style:'default',title:'',tooltip:'',type:'text',value:void 0,values:[],width:'auto'}).options(Ox.isArray(options.tooltip)?Ox.extend(Ox.clone(options),{tooltip:options.tooltip[0]}):options||{}).update({disabled:setDisabled,tooltip:function(){if(Ox.isArray(self.options.tooltip)&&that.$tooltip){that.$tooltip.options({title:self.options.tooltip[self.value]});}},title:setTitle,value:function(){setValue();setTitle();self.options.selectable&&setSelected();},values:function(){setValue();setTitle();},width:function(){that.css({width:(self.options.width-14)+'px'});}}).addClass('OxButton Ox'+Ox.toTitleCase(self.options.size) ++(self.options.disabled?' OxDisabled':'') ++(self.options.selectable&&self.options.value?' OxSelected':'') ++(self.options.style!='default'?' Ox'+Ox.toTitleCase(self.options.style):'') ++(self.options.overlap!='none'?' OxOverlap'+Ox.toTitleCase(self.options.overlap):'')).attr({disabled:self.options.disabled,type:self.options.type=='text'?'button':'image'}).css(self.options.width=='auto'?{}:{width:(self.options.width-14)+'px'}).on({click:click,mousedown:mousedown});if(self.options.values.length){self.options.values=self.options.values.map(function(value){return{id:value.id||value,title:value.title||value};});self.value=Ox.getIndexById(self.options.values,self.options.value);if(self.value==-1){self.value=0;self.options.value=self.options.values[0].id;} +self.options.title=self.options.values[self.value].title;}else if(self.options.selectable){self.options.value=self.options.value||false;} +setValue();setTitle();if(Ox.isArray(options.tooltip)){self.options.tooltip=options.tooltip;if(!that.$tooltip){that.$tooltip=Ox.Tooltip();} +that.$tooltip.options({title:self.options.tooltip[self.value]});} +function click(){if(!self.options.disabled){that.$tooltip&&that.$tooltip.hide();that.triggerEvent('click');if(self.options.values.length||self.options.selectable){that.toggle();that.triggerEvent('change',{value:self.options.value});}}} +function mousedown(e){if(self.options.type=='image'&&$.browser.safari){e.preventDefault();}} +function setDisabled(){that.attr({disabled:self.options.disabled});that[self.options.disabled?'addClass':'removeClass']('OxDisabled');self.options.disabled&&that.$tooltip&&that.$tooltip.hide();self.options.type=='image'&&setTitle();} +function setSelected(){that[self.options.value?'addClass':'removeClass']('OxSelected');self.options.type=='image'&&setTitle();} +function setTitle(){if(self.options.type=='image'){that.attr({src:Ox.UI.getImageURL('symbol'+self.options.title[0].toUpperCase() ++self.options.title.slice(1),self.options.style=='overlay'?'overlay'+(self.options.disabled?'Disabled':self.options.selectable&&self.options.value?'Selected':''):self.options.style=='video'?'video':self.options.disabled?'disabled':self.options.selectable&&self.options.value?'selected':'')});}else{that.val(self.options.title);}} +function setValue(){if(self.options.values.length){self.options.values=self.options.values.map(function(value){return{id:value.id||value,title:value.title||value};});self.value=Ox.getIndexById(self.options.values,self.options.value);if(self.value==-1){self.value=0;self.options.value=self.options.values[0].id;} +self.options.title=self.options.values[self.value].title;}else if(self.options.selectable){self.options.value=self.options.value||false;}} +that.toggle=function(){if(self.options.values.length>1){self.value=1-Ox.getIndexById(self.options.values,self.options.value);self.options.title=self.options.values[self.value].title;self.options.value=self.options.values[self.value].id;setTitle();that.$tooltip&&that.$tooltip.options({title:self.options.tooltip[self.value]});}else{self.options.value=!self.options.value;} +self.options.selectable&&setSelected();return that;} +return that;};'use strict';Ox.ButtonGroup=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({buttons:[],max:1,min:1,overlap:'none',selectable:false,size:'medium',style:'default',type:'text',value:options.max!=1?[]:''}).options(options||{}).update({value:function(){var position=Ox.getIndexById(self.options.buttons,self.options.value);if(position>-1){self.$buttons[position].trigger('click');}else if(self.options.min==0){self.$buttons.forEach(function($button,i){$button.options('value')&&$button.trigger('click');});}}}).addClass('OxButtonGroup' ++(self.options.style!='default'?' Ox'+Ox.toTitleCase(self.options.style):'') ++(self.options.overlap!='none'?' OxOverlap'+Ox.toTitleCase(self.options.overlap):''));self.options.buttons=self.options.buttons.map(function(button,i){return Ox.extend({disabled:button.disabled,id:button.id||button,overlap:self.options.overlap=='left'&&i==0?'left':self.options.overlap=='right'&&i==self.options.buttons.length-1?'right':'none',style:self.options.style,title:button.title||button,tooltip:button.tooltip,width:button.width},self.options.selectable?{selected:Ox.makeArray(self.options.value).indexOf(button.id||button)>-1}:{});});if(self.options.selectable){self.optionGroup=new Ox.OptionGroup(self.options.buttons,self.options.min,self.options.max,'selected');self.options.buttons=self.optionGroup.init();self.options.value=self.optionGroup.value();} +self.$buttons=[];self.options.buttons.forEach(function(button,pos){self.$buttons[pos]=Ox.Button({disabled:button.disabled||false,group:true,id:button.id,overlap:button.overlap,selectable:self.options.selectable,size:self.options.size,style:self.options.style=='squared'?'default':self.options.style,title:button.title,tooltip:button.tooltip,type:self.options.type,value:button.selected||false,width:button.width}).bindEvent(self.options.selectable?{change:function(){toggleButton(pos);}}:{click:function(){that.triggerEvent('click',{id:button.id});}}).appendTo(that);});function getButtonById(id){return self.$buttons[Ox.getIndexById(self.options.buttons,id)];} +function toggleButton(pos){var toggled=self.optionGroup.toggle(pos);if(!toggled.length){self.$buttons[pos].value(!self.$buttons[pos].value());}else{toggled.forEach(function(i){i!=pos&&self.$buttons[i].value(!self.$buttons[i].value());});self.options.value=self.optionGroup.value();that.triggerEvent('change',{title:self.options.value===''?'':Ox.isString(self.options.value)?Ox.getObjectById(self.options.buttons,self.options.value).title:self.options.value.map(function(value){return Ox.getObjectById(self.options.buttons,value).title;}),value:self.options.value});}} +that.disableButton=function(id){getButtonById(id).options({disabled:true});};that.enableButton=function(id){getButtonById(id).options({disabled:false});};that.buttonOptions=function(id,options){return getButtonById(id).options(options);};return that;};'use strict';Ox.Checkbox=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({disabled:false,group:false,indeterminate:false,label:'',labelWidth:64,overlap:'none',style:'rounded',title:'',value:false,width:options&&(options.label||options.title)?'auto':16}).options(options||{}).update({disabled:function(){var disabled=self.options.disabled;that.attr({disabled:disabled});self.$button.options({disabled:disabled});self.$title&&self.$title.options({disabled:disabled});},indeterminate:function(){if(self.options.indeterminate){self.$button.options({values:['remove']});self.$button.options({value:'remove'});}else{self.$button.options({values:['none','check']});self.$button.options({value:self.options.value?'check':'none'});}},label:function(){self.$label.options({title:self.options.label});},title:function(){self.$title.options({title:self.options.title});},value:function(){self.$button.toggle();},width:function(){that.css({width:self.options.width+'px'});self.$title&&self.$title.options({width:getTitleWidth()});}}).addClass('OxCheckbox'+(self.options.overlap=='none'?'':' OxOverlap'+Ox.toTitleCase(self.options.overlap))).attr({disabled:self.options.disabled}).css(self.options.width!='auto'?{width:self.options.width}:{});if(self.options.title){self.options.width!='auto'&&that.css({width:self.options.width+'px'});self.$title=Ox.Label({disabled:self.options.disabled,id:self.options.id+'Label',overlap:'left',style:self.options.style,title:self.options.title,width:getTitleWidth()}).css({float:'right'}).on({click:clickTitle}).appendTo(that);} +if(self.options.label){self.$label=Ox.Label({overlap:'right',textAlign:'right',title:self.options.label,width:self.options.labelWidth}).css({float:'left'}).appendTo(that);} +self.$button=Ox.Button({disabled:self.options.disabled,id:self.options.id+'Button',style:self.options.style!='rounded'?self.options.style:'',type:'image',value:self.options.indeterminate?'remove':self.options.value?'check':'none',values:self.options.indeterminate?['remove']:['none','check']}).addClass('OxCheckbox').bindEvent({change:clickButton}).appendTo(that);function clickButton(){self.options.value=!self.options.value;if(self.options.indeterminate){self.options.indeterminate=false;self.$button.options({values:['none','check']});self.$button.options({value:self.options.value?'check':'none'});} +that.triggerEvent('change',{value:self.options.value});} +function clickTitle(){!self.options.disabled&&self.$button.trigger('click');} +function getTitleWidth(){return self.options.width-16 +-!!self.options.label*self.options.labelWidth;} +return that;};'use strict';Ox.CheckboxGroup=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({checkboxes:[],max:1,min:1,type:'group',value:options.max!=1?[]:'',width:256}).options(options||{}).update({value:function(){var value=Ox.clone(self.options.value);self.$checkboxes.forEach(function($checkbox,index){var checked=Ox.contains(value,$checkbox.options('id'));if(checked!=$checkbox.value()){$checkbox.value(!$checkbox.value());toggleCheckbox(index);}});},width:function(){self.$checkboxes.forEach(function($checkbox){$checkbox.options({width:self.options.width});});}}).addClass('OxCheckboxGroup Ox'+Ox.toTitleCase(self.options.type));self.options.checkboxes=self.options.checkboxes.map(function(checkbox){return{checked:Ox.makeArray(self.options.value).indexOf(checkbox.id||checkbox)>-1,id:checkbox.id||checkbox,title:checkbox.title||checkbox};});self.optionGroup=new Ox.OptionGroup(self.options.checkboxes,self.options.min,self.options.max,'checked');self.options.checkboxes=self.optionGroup.init();self.options.value=self.optionGroup.value();self.$checkboxes=[];if(self.options.type=='group'){self.checkboxWidth=Ox.splitInt(self.options.width+(self.options.checkboxes.length-1)*6,self.options.checkboxes.length).map(function(v,i){return v+(i':'',tooltip:options.tooltip},self).defaults({blurred:false,clickLink:null,editable:true,editing:false,format:null,globalAttributes:[],height:0,highlight:null,maxHeight:void 0,placeholder:'',submitOnBlur:true,tags:null,tooltip:'',type:'input',unformat:null,value:'',width:0}).options(options||{}).update({editing:function(){if(self.options.editing){self.options.editing=false;edit();}else{submit();}},height:function(){setCSS({height:self.options.height+'px'});},width:function(){setCSS({width:self.options.width+'px'});},highlight:function(){formatValue();},placeholder:function(){formatValue();},value:function(){formatValue();self.$input&&self.$input.options({value:formatInputValue()});}}).addClass('OxEditableElement OxKeyboardFocus' ++(self.options.editable?' OxEditable':'')).on({click:function(e){var $target=$(e.target);if(!e.shiftKey&&($target.is('a')||($target=$target.parents('a')).length)){e.preventDefault();if(self.options.clickLink){e.target=$target[0];self.options.clickLink(e);}else{document.location.href=$target.attr('href');}} +return false;}}).bindEvent({doubleclick:edit,singleclick:function(e){}});self.options.value=self.options.value.toString();self.css={};self.$value=Ox.Element(self.options.type=='input'?'':'
').addClass('OxValue').appendTo(that);formatValue();if(self.options.editing){setTimeout(function(){self.options.editing=false;edit();});} +function blur(data){self.options.value=parseValue();if(self.options.value!==self.originalValue){self.originalValue=self.options.value;that.triggerEvent('change',{value:self.options.value});} +that.triggerEvent('blur',data);} +function cancel(){self.options.editing=false;that.removeClass('OxEditing');self.options.value=self.originalValue;self.$input.value(formatInputValue()).hide();self.$test.html(formatTestValue());formatValue();self.$value.show();that.triggerEvent('cancel',{value:self.options.value});} +function change(data){self.options.value=parseValue(data.value);formatValue();self.$test.html(formatTestValue());setSizes();} +function edit(){var height,width;if(self.options.editable&&!self.options.editing){self.options.editing=true;that.addClass('OxEditing');self.originalValue=self.options.value;if(!self.$input){self.$input=Ox.Input({autocomplete:self.options.autocomplete,autocompleteReplace:self.options.autocompleteReplace,autocompleteReplaceCorrect:self.options.autocompleteReplaceCorrect,autocompleteSelect:self.options.autocompleteSelect,autocompleteSelectHighlight:self.options.autocompleteSelectHighlight,autocompleteSelectMaxWidth:self.options.autocompleteSelectMaxWidth,autocompleteSelectOffset:self.options.autocompleteSelectOffset,autocompleteSelectSubmit:self.options.autocompleteSelectSubmit,autocompleteSelectUpdate:self.options.autocompleteSelectUpdate,changeOnKeypress:true,element:self.options.type=='input'?'':'
',style:'square',type:self.options.type,value:formatInputValue()}).css(self.css).bindEvent({blur:self.options.submitOnBlur?submit:blur,cancel:cancel,change:change,insert:function(data){that.triggerEvent('insert',data);},submit:submit}).appendTo(that);self.$input.find('input').css(self.css);self.$test=self.$value.clone().css(Ox.extend({display:'inline-block'},self.css)).html(formatTestValue()).css({background:'rgb(192, 192, 192)'}).appendTo(that);} +self.minWidth=8;self.maxWidth=that.parent().width();self.minHeight=13;self.maxHeight=self.options.type=='input'?self.minHeight:self.options.maxHeight||that.parent().height();setSizes();self.$value.hide();self.$input.show();if(!self.options.blurred){setTimeout(function(){self.$input.focusInput(self.options.type=='input');},0);that.$tooltip&&that.$tooltip.options({title:''});that.triggerEvent('edit');}}else if(!self.options.editable){that.triggerEvent('open');} +self.options.blurred=false;} +function formatInputValue(){return self.options.type=='input'?(self.options.unformat||Ox.decodeHTMLEntities)(self.options.value):self.options.value.replace(//g,'\n\n');} +function formatTestValue(){var value=Ox.encodeHTMLEntities((self.options.unformat||Ox.identity)(self.$input.options('value')));return!value?' ':self.options.type=='input'?value.replace(/ /g,' '):value.replace(/\n$/,'\n ').replace(/ /g,'  ').replace(/(^ | $)/,' ').replace(/\n/g,'
')} +function formatValue(){var value=self.options.value;that.removeClass('OxPlaceholder');if(self.options.value===''&&self.options.placeholder){value=self.options.placeholder;that.addClass('OxPlaceholder');}else if(self.options.format){value=self.options.format(self.options.value);} +if(self.options.highlight){value=Ox.highlight(value,self.options.highlight,'OxHighlight',true);} +self.$value.html(value);self.$value[self.options.value===''?'removeClass':'addClass']('OxSelectable');} +function parseValue(){var value=Ox.clean(self.$input.value().replace(/\n\n+/g,'\0')).replace(/\0/g,'\n\n').trim();return(self.options.type=='input'?Ox.encodeHTMLEntities(value):Ox.sanitizeHTML(value,self.options.tags,self.options.globalAttributes));} +function setCSS(css){self.$test&&self.$test.css(css);self.$input&&self.$input.css(css);self.$input&&self.$input.find(self.options.type).css(css);} +function setSizes(){var height,width;self.$test.css({display:'inline-block'});height=self.options.height||Ox.limit(self.$test.height(),self.minHeight,self.maxHeight);width=self.$test.width();if(self.options.type=='textarea'){width+=Ox.UI.SCROLLBAR_SIZE;} +width=self.options.width||Ox.limit(width,self.minWidth,self.maxWidth);self.$test.css({display:'none'});self.$input.options({width:width,height:height});self.$input.find(self.options.type).css({width:width+'px',height:height+'px'});} +function submit(){self.options.editing=false;that.removeClass('OxEditing');self.$input.value(formatInputValue()).hide();self.$test.html(formatTestValue());formatValue();self.$value.show();that.$tooltip&&that.$tooltip.options({title:self.options.tooltip});that.triggerEvent('submit',{value:self.options.value});} +that.css=function(css){self.css=css;that.$element.css(css);self.$value.css(css);self.$test&&self.$test.css(css);self.$input&&self.$input.css(css);return that;};return that;};Ox.EditableContent=function(options,self){self=self||{};if(options.tooltip){self.tooltip=options.tooltip;options.tooltip=function(e){return that.hasClass('OxEditing')?'':Ox.isString(self.tooltip)?self.tooltip:self.tooltip(e);}} +var that=Ox.Element(options.type=='textarea'?'
':'',self).defaults({clickLink:null,collapseToEnd:true,editable:true,editing:false,format:null,globalAttributes:[],highlight:null,placeholder:'',submitOnBlur:true,tags:null,tooltip:'',type:'input',value:''}).options(options||{}).update({editing:function(){if(self.options.editing){self.options.editing=false;edit();}else{submit();}},placeholder:function(){!self.options.editing&&that.html(formatValue());},highlight:function(){!self.options.editing&&that.html(formatValue());},value:function(){!self.options.editing&&that.html(formatValue());}}).addClass('OxEditableContent OxKeyboardFocus').on({blur:self.options.submitOnBlur?submit:blur,click:function(e){var $target=$(e.target);if(!e.shiftKey&&($target.is('a')||($target=$target.parents('a')).length)){e.preventDefault();if(self.options.clickLink){e.target=$target[0];self.options.clickLink(e);}else{document.location.href=$target.attr('href');}} +return false;},keydown:function(e){if(e.keyCode==13){if(e.shiftKey||self.options.type=='input'){submit();}else{var selection=window.getSelection(),node=selection.anchorNode,offset=selection.anchorOffset,range=document.createRange(),text=node.textContent;e.preventDefault();node.textContent=text.substr(0,offset) ++'\n'+(text.substr(offset)||' ');range.setStart(node,offset+1);range.setEnd(node,offset+1);selection.removeAllRanges();selection.addRange(range);} +return false;}else if(e.keyCode==27){cancel();return false;} +setTimeout(function(){that.css({padding:that.text()?0:'0 2px'});});},paste:function(e){if(e.originalEvent.clipboardData&&e.originalEvent.clipboardData.getData){var value=e.originalEvent.clipboardData.getData('text/plain');value=Ox.encodeHTMLEntities(value).replace(/\n\n\n/g,'

\n');document.execCommand('insertHTML',false,value);e.originalEvent.stopPropagation();e.originalEvent.preventDefault();return false;}}}).bindEvent({doubleclick:edit});self.options.value=self.options.value.toString();that.html(formatValue());if(self.options.editing){setTimeout(function(){self.options.editing=false;edit();});} +function blur(){} +function cancel(){if(self.options.editing){that.loseFocus();self.options.editing=false;that.removeClass('OxEditing').attr({contenteditable:false}).html(formatValue());if(self.options.type=='input'){that.css({padding:0});} +that.triggerEvent('cancel',{value:self.options.value});}} +function edit(){if(self.options.editable&&!self.options.editing){var value=formatInputValue();that.$tooltip&&that.$tooltip.remove();that.addClass('OxEditing').removeClass('OxPlaceholder').attr({contenteditable:true});if(value){that.text(value);}else{that.text('');if(self.options.type=='input'){that.css({padding:'0 2px'});}} +self.options.editing=true;that.gainFocus();setTimeout(updateSelection);that.triggerEvent('edit');}else if(!self.options.editable){that.triggerEvent('open');}} +function formatInputValue(){return self.options.type=='input'?Ox.decodeHTMLEntities(self.options.value):self.options.value.replace(//g,'\n\n');} +function formatValue(){var value=self.options.value;that.removeClass('OxPlaceholder');if(self.options.value===''&&self.options.placeholder){value=self.options.placeholder;that.addClass('OxPlaceholder');}else if(self.options.format){value=self.options.format(self.options.value);} +if(self.options.highlight){value=Ox.highlight(value,self.options.highlight,'OxHighlight',true);} +that[self.options.value===''?'removeClass':'addClass']('OxSelectable');return value;} +function parseValue(){var value=Ox.clean(that.text().replace(/\n\n+/g,'\0')).replace(/\0/g,'\n\n').trim();return(self.options.type=='input'?Ox.encodeHTMLEntities(value):Ox.sanitizeHTML(value,self.options.tags,self.options.globalAttributes));} +function submit(){if(self.options.editing){that.loseFocus();self.options.editing=false;self.options.value=parseValue();that.removeClass('OxEditing').attr({contenteditable:false}).html(formatValue());if(self.options.type=='input'){that.css({padding:0});} +that.triggerEvent('submit',{value:self.options.value});}} +function updateSelection(){var range=document.createRange(),selection=window.getSelection();that[0].focus();if(self.options.collapseToEnd){selection.removeAllRanges();range.selectNodeContents(that[0]);selection.addRange(range);} +setTimeout(function(){selection.collapseToEnd();});} +return that;};'use strict';Ox.FileButton=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({disabled:false,image:options&&options.maxFiles==1?'file':'files',maxFiles:-1,maxSize:-1,style:'default',title:'',type:'text',width:options.type=='image'?16:256}).options(options||{}).update({disabled:function(){self.$button.options({disabled:self.options.disabled});self.$input[self.options.disabled?'hide':'show']();},title:function(){self.$button.options({title:self.options.title});}}).addClass('OxFileButton').css({overflow:'hidden'});self.files=[];self.multiple=self.options.maxFiles!=1;self.$button=Ox.Button({disabled:self.options.disabled,style:self.options.style,title:self.options.type=='image'?self.options.image:self.options.title,type:self.options.type,width:self.options.type=='image'?'auto':self.options.width}).css({float:'left'}).appendTo(that);self.$input=renderInput();self.options.disabled&&self.$input.hide();function selectFiles(e){var filelist=e.target.files,files=[];self.files=[];Ox.loop(filelist.length,function(i){files.push(filelist.item(i));});files.sort(self.options.maxSize==-1?function(a,b){a=a.name.toLowerCase();b=b.name.toLowerCase();return ab?1:0;}:function(a,b){return a.size-b.size;}).forEach(function(file){if((self.options.maxFiles==-1||self.files.length').attr(Ox.extend({title:self.options.title,type:'file'},self.multiple?{multiple:true}:{})).css({float:'left',width:self.options.width+'px',height:'16px',marginLeft:-self.options.width+'px',opacity:0}).on({change:selectFiles}).appendTo(that);} +that.blurButton=function(){self.$input.blur();};that.focusButton=function(){self.$input.focus();};return that;} +'use strict';Ox.FileInput=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({disabled:false,label:'',labelWidth:128,maxFiles:-1,maxLines:-1,maxSize:-1,value:[],width:256}).options(options||{}).update({disabled:function(){that[self.options.disabled?'addClass':'removeClass']('OxDisabled');self.$button.options({disabled:self.options.disabled});self.$input&&self.$input[self.options.disabled?'hide':'show']();},label:function(){self.$label&&self.$label.options({title:self.options.label});}}).addClass('OxFileInput'+(self.options.disabled?' OxDisabled':'')).css({width:self.options.width+'px'});self.multiple=self.options.maxFiles!=1;self.size=getSize();if(self.options.label){self.$label=Ox.Label({overlap:'right',textAlign:'right',title:self.options.label,width:self.options.labelWidth}).appendTo(that);} +self.$bar=Ox.Bar({size:14}).css(Ox.extend({width:getWidth()-2+'px'},self.multiple&&self.options.value.length?{borderBottomLeftRadius:0,borderBottomRightRadius:0}:{})).appendTo(that);self.$title=$('
').css({float:'left',width:getWidth()-104+'px',paddingLeft:'6px',overflow:'hidden',textOverflow:'ellipsis'}).html(getTitleText()).appendTo(self.$bar);self.$size=$('
').css({float:'left',width:'64px',height:'14px',paddingRight:'16px',textAlign:'right'}).html(getSizeText()).appendTo(self.$bar);self.$button=Ox.Button({disabled:self.options.disabled,style:'symbol',title:self.multiple||self.options.value.length==0?'add':'close',type:'image'}).attr({title:self.multiple||self.options.value.length==0?'':'Clear'}).css({float:'left',marginTop:'-1px'}).bindEvent({click:clearFile}).appendTo(self.$bar);if(self.multiple||self.options.value.length==0){self.$input=renderInput();self.options.disabled&&self.$input.hide();} +if(self.multiple){self.$files=$('
').addClass('OxFiles').css({width:getWidth()-2+'px',height:getHeight()}).appendTo(that);self.options.value.length==0&&self.$files.hide();self.$list=Ox.TableList({columns:[{id:'name',visible:true,width:getWidth()-94},{align:'right',format:function(value){return Ox.formatValue(value,'B');},id:'size',visible:true,width:64},{align:'right',format:function(value,data){return Ox.Button({style:'symbol',title:'close',type:'image'}).attr({title:Ox._('Remove File')}).css({margin:'-1px -4px 0 0'}).bindEvent({click:function(){self.$list.options({selected:[value]});removeFiles([value]);}});},id:'id',visible:true,width:28}],items:getItems(),sort:[{key:'name',operator:'+'}],unique:'id'}).css({left:0,top:0,width:getWidth()-2+'px',height:'64px'}).bindEvent({'delete':function(data){removeFiles(data.ids);}}).appendTo(self.$files);} +function addFiles(e){var filelist=e.target.files,files=[];Ox.loop(filelist.length,function(i){files.push(filelist.item(i));});files.sort(self.options.maxSize==-1?function(a,b){a=a.name.toLowerCase();b=b.name.toLowerCase();return ab?1:0;}:function(a,b){return a.size-b.size;}).forEach(function(file){if(!exists(file)&&(self.options.maxFiles==-1||self.options.value.length').attr(Ox.extend({title:self.multiple?Ox._('Add Files'):Ox._('Select File'),type:'file'},self.multiple?{multiple:true}:{})).css({float:'left',width:'16px',height:'14px',margin:'-1px -7px 0 -16px',opacity:0}).on({change:addFiles}).appendTo(self.$bar);} +that.clear=function(){clearFile();return that;};return that;};'use strict';Ox.Filter=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({findKeys:[],list:null,listName:Ox._('Smart List'),sortKeys:[],value:{conditions:[],operator:'&'},viewKeys:[]}).options(options||{}).update({value:function(){setValue();renderConditions();}});self.conditionOperators={boolean:[{id:'=',title:Ox._('is')},{id:'!=',title:Ox._('is not')}],date:[{id:'=',title:Ox._('is')},{id:'!=',title:Ox._('is not')},{id:'<',title:Ox._('is before')},{id:'!<',title:Ox._('is not before')},{id:'>',title:Ox._('is after')},{id:'!>',title:Ox._('is not after')},{id:'=,',title:Ox._('is between')},{id:'!=,',title:Ox._('is not between')}],'enum':[{id:'=',title:Ox._('is')},{id:'!=',title:Ox._('is not')},{id:'<',title:Ox._('is less than')},{id:'!<',title:Ox._('is not less than')},{id:'>',title:Ox._('is greater than')},{id:'!>',title:Ox._('is not greater than')},{id:'=,',title:Ox._('is between')},{id:'!=,',title:Ox._('is not between')}],item:[{id:'==',title:Ox._('is')},{id:'!==',title:Ox._('is not')}],list:[{id:'==',title:Ox._('is')},{id:'!==',title:Ox._('is not')}],number:[{id:'=',title:Ox._('is')},{id:'!=',title:Ox._('is not')},{id:'<',title:Ox._('is less than')},{id:'!<',title:Ox._('is not less than')},{id:'>',title:Ox._('is greater than')},{id:'!>',title:Ox._('is not greater than')},{id:'=,',title:Ox._('is between')},{id:'!=,',title:Ox._('is not between')}],place:[{id:'==',title:Ox._('is')},{id:'!==',title:Ox._('is not')},{id:'=',title:Ox._('contains')},{id:'!=',title:Ox._('does not contain')},{id:'^',title:Ox._('starts with')},{id:'!^',title:Ox._('does not start with')},{id:'$',title:Ox._('ends with')},{id:'!$',title:Ox._('does not end with')}],string:[{id:'==',title:Ox._('is')},{id:'!==',title:Ox._('is not')},{id:'=',title:Ox._('contains')},{id:'!=',title:Ox._('does not contain')},{id:'^',title:Ox._('starts with')},{id:'!^',title:Ox._('does not start with')},{id:'$',title:Ox._('ends with')},{id:'!$',title:Ox._('does not end with')}],text:[{id:'=',title:Ox._('contains')},{id:'!=',title:Ox._('does not contain')}],year:[{id:'==',title:Ox._('is')},{id:'!==',title:Ox._('is not')},{id:'<',title:Ox._('is before')},{id:'!<',title:Ox._('is not before')},{id:'>',title:Ox._('is after')},{id:'!>',title:Ox._('is not after')},{id:'=,',title:Ox._('is between')},{id:'!=,',title:Ox._('is not between')}]};self.defaultValue={boolean:'true',date:Ox.formatDate(new Date(),'%F'),'enum':0,float:0,hue:0,integer:0,item:void 0,list:'',place:'',string:'',text:'',time:'00:00:00',year:new Date().getFullYear().toString()};self.operators=[{id:'&',title:Ox._('all')},{id:'|',title:Ox._('any')}];setValue();self.$operator=Ox.FormElementGroup({elements:[Ox.Label({title:Ox._('Match'),overlap:'right',width:48}),Ox.FormElementGroup({elements:[Ox.Select({items:self.operators,value:self.options.value.operator,width:48}).bindEvent({change:changeOperator}),Ox.Label({overlap:'left',title:Ox._('of the following conditions'),width:160})],float:'right',width:208})],float:'left'});self.$save=Ox.InputGroup({inputs:[Ox.Checkbox({width:16}),Ox.Input({id:'list',placeholder:Ox._('Untitled'),width:128})],separators:[{title:Ox._('Save as {0}',[self.options.listName]),width:112}]});self.$limit=Ox.InputGroup({inputs:[Ox.Checkbox({width:16}),Ox.FormElementGroup({elements:[Ox.Input({type:'int',width:56}),Ox.Select({items:[{id:'items',title:Ox._('items')},{},{id:'hours',title:Ox._('hours')},{id:'days',title:Ox._('days')},{},{id:'GB',title:'GB'}],overlap:'left',width:64})],float:'right',width:120}),Ox.Select({items:self.options.sortKeys,width:128}),Ox.FormElementGroup({elements:[Ox.Select({items:[{id:'ascending',title:Ox._('ascending')},{id:'descending',title:Ox._('descending')}],width:128}),Ox.Label({overlap:'left',title:Ox._('order'),width:72})],float:'right',width:200})],separators:[{title:Ox._('Limit to'),width:56},{title:Ox._('sorted by'),width:60},{title:Ox._('in'),width:32}]});self.$view=Ox.InputGroup({inputs:[Ox.Checkbox({width:16}),Ox.Select({items:self.options.viewKeys,width:128}),Ox.Select({items:self.options.sortKeys,width:128}),Ox.FormElementGroup({elements:[Ox.Select({items:[{id:'ascending',title:Ox._('ascending')},{id:'descending',title:Ox._('descending')}],width:128}),Ox.Label({overlap:'left',title:Ox._('order'),width:72})],float:'right',width:200})],separators:[{title:Ox._('View'),width:48},{title:Ox._('sorted by'),width:60},{title:Ox._('in'),width:32}]});self.$items=self.options.list?[self.$operator,self.$save]:[self.$operator];self.numberOfAdditionalFormItems=self.$items.length;self.$form=Ox.Form({items:self.$items}).appendTo(that);renderConditions();function addCondition(pos,subpos,isGroup){subpos=Ox.isUndefined(subpos)?-1:subpos;var condition,key;if(subpos==-1){condition=self.options.value.conditions[pos-1]}else{condition=self.options.value.conditions[pos].conditions[subpos-1];} +key=Ox.getObjectById(self.options.findKeys,condition.key);condition={key:key.id,operator:condition.operator,value:self.defaultValue[key.type]||''};if(isGroup){Ox.Log('Form','isGroup',self.options.value.operator) +condition={conditions:[condition],operator:self.options.value.operator=='&'?'|':'&'};} +if(subpos==-1){self.options.value.conditions.splice(pos,0,condition);}else{self.options.value.conditions[pos].conditions.splice(subpos,0,condition);} +renderConditions(pos,subpos);if(!isUselessCondition(pos,subpos)){triggerChangeEvent();}} +function changeConditionKey(pos,subpos,key){subpos=Ox.isUndefined(subpos)?-1:subpos;Ox.Log('Form','changeConditionKey',pos,subpos,key);var condition=subpos==-1?self.options.value.conditions[pos]:self.options.value.conditions[pos].conditions[subpos],oldFindKey=Ox.getObjectById(self.options.findKeys,condition.key),newFindKey=Ox.getObjectById(self.options.findKeys,key),oldConditionType=getConditionType(oldFindKey.type),newConditionType=getConditionType(newFindKey.type),changeConditionType=oldConditionType!=newConditionType,changeConditionFormat=!Ox.isEqual(oldFindKey.format,newFindKey.format),changeConditionAutocomplete=!Ox.isEqual(oldFindKey.autocomplete,newFindKey.autocomplete),wasUselessCondition=isUselessCondition(pos,subpos);Ox.Log('Form','old new',oldConditionType,newConditionType) +condition.key=key;if(changeConditionType||changeConditionFormat||changeConditionAutocomplete){if(Ox.getIndexById(self.conditionOperators[newConditionType],condition.operator)==-1){condition.operator=self.conditionOperators[newConditionType][0].id;} +if(['string','text'].indexOf(oldConditionType)==-1||['string','text'].indexOf(newConditionType)==-1){condition.value=newFindKey.type=='item'?newFindKey.values[0].id:(self.defaultValue[newFindKey.type]||'');} +renderConditions();} +if(!(wasUselessCondition&&isUselessCondition(pos,subpos))){triggerChangeEvent();}} +function isBetweenCondition(condition){if(condition.key=="resolution"){return Ox.isArray(condition.value)&&Ox.isArray(condition.value[0])} +return Ox.isArray(condition.value)} +function changeConditionOperator(pos,subpos,operator){subpos=Ox.isUndefined(subpos)?-1:subpos;Ox.Log('FILTER','chCoOp','query',self.options.value) +var condition=subpos==-1?self.options.value.conditions[pos]:self.options.value.conditions[pos].conditions[subpos],isBetween=operator.indexOf(',')>-1,wasBetween=isBetweenCondition(condition),wasUselessCondition=isUselessCondition(pos,subpos);Ox.Log('FILTER','chCoOp','iB/wB',isBetween,wasBetween) +condition.operator=operator;if(isBetween&&!wasBetween){condition.operator=condition.operator.replace(',','');condition.value=[condition.value,condition.value] +renderConditions();}else if(!isBetween&&wasBetween){condition.value=condition.value[0] +renderConditions();} +if(!(wasUselessCondition&&isUselessCondition(pos,subpos))){triggerChangeEvent();}} +function changeConditionValue(pos,subpos,value){Ox.Log('FILTER','cCV',pos,subpos,value);var condition=subpos==-1?self.options.value.conditions[pos]:self.options.value.conditions[pos].conditions[subpos];condition.value=value;triggerChangeEvent();} +function changeGroupOperator(pos,value){self.options.value.conditions[pos].operator=value;triggerChangeEvent();} +function changeOperator(data){var hasGroups=false;self.options.value.operator=data.value;Ox.forEach(self.options.value.conditions,function(condition){if(condition.conditions){hasGroups=true;return false;}});hasGroups&&renderConditions();self.options.value.conditions.length>1&&triggerChangeEvent();} +function getConditionType(type){type=Ox.isArray(type)?type[0]:type;if(['float','hue','integer','time'].indexOf(type)>-1){type='number';} +return type;} +function isUselessCondition(pos,subpos){subpos=Ox.isUndefined(subpos)?-1:subpos;var conditions=subpos==-1?self.options.value.conditions[pos].conditions||[self.options.value.conditions[pos]]:[self.options.value.conditions[pos].conditions[subpos]],isUseless=false;Ox.forEach(conditions,function(condition){isUseless=['string','text'].indexOf(getConditionType(Ox.getObjectById(self.options.findKeys,condition.key).type))>-1&&(self.options.value.operator=='&'?['','^','$']:['!','!^','!$']).indexOf(condition.operator)>-1&&condition.value==='';if(!isUseless){return false;}});return isUseless;} +function removeCondition(pos,subpos){subpos=Ox.isUndefined(subpos)?-1:subpos;var wasUselessCondition=isUselessCondition(pos,subpos);if(subpos==-1||self.options.value.conditions[pos].conditions.length==1){self.options.value.conditions.splice(pos,1);}else{self.options.value.conditions[pos].conditions.splice(subpos,1);} +renderConditions();if(!wasUselessCondition){triggerChangeEvent();}} +function renderButtons(pos,subpos){subpos=Ox.isUndefined(subpos)?-1:subpos;var isGroup=subpos==-1&&self.options.value.conditions[pos].conditions;return[].concat([Ox.Button({id:'remove',title:self.options.value.conditions.length==1?'close':'remove',tooltip:self.options.value.conditions.length==1?Ox._('Reset this condition'):isGroup?Ox._('Remove this group of conditions'):Ox._('Remove this condition'),type:'image'}).css({margin:'0 4px 0 '+(isGroup?'292px':'8px')}).bindEvent({click:function(data){var key,that=this;that.focus();setTimeout(function(){if(self.options.value.conditions.length==1){key=self.options.findKeys[0];self.options.value.conditions=[{key:key.id,value:'',operator:self.conditionOperators[key.type][0].id}];renderConditions();triggerChangeEvent();}else if(that.parent().data('subposition')==-1){removeCondition(that.parent().data('position'));}else{removeCondition(that.parent().data('position'),that.parent().data('subposition'));}});}}),Ox.Button({id:'add',title:'add',tooltip:Ox._('Add a condition'),type:'image'}).css({margin:'0 '+(subpos==-1?'4px':'0')+' 0 4px'}).bindEvent({click:function(data){var that=this;that.focus();setTimeout(function(){if(that.parent().data('subposition')==-1){addCondition(that.parent().data('position')+1);}else{addCondition(that.parent().data('position'),that.parent().data('subposition')+1);}});}})],subpos==-1?[Ox.Button({id:'addgroup',title:'bracket',tooltip:Ox._('Add a group of conditions'),type:'image'}).css({margin:'0 0 0 4px'}).bindEvent({click:function(data){var that=this;that.focus();setTimeout(function(){addCondition(that.parent().data('position')+1,-1,true);});}})]:[]);} +function renderCondition(condition,pos,subpos){subpos=Ox.isUndefined(subpos)?-1:subpos;var condition=subpos==-1?self.options.value.conditions[pos]:self.options.value.conditions[pos].conditions[subpos];Ox.Log('Form','renderCondition',condition,pos,subpos) +return Ox.FormElementGroup({elements:[renderConditionKey(condition),renderConditionOperator(condition),renderConditionValue(condition)].concat(renderButtons(pos,subpos))}).css({marginLeft:subpos==-1?0:'24px'}).data({position:pos,subposition:subpos});} +function renderConditionKey(condition){return Ox.Select({items:self.options.findKeys,overlap:'right',value:condition.key,width:128}).bindEvent({change:function(data){var $element=this.parent();changeConditionKey($element.data('position'),$element.data('subposition'),data.value);}});} +function renderConditionOperator(condition){var key=Ox.getObjectById(self.options.findKeys,condition.key),conditionType=getConditionType(key.type),conditionOperators=self.conditionOperators[conditionType]||self.conditionOperators["string"];Ox.Log('FILTER','rCO',condition,conditionType,conditionOperators) +return Ox.Select({items:conditionOperators,overlap:'right',value:condition.operator+(isBetweenCondition(condition)?',':''),width:128}).bindEvent({change:function(data){var $element=this.parent();changeConditionOperator($element.data('position'),$element.data('subposition'),data.value);}});} +function renderConditionValue(condition){return(!isBetweenCondition(condition)?renderInput(condition):Ox.InputGroup({inputs:[renderInput(condition,0).options({id:'start'}),renderInput(condition,1).options({id:'end'})],separators:[{title:Ox._('and'),width:32}]})).bindEvent({change:change,submit:change});function change(data){var $element=this.parent();changeConditionValue($element.data('position'),$element.data('subposition'),data.value);}} +function renderConditions(focusPos,focusSubpos){Ox.Log('Form','renderConditions',self.options.value) +var $conditions=[],focusIndex;while(self.$form.options('items').length>self.numberOfAdditionalFormItems){self.$form.removeItem(1);} +self.options.value.conditions.forEach(function(condition,pos){if(!condition.conditions){$conditions.push(renderCondition(condition,pos));if(pos==focusPos&&focusSubpos==-1){focusIndex=$conditions.length-1;}}else{$conditions.push(renderGroup(condition,pos));condition.conditions.forEach(function(subcondition,subpos){$conditions.push(renderCondition(subcondition,pos,subpos));if(pos==focusPos&&subpos==focusSubpos){focusIndex=$conditions.length-1;}});}});$conditions.forEach(function($condition,pos){var $input;self.$form.addItem(1+pos,$condition);if(focusIndex==pos){$input=$condition.options('elements')[2];if($input.focusInput){$input.focusInput();}}});} +function renderGroup(condition,pos){var subpos=-1;var $condition=Ox.FormElementGroup({elements:[Ox.Label({title:self.options.value.operator=='&'?(pos==0?'Both':'and'):(pos==0?'Either':'or'),overlap:'right',width:48}).addClass('OxGroupLabel'),Ox.FormElementGroup({elements:[Ox.Select({items:self.operators,value:self.options.value.operator=='&'?'|':'&',width:48}).bindEvent({change:function(data){var $element=this.parent().parent();changeGroupOperator($element.data('position'),data.value);}}),Ox.Label({overlap:'left',title:Ox._('of the following conditions'),width:160})],float:'right',width:208}),].concat(renderButtons(pos,subpos,true)),float:'left'}).data({position:pos});return $condition;} +function renderInput(condition,index){Ox.Log('Form','renderInput',condition) +var $input,findKey=Ox.getObjectById(self.options.findKeys,condition.key),isBetween=isBetweenCondition(condition),isHue,type=findKey.type=='integer'?'int':findKey.type,value=!isBetween?condition.value:condition.value[index],formatArgs,formatType,title;if(type=='boolean'){$input=Ox.Select({items:['true','false'],max:1,min:1,value:value?'true':'false',width:288});}else if(type=='enum'){Ox.Log('FILTER',findKey,condition) +$input=Ox.Select({items:findKey.values.map(function(v,i){return{id:i,title:v}}),value:value,width:!isBetween?288:128});}else if(type=='item'){$input=Ox.Select({items:findKey.values,max:1,min:1,value:value,width:288});}else if(type=='list'){Ox.Log('FILTER',findKey) +$input=Ox.Input({autocomplete:findKey.values,autocompleteSelect:true,autocompleteSelectSubmit:true,value:value,width:288});}else if(findKey.format){formatArgs=findKey.format.args;formatType=findKey.format.type;if(formatType=='color'){isHue=formatArgs[0]=='hue';$input=Ox.Range({max:isHue?360:1,min:0,size:!isBetween?288:128,width:!isBetween?288:128,step:isHue?1:0.01,thumbSize:48,thumbValue:true,trackColors:isHue?['rgb(255, 0, 0)','rgb(255, 255, 0)','rgb(0, 255, 0)','rgb(0, 255, 255)','rgb(0, 0, 255)','rgb(255, 0, 255)','rgb(255, 0, 0)']:['rgb(0, 0, 0)','rgb(255, 255, 255)'],value:value});}else if(formatType=='date'){$input=Ox.DateInput(!isBetween?{value:value,width:{day:66,month:66,year:140}}:{value:value,width:{day:32,month:32,year:48}});}else if(formatType=='duration'){$input=Ox.TimeInput(!isBetween?{seconds:true,value:value,width:{hours:91,minutes:91,seconds:90}}:{seconds:true,value:value,width:{hours:38,minutes:37,seconds:37}});}else if(formatType=='ISBN'){$input=Ox.Input({type:type,value:Ox.formatISBN.apply(null,[value].concat(formatArgs)),width:288});}else if(formatType=='number'){$input=Ox.Input({type:type,value:value,width:288});}else if(formatType=='resolution'){$input=Ox.InputGroup({inputs:[Ox.Input({id:'width',type:'int',value:value[0]}),Ox.Input({id:'height',type:'int',value:value[1]})],separators:[{title:'x',width:16}],width:!isBetween?288:128})}else if(['currency','percent','unit','value'].indexOf(formatType)>-1){title=formatType=='percent'?'%':formatArgs[0];$input=Ox.FormElementGroup({elements:[Ox.Input({type:type,value:value,width:!isBetween?242:80}),formatType=='value'?Ox.Select({overlap:'left',items:['K','M','G','T'].map(function(prefix,i){return{id:Math.pow(1000,i+1),title:prefix+title};}),width:48}):Ox.Label({overlap:'left',textAlign:'center',title:title,width:48})],float:'right',join:function(value){return formatType=='value'?value[0]*value[1]:value[0];},split:function(value){},width:!isBetween?288:128})}}else{$input=Ox.Input({type:type,value:value,autocomplete:findKey.autocomplete,autocompleteSelect:true,autocompleteSelectSubmit:true,width:!isBetween?288:128});} +return $input;} +function setValue(){if(Ox.isEmpty(self.options.value)){self.options.value={conditions:[],operator:'&'};}else if(self.options.value.operator==''){self.options.value.operator='&';} +Ox.Log('Form','Ox.Filter self.options',self.options);if(!self.options.value.conditions.length){self.options.value.conditions=[{key:self.options.findKeys[0].id,value:'',operator:self.conditionOperators[getConditionType(self.options.findKeys[0].type)][0].id}];}} +function triggerChangeEvent(){var value=Ox.clone(self.options.value,true);that.triggerEvent('change',{value:value});} +that.getList=function(){if(self.$save){var value=self.$save.value();return{save:value[0],name:value[1],query:self.options.value};}};that.value=function(){if(arguments.length==0){return self.options.value;}else{return that.options({value:arguments[0]});}};return that;};'use strict';Ox.Form=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({error:'',id:'',items:[],validate:function(valid){return Ox.every(valid);}}).options(options||{}).addClass('OxForm');Ox.extend(self,{$items:[],$messages:[],itemIds:[],itemIsValid:[]});self.options.items.forEach(function(item,i){validateItem(i,function(valid){self.itemIsValid[i]=valid;});self.itemIds[i]=item.options('id')||item.id;self.$items[i]=Ox.FormItem({element:item}).appendTo(that);item.bindEvent({autovalidate:function(data){validateForm(i,data.valid);data.valid&&self.$items[i].setMessage('');},change:function(data){that.triggerEvent('change',{id:self.itemIds[i],data:data});validateItem(i,function(valid){validateForm(i,valid);});},submit:function(data){self.formIsValid&&that.submit();},validate:function(data){validateForm(i,data.valid);setTimeout(function(){self.$items[i].setMessage(data.valid?'':data.message);},0);}});});self.formIsValid=self.options.validate(self.itemIsValid);function getItemIndexById(id){return self.itemIds.indexOf(id);} +function validateForm(pos,valid){self.itemIsValid[pos]=valid;if(self.options.validate(self.itemIsValid)!=self.formIsValid){self.formIsValid=!self.formIsValid;that.triggerEvent('validate',{valid:self.formIsValid});}} +function validateItem(pos,callback){var item=self.options.items[pos],validate=item.options('validate');if(validate){validate(item.value(),function(data){callback(data.valid);});}else{callback(item.value&&!Ox.isEmpty(item.value));}} +that.addItem=function(pos,item){Ox.Log('Form','addItem',pos) +self.options.items.splice(pos,0,item);self.$items.splice(pos,0,Ox.FormItem({element:item}));pos==0?self.$items[pos].insertBefore(self.$items[0]):self.$items[pos].insertAfter(self.$items[pos-1]);} +that.removeItem=function(pos){Ox.Log('Form','removeItem',pos);self.$items[pos].remove();self.options.items.splice(pos,1);self.$items.splice(pos,1);} +that.setMessages=function(messages){Ox.forEach(messages,function(v){self.$items[getItemIndexById(v.id)].setMessage(v.message);});};that.submit=function(){that.triggerEvent('submit',{values:that.values()});};that.valid=function(){return self.formIsValid;};that.values=function(){var values={};if(arguments.length==0){self.$items.forEach(function($item,i){values[self.itemIds[i]]=self.$items[i].value();});return values;}else{Ox.Log('Form','SET FORM VALUES',arguments[0]) +Ox.forEach(arguments[0],function(value,key){var index=getItemIndexById(key);index>-1&&self.options.items[index].value(value);});return that;}};return that;};'use strict';Ox.FormElementGroup=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({id:'',elements:[],float:'left',join:null,separators:[],split:null,value:options.split?'':[],width:0}).options(options||{}).update({value:setValue}).addClass('OxInputGroup');if(Ox.isEmpty(self.options.value)){self.options.value=getValue();}else{setValue();} +(self.options.float=='left'?self.options.elements:Ox.clone(self.options.elements).reverse()).forEach(function($element){$element.css({float:self.options.float}).bindEvent({autovalidate:function(data){that.triggerEvent({autovalidate:data});},change:change,validate:function(data){that.triggerEvent({validate:data});}}).appendTo(that);});function change(data){self.options.value=getValue();that.triggerEvent('change',{value:self.options.value});} +function getValue(){var value=self.options.elements.map(function($element){return $element.value?$element.value():void 0;});return self.options.join?self.options.join(value):value;} +function getWidth(){} +function setValue(){var values=self.options.split?self.options.split(self.options.value):self.options.value;values.forEach(function(value,i){self.options.elements[i].value&&self.options.elements[i].value(value);});} +function setWidth(){} +that.replaceElement=function(pos,element){Ox.Log('Form','Ox.FormElementGroup replaceElement',pos,element) +self.options.elements[pos].replaceWith(element.$element);self.options.elements[pos]=element;};that.value=function(){var values;if(arguments.length==0){values=self.options.elements.map(function(element){return element.value?element.value():void 0;});return self.options.join?self.options.join(values):values;}else{return that.options({value:arguments[0]});}};return that;};'use strict';Ox.FormItem=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({element:null,error:''}).options(options||{}).addClass('OxFormItem');self.description=self.options.element.options('description');if(self.description){$('
').addClass('OxFormDescription OxSelectable').html(self.description).appendTo(that);} +that.append(self.options.element);self.$message=Ox.Element().addClass('OxFormMessage OxSelectable').appendTo(that);that.setMessage=function(message){self.$message.html(message)[message!==''?'show':'hide']();};that.value=function(){return self.options.element.value();};return that;};'use strict';Ox.FormPanel=function(options,self){self=self||{};var that=Ox.Element({},self).defaults({form:[],listSize:256}).options(options||{});self.section=0;self.sectionTitle=self.options.form[self.section].title;self.$list=Ox.TableList({columns:[{id:'id',visible:false},{format:function(value){return $('').attr({src:Ox.UI.getImageURL('symbolCheck')}).css({width:'10px',height:'10px',margin:'2px 2px 2px 0',opacity:value?1:0.1})},id:'valid',title:Ox._('Valid'),visible:true,width:16},{format:function(value){return(Ox.indexOf(self.options.form,function(section){return section.title==value;})+1)+'. '+value;},id:'title',title:Ox._('Title'),visible:true,width:self.options.listSize-16}],items:self.options.form.map(function(section){return{id:section.id,title:section.title,valid:false};}),max:1,min:1,selected:[self.options.form[0].id],sort:[{key:'id',operator:'+'}],unique:'id',width:self.options.listSize}).bindEvent({select:function(data){self.$sections[self.section].hide();self.section=Ox.getIndexById(self.options.form,data.ids[0]);self.$sections[self.section].show();that.triggerEvent('select',{section:data.ids[0]});}});self.$section=$('
').css({overflowY:'auto'});self.$forms=[];self.$sections=self.options.form.map(function(section,i){return $('
').css({width:(section.descriptionWidth||section.items[0].options('width'))+'px',margin:'16px'}).append($('
').addClass('OxSelectable').css({marginBottom:'8px',fontWeight:'bold'}).html((i+1)+'. '+section.title)).append($('
').addClass('OxSelectable').css({marginBottom:'16px'}).html(section.description)).append(self.$forms[i]=Ox.Form({items:section.items,validate:section.validate}).bindEvent({change:function(data){self.$list.value(section.id,'valid',self.$forms[i].valid());that.triggerEvent('change',{section:section.id,data:data});},validate:function(data){self.$list.value(section.id,'valid',data.valid);that.triggerEvent('validate',{section:section.id,data:data});}})).hide().appendTo(self.$section);});self.$list.bindEvent('load',function(){self.$forms.forEach(function($form,i){self.$list.value(self.options.form[i].id,'valid',$form.valid());});});self.$sections[0].show();that.setElement(Ox.SplitPanel({elements:[{element:self.$list,size:self.options.listSize},{element:self.$section}],orientation:'horizontal'}));that.renderPrintVersion=function(title){var $printVersion=$('
').css({overflowY:'auto'});$printVersion.append($('
').addClass('OxFormSectionTitle').css({height:'16px',padding:'16px 16px 8px 16px',fontWeight:'bold'}).html(title));self.$sections.forEach(function($section,i){var $clone=$section.clone(true),textareas={section:$section.find('textarea'),clone:$clone.find('textarea')};textareas.section.each(function(i){$(textareas.clone[i]).val($(this).val());});$printVersion.append($('
').css({height:'1px',margin:'8px 0 8px 0',background:'rgb(128, 128, 128)'})).append($clone.show());});return $printVersion;};that.values=function(){var values={};self.options.form.forEach(function(section,i){values[section.id]=self.$forms[i].values();});return values;};return that;};'use strict';Ox.Input=function(options,self){self=self||{};var that=Ox.Element({element:(options||{}).element||'
'},self).defaults({arrows:false,arrowStep:1,autocomplete:null,autocompleteReplace:false,autocompleteReplaceCorrect:false,autocompleteSelect:false,autocompleteSelectHighlight:false,autocompleteSelectMax:0,autocompleteSelectMaxWidth:0,autocompleteSelectOffset:{left:4,top:0},autocompleteSelectSubmit:false,autocompleteSelectUpdate:false,autovalidate:null,changeOnKeypress:false,clear:false,clearTooltip:'',decimals:0,disabled:false,height:16,key:'',min:-Infinity,max:Infinity,label:'',labelWidth:64,overlap:'none',placeholder:'',readonly:false,serialize:null,style:'rounded',textAlign:'left',type:'text',validate:null,value:'',width:128}).options(options||{}).update(function(key,value){var inputWidth;if(['autocomplete','autocompleteReplace','autocompleteSelect','autovalidate'].indexOf(key)>-1){if(self.options.autocomplete&&self.options.autocompleteSelect){self.$autocompleteMenu=constructAutocompleteMenu();} +self.bindKeyboard=self.options.autocomplete||self.options.autovalidate;}else if(key=='disabled'){self.$input.attr({disabled:value});}else if(key=='height'){that.css({height:value+'px'});self.$input.css({height:value-6+'px'});}else if(key=='label'){self.$label.options({title:value});}else if(key=='labelWidth'){self.$label.options({width:value});inputWidth=getInputWidth();self.$input.css({width:inputWidth+'px'});self.hasPasswordPlaceholder&&self.$placeholder.css({width:inputWidth+'px'});}else if(key=='placeholder'){setPlaceholder();}else if(key=='readonly'){self.$input.attr({readonly:value});}else if(key=='type'){self.$input[0].type=value}else if(key=='value'){if(self.options.type=='float'&&self.options.decimals){self.options.value=self.options.value.toFixed(self.options.decimals);} +self.$input.val(self.options.value);that.is('.OxError')&&that.removeClass('OxError');setPlaceholder();}else if(key=='width'){that.css({width:self.options.width+'px'});inputWidth=getInputWidth();self.$input.css({width:inputWidth+'px'});self.hasPasswordPlaceholder&&self.$placeholder.css({width:inputWidth+'px'});}}).addClass('OxInput OxKeyboardFocus OxMedium Ox'+Ox.toTitleCase(self.options.style) ++(self.options.type=='textarea'?' OxTextarea':'')).css(Ox.extend({width:self.options.width+'px'},self.options.type=='textarea'?{height:self.options.height+'px'}:{})).bindEvent(Ox.extend(self.options.type!='textarea'?{key_enter:submit}:{},{key_control_i:insert,key_escape:cancel,key_shift_enter:submit}));if(Ox.isArray(self.options.autocomplete)&&self.options.autocompleteReplace&&self.options.autocompleteReplaceCorrect&&self.options.value===''){self.options.value=self.options.autocomplete[0]} +if(self.options.type=='float'){self.decimals=Ox.repeat('0',self.options.decimals||1) +Ox.extend(self.options,{autovalidate:'float',textAlign:'right',value:self.options.value||'0.'+self.decimals});}else if(self.options.type=='int'){Ox.extend(self.options,{autovalidate:'int',textAlign:'right',value:self.options.value||'0'});} +if(self.options.label){self.$label=Ox.Label({overlap:'right',style:self.options.style,textAlign:'right',title:self.options.label,width:self.options.labelWidth}).css({float:'left'}).on({click:function(){}}).appendTo(that);} +if(self.options.arrows){self.arrows=[];self.arrows[0]=[Ox.Button({overlap:'right',title:'left',type:'image'}).css({float:'left'}).on({click:function(){clickArrow(-1);}}).appendTo(that),Ox.Button({overlap:'left',title:'right',type:'image'}).css({float:'right'}).on({click:function(){clickArrow(1);}}).appendTo(that)]} +self.bindKeyboard=self.options.autocomplete||self.options.autovalidate||self.options.changeOnKeypress;self.hasPasswordPlaceholder=self.options.type=='password'&&self.options.placeholder;self.inputWidth=getInputWidth();if(self.options.clear){self.$button=Ox.Button({overlap:'left',style:self.options.style=='squared'?'squared':'',title:'close',tooltip:self.options.clearTooltip,type:'image'}).css({float:'right'}).bindEvent({click:clear,doubleclick:submit}).appendTo(that);} +self.$input=$(self.options.type=='textarea'?'