/**
 * @author talvis
 */

/**
 * SlideElementSetTypes are as follows:
 * 1 = Any can open/close (default)
 * 2 = Only one open 
 */

function slideState(elementID, isDown, elementSet)
{
	this.IsDown = isDown;
	this.ElementID = elementID;
	this.ElementSet = elementSet;
}

var SlideStates = new Array();
var SlideStateCount = 0;

function ResetSlideStates(elementSet)
{
	if(elementSet == undefined)	
	{
		SlideStates = new Array();	
	    SlideStateCount = 0;	
	}
	else
	{
		for(var i = 0; i < SlideStates.length; i++)
		{
			if(SlideStates[i] != null && SlideStates[i].ElementSet == elementSet)
			{
			    if (SlideStates[i].IsDown && document.getElementById(SlideStates[i]))
			    {
				    new Effect.BlindUp(SlideStates[i].ElementID, ({duration: .5}));		
				    SlideStates[i].IsDown = false;
				}
				else
				{
				    SlideStates[i] == null;
				}
			}
		}
	}

}

function SlideElement(slideElement, setDuration, elementSet, slideElementSetType)
{
  try {
	// make sure there is any work to do, if the element doesn't exist don't add it
	if(document.getElementById(slideElement))
	{
	
		// make sure we save the slide state
		var curSlide = -1;
		var curIsDown = false;
		
		if(setDuration == undefined)
		{
			setDuration = .5;
		}
		if(slideElementSetType == undefined)
		{
			slideElementType = 1;
		}
		if(elementSet == undefined)
		{
			elementSet == 'Global';
		}
		for(var i = 0; i < SlideStates.length; i++)
		{
			if(SlideStates[i].ElementID == slideElement)
			{
				curSlide = i;
			}
		}
		if(curSlide >= 0)
		{
			curIsDown = SlideStates[curSlide].IsDown;
		}
		else
		{
			SlideStates[SlideStateCount] = new slideState(slideElement, true, elementSet);
			curIsDown = false;
			curSlide = SlideStateCount;
			SlideStateCount++;
		}
		if(slideElementSetType == 2)
		{
			for(var j = 0; j < SlideStates.length; j++)
			{
				if(j != curSlide)
				{
					if(SlideStates[j].ElementSet == elementSet && SlideStates[j].IsDown)
					{
						if(document.getElementById(SlideStates[j].ElementID))
						{
							new Effect.BlindUp(SlideStates[j].ElementID, ({duration: setDuration}));		
							SlideStates[j].IsDown = false;						
						}
						else
						{
							SlideStates[j] = null;
						}
					}				
				}
	
			}
		}
	
		if(!curIsDown)
		{
			new Effect.BlindDown(slideElement, ({duration: setDuration}));		
			SlideStates[curSlide].IsDown = true;
		}
		else
		{
			new Effect.BlindUp(slideElement, ({duration: setDuration}));		
			SlideStates[curSlide].IsDown = false;
		}
		
		
	}
	}
	catch(ex)
	{
 	  ResetSlideStates();
	}

}


