function getInnerText (node) {
  switch (node.nodeType) {
  case 3:
  case 4:
    return node.nodeValue;
    break;
  case 1:
  case 11:
    var innerText = '';
    for (var i = 0; i < node.childNodes.length; i++) {
      innerText += getInnerText(node.childNodes[i]);
    }
    return innerText;
    break;
  default:
      return '';
  }
}
function makeRequest(url, handler, param, sync) {
  var request = false;
  if (typeof(sync) == 'undefined') sync = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    request = new XMLHttpRequest();
    if (request.overrideMimeType) {
      request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }

  if (!request) {
    return false;
  }
  if (!sync) {
    request.onreadystatechange = function () {
      if (param) {
	eval(handler + "(" + param + ", request);");
      } else {
	eval(handler + "(request);");
      }
    }
  }
  request.open('GET', url, !sync);
  request.send(null);
  if (sync) {
    if (param) {
      eval(handler + "(" + param + ", request);");
    } else {
      eval(handler + "(request);");
    }
  }
}
function showquery(which) {
  document.getElementById("showquery").value = which;
  for (var i=0;i<3;++i) {
    var anchor = document.getElementById("anchor_query_" + i);
    var img = document.getElementById("img_query_" + i);
    var content = document.getElementById("content_query_" + i);
    if (which == i) {
      anchor.style.display = "none";
      img.style.display = "";
      content.style.display = "";
    } else {
      anchor.style.display = "";
      img.style.display = "none";
      content.style.display = "none";
    }
  }
}
function categorychange(level, all) {
  var sender = document.getElementById("category" + level);
  var target = document.getElementById("category" + (level + 1));
  while (target.lastChild) {target.removeChild(target.lastChild);}
  if (all) {
    var allcat = document.createElement("option");
    allcat.setAttribute("value", "-1");
    allcat.appendChild(document.createTextNode("全部子行业"));
    target.appendChild(allcat);
  }
  makeRequest("ajax/subcategory.php?id=" + sender.options[sender.selectedIndex].value, "replaceOptions", "'category" + (level + 1) + "'");
}
function replaceOptions(id, http_request) {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      var nodes = http_request.responseXML.documentElement.childNodes;
      var target = document.getElementById(id);
      for (var i=0;i<nodes.length;++i) {
        var option = document.createElement("option");
        option.setAttribute("value", nodes.item(i).getAttribute("id"));
        option.appendChild(document.createTextNode(getInnerText(nodes.item(i))));
        target.appendChild(option);
      }
      if (target.onchange) {
        target.onchange();
      }
    }
  }
}
function areachange(level,maxlevel) {
  areachange(level, maxlevel, ['全国','全省','全市']);
}
function areachange(level,maxlevel,areadescription) {
  var sender = document.getElementById("area" + level);
  for (var i=level+1;i<=maxlevel;++i) {
    var target = document.getElementById("area" + i);
    while (target.lastChild) {target.removeChild(target.lastChild);}
    if (areadescription.length > i) {
      var allcat = document.createElement("option");
      allcat.setAttribute("value", "-2");
      allcat.appendChild(document.createTextNode(areadescription[i]));
      target.appendChild(allcat);
    }
  }
  makeRequest("ajax/subarea.php?id=" + sender.options[sender.selectedIndex].value, "replaceOptions", "'area" + (level + 1) + "'");
}
function submitQuery(sync) {
  var url = "ajax/query.php?keyword=" + encodeURIComponent(document.getElementById("keyword").value) + "&category0=" + document.getElementById("category0").value + "&category1=" + document.getElementById("category1").value;
  makeRequest(url, "querySubmitted", false, sync);
}
function redirectSearch() {
  document.getElementById("redirectsearch").submit();
}
function querySubmitted(http_request) {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      refreshMapItems();
    }
  }
}
function showChinaMap() {
  map.centerAndZoom(new LTPoint(10395648, 3301376), 13);
}
function jumpArea(sync) {
  var id = "-1";
  for (var i = 2; i >= 0; --i) {
    var obj = document.getElementById("area" + i);
    if (obj && obj.selectedIndex != 0) {
      id = obj.options[obj.selectedIndex].value;
      break;
    }
  }
  if (id != "-1") {
    makeRequest("ajax/areasize.php?id=" + id, "handleJumpArea", false, sync);
  } else {
    showChinaMap();
  }
}
    
function getZoomUnits(scale)
{
  var str=new Array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768);
  return str[parseInt(scale)] * 256 / 200.0;
};
function getZoomUnitsDesired(scale)
{
  var str=new Array(2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384);
  return str[parseInt(scale)];
}
function handleJumpArea(http_request) {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      var nodes = http_request.responseXML.documentElement.childNodes;
      var latTop = parseFloat(nodes.item(0).getAttribute("minLatitude"));
      var lagTop = parseFloat(nodes.item(0).getAttribute("minLongitude"));
      var latBottom = parseFloat(nodes.item(0).getAttribute("maxLatitude"));
      var lagBottom = parseFloat(nodes.item(0).getAttribute("maxLongitude"));
      var zoom = 14;
      var obj = document.getElementById("map");
      for (var i = 0; i < 15; ++i) {
	if ((Math.abs(latBottom - latTop)/getZoomUnits(i)<=parseInt(obj.style.height)) && (Math.abs(lagBottom - lagTop)/getZoomUnits(i)<=parseInt(obj.style.width))) {
	  zoom = i;
	  break;
	}
      }
                
      map.centerAndZoom(new LTPoint((lagTop + lagBottom)/2, (latTop + latBottom)/2), zoom);
    }
  }
}
var centerPoint;
var zoomFactor;
function refreshMapItems() {
  centerPoint = null;
}
function notifyMapChange() {
  var cp = map.getCenterPoint();
  var zoom = map.getCurrentZoom();
  if (centerPoint) {
    if ((centerPoint.getLatitude() == cp.getLatitude()) &&
	(centerPoint.getLongitude() == cp.getLongitude()) &&
	(zoomFactor == zoom)) {
      window.setTimeout("notifyMapChange()", 1000);
      return;
    }
  }
  centerPoint = cp;
  zoomFactor = zoom;
  var obj = document.getElementById("map");
  var mapWidth = parseInt(obj.style.width) * getZoomUnits(zoom);
  var mapHeight = parseInt(obj.style.height) * getZoomUnits(zoom);
  var minX = cp.getLongitude() - mapWidth / 2;
  var maxX = minX + mapWidth;
  var minY = cp.getLatitude() - mapHeight / 2;
  var maxY = minY + mapHeight;
  for (var i=0;i<13;++i) {
    if (getZoomUnits(zoomFactor) < getZoomUnitsDesired(i+1)) {
      zoom = i;
      break;
    }
  }
  if (document.getElementById("keyword").value.replace(/^\s+|\s+$/, '') != "") zoom = 0;
  makeRequest("ajax/location.php?minX="+minX+"&minY="+minY+"&maxX="+maxX+"&maxY="+maxY+"&zoom="+zoom, "handleMapItems");
}
var items = new Array();
var markers = new Array();

function Item(aId, aItemType, aItemName) {
  this.id = aId;
  this.itemType = aItemType;
  this.itemName = aItemName;
}
    
function MapCoord(lat, lag, type, text) {
  this.lat = lat;
  this.lag = lag;
  this.type = type;
  this.text = text;
  this.count = 0;
}
    
var iconHeight = new Array(18,15, 8, 5, 5);
var iconWidth = new Array(18,10, 8, 5, 5);
var coord = new Array();
var count = 0;
    
function handleMapItems(http_request) {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      map.clearOverLays();
      var nodes = http_request.responseXML.documentElement.childNodes;
                
      var temp = new Array();
      items.length = nodes.length;
                
      for (var i = 0; i < nodes.length; ++i) {
	var node = nodes.item(i);
	var id = node.getAttribute("id");
	var lat = parseInt(node.getAttribute("latitude"));
	var lag = parseInt(node.getAttribute("longitude"));
	var itemType = parseInt(node.getAttribute("servicelevel"));
	var itemName = getInnerText(node.getElementsByTagName("name").item(0));
	// Save info
	items[i] = new Item(id, itemType, itemName);
	// Build the tag
	var mapitem = temp[lat + "&" + lag];
	if (!mapitem) {
	  mapitem = new MapCoord(lat, lag, 99, "");
	  temp[lat + "&" + lag] = mapitem;
	}
					
	if (mapitem.type > itemType) mapitem.type = itemType;
	mapitem.count++;
	mapitem.text += "<a href=\"location.php?id=" + id + "\" target=\"_blank\">" + itemName + "</a><br/>";
      }

      coord.length = temp.length;
      markers.length = coord.length;
      var count = 0;

      for (var key in temp) {
	coord[count++] = temp[key];
      }
				
      window.setTimeout("addIcons(0)", 1);
    }
  }
}
    
function addIcons(count) {
  while(count < coord.length) {
    // Tag
    var icon = new LTIcon();
    var item = coord[count];
    icon.setImageUrl("images/level" + item.type + ".gif");
    icon.setWidth(iconWidth[item.type+1]);
    icon.setHeight(iconHeight[item.type+1]);
    markers[count] = new LTMarker(new LTPoint(item.lag, item.lat), icon);
    map.addOverLay(markers[count]);
    var size = item.count * 16;
    if (size > 160) size = 160;
    size += 40;
    // Pop up window
    LTEvent.addListener(markers[count], "mouseover",
			new Function("LTMarker.setInfoWinHeight(" + size + "); markers["+count+"].openInfoWinHtml('" + item.text + "'); return true;"));
    ++count;
    if (count % 10 == 0) break;
  }

  if (count == coord.length) {
    reloadInfoFrame();
  } else {
    window.setTimeout("addIcons("+count+")", 1);
  }
}
    
var currentPage = 0;
var itemsPerPage = 20;
    
function getTotalPage() {
  return Math.ceil((items.length + 0.0) / itemsPerPage);
}
    
function reloadInfoFrame() {
  currentPage = 0;
  displayInfoFrame();
  window.setTimeout("notifyMapChange()", 1000);
}
    
function nextPageInfoFrame() {
  if (currentPage < getTotalPage() - 1) {
    ++currentPage;
    displayInfoFrame();
  }
}
    
function previousPageInfoFrame() {
  if (currentPage > 0) {
    --currentPage;
    displayInfoFrame();
  }
}
    
function gotoPageInfoFrame(page) {
  if (currentPage != page) {
    currentPage = page;
    displayInfoFrame();
  }
}
    
function displayInfoFrame() {
  var totalPage = getTotalPage();
        
  // Build navigation bar
  var navigation = document.getElementById("navigation");
  var html = "<span>第" + (currentPage + 1) + "/" + totalPage + "页</span> <a href='javascript:void(0)' onclick='previousPageInfoFrame();'>上一页</a>";
  /*        
  for (var i = 0; i < totalPage; ++i) {
    html += " <a href='javascript:void(0)' onclick='gotoPageInfoFrame(" + i + ");'>" + (i + 1) + "</a>";
  }
  */    
  html += " <a href='javascript:void(0)' onclick='nextPageInfoFrame();'>下一页</a>";
        
  navigation.innerHTML = html;
        
  // Display the information window
  var info = document.getElementById("infoFrame");
  html = "<table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  for (var i = 0; i < itemsPerPage; ++i) {
    var itemIndex = currentPage * itemsPerPage + i;
    if (itemIndex >= items.length) {
      html += "<tr><td>&nbsp;</td></tr>";
    } else {
      var item = items[itemIndex];
      html += "<tr><td colspan='2' align='left'><a href='location.php?id=" + item.id + "' target='_blank'>" + item.itemName + "</a></td></tr>";
    }
  }
  info.innerHTML = html + "</table>";
}
