var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/// <reference path="IRenderer.ts" />
/// <reference path="../../../util/DomHelper.ts" />
/// <reference path="../../../base/BaseClass.ts" />
/// <reference path="../../Widget.ts" />
/// <reference path="../../response/Response.ts" />
var econda;
(function (econda) {
    var recengine;
    (function (recengine) {
        var widget;
        (function (widget_1) {
            var renderer;
            (function (renderer) {
                /**
                 * Class to render widgets using websale template system
                 * @class econda.recengine.widget.renderer.WebsaleRenderer
                 * @extends econda.base.BaseClass
                 */
                var WebsaleRenderer = (function (_super) {
                    __extends(WebsaleRenderer, _super);
                    function WebsaleRenderer(cfg) {
                        if (cfg === void 0) { cfg = null; }
                        _super.call(this);
                        /**
                         * Widget instance containing response data and target element information
                         * @private
                         * @accessor
                         */
                        this.widget = null;
                        /**
                         * File name of template on websale server
                         * @cfg {string} [template=econda.htm]
                         * @accessor
                         */
                        this.template = "econda.htm";
                        /**
                         * Callback Function to render template
                         * @cfg {Function} [callback=null]
                         * @accessor
                         */
                        this.callback = null;
                        if (cfg instanceof WebsaleRenderer) {
                            return cfg;
                        }
                        this.initConfig(cfg);
                    }
                    WebsaleRenderer.prototype.getWidget = function () {
                        return this.widget;
                    };
                    WebsaleRenderer.prototype.setWidget = function (widget) {
                        this.widget = widget;
                    };
                    WebsaleRenderer.prototype.getTemplate = function () {
                        return this.template;
                    };
                    WebsaleRenderer.prototype.setTemplate = function (name) {
                        this.template = name;
                        return this;
                    };
                    WebsaleRenderer.prototype.getCallback = function () {
                        return this.callback;
                    };
                    WebsaleRenderer.prototype.setCallback = function (func) {
                        this.callback = func;
                        return this;
                    };
                    /**
                     * Websale creates a callback outside of this sdk that will use one of their templates to render
                     * this result.
                     * @param {econda.recengine.response.Response} result
                     * @returns {boolean} Must return false to tell the Widget class, that the result is already rendered
                     */
                    WebsaleRenderer.prototype.render = function (result, success) {
                        // provide target element
                        var targetElement = econda.util.DomHelper.element(this.getWidget().getElement());
                        var templateName = this.getTemplate();
                        var callbackFnc = this.getCallback();
                        // targetElement => reference to dom node
                        // result => result data as object s. http://downloads.econda.org/support/releases/js-sdk/0.3.1/docs/api/#!/api/econda.recengine.Response
                        // templateName => string with tempalte name, defaults to "econda.htm"
                        //econda_websale_callback(targetElement, result, templateName);
                        if (callbackFnc != null) {
                            callbackFnc(targetElement, result, templateName);
                        }
                        success(false); // false = do not update target element with result
                    };
                    return WebsaleRenderer;
                }(econda.base.BaseClass));
                renderer.WebsaleRenderer = WebsaleRenderer; // end of class
            })(renderer = widget_1.renderer || (widget_1.renderer = {}));
        })(widget = recengine.widget || (recengine.widget = {}));
    })(recengine = econda.recengine || (econda.recengine = {}));
})(econda || (econda = {})); // end of module