1 if (typeof jsf != 'undefined') {
  2 	(function(jQuery, richfaces, jsf) {
  3 	
  4 		//JSF log adapter
  5 		var identifyElement = function(elt) {
  6 			var identifier = '<' + elt.tagName.toLowerCase();
  7 			var e = jQuery(elt);
  8 			if (e.attr('id')) {
  9 				identifier += (' id=' + e.attr('id'));
 10 			}
 11 			if (e.attr('class')) {
 12 				identifier += (' class=' + e.attr('class'));
 13 			}
 14 	
 15 			identifier += ' ...>';
 16 	
 17 			return identifier;
 18 		}
 19 	
 20 		var formatPartialResponseElement = function(logElement, responseElement) {
 21 			var change = jQuery(responseElement);
 22 	
 23 			logElement.append("Element <b>" + responseElement.nodeName + "</b>");
 24 			if (change.attr("id")) {
 25 				logElement.append(document.createTextNode(" for id=" + change.attr("id")));
 26 			}
 27 	
 28 			jQuery(document.createElement("br")).appendTo(logElement);
 29 			jQuery("<span style='color:dimgray'></span>").appendTo(logElement).text(change.toXML());
 30 			jQuery(document.createElement("br")).appendTo(logElement);
 31 		}
 32 	
 33 		var formatPartialResponse = function(partialResponse) {
 34 			var logElement = jQuery(document.createElement("span"));
 35 			
 36 			partialResponse.children().each(function() {
 37 				var responseElement = jQuery(this);
 38 				if (responseElement.is('changes')) {
 39 					logElement.append("Listing content of response <b>changes</b> element:<br />");
 40 					responseElement.children().each(function() {
 41 						formatPartialResponseElement(logElement, this);
 42 					});
 43 				} else {
 44 					formatPartialResponseElement(logElement, this);
 45 				}
 46 			});
 47 	
 48 			return logElement;
 49 		}
 50 	
 51 		var jsfAjaxLogAdapter = function(data) {
 52 			try {
 53 				var log = richfaces.log;
 54 	
 55 				var source = data.source;
 56 				var type = data.type;
 57 				
 58 				var responseCode = data.responseCode;
 59 				var responseXML = data.responseXML;
 60 				var responseText = data.responseText;
 61 	
 62 				if (type != 'error') {
 63 					log.info("Received '" + type + "' event from " + identifyElement(source));
 64 	
 65 					if (type == 'beforedomupdate') {
 66 						var partialResponse;
 67 	
 68 						if (responseXML) {
 69 							partialResponse = jQuery(responseXML).children("partial-response");
 70 						}
 71 	
 72 						var responseTextEntry = jQuery("<span>Server returned responseText: </span><span style='color:dimgray'></span>").eq(1).text(responseText).end();
 73 						
 74 						if (partialResponse && partialResponse.length) {
 75 							log.debug(responseTextEntry);
 76 							log.info(formatPartialResponse(partialResponse));
 77 						} else {
 78 							log.info(responseTextEntry);
 79 						}
 80 					}
 81 				} else {
 82 					var status = data.status;
 83 					log.error("Received '" + type + '@' + status + "' event from " + identifyElement(source));
 84 					log.error("[" + data.responseCode + "] " + data.errorName + ": " + data.errorMessage);
 85 				}
 86 			} catch (e) {
 87 				//ignore logging errors
 88 			}
 89 		};
 90 		
 91 		var eventsListener = richfaces.createJSFEventsAdapter({
 92 			begin: jsfAjaxLogAdapter,
 93 			beforedomupdate: jsfAjaxLogAdapter,
 94 			success: jsfAjaxLogAdapter,
 95 			complete: jsfAjaxLogAdapter,
 96 			error: jsfAjaxLogAdapter
 97 		});
 98 	
 99 		jsf.ajax.addOnEvent(eventsListener);
100 		jsf.ajax.addOnError(eventsListener);
101 		//
102 	}(jQuery, RichFaces, jsf));
103 };