﻿function MembershipFeeDynamicContent(submitBtnId, txtInputId, txtResultId, watermarkText, errorText, wsUrl, wsMethod, prefixText, suffixText) {

    var timeOutTime = 200;
    var timeOutInterval = 0;
    var debug = false;
    var resultElement = null;
    this.init = initHandler;
    var btn = null;
    var txtInputElement = null;

    prefixText = prefixText || "";
    suffixText = suffixText || "";


    //----------------------------------------
    //
    // Functions
    //
    //----------------------------------------

    function initHandler() {
        $(document).ready(function () {
            
            btn = submitBtnId ? $('#' + submitBtnId) : null;
            txtInputElement = $('#' + txtInputId);
            
            if (!btn) {

                if (txtInputElement) {
                    txtInputElement.keypress(onTextChangeHandler);
                }
            }
            else {
                btn.live('click', onSubmitHandler);
            }
            
            resultElement = $("#" + txtResultId);
            // Watermark
            if (typeof AddWatermarkToElement != "undefined") {
                AddWatermarkToElement(txtInputId, watermarkText);
                trace("--> Adding watermark text: " + watermarkText + ", to: " + txtInputId);
            }
            
        });
    }

    function onTextChangeHandler() {

        trace("--> onTextChangeHandler");
        clearTimeout(timeOutInterval);
        setTimeout(onSubmitHandler, timeOutTime);
    }

    function onSubmitHandler(event) {
        trace(" was clicked!");
        var salary = $("#" + txtInputId).val();

        // Check numbers only.
        var numberRegExp = /[^0-9]/gi;

        if (salary && salary.length > 0 && !numberRegExp.test(salary)) {
            GetMemeberShipFee(salary);
        }
        else {
            trace(errorText);
            resultElement.addClass('errorText');
            resultElement.text(errorText);
        }
    }

    function trace(msg) {
        if (debug && console && typeof console.log != "undefined") {
            console.log(msg);
        }
    }

    function GetMemeberShipFee(salary) {

        if (wsUrl.charAt(wsUrl.length - 1) == "/") {
            url = wsUrl.substr(0, wsUrl.lastIndexOf("/"));
        }
        trace("--> GetMemberShipFee url: " + url);
        $.ajax({
            url: url + "/" + wsMethod,
            data: "{salary: " + salary + "}",  // For empty input data use "{}",
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            success: SuccessHandler,
            error: ErrorHandler
        });
    }

    //----------------------------------------
    //
    // Ajax callback handlers
    //
    //----------------------------------------

    function SuccessHandler(event) {
        trace("Success! " + event.d);
        if (resultElement.hasClass('errorText')) {
            resultElement.removeClass('errorText');
        }
        var val = Math.round(event.d);
        $('#' + txtResultId).text(prefixText + " " + val + " " + suffixText);
        $('#' + txtResultId).show();
    }

    function ErrorHandler() {
        trace("Error!");
    }

}

