656 lines
13 KiB
JavaScript
656 lines
13 KiB
JavaScript
|
var pageMode;
|
||
|
var pageModes = new Array('Topics', 'Laws', 'Attributions', 'Diplomacy');
|
||
|
var puTimer;
|
||
|
|
||
|
var onGetComplete;
|
||
|
var rtGetData = new Array(); // Research topics for which data must be requested
|
||
|
var rtTitles = new Array(); // Research topics titles
|
||
|
var rtDescriptions = new Array(); // Research topics descriptions
|
||
|
var rtCosts = new Array(); // Research topics implementation cost
|
||
|
var rtTypes = new Array(); // Research topics types
|
||
|
var rtExpanded = new Array(); // Topics for which the description is being displayed
|
||
|
|
||
|
var rtAll; // All research topics or laws
|
||
|
|
||
|
var rtCompleted; // Completed researches
|
||
|
var rtImplemented; // Implemted technologies
|
||
|
var rtForeseen; // Foreseen breakthroughs
|
||
|
var rtForeseenP; // Foreseen breakthroughs completion percentages
|
||
|
|
||
|
var lEnacted; // Enacted laws
|
||
|
var lTimeRevoke; // Time left before a law can be revoked
|
||
|
var lAvailable; // Available laws
|
||
|
var lTimeEnact; // Time left before a law can be enacted again
|
||
|
|
||
|
var rbPoints; // Research points / day
|
||
|
var rbPercentage; // Percentage going to each research type
|
||
|
var rbOriPercentage; // Percentage going to each research type before player modification
|
||
|
var rbCatPoints; // Points going to each category
|
||
|
var rbLocks; // Locked categories
|
||
|
|
||
|
var rdDiplomacyDelay;
|
||
|
var rdSentOffer; // Offer sent by the player, false if none
|
||
|
var rdRecOffers; // List of received offers
|
||
|
var rdHistory; // List of past offers
|
||
|
var rdAvailTech; // List of available technologies
|
||
|
var rdRecPage = 0; // Current page for the received offers list
|
||
|
var rdHistPage = 0; // Current page for the history
|
||
|
var rdfType = 0;
|
||
|
var rdfTech = 0;
|
||
|
var rdfTarget = "";
|
||
|
var rdfPrice = "";
|
||
|
|
||
|
var rett;
|
||
|
|
||
|
function initResearchPage(data)
|
||
|
{
|
||
|
setPage(data);
|
||
|
}
|
||
|
|
||
|
|
||
|
function showDescription(id)
|
||
|
{
|
||
|
rtExpanded.push(id);
|
||
|
if (pageMode == 'Topics')
|
||
|
topicsDisplayOk();
|
||
|
else if (pageMode == 'Laws')
|
||
|
lawsDisplayOk();
|
||
|
}
|
||
|
|
||
|
|
||
|
function hideDescription(id)
|
||
|
{
|
||
|
var t = rtExpanded, i;
|
||
|
rtExpanded = new Array();
|
||
|
for (i=0;i<t.length;i++)
|
||
|
if (t[i] != id)
|
||
|
rtExpanded.push(t[i]);
|
||
|
if (pageMode == 'Topics')
|
||
|
topicsDisplayOk();
|
||
|
else if (pageMode == 'Laws')
|
||
|
lawsDisplayOk();
|
||
|
}
|
||
|
|
||
|
|
||
|
function sortResearch(a,b)
|
||
|
{
|
||
|
var ta=rtTitles[a],tb=rtTitles[b];
|
||
|
return (ta > tb ? 1 : -1);
|
||
|
}
|
||
|
|
||
|
|
||
|
function descriptionsReceived(data)
|
||
|
{
|
||
|
if (data != "")
|
||
|
{
|
||
|
var i, l, a = data.split("\n");
|
||
|
l = a.length / 4;
|
||
|
for (i=0;i<l;i++)
|
||
|
{
|
||
|
var tmp = a[i*4+2].split('#');
|
||
|
rtTitles[a[i*4]] = a[i*4+1];
|
||
|
rtCosts[a[i*4]] = tmp[0];
|
||
|
rtTypes[a[i*4]] = tmp[1];
|
||
|
rtDescriptions[a[i*4]] = a[i*4+3];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
rtGetData = new Array();
|
||
|
eval(onGetComplete);
|
||
|
}
|
||
|
|
||
|
|
||
|
function setPage(mode)
|
||
|
{
|
||
|
pageMode = mode;
|
||
|
if (puTimer)
|
||
|
clearTimeout(puTimer);
|
||
|
writeLinks();
|
||
|
document.getElementById('respage').innerHTML = getLoadingText();
|
||
|
|
||
|
var str = 'x_get'+mode+'Data(build'+mode+'Display);'
|
||
|
eval(str);
|
||
|
}
|
||
|
|
||
|
|
||
|
function writeLinks()
|
||
|
{
|
||
|
var str = '', i;
|
||
|
for (i=0;i<pageModes.length;i++)
|
||
|
{
|
||
|
if (str != '')
|
||
|
str += ' - ';
|
||
|
if (pageModes[i] != pageMode)
|
||
|
str += '<a href="#" ' + rett[70+i] + ' onClick="x_setMode(\'' + pageModes[i] + '\', setPage); return false;">';
|
||
|
else
|
||
|
str += '<b><u>';
|
||
|
str += pageTitles[i];
|
||
|
if (pageModes[i] != pageMode)
|
||
|
str += '</a>';
|
||
|
else
|
||
|
str += '</u></b>';
|
||
|
}
|
||
|
document.getElementById('respsel').innerHTML = str;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function buildTopicsDisplay(data)
|
||
|
{
|
||
|
var all = data.split('!');
|
||
|
var t, i;
|
||
|
|
||
|
rtCompleted = (all[1] == "" ? new Array() : all[1].split('#'));
|
||
|
rtAll = rtCompleted;
|
||
|
rtImplemented = (all[0] == "" ? new Array() : all[0].split('#'));
|
||
|
rtAll = rtAll.concat(rtImplemented);
|
||
|
|
||
|
t = all[2].split('#');
|
||
|
rtForeseen = new Array();
|
||
|
rtForeseenP = new Array();
|
||
|
for (i=0;all[2] != "" && i<t.length/2;i++)
|
||
|
{
|
||
|
rtForeseen[i] = t[i*2];
|
||
|
rtForeseenP[t[i*2]] = t[i*2+1];
|
||
|
}
|
||
|
rtAll = rtAll.concat(rtForeseen);
|
||
|
|
||
|
for (i=0;i<rtAll.length;i++)
|
||
|
{
|
||
|
if (!rtTitles[rtAll[i]])
|
||
|
rtGetData.push(rtAll[i]);
|
||
|
}
|
||
|
|
||
|
if (rtGetData.length > 0)
|
||
|
{
|
||
|
onGetComplete = 'topicsDisplayOk();';
|
||
|
x_getDescriptions(rtGetData.join('#'), descriptionsReceived);
|
||
|
}
|
||
|
else
|
||
|
topicsDisplayOk();
|
||
|
|
||
|
puTimer = setTimeout('x_getTopicsData(buildTopicsDisplay)', 900000);
|
||
|
}
|
||
|
|
||
|
|
||
|
function topicsDisplayOk()
|
||
|
{
|
||
|
rtCompleted.sort(sortResearch);
|
||
|
rtImplemented.sort(sortResearch);
|
||
|
rtForeseen.sort(sortResearch);
|
||
|
document.getElementById('respage').innerHTML = getTopicsPage();
|
||
|
}
|
||
|
|
||
|
|
||
|
function implementResult(data) {
|
||
|
if (data == "OK") {
|
||
|
updateHeader();
|
||
|
setPage('Topics');
|
||
|
} else {
|
||
|
var a = data.split('#');
|
||
|
implError(parseInt(a[1], 10));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function implementTechnology(id)
|
||
|
{
|
||
|
if (!confirmTech(id))
|
||
|
return;
|
||
|
x_implementTechnology(id, implementResult);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function buildLawsDisplay(data)
|
||
|
{
|
||
|
var t, i;
|
||
|
|
||
|
t = data.split('#');
|
||
|
lEnacted = new Array();
|
||
|
lTimeRevoke = new Array();
|
||
|
lAvailable = new Array();
|
||
|
lTimeEnact = new Array();
|
||
|
for (i=0;data != "" && i<t.length/2;i++)
|
||
|
{
|
||
|
var j = parseInt(t[i*2+1], 10);
|
||
|
if (j <= 0)
|
||
|
{
|
||
|
lAvailable.push(t[i*2]);
|
||
|
lTimeEnact[t[i*2]] = -j;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
lEnacted.push(t[i*2]);
|
||
|
lTimeRevoke[t[i*2]] = (j-1);
|
||
|
}
|
||
|
}
|
||
|
rtAll = lEnacted.concat(lAvailable);
|
||
|
|
||
|
for (i=0;i<rtAll.length;i++)
|
||
|
{
|
||
|
if (!rtTitles[rtAll[i]])
|
||
|
rtGetData.push(rtAll[i]);
|
||
|
}
|
||
|
|
||
|
if (rtGetData.length > 0)
|
||
|
{
|
||
|
onGetComplete = 'lawsDisplayOk();';
|
||
|
x_getDescriptions(rtGetData.join('#'), descriptionsReceived);
|
||
|
}
|
||
|
else
|
||
|
lawsDisplayOk();
|
||
|
|
||
|
puTimer = setTimeout('x_getLawsData(buildLawsDisplay)', 900000);
|
||
|
}
|
||
|
|
||
|
|
||
|
function lawsDisplayOk()
|
||
|
{
|
||
|
lEnacted.sort(sortResearch);
|
||
|
lAvailable.sort(sortResearch);
|
||
|
document.getElementById('respage').innerHTML = getLawsPage();
|
||
|
}
|
||
|
|
||
|
|
||
|
function switchLawResult(data) {
|
||
|
if (data == "OK") {
|
||
|
updateHeader();
|
||
|
setPage('Laws');
|
||
|
} else {
|
||
|
var a = data.split('#');
|
||
|
slawError(parseInt(a[1], 10));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function revokeLaw(id)
|
||
|
{
|
||
|
if (!confirmRevoke(id))
|
||
|
return;
|
||
|
x_switchLaw(id, switchLawResult);
|
||
|
}
|
||
|
|
||
|
|
||
|
function enactLaw(id)
|
||
|
{
|
||
|
if (!confirmEnact(id))
|
||
|
return;
|
||
|
x_switchLaw(id, switchLawResult);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function buildAttributionsDisplay(data)
|
||
|
{
|
||
|
var a = data.split('#'), i;
|
||
|
|
||
|
rbPoints = a[0];
|
||
|
rbOriPercentage = new Array();
|
||
|
for (i=0;i<rTypes.length;i++)
|
||
|
rbOriPercentage[i] = parseInt(a[i+1], 10);
|
||
|
if (!rbPercentage)
|
||
|
{
|
||
|
rbPercentage = (new Array()).concat(rbOriPercentage);
|
||
|
rbLocks = new Array();
|
||
|
}
|
||
|
computeCatPoints();
|
||
|
|
||
|
if (!document.getElementById('totRPoints'))
|
||
|
drawAttributionsDisplay();
|
||
|
updateAttributionsValues();
|
||
|
|
||
|
puTimer = setTimeout('x_getAttributionsData(buildAttributionsDisplay)', 900000);
|
||
|
}
|
||
|
|
||
|
|
||
|
function computeCatPoints()
|
||
|
{
|
||
|
var i, s;
|
||
|
|
||
|
s = 0;
|
||
|
rbCatPoints = new Array();
|
||
|
for (i=0;i<rTypes.length;i++)
|
||
|
{
|
||
|
rbCatPoints[i] = Math.floor(rbPercentage[i] * rbPoints / 100);
|
||
|
s += rbCatPoints[i];
|
||
|
}
|
||
|
|
||
|
for (i=0;s<rbPoints;i=(i+1)%rTypes.length)
|
||
|
{
|
||
|
rbCatPoints[i] ++;
|
||
|
s++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function updateAttributionsValues()
|
||
|
{
|
||
|
var i, l, s, t, d;
|
||
|
document.getElementById('totRPoints').innerHTML = formatNumber(rbPoints);
|
||
|
l = (rbLocks.length == rTypes.length - 2);
|
||
|
s = '!' + rbLocks.join('!') + '!';
|
||
|
d = false;
|
||
|
for (i=0;i<rTypes.length;i++)
|
||
|
{
|
||
|
document.getElementById('rbval' + i).innerHTML = rbPercentage[i];
|
||
|
document.getElementById('rbpts' + i).innerHTML = formatNumber(rbCatPoints[i].toString());
|
||
|
if (s.indexOf('!' + i + '!') != -1)
|
||
|
t = '<img ' + rett[80] + ' src="'+staticurl+'/beta5/pics/lock_'+color+'.gif" alt="[L]" onClick="switchLock('+i+');" />';
|
||
|
else if (l)
|
||
|
t = ' ';
|
||
|
else
|
||
|
t = '<img ' + rett[81] + ' src="'+staticurl+'/beta5/pics/unlock_'+color+'.gif" alt="[U]" onClick="switchLock('+i+');" />';
|
||
|
document.getElementById('rblock'+i).innerHTML = t;
|
||
|
d = d || (rbPercentage[i] != rbOriPercentage[i]);
|
||
|
}
|
||
|
if (d)
|
||
|
drawBudgetControls();
|
||
|
else
|
||
|
{
|
||
|
document.getElementById('rbcl').innerHTML = ' ';
|
||
|
document.getElementById('rbcr').innerHTML = ' ';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function switchLock(l)
|
||
|
{
|
||
|
var i, a, s = '!' + rbLocks.join('!') + '!';
|
||
|
if (s.indexOf('!' + l + '!') == -1)
|
||
|
rbLocks.push(l);
|
||
|
else
|
||
|
{
|
||
|
a = new Array();
|
||
|
for (i=0;i<rbLocks.length;i++)
|
||
|
if (rbLocks[i] != l)
|
||
|
a.push(rbLocks[i]);
|
||
|
rbLocks = a;
|
||
|
}
|
||
|
updateAttributionsValues();
|
||
|
}
|
||
|
|
||
|
|
||
|
function changeAttr(a, v)
|
||
|
{
|
||
|
var i, j, k;
|
||
|
var rv, orv;
|
||
|
var ls = '!' + rbLocks.join('!') + '!', lv;
|
||
|
var mv = new Array(), mi = new Array(), m;
|
||
|
|
||
|
if (rbPercentage[a] + v < 0)
|
||
|
rv = -rbPercentage[a];
|
||
|
else if (rbPercentage[a] + v > 100)
|
||
|
rv = 100 - rbPercentage[a];
|
||
|
else
|
||
|
rv = v;
|
||
|
if (rv == 0)
|
||
|
return;
|
||
|
|
||
|
mv = mv.concat(rbPercentage);
|
||
|
mv.sort(new Function('a', 'b', 'return a - b'));
|
||
|
m = '';
|
||
|
for (i=0;i<mv.length;i++)
|
||
|
{
|
||
|
k = (rv < 0) ? i : (mv.length - (i+1));
|
||
|
for (j=0;j<mv.length;j++)
|
||
|
if ( mv[k] == rbPercentage[j]
|
||
|
&& m.indexOf('!' + j + '!') == -1
|
||
|
&& ls.indexOf('!' + j + '!') == -1
|
||
|
&& j != a
|
||
|
)
|
||
|
{
|
||
|
mi.push(j);
|
||
|
break;
|
||
|
}
|
||
|
m = '!' + mi.join('!') + '!';
|
||
|
}
|
||
|
|
||
|
rs = Math.abs(rv)/rv;
|
||
|
orv = 0;
|
||
|
for (i=0;rv!=0&&orv!=mi.length;i=(i+1)%mi.length)
|
||
|
{
|
||
|
orv ++;
|
||
|
j = mi[i];
|
||
|
if (rbPercentage[j] - rs < 0 || rbPercentage[j] - rs > 100)
|
||
|
continue;
|
||
|
|
||
|
rbPercentage[a] += rs;
|
||
|
rbPercentage[j] -= rs;
|
||
|
rv -= rs;
|
||
|
orv = 0;
|
||
|
}
|
||
|
|
||
|
computeCatPoints();
|
||
|
updateAttributionsValues();
|
||
|
}
|
||
|
|
||
|
|
||
|
function resetBudget()
|
||
|
{
|
||
|
rbPercentage = (new Array()).concat(rbOriPercentage);
|
||
|
rbLocks = new Array();
|
||
|
computeCatPoints();
|
||
|
updateAttributionsValues();
|
||
|
}
|
||
|
|
||
|
|
||
|
function validateBudget()
|
||
|
{
|
||
|
var s = rbPercentage.join('#');
|
||
|
x_validateBudget(s, budgetValidated);
|
||
|
}
|
||
|
|
||
|
|
||
|
function budgetValidated(data) {
|
||
|
if (data == "OK") {
|
||
|
rbOriPercentage = (new Array()).concat(rbPercentage);
|
||
|
computeCatPoints();
|
||
|
updateAttributionsValues();
|
||
|
} else {
|
||
|
var a = data.split('#');
|
||
|
budgetError(parseInt(a[1], 10));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function ResearchOffer(id,type,status,status2,price,tech,time,player)
|
||
|
{
|
||
|
this.id = id;
|
||
|
this.type = type;
|
||
|
this.status = status;
|
||
|
this.status2 = status2;
|
||
|
this.price = price;
|
||
|
this.tech = tech;
|
||
|
this.time = parseInt(time, 10);
|
||
|
this.player = player;
|
||
|
|
||
|
var d = new Date();
|
||
|
var t = d.getTime();
|
||
|
t = (t - (t % 1000)) / 1000;
|
||
|
this.today = (t - this.time <= rdDiplomacyDelay);
|
||
|
}
|
||
|
|
||
|
|
||
|
function buildDiplomacyDisplay(data)
|
||
|
{
|
||
|
if (data.indexOf('\n') == -1)
|
||
|
drawDiplomacyRestrained(data);
|
||
|
else
|
||
|
{
|
||
|
var i, o, a = data.split('\n'), tl;
|
||
|
|
||
|
rdDiplomacyDelay = parseInt(a.shift(), 10);
|
||
|
tl = a.shift().split('#');
|
||
|
rdAvailTech = new Array();
|
||
|
rtGetData = new Array();
|
||
|
for (i=0;i<tl.length;i++)
|
||
|
{
|
||
|
if (tl[i] == "")
|
||
|
continue;
|
||
|
rdAvailTech.push(tl[i]);
|
||
|
if (!rtTitles[tl[i]])
|
||
|
rtGetData.push(tl[i]);
|
||
|
}
|
||
|
tl = '!' + rtGetData.join('!!') + '!';
|
||
|
|
||
|
rdSentOffer = false;
|
||
|
rdRecOffers = new Array();
|
||
|
rdHistory = new Array();
|
||
|
if (a.length > 1)
|
||
|
{
|
||
|
for (i=0;i<a.length;i+=2)
|
||
|
{
|
||
|
var l = a[i].split('#');
|
||
|
o = new ResearchOffer(l[0],l[1],l[2],l[6],l[3],l[4],l[5],a[i+1]);
|
||
|
if (o.type == "S" && o.today)
|
||
|
rdSentOffer = o;
|
||
|
else if (o.type == "R" && o.status == "P")
|
||
|
rdRecOffers.push(o);
|
||
|
else
|
||
|
rdHistory.push(o);
|
||
|
if (o.tech != "" && !rtTitles[o.tech] && tl.indexOf('!' + o.tech + '!') == -1)
|
||
|
{
|
||
|
rtGetData.push(o.tech);
|
||
|
tl += '!' + o.tech + '!';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
drawDiplomacyLayout();
|
||
|
if (rtGetData.length > 0)
|
||
|
{
|
||
|
onGetComplete = 'drawDiplomacyPage();';
|
||
|
x_getDescriptions(rtGetData.join('#'), descriptionsReceived);
|
||
|
}
|
||
|
else
|
||
|
drawDiplomacyPage();
|
||
|
}
|
||
|
|
||
|
puTimer = setTimeout('x_getDiplomacyData(buildDiplomacyDisplay)', 900000);
|
||
|
}
|
||
|
|
||
|
function drawDiplomacyLayout()
|
||
|
{
|
||
|
var str = '<form action="?"><table cellspacing="0" cellpadding="0"><tr><td colspan="2" id="rdgive"> </td></tr>';
|
||
|
str += '<tr><td colspan="2"> </td></tr>';
|
||
|
str += '<tr><td class="div2" id="rdrec"> </td><td class="div2" id="rdhist"> </td></tr></table></form>';
|
||
|
document.getElementById('respage').innerHTML = str;
|
||
|
}
|
||
|
|
||
|
function drawDiplomacyPage()
|
||
|
{
|
||
|
if (typeof rdSentOffer == "object")
|
||
|
drawRDSentAlready();
|
||
|
else
|
||
|
{
|
||
|
rdAvailTech.sort(sortResearch);
|
||
|
drawRDSendForm();
|
||
|
}
|
||
|
drawRDPending();
|
||
|
drawRDHistory();
|
||
|
}
|
||
|
|
||
|
|
||
|
function sendOffer()
|
||
|
{
|
||
|
if (rdfType == 1 && rdfTech == 0)
|
||
|
{
|
||
|
rdOfferError(1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (rdfTarget == "")
|
||
|
{
|
||
|
rdOfferError(2);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var p;
|
||
|
if (rdfPrice != "")
|
||
|
{
|
||
|
p = parseInt(rdfPrice, 10);
|
||
|
if (rdfPrice != p.toString() || p < 0)
|
||
|
{
|
||
|
rdOfferError(3);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
p = 0;
|
||
|
|
||
|
if (!confirmSendOffer(rdfType, rdfTech, rdfTarget, p))
|
||
|
return;
|
||
|
|
||
|
x_sendOffer(rdfType, rdfTech, rdfTarget, p, offerSent);
|
||
|
}
|
||
|
|
||
|
|
||
|
function offerSent(data)
|
||
|
{
|
||
|
if (data.indexOf('ERR#') == 0)
|
||
|
{
|
||
|
var a = data.split("#");
|
||
|
a[1] = parseInt(a[1], 10);
|
||
|
rdOfferError(a[1]);
|
||
|
}
|
||
|
else
|
||
|
buildDiplomacyDisplay(data);
|
||
|
}
|
||
|
|
||
|
|
||
|
function acceptOffer(oid)
|
||
|
{
|
||
|
var i;
|
||
|
for (i=0;i<rdRecOffers.length&&rdRecOffers[i].id!=oid;i++) ;
|
||
|
if (i == rdRecOffers.length)
|
||
|
return;
|
||
|
|
||
|
if (!confirmAcceptOffer(i))
|
||
|
return;
|
||
|
|
||
|
x_acceptOffer(oid, offerAccepted);
|
||
|
}
|
||
|
|
||
|
|
||
|
function rejectOffer(oid)
|
||
|
{
|
||
|
var i;
|
||
|
for (i=0;i<rdRecOffers.length&&rdRecOffers[i].id!=oid;i++) ;
|
||
|
if (i == rdRecOffers.length)
|
||
|
return;
|
||
|
|
||
|
if (!confirmRejectOffer(i))
|
||
|
return;
|
||
|
|
||
|
x_declineOffer(oid, offerAccepted);
|
||
|
}
|
||
|
|
||
|
|
||
|
function offerAccepted(data)
|
||
|
{
|
||
|
if (data.indexOf('ERR#') == 0)
|
||
|
{
|
||
|
var a = data.split("#");
|
||
|
a[1] = parseInt(a[1], 10);
|
||
|
rdAcceptError(a[1]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
buildDiplomacyDisplay(data);
|
||
|
updateHeader();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function rdHistToPage(p)
|
||
|
{
|
||
|
rdHistPage = parseInt(p, 10);
|
||
|
drawRDHistory();
|
||
|
}
|