var FFMAP = function(){
  var map;
  var t = 'friends';

  var baseIcon = new GIcon();
  baseIcon.image = 'i/marker.png';
  baseIcon.shadow = 'i/marker_shadow.png';
  baseIcon.iconSize = new GSize(28, 28);
  baseIcon.shadowSize = new GSize(40, 28);
  baseIcon.iconAnchor = new GPoint(10, 26);
  baseIcon.infoWindowAnchor = new GPoint(9, 2);
  baseIcon.infoShadowAnchor = new GPoint(18, 25);

  function getFanfouId(){
    var id = window.location.search;
    return (id == '') ? '' : id.replace('?','');
  }

  function createMarker(point, source) {
    var marker = new GMarker(point, baseIcon);
    GEvent.addListener(marker, "click", function() {
        var tmp = '';
        var c = 0;
        var city = '';
        for (var i = 0, n = source.length; i < n; ++i){
          var s = source[i];
          var p = getPoint(s && s.location);
          var mp = marker.getPoint();
          if (p[0] == mp.lat() && p[1] == mp.lng() && s){
            city = getCity(s.location);
            tmp += '<a href="' 
            + s.url 
            + '" target="_blank"><img src="'
            + s.profile_image_url 
            + '" title="' 
            + s.screen_name 
            + '" /></a>';
            c++;
          }
        }
        tmp = '<div id="flist_w"><h2><em>' + city + '</em> 共有<em>' + c + '</em> 位</h2><div id="flist">' + tmp + '</div>';
        marker.openInfoWindowHtml(tmp);
        var flist = document.getElementById('flist');
        var s = flist.style;
        if (c < 3) {
          s.width = '210px'
            s.height = '65px';
        }
        else if ( c > 3 && c < 8){
          s.width = '410px';
          s.height = '65px'; 
        } else {
          s.width = '410px';
          s.height = '110px';
        }
    });
    return marker;
  }

  function scratchJson(type){
    document.getElementById('mask').style.display = 'block';
    t = 'friends';
    if (type == 'followers')
      t = 'followers';
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = 'http://api.fanfou.com/statuses/' + t + '.json?' + Math.random() + '&callback=FFMAP.getFriendLists' + ((getFanfouId() == '') ? '' : ('&id=' + getFanfouId()));
    document.getElementsByTagName('head')[0].appendChild(s);
  }

  function getCity(l){
    if (l == '') {
      return '地球上';
    } else {
      var prv = l && l.split(' ') && l.split(' ')[0];
      if (prv == '北京' || prv == '上海' || prv == '天津' || prv == '重庆')
        return prv;
    }
    return l;
  }

  function getPoint(l){
    var addr;
    var prv = l && l.split(' ') && l.split(' ')[0];
    if (prv == '北京' || prv == '上海' || prv == '天津' || prv == '重庆'){
      addr = prv;
    } else {
      addr = l && l.replace(/\s/g, '');
    }
    if (CNLatLng[addr]){
      return CNLatLng[addr];
    } else {
      return [21.22, 140];//地球上
    }
  }

  function toggle(){
    var t = document.getElementById('toggle').getElementsByTagName('button'); 
    var fri = t[0],
        fol = t[1];
    fri.onclick = function(){
      scratchJson('friends');
    }
    fol.onclick = function(){
      scratchJson('followers');
    }
    fri.onclick();
  }

  return {
getFriendLists: function(source){
                  var n = source.length;
                  if (n == 0) {
                    alert('不存在这个饭否用户，或者该用户的朋友/关注者数量为零');
                    document.getElementById('mask').style.display = 'none';
                    return;
                  }
                  for (var i = 0; i < n; ++i){
                    var addr = source[i] && source[i].location;
                    var point = getPoint(addr);
                    map.addOverlay(createMarker(new GLatLng(point[0], point[1]), source));
                  }
                  var countinfo = document.getElementById('countinfo');
                  var name = getFanfouId() == '' ? '您' : getFanfouId();
                  countinfo.innerHTML = '<strong>' + name + '</strong> 共有 <strong>' + n + '</strong> 位' + (t == 'friends' ? '饭友' : '关注者');
                  document.getElementById('mask').style.display = 'none';
                },
init: function(){
        if (GBrowserIsCompatible()) {
          map = new GMap2(document.getElementById('map'));
          map.setCenter(new GLatLng(34.68491,112.47605), 4);//洛阳真的是中国的中心吗，呵呵
          map.addControl(new GLargeMapControl());
          map.addControl(new GOverviewMapControl());
          toggle();
        } else {
          alert("对不起，您的浏览器不支持本站的功能，建议使用开源好用的Firefox: http://getfirefox.com");
        }
      }
  }
}();
