<script >
<![CDATA[
function debug(s)
{
	Packages.java.lang.System.out.println(s);
}

function getInheritedAttribute(element,name)
{
	var value;
	value=null;

	while ((element != null) && (element.getNodeType() == 1))
	{
		value = element.getAttribute(name);
		if (value != null && value != "")
			break;

		element = element.getParentNode();
	}
	return value;
}

function getLayout(element)
{
	return getInheritedAttribute(element,'layout');
}

// This uses the latest Xalan code
function transform(source,layout,output)
{
	tFactory = Packages.javax.xml.transform.TransformerFactory.newInstance();

	xmlSource = new Packages.javax.xml.transform.dom.DOMSource(source);
	url = new Packages.java.net.URL(layout);
	stream = url.openStream();
	xslSource = new Packages.javax.xml.transform.stream.StreamSource(stream);

	// Generate the transformer.
	transformer = tFactory.newTransformer(xslSource);
	// Perform the transformation, sending the output to the response.
	transformer.transform(xmlSource,new Packages.javax.xml.transform.stream.StreamResult(output));
}

/**
* This determines which XSL stylesheet to use and applies the stylesheet to the targeted
* element.
*/
function get(context,returnTypes,parameters)
{
	var doc;
	var layout;

	debug('in get()');
	doc = context.getResponse().getWriter();

	// check for object
	if (xml == null)
	{
		context.getResponse().sendError(404,"Page not found.");
		return;
	}

	// require a trailing slash.
	var path;
	path = context.getRequest().getPathInfo();
	if (path != null && path.charAt(path.length-1) != '/')
	{
		app.redirectTo(context,path+"/");
		return;
	}

	// get the url to the XSL to use for the transform.
	base = getInheritedAttribute(xml,'resources.server');

	layout = parameters.get('layout');
	if (layout == null)
	{
		layout = getLayout(xml);
	}

	if (base != null && (layout.indexOf(':') <= 1))
	{
		media_root = Packages.org.apache.xang.util.ServletUtil.getRealPath(context);

		layout = media_root + "/" + base + layout;
		layout = "file://localhost/"+Packages.org.apache.xang.util.ServletUtil.resolveURL(layout);
	}

	if (layout != null)
	{
		context.getResponse().setContentType("text/html");
		transform(xml,layout,doc);
		doc.flush();
	}
}

function getXML(context,returnTypes,parameters)
{
	doc = context.getResponse().getWriter();
	doc.println("<?xml version='1.0' ?>");
	doc.println("<!-- cool huh? -->");
	doc.println(xml.getXML());
}

function getScript(context,returnTypes,parameters)
{
	var doc;
	var s;
	var util;

	doc = context.getResponse().getWriter();

	util = new Packages.org.apache.xang.util.TextUtil();


	s = "<html><body><pre>";
	s += util.encodeToHTML(app.loadScript(null));
	s += "</pre></body></html>";
	doc.println(s);
	doc.flush();
}
]]>
</script>
