j$(function($){
    function showQuestion(){
        var t = $(this);
        var tr = t.parents('tr');
        var td = tr.find('td').first();
        //var q = tr.find('.hover-question').css({'background-color':'#ffffff','width':td.outerWidth()}).show().offset(td.offset());
        var q = tr.find('.hover-question').css({'width':tr.width()-80}).show().offset(td.offset());

        //q.children().css('margin-left',td.outerWidth());
        t.data('text',t.text()).text(t.attr('title')).addClass('down');
        //tr.find('.hover-question').offset(td.offset());
        //q.animate({'background-color': '#f5ae3d','width' : tr.width()},{duration:100});
    };
    function hideQuestion(){
        //$(this).text($(this).data('text')).removeClass('down').parents('td').find('.hover-question').fadeOut();
        $(this).text($(this).data('text')).removeClass('down').parents('td').find('.hover-question').hide();
    };
    $('#market_table a.prognosis').live('mouseover', showQuestion).live('mouseout',hideQuestion).each(function(){
        $(this).trigger('mouseover').trigger('mouseout');
    })
    // .live('click',function(){$(this).trigger('tradingoverlay.open',$(this).attr('rel'));return false;});
    
    $('#market_table').bind('shares.show_all',function(e){$(this).find('tbody tr:hidden').fadeIn();$(e.target).fadeOut();})
    
});

var MarketOptions = {
    chart_render_function : 'render_chart',
    chart_data_path : '/Charts/data/linechart',
    chart_width : "320",
    chart_height: "233",
    table_selector : '#market_table table',
    chart_id: 'chart_container',
    share_selector : '#market_table tbody.shares tr',
    aid_selector: '#market_table span.aid',
    graph_toggle_selector : '#market_table td.col-name button',
    table_shares_limit: 13,
    chart_shares_limit: 13
}

var Market = {
    init : function(market_id,opts){
        if (this.initialized){
            return
        }
        this.initialized = true
        this.market_id = market_id;
        var opts = j$.extend(MarketOptions,opts);
        this.shares = j$(opts.share_selector);
        this.shares.slice(opts.table_shares_limit).hide();

        var aidmap = {}
        var aids = []
        this.shares.each(function(i,v){ 
            var aid = j$(this).find('span.aid').text();
            aids.push(aid);
            j$(this).data('share',{aid:aid,idx:i});
            aidmap[aid] = j$(this);
            })
        
        this.aidmap = aidmap;
        this.gidxmap = {};

        var flashvars = {
            path: "/Charts/ressources/amline/",
            // settings_file:escape("/wf_modules/content/MarketView/chart_settings/default-default-default" ),
            settings_file:escape("/dynamic/marketchart_settings/" ),
            data_file : escape(opts.chart_data_path + '?' + j$.param({'shares:list':aids.slice(0,opts.chart_shares_limit),market:this.market_id,dfrom:null,dto:null},true)),
            preloader_color: "#999999",
            chart_id: opts.chart_id
        }
        var params = {
            wmode: "opaque"
        }
        swfobject.embedSWF("/res/swf/amline/amline.swf", opts.chart_id, opts.chart_width, opts.chart_height, "9.0.0",'expressInstall.swf',flashvars,params);
        this.opts = opts;
        Market.shares.bind('chart.toggle_graph',Market.toggle_graph)
        this.shares.delegate('.toggle-visible','click',function(e){
            j$(this).parents('tr').trigger('chart.toggle_graph',e)
        });
        
    },
    toggle_graph : function(e,oe){
        var self = j$(this);
        var data = self.data('share');
        if (self.hasClass('active')){
            Market.Chart.chart.hideGraph(data.gidx);
        } else {
            if (data.loaded){
                Market.Chart.chart.showGraph(data.gidx);
            } else {
                j$.ajax({
                    url : Market.opts.chart_data_path,
                    data: {'shares:list':data.aid,market:Market.market_id,dfrom:null,dto:null},
                    traditional:true,
                    type: 'GET',
                    dataType: 'text', 
                    success : function(data,status,xhr){
                         Market.Chart.newGraph = data.replace('\n','').match(/<graph .*<\/graph>/)[0];
                         Market.Chart.chart.getData();
                         self.removeClass('loading');
                    }
                });
            self.addClass('loading');
            }
        }
    },
    Chart : {
        newGraph : null,
        init : function(chart_id){
            this.chart_id = chart_id;
            this.chart = document.getElementById(chart_id);
            this.initialized = true;
            this.graphs = new Array();
            this.chart.getData();
        },
        amReturnData : function(d) {
          if (this.newGraph){
              this.addGraph(d)
          } else {
              this.initGraphs(d);
          }
        },
        addGraph: function(d){
            var gdata = unescape(d);
            gdata = gdata.replace(/<\/graph><\/graphs>/,'</graph>'+ this.newGraph + '</graphs>');
            this.newGraph = null;
            this.chart.setData(gdata)
            var gid = 0
            var pattern = /gid="(.+?)"/g;

            while(r = pattern.exec(gdata)){
                aid = r[1]
                gid++
            }
            var share = Market.aidmap[aid].removeClass('inactive').addClass('active');
            var sharedata = share.data('share')
            sharedata.gidx= gid-1;
            sharedata.loaded = true;
            this.graphs.push(Market.aidmap[aid]);
        },
        initGraphs:function(d){
            Market.shares.each(function(i,v){ 
                // resetting old maps
                var data = j$(v).removeClass('active').addClass('inactive').data('share');
                data.loaded = false;
                data.gidx = undefined;
            })
            
            var gdata = unescape(d);
            var gid = 0
            var pattern = /gid="(.+?)"/g;
            while(r = pattern.exec(gdata)){
                var aid = r[1];
                var share = Market.aidmap[aid].removeClass('inactive').addClass('active');
                sharedata = share.data('share')
                sharedata.gidx = gid;
                sharedata.loaded = true;
                this.graphs.push(share);
                gid++;
            };
        }
    }
};

function amChartInited(chart_id){
  Market.Chart.init(chart_id);
}

function amReturnData(chart_id,data){
  Market.Chart.amReturnData(data);
}

function amGraphHide(chart_id, index, title){
    Market.Chart.graphs[index].removeClass('active').addClass('inactive');
}

function amGraphShow(chart_id, index, title){
    Market.Chart.graphs[index].removeClass('inactive').addClass('active');
}
function amProcessCompleted(chart_id, process_name){
}

function amClickedOnBullet(chart_id, graph_index, value, series, url, description){
}


