/*global define*/
/**
 * It checks that birthday and gender fields are set (either by hidden or visual fields). If conditions are not
 * met, it returns false, in the other case, it logs information by using logformdata function and returns true.
 *
 * @class de_epages.ipayment.ui.ipaymentbillsafefields
 *
 * @uses jQuery
 * @uses ep
 * @uses ep.ajax
 * @uses ep.ui.datepicker
 *
 */
define('de_epages/ipayment/ui/ipaymentbillsafefields', [
    'jquery',
    'ep',
    '$ready!',
    'ep/ajax',
    'ep/ui/datepicker'
], function ($, ep) {
    'use strict';
    /**
     * @param {Array}   serializedarray          Servlet serialized data.
     * @param {int}     id                 ID of the basket.
     */
    function logformdata(serializedarray, id) {
        ep.ajax({
            async: false,
            data: $.merge(
                serializedarray, [{
                    name: "ChangeAction",
                    value: "JSONIpaymentOutgoingLog"
                }, {
                    name: "ObjectID",
                    value: id
                }]
            ),
            cache: false,
            type: "POST",
            dataType: "json"
        });
    }

    /**
     * @param {Array}   serializedarray          Servlet serialized data.
     * @param {int}     basketid                 ID of the basket.
     * @param {String}  paymenttype              Ipayment payment type.
     * @param {String}  addr_birthday            hidden birthday date input.
     * @param {String}  dp_birthday              datePicker selector input.
     * @param {String}  male_gender              gender radio button input.
     * @param {String}  female_gender            gender radio button input.
     */
    return function (serializedarray, basketid, paymenttype, addr_birthday, dp_birthday, male_gender, female_gender) {
        if (paymenttype === 'invoice') {
            var unfilledfields = false;

            if (dp_birthday.length === 1) {
                var pickedDate = dp_birthday.uiDatepicker('getDate'),
                    today = new Date();
                if (pickedDate.getFullYear() < today.getFullYear()) {
                    var strPickedDate = pickedDate.getFullYear() + '/' + (pickedDate.getMonth() + 1) + '/' + pickedDate.getDate();
                    addr_birthday.val(strPickedDate);
                    dp_birthday.removeClass('ui-invalid');
                } else {
                    dp_birthday.addClass('ui-invalid');
                    unfilledfields = true;
                }
            }
            if ((male_gender.attr('type') === 'radio') && (female_gender.attr('type') === 'radio') && !(male_gender.is(':checked')) && !(female_gender.is(':checked'))) {
                male_gender.addClass('ui-invalid');
                female_gender.addClass('ui-invalid');
                unfilledfields = true;
            } else {
                male_gender.removeClass('ui-invalid');
                female_gender.removeClass('ui-invalid');
            }
            if (unfilledfields) {
                return false;
            }
        }
        logformdata(serializedarray, basketid);
        return true;
    };
});