FlyRates / scratch /exrates.html
Sadeep Sachintha
feat: implement FX service with persistent caching and optimize concurrent rate fetching in main
72fdc64
<!DOCTYPE html>
<html lang="en">
<head>
<title>Exchange Rates</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" src="./javascript/zebra_datepicker.js"></script>
<script type="text/javascript" src="./javascript/iframeResizer.contentWindow.min.js"></script>
<link rel="stylesheet" href="./css/default.css" type="text/css">
</head>
<body onload="setDefault()">
<div class="container-fluid">
<div class="col-sm-12">
<form class="form-horizontal" action="exrates_results.php" method="post" name="lookupForm" id="lookupForm" onsubmit="window.focus(); return checkValidArray();" role="form">
<fieldset>
<legend>Specific Date or Range</legend>
<input name="lookupPage" value="lookup_daily_exchange_rates.php" type="hidden">
<input name="startRange" value="2006-11-11" type="hidden">
<div class="col-sm-offset-2 col-sm-10">
<div class="radio">
<input id="rangeType_dates" id="rangeType" name="rangeType" value="dates" checked="checked" type="radio" onchange="getSpecificValue(this.value)">
<div class="form-inline">
<div class="form-group">
<label class="control-label">Start (or single date) </label>
<div class="input-group">
<input class="datepicker" type="text" id="txtStart" name="txtStart" value="2026-05-17">
</div>
<label class="control-label">to</label>
<div class="input-group">
<input class="datepicker" type="text" id="txtEnd" name="txtEnd" value="2026-05-17">
</div>
</div>
</div>
<p class="small text-muted">Date Format: yyyy-mm-dd</p>
</div>
<div id="errordiv" class="text-danger form-group" style="display: none;"></div>
<div class="radio">
<div class="form-group">
<label for="rangeType_range">
<input id="rangeType_range" name="rangeType" value="range" type="radio" onchange="getQuickDate(this.value)">Quick Date:
</label>
</div>
<div class="form-inline">
<div class="form-group">
<span>Latest</span>
<select id="rangeValue" name="rangeValue" onchange="setQuickValueRange()" class="form-control" disabled>
<option value="1" selected="selected">1 day</option>
<option value="7">7 days</option>
<option value="14">14 days</option>
<option value="21">21 days</option>
<option value="30">30 days</option>
<option value="60">60 days</option>
</select>
<span>for daily series.</span>
</div>
</div>
</div>
</div>
</fieldset>
<p>&nbsp;</p>
<fieldset>
<legend>Daily Indicative Exchange Rates</legend>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="AUD~Australian Dollar" id="chk_cur[]" type="checkbox"> Australian Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BHD~Bahrain Dinar" id="chk_cur[]" type="checkbox"> Bahrain Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BDT~Bangladesh Taka" id="chk_cur[]" type="checkbox"> Bangladesh Taka</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BRL~Brazil Real" id="chk_cur[]" type="checkbox"> Brazil Real</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BND~Brunei Dollar" id="chk_cur[]" type="checkbox"> Brunei Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CAD~Canadian Dollar" id="chk_cur[]" type="checkbox"> Canadian Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CNH~Chinese Yuan (Offshore)" id="chk_cur[]" type="checkbox"> Chinese Yuan (Offshore)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CNY~Chinese Yuan (Renminbi)" id="chk_cur[]" type="checkbox"> Chinese Yuan (Renminbi)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CZK~Czechoslovak Koruna" id="chk_cur[]" type="checkbox"> Czechoslovak Koruna</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="DKK~Danish Kroner" id="chk_cur[]" type="checkbox"> Danish Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="EGP~Egypt Pound" id="chk_cur[]" type="checkbox"> Egypt Pound</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="EUR~Euro" id="chk_cur[]" type="checkbox" checked> Euro</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="GHS~Ghana Cedi" id="chk_cur[]" type="checkbox"> Ghana Cedi</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="XAU~Gold (per Troy oz.)" id="chk_cur[]" type="checkbox"> Gold (per Troy oz.)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="HKD~Hong Kong Dollar" id="chk_cur[]" type="checkbox"> Hong Kong Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="HUF~Hungary Forint" id="chk_cur[]" type="checkbox"> Hungary Forint</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="INR~Indian Rupee" id="chk_cur[]" type="checkbox"> Indian Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="IDR~Indonesian Rupiah" id="chk_cur[]" type="checkbox"> Indonesian Rupiah</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="IRR~Iran Rial" id="chk_cur[]" type="checkbox"> Iran Rial</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="JPY~Japanese Yen" id="chk_cur[]" type="checkbox" checked> Japanese Yen</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="JOD~Jordan Dinar" id="chk_cur[]" type="checkbox"> Jordan Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KES~Kenya Shillings" id="chk_cur[]" type="checkbox"> Kenya Shillings</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KRW~Korean Won" id="chk_cur[]" type="checkbox"> Korean Won</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KWD~Kuwait Dinar" id="chk_cur[]" type="checkbox"> Kuwait Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MOP~Macau Pataca" id="chk_cur[]" type="checkbox"> Macau Pataca</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MYR~Malaysia Ringgit" id="chk_cur[]" type="checkbox"> Malaysia Ringgit</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MVR~Maldivian Rufiya" id="chk_cur[]" type="checkbox"> Maldivian Rufiya</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MUR~Mauritius Rupee" id="chk_cur[]" type="checkbox"> Mauritius Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MMK~Myanmar Kyat" id="chk_cur[]" type="checkbox"> Myanmar Kyat</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NPR~Nepal Rupee" id="chk_cur[]" type="checkbox"> Nepal Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="RON~New Romania Leu" id="chk_cur[]" type="checkbox"> New Romania Leu</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NZD~New Zealand Dollar" id="chk_cur[]" type="checkbox"> New Zealand Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NGN~Nigeria Naira" id="chk_cur[]" type="checkbox"> Nigeria Naira</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NOK~Norwegian Kroner" id="chk_cur[]" type="checkbox"> Norwegian Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="OMR~Oman Rial" id="chk_cur[]" type="checkbox"> Oman Rial</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PKR~Pakistan Rupee" id="chk_cur[]" type="checkbox"> Pakistan Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PGK~Papua New Guinea Kina" id="chk_cur[]" type="checkbox"> Papua New Guinea Kina</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PHP~Philippines Peso" id="chk_cur[]" type="checkbox"> Philippines Peso</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PLN~Poland Zloty" id="chk_cur[]" type="checkbox"> Poland Zloty</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="QAR~Qatar Riyal" id="chk_cur[]" type="checkbox"> Qatar Riyal</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="RUB~Russia Rouble" id="chk_cur[]" type="checkbox"> Russia Rouble</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SAR~Saudi Arabian Riyal" id="chk_cur[]" type="checkbox"> Saudi Arabian Riyal</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SCR~Seychelles Rupee" id="chk_cur[]" type="checkbox"> Seychelles Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SGD~Singapore Dollar" id="chk_cur[]" type="checkbox"> Singapore Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SBD~Solomon Island Dollar" id="chk_cur[]" type="checkbox"> Solomon Island Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="ZAR~South African Rand" id="chk_cur[]" type="checkbox"> South African Rand</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="GBP~Sterling Pound" id="chk_cur[]" type="checkbox"> Sterling Pound</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SEK~Swedish Kroner" id="chk_cur[]" type="checkbox"> Swedish Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CHF~Swiss Franc" id="chk_cur[]" type="checkbox"> Swiss Franc</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="TWD~Taiwan Dollar" id="chk_cur[]" type="checkbox"> Taiwan Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="THB~Thailand Baht" id="chk_cur[]" type="checkbox"> Thailand Baht</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="AED~UAE Dirham" id="chk_cur[]" type="checkbox"> UAE Dirham</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="USD~US Dollar" id="chk_cur[]" type="checkbox" checked> US Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="VND~Vietnam Dong" id="chk_cur[]" type="checkbox"> Vietnam Dong</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="ZMW~Zambia Kwacha (New)" id="chk_cur[]" type="checkbox"> Zambia Kwacha (New)</label></div></div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-default" value="Select All" name="select_button" type="button" onclick="selectAll(document.lookupForm['chk_cur[]'])">Select All</button>
<button class="btn btn-default" value="Clear" name="clear_button" type="button" onclick="deselectAll(document.lookupForm['chk_cur[]'])">Clear</button>
<button class="btn btn-primary" type="submit" value="Submit" name="submit_button">Submit</button>
<!--a href="./exrates_results.php" class="btn btn-primary">Submit</a-->
</div>
</div>
</fieldset>
</form>
</div>
</div>
<script>
$(document).ready(function() {
// assuming the controls you want to attach the plugin to
// have the "datepicker" class set
$('input.datepicker').Zebra_DatePicker();
});
function getSpecificValue() {
document.getElementById("rangeValue").disabled = true;
//document.getElementById("txtStart").disabled = false;
//document.getElementById("txtEnd").disabled = false;
document.getElementById("txtStart").value = formatDate(new Date());
document.getElementById("txtEnd").value = formatDate(new Date());
document.getElementById("rangeValue").value = 1;
}
function getQuickDate() {
document.getElementById("rangeValue").disabled = false;
//document.getElementById("txtStart").readonly = "readonly";
//document.getElementById("txtEnd").readonly = "readonly";
document.getElementById("txtStart").value = formatDate(new Date());
document.getElementById("txtEnd").value = formatDate(new Date());
}
function selectAll(chk) {
for (i = 0; i < chk.length; i++){
chk[i].checked = true ;
}
//alert(chk.length);
}
function deselectAll(chk) {
for (i = 0; i < chk.length; i++){
chk[i].checked = false ;
}
//alert(chk.length);
}
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
function setDefault()
{
document.getElementById("rangeType_dates").checked = true;
document.getElementById("rangeValue").value = 1;
document.getElementById("txtStart").value = formatDate(new Date());
document.getElementById("txtEnd").value = formatDate(new Date());
}
function setQuickValueRange()
{
var rangeSelect = document.getElementById("rangeValue");
var selectedRange = rangeSelect.options[rangeSelect.selectedIndex].value;
//alert(selectedRange);
var now = new Date();
if (selectedRange == 1)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 0));
}
else if (selectedRange == 7)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 6));
}
else if (selectedRange == 14)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 13));
}
else if (selectedRange == 21)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 20));
}
else if (selectedRange == 30)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 29));
}
else if (selectedRange == 60)
{
document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 59));
}
document.getElementById("txtEnd").value = formatDate(new Date());
}
</script>
</body>
</html>