Ox.load.Geo = function(options, callback) { Ox.getJSON(Ox.PATH + 'Ox.Geo/json/Ox.Geo.json', function(data) { //@ Constants ---------------------------------------------------------- /*@ Ox.COUNTRIES <[o]> Array of countries A list of independent (or de-facto independent) countries and dependencies (see <a href="http://en.wikipedia.org/wiki/List_of_sovereign_states">Wikipedia</a>), other entities with <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a> country codes, and former countries according to <a href="http://en.wikipedia.org/wiki/ISO_3166-3">ISO 3166-3</a> and <a href="http://www.imdb.com/country/">IMDb</a>. area <n> Area of the country in square meters code <s> ISO 3166-1 alpha-2 country code dependencies <[s]> Array of dependencies of the country dependency <[s]> Array of countries the country is a dependency of disputed <[s]> Array of countries the country is disputed by disputes <[s]> Array of countries the country disputes dissolved <[s]> Array of countries the country has been dissolved (merged, renamed or split) into east <n> Longitude of eastern boundary in deg googleName <s|u> Google Maps country name imdbCode <s|u> IMDb country code imdbName <s|u> IMDb country name languages <[s]> Array of languages that are spoken in this country more than in any other lat <n> Latitude of the center in deg lng <n> Longitude of the center in deg name <s> Name north <n> Latitude of northern boundary in deg other <b> True if the country is an "other entity" (EU, FX, UK) south <n> Latitude of southern boundary in deg wikipediaURL <s> URL of the wikipedia article for the country west <n> Longitude of western boundary in deg <script> Ox.test.array = [ // Current independent countries with dependencies Ox.COUNTRIES.filter(function(c) { return c.dependencies.length && !c.dissolved.length && !c.other; }).length, // Current independent countries with (fixme: not necessarily current) disputes Ox.COUNTRIES.filter(function(c) { return c.disputes.length && !c.dissolved.length && !c.other; }).length, // Current independent countries without dependencies or disputes Ox.COUNTRIES.filter(function(c) { return !c.dependencies.length && !c.dependency.length && !c.disputes.length && !c.disputed.length && !c.dissolved.length && !c.other; }).length, // Current dependent countries Ox.COUNTRIES.filter(function(c) { return c.dependency.length && !c.dissolved.length && !c.other; }).length, // Current disputed countries Ox.COUNTRIES.filter(function(c) { return c.disputed.length && !c.dissolved.length && !c.other; }).length, // Former independent countries with dependencies Ox.COUNTRIES.filter(function(c) { return c.dependencies.length && c.dissolved.length && !c.other; }).length, // Former independent countries with disputes Ox.COUNTRIES.filter(function(c) { return c.disputes.length && c.dissolved.length && !c.other; }).length, // Former independent countries without dependencies or disputes Ox.COUNTRIES.filter(function(c) { return !c.dependencies.length && !c.dependency.length && !c.disputes.length && !c.disputed.length && c.dissolved.length && !c.other; }).length, // Former dependect countries Ox.COUNTRIES.filter(function(c) { return c.dependency.length && c.dissolved.length && !c.other; }).length, // Former disputed countries Ox.COUNTRIES.filter(function(c) { return c.disputed.length && c.dissolved.length && !c.other; }).length, // Other entities Ox.COUNTRIES.filter(function(c) { return c.other; }).length ]; </script> > Ox.COUNTRIES.length 311 > Ox.sum(Ox.test.array) 311 > Ox.test.array [13, 8, 176, 73, 7, 1, 0, 16, 13, 1, 3] @*/ Ox.COUNTRIES = data; //@ Functions ---------------------------------------------------------- /*@ Ox.getCountryByCode <f> Returns a country object for a given country code (code) -> <o> Country object code <s> ISO 3166 country code > Ox.getCountryByCode('US').name 'United States' @*/ Ox.getCountryByCode = function(code) { var country; Ox.forEach(Ox.COUNTRIES, function(c) { if (c.code == code) { country = c; return false; } }); return country; }; /*@ Ox.getCountryByGeoname <f> Returns a country object for a given geoname (name) -> <o> Country object name <s> Geoname > Ox.getCountryByGeoname('Los Angeles, California, United States').code 'US' > Ox.getCountryByGeoname('The Bottom, Saba, Bonaire, Saint 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( geoname.split(', ').pop() .replace('Saint Eustatius', 'Bonaire, Saint Eustatius') ); } /*@ Ox.getCountryByName <f> Returns a country object for a given country name (name) -> <o> Country object name <s> 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; } }); return country; }; /*@ Ox.getImageByGeoname <f> Returns an image URL for a given geoname (type, size, geoname) -> <s> Image URL type <s> Image type ('flag' or 'icon') size <n> Image width (32, 256, 2048 (flag), 16, 256, 1024 (icon)) geoname <s> Geoname @*/ Ox.getImageByGeoname = function(type, size, geoname) { var country = Ox.getCountryByGeoname(geoname), code = country ? country.code : 'NTHH'; return Ox.PATH + 'Ox.Geo/png/' + type + 's/' + size + '/' + code + '.png'; }; /*@ Ox.getImageByLanguage <f> Returns an image URL for a given language (type, size, geoname) -> <s> Image URL type <s> Image type ('flag' or 'icon') size <n> Image width (32, 256, 2048 (flag), 16, 256, 1024 (icon)) language <s> Language @*/ Ox.getImageByLanguage = function(type, size, language) { language = language .replace(' languages', '') .replace(' Sign Language', ''); var country = '', code; Ox.COUNTRIES.forEach(function(c) { if (c.languages.indexOf(language) > -1) { country = c; return false; } }); code = country ? country.code : 'NTHH'; return Ox.PATH + 'Ox.Geo/png/' + type + 's/' + size + '/' + code + '.png'; }; callback(true); }); }