var flashPriceUpColour = "lightblue";
var flashPriceDownColour = "lightsalmon";
var priceChangeUpColour = "blue";
var priceChangeDownColour = "red";
var priceChangeNoneColour = "black";

var updateCounter = 0;


function UpdateChangeField(element,change)
{	
	var clr = priceChangeNoneColour ;

	if(isNaN(parseFloat(change)))
		return;	

	if (change > 0)
	{
		clr = "blue";
		change = "+" + change;
	}
	else if ( change < 0 )
	{
		clr = "red";
	}
	else if ( change == 0 )
	{
		clr = "black" ;
	}
	if(clr == "")
		return;
	document.all(element).innerText = change;
	document.all(element).style.color = clr;
	//document.getElementById(element).innerHTML = change;
	//document.getElementById(element).style.color = clr;
}
function UpdateChangeFieldNetscape(element,change)
{
	var clr = priceChangeNoneColour ;

	if(isNaN(parseFloat(change)))
		return;	
	if (change > 0)
	{
		clr = "blue";
		change = "+" + change;
	}
	else if ( change < 0 )
	{
		clr = "red";
	}
	else if ( change == 0 )
	{
		clr = "black" ;
	}
	if(clr == "")
		return;
	
	document.getElementById(element).innerHTML = change;
	document.getElementById(element).style.color = clr;
}
function UpdatePercentageChangeField(element,change)
{
	var clr = priceChangeNoneColour ;
	if (change > 0)
	{
		clr = priceChangeUpColour;
		change = "+" + change;
	}
	else if ( change < 0 )
	{
		clr = priceChangeDownColour;
	}
	
	if(change != 0 && !isNaN(change))
	{
		document.all(element).innerText = change + '%';
	}
	else
	{
		document.all(element).innerText = "-";
	}
	document.all(element).style.color = clr;
}

function UpdatePercentageChangeFieldNetscape(element,change)
{
	var clr = priceChangeNoneColour ;
	if (change > 0)
	{
		clr = priceChangeUpColour;
		change = "+" + change;
	}
	else if ( change < 0 )
	{
		clr = priceChangeDownColour;
	}
	
	if(change != 0 && !isNaN(change))
	{
		document.getElementById(element).innerHTML = change + '%';
	}
	else
	{
		document.getElementById(element).innerHTML = "-";
	}
	document.getElementById(element).style.color = clr;
}

function UpdateNormalField(element,change)
{
	var clr = "black";
	document.all(element).innerText = change;
	document.all(element).style.color = clr;
}
function UpdateWithFlash(element,value)
{
	oldValue = parseFloat(document.all(element).innerText);
	//alert("oldValue=" + oldValue);
	value = IFSFormatNumber(value,2);
	//alert("value=" + value);
	flashEffect(0, element, oldValue, value)
}
function flashEffect(count, element, oldValue, newValue)
{
	// if the old value is equal to the new value then simply return
	if (Math.abs(oldValue - newValue) < 0.0001)
		return;
		
	if (newValue == "999999999")
		newValue = "-";

	// if the old value was empty or 0 then simply replace 
	if (oldValue == 0 || oldValue == "-" || newValue == "-")
	{
		document.all(element).innerText = IFSFormatNumberString(newValue,3)
		return;
	}
	

	// Only flash 3 times....
	if (count < 6)
	{
		if (count == 0)
		{
			// Work out the correct flash color
			if (newValue > oldValue)
				flashCol = "lightblue";
			else
				flashCol = "lightsalmon";
		
			document.all(element).style.backgroundColor = flashCol;				
		}
		
		if (count == 5) 
		{
			document.all(element).innerText = IFSFormatNumberString(newValue,3)				
		}
		else if (count == 4) 
		{
			document.all(element).innerHTML = IFSFormatNumberString(newValue,3) 				
		}
		else if (count == 0 || count == 2)
		{
			document.all(element).innerText = IFSFormatNumberString(oldValue,3)						
		}
		else
		{
			document.all(element).innerHTML = IFSFormatNumberString(newValue,3)
		}
		count++;		
		setTimeout("flashEffect(" + count + ",\"" + element + "\",\"" + oldValue + "\",\"" + newValue + "\")", 100);
	}
	else
	{
		document.all(element).style.backgroundColor="";				
	}
	
}

function IFSFormatNumber2(num,decimalPlaces)
{
	tempStr = "" + num; 
	dotStr = ".";
	pos = 0
	for ( var i=0;i<tempStr.length;i++)
	{
		temp = tempStr.substring(i,i+1);
		if (dotStr.indexOf(temp) != -1)
		{
			pos  = i;
		}
	}
	if (pos != 0 && (pos + decimalPlaces + 1) < tempStr.length )
	{
		result = tempStr.substring(0,pos+decimalPlaces + 1);
	}
	else
	{
		result = tempStr;
	}

	result = Math.round(num*100)/100;
	return result;

	
}

function IFSFormatNumberString(num,decimalPlaces)
{
	if (num == "-" || isNaN(num))
		return "-";
		
	dpPower = Math.pow(10,decimalPlaces);
	result = Math.round(num* dpPower)/dpPower;
	result = result + "" ;

	if ( result.indexOf( "." ) == -1 )
		result += "." ;
	while( result.length - result.indexOf( "." ) - 1 < decimalPlaces)
		result += "0" ;
	return result ;
}

function IFSFormatNumber(num,decimalPlaces)
{
	if (num == "-")
		return num;
	dpPower = Math.pow(10,decimalPlaces);
	result = Math.round(num* dpPower)/dpPower;
	return result;	
}


function feedUpdate()
{		
	for(i=0;i<eventList.GetNumberOfDHTMLFieldEvents();i++)
	{
		evt = eventList.GetDHTMLFieldUpdateEvent(i);
		val = document.feed.GetLastValue(evt.GetSymbol(),evt.GetField());
		if (val.length > 0 && val != 0)
		{
			DHTMLField = evt.GetDHTMLField();
			if (evt.GetType() == 2)
			{ 				
				flashEffect(0,DHTMLField,document.all(DHTMLField).innerText,val);
			}
			if (evt.GetType() == 9)
			{ 				
				val = parseFloat(val);
				val /= 1000.0;
				flashEffect(0,DHTMLField,document.all(DHTMLField).innerText,val);
			}
			else if (evt.GetType() == 1)
			{
				document.all(DHTMLField).innerText = val;
			}		
			else if (evt.GetType() == 6)
			{
				document.all(DHTMLField).innerHTML = val;
			}		
		}
	}
	if (updateCounter%3 == 0)
	{
		for(i=0;i<eventList.GetNumberOfGraphEvents();i++)
		{
			evt = eventList.GetGraphUpdateEvent(i);
			val = document.feed.GetLastValue(evt.GetSymbol(),evt.GetField());

			if (val.length > 0 && val != 0 && document.feed.GetLastUpdateTime().substring(0,11) != "01-Jan-1970")
			{
				if (evt.GetUpdateType() == 1)
					document.graph.AddRecord(evt.GetSeriesName(),document.feed.GetLastUpdateTime(),val);
				else if (evt.GetUpdateType() == 2)
					document.graph.AddBid(evt.GetSeriesName(),document.feed.GetLastUpdateTime(),val)
				else if (evt.GetUpdateType() == 3)
					document.graph.AddAsk(evt.GetSeriesName(),document.feed.GetLastUpdateTime(),val)
			}
		}
	}
	
	if (document.useQRTUpdate == true)
		QRTUpdate();	
		
	updateCounter += 1;

	setTimeout("feedUpdate()", 500);
}

function priceUpdate(updateSpeed)
{
	if (isNaN(updateSpeed))
		updateSpeed = 3000;
		
	//HARDWIRE REFRESH
	updateSpeed = 1000;
	
	document.feed.UpdateLivePrices();
	setTimeout("priceUpdate()",updateSpeed);		
}

function GetTodayString()
{
	str = "";
	dt = new Date();

	str += dt.getDate()+"-";

	if (dt.getMonth() == 0)
		str += "Jan-";
	else if (dt.getMonth() == 1)
		str += "Feb-";
	else if (dt.getMonth() == 2)
		str += "Mar-";
	else if (dt.getMonth() == 3)
		str += "Apr-";
	else if (dt.getMonth() == 4)
		str += "May-";
	else if (dt.getMonth() == 5)
		str += "Jun-";
	else if (dt.getMonth() == 6)
		str += "Jul-";
	else if (dt.getMonth() == 7)
		str += "Aug-";
	else if (dt.getMonth() == 8)
		str += "Sep-";
	else if (dt.getMonth() == 9)
		str += "Oct-";
	else if (dt.getMonth() == 10)
		str += "Nov-";
	else if (dt.getMonth() == 11)
		str += "Dec-";

	str += dt.getFullYear();		
	
	return str;

}


/* ADDED by Krzysztof 24/05/2007 
BEGIN */
var updateFilters = [];
updateFilters.allRE = new RegExp('.*');
updateFilters.addFilter = function(symbolRE, fieldRE, elementRE, transform) {
    var filter = { symbolRE: symbolRE ? symbolRE : this.allRE, fieldRE: fieldRE ? fieldRE : this.allRE, elementRE: elementRE ? elementRE : this.allRE, transform: transform };
    this[this.length] = filter;
    filter.canProcess = function(symbol, field, element) {
        if (typeof symbolRE == 'function') {
            var result = this.symbolRE(symbol);
            if (!result)
                return false;
        }
        else
            if (!this.symbolRE.test(symbol))
            return false;
        if (!this.fieldRE.test(field))
            return false;
        if (!this.elementRE.test(element))
            return false;
        return true;
    }
    filter.processValue = function(val) {
        return this.transform(val);
    }
}
/* END */
