
function giRPC_Engine() {
	this.old = null;
	this.head = null;
	this.scrNum = 0;
	this.iframeNum = 0;
	this.iframeIds = new Object();
	this.filedIds = new Object();
}

giRPC_Engine.prototype = {
  
	getIFrameName: function () {
		return 'giRPCIFrame' + this.iframeNum;
	},

	removeIFrame: function (scriptid) {
		var old = parent.document.getElementById(scriptid);
		if (old) {
			var head = document.getElementsByTagName('head').item(0);
//			document.body.removeChild(old);
			head.removeChild(old);
		}
	},

	request: function (uri, field, str) {

		var head = document.getElementsByTagName('head').item(0);

		if ( typeof(field) == 'undefined' && typeof(str) == 'undefined' )
		{
			this.iframeNum++;

			var name = 'giRPCIFrame'+this.iframeNum;
			
			if ( document.all ) {
				var iframe = document.createElement('<iframe name="'+name+'" id="'+name+'">');
			} else {
				var iframe = document.createElement('iframe');
				iframe.id	= name;
				iframe.name	= name;
				iframe.border = 0;
				iframe.width = 0;
				iframe.height = 0;
			}

			this.iframeIds[iframe.id] = iframe;

//			void(document.body.appendChild(iframe));
			void(head.appendChild(iframe));

			return;
		}

		var script = document.createElement('script');

		script.id		= 'giRPCsrc'+this.scrNum;
		script.src		= uri + '?action=jsRPC'+str+'&s='+script.id;
		script.type		= 'text/javascript';
		script.defer	= true;

		this.filedIds[script.id] = field;

		this.scrNum++;

		void(head.appendChild(script));
	},

	removeScript: function (scriptid) {

		var old = document.getElementById(scriptid);
		if (old) {
			head.removeChild(old);
		}
	},

	passData: function (rpcNum, data) {
		document.getElementById(this.filedIds[rpcNum]).innerHTML = data;
		rpcRemoveScript(rpcNum);
	}

}

var giRPC = new giRPC_Engine();

