var showAllDebugFieldsets;






function adjustFieldsetStyles() {
    var allFieldsets = Ext.query( '.debugFieldset' );

    for( j=0; j<allFieldsets.length;j++) {

        currentSegment = allFieldsets[j];

        children = Ext.get(currentSegment).dom.childNodes;

        for(var i=0;i<children.length;i++) {
            if( Ext.get(children[i]) ) {

                if( Ext.get(children[i]).dom.tagName == 'LEGEND' && Ext.get(children[i+1]) ) {

                    fieldsetStyle = Ext.get(currentSegment).dom.style;

                    for(jj=i+1;jj<children.length;jj++) {
                         if( Ext.get(children[jj]) && Ext.get(children[jj]).dom.tagName=='DIV' ) {
                            relevantItem  = Ext.get(children[jj]);
                         }
                    }

                    //fieldsetStyle.height        = relevantItem.getComputedHeight() + 50 + 'px';
                    if(typeof(relevantItem)!='undefined') {
                        fieldsetStyle.cssFloat      = relevantItem.getStyle('float');
                        fieldsetStyle.styleFloat    = relevantItem.getStyle('float');
                        fieldsetStyle.overflow      = relevantItem.getStyle('overflow');
                    }

                    width = Ext.get(currentSegment).getComputedWidth();
                    span = children[i].childNodes[0];
                    if( span ) {
                        //span.style.width = width - 10 + 'px';
                    }
                }
            }
        }
    }
}


function removeHeights() {
    var allFieldsets = Ext.query( '.debugFieldset' );
    for( j=0; j<allFieldsets.length;j++) {
        currentSegment = Ext.get(allFieldsets[j]);
        if( currentSegment.getStyle('height') ) {
            currentSegment.setStyle( 'height','' );
        }
    }
}


var debugInsertAjaxDiv =''
someFn = function(s1,s2) {
    document.getElementById(debugInsertAjaxDiv).innerHTML = s1.responseText;
}


function debugGetRequest(queryStringx,debugInsertAjaxDivTemp,params) {
    debugInsertAjaxDiv = debugInsertAjaxDivTemp;
    Ext.Ajax.request({
        url: '/artikel/zeigen/'+queryStringx,
        success: someFn,
        params: {'debugMain[explainQuery][query]': params},
        failure: function() { alert('urg')},
        method:'POST'
    });
}





function findPosX(obj) {
    var curleft = 0;
    if(obj.offsetParent)
        while(1)
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

function findPos(obj,isInside) {
    if( isInside ) {
        correctOffsetLeftPage = Math.round( (window.pageWidth-document.getElementById('wrapper').offsetWidth)/2);
        return {left:findPosX(obj)-correctOffsetLeftPage,top:findPosY(obj)};
    }
    return {left:findPosX(obj),top:findPosY(obj)};
}

var cacheTimesShown = false;

function showCacheTimes() {

    allFieldsets = Ext.query('.debugFieldset .recursionLevel_3');

    for(var i=0; i<allFieldsets.length;i++) {
        var overlay = document.createElement("DIV");
        overlay.style.position = 'absolute';
        overlay.style.left = findPosX(allFieldsets[i]) + 'px';
        overlay.style.top = findPosY(allFieldsets[i]) + 'px';
        overlay.style.width = Ext.get(allFieldsets[i]).getComputedWidth() +'px';
        overlay.style.height = Ext.get(allFieldsets[i]).getComputedHeight() +'px';
        overlay.style.zIndex = 7000;
        overlay.style.background    = 'green';
        overlay.style.minHeight = '80px';
        overlay.style.opacity   = 0.5;
        overlay.id              = 'cacheOverlay'+i;
        overlay.className       = 'cacheOverlay';

        var segmentname = allFieldsets[i].id.replace('debugSegment_','');

        lifetime = cacheObjectsJsonArray[segmentname].lifetime;

        if(lifetime<=60) {
            realLifetime = lifetime + ' secs';
        }

        if(lifetime>60 && lifetime <= 3600) {
            realLifetime = lifetime/60;
            realLifetime = realLifetime.toFixed(1) + ' mins';
        }

        if(lifetime>=3600 && lifetime < 86400) {
            realLifetime = lifetime/3600;
            realLifetime = realLifetime.toFixed(1) + ' hrs';
        }

        if(lifetime >= 86400) {
            realLifetime = lifetime/86400;
            realLifetime = realLifetime.toFixed(1) + ' days';
        }

        overlay.innerHTML = '<span style="font:50px verdana;font-weight:bold;opacity:1">' + realLifetime + '</span>';
        document.body.appendChild(overlay);
    }
    cacheTimesShown = true;
}

function hideCacheTimes() {
    cacheOverlay = Ext.query('.cacheOverlay');
    for(var i=0; i<cacheOverlay.length;i++) {
         Ext.get( cacheOverlay[i] ).remove();
    }
    cacheTimesShown = false;
}

function toggleCacheTimes() {
    if(cacheTimesShown) {
        hideCacheTimes();
    } else {
        showCacheTimes();
    }
}


function hideDebugFieldsets() {
    array = Ext.query('.debugFieldset');
    for(i=0;i<array.length;i++) {
        if( array[i].className.indexOf('tidy_error') == -1 ) {
            Ext.get(array[i]).addClass('unobtrusive');
        } else {
            Ext.get(array[i]).addClass('obtrusive');
        }
    }
    removeHeights();
    bgTools.setCookie( 'BG_DEBUG_MODE', 'design', 10, '/');

    Ext.get('site').setWidth(990);
    Ext.get('site_info_bar').setWidth(990);

}

function showDebugFieldsets() {
    array = Ext.query('.debugFieldset');
    for(i=0;i<array.length;i++) {
        Ext.get(array[i]).removeClass('unobtrusive');
    }
    adjustFieldsetStyles();
    bgTools.setCookie( 'BG_DEBUG_MODE', 'coder', 10, '/');

    Ext.get('site').setWidth(Ext.get('site').getWidth()-8);
    Ext.get('site_info_bar').setWidth(Ext.get('site_info_bar').getWidth()-8);
    Ext.get('maincontent').setWidth(Ext.get('maincontent').getWidth()-8);

}

if( typeof(json) != 'undefined' ) {
    setTimeout( 'fixDebugBug()',2000);
}

fixDebugBug = function() {
    Ext.get('site').setWidth(Ext.get('site').getWidth()-8);
    Ext.get('site_info_bar').setWidth(Ext.get('site_info_bar').getWidth()-8);
    Ext.get('site_bar').setWidth(Ext.get('site_bar').getWidth()-8);
    Ext.get('maincontent').setWidth(Ext.get('maincontent').getWidth()-8);
    Ext.get('content').setWidth(Ext.get('maincontent').getWidth()-8);
}


function toggleDebugFieldsets() {
     if( showAllDebugFieldsets ) {
          hideDebugFieldsets();
          Ext.get('debugFieldsetToggle').dom.innerHTML = 'DESIGN MODE';
     } else {
          showDebugFieldsets();
          Ext.get('debugFieldsetToggle').dom.innerHTML = 'DEBUG MODE';
     }
     showAllDebugFieldsets = !showAllDebugFieldsets;
}


// Mail Encryption

function CryptMailto()
{
    var n = 0;
    var r = "";
    var s = "mailto:"+document.forms[0].emailField.value;
    var e = document.forms[0].emailField.value;

    e = e.replace( /@/, " [at] ");
    e = e.replace( /\./g, " [dot] ");

    for( var i=0; i < s.length; i++ )
    {
        n = s.charCodeAt( i );
        if( n >= 8364 )
        {
            n = 128;
        }
        r += String.fromCharCode(n+1);
    }
    document.forms[0].cyptedEmailField.value = r;
    document.forms[0].HTMLCyptedEmailField.value = "<a href=\"javascript:linkTo_UnCryptMailto('"+ r +"');\">"+ e +"</a>";
}

function UnCryptMailto( s )
{
    var n = 0;
    var r = "";
    for( var i = 0; i < s.length; i++)
    {
        n = s.charCodeAt( i );
        if( n >= 8364 )
        {
            n = 128;
        }
        r += String.fromCharCode( n - 1 );
    }
    return r;
}

function linkTo_UnCryptMailto( s )
{
    location.href=UnCryptMailto( s );
}

function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // %        note 1: For 1000.55 result with precision 1 in FF/Opera is 1,000.5, but in IE is 1,000.6
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'

    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;

    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = Math.abs(n).toFixed(prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');

        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    return s;
}

function date ( format, timestamp ) {
    // Format a local date/time
    //
    // version: 905.3122
    // discuss at: http://phpjs.org/functions/date
    // +   original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
    // +      parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: MeEtc (http://yass.meetcweb.com)
    // +   improved by: Brad Touesnard
    // +   improved by: Tim Wiel
    // +   improved by: Bryan Elliott
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: David Randall
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   derived from: gettimeofday
    // %        note 1: Uses global: php_js to store the default timezone
    // *     example 1: date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400);
    // *     returns 1: '09:09:40 m is month'
    // *     example 2: date('F j, Y, g:i a', 1062462400);
    // *     returns 2: 'September 2, 2003, 2:26 am'
    // *     example 3: date('Y W o', 1062462400);
    // *     returns 3: '2003 36 2003'
    // *     example 4: x = date('Y m d', (new Date()).getTime()/1000); // 2009 01 09
    // *     example 4: (x+'').length == 10
    // *     returns 4: true
    var jsdate=(
        (typeof(timestamp) == 'undefined') ? new Date() : // Not provided
        (typeof(timestamp) == 'number') ? new Date(timestamp*1000) : // UNIX timestamp
        new Date(timestamp) // Javascript Date()
    ); // , tal=[]
    var pad = function(n, c){
        if( (n = n + "").length < c ) {
            return new Array(++c - n.length).join("0") + n;
        } else {
            return n;
        }
    };
    var _dst = function (t) {
        // Calculate Daylight Saving Time (derived from gettimeofday() code)
        var dst=0;
        var jan1 = new Date(t.getFullYear(), 0, 1, 0, 0, 0, 0);  // jan 1st
        var june1 = new Date(t.getFullYear(), 6, 1, 0, 0, 0, 0); // june 1st
        var temp = jan1.toUTCString();
        var jan2 = new Date(temp.slice(0, temp.lastIndexOf(' ')-1));
        temp = june1.toUTCString();
        var june2 = new Date(temp.slice(0, temp.lastIndexOf(' ')-1));
        var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
        var daylight_time_offset = (june1 - june2) / (1000 * 60 * 60);

        if (std_time_offset === daylight_time_offset) {
            dst = 0; // daylight savings time is NOT observed
        }
        else {
            // positive is southern, negative is northern hemisphere
            var hemisphere = std_time_offset - daylight_time_offset;
            if (hemisphere >= 0) {
                std_time_offset = daylight_time_offset;
            }
            dst = 1; // daylight savings time is observed
        }
        return dst;
    };
    var ret = '';
    var txt_weekdays = ["Sunday","Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"];
    var txt_ordin = {1:"st",2:"nd",3:"rd",21:"st",22:"nd",23:"rd",31:"st"};
    var txt_months =  ["", "January", "February", "March", "April",
        "May", "June", "July", "August", "September", "October", "November",
        "December"];

    var f = {
        // Day
            d: function(){
                return pad(f.j(), 2);
            },
            D: function(){
                var t = f.l();
                return t.substr(0,3);
            },
            j: function(){
                return jsdate.getDate();
            },
            l: function(){
                return txt_weekdays[f.w()];
            },
            N: function(){
                return f.w() + 1;
            },
            S: function(){
                return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th';
            },
            w: function(){
                return jsdate.getDay();
            },
            z: function(){
                return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0;
            },

        // Week
            W: function(){
                var a = f.z(), b = 364 + f.L() - a;
                var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;

                if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
                    return 1;
                }
                if(a <= 2 && nd >= 4 && a >= (6 - nd)){
                    nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
                    return date("W", Math.round(nd2.getTime()/1000));
                }
                return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
            },

        // Month
            F: function(){
                return txt_months[f.n()];
            },
            m: function(){
                return pad(f.n(), 2);
            },
            M: function(){
                var t = f.F();
                return t.substr(0,3);
            },
            n: function(){
                return jsdate.getMonth() + 1;
            },
            t: function(){
                var n;
                if( (n = jsdate.getMonth() + 1) == 2 ){
                    return 28 + f.L();
                }
                if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
                    return 31;
                }
                return 30;
            },

        // Year
            L: function(){
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0;
            },
            o: function(){
                if (f.n() === 12 && f.W() === 1) {
                    return jsdate.getFullYear()+1;
                }
                if (f.n() === 1 && f.W() >= 52) {
                    return jsdate.getFullYear()-1;
                }
                return jsdate.getFullYear();
            },
            Y: function(){
                return jsdate.getFullYear();
            },
            y: function(){
                return (jsdate.getFullYear() + "").slice(2);
            },

        // Time
            a: function(){
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function(){
                return f.a().toUpperCase();
            },
            B: function(){
                // peter paul koch:
                var off = (jsdate.getTimezoneOffset() + 60)*60;
                var theSeconds = (jsdate.getHours() * 3600) +
                                 (jsdate.getMinutes() * 60) +
                                  jsdate.getSeconds() + off;
                var beat = Math.floor(theSeconds/86.4);
                if (beat > 1000) {
                    beat -= 1000;
                }
                if (beat < 0) {
                    beat += 1000;
                }
                if ((String(beat)).length == 1) {
                    beat = "00"+beat;
                }
                if ((String(beat)).length == 2) {
                    beat = "0"+beat;
                }
                return beat;
            },
            g: function(){
                return jsdate.getHours() % 12 || 12;
            },
            G: function(){
                return jsdate.getHours();
            },
            h: function(){
                return pad(f.g(), 2);
            },
            H: function(){
                return pad(jsdate.getHours(), 2);
            },
            i: function(){
                return pad(jsdate.getMinutes(), 2);
            },
            s: function(){
                return pad(jsdate.getSeconds(), 2);
            },
            u: function(){
                return pad(jsdate.getMilliseconds()*1000, 6);
            },

        // Timezone
            e: function () {
/*                var abbr='', i=0;
                if (this.php_js && this.php_js.default_timezone) {
                    return this.php_js.default_timezone;
                }
                if (!tal.length) {
                    tal = timezone_abbreviations_list();
                }
                for (abbr in tal) {
                    for (i=0; i < tal[abbr].length; i++) {
                        if (tal[abbr][i].offset === -jsdate.getTimezoneOffset()*60) {
                            return tal[abbr][i].timezone_id;
                        }
                    }
                }
*/
                return 'UTC';
            },
            I: function(){
                return _dst(jsdate);
            },
            O: function(){
               var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
               t = (jsdate.getTimezoneOffset() > 0) ? "-"+t : "+"+t;
               return t;
            },
            P: function(){
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },
            T: function () {
/*                var abbr='', i=0;
                if (!tal.length) {
                    tal = timezone_abbreviations_list();
                }
                if (this.php_js && this.php_js.default_timezone) {
                    for (abbr in tal) {
                        for (i=0; i < tal[abbr].length; i++) {
                            if (tal[abbr][i].timezone_id === this.php_js.default_timezone) {
                                return abbr.toUpperCase();
                            }
                        }
                    }
                }
                for (abbr in tal) {
                    for (i=0; i < tal[abbr].length; i++) {
                        if (tal[abbr][i].offset === -jsdate.getTimezoneOffset()*60) {
                            return abbr.toUpperCase();
                        }
                    }
                }
*/
                return 'UTC';
            },
            Z: function(){
               return -jsdate.getTimezoneOffset()*60;
            },

        // Full Date/Time
            c: function(){
                return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P();
            },
            r: function(){
                return f.D()+', '+f.d()+' '+f.M()+' '+f.Y()+' '+f.H()+':'+f.i()+':'+f.s()+' '+f.O();
            },
            U: function(){
                return Math.round(jsdate.getTime()/1000);
            }
    };

    return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){
        if( t!=s ){
            // escaped
            ret = s;
        } else if( f[s] ){
            // a date function exists
            ret = f[s]();
        } else{
            // nothing special
            ret = s;
        }
        return ret;
    });
}



function updateHeadQuotes(event, data) {
   // console.log(event,data);
    var v;
    if(data.fields & EQuoteFields.LAST_LAST) {
        v  = EQuoteFields.LAST_LAST;
        v2 = EQuoteFields.LAST_CHANGE_PERCENT;
        prev_change = EQuoteFields.LAST_PREV_CHANGE;
    } else {
        v  = EQuoteFields.BID_LAST;
        v2 = EQuoteFields.BID_CHANGE_PERCENT;
        prev_change = EQuoteFields.BID_PREV_CHANGE;
    }
    if(data.fields & v) {
        //console.log(data);
        digits = data.exchangeId==27 ? 4 : 2;
        var e = document.getElementById('top_quote_'+data.instrumentId+'_'+data.exchangeId);
        e.innerHTML = number_format( data.values[v], digits, ',', '.' );

        if(!data.first) {
            if( data.values[prev_change] >= 0 ) {
                e.style.backgroundColor = '#339900';
                e.style.color = '#fff';
            } else {
                e.style.backgroundColor = '#dd0000';
                e.style.color = '#fff';
            }
            setTimeout(function() { e.style.backgroundColor = 'transparent'; e.style.color ='#ffffff';}, 500);
        }

        if(data.fields & v2) {
            e2 = document.getElementById('top_change_'+data.instrumentId+'_'+data.exchangeId);
            e2.innerHTML = number_format( data.values[v2], 2, ',', '.' ) + '%';
            if(data.values[v2]>=0) {
                e2.className = 'up';
            } else {
                e2.className = 'down';
            }
        }
    }
}




function quoteUpdater( event, data, params ) {

    var icon = {    'standard' :'/themes/default/media/content/icon_realtime.gif',
                    'push' : '/themes/default/media/content/icon_push.png'
               };

    var separator   = '_';

    //console.log( event, data, params );
    if( typeof params.debug != 'undefined' ) {
        //
    }

    var rand = Math.floor(Math.random() * 4);

    if(data.fields & EQuoteFields.LAST_LAST) {
        quote           = EQuoteFields.LAST_LAST;
        quoteChange     = EQuoteFields.LAST_CHANGE;
        percentChange   = EQuoteFields.LAST_CHANGE_PERCENT;
        prevChange      = EQuoteFields.LAST_PREV_CHANGE;
        quoteChangeTime = EQuoteFields.LAST_TIME;
    } else {
        quote           = EQuoteFields.BID_LAST;
        quoteChange     = EQuoteFields.BID_CHANGE;
        percentChange   = EQuoteFields.BID_CHANGE_PERCENT;
        prevChange      = EQuoteFields.BID_PREV_CHANGE;
        quoteChangeTime = EQuoteFields.BID_TIME;
    }

    if(data.fields & quote) {
        var date = new Date();
        var currentTimestamp = Math.floor(date.getTime() / 1000);
        var quoteTimestamp = data.values[quoteChangeTime];
        var timeDiff = currentTimestamp - quoteTimestamp;

        if (timeDiff > 1800) {
            // ignore quotes older than 10 minutes:
            return;
        }

        digits = 2;
        if( data.exchangeId==27 || data.exchangeId==5 || data.exchangeId==11 ) { digits = 4; }
        if( data.exchangeId==22 && data.instrumentId>133964 && data.instrumentId<133962 ) { digits = 3; }

        /* CHANGE QUOTES ~~~~~~~~~~~~~~~~~~ */
        curField = 'quote';
        element = document.getElementById( [ params.prefix, curField, data.instrumentId, data.exchangeId ].join(separator) );
        if( element ) {
            element.innerHTML = number_format( data.values[quote], digits, ',', '.' );
        }

        /* CHANGE CLASSES ~~~~~~~~~~~~~~~~~~ */
        if(!data.first) {
            if( data.values[prevChange] >= 0 ) {
                jQuery(element).removeClass('quote_standard').addClass('quote_tendency_up');
            } else {
                jQuery(element).removeClass('quote_standard').addClass('quote_tendency_down');
            }
            setTimeout('resetPushElement("'+element.id+'")', 500);
        } else {
            jQuery(element).addClass('quote_standard');
        }

        /* CHANGE QUOTE CHANGES~~~~~~~~~~~~ */

        curField = 'change';
        element = document.getElementById( [ params.prefix, curField, data.instrumentId, data.exchangeId ].join(separator) );
        if( element ) {
            element.innerHTML = number_format( data.values[quoteChange], digits, ',', '.' );
            if( data.values[percentChange] >= 0 ) {
                jQuery(element).removeClass('quote_standard');
                jQuery(element).removeClass('down');
                jQuery(element).removeClass('quote_tendency_down');
                jQuery(element).addClass('quote_tendency_up');
            } else {
                jQuery(element).removeClass('quote_standard');
                jQuery(element).removeClass('up');
                jQuery(element).removeClass('quote_tendency_up');
                jQuery(element).addClass('quote_tendency_down');
            }
        }


        /* CHANGE PUSH ICONS ~~~~~~~~~~~~~~ */
        curField = 'icon';
        element = document.getElementById( [ params.prefix, curField, data.instrumentId, data.exchangeId ].join(separator) );
        if( element ) {
            setTimeout( "jQuery('#"+element.id+"').attr('src','"+icon.standard+"')", 400+200*rand);
            setTimeout( "jQuery('#"+element.id+"').attr('src','"+icon.push+"')", 200*rand);
            //setTimeout( "function() { jQuery('#"+element.id+'").attr("src","'+icon.realtime+'")}', 400);
        }

        /* CHANGE PERCENTAGE ~~~~~~~~~~~~~~~ */
        curField = 'percent';
        element = document.getElementById( [ params.prefix, curField, data.instrumentId, data.exchangeId ].join(separator) );

        if(data.fields & percentChange && element) {

            element.innerHTML = number_format( data.values[percentChange], 2, ',', '.' ) + '%';

            if(data.values[percentChange]>=0) {
                jQuery(element).removeClass('down').addClass('up');
            } else {
                jQuery(element).removeClass('up').addClass('down');
            }
        }

        /* CHANGE TIME ~~~~~~~~~~~~~~~ */
        curField = 'time';
        element = document.getElementById( [ params.prefix, curField, data.instrumentId, data.exchangeId ].join(separator) );

        if(data.fields & quoteChangeTime && element) {
            element.innerHTML = strftime(data.values[quoteChangeTime], '%H:%M:%S');
        }
    }
}

function resetPushElement(elementId) {
    if(jQuery('#'+elementId)) {
        jQuery('#'+elementId).removeClass('quote_tendency_up').removeClass('quote_tendency_down').addClass('quote_standard');
    } else {
        //console.log( elementId );
    }
}

