/**
 * 注意：为了在 IE6 中正常显示折线，必须在网页的 <HTML> 标签中加上：
 *   <html xmlns:v="urn:schemas-microsoft-com:vml">
 *
 * @author haogang
 * @author qq:19415631
 */

/**
 * 本示例用一个双向链表维护用户设定的标记，能够容易的实现标记的遍历和删除
 * 每个链表结点 m 有如下字段：
 *    m.prev      前驱标记
 *    m.next      后继标记
 *    m.segPrev   连接本标记与前驱标记的线段
 *    m.segNext   连接本标记与后继标记的线段
 */
function GRulerControl() {
  var me = this;
  
  // 可国际化的字符串
  me.RESET_BUTTON_TITLE_ = '清除所有测距标记';
  me.ENABLE_BUTTON_TITLE_ = '添加测距标记已启用，单击这里禁用';
  me.DISABLE_BUTTON_TITLE_ = '添加测距标记已禁用，单击这里启用';
  me.DELETE_BUTTON_TITLE_ = '删除';
  me.SEGDIV_TITLE_ = '点击查看换乘点';
  me.SEGDIV_TEXT_ = '下一段行驶: ';
  me.InfoWindow_TEXT_ = '在此处换乘为: ';
  me.InfoWindow_DES_ = '终点';
  me.InfoWindow_START = '出发点';
  me.InfoWindow_TIP_ = '请选择出行方式';
  me.CHECK_TIP_TITLE_ = '请选择每个换乘点的出行方式';
  me.CHECK_TIP_ = '请选择至少两个换乘点';
  me.PREV_TITLE_ = '上一个';
  me.NEXT_TITLE_ = '下一个';
  
  me.TRAVEL_METHOD_DEFAULT_ = '出行方式';
  me.TRAVEL_METHOD_FOOT_ = '步行';
  me.TRAVEL_METHOD_BIKE_ = '非机动车';
  me.TRAVEL_METHOD_BUS_ = '公交';
  me.TRAVEL_METHOD_TRAIN_ = '轨道交通';
  me.TRAVEL_METHOD_TOG_ = '合乘';
  me.TRAVEL_METHOD_TAXI_ = '出租车';
  me.TRAVEL_METHOD_CAR_ = '私家车';
  
  me.RESET_BUTTON_IMAGE_ = 'images/ruler_clear.png';
  me.ENABLE_BUTTON_IMAGE_ = 'images/ruler_enabled.png';
  me.DISABLE_BUTTON_IMAGE_ = 'images/ruler_disabled.png';
  me.BACKGROUND_IMAGE_ = 'images/ruler_background.png';
  me.DD_DEFAULT_ = 'images/marker.png';
  me.DD_BLANK_ = 'images/blank.png';
  me.DD_START_ = 'images/start.png';
  me.DD_END_ = 'images/end.png';
  
  me.KILOMETER_ = '公里';
  me.METER_ = '米';
  
  me.methods_ = [me.TRAVEL_METHOD_DEFAULT_,me.TRAVEL_METHOD_FOOT_,me.TRAVEL_METHOD_BIKE_,me.TRAVEL_METHOD_BUS_,me.TRAVEL_METHOD_TRAIN_,me.TRAVEL_METHOD_TOG_,me.TRAVEL_METHOD_TAXI_,me.TRAVEL_METHOD_CAR_];
  
}

GRulerControl.prototype = new GControl();

/**
 * 初始化标尺控件
 */
GRulerControl.prototype.initialize = function(map) {
  var me = this;
  var container = document.createElement('div');
  me.setButtonStyle_(container);
 
  // “启用/禁用”按钮
  var btnEnable = document.createElement('img');
  btnEnable.width = btnEnable.height = 19;
  GEvent.addDomListener(btnEnable, 'click', 
    function() {
      me.setEnabled(!me.isEnabled());
    }
  );
  container.appendChild(btnEnable);
  
  // “重置”按钮
  var btnReset = document.createElement('img');
  btnReset.width = btnReset.height = 19;
  btnReset.src = me.RESET_BUTTON_IMAGE_;
  btnReset.title = me.RESET_BUTTON_TITLE_;
  GEvent.addDomListener(btnReset, 'click', 
    function() {
      me.reset();
    }
  );
  container.appendChild(btnReset);
  
  // 距离标签
  var txtInfo = document.createElement('div');
  txtInfo.style.font = 'small Arial';
  txtInfo.style.fontWeight = 'bold';
  txtInfo.style.fontSize = '9pt';
  txtInfo.style.width = '82px';
  container.appendChild(txtInfo);
  
  // 初始化内部变量
  map.rulerControl_ = me;
  me.map_ = map;
  me.head_ = new Object();
  me.tail_ = new Object();
  me.head_.next_ = me.tail_;
  me.tail_.prev_ = me.head_;
  me.btnEnable_ = btnEnable;
  me.btnReset_ = btnReset;
  me.txtInfo_ = txtInfo;
  me.setEnabled(true);
  
  map.getContainer().appendChild(container);
  return container;
}


/**
 * 设置控件的格式
 */
GRulerControl.prototype.setButtonStyle_ = function(button) {
  button.style.backgroundImage = 'url(' + this.BACKGROUND_IMAGE_ + ')';
  button.style.font = 'small Arial';
  button.style.border = '1px solid #888888';
  button.style.padding = '4px';
  button.style.textAlign = 'right';
  button.style.cursor = 'pointer';
}

/**
 * 用恰当的格式表示距离
 */
GRulerControl.prototype.formatDistance_ = function(len) {
  var me = this;
  
  len = Math.round(len);
  if (len <= 1000) {
    return len + ' ' + me.METER_;
  } else if (len <= 1000000) {
    return len / 1000 + ' ' + me.KILOMETER_;
  }
  return Math.round(len / 1000) + ' ' + me.KILOMETER_;
}

/**
 * 四舍五入数字，保留小数点后三位
 */
GRulerControl.prototype.round3_ = function(value) {
	return Math.round(value*1000)/1000;
}

/**
 * 四舍五入数字，保留小数点后五位
 */
GRulerControl.prototype.round5_ = function(value) {
	return Math.round(value*100000)/100000;
}

/**
 * 格式化角度为字符串
 */
GRulerControl.prototype.formatDegree_ = function(value) {
  value = Math.abs(value);
  var v1 = Math.floor(value);
  var v2 = Math.floor((value - v1) * 60);
  var v3 = Math.round((value - v1) * 3600 % 60);
  return v1 + '°' + v2 + '\'' + v3 + '"';
}

/**
 * 格式化经纬度为字符串
 */
GRulerControl.prototype.formatLatLng_ = function(pt) {
  var me = this;
  
  var latName, lngName;
  var lat = pt.lat();
  var lng = pt.lng();
  latName = lat >= 0 ? '北纬' : '南纬';
  lngName = lng >= 0 ? '东经' : '西经';

  return lngName + me.formatDegree_(lng) + '，' 
    + latName + me.formatDegree_(lat);
}

/**
 * 返回控件的默认位置
 */
GRulerControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 8));
}

/**
 * 返回控件是否已启用
 */
GRulerControl.prototype.isEnabled = function() {
  return this.enabled_;
}

/**
 * 设置控件的“启用/禁用"状态
 */
GRulerControl.prototype.setEnabled = function(value) {
  var me = this;
  if (value == me.enabled_)
    return;
  me.enabled_ = value;
  
  if (me.enabled_) {
    me.mapClickHandle_ = GEvent.addListener(me.map_, 'click', me.onMapClick_);
    me.txtInfo_.style.display = 'block';
    me.btnReset_.style.display = 'inline';
    me.btnEnable_.src = me.ENABLE_BUTTON_IMAGE_;
    me.btnEnable_.title = me.ENABLE_BUTTON_TITLE_;
    me.updateDistance_();
  } else {
    GEvent.removeListener(me.mapClickHandle_);
    me.txtInfo_.style.display = 'none';
    me.btnReset_.style.display = 'none';
    me.btnEnable_.src = me.DISABLE_BUTTON_IMAGE_;
    me.btnEnable_.title = me.DISABLE_BUTTON_TITLE_;
  }
}

/**
 * 事件处理函数：当用户单击地图时，要在该位置添加一个标记
 */
GRulerControl.prototype.onMapClick_ = function(marker, latlng) {
	if(this instanceof GMap2){
		var me = this.rulerControl_;
	}else{
		var me = this;
	}
  
  // 如果用户单击的是标记，不再这里处理
  if (marker)
    return;

  // 创建标记，并添加到链表中
  var newMarker = new GMarker(latlng, {draggable: true});

  var pos = me.tail_.prev_;

  newMarker.prev_ = pos;
  newMarker.next_ = pos.next_;
  pos.next_.prev_ = newMarker;
  pos.next_ = newMarker;

  // 为标记添加事件处理函数：拖拽标记时要更新连接线段和距离
  GEvent.addListener(newMarker, 'dragend',
    function() {
      me.map_.closeInfoWindow();
      me.updateSegments_(newMarker);
      me.updateDistance_();
    }
  );
  // 为标记添加事件处理函数：单击标记时要显示信息窗口
  GEvent.addListener(newMarker, 'click',
    function() {
      newMarker.openInfoWindow(me.createInfoWindow_(newMarker));
    }
  );
  
  // 将创建的标记添加到地图中
  if(newMarker.prev_ == me.head_){
  	newMarker.getIcon().image = me.DD_START_;
  }else{
  	newMarker.getIcon().image = me.DD_DEFAULT_;
  }
  
  me.map_.addOverlay(newMarker);
  
  // 添加标记被拖动的事件
  GEvent.addListener(newMarker, 'dragend', function(){
  	if(newMarker.prev_ != me.head_){
  		var prevMarker = newMarker.prev_;
    	prevMarker.disDiv_.innerHTML = me.SEGDIV_TEXT_+me.formatDistance_(prevMarker.segNext_.getLength());
    }
    if(newMarker.next_ != me.tail_){
    	newMarker.disDiv_.innerHTML = me.SEGDIV_TEXT_+me.formatDistance_(newMarker.segNext_.getLength());
    }
  });

	// 预先为标记气泡提示窗口创建出行DOM
	newMarker.infoWindowDIV_ = document.createElement('div');

  if (newMarker.prev_ != me.head_) {
    // 如果这不是第一个标记，则创建连接到上一个标记的线段，并显示在地图中
    var segment = [newMarker.prev_.getLatLng(), latlng];
    var seg = new GPolyline(segment);
    newMarker.segPrev_ = seg;
    
    var prevMarker = newMarker.prev_;
    
    var div = document.createElement('div');
    //div.className = "info";
    div.style.marginLeft = '2px';
    div.style.background = '#BFDF02';
    div.style.border = '1px solid #3F8C01';
    div.style.color = '#000000';
    div.style.display = 'block';
    div.style.font = 'small Arial';
    div.style.fontSize = '12px';
    div.style.width = '240px';
    div.title = me.SEGDIV_TITLE_;
    div.style.cursor = 'pointer';
    
    GEvent.addDomListener(div, 'mouseover', function(){
			div.style.background = '#FFFFFF';
			prevMarker.setImage(me.DD_BLANK_);
		});
		GEvent.addDomListener(div, 'mouseout', function(){
			div.style.background = '#BFDF02';
			if(prevMarker.prev_ == me.head_){
    		prevMarker.setImage(me.DD_START_);
    	}else{
    		prevMarker.setImage(me.DD_DEFAULT_);
    	}
		});
    GEvent.addDomListener(div, 'click', function(){
    	prevMarker.openInfoWindow(me.createInfoWindow_(prevMarker));
    });
    
    var Tab = document.createElement('table');
    var Tr = Tab.insertRow();
    
    var Td1 = Tr.insertCell();
    var Td2 = Tr.insertCell();
    
    var disInfo = document.createElement('div');
    var methodType = 0;
    var bubbleS = null;
    addSegDiv_(div);
    prevMarker.segDiv_ = div;
    prevMarker.disDiv_ = disInfo;
    prevMarker.method_ = methodType;
    prevMarker.bubbleS_ = bubbleS;
    
    GEvent.addListener(prevMarker, 'mouseover', function(){
    		div.style.background = '#FFFFFF';
    });
    GEvent.addListener(prevMarker, 'mouseout', function(){
    		div.style.background = '#BFDF02';
    });

		var selectM = document.createElement('select');
		for(var i = 0;i < me.methods_.length; i++){
			selectM.add(new Option(me.methods_[i]));
		}
		selectM.style.background = '#FF8080';
		
		// 阻止事件传递到底层
		GEvent.addDomListener(selectM, 'click', function(event){
			event.cancelBubble = true;
		});
		
		prevMarker.selectM_ = selectM;
		
		GEvent.addDomListener(selectM, 'change', function(){
			if(prevMarker.bubbleS_ != null)
				prevMarker.bubbleS_.selectedIndex = selectM.selectedIndex;
			
			prevMarker.method_ = selectM.selectedIndex;
			if(selectM.selectedIndex == 0){
				selectM.style.background = '#FF8080';
				if(prevMarker.bubbleS_ != null)
					prevMarker.bubbleS_.style.background = '#FF8080';
			}else{
				selectM.style.background = '#FFFFFF';
				if(prevMarker.bubbleS_ != null)
					prevMarker.bubbleS_.style.background = '#FFFFFF';
			}
			
			if(selectM.selectedIndex != 0){
				 prevMarker.infoWindowDIV_.innerHTML = me.InfoWindow_TEXT_;
			}else{
				prevMarker.infoWindowDIV_.innerHTML = me.InfoWindow_TIP_;
			}
			
			resetInfo_(me.getDistance());
		});
		
		disInfo.innerHTML = me.SEGDIV_TEXT_ + me.formatDistance_(seg.getLength());

		div.appendChild(Tab);
		Td1.appendChild(selectM);
		Td2.appendChild(disInfo);

    prevMarker.segNext_ = newMarker.segPrev_;
    me.map_.addOverlay(newMarker.segPrev_);

    // 更新距离显示
    me.updateDistance_();
  }
}

/**
 * 统计总距离，并显示在网页中
 */
GRulerControl.prototype.updateDistance_ = function() {
  var me = this;
  var dat = me.getDistance();
  
  // 结果显示在网页中
  me.txtInfo_.innerHTML = me.formatDistance_(dat[0]);
  resetInfo_(dat);
}

/**
 * 遍历链表，统计总距离
 */
GRulerControl.prototype.getDistance = function() {
  var me = this;
  var len = 0;
  var temp = 0;
  var BE_CO2 = 0;
  var BE_CO = 0;
  var BE_NOx = 0;
  var BE_CH4 = 0;
  var BE_NMVOC = 0;
  var Diff_CO2 = 0;
  var Diff_CO = 0;
  var Diff_NOx = 0;
  var Diff_CH4 = 0;
  var Diff_NMVOC = 0;
  var dat = [0,0,0,0,0,0];
  var prev_method = 0;
  
  // 周游链表，累计相邻两个标记间的距离
  for (var m = me.head_; m != me.tail_; m = m.next_) {
    if (m.prev_ && m.prev_.getLatLng){
      temp = m.prev_.getLatLng().distanceFrom(m.getLatLng());
      len += temp;
      temp = temp / 1000;
      prev_method = m.prev_.method_;
      BE_CO2 += EF_CO2[prev_method] * temp;
      BE_CO += EF_CO[prev_method] * temp;
      BE_NOx += EF_NOx[prev_method] * temp;
      BE_CH4 += EF_CH4[prev_method] * temp;
      BE_NMVOC += EF_NMVOC[prev_method] * temp;
      
      if(prev_method!=0&&prev_method!=7){
      	Diff_CO2 += (EF_CO2[7]-EF_CO2[prev_method]) * temp;
      	Diff_CO += (EF_CO[7]-EF_CO[prev_method]) * temp;
      	Diff_NOx += (EF_NOx[7]-EF_NOx[prev_method]) * temp;
      	Diff_CH4 += (EF_CH4[7]-EF_CH4[prev_method]) * temp;
      	Diff_NMVOC += (EF_NMVOC[7]-EF_NMVOC[prev_method]) * temp;
    	}
    }
  }
  dat[0] = len;
  dat[1] = me.round3_(BE_CO2);
  dat[2] = me.round3_(BE_CO);
  dat[3] = me.round3_(BE_NOx);
  dat[4] = me.round3_(BE_CH4);
  dat[5] = me.round3_(BE_NMVOC);
  
  dat[6] = me.round3_(Diff_CO2);
  dat[7] = me.round3_(Diff_CO);
  dat[8] = me.round3_(Diff_NOx);
  dat[9] = me.round3_(Diff_CH4);
  dat[10] = me.round3_(Diff_NMVOC);
  return dat;
}

/**
 * 记录所有标记，行驶方式
 */
GRulerControl.prototype.getRouteRecord = function(isCheck) {
	var me = this;
	var record = 0;
	
	if(isCheck == null){
		isCheck = 0;
	}
	
	// 计算标记个数，如果少于3返回
	var num = 0;
	for (var m = me.head_; m != me.tail_; m = m.next_) {
		num++;
	}
	if(num<3){
		alert(me.CHECK_TIP_);
		return -1;
	} 
	
	// 周游链表，记录标记及标记间出行方式和距离
 	for (var m = me.head_; m != me.tail_; m = m.next_) {
 		if(m.prev_ == me.head_){
 			record = me.round5_(m.getLatLng().lat())+','+me.round5_(m.getLatLng().lng())+';';
 			//alert(record);
 		}
 		
 		if (m.prev_ && m.prev_.getLatLng){
 			temp = me.round3_(m.prev_.getLatLng().distanceFrom(m.getLatLng()));
 			
 			if(m.prev_.method_ == 0 && isCheck != 0){
 				alert(me.CHECK_TIP_TITLE_);
 				return -1;
 			}
 			record += m.prev_.method_ +','+temp+';'+me.round5_(m.getLatLng().lat())+','+me.round5_(m.getLatLng().lng())+';';
 			//alert(record);
 		}
 	}
 	record += me.map_.getZoom()+","+me.round5_(me.map_.getCenter().lat())+","+me.round5_(me.map_.getCenter().lng())+";";
 	return record;
}


/**
 * 清除所有标记，根据记录设置标记，重新计算
 */
GRulerControl.prototype.setRouteRecord = function(record) {
	var me = this;

 	var rArray = record.split(";");
 	var overlay = null;
 	var mapArray = rArray[rArray.length - 2].split(",");
 	var len = rArray.length - 1;
 	
 	// 清除所有标记
 	me.reset();
 	
 	// 设置标记
 	for(var i = 0; i < len; i++){
 		if(i%2 == 0){
 			var latlng_array = rArray[i].split(",");
 			var latlng = new GLatLng(latlng_array[0],latlng_array[1],true);
 			me.onMapClick_(overlay,latlng);
 		}
 	}
 	
 	// 重新计算数据，更新显示的信息
 	var i = 0;
 	for (var m = me.head_.next_; m != me.tail_; m = m.next_) {
 		if(m.next_ == me.tail_)
 			break;
 		var ary = rArray[2*i+1].split(",");
 		m.method_ = ary[0];
 		m.selectM_.selectedIndex = ary[0];
		if(ary[0] != 0){
			m.selectM_.style.background = '#FFFFFF';
		}
 		i++;
 	}
 	
 	resetInfo_(me.getDistance());
 	
 	// 设置地图缩放级别，平滑地图到指定经纬度
 	var level = parseInt(mapArray[0]);
 	if(me.map_.getZoom() != level){
 		me.map_.setZoom(level);
 	}
 	me.map_.panTo(new GLatLng(mapArray[1],mapArray[2],true));
}

/**
 * 清除所有标记，初始化链表
 */
GRulerControl.prototype.reset = function() {
  var me = this;
  
  for (var m = me.head_.next_; m != me.tail_; m = m.next_) {
    me.map_.removeOverlay(m);
    if (m.segNext_)
      me.map_.removeOverlay(m.segNext_);
    if(m.next_ != me.tail_){
    	delSegDiv_(m.segDiv_);
    }
  }
  me.head_ = new Object();
  me.tail_ = new Object();
  me.head_.next_ = me.tail_;
  me.tail_.prev_ = me.head_;
  
  me.updateDistance_();
}

/**
 * 事件处理函数：当用户拖拽标记、标记坐标改变时被调用，这里要更新与该标记连接的线段
 * @param {GMarker} marker 被拖拽的标记
 */
GRulerControl.prototype.updateSegments_ = function(marker) {
  var me = this;
  var segment;
  
  // 更新连接前驱的线段
  if (marker.segPrev_ && marker.prev_.getLatLng) {
    // 从地图上删除旧的线段
    me.map_.removeOverlay(marker.segPrev_);
    
    // 根据标记的当前坐标构造新的线段，并更新链表结点的相关字段
    segment = [marker.prev_.getLatLng(), marker.getLatLng()];
    marker.segPrev_ = new GPolyline(segment);
    marker.prev_.segNext_ = marker.segPrev_;
    
    // 将新线段添加到地图中
    me.map_.addOverlay(marker.segPrev_);
  }
  
  // 更新连接后继的线段，与上类似
  if (marker.segNext_ && marker.next_.getLatLng) {
    me.map_.removeOverlay(marker.segNext_);
    segment = [marker.getLatLng(), marker.next_.getLatLng()];
    marker.segNext_ = new GPolyline(segment);
    marker.next_.segPrev_ = marker.segNext_;
    me.map_.addOverlay(marker.segNext_);
  }
}


/**
 * 为信息窗口创建 DOM 对象，包括标记的坐标和“删除”按钮
 * @param {GMarker} marker 对应的标记
 */
GRulerControl.prototype.createInfoWindow_ = function(marker) {
  var me = this;
  
  // 为气泡提示窗口创建动态 DOM 对象，这里我们用 DIV 标签
  var div = document.createElement('div');
  div.style.fontSize = '10.5pt';
  div.style.width = '250px';
  div.appendChild(
    document.createTextNode(me.formatLatLng_(marker.getLatLng())));
    
  var hr = document.createElement('hr');
  hr.style.border = 'solid 1px #cccccc';
  div.appendChild(hr);
  
  // 创建表格
  var Tab = document.createElement('table');
  var Tr1 = Tab.insertRow();
  var Tr2 = Tab.insertRow();
    
  var Td1 = Tr1.insertCell();
  Td1.style.width = '100px';
  var Td2 = Tr1.insertCell();
  var Td3 = Tr1.insertCell();
  
  var Td4 = Tr2.insertCell();
  Td4.style.width = '100px';
  var Td5 = Tr2.insertCell();
  var Td6 = Tr2.insertCell();
  div.appendChild(Tab);
  
  // 添加“上一个”按钮
  if(marker.prev_ != me.head_){
  	var prev = document.createElement('div');
  	prev.innerHTML = me.PREV_TITLE_;
  	prev.style.width = '44px';
  	prev.style.color = '#0000cc';
  	prev.style.cursor = 'pointer';
  	prev.style.textDecoration = 'underline';
  	
  	prev.onclick = function() {
      me.map_.closeInfoWindow();
      marker.prev_.openInfoWindow(me.createInfoWindow_(marker.prev_));
  	};
  	
  	Td4.appendChild(prev);
  }
  
  // 添加“下一个”按钮
  if(marker.next_ != me.tail_){
  	var nxt = document.createElement('div');
  	nxt.innerHTML = me.NEXT_TITLE_;
  	nxt.style.width = '44px';
  	nxt.style.color = '#0000cc';
  	nxt.style.cursor = 'pointer';
  	nxt.style.textDecoration = 'underline';
  	
  	nxt.onclick = function() {
      me.map_.closeInfoWindow();
      marker.next_.openInfoWindow(me.createInfoWindow_(marker.next_));
    };
    
    Td5.appendChild(nxt);
  }
  
  // 添加出行方式提示
  if(marker.next_ != me.tail_){
  	if(marker.method_ == 0){
  		marker.infoWindowDIV_.innerHTML = me.InfoWindow_TIP_;
  	}else{
  		marker.infoWindowDIV_.innerHTML = me.InfoWindow_TEXT_;
  	}
  }else{
  	marker.infoWindowDIV_.innerHTML = (marker.prev_ == me.head_) ? me.InfoWindow_START : me.InfoWindow_DES_;
  }
  Td1.appendChild(marker.infoWindowDIV_);
  
  // 添加出行方式选择
  var bubbleS = document.createElement('select');
		for(var i = 0;i < me.methods_.length; i++){
			bubbleS.add(new Option(me.methods_[i]));
	}
	if(marker.method_ == 0){
		bubbleS.style.background = '#FF8080';
	}else{
		bubbleS.style.background = '#FFFFFF';
	}
	bubbleS.selectedIndex = marker.method_;
	marker.bubbleS_ = bubbleS;
	
	GEvent.addDomListener(bubbleS, 'change', function(){
			marker.selectM_.selectedIndex = bubbleS.selectedIndex;
			marker.selectM_.fireEvent('onchange');
	});
	
	if(marker.next_ != me.tail_){
		Td2.appendChild(bubbleS);
	}
	
  // 创建“删除”按钮
  var lnk = document.createElement('div');
  lnk.innerHTML = me.DELETE_BUTTON_TITLE_;
  lnk.style.width = '29px';
  lnk.style.color = '#0000cc';
  lnk.style.cursor = 'pointer';
  lnk.style.textDecoration = 'underline';
  
  // 为“删除”按钮添加事件处理：调用 removePoint() 并重新计算距离
  lnk.onclick =
    function() {
      me.map_.closeInfoWindow();
      me.removePoint_(marker);
      me.updateDistance_();
    };
  Td6.appendChild(lnk);
  
  // 当用户关闭信息窗口时 Google 地图 API 会自动释放该对象 
  return div;
}


/**
 * 事件处理函数：当用户选择删除标记时被调用，这里要删除与该标记连接的线段
 * @param {GMarker} marker 要删除的标记
 */
GRulerControl.prototype.removePoint_ = function(marker) {
  var me = this;

  // 先从地图上删除该标记
  if(marker.next_ != me.tail_){
  	delSegDiv_(marker.segDiv_);
  }

  if(marker.next_ == me.tail_ && marker.prev_ != me.head_){
  	delSegDiv_(marker.prev_.segDiv_);
  }

  if(marker.prev_ == me.head_ && marker.next_ != me.tail_){
  	marker.next_.getIcon().image = me.DD_START_;
  	me.map_.removeOverlay(marker.next_);
  	me.map_.addOverlay(marker.next_);
  }
  
  me.map_.removeOverlay(marker);
  
  
  // 对于中间结点，还要把它的前驱和后继用线段连接起来
  if (marker.prev_.getLatLng && marker.next_.getLatLng) {
    var segment = [marker.prev_.getLatLng(), marker.next_.getLatLng()];
    var polyline = new GPolyline(segment);
    marker.prev_.segNext_ = polyline;
    marker.next_.segPrev_ = polyline;
    me.map_.addOverlay(polyline);
    
    marker.prev_.disDiv_.innerHTML = me.SEGDIV_TEXT_+me.formatDistance_(marker.next_.segPrev_.getLength());
  }
  marker.prev_.next_ = marker.next_;
  marker.next_.prev_ = marker.prev_;
  
  if (marker.segPrev_)
    me.map_.removeOverlay(marker.segPrev_);
  if (marker.segNext_)
    me.map_.removeOverlay(marker.segNext_);
}

