diff --git a/chrome.manifest b/chrome.manifest
new file mode 100644
index 0000000..03b5f23
--- /dev/null
+++ b/chrome.manifest
@@ -0,0 +1,3 @@
+content firerecord chrome/content/
+skin firerecord classic/1.0 chrome/skin/classic/
+overlay chrome://firebug/content/firebugOverlay.xul chrome://firerecord/content/firerecord.xul
diff --git a/chrome/content/firerecord.js b/chrome/content/firerecord.js
new file mode 100644
index 0000000..a3deeb0
--- /dev/null
+++ b/chrome/content/firerecord.js
@@ -0,0 +1,197 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+FBL.ns(function() { with (FBL) {
+// Panel
+var panelName = "firerecord";
+
+/**
+ * @panel This panel integrates with Firebug Inspector API and provides own logic
+ * and display of custom information for links. This code serves as an example of
+ * how to properly use and implement Inspector.
+ */
+function FireRecordPanel() {}
+FireRecordPanel.prototype = extend(Firebug.Panel,
+/** @lends LinkInspectorPanel */
+{
+ name: panelName,
+ title: "Trial by Fire",
+ inspectable: true,
+ inspectHighlightColor: "red",
+
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ // Initialization
+
+ initialize: function()
+ {
+ Firebug.Panel.initialize.apply(this, arguments);
+
+ Firebug.Inspector.addListener(this);
+ },
+
+ destroy: function(state)
+ {
+ Firebug.Panel.destroy.apply(this, arguments);
+
+ Firebug.Inspector.removeListener(this);
+ },
+
+ show: function(state)
+ {
+ Firebug.Panel.show.apply(this, arguments);
+
+ FireRecordPlate.defaultContent.replace({}, this.panelNode);
+ },
+
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ // Inspector API implementation
+
+ startInspecting: function()
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; startInspecting()");
+ },
+
+ inspectNode: function(node)
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; inspectNode(node: " + node.tagName + ")");
+
+ FireRecordPlate.tName.replace({object: node}, this.panelNode);
+ },
+
+ stopInspecting: function(node, canceled)
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; stopInspecting(node: " + node.tagName +
+ ", canceled: " + canceled + ")");
+
+ if (canceled)
+ return;
+
+ if (node.href.indexOf("http") != 0)
+ return;
+
+ FireRecordPlate.linkPreview.replace({object: node}, this.panelNode);
+ },
+
+ supportsObject: function(object, type)
+ {
+ if (object instanceof Element)
+ {
+ if (object.tagName.toLowerCase() == "a"){
+ return 1;
+ }
+ if (object.tagName.toLowerCase() == "button"){
+ return 1;
+ }
+ if (object.tagName.toLowerCase() == "img"){
+ return 1;
+ }
+ if (object.tagName.toLowerCase() == "input"){
+ return 1;
+ }
+ }
+
+ return 0;
+ },
+
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ // Inspector Listener
+
+ onStartInspecting: function(context)
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; Listener.onStartInspecting(context: " +
+ context.getTitle() + ")");
+ },
+
+ onInspectNode: function(context, node)
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; Listener.onInspectNode(context: " +
+ context.getTitle() + ", node: " + node.tagName + ")");
+ },
+
+ onStopInspecting: function(context, node, canceled)
+ {
+ if (FBTrace.DBG_FIRERECORD)
+ FBTrace.sysout("fire_record; Listener.onStopInspecting(context: " +
+ context.getTitle() + ", node: " + node.tagName + ", canceled: " +
+ canceled + ")");
+ }
+});
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+var FireRecordPlate = domplate(
+{
+ tName:
+ DIV({"class": "tName"}, "$object.id" ),
+
+ linkPreview:
+ IFRAME({"class": "linkPreview", "src": "$object.href"}),
+
+ defaultContent:
+ DIV({"class": "defaultContent"},
+ "Use Trial by Fire to record DOM events for later playback."
+ )
+});
+
+// ********************************************************************************************* //
+// Module & Customizing Tracing
+
+/**
+ * @module The module object isn't really neccessary for the Inspector API. It serves
+ * only to support Firebug tracing console, which is useful when debugging inspector
+ * features.
+ */
+Firebug.FireRecordModule = extend(Firebug.Module,
+/** @lends Firebug.FireRecordModule */
+{
+ initialize: function()
+ {
+ Firebug.Module.initialize.apply(this, arguments);
+
+ if (Firebug.TraceModule)
+ Firebug.TraceModule.addListener(this);
+ },
+
+ shutdown: function()
+ {
+ Firebug.Module.shutdown.apply(this, arguments);
+
+ if (Firebug.TraceModule)
+ Firebug.TraceModule.removeListener(this);
+ },
+
+ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+ // Trace Listener
+
+ onLoadConsole: function(win, rootNode)
+ {
+ appendStylesheet(rootNode.ownerDocument, "chrome://firerecord/skin/inspector.css");
+ },
+
+ onDump: function(message)
+ {
+ var index = message.text.indexOf("fire_record;");
+ if (index == 0)
+ {
+ message.text = message.text.substr("fire_record;".length);
+ message.text = trim(message.text);
+ message.type = "DBG_FIRERECORD";
+ }
+ }
+});
+
+
+// Registration
+
+Firebug.registerPanel(FireRecordPanel);
+Firebug.registerModule(Firebug.FireRecordModule);
+Firebug.registerStylesheet("chrome://firerecord/skin/inspector.css");
+
+
+}});
\ No newline at end of file
diff --git a/chrome/content/firerecord.xul b/chrome/content/firerecord.xul
new file mode 100644
index 0000000..065a674
--- /dev/null
+++ b/chrome/content/firerecord.xul
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/chrome/skin/classic/inspector.css b/chrome/skin/classic/inspector.css
new file mode 100644
index 0000000..98399c3
--- /dev/null
+++ b/chrome/skin/classic/inspector.css
@@ -0,0 +1,34 @@
+/* See license.txt for terms of usage */
+
+/*************************************************************************************************/
+
+/* Style applied on the panel node. */
+.panelNode-firerecord {
+ overflow: hidden;
+}
+
+.defaultContent {
+ text-align: center;
+ padding-top: 30px;
+ color: gray;
+}
+
+.linkUrl {
+ text-align: center;
+ padding-top: 30px;
+ color: blue;
+}
+
+.linkPreview {
+ border: none;
+ width: 100%;
+ height: 100%;
+}
+
+/*************************************************************************************************/
+
+/* Firebug Tracing Console customization. All messages from this example use this color.
+ This helps to distinguish logs from those coming from Firebug */
+.DBG_FIRERECORD {
+ color: rgb(0, 101, 114);
+}
diff --git a/defaults/preferences/prefs.js b/defaults/preferences/prefs.js
new file mode 100644
index 0000000..284827a
--- /dev/null
+++ b/defaults/preferences/prefs.js
@@ -0,0 +1 @@
+pref("extensions.firebug.DBG_FIRERECORD", true);
\ No newline at end of file
diff --git a/firerecord@qcc.mass.edu.xpi b/firerecord@qcc.mass.edu.xpi
new file mode 100644
index 0000000..00b20e1
Binary files /dev/null and b/firerecord@qcc.mass.edu.xpi differ
diff --git a/install.rdf b/install.rdf
new file mode 100644
index 0000000..5827573
--- /dev/null
+++ b/install.rdf
@@ -0,0 +1,25 @@
+
+
+
+ firerecord@qcc.mass.edu
+ 0.0.2
+
+
+
+
+ {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+ 1.5
+ 18.*
+
+
+
+
+ Fire Record
+ Firebug Record Extension
+ Csc-207 Quinsigamond Community College
+ http://www.qcc.edu
+
+
+
+