(function() {	/* setup */
	// no configuration.
	if(!irpocket) {
		return;
	}
	
	// multiple call
	if(typeof irpocket.loadSwf == 'function') {
		return;
	}
	
	// check Flash version if detection script was available
	if(typeof DetectFlashVer == 'function' && !DetectFlashVer(9, 0, 0)) {
		irpocket.loadSwf = function() {
			document.write('Please install Flash Player 9.0 or later.');
		}
		return;
	}
	
	irpocket.graphid = 0;
	irpocket.graphtask = { };
	
	if(irpocket.debug) {
		var htmlspecialchars = function (s) {
			var ch = s.replace(/&/g,"&amp;");
			ch = ch.replace(/"/g,"&quot;");
			ch = ch.replace(/'/g,"&#039;");
			ch = ch.replace(/</g,"&lt;");
			ch = ch.replace(/>/g,"&gt;");
			return ch;
		}
		
		/* showMessage is callback routine for Grapher */
		showMessage = function(str, mode) {
		  document.getElementById('console').innerHTML += htmlspecialchars(str) + "<br/>\n";
		}
	}
	
	var getFlashTag = function() {
		var args = arguments;
		var embedAttrs = { };
		var params = { };
		var objAttrs = { };
		for(var i=0 ; i < args.length ; i=i+2) {
			var currArg = args[i].toLowerCase();
			switch (currArg){
			case "src":
				embedAttrs["src"] = params["movie"] = args[i+1];
				break;
			case "id":
			case "codebase":
			case "classid":
				objAttrs[args[i]] = args[i+1];
				break;
			case "width":
			case "height":
				embedAttrs[args[i]] = objAttrs[args[i]] = args[i+1];
				break;
			case "pluginspage":
			case "type":
				embedAttrs[args[i]] = args[i+1];
				break;
			default:
				embedAttrs[args[i]] = params[args[i]] = args[i+1];
			}
		}
		var strs = ['<object '];
		for(var i in objAttrs)
			strs.push(i + '="' + objAttrs[i] + '" ');
		for(var i in params)
			strs.push('><param name="' + i + '" value="' + params[i] + '" /');
		strs.push('><embed ');
		for(var i in embedAttrs)
			strs.push(i + '="' + embedAttrs[i] + '" ');
		strs.push('> </embed></object>');
		return strs.join('');
	}
	
	irpocket.timestamp = (new Date()).getTime();
	var swfCache = !(typeof irpocket.cacheSwf != 'undefined' && !irpocket.cacheSwf);
	
	var stripPx = function(s) {
		return (typeof s == 'string') ? s.replace(/px$/, "") : s;
	};
	
	irpocket.loadSwf = function(swf, dat, style, width, height) {
		var vars = "data="+escape(dat)+"&style="+escape(style);
		if(irpocket.highlight.cacheData) {
			vars += "&hash=0";
		}
		irpocket.graphid++;
		return getFlashTag(
			"src", swf + (!swfCache ? "?" + irpocket.timestamp : ""),
			"name", "Grapher",
			"id", "Grapher" + irpocket.graphid,
			"width", stripPx(width) + "px",
			"height", stripPx(height) + "px",
		//	"align", "middle",
			"quality", "high",
			"wmode", "transparent",
		//	"allowScriptAccess", "always",
			"classid", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
			"type", "application/x-shockwave-flash",
			"codebase", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0",
			"pluginspage", "http://www.adobe.com/go/getflashplayer",
			"flashVars", vars);
	}
	
	var saved = window.onload;
	window.onload = function () {
		var prefix = irpocket.prefix_graph;
		for(var i = 2 ; i <= irpocket.graphid ; i++) {
			document.getElementById(prefix+i).innerHTML = irpocket.graphtask[i];
		}
		(saved != null) && saved();
	}
})();

(function() {
	// get last script element in base html document.
	var ss = document.getElementsByTagName('script');
	var loader = ss[ss.length-1];
	var src = loader.src;
	var div = loader.parentNode;
	if(div.id.indexOf("irp-graph-") != 0) {
		document.write('Cannot detect graph id.');
		return;
	}
	var getStyleName = function(obj) {
		if(obj.className) {
			var classes = obj.className.split(/ /);
			for(var i=0 ; i<classes.length ; i++) {
				if(classes[i].indexOf("irp-graph-style-") == 0) {
					return classes[i].substr(16);
				}
			}
		}
	};
	var style = getStyleName(div);
	var gcode = div.id.substr(4);
	var w = ((div.currentStyle && div.currentStyle.width ) || div.clientWidth);
	var h = ((div.currentStyle && div.currentStyle.height) || div.clientHeight);
	var swf = (irpocket.highlight && irpocket.highlight.grapher) || "Grapher.swf";
	if(swf.indexOf(':') == -1 && swf.charAt(0) != '.') {
		swf = irpocket.base+irpocket.code+"/SWF/"+swf;
	}
	var url = irpocket.base+irpocket.code+"/XML/"+gcode;
	var tag = irpocket.loadSwf(swf, url+".xml", url+(style?"-"+style:"")+"-style.xml", w, h);
	if(irpocket.graphid == 1) {
		document.write(tag);
	} else {
		var prefix = irpocket.prefix_graph = 'irp_graph_';
		var msg = (irpocket.message && irpocket.message.loading) || "Loading...";
		document.write('<span id="'+prefix+irpocket.graphid+'">'+msg+'</span>');
		irpocket.graphtask[irpocket.graphid] = tag;
	}
})();

