/***********Constructor Function*************************/
function MonObjet(dynobjet,x,y,xratio,yratio,dx,dy,limitx,limity,smooth,scrX,scrY){
	this.dynobjet = dynobjet;//DynLayerオブジェクト
	this.x = x;		//ｘ座標 xratioのある時はnull又は任意．どんな値でも意味はなし
	this.y = y;		//ｙ座標 yratioのある時はnull又は任意．どんな値でも意味はなし
	this.xratio = xratio;	//ブラウザ幅に対する割合
	this.yratio = yratio;	//ブラウザ高に対する割合
	this.dx = dx;	//補正ｘマイナスで指定
	this.dy = dy;	//補正ｙマイナスで指定
	this.xpos = null;
	this.ypos = null;	
	this.limitx = limitx;	//限度ｘ
	this.limity = limity;	//限度ｙ
	this.smooth = smooth;//浮遊しながら移動させる時はtrue
	this.scrX = scrX;				//スクロールＸも勘案するときはtrue
	this.scrY = scrY;				//スクロールＹも勘案するときはtrue
	this.posiFnc1 = null//new function();
	this.posiFnc2 = null//new function();
}
/*******************************************************
例
function posinit(){
	a = new DynLayer('aDiv');
	b = new DynLayer('bDiv');
	(右からa幅,上から50)
	aa = new MonObjet(a,0,50,1,null,parseFloat(a.w)*(-1),null);
	(画面中央)
	bb = new MonObjet(b,0,0,1/2,1/2,parseFloat(b.w)/2*(-1),parseFloat(b.h)/2*(-1),0,0);
	sndTogetPos();
}
function sndTogetPos(){
	aa.pos();
	bb.pos();
}
<body onload="posinit()" onresize="sndTogetPos()">

onresizeはHTML4.01では認めていない．使いたくなければ
onresize = sndTogetPos;
又は
function startTimer() {
	setInterval("sndTogetPos()",20);
}
init()でstartTimer()
*********************************************************/

function setPos(){
	winScale = new findWH();
	if(this.xratio == null){
		this.xpos = this.x;
	}
	else if(this.xratio != null){
		this.xpos = winScale.winW * this.xratio;
		if(this.dx) this.xpos += this.dx;
	}
	if(this.yratio == null){
		this.ypos = this.y;
	}
	else if(this.yratio != null){
		this.ypos = winScale.winH * this.yratio;
		if(this.dy) this.ypos += this.dy;
	}
	if(this.scrX || this.scrY){
		scrCoor = new scrollmeager();
		if(this.scrX) this.xpos += scrCoor.winscrX;
		if(this.scrY) this.ypos += scrCoor.winscrY;
	}
	if((this.limitx != null) && (this.xpos<this.limitx)) this.xpos = this.limitx;
	if((this.limity != null) && (this.ypos<this.limity)) this.ypos = this.limity;
	
	if(this.smooth){
		this.posm();
		if(this.posiFnc1) this.posiFnc1();
		if(this.posiFnc2) this.posiFnc2();
	}
	else{
		this.dynobjet.moveTo(this.xpos,this.ypos);
		if(this.posiFnc1) this.posiFnc1();
		if(this.posiFnc2) this.posiFnc2();
	}
	//alert(this.xpos+', '+this.ypos)
	//alert(this.limity && this.ypos<this.limity),alert(this.ypos+' '+this.limity)
}
function posSmoothMove(){
	var s_moveX = parseFloat(this.xpos - parseFloat(this.dynobjet.x))*0.2;
	var s_moveY = parseFloat(this.ypos - parseFloat(this.dynobjet.y))*0.2;
	if(isNaN(s_moveX)) s_moveX = 0;
	if(isNaN(s_moveY)) s_moveY = 0;
	var xpo = (!is.ns5over)? this.dynobjet.x + s_moveX : parseFloat(this.dynobjet.x) + s_moveX;
	var ypo = (!is.ns5over)? this.dynobjet.y + s_moveY : parseFloat(this.dynobjet.y) + s_moveY;
	this.dynobjet.moveTo(xpo,ypo);
}



MonObjet.prototype.pos = setPos;
MonObjet.prototype.posm = posSmoothMove;
/***************************************************************/

function scrMonObjet(dynobjet,scrollX,scrollY,scrOffsetX,scrOffsetY,fnX,fnY){
	this.dynobjet = dynobjet;	//DynLayer Object
	this.scrollX = scrollX;		//boolean
	this.scrollY = scrollY;		//boolean
	this.scrOffsetX = scrOffsetX;	//x 補正（普通オブジェクトの初期x座標）
	this.scrOffsetY = scrOffsetY;	//y 補正（普通オブジェクトの初期y座標）
	this.fnX = fnX;	//任意の関数
	this.fnY = fnY;	//任意の関数
}
function smoothMove() {
	scrCoor = new scrollmeager();
	if(this.scrollX){
		var scrDif = parseFloat((parseFloat(scrCoor.winscrX) + parseFloat(this.scrOffsetX) - parseFloat(this.dynobjet.x)) * 0.1);
		// For ns's NaN bug when scrDif is 0
		if (isNaN(scrDif)) scrDif=0;
		var xpos = (!is.ns5over)? this.dynobjet.x + scrDif : parseFloat(this.dynobjet.x) + scrDif;
		this.dynobjet.moveTo(xpos,null);
		if(this.fnX != null) eval(this.fnX);
	}
	if(this.scrollY){
		var scrDif = parseFloat((parseFloat(scrCoor.winscrY) + parseFloat(this.scrOffsetY) - parseFloat(this.dynobjet.y)) * 0.1);
		// For ns's NaN bug when scrDif is 0
		if (isNaN(scrDif)) scrDif=0;
		var ypos = (!is.ns5over)? this.dynobjet.y + scrDif : parseFloat(this.dynobjet.y) + scrDif;
		this.dynobjet.moveTo(null,ypos);
		if(this.fnY != null) eval(this.fnY);
	}
}
/*適当なタイマー関数を定義する．
function startTimer() {
	eval('setInterval("scrMonObjet.sMoveY()",20)');
}
*/

scrMonObjet.prototype.sMove = smoothMove;


/***********************************************************/

function findWH() {
	this.winW = (is.ns)? window.innerWidth-16 : document.body.clientWidth;//document.body.offsetWidth-20;
	this.winH = (is.ns)? window.innerHeight : document.body.clientHeight ;//document.body.offsetHeight;
}

function scrollmeager(){
	this.winscrX = (is.ie)?  document.body.scrollLeft  :  (is.ns5over)? window.scrollX : window.pageXOffset ;
	this.winscrY = (is.ie)?  document.body.scrollTop :  (is.ns5over)? window.scrollY : window.pageYOffset ;
}


function forns4control(){
	if(is.ns4) window.location.reload();
}