Skip to content

Instantly share code, notes, and snippets.

@hippietrail
Created August 6, 2012 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hippietrail/3272604 to your computer and use it in GitHub Desktop.
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
<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();">&gt;</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