var SNSMenu = {
	inst : {},

	createInstance : function(id, CSSClass, delayTime, isVert, width, divergent )
	{
		var container = null;
		
		if( typeof id == 'object' )
		{	
			container = id;			
			id = id.id;
		}
		else
		{	
			container = sns.get_obj(id);
		}

		if( typeof divergent == 'undefined' || divergent.length != 2 )
		{
			var divergent = [0,0];
		}
		
		SNSMenu.inst[id] = { container     : container,
							 menuActivated : false,
							 visibleMenus  : new Array(),
							 delayTime     : delayTime,
							 CSSClass      : CSSClass,
							 divergent     : divergent,
							 isVert        : isVert,
							 width         : width || 250,
							 hideTimer     : 0,
							 curRootMenu   : null,
							 mainMenuItems : new Array() };
	
		SNSMenu.inst[id].container.style.display = '';
		
		SNSMenu.inst[id].container.onmouseover = function(e){ e = e || event; SNSMenu.menuMouseOver(e, this ) };
		SNSMenu.inst[id].container.onmouseout  = function(e){ e = e || event; SNSMenu.menuMouseOut(e, this ) };
		
		var mainMenu = SNSMenu.inst[id].container.getElementsByTagName('UL')[0];
			
		mainMenu.style.listStyleType ='none';
		
		var mainMenuItem = mainMenu.getElementsByTagName('LI')[0];
		
		var index = 0;
		
		while(mainMenuItem)
		{
        	mainMenuItem.onmouseover = function(e){ e = e || event; SNSMenu.displaySubMenu(e, this ) };			

			if( mainMenuItem.tagName == 'LI' )
			{				
				if( mainMenuItem.className == 'separate' )
				{
					mainMenuItem.className = SNSMenu.inst[id].CSSClass + '_mainSeparate';
				}
				else
				{
					if( mainMenuItem.className == 'current' )
					{
						mainMenuItem.isCur = true;
					}
					
					index ++;
					
					mainMenuItem.className = ( index % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[id].CSSClass + ( mainMenuItem.isCur ? '_curMainItem' : '_mainItem' );
					
					mainMenuItem.id = id + '.SNSMenu.' + index;
		
					SNSMenu.inst[id].mainMenuItems[SNSMenu.inst[id].mainMenuItems.length] = mainMenuItem;
		
					SNSMenu.initSubMenus(mainMenuItem, index );
				}
			}
		
			mainMenuItem = mainMenuItem.nextSibling;
		}
		
		mainMenu.className = SNSMenu.inst[id].CSSClass + '_mainMenu';
	},
	
	getInstanceID : function(obj)
	{
		return obj.id.replace(/^([^\.]+)\.(.+)?/, '$1' )
	},
	
	initSubMenus : function(obj)
	{
		var id = SNSMenu.getInstanceID(obj);

		var menuObj = obj.getElementsByTagName('UL');
	
		if( menuObj.length > 0 )
		{
			var subMenuObj  = menuObj[0];
			
			menuObj[0].className   = SNSMenu.inst[id].CSSClass + '_block';
			menuObj[0].style.width = SNSMenu.inst[id].width + 'px';
			
			subMenuObj.style.listStyleType ='none';
			subMenuObj.id                  = obj.id + '.sub';
			
			obj.sub           = subMenuObj;			
			subMenuObj.parent = obj;
			
			subMenuObj.onmouseover  = function(e){ e = e || event; SNSMenu.menuMouseOver(e, this ) };
			subMenuObj.onmouseout   = function(e){ e = e || event; SNSMenu.menuMouseOut(e, this ) };
	
			subMenuObj = SNSMenu.inst[id].container.appendChild(subMenuObj);
	
			subMenuObj.style.position = 'absolute';
	
			var menuItem = subMenuObj.getElementsByTagName('LI')[0];
			
			var index = 0;
	
			while(menuItem)
			{
				if( menuItem.tagName == 'LI' )
				{	
					if( menuItem.className == 'separate' )
					{
						menuItem.className = SNSMenu.inst[id].CSSClass + '_separate';
					}
					else
					{					
						index ++;
						
						menuItem.className = ( index % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[id].CSSClass + '_item';
						
						menuItem.id  = obj.id + '.' + index;
		
						var subMenus = menuItem.getElementsByTagName('UL');
		
						menuItem.onmouseover = function(e){ e = e || event; SNSMenu.displaySubMenu(e, this ) };
		
						if( subMenus.length > 0 )
						{	
							SNSMenu.initSubMenus(menuItem);
						}
					}
				}
	
				menuItem = menuItem.nextSibling;
			}
	
			subMenuObj.style.display = 'none';
		}
	},
	
	menuMouseOver : function(e, obj )
	{
		SNSMenu.inst[SNSMenu.getInstanceID(obj)].menuActivated = true;
	},
	
	menuMouseOut : function(e, obj )
	{
		SNSMenu.inst[SNSMenu.getInstanceID(obj)].menuActivated = false;
		
		SNSMenu.autoHideMenu(SNSMenu.getInstanceID(obj));
	},
	
	autoHideMenu : function(instID)
	{
		if( SNSMenu.inst[instID].menuActivated )
		{
			SNSMenu.inst[instID].hideTimer = 0;
			return;
		}

		if( SNSMenu.inst[instID].hideTimer < SNSMenu.inst[instID].delayTime.close * 1000 )
		{
			SNSMenu.inst[instID].hideTimer += 100;
			
			setTimeout('SNSMenu.autoHideMenu("' + instID + '")', 99 );
    	}
		else
		{
			SNSMenu.inst[instID].hideTimer = 0;
			
			SNSMenu.hideMenus(instID, new Array() );
		
			if( SNSMenu.inst[instID].activeMenuItem )
			{
				SNSMenu.inst[instID].activeMenuItem.className = SNSMenu.inst[instID].CSSClass + '_curItem';
			}			
		}
	},
	
	hideMenus : function(instID, skipMenus )
	{
		var newVisibleMenus = new Array();
		
		for( var x = 0; x < SNSMenu.inst[instID].visibleMenus.length; x ++ )
		{
			//if( SNSMenu.inst[instID].visibleMenus[x].className != 'menuBlock1' && SNSMenu.inst[instID].visibleMenus[x].id )
			if( SNSMenu.inst[instID].visibleMenus[x].className != SNSMenu.inst[instID].CSSClass + '_mainMenu' && SNSMenu.inst[instID].visibleMenus[x].id )
			{
				if( ! skipMenus[SNSMenu.inst[instID].visibleMenus[x].id] )
				{
					var parentMenuItem = sns.get_obj(SNSMenu.inst[instID].visibleMenus[x].id.replace(/\.sub$/g, '' ));
					
					if( (/_curItem$/gi).test(parentMenuItem.className) )
					{
						parentMenuItem.className =  ( ( x + 1 ) % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[instID].CSSClass + '_item';
					}
					
					SNSMenu.inst[instID].visibleMenus[x].style.display = 'none';
				}
				else
				{
					newVisibleMenus.push(SNSMenu.inst[instID].visibleMenus[x]);
				}
			}
		}
		
		for( var x = 0; x < SNSMenu.inst[instID].mainMenuItems.length; x ++ )
		{
			if( ! SNSMenu.inst[instID].curRootMenu || SNSMenu.inst[instID].mainMenuItems[x].id != SNSMenu.inst[instID].curRootMenu.id || newVisibleMenus.length < 1 )
			{
				SNSMenu.inst[instID].mainMenuItems[x].className = ( ( x + 1 ) % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[instID].CSSClass + ( SNSMenu.inst[instID].mainMenuItems[x].isCur ? '_curMainItem' : '_mainItem' );
			}
		}
		
		SNSMenu.inst[instID].visibleMenus = newVisibleMenus;
	},
	
	displaySubMenu : function(e, menuItem )
	{
		try
		{
			var instID = SNSMenu.getInstanceID(menuItem);
			
			var levels = (menuItem.id.replace(/.+\.SNSmenu\.([0-9\.]+)$/gi, '$1' )).split('.');
			
			var skipMenus = new Array();
			
			if( levels.length > 1 )
			{
				var curLevel = levels[0] + '.' + levels[1];
				
				var parentMenu = sns.get_obj(instID + '.SNSMenu.' + levels[0] );
				
				if( SNSMenu.inst[instID].isVert )
				{		
					var top  = sns.get_obj_y_pos(parentMenu);
					var left = sns.get_obj_x_pos(parentMenu) + parentMenu.offsetWidth;
				}
				else
				{
					var top  = sns.get_obj_y_pos(parentMenu) + parentMenu.offsetHeight;
					var left = sns.get_obj_x_pos(parentMenu); //+ menuItem.offsetHeight;
				}
				
				top  += SNSMenu.inst[instID].divergent[0];
				left += SNSMenu.inst[instID].divergent[1];
				
				var subMenu = sns.get_obj(instID + '.SNSMenu.' + curLevel ).parentNode;
				
				subMenu.style.top  = top + 'px';
				subMenu.style.left = left + 'px';
				
				SNSMenu.inst[instID].visibleMenus.push(subMenu);
				skipMenus[subMenu.id] = true;
				
				for( var x = 2; x < levels.length; x ++ )
				{			
					parentMenu = sns.get_obj(instID + '.SNSMenu.' + curLevel );
					
					parentMenu.className = SNSMenu.inst[instID].CSSClass + '_curItem';
					
					top  = sns.get_obj_y_pos(parentMenu);
					left = sns.get_obj_x_pos(parentMenu) + parentMenu.offsetWidth;
					
					curLevel += '.' + levels[x];
					
					subMenu = sns.get_obj(instID + '.SNSMenu.' + curLevel ).parentNode;
					
					subMenu.style.top  = top + 'px';
					subMenu.style.left = left + 'px';
					
					SNSMenu.inst[instID].visibleMenus.push(subMenu);
					skipMenus[subMenu.id] = true;
				}
			}
			
			if( menuItem.sub )
			{
				SNSMenu.inst[instID].visibleMenus.push(menuItem.sub);
				skipMenus[menuItem.sub.id] = true;
					
				if( levels.length > 1 || SNSMenu.inst[instID].isVert )
				{		
					var top  = sns.get_obj_y_pos(menuItem);
					var left = sns.get_obj_x_pos(menuItem) + menuItem.offsetWidth;
					
					if( levels.length <= 1 )
					{
						menuItem.className = ( levels[0] % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[instID].CSSClass + ( menuItem.isCur ? '_curMainItem' : '_mainItemHover' );
					}
				}
				else
				{							
					menuItem.className = ( levels[0] % 2 ? 'odd' : 'even' ) + ' ' + SNSMenu.inst[instID].CSSClass + ( menuItem.isCur ? '_curMainItem' : '_mainItemHover' );
					
					var top  = sns.get_obj_y_pos(menuItem) + menuItem.offsetHeight;
					var left = sns.get_obj_x_pos(menuItem); //+ menuItem.offsetHeight;
				}			
				
				if( levels.length == 1 )
				{
					top  += SNSMenu.inst[instID].divergent[0];
					left += SNSMenu.inst[instID].divergent[1];
				}
				
				menuItem.sub.style.top  = top + 'px';
				menuItem.sub.style.left = left + 'px';
			
				menuItem.sub.style.display = '';
			}
						
			SNSMenu.inst[instID].curRootMenu = sns.get_obj(instID + '.SNSMenu.' + levels[0] );
			
			SNSMenu.hideMenus(instID, skipMenus );
		}
		catch(e){}
	}
}

for( var x in sns.menu.reInit )
{
	sns.menu.init(sns.menu.reInit[x].id, sns.menu.reInit[x].CSSClass, sns.menu.reInit[x].delayTime, sns.menu.reInit[x].isVert, sns.menu.reInit[x].width, sns.menu.reInit[x].divergent );
}
