Created
August 6, 2012 09:26
-
-
Save hippietrail/3272604 to your computer and use it in GitHub Desktop.
Browser app for currency conversion supporting online and offline use, geolocation, multiple currencies, favourite currencies, etc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta charset="utf-8"> | |
<!-- styles that came with the shell code --> | |
<style type="text/css"> | |
body { | |
font-family: monospace; | |
font-size: 10pt; | |
} | |
.prompt, #output { | |
width: 45em; | |
border: 1px solid silver; | |
background-color: #f5f5f5; | |
font-size: 10pt; | |
margin: 0.5em; | |
padding: 0.5em; | |
padding-right: 0em; | |
overflow-x: hidden; | |
} | |
#caret { | |
width: 2.5em; | |
margin-right: 0px; | |
padding-right: 0px; | |
border-right: 0px; | |
} | |
#statement { | |
width: 43em; | |
margin-left: -1em; | |
padding-left: 0px; | |
border-left: 0px; | |
background-position: top right; | |
background-repeat: no-repeat; | |
} | |
.processing { | |
background-image: url("/static/spinner.gif"); | |
} | |
</style> | |
<!-- my own styles --> | |
<style type="text/css"> | |
tt { background-color: #d0d0d0 } | |
</style> | |
<!-- <script type="text/javascript" src="shell.js"></script> --> | |
<script type="text/javascript"> | |
// Copyright 2007 Google Inc. | |
// | |
// Licensed under the Apache License, Version 2.0 (the "License"); | |
// you may not use this file except in compliance with the License. | |
// You may obtain a copy of the License at | |
// | |
// http://www.apache.org/licenses/LICENSE-2.0 | |
// | |
// Unless required by applicable law or agreed to in writing, software | |
// distributed under the License is distributed on an "AS IS" BASIS, | |
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
// See the License for the specific language governing permissions and | |
// limitations under the License. | |
/** | |
* @fileoverview | |
* Javascript code for the interactive AJAX shell. | |
* | |
* Part of http://code.google.com/p/google-app-engine-samples/. | |
* | |
* Includes a function (shell.runStatement) that sends the current python | |
* statement in the shell prompt text box to the server, and a callback | |
* (shell.done) that displays the results when the XmlHttpRequest returns. | |
*/ | |
/** | |
* Shell namespace. | |
* @type {Object} | |
*/ | |
var shell = {} | |
/** | |
* The shell history. history is an array of strings, ordered oldest to | |
* newest. historyCursor is the current history element that the user is on. | |
* | |
* The last history element is the statement that the user is currently | |
* typing. When a statement is run, it's frozen in the history, a new history | |
* element is added to the end of the array for the new statement, and | |
* historyCursor is updated to point to the new element. | |
* | |
* @type {Array} | |
*/ | |
shell.history = ['']; | |
/** | |
* See {shell.history} | |
* @type {number} | |
*/ | |
shell.historyCursor = 0; | |
/** | |
* A constant for the XmlHttpRequest 'done' state. | |
* @type Number | |
*/ | |
shell.DONE_STATE = 4; | |
/** | |
* This is the prompt textarea's onkeypress handler. Depending on the key that | |
* was pressed, it will run the statement, navigate the history, or update the | |
* current statement in the history. | |
* | |
* @param {Event} event the keypress event | |
* @return {Boolean} false to tell the browser not to submit the form. | |
*/ | |
// hipp called from ONLY the "statement" textarea element | |
shell.onPromptKeyPress = function(event, commandCallback) { | |
var statement = document.getElementById('statement'); | |
if (this.historyCursor == this.history.length - 1) { | |
// we're on the current statement. update it in the history before doing | |
// anything. | |
this.history[this.historyCursor] = statement.value; | |
} | |
// should we pull something from the history? | |
// TODO at least Chrome on Windows 7 doesn't get up/down arrow events! | |
// TODO scrap this history code or keyboard code? | |
if (event.ctrlKey && event.keyCode == 38 /* up arrow */) { | |
if (this.historyCursor > 0) { | |
statement.value = this.history[--this.historyCursor]; | |
} | |
return false; | |
} else if (event.ctrlKey && event.keyCode == 40 /* down arrow */) { | |
if (this.historyCursor < this.history.length - 1) { | |
statement.value = this.history[++this.historyCursor]; | |
} | |
return false; | |
} else if (!event.altKey) { | |
// probably changing the statement. update it in the history. | |
this.historyCursor = this.history.length - 1; | |
this.history[this.historyCursor] = statement.value; | |
} | |
// should we submit? | |
if (event.keyCode == 13 /* enter */ && !event.altKey && !event.shiftKey) { | |
return this.runStatement(commandCallback); | |
} | |
}; | |
/** | |
* The XmlHttpRequest callback. If the request succeeds, it adds the command | |
* and its resulting output to the shell history div. | |
* | |
* @param {XmlHttpRequest} req the XmlHttpRequest we used to send the current | |
* statement to the server | |
*/ | |
// hipped called from ONLY runStatement | |
shell.done = function(req) { | |
var statement = document.getElementById('statement') | |
if (req.readyState == this.DONE_STATE) { | |
statement.className = 'prompt'; | |
// add the command to the shell output | |
this.emit('> ' + statement.value); | |
statement.value = ''; | |
// add a new history element | |
this.history.push(''); | |
this.historyCursor = this.history.length - 1; | |
// add the command's result | |
this.emit(req.responseText.replace(/^\s*|\s*$/g, '')); // trim whitespace | |
} | |
}; | |
// hipp called from done but also from print in the main code | |
shell.emit = function(txt) { | |
var output = document.getElementById('output'), | |
result = txt, | |
range; | |
if (result != '') { | |
if (output.value != '') | |
output.value += '\n'; | |
output.value += result; | |
} | |
// scroll to the bottom | |
output.scrollTop = output.scrollHeight; | |
if (output.createTextRange) { | |
range = output.createTextRange(); | |
range.collapse(false); | |
range.select(); | |
} | |
}; | |
/** | |
* This is the form's onsubmit handler. It sends the python statement to the | |
* server, and registers shell.done() as the callback to run when it returns. | |
* | |
* @return {Boolean} false to tell the browser not to submit the form. | |
*/ | |
// hipp called from ONLY onPromptKeyPress | |
shell.runStatement = function(commandCallback) { | |
var form = document.getElementById('form'), | |
params, | |
elem, | |
value; | |
// build the query parameter string | |
params = ''; | |
for (i = 0; i < form.elements.length; i++) { | |
elem = form.elements[i]; | |
if (elem.type != 'submit' && elem.type != 'button' && elem.id != 'caret') { | |
value = escape(elem.value).replace(/\+/g, '%2B'); // escape ignores + | |
params += '&' + elem.name + '=' + value; | |
} | |
} | |
// send the request and tell the user. | |
document.getElementById('statement').className = 'prompt processing'; | |
// hippietrail code | |
{ | |
this.done({ | |
readyState: 4, | |
responseText: commandCallback(document.getElementById('statement').value) | |
}); | |
} | |
return false; | |
}; | |
</script> | |
<!--Load the jQuery API--> | |
<!-- TODO should I use Google's CDN? And if so how to include jQuery "latest"? --> | |
<!-- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> --> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> | |
<!-- use a local jquery if not online --> | |
<script>window.jQuery || document.write("<script src='jquery-latest.min.js'>\x3C/script>")</script> | |
<script type="text/javascript"> | |
// country codes to currency codes | |
// http://openexchangerates.org/api/countries.json | |
// currency codes to names | |
// http://openexchangerates.org/api/currencies.json | |
// current exchange rates | |
// http://openexchangerates.org/latest.json | |
var countryDataFallback, | |
currencyDataFallback, | |
rateDataFallback, | |
countryDataBest = null, | |
currencyDataBest = null, | |
rateDataBest = null, | |
timeBest = null, | |
whichBest = null; | |
$(document).ready(function() { | |
// TODO geolocation country code (or from IP address?) | |
// http://jsfiddle.net/7uyqs/ | |
// http://api.hostip.info/get_json.php | |
// TODO country code -> currency code mapping? | |
// http://mayavps.com/download/18/countries.csv | |
// YQL: SELECT col1, col5 FROM csv WHERE url='http://mayavps.com/download/18/countries.csv' | |
// NOTE timestamp can be retrieved from mayavps CVS files thus: | |
// new Date( | |
// (data.query.results.row.col0 + data.query.results.row.col1) | |
// .match(/^# Generated: (.*)$/)[1]).getTime() | |
// TODO fallback to local JSON for say countries.csv is difficult! This jQuery code works in Google Chrome: | |
// TODO $.ajax('file:C:\\Users\\hippietrail\\Documents\\Browser apps\\mayavps.com-countries.csv.jsonp#george', | |
// {cache:true,jsonpCallback:'foo',dataType:'jsonp', | |
// error:function(a,b,c) {console.log('error: ', a, b, c);}, | |
// success:function(a,b,c) {console.log('success: a: ', a,'b: ', b,'c: ', c);} | |
// }); | |
// TODO but full URL must be passed! )-: Chrome gives an error if the exact same code passes a relative URL! | |
// declare variables | |
var timeFallback, | |
fromLocalStorage, // get from browser storage | |
rateDataPrevious, | |
timePrevious, | |
rateDataLatest, | |
timeLatest; | |
// initialize stuff | |
getFallbackData(); | |
// transform fallback data | |
timeFallback = rateDataFallback.timestamp * 1000; | |
// transform country and currency data ojects into associative arrays like the rate data object | |
countryDataFallback['timestamp'] = new Date((countryDataFallback.query.results.row[0].col0 + countryDataFallback.query.results.row[0].col1).match(/^# Generated: (.*)$/)[1]).getTime(); | |
countryDataFallback['countries'] = {}; | |
countryDataFallback.query.results.row.forEach(function(e){countryDataFallback.countries[e.col1] = e.col5;}); | |
delete countryDataFallback.query; | |
currencyDataFallback['timestamp'] = new Date((currencyDataFallback.query.results.row[0].col0 + currencyDataFallback.query.results.row[0].col1).match(/^# Generated: (.*)$/)[1]).getTime(); | |
currencyDataFallback['currencies'] = {}; | |
currencyDataFallback.query.results.row.forEach(function(e){currencyDataFallback.currencies[e.col1] = e.col2;}); | |
delete currencyDataFallback.query; | |
// TODO get local currency via geolocation | |
// TODO fallback country code to currency code mapping | |
// TODO load country code to currency code mapping from mayavps.com via YQL | |
countryDataBest = countryDataFallback; | |
currencyDataBest = currencyDataFallback; | |
rateDataBest = rateDataFallback; | |
timeBest = timeFallback; | |
whichBest = 'fallback'; | |
if ('localStorage' in window) { | |
fromLocalStorage = localStorage.getItem('openexchangerates.org/latest.json'); | |
} else { | |
shell.emit('This browser doesn\'t support local storage, at least not for file:/ URLs.'); | |
} | |
// TODO should I check for null more explicitly? | |
if (fromLocalStorage) { | |
console.log('Got previous exchange rates from browser local storage.'); | |
rateDataPrevious = $.parseJSON(fromLocalStorage); | |
timePrevious = rateDataPrevious.timestamp * 1000; | |
rateDataBest = rateDataPrevious; | |
timeBest = timePrevious; | |
whichBest = 'previous'; | |
} else { | |
shell.emit('Couldn\'t get previous exchange rates from browser local storage.'); | |
} | |
timeLatest = null; | |
// TODO check if the browser is online before messing with AJAX? | |
// TODO well if the browser knows it's offline the AJAX will fail quickly anyway | |
// TODO but if it's "online" but has "no internet access" it will be slow regardless | |
$.ajax({ | |
url: 'http://openexchangerates.org/latest.json', | |
dataType: 'text', | |
error: function() { | |
shell.emit('Couldn\'t get latest exchange rates from the internet.'); | |
rateDataLatest = null; | |
timeLatest = null; | |
}, | |
success: function(response) { | |
var doStoreRates = false; // only save to browser storage if latest is newer than previous | |
console.log('Got the latest exchange rates from the internet.'); | |
rateDataLatest = $.parseJSON(response); | |
timeLatest = rateDataLatest.timestamp * 1000; | |
if (!('localStorage' in window)) { | |
console.log('Browser local storate not available, not storing.'); | |
} else { | |
if (!timePrevious) { | |
console.log('There was no previous rate data, storing latest for offline use.'); | |
doStoreRates = true; | |
} else { | |
if (timeLatest > timePrevious) { | |
console.log('Latest rate data is newer than previous rate data, storing for offline use.'); | |
doStoreRates = true; | |
} else { | |
console.log('Latest rate data is not newer than previous rate data, not storing.'); | |
} | |
} | |
} | |
if (doStoreRates) { | |
localStorage.setItem('openexchangerates.org/latest.json', response); | |
} | |
rateDataBest = rateDataLatest; | |
timeBest = timeLatest; | |
whichBest = 'latest'; | |
}, | |
complete: function(jqXHR, textStatus) { | |
var now = +new Date(), | |
info = 'fallback ('+timeFallback+') is about ' + durationInMsToText(now - timeFallback) + ' old.'; | |
if (timePrevious) info += '\nprevious ('+timePrevious+') is about ' + durationInMsToText(now - timePrevious) + ' old.'; | |
if (timeLatest) info += '\nlatest ('+timeLatest+') is about ' + durationInMsToText(now - timeLatest) + ' old.'; | |
console.log(info); | |
shell.emit('Using ' + whichBest + ' exchange rate data, which is about ' + durationInMsToText(now - timeBest) + ' old.'); | |
// TODO have one "local" currency detected via geolocation | |
// TODO have one default "from" currency | |
// TODO have any number of default "to" currencies | |
} | |
}); | |
}); | |
// called from the HTML | |
// first calls parse() to convert the new command from text to JSON | |
// then interprets and acts on the JSON | |
// handles the semantics of implied parameters, etc | |
// TODO semantics to not convert any currency to itself | |
function command(cmd) { | |
var ok = false, | |
result, | |
parseTree = parse(cmd); | |
console.log(JSON.stringify(parseTree)); | |
ok = 'from' in parseTree; | |
if (ok) { | |
// just "from" | |
if (!parseTree.to) { | |
// to "favourite" + local currencies | |
if (parseTree.from.currCode) { | |
// TODO fallback "to" currencies | |
result = convert(parseTree.from.amount, parseTree.from.currCode, ['AUD', 'RON', 'GEL']); | |
} else { | |
// from "favourite" / local currency | |
// TODO fallback "from" and "to" currencies | |
result = convert(parseTree.from.amount, 'RON', ['AUD', 'RON', 'GEL']); | |
} | |
// "to" and "from" | |
} else { | |
if (ok) { | |
ok = 'to' in parseTree; | |
if (ok) { | |
if (parseTree.from.currCode) { | |
result = convert(parseTree.from.amount, parseTree.from.currCode, parseTree.to.currCode); | |
} else { | |
// from "favourite" / local currency | |
// TODO | |
result = convert(parseTree.from.amount, 'RON', parseTree.to.currCode); | |
} | |
} | |
} | |
} | |
} | |
if (!ok) { | |
//shell.emit('** syntax error.'); | |
result = '** syntax error.'; | |
} | |
return result; | |
} | |
// called from command() | |
// convert the new command from text to JSON | |
// TODO command to show the exchange rate between one pair of currencies, in both directions | |
// TODO command to refresh the exchange rate data | |
// TODO commands to set favourite "to" and "from" currencies | |
function parse(cmd) { | |
var res = {}, | |
sides = cmd.split(/\s+to\s+/), | |
m, | |
from = {}; | |
// mandatory "from" side | |
if (sides.length == 1 || sides.length == 2) { | |
m = sides[0].match(/^\s*(\d+(?:\.\d+)?)(?:\s+([a-zA-Z][a-zA-Z][a-zA-Z]))?\s*$/); | |
if (m && m.length == 3) { | |
from.amount = m[1]; | |
if (m[2]) { | |
from.currCode = m[2].toUpperCase(); | |
} | |
res.from = from; | |
} | |
} | |
// optional "to" side | |
if (sides.length == 2) { | |
res.to = {}; | |
m = sides[1].match(/^\s*([a-zA-Z][a-zA-Z][a-zA-Z](?:\s*,\s*[a-zA-Z][a-zA-Z][a-zA-Z])*)\s*$/); | |
if (m) { | |
res.to.currCode = m[1].split(/\s*,\s*/).map(function(c) { return c.toUpperCase() }); | |
} | |
} | |
return res; | |
} | |
// convert an amount in the "from" currency to each of the "to" currencies | |
// JSON code in here is experimental | |
function convert(fromAmount, fromCurrCode, toCurrCodes) { | |
var baseToSrc = rateDataBest.rates[fromCurrCode], | |
txt = fromAmount + ' ' + fromCurrCode + ' (' + currencyDataBest.currencies[fromCurrCode] + ') ', | |
baseToDst, | |
srcToDst, | |
toAmount; | |
var json = { | |
from: { | |
amount: fromAmount, | |
currCode: fromCurrCode | |
}, to: [] | |
}; | |
$.each(toCurrCodes, function(i, e) { | |
baseToDst = rateDataBest.rates[e]; | |
srcToDst = baseToDst * (1 / baseToSrc); | |
toAmount = fromAmount * srcToDst; | |
txt += (i == 0 ? '= ' : ', ') + toAmount.toFixed(2) + ' ' + e + ' (' + currencyDataBest.currencies[e] + ')'; | |
json.to.push({currCode: e, amount: toAmount.toFixed(2)}); | |
}); | |
console.log(JSON.stringify(json)); | |
return txt; | |
} | |
// convert number of milliseconds to human-readable text | |
// provides the most signifigant time unit and the next time unit unless it's zero | |
function durationInMsToText(ms) { | |
function unitCountToText(num, unit) { | |
var toEn = [ 'zero', | |
'one', 'two', 'three', 'four', 'five', | |
'six', 'seven', 'eight', 'nine', 'ten', | |
'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', | |
'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty' ]; | |
toEn[30] = 'thirty'; | |
toEn[40] = 'forty'; | |
toEn[50] = 'fifty'; | |
toEn[60] = 'sixty'; | |
toEn[70] = 'seventy'; | |
toEn[80] = 'eighty'; | |
toEn[90] = 'ninety'; | |
return (toEn[num] ? toEn[num] : num) + ' ' + unit + (num === 1 ? '' : 's'); | |
} | |
var units = [ | |
{ perBiggerUnit: 1000, name: 'millisecond', msPer: undefined }, | |
{ perBiggerUnit: 60, name: 'second', msPer: undefined }, | |
{ perBiggerUnit: 60, name: 'minute', msPer: undefined }, | |
{ perBiggerUnit: 24, name: 'hour', msPer: undefined }, | |
{ perBiggerUnit: 365, name: 'day', msPer: undefined }, | |
{ perBiggerUnit: undefined, name: 'year', msPer: undefined } | |
], | |
multiplier = 1, | |
unitCount, | |
i, // reusable iterator index | |
factor, | |
result = [], | |
state = 0; | |
for (i = 0; i < units.length - 1; i++) { | |
units[i+1].msPer = units[i].perBiggerUnit * multiplier; | |
multiplier *= units[i].perBiggerUnit; | |
} | |
for (i = units.length-1; i > 0; --i) { | |
factor = units[i].msPer; | |
unitCount = Math.floor(ms / factor); | |
if (state === 0) { | |
if (unitCount) { | |
result.push(unitCountToText(unitCount, units[i].name)); | |
state = 1; | |
} | |
} else if (state === 1) { | |
if (unitCount) { | |
result.push(unitCountToText(unitCount, units[i].name)); | |
} | |
state = 2; | |
} | |
ms -= unitCount * factor; | |
if (ms < 0) // every ms accounted for - we're done! | |
break; | |
if (state === 2) // two time units is enough - we're done! | |
break; | |
} | |
return result.length ? result.join(', ') : 'a second or less'; | |
} | |
</script> | |
</head> | |
<body> | |
<textarea id="output" rows="22" readonly="readonly" value=""></textarea> | |
<form id="form" action="shell.do" method="get"> | |
<nobr> | |
<textarea class="prompt" id="caret" readonly="readonly" rows="4" | |
onfocus="document.getElementById('statement').focus();">></textarea> | |
<textarea class="prompt" name="statement" id="statement" rows="4" | |
onkeypress="return shell.onPromptKeyPress(event, command);"></textarea> | |
</nobr> | |
<input type="submit" style="display: none" /> | |
</form> | |
</body> | |
<script> | |
// this stuff at the bottom because it slows down the syntax highlighting and causes it to break | |
function getFallbackData() { | |
countryDataFallback = {"query":{"count":252,"created":"2012-08-10T09:20:41Z","lang":"en-US","results":{"row":[{"col0":"# Generated: Wed","col1":" 01 Aug 2012 00:00:46 +0000"},{"col5":"currency","col0":"# id","col1":"code"},{"col5":"EUR","col0":"1","col1":"AD"},{"col5":"AED","col0":"2","col1":"AE"},{"col5":"AFN","col0":"3","col1":"AF"},{"col5":"XCD","col0":"4","col1":"AG"},{"col5":"XCD","col0":"5","col1":"AI"},{"col5":"ALL","col0":"6","col1":"AL"},{"col5":"AMD","col0":"7","col1":"AM"},{"col5":"AOA","col0":"8","col1":"AO"},{"col5":null,"col0":"9","col1":"AQ"},{"col5":"ARS","col0":"10","col1":"AR"},{"col5":"USD","col0":"11","col1":"AS"},{"col5":"EUR","col0":"12","col1":"AT"},{"col5":"AUD","col0":"13","col1":"AU"},{"col5":"AWG","col0":"14","col1":"AW"},{"col5":"EUR","col0":"15","col1":"AX"},{"col5":"AZN","col0":"16","col1":"AZ"},{"col5":"BAM","col0":"17","col1":"BA"},{"col5":"BBD","col0":"18","col1":"BB"},{"col5":"BDT","col0":"19","col1":"BD"},{"col5":"EUR","col0":"20","col1":"BE"},{"col5":"XOF","col0":"21","col1":"BF"},{"col5":"BGN","col0":"22","col1":"BG"},{"col5":"BHD","col0":"23","col1":"BH"},{"col5":"BIF","col0":"24","col1":"BI"},{"col5":"XOF","col0":"25","col1":"BJ"},{"col5":"EUR","col0":"26","col1":"BL"},{"col5":"BMD","col0":"27","col1":"BM"},{"col5":"BND","col0":"28","col1":"BN"},{"col5":"BOB","col0":"29","col1":"BO"},{"col5":"USD","col0":"30","col1":"BQ"},{"col5":"BRL","col0":"31","col1":"BR"},{"col5":"BSD","col0":"32","col1":"BS"},{"col5":"BTN","col0":"33","col1":"BT"},{"col5":"NOK","col0":"34","col1":"BV"},{"col5":"BWP","col0":"35","col1":"BW"},{"col5":"BYR","col0":"36","col1":"BY"},{"col5":"BZD","col0":"37","col1":"BZ"},{"col5":"CAD","col0":"38","col1":"CA"},{"col5":"AUD","col0":"39","col1":"CC"},{"col5":"CDF","col0":"40","col1":"CD"},{"col5":"XAF","col0":"41","col1":"CF"},{"col5":"XAF","col0":"42","col1":"CG"},{"col5":"CHE","col0":"43","col1":"CH"},{"col5":"XOF","col0":"44","col1":"CI"},{"col5":"NZD","col0":"45","col1":"CK"},{"col5":"CLF","col0":"46","col1":"CL"},{"col5":"XAF","col0":"47","col1":"CM"},{"col5":"CNY","col0":"48","col1":"CN"},{"col5":"COP","col0":"49","col1":"CO"},{"col5":"CRC","col0":"50","col1":"CR"},{"col5":"CUC","col0":"51","col1":"CU"},{"col5":"CVE","col0":"52","col1":"CV"},{"col5":"ANG","col0":"53","col1":"CW"},{"col5":"AUD","col0":"54","col1":"CX"},{"col5":"EUR","col0":"55","col1":"CY"},{"col5":"CZK","col0":"56","col1":"CZ"},{"col5":"EUR","col0":"57","col1":"DE"},{"col5":"DJF","col0":"58","col1":"DJ"},{"col5":"DKK","col0":"59","col1":"DK"},{"col5":"XCD","col0":"60","col1":"DM"},{"col5":"DOP","col0":"61","col1":"DO"},{"col5":"DZD","col0":"62","col1":"DZ"},{"col5":"USD","col0":"63","col1":"EC"},{"col5":"EUR","col0":"64","col1":"EE"},{"col5":"EGP","col0":"65","col1":"EG"},{"col5":"MAD","col0":"66","col1":"EH"},{"col5":"ERN","col0":"67","col1":"ER"},{"col5":"EUR","col0":"68","col1":"ES"},{"col5":"ETB","col0":"69","col1":"ET"},{"col5":"EUR","col0":"70","col1":"EU"},{"col5":"EUR","col0":"71","col1":"FI"},{"col5":"FJD","col0":"72","col1":"FJ"},{"col5":"FKP","col0":"73","col1":"FK"},{"col5":"USD","col0":"74","col1":"FM"},{"col5":"DKK","col0":"75","col1":"FO"},{"col5":"EUR","col0":"76","col1":"FR"},{"col5":"XAF","col0":"77","col1":"GA"},{"col5":"GBP","col0":"78","col1":"GB"},{"col5":"XCD","col0":"79","col1":"GD"},{"col5":"GEL","col0":"80","col1":"GE"},{"col5":"EUR","col0":"81","col1":"GF"},{"col5":"GBP","col0":"82","col1":"GG"},{"col5":"GHS","col0":"83","col1":"GH"},{"col5":"GIP","col0":"84","col1":"GI"},{"col5":"DKK","col0":"85","col1":"GL"},{"col5":"GMD","col0":"86","col1":"GM"},{"col5":"GNF","col0":"87","col1":"GN"},{"col5":"EUR","col0":"88","col1":"GP"},{"col5":"XAF","col0":"89","col1":"GQ"},{"col5":"EUR","col0":"90","col1":"GR"},{"col5":null,"col0":"91","col1":"GS"},{"col5":"GTQ","col0":"92","col1":"GT"},{"col5":"USD","col0":"93","col1":"GU"},{"col5":"XOF","col0":"94","col1":"GW"},{"col5":"GYD","col0":"95","col1":"GY"},{"col5":"HKD","col0":"96","col1":"HK"},{"col5":"AUD","col0":"97","col1":"HM"},{"col5":"HNL","col0":"98","col1":"HN"},{"col5":"HRK","col0":"99","col1":"HR"},{"col5":"HTG","col0":"100","col1":"HT"},{"col5":"HUF","col0":"101","col1":"HU"},{"col5":"IDR","col0":"102","col1":"ID"},{"col5":"EUR","col0":"103","col1":"IE"},{"col5":"ILS","col0":"104","col1":"IL"},{"col5":"GBP","col0":"105","col1":"IM"},{"col5":"INR","col0":"106","col1":"IN"},{"col5":"USD","col0":"107","col1":"IO"},{"col5":"IQD","col0":"108","col1":"IQ"},{"col5":"IRR","col0":"109","col1":"IR"},{"col5":"ISK","col0":"110","col1":"IS"},{"col5":"EUR","col0":"111","col1":"IT"},{"col5":"GBP","col0":"112","col1":"JE"},{"col5":"JMD","col0":"113","col1":"JM"},{"col5":"JOD","col0":"114","col1":"JO"},{"col5":"JPY","col0":"115","col1":"JP"},{"col5":"KES","col0":"116","col1":"KE"},{"col5":"KGS","col0":"117","col1":"KG"},{"col5":"KHR","col0":"118","col1":"KH"},{"col5":"AUD","col0":"119","col1":"KI"},{"col5":"KMF","col0":"120","col1":"KM"},{"col5":"XCD","col0":"121","col1":"KN"},{"col5":"KPW","col0":"122","col1":"KP"},{"col5":"KRW","col0":"123","col1":"KR"},{"col5":"KWD","col0":"124","col1":"KW"},{"col5":"KYD","col0":"125","col1":"KY"},{"col5":"KZT","col0":"126","col1":"KZ"},{"col5":"LAK","col0":"127","col1":"LA"},{"col5":"LBP","col0":"128","col1":"LB"},{"col5":"XCD","col0":"129","col1":"LC"},{"col5":"CHF","col0":"130","col1":"LI"},{"col5":"LKR","col0":"131","col1":"LK"},{"col5":"LRD","col0":"132","col1":"LR"},{"col5":"LSL","col0":"133","col1":"LS"},{"col5":"LTL","col0":"134","col1":"LT"},{"col5":"EUR","col0":"135","col1":"LU"},{"col5":"LVL","col0":"136","col1":"LV"},{"col5":"LYD","col0":"137","col1":"LY"},{"col5":"MAD","col0":"138","col1":"MA"},{"col5":"EUR","col0":"139","col1":"MC"},{"col5":"MDL","col0":"140","col1":"MD"},{"col5":"EUR","col0":"141","col1":"ME"},{"col5":"EUR","col0":"142","col1":"MF"},{"col5":"MGA","col0":"143","col1":"MG"},{"col5":"USD","col0":"144","col1":"MH"},{"col5":"MKD","col0":"145","col1":"MK"},{"col5":"XOF","col0":"146","col1":"ML"},{"col5":"MMK","col0":"147","col1":"MM"},{"col5":"MNT","col0":"148","col1":"MN"},{"col5":"MOP","col0":"149","col1":"MO"},{"col5":"USD","col0":"150","col1":"MP"},{"col5":"EUR","col0":"151","col1":"MQ"},{"col5":"MRO","col0":"152","col1":"MR"},{"col5":"XCD","col0":"153","col1":"MS"},{"col5":"EUR","col0":"154","col1":"MT"},{"col5":"MUR","col0":"155","col1":"MU"},{"col5":"MVR","col0":"156","col1":"MV"},{"col5":"MWK","col0":"157","col1":"MW"},{"col5":"MXN","col0":"158","col1":"MX"},{"col5":"MYR","col0":"159","col1":"MY"},{"col5":"MZN","col0":"160","col1":"MZ"},{"col5":"NAD","col0":"161","col1":"NA"},{"col5":"XPF","col0":"162","col1":"NC"},{"col5":"XOF","col0":"163","col1":"NE"},{"col5":"AUD","col0":"164","col1":"NF"},{"col5":"NGN","col0":"165","col1":"NG"},{"col5":"NIO","col0":"166","col1":"NI"},{"col5":"EUR","col0":"167","col1":"NL"},{"col5":"NOK","col0":"168","col1":"NO"},{"col5":"NPR","col0":"169","col1":"NP"},{"col5":"AUD","col0":"170","col1":"NR"},{"col5":"NZD","col0":"171","col1":"NU"},{"col5":"NZD","col0":"172","col1":"NZ"},{"col5":"OMR","col0":"173","col1":"OM"},{"col5":"PAB","col0":"174","col1":"PA"},{"col5":"PEN","col0":"175","col1":"PE"},{"col5":"XPF","col0":"176","col1":"PF"},{"col5":"PGK","col0":"177","col1":"PG"},{"col5":"PHP","col0":"178","col1":"PH"},{"col5":"PKR","col0":"179","col1":"PK"},{"col5":"PLN","col0":"180","col1":"PL"},{"col5":"EUR","col0":"181","col1":"PM"},{"col5":"NZD","col0":"182","col1":"PN"},{"col5":"USD","col0":"183","col1":"PR"},{"col5":null,"col0":"184","col1":"PS"},{"col5":"EUR","col0":"185","col1":"PT"},{"col5":"USD","col0":"186","col1":"PW"},{"col5":"PYG","col0":"187","col1":"PY"},{"col5":"QAR","col0":"188","col1":"QA"},{"col5":"EUR","col0":"189","col1":"RE"},{"col5":"RON","col0":"190","col1":"RO"},{"col5":"RSD","col0":"191","col1":"RS"},{"col5":"RUB","col0":"192","col1":"RU"},{"col5":"RWF","col0":"193","col1":"RW"},{"col5":"SAR","col0":"194","col1":"SA"},{"col5":"SBD","col0":"195","col1":"SB"},{"col5":"SCR","col0":"196","col1":"SC"},{"col5":"SDG","col0":"197","col1":"SD"},{"col5":"SEK","col0":"198","col1":"SE"},{"col5":"SGD","col0":"199","col1":"SG"},{"col5":"SHP","col0":"200","col1":"SH"},{"col5":"EUR","col0":"201","col1":"SI"},{"col5":"NOK","col0":"202","col1":"SJ"},{"col5":"EUR","col0":"203","col1":"SK"},{"col5":"SLL","col0":"204","col1":"SL"},{"col5":"EUR","col0":"205","col1":"SM"},{"col5":"XOF","col0":"206","col1":"SN"},{"col5":"SOS","col0":"207","col1":"SO"},{"col5":"SRD","col0":"208","col1":"SR"},{"col5":"SSP","col0":"209","col1":"SS"},{"col5":"STD","col0":"210","col1":"ST"},{"col5":"USD","col0":"211","col1":"SV"},{"col5":"ANG","col0":"212","col1":"SX"},{"col5":"SYP","col0":"213","col1":"SY"},{"col5":"SZL","col0":"214","col1":"SZ"},{"col5":"USD","col0":"215","col1":"TC"},{"col5":"XAF","col0":"216","col1":"TD"},{"col5":"EUR","col0":"217","col1":"TF"},{"col5":"XOF","col0":"218","col1":"TG"},{"col5":"THB","col0":"219","col1":"TH"},{"col5":"TJS","col0":"220","col1":"TJ"},{"col5":"NZD","col0":"221","col1":"TK"},{"col5":"USD","col0":"222","col1":"TL"},{"col5":"TMT","col0":"223","col1":"TM"},{"col5":"TND","col0":"224","col1":"TN"},{"col5":"TOP","col0":"225","col1":"TO"},{"col5":"TRY","col0":"226","col1":"TR"},{"col5":"TTD","col0":"227","col1":"TT"},{"col5":"AUD","col0":"228","col1":"TV"},{"col5":"TWD","col0":"229","col1":"TW"},{"col5":"TZS","col0":"230","col1":"TZ"},{"col5":"UAH","col0":"231","col1":"UA"},{"col5":"UGX","col0":"232","col1":"UG"},{"col5":"USD","col0":"233","col1":"UM"},{"col5":"USD","col0":"234","col1":"US"},{"col5":"UYI","col0":"235","col1":"UY"},{"col5":"UZS","col0":"236","col1":"UZ"},{"col5":"EUR","col0":"237","col1":"VA"},{"col5":"XCD","col0":"238","col1":"VC"},{"col5":"VEF","col0":"239","col1":"VE"},{"col5":"USD","col0":"240","col1":"VG"},{"col5":"USD","col0":"241","col1":"VI"},{"col5":"VND","col0":"242","col1":"VN"},{"col5":"VUV","col0":"243","col1":"VU"},{"col5":"XPF","col0":"244","col1":"WF"},{"col5":"WST","col0":"245","col1":"WS"},{"col5":"YER","col0":"246","col1":"YE"},{"col5":"EUR","col0":"247","col1":"YT"},{"col5":"ZAR","col0":"248","col1":"ZA"},{"col5":"ZMK","col0":"249","col1":"ZM"},{"col5":"ZWL","col0":"250","col1":"ZW"}]}}}; | |
currencyDataFallback = {"query":{"count":184,"created":"2012-08-10T08:49:04Z","lang":"en-US","results":{"row":[{"col0":"# Generated: Wed","col1":" 01 Aug 2012 00:00:46 +0000"},{"col4":"country","col0":"# id","col1":"code","col2":"name"},{"col4":"AE","col0":"1","col1":"AED","col2":"UAE Dirham"},{"col4":"AF","col0":"2","col1":"AFN","col2":"Afghani"},{"col4":"AL","col0":"3","col1":"ALL","col2":"Lek"},{"col4":"AM","col0":"4","col1":"AMD","col2":"Armenian Dram"},{"col4":null,"col0":"5","col1":"ANG","col2":"Netherlands Antillean Guilder"},{"col4":"AO","col0":"6","col1":"AOA","col2":"Kwanza"},{"col4":"AR","col0":"7","col1":"ARS","col2":"Argentine Peso"},{"col4":"AU","col0":"8","col1":"AUD","col2":"Australian Dollar"},{"col4":"AW","col0":"9","col1":"AWG","col2":"Aruban Florin"},{"col4":"AZ","col0":"10","col1":"AZN","col2":"Azerbaijanian Manat"},{"col4":"BA","col0":"11","col1":"BAM","col2":"Convertible Mark"},{"col4":"BB","col0":"12","col1":"BBD","col2":"Barbados Dollar"},{"col4":"BD","col0":"13","col1":"BDT","col2":"Taka"},{"col4":"BG","col0":"14","col1":"BGN","col2":"Bulgarian Lev"},{"col4":"BH","col0":"15","col1":"BHD","col2":"Bahraini Dinar"},{"col4":"BI","col0":"16","col1":"BIF","col2":"Burundi Franc"},{"col4":"BM","col0":"17","col1":"BMD","col2":"Bermudian Dollar"},{"col4":"BN","col0":"18","col1":"BND","col2":"Brunei Dollar"},{"col4":"BO","col0":"19","col1":"BOB","col2":"Boliviano"},{"col4":"BO","col0":"20","col1":"BOV","col2":"Mvdol"},{"col4":"BR","col0":"21","col1":"BRL","col2":"Brazilian Real"},{"col4":"BS","col0":"22","col1":"BSD","col2":"Bahamian Dollar"},{"col4":"BT","col0":"23","col1":"BTN","col2":"Ngultrum"},{"col4":"BW","col0":"24","col1":"BWP","col2":"Pula"},{"col4":"BY","col0":"25","col1":"BYR","col2":"Belarussian Ruble"},{"col4":"BZ","col0":"26","col1":"BZD","col2":"Belize Dollar"},{"col4":"CA","col0":"27","col1":"CAD","col2":"Canadian Dollar"},{"col4":"CD","col0":"28","col1":"CDF","col2":"Congolese Franc"},{"col4":"CH","col0":"29","col1":"CHE","col2":"WIR Euro"},{"col4":"CH","col0":"30","col1":"CHF","col2":"Swiss Franc"},{"col4":"CH","col0":"31","col1":"CHW","col2":"WIR Franc"},{"col4":"CL","col0":"32","col1":"CLF","col2":"Unidades de fomento"},{"col4":"CL","col0":"33","col1":"CLP","col2":"Chilean Peso"},{"col4":"CN","col0":"34","col1":"CNY","col2":"Yuan Renminbi"},{"col4":"CO","col0":"35","col1":"COP","col2":"Colombian Peso"},{"col4":"CO","col0":"36","col1":"COU","col2":"Unidad de Valor Real"},{"col4":"CR","col0":"37","col1":"CRC","col2":"Costa Rican Colon"},{"col4":"CU","col0":"38","col1":"CUC","col2":"Peso Convertible"},{"col4":"CU","col0":"39","col1":"CUP","col2":"Cuban Peso"},{"col4":"CV","col0":"40","col1":"CVE","col2":"Cape Verde Escudo"},{"col4":"CZ","col0":"41","col1":"CZK","col2":"Czech Koruna"},{"col4":"DJ","col0":"42","col1":"DJF","col2":"Djibouti Franc"},{"col4":"DK","col0":"43","col1":"DKK","col2":"Danish Krone"},{"col4":"DO","col0":"44","col1":"DOP","col2":"Dominican Peso"},{"col4":"DZ","col0":"45","col1":"DZD","col2":"Algerian Dinar"},{"col4":"EG","col0":"46","col1":"EGP","col2":"Egyptian Pound"},{"col4":"ER","col0":"47","col1":"ERN","col2":"Nakfa"},{"col4":"ET","col0":"48","col1":"ETB","col2":"Ethiopian Birr"},{"col4":"EU","col0":"49","col1":"EUR","col2":"Euro"},{"col4":"FJ","col0":"50","col1":"FJD","col2":"Fiji Dollar"},{"col4":"FK","col0":"51","col1":"FKP","col2":"Falkland Islands Pound"},{"col4":"GB","col0":"52","col1":"GBP","col2":"Pound Sterling"},{"col4":"GE","col0":"53","col1":"GEL","col2":"Lari"},{"col4":"GH","col0":"54","col1":"GHS","col2":"Ghana Cedi"},{"col4":"GI","col0":"55","col1":"GIP","col2":"Gibraltar Pound"},{"col4":"GM","col0":"56","col1":"GMD","col2":"Dalasi"},{"col4":"GN","col0":"57","col1":"GNF","col2":"Guinea Franc"},{"col4":"GT","col0":"58","col1":"GTQ","col2":"Quetzal"},{"col4":"GY","col0":"59","col1":"GYD","col2":"Guyana Dollar"},{"col4":"HK","col0":"60","col1":"HKD","col2":"Hong Kong Dollar"},{"col4":"HN","col0":"61","col1":"HNL","col2":"Lempira"},{"col4":"HR","col0":"62","col1":"HRK","col2":"Croatian Kuna"},{"col4":"HT","col0":"63","col1":"HTG","col2":"Gourde"},{"col4":"HU","col0":"64","col1":"HUF","col2":"Forint"},{"col4":"ID","col0":"65","col1":"IDR","col2":"Rupiah"},{"col4":"IL","col0":"66","col1":"ILS","col2":"New Israeli Sheqel"},{"col4":"IN","col0":"67","col1":"INR","col2":"Indian Rupee"},{"col4":"IQ","col0":"68","col1":"IQD","col2":"Iraqi Dinar"},{"col4":"IR","col0":"69","col1":"IRR","col2":"Iranian Rial"},{"col4":"IS","col0":"70","col1":"ISK","col2":"Iceland Krona"},{"col4":"JM","col0":"71","col1":"JMD","col2":"Jamaican Dollar"},{"col4":"JO","col0":"72","col1":"JOD","col2":"Jordanian Dinar"},{"col4":"JP","col0":"73","col1":"JPY","col2":"Yen"},{"col4":"KE","col0":"74","col1":"KES","col2":"Kenyan Shilling"},{"col4":"KG","col0":"75","col1":"KGS","col2":"Som"},{"col4":"KH","col0":"76","col1":"KHR","col2":"Riel"},{"col4":"KM","col0":"77","col1":"KMF","col2":"Comoro Franc"},{"col4":"KP","col0":"78","col1":"KPW","col2":"North Korean Won"},{"col4":"KR","col0":"79","col1":"KRW","col2":"Won"},{"col4":"KW","col0":"80","col1":"KWD","col2":"Kuwaiti Dinar"},{"col4":"KY","col0":"81","col1":"KYD","col2":"Cayman Islands Dollar"},{"col4":"KZ","col0":"82","col1":"KZT","col2":"Tenge"},{"col4":"LA","col0":"83","col1":"LAK","col2":"Kip"},{"col4":"LB","col0":"84","col1":"LBP","col2":"Lebanese Pound"},{"col4":"LK","col0":"85","col1":"LKR","col2":"Sri Lanka Rupee"},{"col4":"LR","col0":"86","col1":"LRD","col2":"Liberian Dollar"},{"col4":"LS","col0":"87","col1":"LSL","col2":"Loti"},{"col4":"LT","col0":"88","col1":"LTL","col2":"Lithuanian Litas"},{"col4":"LV","col0":"89","col1":"LVL","col2":"Latvian Lats"},{"col4":"LY","col0":"90","col1":"LYD","col2":"Libyan Dinar"},{"col4":"MA","col0":"91","col1":"MAD","col2":"Moroccan Dirham"},{"col4":"MD","col0":"92","col1":"MDL","col2":"Moldovan Leu"},{"col4":"MG","col0":"93","col1":"MGA","col2":"Malagasy Ariary"},{"col4":"MK","col0":"94","col1":"MKD","col2":"Denar"},{"col4":"MM","col0":"95","col1":"MMK","col2":"Kyat"},{"col4":"MN","col0":"96","col1":"MNT","col2":"Tugrik"},{"col4":"MO","col0":"97","col1":"MOP","col2":"Pataca"},{"col4":"MR","col0":"98","col1":"MRO","col2":"Ouguiya"},{"col4":"MU","col0":"99","col1":"MUR","col2":"Mauritius Rupee"},{"col4":"MV","col0":"100","col1":"MVR","col2":"Rufiyaa"},{"col4":"MW","col0":"101","col1":"MWK","col2":"Kwacha"},{"col4":"MX","col0":"102","col1":"MXN","col2":"Mexican Peso"},{"col4":"MX","col0":"103","col1":"MXV","col2":"Mexican Unidad de Inversion (UDI)"},{"col4":"MY","col0":"104","col1":"MYR","col2":"Malaysian Ringgit"},{"col4":"MZ","col0":"105","col1":"MZN","col2":"Mozambique Metical"},{"col4":"NA","col0":"106","col1":"NAD","col2":"Namibia Dollar"},{"col4":"NG","col0":"107","col1":"NGN","col2":"Naira"},{"col4":"NI","col0":"108","col1":"NIO","col2":"Cordoba Oro"},{"col4":"NO","col0":"109","col1":"NOK","col2":"Norwegian Krone"},{"col4":"NP","col0":"110","col1":"NPR","col2":"Nepalese Rupee"},{"col4":"NZ","col0":"111","col1":"NZD","col2":"New Zealand Dollar"},{"col4":"OM","col0":"112","col1":"OMR","col2":"Rial Omani"},{"col4":"PA","col0":"113","col1":"PAB","col2":"Balboa"},{"col4":"PE","col0":"114","col1":"PEN","col2":"Nuevo Sol"},{"col4":"PG","col0":"115","col1":"PGK","col2":"Kina"},{"col4":"PH","col0":"116","col1":"PHP","col2":"Philippine Peso"},{"col4":"PK","col0":"117","col1":"PKR","col2":"Pakistan Rupee"},{"col4":"PL","col0":"118","col1":"PLN","col2":"Zloty"},{"col4":"PY","col0":"119","col1":"PYG","col2":"Guarani"},{"col4":"QA","col0":"120","col1":"QAR","col2":"Qatari Rial"},{"col4":"RO","col0":"121","col1":"RON","col2":"New Romanian Leu"},{"col4":"RS","col0":"122","col1":"RSD","col2":"Serbian Dinar"},{"col4":"RU","col0":"123","col1":"RUB","col2":"Russian Ruble"},{"col4":"RW","col0":"124","col1":"RWF","col2":"Rwanda Franc"},{"col4":"SA","col0":"125","col1":"SAR","col2":"Saudi Riyal"},{"col4":"SB","col0":"126","col1":"SBD","col2":"Solomon Islands Dollar"},{"col4":"SC","col0":"127","col1":"SCR","col2":"Seychelles Rupee"},{"col4":"SD","col0":"128","col1":"SDG","col2":"Sudanese Pound"},{"col4":"SE","col0":"129","col1":"SEK","col2":"Swedish Krona"},{"col4":"SG","col0":"130","col1":"SGD","col2":"Singapore Dollar"},{"col4":"SH","col0":"131","col1":"SHP","col2":"Saint Helena Pound"},{"col4":"SL","col0":"132","col1":"SLL","col2":"Leone"},{"col4":"SO","col0":"133","col1":"SOS","col2":"Somali Shilling"},{"col4":"SR","col0":"134","col1":"SRD","col2":"Surinam Dollar"},{"col4":"SS","col0":"135","col1":"SSP","col2":"South Sudanese Pound"},{"col4":"ST","col0":"136","col1":"STD","col2":"Dobra"},{"col4":"SV","col0":"137","col1":"SVC","col2":"El Salvador Colon"},{"col4":"SY","col0":"138","col1":"SYP","col2":"Syrian Pound"},{"col4":"SZ","col0":"139","col1":"SZL","col2":"Lilangeni"},{"col4":"TH","col0":"140","col1":"THB","col2":"Baht"},{"col4":"TJ","col0":"141","col1":"TJS","col2":"Somoni"},{"col4":"TM","col0":"142","col1":"TMT","col2":"Turkmenistan New Manat"},{"col4":"TN","col0":"143","col1":"TND","col2":"Tunisian Dinar"},{"col4":"TO","col0":"144","col1":"TOP","col2":"Pa'anga"},{"col4":"TR","col0":"145","col1":"TRY","col2":"Turkish Lira"},{"col4":"TT","col0":"146","col1":"TTD","col2":"Trinidad and Tobago Dollar"},{"col4":"TW","col0":"147","col1":"TWD","col2":"New Taiwan Dollar"},{"col4":"TZ","col0":"148","col1":"TZS","col2":"Tanzanian Shilling"},{"col4":"UA","col0":"149","col1":"UAH","col2":"Hryvnia"},{"col4":"UG","col0":"150","col1":"UGX","col2":"Uganda Shilling"},{"col4":"US","col0":"151","col1":"USD","col2":"US Dollar"},{"col4":"US","col0":"152","col1":"USN","col2":"US Dollar (Next day)"},{"col4":"US","col0":"153","col1":"USS","col2":"US Dollar (Same day)"},{"col4":"UY","col0":"154","col1":"UYI","col2":"Uruguay Peso en Unidades Indexadas (URUIURUI)"},{"col4":"UY","col0":"155","col1":"UYU","col2":"Peso Uruguayo"},{"col4":"UZ","col0":"156","col1":"UZS","col2":"Uzbekistan Sum"},{"col4":"VE","col0":"157","col1":"VEF","col2":"Bolivar Fuerte"},{"col4":"VN","col0":"158","col1":"VND","col2":"Dong"},{"col4":"VU","col0":"159","col1":"VUV","col2":"Vatu"},{"col4":"WS","col0":"160","col1":"WST","col2":"Tala"},{"col4":null,"col0":"161","col1":"XAF","col2":"CFA Franc BEAC"},{"col4":null,"col0":"162","col1":"XAG","col2":"Silver"},{"col4":null,"col0":"163","col1":"XAU","col2":"Gold"},{"col4":null,"col0":"164","col1":"XBA","col2":"Bond Markets Unit European Composite Unit (EURCO)"},{"col4":null,"col0":"165","col1":"XBB","col2":"Bond Markets Unit European Monetary Unit (E.M.U.-6)"},{"col4":null,"col0":"166","col1":"XBC","col2":"Bond Markets Unit European Unit of Account 9 (E.U.A.-9)"},{"col4":null,"col0":"167","col1":"XBD","col2":"Bond Markets Unit European Unit of Account 17 (E.U.A.-17)"},{"col4":null,"col0":"168","col1":"XCD","col2":"East Caribbean Dollar"},{"col4":null,"col0":"169","col1":"XDR","col2":"SDR (Special Drawing Right)"},{"col4":null,"col0":"170","col1":"XFU","col2":"UIC-Franc"},{"col4":null,"col0":"171","col1":"XOF","col2":"CFA Franc BCEAO"},{"col4":null,"col0":"172","col1":"XPD","col2":"Palladium"},{"col4":null,"col0":"173","col1":"XPF","col2":"CFP Franc"},{"col4":null,"col0":"174","col1":"XPT","col2":"Platinum"},{"col4":null,"col0":"175","col1":"XSU","col2":"Sucre"},{"col4":null,"col0":"176","col1":"XTS","col2":"Codes specifically reserved for testing purposes"},{"col4":null,"col0":"177","col1":"XUA","col2":"ADB Unit of Account"},{"col4":null,"col0":"178","col1":"XXX","col2":"The codes assigned for transactions where no currency is involved"},{"col4":"YE","col0":"179","col1":"YER","col2":"Yemeni Rial"},{"col4":"ZA","col0":"180","col1":"ZAR","col2":"Rand"},{"col4":"ZM","col0":"181","col1":"ZMK","col2":"Zambian Kwacha"},{"col4":"ZW","col0":"182","col1":"ZWL","col2":"Zimbabwe Dollar"}]}}}; | |
rateDataFallback = {"timestamp":1343577733,"base":"USD","rates":{"AED":3.672438,"AFN":48.334349,"ALL":111.626666,"AMD":407.294995,"ANG":1.77645,"AOA":95.379997,"ARS":4.573552,"AUD":0.954454,"AWG":1.7918,"AZN":0.785443,"BAM":1.589075,"BBD":2,"BDT":81.837267,"BGN":1.589737,"BHD":0.376947,"BIF":1447.51,"BMD":1,"BND":1.247975,"BOB":6.985242,"BRL":2.022412,"BSD":1,"BTN":51.325,"BWP":7.672015,"BYR":8321.76,"BZD":1.89505,"CAD":1.003525,"CDF":925.090851,"CHF":0.975314,"CLF":0.02142,"CLP":483.716369,"CNY":6.379627,"COP":1791.061187,"CRC":500.320125,"CUP":1,"CVE":89.831134,"CZK":20.549553,"DJF":177.706668,"DKK":6.039447,"DOP":39.089043,"DZD":81.682414,"EGP":6.065053,"ETB":17.92185,"EUR":0.811782,"FJD":1.789517,"FKP":0.635248,"GBP":0.635248,"GEL":1.729,"GHS":1.963483,"GIP":0.630895,"GMD":31.563133,"GNF":7167.786667,"GTQ":7.827417,"GYD":202.949998,"HKD":7.757227,"HNL":19.053565,"HRK":6.165403,"HTG":42.0524,"HUF":227.972043,"IDR":9455.178065,"ILS":4.046476,"INR":55.247641,"IQD":1164.291667,"IRR":12293.67,"ISK":122.44,"JMD":88.87036,"JOD":0.708563,"JPY":78.500759,"KES":84.307073,"KGS":45.100399,"KHR":4105.776667,"KMF":399.608164,"KPW":900,"KRW":1138.575534,"KWD":0.281635,"KZT":150.006878,"LAK":8017.606667,"LBP":1503.28485,"LKR":131.932694,"LRD":74.814999,"LSL":8.244533,"LTL":2.803262,"LVL":0.564837,"LYD":1.271233,"MAD":8.939121,"MDL":12.545429,"MGA":2257.76,"MKD":50.081311,"MMK":872.965,"MNT":1385,"MOP":7.9904,"MRO":300.129996,"MUR":31.074079,"MVR":15.426033,"MWK":273.955001,"MXN":13.235543,"MYR":3.161086,"MZN":28.0662,"NAD":8.222402,"NGN":160.64026,"NIO":23.6234,"NOK":6.045975,"NPR":88.829977,"NZD":1.235012,"OMR":0.384855,"PAB":1,"PEN":2.627525,"PGK":2.058664,"PHP":41.936928,"PKR":94.579832,"PLN":3.353412,"PYG":4441.88361,"QAR":3.641424,"RON":3.736424,"RSD":96.102966,"RUB":32.086939,"RWF":609.794743,"SAR":3.750286,"SBD":7.065961,"SCR":14.146183,"SDG":4.4159,"SEK":6.866213,"SGD":1.247287,"SHP":0.635248,"SLL":4351.66811,"SOS":1623.410016,"SRD":3.286843,"STD":19972.746927,"SVC":8.748595,"SYP":64.403201,"SZL":8.2453,"THB":31.514469,"TJS":4.582,"TMT":2.859728,"TND":1.614125,"TOP":1.763806,"TRY":1.812925,"TTD":6.412352,"TWD":30.047103,"TZS":1578.364268,"UAH":8.095424,"UGX":2478.201868,"USD":1,"UYU":21.508272,"UZS":1900.825169,"VEF":4.294748,"VND":20849.235825,"VUV":91.050003,"WST":2.33404,"XAF":532.712559,"XCD":2.701717,"XDR":0.662122,"XOF":532.628337,"XPF":97.127899,"YER":214.963129,"ZAR":8.160258,"ZMK":4913.120195,"ZWL":322.355011}}; | |
} | |
</script> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment