/***
	Created by: Colin Kirsopp
	Needs jquery library to be loaded before this
	Needs cputils loaded before this
***/


// define constants
var VALID_NUMBER = /^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/;

var MAX_LOAD_AMOUNT = {'EUR': 3000, 'USD': 4000, 'GBP':2500};
var MIN_LOAD_AMOUNT = {'EUR': 30, 'USD': 40, 'GBP':25};

var MIN_CASH_LOAD_AMOUNT = 100;
var MAX_CASH_LOAD_AMOUNT = 2500;

var PROGRAMME = {'EUR': 'MTCERO', 'USD': 'MTCUSD', 'MUL': 'MTCGBP'}; // what is the programme for  multi-card?
var DEFAULT_LOAD_AMOUNT = 40.0;
var SHOW_BUYS = 1;  // show buy amounts on comparison chart
var SHOW_SAVINGS = 2;  // show savings amounts on comparison chart
var CURRENCIES = 
{
    EUR: {name:'Euro', symbol:'&euro;', fxrate: 1.0},
	USD: {name:'United States Dollars', symbol:'&#36;', fxrate: 1.0},
	AED: {name:'United Arab Emirates', symbol:'', fxrate: 1.0},
	AUD: {name:'Australian Dollar', symbol:'&#36;', fxrate: 1.0},
	CAD: {name:'Canadian Dollar', symbol:'&#36;', fxrate: 1.0},
	CZK: {name:'Czech Koruna', symbol:'&#75;', fxrate: 1.0},
	DKK: {name:'Danish Kroner', symbol:'kr', fxrate: 1.0},
	HKD: {name:'Hong Kong Dollar', symbol:'&#36;', fxrate: 1.0},
	HUF: {name:'Hungarian Forint', symbol:'Ft', fxrate: 1.0},
	JPY: {name:'Japanese Yen', symbol:'&yen;', fxrate: 1.0},
	MYR: {name:'Malaysian Ringgits', symbol:'Rm', fxrate: 1.0},
	NZD: {name:'New Zealand Dollar', symbol:'&#36;', fxrate: 1.0},
	NOK: {name:'Norwegian Krone', symbol:'Kr', fxrate: 1.0},
	PLN: {name:'Polish Zloty', symbol:'&#122;', fxrate: 1.0},
	SEK: {name:'Swedish Kroner', symbol:'Kr', fxrate: 1.0},
	SGD: {name:'Singapore Dollar', symbol:'&#36;', fxrate: 1.0},
	ZAR: {name:'South African Rand', symbol:'&#82;', fxrate: 1.0},
	CHF: {name:'Swiss Francs', symbol:'chf', fxrate: 1.0},
	THB: {name:'Thai Baht', symbol:'&#3647;', fxrate: 1.0},
	TRY: {name:'Turkish Lira', symbol:'&#84;', fxrate: 1.0}
};



function one_FaqToggle(){
	if(document.getElementById("closePreviews").checked){
		$(".faq_down").removeClass("faq_down").addClass("faq_right");
		$(".faq_answer").hide("fast");
	}
	//
	var oParentDivs = this.parentNode.getElementsByTagName("div");
	
	for(var i=0;i<oParentDivs.length;i++){
		if(oParentDivs[i].className == "faq_answer"){
			if($(oParentDivs[i]).css("display")=="none"){
				$(oParentDivs[i]).show("fast");
				$(this).removeClass('faq_right');
				$(this).addClass("faq_down");
				return false;
			}else{
				$(this).removeClass("faq_down");
				$(this).addClass("faq_right");
				$(oParentDivs[i]).hide("fast")
				return false;
			}

		}
	}
}
function all_FaqToggle(){
	var action = "close";	
	$(".faq_answer").each(function(){if($(this).css("display") == "none"){ action = "open";return false; }	})
	if(action == "open"){
		$(this).removeClass("faq_right").addClass("faq_down");
		$(this).html("Collapse all questions");
		$(".faq_right").removeClass("faq_right").addClass("faq_down");
		$(".faq_answer").show("fast");
		return false;
	}else{
		$(this).removeClass("faq_down").addClass("faq_right");
		$(this).html("Expand all questions");
		$(".faq_down").removeClass("faq_down").addClass("faq_right");
		$(".faq_answer").hide("fast");
		return false;
	}
}


function faq_toggle(event)
{
  	var $target = $(event.target);
	if($target.hasClass('faq_down')){
		$target.removeClass('faq_down').addClass('faq_right');
		$target.next('div').show();		
	}else{
		$target.removeClass('faq_right').addClass('faq_down');
		$target.next('div').hide();
	}
	return false;
}

function faq_expand()
{
	$('.faq_answer').show();
	$('.faq_list a:first-child').removeClass('faq_down').addClass('faq_right');
	return false;
}

function faq_collapse()
{
	$('.faq_answer').hide();
	$('.faq_list a:first-child').removeClass('faq_right').addClass('faq_down');
	return false;
}

function ilove_toggle(event)
{
  	var $target = $(event.target);
	if($target.hasClass('ilove_right')){
		$target.removeClass('ilove_right').addClass('ilove_down');
		$target.parent().next('div').hide();
	}else if($target.hasClass('ilove_down')){
		$target.removeClass('ilove_down').addClass('ilove_right');
		$target.parent().next('div').show();		
	}else if($target.hasClass('open_link')){ 
		//This link needs to open in the current window. 
		return true;	
	}
	return false;
}

function setInitialCookies(){
	
	var refcode = getQueryParameter('refcode');
	
	if (refcode && refcode != ''){
		// we have a refcode, set a cookie
		createCookie('refcodecookie',refcode,30);
	}
	
	var offer = getQueryParameter('offer');
	if (offer && offer != ''){
		// we have a refcode, set a cookie
		createCookie('offercookie',offer,30);
	}
}

function getCurrentOffer(){
	var offer = readCookie('offercookie');
	if (offer== null){
		offer = 'MTCSTD';
	}	
	return offer;
}

function getRefcode(){
	var refcode = '';
	
	refcode = readCookie('refcodecookie');
	if (refcode== null){
		refcode = '';
	}	
	return refcode;
}

function loadCurrencyRate(srcCurrency, destCurrency, callback){
	var dataString =  'offer='+ getCurrentOffer()+'&srcCurrency='+srcCurrency+'&destCurrency='+ destCurrency + '&ordType=cash';
	$.ajax({
		type: "POST",
		url: "/CPCardWeb/fxconversion.htm",
		data: dataString,
		success: function(msg) {
			var fxrate = parseFloat($("rate",msg).text()); 
			if(jQuery.isFunction(callback)){
				callback.call(this,fxrate,destCurrency);
			}
		}
	});	
}


function loadFxRate(srcCurrency, destCurrency, callback){
	var dataString =  'offer='+ getCurrentOffer()+'&srcCurrency='+srcCurrency+'&destCurrency='+ destCurrency;
	$.ajax({
		type: "POST",
		url: "/CPCardWeb/fxconversion.htm",
		data: dataString,
		success: function(msg) {
			var fxrate = parseFloat($("rate",msg).text()); 
			if(jQuery.isFunction(callback)){
				callback.call(this,fxrate);
			}
		}
	});	
}

function loadMultipleCurrencyRates(srcCurrency, destCurrenciesArray, callback){
	loadMultipleRates(srcCurrency, destCurrenciesArray, callback,'cash');
}

function loadMultipleFxRates(srcCurrency, destCurrenciesArray, callback){
	loadMultipleRates(srcCurrency, destCurrenciesArray, callback);
}

function loadMultipleRates(srcCurrency, destCurrenciesArray, callback, type){
	var params = null;
	
	if(type){
		params = {'offer':getCurrentOffer(), 'srcCurrency':srcCurrency, 'destCurrencies':destCurrenciesArray, 'ordType' : type};
	}else {
		params = {'offer':getCurrentOffer(), 'srcCurrency':srcCurrency, 'destCurrencies':destCurrenciesArray};
	}
	var dataString = jQuery.param(params,true);
	var allRates = new Array();
	$.ajax({
		type: "POST",
		url: "/CPCardWeb/fxmulticonversion.htm",
		data: dataString,
		success: function(msg) {
			$("rate",msg).each(function(index, rate){
					allRates[index] = new Rate(
											$("offer",rate).text(),
											$("srcCur",rate).text(),
											$("dstCur",rate).text(),
											$("rate",rate).text()
											);
										});
			if(jQuery.isFunction(callback)){
				callback.call(this,allRates);
			}
		}
	});	
}


function loadComparisons(srcCurrency, destCurrency, type,  callback){

	if(!type){
		alert("Type not defined");
	}
	
	var params;
	
	if(destCurrency){
		params = {'srcCurrency': srcCurrency, 'destCurrency': destCurrency, 'type':type ,'me': 'CRP'};
	}else {
		params = {'srcCurrency': srcCurrency, 'type':type ,'me': 'CRP'};
	}

	var dataString = jQuery.param(params);
	$.ajax({
		type: "POST",
		url: "/CPCardWeb/compare.htm",
		data: dataString,
		success: function(msg) {
			//var comparisons = new Rates(msg);
			var comparisons = new Comparison(msg);
			if(jQuery.isFunction(callback)){
				callback.call(this, comparisons);
			}
		}
	});
}

// this is used for new rates graph
// idsuffix is introduced to fix this for IE7 which does work if there are two elements on the same page with same id
// idsuffix should be used in cases like these to differentiate
function drawChart(id, card, comparisons, display, idsuffix){

	var baseAmount = 500;
	
	if(!comparisons.items){
		return;
	}
	
	if(!idsuffix){
		idsuffix = '';
	}

	var allRates = new Array(comparisons.items.length);

	//var allRates = new Array(comparisons.items.length);
	// the table should be sorted by rate in descmso last rate is the min				
	var minRate = comparisons.items[comparisons.items.length - 1].rate;
	
	var max_bar = parseInt($(id+' #bar0' +idsuffix).css('width')) + parseInt($(id+' #bar0' + idsuffix).css('padding-right'));

	for(i = 0; i < comparisons.items.length; i++){
		allRates[i] = {};
		allRates[i].saving = baseAmount * (( comparisons.items[i].rate / minRate ) - 1 );
		allRates[i].bar_offset = (10 -max_bar+((max_bar-10) * (allRates[i].saving / allRates[0].saving))).toFixed(0);			
		if(display == SHOW_BUYS){
			allRates[i].amount = baseAmount * comparisons.items[i].rate;
			allRates[i].amount_rnd = allRates[i].amount.toFixed(2);
			$(id+' #bar'+i +idsuffix).css('background-position', allRates[i].bar_offset+'px 0').html(getCurrencySymbol(card.currency) + allRates[i].amount_rnd);

		}else{
			allRates[i].saving_rnd = allRates[i].saving.toFixed(2);		
			$(id+' #bar'+i + idsuffix).css('background-position', allRates[i].bar_offset+'px 0').html(getCurrencySymbol(card.paymentCurrency) + allRates[i].saving_rnd);
		}
		$(id+' #bar'+i+'_label' + idsuffix).html(comparisons.items[i].providerName);
	}
	$(id+' .last_updated').html(comparisons.lastUpdated);
	var currency_savings = baseAmount * ( comparisons.items[0].rate - minRate);
	return {currency:currency_savings, pounds:allRates[0].saving };
}

function getSavings (rates, baseAmount){
	var maxSaving = -999999;
	var ourRate = rates.providers[0].allRates[0].rate; // assumes MTC data in first array position
	for(i = 1; i < rates.providers.length; i++){
		var aProvider = rates.providers[i];
		var aRate = aProvider.allRates[0].rate;
		var saving = baseAmount * (( ourRate / aRate ) - 1 );
		var currencySaving = baseAmount * ( ourRate - aRate);
		if(saving > maxSaving ){
			maxSaving = saving;
			maxCurrSaving = currencySaving;
		}
	}
	return {pounds: maxSaving, currency: maxCurrSaving};	
}



// updating comparison tables
var comp_tab1 = 
{
	updated: '20.09.2011',
	data :	[	{ 	name: 	'my Travel Cash',
					values: [	{value: 2.99, text:'2.99%'},
								{value: 0 /*** HACK to get all text showing ***/, text: 'FREE***'},
								{value: 0, text: 'FREE***'}
							]
				},			
				{ 	name: 	'Barclays',
					values: [	{value: 2.99, text:'2.99%'},
								{value: 4.5, text: '&pound;1.50 - &pound;4.50'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'HSBC',
					values: [	{value: 2.75, text:'2.75%'},
								{value: 5, text: '&pound;1.75 - &pound;5.00'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'Lloyds TSB',
					values: [	{value: 2.99, text:'2.99%'},
								{value: 4.5, text: '&pound;2 - &pound;4.50'},
								{value: 1, text: '&pound;1.00'}
							]
				},			
				{ 	name: 	'NatWest',
					values: [	{value: 2.75, text:'2.75%'},
								{value: 5, text: '&pound;2 - &pound;5.00'},
								{value: 1.25, text: '&pound;1.25'}
							]
				},	
				{ 	name: 	'Nationwide',
					values: [	{value: 2.00, text:'2.00%'},
								{value: 1, text: '&pound;1.00'},
								{value: 0, text: 'FREE'}
							]
				}	
			]
};		

var comp_tab2 = 
{	
	updated: '20.09.2011',
	data :	[	{ 	name: 	'my Travel Cash',
					values:	[	{value: 2.99, text:'2.99%'},
								{value: 0, text: 'FREE***'},
								{value: 0, text: 'FREE***'}
							]
				},			
				{ 	name: 	'Barclays',
					values: [	{value: 2.75, text:'2.75%'},
								{value: 2.5, text: '2.5% min &pound;2.50'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'HSBC',
					values: [	{value: 2.99, text:'2.99%'},
								{value: 3, text: '2.99% min &pound;3.00'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'Lloyds TSB',
					values: [	{value: 2.95, text:'2.95%'},
								{value: 2.5, text: '3% min &pound;2.50'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'NatWest',
					values: [	{value: 2.75, text:'2.75%'},
								{value: 3, text: '3% min &pound;3.00'},
								{value: 0, text: 'FREE'}
							]
				},			
				{ 	name: 	'Halifax',
					values: [	{value: 2.95, text:'2.95%'},
								{value: 3, text: '3.00% min &pound;3.00'},
								{value: 0, text: 'FREE'}
							]
				}	
			]
};		

function updateComparisonTable(comp, id)
{
	$(id+' .last_updated').html(comp.updated);
	update_names(id, comp.data);
	update_column(id, comp.data, 1, 80);
	update_column(id, comp.data, 2, 80);
	update_column(id, comp.data, 3, 50);
}

function update_names(id, data){
	for(var i=1; i<= data.length; i++){
		$(id+' .row_'+i+' .name_col').html(data[i-1].name);
	}
}

function update_column(id, data, col, max_bar)
{
	var colMax = 0.0;
	for(var i=0; i< data.length; i++){
		if(data[i].values[col-1].value > colMax ){
			colMax = data[i].values[col-1].value;
		}
	}
	colMax = colMax==0 ? 1 : colMax;

	for(var i=1; i<= data.length; i++){

		var position = Math.ceil(max_bar*(data[i-1].values[col-1].value / colMax) - max_bar)+'px 2px';
		$(id+' .row_'+i+' .col_'+col).html(data[i-1].values[col-1].text);
		$(id+' .row_'+i+' .col_'+col).css('background-position', position);
	}
}

function submitForm(programme,amount,buycurr,url){
		
	$("#programme").val(programme);
	$("#amount").val(amount);
	$("#buycurrency").val(buycurr);
	$("#cardcurrency").val(buycurr);
	
	var base = "https://www.prepaycardservices.com/CPCardWeb/" + url;
	
	$("#details_form").attr("action", base)
	
	$("#details_form").submit();
}

function validNumber(num)
{
	if(VALID_NUMBER.test(num))
		return num;
	
	return 0.0;
}




