

//this refernce will be set for this and other partials that use the function saveAddressChangesIfNeeeded
var changeAddressPopUpRef$;

var ChangeAddressPopupUpdateInfoFinishedPopupSettings = {
     ShowBackButton : false
} 
var updateAddressInProcess = false;

$(document).ready(function() {

    updateSubprovinceCombo();
    var changeAddressPopup$ = $('#changeAddressPopup');
    $('.tooltiperror', changeAddressPopup$).hide();
    $('span.customClose', changeAddressPopup$).click(function() {
        /* restore default values */
        $('input:text, select', changeAddressPopup$).each(function() {
            $(this).val($(this).attr('data-current'));
        });
        /* close this popup / open previous */
        CommonManager.OverlayModal($('#changeAddressPrevPopup').val(), null, true, POPUPS_TOP);
    });

    
    $('#changeAddressSaveBtn').click(function(e) {
        e.stopPropagation();
        saveAddressChangesIfNeeeded.call(this,changeAddressPopUpRef$);        
    });           

    $('.forgot-password a', '.changeaddressplace').on('click', function() {
        CommonManager.PerformAjaxCall('/User/ForgetPasswordByEmail', {email: "", captcharesponse: ""}, function(response) {
            if (response === 0)
                CommonManager.ShowGeneralMsg(_NG_LoginPopUp_ForgotPassMsg);
        });
    });

    $(".changeAddressCity").autocomplete(
        {
            source: function(request, response) {
                $.ajax({
                    url: '/MiscAjax/GetAutocompleteCity',
                    dataType: "json",
                    data: {
                        term: request.term,
                        country: 'gb',
                        state: ''
                    },
                    success: function(data) {
                        if (!data) {
                            response('');
                        }
                        response($.map(data, function(item) {
                            var itemArr = item.split('|');
                            return {
                                label: itemArr[0] + ', ' + itemArr[1],
                                value: itemArr[0],
                                zip: itemArr[1],
                                state: itemArr[2]
                            }
                        }));
                    }
                });
            },
            select: function(event, ui) {
                if (ui.item) {
                    if ($('.changeAddressZip',changeAddressPopUpRef$).length) $('.changeAddressZip',changeAddressPopUpRef$).val(ui.item.zip);
                    if ($('.changeAddressState',changeAddressPopUpRef$).length) selectStateAutocomplete(ui.item.state);
                }
            },
            minLength: 2
        });

    if ($('.changeAddressCity',changeAddressPopUpRef$).length && $(".changeAddressZip",changeAddressPopUpRef$).length) {
        $(".changeAddressZip",changeAddressPopUpRef$).autocomplete(
                {
                    source: function(request, response) {
                        $.ajax({
                            url: '/MiscAjax/GetAutocompleteZip',
                            dataType: "json",
                            data: {
                                term: request.term,
                                country: 'gb',
                                state: ''
                            },
                            success: function(data) {
                                if (!data) {
                                    response('');
                                }
                                response($.map(data, function(item) {
                                    var itemArr = item.split('|');
                                    return {
                                        label: itemArr[0] + ', ' + itemArr[1],
                                        value: itemArr[0],
                                        city: itemArr[1],
                                        state: itemArr[2]
                                    }
                                }));
                            }
                        });
                    },
                    select: function(event, ui) {
                        if (ui.item) {
                            $('.changeAddressCity',changeAddressPopUpRef$).val(ui.item.city);
                            selectStateAutocomplete(ui.item.state);
                        }
                    },
                    minLength: 2
                });
    }
        
    $('.changeAddressState',changeAddressPopUpRef$).change(function() {            
    $('input[type="text"]',changeAddressPopUpRef$).not('[data-emailAddress],[name*="Email"],[name*="email"]').each(function(){
        $(this).val("");
    });  
    if ($(this).attr('data-havesubprovince') != '1')
            return;
        updateSubprovinceCombo("");
    });

});

function enableSaveAddressBtn(delay) {
    if (delay == undefined) delay=1000;

    setTimeout(function() {
        $("#changeAddressSaveBtn").prop("disabled", false);
    }, delay);
}

function saveAddressChangesIfNeeeded(contextPopup$,otherPopupsCallback) {  
    var this$ = $(this);
    this$.prop("disabled", true);

    var postalCodeExisted = $('.changeAddressZip',contextPopup$).length > 0;
    var stateExisted = $('.changeAddressState',contextPopup$).length > 0;
    var subprovinceExisted = $('.changeAddressSubprovince',contextPopup$).length > 0;

    var dto;            
    var email = $('.changeAddressEmail',contextPopup$).val().trim();
    var address = $('.changeAddressAddress',contextPopup$).length ? $('.changeAddressAddress',contextPopup$).val().trim() : "";
    var address2 = $('.changeAddressAddress2',contextPopup$).length > 0 ? $('.changeAddressAddress2',contextPopup$).val().trim() : "";
    var city = $('.changeAddressCity',contextPopup$).length > 0 ? $('.changeAddressCity',contextPopup$).val().trim() : "";
    var postCode =  postalCodeExisted ? $('.changeAddressZip',contextPopup$).val().trim() : null;
    var state = stateExisted ? $('.changeAddressState option:selected',contextPopup$).val() : null;
    var subProvinceId = subprovinceExisted ? $('.changeAddressSubprovince',contextPopup$).val() : null;
    var currentPassword = $('.changeAddressCurrentPassword',contextPopup$).length > 0 ? $('.changeAddressCurrentPassword',contextPopup$).val().trim() : "";
    var currentEmail = $('.changeAddressEmail',contextPopup$).attr('data-current');

    var emailChanged = (email != currentEmail);

    var validated = changeAddressValidation();

    if (!validated) {
        enableSaveAddressBtn(10);
        return;
    }

    var changeAddressTrigger = $('#changeAddressTrigger',contextPopup$).val();

    if (validated) {
        hideChangeAddressError();

        dto = {
            email: email,
            address: address,
            address2: address2,
            city: city,
            postCode: postCode,
            state: state,
            subProvinceId: subProvinceId,
            currentPassword: currentPassword
        };
        CommonManager.PerformAjaxCall('/User/UpdateUserAddress', dto, function(data) {
            if (data.ValidationResultCode == RegistrationCodes.Available) {
                $('#giftieIsRealPopup div.addressText span').html(data.NewAddress);
                ___UserHasIncompleteAddress = false;
                if (otherPopupsCallback) {
                    otherPopupsCallback();
                    enableSaveAddressBtn(2000);
                } else { // default behavior: for changeAddress popUp
                    // called for Rward page
                    if (typeof(eUpdateDetailsTrigger) != "undefined" && ((changeAddressTrigger == eUpdateDetailsTrigger.RedeemVouchers && emailChanged) || changeAddressTrigger == eUpdateDetailsTrigger.RedeemGifties || changeAddressTrigger == eUpdateDetailsTrigger.RedeemSweepstakes)) {
                        if (emailChanged) isUserEmailVerified = false;
                        $('#updateInfoFinishedEmail').show();
                        CommonManager.ShowUpdateInfoFinishedPopup(emailChanged, true, !ChangeAddressPopupUpdateInfoFinishedPopupSettings.ShowBackButton, email);
                        enableSaveAddressBtn(2000);
                    } else {
                        if (typeof(MyRewardsManager) != "undefined") {
                            //called for Reward page
                            MyRewardsManager.ContinueVouchersRedemption(enableSaveAddressBtn);
                        } else {
                            var testProductPage$ = $(".testAreaContent");
                            if (testProductPage$.length != 0) {
                                // currently called from Test Product Page.
                                $("#addresslabel").text(data.NewAddress);
                                CommonManager.ShowUpdateInfoFinishedPopup(emailChanged, true, !ChangeAddressPopupUpdateInfoFinishedPopupSettings.ShowBackButton, email);
                            }
                            enableSaveAddressBtn(2000);
                        }
                    }
                }
            } else {
                handleChangeAddressError(data);
                enableSaveAddressBtn(1000);
            }
        });
    }

}//--SaveAddressChangesIfNeeeded


function updateSubprovinceCombo(selectedValue) {
    var subprovinceCombo = $(".changeAddressSubprovince",changeAddressPopUpRef$);
    if (subprovinceCombo.length==0)
        return;
    $('.changeAddressSubprovince option',changeAddressPopUpRef$).remove();
    if (selectedValue == "")
        subprovinceCombo.append('<option value="-1" >اختيار</option>');

    var provinceAnswer = $('.changeAddressState',changeAddressPopUpRef$).find('option:selected').val();
    if (provinceAnswer==null || provinceAnswer==''){
        return;
    }
    var cultureId = 77;
    var provinceQuestion = "";
    var dto = { cultureId: cultureId, registrationTag: 2, provinceQuestionId: provinceQuestion, provinceAnswerId: provinceAnswer };
    CommonManager.PerformAjaxCall("/Register/GetSubprovinces", dto, function(data) {
        if (data == null || data.UpdateAnswers == null) return;
        for (var answer in data.UpdateAnswers) {
            if (data.UpdateAnswers.hasOwnProperty(answer)) {
                var answers = data.UpdateAnswers[answer];
                for (var i in answers) {
                    subprovinceCombo.append('<option value="' + answers[i].Id + '" class="subProvinceOption">' + answers[i].TranslatedDisplayName + '</option>');
                }            
            }
        }
    });
}

function selectStateAutocomplete(state) {
    if (state != "") {
        $(".StateSelect option").each(function () {
            if ($(this).val() == state) {
                $(this).attr("selected", "selected");
            }
        });
    }
}

function changeAddressValidation() {
    //$('#changeAddressPopup input, #changeAddressPopup select').removeClass('errorField'); SAMIHEDITE
    $('input, select',changeAddressPopUpRef$).removeClass('errorField');
        
    var zipCodeIsMandatory = true;
    var fieldValue;
    var selectedValue;
        
    // validate email
    if (!changeAddressEmailValidation())
        return false;

    // validate street
    
    fieldValue = $('.changeAddressAddress',changeAddressPopUpRef$).val().trim();
    if (fieldValue == null || fieldValue == '') {
        showChangeAddressError("الرجاء إدخال مجال صالح: Address 1", ".changeAddressAddress");
        return false;
    }
    

// validate city

if ($('.changeAddressCity',changeAddressPopUpRef$).length > 0) {
    fieldValue = $('.changeAddressCity',changeAddressPopUpRef$).val().trim();
    if (fieldValue == null || fieldValue == '') {
        showChangeAddressError("الرجاء إدخال مجال صالح: Town/City", ".changeAddressCity");
        return false;
    }
}


// validate SubProvince

// validate ZIP

if (zipCodeIsMandatory) {
    fieldValue = $('.changeAddressZip',changeAddressPopUpRef$).val().trim();
    if (fieldValue == null || fieldValue == '' || !ValidateZipCodeRegex($('.changeAddressCountry',changeAddressPopUpRef$).val(), fieldValue, '\^\(\[Gg]\[Ii]\[Rr]\\s\{0,1}0\[Aa]\[Aa]\|\[A-PR-UWYZa-pr-uwyz]\(\[0-9]\{1,2}\|\(\[A-HK-Ya-hk-y]\[0-9]\|\[A-HK-Ya-hk-y]\[0-9]\(\[0-9]\|\[ABEHMNPRV-Yabehmnprv-y]\)\)\|\[0-9]\[A-HJKS-UWa-hjks-uw]\)\\s\[0-9]\[ABD-HJLNP-UW-Zabd-hjlnp-uw-z]\{2}\)\$')) {
        showChangeAddressError("الرجاء إدخال مجال صالح: ألرمز ألبريدي", ".changeAddressZip");                
        return false;
    }
}

        
// validate State


// validate current password
  
fieldValue = $('.changeAddressCurrentPassword',changeAddressPopUpRef$).val().trim();
if (fieldValue == null || fieldValue == '') {
    showChangeAddressError(_NG_YourZone_CurrentPasswordEmptyError, ".changeAddressCurrentPassword");                
    return false;
}


return true;
}
    
function handleChangeAddressError(data) {
    switch (data.ValidationResultCode) {
        case 2: // email exists
            showChangeAddressError(_NG_Registration_EmailUnavailable, ".changeAddressEmail");
            break;
        case 16: case 17: // address
            showChangeAddressError(_Registration_Pleaseentervalidaddress, ".changeAddressAddress");
            break;
        case 25: // zip
            showChangeAddressError(_Registration_ValidPostCodeAlert, ".changeAddressZip");
            break;
        case 26:
            if (data.PropertyWithProblem != undefined && data.PropertyWithProblem == "1001042") {
                showChangeAddressError(_Registration_ValidPostCodeAlert, ".changeAddressZip");
            } else {
                showChangeAddressError(_Registration_Pleaseentervalidaddress, ".changeAddressAddress");
            }
            break;
        case 35: // InvalidCurrentPassword
            showChangeAddressError(_NG_YourZone_CurrentPasswordError, ".changeAddressCurrentPassword");
            break;
        case 36: // EmptyCurrentPassword
            showChangeAddressError(_NG_YourZone_CurrentPasswordEmptyError, ".changeAddressCurrentPassword");
            break;
    }
}        

function changeAddressEmailValidation() {
    var email = $('.changeAddressEmail',changeAddressPopUpRef$).val().trim();
    if (email == null || email == '' || !regexUtility.emailRegex.test(email)) {
        showChangeAddressError("الرجاء إدخال مجال صالح: عنوان البريد الالكتروني", ".changeAddressEmail");
    return false;
}
return true;
}
    
function showChangeAddressError(error, fieldId) {
    $('span[data-address-errors]',changeAddressPopUpRef$).html(error);
    $('.tooltiperror',changeAddressPopUpRef$).show();
    $(fieldId,changeAddressPopUpRef$).addClass('errorField');
}

function hideChangeAddressError() {
    $('span[data-address-errors]',changeAddressPopUpRef$).html('');
    $('.tooltiperror',changeAddressPopUpRef$).hide();
    $('input,select',changeAddressPopUpRef$).removeClass('errorField'); 
}

 