/*global define*/
/**
 * Sends a request for cancel ipayment authorization
 *
 * @class de_epages.ipayment.ui.ipaymentcancel
 *
 * @uses jQuery
 * @uses ep
 * @uses ep.ajax
 * @uses ep.fn.busy
 * @uses ep.ui.dialog
 *
 *
 */
define('de_epages/ipayment/ui/ipaymentcancel', [
    'jquery',
    'ep',
    '$dict!ep/dict',
    '$ready!',
    'ep/ajax',
    'ep/fn/busy',
    'ep/ui/dialog',
], function($, ep, epDict) {

    'use strict';
    var tCancelPaymentQuestion = epDict.translate('{CancelPaymentQuestion}');
    var tYes = epDict.translate('{yes}');
    var tCancel = epDict.translate('{Cancel}');
//    var tAccepted = epDict.translate('{IpaymentStatusAccepted}');
    var tFailed = epDict.translate('{IpaymentStatusFailed}');
    var tPaid = epDict.translate('{IpaymentStatusPaid}');
    var tCancelled = epDict.translate('{IpaymentStatusCancelled}');

    /**
     * @param {String}  UIControlParameters                 JS Object with UI control parameters.
     */
    return function(UIControlParameters){
        var currentWindow = UIControlParameters.CurrentWindow || window;
        var visible = IsVisible(UIControlParameters);

        if (visible) {
        	UIControlParameters.CancelLink.on('click', function(event) {
                event.preventDefault();
                var dialog = ep('<div/>')
                    .append('<div>' + tCancelPaymentQuestion + '</div>')
                    .uiDialog({
                        modal: true,
                        width: 350,
                        height: 150,
                        buttons: [{
                            id: 'YesId',
                            text: tYes,
                            click: function() {
                                handleipaymentcancel(ep(this), UIControlParameters.Objectid, currentWindow);
                                ep(this).busy('show');
                            }
                        }, {
                            id: 'CancelId',
                            text: tCancel,
                            click: function() {
                                ep(this).uiDialog('close');
                            }
                        }]
                    });
                dialog.uiDialog('open');
            });
        }
    };
    
    function IsVisible(UIControlParameters) {

    	UIControlParameters.DisplayCancel.hide();

        if (UIControlParameters.PaymentTypeAlias == "Ipayment" && UIControlParameters.SelectedTransactionType == "preauth") {
        	UIControlParameters.DisplayCancel.show();
            if (UIControlParameters.TransStatus == "STATUS_ACCEPTED" || UIControlParameters.TransStatus == "STATUS_FAILED") {
            	UIControlParameters.CancelLink.removeClass("Disabled").addClass("ep-cancelamount ep-reloadlocation");
                return true;
            } else {
            	UIControlParameters.CancelLink.removeClass("ep-cancelamount ep-reloadlocation").addClass("Disabled");
                return false;
            }
        }
        return false;
    }
    
    function handleipaymentcancel(context, objectid, currentWindow) {
        ep.ajax({
                data: {
                    'ObjectID': objectid,
                    'ChangeAction': 'JSONCancelIpaymentPayment'
                },
                cache: false,
                type: "POST",
                dataType: "json"
            })
            .done(function(jsonData) {
                var status = jsonData.status;
                var transstatus = jsonData.transstatus;                
                context.busy('hide');
                if (status == 'ok' && transstatus == 'STATUS_CANCELLED') {
                    context.empty();
                    context.append('<div id="Response" class="DialogMessage MessageWarning">OK</div>');
                    context.uiDialog('close');
                    currentWindow.location.reload();
                } else if (status == 'error') {
                    context.empty();
                    context.append('<div id="Response" class="DialogMessage MessageWarning">' + jsonData.message + '</div>');
                    context.uiDialog('close');
                    $("#IpaymentActionsNotificationDiv").empty();
                    $("#IpaymentActionsNotificationDiv").append(TextWithTransStatus(transstatus)).removeClass("MessageInfo").addClass("MessageWarning");
                    $("#IpaymentActionsNotificationDiv").show();
                } else {
                    context.empty();
                    context.append('<div id="Response" class="DialogMessage MessageWarning">Transaction Failed</div>');
                    context.uiDialog('close');
                    $("#IpaymentActionsNotificationDiv").empty();
                    $("#IpaymentActionsNotificationDiv").append(TextWithTransStatus(transstatus)).removeClass("MessageInfo").addClass("MessageWarning");
                    $("#IpaymentActionsNotificationDiv").show();
                }
            })
            .fail(function(jsonData) {
                context.busy('hide');
                context.empty();
                context.buttons.empty();
                context.append('<div class="DialogMessage MessageWarning">ajax error</div>');
            });
    }
    
    function TextWithTransStatus(transstatus){      
    	if (transstatus == 'STATUS_PAID'){
    		return tPaid;
    	} 
    	
    	if (transstatus == 'STATUS_FAILED'){
    		return tFailed;
    	}
    	
    	if (transstatus == 'STATUS_ACCEPTED'){
    		return tAccepted;
    	}
    	
    	if (transstatus == 'STATUS_CANCELLED'){
    		return tCancelled;
    	}
    	
    }    
});