diff --git a/xul/planner/application.ini b/xul/planner/application.ini
new file mode 100755
index 000000000..7e0f4cc75
--- /dev/null
+++ b/xul/planner/application.ini
@@ -0,0 +1,14 @@
+[App]
+Name=FHC-Planner
+ID=planner@technikum-wien.at
+Version=0.1
+BuildID=20110901
+Vendor=FH Technikum Wien
+Copyright=Copyright (c) 2004-2011 FH TW
+
+[Gecko]
+MinVersion=1.0
+MaxVersion=7.0
+
+[XRE]
+EnableExtensionManager=1
diff --git a/xul/planner/chrome.manifest b/xul/planner/chrome.manifest
new file mode 100755
index 000000000..bb84eb170
--- /dev/null
+++ b/xul/planner/chrome.manifest
@@ -0,0 +1,9 @@
+content planner chrome/content/
+skin planner classic/1.0 chrome/skin/
+overlay chrome://browser/content/browser.xul chrome://planner/content/browser-overlay.xul
+style chrome://browser/content/browser.xul chrome://planner/skin/planner.css
+overlay chrome://navigator/content/navigator.xul chrome://planner/content/browser-overlay.xul
+
+locale planner en-US chrome/locale/en-US/
+locale planner de-AT chrome/locale/de-AT/
+
diff --git a/xul/planner/chrome/content/about.xul b/xul/planner/chrome/content/about.xul
new file mode 100755
index 000000000..708b6b7b4
--- /dev/null
+++ b/xul/planner/chrome/content/about.xul
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/xul/planner/chrome/content/browser-overlay.js b/xul/planner/chrome/content/browser-overlay.js
new file mode 100755
index 000000000..e01b5ee00
--- /dev/null
+++ b/xul/planner/chrome/content/browser-overlay.js
@@ -0,0 +1,21 @@
+var planner = {
+ onLoad: function() {
+ // initialization code
+ this.initialized = true;
+ this.strings = document.getElementById("planner-strings");
+ },
+
+ onMenuItemCommand: function(e) {
+ var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
+ .getService(Components.interfaces.nsIPromptService);
+ promptService.alert(window, this.strings.getString("helloMessageTitle"),
+ this.strings.getString("helloMessage"));
+ },
+
+ onToolbarButtonCommand: function(e) {
+ // just reuse the function above. you can change this, obviously!
+ planner.onMenuItemCommand(e);
+ }
+};
+
+window.addEventListener("load", planner.onLoad, false);
diff --git a/xul/planner/chrome/content/browser-overlay.xul b/xul/planner/chrome/content/browser-overlay.xul
new file mode 100755
index 000000000..37998d7da
--- /dev/null
+++ b/xul/planner/chrome/content/browser-overlay.xul
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xul/planner/chrome/content/controller.js b/xul/planner/chrome/content/controller.js
new file mode 100755
index 000000000..5bc892b14
--- /dev/null
+++ b/xul/planner/chrome/content/controller.js
@@ -0,0 +1,293 @@
+
+var FileController = {
+ _app : null,
+
+ init : function(aApp) {
+ this._app = aApp;
+ },
+
+ supportsCommand : function(cmd) {
+ var isSupported = false;
+ switch (cmd) {
+ case "cmd_pageSetup":
+ case "cmd_print":
+ case "cmd_exit":
+ isSupported = true;
+ break;
+ default:
+ isSupported = false;
+ break;
+ }
+ return isSupported;
+ },
+
+ isCommandEnabled : function(cmd) {
+ return true;
+ },
+
+ doCommand : function(cmd) {
+ switch (cmd) {
+ case "cmd_pageSetup":
+ {
+ PrintUtils.showPageSetup();
+ break;
+ }
+ case "cmd_print":
+ {
+ PrintUtils.print();
+ break;
+ }
+ case "cmd_exit":
+ {
+ if (this._app.shutdownQuery() == false) {
+ return;
+ }
+
+ var aForceQuit = false;
+ var appStartup = Components.classes['@mozilla.org/toolkit/app-startup;1'].getService(Components.interfaces.nsIAppStartup);
+
+ // eAttemptQuit will try to close each XUL window, but the XUL window can cancel the quit
+ // process if there is unsaved data. eForceQuit will quit no matter what.
+ var quitSeverity = aForceQuit ? Components.interfaces.nsIAppStartup.eForceQuit : Components.interfaces.nsIAppStartup.eAttemptQuit;
+ appStartup.quit(quitSeverity);
+
+ break;
+ }
+ }
+ }
+};
+
+
+
+
+
+var ToolsController = {
+ _app : null,
+
+ init : function(aApp) {
+ this._app = aApp;
+ },
+
+ supportsCommand : function(cmd) {
+ var isSupported = false;
+ switch (cmd) {
+ case "cmd_options":
+ isSupported = true;
+ break;
+ default:
+ isSupported = false;
+ break;
+ }
+ return isSupported;
+ },
+
+ isCommandEnabled : function(cmd) {
+ return true;
+ },
+
+ doCommand : function(cmd) {
+ switch (cmd) {
+ case "cmd_options":
+ {
+ window.openDialog("chrome://planner/content/options.xul", "options", "centerscreen,modal");
+ break;
+ }
+ }
+ }
+};
+
+
+var HelpController = {
+ _app : null,
+
+ init : function(aApp) {
+ this._app = aApp;
+ },
+
+ supportsCommand : function(cmd) {
+ var isSupported = false;
+ switch (cmd) {
+ case "cmd_about":
+ isSupported = true;
+ break;
+ default:
+ isSupported = false;
+ break;
+ }
+ return isSupported;
+ },
+
+ isCommandEnabled : function(cmd) {
+ return true;
+ },
+
+ doCommand : function(cmd) {
+ switch (cmd) {
+ case "cmd_about":
+ {
+ window.openDialog("chrome://planner/content/about.xul", "about", "centerscreen,modal");
+ break;
+ }
+ }
+ }
+};
+
+/**
+ * Command Updater
+ */
+var CommandUpdater = {
+ /**
+ * Gets a controller that can handle a particular command.
+ * @param command
+ * A command to locate a controller for, preferring controllers that
+ * show the command as enabled.
+ * @returns In this order of precedence:
+ * - the first controller supporting the specified command
+ * associated with the focused element that advertises the
+ * command as ENABLED
+ * - the first controller supporting the specified command
+ * associated with the global window that advertises the
+ * command as ENABLED
+ * - the first controller supporting the specified command
+ * associated with the focused element
+ * - the first controller supporting the specified command
+ * associated with the global window
+ */
+ _getControllerForCommand: function(command) {
+ try {
+ var controller = top.document.commandDispatcher.getControllerForCommand(command);
+ if (controller && controller.isCommandEnabled(command))
+ return controller;
+ }
+ catch(e) {
+ }
+ var controllerCount = window.controllers.getControllerCount();
+ for (var i = 0; i < controllerCount; ++i) {
+ var current = window.controllers.getControllerAt(i);
+ try {
+ if (current.supportsCommand(command) && current.isCommandEnabled(command))
+ return current;
+ }
+ catch (e) {
+ }
+ }
+ return controller || window.controllers.getControllerForCommand(command);
+ },
+
+ /**
+ * Updates the state of a XUL element for the specified command
+ * depending on its state.
+ * @param command
+ * The name of the command to update the XUL element for
+ */
+ updateCommand: function(command) {
+ var enabled = false;
+ try {
+ var controller = this._getControllerForCommand(command);
+ if (controller) {
+ enabled = controller.isCommandEnabled(command);
+ }
+ }
+ catch(ex) { }
+
+ this.enableCommand(command, enabled);
+ },
+
+ /**
+ * Updates the state of a XUL element for the specified command
+ * depending on its state.
+ * @param command
+ * The name of the command to update the XUL element for
+ */
+ updateCommands: function(_commands) {
+ var commands = _commands.split(",");
+ for (var command in commands) {
+ this.updateCommand(commands[command]);
+ }
+ },
+
+ /**
+ * Enables or disables a XUL element.
+ * @param command
+ * The name of the command to enable or disable
+ * @param enabled
+ * true if the command should be enabled, false otherwise.
+ */
+ enableCommand: function(command, enabled) {
+ var element = document.getElementById(command);
+ if (!element)
+ return;
+ if (enabled)
+ element.removeAttribute("disabled");
+ else
+ element.setAttribute("disabled", "true");
+ },
+
+ /**
+ * Performs the action associated with a specified command using the most
+ * relevant controller.
+ * @param command
+ * The command to perform.
+ */
+ doCommand: function(command) {
+ var controller = this._getControllerForCommand(command);
+ if (!controller)
+ return;
+ controller.doCommand(command);
+ },
+
+ /**
+ * Changes the label attribute for the specified command.
+ * @param command
+ * The command to update.
+ * @param labelAttribute
+ * The label value to use.
+ */
+ setMenuValue: function(command, labelAttribute) {
+ var commandNode = top.document.getElementById(command);
+ if (commandNode)
+ {
+ var label = commandNode.getAttribute(labelAttribute);
+ if ( label )
+ commandNode.setAttribute('label', label);
+ }
+ },
+
+ /**
+ * Changes the accesskey attribute for the specified command.
+ * @param command
+ * The command to update.
+ * @param valueAttribute
+ * The value attribute to use.
+ */
+ setAccessKey: function(command, valueAttribute) {
+ var commandNode = top.document.getElementById(command);
+ if (commandNode)
+ {
+ var value = commandNode.getAttribute(valueAttribute);
+ if ( value )
+ commandNode.setAttribute('accesskey', value);
+ }
+ },
+
+ /**
+ * Inform all the controllers attached to a node that an event has occurred
+ * (e.g. the tree controllers need to be informed of blur events so that they can change some of the
+ * menu items back to their default values)
+ * @param node
+ * The node receiving the event
+ * @param event
+ * The event.
+ */
+ onEvent: function(node, event) {
+ var numControllers = node.controllers.getControllerCount();
+ var controller;
+
+ for ( var controllerIndex = 0; controllerIndex < numControllers; controllerIndex++ )
+ {
+ controller = node.controllers.getControllerAt(controllerIndex);
+ if ( controller )
+ controller.onEvent(event);
+ }
+ }
+};
diff --git a/xul/planner/chrome/content/options.xul b/xul/planner/chrome/content/options.xul
new file mode 100755
index 000000000..d04657f04
--- /dev/null
+++ b/xul/planner/chrome/content/options.xul
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xul/planner/chrome/content/planner.xul b/xul/planner/chrome/content/planner.xul
new file mode 100755
index 000000000..4db1f0729
--- /dev/null
+++ b/xul/planner/chrome/content/planner.xul
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/xul/planner/chrome/skin/planner.css b/xul/planner/chrome/skin/planner.css
new file mode 100755
index 000000000..1b96b4355
--- /dev/null
+++ b/xul/planner/chrome/skin/planner.css
@@ -0,0 +1,66 @@
+treechildren::-moz-tree-cell(makeItGreen)
+{
+ background-color: #88FF88;
+}
+treechildren::-moz-tree-cell(makeItRed)
+{
+ background-color: #FFAAAA;
+}
+treechildren::-moz-tree-cell(makeItBlue)
+{
+ background-color: #9999FF;
+}
+treechildren::-moz-tree-cell(makeItYellow)
+{
+ background-color: #FFFF99;
+}
+
+#motorsport-manager-toolbar-button {
+ list-style-image: URL("chrome://motorsportmanager/skin/toolbar-large.png");
+}
+
+#motorsport-manager-status-bar-icon {
+ width: 83px;
+ margin: 0 5px;
+}
+
+.motorsport-manager-selected {
+ outline: 2px solid red !important;
+}
+
+
+label.gesenkt
+{
+ border-style:solid;
+ border-width:1px;
+ background-color:#33FF33;
+ text-align:center;
+}
+label.normal
+{
+ border-style:solid;
+ border-width:1px;
+ background-color:#FFFF33;
+ text-align:center;
+}
+label.erhoeht
+{
+ border-style:solid;
+ border-width:1px;
+ background-color:#FF3333;
+ text-align:center;
+}
+textbox
+{
+ max-height:1.6em;
+}
+button
+{
+ max-height:1.8em;
+}
+grid
+{
+ margin:0px;
+ padding:0px;
+ border:0px;
+}
diff --git a/xul/planner/chrome/skin/planner.png b/xul/planner/chrome/skin/planner.png
new file mode 100755
index 000000000..e69de29bb
diff --git a/xul/planner/defaults/preferences/prefs.js b/xul/planner/defaults/preferences/prefs.js
new file mode 100755
index 000000000..94f5c64de
--- /dev/null
+++ b/xul/planner/defaults/preferences/prefs.js
@@ -0,0 +1,36 @@
+// pref("toolkit.defaultChromeURI", "https://user:pass@vilesci.technikum-wien.at/content/planner.xul.php");
+// Entry Point for Extension
+pref("toolkit.defaultChromeURI", "chrome://planner/content/browser-overlay.xul");
+// Entry Point for Browser
+// pref("browser.chromeURL", "chrome://planner/content/planner.xul")
+
+/* debugging prefs */
+pref("browser.dom.window.dump.enabled", true);
+pref("javascript.options.showInConsole", true);
+pref("javascript.options.strict", true);
+pref("nglayout.debug.disable_xul_cache", true);
+pref("nglayout.debug.disable_xul_fastload", true);
+
+/* added to allow to work */
+pref("network.protocol-handler.expose.http", false);
+pref("network.protocol-handler.warn-external.http", false);
+
+/* Remote XUL */
+user_pref("signed.applets.codebase_principal_support", true);
+
+user_pref("capability.principal.codebase.p0.granted", "UniversalXPConnect");
+user_pref("capability.principal.codebase.p0.id", "http://fhcomplete.technikum-wien.at");
+user_pref("capability.principal.codebase.p0.subjectName", "");
+user_pref("capability.principal.codebase.p1.granted", "UniversalXPConnect");
+user_pref("capability.principal.codebase.p1.id", "http://calva.technikum-wien.at");
+user_pref("capability.principal.codebase.p1.subjectName", "");
+user_pref("capability.principal.codebase.p2.granted", "UniversalXPConnect");
+user_pref("capability.principal.codebase.p2.id", "https://vilesci.technikum-wien.at");
+user_pref("capability.principal.codebase.p2.subjectName", "");
+user_pref("capability.principal.codebase.p3.granted", "UniversalXPConnect");
+user_pref("capability.principal.codebase.p3.id", "http://dev.technikum-wien.at");
+user_pref("capability.principal.codebase.p3.subjectName", "");
+user_pref("capability.principal.codebase.p3.granted", "UniversalXPConnect");
+user_pref("capability.principal.codebase.p3.id", "http://localhost");
+user_pref("capability.principal.codebase.p3.subjectName", "");
+
diff --git a/xul/planner/install.rdf b/xul/planner/install.rdf
new file mode 100755
index 000000000..1ebc6db99
--- /dev/null
+++ b/xul/planner/install.rdf
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+ {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+ 2.0
+ 6.2
+
+
+ {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+ 2.0b1
+ 2.2.*
+
+
+
+