/***
	Created by: Colin Kirsopp
	Needs jquery library to be loaded before this
	Needs cputils loaded before this
***/

var cards = { EUR: {currency: 'EUR', paymentCurrency: 'GBP', fxrate: 0.0, comparisons: {}, programme: 'MTCERO' },
			  USD: {currency: 'USD', paymentCurrency: 'GBP', fxrate: 0.0, comparisons: {}, programme: 'MTCUSD' },
			  GBP: {currency: 'GBP', paymentCurrency: 'GBP', fxrate: 1.0, comparisons: {}, programme: 'MTCGBP' }
			};
var currentCard = cards['EUR'];


// once DOM model loaded
$(document).ready(function() {

	$('#currency_select').val('EUR'); 
	$('#cash_spend_amount').val('100.00'); 


	setInitialCookies();

	if($('#cashcurrency')){
		// fetch exchange rates
		var count = 0;
		var destCurrencies = new Array();
		for(i in CURRENCIES){
			destCurrencies[count++] = i;
		}
    	loadMultipleCurrencyRates('GBP',destCurrencies, updateCashRates);
	}

// set cash event listeners
	$('#cashcurrency').change(changeCashCurrency); // add listener for change - currency select
	$("#cash_buy_amount").keyup(updateCashSpend); // add listener for spend amount change
	$(".cash_spend_amount").keyup(updateCashBuy);// add listener for buy amount change	
	$("#cash_buy_amount").blur( function(event){ // reset to 2 decimal places 
		var currencyAmount = this.value;
		
		var floatVal = parseFloat(currencyAmount);
		
		var currency = $('#cashcurrency').val();	// set currency
	    var fxrate = CURRENCIES[currency].fxrate;
		
		if(isNaN(floatVal) || floatVal / fxrate  < MIN_CASH_LOAD_AMOUNT){
			currencyAmount = MIN_CASH_LOAD_AMOUNT * fxrate ;
			var poundAmount =MIN_CASH_LOAD_AMOUNT;
			$('.cash_spend_amount').val(poundAmount.toFixed(2));
			floatVal = currencyAmount;
		}

		$('#cash_buy_amount').val(floatVal.toFixed(2));	
	});
	$(".cash_spend_amount").blur(function(event){ // reset to 2 decimal places 
		var poundAmount = this.value;
		
		var floatVal = parseFloat(poundAmount);
		
		if(isNaN(floatVal) || floatVal < MIN_CASH_LOAD_AMOUNT){
			var currency = $('#cashcurrency').val();	// set currency
		    var fxrate = CURRENCIES[currency].fxrate;		
			currencyAmount = MIN_CASH_LOAD_AMOUNT * fxrate ;
			var poundAmount = MIN_CASH_LOAD_AMOUNT;
			$('#cash_buy_amount').val(currencyAmount.toFixed(2));
			floatVal = poundAmount;
		}

		$('.cash_spend_amount').val(floatVal.toFixed(2));
	});
	
	
// set card event listeners
	$('.card_select').val('EUR');
	$('.card_spend_amount').val(DEFAULT_LOAD_AMOUNT);
	
	$(".card_amount").blur( function(event){
		var val = this.value;
		
		var floatVal = parseFloat(val);
		
		if(isNaN(floatVal) || floatVal < MIN_LOAD_AMOUNT[currentCard.currency]){
			val = MIN_LOAD_AMOUNT[currentCard.currency];
			var spendAmount = val / currentCard.fxrate;
			$('.card_spend_amount').val(spendAmount.toFixed(2));
			floatVal = val;
		}

		$('.card_amount').val(floatVal.toFixed(2));
	});
	
	$(".card_spend_amount").blur(function(event){
		var val = this.value;
		
		var floatVal = parseFloat(val);
		
		if(isNaN(floatVal) || (floatVal * currentCard.fxrate) < MIN_LOAD_AMOUNT[currentCard.currency]){
			val = MIN_LOAD_AMOUNT[currentCard.currency] / currentCard.fxrate;
			var buyAmount = MIN_LOAD_AMOUNT[currentCard.currency];
			$('.card_amount').val(buyAmount.toFixed(2));
			floatVal = val;
		}

		$('.card_spend_amount').val(floatVal.toFixed(2));
	});
	
	$(".card_amount").keyup(updateSpendAmount); // add listener for spend amount change
	$(".card_spend_amount").keyup(updateBuyAmount);// add listener for buy amount change
	$('.card_select').change(changeCard); // add listener for change card select
	$('#i_love a').click(ilove_toggle); // reveals for the 'i love my travel cash' section

	
	$('.offer').val(getCurrentOffer());
	$('.refcode').val(getRefcode());


	$(".rotator").cycle({
		timeout       : 5000,
		pause         : true,
		cleartype     : false,
		cleartypeNoBg : false,
		random  	  : 0
	});

	$("#testimonial_banners").cycle({
		timeout       : 5000,
		pause         : true,
		cleartype     : false,
		cleartypeNoBg : false,
		random  	  : 0
	});
	
// set controls to initial defaults
	currentCard = cards['EUR'];

// load Ajax data
	loadMultipleFxRates(currentCard.paymentCurrency,['EUR','USD'], updateCardRates);
	
});


function updateCardRates(rates){
	for (aRate in rates){
		var card = cards[rates[aRate].toCurrency];
		if(card){
			card.fxrate = rates[aRate].rate;
		}
	}
	updateCardRate(currentCard.fxrate);
}

function updateCashRates(rates){
	for (aRate in rates){
		var currency = CURRENCIES[rates[aRate].toCurrency];
		if(currency){
			currency.fxrate = rates[aRate].rate;
		}
	}

	changeCashCurrency();
}

	
function updateCardRate(rate){
	currentCard.fxrate = rate; 
	$('#card_rate').html(currentCard.fxrate);
	var buy_amount = currentCard.fxrate * $('#card_spend_amount').val();
	$('#card_amount').val( buy_amount.toFixed(2) );
}


function changeCard (event){
	var value = $(event.target).val(); //get the selected card value from the changed select
	currentCard = cards[value];	// set current card object
	
	//update form fields
	$('.card_programme').val(currentCard.programme);

	$('.card_select').val(value); // keep both selects in-synch
	$('.card_currency_symb').html(getCurrencySymbol(currentCard.currency)); // update currency symbols

	if(value == 'EUR' || value == 'USD'){
		$('.multi-hide').css('visibility', 'visible');
		$('#card_chart_alt').css('display', 'none');
		$('#card_chart .chart_inner').css('display', 'block');
		if(currentCard.fxrate == 0){ // if we don't have the rate
			loadFxRate('GBP', currentCard.currency , updateCardRate);		
		}else{ // use the stored value
			updateCardRate(currentCard.fxrate);
		}
	}else{ // GBP card
		$('.multi-hide').css('visibility', 'hidden');
		$('#card_chart_alt').css('display', 'none');
		$('#card_chart .chart_inner').css('display', 'block');
		updateCardRate(currentCard.fxrate);
	}
}

function updateSpendAmount(){
	var from_amount, to_amount;
	
	if(this.value){
		to_amount = parseFloat(this.value.replace(/,/g, ''));
	}
	if (isNaN(to_amount) || to_amount < 0){
		return;
	}
	
	if(to_amount > MAX_LOAD_AMOUNT[currentCard.currency]){
		to_amount = MAX_LOAD_AMOUNT[currentCard.currency];
		$('.card_amount').val(to_amount.toFixed(2));
	}
	
	from_amount = to_amount / currentCard.fxrate;

	if (!from_amount || !to_amount) { return; }

	$('.card_spend_amount').val(from_amount.toFixed(2));
}

function updateBuyAmount(){
	var from_amount, to_amount;

	if(this.value){
		from_amount = parseFloat(this.value.replace(/,/g, ''));
	}
	if (isNaN(from_amount)|| from_amount < 0){
		return;
	}
		
	to_amount = from_amount * currentCard.fxrate;
	
	if(to_amount > MAX_LOAD_AMOUNT[currentCard.currency]){
		to_amount = MAX_LOAD_AMOUNT[currentCard.currency];
		from_amount = to_amount / currentCard.fxrate;
		$('.card_spend_amount').val(from_amount.toFixed(2));
	}
	if (!from_amount || !to_amount) { return; }

	$('.card_amount').val(to_amount.toFixed(2));
}


/************  cash functions **********/

function changeCashCurrency(){
	var currency = $('#cashcurrency').val();	// set currency
	$('.cash_currency_symb').html(CURRENCIES[currency].symbol); // update currency symbols
	$('#internet_rate2').html(CURRENCIES[currency].fxrate);
	updateCashBuy();
}


function updateCashSpend(event){

	var from_amount, to_amount;	
	
	to_amount = $(event.target).val();
	to_amount = parseFloat(to_amount.replace(/,/g, ''));

	if (isNaN(to_amount) || to_amount < 0){
		return;
	}

	var currency = $('#cashcurrency').val();	// set currency
	var fxrate = CURRENCIES[currency].fxrate;
	
	from_amount = to_amount / fxrate;
	
	if(from_amount > MAX_CASH_LOAD_AMOUNT){
		from_amount = MAX_CASH_LOAD_AMOUNT;
		to_amount = from_amount * fxrate; 
		$(event.target).val(to_amount.toFixed(2))
	}

	if (!from_amount || !to_amount) { return; }

	$('.cash_spend_amount').val(from_amount.toFixed(2));
}

function updateCashBuy(){

	var from_amount, to_amount;

	from_amount = $('#cash_spend_amount').val();
	from_amount = parseFloat(from_amount.replace(/,/g, ''));

	if (isNaN(from_amount)|| from_amount < 0){
		return;
	}

	var currency = $('#cashcurrency').val();	// set currency
	var fxrate = CURRENCIES[currency].fxrate;
	
	if(from_amount > MAX_CASH_LOAD_AMOUNT){
		from_amount = MAX_CASH_LOAD_AMOUNT;
		$('#cash_spend_amount').val(from_amount.toFixed(2));
	}

	to_amount = from_amount * fxrate;
	
	if (!from_amount || !to_amount) { return; }
	$('#cash_buy_amount').val(to_amount.toFixed(2));
}


