// -----------------------------------------------------------------------
// TINAMI Comike Map System Ver 2006.10.31
// (c) 2006 TINAMI. All rights reserved.
// CircleInfo.js: サークル情報を表示する
// -----------------------------------------------------------------------
var CircleInfo = Class.create();
CircleInfo.prototype = {
  initialize: function (map_id)
  {
  // 表示する対象のdiv
    this.MapID = map_id;
  // サークル情報が開いていればTrue
    this.isOpen = false;
  // 表示位置
    this.panel = new Rectangle(10, 38, 452, 200);
  // イメージがない場合の代替イメージ
    this.blankimage = '/comike/img/0.gif';
  },

  // クリックした位置のサークル情報を取得する
  open: function (comike_no, day, area, x, y)
  {
    var url = 'getcircle.php';
    var param = 'comike_no=' + comike_no + '&day=' + day + '&area=' + area + '&x=' + x + '&y=' + y;
    var myAjax = new Ajax.Request( url, { 
      method: 'get', parameters: param, onComplete: _getCircleComplete });
  },

  // IDからサークル情報を取得する
  openById: function (id)
  {
    var url = 'getcircle.php';
    var param = 'id=' + id;
    var myAjax = new Ajax.Request( url, { 
      method: 'get', parameters: param, onComplete: _getCircleComplete });
  },

  // サークル情報を開く (circle.openCircleから呼び出される）
  _openCirclePanel: function (circle) {
    // 既にパネルを表示している場合、一度削除
    if (this.isOpen) {
      this.close();
    }

    // パネルを作成して表示
    var div = document.createElement("div");
    div.setAttribute("id", "circle");
    if (navigator.appVersion.indexOf("Mac") > -1) {
      div.style.height = "202px";
    }

    // イメージ
    var div_image = document.createElement("div");
    div_image.setAttribute("id", "image");
    var image = document.createElement("img");
    var circle_imageurl = (circle.imageurl ? circle.imageurl : this.blankimage);
    image.setAttribute("src", circle_imageurl);
    image.setAttribute("width", circle.width);
    image.setAttribute("height", circle.height);
    image.setAttribute("lowsrc", this.blankimage);
    div_image.appendChild(image);
    div.appendChild(div_image);

    // サークル情報
    var div_state = document.createElement("div");
    div_state.setAttribute("id", "state");

    //　よみがな
    var cyomi = document.createElement("p");
    cyomi.setAttribute("id", "cyomi");
    cyomi.appendChild(document.createTextNode(circle.cyomi));
    div_state.appendChild(cyomi);

    // サークル名（リンク付き）
    var linktitle = document.createElement("p");
    linktitle.setAttribute("id", "linktitle");
    if (circle.url) {
    	var linktitle_anchor = document.createElement("a");
    	linktitle_anchor.setAttribute("href", circle.url);
    	linktitle_anchor.setAttribute("target", "_blank");
	    linktitle_anchor.appendChild(document.createTextNode(circle.name));
    	linktitle.appendChild(linktitle_anchor);
    } else {
	    linktitle.appendChild(document.createTextNode(circle.name));
    }
    div_state.appendChild(linktitle);

    // 主催者名
    var circle_name = document.createElement("p");
    circle_name.setAttribute("id", "name");
    if (circle.prof_id) {
    	var circle_anchor = document.createElement("a");
    	circle_anchor.setAttribute("href", "/creator/profile/" + circle.prof_id);
    	circle_anchor.setAttribute("target", "_blank");
	    circle_anchor.appendChild(document.createTextNode(circle.owner));
    	circle_name.appendChild(circle_anchor);
    	circle_name.appendChild(document.createTextNode(" さん "));
    } else {
	    var circle_owner = (circle.owner ? circle.owner + " さん " : " ");
    	circle_name.appendChild(document.createTextNode(circle_owner));
    }
    div_state.appendChild(circle_name);

    // サークル位置
    var space = document.createElement("p");
    space.setAttribute("id", "space");
    space.appendChild(document.createTextNode(circle.space));
    div_state.appendChild(space);

    // コメント
    var comment_form = document.createElement("form");

    var comment = document.createElement("textarea");
    comment.setAttribute("id", "comment");
    comment.setAttribute("readonly", "yes");
    if (navigator.appVersion.indexOf("Mac") > -1) {
      comment.style.fontSize = "11px";
      comment.style.height = "87px";
    }
    // <br>タグを改行コードに置換する
    var comment_text = circle.comment;
    comment_text = comment_text.replace(/<br \/>/g, "");	// new version
    comment_text = comment_text.replace(/<br>/g, "\r\n");		// old version
    comment.value = comment_text;
    comment_form.appendChild(comment);

    div_state.appendChild(comment_form);
    div.appendChild(div_state);

	// リンク用パネル
    var div_links = document.createElement("div");
    div_links.setAttribute("id", "links");
    // コメントを書く
    div_links.appendChild(this._createComment(circle.id));
    // Trackback
    div_links.appendChild(this._createTrackBack(circle.trackback));
    // このサークルへのマップ上のリンク
    div_links.appendChild(this._createParmalink(circle.id));
    // 閉じる
    div_links.appendChild(this._createCloseButton());
    div.appendChild(div_links);

  // 画面に表示
    this.instance = div;
    $('circleinfo').appendChild(this.instance);
    this.isOpen = true;
  },

// サークル情報を閉じる
  close: function ()
  {
    if (this.isOpen) {
      this.instance.style.visibility = 'hidden'; // for Opera
      $('circleinfo').removeChild(this.instance);
      this.isOpen = false;
    }
  },

  // パネルはクリックされているか？
  isClick: function (clientX, clientY)
  {
    return (this.isOpen && this.panel.isClick(clientX, clientY)) ? true : false;
  },

  // 未登録スペース表示
  _openNoEntryCirclePanel: function(circle)
  {
    // 既にパネルを表示している場合、一度削除
    if (this.isOpen) {
      this.close();
    }

    // パネルを作成して表示
    var div = document.createElement("div");
    div.setAttribute("id", "nodata-circle");
    if (navigator.appVersion.indexOf("Mac") > -1) {
      div.style.width = "335px";
      div.style.marginLeft = "75px";
    }
    
    // サークル位置
    var space = document.createElement("p");
    space.setAttribute("id", "space");
    space.appendChild(document.createTextNode(circle.space));
    div.appendChild(space);

    // コメントを書く
    div.appendChild(this._createComment(circle.id));
    // Trackback
    div.appendChild(this._createTrackBack(circle.trackback));
    // このサークルへのマップ上のリンク
    div.appendChild(this._createParmalink(circle.id));
    // 閉じる
    div.appendChild(this._createCloseButton());

  // 画面に表示
    this.instance = div;
    $('circleinfo').appendChild(this.instance);
    this.isOpen = true;
  },

  // トラックバック表示
  _createTrackBack: function(trackback)
  {
    var linktb_anchor = document.createElement("a");
    linktb_anchor.setAttribute("id", "tb");
    linktb_anchor.setAttribute("href", "JavaScript:void(0)");
    linktb_anchor.appendChild(document.createTextNode("トラックバック(" + trackback + ")"));
    if (navigator.userAgent.indexOf("MSIE") != -1) {
      linktb_anchor.setAttribute('onclick', function() { control.showTrackbackInfo(true); });
    } else {
      linktb_anchor.setAttribute("onClick", "control.showTrackbackInfo(true);");
    }
    return linktb_anchor;
  },

  // コメントへのリンク
  _createComment: function(id)
  {
    var link = "/comike/bbs/" + id;
    var link_anchor = document.createElement("a");
    link_anchor.setAttribute("id", "comment");
    link_anchor.setAttribute("href", link);
    link_anchor.setAttribute("target", "_blank");
    link_anchor.appendChild(document.createTextNode("コメントを書く"));
    return link_anchor;
  },

  // マップへのリンク
  _createParmalink: function(id)
  {
    var linkmap = "/comike/map/?id=" + id;
    var linkmap_anchor = document.createElement("a");
    linkmap_anchor.setAttribute("id", "parmalink");
    linkmap_anchor.setAttribute("href", linkmap);
    linkmap_anchor.setAttribute("target", "_parent");
    if (navigator.userAgent.indexOf("MSIE") == -1) {
      linkmap_anchor.setAttribute("onMouseUp", "_openSiteToSelf(event, '" + linkmap + "');");
    }
    linkmap_anchor.appendChild(document.createTextNode("マップへのリンク"));
    return linkmap_anchor;
  },

  // 閉じるボタン
  _createCloseButton: function()
  {
    var closed = document.createElement("input");
    closed.setAttribute("id", "closed");
    closed.setAttribute("type", "button");
    closed.setAttribute("value", "閉じる");
    if (navigator.userAgent.indexOf("MSIE") != -1) {
      closed.setAttribute('onclick', function() { control.closeCircleInfo(); });
    } else {
      closed.setAttribute("onClick", "control.closeCircleInfo();");
    }
    return closed;
  }
};

// -----------------------------------------------------------------------
// 新しいウィンドウでURLを開く(Global)
function _openCircleSite(event, url)
{
  if (event.button < 2) {
    window.open(url, "site");
  }
}

// 親ウィンドウでURLを開く(Global)
function _openSiteToSelf(event, url)
{
  if (event.button < 2) {
    parent.location.href = url;
  }
}

// サークル情報取得 (Global)
function _getCircleComplete(Request) {
  var circle;
  var responseText;
  try {
    var xmlDoc = Request.responseXML;
    responseText = xmlDoc.documentElement.firstChild.nodeValue;
    circle = eval('(' + responseText + ')');
  } catch(e) {
    _MapInternalErrorMsg("データ解析時に異常が発生しました", e, responseText, '_getCircleComplete');
    return ;
  }

  // サークル情報を保存
  control.circleInfo.circle = circle;

  if (circle.found) {
    // サークル情報がある場合、サークル情報を開く
    control.openCircleInfo(circle);
  } else {
    // サークル情報がなく、ID指定で開かれた場合のみ、リンクのみを通知するウィンドウを開く
    if (/* control.openByIdNow && */ circle.id) {
      control.openCircleNoEntry(circle);
    }
  }
  // サークルスペースをクリックされた場合、トラックバック情報を開く
  if (circle.id) {
    control.showTrackbackInfo(false);
  }
  control.openByIdNow = false;
}

