﻿// dynamic iframe start
// 2005.2.16 by guoo.net
// 2005.7.2 modified by guoo.net
// 2005.12.1 modified by guoo.net
var arrDynamicIFrameCaller = [];
var dynamicIFrameDebug = false;
var dynamicIFrameDummy = true;

//wrap function
function findDynamicIFrameCaller(id) {
	for(var i=0; i<arrDynamicIFrameCaller.length; i++) {
		if(arrDynamicIFrameCaller[i].id==id) return arrDynamicIFrameCaller[i];
	}
	return null;
}
function findDynamicIFrameCallerByIFrameName(name) {
	for(var i=0; i<arrDynamicIFrameCaller.length; i++) {
		if(arrDynamicIFrameCaller[i].name==name) return arrDynamicIFrameCaller[i];
	}
	return null;
}
//dynamic iframe class
function CDynamicIFrame(source, callback, form, args) {
	this.source = source;
	this.callback = callback;
	this.form = form;
	//optional arguments
	this.args = args;
}
//dynamic iframe caller class
function CDynamicIFrameCaller(id) {
	arrDynamicIFrameCaller[arrDynamicIFrameCaller.length] = this;
	this.id = id;
	this.name = 'dynamic_iframe_'+id;
	this.active = false;
	this.iframe = null;
	this.dynamicIFrameObj = null;

	var html;
	if(!dynamicIFrameDebug)
		html = '<iframe id="'+this.name+'" name="'+this.name+'" frameborder="0" width="0" height="0" style="display:none;"></iframe>';
	else
		html = '<iframe id="'+this.name+'" name="'+this.name+'" frameborder="0" width="100%" height="200"></iframe>';
	document.body.insertAdjacentHTML('afterBegin', html);

}
CDynamicIFrameCaller.prototype.call = function(dynamicIFrameObj) {
	if(!dynamicIFrameObj) {
		alert('dynamic-iframe-object is empty.');
		return;
	}
	this.dynamicIFrameObj = dynamicIFrameObj;
	this.active = true;
	this.iframe = document.getElementById(this.name);

	if(!this.iframe) {
		alert('iframe creating fail.');
		return;
	}
	if(dynamicIFrameObj.form && dynamicIFrameObj.form.tagName=='FORM') {
		dynamicIFrameObj.form.target = this.name;
		dynamicIFrameObj.form.action = dynamicIFrameObj.source;
		dynamicIFrameObj.form.submit();
	}else {
		var source = dynamicIFrameObj.source;
		if(dynamicIFrameDummy) {
		    if(source.indexOf('?')!=-1) {
		        source += '&dummy='+Math.random();
            } else {
                source += '?dummy='+Math.random();
            }
		}
		this.iframe.src = source;
	}
}
function onLoadDynamicIFrame(windowObj, html) {
	var callerObj = findDynamicIFrameCallerByIFrameName(windowObj.name);
	if(!callerObj) {
		alert('can not find caller object.');
		return;
	}
	if(html) {
		html = html.replace(/＇/g, "'");
		html = html.replace(/\{js_nl\}/g, '\n');
	}
	var args = callerObj.dynamicIFrameObj.args;
	var callback = callerObj.dynamicIFrameObj.callback;
	var strArgument = '';
	for(var i=0; i<args.length; i++) strArgument += ', args['+i+']';
	if(typeof callback=='function') {
		var functioncCall = 'callback(html' + strArgument + ')';
		eval(functioncCall);
	}
	callerObj.active = false;
}

function dynamicIFrame(id, source, callback, form) {
	var optionalArgs = [];
	if(arguments.length > 4) {
		for(var i=4; i<arguments.length; i++) {
			optionalArgs[optionalArgs.length] = arguments[i];
		}//for
	}//if
	var dynamicIFrameObj = new CDynamicIFrame(source, callback, form, optionalArgs);
	var dynamicIFrameCaller = findDynamicIFrameCaller(id);
	if(!dynamicIFrameCaller) dynamicIFrameCaller = new CDynamicIFrameCaller(id);
	if(dynamicIFrameCaller.active) {
		if(dynamicIFrameCaller.iframe.readyState=='loading') {
			alert('running. try later.');
			return;
		}
	}

	dynamicIFrameCaller.call(dynamicIFrameObj);
}
// dynamic iframe finish
