
// Copyright (c) 2002-2008 Open2b Software Snc - http://www.open2b.com

var Open2b = {

    Init : function() {
        this.InitCurrencies();
    },

    DisplayFlash: function(url, w, h, a) {
        var str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w+'" height="'+h+'"'
            + ( a == 'L' ? ' style="float:left;border:0;padding:0 1em 1em 0;"'
               : ( a == 'R' ? 'style="float:right;border:0;padding:0 0 1em 1em;"' : '' ) ) + '>'
            + '<param name="movie" value="'+url+'">' + '<param name="quality" value="high">'
            + '<embed src="'+url+'" menu="false" quality="high" scale="exactfit" width="'+w+'" height="'+h+'"'
            + ' align="" type="application/x-shockwave-flash" pluginspace="http://www.macromedia.com/go/getflashplayer">'
            + '</embed></object>';
        if ( a == 'C' ) {
            str = '<div style="text-align:center;padding:1em;">'+str+'</div>';
        }
        document.write(str);
    },

    // valuta predefinita della pagina
    PageCurrency    : '',

    // valuta preferita dell'utente
    UserCurrency    : '',

    // cambi delle valute (codice valuta/cambio)
    CurrencyChanges : { },

    // italiano
    CultureInfo : {
        'it' : {
            'Locale' : {
                'Grouping'          : '3',
                'GroupingSeparator' : '.',
                'DecimalSeparator'  : ','
            }
        }
    },

    CurrencyInfo : {
        //  code   val name     Prefix  Suffix
        'CHF' : { 'Name' : 'CHF', 'Prefix' : '',        'Suffix' : ' CHF' },
        'EUR' : { 'Name' : 'EUR', 'Prefix' : '\u20AC ', 'Suffix' : '' },
        'GBP' : { 'Name' : 'GBP', 'Prefix' : '\u00A3',  'Suffix' : '' },
        'JPY' : { 'Name' : 'JPY', 'Prefix' : '',        'Suffix' : ' ¥' },
        'TND' : { 'Name' : 'TND', 'Prefix' : '',        'Suffix' : 'TND' },
        'USD' : { 'Name' : 'USD', 'Prefix' : '$',       'Suffix' : '' }
    },

    // legge dal coockie la valuta settata dal cliente (o dal server) e la ritorna
    GetUserCurrency : function() {
        return this.Cookie.Get('Open2bUserCurrency');
    },

    // carica alcune info utili e poi cicla sui tag span con classe currency chiamando per ognuno changevalue
    SetCurrency : function(currency) {
        // non mi è stata data la valuta
        if ( currency == null ) return;
        // effettuo il cambio
        var elements = document.body.getElementsByTagName('span');
        var elementsLength = elements.length;
        var i;
        var m;
        var regex = /^currency-(\d*)-(\d*)$/;
        for ( i = 0; i < elementsLength; i++ ) {
            if ( ( m = regex.exec(elements[i].className)) != null ) {
                var value = parseFloat(m[1]+"."+m[2]) * this.CurrencyChanges[currency];
                elements[i].firstChild.data = this.CurrencyInfo[currency]['Prefix'] + this.FormatNumber(value) + this.CurrencyInfo[currency]['Suffix'];
            }
        }
        var menus = this.GetElementsByClassName('currencies', 'ul', document.body);
        for ( var i = 0; i < menus.length; i++ ) {
            var currencyElements = menus[i].childNodes;
            for ( var j = 0; j < currencyElements.length; j++ ) {
                if ( currencyElements[j].firstChild.firstChild.data == currency ) {
                    currencyElements[j].className = 'currentCurrency';
                } else {
                    currencyElements[j].removeAttribute('class');
                }
            }
        }
        this.SetUserCurrency(currency);
        false;
    },

    // legge il coockie della tabella valute, lo parsa e ritorna l'hash dei cambi.
    GetCurrencyChanges : function() {
        var changes = {};
        var flatChanges = this.Cookie.Get('Open2bCurrencyChanges');
        if ( flatChanges != null ) {
            var change = flatChanges.split(/\s+/);
            for ( var i = 0; i < change.length; i++ ) {
                var currencyChange = change[i].split(':');
                changes[currencyChange[0]] = currencyChange[1];
            }
        }
        return changes;
    },

    // setta la valuta utilizzata nel coockie apposito
    SetUserCurrency : function(currency) {
        this.Cookie.Create('Open2bUserCurrency', currency, 0);
    },

    // crea l'elenco puntato delle valute disponibili
    InitCurrencies : function() {

        // legge i cambi delle valute
        this.CurrencyChanges = this.GetCurrencyChanges();

        // legge la valuta preferita dell'utente
        this.UserCurrency    = this.GetUserCurrency();

        // Render menus
        //var menus  = this.GetElementsByClassName('currencies', 'span', document.body);
        //var pageLanguageAndCurrency = menus[0].firstChild.data.split('-');

        if ( this.UserCurrency != null ) {
            // aggiorna le valute
            this.SetCurrency(this.UserCurrency);
        }

    },

    // Utils

    Cookie : {

        // creazione e lettura coockies
        Create : function(name, value, days) {
            var expires = '';
            if ( days ) {
                var date = new Date();
                date.setTime(date.getTime() + ( days * 24 * 60 * 60 * 1000 ));
                expires = '; expires=' + date.toGMTString();
            }
            document.cookie = name + '=' + value + expires + '; path=/';
            return;
        },

        Get : function(name) {
            var nameEQ = name + '=';
            var ca = document.cookie.split(';');
            for ( var i = 0; i < ca.length; i++ ) {
                var c = ca[i];
                while ( c.charAt(0) == ' ' ) c = c.substring(1, c.length);
                if ( c.indexOf(nameEQ) == 0 ) return unescape(c.substring(nameEQ.length, c.length));
            }
            return null;
        }

    },

    GetElementsByClassName : function(className, tag, node) {
        var elements = new Array();
        if ( node == null ) node = document;
        if ( tag == null ) tag = '*';
        var allElements = node.getElementsByTagName(tag);
        var allElementsLength = allElements.length;
        var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
        var i;
        var j;
        for ( i = 0, j = 0; i < allElementsLength; i++ ) {
            if ( regex.test(allElements[i].className) ) {
                elements[j] = allElements[i];
                j++;
            }
        }
        return elements
    },

    FormatNumber : function(number) {
        var decimalSeparator  = this.CultureInfo['it']['Locale']['DecimalSeparator'];
        var groupingSeparator = this.CultureInfo['it']['Locale']['GroupingSeparator'];
        //var grouping           = this.CultureInfo['it']['Locale']['Grouping'];
        var numberStr   = number.toFixed(2);
        var n           = numberStr.split('.');
        var integerPart = n[0];
        var decimalPart = n[1];
        var rgx = /(\d+)(\d{3})/;
        while ( rgx.test(integerPart) ) {
            integerPart = integerPart.replace(rgx, '$1' + groupingSeparator + '$2');
        }
        return integerPart + decimalSeparator + decimalPart;
    }

};
