/* Copyright(c) http://www.noma-soft.com/ */
NmBoxMgr=function(){}
NmBoxMgr.instances=new Object;
NmBoxMgr.classes=new Object;
NmBoxMgr.classes["box"]={isGroup:false}
NmBoxMgr.classes["boxes_y"]={isGroup:true,float:"y",direction:"+y"}
NmBoxMgr.classes["boxes_px"]={isGroup:true,float:"x",direction:"+x"}
NmBoxMgr.classes["boxes_nx"]={isGroup:true,float:"x",direction:"-x"}
NmBoxMgr.classes["boxes_s"]={isGroup:true,float:"s",direction:""}
NmBoxMgr.classes["boxes_l"]={isGroup:true,float:"l",direction:""}

NmRect=function(){this.left=0;this.top=0;this.right=0;this.bottom=0;}

NmBoxLog=function(){this.nest=0;this.str="";}
NmBoxLog.prototype.entry=function(box){this.nest++;/*this.str+="("+box.tagId+":"+box.width_+"x"+box.height_+":"+box.innerWidth_+"x"+box.innerHeight_+")";*/}
NmBoxLog.prototype.leave=function(){this.nest--;if(this.nest==0){/*window.alert(this.str);*/this.str="";}}
var nmBoxLog=new NmBoxLog;

NmBox=function(){
	this.parent=null;this.children=null;
	this.selectedIndex=0;
	this.node=null;this.tagId="";
	this.type="boxes_px";
	this.weight=0;this.width=0;this.height=0;
	this.margin=null;this.padding=null;this.border=null;
	this.ibackground=null;this.background=null;this.xbackground=null;
	this.font=null;
}
NmBox.inlineMode=1;
NmBox.cssMode=2;
NmBox.writeMode=NmBox.inlineMode;
NmBox.prototype.appendChild=function(box){
	if(this.children==null){this.children=new Array;}
	this.children.push(box);
	box.parent=this;
}
NmBox.prototype.init=function(){
	if(this.tagId!=""){this.node=document.getElementById(this.tagId);}
	if(this.children!=null){for(var index=0;index<this.children.length;index++){this.children[index].init();}}
	if((this.class_.isGroup!=true)&&(this.class_.init)){this.class_.init(this);}
}
NmBox.prototype.setSelectedIndex=function(selectedIndex){
	this.selectedIndex=selectedIndex;
}
NmBox.prototype.isHidden_=function(){
	if(this.parent!=null){
		if(this.parent.class_.float=="s"){
			return (this.parent.children[this.parent.selectedIndex]!=this);
		}else if(this.parent.class_.float=="l"){
			for(var index=this.parent.selectedIndex+1;index<this.parent.children.length;index++){
				if(this.parent.children[index]==this){return true;}}
			return false;}}
	return false;
}
NmBox.prototype.write=function(){
	var str="";
	var style="";
	str+='<div id="'+this.tagId+'"';
	if(NmBox.writeMode==NmBox.inlineMode){style=this.writeOuterStyle();if(style!=""){str+=' style="';str+=style;str+='"';}}
	else{str+=' class="'+this.tagId+'_outer"';}
	str+='><div';
	if(NmBox.writeMode==NmBox.inlineMode){style=this.writeCenterStyle();if(style!=""){str+=' style="';str+=style;str+='"';}}
	else{str+=' class="'+this.tagId+'_center"';}
	str+='><div';
	if(NmBox.writeMode==NmBox.inlineMode){style=this.writeInnerStyle();if(style!=""){str+=' style="';str+=style;str+='"';}}
	else{str+=' class="'+this.tagId+'_inner"';}
	str+='>';
	if(this.class_.isGroup==true)
		{if(this.children!=null){for(var index=0;index<this.children.length;index++){str+=this.children[index].write();}}}
	else{if(this.class_.write){str+=this.class_.write(this);}}
	str+='</div></div></div>';
	return str;
}
NmBox.prototype.writeStyle=function(){
	var str="div."+this.tagId+"_outer{";str+=this.writeOuterStyle();str+="}";
	str+="div."+this.tagId+"_center{";str+=this.writeCenterStyle();str+="}";
	str+="div."+this.tagId+"_inner{";str+=this.writeInnerStyle();str+="}";
	if((this.class_.isGroup!=true)&&(this.class_.writeStyle)){str+=this.class_.writeStyle(this);}

	if(this.children!=null){for(var index=0;index<this.children.length;index++){str+=this.children[index].writeStyle();}}
	return str;
}
NmBox.prototype.writeOuterStyle=function(){
	var str0="";
	if(this.isHidden_()){str0+="display:none;";}
	if(this.parent==null){str0+="float:left;";}
	else if(this.parent.class_.direction=="-x"){str0+="float:right;";}
	else if(this.parent.class_.float=="l"){str0+="position:absolute;";}
	else{str0+="float:left;";}
	if(this.width_!=0){str0+=("width:"+this.width_+"px;");}
	if(this.height_!=0){str0+=("height:"+this.height_+"px;");}
	if(this.xbackground!=null){
		if(this.xbackground.color){str0+=("background-color:"+this.xbackground.color+";");}
		if(this.xbackground.image){str0+=("background-image:url("+this.xbackground.image+");");}
	}
	return str0;
}
NmBox.prototype.writeCenterStyle=function(){
	var str0="";
	if(this.margin!=null){
		str0+="margin:";
		str0+=(this.margin.top+"px ");str0+=(this.margin.right+"px ");
		str0+=(this.margin.bottom+"px ");str0+=(this.margin.left+"px;");
	}
	if(this.padding!=null){
		str0+="padding:";
		str0+=(this.padding.top+"px ");str0+=(this.padding.right+"px ");
		str0+=(this.padding.bottom+"px ");str0+=(this.padding.left+"px;");
	}
	if(this.border!=null){
		var style="solid ";
		if(this.border.color){style+=this.border.color+" ";}
		if(this.border.width){style+=this.border.width+"px ";}
		str0+=("border :"+style+";");
	}
	if(this.background!=null){
		if(this.background.color){str0+=("background-color:"+this.background.color+";");}
		if(this.background.image){str0+=("background-image: url("+this.background.image+");");}
	}
	return str0;
}
NmBox.prototype.writeInnerStyle=function(){
	var str0="";
	if(this.innerWidth_!=0){str0+=("width:"+this.innerWidth_+"px;");}
	if(this.innerHeight_!=0){str0+=("height:"+this.innerHeight_+"px;");}
	if(this.ibackground!=null){
		if(this.ibackground.color){str0+=("background-color:"+this.ibackground.color+";");}
		if(this.background.image){str0+=("background-image:url("+this.ibackground.image+");");}
	}
	if(this.font!=null){
		if(this.font.color){str0+=("color:"+this.font.color+";");}
		if(this.font.size){
			str0+=("font-size:"+this.font.size+"px;");
			if(this.font.lineOffset){str0+=("line-height:"+(this.font.size+this.font.lineOffset)+"px;");}
			else{str0+=("line-height:"+(this.font.size+4)+"px;");}}
		if(this.font.family){str0+=("font-family:"+this.font.family+";");}
		if(this.font.align){str0+=("text-align:"+this.font.align+";");}
	}
	if((this.width_!=0)&&(this.height_!=0)){str0+="overflow:hidden;";}
	return str0;
}
NmBox.prototype.modify=function(){
	var index;
	this.class_=NmBoxMgr.classes[this.type];
	this.weightUnit_=0;
	this.weightOffset_=0;
	this.weightLength_=0;
	this.lastWeightedChild_=null;
	if(this.children!=null){
		for(index=0;index<this.children.length;index++){
			if(this.children[index].weight!=0){
				this.weightUnit_+=this.children[index].weight;
				this.lastWeightedChild_=this.children[index];
			}else{
				if(this.class_.float=="y"){this.weightOffset_+=this.children[index].height;}
				else{this.weightOffset_+=this.children[index].width;}}}}
	if((this.width!=0)||(this.parent==null)){this.width_=this.width;}
	else{
		if(this.parent.class_.float=="x"){
			if(this.parent.lastWeightedChild_==this){this.width_=this.parent.innerWidth_-this.parent.weightLength_-this.parent.weightOffset_;}
			else{
				this.width_=Math.floor((this.parent.innerWidth_-this.parent.weightOffset_)*this.weight/this.parent.weightUnit_);}
		}else{this.width_ = this.parent.innerWidth_;}}
	if((this.height!=0)||(this.parent==null)){this.height_=this.height;
	}else{
		if(this.parent.class_.float=="y"){
			if(this.parent.lastWeightedChild_==this){this.height_=this.parent.innerHeight_-this.parent.weightLength_-this.parent.weightOffset_;
			}else{this.height_=Math.floor((this.parent.innerHeight_-this.parent.weightOffset_)*this.weight/this.parent.weightUnit_);}
		}else{this.height_=this.parent.innerHeight_;}}
	if(this.parent!=null) {
		if(this.parent.class_.float=="x"){
			if(this.width==0){this.parent.weightLength_+=this.width_;}
		}else{if(this.height==0){this.parent.weightLength_ += this.height_;}}}
	this.innerWidth_=this.width_;
	this.innerHeight_=this.height_;
	if(this.margin != null) {
		this.innerWidth_-=(this.margin.right+this.margin.left);
		this.innerHeight_-=(this.margin.top+this.margin.bottom);}
	if(this.padding!=null){
		this.innerWidth_-=(this.padding.right+this.padding.left);
		this.innerHeight_-=(this.padding.top+this.padding.bottom);}
	if(this.border!=null){
		this.innerWidth_-=(this.border.width+this.border.width);
		this.innerHeight_-=(this.border.width+this.border.width);}
	nmBoxLog.entry(this);
	this.modifyThis();
	nmBoxLog.leave();
}
NmBox.prototype.modifyThis=function(){
	var index;
	if(this.node!=null){
		var outerNode=this.node;
		var node=outerNode.firstChild;
		var innerNode=node.firstChild;
		if(this.isHidden_()){outerNode.style.display="none";}
		else{outerNode.style.display="block";}
		if(this.parent==null){outerNode.style.cssFloat="left";outerNode.style.styleFloat="left";}
		else if(this.parent.class_.direction=="-x"){outerNode.style.cssFloat="right";outerNode.style.styleFloat="right";}
		else{outerNode.style.cssFloat="left";outerNode.style.styleFloat="left";}
		if(this.width_!=0){outerNode.style.width=this.width_+"px";}else{outerNode.style.width="";}
		if(this.height_!=0){outerNode.style.height=this.height_+"px";}else{outerNode.style.height="";}
		if(this.innerWidth_!=0){innerNode.style.width=this.innerWidth_+"px";}else{innerNode.style.width="";}
		if(this.innerHeight_!=0){innerNode.style.height=this.innerHeight_+"px";}else{innerNode.style.height="";}
		if(this.margin!=null){
			node.style.margin=(this.margin.top+"px "+this.margin.right+"px "+this.margin.bottom+"px "+this.margin.left+"px ");}
		if(this.padding!=null){
			node.style.padding=(this.padding.top+"px "+this.padding.right+"px "+this.padding.bottom+"px "+this.padding.left+"px ");}
		if(this.border!=null){
			var style="solid ";
			if(this.border.color){style+=this.border.color+" ";}
			if(this.border.width){style+=this.border.width+"px ";}
			node.style.border=style;}
		if(this.ibackground!=null){
			if(this.ibackground.color){innerNode.style.backgroundColor=this.ibackground.color;}
			if(this.background.image){innerNode.style.backgroundImage="url("+this.ibackground.image+")";}}
		if(this.background!=null){
			if(this.background.color){node.style.backgroundColor=this.background.color;}
			if(this.background.image){node.style.backgroundImage="url("+this.background.image+")";}}
		if(this.xbackground!=null){
			if(this.xbackground.color){outerNode.style.backgroundColor=this.xbackground.color;}
			if(this.xbackground.image){outerNode.style.backgroundImage="url("+this.xbackground.image+")";}}
		if(this.font!=null){
			if(this.font.color){innerNode.style.color=this.font.color;}
			if(this.font.size){innerNode.style.fontSize=this.font.size + "px";}
			if(this.font.family){innerNode.style.fontFamily=this.font.family;}
			if(this.font.align){innerNode.style.textAlign=this.font.align;}
		}
	}
	if(this.class_.isGroup==true){
		if(this.children!=null){for(index=0;index<this.children.length;index++){this.children[index].modify();}}}
	else{if(this.class_.modify){this.class_.modify(this);}}
}

NmBoxFactory = function (){}
NmBoxFactory.createBox = function(cfg) {
	var box = new NmBox;
	if(cfg.tagId){box.tagId=cfg.tagId;}
	if(cfg.width){box.width=cfg.width;}
	if(cfg.height){box.height=cfg.height;}
	if(cfg.weight){box.weight=cfg.weight;}
	if(cfg.selectedIndex){box.selectedIndex=cfg.selectedIndex;}
	if(cfg.type){box.type=cfg.type;}
	if(cfg.innerText){box.innerText=cfg.innerText;}
	if(cfg.margin){
		box.margin=new Object;
		box.margin.left=cfg.margin.left;
		box.margin.top=cfg.margin.top;
		box.margin.right=cfg.margin.right;
		box.margin.bottom=cfg.margin.bottom;
	}
	if(cfg.padding){
		box.padding=new Object;
		if(cfg.padding.left){box.padding.left=cfg.padding.left;}
		else{box.padding.left=0;}
		if(cfg.padding.top){box.padding.top=cfg.padding.top;}
		else{box.padding.top=0;}
		if(cfg.padding.right){box.padding.right=cfg.padding.right;}
		else{box.padding.right=0;}
		if(cfg.padding.bottom){box.padding.bottom=cfg.padding.bottom;}
		else{box.padding.bottom=0;}
	}
	if(cfg.border){
		box.border=new Object;
		if(cfg.border.width){box.border.width=cfg.border.width;}
		if(cfg.border.color){box.border.color=cfg.border.color;}
	}
	if(cfg.ibackground){
		box.ibackground=new Object;
		if(cfg.ibackground.color){box.ibackground.color=cfg.ibackground.color;}
		if(cfg.ibackground.image){box.ibackground.image=cfg.ibackground.image;}
	}
	if(cfg.background){
		box.background=new Object;
		if(cfg.background.color){box.background.color=cfg.background.color;}
		if(cfg.background.image){box.background.image=cfg.background.image;}
	}
	if(cfg.xbackground){
		box.xbackground=new Object;
		if(cfg.xbackground.color){box.xbackground.color=cfg.xbackground.color;}
		if(cfg.xbackground.image){box.xbackground.image=cfg.xbackground.image;}
	}
	if(cfg.font) {
		box.font = new Object;
		if(cfg.font.color){box.font.color=cfg.font.color;}
		if(cfg.font.size){box.font.size=cfg.font.size;}
		if(cfg.font.family){box.font.family = cfg.font.family;}
		if(cfg.font.align){box.font.align = cfg.font.align;}
	}
	if(cfg.children){
		for(var index=0;index<cfg.children.length;index++) {
			var subBox=NmBoxFactory.createBox(cfg.children[index]);
			box.appendChild(subBox);
		}
	}
	NmBoxMgr.instances[box.tagId]=box;
	return box;
}
NmTextBoxClass=function(){}
NmTextBoxClass.prototype={
	write:function(obj){var str="";
		if(obj.href){str+='<a href="'+obj.href+'"';str+=' class="'+obj.tagId+'"';str+=' target="_blank"';str+='>';}
		if(obj.innerText){str+=obj.innerText;}
		if(obj.href){str+='</a>';}
		return str;},
	writeStyle:function(obj){var str="";
		if(obj.href){
			str+=("a."+obj.tagId+"{");
			if(obj.font){
				if(obj.font.color){str+="color:"+obj.font.color+";";}
				if(obj.font.size){str+="font-size:"+obj.font.size+"px;";}}
				str+="text-decoration:none;";
			str+="}";}
		return str;},
	modify:function(obj){
		if(obj.node){var innerNode=obj.node.firstChild.firstChild;
			/*if(typeof innerNode.textContent!="undefined"){innerNode.textContent=obj.innerText;}
			else{innerNode.innerText=obj.innerText;}*/
			innerNode.innerHTML=this.write(obj); //obj.innerText;
		}}
}
NmBoxMgr.classes["text"]=new NmTextBoxClass;


NmContentsBoxClass=function(){}
NmContentsBoxClass.prototype={
	init:function(obj){if(obj.object&&obj.object.init){obj.object.init();}},
	write:function(obj){var str="";
		if(obj.object){
			if(obj.objectAlign){str+='<div style="float:'+obj.objectAlign+';">';}
			else{str+='<div style="float:left;">';}
			str+=obj.object.write();str+='</div>';
		}else{str+='<div style="display:none"></div>';}
		if(obj.innerText){str+=obj.innerText;}
		return str;},
	modify:function(obj){
		if(obj.node){var innerNode=obj.node.firstChild.firstChild;var objectNode=innerNode.firstChild;
			innerNode.removeChild(objectNode);
			if(obj.object&&obj.object.modify){obj.object.modify();}
			innerNode.innerHTML="";
			innerNode.appendChild(objectNode);
			if(obj.innerText){var textNode=document.createElement("span");
				textNode.innerHTML=obj.innerText;
				innerNode.appendChild(textNode);}}
		/*if(obj.node){var innerNode=obj.node.firstChild.firstChild;var objectNode=innerNode.firstChild;
			innerNode.removeChild(objectNode);
			if(obj.object&&obj.object.modify){obj.object.modify();}
			if(typeof innerNode.textContent!="undefined"){innerNode.textContent="";}
			else{innerNode.innerText="";}
			innerNode.appendChild(objectNode);
			if(obj.innerText){var textNode=document.createTextNode(obj.innerText);
				innerNode.appendChild(textNode);}}*/}
}
NmBoxMgr.classes["contents"]=new NmContentsBoxClass;


NmTableTextBoxClass=function(type){this.type=type;}
NmTableTextBoxClass.filterPR_=function(obj,raw,col){
	var str="";
	if((raw<obj.textLines.length)&&(col<obj.textLines[raw].length)){str+=obj.textLines[raw].charAt(col);}
	else{str+="　";}
	return str;
}
NmTableTextBoxClass.filterVR_=function(obj,raw,col){
	var str="";
	if((col<obj.textLines.length)&&(raw<obj.textLines[col].length)){
		var ch=obj.textLines[col].charAt(raw);
		if(ch=="。"){ch="　.";}
		else if(ch=="、"){ch="　'";}
		str+=ch;
	}else{str+="　";}
	return str;
}
NmTableTextBoxClass.filterVL_=function(obj,raw,col){
	var str="";
	var icol=obj.textLineCount-col-1;
	if((icol<obj.textLines.length)&&(raw<obj.textLines[icol].length)){
		var ch=obj.textLines[icol].charAt(raw);
		if(ch=="。"){ch="　";}
		else if(ch=="、"){ch="　";}
		str+=ch;
	}else{str+="　";}
	return str;
}
NmTableTextBoxClass.prototype={
	write:function(obj){
		var handler;var textHeight;var textWidth;
		if(this.type=="text_vl"){handler=NmTableTextBoxClass.filterVL_;
			textWidth=obj.textLineCount;textHeight=obj.textLineLength;
		}else if(this.type=="text_vr"){handler=NmTableTextBoxClass.filterVR_;
			textWidth=obj.textLineCount;textHeight=obj.textLineLength;
		}else{handler=NmTableTextBoxClass.filterPR_;
			textWidth=obj.textLineLength;textHeight=obj.textLineCount;}
		var str='<table align="center">';
		for(var raw=0;raw<textHeight;raw++){
			str+='<tr height="'+obj.fontHeight+'px"';str+='>';
			for(var col=0;col<textWidth;col++){
				if(raw==0){str+='<td width="'+obj.fontWidth+'"';}else{str+="<td";}
				if(NmBox.writeMode==NmBox.inlineMode){str+=' class="'+obj.tagId+'"';}
				else{str+=' style="'+this.writeTextStyle(obj)+'"';}
				str+=">";str+=handler(obj,raw,col); str+="</td>";}
			str+="</tr>";}
		str+="</table>";
		return str;},
	writeStyle:function(obj){var str="";str+="td."+obj.tagId+"{";str+=this.writeTextStyle(obj);str+="}";return str;},
	writeTextStyle:function(obj){var str="";
		if(obj.font){if(obj.font.size){str+="font-size:"+obj.font.size+"px";}
			if(obj.font.color){str+="color:"+obj.font.size+"px";}}
		return str;},
	modify:function(obj){if(obj.innerText){this.setText(obj,obj.innerText,0);}
		if(obj.node!=null){var innerNode=obj.node.firstChild.firstChild;innerNode.innerHTML=this.write(obj);}},
	setText:function(obj,text,startIndex){
		obj.fontWidth=28;obj.fontHeight=28;
		if(obj.font && obj.font.size){
			obj.fontWidth=parseInt(obj.font.size*1.3);
			obj.fontHeight=obj.fontWidth;
		}
		if((this.type=="text_vl")||(this.type=="text_vr")){
			obj.textLineCount=parseInt(obj.innerWidth_/obj.fontWidth);
			obj.textLineLength=parseInt(obj.innerHeight_/obj.fontHeight);
		}else{
			obj.textLineCount=parseInt(obj.innerHeight_/obj.fontHeight);
			obj.textLineLength=parseInt(obj.innerWidth_/obj.fontWidth);
		}
		if((obj.textLines)&&(obj.textLines!=null)){delete obj.textLines;}
		obj.textLines=new Array;
		var length=0;
		var lastStartIndex=startIndex;
		var ch;
		for(var index=startIndex;index<text.length;index++){
			ch=text.charAt(index);
			if(ch=="\n"){
				obj.textLines.push(text.substr(lastStartIndex,length));
				lastStartIndex=index+1;
				length=0;
			}else if(length==obj.textLineLength-1){
				obj.textLines.push(text.substr(lastStartIndex,length+1));
				lastStartIndex=index+1;
				length=0;
			}else{length++;}
			if(obj.textLines.length == obj.textLineCount){break;}
		}
		if(index==text.length){obj.textLines.push(text.substr(lastStartIndex, length));}
		return index;
	}
}

NmBoxMgr.classes["text_pr"]=new NmTableTextBoxClass("text_pr");
NmBoxMgr.classes["text_vl"]=new NmTableTextBoxClass("text_vl");
NmBoxMgr.classes["text_vr"]=new NmTableTextBoxClass("text_vr");

//if(this.innerText!=""){
//	this.modifyTextLines_(this.innerText, 0);
//if (typeof innerNode.textContent != "undefined") {
//	innerNode.textContent = this.textFilter_();
//} else {
//	innerNode.innerText = this.textFilter_();
//}



