var req;
var rates;


function onLoadConverter() 
{  updateFlag(document.getElementById('from'));
   updateFlag(document.getElementById("to"));
   document.getElementById("amount").value = "";
   fetchQuotes();
}

function fetchQuotes() 
{   var url = "quotes.asp";
	req = setXmlHTTPObject(url, ratesCallback);
	setTimeout("fetchQuotes()", 20000);
}

function ratesCallback() 
{ 	if (req && req.readyState == 4) 
    {  if (req.status == 200 || req.status == 0) 
	   {  rates = req.responseXML;
		  updateAmount();
	   } else {}
    }
}

function setXmlHTTPObject(url, myCallback) 
{  if (window.XMLHttpRequest) 
   {  var req = new XMLHttpRequest();
	  req.onreadystatechange = myCallback;
      req.open("GET", url, true);
	  req.send(null);
	} 
	else 
	if (window.ActiveXObject) 
	{   var req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) 
		{  req.onreadystatechange = myCallback;
           req.open("GET", url, true);
		   req.send();
		}
    }
	return req;
}

function pair_rate(from, to, rate_type) {
	try 
	{  if(typeof(req) == "undefined" 
			|| typeof(req.responseXML) == "undefined" 
			|| typeof(req.responseXML.getElementsByTagName) == "undefined" ) return;
	}catch(e) { return; }
	
    var instrumentList = req.responseXML.getElementsByTagName("mnQuote");
    var rate;
	for(i=0; i < instrumentList.length; i++) 
	{  var instrName = instrumentList.item(i).getElementsByTagName("MnInstrumentid")[0].firstChild.nodeValue;
	   var instr_name = (from + to);
	   if(instrName == instr_name) 
	   {  rate = instrumentList.item(i).getElementsByTagName("MnBid")[0].firstChild.nodeValue;
	   }
	}
	return rate;
}

function pair_any_rate(from, to, rate_type) 
{	var rate = pair_rate(from, to, rate_type);
	if(rate) return rate;
	rate = pair_rate(to, from, rate_type);
	if(rate) return (1 / rate);
	return rate;
}


function  cross_rate(cur1, cur2, rate_type) 
{  var cross = "USD";
   var rateleft = pair_any_rate(cur1, cross, rate_type);
   var rateright = pair_any_rate(cur2, cross, rate_type);
   if ((rateleft == null) || (rateright == null))
     return null;		
   return rateleft / rateright;
}


function amount_convert(from, to, amount, rate_type) 
{  if(from == to) return amount;
   var rate;
   var convertedAmount;
   rate = pair_any_rate(from, to, rate_type);
   if(!rate) 
   {  rate = cross_rate(from, to, rate_type);
   }	
   return rate * amount;
}

function updateFlag(el) 
{  var id = el.id;
   var currency = el.options[el.options.selectedIndex].value;
   var flagImg = document.getElementById( id + "_currency");
   flagImg.src	= "img/" + currency + ".gif";
   flagImg.alt 	= currency;
   
}


function updateAmount() 
{ var from 	= document.getElementById("from");
  var to   	= document.getElementById("to");
  var amount 	= document.getElementById("amount");
  var resultat 	= document.getElementById("resultat");	
  var converted;
  var converted_inverse;
  var bid = amount_convert(from.options[from.options.selectedIndex].value,
			to.options[to.options.selectedIndex].value, amount.value, "bid");
  var bid_inverse = amount_convert(to.options[to.options.selectedIndex].value,	
			from.options[from.options.selectedIndex].value, amount.value, "bid");
  var from_currency 	= from.options[from.options.selectedIndex].value;
  var to_currency 	= to.options[to.options.selectedIndex].value;
  if(bid && bid.toFixed)	bid = bid.toFixed(2);
  if(bid_inverse && bid_inverse.toFixed)	bid_inverse = bid_inverse.toFixed(2);
  converted = bid ? formatCurrency(amount.value) + " " + from_currency 
				+ " = " + formatCurrency(bid)  + " " + to_currency : "";
  converted_inverse = bid_inverse ? formatCurrency(amount.value) + " " + to_currency 
				+ " = " + formatCurrency(bid_inverse)  + " " + from_currency : "";
  resultat.innerHTML = converted + "<br>" + converted_inverse;
}


function formatCurrency(num) 
{	num = num.toString().replace(/\'/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents < 10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+"'"+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + num + '.' + cents);
}



