CCC.namespace("rf");

CCC.rf = function() {
  var towerDataLocation     = '/gradd/towers.json';
  var locationDataLocation  = '/gradd/locations.json';
  var xmlHandler            = '/gradd/xml-handler.cgi';
  var towerData             = null;
  var locationData          = null;
  var mapId                 = 'map';
  var projection            = null;
  var gMap                  = null;
  var ccc                   = CCC.util;
  var yu                    = YAHOO.util;
  var yw                    = YAHOO.widget;
  var tab                   = null;
  var icons                 = {};
  var status                = {
    'green'  : {
      label : 'Connected: worked great',
      color : 0x04ff00
    },
    'blue'   : {
      label : 'Connected: limited speeds',
      color : 0x0044ff
    },
    'yellow' : {
      label : 'Connected: unstable',
      color : 0xffdc00
    },
    'orange' : {
      label : 'Unccessful: can try a different tower',
      color : 0xff9200
    },
    'purple' : {
      label : 'Passed field test',
      color : 0x9700ff
    },
    'red'    : {
      label : 'Failed',
      color : 0xff0000
    }
  };
  var radii                 = {
    10 : {
      color : '#FF0000'
    },
    6  : {
      color : '#0000FF'
    },
    3  : {
      color : '#24a524'
    }
  };

  function init() {
    var el, base_icon, dialog;
    if (GBrowserIsCompatible()) {
      projection = G_NORMAL_MAP.getProjection();
      el = yu.Dom.get(mapId);
      gMap = new GMap2(el);

      gMap.addMapType(G_PHYSICAL_MAP);
      gMap.setCenter(new GLatLng(37.65778,-87.37361),9);
      gMap.addControl(new GScaleControl());
      //gMap.addControl(new GMapTypeControl());

      var el1 = document.createElement('div');
      el1.className = 'hideshow';
      el1.setAttribute('onclick',"CCC.rf.hideTowerBoundaries()");
      // For IE
      el1.onclick = CCC.rf.hideTowerBoundaries;
      el1.innerHTML = "Hide";
      el1.style.top = '501px';
      el1.style.left = '335px';
      el.appendChild(el1);
      el1 = document.createElement('div');
      el1.className = 'hideshow';
      el1.setAttribute('onclick',"CCC.rf.showTowerBoundaries()");
      // For IE
      el1.onclick = CCC.rf.showTowerBoundaries;
      el1.innerHTML = "Show";
      el1.style.top = '501px';
      el1.style.left = '395px';
      el.appendChild(el1);

      var mc = new GHierarchicalMapTypeControl();
      mc.clearRelationships();
      mc.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", true);

      gMap.addControl(mc);
      gMap.addControl(new GLargeMapControl());

      gMap.setMapType(G_PHYSICAL_MAP);

      //gMap.addControl(new GOverviewMapControl());

      gMap.enableDoubleClickZoom();

      base_icon = new GIcon(G_DEFAULT_ICON);
      base_icon.shadow = "images/marker-shadow.png";
      base_icon.image = "images/red-marker.png";
      base_icon.iconSize = new GSize(20,34);
      base_icon.shadowSize = new GSize(37,34);
      base_icon.iconAnchor = new GPoint(9,33);

      base_icon.infoWindowAnchor = new GPoint(15,8);

      icons.redMarker = new GIcon(base_icon);

      icons.blueMarker = new GIcon(base_icon);
      icons.blueMarker.image = "images/blue-marker.png";

      icons.greenMarker = new GIcon(base_icon);
      icons.greenMarker.image = "images/green-marker.png";

      base_icon = new GIcon(G_DEFAULT_ICON);
      base_icon.shadow = "images/shadow-dot.png";
      base_icon.image = "images/red-dot.png";
      base_icon.iconSize = new GSize(11,11);
      base_icon.shadowSize = new GSize(17,11);
      base_icon.iconAnchor = new GPoint(5,5);
      base_icon.infoWindowAnchor = new GPoint(5,5);

      icons.redDot = new GIcon(base_icon);

      icons.blueDot = new GIcon(base_icon);
      icons.blueDot.image = "images/blue-dot.png";

      icons.greenDot = new GIcon(base_icon);
      icons.greenDot.image = "images/green-dot.png";

      icons.yellowDot = new GIcon(base_icon);
      icons.yellowDot.image = "images/yellow-dot.png";

      icons.orangeDot = new GIcon(base_icon);
      icons.orangeDot.image = "images/orange-dot.png";

      icons.purpleDot = new GIcon(base_icon);
      icons.purpleDot.image = "images/purple-dot.png";

      // Small
      //base_icon = new GIcon(G_DEFAULT_ICON);
      //base_icon.shadow = "images/towers.png";
      //base_icon.image = "images/tower.png";
      //base_icon.iconSize = new GSize(9,9);
      //base_icon.shadowSize = new GSize(14,9);
      //base_icon.iconAnchor = new GPoint(4,4);
      //base_icon.infoWindowAnchor = new GPoint(5,4);

      base_icon = new GIcon(G_DEFAULT_ICON);
      base_icon.shadow = "images/towers.png";
      base_icon.image = "images/tower.png";
      base_icon.iconSize = new GSize(11,11);
      base_icon.shadowSize = new GSize(17,11);
      base_icon.iconAnchor = new GPoint(5,5);
      base_icon.infoWindowAnchor = new GPoint(5,5);

      icons.tower = new GIcon(base_icon);

    } else {
      dialog = ccc.html.create_simple_dialog_panel({
        body   : "Your browser appears to be incompatible with this "+
                 "application.",
        icon   : yw.SimpleDialog.ICON_WARN
      });
    }
  }

  function findTowerFromPoint(p) {
    for (var i in towerData.towers) {
      if (towerData.towers[i].point == p) {
        return towerData.towers[i];
      }
    }
  }

  function displayTab() {
    yu.Dom.get('tab').style.visibility = 'visible';
    /*
    var s = yu.Dom.get('fc_name');
    if (s && s.value.length <= 0) {
      s.focus();
    } else if (s) {
      s.select();
    }
    */
  }

  function setMarkerZIndex(m,b) {
    return GOverlay.getZIndex(m.getPoint().lat()) + m.importance * 1000000;
  }

  function centerMap(point) {
    gMap.panTo(point);
  }

  function createMarker(point, text, params) {
    params            = params || {};
    params.icon       = params.icon || icons.blueMarker;
    params.importance = params.importance || 1;
    params.tower      = params.tower || 'undefined';

    var marker = new GMarker(point,{
      icon : params.icon,
      title : params.name,
      zIndexProcess : setMarkerZIndex
    });

    marker.importance = params.importance;

    gMap.addOverlay(marker);

    GEvent.addListener(marker,"click",function () {
      marker.openInfoWindowHtml(text);
      centerMap(point);
    });

    return marker;
  }

  function deleteMarker(marker) {
    GEvent.clearListeners(marker,'click');
    gMap.removeOverlay(marker);
  }


  function getPointFromMiles(p,d) {
    var R       = 3958.75587; 
    var bearing = 0 * Math.PI / 180;
    var lat1    = p.latRadians();
    var lng1    = p.lngRadians();

    var lat2 = Math.asin(
      Math.sin(lat1) * Math.cos(d/R) +
      Math.cos(lat1) * Math.sin(d/R) *
      Math.cos(bearing)
    );

    if (isNaN(lat2)) {
      return null;
    }

    var lng2 = lng1 + Math.atan2(
      Math.sin(bearing) * Math.sin(d/R) * Math.cos(lat1),
      Math.cos(d/R) - Math.sin(lat1) * Math.sin(lat2)
    );

    if (isNaN(lng2)) {
      return null;
    }

    return(new GLatLng(((lat2 * 180) / Math.PI), ((lng2 * 180) / Math.PI)));
  }

  function getRadiusPoints(tower, distance) {
    var zoom        = gMap.getZoom();
    var centerPoint = projection.fromLatLngToPixel(tower.point, zoom);
    var radiusPoint = projection.fromLatLngToPixel(distance, zoom);
    var pts         = [];

    var radius = Math.floor(Math.sqrt(
      Math.pow((centerPoint.x - radiusPoint.x), 2) +
      Math.pow((centerPoint.y - radiusPoint.y), 2)
    ));

    var rad, y, x, p;
    for (var i=0; i <= 360; i += 30) {
      rad = i * (Math.PI / 180);
      y = centerPoint.y + radius * Math.sin(rad);
      x = centerPoint.x + radius * Math.cos(rad);
      p = new GPoint(x,y);
      pts.push(projection.fromPixelToLatLng(p, zoom));
    }

    return(pts);
  }

  function drawCircle(tower, distance, color) {
    var points = getRadiusPoints(tower, distance);
    //var polyline = new GPolyline(points, color, 1, .25);
    var polygon = new GPolygon(points, color, 1, .25);

    //gMap.addOverlay(polyline);
    gMap.addOverlay(polygon);
  }

  function drawFilledCircle(tower, distance, color) {
    var points = getRadiusPoints(tower, distance);
    var polygon = new GPolygon(points, color, 1, .25, '#ACEFB5', .4);

    gMap.addOverlay(polygon);

    tower.highlight = polygon;
  }

  function removeFilledCircle(tower) {
    gMap.removeOverlay(tower.highlight);
  }

  function processDeleteLocation(obj) {
    if (obj.argument.panel) {
      ccc.html.destroy_wait_panel(obj.argument.panel);
    }

    var error = "";
    if (obj.status !== 200) {
      if (obj.status === -1) {
        error = "Server not responding, ";
      }
      error += obj.statusText + " ("+obj.status+")";
    }

    var dialog;
    if (error.length > 0) {
      var dialog = ccc.html.create_simple_dialog_panel({
        body : error,
        icon : yw.SimpleDialog.ICON_WARN
      });

      return false;
    }

    var location = eval("(" + obj.responseText + ")");
    var idx = location.index;
    if (idx) {
      deleteMarker(locationData[idx].marker);
    }
  }

  function processLocation(obj) {
    if (obj.argument.panel) {
      ccc.html.destroy_wait_panel(obj.argument.panel);
    }

    var error = "";
    if (obj.status !== 200) {
      if (obj.status === -1) {
        error = "Server not responding, ";
      }
      error += obj.statusText + " ("+obj.status+")";
    }

    var dialog;
    if (error.length > 0) {
      var dialog = ccc.html.create_simple_dialog_panel({
        body : error,
        icon : yw.SimpleDialog.ICON_WARN
      });

      return false;
    }

    var location = eval("(" + obj.responseText + ")");

    if (location.errors) {
      var dialog = ccc.html.create_simple_dialog_panel({
        body : location.errors.join('<br />'),
        icon : yw.SimpleDialog.ICON_WARN
      });
      return false;
    }

    yu.Dom.get('f1').reset();
    yu.Dom.get('fc_idx').value = '';
    CCC.rf.changeIcon(yu.Dom.get('fc_icon').value,'dot');

    var idx = location.index;
    if (location.edit) {
      deleteMarker(locationData[idx].marker);
      tab.set('activeIndex',0);
    }

    locationData[idx] = location[idx];
    plotLocation(idx,locationData[idx]);
  }

  function processLocationData(obj) {
    var error = "";
    if (obj.status !== 200) {
      if (obj.status === -1) {
        error = "Server not responding, ";
      }
      error += obj.statusText + " ("+obj.status+")";
    }

    var dialog;
    if (error.length > 0) {
      var dialog = ccc.html.create_simple_dialog_panel({
        body : error,
        icon : yw.SimpleDialog.ICON_WARN
      });

      return false;
    }

    locationData = eval("(" + obj.responseText + ")");

    for (var i in locationData) {
      plotLocation(i,locationData[i]);
    }
  }

  function plotLocation(index, location) {
    location.point = new GLatLng(
      location.latitude,
      location.longitude
    );

    var text = 'Name: '+location.name+'<br />'+
      'Point: '+location.latitude+', '+
        location.longitude+'<br />'+
      'Tower: '+location.tower;

    var el = yu.Dom.get('fc_icon');
    text += '<br />Status: '+status[location.icon].label;

    if (location.notes.length > 0) {
      text += '<br />Notes: <br />'+
        '<textarea rows="7" cols="30" readonly="readonly">'+
        location.notes+'</textarea>';
    }

    text += '<br /><a class="infowindow" href="#" '+
      'onclick="CCC.rf.editLocation(\''+index+
      '\'); return false">(edit)</a> '+
      '<a class="infowindow" href="#" onclick="CCC.rf.deleteLocation(\''+index+
        '\'); return false">(delete)</a>';

    location.marker = createMarker(
      location.point,
      text,
      {
        icon       : icons[location.icon+"Dot"],
        name       : location.name,
        importance : 4
      }
    );
  }

  function processTowerData(obj) {
    var error = "";
    if (obj.status !== 200) {
      if (obj.status === -1) {
        error = "Server not responding, ";
      }
      error += obj.statusText + " ("+obj.status+")";
    }

    var dialog;
    if (error.length > 0) {
      var dialog = ccc.html.create_simple_dialog_panel({
        body : error,
        icon : yw.SimpleDialog.ICON_WARN
      });

      return false;
    }

    towerData = eval("(" + obj.responseText + ")");

    var twrEl = yu.Dom.get('fc_tower');
    var j, radius;
    for (var i in towerData.towers) {
      towerData.towers[i].point = new GLatLng(
        towerData.towers[i].latitude,
        towerData.towers[i].longitude
      );

      twrEl.options[i] = new Option(
        towerData.towers[i].name,towerData.towers[i].clli,false,false
      );

      towerData.towers[i].radii = {};
      for (j in radii) {
        towerData.towers[i].radii[j] = {};
        towerData.towers[i].radius = getPointFromMiles(
          towerData.towers[i].point, j
        );
        if (!radii[j].points) {
          towerData.towers[i].radii[j].points = getRadiusPoints(
            towerData.towers[i], 
            towerData.towers[i].radius
          );

          /*
          var ple = new PolylineEncoder();
          towerData.towers[i].radii[j].polygon = ple.dpEncodeToGPolyline(
            towerData.towers[i].radii[j].points,
            radii[j].color,
            1,
            .25
          );
          
          towerData.towers[i].radii[j].polygon = ple.dpEncodeToGPolygon(
            towerData.towers[i].radii[j].points,
            radii[j].color,
            1,
            .25
          );
          */

          towerData.towers[i].radii[j].polygon = new GPolygon(
            towerData.towers[i].radii[j].points, 
            radii[j].color, 
            1, 
            .25
          );
         
          // By default do not show boundaries.
          //gMap.addOverlay(towerData.towers[i].radii[j].polygon);
        }
        towerData.towers[i].boundariesDisplayed = false;
        //drawCircle(towerData.towers[i], radius, radii[j]);
      }

      var text = "Tower: "+towerData.towers[i].name+"<br />"+
        'Point: '+towerData.towers[i].latitude+', '+
        towerData.towers[i].longitude+'<br />'+
        '<a class="infowindow" '+
        'href="#" onclick="CCC.rf.toggleTowerBoundaries(\''+i+
        '\'); return false">(toggle boundaries)</a>';

      towerData.towers[i].marker = createMarker(
        towerData.towers[i].point,
        text,
        {
          icon       : icons.tower,
          tower      : i,
          name       : towerData.towers[i].name,
          importance : 20
        }
      );

      GEvent.addListener(towerData.towers[i].marker,"mouseover",function () {
        var twr = findTowerFromPoint(this.getPoint());
        //drawFilledCircle(twr, twr.radius, 10);

        var first;
        var lighten = .025;
        for (var i in twr.radii) {
          if (!first) {
            first = i;
            if (!twr.radii[i].filledPolygon) {
              twr.radii[i].filledPolygon = new GPolygon(
                twr.radii[i].points, 
                radii[i].color, 
                1, 
                .25, 
                radii[i].color, 
                .1
              );
            }
          } else {
            if (!twr.radii[i].filledPolygon) {
            /*
              twr.radii[i].filledPolygon = new GPolygon({
                polylines : [{
                  points: twr.radii[i].points, 
                  color : radii[i].color, 
                  opacity : .25,
                }, {
                  points: twr.radii[first].points, 
                  color : radii[i].color, 
                  opacity : .25, 
                }],
                color : radii[i].color, 
                fill : true,
                opacity : .4
              });
              */
              twr.radii[i].filledPolygon = new GPolygon(
                twr.radii[i].points, 
                radii[i].color, 
                1, 
                .25, 
                radii[i].color, 
                (.125 - lighten)
              );
            
            }

            first = i;
          }
          gMap.addOverlay(twr.radii[i].filledPolygon);
        }
        //var polygon = new GPolygon(points, color, 1, .25, '#ACEFB5', .4);
      });

      GEvent.addListener(towerData.towers[i].marker,"mouseout",function () {
        var twr = findTowerFromPoint(this.getPoint());
        for (var i in twr.radii) {
          gMap.removeOverlay(twr.radii[i].filledPolygon);
        }
        //removeFilledCircle(twr);
      });

      if (towerData.center == towerData.towers[i].name) {
        gMap.panTo(towerData.towers[i].point);
      }

      //break;
    }
  }

  return {
    getLocationData : function() {
      yu.Connect.asyncRequest(
        "GET",
        locationDataLocation+'?ts='+new Date().getTime(),
        {
          success : processLocationData,
          failure : processLocationData,
          timeout : 30000
        }
      );
    },

    getTowerData : function() {
      yu.Connect.asyncRequest(
        "GET",
        towerDataLocation+'?ts='+new Date().getTime(),
        {
          success : processTowerData,
          failure : processTowerData,
          timeout : 30000
        }
      );
    },

    changeIcon : function(color, id) {
      yu.Dom.get(id).src = '/gradd/images/'+color+'-dot.png';
    },

    deleteLocation : function(index) {
      var panel = CCC.rf.createWaitPanel();

      gMap.closeInfoWindow();

      yu.Connect.asyncRequest(
        "POST",
        xmlHandler,
        {
          success  : processDeleteLocation,
          failure  : processDeleteLocation,
          timeout  : 30000,
          argument : {
            panel : panel
          }
        },
        'idx='+index+'&q=delete'
      );
    },

    editLocation : function(index) {
      yu.Dom.get('fc_idx').value   = index;
      yu.Dom.get('fc_name').value  = locationData[index].name;
      yu.Dom.get('fc_lat').value   = locationData[index].latitude;
      yu.Dom.get('fc_lng').value   = locationData[index].longitude;
      yu.Dom.get('fc_tower').value = locationData[index].tower;
      yu.Dom.get('fc_icon').value  = locationData[index].icon;
      yu.Dom.get('fc_notes').value = locationData[index].notes;

      CCC.rf.changeIcon(locationData[index].icon, 'dot');

      gMap.closeInfoWindow();

      tab.set('activeIndex',1);
    },

    submitLocation : function() {
      var idx   = encodeURIComponent(yu.Dom.get('fc_idx').value);
      var name  = encodeURIComponent(yu.Dom.get('fc_name').value);
      var lat   = encodeURIComponent(yu.Dom.get('fc_lat').value);
      var lng   = encodeURIComponent(yu.Dom.get('fc_lng').value);
      var tower = encodeURIComponent(yu.Dom.get('fc_tower').value);
      var icon  = encodeURIComponent(yu.Dom.get('fc_icon').value);
      var notes = encodeURIComponent(yu.Dom.get('fc_notes').value);

      var panel = CCC.rf.createWaitPanel();

      yu.Connect.asyncRequest(
        "POST",
        xmlHandler,
        {
          success  : processLocation,
          failure  : processLocation,
          timeout  : 30000,
          argument : {
            panel : panel
          }
        },
        'idx='+idx+'&name='+name+'&lat='+lat+'&lng='+lng+'&tower='+tower+
          '&icon='+icon+'&notes='+notes+'&q=submit'
      );
    },

    createWaitPanel : function() {
      var panel = ccc.html.create_wait_panel({
        fixedcenter: true,
        width: '60px',
        underlay : 'none',
        header : ' '
      });
      return panel;
    },

    cancelAddLocation : function() {
      tab.set('activeIndex',0);

      yu.Dom.get('f1').reset();
      yu.Dom.get('fc_idx').value = '';
      CCC.rf.changeIcon(yu.Dom.get('fc_icon').value,'dot');
    },

    toggleTowerBoundaries : function(tower) {
      if (towerData.towers[tower]) {
        (towerData.towers[tower].boundariesDisplayed) ?
          CCC.rf.hideTowerBoundaries(tower) : CCC.rf.showTowerBoundaries(tower);
      }
    },

    hideTowerBoundaries : function(tower) {
      var i, j;
      if (tower) {
        if (towerData.towers[tower]) {
          for (j in towerData.towers[tower].radii) {
            //if (towerData.towers[tower].radii[j].displayed) {
            if (towerData.towers[tower].boundariesDisplayed) {
              gMap.removeOverlay(towerData.towers[tower].radii[j].polygon);
              //towerData.towers[tower].radii[j].displayed = false;
            }
          }
          towerData.towers[tower].boundariesDisplayed = false;
        }
      } else {
        for (i in towerData.towers) {
          for (j in towerData.towers[i].radii) {
            //if (towerData.towers[i].radii[j].displayed) {
            if (towerData.towers[i].boundariesDisplayed) {
              gMap.removeOverlay(towerData.towers[i].radii[j].polygon);
              //towerData.towers[i].radii[j].displayed = false;
            }
          }
          towerData.towers[i].boundariesDisplayed = false;
        }
      }
    },

    showTowerBoundaries : function(tower) {
      var i, j;
      if (tower) {
        if (towerData.towers[tower]) {
          for (j in towerData.towers[tower].radii) {
            //if (!towerData.towers[tower].radii[j].displayed) {
            if (!towerData.towers[tower].boundariesDisplayed) {
              gMap.addOverlay(towerData.towers[tower].radii[j].polygon);
              //towerData.towers[tower].radii[j].displayed = true;
            }
          }
          towerData.towers[tower].boundariesDisplayed = true;
        }
      } else {
        for (i in towerData.towers) {
          for (j in towerData.towers[i].radii) {
            //if (!towerData.towers[i].radii[j].displayed) {
            if (!towerData.towers[i].boundariesDisplayed) {
              gMap.addOverlay(towerData.towers[i].radii[j].polygon);
              //towerData.towers[i].radii[j].displayed = true;
            }
          }
          towerData.towers[i].boundariesDisplayed = true;
        }
      }
    },

    initChart : function() {
      //YAHOO.widget.Chart.SWFURL = "http://code.cinergycom.net/javascript/" +
      yw.Chart.SWFURL = "http://code.cinergycom.net/javascript/" +
        "yui/yui-2.4.1/build/charts/assets/charts.swf";

      var ds = {};
      for (i in locationData) {
        if (!ds[locationData[i].icon]) {
          ds[locationData[i].icon] = {
            count : 1,
            label : status[locationData[i].icon].label
          };
        } else {
          ds[locationData[i].icon].count++;
        }
      }

      var mydata = [];
      var seriesData = [];
      var seriesColor = [];
      var obj = {};
      for (i in ds) {
        mydata.push(ds[i]);
        seriesColor.push(status[i].color);
      }

      var data = new yu.DataSource(mydata);
      data.responseType = yu.DataSource.TYPE_JSARRAY;
      data.responseSchema = {
        fields : [ "label", "count" ]
      };

      var chart = new yw.PieChart( "chart", data, {
        dataField: "count",
        categoryField: "label",
        series: [{
          style : {
            colors : seriesColor
          }
        }],
        expressInstall: "http://code.cinergycom.net/javascript/yui/yui-2.4.1/examples/charts/assets/expressinstall.swf",
        style : {
          background : {
            color : 0xf2efe9
          }
        }
      });
    },

    begin : function() {
      var panel = CCC.rf.createWaitPanel();

      yw.Chart.SWFURL = "http://code.cinergycom.net/javascript/" +
        "yui/yui-2.4.1/build/charts/assets/charts.swf";

      CCC.util.log.enable(false);
      tab = new yw.TabView('tab', { orientation : 'left' });
      CCC.util.html.stripe_table({
        id : 'loc', even_color : '#F2EFE9', odd_color : '#E8E3D8'
      });

      tab.on('contentReady', function() {
        this.getTab(1).addListener('click', function () {
          var s = CCC.util.dom.get_element('fc_name');
          if (s && s.value.length <= 0) {
            s.focus();
          } else if (s) {
            s.select();
          }
          //GEvent.clearListeners(CCC.rf.map, 'click');
        });
        this.getTab(0).addListener('click', function () {
          //GEvent.addListener(CCC.rf.map, 'click', CCC.rf.find_by_click);
        });
        this.getTab(2).addListener('click', function () {
          CCC.rf.initChart();
        });
      });

      init();

      CCC.rf.getTowerData();
      CCC.rf.getLocationData();

      //-----------------------------------------------------------------------
      // Prep the add location form
      //-----------------------------------------------------------------------
      var elIcon = yu.Dom.get('fc_icon');
      var c = 0, tr, td;

      var mydata = []
      for (var i in status) {
        elIcon.options[c] = new Option(
          status[i].label, i, false, false
        );
        c++;
        mydata.push({color : i, label : status[i].label});
      }

      yu.Dom.get('f1').reset();
      yu.Dom.get('fc_idx').value = '';
      CCC.rf.changeIcon(yu.Dom.get('fc_icon').value,'dot');
      //-----------------------------------------------------------------------

      //-----------------------------------------------------------------------
      // Generate the legend
      //-----------------------------------------------------------------------
      var legend = yu.Dom.get('legend-tbody');

      tr = document.createElement('tr');
      td = document.createElement('td');
      td.innerHTML = '<img src="/gradd/images/tower.png" alt="Tower" /> Tower';
      tr.appendChild(td);
      td = document.createElement('td');
      tr.appendChild(td);
      legend.appendChild(tr);

      for (i=0; i<mydata.length; i+=2) {
        tr = document.createElement('tr');
        td = document.createElement('td');
        td.innerHTML = '<img src="/gradd/images/'+mydata[i].color+
          '-dot.png" alt="'+mydata[i].label+'" /> '+mydata[i].label;
        tr.appendChild(td);
        td = document.createElement('td');
        td.innerHTML = '<img src="/gradd/images/'+mydata[i+1].color+
          '-dot.png" alt="'+mydata[i+1].label+'" /> '+mydata[i+1].label;
        tr.appendChild(td);
        legend.appendChild(tr);
      }
      //-----------------------------------------------------------------------

      displayTab();

      if (panel) {
        ccc.html.destroy_wait_panel(panel);
      }
    },
    end : function() {
      if (GUnload) {
        GUnload();
      }
    }
  };

}();

CCC.util.event.add_load_event(CCC.rf.begin);
CCC.util.event.add_unload_event(CCC.rf.end);
