/*
 * RakuyaMapExt.js
 *
 * Rakuya 自定的地圖延伸應用，base on Google Maps API
 *
 * 用了兩個 global variables:
 * 1. RA_Map_Func
 * 2. RA_InfoWin
 */

/* --------------------------------------------------------------------------------------
 * RA_Map_Func
 *
 * 一些可獨立呼叫的程式
 *
 */

RA_Map_Func = {
  createDivElement: function(styles) {
    var d = document.createElement('div');
    for (var el in styles) {
        d.style[el] = styles[el];
    }
    return d;
  },

  //上個物件
  itemPrevious: function() {
    var controller = document.getElementById('RAMAP_multi_item_controller');

    //index變動
    var span = controller.getElementsByTagName('span')[0];
    var template = controller.getAttribute('template');
    var n = parseInt(controller.getAttribute('n'), 10);
    var t = parseInt(controller.getAttribute('t'), 10);
    n -= 1;
    if (n < 1) n = t;
    span.innerHTML = template.replace('{n}', n).replace('{t}', t);
    controller.setAttribute('n', n);

    //內容變動 (把最後一個放到第一個)
    var container = document.getElementById('RAMAP_multi_item_container');
    var firstLi = container.childNodes[t - 1];
    container.insertBefore(firstLi, container.childNodes[0]);
  },

  //下個物件
  itemNext: function() {
    var controller = document.getElementById('RAMAP_multi_item_controller');

    //index變動
    var span = controller.getElementsByTagName('span')[0];
    var template = controller.getAttribute('template');
    var n = parseInt(controller.getAttribute('n'), 10);
    var t = parseInt(controller.getAttribute('t'), 10);
    n += 1;
    if (n > t) n = 1;
    span.innerHTML = template.replace('{n}', n).replace('{t}', t);
    controller.setAttribute('n', n);

    //內容變動 (把第一個放到最後一個)
    var container = document.getElementById('RAMAP_multi_item_container');
    var firstLi = container.childNodes[0];
    container.appendChild(firstLi);
  },

  //設定 zIndex:
  setZIndex: function(marker) {
    if (marker.RA_opts == null) return 0;
    return marker.RA_opts.zIndex;
  }

};


/* --------------------------------------------------------------------------------------
 * RA_InfoWin
 *
 * 自訂的訊息視窗
 *
 */
GMarker.prototype.RA_opts = null; //存放 marker 的相關設定

GMarker.prototype.RA_bindInfoWin = function(map) {
  this.RA_map = map;  //GMarker 的 map 應該是 this.c, 但這是混淆後的變數, 不保證後面的版本都可用
  this.RA_who = 'This is GMarker!';

  //第一次 bind infoWin 時會把 RA_InfoWin 建立起來
  if (typeof this.RA_map.RA_infoWin == 'undefined') {
    this.RA_map.RA_infoWin = new RA_InfoWin();
    map.addOverlay(this.RA_map.RA_infoWin);
  }

  GEvent.addListener(this, "mouseover", function() {
    this.RA_map.RA_infoWin.openWin(this);
  });
};

//將 marker 移動到地圖中心並顯示 infoWin
GMarker.prototype.RA_showInfoWin = function() {
  /*
  //Note: 若要平滑移動，則需注意 RA_infoWin.openWin() 本身也會計算位置並移動，需避免相衝突
  //panTo
  this.RA_map.panTo(new GLatLng(this.RA_opts.lat, this.RA_opts.lng));
  //show infoWin (延遲觸發以避免衝突)
  var that = this;
  setTimeout(function() {
    that.RA_map.RA_infoWin.openWin(that);
  }, 250)
  */

  //改用直接 center
  this.show();
  this.RA_map.setCenter(new GLatLng(this.RA_opts.lat, this.RA_opts.lng));
  this.RA_map.RA_infoWin.openWin(this);
};

function RA_InfoWin(opts) {
  this.map = null;
}
RA_InfoWin.prototype = new GOverlay();

RA_InfoWin.prototype.initialize = function(map) {
  this.setting = {
    w: 600,   /* initial 的大小要夠大，iepngfix 才有辦法正確運作 */
    h: 600,
    shadow_w: 6,
    shadow_h: 6,
    anchor_w: 17,
    anchor_h: 16,
    anchor_real_h: 9,
    anchor_real_overlap: 3,
    close_w: 12,
    close_h: 13,
    close_padding_top: 3,
    close_padding_right: 2,
    content_padding: 5
  };
  this.map = map;
  this.createWin();
  map.getPane(G_MAP_FLOAT_PANE).appendChild(this.elm);
};

RA_InfoWin.prototype.remove = function() {
  this.elm.parentNode.removeChild(this.elm);
};

RA_InfoWin.prototype.redraw = function(force) {
  if (!force) return;
  //TODO: 若有需要在 zoomin zoomout 時仍維持 RA_InfoWin 的呈現位置，可覆寫此 function
};

//建立相關 elements 並給 event handler
RA_InfoWin.prototype.createWin = function() {
  //一開始結構就要先完整出來， iepngfix 才有辦法正確運作
	this.elm = RA_Map_Func.createDivElement({
		position: 'absolute',
		width: this.setting.w + 'px',
		height: this.setting.h + 'px',
		padding: '0',
		margin: '0',
		visibility: 'hidden',
		cursor: 'default'
	});
	//左上
	this.elm_tl = RA_Map_Func.createDivElement({
		position: 'absolute',
		top: '0',
		left: '0',
		width: (this.setting.w - this.setting.shadow_w) + 'px',
		height: (this.setting.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll',
		padding: '0',
		margin: '0'
	});
	//右上
	this.elm_tr = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: (this.setting.w - this.setting.shadow_w - 1) + 'px',
		top: '0',
		width: this.setting.shadow_w + 'px',
		height: (this.setting.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll -793px 0',
		padding: '0',
		margin: '0',
		overflow: 'hidden'
	});
	this.elm_tr.className = 'RA_iepngfix';
  //左下
	this.elm_bl = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: '0',
		top: (this.setting.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px',
		width: (this.setting.w - this.setting.shadow_w) + 'px',
		height: this.setting.shadow_h + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll 0 -771px',
		padding: '0',
		margin: '0',
		overflow: 'hidden'
	});
	this.elm_bl.className = 'RA_iepngfix';
  //右下
	this.elm_br = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: (this.setting.w - this.setting.shadow_w) + 'px',
		top: (this.setting.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px',
		width: this.setting.shadow_w + 'px',
		height: this.setting.shadow_h + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll -794px -771px',
		padding: '0',
		margin: '0'
	});
	this.elm_br.className = 'RA_iepngfix';
  //箭頭
	this.elm_anchor = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: (Math.round(this.setting.w/2 - this.setting.anchor_w/2)) + 'px',
		top: (this.setting.h - this.setting.anchor_real_h) + 'px',
		width: this.setting.anchor_w + 'px',
		height: this.setting.anchor_h + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll 0 -780px',
		padding: '0',
		margin: '0'
	});
	this.elm_anchor.className = 'RA_iepngfix';
	//內容
	this.elm_content = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: this.setting.content_padding + 'px',
		top: this.setting.content_padding + 'px',
		width: (this.setting.w - this.setting.shadow_w - this.setting.content_padding) + 'px',
		height: (this.setting.w - this.setting.shadow_h - this.setting.content_padding) + 'px',
		padding: '0',
		margin: '0',
		overflow: 'auto'
	});
  //關閉
	this.elm_close = RA_Map_Func.createDivElement({
		position: 'absolute',
		left: (this.setting.w - this.setting.shadow_w - this.setting.close_w - this.setting.close_padding_right) + 'px',
		top: this.setting.close_padding_top + 'px',
		width: this.setting.close_w + 'px',
		height: this.setting.close_h + 'px',
		background: 'transparent url(/images/maps/bubble_bg01.png) no-repeat scroll -24px -780px',
		padding: '0',
		margin: '0',
		cursor: 'pointer',
		fontSize: '0' /* for IE6 */
	});

  this.elm.appendChild(this.elm_tl);
  this.elm.appendChild(this.elm_tr);
  this.elm.appendChild(this.elm_bl);
  this.elm.appendChild(this.elm_br);
  this.elm.appendChild(this.elm_anchor);
  this.elm.appendChild(this.elm_content);
  this.elm.appendChild(this.elm_close);

	var that = this;

  //zoomin zoomout 時關閉視窗，否則info視窗位置會跑掉 (或是要覆寫 GOverlay.redraw 也是可以)
	GEvent.addListener(this.map, 'zoomend', function() {
		that.hide();
	});
	//地圖拖曳時就隱藏，避免 Firefox 上面的靈異現象
	GEvent.addListener(this.map, 'drag', function() {
		that.hide();
	});

	//關閉info視窗用
	GEvent.addDomListener(this.elm_close, 'click', function(e) {
	  that.hide();
	  that.stopPropagation(e);
	});

  var stealEvents = ['mousedown', 'dblclick', 'DOMMouseScroll'];
  for( i=0; i < stealEvents.length; i++ ){
    GEvent.bindDom(this.elm, stealEvents[i], this, this.stopPropagation);
  }
};

RA_InfoWin.prototype.stopPropagation = function(e) {
  if(navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  } else {
    //e.preventDefault();
    e.stopPropagation();
  }
};

//由 marker 帶入 options 後決定顯示視窗的大小、位置和內容
RA_InfoWin.prototype.openWin = function(marker) {

  //調整視窗大小並移動視窗位置
  this._openWinResizeAndMove(marker);

  //內容
  this.elm_content.innerHTML = this._openWinPrepareContent(marker);

  //顯示
  this.elm.style.visibility = 'visible';
  this.elm.style.display = 'block';

  //拉回地圖顯示範圍內
  this._openWinPanInside(marker);
};

//處理顯示內容
RA_InfoWin.prototype._openWinPrepareContent = function(marker) {
  var content = marker.RA_opts.infoWin.content;
  //判斷資料是某為陣列
  if (Object.prototype.toString.call(content) !== "[object Array]") {
    return content;
  }
  //多組資料時:
  var template = marker.RA_opts.infoWin.controller_template || '{n} of {t}';
  var counts = content.length;

  var multiItemContent = [
    '<div id="RAMAP_multi_item">',
      '<p id="RAMAP_multi_item_controller" template="' + template + '" n="1" t="' + counts + '">',
        '<img src="/images/maps/infoWinArrowRight.png" class="RAMAP_hand" onclick="javascript:RA_Map_Func.itemPrevious();" />',
        '<img src="/images/maps/infoWinArrowLeft.png"  class="RAMAP_hand" onclick="javascript:RA_Map_Func.itemNext();" />',
        '<span>' + template.replace('{n}', 1).replace('{t}', counts) + '</span>',
      '</p>',
      '<ul id="RAMAP_multi_item_container">'
  ];
  for (i = 0; i < content.length; ++i) {
    multiItemContent.push('<li>');
    multiItemContent.push(content[i]);
    multiItemContent.push('</li>');
  }
  multiItemContent.push('</ul>');
  multiItemContent.push('</div>');
  return multiItemContent.join('');
};

//調整視窗大小並移動視窗位置
RA_InfoWin.prototype._openWinResizeAndMove = function(marker) {
  var map = this.map;
  var infoWin = map.RA_infoWin;   //InfoWin
  var setting = infoWin.setting;  //InfoWin 的設定
  var opts = marker.RA_opts;      //marker 的選項
  var icon = opts.icon;           //marker 的 icon

  var iconAnchorPoint = map.fromLatLngToDivPixel(new GLatLng(opts.lat, opts.lng));  //本 icon 代表的點
  var anchorPoint = new GPoint(
      iconAnchorPoint.x - icon.iconAnchor.x + icon.infoWindowAnchor.x,
      iconAnchorPoint.y - icon.iconAnchor.y + icon.infoWindowAnchor.y); //icon 與 infoWin 的接點

  //調整視窗大小
  this.elm.style.width = opts.infoWin.w + 'px';
	this.elm.style.height = opts.infoWin.h + 'px';
  this.elm_tl.style.width = (opts.infoWin.w - this.setting.shadow_w) + 'px';
	this.elm_tl.style.height = (opts.infoWin.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px';

	this.elm_tr.style.left = (opts.infoWin.w - this.setting.shadow_w - 1) + 'px';
	this.elm_tr.style.width = this.setting.shadow_w + 'px';
	this.elm_tr.style.height = (opts.infoWin.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px'

	this.elm_bl.style.top     = (opts.infoWin.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px';
	this.elm_bl.style.width   = (opts.infoWin.w - this.setting.shadow_w) + 'px';
	this.elm_bl.style.height  = this.setting.shadow_h + 'px';

	this.elm_br.style.left    = (opts.infoWin.w - this.setting.shadow_w) + 'px';
	this.elm_br.style.top     = (opts.infoWin.h - this.setting.shadow_h - this.setting.anchor_real_overlap) + 'px';
	this.elm_br.style.width   = this.setting.shadow_w + 'px';
	this.elm_br.style.height  = this.setting.shadow_h + 'px';

	this.elm_content.style.width  = (opts.infoWin.w - this.setting.shadow_w - this.setting.content_padding * 2) + 'px';
  this.elm_content.style.height = (opts.infoWin.h - this.setting.shadow_h - this.setting.anchor_real_h - this.setting.content_padding) + 'px';

  //位置
	this.elm_anchor.style.left    = (Math.round(opts.infoWin.w/2 - this.setting.anchor_w/2)) + 'px';
	this.elm_anchor.style.top     = (opts.infoWin.h - this.setting.anchor_real_h) + 'px';

	this.elm_close.style.left    = (opts.infoWin.w - this.setting.shadow_w - this.setting.close_w - this.setting.close_padding_right) + 'px';
	//this.elm_close.style.top     = this.setting.close_padding_top + 'px';

  infoWin.elm.style.left = (anchorPoint.x - Math.round(opts.infoWin.w/2)) + 'px';
  infoWin.elm.style.top = (anchorPoint.y - Math.round(opts.infoWin.h)) + 'px';
};

//拉回地圖顯示範圍內
RA_InfoWin.prototype._openWinPanInside = function(marker) {
  var map = this.map;
  var infoWin = map.RA_infoWin;   //InfoWin
  var setting = infoWin.setting;  //InfoWin 的設定
  var opts = marker.RA_opts;      //marker 的選項
  var icon = opts.icon;           //marker 的 icon

  var iconAnchorPoint = map.fromLatLngToDivPixel(new GLatLng(opts.lat, opts.lng));  //本 icon 代表的點
  var anchorPoint = new GPoint(
      iconAnchorPoint.x - icon.iconAnchor.x + icon.infoWindowAnchor.x,
      iconAnchorPoint.y - icon.iconAnchor.y + icon.infoWindowAnchor.y); //icon 與 infoWin 的接點

  var bounds = map.getBounds();
  var viewportBottomLeft = map.fromLatLngToDivPixel(bounds.getSouthWest());
  var viewportTopRight = map.fromLatLngToDivPixel(bounds.getNorthEast());

  //上邊界的範圍
  var infoWinTop = anchorPoint.y - opts.infoWin.h;
  var viewportTop = viewportTopRight.y + 10;
  //下邊界的範圍
  var infoWinBottom = iconAnchorPoint.y;
  var viewportBottom = viewportBottomLeft.y - 10;

  //左、右邊界的範圍
  var infoWinLeft = anchorPoint.x - Math.round(opts.infoWin.w/2);
  var infoWinRight = anchorPoint.x + Math.round(opts.infoWin.w/2);
  var viewportLeft = viewportBottomLeft.x + 10;
  var viewportRight = viewportTopRight.x - 10;
  if ((infoWinTop < viewportTop) || (infoWinBottom > viewportBottom) || (infoWinLeft < viewportLeft) || (infoWinRight > viewportRight)) {
    var centerPoint = map.fromLatLngToDivPixel(map.getCenter());
    //超過的部份
    if (infoWinTop < viewportTop) {
      centerPoint.y -= (viewportTop - infoWinTop);
    } else if (infoWinBottom > viewportBottom) {
      centerPoint.y += (infoWinBottom - viewportBottom);
    }
    if (infoWinLeft < viewportLeft) {
      centerPoint.x -= (viewportLeft - infoWinLeft);
    } else if (infoWinRight > viewportRight) {
      centerPoint.x += (infoWinRight - viewportRight);
    }
    map.panTo(map.fromDivPixelToLatLng(centerPoint));
  }
};

//關閉 (隱藏)
RA_InfoWin.prototype.hide = function() {
  this.elm.style.visibility = 'hidden';
  this.elm.style.display = 'none';
};

/*
 * 存放各種自訂 marker 的資料
 */
GMap2.prototype.RA_Marker_Data = {};

/*
 * RA_putMark
 *
 * opts 包含了 icon 和 infoWin 所需要的資料
 */
GMap2.prototype.RA_putMark = function(opts) {
  opts.lng = parseFloat(opts.lng, 10);
  opts.lat = parseFloat(opts.lat, 10);
  if (!(opts.lng > 100 && opts.lng < 200 && opts.lat > 10 && opts.lat < 50)) return false;

  var tmpLngLat = new GLatLng(opts.lat, opts.lng);
  if (typeof opts.zIndex != 'undefined' && opts.zIndex > 0)
    var tmpMark = new GMarker(tmpLngLat, {icon: opts.icon, zIndexProcess:RA_Map_Func.setZIndex});
  else
  var tmpMark = new GMarker(tmpLngLat, opts.icon);
  this.addOverlay(tmpMark);

  //存起來, show/hide 用
  if (typeof opts.group == 'undefined' || opts.group == '') {
    opts.group = 'RA_DEFAULT_GROUP';
  }
  if (!(opts.group in this.RA_Marker_Data))
    this.RA_Marker_Data[opts.group] = [];
  this.RA_Marker_Data[opts.group].push(tmpMark);

  tmpMark.RA_opts = opts;       //儲存設定
  tmpMark.RA_bindInfoWin(this); //bind infoWin

  //調整 infoWin 的寬高 ()
  if (typeof opts.infoWin != 'undefined') {
    if (Object.prototype.toString.call(opts.infoWin.content) === "[object Array]") {
      opts.infoWin.content_w = opts.infoWin.w;
      opts.infoWin.content_h = opts.infoWin.h;
      opts.infoWin.w += 18;
      opts.infoWin.h += 43;
    } else {
      opts.infoWin.w += 18;
      opts.infoWin.h += 22;
    }
  }

  if ('show' in opts && opts.show == false) tmpMark.hide();
  return tmpMark;
};

/*
 * RA_putItem
 *
 * 處理 item 的格式, 組 content data
 */
GMap2.prototype.RA_putItem = function(itemData, opts) {
  return this.RA_putMark({
    lat: itemData.lat,
    lng: itemData.lng,
    icon: opts.icon,
    zIndex: itemData.zIndex || -1,
    group: opts.group,
    show: ('show' in opts) ? opts.show : true,
    infoWin: {
      w: opts.width || 200,
      h: opts.height || 104,
      content: this.RA_composeItemContent(itemData)
    }
  });
};
GMap2.prototype.RA_composeItemContent = function(itemData) {
  if (itemData.cnt && itemData.cnt > 1) {
    var rtn = [];
    for (var i = 0; i < itemData.items.length; ++i) {
      rtn.push(this.RA_getItemContentFormat(itemData.items[i]));
    }
    return rtn;
  }
  return this.RA_getItemContentFormat(itemData);
};
GMap2.prototype.RA_getItemContentFormat = function(itemData) {
  //relative url
  var url = ('hurl' in itemData ?
    itemData.hurl :
    (itemData.objind.toUpperCase() == 'R' ? '/rent_item/show/' : '/item/showx/') + itemData.ehid);

  var rtn = [
  '<div class="RAMAP_item_container">',
    '<h5><a href="', url ,'" title="', itemData.hname, '" target="_blank">', itemData.hname, '</a></h5>',
    '<h6><a href="', url ,'" title="', itemData.hname, '" target="_blank"><img src="', itemData.himg, '" /></a></h6>',
    '<ul>',
      /* ('addr' in itemData ? '<li>' + itemData.addr + '</li>' : ''), */
      (itemData.objind.toUpperCase() == 'R' ? '<li>租金：' + itemData.rental + '</li>' : '<li>總價：' + itemData.listprice + '</li>'),
      '<li>坪數：', itemData.totalsize, '坪</li>',
      (itemData.bedrooms > 0 || itemData.livingrooms > 0 || itemData.bathrooms > 0 ? '<li>格局：' + itemData.bedrooms + '房' + itemData.livingrooms + '廳' + itemData.bathrooms + '衛</li>' : ''),
    '</ul>',
    '<p>',
      (typeof jQuery != 'undefined' && typeof Base64 != 'undefined' && typeof addFav != 'undefined' && typeof itemData.isClosed == 'undefined') ? '<span class="add_fav" onclick="javascript:addFav(\'' + itemData.ehid + '\')" class="RAMAP_hand"><a href="javascript:void(0)">加入追蹤</a></span> &nbsp; &nbsp; ' : '',
      '<span class="detail"><a href="', url ,'" title="', itemData.hname, '" target="_blank">詳細資料</a></span>&nbsp;',
    '</p>',
  '</div>'];
  return rtn.join('');
};

/*
 * RA_putItems
 *
 * 處理 array
 */
GMap2.prototype.RA_putItems = function(items, opts) {
  opts = opts || {};
  opts._icon = opts.icon;
  var rtn = [];
  for (var idx in items) {
    if (items[idx].cnt && items[idx].cnt > 1 && 'multiIcon' in opts) {
      opts.icon = opts.multiIcon;
      rtn.push(this.RA_putItem(items[idx], opts));
    } else {
      opts.icon = opts._icon;
      rtn.push(this.RA_putItem(items[idx], opts));
    }
  }
  return rtn;
};


/*
 * RA_putFC
 *
 * 處理 FC 的格式, 組 content data
 */
GMap2.prototype.RA_putFC = function(fcData, opts) {
  return this.RA_putMark({
    lat: fcData.lat,
    lng: fcData.lng,
    icon: opts.icon,
    zIndex: fcData.zIndex || -1,
    group: opts.group,
    show: ('show' in opts) ? opts.show : true,
    infoWin: {
      w: opts.width || 200,
      h: opts.height || 104,
      content: this.RA_composeFCContent(fcData)
    }
  });
};
GMap2.prototype.RA_composeFCContent = function(fcData) {
  if (fcData.cnt && fcData.cnt > 1) {
    var rtn = [];
    for (var i = 0; i < fcData.items.length; ++i) {
      rtn.push(this.RA_getFCContentFormat(fcData.items[i]));
    }
    return rtn;
  }
  return this.RA_getFCContentFormat(fcData);
};
GMap2.prototype.RA_getFCContentFormat = function(fcData) {
  //relative url
  var url = ('hurl' in fcData ? fcData.hurl : '/fc/show/' + fcData.ehid);
  if(typeof fcData.objind == 'undefined'){
	  var rtn = [
	  '<div class="RAMAP_item_container">',
	    '<h5><a href="', url ,'" title="', fcData.case_addr, '" target="_blank">', fcData.case_addr, '</a></h5>',
	    '<h6><a href="', url ,'" title="', fcData.case_addr, '" target="_blank"><img src="', fcData.himg, '" /></a></h6>',
	    '<ul>',
	      '<li>底價：', fcData.total_price, '</li>',
	      '<li>拍數：', fcData.bid_count, '</li>',
	      '<li>狀態：', fcData.bid_status, '</li>',
	    '</ul>',
	    '<p>',
	      (typeof jQuery != 'undefined' && typeof Base64 != 'undefined' && typeof addFavFC != 'undefined') ? '<span class="add_fav" onclick="javascript:addFavFC(\'' + fcData.ehid + '\')" class="RAMAP_hand"><a href="javascript:void(0)">加入追蹤</a></span> &nbsp; &nbsp; ' : '',
	      '<span class="detail"><a href="', url ,'" title="', fcData.case_addr, '" target="_blank">詳細資料</a></span>&nbsp;',
	    '</p>',
	  '</div>'];
	}else{
	  var rtn = [
	  '<div class="RAMAP_item_container">',
	    '<h5><a href="', url ,'" title="', fcData.hname, '" target="_blank">', fcData.hname, '</a></h5>',
	    '<h6><a href="', url ,'" title="', fcData.hname, '" target="_blank"><img src="', fcData.himg, '" /></a></h6>',
	    '<ul>',
	      (fcData.objind.toUpperCase() == 'R' ? '<li>租金：' + fcData.rental + '</li>' : '<li>總價：' + fcData.listprice + '</li>'),
	      '<li>坪數：', fcData.totalsize, '坪</li>',
	      (fcData.bedrooms > 0 || fcData.livingrooms > 0 || fcData.bathrooms > 0 ? '<li>格局：' + fcData.bedrooms + '房' + fcData.livingrooms + '廳' + fcData.bathrooms + '衛</li>' : ''),
	    '</ul>',
	    '<p>',
	      (typeof jQuery != 'undefined' && typeof Base64 != 'undefined' && typeof addFav != 'undefined' && typeof fcData.isClosed == 'undefined') ? '<span class="add_fav" onclick="javascript:addFav(\'' + fcData.ehid + '\')" class="RAMAP_hand"><a href="javascript:void(0)">加入追蹤</a></span> &nbsp; &nbsp; ' : '',
	      '<span class="detail"><a href="', url ,'" title="', fcData.hname, '" target="_blank">詳細資料</a></span>&nbsp;',
	    '</p>',
	  '</div>'];
	}
  return rtn.join('');
};

/*
 * RA_putFCs
 *
 * 處理 array
 */
GMap2.prototype.RA_putFCs = function(fcs, opts) {
  opts = opts || {};
  opts._icon = opts.icon;
  var rtn = [];
  for (var idx in fcs) {
    if (fcs[idx].cnt && fcs[idx].cnt > 1 && 'multiIcon' in opts) {
      opts.icon = opts.multiIcon;
      rtn.push(this.RA_putFC(fcs[idx], opts));
    } else {
      opts.icon = opts._icon;
      rtn.push(this.RA_putFC(fcs[idx], opts));
    }
  }
  return rtn;
};


/*
 * RA_putJOB
 *
 * 處理 FC 的格式, 組 content data
 */
GMap2.prototype.RA_putJOB = function(jobData, opts) {
  return this.RA_putMark({
    lat: jobData.lat,
    lng: jobData.lng,
    icon: opts.icon,
    zIndex: jobData.zIndex || -1,
    group: opts.group,
    show: ('show' in opts) ? opts.show : true,
    infoWin: {
      w: opts.width || 200,
      h: opts.height || 104,
      content: this.RA_composeJOBContent(jobData)
    }
  });
};
GMap2.prototype.RA_composeJOBContent = function(jobData) {
  if (jobData.cnt && jobData.cnt > 1) {
    var rtn = [];
    for (var i = 0; i < jobData.items.length; ++i) {
      rtn.push(this.RA_getJOBContentFormat(jobData.items[i]));
    }
    return rtn;
  }
  return this.RA_getJOBContentFormat(jobData);
};
GMap2.prototype.RA_getJOBContentFormat = function(jobData) {
  //relative url
  var jobs = '';
  for( job in jobData.jobs ){
    jobs += '<li style="overflow:hidden;"><a href="' + jobData.jobs[job].job_url + '" target="_blank" onclick="RKY.GA.click(\'map_main\');">' + jobData.jobs[job].job_title + '</a></li>';
  }
  var rtn = [
  '<div class="RAMAP_item_container">',
    '<h5><a href="'+ jobData.curl +'" target="_blank" onclick="RKY.GA.click(\'map_main\');">'+ jobData.name +'</a></h5>',
    '<ul style="float:none;width:195px">',
      jobs,
    '</ul>',
    '<p style="text-align:right"><a href="'+ jobData.curl +'" target="_blank" onclick="RKY.GA.click(\'map_main\');">更多工作機會&gt;</a></p>',
  '</div>']
  return rtn.join('');
};

/*
 * RA_putJOBSs
 *
 * 處理 array
 */
GMap2.prototype.RA_putJOBSs = function(jobs, opts) {
  opts = opts || {};
  opts._icon = opts.icon;
  var rtn = [];
  for (var idx in jobs) {
    if (jobs[idx].cnt && jobs[idx].cnt > 1 && 'multiIcon' in opts) {
      opts.icon = opts.multiIcon;
      rtn.push(this.RA_putJOB(jobs[idx], opts));
    } else {
      opts.icon = opts._icon;
      rtn.push(this.RA_putJOB(jobs[idx], opts));
    }
  }
  return rtn;
};


/*
 * RA_putPOI
 *
 * 組 content data, 儲存至 array
 */
GMap2.prototype.RA_putPOI = function(poiData, opts) {
  opts.width = opts.width || 200;
  opts.height = opts.height || 100;
  return this.RA_putMark({
    lat: poiData.lat,
    lng: poiData.lng,
    icon: opts.icon,
    zIndex: poiData.zIndex || -1,
    show: ('show' in opts) ? opts.show : true,
    group: opts.group,
    infoWin: {
      w: opts.width,
      h: opts.height,
      content: this.RA_getPOIContentFormat(poiData, opts)
    }
  });
};

GMap2.prototype.RA_getPOIContentFormat = function(poiData, opts) {
  //title 固定高度 20px;
  if(typeof poiData.curl!='undefined'){
    poiData.title = '<a style="color:#1A8DD7;" href="'+ poiData.curl +'" target="_blank" onclick="RKY.GA.click(\'map_poi\');">'+ poiData.title +'</a>';
    poiData.content += '<p style="float:right;color:#1A8DD7;"><a href="'+ poiData.curl +'" target="_blank" onclick="RKY.GA.click(\'map_poi\');">查看公司基本資料及職缺&gt;</a></p>';
  };
  return ['<div class="RAMAP_poi_container">',
            '<div class="RAMAP_poi_title" style="width: ', opts.width, 'px">',
              poiData.title ,
            '</div>',
            '<div class="RAMAP_poi_content" style="width ', opts.width, 'px; height: ', (opts.height - 20) ,'px">',
              poiData.content,
            '</div></div>'
         ].join('');
};

/*
 * RA_putPOIs
 *
 * 處理 array
 */
GMap2.prototype.RA_putPOIs = function(pois, opts) {
  var rtn = [];
  for (var idx in pois) {
    rtn.push(this.RA_putPOI(pois[idx], opts));
  }
  return rtn;
};

/*
 * RA_showMarker/RA_hideMarker
 */
GMap2.prototype.RA_showMarker = function(group) {
  if (!(group in this.RA_Marker_Data)) return;
  for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
    this.RA_Marker_Data[group][i].show();
  }
};
GMap2.prototype.RA_hideMarker = function(group) {
  if (!(group in this.RA_Marker_Data)) return;
  for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
    this.RA_Marker_Data[group][i].hide();
  }
  this.RA_infoWin.hide();
};

/*
 * (DEPRECIATED!) RA_showPOI/RA_hidePOI
 */
GMap2.prototype.RA_showPOI = function(group) {
  if (!(group in this.RA_Marker_Data)) return;
  for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
    this.RA_Marker_Data[group][i].show();
  }
};
GMap2.prototype.RA_hidePOI = function(group) {
  if (!(group in this.RA_Marker_Data)) return;
  for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
    this.RA_Marker_Data[group][i].hide();
  }
  this.RA_infoWin.hide();
};

/*
 * RA_putNC/RA_putNCs
 */
GMap2.prototype.RA_putNC = function(ncData, opts) {
  if (!('hurl' in ncData) || ncData.hurl == '' || ncData.hurl == '#') {
    var himg = '<img src="'+ ncData.himg +'" border="0" title="'+ ncData.hname +'" />';
    var hname = '<li>' + ncData.hname + '</li>';
  } else {
    var himg = '<a href="'+ ncData.hurl +'" title="'+ ncData.hname +'"><img src="'+ ncData.himg +'" border="0" /></a>';
    var hname = '<li><a href="'+ ncData.hurl +'" title="'+ ncData.hname +'">'+ ncData.hname +'</a></li>';
  }
  var tel = 'tel' in ncData && ncData.tel != '' ? '<li>' + ncData.tel + '</li>' : '';
  var type = 'type' in ncData && ncData.type != '' ? '<li>' + ncData.type + '</li>' : '';

  return this.RA_putMark({
    lat: ncData.lat,
    lng: ncData.lng,
    icon: opts.icon,
    group: opts.group,
    show: ('show' in opts) ? opts.show : true,
    infoWin: {
      w: 126,
      h: 170,
      content: ['<div class="RAMAP_nc_container">',
                  '<h6><table cellspacing="0" cellpadding="0" height="90px"><tr><td valign="center">', himg, '</td></tr></table></h6>',
                  '<ul>',
                    hname,
                    '<li>', ncData.cityarea ,'</li>',
                    type,
                    tel,
                  '</ul>',
                '</div>'].join('')
    }
  });
};
GMap2.prototype.RA_putNCs = function(ncs, opts) {
  var rtn = [];
  for (var idx in ncs) {
    rtn.push(this.RA_putNC(ncs[idx], opts));
  }
  return rtn;
};

GMap2.prototype.RA_removeMarks = function(group) {
  if (typeof group != 'undefined') {
    if (group in this.RA_Marker_Data) {
      //remove overlay
      for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
        this.removeOverlay(this.RA_Marker_Data[group][i]);
      }
      //delete
      delete this.RA_Marker_Data[group];
    }
  } else {
    //remove all
    for (var group in this.RA_Marker_Data) {
      for (var i = 0; i < this.RA_Marker_Data[group].length; ++i) {
        this.removeOverlay(this.RA_Marker_Data[group][i]);
      }
    }
    //delete all
    delete this.RA_Marker_Data;
    this.RA_Marker_Data = {};
  }
  this.RA_infoWin.hide();
};


if (window.console && window.console.firebug) {
  //alert('請先關閉 Firebug 以便正常瀏覽本站所提供的地圖功能。');
}
