﻿

var w = window,d = w.document,b = d.body;

var element;
var BrowserType="IE";
var obj_idMainWinDiv;

// Note: function addEvent,getElement,getAttr... - into file JS/public/IEemulator2.js


// for Firefox
//XPath support in Firefox to the DOM standard: http://www.wrox.com/WileyCDA/Section/id-291861.html
  function selectNodesM(cXPathString, xNode)
  {
    if( !xNode ) { xNode = this; } 
	var oEvaluator = new XPathEvaluator();
	
	if(!oEvaluator) return null;
	
	//XPathResult.ORDERED_NODE_ITERATOR_TYPE :
	// Returns a node set of matching nodes in the order in which they appear in the document.
	// This is the most commonly used result type. 
    var oResult = oEvaluator.evaluate(cXPathString, xNode, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);    
	  
	var aNodes = new Array;
    
   if (oResult != null) {
            var oElement = oResult.iterateNext();
            while(oElement) {
                aNodes.push(oElement);
                oElement = oResult.iterateNext();
            }
    }
    return aNodes;
	}

////////////////////////////////
if(d.all) BrowserType="IE";
else BrowserType="N";

// obsolete:  this function work with flyOutHorizontal.htc ('behavior' in .css)
function Event_OnContentReady()
{
	AttachEvents(); 
	CreateStaticTree();
	SelectNodes();
}

// first function. calling from template.
function initBar(elementId)
{
    element=getElement(elementId);
    if(element)
    {
	    AttachTreeEvents();
	   // CreateStaticTree();// לא משתמשים בגורלניק!!!
	    SelectNodes();
	}
}

function Click(e)
{
    var ev ;
    var ev_type;
	if(BrowserType=="IE") 
	{
	    ev = window.event.srcElement;
	    ev_type=ev.type;
	}
	else 
	{
	    ev =e.target;//this;
	    ev_type=e.type;
	}
	if ("undefined" == typeof(ev_type))
		return; 	
		
	var p = GetParentNode(ev);
	
	if (!p) return;
	if(!ev.attributes.getNamedItem("type")) return;
	var type_attr = ev.attributes.getNamedItem("type").value;
	if ("icon" == type_attr)
	{
	    if(ev.src)
		    if (ev.src.indexOf("empty") == -1)
			    ToggleNode(p, ev)
	}
}

function ToggleNode(p, icon, open)
{
	var child ;
	child=p.lastChild; 
    if(BrowserType!="IE" && child.data=="\n") child=child.previousSibling;
     
	 
	if ("hideTreeNode" == child.className || open)
	{
		child.className = "showTreeNode";
		icon.src = icon.src.replace("closed", "open")
	}
	else
	{
		child.className = "hideTreeNode";
		icon.src = icon.src.replace("open", "closed");
		
		// layer must be refresh (Mozilla not refreshed !!!!)
		if(BrowserType!="IE") element.innerHTML=element.innerHTML;
	}
}
function addEventTree( obj, type, fn ) {
if(obj)
  if ( obj.attachEvent ) {
    obj.attachEvent( type, fn );
  } else
  {
  	if(obj.addEventListener)
    	obj.addEventListener( type, fn, false );
  }
}
function AttachTreeEvents()
{
    addEvent(d,"click",Click);
  
  /*  לא משתמשים בגורלניק!!!
  
	var id = GetID(element, "nbRoot");
	var sh = d.all["nbStatic" + id];
	if (!sh) return;
	
	addEvent(w,"onresize",OnResize);
	addEvent(d,"onkeypress",OnKeypress);
	
	addEvent(sh,"onmouseover",this.ShowHideOpenBarButton);
	addEvent(sh,"onmouseout",this.ShowHideOpenBarButton);
	
	
	var btn = sh.all["staticTreeButton"];
	if (btn)
	{
		btn = btn.all.tags("IMG")
		if (btn.length)
		btn[0].attachEvent("onclick", this.ShowHideLayerTree)
	}
	

	btn = element.all["treeButton"]
	if (btn)
	{
		btn = btn.all.tags("IMG")
		if (btn.length)
		{
		btn[0].attachEvent("onclick", this.ShowHideLayerTree)
		}
	}
	*/
}



// selected element - not into template,
// in file Public\NavBarSideItemsList.ascx.cs, func. GetSelectedNodesXml:
//output	= "<XML id=\"data-" + dataID + "\">\n"
//					+	"<selectedNodes>\n"
//					+		selectedNodesXml + "\n"
//					+	"</selectedNodes>\n"
//					+ "</XML>\n";
// in source of Page:
//        <XML id="data-0ded92aa-b94a-4228-adfa-122bb3b78940">
//        <selectedNodes>
//        <node code="6d505c0d-548b-40c0-a0c0-9243a9a7e95a" selected="1">
//        </node>
//        </selectedNodes>
//        </XML>
function SelectNodes()
{
	var id = GetID(element, "nbRoot");
	
	var nbd;
	var nodes = null;
	// CHANGE ERRORS (Tonya 15.10.2007) 
	// only ONE element may be selected (nbd - not list, only single element)
	        //nbd= d.all["data-" + element.dataID];
    dataID_attr=element.attributes.getNamedItem("dataID").value;	        
	nbd=d.getElementById("data-" + dataID_attr);
	 
	
	////id=nbStatic..  לא משתמשים בגורלניק!!!
	//var h = d.all["nbStatic" + id];
	//if (h) h = h.all["treeNodeHolder"];
	
	if (nbd)
	{
		if(BrowserType=="IE") nodes = nbd.selectNodes("//node[@selected]");
		else
		{
		//nodes = nbd.selectNodes("//node");
		nodes = selectNodesM("//node[@selected]",nbd); 
		}
	}
	if (nodes && nodes.length)
	{
		for (var i=0; i<nodes.length; i++)
		{
			var n = nodes[i];
			var code = n.attributes.getNamedItem("code").value;
			// CHANGE ERRORS (Tonya 16.10.2007) 
			// element with id=["node" + code] may be only ONE! (if not - error in SelectNode())
			//var tn = element.all["node" + code];
 			var tn =document.getElementById("node" + code)	
				
			SelectNode(tn);
			ExpandNode(tn);
			
			////id=nbStatic..  לא משתמשים בגורלניק!!!
//			if (h)
//			{
//				var sn = h.all["node" + code];
//				SelectNode(sn);
//			}
		}
	}
}

function SelectNode(parent)
{
    var chld="";
    if(BrowserType=="IE") chld=parent.firstChild;
    else // find first not '/n'
    {
        if(!parent) return;
        var ch = parent.childNodes;
        if(!ch) return;
	    for (var i=0; i<ch.length; i++)
	    {
	        if(ch[i].nodeType==1)
	        {
	            chld=ch[i];
	            break;
	        }
	    }
    
    }
    if(chld!="")
    {
	    var label = GetFirstHtmlElement(chld, "td", "label");
	    if (label)
		    label.className = label.className + "Selected";
	}
	
}
function GetFirstHtmlElement(parent, tag, type)
{
 	if(null == parent) return null;

	var coll ;
	if(parent.all) coll= parent.all.tags(tag);
	else coll=parent.getElementsByTagName(tag);//????
	
	
	if (coll.length)
	{
		if (type == null)
			return coll[0];

		for (var i=0; i<coll.length; i++)
		{
		    var type_attr = coll[i].attributes.getNamedItem("type").value;
			if (type_attr == type)
				return coll[i]
		}
	}

	return null;
}
function ExpandNode(node)
{
    var chld="";
    if(BrowserType=="IE") chld=node.firstChild;
    else // find first not '/n'
    {
        if(!node) return;
        var ch = node.childNodes;
	    for (var i=0; i<ch.length; i++)
	    {
	        if(ch[i].nodeType==1)
	        {
	            chld=ch[i];
	            break;
	        }
	    }
    
    }
    if(chld!="")
    {
	    var icon = GetFirstHtmlElement(chld, "IMG", "icon");
	    ToggleNode(node, icon, true);
    	
	    var pe = GetParentNode(node.parentNode)
	    if (pe)
		    ExpandNode(pe);
	}
}

function GetID(e, prefix)
{
	return e.id.replace(prefix, "")
}



function GetParentNode(n)
{

    var type_attr;
    var tagName;
    
    if(n && n.attributes.getNamedItem("type"))
        type_attr=n.attributes.getNamedItem("type").value;
    else type_attr="undefined";
    
	while (n && type_attr != "parent")
	{
        tagName=n.tagName;
        if (type_attr && type_attr == "root")
            return null;


        if(BrowserType=="IE") n=n.parentElement;
        else n=n.parentNode;//n.offsetParent;

        if(n && n.attributes && n.attributes.length>0 && n.attributes.getNamedItem("type"))
            type_attr=n.attributes.getNamedItem("type").value;
        else type_attr="undefined";
	}
	return n;
}
/////////
function CkWinEls(m,ch)
{
    WinEleVis("SELECT",ch,m);
    WinEleVis("OBJECT",ch,m);
}
function WinEleVis(tag,ch,m)
{
    var els;
	if(d.all) els=d.all.tags(tag);
	else els=d.getElementsByTagName(tag);
	
    for(var i=0;i<els.length;i++)
    {
        var e=els.item(i);
        if(ElOverlap(m,e))
        {
            if (e.visLevel)e.visLevel+=ch;
            else e.visLevel=ch;
            if(e.visLevel==-1)
            {
                if(typeof(e.visSave)=="undefined")
                    e.visSave=e.style.visibility;
                e.style.visibility="hidden";
            }
            else 
                if(e.visLevel==0)e.style.visibility=e.visSave;
        }
    }
}
function ElOverlap(e1, e2)
{
    var r1=M_ElementRectOW(e1);
    var r2=(e2.style.position=="absolute")?M_ElementRectOW(e2):M_ElementRectCW(e2);
    if(r2.left==r2.right && r2.top==r2.bottom)
    {return false}
    return((r2.left<r1.right)&&(r2.right>r1.left)&&(r2.top<r1.bottom)&&(r2.bottom>r1.top));
}
function M_ElementRectOW(e)
{
    var r=new RECT();
	r.right=e.offsetWidth;
	r.bottom=e.offsetHeight;
	while(e)
	{
		if(e.tagName.toUpperCase()=="TABLE")
		{
			if(parseInt(e.border)>0)
			{
				r.left+=1;r.top+=1;
			}
		}
		r.left+=e.offsetLeft;
		r.top+=e.offsetTop;
		e=e.offsetParent;
	}
	r.left+=(b.scrollWidth-b.clientWidth);
	r.right+=r.left;
	r.bottom+=r.top;
	return r;
}
function M_ElementRectCW(e)
{
    var r=new RECT();
	r.right=e.clientWidth;
	r.bottom=e.clientHeight;
	while(e)
	{
		if(e.tagName.toUpperCase()=="TABLE")
		{
			if(parseInt(e.border)>0)
			{r.left+=1;r.top+=1;}
		}
		var clientLeft;
		var clientTop;
		if(e.clientLeft) clientLeft=e.clientLeft;
		else clientLeft=0;
		if(e.clientTop) clientTop=e.clientTop;
		else clientTop=0;
		
		r.left+=e.offsetLeft+clientLeft;
		r.top+=e.offsetTop+clientTop;
		e=e.offsetParent;
	}
	r.left+=(b.scrollWidth-b.clientWidth);
	r.right+=r.left;
	r.bottom+=r.top;
	return r;
}
function RECT()
{
    this.left=0;
    this.top=0;
    this.right=0;
    this.bottom=0;
}

// not used in גורלניק
/*
function CreateStaticTree()
{
	var id = GetID(element, "nbRoot");
	var h = d.all["nbStatic" + id];
	if (!h) return;
	
	h = h.all["treeNodeHolder"];
	
	var nbd = d.all["data-" + element.dataID];
	var nodes = null;
	
	
	if (nbd)
	{
		nodes = nbd.selectNodes("//node[@selected]");
		


	}

	if (nodes && nodes.length)
	{
		for (var i=0; i<nodes.length; i++)
		{
			var n = nodes[i];
			var code = n.attributes.getNamedItem("code").value;
			var en = element.all["node" + code];
			if (en && !h.all["node" + code])
			{
				var p = en.parentElement;
				if (p && p.type=="container")
				{
					AppendNodesToStaticTree(h, p);
				}
				else
				{
					AppendRootNodesToStaticTree(h);
				}
			}
		}
	}
	else
	{
		AppendRootNodesToStaticTree(h);
	}
}

function AppendRootNodesToStaticTree(h)
{
	var ch = element.all.treeNodeHolder.childNodes;
	for (var i=0; i<ch.length; i++)
	{
		var nn = CloneNode(ch[i])
		h.appendChild(nn);
	}
}

function AppendNodesToStaticTree(h, p)
{
	var ch = p.childNodes;
	for (var i=0; i<ch.length; i++)
	{
		var nn = CloneNode(ch[i])
		h.appendChild(nn);
	}
}

function CloneNode(node)
{
	var nn = node.cloneNode(false);
	nn.appendChild(node.firstChild.cloneNode(true));
	nn.appendChild(node.lastChild.cloneNode(false));
	
	return nn;
}
function ShowHideOpenBarButton(id)
{
	var id = GetID(element, "nbRoot");
	var h = d.all["nbStatic" + id];
	if (!h) return;
	
	var btn = h.all["staticTreeButton"];
	if (!btn) return;
	
	if (btn.style.visibility == "hidden" || btn.style.visibility == "")
		btn.style.visibility = "visible";
	else
		btn.style.visibility = "hidden";
}
function OnResize()
{
	if (element.style.display == "block")
		ShowHideLayerTree(null, true)
}
function OnKeypress()
{
	if (w.event.keyCode == 27 && element.style.display == "block")
	{
		ShowHideLayerTree()
	}
}
function OnClick()
{
	var e = w.event.srcElement;
	var rn = GetRootNode(e);
	
	if (element.style.display == "block")
	{
		if (!rn)
		{
			ShowHideLayerTree();
		}
	}
	else if (rn && GetID(rn, "nbStatic") == GetID(element, "nbRoot"))
	{
		var n = GetParentNode(e);
		if (n)		
		{	
			if (e.type && e.type == "icon" && e.src.indexOf("empty") == -1)
			{
				ShowHideLayerTree();
				n = element.all[n.id];
				if (n)
				{
					e = GetFirstHtmlElement(n.firstChild, "IMG", "icon");
					if (e && n.lastChild.className == "hideTreeNode") 
						e.click();
				}
			}
		}
		else
		{
			ShowHideLayerTree();
		}
	}
}
function ShowHideLayerTree(evnt, open)
{
	if (element.style.display == "none" || element.style.display == "" || (arguments.length>1 && open))
	{
		var id = GetID(element, "nbRoot");
		var ch = d.all["nbStatic" + id];
		
		var r = M_ElementRectOW(ch)
		
		var h = b.clientHeight;
		
		if (d.all["idMenuBarTbl"])
		{
			if (h>42) h-= 42;
		}
		else
		{
			if (h>22) h-= 22;
			element.style.top = 10;
		}

		element.style.height = h + "px";

		var t = 10;
		if ("object" == typeof(idMainWinDiv) && idMainWinDiv.scrollTop)
			t += idMainWinDiv.scrollTop;
		
		if (b.scrollTop)
			t += b.scrollTop;
			
		element.style.top = t + "px";
				
		element.style.display = "block";
		
		var l = (element.dir=="ltr") ? r.left : r.right - element.offsetWidth
		element.style.left = l + "px";
		CkWinEls(element, -1);
	}
	else
	{
		CkWinEls(element, +1);
		element.style.display = "none";
	}
}
function GetRootNode(n)
{
	while (n && n.type != "root")
	{
		n = n.parentElement;
	}
	return n;
}

*/
 

