/*
  exchange.js - Currency conversion script

  Version: 1.0.4
  Author: Nélio Nunes <nelio -dot- nunes -at- co -dot- sapo -dot- pt>
 */

var
	loading = false;


function esconde(){
	document.getElementById("aguarde").style.visibility="hidden";
}

function mostra(){
	document.getElementById("aguarde").style.visibility="visible";	
}

function resultado(frase) {
	if ( frase != null )
		document.getElementById("answer").innerHTML = frase;
}


// Esta função é chamada como callback do serviço 
// Exchange/LastRateJSON/<moeda de origem>/<moeda de destino>/<valor>,
// e preenche o campo "answer" com o valor devolvido pelo serviço
function calcula(obj){
	loading = false;
	esconde();
	resultado(obj.LastRate.To.Currency.Ask+" "+obj.LastRate.To.Currency.Code);
}


// Esta função é chamada "onclick" para invocar o serviço de cambio
function processa(){

	if(document.forms['formConversor'].amount.value <= 0){
		resultado("Erro: Valor inválido");
		return;
	}

	resultado("");
	mostra();
	var ammount = document.forms['formConversor'].amount.value.replace(",",".").replace(/[^0-9\.]/,"");
	var scr = document.createElement("script");
	var reqFragment = selectedValue(document.forms['formConversor'].origem) + "/" + selectedValue(document.forms['formConversor'].destino) + "/" + ammount;

	loading = true;
	setTimeout("showFailureMessage()",5000);
	scr.src = 'http://services.sapo.pt/Exchange/v2/LastRate/'+reqFragment+'?jsonCallback=calcula';
	document.body.appendChild(scr);

}

// Função auxiliar para devolver o valor selecçionado de uma select box
function selectedValue(selectBox){
	return selectBox.options[selectBox.selectedIndex].value;
}

function callInProgress (xmlhttp) {
	switch (xmlhttp.readyState) {
		case 1: case 2: case 3:
		return true;
		break;
		// Case 4 and 0
		default:
		return false;
		break;
	}
}


function loadCurrencies(){
	getAndCall('/xml/currencies.xml', parseXML);
}


function getAndCall ( url, onCompleteHandler ) {
    return new Ajax.Request ( url, {
        method: 'get',
        parameters: null,
        encoding: 'UTF-8',
		onCreate: function(request) {
			loading = true;
			request['timeoutId'] = window.setTimeout(
			function() {
				if (callInProgress(request.transport)) {
					request.transport.abort();
					showFailureMessage();
				}
			}, 5000);
		},
		onComplete: function (response) {
			loading = false;
			window.clearTimeout(response['timeoutId']);
			if ( onCompleteHandler != null )
				onCompleteHandler(response);
		}
    } );

}

function getTxt(obj, i){
	return obj.textContent || obj.innerText || obj.text;//	 || obj.childNodes[0].nodeValue;
}

function showFailureMessage(){
	if ( loading == false )
		return;

	esconde();
	resultado("Erro no pedido - Tente novamente");
}


function parseXML(obj)
{
	if(obj.status != 200){
		esconde();
		document.getElementById("answer").innerHTML = "Erro no pedido - Tente novamente";
	}
    var str = '';
    var myxml = obj.responseXML;
    var aItems = myxml.getElementsByTagName('Currency');
    var texto = false;
    var currentTitel = false;
	var i_do_select = 0;
    for(var i=0, total=aItems.length; i < total; i++) {
        currentCode = aItems[i].getElementsByTagName('Code')[0];
        currentCountry = aItems[i].getElementsByTagName('Country')[0]; 
        currentDescription = aItems[i].getElementsByTagName('Description')[0];
 		if(currentDescription){
			replaced = aItems[i].getElementsByTagName('ReplacedBy')[0]; 
//        	texto = getTxt(currentDescription, i)+" ("+getTxt(currentCountry, i)+")";
        	texto = getTxt(currentCountry, i)+" - "+getTxt(currentDescription, i);
			codigo = getTxt(currentCode, i);
			if(getTxt(replaced) == undefined || getTxt(replaced) == ""){
				document.forms['formConversor'].origem.options[i_do_select] = new Option(texto,codigo);
				document.forms['formConversor'].destino.options[i_do_select] = new Option(texto,codigo);
				if (codigo == "MZN"){
					document.forms['formConversor'].origem.options[i_do_select].selected = true;
				}else if (codigo == "EUR"){
					document.forms['formConversor'].destino.options[i_do_select].selected = true;
				}
				i_do_select++;
			}
		}
    }
}

if ( document.all )
        attachEvent("onload", loadCurrencies);
else
        window.addEventListener("load", loadCurrencies, false);

