var tickerBox = new Object();
tickerBox.modalContainer = null;
tickerBox.linkContainer = null;
tickerBox.hoverTimeout = null;
tickerBox.defaultHeight = 288;
tickerBox.defaultWidth = 512;
tickerBox.vertPadding = 50;
tickerBox.horizPadding = 20;

tickerBox.init = function() {
	if( $('.ticker-box').length == 0 ) return;
	/* build containers */
	if($('#ticker-box-modal-cont').length==0)
	{
		tickerBox.modalContainer = $('<div id="ticker-box-modal-cont" class="ui-corner-all"><div id="ticker-box-modal-title" class="ui-corner-top"></div><img id="ticker-box-modal-chart-img" src="/images/logoprod.gif" /><div id="ticker-box-modal-html-cont"></div></div>');
		$('body').append($(tickerBox.modalContainer));
	}
	else
		{ tickerBox.modalContainer = $('#ticker-box-modal-cont'); }

	if($('#ticker-box-link-cont').length==0)
	{
		tickerBox.linkContainer = $('<div id="ticker-box-link-cont"  class="ui-corner-all"/>');
		$('body').append($(tickerBox.linkContainer));
	}
	else
		{ tickerBox.linkContainer = $('#ticker-box-link-cont'); }
		
	/* unbind to be safe */
	$('a.yhooChart').die();
	$('a.showImg').die();
	$('a.showHtml').die();
	$('.ticker-box-trigger').die();
	$('#ticker-box-link-cont').die();

	/* bind events */
	$('a.yhooChart').live('mouseover', function(event) {
		if($(event.target).parent('.ticker-box-showable-links-cont').length>0) { tickerBox.hideLinks(); }
		try { clearTimeout(tickerBox.hoverTimeout); }catch(e){};
		tickerBox.showYhooImg(event);
	});
	$('a.yhooChart').live('mouseout', function(event) { tickerBox.hideImg(); });

	$('a.showImg').live('mouseover', function(event) {
		if($(event.target).parent('.ticker-box-showable-links-cont').length>0) { tickerBox.hideLinks(); }
		try { clearTimeout(tickerBox.hoverTimeout); }catch(e){};
		tickerBox.showImg(event);
	});
	$('a.showImg').live('mouseout', function(event) { tickerBox.hideImg(); });

	$('a.showHtml').live('mouseover', function(event) {
		if($(event.target).parent('.ticker-box-showable-links-cont').length>0) { tickerBox.hideLinks(); }
		try { clearTimeout(tickerBox.hoverTimeout); }catch(e){};
		tickerBox.showPage(event);
	});
	$('a.showHtml').live('mouseout', function(event) { tickerBox.hidePage(); });

	$('.ticker-box-trigger').live('mouseover', function(event) {
		try { clearTimeout(tickerBox.hoverTimeout); }catch(e){};
		tickerBox.showLinks(event);
	});
	$('.ticker-box-trigger').live('mouseout', function(event) {
		try { clearTimeout(tickerBox.hoverTimeout); }catch(e){};
		tickerBox.hoverTimeout = setTimeout( function(){ tickerBox.hideLinks(); } , 800 );
	});

	$('#ticker-box-link-cont').live('mouseover', function(event) { try { clearTimeout(tickerBox.hoverTimeout); }catch(e){}; });
	$('#ticker-box-link-cont').live('mouseout', function(event) { tickerBox.hoverTimeout = setTimeout( function(){ tickerBox.hideLinks(); } , 500 ); });
};

tickerBox.showLinks = function(event) {
	var par = $(event.target).parents('.ticker-box').get(0);
	var hiddenBox = $(par).find('.ticker-box-all-hidden').get(0);

	var p = $(par).offset();
	var x = 0;
	if($(event.target).hasClass('left')) { x = p.left - $(hiddenBox).width() - 37; }
	else
	{
		var chts = $(par).children('.ticker-box-showable-links-cont').get(0);
		if(chts) { x = p.left + $(par).width() - $(chts).width(); }
		else { x = p.left + $(par).width() + 3; }
	}
	var y = p.top - 22;
	if(y<0) { y=0; }
	$(tickerBox.linkContainer).html($(hiddenBox).html());
	$(tickerBox.linkContainer).css({ 'display' : 'block', 'top' : y + 'px', 'left' : x + 'px' });
};
tickerBox.hideLinks = function() { $(tickerBox.linkContainer).hide(); };


tickerBox.showYhooImg = function(event) {
	var elem = event.target;
	var params = $(elem).attr('rel').split(' ');
	var hoverHeight = parseInt(params[0]);
	var hoverWidth = parseInt(params[1]);
	var ticker = params[2];
	var type = params[3];

	var typeTitle = (type == '5d') ? ' 5 Day Chart' : ' 1 Year Chart';
	url = 'http://chart.finance.yahoo.com/z?s=' + $.trim(ticker.toLowerCase()) + '&t='+type+'&q=l&l=on&z=m&a=v&p=s&lang=en-US&region=US';

	if(tickerBox.modalContainer != null)
	{
		$('#ticker-box-modal-cont').css({height: (hoverHeight + tickerBox.vertPadding) + 'px', width: (hoverWidth + tickerBox.horizPadding) + 'px'});

		tickerBox.positionModalCont(elem);
		$('#ticker-box-modal-html-cont').hide();
		$('#ticker-box-modal-chart-img').attr('src', url).show();
		$('#ticker-box-modal-title').html(ticker + typeTitle);
		$(tickerBox.modalContainer).show();
	}
};
tickerBox.showImg = function(event) {
	var elem = event.target;
	var now = new Date();

	var rel = $(elem).attr('rel').split('!');
	var hoverHeight = rel.length>0 ? parseInt(rel[0]) : tickerBox.contDefaultHeight;
	var hoverWidth = rel.length>1 ? parseInt(rel[1]) : tickerBox.contDefaultWidth;
	var hoverImgUrl = rel.length>2 ? rel[2] : '';
	var hoverTitle = rel.length>3 ? rel[3] : '';


	if(tickerBox.modalContainer != null)
	{
		$('#ticker-box-modal-cont').css({height: (hoverHeight + tickerBox.vertPadding) + 'px', width: (hoverWidth + tickerBox.horizPadding) + 'px'});
		tickerBox.positionModalCont(elem);
		$('#ticker-box-modal-html-cont').hide();
		$('#ticker-box-modal-chart-img').attr('src', hoverImgUrl + '&' + now.getTime()).show();
		$('#ticker-box-modal-title').html(hoverTitle);
		$(tickerBox.modalContainer).show();
	}
};
tickerBox.hideImg = function() {
	$('#ticker-box-modal-chart-img').hide();
	$('#ticker-box-modal-chart-img').attr('src', '/images/new/ajax-loader-trans.gif');
	$(tickerBox.modalContainer).hide();
};


tickerBox.showPage = function(event) {
	var elem = event.target;
	if($(elem).is('img'))
		{ elem = $(elem).parent('a').get(0); }

	var rel = $(elem).attr('rel').split('!');
	var hoverHeight = rel.length>0 ? parseInt(rel[0]) : tickerBox.contDefaultHeight;
	var hoverWidth = rel.length>1 ? parseInt(rel[1]) : tickerBox.contDefaultWidth;
	var hoverUrl = rel.length>2 ? rel[2] : '';
	var hoverTitle = rel.length>3 ? rel[3] : '';
	if(tickerBox.modalContainer != null)
	{
		$('#ticker-box-modal-cont').css({height: (hoverHeight + tickerBox.vertPadding) + 'px', width: (hoverWidth + tickerBox.horizPadding) + 'px'});
		tickerBox.positionModalCont(elem);
		ajaxLoading($('#ticker-box-modal-html-cont'));
		$('#ticker-box-modal-chart-img').hide();
		$('#ticker-box-modal-html-cont').show();
		$('#ticker-box-modal-title').html(hoverTitle);
		$(tickerBox.modalContainer).show();

		$.ajax({
			async:false,
			url:hoverUrl,
			success:function(html) { $('#ticker-box-modal-html-cont').html(html); }
		});
	}
};
tickerBox.hidePage = function() { $('#ticker-box-modal-html-cont').hide(); ajaxLoading($('#ticker-box-modal-html-cont')); $(tickerBox.modalContainer).hide(); };



tickerBox.positionModalCont = function(elem) {
	var par, p, x, y;

	/* center horizontally */
	x = ($(window).width() / 2) - ($(tickerBox.modalContainer).width() / 2);
	if(x < 0) { x = 10; }

	par = $(elem).parents('span').get(0);
	if(par == null)
	{
		/* chart links are part of ticker-box-link-cont */
		par = $(elem).parents('#ticker-box-link-cont').get(0);
		p = $(par).offset();
		y = p.top + $(par).height() + 12;
	}
	else
	{
		p = $(par).offset();
		y = p.top + $(par).height() + 5;
	}

	if (y + $(tickerBox.modalContainer).height() > ($(window).height() + $(window).scrollTop()) )
	{
		/* vertical is off screen */
		var fixedY = p.top - $(tickerBox.modalContainer).height() - 6;
		if(fixedY>=$(window).scrollTop()) { y = fixedY; }
	}

	$(tickerBox.modalContainer).css({ 'top' : y + 'px', 'left' : x + 'px' });
};

$(document).ready(function(){ tickerBox.init(); });
