var requester = new Requester();
var busy = false;
var message = null;

if (requester.isAvailable())
{
	setStylesheet("XMLHR", false, false);
}

schedule("window", init);

function alter_category( data )
{
	var ix;
	var select = document.getElementById("filter_dropdown");

	if ( true == busy )
	{
		return;
	}

	/* request has been sent, quick look busy! */
	busy = true;

	if ( message == null)
	{
		message = document.getElementById("filter");
	} else {
		try
		{
			for ( ix = message.childNodes.length; ix > 0; ix--)
				message.removeChild(message.childNodes[0]);
		}
		catch (error)
		{
		}
	}

	message.appendChild( document.createTextNode( "Loading..." ) );

	requester.setAction( new_list );
	requester.loadURL("index.php", "module=xml&submodule=filter&id=" + select.value);
}

function new_list()
{
	busy = false;

	var wip;
	var measure;
	var main;
	var select;
	var id;
	var name;

	wip = requester.getXML().getElementsByTagName("entrys");
	measure = requester.getXML().getElementsByTagName("measure");
	main = requester.getXML().getElementsByTagName("filters");

	/* check for a valid xml doc */
	if ( 1 != wip.length )
	{
		try {
			message.removeChild(message.childNodes[0]);
			message.appendChild(document.createTextNode("Invalid XML feed."));
		} catch (error)
		{ }

		return;
	}

	/* check how many results we have */
	count = parseInt( wip[0].childNodes[0].nodeValue );

	if ( 0 == count )
	{
		try {
			message.removeChild(message.childNodes[0]);
			message.appendChild(document.createTextNode(" "));
		} catch( error )
		{
		}

		return;
	}

	/* append the filter title */
	try {
		message.removeChild(message.childNodes[0]);
		message.appendChild(document.createTextNode( measure[0].childNodes[0].nodeValue + ":"));
		message.appendChild( document.createElement( "br" ) );
	} catch( error )
	{
	}

	select = init_select( "filter" );

	/* process the rest of the XML */
	for( ix=0; ix < main[0].childNodes.length ; ix++)
	{
		switch( main[0].childNodes[ix].nodeName )
		{
			case 'filter':
				id = r_find_val( main[0].childNodes[ix], "id" );
				name = r_find_val( main[0].childNodes[ix], "name" );
				append_option( select, id, name );
			break;
		}
	}

	/* render the dropdown */
	try {
		message.appendChild( select );
	} catch ( error )
	{
	}
}

/* creates a drop down */
function init_select( name )
{
	var select = document.createElement( "select" );
	select.name = name;
	return select;
}

/* appends an option to the given select object */
function append_option( select, id, name )
{
	var option = document.createElement( "option" );
	option.innerHTML = name;
	option.value = id;
	select.appendChild( option );
	return option;
}

/* recusivly search the xml DOM looking for name */
function r_find_val( xml, name )
{
	var count;
	var ix;
	var retval;

	count = xml.childNodes.length;

	for( ix = 0; ix < count; ix++)
	{
		if ( name == xml.childNodes[ix].nodeName )
		{
			retval = extract_data( xml.childNodes[ix] );
			
		} else {
			retval = r_find_val( xml.childNodes[ix], name );
		}

		if ( false != retval )
			return retval;
	}

	return false;
}

/* return the value for the given node */
function extract_data( node )
{
	var count = node.childNodes.length;

	if ( 0 == count )
		return false;
	
	return node.childNodes[0].nodeValue;
}

/* bootstrap/setup initial state and events */
function init()
{
	var needle = document.getElementById("filter_dropdown");
	needle.onchange = alter_category;
	alter_category();
}

/* functions from original html */
function SwapImage(imagename,imgsrc)
{
	if (document.images) 
		{document.images[imagename].src=imgsrc;}
}          
       
function PrintPage()
{
	if (window.print)
	{
		window.print()
	} else {
		alert("Sorry, your browser doesn't support this feature.\n\nTo print this page please go to 'File' and then 'Print...' on your browser menu.");
	}
}

