﻿//ASP.NET TREE JScript File

//------------------------------------------- Defination -----------------------------------------------------------//

//************* Treeview Object Defination *************//
function Treeview(incompletedItemIcon,currentItemIcon,completedItemIcon)
{
    this.IncompletedItemIcon = incompletedItemIcon;
    this.CurrentItemIcon = currentItemIcon;
    this.CompletedItemIcon = completedItemIcon;    
}
//******************************************************//

//************* Treenode Object Defination *************//
function TreeNode(nodeID)
{
    var tvPackage = document.getElementById("tvPackage");
    var tempTreeNode = document.getElementById(nodeID);
    
    if(ObjectIsNull(tempTreeNode))
    {
        return null;
    }
    if(ObjectIsNull(treeview))
    {
        treeview = new Treeview("","","");
    }

    var icon = document.getElementById("icon"+nodeID);
    var originalIcon = document.getElementById("OriIcon"+nodeID);

    var textHeight = tempTreeNode.offsetHeight;    
    var iconHeight = icon.offsetHeight;
    var height = (iconHeight > textHeight)?iconHeight:textHeight;
    
    var nodeTop = GetPosition(tempTreeNode).y;
    
    var treeTop = GetPosition(tvPackage).y;
    var treeClientHeight = tvPackage.clientHeight;
    
    var bodyClientHeight = document.body.clientHeight;
    
    // Whether the node is completed
    this.IsFinished = function () {
        var itemId = document.getElementById("preItemFinished").value;
        return (itemId.indexOf(tempTreeNode.id) >= 0);
    }
    
    // Change the style of the node
    this.ChangeStyle = function (styleName) {
        tempTreeNode.className = styleName;
        this.SetNodeIcon();
    }
    
    // Set icon of the node
    this.SetNodeIcon = function () {
        if(tempTreeNode.className == "NavCompletedItem")
        {
            if (icon && (!ObjectIsNull(treeview.CompletedItemIcon)))
            {        
                icon.src = treeview.CompletedItemIcon;  
            }
            else
            {
                if(originalIcon)
                {
                    icon.src = originalIcon.value;
                }
            }            
        }
        if(tempTreeNode.className == "NavCurrentItem")
        {
            if (icon && (!ObjectIsNull(treeview.CurrentItemIcon)))
            {        
                icon.src = treeview.CurrentItemIcon;  
            }
            else
            {
                if(originalIcon)
                {
                    icon.src = originalIcon.value;
                }
            }   
        }
        if(tempTreeNode.className == "NavIncompleteItem")
        {
            if (icon && (!ObjectIsNull(treeview.IncompletedItemIcon)))
            {        
                icon.src = treeview.IncompletedItemIcon; 
            }
            else
            {
                if(originalIcon)
                {
                    icon.src = originalIcon.value;
                }
            }
        }        
    }
    
    // Focus the node
    this.SetFocus = function () {
        try { tempTreeNode.focus(); } catch(ex){}
        // When the current item scroll up
        var objTop = nodeTop - treeTop;
        if(objTop < tvPackage.scrollTop)
        {
            tvPackage.scrollTop = objTop;
            return;
        }
        
        // When the current item scroll down
        var objBottom = nodeTop + height - treeTop - tvPackage.scrollTop;             
        if(bodyClientHeight >= treeClientHeight)
        {
            if(treeClientHeight < objBottom)
            {
                tvPackage.scrollTop += (objBottom-treeClientHeight);
            }
        }
        else
        {
            if(bodyClientHeight < objBottom)
            {
                tvPackage.scrollTop += (objBottom-bodyClientHeight);
            }
        }
    }
}
//******************************************************//


//------------------------------------------------------------------------------------------------------------------//

//------------------------------------------- Application ----------------------------------------------------------//

//*********************** FIELDS ***********************//
var treeview;
//******************************************************//

//********************* INITIALIZE *********************//
function InitialTreeviewObject(incompletedItemIcon,currentItemIcon,completedItemIcon)
{
    if(ObjectIsNull(treeview))
    {
        treeview = new Treeview(incompletedItemIcon,currentItemIcon,completedItemIcon);
    }
    
    // Focus the current node when first enter
    var arrNode = document.getElementsByTagName('span');
    var len = arrNode.length;	
    
    var curPage = document.getElementById("hidCurrentItem").value;
    var curNode;
    var j=0;
    var regCurExp = '\w*_' + curPage + '$';
    var myCurReg = new RegExp(regCurExp); 
    var nodeId;
    while(j<len)	
    {
        if(myCurReg.test(arrNode[j].id))
        {
            nodeId = arrNode[j].id;
            break;
        }
        j++;
    }
    if(nodeId != null)
    {
        curNode = new TreeNode(nodeId);
        curNode.SetFocus();        
    }
    curNode = null;
}
//******************************************************//

function TreeNodeJumpToPage(pageID,evt)
{
    var feedbackMethod = document.getElementById('hidTreeNodeFeedbackMethod').value;
    var oldPageID = document.getElementById('hidCurrentItem').value;
    if(pageID>oldPageID)
    {
        if(ClientCheck(pageID))
        {
            if(feedbackMethod != "")
            {
                var feedbackReturn;
                eval(feedbackMethod);
                return feedbackReturn;
            }
            else
            {
                return JumpToPage(pageID,evt);
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        return JumpToPage(pageID,evt);
    }
}


function JumpToPage(pageID,evt)
{
    evt = evt || window.event;
    var obj = evt.target || evt.srcElement;
    document.getElementById('hidCurrentItem').value = pageID;
    
    window.onunload = "";
    if ((obj.id !== 'btnNext') &&
        (obj.id !== 'btnPrevious') ) {

        document.getElementById('btnGoTo').click();
        
        return false;
       // __doPostBack('btnGoTo','');
    }
    return true;
}

function ServerCheck(msg,msgType,pageID)
{
    if (CanJump(msg,msgType,pageID)) {
        window.onunload = "";      
	    __doPostBack('btnTurnToPage','');
    }
}

function CanJump(msg, msgType, pageID)
{
    var curPage = document.getElementById("hidCurrentItem").value;

    // "0" means Confirmation type
    if(msgType==0)
    {
        if (window.confirm(msg))
        {
            if(pageID=="")
            {
                return NotAllowJump();
            }
            return AllowJump(curPage,pageID);
        }
        return NotAllowJump();
    }
    else if (msgType == 1) // "1" means alert type
    {
        alert(msg);
        if(pageID=="")
        {
            return NotAllowJump();
        }
        return AllowJump(curPage,pageID);
    }
    return false;
}

// DO NOT JUMP
function NotAllowJump()
{
    document.getElementById("hidCurrentItem").value = document.getElementById("hidPreviousItem").value;                
    return false;
}

// JUMP TO PAGEID
function AllowJump(curPage, pageID)
{
    if (pageID==curPage)
    {
        return true;
    }
    document.getElementById("hidCurrentItem").value = pageID;                
    return true;
}

function MaintainClient()
{
    var prePage = document.getElementById("hidPreviousItem").value;
    var arrNode = document.getElementsByTagName('span');
    var preNode;
    var len = arrNode.length;
    var i=0;
    
    var regPreExp = '\w*_' + prePage + '$';
    var myPreReg = new RegExp(regPreExp);    
       
    while(i<len)
    {
        if(myPreReg.test(arrNode[i].id))
        {
            preNode = new TreeNode(arrNode[i].id);            
            if(preNode.IsFinished())
            {
                preNode.ChangeStyle("NavCompletedItem");
            }
            else
            {
                preNode.ChangeStyle("NavIncompleteItem");
            }
        }
        i++;        
    }
        
    var curPage = document.getElementById("hidCurrentItem").value;
    var curNode;
    var j=0;
    var regCurExp = '\w*_' + curPage + '$';
    var myCurReg = new RegExp(regCurExp); 
    
    while(j<len)	
    {
        if(myCurReg.test(arrNode[j].id))
        {
            curNode = new TreeNode(arrNode[j].id);
            curNode.ChangeStyle("NavCurrentItem");
            curNode.SetFocus();
        }
        j++;
    }
    
    document.getElementById("hidPreviousItem").value = document.getElementById("hidCurrentItem").value;
    preNode = null;
    curNode = null;
}


// Toggle Expand & Collapse
function ExpandCollapse(obj)
{
    TogglePlusMinus(obj);		
    ToggleDisplayChildren(obj)
}

function TogglePlusMinus(obj)
{
	var oc = obj.className;
	var nc;
	if (oc.indexOf("minus")>=0)
	{
		nc = oc.replace("minus","plus");
	}
	else
	{
		if (oc.indexOf("plus")>=0)
		nc = oc.replace("plus", "minus");
	}
	obj.className = nc;
}

function ToggleDisplayChildren(obj)
{
	var childrenToHide = obj.parentNode.getElementsByTagName("ul")[0];
	var oldclass = childrenToHide.style.display;
	var newclass;
	if (oldclass=="none")
	{
		newclass = "block";
	}
	else
	{
		newclass = "none";
	}
	childrenToHide.style.display = newclass;
}
