//////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////Class Definitions////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//	MainMenuBase Class
//		MenuInitialization()
//		setJSFunctionsToCollapsedA()
//////////////////////////////////////////////////////////////////////////////////////
function MainMenuBase(sDivMainMenuName)
{//alert(sDivMainMenuName);
	this.divMainMenuName=sDivMainMenuName;
	this.Init=MenuInitialization;
	this.DivTV;
	this.divTV_id;
	this.SetJSFunctionsToCollapsedA=setJSFunctionsToCollapsedA;
	///indentDiv color
	this.IndentDivColor="";
	this.ParentNodeClass="";
	this.SelectedNodeParentClass="";
	this.ClassSuffix="";
	///CSS Classes/// nodeSelect
	this.SelectedNodeClassGroup= new Object();
	this.SelectedNodeClassGroup.TableClass="";
	this.SelectedNodeClassGroup.TRClass="";
	this.SelectedNodeClassGroup.TDImageClass="";
	this.SelectedNodeClassGroup.TDTextClass="";
	this.SelectedNodeClassGroup.AnchorImageClass="";
	this.SelectedNodeClassGroup.AnchorTextClass="";
	this.SelectedNodeClassGroup.DivChildClass="";
	this.SelectedNodeClassGroup.ExpandedClass="";
	/////
	this.MainSelectedNodeClassGroup= new Object();
	this.MainSelectedNodeClassGroup.TableClass="";
	this.MainSelectedNodeClassGroup.TRClass="";
	this.MainSelectedNodeClassGroup.TDImageClass="";
	this.MainSelectedNodeClassGroup.TDTextClass="";
	this.MainSelectedNodeClassGroup.AnchorImageClass="";
	this.MainSelectedNodeClassGroup.AnchorTextClass="";
	this.MainSelectedNodeClassGroup.DivChildClass="";
	this.MainSelectedNodeClassGroup.ExpandedClass="";
	/////
	this.sSelectedChildDiv="nodeexpandedchild";//for inserting "-"remove it if it not used
	this.sExpandedChildDiv="nodeSelectedynamic";//for line
	/////
	this.TopNodeClass="";
	this.TopNodeExpandedClass="";
	this.TopNodeSelectedCollapsedClass="";
	this.TopNodeSelectedExpandedClass="";
	this.ChildNodeClass="";
	this.ChildNodeSelectedCollapsedClass="";
	this.ChildNodeSelectedExpandedClass="";
	
	
}

function MenuInitialization()
{
//alert();
var divMain =document.getElementById(this.divMainMenuName);
var divInMainArr=divMain.getElementsByTagName("div");
if (divInMainArr.length>0){
     this.DivTV=divInMainArr[0];
	 this.divTV_id=this.DivTV.id;
	 //alert(this.divTV_id);
}
}
////////////////////////Begin:setJSFunctionsToCollapsedA()/////////////////////////

function setJSFunctionsToCollapsedA()
{
    if (this.divTV!=null){
        var aArr=this.divTV.getElementsByTagName("a");
        if(aArr!=null){
            for(var i=0;i<aArr.length;i++){
                if (aArr[i].href.search("javascript:TreeView_")!=-1){
                    if (aArr[i].href.search("setCSSToExpandedDiv")==-1){
                        aArr[i].href=aArr[i].href + ";setCSSToExpandedDiv('"+ getNumValue(aArr[i].href) +"');setJSFunctionsToCollapsedA();";
                    }
                }
            } 
        }
    }
}
///////////////////////End///////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////
//	MainMenu Class
//		initializeSelectedNode()
//		getMainSelectedNode()
//		setCSS()
//////////////////////////////////////////////////////////////////////////////////////
function MainMenu(oBaseMenu)
{
	this.BaseMenu=oBaseMenu;
	this.InitializeSelectedNode=initializeSelectedNode;
	this.SetClassSuffixToClasses = setClassSuffixToClasses;
	this.SelectedNode;
	this.MainSelectedNode;
	this.SetCSS=setCSS;
	this.GetMainSelectedNode=getMainSelectedNode;
	this.SetParentNodes=setParentNodes;
	this.SetMainExpandedDiv=setMainExpandedDiv;
	this.SetChildNodes=setChildNodes;
}

function initializeSelectedNode()
{   
    this.SetClassSuffixToClasses(this.BaseMenu);
	var nodeNo;
	var hiddenCtrl=document.getElementById(this.BaseMenu.divTV_id+"_SelectedNode");
	//var hiddenCtrl=document.getElementById("ta_treenode_SelectedNode");
	//alert(hiddenCtrl.id);
	if (hiddenCtrl!=null)
	{//alert();
		var sSelectedNodeValue=hiddenCtrl.value;
		var sStringToSearch=this.BaseMenu.divTV_id;
        nodeNo=sSelectedNodeValue.substring(sStringToSearch.length+1);
        //alert(nodeNo);
	}
	
	var mnSelectedNode=new MenuNodeItem(nodeNo,this.BaseMenu.DivTV);
	mnSelectedNode.GetNode();
	this.SelectedNode=mnSelectedNode;
	if(this.SelectedNode!=null)
	    this.SelectedNode.IndentDivColor=this.BaseMenu.IndentDivColor;
	//this.SelectedNode.DeleteTableRow();

	var mnMainSelectedNode=this.GetMainSelectedNode();
	this.MainSelectedNode=mnMainSelectedNode;
	if(this.MainSelectedNode!=null)
	    this.MainSelectedNode.IndentDivColor=this.BaseMenu.IndentDivColor;
	    
	//added:27052008
	this.SetParentNodes();
	//added end
	this.SetMainExpandedDiv();
	
	if(this.MainSelectedNode!=null)
	    this.SetChildNodes(this.MainSelectedNode.ChildDiv);

//	MenuNodeItem mnMainSelectedNode=new MenuNodeItem(nodeNo,this.BaseMenu.divTV);
//	mnSelectedNode.GetNode();

}

////getMainSelectedNode
//// called from Initialization Function
function getMainSelectedNode()
{
var oNode=this.SelectedNode;
var divTV=this.BaseMenu.DivTV;
var count=0;
var divParent;
var found=0;
var div;//SelectedNode=this.SelectedNode.ChildDiv;
//alert();
if (oNode.Table!=null){
    if(oNode.ChildDiv==null){
        div=oNode.Table.parentNode;
    }
    else{
        div=oNode.ChildDiv;
    }
    if(div!=null){
        divParent=div.parentNode;
        while (divParent!=null){
            if(divParent.id!="undefined"){
                if(divTV.id==divParent.id){
                    found=1;
                    break;
                }
            }
            div=divParent;
            divParent=divParent.parentNode;
        } 
        if(found==1){ 
	        if(div.id!="undefined" && div.id!=""){  
		    nodeNo=div.id.substring(divTV.id.length+1,div.id.indexOf("Nodes"));//div name(i.e. mainmnu_MainMenu) length + 1(for suffix like n ot t)
		    var oMainNode=new MenuNodeItem(nodeNo,divTV);
		    oMainNode.GetNode();
		    if (oMainNode!=null)
		        oMainNode.IndentDivColor=this.BaseMenu.IndentDivColor;
		    return oMainNode;
	        }
        }
    }
}
return null;
}
//////////////////////////////
function setCSS()
{
    //setting class for expanded not select Top Node
    if (this.MainSelectedNode!=null)
        this.MainSelectedNode.SetClassToNode(this.BaseMenu.TopNodeExpandedClass);
    //end 
        
    if (this.SelectedNode!=null)
    {
       
        if (this.SelectedNode.IsTop)
        {
            if (this.SelectedNode.IsChild && this.SelectedNode.IsExpanded)
            {   //class for expanded top node
                this.SelectedNode.SetClassToNode(this.BaseMenu.TopNodeSelectedExpandedClass);
            }
            else
            {   
                this.SelectedNode.SetClassToNode(this.BaseMenu.TopNodeSelectedCollapsedClass);
                //class for collapsed selected top node    
                //if(this.SelectedNode.TR!=null) 
                //    this.SelectedNode.TR.className= this.SelectedNode.TR.className + " " + this.BaseMenu.TopNodeSelectedCollapsedClass;
            }
        }
        else //when selected node is a chlid
        {
          if (this.SelectedNode.IsChild && this.SelectedNode.IsExpanded)
            {   //class for expanded top node
             
                this.SelectedNode.AddClassToNode(this.BaseMenu.ChildNodeSelectedExpandedClass);
            }
            else
            {   
                this.SelectedNode.AddClassToNode(this.BaseMenu.ChildNodeSelectedCollapsedClass);
                //class for collapsed top node    
                //if(this.SelectedNode.TR!=null) 
                //    this.SelectedNode.TR.className= this.SelectedNode.TR.className + " " + this.BaseMenu.TopNodeSelectedCollapsedClass;
            }  
        }
	 
	
	
	///////////////
	if(this.SelectedNode.TR!=null) 
	{//alert("TR");
	    if (this.SelectedNode.TR.cells.length>0)
	    {//alert("TR.rows");
	   //this.SelectedNode.TR.cells[0].innerHTML="<table><tr><td class='selectedNode'>ashish</td></tr></table>"+this.SelectedNode.TR.cells[0].innerHTML;
           // this.SelectedNode.TR.cells[0].className="selectedNode";//this.SelectedNode.TR.className + " " + this.BaseMenu.SelectedNodeTRClass;
            //alert(this.SelectedNode.TR.cells[0].innerHTML);
             //this.SelectedNode.TR.cells[0].style.background="url(..//images//selected_parent_bull.jpg) right no-repeat";
            //alert(this.SelectedNode.TR.cells[0].className);
	    }
	}
	///////////////
	}
	////
	if (this.MainSelectedNode!=null)
	{
	//ash//this.MainSelectedNode.SetClassToNode(this.BaseMenu.SelectedNodeParentClass);
	/*
	if (this.SelectedNode!=null)
    {
	    if(this.SelectedNode.IsChild && this.SelectedNode.IsExpanded) {
	    
	        if(this.SelectedNode.Table==this.MainSelectedNode.Table){//alert(this.SelectedNode.TDImage.style.borderWidth );
	            //this.SelectedNode.TDImage.className = this.BaseMenu.SelectedNodeExpandedClass;//+" "+ this.SelectedNode.TR.className + " " ;
	            	if(this.SelectedNode.TR!=null) this.SelectedNode.TR.className="";//this.SelectedNode.TR.className + " selectedNodeColl ";//this.BaseMenu.SelectedNodeTRClass;

                this.SelectedNode.AnchorImage.className = this.BaseMenu.SelectedNodeExpandedClass+" "+ this.SelectedNode.AnchorImage.className + " " ;
	        }
	    }
	}*/
	 

	this.MainSelectedNode.IndentChildNode();
	
	}
}
//////////////////////////////////////////////////////////////
//Begin:SetParentNodes
function setParentNodes()
{
    var tblInDiv=this.BaseMenu.DivTV.getElementsByTagName("table");
    ///////////////////////////////
    if (tblInDiv!=null){
        for (var j=0;j<tblInDiv.length;j++){
            if (tblInDiv[j].rows!=null)
            { 
               if (tblInDiv[j].parentNode!=null)
               {
                    if (tblInDiv[j].parentNode.id==this.BaseMenu.divTV_id)
                    {//alert();
                        //tblInDiv[j].className=this.BaseMenu.ParentNodeClass;
                        if (tblInDiv[j].rows.length>0)
                        {
                            tblInDiv[j].rows[0].className=this.BaseMenu.TopNodeClass;
                        }
                    }
               }
            }
        }
    }

}
/////////////////////////////////////////
function setMainExpandedDiv()
{
    var divInDiv=this.BaseMenu.DivTV.getElementsByTagName("div");
    ///////////////////////////////
    if (divInDiv!=null){
        for (var j=0;j<divInDiv.length;j++){
            if (divInDiv[j].id!='undefined')
            { 
               if (divInDiv[j].parentNode!=null)
               {
                    if (divInDiv[j].parentNode.id==this.BaseMenu.divTV_id && divInDiv[j].style.display=="block")
                    {
                        divInDiv[j].className=divInDiv[j].className + " " + this.BaseMenu.MainSelectedNodeClassGroup.DivChildClass;
                        /*ash
                        var sID=divInDiv[j].id.substr(0,divInDiv[j].id.length-5);
                        var ctrl = document.getElementById(sID);
                        //alert(sID);
                        //alert("this.SelectedNode.NodeID" + this.SelectedNode.NodeID);
                        if (ctrl!=null)
                        {
                            if (ctrl.parentNode!=null)
                            {
                                if (this.SelectedNode.NodeID==sID)
                                {
                                    ctrl.parentNode.className=ctrl.parentNode.className +" " +this.BaseMenu.SelectedNodeParentClass;
                                }
                                else
                                {
                                    ctrl.parentNode.className=this.BaseMenu.SelectedNodeParentClass;
                                    if(ctrl.parentNode.parentNode!=null)
                                    {
                                        ctrl.parentNode.parentNode.className=this.BaseMenu.SelectedNodeParentClass;
                                    }
                                }    
                                
                            }
                        }*/
                        //
                    }
               }
            }
        }
    }
}
//////////////////////////////////////////////////////////////
//Begin:setChildNodes
function setChildNodes(oDiv)
{
    if (oDiv!=null)
    {
        var tblInDiv=oDiv.getElementsByTagName("table");
        ///////////////////////////////
        if (tblInDiv!=null){
            for (var j=0;j<tblInDiv.length;j++){
                    tblInDiv[j].className=this.BaseMenu.ChildNodeClass;
                     for (var k=0;k<tblInDiv[j].rows.length;k++){
                     
                            tblInDiv[j].rows[k].className= tblInDiv[j].rows[k].className + " " + this.BaseMenu.ChildNodeClass;
                             for (var m=0;m<tblInDiv[j].rows[k].cells.length;m++){
                                tblInDiv[j].rows[k].cells[m].className= tblInDiv[j].rows[k].cells[m].className + " " + this.BaseMenu.ChildNodeClass;
                             }
                     }
            }
                /*var tblInDiv=divInDiv[j].getElementsByTagName("table");
                if (tblInDiv!=null){
                      for (var j=0;j<tblInDiv.length;j++){
                        
                      }*/
       }
   }
}

function setClassSuffixToClasses(oBaseMenu)
{
     
    oBaseMenu.ParentNodeClass += oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeParentClass +=oBaseMenu.ClassSuffix;
	
	oBaseMenu.SelectedNodeClassGroup.TableClass += oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.TRClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.TDImageClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.TDTextClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.AnchorImageClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.AnchorTextClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.DivChildClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.SelectedNodeClassGroup.ExpandedClass +=oBaseMenu.ClassSuffix;
	/////
	
	oBaseMenu.MainSelectedNodeClassGroup.TableClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.TRClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.TDImageClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.TDTextClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.AnchorImageClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.AnchorTextClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.DivChildClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.MainSelectedNodeClassGroup.ExpandedClass +=oBaseMenu.ClassSuffix;
	/////
	
	/////
	oBaseMenu.TopNodeClass += oBaseMenu.ClassSuffix;
	oBaseMenu.TopNodeExpandedClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.TopNodeSelectedCollapsedClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.TopNodeSelectedExpandedClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.ChildNodeClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.ChildNodeSelectedCollapsedClass +=oBaseMenu.ClassSuffix;
	oBaseMenu.ChildNodeSelectedExpandedClass +=oBaseMenu.ClassSuffix;
	


}
/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//	Class : MenuNodeItem
//		getNode()
//		getNodeName()
//      indentChildNode()
//////////////////////////////////////////////////////////////////////////////////////

function MenuNodeItem(sNodeNo,oTreeViewDiv)
{
	this.TreeViewDiv=oTreeViewDiv;
	this.NodeNum=sNodeNo;
	this.GetNode=getNode; //sets all the values
	this.Table;
    this.ChildDiv;
	this.NodeText;
	this.NodeNameA;
	this.NodeNameT;
    this.AnchorText; //inside Table
    this.AnchorImage; //inside Table
    this.TR; //inside Table
	this.TDImage;//indside Table
	this.TDText;//indside Table
	this.IsChild=false; //boolean
	this.IsExpanded=false;
	this.IsTop=false;
	this.IndentDivColor;
	this.NodeID=null;
	//this.SetCSSToChild=SetCSSToChild;
	//this.SetCSSForIndentation=SetCSSForIndentation;
	this.GetNodeName=getNodeName;
	this.GetDivName=getDivName;
	this.IndentChildNode=indentChildNode;
    this.SetClassToNode=setClassToNode;
    this.AddClassToNode=addClassToNode;
    this.AddCSSToNode=addCSSToNode;
	//this.DeleteTableRow=deleteTableRow;
}
//////////Get
function getNode()
{
var sName;
var imgNode;
var txtNode;
var tdImgNode;
var tdTxtNode;
var trNode;
var tblNode; 
var divNode;
var dName;
sName=this.GetNodeName("n");
imgNode=document.getElementById(sName);
this.NodeID=sName;
sName=this.GetNodeName("t");

txtNode=document.getElementById(sName);
if(imgNode!=null){
	this.AnchorImage=imgNode;
	if (txtNode!=null){
		this.AnchorText=txtNode;
		this.NodeText=txtNode.innerHTML;
		this.TDText=txtNode.parentNode;
	}
    tdImgNode=imgNode.parentNode;
    if (tdImgNode!=null) {
        this.NodeText=imgNode.innerHTML;
		this.TDImage=tdImgNode;
	    sName=this.GetDivName();
	    divNode=document.getElementById(sName);
		if (divNode!=null){
			this.ChildDiv=divNode;
			this.IsChild=true;
			if(divNode.style.display!="none"){
				this.IsExpanded=true;
			}
		}
	}
    var trNode=tdImgNode.parentNode;
	this.TR=trNode;
	if (trNode!=null){
        var tblNode=trNode.parentNode; 
		this.Table=tblNode;
        if(tblNode!=null){
        ///Begin:checking if it is Top Node
            var tblParent=tblNode.parentNode.parentNode;
            if(tblParent!=null)
            { 
                if(tblParent.id!='undefined')
                {//alert("IsTop2:" + tblParent.innerHTML + "\n -- "+ this.TreeViewDiv.id)
                    if(tblParent.id==this.TreeViewDiv.id)
                    {//alert("IsTop3")
                        this.IsTop=true;   
                    }
                }
            }
            ///End
            //setting class variable
        }
     }
}
}
//Begin:getNodeNameBase()
function getNodeName(sSuffix)
{
if (sSuffix==null) sSuffix="t";
var s= this.TreeViewDiv.id+sSuffix+this.NodeNum;
return s;
}
//End

//Begin:getDivByAID() 
function getDivName()
{
var d=this.TreeViewDiv.id+"n"+this.NodeNum+"Nodes";
return d;
}
//End
//added:27052008
//Begin:indentChildNode
function indentChildNode()
{
    var indentClass="";
	var tblInDiv;
	if (this.ChildDiv!=null)
	    tblInDiv=this.ChildDiv.getElementsByTagName("table");
    if (tblInDiv!=null){
        for (var j=0;j<tblInDiv.length;j++){
            if (tblInDiv[j].rows!=null)
            { 
                if (tblInDiv[j].rows.length>0)
                {
                    var totalTDs=tblInDiv[j].rows[0].cells.length;
                    
                    //tblInDiv[j].rows[0].cells[totalTDs-2].firstChild.style.background=this.IndentDivColor;//className=sSelectedChildDiv;
                    //tblInDiv[j].rows[0].cells[totalTDs-2].firstChild.style.width="10px";
                    //tblInDiv[j].rows[0].cells[totalTDs-2].firstChild.innerHTML="&nbsp;<div style=\"vertical-align:middle;width:8px;height:1px;background-color:"+  +"\"></div>";
                    }
            }
            //tblInDiv[j].rows[1].cells[totalTDs-2].firstChild.style.overflow="hidden";
            //tblInDiv[j].rows[1].cells[0].firstChild.style.paddingright="5px";
            //padding-right:5px;
            //alert(divExpandedNode.firstChild.rows[1].cells[0].firstChild.className);
			//tblInDiv[j].rows[1].cells[0].firstChild.className=indentClass; //padding-right:5px;
			//alert(tblInDiv[j].rows[1].cells[0].firstChild.type);
        }
    }
/////
}

function setClassToNode(sClassName)
{ //alert('hi');
    if(this.Table!=null) this.Table.className= sClassName;//+ " " + this.Table.className ;
	if(this.TR!=null) this.TR.className= sClassName;//this.TR.className + " " + sClassName;
	if(this.TDImage!=null) this.TDImage.className= sClassName;//this.TDImage.className + " " + sClassName;
	if(this.TDText!=null) this.TDText.className=  sClassName;//this.TDText.className + " " +  sClassName;
	if(this.AnchorImage!=null) this.AnchorImage.className=  sClassName;//this.AnchorImage.className + " " + sClassName;
	if(this.AnchorText!=null) this.AnchorText.className= sClassName;//this.AnchorText.className + " " + sClassName;
	//if (this.Table == )
	//if(this.ChildDiv!=null) this.ChildDiv.className=this.SelectedNode.ChildDiv.className + " " + this.BaseMenu.SelectedNodeDivChildClass;
}

function addClassToNode(sClassName)
{ 	
    if(this.Table!=null) this.Table.className= this.Table.className + " " + sClassName; 
	if(this.TR!=null) this.TR.className= this.TR.className + " " + sClassName;
	if(this.TDImage!=null) this.TDImage.className= this.TDImage.className + " " + sClassName;
	if(this.TDText!=null) this.TDText.className=  this.TDText.className + " " +  sClassName;
	if(this.AnchorImage!=null) this.AnchorImage.className=  this.AnchorImage.className + " " + sClassName;
	if(this.AnchorText!=null) this.AnchorText.className= this.AnchorText.className + " " + sClassName;
	//if (this.Table == )
}

function addCSSToNode(oNode,oNodeClassGroup)
{
    if(oNode.Table!=null) oNode.Table.className= oNode.Table.className + " " + oNodeClassGroup.TableClass;
	if(oNode.TR!=null) oNode.TR.className=oNode.TR.className;//oNodeClassGroup.SelectedNodeTRClass;
	if(oNode.TDImage!=null) oNode.TDImage.className=oNode.TDImage.className + " " + oNodeClassGroup.TDImageClass;
	if(oNode.TDText!=null) oNode.TDText.className= oNode.TDText.className + " " +  oNodeClassGroup.TDTextClass;
	if(oNode.AnchorImage!=null) oNode.AnchorImage.className= oNode.AnchorImage.className + " " + oNodeClassGroup.AnchorImageClass;
	if(oNode.AnchorText!=null) oNode.AnchorText.className=oNode.AnchorText.className + " " + oNodeClassGroup.AnchorTextClass;
	if(oNode.ChildDiv!=null) oNode.ChildDiv.className=oNode.ChildDiv.className + " " + oNodeClassGroup.DivChildClass;
}

///////////



