
/******************************************************************
 *                                                        START: FX
 */
(function($){
var populateFxCurrencyDropdown = function(xml){
	$(".widget-rates").each( function(){
		var objWidget = $(this);

		var selectString = "<option value=''>Currency you want to buy</option>";
		xml.find('rate[id^="FX-"]').each(function(){
			var currencyCode = $(this).find('currency').text();
			var currencyName = $(this).find('label').text();
			selectString += '<option value="' + currencyCode + '">' + currencyName + '</option>';  
		});

		/* set up select box */
		var selectBox = objWidget.find('select.widget-rate-currency');
		selectBox.html(selectString);
		selectBox.selectmenu('destroy');
		selectBox.removeAttr('readonly');
		selectBox.selectmenu({ width: 190 });
		
		/* set up form behaviour */
		objWidget.find('form.calculate-form').submit(function(){
			if(objWidget.find('select.widget-rate-currency').val() == ""){
				/* a currency hasn't been selected */
				objWidget.find('select.widget-rate-currency').selectmenu('open');
				return false;
			}
			
			objWidget.find('div.widget-pre-processing').hide();
			objWidget.find('div.widget-post-processing').hide();
			objWidget.find('div.widget-while-processing').show();
			
			/* if rates are already loaded, this will happen immediately */
			$.BNZ.feeds.heroRates.registerCallback(calculateResult, objWidget, processFxError);
			
			/* prevent a page refresh */
			return false; 
		});

		/* rates toggle */
		var options = objWidget.find('#rates-toggle .to-from-nz');		
		options.click(function(e){
			e.preventDefault();
			options.toggleClass('selected');
			
			if(e.target.id == 'to-nz'){
				objWidget.find('#to-from-nz')
					  	 .val('foreign');
				objWidget.find('.widget-rate-amount')
					     .val('')
					     .attr('placeholder', 'Amount in FX')
					     .placeholder();
				
				/* set up select box */
				var selectBox = objWidget.find('select.widget-rate-currency');
				selectBox.find('option[value=""]').text("Currency you want to sell");
				selectBox.selectmenu('destroy');
				selectBox.removeAttr('readonly');
				selectBox.selectmenu({ width: 190 });
			} else {
				objWidget.find('#to-from-nz')
					     .val('nzd');
				objWidget.find('.widget-rate-amount')
				         .val('')
					     .attr('placeholder', 'Amount in NZD')
				  	     .placeholder();
				
				/* set up select box */
				var selectBox = objWidget.find('select.widget-rate-currency');
				selectBox.find('option[value=""]').text("Currency you want to buy");
				selectBox.selectmenu('destroy');
				selectBox.removeAttr('readonly');
				selectBox.selectmenu({ width: 190 });
			}
			return false;
		});
		
	});
	
}

var calculateResult = function(ratesXml, objWidget){
	
	var result = "--ERROR--";
	var currCode = objWidget.find('.widget-rate-currency').val();
	/* get the randomly generated ID so autonumeric can strip the field */
	var amountId = objWidget.find('.widget-rate-amount').attr('id');
	var countryName = ratesXml.find('rate[id="FX-'+currCode+'"] country').text();
	var amount = $.fn.autoNumeric.Strip(amountId);
	var resultCurr = "";
	
	if(objWidget.find(".to-nz").hasClass("selected")){
		var rate = ratesXml.find('rate[id="FX-'+currCode+'"] notebuy').text();
		result = amount / rate;
		resultCurr = "NZD";
		
		/* hide rates button */
		objWidget.find('form.order-form input[type="submit"]').hide();
		objWidget.find('fieldset div.widget-legal').removeClass('text-left');
	} else {
		var rate = ratesXml.find('rate[id="FX-'+currCode+'"] notesell').text();
		result = amount * rate;
		resultCurr = currCode;
		
		/* show rates button */
		objWidget.find('form.order-form input[type="submit"]').show();
		objWidget.find('fieldset div.widget-legal').addClass('text-left');
	}

	result = $.fn.autoNumeric.Format('autonumeric-format',result);
	
	objWidget.find('.widget-rates-result').html(result);
	objWidget.find('.widget-rates-currency').html(resultCurr);
	objWidget.find('form.order-form input[name="country"]').val(countryName);
	objWidget.find('form.order-form input[name="amount"]').val(amount);
	$.BNZ.replaceFonts();
	
	objWidget.find('div.widget-while-processing').hide();
	objWidget.find('div.widget-post-processing').fadeIn();
}

var processFxError = function(objWidget){
	/* an error has occurred in ajax load, throw an error for all HL REP widgets */
	if(objWidget == null){
		$(".widget-rates").each( function(){ 
			processFxError($(this)); 
			return; 
		});
		return;
	}
	
	/* remove loader */
	objWidget.find(".widget-header").hide();
	objWidget.find(".widget-content").hide();
	objWidget.find(".show-on-ajax-error").fadeIn('slow');
}

/* populate currency dropdown when rates are available */
$.BNZ.feeds.heroRates.registerCallback(populateFxCurrencyDropdown, null, processFxError);
})(jQuery);

/**
 *                                                          END: FX
 ******************************************************************/
