//
//  Copyright 2006 APS web.services GmbH. All rights reserved.
//

//These push_elements should reflect the field order of the APS-Feed, Appended are special fields
var push_elements = ['BID','ASK','BIDTIME','ASKTIME','BIDSIZE','ASKSIZE','LAST','LASTSIZE','VOLUME','TURNOVER','CH2CLOSE_REL'];
var spf = false;

//   -------------------------
//	 Number formatting
//	 -------------------------
//   return a formatted string
//   based on the arguments
//   passed to the function
//   syntax:

//   var_number.number_format([decimals ,thousand separator,decimal separator]);
//   var number: number to format
//   decimals: how many decimal numbers (default value 0);
//   thousand separator: char that define the thousands (default value ,);
//   decimal separator: char the defines the decimals (default value .);
//   -------------------------
var maxdecimals=2;
var defdecimals=2;
Number.prototype.number_format = function(decimals, ts, ds)
{
   if(isNaN(this)) return undefined;
   if(this == 0) return '0' + ds + '00';
   if(decimals < 0) return undefined;
   if(decimals == undefined) decimals = false;
   if(maxdecimals == undefined) maxdecimals = decimals;

   if(ts == undefined) ts = ',';
   if(ds == undefined) ds = '.';
   //   ------------------
   //   thousand separator
   //   ------------------
   var returned = this;

   var nkcount = returned.toString().split('.');
   if (nkcount && nkcount[1])
   	nkcount = nkcount[1].length;
	else
		nkcount = 0;

   if (decimals > 0 && maxdecimals > 0 && nkcount > maxdecimals)
   returned = returned.toFixed(maxdecimals);

   returned = returned.toString().split('.');

   var str_begin = returned[0];
   var str_after = returned[1];
   if (str_after == undefined)
   {
   	str_after = new String();
   }
   var temp_str = new String();
   var i = 0;
   //   ------------------
   //   thousand separator
   //   ------------------
   while(i <= str_begin.length)
   {
   		if(i%3==0 && i!=0 && i < str_begin.length)
      	temp_str += str_begin.substr(str_begin.length-i,1) + ts ;
      else
      	temp_str += str_begin.substr(str_begin.length-i,1);
      i++;
   }
   //   ----------------------
   //   decimals
   //   if decimals==0 return
   //   ----------------------
   if(decimals > 0 && maxdecimals > 0)
   {
      str_after = str_after.substr(0,maxdecimals);
      if(str_after.length < decimals)
      {
         while(str_after.length < decimals)
         {
            str_after += '0';
         }
      }
      str_after = ds + str_after;
   }
   else if (maxdecimals == 0)
   {
   	str_after = '';
   }
   //   ----------------------
   //   join the two strings
   //   ----------------------
   i = temp_str.length;
   returned = new String();
   while(i > 0)
   {
   	i--;
		returned += temp_str.substr(i,1);
   }
   if(decimals>0)
   {
      return (returned + str_after);
   }
   return returned;
}

function lu(originalRequest)
{
	var mydata=originalRequest.responseText.split("#");
	mydata.each( function(member)
	{
		if(member != "")
		{
			var entry	=	member.split("|");
			if ($(entry[0]))
			$(entry[0]).innerHTML=entry[1];
		}
	});
}
var pcl = new Object();
var feed = {
sc:function(originalRequest)
{
	var mydata = originalRequest.responseText.split("#");
	//pcl=new Object();
	mydata.each( function(member)
	{
		var entry	=	member.split("|");
		if(entry[0] != '')
		{
			try{pcl[entry[0]]=entry[1];}
			catch(e){}
		}
	});
},
p:function(originalRequest)
{
	var mydata = originalRequest.split("#");
	mydata.each( function(member)
	{
		var push_element = 1;
		var entry	=	member.split("|");
		var isin_con	=	entry[0].split(".");
		var isin	=	isin_con[0];
		push_elements.each(
			function (quote_element)
			{
				var quote_value = entry[push_element];
				if (quote_value != '')
				{
					var classChange;
					var numberFormat;
					maxdecimals = 4;
					defdecimals = 2;
					switch(quote_element)
					{
						case 'ASK':
						if(quote_value > 0)
						{
							classChange = true;
							numberFormat = true;
						}
						else
						{
							numberFormat = false;
							classChange = false;
							quote_value = 'sold out';
						}
						if (quote_value < 0.5)
						{
							defdecimals = 3;
							maxdecimals = 3;
						}
						break;

						case 'BID':
						case 'LAST':
						classChange = true;
						numberFormat = true;
							if (quote_value < 0.5)
							{
								defdecimals = 3;
								maxdecimals = 3;
							}
						break;

						case 'BIDSIZE':
						case 'ASKSIZE':
						case 'LASTSIZE':
						case 'VOLUME':
						case 'TURNOVER':
						classChange = false;
						numberFormat = true;
						maxdecimals = 0;
						break;

						case 'CH2CLOSE_REL':
						quote_value = (entry[1]>0) ? entry[1] : entry[7];//Using BID if present - otherwise try LAST
						maxdecimals = 2;//Percentage does not require more
						var previous_close = $F('PCLOSE_'+isin);//pcl[isin];
						if(previous_close && quote_value)
						{
							//Calc Percentage
							if (previous_close > 0 && quote_value > 0) //if makes sense
							{
								quote_value = 100 * (quote_value - previous_close) / previous_close;
								quote_value = (quote_value == 0)?'0.00':quote_value;
								numberFormat = true;
								
								if (quote_value > 0)
									classChange = 'up';
								else if(quote_value < 0)
									classChange = 'down';
								else
									classChange = 'unchanged';
							}
							else
							{
								quote_value = '---';
								classChange = false;
								numberFormat = false;
							}
						}
						else
						{
							quote_value = '';
						}
						break;

						default:
						classChange = false;
						numberFormat = false;
						break;
					}
					var update_el = $(quote_element+'_'+isin);
					if(update_el && quote_value != '')
					{
						feed.updateQuoteElement(update_el, quote_value,classChange,numberFormat);
					}
					var dupe_counter = 1;
					var dupe = $(quote_element+'_'+isin+'_'+dupe_counter);
					while(dupe != undefined)
					{
						if (quote_value != '')
						feed.updateQuoteElement(dupe, quote_value,classChange,numberFormat);
						dupe_counter++;
						var dupe = $(quote_element+'_'+isin+'_'+dupe_counter);
					}
				}
				push_element++;
			}
		);
	}
	);
},
updateQuoteElement:function(quote_el, val, classChange, numberFormat)
{
	var last_value = quote_el.alt;

	if (quote_el && classChange)
	{
		if (typeof classChange == 'string')
		{
			quote_el.className = classChange;
		}
		else
		{
			if (last_value < val)
				quote_el.className = 'up';
			else if (last_value > val)
				quote_el.className = 'down';
			else
				quote_el.className = 'unchanged';
		}
	}

	if (quote_el)
	{
		quote_el.alt = val;
		if(numberFormat)
		{
			val = parseFloat(val);
			if (val == 0)
			{
				if (maxdecimals == 0)
					quote_el.innerHTML = '0';
				else
					quote_el.innerHTML = '0.00';
			}
			else
			{
				quote_el.innerHTML = val.number_format(defdecimals,',','.'); //Do formatting here
			}
		}
		else
		{
			quote_el.innerHTML = val;
		}
	}
}
}



//Function to start the feed
function feed_start(url)
{
	if(!url)
	return false;

	if (!spf)
	{
		//spf = [];
		//$$('.livequote').each(function(el){spf.push(el.id);});
	}

	if (typeof window.f_frame == 'undefined')
	{
		var d = document.getElementsByTagName('body')[0];
		var ifr = document.createElement('iframe');
		ifr.name = 'f_frame';
		ifr.id = 'f_frame';
		ifr.style.display = 'none';
		ifr.src = url;
		d.appendChild(ifr);
	}
}
