  var infoWindowOverlay = null;
  function showOverlay( o, visible )
  {
    if( visible )
    {
      GEvent.trigger(o, 'click');
    }
    else
    {
      o.map.removeOverlay( o );
      if(infoWindowOverlay == o)
      {
        o.map.closeInfoWindow();
        infoWindowOverlay = null;
      }
    }
    o.visible = visible;
  }
  function placemarkClick( o )
  {
    if(o.zoom && o.getLatLng)
      o.map.setCenter( o.getLatLng(), o.zoom );
    GEvent.trigger(o, 'click');
    return false;  
  }
  function overlayClick( o, id )
  {
    GEvent.trigger(o, 'click');
    if(!id) id = o.checkid;
    $('#'+id).attr('checked', true);
    return false;  
  }
  function showFolder( f, visible )
  {
    if(visible)
    {
      f.addOverlays();
      f.focusMap();
    } else {
      f.removeOverlays();
      if((infoWindowOverlay) && (infoWindowOverlay.folder == f))
      {
        f.map.closeInfoWindow();
        infoWindowOverlay = null;
      }
    }
    f.visible = visible;
  }
  function folderClick( f, id )
  {
    if(!f.visible)
      showFolder( f, true );
    f.focusMap();
    if(!id) id = f.checkid;
    $('#'+id).attr('checked', true);
    return false;
  }
  function makeSideBar( exml, id )
  {
    var html = '';
    var varname = 'exml['+id+']';
    var items = new Array;
    for( var i = 0; i < exml.gpolylines.length; i++ )
      items[exml.gpolylines[i].num] = { 'o': exml.gpolylines[i], 'h' :addItem( varname, id, exml.gpolylines[i].name, "polyline", i ) };
    for( var i = 0; i < exml.gpolygons.length; i++ )
      items[exml.gpolygons[i].num] =  { 'o': exml.gpolygons[i], 'h' :addItem( varname, id, exml.gpolygons[i].name, "polygon", i ) };
    for( var i = 0; i < exml.groundoverlays.length; i++ )
      items[exml.groundoverlays[i].num] =  { 'o': exml.groundoverlays[i], 'h' :addItem( varname, id, exml.groundoverlays[i].name, "overlay", i ) };
    for( var i = 0; i < exml.gmarkers.length; i++ )
      items[exml.gmarkers[i].num] =  { 'o': exml.gmarkers[i], 'h' :addItem( varname, id, exml.gmarkers[i].name, "marker", i ) };
    for( var i = 0; i < exml.folders.length; i++ )
      items[exml.folders[i].num] =  { 'o': exml.folders[i], 'h' :addItem( varname, id, exml.folders[i].name, "folder", i ) };

    exml.items = new Array;
    keys = new Array;
    for(k in items)
      keys.push(parseInt(k));
    keys.sort( function (a, b){return (a > b) - (a < b);} );

    for(var i = 0; i < keys.length; i++)
    {
      html += items[keys[i]].h;
      exml.items.push( items[keys[i]].o );
      items[keys[i]].o.mapid = id;
    }

    $('#panel'+id+' .content').html( html );
  }
  function addItem(myvar,id,name,type,i,graphic) {
    if(!name) return '';
    if (type == "marker") {
      return '<ul><li><a href="#" onclick="return placemarkClick('
        + myvar+ '.gmarkers['+i+'])">' + name + '</a></li></ul>';
    } else
    if (type == "polyline") {
      var checkid = 'polyline'+id+'-'+i;
      var overlayvar = myvar + '.gpolylines['+i+']';
      return '<input type="checkbox" id="'+checkid+'" onclick="showOverlay('
        + overlayvar +', this.checked)"/>'
        + '<a href="#" onclick="return overlayClick('+overlayvar+',\''+checkid+'\');">'
        + name + '</a><br>';
    } else
    if (type == "polygon") {
      var checkid = 'polygon'+id+'-'+i;
      var overlayvar = myvar + '.gpolygons['+i+']';
      return '<input type="checkbox" id="'+checkid+'" onclick="showOverlay('
        + overlayvar + ', this.checked)"/>'
        + '<a href="#" onclick="return overlayClick('+overlayvar+',\''+checkid+'\');">'
        + name + '</a><br>';
    } else
    if (type == "overlay") {
      var checkid = 'groundoverlay'+id+'-'+i;
      var overlayvar = myvar + '.groundoverlays['+i+']';
      return '<input type="checkbox" id="'+checkid+'" onclick="showOverlay('
        + overlayvar + ', this.checked)"/>'
        + '<a href="#" onclick="return overlayClick('+overlayvar+',\''+checkid+'\');">'
        + name + '</a><br>';
    } else
    if (type == "folder") {
      var checkid = 'folder'+id+'-'+i;
      var overlayvar = myvar + '.folders['+i+']';
      return '<input type="checkbox" id="'+checkid+'" onclick="showFolder('
        + overlayvar + ', this.checked)"/>'
        + '<a href="#" onclick="return folderClick('+overlayvar+',\''+checkid+'\');">'
        + name + '</a><br>';
    }
    return "";
  }
