﻿var recipientAdditionalDetailsShown;
var globalPaymentOptions;
var selectedPaymentOption;

function show_hide_recipientAdditionalDetails() {
    if(!recipientAdditionalDetailsShown){
        $('[id *= recipient_additional_details]').show();
        recipientAdditionalDetailsShown = true;
    }else{
        $('[id *= recipient_additional_details]').hide(); 
        recipientAdditionalDetailsShown = false;
    }
}

function updateTransactionDetails() {
    disableNextButton();
    var webRemoteFacade = Seam.Component.getInstance("webRemoteFacade");
    var amount = $('[id *= amount]').val();
    var currency = $('[id *= currency]').val();
    var paymentOption = $('[id *= paymentOption]').val();
    var paymentMethod = $('[id *= paymentMethod]').val();
    webRemoteFacade.getFees(amount,currency,paymentOption,paymentMethod,updateFees);
}

function loadChildPaymentTypes(paymentTypeId) {
    disableNextButton();
    var webRemoteFacade = Seam.Component.getInstance("webRemoteFacade");
    webRemoteFacade.getChildrenPaymentTypes(paymentTypeId,
            showChildPaymentTypes);
}
function showChildPaymentTypes(results) {
    if(results != null){
        var paymentMethodMenu = $('[id *= paymentMethod]')[0];
        var paymentMethodLabel = $('[id *= payment_method_label]')[0];
        removeSelectOptions(paymentMethodMenu);
        if(results.size() > 0){
            loadPaymentMethods(results,paymentMethodMenu);
            showPaymentElements(true,paymentMethodLabel,paymentMethodMenu);
        }else{
            showPaymentElements(false,paymentMethodLabel,paymentMethodMenu);
        }
        updateTransactionDetails();
    }
}

function showPaymentElements(show,label,selectMenu){
    if(show){
          selectMenu.style.display = 'inline';
          label.style.display = 'inline';
    }else{
          selectMenu.style.display = 'none';
          label.style.display = 'none';
    }
}

function loadPaymentMethods(results,paymentMethodMenu){
    var keys = results.keySet();
    for ( var int = 0; int < results.size(); int++) {
        var value = results.get(keys[int]).getId();
        var label = keys[int];
        var currOption = new Option(label, value, false, false);
        paymentMethodMenu.options[int] = currOption;
    }
}

function updateFees(fees){ 
	if(fees != null && fees.length > 0){
	    var sendingFee = $('[id *= sendingFee]')[0];
	    var totalPayable = $('[id *= totalPayable]')[0];
	    sendingFee.innerHTML = fees[0];
	    totalPayable.innerHTML = fees[1];
	}
    enableNextButton();
}

function updatePaymentTypesFilter(countryId){ 
    disableNextButton();
    var webRemoteFacade = Seam.Component.getInstance("webRemoteFacade");
    webRemoteFacade.updatePaymentTypeFilter(countryId,paymentTypesFilterUpdated);
}

function paymentTypesFilterUpdated(paymentOptions){
    if(paymentOptions != null){
        var paymentOptionMenu = $('[id *= paymentOption]')[0];
        removeSelectOptions(paymentOptionMenu);
        globalPaymentOptions = paymentOptions;
        if(paymentOptions.length > 0){
            $('[id *= transactionDetails]')[0].style.display = 'block';
            var webRemoteFacade = Seam.Component.getInstance("webRemoteFacade");
            webRemoteFacade.getSelectedPaymentType(setPrevioslySelectedPaymentType);
            
        }
        else{
            $('[id *= transactionDetails]')[0].style.display = 'none';
        }
    }
}

function setPrevioslySelectedPaymentType(value){
	if(value){
		selectedPaymentOption = value.getId();
	}
    var paymentIds = new Array(globalPaymentOptions.length);
    for ( var int = 0; int < globalPaymentOptions.length; int++) {
        paymentIds[int] = globalPaymentOptions[int].getId();
    }
	var webRemoteFacade = Seam.Component.getInstance("webRemoteFacade");
	webRemoteFacade.getPaymentTypeTranslations(paymentIds,updatePaymentOptionSelect);
}

function removeSelectOptions(selectMenu){
    if(selectMenu){
        var optionsNumber = selectMenu.options.length;
        for ( var int = optionsNumber; int >= 0; int--) {
            selectMenu.remove(int);
        }
    }
}

function updatePaymentOptionSelect(newOptionsTranslations){ 
    var selectMenu = $('[id *= paymentOption]')[0];
    if(globalPaymentOptions.length > 0){
        for ( var int = 0; int < globalPaymentOptions.length; int++) {
            var label = newOptionsTranslations[int];
            var value = globalPaymentOptions[int].getId();
            var selected = false;
            if(value == selectedPaymentOption){
                selected = true;
            }
            var currOption = new Option(label, value, false, selected);
            selectMenu.options[int] = currOption;
        }
    }
    loadChildPaymentTypes(selectedPaymentOption);
}
