/**
 * Biblioteca de Transformação (XML e XSL)
 *
 *
 * @author Jefferson Neves, Iuri Andreazza
 * @since 06/2006
 * @version 0.0.1
 * @access public
 * @return void
 **/
 
/**
 * Inicializador do Objeto
 *
 * @param string xml (Caminho total até o arquivo)
 */
function XmlFormat(xml){
	this.xmlDocObj = xml;
	this.loadFromFile = ((typeof xml) == 'string' );
}

/**
 * Metodo que irá aplicar o XSL ao Elemento Especificado (ID)
 *
 * @param String xslFile (Caminho total para o Arquivo XSL)
 * @param String destId (ID do elemento que rá receber o XML Transmormado)
 *
 * @return void
 */
XmlFormat.prototype.applyXSL = function (xslFile, destId){
	if (document.implementation.createDocument) {
		applied = this._applyXslDOM(xslFile, destId);
	} else {
		applied = this._applyXslMS(xslFile, destId);
	}

	return applied;
}

/**
 * Metodo interno que trata o XML e XSL para IE 6++
 *
 * @param String xslFile (Caminho total para o Arquivo XSL)
 * @param String destId (ID do elemento que rá receber o XML Transmormado)
 */
XmlFormat.prototype._applyXslMS = function (xslFile, destId){
	var ok = true;
	var resultado;
	var xslDoc;
	try{
		dest = document.getElementById(destId);
		if (this.loadFromFile){
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async = false;
			xmlDoc.load(this.xmlDocObj);
		} else {
			xmlDoc = this.xmlDocObj;
		}

		xslDoc = new ActiveXObject("Microsoft.XMLDOM");
		xslDoc.async = false;
		xslDoc.load(xslFile);

		var txt = xmlDoc.transformNode(xslDoc);
		var span = document.createElement('SPAN');
		span.innerHTML = txt;
		dest.appendChild(span);

    }catch(e){
		alert('XmlFormat.applyXslMS('+xslFile+'): '+e.message);
		ok = false;
	}

	return ok;
}

/**
 *
 *
 *
 *
 */
XmlFormat.prototype._applyXslDOM = function (xslFile, destId){
	var ok = true;
	try {
		dest = document.getElementById(destId);

		if (this.loadFromFile){
			xmlDoc = document.implementation.createDocument('', '', null);
			xmlDoc.async = false;
			xmlDoc.load(this.xmlDocObj);
		} else {
			xmlDoc = this.xmlDocObj;
		}
		xslFile= xslFile.replace(new RegExp(/\\/g),'/');
		xslDoc = document.implementation.createDocument('', '', null);
		xslDoc.async = false;
		xslDoc.load(xslFile);

		var processor = new XSLTProcessor();
		processor.importStylesheet(xslDoc);

		oResultFragment = processor.transformToFragment(xmlDoc, document);
		dest.innerHTML = '';
		dest.appendChild(oResultFragment);

	} catch (e) {
		alert('XmlFormat.applyXslDOM: '+e.message);
		ok = false;
	}
    // Opera (Sem Implementação de XSL)

	return ok;
}