script problems in FireFox

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • ehud37new
    New Member
    • Feb 2009
    • 2

    script problems in FireFox

    this script work fine in IE but not in FireFox
    where is the problem?

    here is the script


    Code:
    /*------------------------------------------------------------------
     File:			menu.js
     Use:			Collection of clients functions
    				that used for interface of the menu bar.
    -------------------------------------------------------------------*/
    var g_MaincontextMenu;
    var currentMenu; //The last sub menu that open.
    
    /*-----------------------------------------------------------------
    	Calculate the top position of the object.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The object
    ------------------------------------------------------------------*/
    function offsetTop(obj)
    {
    	var top = 0;
    
    	for (; obj; obj=obj.offsetParent)
    	{
    		top = top + obj.offsetTop;
    	}
    	return(top);
    }
    
    /*-----------------------------------------------------------------
    	Calculate the left position of the object.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The object
    ------------------------------------------------------------------*/
    function offsetLeft(obj)
    {
    	var left = 0;
    	
    	for (; obj; obj=obj.offsetParent)
    	{
    		if (obj.tagName == "BODY") break;
    		left = left + obj.offsetLeft;
    	}
    	return(left);
    }
    
    /*-----------------------------------------------------------------
    	Loaded the child of the first menu.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The object
        p_Dir				Direction of the web: RTL or LTR
    ------------------------------------------------------------------*/
    function loadContextMenu(obj, p_Dir)
    {
    	var contextMenu;
    	var parentMenu;
    	parentMenu = returnContainer(obj);
    	contextMenu = document.all[obj.id + "Sub"];
    	
    	//document.form2.strSearch.value = document.form2.strSearch.value + "," + contextMenu.id;
    	
    	if (currentMenu)
    	{
    		menuOut(currentMenu);
    		
    	}
    
    	
    	if (contextMenu != null)
    	{
    	    
    	    
    	    if(contextMenu.style.display == "block")
    			return;
    	    
    	    
    		contextMenu.style.display = "block";
    		var l_contextMenu_Top = offsetTop(parentMenu) + parentMenu.offsetHeight - 2;
    		contextMenu.style.top = l_contextMenu_Top;
    		contextMenu.style.width = parentMenu.offsetWidth;
    		contextMenu.firstChild.style.width = "100%";
    		contextMenu.parentMenu = parentMenu;
    		parentMenu.subMenu = contextMenu;
    		currentMenu = parentMenu;
    		
    		
    		if (p_Dir == 'RTL'){
    			if(contextMenu.clientWidth > parentMenu.clientWidth){
    				var contextMenuPosition = offsetLeft(parentMenu) - (contextMenu.clientWidth - parentMenu.clientWidth);
    			}else{
    				var contextMenuPosition = offsetLeft(parentMenu);
    			}
    			if(contextMenuPosition < 0){
    				contextMenu.style.left = 0;
    			}else{
    				contextMenu.style.left = contextMenuPosition;
    			}
    			
    		}else{
    			contextMenu.style.left = offsetLeft(parentMenu);
    			var l_WindowWidth = document.body.clientWidth;
    			var l_DivWidth = contextMenu.clientWidth;
    			var contextMenuLeft = offsetLeft(parentMenu)
    			//alert("l_WindowWidth = " + l_WindowWidth)//
    			//alert("l_WindowWidth = " + l_WindowWidth + " : l_DivWidth + contextMenuLeft = " + eval(l_DivWidth + contextMenuLeft));
    			//alert(contextMenuLeft);
    			if(l_WindowWidth  < l_DivWidth + contextMenuLeft){
    				//alert("l_WindowWidth = " + l_WindowWidth + " : l_DivWidth + contextMenuLeft = " + eval(l_DivWidth + contextMenuLeft));
    				contextMenu.style.left = l_WindowWidth - l_DivWidth;
    			}
    		}
    		
    		contextMenu.style.height = 0;
    		
    		var l_DivHeight = contextMenu.clientHeight + 2;
    		
    		//-----Set The div top postion ------------------
    		var l_WindowHeight = document.body.clientHeight;
    		var l_ScrollTop = document.body.scrollTop;
    		//alert(l_WindowHeight);
    		//alert(document.body.scrollTop);
    		
    		if(l_WindowHeight < (l_contextMenu_Top + l_DivHeight) - l_ScrollTop)
    			contextMenu.style.top  = l_contextMenu_Top - ((l_contextMenu_Top + l_DivHeight - l_ScrollTop) - l_WindowHeight);
    		//-------------------------------------------------
    		
    		contextMenu.style.overflowY = 'hidden';
    		contextMenu.style.height = 0;
    		
    		//contextMenu.style.display = "none";
    		var g_MaincontextMenu = "";
    		SetMainDiv(contextMenu);
    		BuildDiv(0, l_DivHeight);
    		
    		
    	}
    }
    
    var y="";
    function SetMainDiv(p_MaincontextMenu){
    	g_MaincontextMenu = p_MaincontextMenu;
    	clearTimeout(y);
    }
    
    
    function BuildDiv(p_Height, p_HighHeight){
    
    	//alert(1);
    	//document.form2.strSearch.value = document.form2.strSearch.value + "," + p_Height + "," + p_HighHeight;
    	
    	//document.form2.strSearch.value = document.form2.strSearch.value + "," + g_MaincontextMenu.id;
    	
    	var l_contextMenu = g_MaincontextMenu;
    	//g_MaincontextMenu = "";
    	//alert(l_contextMenu);
    	//alert ("p_Height = " + p_Height);
    	//alert ("p_HighHeight = " + p_HighHeight);
    	
    	
    	//alert(l_contextMenu.id);
    	if (p_Height < p_HighHeight){
    		l_contextMenu.style.height = p_Height + 10;
    		//alert(p_contextMenu.clientHeight);
    		//alert(1);
    		y = setTimeout('BuildDiv(' +  parseInt(p_Height + 10) + ',' + p_HighHeight + ');', 30);	
    		//alert(2);
    		//alert(p_contextMenu.style.height);
    	}else{
    		clearTimeout(y);
    		
    		//alert('Clear');
    	}
    }
    
    /*-----------------------------------------------------------------
    	Loaded the child of the submenus.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The  object
    ------------------------------------------------------------------*/
    function loadContextMenuSub(obj) {
    	var contextMenu;
    	var parentMenu;
    	//alert('loadContextMenuSub');
    	parentMenu = returnContainer(obj);
    	contextMenu = document.all[obj.id + "Sub"];
    	contextMenu.style.display = "block";
    	
    	var l_contextMenu_Top =  obj.offsetTop + parentMenu.offsetTop;
    	contextMenu.style.top = l_contextMenu_Top;
    	
    	var l_DivHeight = contextMenu.clientHeight;
    	if (parentMenu.offsetLeft - contextMenu.offsetWidth + 1 < 0)
    		contextMenu.style.left = parentMenu.offsetLeft + parentMenu.offsetWidth - 7;
    	else
    		contextMenu.style.left = parentMenu.offsetLeft - contextMenu.offsetWidth + 7;
    	contextMenu.parentMenu = parentMenu;
    	parentMenu.subMenu = contextMenu;
    	
    	
    	//-----Set The div top postion ------------------
    	var l_WindowHeight = document.body.clientHeight;
    	var l_ScrollTop = document.body.scrollTop;
    	//alert(l_WindowHeight);
    	//alert(document.body.scrollTop);
    		
    	if(l_WindowHeight < (l_contextMenu_Top + l_DivHeight) - l_ScrollTop)
    		contextMenu.style.top  = l_contextMenu_Top - ((l_contextMenu_Top + l_DivHeight - l_ScrollTop) - l_WindowHeight);
    	//-------------------------------------------------
    		
    	
    }
    
    /*-----------------------------------------------------------------
    	function that change the interface of the menu item on mouseover event.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The object
    ------------------------------------------------------------------*/
    function menuOver(obj)
    {
    	var parentMenu;
    	var subMenu;
    	var i;
    	
    	parentMenu = returnContainer(obj);
    
    	for (i=0; i < obj.childNodes.length; i++)
    	{
    		obj.childNodes(i).className = obj.SubMenuTextClassOver;
    	}
    
    	if (parentMenu.subMenu != null && parentMenu != parentMenu.subMenu)
    	{
    		subMenu = parentMenu.subMenu;
    
    		while (subMenu != null)
    		{
    			subMenu.style.display = "none";
    			subMenu = subMenu.subMenu;
    		}
    	}
    }
    
    /*-----------------------------------------------------------------
    	function that change the interface of the menu item on mouseout event.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        row					The object
    ------------------------------------------------------------------*/
    function menuOut(row)
    {
    	
    	
    	var parentMenu;
    	var subMenu;
    	var i;
    
    	parentMenu = returnContainer(row);
    	if (parentMenu != row)
    	{
    		for (i=0; i < row.childNodes.length; i++)
    		{
    			//alert(row.childNodes(i).className);
    			row.childNodes(i).className = row.SubMenuTextClass;
    			
    		}
    	}
    
    	var toElement = returnContainer(event.toElement);
    	var toHide = true;
    	if (toElement == null)
    	{
    		if (parentMenu.subMenu) parentMenu = parentMenu.subMenu;
    		while (parentMenu.parentMenu != null)
    		{
    			parentMenu.style.display = "none";
    			parentMenu = parentMenu.parentMenu;
    		}
    	}
    	else
    	{
    		while (toElement)
    		{
    			if (toElement == parentMenu)
    			{
    				toHide = false;
    				window.event.cancelBubble = true;
    				break;
    			}
    			toElement = toElement.parentMenu;
    		}
    		if (toHide)
    		{
    			subMenu = parentMenu.subMenu;
    			while (subMenu != null)
    			{
    				subMenu.style.display = "none";
    				subMenu = subMenu.subMenu;
    			}
    		}
    	}
    }
    
    function contextHighlightRow(obj)
    {
    	var parentMenu;
    	var subMenu;
    	var i;
    
    	parentMenu = returnContainer(obj);
    
    	if (obj.selected == "false")
    	{
    		for (i=0; i < obj.childNodes.length; i++)
    		{
    			obj.childNodes(i).style.borderTop = "1px solid white";
    			obj.childNodes(i).style.borderBottom = "1px solid white";
    			if (obj.childNodes(i).cellIndex == 0 || obj.childNodes.length == 1)
    			{
    				obj.childNodes(i).style.borderLeft = "1px solid white";
    			}
    			if (obj.childNodes(i).cellIndex != 0 || obj.childNodes.length == 1)
    			{
    				if (obj.childNodes(i).cellIndex == obj.cells.length-1)
    				{
    					obj.childNodes(i).style.borderRight = "1px solid white";
    				}
    			}
    		}
    
    		if (parentMenu.subMenu != null && parentMenu != parentMenu.subMenu)
    		{
    			subMenu = parentMenu.subMenu;
    
    			while(subMenu != null)
    			{
    				subMenu.style.display = "none";
    				subMenu = subMenu.subMenu;
    			}
    		}
    		obj.selected = "true";
    	}
    	else
    	{
    		for (i=0; i < obj.childNodes.length; i++)
    		{
    			if (i == 0)
    			{
    				//obj.childNodes(i).style.borderTop = "1px solid " + obj.background;
    				obj.childNodes(i).style.borderTop = "1px solid white";
    				//obj.childNodes(i).style.borderBottom = "1px solid " + obj.background;
    				obj.childNodes(i).style.borderBottom = "1px solid white";
    			}
    			else
    			{
    				//obj.childNodes(i).style.borderTop = "1px solid " + obj.titlebar;
    				//obj.childNodes(i).style.borderBottom = "1px solid " + obj.titlebar;
    				obj.childNodes(i).style.borderTop = "1px solid white";
    				obj.childNodes(i).style.borderBottom = "1px solid white";
    			}
    
    			if (obj.childNodes(i).cellIndex == 0 || obj.childNodes.length == 1)
    			{
    				//obj.childNodes(i).style.borderLeft = "1px solid " + obj.titlebar;
    				obj.childNodes(i).style.borderLeft = "1px solid white";
    			}
    			if (obj.childNodes(i).cellIndex != 0 || obj.childNodes.length == 1)
    			{
    				if (obj.childNodes(i).cellIndex == obj.cells.length-1)
    				{
    					//obj.childNodes(i).style.borderRight = "1px solid " + obj.background;
    					obj.childNodes(i).style.borderRight = "1px solid white";
    				}
    			}
    		}
    		obj.selected = "false";
    	}
    }
    
    /*-----------------------------------------------------------------
    	function that return the parent of the item.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        container			The Item
    ------------------------------------------------------------------*/
    function returnContainer(container)
    {
    	if (container)
    	{
    		while (!container.menuElement)
    		{
    			if (container.parentElement)
    			{
    				container = container.parentElement;
    			}
    			else
    			{
    				container = null;
    				break;
    			}
    		}
    	}
    	return(container);
    }
    
    
    /*-----------------------------------------------------------------
    	Open new window 
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        p_Id					Category Id
    */
    	function loadCategoryFile(p_Id){
    		window.open ("OpenFileById.asp?Id=" + p_Id,"");
    	}
    	
    
    
    /*-----------------------------------------------------------------
    	Redirect function
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        lngCategoryID		The CategoryID
    ------------------------------------------------------------------*/
    function loadCategory(lngCategoryID)
    {
    	window.location = "main.asp?lngCategoryID=" + lngCategoryID;
    }
    
    
    /*-----------------------------------------------------------------
    
                Open Window
    
                Parameters: 
    
        Name                                                Description
    
        -------------------------------------------------------------------
    
        p_Url                         Url to Open
        p_Width        The                   Width of the window
        p_Height                   The Height of the window
        p_Resizable              yes or no
        p_Scrollbars  yes or no
        p_Status                   yes or no
        p_Addressbar            yes or no
        p_Toolbar                  yes or no
    ------------------------------------------------------------------*/
    
    function OpenNewWindow(p_Url, p_Width, p_Height, p_Resizable, p_Scrollbars, p_Status, p_Addressbar, p_Toolbar)
    {
                window.open(p_Url,"" ,"height=" + p_Height + ",width=" + p_Width + ",top=100,left=100,resizable=" + p_Resizable + ",scrollbars=" + p_Scrollbars + ",status=" + p_Status + ",location=" + p_Addressbar + ",toolbar=" + p_Toolbar);
    }
    /*-----------------------------------------------------------------
    	function that handling the onclick event
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        item				The object that on click occured in
        lngCategoryID		The CategoryID
    ------------------------------------------------------------------*/
    function clickMenu(item, lngCategoryID)
    {
    	lngCategoryID = parseInt(lngCategoryID.substr(1));
    	switch (item.TypeRef)
    	{
    	case "1":
    		break;
    	case "2":
    		switch (item.TargetRef)
    		{
    			case "1":
    				window.open(item.Link);
    				break;
    			case "2":
    				window.location = item.Link;
    				break;
    			case "3":
    				parent.location = item.Link;
    				break;
    		}
    		break;
    	case "3":
    		window.location = "main.asp?lngCategoryID=" + lngCategoryID;
    		break;
    	case "6":
    		// item of the menu is a folder
    		window.location = "PublicLibrary.asp?lngCategoryID=" + lngCategoryID;
    		break;
    		
    	case "8":
    		window.location = "DisplayNodeList.asp?lngCategoryID=" + lngCategoryID;
    		break;
    	}
    }
    //-------------------------------------------------------------------------
    
    
    /*-----------------------------------------------------------------
    	Loaded the child of the submenus.
    	Parameters: 
        Name				Description
        -------------------------------------------------------------------
        obj					The  object
    ------------------------------------------------------------------*/
    function loadContextMenuSubRight(obj) {
    	//alert();
    	var contextMenu;
    	var parentMenu;
    	parentMenu = returnContainer(obj);
    	contextMenu = document.all[obj.id + "Sub"];
    	contextMenu.style.display = "block";
    	
    	var l_contextMenu_Top =  obj.offsetTop + parentMenu.offsetTop;
    	contextMenu.style.top = l_contextMenu_Top;
    	
    	var contextMenuLeft = parentMenu.offsetLeft + parentMenu.offsetWidth - 7;
    	var l_WindowWidth = document.body.clientWidth;
    	var l_DivWidth = contextMenu.clientWidth;
    	//alert("l_WindowWidth = " + l_WindowWidth + " : l_DivWidth + contextMenuLeft = " + eval(l_DivWidth + contextMenuLeft));
    	//alert(contextMenuLeft);
    	if(l_WindowWidth  < l_DivWidth + contextMenuLeft){
    		//alert("l_WindowWidth = " + l_WindowWidth + " : l_DivWidth + contextMenuLeft = " + eval(l_DivWidth + contextMenuLeft));
    		contextMenu.style.left = l_WindowWidth - parentMenu.offsetWidth - l_DivWidth;
    	}else{
    		contextMenu.style.left = contextMenuLeft;
    	}
    			
    	var l_DivHeight = contextMenu.clientHeight;
    	//-----Set The div top postion ------------------
    	var l_WindowHeight = document.body.clientHeight;
    	var l_ScrollTop = document.body.scrollTop;
    	//alert(l_WindowHeight);
    	//alert(document.body.scrollTop);
    		
    	if(l_WindowHeight < (l_contextMenu_Top + l_DivHeight) - l_ScrollTop)
    		contextMenu.style.top  = l_contextMenu_Top - ((l_contextMenu_Top + l_DivHeight - l_ScrollTop) - l_WindowHeight);
    	//-------------------------------------------------
    		
    	
    	contextMenu.parentMenu = parentMenu;
    	parentMenu.subMenu = contextMenu;
    }
    Last edited by Dormilich; Feb 19 '09, 09:09 AM. Reason: made it [code] tags
  • Dormilich
    Recognized Expert Expert
    • Aug 2008
    • 8694

    #2
    Microsoft proprietary syntax does not necessarily work in standard compliant browsers. actually, there are quite a lot of methods and properties that differ between IE and the rest of the world.

    have a look at Firefox' Error Console, that should tell you what's going wrong.

    Comment

    Working...