//** Fason 제공
//** 이메일: fason_pfx@hotmail.com
var icon={
root :'image/root.gif',
열기 :'image/open.png',
닫기 :'image/close.png',
파일 :'image/file.png',
Rplus :'image/Rplus.gif ',
Rminus :'image/Rminus.gif',
join :'image/T.gif',
joinbottom:'image/L.gif',
plus :'image/Tplus .gif',
plusbottom:'image/Lplus.gif',
빼기 :'image/Tminus.gif',
minusbottom:'image/Lminus.gif',
공백 :'image /blank.gif',
라인 :'image/I.gif'
};
var Global={
id:0,
getId:function(){return this.id ;},
all:[],
selectedItem:null,
defaultText: "treeItem",
defaultAction:"javascript:void(0)",
defaultTarget:"_blank"
}
function preLoadImage(){
for(i in icon){
var tem=icon[i];
icon[i]=new Image()
icon[i].src=tem
}
};preLoadImage();
함수 treeItem(text,action,target,title,Icon)
{
this.id=Global.getId();
this.level=0;
this.text=text?text:Global.defaultText;
this.action=action?action:Global.defaultAction;
this.target=target?target:Global.defaultTarget;
this.title=title?title:this.text;
this.isLast=true;
this.childNodes=new Array();
this.indent=new Array();
this.parent=null;
var c =0;
if(getCookie("item" this.id) != null) c = getCookie("item" this.id);
this.open=parseInt(c);
this.load=false;
this.setuped=false;
this.JsItem=null;
this.container=document.createElement("div");
this.icon=아이콘;
Global.all[Global.all.length]=this;
}
treeItem.prototype.toString = function()
{
var o = this;
var oItem = document.createElement("div");
oItem.id = "treeItem" this.id
oItem.className = "treeItem";
oItem.noWrap = true;
oItem.onselectstart = function(){ return false;}
oItem.oncontextmenu = function(){ return false;}
this.JsItem = oItem;
this.drawIndents();
var iIcon = document.createElement("img");
iIcon.align = "absmiddle";
iIcon.src = this.childNodes.length>0?(this.open?(this.level>0?(this.isLast?icon.minusbottom.src:icon.minus.src):icon.Rminus.src ):(this.level>0?(this.isLast?icon.plusbottom.src:icon.plus.src):icon.Rplus.src)):(this.level>0?(this.isLast?icon.joinbottom .src:icon.join.src):icon.blank.src);
iIcon.id = "treeItem-icon-handle-" this.id;
iIcon.onclick = function(){ o.toggle();};
oItem.appendChild(iIcon);
var iIcon = document.createElement("img");
iIcon.align = "absmiddle";
iIcon.src = this.icon?this.icon:(this.childNodes.length>0?(this.open?icon.open.src:icon.close.src):icon.file.src);
iIcon.id = "treeItem-icon-folder-" this.id;
iIcon.onclick = function(){ o.select();};
iIcon.ondblclick = function(){ o.toggle();};
oItem.appendChild(iIcon);
var eText = document.createElement("span");
var eA=document.createElement("a");
eA.innerHTML = this.text;
eA.target = this.target;
eA.href = this.action;
eA.onkeydown = function(e){ return o.KeyDown(e);}
if(this.action == Global.defaultAction) eA.onclick = function(){ o.toggle(); return false;}
eText.appendChild(eA);
eText.id = "treeItem-text-" this.id;
eText.className = "treeItem-unselect"
eText.onclick = function(){ o.select(1);};
eText.title = this.title;
oItem.appendChild(eText);
this.container.id = "treeItem-container-" this.id;
this.container.style.display = this.open?"":"none";
oItem.appendChild(this.container);
oItem 반환;
}
treeItem.prototype.root = function()
{
var p = this;
while(p.parent)
p = p.parent;
return p;
}
treeItem.prototype.setText = function(sText)
{
if(this.root().setuped)
{
var oItem = document.getElementById ("treeItem-text-" this.id);
oItem.firstChild.innerHTML = sText;
}
this.text = sText;
}
treeItem.prototype.setIndent = function(l,v)
{
for(var i=0;i {
this.childNodes[i].indent[l] = v;
this.childNodes[i].setIndent(l,v);
}
}
treeItem.prototype.drawIndents = function()
{
var oItem = this.JsItem;
for(var i=0;i var iIcon = document.createElement("img");
iIcon.align = "absmiddle";
iIcon.id = "treeItem-icon-" this.id "-" i;
iIcon.src = this.indent[i]?icon.blank.src:icon.line.src;
oItem.appendChild(iIcon);
}
}
treeItem.prototype.add = function(oItem)
{
oItem.parent=this;
this.childNodes[this.childNodes.length]=oItem;
oItem.level=this.level 1;
oItem.indent=this.indent.concat();
oItem.indent[oItem.indent.length]=this.isLast;
if(this.childNodes.length>1){
var o=this.childNodes[this.childNodes.length-2];
o.isLast=false;
o.setIndent(o.level,0);
if(this.root().setuped)o.reload(1);
}
else if(this.root().setuped)
this.reload(0);
this.container.appendChild(oItem.toString());
this.container.style.display=this.open?"":"none";
}
treeItem.prototype.loadChildren = function()
{
//뭔가
}
treeItem.prototype.remove = function()
{
var tmp = this.getPreviousSibling();
//if(tmp){ tmp.select();}
this.removeChildren();
var p = this.parent;
if(!p){ return };
if(p.childNodes.length>0){
var o = p.childNodes[p.childNodes.length-1];
o.isLast = true;
o.setIndent(o.level,1);
if(o.root().setuped)o.reload(1);
}
else
p.reload();
}
treeItem.prototype.removeChildren = function ()
{
if(this == Global.selectedItem){ Global.selectedItem = null;}
for(var i =this.childNodes.length-1;i>=0;i--)
this.childNodes[i].removeChildren();
var o = 이;
var p = this.parent;
if (p) { p.childNodes = p.childNodes._remove(o);}
Global.all[this.id] = null
var oItem = document.getElementById("treeItem" this. ID);
if (oItem) { oItem.parentNode.removeChild(oItem); }
}
treeItem.prototype.reload = function(플래그)
{
if (플래그){
for(var j=0;j for(var i=0;i document.getElementById("treeItem-icon-" this.id "-" i).src = this.indent[i]?icon.blank.src:icon.line.src;
}
document.getElementById("treeItem-icon-handle-" this.id).src = this.childNodes.length>0?(this.open?(this.level>0?(this.isLast ?icon.minusbottom.src:icon.minus.src):icon.Rminus.src):(this.level>0?(this.isLast?icon.plusbottom.src:icon.plus.src):icon.Rplus. src)):(this.level>0?(this.isLast?icon.joinbottom.src:icon.join.src):icon.blank.src);
if (!this.icon)
document.getElementById("treeItem-icon-folder-" this.id).src = this.childNodes.length>0?(this.open?icon.open.src :icon.close.src):icon.file.src;
}
treeItem.prototype.toggle = function()
{
if(this.childNodes.length>0){
if(this.open)
이 .무너지다();
else
this.expand();
}
}
treeItem.prototype.expand = function()
{
this.open=1;
setCookie("item" this.id,1);
if(!this.load){
this.load=true;
this.loadChildren();
this.reload(1);
}
else
this.reload(0);
this.container.style.display = "";
}
treeItem.prototype.collapse = function()
{
this.open=0;
setCookie("item" this.id,0);
this.container.style.display = "없음";
this.reload(0);
this.select(1);
}
treeItem.prototype.expandAll = function()
{
if(this.childNodes.length>0 && !this.open)this.expand();
this.expandChildren();
}
treeItem.prototype.collapseAll = function()
{
this.collapseChildren();
if(this.childNodes.length>0 && this.open)this.collapse();
}
treeItem.prototype.expandChildren = function()
{
for(var i=0;i this.childNodes[ i].expandAll();
}
treeItem.prototype.collapseChildren = function()
{
for(var i=0;i this.childNodes[ i].collapseAll()
}
treeItem.prototype.openURL=function()
{
if(this.action!=Global.defaultAction){
window.open (this.action,this.target);
}
}
treeItem.prototype.select=function(o)
{
if (Global.selectedItem) Global.selectedItem.unselect();
var oItem = document.getElementById("treeItem-text-" this.id);
oItem.className = "treeItem-selected";
oItem.firstChild.focus();
Global.selectedItem = 이;
if(!o) this.openURL();
}
treeItem.prototype.unselect=function()
{
var oItem = document.getElementById("treeItem-text-" this.id);
oItem.className = "treeItem-unselect";
oItem.firstChild.blur();
Global.selectedItem = null;
}
treeItem.prototype.setup = function(oTaget)
{
oTaget.appendChild(this.toString());
this.setuped = true;
if(this.childNodes.length>0 || this.open) this.expand();
}
/**********************************************/
/*
화살표 키 이벤트
*/
/**********************************************/
treeItem.prototype.getFirstChild = function()
{
if(this.childNodes.length>0 && this.open)
return this.childNodes[0];
이것을 반환하세요.
}
treeItem.prototype.getLastChild = function()
{
if(this.childNodes.length>0 && this.open)
return this.childNodes[this. childNodes.length-1].getLastChild();
이것을 반환하세요.
}
treeItem.prototype.getPreviousSibling = function()
{
if(!this.parent) return null;
for(var i=0;i if(this.parent.childNodes[i] == this)break;
if(i == 0)
return this.parent;
else
return this.parent.childNodes[i-1].getLastChild();
}
treeItem.prototype.getNextSibling = function()
{
if(!this.parent) return null;
for(var i=0;i if(this.parent.childNodes[i] == this)break;
if(i == this.parent.childNodes.length-1)
return this.parent.getNextSibling();
else
return this.parent.childNodes[i 1];
}
treeItem.prototype.KeyDown=function(e){
var code,o;
if(!e) e = window.event;
코드 = e.어느 ? e.which : e.keyCode;
o = 이;
if(코드 == 37)
{
if(o.open) o.collapse();
else
{
if(o.parent) o.parent.select();
}
false를 반환합니다.
}
else if(code == 38)
{
var tmp = o.getPreviousSibling();
if(tmp) tmp.select();
false를 반환합니다.
}
else if(코드 == 39)
{
if(o.childNodes.length>0)
{
if(!o.open) o.expand( );
else
{
var tmp = o.getFirstChild();
if(tmp) tmp.select();
}
}
false를 반환;
}
else if(code == 40)
{
if(o.open&&o.childNodes.length>0)o.getFirstChild().select();
else
{
var tmp = o.getNextSibling();
if(tmp) tmp.select();
}
false를 반환합니다.
}
else if(코드 == 13)
{
o.toggle();
o.openURL();
false를 반환합니다.
}
true를 반환합니다.
}
/*****************************************************/
Array.prototype.indexOf=function(o){
for(var i=0;i if(this[i]==o)return i;
반환 -1;
}
Array.prototype.removeAt=function(i){
return this.slice(0,i).concat(this.slice(i 1))
}
Array.prototype._remove=function(o){
var i=this.indexOf(o);
if(i!= -1) return this.removeAt(i)
return this
}
/*****************************************************/
/**************************************************** */
/*
xtreeItem 클래스
*/
/*****************************************************/
함수 xtreeItem(uid,text,action,target,title,Icon,xml ){
this.uid=uid;
this.base=treeItem;
this.base(text,action,target,title,Icon);
this.Xml=xml;
}
xtreeItem.prototype=new treeItem;
xtreeItem.prototype.parseElement=function(dom){
return dom.selectSingleNode("/TreeNode");
}
xtreeItem.prototype.addNodesLoop = function(oItem)
{
for(var i=0;i {
var o = oItem.childNodes[i];
var tmp = new xtreeItem(o.getAttribute("id"),o.getAttribute("text"),o.getAttribute("href"),o.getAttribute("target"),o.getAttribute(" title"),o.getAttribute("icon"),o.getAttribute('Xml'));
this.add(tmp);
if(o.getAttribute("Xml")) tmp.add(new treeItem("로드 중..."));
else
{
tmp.load=true;
tmp.addNodesLoop(o);
}
}
}
xtreeItem.prototype.loadChildren=function()
{
var oItem = this;
var oLoad = oItem.childNodes[0];
var XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
XmlHttp.onreadystatechange=function(){
if(XmlHttp.readyState==4){
if(XmlHttp.status==200){
if(XmlHttp.responseXML.xml == " "){ oLoad.setText("unavaible1");return;}
var XmlItem=oItem.parseElement(XmlHttp.responseXML.documentElement);
if(XmlItem.childNodes.length == 0){ oLoad.setText("unavailable") }
else
oItem.addNodesLoop(XmlItem);
for(var i=0;i {
if(parseInt(getCook ie("item" oItem.childNodes[i].id)) = =1)
{ oItem.childNodes[i].expand();}
}
if(Global.selectedItem == oItem.childNodes [0])oItem.select();
oLoad.remove();
}
}
else{
oLoad.setText("사용할 수 없음");
}
XmlHttp = null;
oItem.select(1);
}
}
시도해 보세요{
XmlHttp.open("get",this.Xml (/?/g.test(this.Xml)?"&":"?") "temp =" Math.random(),true);
XmlHttp.send();
}catch(e){ oLoad.setText("unavaible");}
}
xtreeItem.prototype.setup=function(oTarget){
this.add(new treeItem("로드 중..."));
oTarget.appendChild(this.toString());
this.setuped=true;
if(this.childNodes.length>0 || this.open) this.expand();
}
/*****************************************************/
함수 setCookie(이름, 값)
{
var 일 = 7;
var exp = new Date();
exp.setTime(exp.getTime() 일*24*60*60*1000);
document.cookie = 이름 "=" escape (값) ";expires=" exp.toGMTString();
}
함수 getCookie(이름)
{
var arr = document.cookie.match(new RegExp("(^| )" name "=([^;]*)(;| $)"));
if(arr != null) return unescape(arr[2]); null을 반환합니다.
}
함수 delCookie(이름)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(이름);
if(cval!=null) document.cookie= 이름 "=" cval ";expires=" exp.toGMTString();
}