1 (function($, rf) {
  2 
  3     rf.ui = rf.ui || {};
  4     
  5     // Constructor definition
  6     rf.ui.Message = function(componentId, options) {
  7         // call constructor of parent class
  8         $super.constructor.call(this, componentId, options, defaultOptions);
  9         if (this.options.isMessages) {
 10             this.severityClasses = ["rf-msgs-inf", "rf-msgs-wrn", "rf-msgs-err", "rf-msgs-ftl"];
 11             this.summaryClass = "rf-msgs-sum";
 12             this.detailClass = "rf-msgs-det";
 13         } else {
 14             this.severityClasses = ["rf-msg-inf", "rf-msg-wrn", "rf-msg-err", "rf-msg-ftl"];
 15             this.summaryClass = "rf-msg-sum";
 16             this.detailClass = "rf-msg-det";
 17         }
 18     };
 19 
 20     // Extend component class and add protected methods from parent class to our container
 21     rf.ui.Base.extend(rf.ui.Message);
 22 
 23     // define super class link
 24     var $super = rf.ui.Message.$super;
 25 
 26     var defaultOptions = {
 27         showSummary:true,
 28         level:0,
 29         isMessages: false,
 30         globalOnly: false
 31     };
 32 
 33 
 34     var onMessage = function (event, element, data) {
 35         var content = $(rf.getDomElement(this.id));
 36         var sourceId = data.sourceId;
 37         var message = data.message;
 38         if (!this.options.forComponentId) {
 39             if (!message || this.options.globalOnly) {
 40                 // rf.csv.clearMessage
 41                 var element;
 42                 while (element = rf.getDomElement(this.id + ':' + sourceId)) {
 43                     $(element).remove();
 44                 }
 45             } else {
 46                 renderMessage.call(this, sourceId, message);
 47             }
 48         } else if (this.options.forComponentId === sourceId) {
 49             content.empty();
 50             renderMessage.call(this, sourceId, message);
 51         }
 52     }
 53 
 54     var renderMessage = function(index, message) {
 55         if (message && message.severity >= this.options.level) {
 56 
 57             var content = $(rf.getDomElement(this.id));
 58             var msgContent = $("<span/>", {'class':(this.severityClasses)[message.severity],"id":this.id + ':' + index});
 59             if (message.summary) {
 60                 if (this.options.tooltip) {
 61                     msgContent.attr("title", message.summary);
 62                 } else if (this.options.showSummary) {
 63                     msgContent.append($("<span/>", {"class":(this.summaryClass)}).text(message.summary));
 64                 }
 65             }
 66             if (this.options.showDetail && message.detail) {
 67                 msgContent.append($("<span/>", {"class":(this.detailClass)}).text(message.detail));
 68             }
 69             content.append(msgContent);
 70         }
 71     }
 72 
 73     var bindEventHandlers = function () {
 74         rf.Event.bind(window.document, rf.Event.MESSAGE_EVENT_TYPE + this.namespace, onMessage, this);
 75     };
 76 
 77     $.extend(rf.ui.Message.prototype, {
 78             name: "Message",
 79             __bindEventHandlers: bindEventHandlers,
 80             
 81             destroy : function() {
 82                 rf.Event.unbind(window.document, rf.Event.MESSAGE_EVENT_TYPE + this.namespace);
 83                 $super.destroy.call(this);
 84             }
 85         });
 86 
 87 })(RichFaces.jQuery, window.RichFaces || (window.RichFaces = {}));
 88