var _searchId = null;
var _tagList = [];
var _logined = false;
var _messageTime = 3000;
var _cursor = null;

window.onload = function()
{
	_searchId = $('search');

	if(!_searchId) return;

	_getTagList();

	_panelInit();

	_cursor = new CrbCursor("cursor");
};

var _getTagList = function()
{
	if(!$("logined")) return;
	_logined = true;

	var param = $H({
		r : Math.random()
	});
	_httpRequest("/search/tagList/", param.toQueryString(), _tagListInit);
}

var _tagListInit = function(json)
{
	var response = eval("(" + json.responseText + ")");
	if(response.err == "0"){
		_tagList = response.data.tags;
		_readInit();
	}
	return;
}

var _panelInit = function()
{
	var list = $A(_searchId.getElementsByTagName('li'));
	list.each(function(elm){
		var openElm, closeElm;
		var item = elm.getElementsByTagName('h2');
		if(!item.length) return;

		for(var i=0; i<item.length; i++){
			if(item[i].className == 'open texts'){
				openElm = item[i];
				continue;
			}
			if(item[i].className == 'close texts'){
				closeElm = item[i];
				continue;
			}
		}
		
		if(!openElm || !closeElm) return;
		var panel = new CrbSearchPanel(openElm);
		panel.addCusor(openElm);
		panel.addCusor(closeElm);
		panel.addCloseItem(closeElm);

	});
	CrbSearchPanel.spinner = '<img src="/images/loading.gif" width="126" height="10" alt="NOW LOADING" />';
}

var _readInit = function()
{
	var elms = $A(_searchId.getElementsByTagName('a'));
	elms.each(function(elm){
		if(!elm.href.match("#read")) return;
		var targetId = $("b" + elm.getAttribute("num"));
		var btnId = $("btn" + elm.getAttribute("num"));
		var siteUrl = elm.getAttribute("url");
		var obj = new CrbRegistPanel(elm, targetId, btnId, siteUrl);
		_addTitle(obj);
	});
}

var _addTitle = function(obj)
{
	obj.title = obj.elm.getAttribute("sub");
	if(!obj.title) return;

	if(!CrbRegistPanel.titles[obj.title]){
		CrbRegistPanel.titles[obj.title] = [obj];
		return;
	}
	CrbRegistPanel.titles[obj.title].push(obj);
}

// -----------------------------------------------------------

var CrbRegistPanel = Class.create();
CrbRegistPanel.titles = {};
CrbRegistPanel.prototype = {
	initialize : function(elm, targetId, btnId, siteUrl){
		this.elm = elm;
		this.targetId = targetId;
		this.btn = btnId;
		this.siteUrl  = siteUrl;
		this.title    = this.elm.getAttribute("sub");
		this.elm.onclick = this.change.bindAsEventListener(this);
		this.btn.onclick = this.registFromBtn.bindAsEventListener(this);
		this._closed = true;
		this._registed = false;
		Element.setStyle(this.targetId, {"display" : "none"});
	},

	change : function(event){
		Event.stop(event);
		this._closed == true? this.openPanel() : this.closePanel();
	},

	openPanel : function(){
		if(!this.targetId) return;
		this.targetId.innerHTML = CrbRegistPanel.getTemplate(this.siteUrl);
		Element.setStyle(this.targetId, {"display" : "block"});
		this._closed = false;
		this._changeImage();
		this._setFormEvent();
	},

	closePanel : function(){
		if(!this.targetId) return;
		this.targetId.innerHTML = '';
		Element.setStyle(this.targetId, {"display" : "none"});
		this._closed = true;
		this._changeImage();
	},

	_changeImage : function(){
		if(this._closed == true){
			this.elm.innerHTML = '<img src="/images/search_icon_11.gif" width="87" height="17" alt="このサイトを購読" />';
		} else {
			this.elm.innerHTML = '<img src="/images/search_icon_12.gif" width="57" height="17" alt="キャンセル" />';
		}
	},

	_setFormEvent : function(){
		if(!this.targetId) return;
		var forms = $A(this.targetId.getElementsByTagName("form"));
		for(var i=0; i<forms.length; i++){
			if(forms[i].getAttribute("name") == "newTag"){
				Event.observe(forms[i], 'submit', this._newRegist.bindAsEventListener(this), false);
			} else if(forms[i].getAttribute("name") == "oldTag"){
				Event.observe(forms[i], 'submit', this._oldRegist.bindAsEventListener(this), false);
			}
		}
	},

	registFromBtn : function(event){
		Event.stop(event);
		var param = "tid=0&feedUrl=" + this.siteUrl;
		var cursor = '<span class="onlayer text"><img src="/images/regist-loader.gif" width="24" height="24" /> loading ...</span>';
		_cursor.run(cursor);
		param += "&r=" + Math.random();
		_httpRequest("/search/oldRegist/", param, this._registComplete.bindAsEventListener(this));
	},

	_newRegist : function(event){
		Event.stop(event);
		var form = Event.element(event);
		var offset = Position.cumulativeOffset(form);
		CrbRegistPanel.setLoader(offset);

		var param = Form.serialize(form);
		param += "&feedUrl=" + this.siteUrl;
		param += "&r=" + Math.random();

		_httpRequest("/search/newRegist/", param, this._registComplete.bindAsEventListener(this));
	},

	_oldRegist : function(event){
		Event.stop(event);
		var form = Event.element(event);
		var offset = Position.cumulativeOffset(form);
		CrbRegistPanel.setLoader(offset);

		var param = Form.serialize(form);
		param += "&feedUrl=" + this.siteUrl;
		param += "&r=" + Math.random();
		_httpRequest("/search/oldRegist/", param, this._registComplete.bindAsEventListener(this));
	},

	_registComplete : function(json){
		var response = eval("(" + json.responseText + ")");
		var msgNode = this.elm.parentNode;
		CrbRegistPanel.clearLoader();

		// cursor
		var cursorMsg = '<span class="onlayer text">' + response.msg + '</span>';
		_cursor.run(cursorMsg);
		_cursor.clear.callTimeout(_messageTime, _cursor);

		if(response.err == "0"){
			if(response.data && response.data.tags){
				_tagList = response.data.tags;
			}
			this.deleteRegistPanel();
			this._registed = true;
			_outputMessage(response.msg, msgNode, _messageTime);
			CrbRegistPanel.clearButton(this.title);
			return;
		}
		_outputMessage(response.msg, msgNode, _messageTime);
	},

	deleteRegistPanel : function(){
		if(this._registed == true) return;
		Event.stopObserving(this.elm, 'click', this.change.bindAsEventListener(this), false);
		Event.stopObserving(this.btn, 'click', this.registFromBtn.bindAsEventListener(this), false);
		Element.remove(this.targetId);
		Element.remove(this.elm);
		CrbRegistPanel.replaceBtn(this.btn);
	}
}

CrbRegistPanel.replaceBtn = function(btn)
{
	if(!btn) return;
	var parent = btn.parentNode;
	if(!parent) return;
	var img = document.createElement("img");
	img.src = "/images/btn01a.gif";
	img.className = "btn";
	img.setAttribute("width", 40);
	img.setAttribute("height", 19);
	img.setAttribute("alt", "購読済み");
	parent.replaceChild(img, btn);
}

CrbRegistPanel.getTemplate = function(url)
{
	var html = "";
	html += '<p>マイページのカテゴリを選択 : </p>';
	html += '<div class="formbox02">';
	html += '<form name="oldTag">';
	html += '<select name="tid">';
	for(var i=0; i<_tagList.length; i++){
		html += '<option value="' + _tagList[i].tag_id + '">' + _tagList[i].name + '</option>';
	}
	html += '</select>';
	html += '<input class="btn01" type="submit" value="OK" />';
	html += '</form>';
	html += '<p>マイページに新しいカテゴリを作成 : </p>';
	html += '<form name="newTag">';
	html += '<input type="text" name="tname" value="" size="30"/><input class="btn01" type="submit" value="OK" />';
	html += '</form>';
	html += '</div>';
	return html;
}

CrbRegistPanel.clearButton = function(key)
{
	if(!key) return;
	if(!CrbRegistPanel.titles[key]) return;
	for(var i=0; i<CrbRegistPanel.titles[key].length; i++){
		var obj = CrbRegistPanel.titles[key][i];
		obj.deleteRegistPanel();
		CrbRegistPanel.replaceBtn(obj.btn);
	}
	delete(CrbRegistPanel.titles[key]);
}

CrbRegistPanel.setLoader = function(offset)
{
	var id = $("loader");
	if(!id) return;
	Element.setStyle(id, {"top" : offset[1] + "px", "left" : "550px"});
	id.innerHTML = '<img src="/images/regist-loader.gif" />';
}

CrbRegistPanel.clearLoader = function()
{
	var id = $("loader");
	if(!id) return;
	id.innerHTML = '';
}


// --- other ------------------------------------------------------------

var _httpRequest = function(url, param, callback, loading, cache)
{
	var ajax = new Ajax.Request(
						url,
						{
							method : "get",
							parameters : param,
							onLoading  : loading,
							onComplete : callback
						}
					);
}

var _outputMessage = function(msg, elm, time)
{
	if(!msg || !elm) return;

	var p = document.createElement("p");
	p.innerHTML = msg;
	Element.setStyle(p, {"color" : "c9d7f1"});
	elm.appendChild(p);

	if(time){
		_clearMessage.callTimeout(time, this, p);
	}
}

var _clearMessage = function(p)
{
	Element.remove(p);
}
