/*
   ajaxdom.js  XSLT translating using ixmlcompat.js for AJAX

   @author Doi Daishin(dd@denpan.org)
*/
function AjaxDOM()
{
	this.nodes = {};
}
AjaxDOM.prototype.init = function()
{
	var nodes = XMLCompat.getElementsByTagName('DIV');
	var d = [];
	var comment = false;

	for (var i = 0; i < nodes.length; ++i) {

		var node = nodes[i];

		if ('string' == typeof node.getAttribute('src')) {
			var src = node.getAttribute('src');

			AjaxDOM.nodes[i] = {};
			AjaxDOM.nodes[i].id = node.id;

      var xslsrc = node.innerHTML.replace(/\n/g,' ');

      if (xslsrc = xslsrc.match(/<!--\s*<xsl:stylesheet.*?<\/xsl:stylesheet>\s*-->/)) {
			    AjaxDOM.nodes[i].xsl = xslsrc.toString();
			    setTimeout("AjaxDOM.loadAsync(" + i + ",'" + src + "');", 0);
      }
		}
	}
}
AjaxDOM.prototype.loadAsync = function(i, src)
{
  AjaxDOM.nodes[i].xml = XMLCompat.createXMLDocument();
	AjaxDOM.nodes[i].xml.onreadystatechange = function()
	{
		if(4 == AjaxDOM.nodes[i].xml.readyState) {
			if (0 != AjaxDOM.nodes[i].xml.parseError.errorCode) {
				var err = AjaxDOM.nodes[i].xml.parseError;
				alert("XML Parse Error :"+ err.reason +
                  "\nURL :"+ err.url);
				return;
			}

			var target = document.getElementById(AjaxDOM.nodes[i].id).firstChild;
			target = ('DIV' == target.nodeName) ? target: target.nextSibling;
			var xsl = AjaxDOM.getStyleSheetDocument(AjaxDOM.nodes[i].xsl);
			target.innerHTML = AjaxDOM.nodes[i].xml.transformNode(xsl);

			if ('undefined' != typeof pager && 'string' == typeof target.getAttribute('pager')) {
				pager.initController(target);
			}
		}
	}
  if ('undefined' != typeof document.body.style.behavior) {
    src += (-1 != src.indexOf('?')) ? '&': '?';
    src += 'rnd=' + (new Date()).getTime();
  }
	AjaxDOM.nodes[i].xml.load(src);
}
AjaxDOM.prototype.getStyleSheetDocument = function(str, sortkey1)
{
	var xsl = XMLCompat.createXMLDocument();
	xsl.async = false;
	xsl.onreadystatechange = function()
	{
		if (0 != xsl.parseError.errorCode) {
			var err = xsl.parseError;
			alert("XSL Parse Error :"+ err.reason +
                  "\nURL :"+ err.url);
			return;
		}
	}
	var xslStr = this.getStyleSheet(str, sortkey1);
	xsl.loadXML(xslStr);
	return xsl;
}
AjaxDOM.prototype.getStyleSheet = function(str, sortkey1)
{
	var str = str.replace(/^<!--.*?|-->$/g, '')
							.replace(/^[^<>]*?</, '<')
							.replace(/>[^<>]*$/, '>');
	var tags = str.match(/<.*?>/g);
	var xslStr = str.replace(/<.*?>/g, '##TAG##');

	if (tags && 0 < tags.length) {
		for (var i = 0; i < tags.length; ++i) {
			if (-1 != tags[i].search(/".*?"/)) {
				var doubleQuoted = tags[i].match(/".*?"/g);
				var tagStr = tags[i].toLowerCase().replace(/".*?"/g, '##QUOTED##');

				for (var m = 0; m < doubleQuoted.length; ++m) {
					tagStr = tagStr.replace(/##QUOTED##/, doubleQuoted[m]);
				}
			} else {
				var tagStr = tags[i].toLowerCase();
			}
			xslStr = xslStr.replace(/##TAG##/, tagStr);;
		}
	}
	return xslStr;
}

AjaxDOM = new AjaxDOM;
