/************************************************************************ 
Notes:

If you want a menu to be open initially set the style display to
"inline" in the subMenu class div like this...
<div class="subMenu" style="display:inline;">


The fading effect can be disabled by setting the 
doFading var to false. I have only tested this feature on 
ie 6, Netscape 1.7, firefox 1 & 1.5

If the user has cookies enabled the script will bake a cookie ;) on
the browser to track the state of the menus. This is good news for those
of you who don't use frames, you can now have persistent menu states

Make sure you put the java script include tag after all the menus otherwise
it will not be able find and initialize them. If you have questions, or comments
about the XpStyle Menu v2 send me an email.

And lastly a plug for myself, If you need some professional help with technical
web development please drop me an email, I do contracts for a competitive price. :)


***********************************************************************/



var menuObjArray = new Array();
menuObjArray[0] = new Array();
menuObjArray[1] = new Array();
menuObjArray[2] = new Array();
menuObjArray[3] = new Array();
menuObjArray[4] = new Array();
menuObjArray[5] = new Array();
menuObjArray[6] = new Array();
menuObjArray[7] = new Array();


var divovername = "topItem";
var timerSlide = null;
var numMenuItem = 0;
var slideDelay = 5;
var divHeight = 21; 
var moveSlidePix = 7;
var isLocked = null;
var doFading = false;  //set this to true to have fading menus like windowXp, i have noticed problems with google ads with this enabled
var autoClose = false; //set this true if you want all menus to close when you click on a diffrent one, in effect only one at a time can be open.
var dispMenuOnStart = false;   /*if this is true the menus will all be open the first time (ONLY) a user views the site
                                                        if your going to do this its a good idea to set the CSS item .subMenu to display:none; */


 InitAll();
 
function InitAll()
{
	var divs = document.getElementsByTagName("DIV");
	var menuStateAry = GetUserCookie("xpMenuCookv2")
    if(menuStateAry)
		menuStateAry = menuStateAry.split(",");

       
	aryNum = 0;
	for(dn=0; dn < divs.length;dn++)
	{
		if(String(divs.item(dn).className).substring(0,7) == "topItem")
		{	
			mainMenuDiv = divs.item(dn).parentNode;
			menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
			itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item(0);
			if(dispMenuOnStart)
				itemContainerDiv.style.display = 'inline';
         
                        
                        
		
			try //to apply cookies settings
			{
                               
				if(menuStateAry)
					itemContainerDiv.style.height = parseInt(menuStateAry[aryNum]) + "px";
				itemContainerDiv.style.height =  "0px";
				if(!doFading)
				{
					ResetOpacity(100);
				}
					
				if(menuStateAry)
				{
					if( parseInt(menuStateAry[aryNum]) == 0)
						itemContainerDiv.style.display = 'none';
					else
						itemContainerDiv.style.display = 'inline';
				}
			}
			catch(e)
			{
				e= null; //cookie may not exist yet
			}

			Init(divs.item(dn));
			aryNum++;

		}
	}	
}


function ResetOpacity(opval)
{
    for (var i=0 ;i < menuObjArray[0].length; i++)
    {
		if (menuObjArray[0][i].filters)
			menuObjArray[0][i].filters.alpha.opacity = opval;
        else
			menuObjArray[0][i].style.opacity = opval * .01;
    }

}

function Init(objDiv)
{
    
    if (isLocked)
        return;

    var mainMenuDiv, subMenuDiv, menuContainerDiv, itemContainerDiv,styleRules;

	
	for(r=0;r < document.styleSheets.length; r++)
	{	
		if( -1 != String(document.styleSheets[r].href).indexOf("sddm.css") )	
			break;
	}
	if(!document.styleSheets[r].rules)
		styleRules = document.styleSheets[r].cssRules;
	else
		styleRules = document.styleSheets[r].rules;
		
    numMenuItem = 0;
    mainMenuDiv = objDiv.parentNode;
    subMenuDiv =  mainMenuDiv.getElementsByTagName("DIV").item(0);
    

    menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
    itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item(0);
    

    aLen = menuObjArray[0].length;
    for (i=0 ;i < aLen ; i++)
    {
        if (menuObjArray[0][i] == menuContainerDiv)
        {
            break;
        }
    }
    
    if (i == aLen)
    {
        menuObjArray[0][i]  = menuContainerDiv;
        menuObjArray[1][i] = itemContainerDiv;
        menuObjArray[7][i] = subMenuDiv;
        menuObjArray[7][i].onmouseover = ChangeStyle;
        menuObjArray[7][i].onmouseout = ChangeStyle;
        subMenuDiv.onclick = SetSlide;

        
		lastmenuNum = -1;
        for (b=0;b<itemContainerDiv.childNodes.length;b++)
        {
            if (itemContainerDiv.childNodes.item(b).tagName == "DIV")
            { 
                numMenuItem ++;
                itemContainerDiv.childNodes.item(b).onmouseover= ChangeStyle;
                itemContainerDiv.childNodes.item(b).onmouseout= ChangeStyle;
                lastmenuNum = b;
            }
        }  
        
        
		for(r=0;r < styleRules.length; r++)
		{
			tmpStr1 = String(styleRules[r].selectorText);
			tmpStr2 = String("." + itemContainerDiv.childNodes.item(lastmenuNum).className);
			if(tmpStr1 == tmpStr2)
			{
				if(NaN != parseInt(styleRules[r].style.height))
				{
					divHeight = parseInt(styleRules[r].style.height) + 2;
					break;
				}
				
			}
		}
				
        menuObjArray[2][i] = numMenuItem;
        menuObjArray[3][i] = mainMenuDiv;

        if (itemContainerDiv.style.display == "inline")
        {
            menuObjArray[4][i] = numMenuItem * divHeight;
            menuObjArray[0][i].style.height = numMenuItem * divHeight + "px";
            menuObjArray[6][i] = true;
			
            if(doFading)
			{
				if (menuObjArray[0][i].filters)
					menuObjArray[0][i].filters.alpha.opacity = 100;
				else
					menuObjArray[0][i].style.opacity = 1;
			}
            
            
        } else
        {
            menuObjArray[7][i].className = divovername + "Close";
            menuObjArray[4][i] = 0;
            menuObjArray[0][i].style.height = 0 + "px";
            menuObjArray[6][i] = false;
            if(doFading)
			{
				if (menuObjArray[0][i].filters)
					menuObjArray[0][i].filters.alpha.opacity = 0;
				else
					menuObjArray[0][i].style.opacity = .0;
			}
        }

    }//end if

    mainMenuDiv = null;
    subMenuDiv =  null;
    menuContainerDiv= null;
    itemContainerDiv= null;
    
}

function SetSlide()
{   
    if (isLocked)
        return;
    else
        isLocked = this.parentNode;    
    
    for (var i=0 ;i < menuObjArray[0].length; i++)
    {
        if(menuObjArray[6][i] && (menuObjArray[3][i] != this.parentNode) && autoClose )
          CloseMenu(i);
    }
    
    for (var i=0 ;i < menuObjArray[0].length; i++)
    {
        if (menuObjArray[3][i] == this.parentNode)
        {
            if (menuObjArray[5][i] == null)
                menuObjArray[5][i] = setInterval("RunSlide(" + i + ")", slideDelay);
            break;
        }
    }
    
    

}



function UpdateUserCookie(aryIndex)
{
    date = new Date();
    date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 30)); 
    document.cookie = "xpMenuCookv2" + "=" + escape(menuObjArray[4].toString()) + "; expires=" + date.toGMTString();  
   
}

function GetUserCookie(crumbName)
{
    colCookie = document.cookie.split("; ");
    
    for (a=0; a < colCookie.length; a++)
    {
        colCrumb = colCookie[a].split("=");                    
        if(colCrumb[0] == crumbName)
            return unescape(colCrumb[1]);
    }

    return false;

}

function CloseAllMenus()
{
    for (var i=0 ;i < menuObjArray[0].length; i++)
    {
          if (menuObjArray[6][i] )
             CloseMenu(i);
    }
}

function CloseMenu(objIndex)
{
  if(doFading)
  {
    if(menuObjArray[0][objIndex].filters)
	menuObjArray[0][objIndex].filters.alpha.opacity = 0;
    else
	menuObjArray[0][objIndex].style.opacity = 0;
  }
  
  switch(GetState(menuObjArray[7][objIndex].className))
  {
    case 0:
        menuObjArray[7][objIndex].className = divovername + "Close" ;
        break;
    case 1:
       menuObjArray[7][objIndex].className = divovername + "CloseOver" ;
       break;
    case 2:
        menuObjArray[7][objIndex].className = divovername + "CloseOver" ;
        break;
    case 3:
    
    
  }

  menuObjArray[1][objIndex].style.display = 'none';
  menuObjArray[4][objIndex] = 0;
  menuObjArray[0][objIndex].style.height = 0 + "px";
  clearInterval(menuObjArray[5][objIndex]);
  menuObjArray[5][objIndex] = null;
  menuObjArray[6][objIndex] = false;
  isLocked = null;
  UpdateUserCookie(objIndex);
  return 0;

}

function GetState(cstate)
{

    if(divovername  == cstate )
      return 0;
    if((divovername + "Over" ) == cstate )
      return 1;
    if((divovername + "Close" ) == cstate )
      return 2;
    if( (divovername + "CloseOver")  == cstate )
      return 3;
  
  return 10;
}

function RunSlide(objIndex)  
{

    if (menuObjArray[6][objIndex])
    {
      if(doFading)
	{
            if(menuObjArray[0][objIndex].filters)
		menuObjArray[0][objIndex].filters.alpha.opacity -= 100/ ( ( (menuObjArray[2][objIndex] * divHeight) / moveSlidePix) +1);
            else
		menuObjArray[0][objIndex].style.opacity -= .9/(((menuObjArray[2][objIndex] * divHeight) / moveSlidePix)+1);
        }
        
        menuObjArray[1][objIndex].style.display = 'none';
        menuObjArray[4][objIndex] -=  moveSlidePix;
        if (menuObjArray[4][objIndex] > 0)
            menuObjArray[0][objIndex].style.height = menuObjArray[4][objIndex] + "px";
        else
        {
           CloseMenu(objIndex);
        }
        
        return 0;
        
    }

    if (!menuObjArray[6][objIndex])
    {
		if(doFading)
		{
			if(menuObjArray[0][objIndex].filters)
				menuObjArray[0][objIndex].filters.alpha.opacity += 100/ ( ( (menuObjArray[2][objIndex] * divHeight) / moveSlidePix) +1);
			else
			{
				opcVal = parseFloat(menuObjArray[0][objIndex].style.opacity);
				opcVal += .9/((menuObjArray[2][objIndex] * divHeight) / moveSlidePix);
				menuObjArray[0][objIndex].style.opacity = opcVal;
			}
		}
        menuObjArray[4][objIndex] +=  moveSlidePix;
        if (menuObjArray[4][objIndex] < (menuObjArray[2][objIndex] * divHeight))
            menuObjArray[0][objIndex].style.height = menuObjArray[4][objIndex] + "px";
        else
        {
			
			
			if(doFading)
			{
				if(menuObjArray[0][objIndex].filters)
					menuObjArray[0][objIndex].filters.alpha.opacity = 100;
				else
					menuObjArray[0][objIndex].style.opacity = 1;
			}
	
            menuObjArray[4][objIndex] = (menuObjArray[2][objIndex] * divHeight);
            menuObjArray[0][objIndex].style.height = (menuObjArray[2][objIndex] * divHeight)+ "px";			     
            menuObjArray[1][objIndex].style.display = 'inline';
            clearInterval(menuObjArray[5][objIndex]);
            menuObjArray[5][objIndex] = null;
            menuObjArray[6][objIndex] = true;
            
            
 
              
             switch(GetState(menuObjArray[7][objIndex].className))
              {
                case 0:
                   // menuObjArray[7][objIndex].className = divovername + "Close" ;
                    break;
                case 1:
               //    menuObjArray[7][objIndex].className = divovername + "CloseOver" ;
                  break;
                case 2:
                   menuObjArray[7][objIndex].className = divovername;
                    break;
                case 3:
                    menuObjArray[7][objIndex].className = divovername + "Over" ;
                
              }

           
			

            isLocked = null;
             UpdateUserCookie(objIndex);
            return 0;
        }       
        return 0;
        
    }


}

function ChangeStyle()
{
    className = String(this.className);

    if (className.substring(className.length - 4, className.length) == "Over")
        this.className = className.substring(0,className.length - 4);
    else
        this.className = this.className + "Over";
      

}
