﻿var objLI_Current = null;
var strRootPath = "";

var oConfig = null;

var strXSLSrc = "deeptree/deeptree.xsl";  
var objXSLDoc;
/*
objXSLDoc = new ActiveXObject("Microsoft.XMLDOM");
objXSLDoc.async = false;
objXSLDoc.load( strXSLSrc );
if (objXSLDoc.xml == "")
{
	var objXslXMLHttp = new ActiveXObject("MSXML2.XMLHTTP");
	objXslXMLHttp.open( "GET", strXSLSrc, false );
	objXslXMLHttp.send();
	
	objXSLDoc.loadXML( objXslXMLHttp.responseXml.xml );
}
*/
var m_iMaxCalls = 1024;
//var m_aoCalls   = new Array();
var m_aoCalls;
var m_iLastCall = 0;
var m_iMasterIdx = null;
var m_bSyncFailed = false;
var m_bMouseDown = false;

var m_sTempNodeStart = "<div class='clsItem' type='leaf'><span class='clsSpace' type='img'><span class='clsLeaf'>.</span></span><span class='clsLabel' type='label'><span class='clsUnavailable'>";
var m_sTempNodeEnd = "</span></span></div>";

var m_sUnavailableText = "정보없음";
var m_sLoadingText = "로딩 중...";
var m_bScroll = false;

var element=null;
var xmlDoc = null;
var m_nBrwType;

//-----------------------------------------------
// GetXML(strXMLSrc, strXSLsrc)
//-----------------------------------------------

function setBrowserType()
{
	var a,ua = navigator.userAgent;
	this.bw= { 
	  safari    : ((a=ua.split('AppleWebKit/')[1])?a.split('(')[0]:0)>=124 ,
	  konqueror : ((a=ua.split('Konqueror/')[1])?a.split(';')[0]:0)>=3.3 ,
	  mozes     : ((a=ua.split('Gecko/')[1])?a.split(" ")[0]:0) >= 20011128 ,
	  opera     : (!!window.opera) && ((typeof XMLHttpRequest)=='function') ,
	  msie      : (!!window.ActiveXObject)?(!!createHttpRequest()):false 
	}
	if (this.bw.safari)
	    m_nBrwType = 1;
	else if (this.bw.konqueror)
	    m_nBrwType = 2;
	else if (this.bw.mozes)
	    m_nBrwType = 3;
	else if (this.bw.opera)
	    m_nBrwType = 4;
	else if (this.bw.msie)
	    m_nBrwType = 5;
	else
	    m_nBrwType = 0;

//	return (this.bw.safari||this.bw.konqueror||this.bw.mozes||this.bw.opera||this.bw.msie)
}

function setEncodeHeader(oj){
	var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
	if(!window.opera){
		oj.setRequestHeader('Content-Type',contentTypeUrlenc);
	} else {
		if((typeof oj.setRequestHeader) == 'function')
			oj.setRequestHeader('Content-Type',contentTypeUrlenc);
	}	
	return oj;
}

function loadDom(oj, szUrl, bSync)
{
    var szArr;
    szArr = szUrl.split("?");
	var data=encodeURI(szArr[1]);

    var url = szArr[0] + "?" + szArr[1];
	//open 메소드
	oj.open("GET",url,bSync,'','');
	
	//헤더 application/x-www-form-urlencoded 설정
	setEncodeHeader(oj)

	//브라우저 판정
	if(m_nBrwType==1 || m_nBrwType==3 || m_nBrwType==4){
        oj.overrideMimeType('text/xml');
	}
    
	//send 메소드
	oj.send(null);
}

function GetXML( strXMLSrc , oEl , oElClass , oSync )
{
    var aryXMLNodes;
    var i = 0;
    var strRetVal = "";
    
    var iCall = fnAllocCall();

    var objXMLDoc = createHttpRequest();//makeDom(fnDom, strXMLSrc, false);

    m_aoCalls[iCall] = new CallObject( objXMLDoc , oEl , oElClass , oSync , strXMLSrc);

	if(m_nBrwType==1 || m_nBrwType==3 || m_nBrwType==4){
		objXMLDoc.onload = Function( "fnLoadComplete( " + iCall + " );" );
	} else if(m_nBrwType==5){
        objXMLDoc.onreadystatechange = Function( "fnLoadComplete( " + iCall + " );" );
    }

    loadDom(objXMLDoc, strXMLSrc, true);
    
    return iCall;
}

//-------------------------------------------------------------------------------------------------
//                                     EVENT HANDLERS
//-------------------------------------------------------------------------------------------------

//-----------------------------------------------
// Init()
//-----------------------------------------------

function Init()
{
    
    var strHTML;
    var objLI;
    
    // Set up global tree accessors.
    //   TODO:: check that these have not been overridden by 
    //          another consuming application.
    //   TODO:: encapsulate global accessors in other functionality 
    //          as well (dtbar,searchtab,contentbar should set themselves, 
    //          rather than doing it here)
/*    
    window.top.deeptree = element;
    window.top.dtbar = top.frames.fraBottom.frames.fraLeftFrame.frames.fraDTBar;
    window.top.contentbar = top.frames.fraBottom.frames.fraContentBar;
    window.top.content = top.frames.fraBottom.frames.fraContent;
    window.top.searchtab = top.frames.fraBottom.frames.fraLeftFrame.frames.fraSearchTab;
    window.top.leftframe = top.frames.fraBottom.frames.fraLeftFrame;
    window.top.rightframe = top.frames.fraBottom.frames.fraRightFrame;
    window.top.mainframeset = top.document.all.fstMain;
*/    

	setBrowserType();
    makeDom(getDom, strXSLSrc, false, true );
    objXSLDoc = xmlDoc;

    m_bMouseDown = false;   
    m_iMaxCalls = 1024;
    m_iLastCall = 0;
    m_aoCalls   = new Array();

    oConfig = new Config
	element.type = "container";
    m_iMasterIdx = GetXML( oConfig.sTopXmlSrc , element , "deeptree" );
//    window.document.body.attachEvent("onkeydown",KeyDown);
}

//-----------------------------------------------
// Click()
//-----------------------------------------------

function Click(event, objThis)
{
    
	var objUnknown = objThis;
	var objLI;

//	objUnknown = window.event.srcElement;

//	window.event.cancelBubble = true;
//	window.event.returnValue = false;
	event.cancelBubble = true;
	event.returnValue = false;
	window.document.body.focus();

 	if( objUnknown.tagName.toUpperCase() == "A" ) //레이블을 선택한 경우
	{  
		objLI = objUnknown.parentNode.parentNode;
		SelectNode(objLI, false, false);
		
		var arrChild = GetChildren(objLI);
		if (arrChild != null) //마지막노드인경우
		{
			if(arrChild.length > 0)
			{
				return false;
			}
			else
			{
				ToggleNode(objLI);
			}
		}

    }
    else if( null != objUnknown.parentNode && objUnknown.parentNode.getAttribute("type") == "img" ) //+,-를 선택한 경우
    {
    	objLI = objUnknown.parentNode.parentNode;

		if ( objLI.getAttribute("type") == "leaf" ) //마지막 노드인경우
		{
			SelectNode( objLI, false, false );
		}
		else // + 가 있는 곳일 경우
		{

			//SelectNode( objLI, true, false );
			ToggleNode(objLI);
		}
	
    }
    else if( objUnknown.getAttribute("type") == "img" )
    {
		objLI = objUnknown.parentNode;
		//if ( objLI.type == "leaf" )
		//{
			SelectNode( objLI, false, false );
		//}
		//else
		//{
			ToggleNode(objLI);
		//}
	}
	else if( objUnknown.getAttribute("type") == "label" )
	{
		objLI = objUnknown.parentNode;
		SelectNode(objLI, false, false );
		ToggleNode(objLI);
	}
	else
	{
		SelectNode(objLI_Current, true, false);
	}
	return false;
}


function Sync_Click()
{
/*
	//alert(objLI_Current.NodeId);
 	// alert( GetHtmlElement( element , "div" ).Title);
	//var objLI = GetHtmlElement( element , "div" )
	//objA = GetHtmlElement(objLI,"A")
	var objA = GetHtmlElement(element,"A")
	var sHref = String( objA.href );
	//alert(sHref);
	//LoadNodeContent(objLI);
	//objA = GetHtmlElement(objSPAN,"A")
	//var sHref = String( objA.href );
*/
	
	return objLI_Current.children[1].children[0].href;
	
}

//-----------------------------------------------
// KeyDown()
//-----------------------------------------------

function KeyDown(strMoveCode)
  {
    
  var blnRetVal = false
  var objLI;
  var strEventCode ;
  var strEventCodeShift ;
	strEventCode = window.event.keyCode;
	strEventCodeShift = window.event.shiftKey;

  if (window.event.ctrlKey == false && window.event.altKey == false)
    {
    window.event.cancelBubble = true;
    window.event.returnValue = false;

    switch (strEventCode)
      {

      case 9 : // tab key
        if (strEventCodeShift == true)
          {
          MovePrevious();
          }
        else
          {
          MoveNext();
          }
        break;

      case 13 : // enter key
        objLI = window.event.srcElement.parentElement;
	LoadNodeContent(objLI);
        break;

      case 37 : // left key
        MoveLeft()
        break;

      case 38 : // up key
        MoveUp()
        break;

      case 39 : // right key
        MoveRight()
        break;

      case 40 : // down key
        MoveDown()
        break;
          
      case 188 : // "<" key
        MovePrevious();
        break;

      case 190 : // ">" key
        MoveNext();
        break;

      default :
        window.event.cancelBubble = false;
        window.event.returnValue = true;
        blnRetVal = true;
        break;
      }
    }
  else
    {
    window.event.cancelBubble = false;
    window.event.returnValue = true;
    blnRetVal = true;
    }
      
  return blnRetVal;
  }

//-----------------------------------------------
// MouseDown()
//-----------------------------------------------

function MouseDown(objThis)
{
    
	var objUnknown = objThis;

//	objUnknown = window.event.srcElement;

	if (objUnknown.tagName.toUpperCase() == "A")
	{
		objUnknown = objUnknown.parentNode;
	}

	if (objUnknown.getAttribute("type") == "label")
	{
		objUnknown.className = 'clsMouseDown';
		m_bMouseDown = true;
	}
	return true;
}

//-----------------------------------------------
// MouseOut()
//-----------------------------------------------

function MouseOut(objThis)
{
    
	var objUnknown = objThis;
	var objLI;
	var i = 0;

//	objUnknown = window.event.srcElement;

	if (objUnknown.tagName.toUpperCase() == "A")
	{
		objUnknown = objUnknown.parentNode;
	}

	if (objUnknown.getAttribute("type") == "label" )
	{
		objUnknown.className = objUnknown.classType;
	}
	return true;
}

//-----------------------------------------------
// MouseOver()
//-----------------------------------------------

function MouseOver(objThis)
{
    
	var objUnknown = objThis;
	var strStatus;

//	objUnknown = window.event.srcElement;

	if (objUnknown.tagName.toUpperCase() == "A")
	{
		objUnknown = objUnknown.parentNode;
	}

	if (objUnknown.getAttribute("type") == "label")
	{
		objUnknown.className = 'clsMouseOver';
	}

	return true;
}

//-----------------------------------------------
// MouseUp()
//-----------------------------------------------

function MouseUp(objThis)
{
    
	var objUnknown = objThis;
	var objLI;
	var i = 0;

//	objUnknown = window.event.srcElement;

	if (objUnknown.tagName.toUpperCase() == "A")
	{
		objUnknown = objUnknown.parentNode;
	}

	if (objUnknown.getAttribute("type") == "label")
	{
		objUnknown.className = 'clsMouseOver';
	}
	return true;
}

//-----------------------------------------------
// SelectStart()
//-----------------------------------------------

function SelectStart()
{
    
	window.event.cancelBubble = true;
	window.event.returnValue = false;
	return false;
}

//-------------------------------------------------------------------------------------------------
//                                     PUBLIC METHODS
//-------------------------------------------------------------------------------------------------

//-----------------------------------------------
// MoveNext()
//-----------------------------------------------

function MoveNext()
{
    
	var objLI_Temp;
	var objLI_New;
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	
	if( null == objLI_Current ) return;
	
	if ( objLI_Current.state == "shown")
	{
		objLI_New = GetFirstChild(objLI_Current);
		if (objLI_New != null)
		{
			SelectNode(objLI_New, false, true);
		}
	}
	else
	{
		if (objLI_Current.type != "leaf" )
		{
			var bLoad = ExpandNode(objLI_Current);
			if( bLoad )
			{
				objLI_Current.selectChild = true;
			}
			else
			{
				objLI_New = GetFirstChild(objLI_Current);
				if (objLI_New != null)
				{
					SelectNode(objLI_New, false, true);
				}
			}		
		}
		else
		{
			objLI_Temp = objLI_Current;
			objLI_New = GetNextSibling(objLI_Temp);
			while (objLI_New == null)
			{
				objLI_Temp = GetParent(objLI_Temp);
				if (objLI_Temp == null)
				{
					objLI_New = objLI_Current;
				}
				else
				{
					objLI_New = GetNextSibling(objLI_Temp);
				}
			}
			SelectNode(objLI_New, false, true);
		}
	}
}


//-----------------------------------------------
// BtnClick_MoveTop()
//-----------------------------------------------
function BtnClick_MoveTop()
{
	MoveLeft();
}

//-----------------------------------------------
// BtnClick_MovePrev()
//-----------------------------------------------
function BtnClick_MovePrev()
{
          MovePrevious();
}

//-----------------------------------------------
// BtnClick_MoveNext()
//-----------------------------------------------
function BtnClick_MoveNext()
{
          MoveNext();
}


//-----------------------------------------------
// MovePrevious()
//-----------------------------------------------

function MovePrevious()
{
    
	if( null == objLI_Current ) return;
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	
	var objLI_New;
	objLI_New = GetPreviousSibling(objLI_Current);

	if (objLI_New != null)
	{
		SelectNode(objLI_New, false, true);
	}
	else
	{
		objLI_New = GetParent(objLI_Current);
		if (objLI_New != null)
		{
			SelectNode(objLI_New, false, true);
		}
	}
}

//-----------------------------------------------
// MoveLeft()
//-----------------------------------------------

function MoveLeft()
{
    
	var objLI_New;
	
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	
	if (objLI_Current.state == "shown")
	{
		CollapseNode(objLI_Current);
	}
	else
	{
		objLI_New = GetParent(objLI_Current);
		if (objLI_New != null)
		{
			SelectNode(objLI_New, false, true);
		}
	}
}

//-----------------------------------------------
// MoveUp()
//-----------------------------------------------

function MoveUp()
{
    
	var objLI_New;
	
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	
	objLI_New = GetPreviousSibling(objLI_Current);
	
	if (objLI_New != null)
	{
		while (objLI_New.state == "shown")
		{
			objLI_New = GetLastChild(objLI_New);
		}
		SelectNode(objLI_New, false, true);
	}
	else
	{
		objLI_New = GetParent(objLI_Current);
	    if (objLI_New != null)
		{
			SelectNode(objLI_New, false, true);
		}
	}
}

//-----------------------------------------------
// MoveRight()
//-----------------------------------------------

function MoveRight()
{
    
	var objLI_New;
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	if( objLI_Current.state == "shown")
	{
		objLI_New = GetFirstChild(objLI_Current);
		if (objLI_New != null)
		{
			SelectNode(objLI_New, false, true);
		}
	}
	else if( objLI_Current.type != "leaf" )
	{
		ExpandNode(objLI_Current);
	}
}

//-----------------------------------------------
// MoveDown()
//-----------------------------------------------

function MoveDown()
{
    
	var objLI_New;
	var objLI_Temp;
	
	if( null == objLI_Current ) objLI_Current = GetHtmlElement( element , "div" );
	
	if (objLI_Current.state == "shown")
	{
		objLI_New = GetFirstChild(objLI_Current);
		SelectNode(objLI_New, false, true);
	}
	else
	{
		objLI_Temp = objLI_Current;
		objLI_New = GetNextSibling(objLI_Temp);

		while (objLI_New == null)
		{
			objLI_Temp = GetParent(objLI_Temp);

			if (objLI_Temp == null)
			{
				objLI_New = objLI_Current;
			}
			else
			{
				objLI_New = GetNextSibling(objLI_Temp);
			}
		}
		SelectNode(objLI_New, false, true);
	}
}

//-----------------------------------------------
// Sync(xml)
//-----------------------------------------------
//동기화
function SyncAsync( oSync )
{
//alert("동기화");

   if( null != oSync.oLi )
    {
        oSync.oLastLi = oSync.oLi;
    }
    if( null == oSync.oContextList ) return false;
    var oElementId = oSync.oContextList.item( oSync.iCurrentIdx ).getAttribute( "id" );
    var oEl = window.document.all( oElementId );

    if( !oSync.bBadIds && null != oEl && "object" == typeof( oEl ) )
    {

        oSync.oLi = oEl.parentElement;
    }
    else
    {
        oSync.bBadIds = true;
        var sTitle = oSync.oContextList.item( oSync.iCurrentIdx ).getAttribute( "label" );
        oEl = GetNodeFromTitle( sTitle , oSync.oLastLi );
        if( null != oEl )
        {
            oSync.oLi = oEl.parentElement;
        }
        
    }

    oSync.iCurrentIdx++;



    if( oSync.iCurrentIdx == oSync.oContextList.length ) //마지막 노드인 경우
    {
        ExpandNode( oSync.oLi , null );
        SelectNode( oSync.oLi , true, true );
        
    }
    else
    {
        ExpandNode( oSync.oLi , oSync );
    }
    if( oSync.oLi == null ) 
    {
	return false;
    }

    return true;
}

function SyncObject( oContextList )
{
     
   this.oContextList = oContextList;
    this.oLi = null;
    this.oLastLi = null;
    this.bBadIds = false;
    this.iCurrentIdx = 0;
}

function Sync( sNodeId )
{
   try
    {
        if( top.content.document.body.readyState != "complete" )
        {
            return;
        }
	var oContextXml = top.fraBottom.fraContent.xmlPageContext;
        oContextXml = oContextXml.selectNodes( "//item[@id]" );
        var oSync = new SyncObject( oContextXml );
       if( !SyncAsync( oSync ) )
       {
            m_bSyncFailed = true;
       }
   }
    catch(e)
    {
	//alert("failed");
	m_bSyncFailed = true;
    }
}


//-------------------------------------------------------------------------------------------------
//                                     PRIVATE METHODS
//-------------------------------------------------------------------------------------------------

function GetNodeFromTitle( sTitle , oParentEl )
{
   
    
    var oList = null;
    var oNode = null;
    var oTmpNode = null;
    if( oParentEl == null )
    {
        oList = element.children;
    }
    else
    {
        var oList = GetChildren( oParentEl );
    }
    
    for( var i = 0; i < oList.length; i++ )
    {
        oTmpNode = GetHtmlElement( oList[i] , "SPAN" , "label" )
        if( null != oTmpNode && "object" == typeof( oTmpNode ) && oTmpNode.title == sTitle ) 
        {
            oNode = oTmpNode;
            break;
        }
    }
    return oNode;
}

//-----------------------------------------------
// ToggleNode(objLI)
//-----------------------------------------------

function ToggleNode(objLI)
{
    
	if (objLI.getAttribute("type") == "parent")
	{
		if (objLI.state == "shown")
		{
			CollapseNode(objLI);
		}
		else
		{
			ExpandNode(objLI);
		}
	}
}


//-----------------------------------------------
// CollapseNode(objLI)
//-----------------------------------------------

function CollapseNode(objLI)
{
    
	var i = 0;
	var objUL;
	var objIMG;

	objUL = GetHtmlElement(objLI,"DIV","container");

	if (objUL != null)
	{
		objIMG = GetHtmlElement(objLI,"SPAN","img");
		if (objUL != null)
		{
			objLI.state = "hidden";
			objUL.className = "hide";
			objIMG.innerHTML = "<span class='clsCollapse' onclick='Click(event,this);'>+</span>";

			if (IsChild(objLI_Current, objLI) == false)
			{
				//SelectNode(objLI_Current, false, false);
				//SelectNode(objLI, false, false);
				//HighlightNode(objLI);
			}
		}
	}
}


function ExpandFirstLevel()
{
	
    
	var oList = null;
	var oNode = null;
	var oTmpNode = null;

	oList = element.children;
//	alert(oList.length);
	/*
	for( var i = 0; i < oList.length; i++ )
	{
       oTmpNode = GetHtmlElement( oList[i] , "SPAN" , "label" )
        if( null != oTmpNode && "object" == typeof( oTmpNode ) && oTmpNode.title == sTitle ) 
        {
            oNode = oTmpNode;
            break;
        }
	}*/
}

//-----------------------------------------------
// ExpandNode(objLI)
//-----------------------------------------------

function ExpandNode( objLI , oSync )
{
    
	var i = 0;
	var objUL;
	var objIMG;
	var objSPAN;

	objUL = GetHtmlElement(objLI,"DIV","container");
	
	if (objUL != null)
	{
		objIMG = GetHtmlElement(objLI,"SPAN","img");

		if (objIMG != null)
		{
			objSPAN = GetHtmlElement(objLI,"SPAN","label");

			objUL.className = "shown";
			objIMG.innerHTML = "<span class='clsExpand' onclick='Click(event,this);'>-</span>";
			//objIMG.src = "/IMG/expand.gif";
			objLI.state = "shown";
			return LoadChildren( objLI , oSync );
		}
	}
}

//-----------------------------------------------
// SelectNode(objLI, bSuppressLink)
//-----------------------------------------------

function SelectNode( objLI, bSupressLink, bForceIntoView )
{
    var objA;
    var objSPAN;
	if( null == objLI ) objLI = GetHtmlElement( element , "div" );
	if( objLI.getAttribute("type") == "none" )
	{
		objLI_Parent = GetParent( objLI );
		objLI_Next = GetNextSibling( objLI_Parent );
	}
    if( bSupressLink != true ) 
    {
       LoadNodeContent(objLI);
    }
    HighlightNode(objLI);
    ExpandAncestors( objLI );
    ScrollIntoView( objLI, bForceIntoView );
    UpdateMessages( objLI );

    try
    {
		if( "object" == typeof( top.contentbar ) && "object" == typeof( top.contentbar.document.all("showtoc") ) )
		{
			top.contentbar.document.all("showtoc").style.display = "none";
		}
	}
	catch(e)
	{
	}
	

}

//-----------------------------------------------
// HighlightNode(objLI)
//-----------------------------------------------

function UpdateMessages( objLI )
{
    
    objSPAN = GetHtmlElement(objLI,"SPAN","label");
    if( null != objSPAN )
    {
        window.defaultStatus = objSPAN.title;
//        top.document.title = objSPAN.title;
    }
}


function ScrollIntoView( objLI, bScroll )
{
    
    //var iY = window.document.body.scrollTop;
    //var iX = window.document.body.scrollLeft;
    
    //var bScrollY = ( objLI.offsetTop < iY	|| objLI.offsetTop + 19 > iY + window.document.body.clientHeight );
    //var bScrollX = false;
    //( objLI.offsetLeft < iX	|| objLI.offsetLeft + objLI.offsetWidth/2 > iX + window.document.body.clientWidth );
    if(objLI.offsetTop - window.document.body.scrollTop > 0 && objLI.offsetTop - window.document.body.scrollTop +10 < window.document.body.clientHeight)
    {
	return;
    }
    if( bScroll )
    {
		//var iY = !( bScrollY || bScroll ) ? iY : 
		//var iX = !( bScrollX || bScroll ) ? iX : 
    	var iY = objLI.offsetTop - window.document.body.clientHeight/2;
    	var iX = 0; //objLI.offsetLeft - 15; 가로 스크롤은 하지 않음
        window.scrollTo( iX , iY );
	}
	
    return;
}


function ExpandAncestors( objLI )
{
    
    while( objLI = GetParent( objLI ) )
    {
        if( objLI.state != "shown" ) ExpandNode( objLI );
    }
}

function HighlightNode(objLI)
  {
  var i = 0;
  var objSPAN;
  var objSPAN_Current;

  objSPAN = GetHtmlElement(objLI,"SPAN","label");
  
  if (objSPAN != null)
    {
    if (objSPAN.classType != "clsUnavailable")
      {
      objSPAN.className = "clsCurrentHasFocus";
      objSPAN.classType = "clsCurrentHasFocus";

      if (objLI != objLI_Current)
        {
        if (objLI_Current != "")
          {
          objSPAN_Current = GetHtmlElement(objLI_Current,"SPAN","label");

          if (objSPAN_Current != null)
            {
            objSPAN_Current.className = "";
            objSPAN_Current.classType = "";
            }
          }
        }
      }
    objLI_Current = objLI;
    }
  }

//-----------------------------------------------
// LoadNodeContent(objLI)

//-----------------------------------------------

function LoadNodeContent(objLI)
{
    
    var objSPAN;
    var objA;

    objSPAN = GetHtmlElement(objLI,"SPAN","label");

    if (objSPAN != null)
    {
        objA = GetHtmlElement(objSPAN,"A")
        if (objA != null)
        {

            var sTmpArray = new Array();
            var sHref = String( objA.href );
            var sQuery = "";
            var sHash = "";
            if( "undefined" != sHref )
            {
                sTmpArray = sHref.split( "#" );
                if( sTmpArray.length > 1 )
                {
                    sHref = sTmpArray[0];
                    sHash = sTmpArray[1];
                }
                
                sTmpArray = sHref.split( "?" );
                sHref = sTmpArray[0];
                for( var i = 1; i < sTmpArray.length; i++ )
                {
                    sQuery += "?" + sTmpArray[i];
                }
                if( sQuery.indexOf( "frame=" ) == -1 && objA.target == oConfig.sTarget )
                {
                    sQuery = sQuery.length > 0 ? sQuery + "&frame=true" : "?frame=true";
                }
                else
                {
                    sQuery = sQuery.length > 0 ? sQuery : "";
                }
                sHash = sHash.length > 0 ? "#" + sHash : "";
            }

            var sLocation =  sHref + sQuery + sHash;

            if( objA.target )
            {
                window.open( sLocation , objA.target );
		//alert(sLocation);
            }
            else
            {
                top.content.location = sLocation;
            }
        }
    }
}

function makeDom( callback, szUrl, bSync, mime_xml )
{
    var szArr;
    szArr = szUrl.split("?");
    
    sendRequest(callback, szArr[1],'GET',szArr[0],bSync,true, false, mime_xml);    
}

function getDom(oj)
{
    xmlDoc = oj.responseXML;//.documentElement;
    
}

//-----------------------------------------------
// LoadConfig()
//-----------------------------------------------

function Config()
{
    
	element = document.getElementById("deeptree");
    
	var strCfgXMLSrc = "";
    var sPath = "";
    strCfgXMLSrc = element.getAttribute("CfgXMLSrc");

    if (strCfgXMLSrc != "")
    {
        xmlDoc = null;
        makeDom(getDom, strCfgXMLSrc, false);
        var objXMLDoc = xmlDoc;
			
		if ( objXMLDoc != null )
        {
		    var oTopXmlSrc = objXMLDoc.documentElement.getElementsByTagName("TopXMLSrc").item(0);
            if ( null != oTopXmlSrc )
            {
    		    this.sTopXmlSrc = String(oTopXmlSrc.childNodes[0].nodeValue);
            }
            else
            {
                // Error: Invalid TopXMLSrc in Config.xml
            }

		    var oTarget = objXMLDoc.documentElement.getElementsByTagName("ContentTarget").item(0);
            if ( null != oTarget )
            {
    		    this.sTarget = oTarget.childNodes[0].nodeValue;
            }
            else
            {
                //Error: Invalid Target in Config.xml
            }
        }
    }
}

//-----------------------------------------------
// LoadChildren(objLI)
//-----------------------------------------------

function LoadChildren( objLI , oSync )
{
     
   var strXMLSrc = "";
    var strHTML = "";
    var objSPAN;
    var objUL;

    objUL = GetHtmlElement(objLI,"DIV","container");
    if (objUL != null)
    {
		objSPAN = GetHtmlElement(objLI,"SPAN","label")
	    if ( objUL.childNodes.length == 0 || (objUL.childNodes.length == 1 && objUL.childNodes[0].nodeType == 3) )
        {
            objUL.innerHTML = m_sTempNodeStart + m_sLoadingText + m_sTempNodeEnd;
            
            if (objSPAN != null)
            {
                strXMLSrc += strRootPath + objSPAN.getAttribute("xmlsrc");
                GetXML( strXMLSrc , objUL , "shown" , oSync );
				// Indicate that an asyncronous load is taking place
				return true;
            }
            
        }
        else if( null != oSync )
        {
            SyncAsync( oSync );
        }
    }
    return false;
}

//-------------------------------------------------------------------------------------------------
//                                     GET FUNCTIONS
//-------------------------------------------------------------------------------------------------

//-----------------------------------------------
// GetHtmlElement(objParent,strChildTagName)
//-----------------------------------------------

function GetHtmlElement(objParent,strChildTagName,strType)
  {
    
  var i = 0;
  var objRetVal = null;
  var oChildren = null;
  if( null != objParent )
  {
    oChildren = objParent.childNodes;
  }
  for (i = 0; oChildren != null && i < oChildren.length; i++)
    {
        if( oChildren[i].nodeType == 1 ) {
            if (oChildren[i].tagName.toUpperCase() == strChildTagName.toUpperCase() && ( oChildren[i].getAttribute("type") == strType || strType == null ) )
            {
                objRetVal = oChildren[i];
                break;
            }
        }
    }
  return objRetVal;
  }

//-----------------------------------------------
// GetNextSibling(objLI)
//-----------------------------------------------

function GetNextSibling(objLI)
{
    
	var i = 0;
	var arySiblings;
	var objRetVal = null;

	arySiblings = GetSiblings(objLI);

	if (arySiblings != null)
	{
		for (i = 0; i < arySiblings.length; i++)
		{
			if ((arySiblings[i] == objLI) && (i < (arySiblings.length - 1)))
			{
				objRetVal = arySiblings[i+1];
				break;
			}
		}
	}
	
	return objRetVal;
}

//-----------------------------------------------
// GetPreviousSibling(objLI)
//-----------------------------------------------

function GetPreviousSibling(objLI)
{
    
	var j = 0;
	var arySiblings;
	var objRetVal = null;

	arySiblings = GetSiblings(objLI);

	if (arySiblings != null)
	{
		for (j = 0; j < arySiblings.length; j++)
		{
			if (arySiblings[j] == objLI && j > 0)
			{
				objRetVal = arySiblings[j-1];
				break;
			}
		}
	}
	
	return objRetVal;
}

//-----------------------------------------------
// GetFirstChild(objLI)
//-----------------------------------------------

function GetFirstChild(objLI)
{
    
	var aryChildren;
	var objRetVal = null;

	aryChildren = GetChildren(objLI);
	objRetVal = aryChildren[0];

	return objRetVal;
}

//-----------------------------------------------
// GetLastChild(objLI)
//-----------------------------------------------

function GetLastChild(objLI)
{
    
	var aryChildren;
	var objRetVal = null;

	aryChildren = GetChildren(objLI);
	objRetVal = aryChildren[aryChildren.length-1];

	return objRetVal;
}

//-----------------------------------------------
// GetParent(objLI)
//-----------------------------------------------

function GetParent(objLI)
{
    
	var objRetVal = null;

	if( objLI != null && objLI.parentNode != null )
	{
		objRetVal = objLI.parentNode.parentNode;
	}

	if ( null != objRetVal && objRetVal.getAttribute("type") != "parent" )
	{
		objRetVal = null;
	}
	
	return objRetVal;
}

//-----------------------------------------------
// GetSiblings(objLI)
//-----------------------------------------------

function GetSiblings(objLI)
{
    
	var objUL;
	var aryRetVal = null;

	objUL = objLI.parentElement;

	if ( objUL != null && objUL.type == "container" )
	{
		aryRetVal = objUL.children
	}

	return aryRetVal;
}

//-----------------------------------------------
// GetChildren(objLI)
//-----------------------------------------------

function GetChildren(objLI)
{
    
	var objUL;
	var aryRetVal =  null;

	objUL = GetHtmlElement( objLI , "DIV" , "container" );
	if( null != objUL )
	{
		aryRetVal = objUL.children;
	}

	return aryRetVal;
}




//-----------------------------------------------
// IsChild(objLI_Child, objLI_Parent)
//-----------------------------------------------

  function IsChild(objLI_Child, objLI_Parent)
    {
    
    var objLI_Temp;
    var blnRetVal = false;
        
    objLI_Temp = GetParent(objLI_Child);
        
    while (objLI_Temp != null)
      {
      if (objLI_Temp == objLI_Parent)
        {
        blnRetVal = true;
        break;
        }
      objLI_Temp = GetParent(objLI_Temp);
      }
    return blnRetVal;
    }


//-------------------------------------------------------------------------------------------------
//                                     ASYNCRONOUS LOAD HANDLERS
//-------------------------------------------------------------------------------------------------


function fnAllocCall()
{
     
   var iReturn = null;
    for (var i = 0; i < m_iMaxCalls && m_aoCalls[m_iLastCall] != null; i++)
    {
        m_iLastCall = (m_iLastCall + 1) % m_iMaxCalls;
    }
    
    if (i < m_iMaxCalls)
    {
        iReturn = m_iLastCall;
    }
    return iReturn;
}

function fnDeAllocCall( iCallIdx )
{
    
    m_aoCalls[iCallIdx] = null;
}



function CallObject( oXml , oEl , sElClass , oSync, sUrl )
{
    
    this.oXml = oXml;
    this.oSync = oSync;
    this.oEl = oEl;
    this.sElClass = sElClass;
    this.oUrl = sUrl;
}

function fnLoadComplete( iIndex )
{

    if( iIndex == null ) return;
    var oCall = m_aoCalls[ iIndex ];
    try
    {
        var iReadyState = oCall.oXml.readyState;
    }
    catch(e)
    {
        return;
    }
    
    if(  iReadyState != 4 ) return;
    
    //gzip quick fix
    //재요청해서 데이터를 가져온다.
	
    if (oCall != null && oCall.oXml.responseText == null)
    {
        makeDom(getDom, oCall.oUrl, false, true);
		
        oCall.oXml = xmlDoc.documentElement;
    }
    else
    {
    	if(m_nBrwType==1 || m_nBrwType==3 || m_nBrwType==4){
            oCall.oXml = oCall.oXml.responseXML.documentElement;
		}
		else if(m_nBrwType==5){
		    var objXMLDoc = new ActiveXObject("Microsoft.XMLDOM");
		    
            objXMLDoc.loadXML( oCall.oXml.responseText );
            oCall.oXml = objXMLDoc;
        }
    }
//	alert(oCall.oXml.xml);

    if( oCall != null && oCall.oXml.childNodes.length > 0 )
    {
        aryXMLNodes = oCall.oXml.getElementsByTagName("TreeNode");
        
		for (i = 0; i < aryXMLNodes.length; i++)
        {
            var nodeXmlSrc = aryXMLNodes[i].getAttribute("NodeXmlSrc");
            if( nodeXmlSrc != "" )
            {
			    var strNodeId = aryXMLNodes[i].getAttribute("NodeId");
			    if(strNodeId == "mk" || strNodeId == "ko" || strNodeId == "mm" || strNodeId == "mh" || strNodeId == "cm" || strNodeId == "me" || strNodeId == "pub")
			    {
			    }
			    else
			    {
				    break;
			    }

                makeDom( getDom, strRootPath+nodeXmlSrc, false, true );
                var objXMLDoc_Child = xmlDoc;

                //gzip fix
                //재전송
				if (objXMLDoc_Child.documentElement == null)
                {
				    var objXMLHttp = new ActiveXObject("MSXML2.XMLHTTP");
				    objXMLHttp.open( "GET", strRootPath + aryXMLNodes[i].getAttribute("NodeXmlSrc"), false );
				    objXMLHttp.send();
    				
				    objXMLDoc_Child.loadXML( objXMLHttp.responseXml.xml );
                }
                
                if( null != objXMLDoc_Child.documentElement )
                {
                    aryXMLNodes[i].parentNode.replaceChild(objXMLDoc_Child.documentElement, aryXMLNodes[i]);
                }
                objXMLDoc_Child = null;
            }
        }
        
        bFixLoad = false;//oCall.oEl.contains( objLI_Current ); // 여기 수정해야 한다.
        var sHtml = ""
        var message = "";  
        if (objXSLDoc.nodeName != "")
        {
        	if(m_nBrwType==1 || m_nBrwType==3 || m_nBrwType==4){
                var processor = new XSLTProcessor();  
                processor.importStylesheet(objXSLDoc);  
                sHtml = processor.transformToDocument(oCall.oXml);  

                var inBody = sHtml.getElementsByTagName("div");  
                for( var x=0; x<inBody.length; x++) {
                    message += cvtHtmlString(inBody[x]);
                }
            } else {
                sHtml = oCall.oXml.transformNode( objXSLDoc );
                message = sHtml;
            }


        } 

        if ( message != null && message != "" )
        {
//        alert(message);
            oCall.oEl.innerHTML = message;//sHtml;
            oCall.oEl.className = oCall.sElClass;
        }
        else
        {
            oCall.oEl.innerHTML = m_sTempNodeStart + m_sUnavailableText + m_sTempNodeEnd;
        }
        
        if( bFixLoad )
        {
	    SelectNode( oCall.oEl.children[0] );
        }

        if( iIndex == m_iMasterIdx && m_bSyncFailed == true ) //첫번째 호출이 성공하지 못했을 경우 다시 동기화 호출
        {
		//전역변수를 선언해서 마우스 클릭시 무조건 동기화하는것 막음
		if(m_bMouseDown == true)
		{
			m_bMouseDown == false;
		}
		else
		{
			Sync();
		}
        }
        
        if( oCall.oSync != null )
        {
            SyncAsync( oCall.oSync );
        }
        if( null != objLI_Current && objLI_Current.selectChild ) MoveNext();
        fnDeAllocCall( iIndex );
    }
    else
    {
        oCall.oEl.innerHTML = m_sTempNodeStart + m_sUnavailableText + m_sTempNodeEnd;
    }
    return;

}

