var log = function (msg) {
//  console.log("%s", msg);
};

var $time = Date.now || function(){ return +new Date; };

var Market = {
	config : {
		Tooltip : {
					delay: 0,
					track: true,
					showURL: false
				}
	}
};

var Ticker = {
	interval: 30, //in seconds
	errors: 0,
	url: "./ws/ticker",
	currency: null,
	running: 0,
	init: function(currency){
		if( $(".ticker-container")[0] )
		{
			Ticker.currency = currency;
			log('Ticker: init');
			Ticker.retreve();
		}
	},
	run: function(){
		var marq = $('<marquee behavior="scroll" direction="left" scrollamount="1"></marquee>');
		var tc = $(".ticker-content").wrap(marq);

		var mq = $(".ticker-container marquee").marquee('ticker').mouseover(function () {
            $(this).trigger('stop');
        }).mouseout(function () {
            $(this).trigger('start');
        }).mousemove(function (event) {
            if ($(this).data('drag') == true) {
                this.scrollLeft = $(this).data('scrollX') + ($(this).data('x') - event.clientX);
            }
        }).mousedown(function (event) {
            $(this).data('drag', true).data('x', event.clientX).data('scrollX', this.scrollLeft);
        }).mouseup(function () {
            $(this).data('drag', false);
        });
		mq.get(0).scrollLeft = 980; //start from left
	},
	retreve: function(){
		log('Ticker: retreve');

		//generate ticker info and show
		$.ajax({
			type: "GET",
			url: Ticker.url,
			data: {currency: Ticker.currency},
			success: Ticker.update,
			error: Ticker.error,
			dataType: "json",
			cache: false
		});
	},
	error: function(){
		log('Ticker: error '+Ticker.errors);
		if( Ticker.errors >= 15 ){ //give it up
			return;
		}
		Ticker.errors += 1;
		//$('#loading').show();
		Ticker.reload( Ticker.errors * 5 );
	},
	reload: function(sec){
		log('Ticker: waiting '+sec);
		setTimeout( Ticker.retreve, parseInt(sec,10) * 1000 );
	},
	update: function(data){
		log('Ticker: update');

		var list = [];

		$.each(data.indexes, function(i, row){
			list.push([
					'<span class="name"><a href="./?pg=charts&period=day&idx_main[]='+row.short+'">'+row.name+'</a></span>',
					'<span class="change '+(row.chg > 0 ? 'pos' : (row.chg < 0 ? 'neg' : ''))+'">' +row.last +' ('+(row.chg > 0 ? '+' : '') + row.chg+'%)</span>'
					].join('')
				);
		});

		$.each(data.equities, function(i, row){

			list.push([
					'<span class="name"><a href="./?pg=isearch&otsi='+row.name+'">'+row.name+'</a></span>',
					'<span class="change '+(row.chg > 0 ? 'pos' : (row.chg < 0 ? 'neg' : ''))+'">' +row.last +' '+row.ccy+' ('+(row.chg > 0 ? '+' : '') + row.chg+'%)</span>'
					].join('')
				);
		});

		$('div.ticker-content').html( list.join('') );
		
		if( Ticker.running == 0 ){
			Ticker.run();
		}

		Ticker.errors = 0;
//		Ticker.reload(Ticker.interval);
	}
}

var MyList = {
	list: [],
	cookieName: 'mylist',
	cookieOptions: { path: '/', expires: 90 },
	init: function(){
		var list = $.cookie(MyList.cookieName); //get cookie
		if( null !== list && list != ''){
			list = list.split(',');
		}else{
			list = [];
		}
		MyList.list = list;
		MyList._save();
	},
	add: function(ISIN){
		if( !MyList.isInList(ISIN) ){
			MyList.list.push(ISIN);
			MyList._save();
		}
	},
	remove: function(ISIN){
		var _index= MyList.isInList(ISIN, true);
		if( _index != -1 ){
			MyList.list.splice(_index, 1);
			MyList._save();
		}
	},
	_save: function(ISIN){
		$.cookie(MyList.cookieName, MyList.list.join(','), MyList.cookieOptions);
	},
	isInList: function(ISIN, return_index){

		//add to cookie
		var _index = $.inArray(ISIN,MyList.list); 

		if( return_index === true ){
			return _index;
		}

		if( _index == -1 ){
			return false;
		}else{
			return true;
		}
	}
}

$(document).ready(function() {

	//make market links active in top menu
	var $el = $("#a-mw-"+market_pg);
	if( $el[0] ){
		$("#nav ul li:has(#a-mw-"+market_pg+")>a").addClass('active');
	}

	//fix left/right height
	var sideFilter = $('#sideFilter');
	if( sideFilter[0] ){
		var marketBody = $("#marketBody");
		if( marketBody.height() < sideFilter.height() ){
			marketBody.height(sideFilter.height());
		}
	}

	Ticker.init(market_currency);
});
