﻿var E=YAHOO.util.Event,D=YAHOO.util.Dom,messenger = GUIAssistant.getMessenger(); 
var SampleTreeSelector = {
	selectNode:null,
	setActiveNode:function(node){
		if(node == this.selectNode)
			return;
		if(this.selectNode != null){
			//deactive
			if(D.hasClass(this.selectNode.getLabelEl(),"select"))
				D.removeClass(this.selectNode.getLabelEl(),"select");
		}
		if(!D.hasClass(node.getLabelEl(),"select"))
			D.addClass(node.getLabelEl(),"select");
		this.selectNode = node;
	},
	getActiveNode:function(){
		return this.selectNode;
	}
}
var FavMgr = {
	_treeInit:false,
	_tree:null,
	_selector:SampleTreeSelector,
	_contextMenu:null,
	_teenNode:null,
	_locked:false,
	ui:new JOptionPanel(document.getElementById("jFavoritePanel"),false),
	addFavorite:function(node){
        if (root_folder == '') {
            TWSigninManager.panel.setVisible(true);
            return;
        }
		if(!this._treeInit){
			var _this = this;
			//initialize tree from root folder
			this._tree = new YAHOO.widget.TreeView("JFavoritePanelTree");
			this.retrieveFolder(root_folder,this._tree.getRoot(),function(){
				_this._tree.draw();
				_this._selector.setActiveNode(_this._tree.getRoot().children[0]);
			});
			this._tree.setDynamicLoad(function(node,onComplete){
				_this.retrieveFolder(node.data["fid"],node,onComplete);				
				onComplete.call(this);				
			},1);
			this._tree.subscribe("labelClick",function(node){
				_this._selector.setActiveNode(node);
				return false;
			});
			if(!this._contextMenu)
				this._contextMenu = document.getElementById("jfpcontextmenu");
			
			var callback = {
				success:function(r){
                    if (r.responseText == "NO_LOGIN") {
                        window.location.reload();
                        return;
                    }
					var data = YAHOO.lang.JSON.parse(r.responseText);
                    if (data.states == "NAME_EXISTS") {
                        alert("文件夹内存在重名！");
                        return;
                    } else if(data.states != "OK"){
			            alert("操作失败，请重试！");
                        return;
					}
					_this._teenNode.setUpLabel({
						label:data.item["name"],
						childof:data.item["childof"],
						id:data.item["id"],
						nameMD5:data.item["name_md5"]
					});
					_this._teenNode.parent.refresh();
					_this._locked = false;
					D.get("jfpCreate").disabled = false;
				},
				failture:function(e){
					 messenger.warning("操作失败,发生意外错误");
					 _this.ui.setVisible(false);
				}
			}
			E.on("jfpcontextmenu1","blur",function(){
				if(D.getStyle(_this._contextMenu,"visibility")=="visible"){
					D.setStyle(_this._contextMenu,"visibility","hidden");
					var url = siteUrl+"/directory/submit/";
					if(!this.value)
						return;
					var data = "name="+this.value+"&childof="+_this._teenNode.data["childof"]+"&acl=public";
					_this._teenNode.setUpLabel({label:"同步中..."});
					_this._teenNode.parent.refresh();
					YAHOO.util.Connect.asyncRequest("POST",url,callback,data);
				}
			});
			E.on("jfpcontextmenu1","keydown",function(e){
				if(e.keyCode == 13){
					E.stopPropagation(e);
					E.preventDefault(e);
					this.blur();
				}
			});
			E.on("jfpCreate","click",function(e){
				if(_this._locked)
					return;
				_this._locked = true;
				D.get("jfpCreate").disabled = true;
				var selectNode = _this._selector.getActiveNode();
				if(!selectNode){
					_this.ui.setVisible(false);
					messenger.warning("请选择一个目标文件夹后在操作");
					return;
				}
				fid = selectNode.data["fid"];
				var newNode = _this.addFolder(selectNode,{
					name:"新建文件夹",
					childof:fid,
					name_md5:'',
					fid:0
				});
				//locate context menu to new node
				setTimeout(function(){
					var nodeXY = D.getXY(newNode.getLabelEl());
					var panelXY = [parseInt(D.getStyle("jFavoritePanel","left")),parseInt(D.getStyle("jFavoritePanel","top"))];
					D.setStyle(_this._contextMenu,"visibility","visible");
					D.setStyle(_this._contextMenu,"left",nodeXY[0]-panelXY[0]+"px");
					D.setStyle(_this._contextMenu,"top",nodeXY[1]-panelXY[1]+"px");
					var input = document.getElementById("jfpcontextmenu1");
					input.value = "新建文件夹";
					input.focus();
					input.select();
				},100);
				_this._teenNode = newNode;
			});
			this._treeInit = true;
		}
		this.ui.setVisible(true);
		var n = node.parentNode.parentNode.getElementsByTagName("a")[0];
		var l = node.parentNode.getElementsByTagName("a")[1].getAttribute("url");
		document.getElementById("jFavoritePanelTitle").value = n.innerHTML;
		document.getElementById("jFavoritePanelAddr").value = l;
		D.get("jfpCreate").disabled = false;
		this._locked = false;
	},
	retrieveFolder:function(fid,targetNode,afterall){
		var url = siteUrl+"/directory/"+(fid?fid:root_folder),_this=this;
		var callback = {
			success:function(r){
                if (r.responseText == "NO_LOGIN") {
                    window.location.reload();
                    return;
                }
                _this.fireFolderChanged(YAHOO.lang.JSON.parse(r.responseText),targetNode,afterall);
			},
			failture:function(e){
				alert("sorry,encounter an error:"+e.responseText);
			}
		}
		YAHOO.util.Connect.asyncRequest("POST",url,callback,null);
	},
	fireFolderChanged:function(folders,targetNode,afterall){
		for(var folder in folders){
			var subfolder = new YAHOO.widget.TextNode({
				label:folders[folder]["name"],
				childof:folders[folder]["childof"],
				fid:folders[folder]["id"],
				nameMD5:folders[folder]["name_md5"]
			},targetNode,false);
		}
		if(afterall)
			afterall.call(this);
	},
	addFolder:function(targetNode,folder){
		var _this = this;
		if(!targetNode.dynamicLoadComplete || !targetNode.expanded)
			targetNode.expand();
		var node = new YAHOO.widget.TextNode({
			label:folder["name"],
			childof:folder["childof"],
			fid:folder["id"],
			nameMD5:folder["name_md5"]
		},targetNode,false);
		targetNode.refresh();
		if(targetNode.expanded)
			targetNode.showChildren();
		return node;
	},
	init:function(){
		var _this=this;
		FavMgr.ui.addActionListener(JOptionPanel.ACTION_OK,function() {
			var callback = {
				success:function(r){
                    if (r.responseText == "NO_LOGIN") {
                        window.location.reload();
                        return;
                    }
                    try{
						_this.ui.setVisible(false);
						var result = YAHOO.lang.JSON.parse(r.responseText);
						switch(result.states){
							case "NAME_EXISTS":
								messenger.warning("此收藏已经存在");
								break;
							case "OK":
								var user_url = document.getElementById("user_url");
								user_url.innerHTML = user_url.innerHTML.replace(/([0-9]+)/i,function(m){
									return result.url_num;
								});
								messenger.notify("操作成功");
								break;
							default:
								messenger.warning("操作失败");	
						}
					}catch(e){}
				},
				failture:function(e){
					messenger.warning("操作失败");
				}
			}
			var url  = siteUrl + "/bookmark.php?op=collect";
			var selectNode = _this._selector.getActiveNode();
			if(!selectNode){
				_this.ui.setVisible(false);
				messenger.warning("请选择一个目标文件夹");
				return;
			}else{
				fid = selectNode.data["fid"];
			}
			var data = "title="+encodeURIComponent(document.getElementById("jFavoritePanelTitle").value)+"&url="+encodeURIComponent(document.getElementById("jFavoritePanelAddr").value)+"&childof="+fid+"&love=0";
			YAHOO.util.Connect.asyncRequest("POST",url,callback,data);
		});
	}
}
FavMgr.init();
