var instrumentId = null;
var exchangeId = null;
var instrumentName= null;
var connection ;
var reloadPage=null;

var appStarted = 0;

function readCookie(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;
}
function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+escape(value)+expires+"; path=/";
}

var loadedProfileHref = [];
var profile = "";

function loadProfileHref() {
    loadProfile(1);
}

function loadProfile( onlyHref, x  ) {
    if ( !x ) 
        x= readCookie('s'); // homepage selected charts
        
    if ( onlyHref == undefined ) onlyHref = 0;
    
    
    if ( x == null ) {
        x = default_homepage_config;
        createCookie('s', x, 3650 );
    }
    
    profile = x;
    
    if ( !onlyHref ) {
        var holder = document.getElementById("homeCharts");
        while(holder.hasChildNodes())
                holder.removeChild(holder.lastChild);
    }

    var y = x.split('|');
    for(var i = 0; i< y.length; i++ ) {
        var d = y[i].split('#');
        if ( !onlyHref ) {
            var el = document.createElement('li');
            el.setAttribute('class', 'cf chart i_'+d[1]+'_'+d[2]);
        }
        loadedProfileHref[ i ] = 'chart.php?i='+d[1]+'#_Chart';
        if ( !onlyHref ) {
            el.innerHTML= '<a href="'+loadedProfileHref[i]+'" rev="async" onClick="profileManage('+d[1]+','+d[2]+')"><span class="diff green">-</span><span class="val">-</span> '+d[0]+ '</a>' ;
            document.getElementById('homeCharts').appendChild(el);
        }
    }
}

function getActiveLayer() {
    var iGroup = document.getElementById('iGroup');
    for( var i = 0 ; i < iGroup.childNodes.length; i++ ) {
        if (  iGroup.childNodes[i].style !== undefined ) {
            if (  iGroup.childNodes[i].style.display=='block') {
                return iGroup.childNodes[i];
            }
        }
    }
    return undefined;
}

/* this function returns a list of all instruments on the currently active layer */
function getInstrumentsOfActiveLayer() {
    var charts = [];
    
    // large chart
    var chartElement = document.getElementById('waChartGraph');
    if(chartElement && chartElement.style.display=='block') {
        charts.push( [instrumentId, exchangeId]);
    }
    
    var iGroup = document.getElementById('iGroup');
    for( var i = 0 ; i < iGroup.childNodes.length; i++ ) {
        if (  iGroup.childNodes[i].style !== undefined ) {
            if (  iGroup.childNodes[i].style.display=='block') {
                var ele = iGroup.childNodes[i].getElementsByClassName("chart");
                for ( var j = 0; j< ele.length; j++ ) {
                     var d = ele[j].className.match("i_([0-9]+)_([0-9]+)($| )");
                     if ( d != undefined ) 
                        charts.push( [ d[1], d[2] ] );
                     
                }
               
            }
        }
    }
    return charts;
}


/* handles the push */
var flashingInstruments = {};
function quoteCallback(event, data) {
                                       
    if(  ( !(data.fields & EQuoteFields.BID_LAST)   &&   !(data.fields & EQuoteFields.LAST_LAST  ) ) ||  ( !(data.fields & EQuoteFields.BID_TIME)  && !(data.fields & EQuoteFields.LAST_TIME))  ) 
        return;
    
    var takelast = 0;
    if ( data.exchangeId == 38 ) takelast = 1;
    
    var date = new Date();
    if ( flashingInstruments[ data.instrumentId ] < date+1000 ) return;
    flashingInstruments[ data.instrumentId ] = date;
    
    var newValue;
    var newTime;
    var  change;    
    if ( data.fields & EQuoteFields.LAST_LAST  ) {
        newValue    = data.values[EQuoteFields.LAST_LAST];
        newTime     = data.values[EQuoteFields.LAST_TIME];
        change      = data.values[EQuoteFields.LAST_CHANGE_PERCENT];
    } else {
        if ( takelast == 1 ) return;
                                                                        
        newValue    = data.values[EQuoteFields.BID_LAST];
        newTime     = data.values[EQuoteFields.BID_TIME];
        change         = data.values[EQuoteFields.BID_CHANGE_PERCENT];
    }
    if ( change == undefined ) change = "0";
    
    var active = getActiveLayer();
    if (active==undefined) return;
    var elist = active.getElementsByClassName('i_'+data.instrumentId+'_'+data.exchangeId);
    if ( elist.length <= 0 ) return;
    
    for ( var i = 0; i< elist.length; i++) {
        var e_val = elist[i].getElementsByClassName('val')[0];
        var e_diff = elist[i].getElementsByClassName('diff')[0];        
        var oldValue     = parseFloat(e_val.innerHTML.replace(',','.'));
    
        // set value flashing + value
        var cls2;
        if(newValue < oldValue) cls2 = 'q_down';
        else if ( oldValue<newValue ) cls2 = 'q_up';
        else cls2 = '';
        
        e_val.innerHTML = newValue;
        
        if ( cls2!=''  ) {
            e_val.setAttribute('class', "val "+ cls2);
            
            setTimeout( "try { getActiveLayer().getElementsByClassName('i_"+data.instrumentId+"_"+data.exchangeId+"')[0].getElementsByClassName('val')[0].className='val'; } catch (e) {} ", 500 ) ;
        }
        
        
        
        // set change color + value
        e_diff.className="diff " + ( change>=0 ? 'green':'red' );
        e_diff.innerHTML = (change>0?'+':'') +  change + '%';
        
        
        // show current time in all .time elements
        var time = (new Date(newTime*1000)).strftime('%H:%M:%S');        
        var timeel = elist[i].getElementsByClassName('time');
        for ( var j=0; j<timeel.length; j++) timeel[j].innerHTML = time;
    
        if ( i==0 ) {
            var elist2 = document.getElementsByClassName('i_'+data.instrumentId+'_'+data.exchangeId);
            for ( var j = 0; j< elist2.length; j++) {
                elist2[j].getElementsByClassName('val')[0].innerHTML = newValue;
                elist2[j].getElementsByClassName('diff')[0].innerHTML = (change>0?'+':'') +  change + '%';
            }
        }
    }
    
    
}


function startPush() {

    var charts = getInstrumentsOfActiveLayer();
    var pushExchanges = {22:1, 38:1, 57:1, 27:1 };
    var pushRequest = [];
        
    var currentSubscriptions = BG_QuotePush.getSubscriptions(); 
    var valid = [];
    
    BG_QuotePush.delaySubscriptions();
    
    
    for ( var i = 0; i < charts.length; i++ ) {
        
        if (  pushExchanges[ charts[i][1] ] !== 1 ) {
            pushRequest.push( charts[i] );
            continue;
        }
       
		var flags = EQuoteFields.BID_LAST | EQuoteFields.BID_CHANGE_PERCENT | EQuoteFields.LAST_CHANGE_PERCENT  | EQuoteFields.BID_TIME | EQuoteFields.LAST_LAST | EQuoteFields.LAST_TIME;
		if ( charts[i][1] == 38 ) 
			flags = EQuoteFields.LAST_CHANGE_PERCENT  | EQuoteFields.LAST_LAST | EQuoteFields.LAST_TIME;

        var event = BG_QuotePush.subscribe( charts[i][0], charts[i][1], flags);
        BG_AjaxPushHub.subscribe(event, quoteCallback);
       
        
        for  ( var ii = 0; ii< currentSubscriptions.length; ii++ ) {
            if ( currentSubscriptions[ii]['instrumentId'] == charts[i][0]  &&  currentSubscriptions[ii]['exchangeId'] == charts[i][1] ) {
                valid[ii]= 1;
                break;
            }
        }
        
    
    }
    

    for  ( var i = 0; i< currentSubscriptions.length; i++ ) {
        if (  valid[i] === undefined )
            BG_QuotePush.unsubscribe( currentSubscriptions[i]['instrumentId'], currentSubscriptions[i]['exchangeId'] );
    }
    
    BG_QuotePush.updateSubscriptions();
    if ( pushRequest.length > 0 ) {
        var req= "?x";
        for ( var i=0; i< pushRequest.length; i++ ) {
            req += "&i[]=" + pushRequest[i][0]  + "&e[]=" + pushRequest[i][1];
        }
        
        WebApp.Request( 'quotes.php'+req, null, -1 );
        
    }

}
function stopPush() {
    BG_QuotePush.disconnect();
}



function startApp() {

    initCharts('/js/chart/');

    
    connection = BG_QuotePush.connect();    

    appStarted = 1;                    
    startPush();
}

var smallChart = null;
var bigChart = null;
var chartStyle = null;
var chartUseQuoteSource = null;
var tapMessageTimer = null;

WebApp.AddEventListener("beginslide", function(evtObj) {


    page = evtObj.context[1][0];
    if ( evtObj.context[1][1] != undefined ) 
        page+="/"+evtObj.context[1][1];
        
    pageTracker._trackPageview( page);

    
   BG_QuotePush.lockEvents();
});


WebApp.AddEventListener("endslide", function() {

    if ( appStarted )  {
        
        setTimeout( "startPush()", 200 ); // start push in 200ms
    }
    
    var chart      = null
    var showChart = false;
    var id        = '';
    var smallChartE = document.getElementById('waChart');
    var largeChartE = document.getElementById('waChartGraph');
    if ( smallChartE && smallChartE.style.display=='block') {
        showChart = true;
        chart = smallChart;
        id = 'smallChart';
    } else if(largeChartE && largeChartE.style.display=='block' ) {
        chart = bigChart;
        showChart = true;
        id = 'largeChart';
        document.getElementById('chartgraph_instrument').className="chart i_"+ instrumentId + "_"+ exchangeId;
    } else {
        // flush old quote data when returning to index
        if(smallChart || largeChart) {
            chart = smallChart ? smallChart : largeChart;
            try {
                var source = chart.getSource();
                ChartSourceCache.remove(source._instrumentId, source._exchangeId, source._quoteSource);
            } catch (e) {}
        }
        chart = null;
        smallChart = null;
        largeChart = null;
        
        
        //try {
        ChartCache.remove('largeChart');
        ChartCache.remove('smallChart');
        //} catch(e) { }

        
        
    }
    if(showChart) {
        var identifier = instrumentId+'_'+exchangeId;
        if(chart === null) {
            chart = ChartCache.get(id);
            if(!chart) {
                chart = new Chart(id, instrumentId, exchangeId, chartUseQuoteSource, id=='largeChart');
                chart.addChart();
                chart.setStyle(chartStyle);
            } else {
                chart.setInstrument(instrumentId,exchangeId,chartUseQuoteSource);
            }
            if(id == 'largeChart') {
                largeChart = chart;
            } else {
                smallChart = chart;
            }
        }
        chart.setSpanSimple(ESpans.DAY);
        
            
        document.getElementById('smallChartaU').onclick = function() {
            document.getElementById('tapMessage').style.display = 'block';
            if(tapMessageTimer) {
                clearTimeout(tapMessageTimer);
                tapMessageTimer = null;
            }
            tapMessageTimer = setTimeout("document.getElementById('tapMessage').style.display = 'none';",1000);
        };
        
    }
    
    //window.scrollTo(0,1);
    BG_QuotePush.releaseEvents();

    
});



WebApp.AddEventListener("load", function() {
    window.location="#_Home";
    
    chartStyle = new ChartStyle();
    chartStyle.yLabelColor = '#ffffff';
    chartStyle.xLabelColor = '#888888';
    chartStyle.candleColor = '#ffffff';
    chartStyle.axisColor = '#ffffff';
    chartStyle.lineColor = '#ffffff';
    chartStyle.gridColor = '#444444';
    chartStyle.offset = 85;
    chartStyle.showCursor = false;
    chartStyle.infoLabelFontSize = 26;
    loadProfile();
    
    setTimeout("startApp()", 1000);
});


WebApp.AddEventListener('orientationchange', function() {
    window.scrollTo(0,1);
    var el = document.getElementsByClassName('iLayer');
    for ( var i=0; i< el.length; i++ ) 
        el[i].style.minHeight= window.innerHeight -116 +'px' ;
    window.scrollTo(0,1);
    
    var pos = window.location.href.indexOf('#_Chart/');
    if ( pos != -1 && window.innerWidth > 400 ) {
        // switch to graph
        location.href = '#_ChartGraph'; 
        try {
            document.getElementById('iHeader').style.display = 'none';
            document.getElementById('iFooter').style.display = 'block';
        } catch (e) {}
    }
    
    var pos = window.location.href.indexOf('#_ChartGraph');
    if ( pos != -1 && window.innerWidth < 400 ) {
        // switch to chart
        window.location.href = '#_Chart/';
        try {
            document.getElementById('iHeader').style.display = 'block'; 
            document.getElementById('iFooter').style.display = 'block';
        } catch (e) {}
    }
    
    
});

var manageMainMenuActive = 0;
function manageMainMenu(s) {

    if ( s==2 ) {
        profile = default_homepage_config;
        createCookie('s', profile, 3650 );
        loadProfile();
        
        stopPush();
        connection = BG_QuotePush.connect();    
        startPush();
        s=0;
    }

    WA.Header(!s, 'tabMain');
    manageMainMenuActive = s;
    
    if ( !s ) document.getElementById('homeCharts').className='iArrow';
    else document.getElementById('homeCharts').className='iArrow manageDelete';
    
    
    var el = document.getElementById('homeCharts');
    
    
    for ( var i = 0; i< el.childNodes.length; i++ ) {
        var el_l = el.childNodes[i];
        el_l.childNodes[0].setAttribute('href',  s?'#':loadedProfileHref[i]  );
        el_l.childNodes[0].setAttribute('rev',  s?'':'async'  );
    } 
    
    return false;
    
}
function profileManage(instr,exch) {
    if ( manageMainMenuActive ) {
        
        var d = profile.match("(.*)\\|(.*)#"+instr+"#"+exch+"(.*)");
        if ( d !== null ) {      
            profile =   d[1]+d[3];
        } else {
            var d = profile.match("(.*)#"+instr+"#"+exch+"(\\||$)(.*)");
            profile =   d[3];
        }
        
        el = getActiveLayer().getElementsByClassName( 'i_' + instr + '_' + exch )[0];
        
        el.parentNode.removeChild(el);
        
        createCookie('s', profile, 3650 );
        loadProfileHref();
        
    }
}

function addInstrumentToProfile() {
        
    if ( profile != "" ) {
        profile+= '|';
    }
    
    profile += instrumentName+'#'+ instrumentId+"#"+exchangeId;
    createCookie('s', profile, 3650 );
    loadProfile(0,profile);
    
    
    BG_QuotePush.unsubscribe( instrumentId, exchangeId );


    
}


var images_touch_right = [];
var images_touch_lastpos= [];
var images_touch_offset= [];
var counter;
    
function setImageEvents(  e, reset_c ) {
    /*if ( reset_c==undefined ) counter = -1;
    
    if ( !e ) {
        
        return;
    }
    
    var c = e.childNodes;
    
    
    
    if ( e.nodeName=="IMG" ) {
        counter++;
        
        images_touch_lastpos[counter]=0;
        images_touch_offset[counter]=0;        
        
        
        e.style.position="relative";   
        e.ontouchstart = function(ev) {
            ev.preventDefault();
            images_touch_right[counter] = ev.touches[0].pageX;

        };
        e.ontouchmove = function(ev) {
            ev.preventDefault();
                       
            images_touch_offset[counter] = ev.touches[0].clientX - images_touch_right[counter];
            //if ( images_touch_lastpos[counter]+images_touch_offset[counter] < 0 )  images_touch_offset[counter]= -images_touch_lastpos[counter];
               
            e.style.left = images_touch_lastpos[counter]+images_touch_offset[counter]+"px";
            
        };
        e.ontouchend= function(ev) {
            images_touch_lastpos[counter]= images_touch_lastpos[counter]+images_touch_offset[counter];
        };
        
    }
    
    
    for ( var i = 0; i< c.length; i++ )
        setImageEvents ( c[i], 0 ); */
    
}
