YAHOO.namespace("mapper.dialog");

// 地図にタグを追加するためのダイアログ
YAHOO.mapper.dialog.AddTagDialog = function(el, userConfig) {
	YAHOO.mapper.dialog.AddTagDialog.superclass.constructor.call(this, el, userConfig);
}

// 継承
YAHOO.extend(YAHOO.mapper.dialog.AddTagDialog, YAHOO.widget.Dialog);

// タグを読み込むモノ
YAHOO.mapper.dialog.AddTagDialog.prototype.mapTag;

// submitすると呼ばれる関数
YAHOO.mapper.dialog.AddTagDialog.prototype.handleSubmit = function() {
  this.submit();
}
// キャンセルすると呼ばれる関数
YAHOO.mapper.dialog.AddTagDialog.prototype.handleCancel = function() {
  this.cancel();
}

// submitのリクエストが成功すると呼ばれる
YAHOO.mapper.dialog.AddTagDialog.prototype.handleSuccess = function(o) {
  o.argument.mapTag.loadTag();
}

// submitが失敗すると呼ばれる関数
YAHOO.mapper.dialog.AddTagDialog.prototype.handleFailure = function(o) {
  alert("タグの追加に失敗しました: " + o.status);
}

// 初期化メソッド
YAHOO.mapper.dialog.AddTagDialog.prototype.init = function(el, userConfig) {
	YAHOO.mapper.dialog.AddTagDialog.superclass.init.call(this, el/*, userConfig*/);  // Note that we don't pass the user config in here yet because we only want it executed once, at the lowest subclass level
	this.cfg.applyConfig( { width : "300px",
	                        fixedcenter : true,
	                        visible : false, 
	                        constraintoviewport : true,
	                        buttons : [ { text:"登録する", handler:this.handleSubmit, isDefault:true },
	                                    { text:"キャンセル", handler:this.handleCancel } ],
	                        lazyload: true,
	                        effect: { effect:YAHOO.widget.ContainerEffect.FADE,
	                                  duration:0.5 } }, true);
	this.mapTag = userConfig.mapTag;
	
	this.callback = {
		success: this.handleSuccess,
		failure: this.handleFailure,
		argument: {mapTag: this.mapTag}
	};
	
	this.render();
}

// 入力チェック
YAHOO.mapper.dialog.AddTagDialog.prototype.validate = function() {
  return true;
}





//
// 地図のタグ一覧をロードして画面に並べるモノ
//
YAHOO.mapper.MapTag = function() {
	this.initialize.apply(this, arguments);
}

YAHOO.mapper.MapTag.prototype = {
	
	listTagElem: "",	// タグを並べて表示するところのDOM要素
	mapId: "",			// 地図ID
	loadUrl: "",		// タグ一覧をロードするページのURL
	tagLink: "",		// ロードされたタグをクリックしたときのリンク先
	
	// タグ一覧をロードしてlistTagElemに表示する
	loadTag: function() {
		
		// タグを並べて表示するところのDOM要素
		var elem = YAHOO.util.Dom.get(this.listTagElem);
		
		// ロードが成功したときのハンドラ
		var handleSuccess = function(o) {
			// タグ一覧を消す
			while(elem.childNodes.length > 0){
				elem.removeChild(elem.lastChild);
			}
			
			// 一覧にタグを追加していく。
			var tags = eval(o.responseText);
			for(var i=0; i<tags.length; i++){
				var tag = tags[i];
				var a = document.createElement("a");
				var t = document.createTextNode(tag.tag);
				a.setAttribute("href", o.argument.tagLink + "?t=" + tag.id);
				a.style.marginRight = "5pt";
				a.appendChild(t);
				elem.appendChild(a);
			}
		}
		// ロードが失敗したときのハンドラ
		var handleFailure = function(o) {
			// タグ一覧を消す
			while(elem.childNodes.length > 0){
				elem.removeChild(elem.lastChild);
			}
			
			var t = document.createTextNode("タグを読み込めませんでした。");
			elem.appendChild(t);
		}
		
		var callback = {
			success: handleSuccess,
			failure: handleFailure,
			argument: {tagLink: this.tagLink}
		};
		var postData = "map_id=" + this.mapId;
		
		var request = YAHOO.util.Connect.asyncRequest('POST', this.loadUrl, callback, postData);
	},

	initialize: function(listTagElem, mapId, loadUrl, tagLink) {
		this.listTagElem = listTagElem;
		this.mapId = mapId;
		this.loadUrl = loadUrl;
		this.tagLink = tagLink;
		
		this.loadTag();
	}
}

