YAHOO.namespace('PLM');
YAHOO.PLM.tree =
function(id) {
	this.tree = new YAHOO.widget.TreeView(id);

	//Tree描画
	YAHOO.PLM.tree.prototype.CreateTreeView =
		function (treeData,treeNode){
			if(!treeNode) {
				treeNode = this.tree.getRoot();
			}
			for(var i in treeData){
				var row = treeData[i];
				if(row && row.label){
					if (!(row.label=="_open"||row.label=="_close"||row.label=="_load")) {
						var tmpNode = new YAHOO.widget.TextNode("" + row.label, treeNode, false);
						tmpNode.getNodeHtml = customGetNodeHtml;
						tmpNode.getStyle = customGetStyle;
						tmpNode.getHoverStyle = customGetHoverStyle;
						tmpNode.href = row.url;
						if(row.child) { // 子供がいる場合
							this.CreateTreeView(row.child, tmpNode);
							var swt = row.child[0].state;
							switch(swt) {
								case	"_open"  : tmpNode.expand();break;
								case	"_close" : tmpNode.collapse();break;
								case	"_load"  : YAHOO.PLM.LoadTree(this, tmpNode, row.child[0].url);break;
								dafault          : tmpNode.collapse();break;
							}
						}
					}
				}
			}
			this.tree.draw();
		}
}

// NodeのHTML
function customGetNodeHtml() {
        var sb = [];

        sb[sb.length] = '<table border="0" cellpadding="0" cellspacing="0">';
        sb[sb.length] = '<tr>';

        for (var i=0;i<this.depth;++i) {
            sb[sb.length] = '<td class="' + this.getDepthStyle(i) + '"><div class="ygtvspacer"></div></td>';
        }

        var getNode = 'YAHOO.widget.TreeView.getNode(\'' +
                        this.tree.id + '\',' + this.index + ')';

        sb[sb.length] = '<td';
        sb[sb.length] = ' id="' + this.getToggleElId() + '"';
        sb[sb.length] = ' class="' + this.getStyle() + '"';
        if (this.hasChildren(true)) {
            sb[sb.length] = ' onmouseover="this.className=';
            sb[sb.length] = getNode + '.getHoverStyle()"';
            sb[sb.length] = ' onmouseout="this.className=';
            sb[sb.length] = getNode + '.getStyle()"';
        }
        sb[sb.length] = ' onclick="javascript:' + this.getToggleLink() + '">';

        sb[sb.length] = '<div class="ygtvspacer">';

        sb[sb.length] = '</div>';
        sb[sb.length] = '</td>';
//        sb[sb.length] = '<td width="100%"';
        sb[sb.length] = '<td ';
        sb[sb.length] = (this.nowrap) ? ' nowrap="nowrap" ' : '';
        sb[sb.length] = ' >';
//        sb[sb.length] = '<a';
//        sb[sb.length] = ' id="' + this.labelElId + '"';
//        if (this.title) {
//            sb[sb.length] = ' title="' + this.title + '"';
//        }
//        sb[sb.length] = ' class="' + this.labelStyle + '"';
//        sb[sb.length] = ' href="' + this.href + '"';
//        sb[sb.length] = ' target="' + this.target + '"';
//        sb[sb.length] = ' onclick="return ' + getNode + '.onLabelClick(' + getNode +')"';
//        if (this.hasChildren(true)) {
//            sb[sb.length] = ' onmouseover="document.getElementById(\'';
//            sb[sb.length] = this.getToggleElId() + '\').className=';
//            sb[sb.length] = getNode + '.getHoverStyle()"';
//            sb[sb.length] = ' onmouseout="document.getElementById(\'';
//            sb[sb.length] = this.getToggleElId() + '\').className=';
//            sb[sb.length] = getNode + '.getStyle()"';
//        }
//        sb[sb.length] = ' >';
        sb[sb.length] = this.label;
//        sb[sb.length] = '</a>';
        sb[sb.length] = '</td>';
        sb[sb.length] = '</tr>';
        sb[sb.length] = '</table>';

        return sb.join("");
}

function customGetStyle() {
        if (this.isLoading) {
            return "ygtvloading";
        } else {
        	// 最親ノードの場合
        	if (this.depth == 0) {
        		if (this.hasChildren(true)) {
        			if (this.expanded) {
        				return "ygtv_top_m";
        			} else {
        				return "ygtv_top_p";
        			}
        		} else {
        			return "ygtv_top";
        		}
        	}

            // location top or bottom, middle nodes also get the top style
            var loc = (this.nextSibling) ? "t" : "l";

            // type p=plus(expand), m=minus(collapase), n=none(no children)
            var type = "n";
            if (this.hasChildren(true) || (this.isDynamic() && !this.getIconMode())) {
            // if (this.hasChildren(true)) {
                type = (this.expanded) ? "m" : "p";
            }

            return "ygtv" + loc + type;
        }
}
function customGetHoverStyle() {
        // 最親ノードの場合
        if (this.depth == 0) {
        	if (this.hasChildren(true)) {
        		if (this.expanded) {
        			return "ygtv_top_m_f";
        		} else {
        			return "ygtv_top_p_f";
        		}
        	} else {
        		return "ygtv_top";
        	}
        }

        var s = this.getStyle();
        if (this.hasChildren(true) && !this.isLoading) {
            s += "h";
        }
        return s;
}

YAHOO.PLM.LoadTree =
function(oj, tmpNode, url){
	if(!!YAHOO.util.Connect){
		if(url){
			if ( url.indexOf("?") == -1 ) {
				url += "?time=" + (new Date()).getTime();
			} else {
				url += "&time=" + (new Date()).getTime();
			}
			tmpNode.url = url;
		}
		// ノードを追加する
		tmpNode.setDynamicLoad (
			/* 追加処理を行う関数  */
			/*   関数には2つのパラメータが渡されますが、ノードを追加し終わったら2番目のパラメータとして渡された関数を呼び出す必要があります。  */
			function (node, onCompleteCallback ){
			//	new YAHOO.widget.Node("", tmpNode.pearent, false); // ・・・なくても動く・・・
				onCompleteCallback();
			}
		);
		oj.tree.onExpand =
			function(node) {
// alert("onExpand");
				if(node.children.length <= 0){
					// 非同期通信を行う
					// method : メソッド（get, post）、url : URL、callback : 通信処理を行うコールバック関数、メソッドがpostの場合に送信するデータ
					// 3番目はコールバック関数／処理をプロパティリスト形式で指定します。
					// 通信が成功した場合にはsuccess、失敗した場合にはfailureに処理を指定します。
					// 他にもパラメータを指定したい場合はargument、スコープを設定したい場合にはscopeを指定できます。
// alert(node.url);
					YAHOO.util.Connect.asyncRequest ( "POST", node.url, {argument:{'node':node},scope:oj,success: getResponse},null);
				}
			}
		getResponse =
			function (oj) {
// alert("onExpand:success");
// alert(oj.responseText);
				data = eval(oj.responseText);
				this.CreateTreeView (data,oj.argument.node);// Nodeの作成
			}
	}
}

// ツリーの描画
var callback = {
	success: function (o) {
		var res = o.responseText;
// alert(res);
		if (res != null || res == "") {
			var treeData = eval(res);
			var index = 1;
			for(var i in treeData){
				var tree = new YAHOO.PLM.tree("treeDiv" + index);
				tree.CreateTreeView(treeData[i]);
				index = index + 1;
			}
		}
	},
	failure: function (o) {
// alert('ファイルが見つかりませんでした');
// alert(o.responseText);
	}
}

function LoadTreeView() {
	if (reqURL == "" || reqURL == null) {
		reqURL = window.location.href;
		if ( reqURL.indexOf("?") == -1 ) {
			reqURL += "?reqTree=1";
		} else {
			reqURL += "&reqTree=1";
		}
		reqURL += "&time=" + (new Date()).getTime();
	}
// alert(reqURL);
	YAHOO.util.Connect.asyncRequest('POST', reqURL, callback);
}
