﻿(function ($) {

    $.fn.microTemplateTarget = function (options) {

        // Options + defaults
        var defaults = {}; // defaults are defined on the server in microTemplateTarget.ascx.vb
        var config = $.extend(defaults, options);
        this.each(function () {

            var self = this;
            var $self = $(this);
            var $template = $('#' + config.templateID);

            $self
                .bind("dataBind", dataBind)
                .bind("dataBound", dataBound)

            var t = setTimeout(function () {
                $self.trigger("dataBind");
            }, 1000);

            function dataBind(e, data) {
                if (data == -1) {
                    // Clear results
                    $self.html('');
                } else if (data) {
                    // e.g. data passed in from a FacetSearch object
                    performDataBind(data);
                } else if (config.objectName && config.objectName.length > 0) {
                    // Look up database data with ajax
                    $.ajax({
                        url: $r.cleanHref(window.location),
                        type: "POST",
                        data: {
                            microTemplateTargetId: self.id,
                            sessionID: config.sessionId,
                            authID: config.authId,
                            action: "select"
                        },
                        success: function (msg) {
                            var data = eval(msg);
                            performDataBind(data);
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $r.showError(XMLHttpRequest, errorThrown + ' ' + textStatus);
                            $r.hideProgress();
                        }
                    });
                } else {
                    // No data - clear results
                    $self.html('');
                }
                e.stopPropagation();
            } // dataBind


            function performDataBind(data) {
                var boundHtml = parseTemplate($template.html(), { d: data }); // Bind using MicroTemplate
                $self.html(boundHtml);
                $self.enableBehavior();
                $self.trigger("dataBound", [data]);
                $r.hideProgress();
                $r.enableWatermarks();
            }

            function dataBound(e, data) {
                e.stopPropagation();
            }

        }); // each

    }; // $.fn.microTemplateTarget 

})(jQuery);


