var dynamicID	= 0;

function getElementsByClassName ( $tag, $className, $node )
{
	if ( ! document.getElementsByTagName ) return false;

	$node			= $node || document

	var matches		= new Array
	var elements	= $node.getElementsByTagName ( $tag );
	var expression	= new RegExp ( '(^| )' + $className + '( |$)' );
	var j			= 0;

	for ( var i = 0; i < elements.length; i++ )
	{
		var ref		= elements [ i ]
		if ( ref.className )
		{
			if ( expression.test ( ref.className ) )
			{
				matches [ j++ ] = ref;
			}
		}
	}
	return matches;
}

function toggleAppendLinks ( $objAppend, $objRef )
{
	var tID	= $objRef.id.toString ( );
	var spans	= $objAppend.getElementsByTagName ( 'span' )
	var rE	= new RegExp ( '(^| )jsToggle( |$)' );

	for ( var i = 0; i < spans.length; i++ )
	{
		var ref = spans [ i ]

		if ( rE.test ( ref.className ) )
		{
			var o		= document.createElement ( "a" )
			o.id		= ref.id
			o.className = ref.className
			o.href	= '#' + tID
			o.innerHTML	= ref.innerHTML
			o.onclick	= function ( ) { toggle ( this ); return false; }

			ref.parentNode.replaceChild ( o, ref );
		}
	}
}

function toggle ( $obj  )
{
	var targ	= $obj.href.split('#')[1]
	var ref	= document.getElementById ( targ )

	if ( ref )
	{
		var rE	= new RegExp ( '(^| )jsToggleOpen( |$)' );

		if ( rE.test ( ref.className ) )
		{
			ref.className = ref.className.toString( ).replace ( 'jsToggleOpen', 'jsToggleClosed' );
		} else
		{
			ref.className = ref.className.toString( ).replace ( 'jsToggleClosed', 'jsToggleOpen' )
		}
	}
}

function toggleDiv ( $node )
{
	var divs	= getElementsByClassName ( 'div', 'jsCollapsor', $node || document )
	var rEOpen	= new RegExp ( '(^| )jsOpen( |$)' );

	for ( var i = 0; i < divs.length; i++ )
	{
		var ref	= divs [ i ]
		var id	= ref.id || 'jsId' + ( dynamicID++ )

		ref.id	= id

		if ( rEOpen.test ( ref.className ) )
		{
			ref.className	= ref.className.toString( ).replace ( 'jsOpen', 'jsToggleOpen' )
		} else
		{
			ref.className	+= ' jsToggleClosed'
		}
		toggleAppendLinks ( ref, ref );
	}
}

function createCookie(name,value,days){
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name){
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name){
	createCookie(name,"",-1);
}

function collapseElements ( )
{
	var o = document.getElementById ( 'iFAQ' )
	if ( o )	{
		toggleDiv ( o );
	}

	var c		= readCookie ( "iFAQToggle" ).split ( ',' )

	if ( c ) {
		for ( var i = 0; i < c.length; i++ ) {
			var ref	= document.getElementById ( c [ i ] )
			if ( ref )
			{
				var rE	= new RegExp ( '(^| )jsToggleClosed( |$)' );

				if ( rE.test ( ref.className ) )
				{
					ref.className = ref.className.toString( ).replace ( 'jsToggleClosed', 'jsToggleOpen' );
				}
			}
		}
	}
}

function saveState ( ) {

	var divs	= getElementsByClassName ( 'div', 'jsToggleOpen', document )
	var opened	= new Array

	for ( var i = 0; i < divs.length; i++ ){
		var ref	= divs [ i ]
		opened.push ( ref.id )
	}

	createCookie ( "iFAQToggle", opened.join ( ',' ), .1 )
}

fAddEvent(window, "load", collapseElements);
fAddEvent(window, "unload", saveState);