/*
**    File: fw_xslt.js
**    Created by: Zolotarev Anton (http://sourceforge.net/projects/ajaxos)
**
**    License Information:
**    -------------------------------------------------------------------------
**    Copyright (C) 2005 Zolotarev Anton
**
**    This program is free software; you can redistribute it and/or modify it
**    under the terms of the GNU General Public License as published by the
**    Free Software Foundation; either version 2 of the License, or (at your
**    option) any later version.
**    
**    This program is distributed in the hope that it will be useful, but
**    WITHOUT ANY WARRANTY; without even the implied warranty of
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
**    General Public License for more details.
**    
**    You should have received a copy of the GNU General Public License along
**    with this program; if not, write to the Free Software Foundation, Inc.,
**    59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

if(!fw.xslt)
fw.xslt = function(){
    var out = {};
    for(var i in fw.xslt) out[i] = (typeof fw.xslt[i]);
    out['version'] = "v0.00";
    return out;
}

fw.xslt._handlers = {};
fw.xslt._type = 'XSLT';

fw.xslt._AX = [
//	"Msxml2.DOMDocument.3.0",
//	"Msxml2.DOMDocument.2.6",
//	"Msxml2.DOMDocument",
	"Microsoft.XMLDOM"
];

fw.xslt._RPL = [
	[/&nbsp;/g,		'&#160;'],
	[/&iexcl;/g,	'&#161;'],
	[/&cent;/g,		'&#162;'],
	[/&pound;/g,	'&#163;'],
	[/&curren;/g,	'&#164;'],
	[/&yen;/g,		'&#165;'],
	[/&brvbar;/g,	'&#166;'],
	[/&sect;/g,		'&#167;'],
	[/&uml;/g,		'&#168;'],
	[/&copy;/g,		'&#169;'],
	[/&ordf;/g,		'&#170;'],
	[/&laquo;/g,	'&#171;'],
	[/&not;/g,		'&#172;'],
	[/&shy;/g,		'&#173;'],
	[/&reg;/g,		'&#174;'],
	[/&macr;/g,		'&#175;'],
	[/&deg;/g,		'&#176;'],
	[/&plusmn;/g,	'&#177;'],
	[/&sup2;/g,		'&#178;'],
	[/&sup3;/g,		'&#179;'],
	[/&acute;/g,	'&#180;'],
	[/&micro;/g,	'&#181;'],
	[/&para;/g,		'&#182;'],
	[/&middot;/g,	'&#183;'],
	[/&cedil;/g,	'&#184;'],
	[/&sup1;/g,		'&#185;'],
	[/&ordm;/g,		'&#186;'],
	[/&raquo;/g,	'&#187;']
];

fw.xslt.getXmlO = function(){
	var hxml = null,hxsl = null,hsrl = null, tp = null;
	for(var i=0;(!hxml && (i < this._AX.length));i++){
		try{
			hxml = new ActiveXObject(this._AX[i]);
			hxml.async = false;
			hxsl = new ActiveXObject(this._AX[i]);
			hxsl.async = false;
			fw.info.xslt = this._AX[i];
			tp = 0;
		}catch(e){}
	}
	if(!hxml) try{
		hxsl = new XSLTProcessor();
		hxml = new DOMParser();
		hsrl = new XMLSerializer();
		fw.info.xslt = 'Native XSLTProcessor and DOMParser';
		tp = 1;
	}catch(e){}
	
	return {xml:hxml, xsl:hxsl, srl:hsrl, t:tp};
}

fw.xslt.create = function(fxsl, felem){

	
	var hndlXML = null;
	var hndlIO = null;
	var id = fw.info.counter(this._type);
	
	hndlXML = this.getXmlO();
	
	if(!(hndlXML.xml && hndlXML.xsl)){
	
		alert("error - Create XSL Object");	
		
	 return fw.data.error(4, 'Create XSL Object');
	}
	
	hndlIO = fw.io.create(fxsl);
	{

	if(fw.data.isError(hndlIO)) {
	
		alert("error - hndlIO");
		
		return hndlIO;
		}
	}
	this._handlers[id] = {
		hIO:	hndlIO,
		hXSL:   hndlXML.xsl,
		hXML:	hndlXML.xml,
		hSRL:	hndlXML.srl,
		type:   hndlXML.t,
		xsl:    null,
		xml:    null,
		elem:	null
	};
	
	var res = this.update(id, fxsl, felem);
	if(fw.data.isError(res)){
	
	//alert("error - update");
	
		this.close(id);
		return res;
	}
	
		
	return id;
}

fw.xslt.update = function(id,xsl,elem){
		
	if(!fw.data.isType(id, this._type)) return fw.data.error(2, 'XSL Header');
    var el = this._handlers[id];
    if(!el) return fw.data.error(3, 'XSL Header');
    
    if(xsl && !fw.data.isStr(xsl)) return fw.data.error(2);
    if(elem && !fw.data.isStr(elem)) return fw.data.error(2);
    
	if(xsl){
		try{
			var res = null;
			var doc = fw.io.transfer(el.hIO);
			//alert(doc);			
			//var doc = " ";
			if(!doc) 
			{
				alert("error - update Can Not Load XSL");
				return fw.data.error(1, 'Can Not Load XSL');
				
			}	
			for(var i=0;i < this._RPL.length;i++) doc = doc.replace(this._RPL[i][0], this._RPL[i][1]);
			
			if(el.type === 0){
				if(!el.hXSL.loadXML(doc)) return fw.data.error(1, 'Can Not Parse XSL');
			}else if(el.type === 1){
				
				doc = el.hXML.parseFromString(doc,"text/xml");
			//alert(doc);
				el.hXSL.reset();
				res = el.hXSL.importStylesheet(doc);
				
				}else return fw.data.error(4);
			
		}catch(e){ return fw.data.error(8, 'Can Not Parse XSL') }
	}
	if(elem) el.elem = elem;
	
	    return true;
}

fw.xslt.close = function(id){
	if(!fw.data.isType(id, this._type)) return fw.data.error(2, 'XSL Header');
    if(!this._handlers[id]) return fw.data.error(3, 'XSL Header');
    
    try{
    	if(this._handlers[id].hXML) delete this._handlers[id].hXML;
    	if(this._handlers[id].hXSL) delete this._handlers[id].hXSL;
    	if(this._handlers[id].hSRL) delete this._handlers[id].hSRL;
	}catch(e){}
	
	fw.io.close(this._handlers[id].hIO);
	
    this._handlers[id] = null;
    return true;
}

fw.xslt.refresh = function(id,xml,add, conv){
	if(!fw.data.isType(id, this._type)) return fw.data.error(2, 'XSL Header');
	var el = this._handlers[id];
	if(!el) return fw.data.error(3, 'XSL Header');
	
	var res = null, elm = null, src = null;
	try{
		if(el.type === 0){
						
			res = el.hXML.loadXML(xml);
						
			if(res && !(src = el.hXML.transformNode(el.hXSL))) return fw.data.error(1, 'XSL Transform');
		}else if(el.type === 1){
			res = el.hXML.parseFromString(xml,"text/xml");
			
			//var ee_src = el.hSRL.serializeToString(res);alert(ee_src);
			
			if(res && !(src = el.hXSL.transformToFragment(res, document))) return fw.data.error(1, 'XSL Transform');
						
						src = el.hSRL.serializeToString(src);
		}else return fw.data.error(4);
			
		//alert(src);	
	}catch(e){ return /*fw.data.error(8, 'Transform XSL');*/ }
	
	
	//alert(src);
	
	src = src.replace(/&amp;/g, '&');
	if(conv){
		src = src.replace(/&lt;/g, '<');
		src = src.replace(/&gt;/g, '>');
		src = src.replace(/&amp;lt;/g, '&lt;');
		src = src.replace(/&amp;gt;/g, '&gt;');
		src = src.replace(/&amp;amp;lt;/g, '&amp;lt;');
		src = src.replace(/&amp;amp;gt;/g, '&amp;gt;');
	}

var ya = '';
var qu = '"';
ya += '<script type="text/javascript">';
ya += "alert('13');";
ya += '//<![CDATA[';
ya += "yandex_partner_id = 57617;";
ya += "yandex_site_bg_color = 'FFFFFF';";
ya += "yandex_site_charset = 'UTF-8';";
ya += "yandex_ad_format = 'direct';";
ya += "yandex_font_size = 1;";
ya += "yandex_direct_type = 'vertical';";
ya += "yandex_direct_limit = 9;";
ya += "yandex_direct_header_bg_color = 'FEEAC7';";
ya += "yandex_direct_title_color = '0000CC';";
ya += "yandex_direct_url_color = '006600';";
ya += "yandex_direct_all_color = '0000CC';";
ya += "yandex_direct_text_color = '000000';";
ya += "yandex_direct_hover_color = '0066FF';";
ya += "yandex_direct_favicon = true;";
ya += "document.write('<sc'+'ript type=' + qu + 'text/javascript' + qu + ' src=' + qu + 'http://an.yandex.ru/system/context.js' + qu + '></sc'+'ript>');";
ya += "//]]>";
ya += "</script>";



	src = src.replace('yandex', '');

	//f_new_html_block('test1',"<textarea style='width: 400px;height: 200px;'>"+src+"</textarea>",0);
	if(el.elem && (elm = document.getElementById(el.elem))){
		if(add) elm.innerHTML += src; else elm.innerHTML = src;
	}
	else return src;
	
	return true;
}

fw.xslt();