var flashTimer;
var updateTimer;

var old_prices = {};
var new_prices = {};

function init() {
	var loadTime = new Date().getTime();

	updateTimer = setTimeout(updatePrices, 2000)

	document.getElements( 'a' ).each( function( item, index, array ) {
		item.addEvent( 'click', function() {
			var clickTime = new Date().getTime();
			var clickDelay = Math.round( ( clickTime - loadTime ) / 1000 );
			try {
				pageTracker._trackEvent( "Front page", "Click", index + "-" + this, clickDelay );
			} catch ( error ) {}
		}.bind( item ) )
	} );
}

function updatePrices() {

    clearTimeout(updateTimer);
	updateTimer = setTimeout(updatePrices, 300000); // In case of timeout

	var req = new Ajax(
		"/gold_prices_xml.do",
		{
            postBody: "considerationCurrency=" + considerationCurrency,
			onComplete: parsePrices
		}).request(); 
}

function parsePrices(text,xml) {

	var pitches = $A(xml.getElementsByTagName('pitch'));

	old_prices = {};
	new_prices = {};

	pitches.each(
		function(pitch) {
			parsePitch(pitch);
		}
	);

    clearTimeout(updateTimer);
	updateTimer = setTimeout(updatePrices, 10000);

	clearTimeout(flashTimer);
	flashPrices(8);
}

function parsePitch(pitch) {

	var sec = pitch.getAttribute("securityId");
	var cur = pitch.getAttribute("considerationCurrency");

	var prices = pitch.getElementsByTagName('price');
	prices = $A(prices);

	prices.each(
		function(price) {
			var act = price.getAttribute("actionIndicator");

			var lim = price.getAttribute("limit_kg");
			var limkg = price.getAttribute("limit_fmt_kg");
			var limoz = price.getAttribute("limit_fmt_oz");

			act = act == 'B' ? 'S' : 'B';

			updatePrice(sec,act,lim,limkg,limoz);
		}
	)
}

function updatePrice(sec,act,lim,limkg,limoz) {

	var idkg = sec + 'K' + act;
	var idoz = sec + 'O' + act;

	var new_price = {
		lim: lim,
		limkg: limkg,
		limoz: limoz
	};

	var xlim = getKgPrice(idkg);

	var old_price = {
		lim: xlim,
		limkg: $(idkg).getElement('span').innerHTML,
		limoz: $(idoz).getElement('span').innerHTML
	};

	if ( new_prices[sec] == null ) { new_prices[sec] = {}; };
	if ( old_prices[sec] == null ) { old_prices[sec] = {}; };

	new_prices[sec][act] = new_price;

	if ( !isNaN(xlim) ) {
		old_prices[sec][act] = old_price;
	}
	else {
		old_prices[sec][act] = new_price;
	}
}

function getKgPrice(id) {

	var e = $(id).getElement('span');
	var v = $(e).innerHTML;

    v = v.replace(/[^0-9]/g,"");

	return parseInt(v);
}

function flashPrices(i) {

	if ( i > 0 ) {

		var show_time;
		var mode = i%2;

		if ( mode == 1 ) {
			showPrices(new_prices, old_prices, mode);
			show_time = 1000;
		}
		else {
			showPrices(old_prices, new_prices, mode);
			show_time = 500;
		}
	
		flashTimer = setTimeout('flashPrices(' + (i-1) + ')', show_time);
	}
	else if ( i == 0 ) {
		showPrices(new_prices, old_prices, 0);
	}
}

function showPrices(show_prices, hide_prices, mode) {

	for (var sec in show_prices) {
		for (var act in show_prices[sec]) {

			var price = show_prices[sec][act];

			var idkg = sec + 'K' + act;
			var idoz = sec + 'O' + act;

			var show_colour = '#000';
			var show_image = 'price_none';

			if ( mode == 1 ) {

				if ( price.lim > hide_prices[sec][act].lim ) {
					show_colour = '#00A';
					show_image= 'price_up';
				}
				else if ( price.lim < hide_prices[sec][act].lim ) {
					show_colour = '#A00';
					show_image= 'price_down';
				}
			}

			showPrice(idkg,price.limkg,show_colour,show_image);
			showPrice(idoz,price.limoz,show_colour,show_image);
		}
	}
}

function showPrice(id,val,colour,image) {

	var e = $(id);

	var span = e.getElement('span');

	span.innerHTML = val;
	span.style.color = colour;
    
    var images = e.getElements('img');

    for (i=0; i<images.length; i++) {
        images[i].setStyle('display', 'none');
    }

    // moo.fx - get an element by class name
    e.getElement('.' + image).setStyle('display', 'inline');
}
