function EI(id){return document.getElementById(id);}
function ET(tg){return document.getElementsByTagName(tg);}
function EN(nm){return document.getElementsByName(nm);}
function CE(tg){return document.createElement(tg);}
function CT(st){return document.createTextNode(st);}
function AE(o, ev, func){if(!!o.addEventListener) o.addEventListener(ev, func, false); else if(!!o.attachEvent) o.attachEvent('on'+ev, func);else return false; return true;}
function RE(o, ev, func){if(!!o.removeEventListener) o.removeEventListener(ev, func, false); else if(!!o.dettachEvent) o.dettachEvent('on'+ev, func); else return false; return true;}

function ParseRead(src, qs, esc){
	if(!qs)
		qs={};
	if(src===undefined||src===null)
		src=location.search;
	src=src.substring(1+src.indexOf('?'));
	for(var i=0,srcs=src.split('&'),s,p;s=srcs[i];i++){
		p=s.indexOf('=');
		if(p==-1){
			if(qs['q']===undefined)
				qs['q']=s;
			else if(qs['q'].constructor==Array)
				qs['q'].push(s);
			else
				qs['q']=new Array(qs['q'], s);
			
		}else{
			if(esc=='escape')
				qs[unescape(s.substring(0, p))]=unescape(s.substring(p+1));
			else
				qs[decodeURIComponent(s.substring(0, p))]=decodeURIComponent(s.substring(p+1));
		}
	}
	return qs;
}//

/****
WPではfield id は存在しない
****/
function GetFieldById(fid){
	return field;
}//
/*****
function GetFieldById(fid){
	for(var i=0,f;f=fields[i];i++)
		if(f.id==fid)
			return f;
	return null;
}//

/*****/
var D={
	 d:0
	,inited:0
	,elms:['','']
/*****/
	,Init:function(){
		if(!this.d||this.inited)
			return true;
		this.elms[0]=document.createElement('div');
		this.elms[1]=document.createElement('div');
		this.elms[0].id='debug';
		this.elms[1].id='debug2';
		if(document.body)
		for(var i=0;i<this.elms.length;i++)
		document.body.appendChild(this.elms[i]);
	}
/*****/
	,Out:function(){
		if(!this.d)
			return true;
		var d=arguments[0];
		var arg=[];
		if(typeof d=='string'){
			arg.push(d);
			d=this.elms[0];
		}else if(typeof d=='number'){
			d=this.elms[d];
		}
		
		for(var i=1;i<arguments.length;i++)
			arg.push(arguments[i]);
		
		d.innerHTML+=arg.join(' ')+BR;
	}
/*****/
	,Clear:function(d){
		if(!this.d)
			return true;
		if(d!==undefined && this.elms[d]){
			this.elms[d].innerHTML='';
		}else if(d!==undefined && d.innerHTML!=undefined){
			d.innerHTML='';
		}else{
			for(var i=0;i<this.elms.length;this.elms[i++].innerHTML='');
		}
	}
/*****/
	,Cout:function(){
		if(!this.d)
			return true;
		this.Clear.apply(this, arguments);
		this.Out.apply(this, arguments);
	}
/*****/
	,A:function(){
		var d=arguments[0];
		var arg=[];
		if(typeof d=='string'){
			arg.push(d);
			d=this.elms[0];
		}else if(typeof d=='number'){
			d=this.elms[d];
		}
		
		for(var i=1;i<arguments.length;i++)
			arg.push(arguments[i]);
		
		alert(arg.join('\n'));
	}
};

/*****/
Menu={
	references:[]
	,
/*****/
	Init:function(){
		return this;
	}
	,
/*****/
	Destroy:function(){
		delete this.Init;
		delete this.Selection;
		delete this.references;
		return this;
	}
	,
/*****/
	Selection:function(fid,cid,refs){
		var fld=GetFieldById(fid);
		if(!fld)
			return false;
		var cha=fld.GetKoropokkeById(cid);
		if(!cha)
			return false;
		cha.balloon.Close();
		if(refs)
			Menu.references=(typeof refs=='string')?[refs]:refs;

		if(Menu.references[0].indexOf('script:')==0){
			var scr=Menu.references[0].substring('script:'.length);
			eval(scr);
		}else{
			fld.action.GetEvent('OnChoiceSelect', cha);
		}
		return true;
	}//
};

/***********
旧Menu.Selection
***********/
function Selection(fid,cid,refs){
	var fld=GetFieldById(fid);
	if(!fld)
		return false;
	var cha=fld.GetKoropokkeById(cid);
	if(!cha)
		return false;
	cha.balloon.Close();
	if(refs)
		Menu.references=(typeof refs=='string')?[refs]:refs;

	if(Menu.references[0].indexOf('script:')==0){
		var scr=Menu.references[0].substring('script:'.length);
		eval(scr);
	}else{
		fld.action.GetEvent('OnChoiceSelect', cha);
	}
	return true;
}//

/***** in-WP
*****/
function FreeTalk(msg, fid, cid){
	field.action.StartTalk(msg, cid);
	return false;
}

/***** out-WP
function FreeTalk(msg, fid, cid){
//alert(escape(msg)+'\n'+fid+'\n'+cid);
	if(fid!==undefined){
		var field=GetFieldById(fid);
		if(field){
			field.action.StartTalk(msg, cid);
			return true;
		}
	}
//alert('FieldTalk fields[0]'+fields[0].action);
	fields[0].action.StartTalk(msg, cid);
	return false;
}

/*****
function CallAction(msg, fid, cid){
	for(var i=0,cf,line,field;field=fields[i];i++){
		if(field.id!=fid)
			continue;
		if(field.OnChoiseSelect)
			field.OnChoiseSelect();
	}//for
}

/*****/

U={
}

U.EI=EI;
U.ET=ET;
U.EN=EN;
U.CE=CE;
U.CT=CT;
U.AE=AE;
U.RE=RE;

/*****/
U.Inherit=function(subClass, superClass){
	// does not copy poroperties, must do "SuperClass.apply(this, arguments);" in subClass' constructor
	for(var i in superClass)
		if(typeof(subClass[i])=='undefined')
			subClass[i]=superClass[i];
	// when need to add functions to superclass.prototype after inherit
	subClass.prototype = new superClass();
	subClass.prototype.constructor = subClass;

	return subClass;
};//

/*****/
U.Query2Json=function(line){
	var lines=line.split('&');
	var tmp={};
	for(var i=0,ary;i<lines.length;i++){
		ary=line.split('=');
		tmp[unescape(ary[0])]=unescape(ary[1]);
	}
	return tmp;
};//

/*****/
U.Json2Query=function(json){
	var tmp=[];
	for(var i in json){
		tmp.push(escape(i)+'='+escape(json[i]));
	}
	return tmp.join('&');
};//

/*****/
U.StringInclude=function(pattern, str){
	pattern=pattern.replace(/\//g, '\\/');
	return str.test('/'+pattern+'/');
};//

/*****/
U.ArrayInclude=function(str, ary){
	for(var i=0;i<ary.ength;i++)
		if(ary[i]==str)
			return true;
	return false;
};//

/*****/
U.Trim=function(str){
	return str.replace(/^[\s\n\r]+/, '').replace(/[\s\r\n]+$/g, '');
};//

/*****/
U.RemoveComment=function(str){
	if(str.charAt(0)=='#')
		return '';
	return str;
};//

/*****/
U.GetPos=function(elm){
	var x=elm.offsetLeft,y=elm.offsetTop;
	var p=elm.parentNode;
	while(p){
		x+=p.offsetLeft;
		y+=p.offsetTop;
		p=p.offsetParent;
	}
	return [x,y];
}

/*****/
U.ArrayParseFloat=function(ary){
	for(var i=0;i<ary.length;i++){
		ary[i]=parseFloat(ary[i]);
	}
	return ary;
}

/*****/
U.StopEvent=function(e){
	if(e.preventDefault){
		e.preventDefault();
		e.stopPropagation();
	}
	e.returnValue=false;
	e.cancelBubble=true;
};

