(function(){
	String.prototype.format=function(){
		for(var i=0,self=this,list=this.match(/{[0-9]+}/g)||[],len=list.length;i<len;i++){
			self=self.replace(list[i],arguments[list[i].replace(/{|}/g,"")]||"");
		}
		return self;
	};
	window.commonMask=function(){
		var mask;
		return {
			show:function(){
				if(!mask){
					mask=ET.get(document.createElement("DIV"));
					mask.addClass("dlg_mask");
				}
				document.body.appendChild(mask.dom);
			},
			hide:function(){
				if(mask){
					document.body.removeChild(mask.dom);
				}
			}
		};
	}();
	
	window.collect=function(){
		var dlg,form,
		hide=function(){
			commonMask.hide();
			document.body.removeChild(dlg.dom);
		},
		tagsSuggest=function(){
			var request,
			tags_focus=false,
			tags_data={url:"",data:{}},
			panel=document.createElement("DIV");
			
			panel.className="tags_suggest";
			panel.innerHTML="<div class='tags_content'>"+
			"<table>"+
			"<tr><td>"+MSG.RECOMMEND_TAG+":<span>"+MSG.TIP_RECOMMEND_TAG+"</span></td></tr>"+
			"<tr><td class='tags'></td></tr>"+
			"<tr><td>"+MSG.USER_TAG+":<span>"+MSG.TIP_USER_TAG+"</span></td></tr>"+
			"<tr><td class='tags'></td></tr>"+
			"</table>"+
			"</div>"+
			"<div class='tags_arrow'></div>"+
			"<iframe scrolling='no' frameborder='0' src='' frameborder='0'/>";
			ET.get(panel).bind("click",function(e){
				e.stopPropagation();
				e.preventDefault();
				var target=e.target;
				if(target.tagName=="A"){
					if(form.tags.value){
						form.tags.value=((","+form.tags.value.replace(/(^,*)|(\,$)/g,"")+",").replace(new RegExp(","+target.firstChild.nodeValue+",","g"),",")+target.firstChild.nodeValue).replace(/(^,*)/g,"");
					}else{
						form.tags.value=target.firstChild.nodeValue;
					}
				}
			});
			return{
				show:function(){
					if(tags_focus&&(tags_data.data.user.length||tags_data.data.site.length)){
						dlg.append(panel);
						
						var rows=panel.getElementsByTagName("TD");
						rows[1].innerHTML=tags_data.data.site.length?("<a href='#'>"+tags_data.data.site.join("</a> <a href='#'>")+"</a>"):MSG.NO_RECOMMEND_TAG;
						rows[3].innerHTML=tags_data.data.user.length?("<a href='#'>"+tags_data.data.user.join("</a> <a href='#'>")+"</a>"):MSG.NO_USER_TAG;
						
						ET.get(document).bind("click",tagsSuggest.hide);
						ET.get(document).bind("keyup",tagsSuggest.hide);
					}
				},
				hide:function(e){
					if(e&&e.target==form.tags)return;
					if(panel.parentNode){
						panel.parentNode.removeChild(panel);
					}
					ET.get(document).unbind("click",tagsSuggest.hide);
					ET.get(document).unbind("keyup",tagsSuggest.hide);
				},
				cancel:function(){
					tags_focus=false;
					Ajax.abort(request);
				},
				get:function(url){
					tags_focus=true;
					//var url=form.url.value.trim().replace("http://","");
					if(url==""||url!=tags_data.url){
						request=Ajax.get({
							url:path+"tag/suggest",
							dataType :"json",
							data:{url:"http://"+url},
							success :function(data){
								tags_data={url:url,data:data};
								tagsSuggest.show();
							}
						});
					}else{
						tagsSuggest.show();
					}
				}
			};
		}(),
		index;
		return function(parm){
			index=parm;
			if(!login_user){
				login(index);
				return
			}
			if(!dlg){
				dlg=ET.get(document.createElement("DIV"));
				dlg.dom.innerHTML='<div class="title">'+MSG.DLG_ADD_REF_TITLE+'<a href="#" class="btn_cls"></a></div>'+
				'<center class="content">'+
					'<form name="form_collect">'+
						'<table>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_URL+'</td>'+
								'<td><a target="_blank"></a></td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_AS+'</td>'+
								'<td>'+
									'<div><input type="radio" name="entryType" type="B" checked="true"/>'+MSG.REF_AS_BK+'</div>'+
									'<div><input type="radio" name="entryType" type="W" />'+MSG.REF_AS_PAGE+'</div>'+
								'</td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_TITLE+'</td>'+
								'<td><div class="text"><input type="text" name="title"/></div></td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_CATEGORY+'</td>'+
								'<td><div class="text"><select name="folder"></select></div></td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_DESCRIPTION+'</td>'+
								'<td><textarea name="description"></textarea></td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_TAG+'</td>'+
								'<td><div class="text"><input name="tags" /></div></td>'+
							'</tr>'+
							'<tr>'+
								'<td class="label">'+MSG.REF_PUBLIC+'</td>'+
								'<td><input id="privacy_id" type="checkbox" name="privacy" checked="true"/></td>'+
							'</tr>'+
							'<tr>'+
								'<td></td>'+
								'<td class="label">'+
									'<input type="button" class="btn_save" name="btn_save" value="'+MSG.BUTTON_SUBMIT+'" />'+
									'<input type="button" class="btn_close" name="btn_close" value="'+MSG.BUTTON_CANCEL+'" />'+
								'</td>'+
							'</tr>'+
							'</table>'+
						'</form>'+
					'</center>'+
				'</div>';
				dlg.addClass("dlg dlg_collect");
				form=dlg.dom.getElementsByTagName("FORM")[0];
				
				ET.get(form.btn_save).bind("click",function(e){
					e.preventDefault();
					var data={
						ref:true,
						url:url,
						refId:id,
						title:form.title.value,
						folderId:form.folder.value,
						privacy:form.privacy.checked?1:0,
						description:form.description.value,
						tags:form.tags.value.trim().replace(/，/g,",").split(","),
						entryType:form.entryType[0].checked?"B":"W"
					};
					hide();
					Ajax.post({
						url:path+"entry",
						dataType :"json",
						data:data,
						success :function(json){
							if(json.success.length){
								alert(MSG.REF_SUCCESS);
							}else{
								var str=MSG.ALREADY_EXIST+" : "+json.existed[0].folder+"\n"+MSG.TYPE+" : "+MSG["ENTRY_TYPE_"+json.existed[0].type];
								
								if(json.canCoverBookmark.length){
									if(confirm(str+"\n"+MSG.TIP_CONVERTED_URL+"\n"+MSG.TIP_CONVERSION+"\n")){
										Ajax.put({
											url:path+"entry/transfer",
											dataType :"json",
											data:{entryId:json.canCoverBookmark[0].id},
											success :function(res){
												alert(MSG.REF_SUCCESS);
											},
											error :function(){}
										});
									}
									
								}else{
									alert(str)
								}
							}
						},
						error :function(){}
					});
					
				});
				ET.get(form.btn_close).bind("click",function(e){
					e.preventDefault();
					hide();
				});
				ET.get(dlg.dom.getElementsByTagName("A")[0]).bind("click",function(e){
					e.preventDefault();
					hide();
				});
				form.tags.onfocus=function(){
					tagsSuggest.get(url);
				};
				form.tags.onblur=function(){
					tagsSuggest.cancel();
				};
			}
			var id="",url="",title="";
			if(index!=undefined){
				if(parm.constructor==Number&&list_data[index]){
					id=list_data[index].id,
					url=list_data[index].url,
					title=list_data[index].title.replace(/<[\s\S]*?>/,"");
				}else{
					id=parm.id,
					url=parm.url,
					title=parm.title.replace(/<[\s\S]*?>/,"");
				}
			}
			else{
				return
			}
			
			urlLink=dlg.dom.getElementsByTagName("A")[1];
			urlLink.href=url;
			urlLink.innerHTML=url.length>30?(url.substring(0,30)+"..."):url;
			urlLink.title=url;
			
			form.title.value=title;
			form.description.value="";
			form.tags.value="";
			form.privacy.checked=true;
			
			Ajax.get({
				url:path+"folder/user/all",
				dataType :"json",
				data:{root:"根目录"},
				success :function(json){
					var inner=["<select name='folder' type='text'><option value='"+json.id+"'>"+json.name+"</option>"],
					getChild=function(node,nbsp){
						if(node.children){
							for(var i=0;i<node.children.length;i++){
								inner.push("<option value='"+node.children[i].id+"'>"+nbsp+node.children[i].name+"</option>");
								getChild(node.children[i],nbsp+"&nbsp;");
							}
						}
					};
					getChild(json,"&nbsp;");
					inner.push("</select>")
					form.folder.parentNode.innerHTML=inner.join("");
				},
				error :function(){}
			});
			
			commonMask.show();
			document.body.appendChild(dlg.dom);
			form.description.focus();
		};
	}();
	var login=function(){
		var dlg,form,
		hide=function(){
			commonMask.hide();
			document.body.removeChild(dlg.dom);
		},
		request=function(i){
			if(!form.nickName.value||!form.password.value){
				alert(MSG.NULL_INFO);
				form.nickName.select();
				return;
			}
			Ajax.post({
				url:path+"j_acegi_security_check",
				dataType :"json",
				data:{
					j_username:form.nickName.value,
					j_password:form.password.value,
					tokenValiditySeconds:form.tokenValiditySeconds.checked?2592000:-1
				},
				success :function(json){
					if(json.result){
						if(i!=undefined&&list_data[i]){
							var href=window.location.href;
							window.location.href=(href.lastIndexOf("#")!=-1?substring(0,href.lastIndexOf("#")):href)+
							"#title:"+escape(list_data[i].title.replace(/<[\s\S]*?>/,""))+
							",id:"+list_data[i].id+
							",url:"+encodeURIComponent(list_data[i].url);
						}
						window.location.reload();
					}else{
						alert(json.message);
						form.nickName.select();
					}
				},
				error :function(){}
			});
		};
		return function(i){
			if(!dlg){
				dlg=ET.get(document.createElement("DIV"));
				dlg.dom.innerHTML='<div class="title">'+MSG.DLG_ADD_REF_TITLE+'<a href="#" class="btn_cls"></a></div>'+
					'<center class="content">'+
						'<form name="form_collect">'+
							'<table>'+
								'<tr>'+
									'<td class="label">'+MSG.USER_NAME+'</td>'+
									'<td><div class="text"><input name="nickName" type="text" maxlength="30" /></div></td>'+
								'</tr>'+
								'<tr>'+
									'<td class="label">'+MSG.USER_PWD+'</td>'+
									'<td><div class="text"><input name="password" type="password" maxlength="30" /></div></td>'+
								'</tr>'+
								'<tr>'+
									'<td class="label"><input type="checkbox" name="tokenValiditySeconds" /></td>'+
									'<td>'+MSG.USER_REMEMBER+' <a href="'+path+'user/password">'+MSG.FORGET_PASSWORD+'</a></td>'+
								'</tr>'+
								'<tr>'+
									'<td></td>'+
									'<td class="label">'+
										'<input type="button" class="btn_save" name="btn_login" value="'+MSG.SUBMIT_LOGIN+'" />'+
										'<input type="button" class="btn_close" name="btn_close" value="'+MSG.BUTTON_CANCEL+'" />'+
									'</td>'+
								'</tr>'+
							'</table>'+
						'</form>'+
					'</center>'+
				'</div>';
				dlg.addClass("dlg dlg_signin");
				form=dlg.dom.getElementsByTagName("FORM")[0];
				
				ET.get(form.password).bind("keyup",function(e){
					if(e.keyCode==13){
						request(i);
					}
				});
	
				ET.get(form.btn_login).bind("click",function(e){
					e.preventDefault();
					request(i);
				});
				
				ET.get(form.btn_close).bind("click",function(e){
					e.preventDefault();
					hide();
				});
				ET.get(dlg.dom.getElementsByTagName("A")[0]).bind("click",function(e){
					e.preventDefault();
					hide();
				});
			}
			commonMask.show();
			document.body.appendChild(dlg.dom);
			form.nickName.focus();
		};
	}();
	ET.onReady(function(){
		var href=window.location.href;
		if(href.indexOf("#")!=-1){
			var parm=href.substring(href.indexOf("#")+1);
			if(parm!=""){
				try{
					var p={};
					eval("p={"+parm.replace(/:/g,":'").replace(/,/g,"',")+"'}");
					p.title=unescape(p.title||"");
					p.url=decodeURIComponent(p.url||"");
					collect(p);
				}
				catch(e){}
			}
		}
		
		/*----搜索----*/
		var isAll=true, 
		schTxt=ET.get("searchTxt"),
		schBtn=ET.get("searchBtn"),
		searchTo=function(){
			var txt=encodeURIComponent(schTxt.dom.value.trim());
			if(txt){
				window.location.href=path+"search?"+(+isAll?"":("userName="+window.user+"&"))+"type=A&query="+txt+"&pageNo=1";
			}
		};
		if(schTxt){
			schTxt.bind("keypress",function(e){
				if(e.keyCode==13){
					searchTo();
				}
			});
			schBtn.bind("click",function(e){
				searchTo();
			});
		}
		/*----搜索----*/
		
		/*----搜索选项----*/
		if(window.user){
			var sel=ET.get(document.createElement("DIV")),
			selBtn=ET.get(document.createElement("DIV")),
			search=ET.get("searchBtn").parent(),
			exit=function(e){
				if(e&&e.target.parentNode==sel.dom)return;
				ET.get(document.body).unbind("mousedown",exit);
				document.body.removeChild(sel.dom);
			};
			
			sel.addClass("search_select");
			selBtn.addClass("search_select_button");
			selBtn.html("<div></div>");
			search.dom.insertBefore(selBtn.dom,search.dom.firstChild);
			
			sel.html("<div class='active'><p></p>"+MSG.SCOPE_TYPE_ALL+"</div>"+
			"<div><p></p>"+(isSelf?MSG.SCOPE_TYPE_SELF:MSG.SCOPE_TYPE_USER)+"</div>")
			
			selBtn.bind("click",function(e){
				document.body.appendChild(sel.dom);
				var xy=selBtn.xy();
				sel.dom.style.left=(xy.left+selBtn.dom.offsetWidth-sel.dom.offsetWidth)+"px";
				sel.dom.style.top=(xy.top+selBtn.dom.offsetHeight+2)+"px";
				ET.get(document.body).bind("mousedown",exit);
			});
			sel.bind("click",function(e){
				if(e.target==sel.dom.childNodes[0]){
					e.target.className="active";
					sel.dom.childNodes[1].className="";
					isAll=true;
				}else if(e.target==sel.dom.childNodes[1]){
					e.target.className="active";
					sel.dom.childNodes[0].className="";
					isAll=false;
				}
				exit();
			});
		}
		/*----搜索选项----*/
		
		/*----推荐entry----*/
		var recm_entry=ET.get("recommend_entry");
		if(recm_entry&&window.list_data){
			var list=[];
			if(window.list_data){
				for(var i=0;i<list_data.length;i++){
					var urlSum=list_data[i].urlSum;
					if(urlSum){
						list.push(urlSum);
					}
				}
			}
			if(list.length){
				Ajax.get({
					url:path+"recommendation/entry",
					dataType :"json",
					data:{urlSum:list},
					success :function(data){
						var res=data.results;
						if(res.length){
							var inner=[];
							for(var i=0;i<res.length;i++){
								inner.push("<li><a href='"+path+"url/"+res[i].urlSum+"/single' target='single'>"+(res[i].title||MSG.NO_TITLE)+"</a></li>");
							}
							recm_entry.html(inner.join(""));
						}
					},
					error :function(){}
				});
			}
		}
		/*----推荐entry----*/
			
		/*----推荐user----*/
		var recm_user=ET.get("recommend_user");
		if(recm_user&&window.user){
			Ajax.get({
				url:path+"recommendation/user/"+user,
				dataType :"json",
				success :function(data){
					var res=data.results;
					if(res.length){
						var inner=[];
						for(var i=0;i<res.length;i++){
							inner.push("<li><a href='"+path+"user/"+res[i]+"'>"+res[i]+"</a></li>");
						}
						recm_user.html(inner.join(""));
					}
				},
				error :function(){}
			});
		}
		/*----推荐user----*/
		
		ET.get(document.body).bind("click",function(e){
			if(e.target.tagName=="A"&&e.target.target=="single"){
				e.preventDefault();
				if(document.all){
					window.open(e.target.href,"single").focus();
				}else{
					window.open(e.target.href,"_blank");
				}
			}
		});
	});
}());
