UK to Euro prices

By L3onheart Last update Jun 16, 2008 — Installed 152 times.
// ==UserScript==
// @name          UK to Euro prices
// @author        L3onheart
// @namespace     http://www.luzo.org
// @description   Convert UK currency to Euros
// @include       *
// @date          16-06-2008
// @version       2.0
// @GM_version    0.6.3
// ==/UserScript==

(function() {
    // Customize to fit:
    var currencyFrom = "GBP";
    var currencyToDefault = "EUR";
    var currencyFromSymbol = "\u00A3";
    var currencyToSymbolDefault = "\u20AC";
    var decimalPlaces = 2;
    var prefixCurrencySymbol = true;
    var elnames = new Array("*");
    var rounding = 10 ^ decimalPlaces;

    var rate = GM_getValue("currency_data");
    var lastRun = GM_getValue("last_run", "01/01/0001");
    var currencyTo = GM_getValue("currency_to", currencyToDefault);
    var todayDate = new Date();
    var todayString = todayDate.getDate() + "/" + todayDate.getMonth() + "/" + todayDate.getFullYear();
    var currencyToSymbol = GM_getValue("currency_symbol", currencyToSymbolDefault);

    if (rate == undefined || todayString != lastRun) {
        GM_log("Currency data is out-dated. Fetching new information...");
        getCurrencyData();
    } else {
        GM_log("Currency data is current. Converting...");
        convertCurrency();
    }

    function getCurrencyData()
    {
        GM_xmlhttpRequest({
            method: "GET",
            url: "http://finance.yahoo.com/d/quotes.csv?s=" + currencyFrom + currencyTo + "=X&f=l1&e=.csv",
            onload: function(responseDetails) {
                rate = responseDetails.responseText;
                GM_setValue("currency_data", rate);
                GM_setValue("last_run", todayString);
                GM_setValue("currency_to", currencyTo);
                GM_log("Rate: " + currencyFrom + "1 = " + currencyTo + " " + rate);
                convertCurrency();
            },
            onerror: function(responseDetails) {
                alert("Error fetching currency data");
            }
        });
    }
    
    // Convert currency.
    function convertCurrency() {
        for (elname in elnames) {
            var elems = document.getElementsByTagName(elnames[elname]);
    
            for (i=0; i<elems.length; ++i) {
                var price = elems[i];
    
                // Only modify text nodes
                if (price.firstChild && price.firstChild.nodeType == 3) {
                    var idx = price.firstChild.nodeValue.indexOf(currencyFromSymbol);
    
                    if (idx != -1/* && idx < 3 && price.innerHTML.length < 32*/) {
                        // Remove commas from original price
                        var originalAmount = price.firstChild.nodeValue.substr(idx + 1).replace(/,/g, "");
                        var amount = formatCurrency(parseFloat(originalAmount) * rate, rounding,
                                                    currencyToSymbol, prefixCurrencySymbol);
                        var container = document.createTextNode(" (" + amount + ")");
                        price.appendChild(container);
                    }
                }
            }
        }
    }
    
    function formatCurrency(num, rounding, symbol, prefix) {
        num = num.toString().replace(/\$|\,/g,'');
    
        if (isNaN(num))
            num = "0";
    
        sign = (num == (num = Math.abs(num)));
        num = Math.floor(num * rounding + 0.50000000001);
        cents = num % rounding;
    
        num = Math.floor(num / rounding).toString();
        
        if (cents < 10) {
            cents = "0" + cents;
        }

        for (var i=0; i<Math.floor((num.length - (1 + i)) / 3); i++) {
            num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length-(4*i+3));
        }

        if (prefix) {
            return (((sign)?'':'-') + symbol + num + '.' + cents);
        } else {
            return (((sign)?'':'-') + num + '.' + cents + symbol);
        }
    }
    
})();