home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 117
/
FreelogNo117-OctobreNovembre2013.iso
/
Theme
/
8GadgetPack
/
8GadgetPackSetup.msi
/
currency.js_3
< prev
next >
Wrap
Text (UTF-16)
|
2012-05-19
|
67KB
|
1,096 lines
////////////////////////////////////////////////////////////////////////////////
//
// THIS CODE IS NOT APPROVED FOR USE IN/ON ANY OTHER UI ELEMENT OR PRODUCT COMPONENT.
// Copyright (c) 2009 Microsoft Corporation. All rights reserved.
//
////////////////////////////////////////////////////////////////////////////////
var g_oService;
var g_oCurr = new Array(4);
var g_oTimer = null;
var g_StartValue = 1;
var g_sRowCount = 1;
var g_sRowHeight = 54;
var g_sBodyHeight;
var g_sMenuHeight;
var g_sFullName = true;
var g_dataFromService;
var g_isStaleData = false;
var g_ageStampText = "";
var spinner;
////////////////////////////////////////////////////////////////////////////////
//
// Load gadget's main function
//
////////////////////////////////////////////////////////////////////////////////
function loadMain()
{
// Set initial values needed for dynamic re-sizing of menu and rows
g_sBodyHeight = parseInt(document.body.currentStyle.height);
// Check if gadget is new or reloaded with sidebar
if (readSetting('rowCount'))
{
g_sRowCount = readSetting('rowCount');
}
else
{
saveSetting('rowCount', g_sRowCount);
}
spinner = new getSpinner('messageSpinner');
localizeUI();
SetUIState('loading');
g_oService = new CurrencyService()
g_oService.OnDataReady = DataReady;
// If we are actually running in the gadget platform
// wire up all the events.
if (gGadgetMode)
{
System.Gadget.onDock = DockGadget;
System.Gadget.onUndock = UndockGadget;
if (System.Gadget.docked)
{
DockGadget();
}
else
{
UndockGadget();
}
}
else
{
UndockGadget();
}
// Attaching events to the toolbar buttons
addButton.attachEvent("onmouseover", function(){addButton.style.backgroundImage = 'url(../images/add_over.png)';});
addButton.attachEvent("onclick", function(){addButton.style.backgroundImage = 'url(../images/add_down.png)'; addRow();});
addButton.attachEvent("onmouseout", function(){addButton.style.backgroundImage = 'url(../images/add_up.png)';});
addButton.attachEvent("onfocus", function(){addButton.style.backgroundImage = 'url(../images/add_down.png)';});
addButton.attachEvent("onblur", function(){addButton.style.backgroundImage = 'url(../images/add_up.png)';});
addButton.title = L_localizedStrings_Text['Add']
g_StartValue = g_StartValue.toLocaleString();
g_oCurr[0].oTextBox.value = g_StartValue;
g_oService.GetCurrencies();
if (System.Gadget.docked)
{
document.getElementById('curr0input').style.display = 'block';
document.getElementById('curr1input').style.display = 'block';
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Localize all data
//
////////////////////////////////////////////////////////////////////////////////
function localizeUI()
{
for (var i = 0; i < g_oCurr.length; i++)
{
g_oCurr[i] = new CurrencyBox('curr' + i, getLocalizedString('GettingExchangeRate'), '0');
// reverse reference in array
g_oCurr[i].oTextBox.setAttribute('arrayIdx', i);
g_oCurr[i].oTextBox.onkeyup = OnAmountChange;
}
var oDataLink = document.getElementById('dataLink');
oDataLink.innerHTML = getLocalizedString('DataProviders');
oDataLink.href = getLocalizedString('MSNMoneyURL');
}
////////////////////////////////////////////////////////////////////////////////
//
// Creates a currency row for each id in g_oCurr array
//
////////////////////////////////////////////////////////////////////////////////
function CurrencyBox(oControl, sCaption, sValue)
{
// Self reference
var me = this;
// Private data members
var m_oCaption = '';
var m_sCaption = sCaption;
var m_oControl = oControl;
var oDeleteButton;
var oCurrOnline;
var oValueDiv;
var oTextBoxBack;
var sCurrCount = oControl.replace('curr', '');
var tableCurr;
var oTableCaption;
var oTD = new Array();
var oTDCaption = new Array();
var oCaptionA;
var oCurrencyImage;
// Public Properties
this.oTextBox = null;
this.oTag = null;
// Get currency div
m_oControl = document.getElementById(oControl);
// Private methods
function Initialize()
{
// Create table
tableCurr = document.createElement('<table cellpadding="0" cellspacing="0" border="0"></table>');
var tbCurr = document.createElement('tbody');
var trCurr = document.createElement('tr');
tableCurr.appendChild(tbCurr);
tbCurr.appendChild(trCurr);
for (j=0;j<3;j++)
{
oTD[j] = document.createElement('td');
oTD[j].setAttribute("id", m_oControl.id + "TD" + j);
trCurr.appendChild(oTD[j]);
}
// Create table for Caption and left-right borders
oTableCaption = document.createElement('<table cellpadding="0" cellspacing="0" border="0"></table>');
var oTBCaption = document.createElement('tbody');
var oTRCaption = document.createElement('tr');
oTableCaption.appendChild(oTBCaption);
oTBCaption.appendChild(oTRCaption);
for (j=0;j<3;j++)
{
oTDCaption[j] = document.createElement('td');
oTDCaption[j].setAttribute("id", m_oControl.id + "TDCaption" + j);
oTRCaption.appendChild(oTDCaption[j]);
}
// Create container for text/textbox
oValueDiv = document.createElement('div');
oValueDiv.id = m_oControl.id + 'value';
// Create currency text
var oLabel = document.createElement('label');
oLabel.id = m_oControl.id + 'label';
m_oCaption = document.createElement('div');
m_oCaption.id = m_oControl.id + 'caption';
if(document.dir == 'rtl')
{
m_oCaption.onmouseover = function() {oTDCaption[0].style.backgroundImage = 'url(../images/combo-hover-right.png)';
oTDCaption[1].style.backgroundImage = 'url(../images/combo-hover-middle.png)';
oTDCaption[2].style.backgroundImage = 'url(../images/combo-hover-left.png)';};
}
else
{
m_oCaption.onmouseover = function() {oTDCaption[0].style.backgroundImage = 'url(../images/combo-hover-left.png)';
oTDCaption[1].style.backgroundImage = 'url(../images/combo-hover-middle.png)';
oTDCaption[2].style.backgroundImage = 'url(../images/combo-hover-right.png)';};
}
m_oCaption.onmouseout = function() {oTDCaption[0].style.backgroundImage = '';
oTDCaption[1].style.backgroundImage = '';
oTDCaption[2].style.backgroundImage = '';};
oLabel.appendChild(m_oCaption);
//Create Caption A HREF and triangle image
oCaptionA = document.createElement('a');
oCaptionA.id = 'captionA';
oCaptionA.href = "javascript:void;";
if ( g_isStaleData )
{
oCaptionA.title = getLocalizedString('ServiceNotAvailable');
}
else
{
oCaptionA.title = m_sCaption;
}
oCaptionA.innerHTML = m_sCaption;
oCurrencyImage = document.createElement('img');
oCurrencyImage.id = "currencyImage";
oCurrencyImage.src = 'images/triangle.png';
oCurrencyImage.border = '0';
oCaptionA.onclick = function() {showCurrencyList(oControl);};
oCaptionA.appendChild(oCurrencyImage);
m_oCaption.appendChild(oCaptionA);
// Create button for online currency
oCurrOnline = document.createElement('div');
oCurrOnline.id = m_oControl.id + 'OnlineButton';
oCurrOnlineA = document.createElement('a');
oCurrOnlineA.id = m_oControl.id + 'OnlineButtonA';
oCurrOnlineA.target = '_blank';
if ( g_isStaleData )
{
oCurrOnlineA.title = getLocalizedString('ServiceNotAvailable');
}
else
{
oCurrOnlineA.title = L_localizedStrings_Text['Graph'];
}
oCurrOnlineAImg = document.createElement('img');
oCurrOnlineAImg.border = '0';
oCurrOnlineAImg.src = '../images/graph_up.png';
oCurrOnlineAImg.onmousedown = function() {this.src = '../images/graph_down.png';};
oCurrOnlineAImg.onmouseover = function() {this.src = '../images/graph_over.png';};
oCurrOnlineAImg.onmouseout = function() {this.src = '../images/graph_up.png';};
oCurrOnlineA.appendChild(oCurrOnlineAImg);
oCurrOnline.appendChild(oCurrOnlineA);
// Create delete button
oDeleteButtonA = document.createElement('a');
oDeleteButtonA.setAttribute("href","javascript:void;");
oDeleteButtonA.setAttribute("title",L_localizedStrings_Text['Remove']);
oDeleteButtonA.style.backgroundImage = 'url(../images/delete_up.png)';
oDeleteButton = document.createElement('div');
oDeleteButton.id = m_oControl.id + 'DeleteButton';
oDeleteButton.style.backgroundImage = 'url(../images/delete_up.png)';
oDeleteButtonA.onclick = function() {oDeleteButton.style.backgroundImage = 'url(../images/delete_down.png)'; deleteRow(oControl);};
oDeleteButton.onmouseover = function() {this.style.backgroundImage = 'url(../images/delete_over.png)';};
oDeleteButton.onmouseout = function() {this.style.backgroundImage = 'url(../images/delete_up.png)';};
oDeleteButtonA.onfocus = function() {if(m_oControl.id.replace('curr', '') !='0' && g_sRowCount > 1){oDeleteButton.style.backgroundImage = 'url(../images/delete_over.png)';oDeleteButton.style.display = 'block';} };
oDeleteButtonA.onblur = function() {oDeleteButton.style.backgroundImage = 'url(../images/delete_up.png)'; oDeleteButton.style.display = 'none'; };
oDeleteButtonA.appendChild(oDeleteButton);
// Create the textbox
me.oTextBox = document.createElement('input');
me.oTextBox.id = oLabel.htmlFor = m_oControl.id + 'input';
me.oTextBox.type = 'text';
me.oTextBox.maxLength = 20;
me.oTextBox.value = sValue;
// Create the textbox background
oTextBoxBack = document.createElement('div');
oTextBoxBack.id = m_oControl.id + 'InputBack';
oValueDiv.appendChild(tableCurr);
oValueDiv.appendChild(me.oTextBox);
oValueDiv.appendChild(oTextBoxBack);
// Add everything in and make it accessible
m_oControl.appendChild(oValueDiv);
tableCurr.style.height = '21px';
oTableCaption.style.height = '21px';
tableCurr.style.position = 'absolute';
oTD[0].style.width = '16px';
oTDCaption[0].style.width = '3px';
oTDCaption[2].style.width = '3px';
oTD[2].style.width = '16px';
oTD[0].appendChild(oCurrOnline);
oTD[1].appendChild(oTableCaption);
oTDCaption[1].appendChild(oLabel);
oTD[2].appendChild(oDeleteButtonA);
me.setCaption(m_sCaption);
}
this.setCaption = function(sCaption)
{
if ( g_isStaleData )
{
oCaptionA.title = getLocalizedString('ServiceNotAvailable');
}
else
{
oCaptionA.title = sCaption;
}
oCaptionA.innerHTML = sCaption + oCurrencyImage.outerHTML;
}
// Set styles depending on docked or undocked
this.changeMode = function(sMode)
{
if (sMode == 'docked')
{
oTD[0].style.display = 'none';
oTD[2].style.display = 'none';
tableCurr.style.width = '43px';
tableCurr.style.left = '9px';
tableCurr.style.right = '9px';
tableCurr.style.top = '9px';
var sCurr = readSetting(oControl) || L_localizedStrings_Text['default'+sCurrCount];
this.setCaption(sCurr);
curr1.style.top = '27px';
tableCurr.className = 'tableFont';
oTableCaption.className = 'tableCaption';
m_oControl.className = 'dockedCurrencyContainer';
m_oCaption.className = 'dockedCurrencyTitle';
if(document.dir == 'rtl')
{
me.oTextBox.className = 'dockedCurrencyValueRtl';
oTextBoxBack.className = 'dockedCurrencyValueBackRtl';
}
else
{
me.oTextBox.className = 'dockedCurrencyValue';
oTextBoxBack.className = 'dockedCurrencyValueBack';
}
oValueDiv.className = 'dockedCurrencyDiv';
oCurrOnline.className = 'dockedCurrencyOnlineButton';
oDeleteButton.className = 'dockedCurrencyDeleteButton';
currencyList.className = 'dockedCurrencyList';
document.getElementById('currencySelect').className = 'dockedCurrencySelect';
document.getElementById('currencySelect').size = 4;
document.getElementById('bottomTable').style.display = 'none';
m_oControl.onmouseover = '';
m_oControl.onmouseout = '';
oValueDiv.onmouseover = '';
oValueDiv.onmouseout = '';
g_sFullName = false;
}
// undocked
else
{
oTD[0].style.display = 'block';
oTD[2].style.display = 'block';
tableCurr.style.width = '212px';
tableCurr.style.left = '3px';
tableCurr.style.right = '3px';
tableCurr.style.top = '';
var sCurr = readSetting(oControl) || L_localizedStrings_Text['default'+sCurrCount];
this.setCaption(getLocalizedString(sCurr));
curr1.style.top = g_sRowHeight;
oDeleteButton.style.display = 'none';
tableCurr.className = 'tableFont';
oTableCaption.className = 'tableCaption';
m_oControl.className = 'currencyContainer';
m_oCaption.className = 'currencyTitle';
me.oTextBox.className = 'currencyValue';
me.oTextBox.style.display = '';
oTextBoxBack.className = 'currencyValueBack';
oValueDiv.className = 'currencyDiv';
oCurrOnline.className = 'currencyOnlineButton';
oDeleteButton.className = 'currencyDeleteButton';
currencyList.className = 'undockedCurrencyList';
document.getElementById('currencySelect').className = 'undockedCurrencySelect';
document.getElementById('currencySelect').size = 4 + (g_sRowCount * 4);
m_oControl.onmouseover = function() {showDelete(oControl)};
m_oControl.onmouseout = function() {hideDelete(oControl)};
oValueDiv.onmouseover = function() {this.style.background = 'url(../images/row_over.png) no-repeat';};
oValueDiv.onmouseout = function() {this.style.background = '';};
g_sFullName = true;
}
}
// Constructor
Initialize();
}
function setBackground(path)
{
// if you switch backgrounds on the fly, you must set the style size to zero
// so it dynamically refreshes
currencybackground.style.width = 0;
currencybackground.style.height = 0;
currencybackground.src = path;
}
////////////////////////////////////////////////////////////////////////////////
//
// Add currency row
//
////////////////////////////////////////////////////////////////////////////////
function addRow()
{
if (g_sRowCount < 3)
{
g_sRowCount++;
document.getElementById('curr'+g_sRowCount).style.display = 'block';
document.body.style.height = parseInt(document.body.style.height) + g_sRowHeight;
setBackground("url(images/base-undocked-"+(g_sRowCount+1)+".png)");
saveSetting('rowCount', g_sRowCount);
document.getElementById('currencySelect').size += 4;
if ( g_oService.IsAvailable )
{
loadSettings();
}
}
// "Deactivate" add link if max rows reached
if (g_sRowCount >= (g_oCurr.length - 1))
{
addButton.style.display = 'none';
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Remove currency row
//
////////////////////////////////////////////////////////////////////////////////
function deleteRow(sControlId)
{
var sOptionCount = sControlId.replace('curr', '');
// Must not delete if only 2 rows
if(sOptionCount ==0 || g_sRowCount < 2)
{
return false;
}
sOptionCount *= 1;
document.getElementById('curr'+g_sRowCount).style.display = 'none';
document.getElementById(sControlId+'DeleteButton').style.display = 'none';
document.body.style.height = parseInt(document.body.style.height) - g_sRowHeight;
currencybackground.style.width = 0;
currencybackground.style.height = 0;
currencybackground.src = "url(images/base-undocked-"+(g_sRowCount)+".png)";
for (i = sOptionCount; i < g_sRowCount; i++)
{
saveSetting('curr'+i, readSetting('curr'+(i+1)));
saveSetting('curr'+(i+1), L_localizedStrings_Text['default'+(i+1)]);
}
g_sRowCount--;
// "Activate" add link if it was greyed out
if (g_sRowCount <= (g_oCurr.length - 2))
{
addButton.style.display = 'block';
}
saveSetting('rowCount', g_sRowCount);
document.getElementById('currencySelect').size -= 4;
if ( g_oService.IsAvailable )
{
loadSettings();
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Show row deletion button
//
////////////////////////////////////////////////////////////////////////////////
function showDelete(sControlId)
{
if (sControlId != 'curr0' && g_sRowCount > 1)
{
document.getElementById(sControlId + 'DeleteButton').style.display = 'block';
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Hide row deletion button
//
////////////////////////////////////////////////////////////////////////////////
function hideDelete(sControlId)
{
document.getElementById(sControlId + 'DeleteButton').style.display = 'none';
}
////////////////////////////////////////////////////////////////////////////////
//
// Show Currency List
//
////////////////////////////////////////////////////////////////////////////////
function showCurrencyList(sControlId)
{
var currencyList = new Array();
var oSelect = document.getElementById('CurrencySelect');
// Clear list
oSelect.innerHTML = "";
oSelect.onkeypress = function() {if(event.keyCode == 13){optionsDown(CurrencySelect.options[CurrencySelect.selectedIndex].id);}};
// Set up function for creating currencyList object
function createCurrency(currSymbol, currText, currTextForSorting)
{
this.currSymbol = currSymbol;
this.currText = currText;
this.currTextForSorting = currTextForSorting;
}
// Set up sort function
function currencySort(x, y)
{
var xTemp = x.currText;
var yTemp = y.currText;
if (xTemp > yTemp)
{
return 1;
}
else if (xTemp < yTemp)
{
return -1;
}
else
{
return 0;
}
}
// Iterate through symbol list returned from currency service and create currencyList
for (x in g_oService.hsCurrencies)
{
var currency = g_oService.hsCurrencies[x];
currencyList.push(new createCurrency(currency.Symbol, getLocalizedString(currency.Symbol), currency.NameForSorting));
}
// Sort currency list
currencyList.sort(currencySort);
// Iterate through sorted list and create options
for (var i = 0; i < currencyList.length; i++)
{
var oEachOption = document.createElement('option');
oEachOption.id = sControlId + "-" + currencyList[i].currSymbol;
oEachOption.innerText = currencyList[i].currText;
oSelect.appendChild(oEachOption);
}
//Selecting the current currency
document.getElementById(sControlId + '-' + g_oCurr[sControlId.replace('curr', '')].oTag.Symbol).selected = true;
// Display the Currency List
var d = document.getElementById('currencyList');
d.style.display = 'block';
CurrencySelect.focus();
}
////////////////////////////////////////////////////////////////////////////////
//
// Close menu when option is selected
//
////////////////////////////////////////////////////////////////////////////////
function optionsDown(sOptionID)
{
saveOptions(sOptionID);
if ( g_oService.IsAvailable )
{
loadSettings();
}
currencyList.style.display = 'none';
}
////////////////////////////////////////////////////////////////////////////////
//
// Save newly selected option
//
////////////////////////////////////////////////////////////////////////////////
function saveOptions(sOptionID)
{
var oOptionID = sOptionID.split('-');
saveSetting(oOptionID[0], oOptionID[1]);
g_oCurr[oOptionID[0].replace('curr', '')].oTextBox.focus();
}
////////////////////////////////////////////////////////////////////////////////
//
// Data for gadget in docked state
//
////////////////////////////////////////////////////////////////////////////////
function DockGadget()
{
var oBody = document.body.style;
oBody.width = '130px';
oBody.height = '83px';
currencybackground.style.width = 0;
currencybackground.style.height = 0;
currencybackground.src = "url(images/base-docked.png)";
for (var i = g_sRowCount; i > 1; i--)
{
document.getElementById('curr'+i).style.display = 'none';
}
for (var i=0; i < g_oCurr.length; i++)
{
g_oCurr[i].changeMode('docked');
}
container.className = 'dockedUIBoundary';
message.className = 'dockedMessage';
if(document.dir == 'rtl')
{
ageStampText.className = 'ageStampTextDockedModeRtl';
ageStampTextTd.className = 'ageStampTextUndockedModeRtl'
}
else
{
ageStampText.className = 'ageStampTextDockedMode';
ageStampTextTd.className = 'ageStampTextUndockedMode'
}
document.getElementById('ageStampText').innerText = g_ageStampText;
document.getElementById('ageStampText').style.visibility = "hidden";
document.getElementById('ageStampTextTd').innerText = g_ageStampText;
document.getElementById('ageStampTextTd').style.visibility = "hidden";
if (g_oService.IsAvailable)
{
if(g_isStaleData)
{
document.getElementById('ageStampText').style.visibility = "visible";
}
updateValues(g_oCurr[0].oTextBox, false);
}
bottomTable.style.display = 'none';
addButton.style.display = 'none';
}
////////////////////////////////////////////////////////////////////////////////
//
// Data for gadget in undocked state
//
////////////////////////////////////////////////////////////////////////////////
function UndockGadget()
{
var oBody = document.body.style;
oBody.width = '254px';
oBody.height = (g_sBodyHeight - g_sRowHeight) + (g_sRowCount * g_sRowHeight);
currencybackground.style.width = 0;
currencybackground.style.height = 0;
currencybackground.src = "url(images/base-undocked-"+(g_sRowCount+1)+".png)";
for (var i = g_sRowCount; i > 1; i--)
{
document.getElementById('curr'+i).style.display = 'block';
}
for (var i=0; i < g_oCurr.length; i++)
{
g_oCurr[i].changeMode('undocked');
}
container.className = 'UIBoundary';
dataLink.className = 'dataProviderLink';
message.className = 'message';
if(document.dir == 'rtl')
{
ageStampText.className = 'ageStampTextDockedModeRtl';
ageStampTextTd.className = 'ageStampTextUndockedModeRtl'
}
else
{
ageStampText.className = 'ageStampTextDockedMode';
ageStampTextTd.className = 'ageStampTextUndockedMode'
}
document.getElementById('ageStampText').innerText = g_ageStampText;
document.getElementById('ageStampText').style.visibility = "hidden";
document.getElementById('ageStampTextTd').innerText = g_ageStampText;
document.getElementById('ageStampTextTd').style.visibility = "hidden";
if (g_oService.IsAvailable)
{
if(g_isStaleData)
{
document.getElementById('ageStampTextTd').style.visibility = "visible";
}
updateValues(g_oCurr[0].oTextBox, false);
bottomTable.style.display = 'block';
if(g_sRowCount<3)
{
addButton.style.display = 'block';
}
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Fire update function on keyup
//
////////////////////////////////////////////////////////////////////////////////
function OnAmountChange()
{
var sourceTextBox = event.srcElement;
updateValues(sourceTextBox, true);
}
////////////////////////////////////////////////////////////////////////////////
//
// Update currency field values
//
////////////////////////////////////////////////////////////////////////////////
function updateValues(sourceTextBox,bSkipCurrent)
{
if (g_oService.IsAvailable)
{
// Get the currency object that goes with this text box
var sourceCurrency = g_oCurr[sourceTextBox.getAttribute('arrayIdx')];
var oCurrency;
for (var i=0; i < g_oCurr.length; i++)
{
oCurrency = g_oCurr[i];
// skip the box where the text changed.
if(bSkipCurrent)
{
if (sourceTextBox != oCurrency.oTextBox)
{
try
{
oCurrency.oTextBox.value = g_oService.Convert(sourceTextBox.value, sourceCurrency.oTag.Symbol, oCurrency.oTag.Symbol);
}
catch(objError)
{
oCurrency.oTextBox.value = getLocalizedString('Error');
}
}
}
else
{
try
{
oCurrency.oTextBox.value = g_oService.Convert(sourceTextBox.value, sourceCurrency.oTag.Symbol, oCurrency.oTag.Symbol);
}
catch(objError)
{
oCurrency.oTextBox.value = getLocalizedString('Error');
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Set UI state
//
////////////////////////////////////////////////////////////////////////////////
function SetUIState(sState)
{
function ShowMessage(sMessage)
{
showOrHide('container', false);
showOrHide('message', true);
}
document.getElementById('bottomTable').style.display = 'none';
document.getElementById('ageStampText').innerText = g_ageStampText;
document.getElementById('ageStampText').style.visibility = "hidden";
document.getElementById('ageStampTextTd').innerText = g_ageStampText;
document.getElementById('ageStampTextTd').style.visibility = "hidden";
spinner.stop();
switch(sState)
{
case 'loading':
spinner.show();
spinner.start();
document.getElementById('messageSpinner').style.display = 'inline';
document.getElementById('messageIcon').style.display = 'none';
ShowMessage(getLocalizedString('WaitText'));
document.getElementById('messageText').innerHTML = getLocalizedString('WaitText');
break;
case 'error':
document.getElementById('messageIcon').style.display = 'inline';
document.getElementById('messageSpinner').style.display = 'none';
ShowMessage(getLocalizedString('ServiceNotAvailable'));
if(document.dir == 'rtl')
{
document.getElementById('messageText').innerHTML = getLocalizedString('ServiceNotAvailable');
document.getElementById('messageText').style.textAlign = 'right';
}
else
{
document.getElementById('messageText').innerHTML = getLocalizedString('ServiceNotAvailable');
document.getElementById('messageText').style.textAlign = 'left';
}
break;
case 'ready':
showOrHide('container', true);
showOrHide('message', false);
if (!System.Gadget.docked)
{
document.getElementById('bottomTable').style.display = 'block';
}
break;
case 'cached':
showOrHide('container', true);
showOrHide('message', false);
if (!System.Gadget.docked)
{
document.getElementById('bottomTable').style.display = 'block';
document.getElementById('ageStampTextTd').style.visibility = "visible";
}
else
{
document.getElementById('ageStampText').style.visibility = "visible";
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Check for availability of data
//
////////////////////////////////////////////////////////////////////////////////
function DataReady(data)
{
var milliSecondsToNextQuery;
g_dataFromService = data;
g_isStaleData = false;
g_ageStampText = "";
if (g_oTimer != null)
clearTimeout(g_oTimer);
if ((data != null) && g_oService.IsAvailable && (data.Count > 0) && ((data.RetCode == 200) || (data.RetCode == 1507)))
{
if (data.RetCode == 200)
{
var serviceRefreshInterval;
gTimeStampLastRefreshAvailable = true;
gTimeStampLastRefresh = data.Timestamp;
SetUIState('ready');
loadSettings();
serviceRefreshInterval = g_oService.RefreshInterval();
if (serviceRefreshInterval != -1)
{
// Update the UI after refresh interval
milliSecondsToNextQuery = 1000 * 60 * serviceRefreshInterval;
}
else
{
// Update the UI in 1 minute
milliSecondsToNextQuery = 1000 * 60;
}
}
else
{
g_isStaleData = true;
g_ageStampText = calculateAgeStampText(calculateAge(data.Timestamp));
SetUIState('cached');
loadSettings();
// Update the UI in 1 minute
milliSecondsToNextQuery = 1000 * 60;
}
}
else
{
SetUIState('error');
// Try again in 1 minute
milliSecondsToNextQuery = 1000 * 60;
}
g_oTimer = setTimeout('g_oService.GetCurrencies()', milliSecondsToNextQuery);
}
////////////////////////////////////////////////////////////////////////////////
//
// Load currency symbols for each currency row
//
////////////////////////////////////////////////////////////////////////////////
function loadSettings()
{
for (i = 0; i < g_oCurr.length; i++)
{
var sCurr = readSetting('curr'+i) || L_localizedStrings_Text['default'+i];
saveSetting('curr'+i, sCurr);
g_oCurr[i].oTag = g_oService.hsCurrencies[sCurr];
//Get first available if list of currency is not complete
if(g_oCurr[i].oTag == undefined)
{
sCurr = g_dataFromService.Item(0).Symbol;
g_oCurr[i].oTag = g_oService.hsCurrencies[sCurr];
}
if (g_sFullName){
g_oCurr[i].setCaption(g_oService.hsCurrencies[sCurr].Name);
} else {
g_oCurr[i].setCaption(g_oCurr[i].oTag.Symbol);
}
var sURLLocale = '';
if (g_oCurr[i].oTag.Symbol != 'USD')
{
sURLLocale = g_oCurr[i].oTag.Symbol;
}
document.getElementById('curr'+i+'OnlineButtonA').href = getLocalizedString('CurrencyLink')+sURLLocale+'USD';
}
updateValues(g_oCurr[0].oTextBox, false);
}
////////////////////////////////////////////////////////////////////////////////
//
// Handle ESCAPE and ENTER keydown
//
////////////////////////////////////////////////////////////////////////////////
function OnKeyDownHandler()
{
if(event.keyCode == 27)//ESCAPE key
{
document.getElementById('currencyList').style.display = 'none';
}
}
////////////////////////////////////////////////////////////////////////////////
//
// Spinner Animation
//
////////////////////////////////////////////////////////////////////////////////
function getSpinner( spinnerDivID )
{
var self = this;
this.id = spinnerDivID;
this.parentDiv = document.getElementById( self.id );
this.fps = 1000/30;
with (this.parentDiv.style) {
fontSize=0;
posWidth=16;
posHeight=16;
backgroundImage = 'url("images/activity16v.png")';
backgroundPositionY = 0;
}
this.hide = function() { self.parentDiv.style.display='none'; }
this.show = function() { self.parentDiv.style.display='block'; }
this.stop = function() { clearInterval( self.animationInterval ); }
this.start = function() {
clearInterval( self.animationInterval );
this.animationInterval = setInterval( 'animate(' + self.id + ')', 30 );
}
}
function animate(spinnerDiv)
{
spinnerDiv.style.backgroundPositionY=parseInt(spinnerDiv.style.backgroundPositionY)-16;
}
////////////////////////////////////////////////////////////////////////////////
//
// Handle RightClick
//
////////////////////////////////////////////////////////////////////////////////
function OnRightClickHandler()
{
if(event.srcElement.tagName != 'INPUT')
{
if(event.button > 1)
{
var selectedText = document.getElementById('curr0input').createTextRange();
selectedText.moveStart('character', document.getElementById('curr0input').value.length);
selectedText.select();
event.srcElement.focus();
}
}
return true;
}
function calculateAge ( timestamp )
{
var timestampDay = new Date( timestamp );
var currentDay = new Date();
var millisecondsTillTimestamp = Date.parse( timestamp );
var millisecondsTillNow = (new Date()).getTime();
var minutesDifference = parseInt( ( millisecondsTillNow - millisecondsTillTimestamp ) / ( 60 * 1000 ) );
var hoursDifference = parseInt ( minutesDifference / 60 );
var daysDifference = parseInt ( hoursDifference / 24 );
this.minutesAge = 0;
this.hoursAge = 0;
this.daysAge = 0;
if ( minutesDifference <= 0 )
{
return this;
}
// shows hours and mins only for the same day
if ( timestampDay.getDate() == currentDay.getDate()
&& timestampDay.getMonth() == currentDay.getMonth()
&& timestampDay.getFullYear() == currentDay.getFullYear() )
{
this.minutesAge = minutesDifference % 60;
this.hoursAge = hoursDifference % 24;
this.daysAge = daysDifference;
}
else // only calculate total no of days past
{
timestampDay.setHours(currentDay.getHours(),currentDay.getMinutes(),currentDay.getSeconds(),currentDay.getMilliseconds());
this.daysAge = parseInt ( ( currentDay.getTime() - timestampDay.getTime() ) / ( 60 * 1000 * 60 * 24 ) );
if ( this.daysAge < 0 )
{
this.daysAge = 0;
}
}
return this;
}
function calculateAgeStampText( age )
{
var ageStampText = "";
var unitText = "";
var durationText = "";
if ( age.daysAge > 0 )
{
durationText = getLocalizedString('day');
if ( age.daysAge > 1 )
{
durationText = getLocalizedString('days');
}
unitText = age.daysAge;
}
else if ( age.hoursAge > 0 )
{
durationText = getLocalizedString('hr');
if ( age.hoursAge > 1 )
{
durationText = getLocalizedString('hrs');
}
unitText = age.hoursAge;
}
else
{
if ( age.minutesAge != 0 )
{
durationText = getLocalizedString('min');
unitText = age.minutesAge;
}
}
if((unitText != "") && (durationText != ""))
{
ageStampText = getLocalizedString('ageStampMessage')
ageStampText = ageStampText.replace("%1", unitText);
ageStampText = ageStampText.replace("%2", durationText);
}
return ageStampText;
}