﻿/*---- suggest.js ----*/
var suggest_bar	=
{
	inputbar		: null,
	key				: "",
	mode			: "tag",
	attr_name		: "",
	container_top	: null,
	container_left	: null,
	bar_width		: '',
	bar_height		: '',
	ul_id			: 'suggest_ul',
	container		: null,
	catchData		: new Array(),
	split_str		: new Array(),
	onclick_href	: null,
	time_out_MSEL	: 100,
	lotim			: null,
	init			: function(key, mode, attr_name)
	{
		if(mode)
		{
			this.mode		= mode;
		}
		if(attr_name)
		{
			this.attr_name	= attr_name;
		}
		else
		{
			this.attr_name	='';
		}
		this.key						= key;
		this.inputbar					= getObject(this.key);
		this.container.style.innerHTML	= '';
		this.container.style.display	= 'none';
		this.container.style.overflow	= 'hidden';
		this.container.style.height		= '';
		var _this						= this;
		this.s_input_li_class			= 's_input_li';
		this.c_num						= 10;

		this.inputbar.setAttribute('autocomplete', 'off');
		this.inputbar.onkeydown			= function(e)
		{
			/*
			if(_this.container.style.display=='none')
			{
				return true;
			}
			*/
			_this.doselect(e);
			if(e)
			{
				var kc		= e.which;
				var ent		= e;
			}
			else
			{
				var kc		= event.keyCode;
				var ent		= event;
			}
			clearTimeout(_this.lotim);
			_this.lotim=setTimeout('suggest_bar.doinput('+kc+')', _this.time_out_MSEL);
			if(kc==13)
			{
				_this.pass_enter(ent);
			}
		}
		document.body.onmousedown		= function()
		{
			_this.container.style.display	= 'none';
			_this.container.innerHTML			= 'none';
			suggest_bar.select_on					= null;
		}

		this.pass_enter			= function(ent)
		{
			if(ent.stopPropagation)
			{
				ent.stopPropagation();
				ent.preventDefault();
			}
			else
			{
				event.cancelBubble	= true;
				event.returnValue	= false;
			}
			if(suggest_bar.container)
			{
				suggest_bar.container.style.display	= 'none';
			}
		};
		this.select_up_down		= function(select_on,kc)
		{
		};
		this.showlist_custom_container	= function(i)
		{
		}
		this.select_enter		= function(select_on)
		{
			if(getObject('s_input_li_'+select_on))
			{
				getObject('s_input_li_'+select_on).onmousedown();
			}
		};

		this.select_mousedown	= function()
		{
		};
		this.custom_split		= function(str, split_str)
		{
			var x	= 0;
			for(i in split_str)
			{
				for(var s=0; s<str.length; s++)
				{
					if(str.substr(s, 1) == split_str[i])
					{
						x	= s+1;
					}
				}
				if(x>0)
				{
					break;
				}
			}
			return x;
		}

		this.before_select_mousedown	= function(start_str,end_str)
		{
			return false;
		};

		this.no_json_list				= function(key)
		{
			this.catchData[this.key + this.mode + this.attr_name][key]	= 1;
			if(this.tempbar==key)
			{
				this.container.style.display	= 'none';
				this.select_on	= null;
				this.json.list	= Array();
			}
		};
		var tmp_str	= this.inputbar.value.replace(/(^\s)/g, '');
		tmp_str		= tmp_str.replace(/(\s$)/g, '');
		this.word_array			= tmp_str.split(' ');

		this.spacebar_custom_handle	= function()
		{
		};

		this.spacebar_handle		= function()
		{
			var tmp_str			= this.inputbar.value.replace(/(^\s)/g, '');
			tmp_str				= tmp_str.replace(/(\s$)/g, '');
			this.word_array		= tmp_str.split(' ');
			this.spacebar_custom_handle();
			return false;
		};

		this.no_value			= function(e)
		{
			this.container.style.display	= 'none';
			this.select_on		= null
			return false;
		};

		this.page_url_custom_link		= function(page_url, i)
		{
			var page_url_link	= "<span id='span_s_input_li_" + i + "' class='suggest_guokai_ico'><a href='" + page_url + "' target='_blank' onmousedown='suggest_bar.onclick_href=1;'><img src='/images/suggest_ico.gif'></a></span>";
			return 	page_url_link;
		}
		this.account_place();
	},
	//计算位置
	account_place	: function()
	{
		if(!this.place_inputbar)
		{
			this.place_inputbar		= getObject(this.key);
		}
		var border_s	= getBorder(this.place_inputbar);
		if(border_s.border_width)
		{
			this.container.style.border		= border_s.border_width + ' ' + border_s.border_style + ' ' + border_s.border_color;
		}
		xy			= getPos(this.place_inputbar);
		var is_ie	= getOs() == 'MSIE';
		if(is_ie)
		{
			var width	= border_s.border_width ? border_s.border_width : 0;
			xy.r_left	-= parseInt(width);
			xy.r_top	= xy.r_top - 2;
		}
		var	getw		= getWidth(this.place_inputbar) - 2 > 0 ? getWidth(this.place_inputbar) - 2 : getWidth(this.place_inputbar);
		this.container.style.width	= getw + "px";
		this.container.style.top	= (xy.r_top + 2 + getHeight(this.place_inputbar)) + "px";
		this.container.style.left	= xy.r_left + "px";
		this.place_inputbar			= null;
	},
	word_array		: new Array(),
	select_on		: null,
	select_restrict	: 10,
	//接收上下左右键
	doselect		: function(e)
	{
		var kc	= 0;
		if(!e)
		{
			kc	= event.keyCode;
		}
		else
		{
			kc	= e.which;
		}
		if(!(kc == 38 || kc == 40 || kc == 13 || kc == 27 || kc == 9))
		{
			return false;
		}
		if(!(this.json&&this.json.list.length))
		{
			if(kc != 13)
			{
				return false;
			}
		}
		switch(kc)
		{
			case 27:
			case 9:
				this.container.style.display	= 'none';
				this.select_on	= null;
				break;
			case 38:
				if(this.select_on == null || this.select_on == 0)
				{
					this.select_on		= this.select_restrict;
				}
				else
				{
					this.select_on--;
				}
				if(getObject("s_input_li_" + this.select_on))
				{
					getObject("s_input_li_" + this.select_on).onmouseover();
				}
				this.select_up_down(this.select_on, kc);
				break;
			case 40:
				if(this.select_on == this.select_restrict || this.select_on == null)
				{
					this.select_on	= 0;
				}
				else
				{
					this.select_on++;
				}
				if(getObject("s_input_li_" + this.select_on))
				{
					getObject("s_input_li_" + this.select_on).onmouseover();
				}
				this.select_up_down(this.select_on, kc);
				break;
			case 13:
				this.select_enter(this.select_on);
				break;
		}
		return true;
	},
	tempbar			: "",
	//接收字母 ajax给服务器
	doinput			: function(e)
	{
		var kc		= 0;
		if(typeof e == 'number')
		{
			kc		= e;
		}
		else
		{
			if(!e)
			{
				kc	= event.keyCode;
			}
			else
			{
				kc	= e.which;
			}
		}
		if(kc == 38 || kc == 40 || kc == 13|| kc == 27 || kc == 9 || kc == 39 || kc == 37)
		{
			return false;
		}
		if(kc == 32)
		{
			return this.spacebar_handle();
		}
		this.tempbar	= this.inputbar.value;
		if(this.tempbar.length != 0)
		{
			if(this.split_str[0])
			{
				this.tempbar	= this.getSplit(this.tempbar, this.split_str, 0);
			}
		}
		this.tempbar	= this.tempbar.replace(/(^\s)/g, '');
		this.tempbar	= this.tempbar.replace(/(\s$)/g,'');
		if(this.tempbar.length == 0)
		{
			if(!this.no_value(e))
			{
				return false;
			}
		}
		var cjson	= this.getcatchData(this.tempbar);
		if(cjson!=null)
		{
			//no value cache
			if(cjson==1)
			{
				this.container.style.display	= 'none';
				this.select_on	= null;
				this.json		= null;
				return true;
			}
			else
			{
				this.json		= cjson;
			}
			this.showList(cjson);
			return true;
		}
		//this.catchData[this.key+this.mode+this.attr_name][this.tempbar]=1;
		var _this	= this;
		if(typeof ajax_obj == 'object' && ajax_obj.readyState != 0 && ajax_obj.readyState != 4)
		{
 			ajax_obj.abort();
		}
		ajax_obj		= ajax();
		ajax_obj.open("GET", "/suggest_ajax.php?rnd=" + Math.random() + "&key=" + encodeURIComponent(this.tempbar) + "&mode=" + encodeURIComponent(this.mode) + "&attr_name=" + encodeURIComponent(this.attr_name) + "&c_num=" + this.c_num, true);
		ajax_obj.onreadystatechange		= function()
		{
			if(ajax_obj.readyState == 4 && ajax_obj.responseText)
			{
				var	json	= eval("("+ajax_obj.responseText+")");
				_this.json	= json;
				if(json.list)
				{
					_this.catchData[_this.key + _this.mode + _this.attr_name][json.key]	= json;
					if(_this.tempbar == json.key)
					{
						_this.showList(json);
					}
				}
				else
				{
					_this.no_json_list(json.key);
				}
			}
		}
		ajax_obj.send(null);
		return true;
	},
	//取得客户端缓存数据
	getcatchData	: function(key)
	{
		if(!this.catchData[this.key + this.mode + this.attr_name])
		{
			this.catchData[this.key + this.mode + this.attr_name] = new Array();
		}
		if(this.catchData[this.key + this.mode + this.attr_name][key])
		{
			return this.catchData[this.key + this.mode + this.attr_name][key];
		}
		return null;
	},
	//输出suggestion列表
	showList		: function(json)
	{
		if(this.container.innerHTML != '')
		{
			this.container.innerHTML	= '';
		}
		this.select_on	= null;
		if(json.list && json.list.length > 0)
		{
			this.select_restrict	= json.list.length - 1;
			var str		= this.inputbar.value;
			if(str != '' && this.split_str[0])
			{
				var s	= this.getSplit(str, this.split_str, 1);
				if(json.key=='')
				{
					json.key 	 	= this.getSplit(str, this.split_str);
				}
				var e			= json.key.length + s;
				var start_str	= str.substr(0,s);
				var end_str		= str.substr(e);
			}
			else
			{
				var start_str	= '';
				var end_str		= '';
			}
			var _this	= this;
			for(var i=0;i<json.list.length;i++)
			{
				var li_object			= document.createElement("li");
				li_object.id			= 's_input_li_' + i;
				li_object.className		= this.s_input_li_class;
				if(json.list[i].page_url)
				{
					var page_url_link	= this.page_url_custom_link(json.list[i].page_url, i);
				}
				else
				{
					var page_url_link	= '';
				}
				if(json.list[i].related_recipester_software_name)
				{
					var related_recipester_software_name_html_str	= json.list[i].related_recipester_software_name_html;
				}
				else
				{
					var related_recipester_software_name_html_str	= '';
				}

				li_object.innerHTML		= json.list[i].name_html+page_url_link+related_recipester_software_name_html_str;

				li_object.onmouseover	= function()
				{
					for(var n =0; n<=_this.select_restrict; n++)
					{
						if(getObject('s_input_li_' + n) && getObject('s_input_li_' + n).style.backgroundColor != '')
						{
							getObject('s_input_li_' + n).style.backgroundColor	= '';
							if(getObject('span_s_input_li_' + n) && getObject('span_s_input_li_' + n).style.display == 'block')
							{
								getObject('span_s_input_li_' + n).style.display	= 'none';
							}
							break;
						}
					}
					var id_num		= this.id.replace('s_input_li_', '');
					this.style.backgroundColor	= '#F5F6F5';
					if(getObject('span_s_input_li_' + id_num))
					{
						getObject('span_s_input_li_' + id_num).style.display	= 'block';
					}
					_this.select_on				= id_num;
				}
				li_object.onmousedown	= function()
				{
					item_name	= _this.before_select_mousedown(start_str, end_str);
					if(!item_name)
					{
						var item_name	= suggest_bar.json.list[suggest_bar.select_on].name;
					}
					_this.inputbar.value	= start_str + item_name + end_str;
					_this.select_mousedown();
					if(!suggest_bar.onclick_href)
					{
						this.select_on		= null;
						_this.container.style.display	= 'none';
						_this.container.innerHTML		= '';
					}
					suggest_bar.onclick_href	= null;
				}
				this.container.onmousedown	= function(e)
				{
					if(e)
					{
						e.stopPropagation();
						e.preventDefault();
					}
					else
					{
						event.cancelBubble	= true;
						event.returnValue	= false;
					}
				}
				this.container.appendChild(li_object);
				this.container.style.display	= 'block';
			}
			this.showlist_custom_container(i);
		}
	},
	//分割单词
	getSplit	: function(str, split_str, return_num)
	{
		if(document.getSelection)
		{
			start 		= this.inputbar.selectionStart;
			end 		= this.inputbar.selectionEnd;
			str			= str.substr(0,start);
		}
		else
		{
			var workRange	= document.selection.createRange();
			var allRange	= getObject(this.key).createTextRange();
			workRange.setEndPoint("StartToStart", allRange);
			str				= workRange.text;
		}
		var x	= this.custom_split(str, split_str);
		if(return_num)
		{
			return x;
		}
		else
		{
			str		= str.substr(x);
		}
		return str;
	}
}
if(!suggest_bar.container)
{
	var container			= document.createElement("ul");
	container.id			= 'suggest_ul';
	container.className		= 'suggest_ul_class';
	container.style.display = 'none';
	getObject('html_body').appendChild(container);
	suggest_bar.container	= container;
}
function init_suggest(span_obj, obj, mode, attr_name)
{
	if(!attr_name)
	{
		attr_name	= '';
	}
	suggest_bar.init(obj.id, mode, attr_name);
	suggest_bar.container.style.border	= "1px solid";
	suggest_bar.container.style.width	= "170px";
	suggest_bar.select_enter	= function(select_on)
	{
		if(getObject('s_input_li_' + select_on))
		{
			getObject('s_input_li_' + select_on).onmousedown();
		}
		span_obj.add();
	}
	suggest_bar.select_mousedown	= function()
	{
		span_obj.add();
	}
}
function init_tags_suggest(obj)
{
	suggest_bar.init(obj.id, 'tag');
	suggest_bar.split_str		= Array('"',' ');
	suggest_bar.custom_split	= function(str, split_str)
	{
		var x	= 0;
		for(i in split_str)
		{
			if(split_str[i]=='"')
			{
				var t_n	= str.split('"').length - 1;
				if(t_n % 2 == 0)
				{
					continue;
				}
			}
			for(var s=0;s<str.length;s++)
			{
				if(str.substr(s, 1) == split_str[i])
				{
					x	= s + 1;
				}
			}
			if(x > 0)
			{
				break;
			}
		}
		return x;
	}
	suggest_bar.before_select_mousedown		= function(start_str, end_str)
	{
		if(suggest_bar.json.list[suggest_bar.select_on].name.indexOf(" ") != -1)
		{
			var s_a		= '';
			var e_a		= '';
			var ss_num	= start_str.split('"').length - 1;
			var ee_num	= end_str.split('"').length - 1;
			if(ss_num % 2 == 0)
			{
				if(start_str == '')
				{
					s_a		= '"';
				}
				else
				{
					s_a		= ' "';
				}
			}
			if(ee_num % 2 == 0)
			{
				e_a		= '" ';
			}
			return 	s_a + suggest_bar.json.list[suggest_bar.select_on].name + e_a;
		}
		else
		{
			return false;
		}
	}
}

function init_see_also_suggest(obj, url_obj, mode)
{
	obj.onfocus		= function()
	{
		obj.className	= 'user_links_suggest';
		suggest_bar.init(this.id,mode);
		suggest_bar.s_input_li_class	= 's_input_li_related';
		suggest_bar.select_up_down		= function(select_on,kc)
		{
			var move_on	= null;
			if(suggest_bar.json.list.length)
			{
				var top_h	= getObject('suggest_ul').scrollTop;
				var v_l		= getObject('s_input_li_' + select_on).offsetTop;
				var h		= getHeight('suggest_ul');
				var v_h		= getHeight('s_input_li_' + select_on);
				suggest_bar.inputbar.value	= 		suggest_bar.json.list[select_on].name;
				url_obj.value	= suggest_bar.json.list[select_on].page_url.substr(1);
				if(v_l + v_h - top_h > h)
				{
					move_on = 'down';
				}
				else if(v_l + v_h >= top_h && v_l < top_h)
				{
					move_on = 'up';
				}
				if(select_on == suggest_bar.json.list.length - 1)
				{
					top_h	= suggest_bar.total_height - suggest_bar.total_h_last_4;
					move_on = 'down';
				}
				else if(select_on == 0)
				{
					top_h	= 0;
					move_on	= 'up';
				}
				else
				{
					if(kc == 40)
					{
						if(move_on == 'down')
						{
							top_h += v_h;
							if(v_l + v_h < h + top_h)
							{
								top_h	-=	h + top_h - v_l - v_h;
							}
						}
					}
					else if(kc == 38)
					{
						if(move_on=='up')
						{
							top_h -= v_h;
							if(v_l - top_h > 0)
							{
								top_h	+= (v_l - top_h);
							}
						}
					}
				}
				getObject('suggest_ul').scrollTop	= top_h;
			}
		}
		suggest_bar.spacebar_custom_handle	= function()
		{
			var cut_3	= suggest_bar.inputbar.value.substr(0, 4);
			cut_3		= cut_3.toLowerCase();
			if(cut_3 != 'how ' || suggest_bar.word_array.length > 2)
			{
				var is_to	= true;
			}
			else
			{
				is_to		= false;
			}
			if(suggest_bar.json && is_to&&suggest_bar.json.list.length && getObject('s_input_li_0'))
			{
				var str_num		= suggest_bar.inputbar.value.length;
				suggest_bar.inputbar.value		= suggest_bar.json.list[0].name;
				getObject('s_input_li_0').onmouseover();
				if(suggest_bar.inputbar.createTextRange)
				{
					var o=suggest_bar.inputbar.createTextRange();
					o.moveStart("character", str_num);
					o.select();
				}
				else
				{
					suggest_bar.inputbar.focus();
					suggest_bar.inputbar.setSelectionRange(str_num, suggest_bar.inputbar.value.length);
				}
				url_obj.value=suggest_bar.json.list[suggest_bar.select_on].page_url.substr(1);
			}
		}
		suggest_bar.select_mousedown		= function()
		{
			url_obj.value	= suggest_bar.json.list[suggest_bar.select_on].page_url.substr(1);
		}
		suggest_bar.page_url_custom_link	= function(page_url, i)
		{
			page_url_link	= '';
			return page_url_link;
		}
		suggest_bar.showlist_custom_container	= function(i)
		{
			suggest_bar.container.scrollTop		= '0px';
			if(i < 4)
			{
				suggest_bar.container.style.height		= 'auto';
				suggest_bar.container.style.overflow	= 'visible';
			}
			else
			{
				suggest_bar.total_height	= 0;
				suggest_bar.total_h_last_4	= 0;
				for(var z=0; z<i; z++)
				{
					suggest_bar.total_height	+= getHeight('s_input_li_' + z);
					if(z >= i - 4)
					{
						suggest_bar.total_h_last_4	+= getHeight('s_input_li_' + z);
					}
				}
				if(suggest_bar.total_height < 225)
				{
					suggest_bar.container.style.height		= 'auto';
					suggest_bar.container.style.overflowY	= 'auto';
				}
				else
				{
					suggest_bar.container.style.height		= '225px';
					suggest_bar.container.style.overflowY	= 'auto';
				}
			}
		}
		obj.onblur		= function()
		{
			try
			{
				var z			= this.id.replace(/ra_title_/g, '');
				var url_obj		= getObject('ra_url_' + z);
				var ra_valid	= false;
				for(var j=0; j<suggest_bar.json.list.length; j++)
				{
					if(suggest_bar.json.list[j].name.toLowerCase() == this.value.toLowerCase())
					{
						ra_valid		= true;
						url_obj.value	= suggest_bar.json.list[j].page_url.substr(1);
						break;
					}
				}
				if(!ra_valid)
				{
					url_obj.value	= "";
				}
			}
			catch(e)
			{}
		}
	}
}

/*---- suggest.js end ----*/


/*---- onload_suggest.js  ----*/
//移除 + 转移 ----> 清理完毕
/*---- onload_suggest.js end ----*/


/*----- slow_display.js  ----*/
//slow_display 插件，已废弃，干掉

//flag
if(getObject('flag_article'))
{
	getObject('flag_article').onclick	= function()
	{
		if(typeof js_title == 'undefined')
		{
			return false;
		}
		flag_this_article(js_title, js_url);
		return false;
	}
}

/*---- slow_display.js end -----*/