diff --git a/Docs/gui/radio.css b/Docs/gui/radio.css
new file mode 100644
index 000000000..967d24b52
--- /dev/null
+++ b/Docs/gui/radio.css
@@ -0,0 +1,30 @@
+body {
+ background-color: #c0c0c0;
+}
+
+#header {
+ background-color: #303030;
+ color: #e0e0e0;
+}
+
+#header h3 {
+ padding-left: 0.3em;
+ border-bottom: 1px solid #808080;
+}
+
+input.frq {
+ background-color: #202020;
+ color: red;
+ font-family: Monospace;
+ font-weight: bold;
+ padding: 0.2em;
+}
+
+table#frequencies {
+ border: 4px groove;
+ background-color: #404040;
+}
+
+table#frequencies tr td {
+ padding: 0.2em;
+}
diff --git a/Docs/gui/radio.html b/Docs/gui/radio.html
new file mode 100644
index 000000000..0e593d5fa
--- /dev/null
+++ b/Docs/gui/radio.html
@@ -0,0 +1,86 @@
+
+
+
+ FlightGear - Radio Settings
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Docs/gui/radio.js b/Docs/gui/radio.js
new file mode 100644
index 000000000..a7a2a9e22
--- /dev/null
+++ b/Docs/gui/radio.js
@@ -0,0 +1,108 @@
+var props =
+{
+ load : function( path, callback, base ) {
+ if( typeof(base) == 'undefined' ) base = "/json/";
+ var reply;
+ $.getJSON( base + path, function( data ) {
+ callback( props.makeNode( data ) );
+ });
+ },
+
+ save : function( node, url ) {
+ alert( "can't save yet :-(" );
+ },
+
+ makeNode: function( node ) {
+ if( typeof(node) == 'undefined' ) return node;
+ node.getNode = function( name ) {
+ var reply;
+ $.each( node.children, function( key, child ) {
+ if( child.name == name ) {
+ reply = child;
+ }
+ });
+ return reply;
+ }
+ return node;
+ }
+}
+
+var reloadProperties = function() {
+ props.load( "instrumentation/comm/frequencies", function(props) {
+ $("#com1u").val( props.getNode("selected-mhz-fmt").value );
+ $("#com1s").val( props.getNode("standby-mhz-fmt").value );
+ });
+
+ props.load( "instrumentation/comm[1]/frequencies", function(props) {
+ $("#com2u").val( props.getNode("selected-mhz-fmt").value );
+ $("#com2s").val( props.getNode("standby-mhz-fmt").value );
+ });
+
+ props.load( "instrumentation/nav/frequencies", function(props) {
+ $("#nav1u").val( props.getNode("selected-mhz-fmt").value );
+ $("#nav1s").val( props.getNode("standby-mhz-fmt").value );
+ });
+
+ props.load( "instrumentation/nav/radials", function(props) {
+ $("#nav1rad").val( props.getNode("selected-deg").value );
+ });
+
+ props.load( "instrumentation/nav[1]/frequencies", function(props) {
+ $("#nav2u").val( props.getNode("selected-mhz-fmt").value );
+ $("#nav2s").val( props.getNode("standby-mhz-fmt").value );
+ });
+
+ props.load( "instrumentation/nav[1]/radials", function(props) {
+ $("#nav2rad").val( props.getNode("selected-deg").value );
+ });
+
+ props.load( "instrumentation/adf/frequencies", function(props) {
+ $("#adf1u").val( props.getNode("selected-khz").value );
+ $("#adf1s").val( props.getNode("standby-khz").value );
+ });
+
+ props.load( "instrumentation/adf", function(props) {
+ $("#adf1rad").val( props.getNode("rotation-deg").value );
+ });
+
+ props.load( "instrumentation/dme/frequencies", function(props) {
+ $("#dme1u").val( props.getNode("selected-mhz").value );
+ });
+
+}
+
+$( document ).ready(function() {
+
+ $("#com1swap").click( function() {
+ var v = $("#com1u").val();
+ $("#com1u").val( $("#com1s").val() );
+ $("#com1s").val(v);
+ });
+
+ $("#com2swap").click( function() {
+ var v = $("#com2u").val();
+ $("#com2u").val( $("#com2s").val() );
+ $("#com2s").val(v);
+ });
+
+ $("#nav1swap").click( function() {
+ var v = $("#nav1u").val();
+ $("#nav1u").val( $("#nav1s").val() );
+ $("#nav1s").val(v);
+ });
+
+ $("#nav2swap").click( function() {
+ var v = $("#nav2u").val();
+ $("#nav2u").val( $("#nav2s").val() );
+ $("#nav2s").val(v);
+ });
+
+ $("#adf1swap").click( function() {
+ var v = $("#adf1u").val();
+ $("#adf1u").val( $("#adf1s").val() );
+ $("#adf1s").val(v);
+ });
+ reloadProperties();
+ window.setInterval(reloadProperties, 5000 );
+});
+
\ No newline at end of file