/***
* XSLT Class (XSL Transform)
*
* Author
*  Chonlasith Jucksriporn
*
* Version
*  1.0
*
* Revision
*  9/5/2549 (1.0) - Release
*
* Methods
*  Transform - Transform XML dom and XSL dom and return the result as HTML document.
*  TransformWrapper - Transform XML file and XSL file and return the result as HTML document.
*  ImportXML - Import XML file into internal XML dom cache.
*  ImportXSL - Import XSL file into internal XSL dom cache.
*  ResetXML - Clear internal XML dom cache.
*  ResetXSL - Clear internal XSL dom cache.
*  JustTransform - Transform internal XML dom cache and internal XSL dom cache and return the
*    result as HTML document.
*
* Requirement
*  prototype.js v1.4+ (http://prototype.conio.net/)
*
*/
var XSLT = {
	Transform: function(xmldoc, xsldoc) {
		var rtn = Try.these(
			// test for ie xmldom internal transformNode processor
			function() {return xmldoc.transformNode(xsldoc);},
			// mozilla xslt processor
			function() {
				var xsltp = new XSLTProcessor();
				var tempnode = document.createElement("div");
				xsltp.importStylesheet(xsldoc);
				tempnode.innerHTML = "";
				tempnode.appendChild(xsltp.transformToFragment(xmldoc, document));
				return tempnode.innerHTML;
			}
		);
		return rtn;
	},
	TransformWrapper: function(xmldocfile, xmloptions, xsldocfile, xsloptions) {
		this.ImportXML(xmldocfile, xmloptions);
		this.ImportXSL(xsldocfile, xsloptions);
		return this.JustTransform();
	},
	ImportXML: function(xmldocfile, xmloptions) {
		var _xmlrequestoptions = {asynchronous:false};
		Object.extend(xmloptions, _xmlrequestoptions);
		var xmlrequest = new Ajax.Request(xmldocfile,xmloptions);
		this._lastXML = xmlrequest.transport.responseXML;
	},
	ImportXSL: function(xsldocfile, xsloptions) {
		var _xmlrequestoptions = {asynchronous:false};
		Object.extend(xsloptions, _xmlrequestoptions);
		var xslrequest = new Ajax.Request(xsldocfile,xsloptions);
		this._lastXSL = xslrequest.transport.responseXML;
	},
	ResetXML: function() {
		this._lastXML = null;
	},
	ResetXSL: function() {
		this._lastXSL = null;
	},
	JustTransform: function() {
		return this.Transform(this._lastXML, this._lastXSL);
	}
};
