var IE = (navigator.userAgent.indexOf("MSIE") > 0);
var IE8 = (document.documentMode && parseInt(document.documentMode) > 7);
var cookieENABLED = navigator.cookieEnabled;
var CSS1 = (document.compatMode && document.compatMode.toLowerCase() == 'css1compat');
if(IE){
document.createElement("canvas").getContext||(function(){var s=Math,j=s.round,F=s.sin,G=s.cos,V=s.abs,W=s.sqrt,k=10,v=k/2;function X(){return this.context_||(this.context_=new H(this))}var L=Array.prototype.slice;function Y(b,a){var c=L.call(arguments,2);return function(){return b.apply(a,c.concat(L.call(arguments)))}}var M={init:function(b){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var a=b||document;a.createElement("canvas");a.attachEvent("onreadystatechange",Y(this.init_,this,a))}},init_:function(b){b.namespaces.g_vml_||b.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");b.namespaces.g_o_||b.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!b.styleSheets.ex_canvas_){var a=b.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=b.getElementsByTagName("canvas"),d=0;for(;d<c.length;d++)this.initElement(c[d])},initElement:function(b){if(!b.getContext){b.getContext=X;b.innerHTML="";b.attachEvent("onpropertychange",Z);b.attachEvent("onresize",$);var a=b.attributes;if(a.width&&a.width.specified)b.style.width=a.width.nodeValue+"px";else b.width=b.clientWidth;if(a.height&&a.height.specified)b.style.height=a.height.nodeValue+"px";else b.height=b.clientHeight}return b}};function Z(b){var a=b.srcElement;switch(b.propertyName){case "width":a.style.width=a.attributes.width.nodeValue+"px";a.getContext().clearRect();break;case "height":a.style.height=a.attributes.height.nodeValue+"px";a.getContext().clearRect();break}}function $(b){var a=b.srcElement;if(a.firstChild){a.firstChild.style.width=a.clientWidth+"px";a.firstChild.style.height=a.clientHeight+"px"}}M.init();var N=[],B=0;for(;B<16;B++){var C=0;for(;C<16;C++)N[B*16+C]=B.toString(16)+C.toString(16)}function I(){return[[1,0,0],[0,1,0],[0,0,1]]}function y(b,a){var c=I(),d=0;for(;d<3;d++){var f=0;for(;f<3;f++){var h=0,g=0;for(;g<3;g++)h+=b[d][g]*a[g][f];c[d][f]=h}}return c}function O(b,a){a.fillStyle=b.fillStyle;a.lineCap=b.lineCap;a.lineJoin=b.lineJoin;a.lineWidth=b.lineWidth;a.miterLimit=b.miterLimit;a.shadowBlur=b.shadowBlur;a.shadowColor=b.shadowColor;a.shadowOffsetX=b.shadowOffsetX;a.shadowOffsetY=b.shadowOffsetY;a.strokeStyle=b.strokeStyle;a.globalAlpha=b.globalAlpha;a.arcScaleX_=b.arcScaleX_;a.arcScaleY_=b.arcScaleY_;a.lineScale_=b.lineScale_}function P(b){var a,c=1;b=String(b);if(b.substring(0,3)=="rgb"){var d=b.indexOf("(",3),f=b.indexOf(")",d+1),h=b.substring(d+1,f).split(",");a="#";var g=0;for(;g<3;g++)a+=N[Number(h[g])];if(h.length==4&&b.substr(3,1)=="a")c=h[3]}else a=b;return{color:a,alpha:c}}function aa(b){switch(b){case "butt":return"flat";case "round":return"round";case "square":default:return"square"}}function H(b){this.m_=I();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.fillStyle=this.strokeStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=k*1;this.globalAlpha=1;this.canvas=b;var a=b.ownerDocument.createElement("div");a.style.textAlign='left';a.style.width=b.clientWidth+"px";a.style.height=b.clientHeight+"px";a.style.overflow="hidden";a.style.position="absolute";b.appendChild(a);this.element_=a;this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}var i=H.prototype;i.clearRect=function(){this.element_.innerHTML=""};i.beginPath=function(){this.currentPath_=[]};i.moveTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};i.lineTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};i.bezierCurveTo=function(b,a,c,d,f,h){var g=this.getCoords_(f,h),l=this.getCoords_(b,a),e=this.getCoords_(c,d);Q(this,l,e,g)};function Q(b,a,c,d){b.currentPath_.push({type:"bezierCurveTo",cp1x:a.x,cp1y:a.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y});b.currentX_=d.x;b.currentY_=d.y}i.quadraticCurveTo=function(b,a,c,d){var f=this.getCoords_(b,a),h=this.getCoords_(c,d),g={x:this.currentX_+0.6666666666666666*(f.x-this.currentX_),y:this.currentY_+0.6666666666666666*(f.y-this.currentY_)};Q(this,g,{x:g.x+(h.x-this.currentX_)/3,y:g.y+(h.y-this.currentY_)/3},h)};i.arc=function(b,a,c,d,f,h){c*=k;var g=h?"at":"wa",l=b+G(d)*c-v,e=a+F(d)*c-v,m=b+G(f)*c-v,r=a+F(f)*c-v;if(l==m&&!h)l+=0.125;var n=this.getCoords_(b,a),o=this.getCoords_(l,e),q=this.getCoords_(m,r);this.currentPath_.push({type:g,x:n.x,y:n.y,radius:c,xStart:o.x,yStart:o.y,xEnd:q.x,yEnd:q.y})};i.rect=function(b,a,c,d){this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath()};i.strokeRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.stroke();this.currentPath_=f};i.fillRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.fill();this.currentPath_=f};i.createLinearGradient=function(b,a,c,d){var f=new D("gradient");f.x0_=b;f.y0_=a;f.x1_=c;f.y1_=d;return f};i.createRadialGradient=function(b,a,c,d,f,h){var g=new D("gradientradial");g.x0_=b;g.y0_=a;g.r0_=c;g.x1_=d;g.y1_=f;g.r1_=h;return g};i.drawImage=function(b){var a,c,d,f,h,g,l,e,m=b.runtimeStyle.width,r=b.runtimeStyle.height;b.runtimeStyle.width="auto";b.runtimeStyle.height="auto";var n=b.width,o=b.height;b.runtimeStyle.width=m;b.runtimeStyle.height=r;if(arguments.length==3){a=arguments[1];c=arguments[2];h=g=0;l=d=n;e=f=o}else if(arguments.length==5){a=arguments[1];c=arguments[2];d=arguments[3];f=arguments[4];h=g=0;l=n;e=o}else if(arguments.length==9){h=arguments[1];g=arguments[2];l=arguments[3];e=arguments[4];a=arguments[5];c=arguments[6];d=arguments[7];f=arguments[8]}else throw Error("Invalid number of arguments");var q=this.getCoords_(a,c),t=[];t.push(" <g_vml_:group",' coordsize="',k*10,",",k*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var E=[];E.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",j(q.x/k),",","Dy=",j(q.y/k),"");var p=q,z=this.getCoords_(a+d,c),w=this.getCoords_(a,c+f),x=this.getCoords_(a+d,c+f);p.x=s.max(p.x,z.x,w.x,x.x);p.y=s.max(p.y,z.y,w.y,x.y);t.push("padding:0 ",j(p.x/k),"px ",j(p.y/k),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",E.join(""),", sizingmethod='clip');")}else t.push("top:",j(q.y/k),"px;left:",j(q.x/k),"px;");t.push(' ">','<g_vml_:image src="',b.src,'"',' style="width:',k*d,"px;"," height:",k*f,'px;"',' cropleft="',h/n,'"',' croptop="',g/o,'"',' cropright="',(n-h-l)/n,'"',' cropbottom="',(o-g-e)/o,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};i.stroke=function(b){var a=[],c=P(b?this.fillStyle:this.strokeStyle),d=c.color,f=c.alpha*this.globalAlpha;a.push("<g_vml_:shape",' filled="',!!b,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0 0" coordsize="',k*10," ",k*10,'"',' stroked="',!b,'"',' path="');var h={x:null,y:null},g={x:null,y:null},l=0;for(;l<this.currentPath_.length;l++){var e=this.currentPath_[l];switch(e.type){case "moveTo":a.push(" m ",j(e.x),",",j(e.y));break;case "lineTo":a.push(" l ",j(e.x),",",j(e.y));break;case "close":a.push(" x ");e=null;break;case "bezierCurveTo":a.push(" c ",j(e.cp1x),",",j(e.cp1y),",",j(e.cp2x),",",j(e.cp2y),",",j(e.x),",",j(e.y));break;case "at":case "wa":a.push(" ",e.type," ",j(e.x-this.arcScaleX_*e.radius),",",j(e.y-this.arcScaleY_*e.radius)," ",j(e.x+this.arcScaleX_*e.radius),",",j(e.y+this.arcScaleY_*e.radius)," ",j(e.xStart),",",j(e.yStart)," ",j(e.xEnd),",",j(e.yEnd));break}if(e){if(h.x==null||e.x<h.x)h.x=e.x;if(g.x==null||e.x>g.x)g.x=e.x;if(h.y==null||e.y<h.y)h.y=e.y;if(g.y==null||e.y>g.y)g.y=e.y}}a.push(' ">');if(b)if(typeof this.fillStyle=="object"){var m=this.fillStyle,r=0,n={x:0,y:0},o=0,q=1;if(m.type_=="gradient"){var t=m.x1_/this.arcScaleX_,E=m.y1_/this.arcScaleY_,p=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),z=this.getCoords_(t,E);r=Math.atan2(z.x-p.x,z.y-p.y)*180/Math.PI;if(r<0)r+=360;if(r<1.0E-6)r=0}else{var p=this.getCoords_(m.x0_,m.y0_),w=g.x-h.x,x=g.y-h.y;n={x:(p.x-h.x)/w,y:(p.y-h.y)/x};w/=this.arcScaleX_*k;x/=this.arcScaleY_*k;var R=s.max(w,x);o=2*m.r0_/R;q=2*m.r1_/R-o}var u=m.colors_;u.sort(function(ba,ca){return ba.offset-ca.offset});var J=u.length,da=u[0].color,ea=u[J-1].color,fa=u[0].alpha*this.globalAlpha,ga=u[J-1].alpha*this.globalAlpha,S=[],l=0;for(;l<J;l++){var T=u[l];S.push(T.offset*q+o+" "+T.color)}a.push('<g_vml_:fill type="',m.type_,'"',' method="none" focus="100%"',' color="',da,'"',' color2="',ea,'"',' colors="',S.join(","),'"',' opacity="',ga,'"',' g_o_:opacity2="',fa,'"',' angle="',r,'"',' focusposition="',n.x,",",n.y,'" />')}else a.push('<g_vml_:fill color="',d,'" opacity="',f,'" />');else{var K=this.lineScale_*this.lineWidth;if(K<1)f*=K;a.push("<g_vml_:stroke",' opacity="',f,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',aa(this.lineCap),'"',' weight="',K,'px"',' color="',d,'" />')}a.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",a.join(""))};i.fill=function(){this.stroke(true)};i.closePath=function(){this.currentPath_.push({type:"close"})};i.getCoords_=function(b,a){var c=this.m_;return{x:k*(b*c[0][0]+a*c[1][0]+c[2][0])-v,y:k*(b*c[0][1]+a*c[1][1]+c[2][1])-v}};i.save=function(){var b={};O(this,b);this.aStack_.push(b);this.mStack_.push(this.m_);this.m_=y(I(),this.m_)};i.restore=function(){O(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};function ha(b){var a=0;for(;a<3;a++){var c=0;for(;c<2;c++)if(!isFinite(b[a][c])||isNaN(b[a][c]))return false}return true}function A(b,a,c){if(!!ha(a)){b.m_=a;if(c)b.lineScale_=W(V(a[0][0]*a[1][1]-a[0][1]*a[1][0]))}}i.translate=function(b,a){A(this,y([[1,0,0],[0,1,0],[b,a,1]],this.m_),false)};i.rotate=function(b){var a=G(b),c=F(b);A(this,y([[a,c,0],[-c,a,0],[0,0,1]],this.m_),false)};i.scale=function(b,a){this.arcScaleX_*=b;this.arcScaleY_*=a;A(this,y([[b,0,0],[0,a,0],[0,0,1]],this.m_),true)};i.transform=function(b,a,c,d,f,h){A(this,y([[b,a,0],[c,d,0],[f,h,1]],this.m_),true)};i.setTransform=function(b,a,c,d,f,h){A(this,[[b,a,0],[c,d,0],[f,h,1]],true)};i.clip=function(){};i.arcTo=function(){};i.createPattern=function(){return new U};function D(b){this.type_=b;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}D.prototype.addColorStop=function(b,a){a=P(a);this.colors_.push({offset:b,color:a.color,alpha:a.alpha})};function U(){}G_vmlCanvasManager=M;CanvasRenderingContext2D=H;CanvasGradient=D;CanvasPattern=U})();
G_vmlCanvasManager.init_(document);
}
if(IE) window.attachEvent('onscroll', subCntxSet);
else window.addEventListener('scroll', subCntxSet, true);
/*****************************************************************/
/***  CIRCLE                    *******************************************/
/*****************************************************************/
function circleGraph(scale_list, cType, dType, labelColor, wid, noCap) {
	var parDiv = document.createElement('div');
	var canvas = document.createElement('canvas');
	if(IE8)document.body.appendChild(parDiv);
	document.body.appendChild(canvas);
	//IEの場合、以下の手順通り進めないと、描画がきちんとできない。　---↓
	if(IE){
		canvas = G_vmlCanvasManager.initElement(canvas); // 初期化された要素が返るので、再代入
		ctx = canvas.getContext("2d");
		ctx = canvas.getContext("2d");
	}　
	parDiv.style.left = '0px';
	parDiv.style.top = '0px';
	parDiv.style.position = "relative";
	parDiv.style.width = wid + 'px';
	parDiv.style.height = wid + 'px';
	parDiv.style.backgroundColor = 'transparent';
	parDiv.style.padding = "0px";

	canvas.width = wid;
	canvas.height = wid;
	canvas.style.margin = "0px";
	canvas.style.left = '0px';
	canvas.style.top = '0px';
	canvas.style.position = "absolute";
	parDiv.appendChild(canvas);
	this.$canvas = canvas;
	this.$ctx = this.$canvas.getContext('2d');
	// ========================================= ここまで =====↑
	this.$scale_list = scale_list;
	this.$capFontSize = (IE ? '9px' : '10px');
	this.$capFontFamily = 'Arial,sans-serif';
	this.$capFontColor = chkColor(labelColor, "#777777");
	this.$cType = (isNaN(cType) ? 0 : cType);
	this.$dType = (isNaN(dType) ? 0 : dType);
	this.$noCap = noCap;
	this.$draw();

	if(IE) {
		pushShape(this.$ctx, parDiv, wid, wid)
	}
	return parDiv;
}
circleGraph.prototype.$draw = function() {
	if( !this.$ctx ) return;
	var faseColors = [["#ff0000", "#ff8c00", "#bdff00", "#00cfdf", "#5500ff"]
					 , ["#0000ff", "#ff0000", "#ff00ff", "#00ff00", "#00ffff"]
					 , ["#ff0000", "#ff1493", "#ff00ff", "#802be2", "#7b6bfe"]
					 , ["#1e90ff", "#00bfff", "#40e0d0", "#66cdaa", "#00fa9a"]
					 , ["#00ff7f", "#adff2f", "#ffff00", "#ffa500", "#ff7f50"]
					 , ["#ff8c00", "#ff7f50", "#ff0000", "#ff1493", "#ff00ff"]
					 ];
	var c_list = faseColors[this.$cType] ? faseColors[this.$cType] : faseColors[0];
	var total = 0;
	var s_list = new Array();
	var x = this.$canvas.width / 2;
	this.$ctx.beginPath();
	this.$ctx.moveTo(x,x);
	this.$ctx.arc(x, x, x, 0, Math.PI * 2, false);
	this.$ctx.closePath();
	this.$ctx.fillStyle = '#ffffff';
	this.$ctx.fill();
	
	for(var i=0;i<this.$scale_list.length;i++){
		if(this.$scale_list[i].count > 0){
			total += this.$scale_list[i].count;
			s_list.push(this.$scale_list[i]);
		}
	}
	var angle0 = 0 - Math.PI / 2;
	var angle1 = angle0;

	if(s_list.length == 1){
		s_list[0].rate = 1;
		s_list[0].angle0 = 0 - Math.PI / 2;
		s_list[0].angle1 = 0 - Math.PI / 2 + Math.PI*2;
		
		this.$ctx.beginPath();
		switch(parseInt(this.$dType)){
			case 2:
				var grad  = this.$ctx.createRadialGradient(x,x,0,x,x,x);
				grad.addColorStop(0, 'white');
				grad.addColorStop(0.6, this.$createPaleColor(c_list[0]));
				grad.addColorStop(1,c_list[0]);
				this.$ctx.fillStyle = grad;
				break;
			case 1:
				this.$ctx.fillStyle = this.$createPaleColor(c_list[0]);
				break;
			default:
				this.$ctx.fillStyle = c_list[0];
				break;
		}
		this.$ctx.arc(x, x, x, 0, Math.PI*2, false);
		this.$ctx.fill();
	}else{
		for(var i=0;i<s_list.length;i++){
			var rate = s_list[i].count / total;
			angle1 += (Math.PI * 2 * rate);
			s_list[i].rate = rate;
			s_list[i].angle0 = angle0;
			s_list[i].angle1 = angle1;
			
			this.$ctx.beginPath();
			this.$ctx.moveTo(x,x);
			this.$ctx.lineTo(x + x * Math.cos(angle0), x + x * Math.sin(angle0));
			this.$ctx.arc(x, x, x, angle0, angle1, false);
			this.$ctx.closePath();
			switch(parseInt(this.$dType)){
				case 2:
					this.$ctx.fillStyle = this.$createGrad(this.$ctx, c_list[i], x + x * Math.cos(angle0), x + x * Math.sin(angle0), x + x * Math.cos(angle1), x + x * Math.sin(angle1));
					break;
				case 1:
					this.$ctx.fillStyle = this.$createPaleColor(c_list[i]);
					break;
				default:
					this.$ctx.fillStyle = c_list[i];
					break;
			}
			this.$ctx.fill();
			angle0 = angle1;
		}
	}
	/* 尺度名ラベルを描画 */
	if(!this.$noCap)this.$drawCaption(x, s_list);
};
/* グラデーションスタイルの生成 */
circleGraph.prototype.$createGrad = function(ctx, color, x0, y0, x1, y1 ){
	var ctxGrad;
	var rgbArr = color2RGBArr(color);
	ctxGrad = ctx.createLinearGradient(x0, y0, x1, y1);
	ctxGrad.addColorStop(0.0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
	ctxGrad.addColorStop(1.0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.3)");
	return ctxGrad;
}
/*  */
circleGraph.prototype.$createPaleColor = function(color){
	var rgbArr = color2RGBArr(color);
	return "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.65)";
}
/* 尺度名ラベルを描画 */
circleGraph.prototype.$drawCaption = function(r, scale_list) {
	var lt = 1;
	var lb = 1;
	var rt = 0;
	var rb = 0;
	var n = 0;
	for(var i=0;i<scale_list.length;i++){
		if(scale_list[i].count > 0){ // =================================================
			var scale = scale_list[i];
			var pro = ' (' + (Math.round(Math.round(scale.rate * 10000) /100)).toString() + '%)'; /* 全体の何％か       */
			var caption = scale.scale_label + pro;
			var s = this.$getTextBoxSize(caption); /* テキスト領域サイズ */
			var x = 0;
			var y = 0;
			if(n== 0) {
				x = r + r * 0.05;
				if(scale.angle0 > 0){
					y = r - s.h;
				}else{
					y = 0 + r * 0.05;
				}	
			}else if(scale.angle0 <= Math.PI  / 2){
				if(scale.angle1 < 0){
					rb++;
					x = r + (s.h * rb) * 1.2 * Math.cos(scale.angle0);
					y = r + (s.h * rb) * 1.2 * Math.sin(scale.angle0);
				}else if(scale.angle1 <= Math.PI  / 2){
					rt++;
					x = r + (s.h * rt) * 1.2 * Math.cos(scale.angle0);
					y = r + (s.h * rt) * 1.2 * Math.sin(scale.angle0);
				}else{
					lb++;
					x = r + (s.h * lb) * Math.cos(scale.angle0) - s.w - r * 0.02;
					y = r + (s.h * lb) * Math.sin(scale.angle0);
				}
			}else{
				if(scale.angle1 < Math.PI){
					lb++;
					x = r + (s.h * lb) * Math.cos(scale.angle0) - s.w - r * 0.02;
					y = r + (s.h * lb) * Math.sin(scale.angle0);
				}else{
					lt++;
					x = r + (s.h * lt) * Math.cos(scale.angle1) - s.w - r * 0.02;
					y = r + (s.h * lt) * Math.sin(scale.angle1);
				}
			}
			x = Math.round(x);
			y = Math.round(y);
			/* テキストを描画 */
			this.$drawText(x, y, caption);
			n++;
		} //if(scale_list[i].count > 0)==================================================
	} //for
};
/* 文字列を描画 */
circleGraph.prototype.$drawText = function(x, y, caption) {
	var div = document.createElement('div');
	div.appendChild( document.createTextNode(htmlDeConvert(caption)));
	div.setAttribute(IE && !IE8 ? 'className' : 'class', 'divcap');
	div.style.fontSize = this.$capFontSize;
	div.style.fontFamily = this.$capFontFamily;
	div.style.whiteSpace = 'nowrap';
	div.style.color = this.$capFontColor;
	div.style.margin = "0";
	div.style.padding = "0";
	div.style.position = "absolute";
	div.style.left = x.toString() + "px";
	div.style.top = y.toString() + "px";
	this.$canvas.parentNode.appendChild(div);
};
/* 文字列表示領域のサイズを取得 */
circleGraph.prototype.$getTextBoxSize = function(caption) {
	var o = null;
	if(window.opera){
		o = {
			w: parseInt(parseInt(this.$capFontSize) * caption.length * 7 / 10),
			h: parseInt(parseInt(this.$capFontSize) * 1.8)
		};
	}else{
		var tmpdiv = document.createElement('div');
		tmpdiv.appendChild( document.createTextNode(htmlDeConvert(caption)));
		tmpdiv.style.fontSize = this.$capFontSize;
		tmpdiv.style.fontFamily = this.$capFontFamily;
		tmpdiv.style.margin = "0";
		tmpdiv.style.padding = "0";
		tmpdiv.style.visible = "hidden";
		tmpdiv.style.position = "absolute";
		tmpdiv.style.left = "0px";
		tmpdiv.style.top = "0px";
		document.body.appendChild(tmpdiv);
		o = {
			w: tmpdiv.offsetWidth,
			h: (tmpdiv.offsetHeight + 6)
		};
		tmpdiv.parentNode.removeChild(tmpdiv);
	}
	return o;
};
/*****************************************************************/
/***  RADAR　                    *******************************************/
/******************************************************************/
/* public new radarGraph */
function radarGraph(scale_list, color, capColor, wid) {
	var parDiv = document.createElement('div');
	var canvas = document.createElement('canvas');
	if(IE8)document.body.appendChild(parDiv);
	document.body.appendChild(canvas);

	//IEの場合、以下の手順通り進めないと、描画がきちんとできない。　---↓
	if(IE){
		canvas = G_vmlCanvasManager.initElement(canvas); // 初期化された要素が返るので、再代入
		ctx = canvas.getContext("2d");
	}　
	parDiv.style.left = '0px';
	parDiv.style.top = '0px';
	parDiv.style.position = "relative";
	parDiv.style.width = wid + 'px';
	parDiv.style.height = wid + 'px';
	parDiv.style.backgroundColor = 'transparent';
	parDiv.style.padding = "0px";

	canvas.width = wid;
	canvas.height = wid;
	canvas.style.margin = "0px";
	canvas.style.left = '0px';
	canvas.style.top = '0px';
	canvas.style.position = "absolute";
	parDiv.appendChild(canvas);
	this.$canvas = canvas;
	this.$ctx = this.$canvas.getContext('2d');
	// ========================================== ここまで =====↑
	this.$scale_list = scale_list;
 	this.$faceColor = chkColor(color, "#0000ff");
 	this.$capColor = chkColor(capColor, "#777777");
	this.$draw();
	
	if(IE) {
		pushShape(this.$ctx, parDiv, wid, wid)
	}
	return parDiv;
}
/* radarGraph draw(描画) */
radarGraph.prototype.$draw = function() {
	if( !this.$ctx ) return;
	/* パラメータの初期化 */
	var params = {
		aCapColor: this.$capColor,
		aCapFontSize: (IE ? "9px" : "10px"),
		aCapFontFamily: "Arial,sans-serif",
		aMax: null,
		aMin: 0,
		cBackgroundColor: "#ffffff",
		faceAlpha: 0.25,
		borderAlpha: 1,
		borderWidth: 1,
		axisColor: "#aaaaaa",
		axisWidth: 0.5,
		aLinePositions: "auto",
		aLineWidth: 0.25,
		aLineColor: "#333333",
		sLabelColor: "#777777",
		sLabelFontSize: "10px",
		sLabelFontFamily: "Arial,sans-serif"
	};

	this.params = params;
	/* チャートの中心座標と半径 */
	var cpos = {
		x: this.$canvas.width / 2,
		y: this.$canvas.height / 2,
		r: Math.min(this.$canvas.width, this.$canvas.height) * 0.85 / 2
	};
	/* 指標数を算出（多角形の角数） 最小3角・最大24角 */
	var angle_num = this.$scale_list.length;
	params.angleNum = angle_num;
	/* 各軸の角度（ラジアン）を算出（右方向を0度とし反時計回りの角度） */
	var axis_angles = [Math.PI/2];
	for(var i=1; i<angle_num; i++) axis_angles.push( Math.PI / 2 - Math.PI * 2 * i / angle_num );
	/* チャートの形状を描画 */
	this.$_draw_chart_shape(params, cpos, axis_angles);
	/* 全項目の最大値・最小値と項目数を算出 */
	var max_v = null;
	var min_v = null;
	var max_n = 0;
	for(var i=0; i<angle_num; i++) {
		var v = this.$scale_list[i].count;
		if( isNaN(v) ) throw new Error('Item data is invalid. : ' + angle_num);
		if(max_v == null) max_v = v; else if(v >= max_v) max_v = v;
		if(min_v == null) min_v = v; else if(v <= min_v) min_v = v;
	}
	if(angle_num - 1 >= max_n) max_n = angle_num - 1;
	if( typeof(params.aMin) != "number" ) params.aMin = 0;
	if( typeof(params.aMax) != "number" ) params.aMax = max_v;
	/* 補助線の位置を自動算出 */
	if( typeof(params.aLinePositions) == "string" && params.aLinePositions == "auto" )
		params.aLinePositions = this.$_aline_positions_auto_calc(params.aMin, params.aMax);
	/* 補助線を描画 */
	this.$_draw_aline(params, cpos, axis_angles);
	/* 軸を描画 */
	this.$_draw_axis(params, cpos, axis_angles);
	/* スケールラベル(10,20,30,…)を描画 */
	this.$_draw_scale_label(params, cpos);
	/* チャートを描写 */
	this.$_draw_radar_chart(params, cpos, axis_angles, this.$faceColor);
	/* 尺度名ラベルを描画 */
	this.$_draw_caption(params, cpos, axis_angles);
};
/*  private method */
/* 補助線の位置算出 */
radarGraph.prototype.$_aline_positions_auto_calc = function(min, max) {
	var range = max - min;
	var power10 = Math.floor( Math.log(range) / Math.log(10) );
	var unit = Math.pow( 10,  power10);
	if( (Math.log(range) / Math.log(10)) % 1 == 0 )  unit = unit / 10;

	var keta_age = 1;
	if(unit < 1) keta_age += Math.abs(power10);

	var p = Math.pow(10, keta_age);
	range = range * p;
	unit = unit * p;
	min = min * p;
	max = max * p;
	var array = [min];
	var unum = range / unit;
	if( unum > 5 ) unit = unit * 2; else if( unum <= 2 ) unit = unit * 3 / 10

	var i = 1;
	while(min+unit*i<=max) {
		array.push(min+unit*i);
		i++;
	}
	for(var i=0; i<array.length; i++) array[i] = array[i] / p;
	
	return array;
};
/* 尺度名ラベルを描画 */
radarGraph.prototype.$_draw_caption = function(params, cpos, axis_angles) {
	if( typeof(this.$scale_list) != "object" || this.$scale_list.length < 1 ) { return; }
	var pos1 = 0;
	var pos2 = 0;
	for(var i=0; i<this.$scale_list.length; i++) {
		var caption = this.$scale_list[i].scale_label;
		/* テキスト領域のサイズを算出 */
		var s = this.$getTextBoxSize(caption, params.aCapFontSize, params.aCapFontFamily);
		/* テキストを描画すべき左上端の座標を算出 */
		var ang = axis_angles[i];
		var x = cpos.x + cpos.r * 1.15 * Math.cos(ang) - s.w / 2;
		var y = cpos.y - cpos.r * 1.15 * Math.sin(ang) - s.h / 2;
		if( x < this.$canvas.width * 0.001 ) { x = this.$canvas.width * 0.001; }
		if( x + s.w > this.$canvas.width ) { x = this.$canvas.width - s.w; }
		/* 正n角形の頂点が下端に来た場合 */
		if(this.$scale_list.length % 2 == 0){
			if( y + s.h > this.$canvas.height * 0.95) { 
				y = this.$canvas.height * 0.94;
				x = this.$canvas.width * 0.5 - s.w / 2;
			}
		}else{
			if( y + s.h > this.$canvas.height * 0.96) {
				y = this.$canvas.height * 0.96 - s.h;
				if( x + s.w > this.$canvas.width ) { x = this.$canvas.width - s.w; }
			}
		}
		x = Math.round(x);
		y = Math.round(y);
		if(i == 1) pos1 = x;
		if(i == 2) pos2 = x;
		if(this.$scale_list.length > 2 && i > 1){
			if(this.$scale_list.length == 3 && i == 2 && pos1 < x + s.w) y = y - s.h;
			if(this.$scale_list.length == 4 && i == 3 && pos1 < x + s.w) y = y + s.h;
			if(this.$scale_list.length == 5 && i == 4 && pos1 < x + s.w) y = y + s.h;
			if(this.$scale_list.length == 5 && i == 3 && pos2 < x + s.w) y = y - s.h;
		}
		
		/* テキストを描画 */
		this.$drawText(x, y, caption, params.aCapFontSize, params.aCapFontFamily, params.aCapColor);
	}
};
/* スケールラベル描画 */
radarGraph.prototype.$_draw_scale_label = function(params, cpos) {
	if( typeof(params.aLinePositions) != "object" || params.aLinePositions.length < 1 ) { return; }
	for(var i=0; i<params.aLinePositions.length; i++) {
		if( typeof(params.aLinePositions[i]) != "number" ) { continue; }
		if( params.aLinePositions[i] < params.aMin ) { continue; }
		var caption = params.aLinePositions[i].toString();
		/* テキスト領域のサイズを算出 */
		var s = this.$getTextBoxSize(caption, params.sLabelFontSize, params.sLabelFontFamily);
		/* テキストを描画すべき左上端の座標を算出 */
		var x = Math.round( cpos.x - s.w - 3 );
		var y = Math.round( cpos.y - ( ( params.aLinePositions[i] - params.aMin ) * cpos.r / ( params.aMax - params.aMin ) ) - ( s.h / 2 ) );
		/* テキストを描画 */
		this.$drawText(x, y, caption, params.sLabelFontSize, params.sLabelFontFamily, params.sLabelColor);
	}
};
/* チャート描画 */
radarGraph.prototype.$_draw_radar_chart = function(params, cpos, axis_angles, color) {
	/* チャート面を塗りつぶす */
	this.$_make_path_for_radar_chart(params, cpos, axis_angles);
	this.$ctx.globalAlpha = params.faceAlpha;
	this.$ctx.fillStyle = color;
	this.$ctx.fill();
	/* チャート境界線を引く */
	this.$_make_path_for_radar_chart(params, cpos, axis_angles);
	this.$ctx.globalAlpha = params.borderAlpha;
	this.$ctx.lineWidth = params.borderWidth;
	this.$ctx.strokeStyle = color;
	this.$ctx.stroke();
	/* this.$ctx.globalAlpha の値を初期値に戻す */
	this.$ctx.globalAlpha = 1;
};
radarGraph.prototype.$_make_path_for_radar_chart = function(params, cpos, axis_angles) {
	var r0 =  cpos.r * (this.$scale_list[0].count - params.aMin ) / (params.aMax - params.aMin);
	if( r0 < 0 ) { r0 = 0; }
	this.$ctx.beginPath();
	this.$ctx.moveTo( Math.round( cpos.x + r0 * Math.cos(axis_angles[0]) ), Math.round( cpos.y - r0 * Math.sin(axis_angles[0]) ) );
	for(var i=0; i<axis_angles.length; i++) {
		var r = 0;
		if( typeof(this.$scale_list[i].count) == "number" ) {
			r = cpos.r * (this.$scale_list[i].count - params.aMin ) / (params.aMax - params.aMin);
			if( r < 0 ) { r = 0; }
		}
		this.$ctx.lineTo( Math.round( cpos.x + r * Math.cos(axis_angles[i]) ), Math.round( cpos.y - r * Math.sin(axis_angles[i]) ) );
	}
	this.$ctx.closePath();
};
/* 軸を描画 */
radarGraph.prototype.$_draw_axis = function(params, cpos, axis_angles) {
	if( typeof(params.axisWidth) != "number" || params.axisWidth <= 0 ) return;
	var pos = new Array(axis_angles.length);

	for(var i=0; i<axis_angles.length; i++) {
		this.$ctx.beginPath();
		this.$ctx.lineWidth = params.axisWidth;
		this.$ctx.strokeStyle = params.axisColor;
		this.$ctx.moveTo(cpos.x, cpos.y);
		var x = Math.round( cpos.x + cpos.r * Math.cos(axis_angles[i]) );
		var y = Math.round( cpos.y - cpos.r * Math.sin(axis_angles[i]) );
		pos[i] = [x,y];
		this.$ctx.lineTo( x, y );
		this.$ctx.stroke();
	}
	this.$ctx.beginPath();
	this.$ctx.lineWidth = params.axisWidth;
	this.$ctx.strokeStyle = params.axisColor;
	this.$ctx.moveTo(pos[0][0], pos[0][1]);
	for(var i=1; i<pos.length; i++) {
		this.$ctx.lineTo(pos[i][0], pos[i][1]);
	}
	this.$ctx.lineTo(pos[0][0], pos[0][1]);
	this.$ctx.stroke();
};
/* 補助線を描画 */
radarGraph.prototype.$_draw_aline = function(params, cpos, axis_angles) {
	if( typeof(params.aLineWidth) != "number" || params.aLineWidth <= 0 ) return;
	if( typeof(params.aLinePositions) != "object" || params.aLinePositions.length < 1 ) return;

	for(var i=0; i<params.aLinePositions.length; i++) {
		if(params.aLinePositions[i] < params.aMin) { continue; }
		var r = cpos.r * ( params.aLinePositions[i] - params.aMin ) / (params.aMax - params.aMin);
		if( r <= 0 ) { continue; }
		this.$ctx.beginPath();
		this.$ctx.lineWidth = params.aLineWidth;
		this.$ctx.strokeStyle = params.aLineColor;
		this.$ctx.moveTo( Math.round( cpos.x + r * Math.cos(axis_angles[0]) ), Math.round( cpos.y - r * Math.sin(axis_angles[0]) ) );
		for(var j=1; j<axis_angles.length; j++)
			this.$ctx.lineTo( Math.round( cpos.x + r * Math.cos(axis_angles[j]) ), Math.round( cpos.y - r * Math.sin(axis_angles[j]) ) );

		this.$ctx.closePath();
		this.$ctx.stroke();
	}
};
/* チャートの形状を描画 */
radarGraph.prototype.$_draw_chart_shape = function(params, cpos, axis_angles) {
	/* チャート形状の塗り */
	this.$_make_path_chart_shape(params, cpos, axis_angles);
	this.$ctx.fillStyle = params.cBackgroundColor;
	this.$ctx.fill();
};
radarGraph.prototype.$_make_path_chart_shape = function(params, cpos, axis_angles) {
	this.$ctx.beginPath();
	this.$ctx.moveTo(cpos.x, cpos.y-cpos.r);
	for(var i=0; i<axis_angles.length; i++) {
		var edge_x = Math.round( cpos.x + cpos.r * Math.cos(axis_angles[i]) );
		var edge_y = Math.round( cpos.y - cpos.r * Math.sin(axis_angles[i]) );
		this.$ctx.lineTo(edge_x, edge_y);
	}
	this.$ctx.closePath();
};
/* 文字列を描画 */
radarGraph.prototype.$drawText = function(x, y, caption, font_size, font_family, color) {
	var div = document.createElement('div');
	div.appendChild( document.createTextNode(htmlDeConvert(caption)) );
	div.style.fontSize = font_size;
	div.style.fontFamily = font_family;
	div.style.whiteSpace = 'nowrap';
	div.style.color = color;
	div.style.margin = "0";
	div.style.padding = "0";
	div.style.position = "absolute";
	div.style.left = x.toString() + "px";
	div.style.top = y.toString() + "px";
	this.$canvas.parentNode.appendChild(div);
}
/* 文字列表示領域のサイズを取得 */
radarGraph.prototype.$getTextBoxSize = function(caption, font_size, font_family) {
	var o = null;
	if(window.opera){
		o = {
			w: parseInt(parseInt(font_size) * caption.length * 7 / 10),
			h: parseInt(parseInt(font_size) * 1.3)
		};
	}else{
		var tmpdiv = document.createElement('div');
		tmpdiv.appendChild( document.createTextNode(htmlDeConvert(caption)));
		tmpdiv.style.fontSize = font_size;
		tmpdiv.style.fontFamily = font_family;
		tmpdiv.style.margin = "0";
		tmpdiv.style.padding = "0";
		tmpdiv.style.visible = "hidden";
		tmpdiv.style.position = "absolute";
		tmpdiv.style.left = "0px";
		tmpdiv.style.top = "0px";
		document.body.appendChild(tmpdiv);
		o = {
			w: tmpdiv.offsetWidth,
			h: tmpdiv.offsetHeight
		};
		tmpdiv.parentNode.removeChild(tmpdiv);
	}
	return o;
}
/*****************************************************************/
/***  STAR ☆                   *******************************************/
/*****************************************************************/
function createStarScale(mag, rate, size, color, edge, grad, revers, border){
	this.$mag = mag;		//星の大きさを倍率で
	this.$rate = rate;		//全体の星の数(size)に対する塗りつぶし率
	this.$edge = edge;	//全体の星の数
	this.$grad = grad;
	this.$revers = revers;
	this.$border = border;
	var freq = size * this.$rate;
	var iFreq = Math.ceil(freq);
	var half = (freq != iFreq);
	var x = 0;
	if(!this.$mag || isNaN(this.$mag)) this.$mag = 1.5;
	if(this.$mag < 0.5) this.$mag = 0.5;
//	if(this.$mag > 20) this.$mag = 20;
	var w = Math.round(17 * this.$mag);

	var parDiv = document.createElement('div');
	var canvas = document.createElement('canvas');
	if(IE8) document.body.appendChild(parDiv);
	document.body.appendChild(canvas);
	if(IE){
		canvas = G_vmlCanvasManager.initElement(canvas); // 初期化された要素が返るので、再代入
		var ctx = canvas.getContext("2d");
	}
	/* 注意！先に(外側から)サイズを調整しないと描画できません！！！ */
	parDiv.style.textAlign = 'left';
	parDiv.style.position = "relative";
	parDiv.style.padding = "0px";
	parDiv.style.width = (w * size) + 'px';
	parDiv.style.height = w + 'px';
	canvas.width = (w * size);
	canvas.height = w;
	canvas.style.margin = "0px";
	canvas.style.position = "absolute";
	parDiv.appendChild(canvas);

	this.$canvas = canvas;
	var ctx = canvas.getContext('2d');
	
	for(var i=0;i<iFreq;i++){
		if(i == iFreq - 1 && half) this.$drawHarfStar(ctx, x, color, true);
		else this.$drawFullStar(ctx, x, color);
		x += 17;
	}
	if(half) iFreq--;

	for(var i=iFreq;i<size;i++){
		if(i == iFreq && half){ x -= 17; this.$drawHarfStar(ctx, x, 'darkgray', false); }
		else this.$drawFullStar(ctx, x, 'darkgray');
		x += 17;
	}
	if(IE) {
		pushShape(ctx, parDiv, w * size, w)
	}
	return parDiv;
}
/* 星 */
createStarScale.prototype.$drawFullStar = function(ctx, x, color){
	var rgbArr = color2RGBArr(this.$grad ? toDarkColor(color, 0.95) : color);
	this.$drawFullStarEdge(ctx, x);
	if(this.$grad){
		ctx.fillStyle = toDarkColor(color, 1.40);
		ctx.fill();
		ctx.fillStyle = this.$createGrad(ctx, x, rgbArr);
		ctx.fill();
	}else{
		ctx.fillStyle = intArr2RGBStr(rgbArr);
		ctx.fill();
	}
	if(this.$border){
		this.$drawFullStarEdge(ctx, x);
		ctx.lineWidth = 0.3;
		ctx.strokeStyle = toDarkColor(color, 0.65);
		ctx.stroke();
	}
}
/* 星半分 */
createStarScale.prototype.$drawHarfStar = function(ctx, x, color, left){
	var rgbArr = color2RGBArr(this.$grad ? toDarkColor(color, 0.95) : color);
	this.$drawHarfStarEdge(ctx, x, left)
	if(this.$grad){
		ctx.fillStyle = toDarkColor(color, 1.40);
		ctx.fill();
		ctx.fillStyle = this.$createGrad(ctx, x, rgbArr);
		ctx.fill();
	}else{
		ctx.fillStyle = intArr2RGBStr(rgbArr);
		ctx.fill();
	}
	if(this.$border){
		this.$drawHarfStarEdge(ctx, x, left);
		ctx.lineWidth = 0.3;
		ctx.strokeStyle = toDarkColor(color, 0.55);
		ctx.stroke();
	}
}
createStarScale.prototype.$drawFullStarEdge = function(ctx, x){
	ctx.beginPath();
	if(this.$edge){
		ctx.moveTo(x * this.$mag, (7 * this.$mag));
		ctx.lineTo((x + 6) * this.$mag, 7 * this.$mag);
		ctx.lineTo((x + 8) * this.$mag, 0);
		ctx.lineTo((x + 10) * this.$mag, 7 * this.$mag);
		ctx.lineTo((x + 16) * this.$mag, 7 * this.$mag);
		ctx.lineTo((x + 11) * this.$mag, 10 * this.$mag);
		ctx.lineTo((x + 13) * this.$mag, 16 * this.$mag);
		ctx.lineTo((x + 8) * this.$mag, 12 * this.$mag);
		ctx.lineTo((x + 3) * this.$mag, 16 * this.$mag);
		ctx.lineTo((x + 5) * this.$mag, 10 * this.$mag);
	}else {
		ctx.moveTo((x + 6) * this.$mag, 6.15 * this.$mag);
		ctx.lineTo((x + 7.45) * this.$mag, 1.75 * this.$mag);
		ctx.arc((x + 8) * this.$mag, 1.85 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 0) /180 * Math.PI, (270 + 36 + 72 * 0) /180 * Math.PI, false);
		ctx.lineTo((x + 10) * this.$mag, 6.05 * this.$mag);
		ctx.lineTo((x + 14.85) * this.$mag, 6.05 * this.$mag);
		ctx.arc((x + 14.60) * this.$mag, 6.60 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 1) /180 * Math.PI, (270 + 36 + 72 * 1) /180 * Math.PI, false);
		ctx.lineTo((x + 11.20) * this.$mag, 9.60 * this.$mag);
		ctx.lineTo((x + 12.75) * this.$mag, 14.55 * this.$mag);
		ctx.arc((x + 12.10) * this.$mag, 14.45 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 2) /180 * Math.PI, (270 + 36 + 72 * 2) /180 * Math.PI, false);
		ctx.lineTo((x + 8) * this.$mag, 12.00 * this.$mag);
		ctx.lineTo((x + 4.15) * this.$mag, 14.95 * this.$mag);
		ctx.arc((x + 3.90) * this.$mag, 14.45 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 3) /180 * Math.PI, (270 + 36 + 72 * 3) /180 * Math.PI, false);
		ctx.lineTo((x + 4.85) * this.$mag, 9.75 * this.$mag);
		ctx.lineTo((x + 0.8) * this.$mag, 6.85 * this.$mag);
		ctx.arc((x + 1.35) * this.$mag, 6.55 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 4) /180 * Math.PI, (270 + 36 + 72 * 4) /180 * Math.PI, false);
	}
	ctx.closePath();
}
createStarScale.prototype.$drawHarfStarEdge = function(ctx, x, left){
	ctx.beginPath();
	if(this.$edge){
		if(left){
			ctx.moveTo((x + 8) * this.$mag, 0);
			ctx.lineTo((x + 6) * this.$mag, 7 * this.$mag);
			ctx.lineTo(x * this.$mag, (7 * this.$mag));
			ctx.lineTo((x + 5) * this.$mag, 10 * this.$mag);
			ctx.lineTo((x + 3) * this.$mag, 16 * this.$mag);
			ctx.lineTo((x + 8) * this.$mag, 12 * this.$mag);
		}else{
			ctx.moveTo((x + 8) * this.$mag, 0);
			ctx.lineTo((x + 10) * this.$mag, 7 * this.$mag);
			ctx.lineTo((x + 16) * this.$mag, 7 * this.$mag);
			ctx.lineTo((x + 11) * this.$mag, 10 * this.$mag);
			ctx.lineTo((x + 13) * this.$mag, 16 * this.$mag);
			ctx.lineTo((x + 8) * this.$mag, 12 * this.$mag);
		}
	}else{
		if(left){
			ctx.moveTo((x + 8) * this.$mag, 12.00 * this.$mag);
			ctx.lineTo((x + 4.15) * this.$mag, 14.925 * this.$mag);
			ctx.arc((x + 3.90) * this.$mag, 14.45 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 3) /180 * Math.PI, (270 + 36 + 72 * 3) /180 * Math.PI, false);
			ctx.lineTo((x + 4.85) * this.$mag, 9.75 * this.$mag);
			ctx.lineTo((x + 0.8) * this.$mag, 6.85 * this.$mag);
			ctx.arc((x + 1.35) * this.$mag, 6.55 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 4) /180 * Math.PI, (270 + 36 + 72 * 4) /180 * Math.PI, false);
			ctx.lineTo((x + 6) * this.$mag, 6.05 * this.$mag);
			ctx.lineTo((x + 7.45) * this.$mag, 1.75 * this.$mag);
			ctx.arc((x + 8) * this.$mag, 1.85 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 0) /180 * Math.PI, 270 /180 * Math.PI, false);
		}else{
			ctx.arc((x + 8) * this.$mag, 1.85 * this.$mag, 0.65 * this.$mag, 270/180 * Math.PI, (270 + 36 + 72 * 0) /180 * Math.PI, false);
			ctx.lineTo((x + 10) * this.$mag, 6.05 * this.$mag);
			ctx.lineTo((x + 14.85) * this.$mag, 6.05 * this.$mag);
			ctx.arc((x + 14.60) * this.$mag, 6.60 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 1) /180 * Math.PI, (270 + 36 + 72 * 1) /180 * Math.PI, false);
			ctx.lineTo((x + 11.20) * this.$mag, 9.60 * this.$mag);
			ctx.lineTo((x + 12.75) * this.$mag, 14.55 * this.$mag);
			ctx.arc((x + 12.10) * this.$mag, 14.45 * this.$mag, 0.65 * this.$mag, (270 - 36 + 72 * 2) /180 * Math.PI, (270 + 36 + 72 * 2) /180 * Math.PI, false);
			ctx.lineTo((x + 8) * this.$mag, 12.00 * this.$mag);
		}
	}
	ctx.closePath();
}
createStarScale.prototype.$createGrad = function(ctx, x, rgbArr){
	var ctxGrad;
	if(navigator.userAgent.toLowerCase().indexOf("chrome") > 0 || navigator.userAgent.toLowerCase().indexOf("firefox") > 0){
		ctxGrad = ctx.createLinearGradient(x * this.$mag + 3, 3, (x + 16) * this.$mag - 3, 16 * this.$mag - 3);
		if(this.$revers){
			ctxGrad.addColorStop(0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
			ctxGrad.addColorStop(0.3, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.8)");
			ctxGrad.addColorStop(0.5, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.0)");
			ctxGrad.addColorStop(0.7, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.8)");
			ctxGrad.addColorStop(1, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
		}else{
			ctxGrad.addColorStop(0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.0)");
			ctxGrad.addColorStop(0.3, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.4)");
			ctxGrad.addColorStop(0.5, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
			ctxGrad.addColorStop(0.7, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.4)");
			ctxGrad.addColorStop(1, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.0)");
		}
	}else{
		ctxGrad = ctx.createRadialGradient((x + 8) * this.$mag, 9 * this.$mag, 8 * this.$mag, (x + 8) * this.$mag, 9 * this.$mag, 0);
		if(this.$revers){
			ctxGrad.addColorStop(0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
			ctxGrad.addColorStop(0.4, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.8)");
			ctxGrad.addColorStop(0.5, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.7)");
			ctxGrad.addColorStop(1, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.0)");
		}else{
			ctxGrad.addColorStop(0.0, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.0)");
			ctxGrad.addColorStop(0.6, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.6)");
			ctxGrad.addColorStop(0.9, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",0.95)");
			ctxGrad.addColorStop(1, "rgba(" + rgbArr[0] + "," + rgbArr[1] + "," + rgbArr[2] + ",1.0)");
		}
	}
	return ctxGrad;
}
/* IEで書き出された図形が表示されない現象に対応するため、図形を押し出す。 */
function pushShape(ctx, parDiv, w, h){
	ctx.beginPath();
	ctx.rect(0,0,0,0);
	ctx.strokeRect();
	parDiv.childNodes[0].childNodes[0].style.overFlow = 'visible';
	parDiv.childNodes[0].childNodes[0].style.width = w + 'px';
	parDiv.childNodes[0].childNodes[0].style.height = h + 'px';
}
function paleTone(n, pro){
	if(n == 0) return parseInt(255 * pro);
	return n;
}
/*************************************************************************/
/*** drawReview ☆                           ******************************************/
/*************************************************************************/
if(!jsns) var jsns;
function drawReview(jsn, withAuth){
	this.$parDiv = null;
	this.$cd = null;
	var jsnExist = false;
	if(!jsn || jsn.length == 0 || jsn.ERR || !(this.$cd = jsn.cd) || !(this.$parDiv = document.getElementById(this.$cd))) return;
	
	if(parseInt(jsn.open_level) == 2 && document.cookie.indexOf(jsn.spgk + 'auth') < 0){
		if(withAuth){
			authObjectPut();
			return;
		}else{
			document.cookie = (jsn.spgk + 'auth=' + new Date().getTime().toString());
		}
	}
	
	if(!jsns) jsns = new Array();
	for(var i=0;i<jsns.length;i++) {
		if(jsns[i].cd == this.$cd) { jsns[i] = jsn; jsnExist = true; break; }
	}
	if(!jsnExist) jsns[jsns.length] = jsn;
	
	addCornerCss();
	this.$spgk = jsn.spgk;
	this.$fs = (isNaN(jsn.fs) || Number(jsn.fs) <= 0 ? 12 : parseInt(jsn.fs));					//基本文字サイズ
	this.$tx = (isNaN(jsn.tx) || Number(jsn.tx) <= 0 ? 1.2 : Number(jsn.tx));				//タイトル文字倍率
	this.$rls = (isNaN(jsn.rls) || jsn.rls.length == 0 ? 3 : parseInt(jsn.rls));					//レビュー初期表示数
	this.$rcs = (isNaN(jsn.rcs) || jsn.rcs.length == 0 ? 256 : parseInt(jsn.rcs));			//レビューコメント初期表示バイト数
	this.$w = (isNaN(jsn.w) || Number(jsn.w) <= 0 ? 750 : parseInt(jsn.w));					//全体の横幅
	this.$rw = jsn.rw;
	this.$rtc = chkColor(jsn.rtc, '#d3d3d3');				//レビューテーブルタイトルバーの色 (※lightgrey)
	this.$rbc = chkColor(jsn.rbc, '#ffffff');					//レビューテーブル背景色(※white)
	this.$bc = chkColor(jsn.bc, '#efefef');					//基本背景色
	this.$ec = chkColor(jsn.ec, this.$rtc);					//背景枠色
	this.$vote_button_color = toDarkColor(this.$rtc, 0.84);
	this.$vote_button_bcolor = toDarkColor(this.$rtc, 0.6);
	this.$fc = chkColor(jsn.fc, '#555555');					//基本文字色
	this.$tc = chkColor(jsn.tc, this.$fc);					//タイトル文字色
	this.$sc = chkColor(jsn.sc, "#ffa500");					//星の色(※orange)
	this.$lc = chkColor(jsn.lc, "#4682b4");					//リンク文字色(※steelblue)
	this.$vc = chkColor(jsn.vc, "#777777");				//評価値ラベル文字色
	this.$cc = chkColor(jsn.cc, this.$sc);
	this.$cgc = (isNaN(jsn.cgc) ? 0 : jsn.cgc);
	this.$cgg = (isNaN(jsn.cgg) ? 0 : jsn.cgg);
	this.$nsm = jsn.nsm										//合計値を非表示
	this.$sort = (jsn.sort ? jsn.sort.charAt(0) : 'n');			//レビュー一覧並び順（n：最新順 p：参考になった順）
	this.$outer = (isNaN(jsn.outer) || 0 > Number(jsn.outer) || Number(jsn.outer) > 3 ? 2: parseInt(jsn.outer));//背景枠パターン
	this.$review_caption = jsn.review_caption;				//レビューの代替文言
	
	this.$viewAll = jsn.viewAll;								//すべてを表示オプション
	this.$viewAllCap = (this.$rls == 0 ? this.$review_caption + 'を表示' : (this.$w > 180 ? 'すべてを表示' : '全て表示'));
	if(jsn.reviews){
		this.$reviews = jsn.reviews.concat();
		if(this.$sort == 'p') this.$reviews.sort(orderPoint);
	}
	if(jsn.itmnm) this.$item_name = jsn.item_name;
	this.$scale_name = jsn.scale_name;
	this.$scale_list = jsn.scale_list.concat();
	this.$voteURL = jsn.url;
	this.$voiceURL = jsn.reg_url;
	this.$cookie_key = jsn.cookie_key;
	this.$ruler = (isNaN(jsn.ruler) ? 0 : jsn.ruler);
	this.$e = (jsn.e ? jsn.e : 'e');
	if(!jsn.s_egrb || jsn.s_egrb.length == 0) jsn.s_egrb = '0110';
	if(jsn.s_egrb.charAt(0) == '2'){
		this.$s_label = true;
		if(this.$ruler == 0) this.$ruler = 1;
	}else{
		if(jsn.s_egrb.charAt(0) == '1') this.$s_edge = true;
		if(jsn.s_egrb.length > 1 && jsn.s_egrb.charAt(1) == '1') this.$s_grad = true;
		if(jsn.s_egrb.length > 2 && jsn.s_egrb.charAt(2) == '1') this.$s_revers = true;
		if(jsn.s_egrb.length > 3 && jsn.s_egrb.charAt(3) == '1') this.$s_border = true;
	}
	if(this.$scale_list.length < 3 && this.$ruler == 1) this.$ruler = 2;
	
	this.$addCss();

	while(this.$parDiv.childNodes.length > 0) this.$parDiv.removeChild(this.$parDiv.childNodes[0]);

	this.$drawReview();
	
//*	if(this.$w < this.$fs * 41.6) this.$drawReviewV();
//*	else this.$drawReviewH();
}
/* このガジェットに必要なクラスの追加 */
drawReview.prototype.$addCss = function(){
	var ls = (this.$fs - 1) + 'px';
	var rules = [[".lc","font-size:" + ls + "; background-color: transparent; color: " + this.$lc + "; text-decoration: none; cursor: pointer; width: auto; height: auto; margin: 0px; padding: 0px; white-space: nowrap;"]
				 ,[".revtxtdef", "font-size: " + this.$fs + "px; color: inherit; background-color: transparent; text-decoration: none; text-align: left; width: auto; height: auto; "]
				 ,[".mask", "top: 0; left: 0; position: absolute; background-color: #404040; " + (IE ? "filter: Alpha(opacity=70); " : "opacity: 0.7; ") + "z-index :500;"]
				 ,[".voiceMask", "z-index:1000;position:absolute;left:0; top:0; width:16px; height: 16px; font-size: 12px; line-height: 12px; background-color: #ffffff; " + (IE ? "filter: Alpha(opacity=60); " : "opacity: 0.6; ") + " cursor: pointer;"]
				 ,[".cntx", "top: 0; left: 0; position: absolute; width: 550px; height: 470px; background-color: white; z-index: 700;"]
				 ,[".maskclose", "background-color: #999999; color: white; font-size: 14px; font-weight: bold; margin-right: 3px; cursor: pointer;"]
				 ,[".divcap", "position: absolute; background-color: #ffffff; " + (IE ? "filter: Alpha(opacity=70); " : "opacity: 0.7; ")]
				 ,[".voiceIn0", "padding: 10px ; border: 1px solid #6495ed; background-color:#6495ed;font-weight:bold;font-size:14px;color: #ffffff; text-align: left; width: 100%; height: 36px;"]
				 ,[".voiceIn1", "border: 1px solid #6495ed; text-align:left; font-size:12px;color:#555555; white-space: nowrap;"]
				 ,[".voiceIn2", "padding: 10px; border-width: 0px 1px 1px 1px; border-style: solid; border-color: #6495ed; text-align:left; font-size:12px;color:#555555; height: 304px;"]
				 ,[".voiceLabel", "text-align:left; font-size:12px;color:#555555; white-space: nowrap; paddin-top: 1px; vertical-align: top; "]
				 ,[".voiceMemo", "text-align:left; font-size:11px; color:#4682b4;"]
				];
	var styles = document.getElementsByTagName('style');
	var style = styles[styles.length - 1];

	if(IE) for(var i=0; i<rules.length; i++) document.styleSheets[document.styleSheets.length -1].addRule(rules[i][0] , rules[i][1] );
	else for(var i=0; i<rules.length; i++) style.sheet.insertRule(rules[i][0] + '{' + rules[i][1] + '}', style.sheet.cssRules.length);
}
drawReview.prototype.$drawReview = function(){	
	/* 初期値の設定 */
	/* 外枠の作成とスタイルの決定 */
	var tblOuter = document.createElement('table');
	var trOuter = tblOuter.insertRow(0);
	var tdOuter = trOuter.insertCell(0);
	var gArr = new Array();
	var countAll = 0;
	this.$innerPad = (parseInt(this.$w / 50) > 10 ? 10 : parseInt(this.$w / 50));
	tblOuter.style.width = this.$w + 'px';
	tblOuter.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	tblOuter.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	tblOuter.setAttribute('border', '0');
	tdOuter.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	
	var tblMain = document.createElement('table');
	tblMain.style.backgroundColor = this.$bc;
	tblMain.style.width = '100%';
	tblMain.style.fontSize = this.$fs + 'px';
	if(this.$outer == 1){
		tblMain.style.border = '1px solid ' + this.$ec;
	}else if(this.$outer == 3){
		tblMain.style.borderLeft = '1px solid ' + this.$ec;
		tblMain.style.borderRight = '1px solid ' + this.$ec;
	}
	var tr = tblMain.insertRow(tblMain.rows.length);
	var td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	if(this.$outer > 1){ 
		td.style.paddingLeft = this.$innerPad + 'px';
		td.style.paddingRight = this.$innerPad + 'px';
	}else{
		td.style.padding = this.$innerPad + 'px';
	}
	if(this.$outer > 1) cornerWrite('head', this.$outer, tdOuter, this.$bc, this.$ec, false);
	tdOuter.appendChild(tblMain);
	if(this.$outer > 1) cornerWrite('foot', this.$outer, tdOuter, this.$bc, this.$ec, false);
	this.$parDiv.appendChild(tblOuter);
	//評価行の表示
	this.$createScaleTableH(td);
	
	if(this.$reviews && this.$reviews.length > 0 && (this.$viewAll || this.$rls > 0)) {
		if(this.$w < this.$fs * 40) td.appendChild(this.$createReviewTableV());
		else td.appendChild(this.$createReviewTableH());
	}
	if(this.$s_label){
		var s_label = document.createElement('input');
		s_label.type = 'hidden';
		s_label.id = this.$spgk + '_s_label';
		s_label.value = 't';
		this.$parDiv.appendChild(s_label);
	}
}
/* HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH */
/* 全体のレビュー評価概要部分（横長仕様） */
drawReview.prototype.$createScaleTableH = function(parTd){
	if(this.$ruler == 0 && this.$fs * this.$tx * (this.$scale_list.length + this.$scale_name.length + 17) > this.$w
		|| this.$ruler > 0 && (this.$w < this.$fs * 40 || this.$rw && this.$rw > (this.$w - this.$innerPad) / 2 || !this.$rw && 100 > (this.$w - this.$innerPad) / 2)){
		this.$createScaleTableV(parTd);
		return;
	}
	var scaleTbl = document.createElement('table');
	scaleTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	scaleTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	scaleTbl.setAttribute('border', '0');
	scaleTbl.style.backgroundColor = 'transparent';
	scaleTbl.style.width = '100%';
	var tr = scaleTbl.insertRow(scaleTbl.rows.length);
	var td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	/* 評価尺度名称 */
	td.style.fontSize = parseInt(this.$fs * this.$tx) + 'px';
	td.style.textAlign = 'left';
	td.style.color = this.$tc;
	td.style.fontWeight = 'bold';
	td.style.width = (this.$fs * this.$tx * (this.$scale_name.length + (this.$item_name ? this.$item_name.length + 1 : 0))) + 'px'
	td.style.verticalAlign = (this.$ruler == 0 ? 'middle' : 'top');
	td.style.paddingTop = (CSS1 ? '0.2em' : parseInt(parseInt(this.$fs * this.$tx) * 0.2) + 'px');
	td.style.whiteSpace = 'nowrap';
	
	var ntc = toNeutralColor(this.$fc, this.$bc);
	var slist = this.$scale_list;
	var review_count = 0;
	var total_point = 0;
	for(var i=0;i<slist.length;i++){
		review_count += slist[i].count;
		total_point += (slist[i].scale_code * slist[i].count);
	}

	if(total_point > 0){
		//小数点以下2桁で四捨五入した値を使う
		var rate = Math.round(total_point / review_count / slist.length * 100) /100;
		/* 評価☆表示 */
		var canvasDiv;
		if(this.$ruler == 2) canvasDiv = new circleGraph(this.$scale_list, this.$cgc, this.$cgg, this.$vc, Math.round(this.$calcRadarWidth(false) * 0.8), false);
		else if(this.$ruler == 1) canvasDiv = new radarGraph(this.$scale_list, this.$cc, this.$vc, this.$calcRadarWidth(false));
		else canvasDiv = new createStarScale(this.$fs * this.$tx / 12, rate, this.$scale_list.length, this.$sc, this.$s_edge, this.$s_grad, this.$s_revers, this.$s_border);

		if(this.$ruler > 0){
			if(this.$item_name) td.appendChild(document.createTextNode(htmlDeConvert(this.$item_name) + ' '));
			td.appendChild(document.createTextNode(htmlDeConvert(this.$scale_name)));
			td.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '2');
			
			tr = scaleTbl.insertRow(scaleTbl.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.style.width = '50%';
			td.setAttribute('align', 'right');
			td.setAttribute('valign', 'bottom');
			td.style.textAlign = 'right';
			td.style.overflow = 'visible';
			td.style.paddingTop = this.$fs + 'px';
//			canvasDiv.style.left = parseInt((this.$w - 20) / 2 - parseInt(canvasDiv.style.width))	 + 'px';
			td.style.paddingLeft = parseInt((this.$w - 20) / 2 - parseInt(canvasDiv.style.width))	 + 'px';
			td.appendChild(canvasDiv);

			td = tr.insertCell(tr.cells.length);
			td.style.width = '50%';
			td.style.textAlign = 'center';
			td.style.verticalAlign = 'middle';
			td.setAttribute('align', 'center');
			td.setAttribute('valign', 'center');
			if(!this.$nsm){
				var sTbl = document.createElement('table');
				sTbl.setAttribute('align', 'center');
				sTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
				sTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '1');
				sTbl.setAttribute('border', '0');
				sTbl.style.color = ntc;
				sTbl.style.fontSize = (this.$fs - 1) + 'px';
				for(var i=0;i<this.$scale_list.length;i++){
					var sTr =  sTbl.insertRow(sTbl.rows.length);
					var sTd = sTr.insertCell(sTr.cells.length);
					sTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
					sTd.style.textAlign = 'left';
					sTd.style.paddingRight = '15px';
					sTd.innerHTML = this.$scale_list[i].scale_label;
					sTd = sTr.insertCell(sTr.cells.length);
					sTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
					sTd.style.textAlign = 'right';
					sTd.innerHTML = this.$scale_list[i].count + ' 件';
				}
				var sTr =  sTbl.insertRow(sTbl.rows.length);
				var sTd = sTr.insertCell(sTr.cells.length);
				sTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
				sTd.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '3');
				sTd.style.height = '1px';
				sTd.style.backgroundColor = ntc;
				
				sTr =  sTbl.insertRow(sTbl.rows.length);
				sTd = sTr.insertCell(sTr.cells.length);
				sTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
				sTd.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '3');
				sTd.style.textAlign = 'right';
				sTd.innerHTML = '合計' + this.$review_caption + '数 ： ' + review_count + '件';
				td.appendChild(sTbl);
			}
			
			tr = scaleTbl.insertRow(scaleTbl.rows.length);
		}else{
			if(this.$item_name){
				if(this.$fs * this.$tx * (this.$scale_list.length + this.$item_name.length + this.$scale_name.length + 17) > this.$w){
//				if(parseInt(td.style.width) + this.$fs * this.$tx * (this.$scale_list.length + 12) > this.$w){
					td.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '3');
					td.style.width = '';
					td.appendChild(document.createTextNode(htmlDeConvert(this.$item_name)));
					tr = scaleTbl.insertRow(scaleTbl.rows.length);
					td = tr.insertCell(tr.cells.length);
					td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
					td.style.fontSize = parseInt(this.$fs * this.$tx) + 'px';
					td.style.textAlign = 'left';
					td.style.color = this.$tc;
					td.style.fontWeight = 'bold';
					td.style.verticalAlign = 'middle';
					td.style.paddingTop = (CSS1 ? '0.2em' : parseInt(parseInt(this.$fs * this.$tx) * 0.2) + 'px');
					td.style.whiteSpace = 'nowrap';
					td.style.width = (this.$fs * this.$scale_name.length + 15) + 'px'
				}else td.appendChild(document.createTextNode(htmlDeConvert(this.$item_name) + ' '));
			}
			
			td.appendChild(document.createTextNode(htmlDeConvert(this.$scale_name)));
			td.style.whiteSpace = 'nowrap';
			td.style.width = parseInt(td.innerHTML.length * this.$fs * this.$tx) + 'px';
			td = tr.insertCell(tr.cells.length);
			td.style.whiteSpace = 'nowrap';
			td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			td.style.textAlign = 'left';
			td.style.width = canvasDiv.style.width;
			td.appendChild(canvasDiv);
			/* レビュー数：999件 */
			if(!this.$nsm){
				td = tr.insertCell(tr.cells.length);
				td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
				td.style.textAlign = 'left';
				td.style.color = ntc;
				td.style.whiteSpace = 'nowrap';
				td.style.verticalAlign = 'middle';
				td.style.paddingTop = (CSS1 ? '0.3em' : parseInt(parseInt(this.$fs * this.$tx) * 0.3) + 'px');
				td.style.fontSize = (this.$fs - 1) + 'px';
				td.innerHTML = '　（' + this.$review_caption + '数 ： ' + review_count + '件）';
			}
		}
	}else{
		/* レビュー数：999件 */
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.textAlign = 'left';
		td.style.color = ntc;
		td.style.whiteSpace = 'nowrap';
		td.style.verticalAlign = 'middle';
		td.style.paddingTop = (CSS1 ? '0.3em' : parseInt(parseInt(this.$fs * this.$tx) * 0.3) + 'px');
		td.style.fontSize = (this.$fs - 1) + 'px';
		td.innerHTML = '　（' + this.$review_caption + '数 ： ' + review_count + '件）';
	}
	td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	if(this.$ruler > 0) td.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '3');
	td.style.textAlign = 'right';
	td.style.fontSize = '0.95em';
	if(this.$reviews && this.$rls < this.$reviews.length){
		var dispAll = document.createElement('span');
		dispAll.setAttribute(IE && !IE8 ? 'className' : 'class' , 'lc');
		if(this.$viewAll){
			dispAll.setAttribute('onclick', IE && !IE8 ? new Function('reviewsSizeChange("' + this.$cd + '", false)') : 'reviewsSizeChange("' + this.$cd + '",false)');
			dispAll.innerHTML = '折りたたむ &#9650;';
		}else {
			dispAll.setAttribute('onclick', IE && !IE8 ? new Function('reviewsSizeChange("' + this.$cd + '", true)') : 'reviewsSizeChange("' + this.$cd + '", true)');
			dispAll.innerHTML = this.$viewAllCap + '&#9660;';
		}
	}
	var voteReview = document.createElement('span');
	voteReview.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	voteReview.style.paddingLeft = parseInt(this.$w /  60) + 'px';
	voteReview.setAttribute(IE && !IE8 ? 'className' : 'class' , 'lc');
	voteReview.setAttribute('onclick', IE && !IE8 ? new Function('addVoicePage("' + this.$voiceURL + '","' + this.$scale_name + '","' + this.$e + '")') : 'addVoicePage("' + this.$voiceURL + '","' + this.$scale_name + '","' + this.$e + '")');
	voteReview.innerHTML = (total_point > 0 ? '' : '最初の') + this.$review_caption + 'を記入する &#9650;';
	if(dispAll) td.appendChild(dispAll);
	td.appendChild(voteReview);
	parTd.appendChild(scaleTbl);
	if(dispAll && this.$w - 10 < scaleTbl.offsetWidth) td.insertBefore(document.createElement('br'), voteReview);
	
	if(this.$w < this.$parDiv.childNodes[0].offsetWidth){
		parTd.removeChild(scaleTbl);
		this.$createScaleTableV(parTd);
	}
}
/* レビュー各行の表示 */
drawReview.prototype.$createReviewTableH = function(){
	var reviewTbl = document.createElement('table');
	reviewTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', parseInt(this.$w / 75));
	reviewTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	reviewTbl.setAttribute('border', '0');
	reviewTbl.style.backgroundColor = 'transparent';
	reviewTbl.style.width = '100%';
	reviewTbl.style.marginTop = '10px';
	reviewTbl.style.backgroundColor = this.$rbc;
	reviewTbl.style.fontSize = this.$fs + 'px';
	var tr = reviewTbl.insertRow(reviewTbl.rows.length);
	var td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	/* 現在のレビュー表示順 */
	tr.style.backgroundColor = this.$rtc;
	tr.style.valign = 'bottom';
	td.style.backgroundColor = this.$rtc;
	td.style.color = this.$fc;
	td.style.fontWeight = 'bold';
	td.style.textAlign = 'left';
	td.style.width = '25%';
	td.innerHTML = (this.$sort == 'p' ? '参考になった' : '最新の') + this.$review_caption;
	/* もう片方の表示順へのリンク */
	td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	td.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '2');
	td.style.backgroundColor = this.$rtc;
	td.style.width = '75%';
	td.style.textAlign = 'right';
	td.style.fontSize = (this.$fs - 1) + 'px';
	var n_order = document.createElement('span');
	var p_order = document.createElement('span');
	n_order.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	p_order.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	n_order.style.fontSize = (this.$fs - 1) + 'px';
	p_order.style.fontSize = (this.$fs - 1) + 'px';
	n_order.style.paddingRight = parseInt(this.$w / 50) + 'px';
	p_order.style.paddingRight = '7px';
	n_order.innerHTML = '新しい順に表示';
	p_order.innerHTML = '参考になった順に表示';
	if(this.$sort == 'p'){
		n_order.style.color = this.$lc;
		n_order.style.cursor = 'pointer';
		n_order.setAttribute('onclick', IE && !IE8 ? new Function('sortTypeChange("' + this.$cd + '","n")') : 'sortTypeChange("' + this.$cd + '","n")');
		n_order.innerHTML = n_order.innerHTML + ' &#9660;'
		p_order.style.color = toNeutralColor(this.$fc, this.$rtc);
	}else{
		p_order.style.color = this.$lc;
		p_order.style.cursor = 'pointer';
		p_order.setAttribute('onclick', IE && !IE8 ? new Function('sortTypeChange("' + this.$cd + '","p")') : 'sortTypeChange("' + this.$cd + '","p")');
		p_order.innerHTML = p_order.innerHTML + ' &#9660;'
		n_order.style.color = toNeutralColor(this.$fc, this.$rtc);
	}
	td.appendChild(n_order);
	td.appendChild(p_order);
	
	/* ここからレビュー */
	if(!this.$reviews) return reviewTbl;

	var pale = toNeutralColor(this.$fc, this.$rbc);
	var nm_pref = (this.$review_caption == 'レビュー' ? 'レビュアー　' : '投稿者　');
	var rev_len = this.$viewAll || this.$reviews.length < this.$rls ? this.$reviews.length : this.$rls;
	for(var i=0;i<rev_len; i++){
		//境界線
		if(i > 0){
			tr = reviewTbl.insertRow(reviewTbl.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			td.setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '3');
			td.style.height = '1px';
			td.style.paddingTop = '5px';
			td.style.textAlign = 'center';
			var line = document.createElement('b');
			line.setAttribute((IE && !IE8 ? 'className' : 'class'), 'r002');
			line.style.backgroundColor = this.$rtc;
			td.appendChild(line);
		}
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		tr.style.verticalAlign = 'top';
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.textAlign = 'left';
		td.style.color = this.$fc;
		td.style.verticalAlign = 'top';
		if(this.$s_label){
			td.appendChild(this.$createLabel(this.$scale_list[this.$scale_list.length - this.$reviews[i].scale_code].scale_label));
		}else{
			//星スケール
			var div = document.createElement('div');
			div.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			td.appendChild(div);
			div.style.position = "relative";
			div.style.padding = "0px";
			div.style.width = (17 * 5) + 'px';
			div.style.height = '17px';
			div.appendChild(new createStarScale(this.$fs / 15, this.$reviews[i].scale_code/this.$scale_list.length, this.$scale_list.length, this.$sc, this.$s_edge, this.$s_grad, this.$s_revers, this.$s_border));
		}
		//レビュータイトル
		var title = document.createElement('div');
		title.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		title.style.fontWeight = 'bold';
		title.appendChild(document.createTextNode(htmlDeConvert(this.$reviews[i].review_title)));
		td.appendChild(title);
		//投稿者名・投稿日時
		var nm_dt = document.createElement('div');
		nm_dt.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		nm_dt.style.color = pale;
		nm_dt.style.width = '98%';
		nm_dt.style.fontSize = (this.$fs - 1) + 'px';
		nm_dt.style.padding = '0.7em 0em 0.4em 0em';
		nm_dt.appendChild(document.createTextNode(nm_pref + htmlDeConvert(this.$reviews[i].reviewer)));
		nm_dt.appendChild(document.createElement('br'));
		nm_dt.appendChild(document.createTextNode(this.$reviews[i].regist_date));
		td.appendChild(nm_dt);
		//投稿コメント
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.textAlign = 'left';
		td.style.color = this.$fc;
		td.style.width = '50%';
		var comment = document.createElement('div');
		comment.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		var cm_org = htmlDeConvert(this.$reviews[i].review_comment);
		var cm_str = cutBytes(cm_org.substr(0, this.$rcs), this.$rcs);
		var cm_strs = cm_str.split('\\n');
		comment.style.fontSize = (this.$fs - 1) + 'px';
		comment.style.paddingRight = parseInt(this.$fs * 0.5) + 'px';
		comment.id = this.$cd + this.$reviews[i]._voice_id + '_comment';
		for(var n=0;n<cm_strs.length;n++){
			comment.appendChild(document.createTextNode(cm_strs[n]));
			if(n < cm_strs.length) comment.appendChild(document.createElement('br'));
		}
		if(cm_str != cm_org){
			var hdn;
			var anc = document.createElement('a');
			if(IE && !IE8) {
				hdn = document.createElement('<input name="hidden_comment">');
			}else{
				hdn = document.createElement('input');
			}
			hdn.type = 'hidden';
			hdn.value = cm_org;
			hdn.id = this.$cd + this.$reviews[i]._voice_id + '_hidden';

			anc.href = 'javascript:viewAllComment("' + this.$cd + this.$reviews[i]._voice_id + '")';
			anc.style.fontSize = '1em';
			anc.style.color = this.$lc;
			anc.innerHTML = (this.$rcs > 0 ? '...続きを読む' : 'コメント全文を読む');

			comment.appendChild(anc);
			comment.appendChild(hdn);
		}
		td.appendChild(comment);
		//参考になりましたか？(はいい・いいえ)
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.width = '25%';
		td.style.textAlign = 'left';
		td.style.color = pale;
		td.style.fontSize = parseInt(this.$fs * 0.9) + 'px';
		td.style.lineHeight = parseInt(this.$fs * 1.5) + 'px';
		td.style.whiteSpace = 'nowrap';
		var voteDiv = document.createElement('div');
		voteDiv.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		voteDiv.id = this.$cd + this.$reviews[i]._voice_id + '_vote';
		voteDiv.style.whiteSpace = 'nowrap';
		voteDiv.style.fontSize = td.style.fontSize;
		if(hasVoted(this.$cookie_key + this.$reviews[i]._voice_id)){
			voteDiv.appendChild(document.createElement('br'));
			voteDiv.appendChild(document.createTextNode('ご投票ありがとうございました。'));
		}else{
			voteDiv.appendChild(document.createTextNode('この' + htmlDeConvert(this.$review_caption) + 'は参考になりましたか？'));
			voteDiv.appendChild(document.createElement('br'));
			var yes = document.createElement('span');
			yes.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			yes.style.fontSize = td.style.fontSize;
			yes.style.backgroundColor = this.$vote_button_color;
			yes.style.color = 'white';
			yes.style.margin = '1em 0.2em 3em 0em';
			yes.style.padding = '0.2em 0.5em 0.1em 0.6em';
			yes.style.borderRight = '0.1em solid ' + this.$vote_button_bcolor;
			yes.style.borderBottom = '0.1em solid ' + this.$vote_button_bcolor;
			yes.style.cursor = 'pointer';
			var no = yes.cloneNode(false);
			yes.innerHTML = 'はい';
			no.innerHTML = 'いいえ';
			yes.setAttribute('onclick', IE && !IE8 ? new Function('vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', true)')
																			 : 'vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', true)');
			no.setAttribute('onclick', IE && !IE8 ? new Function('vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', false)')
																		  : 'vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', false)');
			voteDiv.appendChild(yes);
			voteDiv.appendChild(no);
		}
		td.appendChild(voteDiv);
		td.appendChild(document.createElement('br'));
		var yes_count = document.createElement('span');
		var no_count = document.createElement('span');
		yes_count.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		no_count.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		yes_count.id = this.$cd + this.$reviews[i]._voice_id + '_yes';
		no_count.id = this.$cd + this.$reviews[i]._voice_id + '_no';
		yes_count.innerHTML = (parseInt(this.$reviews[i].vote_yes_count) + (this.$reviews[i].vote_yes_inc ? parseInt(this.$reviews[i].vote_yes_inc) : 0));
		no_count.innerHTML = (parseInt(this.$reviews[i].vote_no_count) + (this.$reviews[i].vote_no_inc ? parseInt(this.$reviews[i].vote_no_inc) : 0));
		td.appendChild(document.createTextNode('(参考になった '));
		td.appendChild(yes_count);
		td.appendChild(document.createTextNode('人 / ならない '));
		td.appendChild(no_count);
		td.appendChild(document.createTextNode('人)'));
	}
	return reviewTbl;
}
/* VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV */
/* 全体のレビュー評価概要部分（縦長仕様） */
drawReview.prototype.$createScaleTableV = function(parTd){
	var scaleTbl = document.createElement('table');
	scaleTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	scaleTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	scaleTbl.setAttribute('border', '0');
	scaleTbl.style.backgroundColor = 'transparent';
	scaleTbl.style.width = '100%';
	var tr = scaleTbl.insertRow(scaleTbl.rows.length);
	var td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	td.style.textAlign = 'left';
	/* 評価尺度名称・☆スケール(総合) */
	var inTbl = document.createElement('table');
	inTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	inTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	inTbl.setAttribute('border', '0');
	inTbl.style.width = '100%';
	inTbl.style.backgroundColor = 'transparent';
	var inTr = inTbl.insertRow(inTbl.rows.length);
	var inTd = inTr.insertCell(inTr.cells.length);
	inTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	inTd.style.textAlign = 'left';
	inTd.style.fontSize = parseInt(this.$fs * this.$tx) + 'px';
	inTd.style.color = this.$tc;
	inTd.style.fontWeight = 'bold';
	inTd.style.verticalAlign = 'middle';
	inTd.style.paddingTop = parseInt(parseInt(inTd.style.fontSize) * 0.2) + 'px';
	inTd.style.whiteSpace = 'nowrap';
	
	if(this.$item_name){
		if(this.$fs * this.$tx * (this.$item_name.length + this.$scale_name.length + 1 + (this.$ruler == 0 ? this.$scale_list.length : 0)) > this.$w){
			inTd.appendChild(document.createTextNode(htmlDeConvert(this.$item_name)));
			inTr = inTbl.insertRow(inTbl.rows.length);
			inTd = inTr.insertCell(inTr.cells.length);
			inTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			inTd.style.textAlign = 'left';
			inTd.style.fontSize = parseInt(this.$fs * this.$tx) + 'px';
			inTd.style.color = this.$tc;
			inTd.style.fontWeight = 'bold';
			inTd.style.verticalAlign = 'middle';
			inTd.style.paddingTop = parseInt(parseInt(inTd.style.fontSize) * 0.2) + 'px';
			inTd.style.whiteSpace = 'nowrap';
		}else inTd.appendChild(document.createTextNode(htmlDeConvert(this.$item_name) + ' '));
	}
	
	inTd.appendChild(document.createTextNode(htmlDeConvert(this.$scale_name)));
//	inTd.style.width = parseInt(inTd.innerHTML.length * this.$fs * this.$tx) + 'px'
	inTd.style.paddingRight = '1px';

	var slist = this.$scale_list;
	var review_count = 0;
	var total_point = 0;
	for(var i=0;i<slist.length;i++){
		review_count += slist[i].count;
		total_point += (slist[i].scale_code * slist[i].count);
	}
	
	if(total_point > 0){
		//小数点以下2桁で四捨五入した値を使う
		var rate = Math.round(total_point / review_count / slist.length * 100) /100;
		/* 評価☆表示 */
		var canvasDiv;
		if(this.$ruler == 2) canvasDiv = new circleGraph(this.$scale_list, this.$cgc, this.$cgg, this.$vc, Math.round(this.$calcRadarWidth(true) * 0.8), false);
		else if(this.$ruler == 1) canvasDiv = new radarGraph(this.$scale_list, this.$cc, this.$vc, this.$calcRadarWidth(true));
		else canvasDiv = new createStarScale(this.$fs * this.$tx / 12, rate, this.$scale_list.length, this.$sc, this.$s_edge, this.$s_grad, this.$s_revers, this.$s_border);
		if(this.$ruler > 0 || this.$w - this.$innerPad * 2 < (this.$fs * this.$tx * (inTd.innerHTML.length + this.$scale_list.length + 2))){
			inTr = inTbl.insertRow(inTbl.rows.length);
		}else if(this.$ruler == 0){
			for(var i=0; i<inTbl.rows.length - 1; i++) inTbl.rows[i].cells[0].setAttribute(IE && !IE8 ? 'colSpan' : 'colspan', '2');
		}
		inTd = inTr.insertCell(inTr.cells.length);
		inTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		if(this.$ruler > 0) {
			inTd.style.textAlign = 'center';
			var in2Tbl = document.createElement('table');
			in2Tbl.setAttribute('align', 'center');
			var in2Td = in2Tbl.insertRow(0).insertCell(0);
			in2Td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			in2Td.style.width = (parseInt(canvasDiv.childNodes[0].getAttribute('width')) + 2) + 'px';
			in2Td.style.height = in2Tbl.style.width;
			inTd.appendChild(in2Tbl);
			in2Td.appendChild(canvasDiv);
		}else{
			inTd.style.textAlign = 'left';
			inTd.appendChild(canvasDiv);
		}
	}
	td.appendChild(inTbl);
	if(!this.$nsm){
		/* レビュー数：999件 */
		tr = scaleTbl.insertRow(scaleTbl.rows.length);
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.color = toNeutralColor(this.$tc, this.$bc);
		td.style.verticalAlign = (this.$ruler > 0 ? 'top' : 'middle');
		td.style.textAlign = 'right';
		td.style.whiteSpace = 'nowrap';
		td.style.paddingTop = (this.$ruler > 0 ? '0' : (CSS1 ? '0.3em' : parseInt(this.$fs * 0.3) + 'px'));
		td.style.fontSize = (this.$fs - 1) + 'px';
		td.innerHTML = '　（' + this.$review_caption + '数：' + review_count + '件）';
	}
	
	tr = scaleTbl.insertRow(scaleTbl.rows.length);
	td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	td.style.textAlign = 'right';
	td.style.paddingTop = (CSS1 ? '0.5em' : parseInt(this.$fs * 0.5) + 'px');
	td.style.fontSize = (this.$fs - 1) + 'px';
	td.style.whiteSpace = 'nowrap';
	if(this.$reviews && this.$rls < this.$reviews.length){
		var dispAll = document.createElement('span');
		dispAll.setAttribute(IE && !IE8 ? 'className' : 'class' , 'lc');
		if(this.$viewAll){
			dispAll.setAttribute('onclick', IE && !IE8 ? new Function('reviewsSizeChange("' + this.$cd + '", false)') : 'reviewsSizeChange("' + this.$cd + '",false)');
			dispAll.innerHTML = (this.$w > 150 ? '折りたたむ&#9650;' : '折たたむ&#9650;');
		}else {
			dispAll.setAttribute('onclick', IE && !IE8 ? new Function('reviewsSizeChange("' + this.$cd + '", true)') : 'reviewsSizeChange("' + this.$cd + '", true)');
			dispAll.innerHTML = this.$viewAllCap + '&#9660;';
		}
	}
	var voteReview = document.createElement('span');
	voteReview.style.paddingLeft = parseInt(this.$w / 20) + 'px';
	voteReview.setAttribute(IE && !IE8 ? 'className' : 'class' , 'lc');
	voteReview.setAttribute('onclick', IE && !IE8 ? new Function('addVoicePage("' + this.$voiceURL + '","' + this.$scale_name + '","' + this.$e + '")') : 'addVoicePage("' + this.$voiceURL + '","' + this.$scale_name + '","' + this.$e + '")');
	voteReview.innerHTML = (total_point > 0 ? '' : '最初の') + this.$review_caption + 'を記入' + (this.$w <= 180 ? '' : 'する') + '&#9650;';
	if(dispAll) td.appendChild(dispAll);
	td.appendChild(voteReview);
	
	parTd.appendChild(scaleTbl);
}
/* レビュー各行の表示(縦長仕様) */
drawReview.prototype.$createReviewTableV = function(){
	var reviewTbl = document.createElement('table');
	reviewTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', parseInt(this.$w / 75));
	reviewTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	reviewTbl.setAttribute('border', '0');
	reviewTbl.style.backgroundColor = 'transparent';
	reviewTbl.style.width = '100%';
	reviewTbl.style.marginTop = '5px';
	reviewTbl.style.backgroundColor = this.$rbc;
	reviewTbl.style.fontSize = this.$fs + 'px';
	var tr = reviewTbl.insertRow(reviewTbl.rows.length);
	var td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	/* 現在のレビュー表示順 */
	tr.style.backgroundColor = this.$rtc;
	tr.style.valign = 'bottom';
	td.style.backgroundColor = this.$rtc;
	td.style.paddingTop = '5px';
	td.style.paddingLeft = '5px';
	td.style.color = this.$fc;
	td.style.fontWeight = 'bold';
	td.style.whiteSpace = 'nowrap';
	td.style.textAlign = 'left';
	td.innerHTML = (this.$sort == 'p' ? '参考になった' : '最新の') + this.$review_caption;
	/* もう片方の表示順へのリンク */
	tr = reviewTbl.insertRow(reviewTbl.rows.length);
	tr.style.backgroundColor = this.$rtc;
	td = tr.insertCell(tr.cells.length);
	td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	td.style.backgroundColor = this.$rtc;
	td.style.textAlign = 'right';
	td.style.fontSize = (this.$fs - 1) + 'px';
	var n_order = document.createElement('span');
	var p_order = document.createElement('span');
	n_order.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	p_order.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	n_order.style.fontSize = (this.$fs - 1) + 'px';
	p_order.style.fontSize = (this.$fs - 1) + 'px';
	n_order.style.whiteSpace = 'nowrap';
	p_order.style.whiteSpace = 'nowrap';
	n_order.innerHTML = '新しい順';
	p_order.innerHTML = '参考になった順';
	if(this.$sort == 'p'){
		n_order.style.color = this.$lc;
		n_order.style.cursor = 'pointer';
		n_order.setAttribute('onclick', IE && !IE8 ? new Function('sortTypeChange("' + this.$cd + '","n")') : 'sortTypeChange("' + this.$cd + '","n")');
		n_order.innerHTML = n_order.innerHTML + '&#9660;'
		p_order.style.color = toNeutralColor(this.$tc, this.$bc);
	}else{
		p_order.style.color = this.$lc;
		p_order.style.cursor = 'pointer';
		p_order.setAttribute('onclick', IE && !IE8 ? new Function('sortTypeChange("' + this.$cd + '","p")') : 'sortTypeChange("' + this.$cd + '","p")');
		p_order.innerHTML = p_order.innerHTML + '&#9660;'
		n_order.style.color = toNeutralColor(this.$tc, this.$bc);
	}
	td.appendChild(n_order);
	td.appendChild(document.createTextNode('　　'));
	td.appendChild(p_order);
	
	/* ここからレビュー */
	if(!this.$reviews) return reviewTbl;

	var pale = toNeutralColor(this.$fc, this.$rbc);
	var nm_pref = (this.$review_caption == 'レビュー' ? 'レビュアー　' : '投稿者　');
	var rev_len = this.$viewAll || this.$reviews.length < this.$rls ? this.$reviews.length : this.$rls;
	for(var i=0;i<rev_len; i++){
		//境界線
		if(i > 0){
			tr = reviewTbl.insertRow(reviewTbl.rows.length);
			td = tr.insertCell(tr.cells.length);
			td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			td.style.height = '1px';
			td.style.paddingTop = '5px';
			td.style.textAlign = 'center';
			var line = document.createElement('b');
			line.setAttribute((IE && !IE8 ? 'className' : 'class'), 'r002');
			line.style.backgroundColor = this.$rtc;
			td.appendChild(line);
		}
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		tr.style.verticalAlign = 'top';
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.paddingTop = '1px';
		td.style.paddingLeft = '3px';
		td.style.textAlign = 'left';
		td.style.color = this.$fc;
		td.style.verticalAlign = 'top';
		if(this.$s_label){
			td.appendChild(this.$createLabel(this.$scale_list[this.$scale_list.length - this.$reviews[i].scale_code].scale_label));
		}else{
			//星スケール
			var div = document.createElement('div');
			div.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			td.appendChild(div);
			div.style.position = "relative";
			div.style.padding = "0px";
			div.style.width = (17 * 5) + 'px';
			div.style.height = '17px';
			div.appendChild(new createStarScale(this.$fs / 15, this.$reviews[i].scale_code/this.$scale_list.length, this.$scale_list.length, this.$sc, this.$s_edge, this.$s_grad, this.$s_revers, this.$s_border));
		}
		//レビュータイトル
		var title = document.createElement('div');
		title.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		title.style.fontWeight = 'bold';
		title.appendChild(document.createTextNode(htmlDeConvert(this.$reviews[i].review_title)));
		td.appendChild(title);
		//投稿者名・投稿日時
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.textAlign = 'left';
		var nm_dt = document.createElement('div');
		nm_dt.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		nm_dt.style.color = pale;
		nm_dt.style.width = '98%';
		nm_dt.style.fontSize = (this.$fs - 1) + 'px';
		nm_dt.style.padding = '0.7em 0em 0.4em 0em';
		nm_dt.style.padding = '0.7em 0em 0.4em 0em';
		nm_dt.appendChild(document.createTextNode(nm_pref + htmlDeConvert(this.$reviews[i].reviewer)));
		nm_dt.appendChild(document.createElement('br'));
		nm_dt.appendChild(document.createTextNode(this.$reviews[i].regist_date));
		td.appendChild(nm_dt);
		//投稿コメント
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.textAlign = 'left';
		td.style.color = this.$fc;
		var comment = document.createElement('div');
		comment.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		var cm_org = htmlDeConvert(this.$reviews[i].review_comment);
		var cm_str = cutBytes(cm_org.substr(0, this.$rcs), this.$rcs);
		var cm_strs = cm_str.split('\\n');
		comment.style.fontSize = (this.$fs - 1) + 'px';
		comment.style.paddingRight = (CSS1 ? '0.2em' : (this.$fs * 0.2) + 'px');
		comment.id = this.$cd + this.$reviews[i]._voice_id + '_comment';
		for(var n=0;n<cm_strs.length;n++){
			comment.appendChild(document.createTextNode(cm_strs[n]));
			if(n < cm_strs.length) comment.appendChild(document.createElement('br'));
		}
		if(cm_str != cm_org){
			var hdn;
			var anc = document.createElement('a');
			if(IE && !IE8) {
				hdn = document.createElement('<input name="hidden_comment">');
			}else{
				hdn = document.createElement('input');
			}
			hdn.type = 'hidden';
			hdn.value = cm_org;
			hdn.id = this.$cd + this.$reviews[i]._voice_id + '_hidden';

			anc.href = 'javascript:viewAllComment("' + this.$cd + this.$reviews[i]._voice_id + '")';
			anc.style.fontSize = '1em';
			anc.style.color = this.$lc;
			anc.innerHTML = (this.$rcs > 0 ? '...続きを読む' : 'コメント全文を読む');
			comment.appendChild(anc);
			comment.appendChild(hdn);
		}
		td.appendChild(comment);
		//参考になりましたか？(はいい・いいえ)
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.color = pale;
		td.style.fontSize = parseInt(this.$fs * 0.9) + 'px';
		td.style.lineHeight = parseInt(this.$fs * 1.5) + 'px';
		td.style.whiteSpace = 'nowrap';
		var voteDiv = document.createElement('div');
		voteDiv.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		voteDiv.id = this.$cd + this.$reviews[i]._voice_id + '_vote';
		voteDiv.style.fontSize = td.style.fontSize;
		voteDiv.style.width = '100%';
		voteDiv.style.textAlign = 'right';
		if(hasVoted(this.$cookie_key + this.$reviews[i]._voice_id)){
			voteDiv.appendChild(document.createElement('br'));
			voteDiv.appendChild(document.createTextNode('ご投票ありがとうございました。　'));
		}else{
//			voteDiv.style.whiteSpace = 'nowrap';
			voteDiv.style.marginTop = '7px';
			voteDiv.appendChild(document.createTextNode((this.$w <= 180 ? '' : 'この' + htmlDeConvert(this.$review_caption) + 'は') + '参考になりましたか？'));
			var btnDiv = document.createElement('div');
			btnDiv.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			btnDiv.style.width = '100%';
			btnDiv.style.textAlign = 'right';
			var yes = document.createElement('span');
			yes.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			yes.style.fontSize = td.style.fontSize;
			yes.style.backgroundColor = this.$vote_button_color;
			yes.style.color = 'white';
			yes.style.margin = '1em 0.2em 3em 0em';
			yes.style.padding = '0.2em 0.5em 0.1em 0.6em';
			yes.style.borderRight = '0.1em solid ' + this.$vote_button_bcolor;
			yes.style.borderBottom = '0.1em solid ' + this.$vote_button_bcolor;
			yes.style.cursor = 'pointer';
			var no = yes.cloneNode(false);
			yes.innerHTML = 'はい';
			no.innerHTML = 'いいえ';
			yes.setAttribute('onclick', IE && !IE8 ? new Function('vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', true)')
																			 : 'vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', true)');
			no.setAttribute('onclick', IE && !IE8 ? new Function('vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', false)')
																		  : 'vote("' + this.$voteURL + '","' + this.$cookie_key + '","' + this.$cd + '",' + this.$reviews[i]._voice_id + ', false)');
			btnDiv.appendChild(yes);
			btnDiv.appendChild(no);
			voteDiv.appendChild(btnDiv);
		}
		td.appendChild(voteDiv);
		
		tr = reviewTbl.insertRow(reviewTbl.rows.length);
		td = tr.insertCell(tr.cells.length);
		td.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		td.style.color = pale;
		td.style.fontSize = (this.$fs - 1) + 'px';
		td.style.textAlign = 'right';
		var yes_count = document.createElement('span');
		var no_count = document.createElement('span');
		yes_count.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		no_count.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
		yes_count.id = this.$cd + this.$reviews[i]._voice_id + '_yes';
		no_count.id = this.$cd + this.$reviews[i]._voice_id + '_no';
		yes_count.innerHTML = (parseInt(this.$reviews[i].vote_yes_count) + (this.$reviews[i].vote_yes_inc ? parseInt(this.$reviews[i].vote_yes_inc) : 0));
		no_count.innerHTML = (parseInt(this.$reviews[i].vote_no_count) + (this.$reviews[i].vote_no_inc ? parseInt(this.$reviews[i].vote_no_inc) : 0));
		td.appendChild(document.createTextNode('(参考になった '));
		td.appendChild(yes_count);
		td.appendChild(document.createTextNode('人 / ならない '));
		td.appendChild(no_count);
		td.appendChild(document.createTextNode('人)'));
	}
	return reviewTbl;
}
/* 評価値のラベルの表示（2010/01追加） */
drawReview.prototype.$createLabel = function(cap){
	var div = document.createElement('div');
	div.style.whiteSpace = 'nowrap';
	div.style.color = this.$fc;
	div.style.fontSize = (this.$fs - 1) + 'px';
	div.innerHTML = cap;
	return div;
}
/* レーダーチャートの横幅を計算 */
drawReview.prototype.$calcRadarWidth = function(vlong){
	var rw = 200;
	if(vlong){
		if(this.$rw){
			if(this.$w - (this.$innerPad + 5) * 2 > this.$rw) rw = this.$rw;
			else rw = this.$w - (this.$innerPad + 5) * 2;
		}else if(this.$w - (this.$innerPad + 5) * 2 > 200){
			rw = 200;
		}else{
			rw = this.$w - (this.$innerPad + 5) * 2;
		}
	}else{
		if(this.$rw){
			if(this.$w / 2 - (this.$innerPad + 5) < this.$rw) rw = this.$w / 2 - (this.$innerPad + 5);
			else rw = this.$rw;
		}else if(this.$w / 2 - (this.$innerPad + 5) > 200){
			rw = 200;
		}else{
			rw = this.$w / 2 - (this.$innerPad + 5);
		}
	}
	
	if(rw < 70) rw = 70;
	
	return rw;
}
function htmlDeConvert(str){
	return str.replace(/&#x3c;/g,"<").replace(/&#x3e;/g,">").replace(/&#x5c;/g, "\\").replace(/&#x22;/g, "\"").replace(/&#x26;/g, "&");
}
/* 本文全文表示 */
function viewAllComment(id){
	var comment = document.getElementById(id + '_comment');
	var cm_strs = document.getElementById(id + '_hidden').value.split('\\n');
	while(comment.childNodes.length > 0) comment.removeChild(comment.childNodes[0]);
	for(var n=0;n<cm_strs.length;n++){
		comment.appendChild(document.createTextNode(cm_strs[n]));
		if(n < cm_strs.length) comment.appendChild(document.createElement('br'));
	}
}
/* 全レビュー表示 ・折りたたみ*/
function reviewsSizeChange(cd, all){
	var jsn;
	for(var i=0;i<jsns.length;i++) if(jsns[i].cd == cd) { jsn = jsns[i]; break; }
	
	jsn.viewAll = all;
	new drawReview(jsn, false);
}
/* 並び順の変更 */
function sortTypeChange(cd, type){
	var jsn;
	for(var i=0;i<jsns.length;i++) if(jsns[i].cd == cd) { jsn = jsns[i]; break; }
	jsn.sort = type;
	new drawReview(jsn, false);
}
/* レビューリストの並び順を参考になる順に */
function orderPoint(a, b){
	if(Number(b.vote_yes_count) + (b.vote_yes_inc ? Number(b.vote_yes_inc) : 0) != Number(a.vote_yes_count) + (a.vote_yes_inc ? Number(a.vote_yes_inc) : 0))
		return  (Number(b.vote_yes_count) + (b.vote_yes_inc ? Number(b.vote_yes_inc) : 0)) - (Number(a.vote_yes_count) + (a.vote_yes_inc ? Number(a.vote_yes_inc) : 0));
	else if(Number(a.vote_no_count) + (a.vote_no_inc ? Number(a.vote_no_inc) : 0) != Number(b.vote_no_count) + (b.vote_no_inc ? Number(b.vote_no_inc) : 0))
		return (Number(a.vote_no_count) + (a.vote_no_inc ? Number(a.vote_no_inc) : 0)) - (Number(b.vote_no_count) + (b.vote_no_inc ? Number(b.vote_no_inc) : 0));
	else return b._voice_id - a._voice_id;
}
/*************************************************************************/
/*** 投稿ページ処理                             ****************************************/
/*************************************************************************/
/* レビュー投稿ページの表示 (レビューページの記入するリンクから呼び出される) */
function addVoicePage(url, scale_name, e){
	var body = document.body;
	var mask = document.createElement('div');
	mask.setAttribute(IE && !IE8 ? 'className' : 'class' , 'mask');
	mask.id = 'spgAddReviewMask';
	var cntx = document.createElement('div');
	cntx.setAttribute(IE && !IE8 ? 'className' : 'class' , 'cntx');
	cntx.id = 'spgAddReviewCntx';

	var close = document.createElement('span');
	close.setAttribute(IE && !IE8 ? 'className' : 'class' , 'maskclose');
	close.setAttribute('title', '閉じる');
	close.innerHTML = '&nbsp;×&nbsp;';
	close.setAttribute('onclick', IE && !IE8 ? new Function('subCntxRemove()') : 'subCntxRemove()');
	
	var btn = document.createElement('input');
	btn.setAttribute(IE && !IE8 ? 'className' : 'class', 'inpdef');
	btn.type = 'button';
	btn.value = '投稿する';
	btn.setAttribute('onclick', (IE && !IE8 ? new Function('addReview("' + scale_name + '"' + (e && e != 'e' ? ',"' + e + '"' : '') + ')') : 'addReview("' + scale_name + '"' + (e && e != 'e' ? ',"' + e + '"' : '') + ')'));
	btn.id = 'spgAddRevBtn';
	btn.style.visibility = 'hidden';
	var outerTbl = document.createElement('table');
	outerTbl.setAttribute('border', '0');
	outerTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	outerTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	outerTbl.style.backgroundColor = '#FFFFFF';
	outerTbl.style.width = '100%';
	outerTbl.style.height = '100%';
	var outerTr = outerTbl.insertRow(outerTbl.rows.length);
	var outerTd = outerTr.insertCell(outerTr.cells.length);
	outerTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	outerTd.style.height = '19Px';
	outerTd.style.width = '100%';
	outerTd.style.verticalAlign = 'bottom';
	outerTd.style.textAlign = 'right';
	outerTd.appendChild(close);
	
	outerTr = outerTbl.insertRow(outerTbl.rows.length);
	outerTd = outerTr.insertCell(outerTr.cells.length);
	outerTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	outerTd.style.textAlign = 'center';
	outerTd.style.height = '450px';
	outerTd.style.verticalAlign = 'middle';

	var innerTbl = document.createElement('table');
	innerTbl.setAttribute('border', '0');
	innerTbl.setAttribute(IE && !IE8 ? 'cellPadding' : 'cellpadding', '0');
	innerTbl.setAttribute(IE && !IE8 ? 'cellSpacing' : 'cellspacing', '0');
	innerTbl.setAttribute('align', 'center');
	innerTbl.style.textAlign = 'center';
	innerTbl.style.width = '405px';
	innerTbl.style.height = '340px';
	innerTbl.id = 'spgAddRevTbl';
	var innerTr = innerTbl.insertRow(innerTbl.rows.length);
	var innerTd = innerTr.insertCell(innerTr.cells.length);
	innerTr.style.height = '18px';
	innerTd.setAttribute(IE && !IE8 ? 'className' : 'class', 'voiceIn0');
	innerTd.id = 'spgAddRevTitle';
	innerTd.innerHTML = 'レビューの記入';

	innerTr = innerTbl.insertRow(innerTbl.rows.length);
	innerTd = innerTr.insertCell(innerTr.cells.length);
	innerTd.setAttribute(IE && !IE8 ? 'className' : 'class', 'voiceIn2');
	innerTd.id = 'spgAddRev';

	innerTr = innerTbl.insertRow(innerTbl.rows.length);
	innerTd = innerTr.insertCell(innerTr.cells.length);
	innerTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
	innerTd.style.textAlign = 'center';
	innerTd.appendChild(btn);
	
	outerTd.appendChild(innerTbl);
	cntx.appendChild(outerTbl);

	body.insertBefore(cntx, body.childNodes[0]);
	body.insertBefore(mask, body.childNodes[0]);
	body.setAttribute('onresize', IE && !IE8 ? new Function('subCntxSet()') : 'subCntxSet()');
	body.setAttribute('onscroll', IE && !IE8 ? new Function('subCntxSet()') : 'subCntxSet()');
	document.documentElement.setAttribute('onresize', IE && !IE8 ? new Function('subCntxSet()') : 'subCntxSet()');
	document.documentElement.setAttribute('onscroll', IE && !IE8 ? new Function('subCntxSet()') : 'subCntxSet()');
	
	subCntxSet();
	
	if(hasVoiced(url.split('spgk=')[1].split('&')[0])){
		addVoicePageInit({"review_caption":"レビュー"}, -4);
	}else {
		var script = document.createElement('script');
		script.type = 'text/javascript';
		script.id = 'spgAddRevJs';
		if(e == null){
			script.charset = 'euc-jp';
		}else{
			e = e.toLowerCase().charAt(0);
			switch(e){
				case 'u': script.charset = 'utf-8'; break;
				case 's': script.charset = 'shift_jis'; break;
				case 'j': script.charset = 'ISO-2022-JP'; break;
				default: script.charset = 'euc-jp'; break;
			}
			if(e != 'e') url += '&e=' + e;
		}
		script.src = url;
		document.getElementById('spgAddRev').appendChild(script);
	}
}
/* 投稿レビュー子画面の位置移動 */
function subCntxSet(){
	var mask = document.getElementById('spgAddReviewMask');
	var cntx = document.getElementById('spgAddReviewCntx');
	if(mask){
		var body = (CSS1 ? document.documentElement : document.body);
		var style = (IE ? body.currentStyle : getComputedStyle(body, ''));

		var ch = Number(body.clientHeight);
		var sh = Number(body.scrollHeight);
		var mh = parseInt(isNaN(style.marginTop) ? 0 : style.marginTop) + parseInt(isNaN(style.marginBottom) ? 0 : style.marginBottom);
		var mh = (isNaN(parseInt(style.marginTop)) ? 0 : parseInt(style.marginTop)) + (isNaN(parseInt(style.marginBottom)) ? 0 : parseInt(style.marginBottom));
		var h = (ch > sh ? ch : sh) - mh;
	
		var cw = Number(body.clientWidth);
		var sw = Number(body.scrollWidth);
		var mw = (isNaN(parseInt(style.marginLeft)) ? 0 : parseInt(style.marginLeft)) + (isNaN(parseInt(style.marginRight)) ? 0 : parseInt(style.marginRight));
		var w = (cw > sw ? cw : sw) - mw;
		
		var cntxH = parseInt(IE ? cntx.currentStyle.height : getComputedStyle(cntx, '').height);
		var cntxW = parseInt(IE ? cntx.currentStyle.width : getComputedStyle(cntx, '').width);

		var Top = body.scrollTop;
		var Left = body.scrollLeft;

		mask.style.height = h + 'px';
		mask.style.width = w + 'px';
		
		if(ch > cntxH) cntx.style.marginTop = ((ch - mh - cntxH) / 2 + Top) + 'px';
		if(cw > cntxW) cntx.style.marginLeft = ((cw - mw - cntxW) / 2 + Left) + 'px';
	}
}
/* 投稿レビュー子画面の非表示 */
function subCntxRemove(){
	var mask = document.getElementById('spgAddReviewMask');
	var cntx = document.getElementById('spgAddReviewCntx');
	var par = mask.parentNode;
	par.removeChild(mask);
	par.removeChild(cntx);
}
/* 投稿レビュー子画面（レビューを記入するリンク押下から呼び出される) */
function addVoicePageInit(jsn, RSLT){
	var parNode = document.getElementById('spgAddRev');
	var spgAddRevTbl = document.getElementById('spgAddRevTbl');
	var scale_code = document.getElementById('addRev_scale_code');
	
	if(!parNode) return;
	if(jsn.auth) {
		document.getElementById('spgAddRevTitle').innerHTML = 'レビューの記入にはログインが必要です。';
		authObjectPut();　//g.RcvRevVoice のResponse から呼び出される（→authSettingVoice()参照)
	}else{
		document.getElementById('spgAddRevTitle').innerHTML = 'レビューの記入';
		if(RSLT == 0 || RSLT == -2){
			if(RSLT == -2) alert( '入力された値に不正がありました。もう一度やり直してください。');
			
			if(!scale_code) {
				//星のcanvasを並べる。
				var scaleStarTd = spgAddRevTbl.insertRow(1).insertCell(0);
				scaleStarTd.setAttribute((IE && !IE8 ? 'className' : 'class') , 'voiceIn1');
				scaleStarTd.style.padding = '10px';
				scaleStarTd.style.height = '17px';
				var scaleTbl = document.createElement('table');
				scaleStarTd.appendChild(scaleTbl);
				var scaleTr = scaleTbl.insertRow(0);
				var scaleTd = scaleTr.insertCell(scaleTr.cells.length);
				scaleTd.setAttribute((IE && !IE8 ? 'className' : 'class') , 'voiceIn1');
				scaleTd.style.borderStyle = 'none';
//				scaleTd.style.width = '30px';
//				scaleTd.innerHTML = '評価';
				scaleTd.innerHTML = jsn.scale_name + '&nbsp;';
				for(var i=0;i<jsn.scale_list.length;i++){
					if(document.getElementById(jsn.spgk + '_s_label')){
						if(i == 0) {
							scaleTd.style.verticalAlign = 'top';
							scaleTd.style.paddingTop = '2px';
							scaleTd.style.paddingBottom = '2px';
							scaleTd = scaleTr.insertCell(scaleTr.cells.length);
							scaleTd.style.verticalAlign = 'top';
							scaleTd.style.lineHeight = '17px';
						}
						var scale;
						if(IE && !IE8) {
							scale = document.createElement('<input name="spgReviewScale">');
						}else{
							scale = document.createElement('input');
							scale.name = 'spgReviewScale';
						}
						scale.type = 'radio';
						scale.id = scale.name + i;
						scale.style.marginTop = '0px';
						scale.setAttribute('onclick', IE && !IE8 ? new Function('if(this.checked) changeScale(' + (i + 1) + ');') : 'if(this.checked) changeScale(' + (i + 1) + ');');
						var label = document.createElement('label');
						label.setAttribute('for', scale.id);
						label.setAttribute((IE && !IE8 ? 'className' : 'class'), 'voiceLabel');
						label.innerHTML = jsn.scale_list[jsn.scale_list.length - i - 1].scale_label;
						scaleTd.appendChild(scale);
						scaleTd.appendChild(label);
						scaleTd.appendChild(document.createElement('br'));
					}else{
						scaleTd = scaleTr.insertCell(scaleTr.cells.length);
						scaleTd.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
						scaleTd.style.width = '16px';
						scaleTd.style.height = '16px';
						scaleTd.style.position = 'relative';
						scaleTd.setAttribute('onclick', IE && !IE8 ? new Function('changeScale(' + (i + 1) + ')') : 'changeScale(' + (i + 1) + ')');
						scaleTd.setAttribute('onmouseover', IE && !IE8 ? new Function('changeAlpha(' + (i + 1) + ', true)') : 'changeAlpha(' + (i + 1) + ', true)');
						scaleTd.setAttribute('onmouseout', IE && !IE8 ? new Function('changeAlpha(' + (i + 1) + ', false)') : 'changeAlpha(' + (i + 1) + ', false)');
						
						var dv = document.createElement('div');
						dv.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
						dv.style.width = '16px';
						dv.style.height = '16px';
						dv.style.position = 'relative';
						scaleTd.appendChild(dv);
						dv.appendChild(new createStarScale(1.0, 1, 1, '#FF9933', false, false, false, false));

						var mdv = document.createElement('div');
						mdv.id = 'mask' + (i + 1).toString();
						mdv.setAttribute((IE && !IE8 ? 'className' : 'class'), 'voiceMask');
						dv.appendChild(mdv);
					}
				}
				/* formを作る */
				parNode.style.height = '250px';
				parNode.style.backgroundColor = '#e6e6fa';

				var url = null;
				var scale_code = null;
				var reviewer = null;
				var review_title = null;
				var review_comment = null;
				
				if(IE && !IE8){
					url = document.createElement('<input name="addRev_url">');
					scale_code = document.createElement('<input name="addRev_scale_code">');
					reviewer = document.createElement('<input name="addRev_reviewer">');
					review_title = document.createElement('<input name="addRev_review_title">');
					review_comment = document.createElement('<textarea name="addRev_review_comment">');
				}else{
					url = document.createElement('input');
					scale_code = document.createElement('input');
					reviewer = document.createElement('input');
					review_title = document.createElement('input');
					review_comment = document.createElement('textarea');
					url.name = 'addRev_url';
					scale_code.name='addRev_scale_code';
					reviewer.name='addRev_reviewer';
					review_title.name='addRev_review_title';
					review_comment.name='addRev_review_comment';
				}
				url.type = 'hidden';
				url.id = url.name;
				url.value = jsn.url + '?spgk=' + jsn.spgk + '&cd=spgAddRev';
				scale_code.type = 'hidden';
				scale_code.id = scale_code.name;
				scale_code.value = '0';
				reviewer.type = 'text';
				reviewer.id = reviewer.name;
				reviewer.setAttribute('maxlength', '32');
				reviewer.style.width = '438px';
				reviewer.setAttribute('onchange', IE && !IE8 ? new Function('delProhibitChar(this, 32)') : 'delProhibitChar(this, 32)');
				
				review_title.type = 'text';
				review_title.id = review_title.name;
				review_title.setAttribute('maxlength', '64');
				review_title.style.width = '438px';
				review_title.setAttribute('onchange', IE && !IE8 ? new Function('delProhibitChar(this, 64)') : 'delProhibitChar(this, 64)');

				review_comment.id = review_comment.name;
				review_comment.style.width = '438px';
				review_comment.style.height = '100px';
				review_comment.setAttribute('onchange', IE && !IE8 ? new Function('delProhibitChar(this, 512)') : 'delProhibitChar(this, 512)');

				parNode.appendChild(url);
				parNode.appendChild(scale_code);
				
				parNode.appendChild(document.createTextNode('タイトル'));
				var spn = document.createElement('span');
				spn.setAttribute((IE && !IE8 ? 'className' : 'class'), 'voiceMemo');
				spn.innerHTML = '　※ 64バイト（全角32文字）以内';
				parNode.appendChild(spn);
				parNode.appendChild(document.createElement('br'));
				parNode.appendChild(review_title);
				parNode.appendChild(document.createElement('br'));
				parNode.appendChild(document.createElement('br'));
				
				parNode.appendChild(document.createTextNode('コメント'));
				var spn = document.createElement('span');
				spn.setAttribute((IE && !IE8 ? 'className' : 'class'), 'voiceMemo');
				spn.innerHTML = '　　※ 512バイト（全角256文字）以内';
				parNode.appendChild(spn);
				parNode.appendChild(document.createElement('br'));
				parNode.appendChild(review_comment);
				parNode.appendChild(document.createElement('br'));
				parNode.appendChild(document.createElement('br'));

				parNode.appendChild(document.createTextNode('投稿者(ニックネーム)'));
				var spn = document.createElement('span');
				spn.setAttribute((IE && !IE8 ? 'className' : 'class'), 'voiceMemo');
				spn.innerHTML = '　　※ 32バイト（全角16文字）以内';
				parNode.appendChild(spn);
				parNode.appendChild(document.createElement('br'));
				parNode.appendChild(reviewer);
				parNode.appendChild(document.createElement('br'));
			}

			document.getElementById('spgAddRevBtn').style.visibility = 'visible';
			if(IE && jsn.logined && jsn.mlogin_id) {
				var mid = null;
				var mdbid = null;
				var mdbnm = null;
				if(IE && !IE8){
					mid = document.createElement('<input name="addRev_mid">');
					mdbid = document.createElement('<input name="addRev_mdbid">');
					mdbnm = document.createElement('<input name="addRev_mdbnm">');
				}else{
					mid = document.createElement('input');
					mdbid = document.createElement('input');
					mdbnm = document.createElement('input');
					mid.name = 'addRev_mid';
					mdbid.name='addRev_mdbid';
					mdbnm.name='addRev_mdbnm';
				}
				mid.type = 'hidden';
				mdbid.type = 'hidden';
				mdbnm.type = 'hidden';
				mid.id = mid.name;
				mdbid.id = mdbid.name;
				mdbnm.id = mdbnm.name;
				mid.value = jsn.mlogin_id;
				mdbid.value = jsn.mlogin_db_id;
				mdbnm.value = jsn.mlogin_db_name;
				parNode.appendChild(mid);
				parNode.appendChild(mdbid);
				parNode.appendChild(mdbnm);
			}
		}else{
			document.getElementById('spgAddRevBtn').style.visibility = 'hidden';
			var rsltMsg = document.createElement('div');
			rsltMsg.setAttribute((IE && !IE8 ? 'className' : 'class'), 'revtxtdef');
			rsltMsg.style.width = '100%';
			rsltMsg.style.color = 'red';
			rsltMsg.style.textAlign = 'center';
			if(spgAddRevTbl.rows.length > 3) spgAddRevTbl.deleteRow(1);
			while(parNode.childNodes.length > 0) parNode.removeChild(parNode.childNodes[0]);
			parNode.style.backgroundColor = 'white';
			if(RSLT > 0) {
				rsltMsg.innerHTML = 'ご投稿ありがとうございました。';	//IEじゃ無くてもサーバーの負荷減少のために書きます。(パス指定なし)
				if(cookieENABLED) document.cookie = jsn.cookie_key + "=" + new Date().getTime().toString() + "; max-age=" + (60*60*24*365*20);
			}
			else if(RSLT == -1) rsltMsg.innerHTML = 'レビュー数が上限に達したため登録が出来ませんでした。';
			else if(RSLT == -3) rsltMsg.innerHTML = '管理者によってこのレビューは削除されました。';
			else if(RSLT == -4) rsltMsg.innerHTML = '既にこのレビューにはご投稿済みです。';
			else rsltMsg.innerHTML = 'サーバーの状態が不安定なため処理を完了できませんでした。';
			
			parNode.appendChild(rsltMsg);
		}
	}
}
function changeScale(n){
	document.getElementById('addRev_scale_code').value = n;
	for(var i=1;i<=5;i++){
		var mask = document.getElementById('mask' + i.toString());
		if(!mask) break;
		if(i <= n) {
			if(IE) mask.style.filter = 'Alpha(opacity=0)'; else mask.style.opacity = '0'; 
		}else{
			if(IE) mask.style.filter = 'Alpha(opacity=60)'; else mask.style.opacity = '0.6'; 
		}
	}
}
function changeAlpha(n, over){
	var scale_code = parseInt(document.getElementById('addRev_scale_code').value);
	
	if(over && scale_code < n){
		for(var i=scale_code+1;i<=n;i++){
			var mask = document.getElementById('mask' + i.toString());
			if(IE) mask.style.filter = 'Alpha(opacity=0)'; else mask.style.opacity = '0'; 
		}
	}else if(!over && scale_code < n){
		for(var i=scale_code+1;i<=n;i++){
			var mask = document.getElementById('mask' + i.toString());
			if(IE) mask.style.filter = 'Alpha(opacity=60)'; else mask.style.opacity = '0.6'; 
		}
	}
}
/* 投稿ボタン押下 */
function addReview(scale_name, e){
	var msg = '';
	var url = document.getElementById('addRev_url').value;
	var scale_code = parseInt(document.getElementById('addRev_scale_code').value);
	var review_title = document.getElementById('addRev_review_title');
	var review_comment = document.getElementById('addRev_review_comment');
	var reviewer = document.getElementById('addRev_reviewer');
	delProhibitChar(review_title, 64);
	delProhibitChar(review_comment, 512);
	delProhibitChar(reviewer, 64);
	
	if(scale_code < 1) msg += ('「' + scale_name + '」 を選択してください。\n');
	if(review_title.value == '' || review_comment.value == '' || reviewer.value == '') msg += '入力項目はすべて必須です。';
	
	if(msg != '') {
		alert(msg);
	}else if(confirm('投稿しますがよろしいですか？')){
		var script = document.getElementById('spgAddRevJs');
		var parNode = script.parentNode;
		var mid = null;
		var src = url + '&scale_code=' + scale_code
				+ '&reviewer=' + encodeURIComponent(reviewer.value) + '&review_title=' + encodeURIComponent(review_title.value) + '&review_comment=' + encodeURIComponent(review_comment.value);
		if(IE && (mid = document.getElementById('addRev_mid')) != null)
			src += '&mlogin_id=' + encodeURIComponent(mid.value) + '&mlogin_db_id=' + encodeURIComponent(document.getElementById('addRev_mdbid').value) + '&mlogin_db_name=' + encodeURIComponent(document.getElementById('addRev_mdbnm').value);
		parNode.removeChild(script);
		var script1 = document.createElement('script');
		script1.type = 'text/javascript';
		script1.id = 'spgAddRevJs';
		if(!e){
			script1.charset = 'euc-jp';
		}else{
			e = e.toLowerCase().charAt(0);
			switch(e){
				case 'u': script1.charset = 'utf-8'; break;
				case 's': script1.charset = 'shift_jis'; break;
				case 'j': script1.charset = 'ISO-2022-JP'; break;
				default: script1.charset = 'euc-jp'; break;
			}
			if(e != 'e') src += '&e=' + e;
		}
		script1.src = src;
		parNode.appendChild(script1);
	}
}
function delProhibitChar(obj, len){
	if(obj) obj.value = cutBytes(obj.value.replace(/\t/g, "").replace(/\\/g, "￥").replace(/"/g, "”"), len);
}
/*****************************************************************/
/* 認証処理 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　*/
/*****************************************************************/
/* レビュー表示用の認証処理の追加 function */
function authSetting(key, url, authFail){
	var parDiv = document.getElementById(key);
	var msg = document.createElement('div');
	msg.style.color = 'red';
	msg.style.fontSize = '12px';
	msg.style.width = '100%';
	msg.style.textAlign = 'center';
	if(authFail) msg.innerHTML = '認証に失敗しました。';
	else msg.innerHTML =  '※表示にはログインが必要です。';
	parDiv.appendChild(msg);
	
	var hidden_url = null;
	if(IE && !IE8) hidden_url = document.createElement('<input name="hidden_url">');
	else { hidden_url = document.createElement('input'); hidden_url.name = 'hidden_url'; }
	hidden_url.id = 'hidden_' + key;
	hidden_url.type = 'hidden';
	hidden_url.value = url.split('&gl_act=t')[0];
	parDiv.appendChild(hidden_url);
	var auth0 = document.getElementById('my_area_auth0');
	var auth1 = document.getElementById('my_area_auth1');
	if(auth0){
		var auth0s = document.getElementsByName(auth0.name);
		for(var i=0;i<auth0s.length;i++){
			auth0s[i].parentNode.style.whiteSpace = 'nowrap';
			auth0s[i].parentNode.style.fontSize = '12px';
			auth0s[i].style.width = '140px';
		}
	}
	if(auth1){
		var auth1s = document.getElementsByName(auth1.name);
		for(var i=0;i<auth1s.length;i++) auth1s[i].style.width = '135px';
	}
}
/* レビュー投稿用の認証処理の追加 function */
function authSettingVoice(key, url, authFail){
	var parDiv = document.getElementById('spgAddRev');
	var msg = document.createElement('div');
	msg.style.color = 'red';
	msg.style.fontSize = '12px';
	msg.style.width = '100%';
	msg.style.textAlign = 'center';
	if(authFail) msg.innerHTML = '認証に失敗しました。';
	else msg.innerHTML =  '※表示にはログインが必要です。';
	parDiv.appendChild(msg);
	
	var hidden_url = null;
	if(IE && !IE8) hidden_url = document.createElement('<input name="hidden_url">');
	else { hidden_url = document.createElement('input'); hidden_url.name = 'hidden_url'; }
	hidden_url.id = 'hidden_spgAddRev';
	hidden_url.type = 'hidden';
	hidden_url.value = url.split('&gl_act=t')[0].split('?')[0] + '?spgk=' + key + '&cd=spgAddRev';
	parDiv.appendChild(hidden_url);
	var auth0 = document.getElementById('my_area_auth0');
	var auth1 = document.getElementById('my_area_auth1');
	if(auth0){
		var auth0s = document.getElementsByName(auth0.name);
		for(var i=0;i<auth0s.length;i++){
			auth0s[i].parentNode.style.whiteSpace = 'nowrap';
			auth0s[i].parentNode.style.fontSize = '12px';
			auth0s[i].style.width = '140px';
		}
	}
	if(auth1){
		var auth1s = document.getElementsByName(auth1.name);
		for(var i=0;i<auth1s.length;i++) auth1s[i].style.width = '135px';
	}
}
/* ログインボタン押下 */
function mareaAuth(key){
	var parDiv = document.getElementById(key);
	var child_0 = parDiv.childNodes;
	var url = document.getElementById('hidden_' + key).value;
	var suff = '';
	var msg = '';
	var encode = 'euc-jp';
	for(var i=0;i<child_0.length;i++){
		var child_1 = child_0[i].childNodes;
		for(var n=0;n<child_1.length;n++){
			if(child_1[n].id == 'my_area_auth0'){
				if(child_1[n].value.length > 0) suff += ('&' + child_1[n].name + '=' + encodeURI(child_1[n].value));
				else msg += 'IDは入力必須です。\n';
			}
			if(child_1[n].id == 'my_area_auth1'){
				if(child_1[n].value.length > 0) suff += ('&' + child_1[n].name + '=' + encodeURI(child_1[n].value));
				else msg += 'PW(パスワード)は入力必須です。';
			}
		}
	}
	if(msg.length > 0){
		alert(msg);
		return;
	}

	if(url.indexOf('&e=') > 0){
		var e = url.split('&e=')[1].charAt(0);
		if(e == 'u') encode = 'utf-8';
		if(e == 's') encode = 'shift_jis';
		if(e == 'j') encode = 'ISO-2022-JP';
	}
	
	while(parDiv.childNodes.length > 0) parDiv.removeChild(parDiv.childNodes[0]);
	var script = document.createElement('script');
	script.type = 'text/javascript';
	script.charset = encode;
	script.src = (url + '&gl_act=t' + suff);
	script.id = key + 'Js';
	parDiv.appendChild(script);
}
/*************************************************************************/
/*** クッキー処理                              ******************************************/
/*************************************************************************/
/* 参考になった(はい・いいえ)投票 */
function vote(url, cookie_key, cd, _voice_id, yes){
	var voteDiv = document.getElementById(cd.toString() + _voice_id +  '_vote');
	var outerDiv = document.getElementById('spgReviewVoteDiv');
	var frame = document.getElementById('spgReviewVote');
	if(!outerDiv){
		outerDiv = document.createElement('div');
		frame = document.createElement('iframe');
		outerDiv.id = 'spgReviewVoteDiv';
		frame.id = 'spgReviewVote';
		outerDiv.style.height = '0px';
		outerDiv.style.width = '0px';
		outerDiv.style.position = 'absolute';
		outerDiv.zIndex = '-1';
		frame.setAttribute('width', '0px');
		frame.setAttribute('height', '0px');
		frame.setAttribute(IE && !IE8 ? 'frameBorder' : 'frameborder', '0');
		frame.setAttribute('scrolling' , 'no');
		outerDiv.appendChild(frame);
	}
	voteDiv.parentNode.appendChild(outerDiv);
	frame.src = url + "&_vid=" + _voice_id + "&yes=" + yes;
	if(cookieENABLED)
		document.cookie = cookie_key + _voice_id + "=" + new Date().getTime().toString() + "; expires=" + (new Date((new Date()).getTime() + 24 * 60 * 60 * 1000)).toUTCString() + ";path=/";
	
	var jsn;
	for(var i=0;i<jsns.length;i++) if(jsns[i].cd == cd) { jsn = jsns[i]; break; }
	for(var i=0;i<jsn.reviews.length;i++){
		if(jsn.reviews[i]._voice_id == _voice_id){
			if(yes) jsn.reviews[i].vote_yes_inc = (jsn.reviews[i].vote_yes_inc ? Number(jsn.reviews[i].vote_yes_inc) : 0) + 1;
			else jsn.reviews[i].vote_no_inc = (jsn.reviews[i].vote_no_inc ? Number(jsn.reviews[i].vote_no_inc) : 0) + 1;
			break;
		}
	}

	while(voteDiv.childNodes.length > 0)voteDiv.removeChild(voteDiv.childNodes[0]);
	voteDiv.appendChild(document.createElement('br'));
	voteDiv.appendChild(document.createTextNode('ご投票ありがとうございました。　'));
	if(yes) {
		var y_count = document.getElementById(cd + _voice_id + '_yes');
		y_count.innerHTML = parseInt(y_count.innerHTML) + 1;
	}else {
		var n_count = document.getElementById(cd + _voice_id + '_no');
		n_count.innerHTML = parseInt(n_count.innerHTML) + 1;
	}
}
/* 参考になった(はい・いいえ)投票済みか */
function hasVoted(cookie_str){
	if(cookieENABLED) return (document.cookie.indexOf(cookie_str) > -1);
	return false;
}
/* レビュー投稿済みクッキー書き込み（IE用） */
function hasVoiced(key){
	if(cookieENABLED) return (document.cookie.indexOf('smp_gadget_review_key_reviewed_' + key) > -1);
	return false;
}
/********************************************************************************************/
/**************/
/* 角丸コーナー  */
/**************/
function cornerWrite(mode, type, obj, bc, ec, bold){
	var rpre;
	if(type == '3' && bold) rpre = 'r1';
	else  rpre = 'r0';
	
	/* 角丸側ヘッダ・フッタ追加 */
	var corner = document.createElement('b');
	corner.setAttribute(IE && !IE8 ? 'className' : 'class', 'rtop');
	corner.style.width = '100%';
	obj.appendChild(corner);
	
	if( mode == 'head'){
		for(var i=0; i <= 6; i++){
			var r = document.createElement('b');
			corner.appendChild(r);

			r.setAttribute(IE && !IE8 ? 'className' : 'class', rpre + '0' + i.toString());
			if(type == 3){
				r.style.backgroundColor = ec;
				if(i > 0){
					var rr = document.createElement('b');
					r.appendChild(rr);
					rr.setAttribute(IE && !IE8 ? 'className' : 'class', rpre + '1' + i.toString());
					rr.style.backgroundColor = bc;
				}
			}else { r.style.backgroundColor = bc; }
		}
	}else {
		for(var i=6; i >=0; i--){
			var r = document.createElement('b');
			corner.appendChild(r);

			r.setAttribute(IE && !IE8 ? 'className' : 'class', rpre + '0' + i.toString());
			if(type == 3){
				r.style.backgroundColor = ec;
				if(i > 0){
					var rr = document.createElement('b');
					r.appendChild(rr);
					rr.setAttribute(IE && !IE8 ? 'className' : 'class', rpre + '1' + i.toString());
					rr.style.backgroundColor = bc;
				}
			}else { r.style.backgroundColor = bc; }
		}
	}
}
/********************/
/* スタイルシートの追加 */
/********************/
function addCornerCss(){
	var rules = [[".txtdef","font-size:12px; background-color: transparent; color: inherit; width: auto; height: auto; margin: 0px; padding: 0px;"]
				, [".ancdef","font-size:12px; background-color: transparent; width: auto; height: auto; margin: 0px; padding: 0px;"]
				, [".inpdef","font-size:12px; background-color: transparent; color: black; width: auto; height: auto; margin: 0px; padding: 0px;"]
				, [".holdiv","position: absolute; z-index: 1000; text-align: left; white-space: nowrap; padding: 2px; margin: 0px; "
							+ "background-color: #eeffee; color: #ff4444; width: auto; height: auto; font-size: 12px; cursor: auto; visibility: hidden;"]
				, [".rtop","display:block; width:100%; height: auto; margin: 0px; padding: 0px;"]
				, [".r000","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 10px; line-height: 1px; font-size: 1px;"]
				, [".r001","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 7px; line-height: 1px; font-size: 1px;"]
				, [".r002","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 5px; line-height: 1px; font-size: 1px;"]
				, [".r003","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 4px; line-height: 1px; font-size: 1px;"]
				, [".r004","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 3px; line-height: 1px; font-size: 1px;"]
				, [".r005","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 2px; line-height: 1px; font-size: 1px;"]
				, [".r006","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r011","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 3px; line-height: 1px; font-size: 1px;"]
				, [".r012","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 2px; line-height: 1px; font-size: 1px;"]
				, [".r013","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r014","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r015","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r016","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r100","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 9px; line-height: 1px; font-size: 1px;"]
				, [".r101","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 7px; line-height: 1px; font-size: 1px;"]
				, [".r102","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 5px; line-height: 1px; font-size: 1px;"]
				, [".r103","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 4px; line-height: 1px; font-size: 1px;"]
				, [".r104","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 3px; line-height: 1px; font-size: 1px;"]
				, [".r105","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 2px; line-height: 1px; font-size: 1px;"]
				, [".r106","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 1px; line-height: 1px; font-size: 1px;"]
				, [".r112","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 5px; line-height: 1px; font-size: 1px;"]
				, [".r113","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 4px; line-height: 1px; font-size: 1px;"]
				, [".r114","display: block; overflow: hidden; padding: 0px; width: auto; height: 1px; margin: 0 3px; line-height: 1px; font-size: 1px;"]
				, [".r115","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 2px; line-height: 1px; font-size: 1px;"]
				, [".r116","display: block; overflow: hidden; padding: 0px; width: auto; height: 2px; margin: 0 2px; line-height: 1px; font-size: 1px;"]
	];
	var style = document.createElement('style');
	style.type = 'text/css';
	style.id = 'spGadgetCornerCss';
	document.getElementsByTagName('head')[0].appendChild(style);
	if(IE) for(var i=0; i<rules.length; i++) document.styleSheets[document.styleSheets.length -1].addRule(rules[i][0] , rules[i][1] );
	else for(var i=0; i<rules.length; i++)style.sheet.insertRule(rules[i][0] + '{' + rules[i][1] + '}', style.sheet.cssRules.length);
}
/************/
/* 色関連関数 */
/************/
function isColorStr(c){
	if(isColorCode(c)) return c;
	return label2Color6(c);
}
/* 有効な色指定かを判別して、無効な場合はdefを返す */
function chkColor(_char, def) {
	if(!_char) return def;
	if(_char.charAt(0) == '#') _char = _char.substring(1);
  if(!isColorCode(_char) && !(_char = label2Color6(_char))) return def;
  return '#' + _char;
}
/* webColor ラベルから　RRGGBB文字列に */
function label2Color6(label){
	if(!label) return null;
	var webColors = 
	{"black":"000000","dimgray":"696969","gray":"808080","darkgray":"a9a9a9","silver":"c0c0c0","lightgrey":"d3d3d3","gainsboro":"dcdcdc","whitesmoke":"f5f5f5","white":"ffffff","snow":"fffafa","ghostwhite":"f8f8ff","floralwhite":"fffaf0","linen":"faf0e6","antiquewhite":"faebd7","papayawhip":"ffefd5","blanchedalmond":"ffebcd","bisque":"ffe4c4","moccasin":"ffe4b5","navajowhite":"ffdead","peachpuff":"ffdab9","mistyrose":"ffe4e1","lavenderblush":"fff0f5","seashell":"fff5ee","oldlace":"fdf5e6","ivory":"fffff0","honeydew":"f0fff0","mintcream":"f5fffa","azure":"f0ffff","aliceblue":"f0f8ff","lavender":"e6e6fa","lightsteelblue":"b0c4de","lightslategray":"778899","slategray":"708090","steelblue":"4682b4","royalblue":"4169e1","midnightblue":"191970","navy":"000080","darkblue":"00008b","mediumblue":"0000cd","blue":"0000ff","dodgerblue":"1e90ff","cornflowerblue":"6495ed","deepskyblue":"00bfff","lightskyblue":"87cefa","skyblue":"87ceeb","lightblue":"add8e6","powderblue":"b0e0e6","paleturquoise":"afeeee","lightcyan":"e0ffff","cyan":"00ffff","aqua":"00ffff","turquoise":"40e0d0","mediumturquoise":"48d1cc","darkturquoise":"00ced1","lightseagreen":"20b2aa","cadetblue":"5f9ea0","darkcyan":"008b8b","teal":"008080","darkslategray":"2f4f4f","darkgreen":"006400","green":"008000","forestgreen":"228b22","seagreen":"2e8b57","mediumseagreen":"3cb371","mediumaquamarine":"66cdaa","darkseagreen":"8fbc8f","aquamarine":"7fffd4","palegreen":"98fb98","lightgreen":"90ee90","springgreen":"00ff7f","mediumspringgreen":"00fa9a","lawngreen":"7cfc00","chartreuse":"7fff00","greenyellow":"adff2f","lime":"00ff00","limegreen":"32cd32","yellowgreen":"9acd32","darkolivegreen":"556b2f","olivedrab":"6b8e23","olive":"808000","darkkhaki":"bdb76b","palegoldenrod":"eee8aa","cornsilk":"fff8dc","beige":"f5f5dc","lightyellow":"ffffe0","lightgoldenrodyellow":"fafad2","lemonchiffon":"fffacd","wheat":"f5deb3","burlywood":"deb887","tan":"d2b48c","khaki":"f0e68c","yellow":"ffff00","gold":"ffd700","orange":"ffa500","sandybrown":"f4a460","darkorange":"ff8c00","goldenrod":"daa520","peru":"cd853f","darkgoldenrod":"b8860b","chocolate":"d2691e","sienna":"a0522d","saddlebrown":"8b4513","maroon":"800000","darkred":"8b0000","brown":"a52a2a","firebrick":"b22222","indianred":"cd5c5c","rosybrown":"bc8f8f","darksalmon":"e9967a","lightcoral":"f08080","salmon":"fa8072","lightsalmon":"ffa07a","coral":"ff7f50","tomato":"ff6347","orangered":"ff4500","red":"ff0000","crimson":"dc143c","mediumvioletred":"c71585","deeppink":"ff1493","hotpink":"ff69b4","palevioletred":"db7093","pink":"ffc0cb","lightpink":"ffb6c1","thistle":"d8bfd8","magenta":"ff00ff","fuchsia":"ff00ff","violet":"ee82ee","plum":"dda0dd","orchid":"da70d6","mediumorchid":"ba55d3","darkorchid":"9932cc","darkviolet":"9400d3","darkmagenta":"8b008b","purple":"800080","indigo":"4b0082","darkslateblue":"483d8b","blueviolet":"8a2be2","mediumpurple":"9370db","slateblue":"6a5acd","mediumslateblue":"7b68ee"};
	return webColors[label];
}
/* 色指定文字列の整合性チェックと変換  戻り値：'rgb(?, ?, ?)' */
function color2RGBStr(str){
	return intArr2RGBStr(color2RGBArr(str));
}
/* 色指定文字列の整合性チェックと変換 戻り値：int[3]*/
function color2RGBArr(str){
	var def = [255,255,255];
	if(!str) return def;
	if(str.charAt(0) == '#') str = str.substring(1);
	if(str.indexOf('rgb') == 0 && (str = str.replace(/rgb/g, '').replace(/ /g, '').replace(/^\(/, '').replace(/\)$/g, '').split(',')).length == 3)
		return [parseInt(str[0]) < 0 ? 0 : (parseInt(str[0]) > 255 ? 255 : parseInt(str[0]))
						,parseInt(str[1]) < 0 ? 0 : (parseInt(str[1]) > 255 ? 255 : parseInt(str[1]))
						,parseInt(str[2]) < 0 ? 0 : (parseInt(str[2]) > 255 ? 255 : parseInt(str[2]))];
	
	if(!isColorCode(str) && !(str = label2Color6(str))) return def;	/* 不整合は白を返す。 */
	return [parseInt('0x' + str.substr(0, 2)), parseInt('0x' + str.substr(2, 2)), parseInt('0x' + str.substr(4, 2))];
}
/* int[3] -> 'rgb'*/
function intArr2RGBStr(arr){
	if(typeof arr == 'object' && arr.length == 3) return 'rgb(' + arr[0].toString() + ','  + arr[1].toString() + ',' + arr[2].toString() + ')';
	return 'rgb(0, 0, 0)';
}
/* 色指定文字列かの判別 (16進6桁でなければ false) 戻り値：boolean*/
function isColorCode(str){
	if(!str || str.length != 6) return false;
  var cArr = "0123456789abcdefABCDEF";
  for (var i = 0; i < str.length; ++i) if(cArr.indexOf(str.charAt(i),0) == -1) return false;
  return true;
}
/*  */
function isGrayTone(color){
	var rgb = color2RGBArr(color);
	if(Math.abs(rgb[0] - rgb[1]) > 24 || Math.abs(rgb[0] - rgb[2]) > 24 || Math.abs(rgb[1] - rgb[2]) > 24) return false;
	return true;
}
/* 色をRGBに分解して指定された度数だけ暗い色にして返す */
function toDarkColor(color, pro){
	var rgb;
	if(typeof(color) == 'string') rgb = color2RGBArr(color);
	else rgb = color.concat();
	for(var i=0;i<rgb.length;i++) {
		if(rgb[i] == 0 && pro > 1){
			rgb[i] = parseInt(255 * (pro - 1) * 1.8);
		}else{
			rgb[i] = parseInt(rgb[i] * pro);
		}
		if(rgb[i] > 255) rgb[i] = 255;
	}
	return intArr2RGBStr(rgb);
}
/* 文字色と背景色からキチンと見える色を返す */
function toNeutralColor(fc, bc){
	var fcArr = color2RGBArr(fc, 'black');
	var bcArr = color2RGBArr(bc, 'white');
	
	var fcSum = fcArr[0] + fcArr[1] + fcArr[2];
	var bcSum = bcArr[0] + bcArr[1] + bcArr[2];
	
	if(bcSum > fcSum) {
		fcArr[0] = fcArr[0] + 30;
		fcArr[1] = fcArr[1] + 30;
		fcArr[2] = fcArr[2] + 30;
		fcSum = fcArr[0] + fcArr[1] + fcArr[2];

		while(280 > bcSum - fcSum > 350){
			if(280 > bcSum - fcSum) { 
				fcArr[0] = fcArr[0] - 5;
				fcArr[1] = fcArr[1] - 5;
				fcArr[2] = fcArr[2] - 5;
			}
			if(bcSum - fcSum > 350){
				fcArr[0] = fcArr[0] + 5;
				fcArr[1] = fcArr[1] + 5;
				fcArr[2] = fcArr[2] + 5;
			}
			fcSum = fcArr[0] + fcArr[1] + fcArr[2];
		}
	}else{
		fcArr[0] = fcArr[0] - 30;
		fcArr[1] = fcArr[1] - 30;
		fcArr[2] = fcArr[2] - 30;
		fcSum = fcArr[0] + fcArr[1] + fcArr[2];

		while(280 >  fcSum - bcSum > 350){
			if(280 > fcSum - bcSum) { 
				fcArr[0] = fcArr[0] + 5;
				fcArr[1] = fcArr[1] + 5;
				fcArr[2] = fcArr[2] + 5;
			}
			if(fcSum - bcSum > 350){
				fcArr[0] = fcArr[0] - 5;
				fcArr[1] = fcArr[1] - 5;
				fcArr[2] = fcArr[2] - 5;
			}
			fcSum = fcArr[0] + fcArr[1] + fcArr[2];
		}
	}

	return 'rgb(' + (fcArr[0] < 0 ? 0 : fcArr[0]) + ',' + (fcArr[1] < 0 ? 0 : fcArr[1]) + ',' + (fcArr[2] < 0 ? 0 : fcArr[2]) + ')';
}
/**************/
/* 文字操作関連 */
/**************/
/* バイト数制限内に収まるよう文字列後尾をカット */
function cutBytes(val, len){
	while(bytes(val) > len) val = val.substr(0, val.length - 1);
	return val;
}
/* 文字バイト長 */
function bytes(str){
  var byteCount = 0;
  for (var i = 0; i < str.length; ++i) {
    var targetChar = str.charAt(i);
    if(checkIsZenkaku(targetChar)) byteCount += 2;//全角の場合
    else byteCount += 1;//半角の場合
  }
  return byteCount;
}
/* 半角英数記号、半角カタカナの場合はfalseを返す */
function checkIsZenkaku(_char) {
  for (var i = 0; i < _char.length; ++i) {
    var charCode = _char.charCodeAt(i);
    if (charCode < 256 || (charCode >= 0xff61 && charCode <= 0xff9f)) return false;
  }
  return true;
}
var review=new drawReview({"regist_date":"2009-10-04 12:01:30.852299","default_open":"t","_review_id":"1","field_name_map":"_REVIEW_ID:f000069813,CATEGORY_CD:f000069814,SCALE_CODE:f000069815,SCALE_CODE_NAME:f000069816,REVIEWER:f000069817,REVIEW_TITLE:f000069818,REVIEW_COMMENT:f000069819,OPEN:f000069820,VOTE_YES_COUNT:f000069821,VOTE_NO_COUNT:f000069822,MLOGIN_DB_ID:f000069823,MLOGIN_DB_NAME:f000069824,MLOGIN_ID:f000069825,REGIST_DATE:f000069826,LAST_UPDATE:f000069827","who":"keiyo-it3","item_name":"ユーザー様のぶっちゃけ製品レビュー!! SVR-41Ni","last_update":"2010-03-24 11:23:49.981683","open_level":"0","review_caption":"レビュー","voice_table":"d000005448","max_voices":"50","scale_name":"オススメ度","category_cd":"1", "spgk":"6BXEFkodl-o-qdl-l", "cd":"6BXEFkodl-o-qdl-l", "cc":"FF0000", "e":"u", "ruler":"1", "s_egrb":"0111", "itmnm":"t","cookie_key":"smp_gadget_review_key_6BXEFkodl-o-qdl-l", "url":"http://reg31.smp.ne.jp/spiral/servlet/g.RcvReview?spgk=6BXEFkodl-o-qdl-l&cd=6BXEFkodl-o-qdl-l&e=u&ruler=1&s_egrb=0111&cc=FF0000&itmnm=t", "reg_url":"http://reg31.smp.ne.jp/spiral/servlet/g.RcvRevVoice?spgk=6BXEFkodl-o-qdl-l&cd=spgAddRev","reviews":[{"mlogin_db_id":"0","review_comment":"画質のクオリティーもさる事ながら、&#x5c;n小型化がここまで進んでいることに驚きました。&#x5c;n&#x5c;n満足です。","scale_code":4,"regist_date":"2010/06/28","reviewer":"矢作","_review_id":"1","scale_code_name":"よい","vote_no_count":0,"last_update":"2010年6月28日 10時20分41秒","open":"1","review_title":"大変満足しています。","_voice_id":23,"category_cd":"1","vote_yes_count":0},{"mlogin_db_id":"0","review_comment":"aaa","scale_code":3,"regist_date":"2010/06/10","reviewer":"aaa","_review_id":"1","scale_code_name":"ふつう","vote_no_count":1,"last_update":"2010年6月10日 20時27分53秒","open":"1","review_title":"aaa","_voice_id":22,"category_cd":"1","vote_yes_count":0},{"mlogin_db_id":"0","review_comment":"今製品情報をいろいろ比較していますが、&#x5c;n価格で安いほうに決めて良いか迷ってます。。","scale_code":2,"regist_date":"2010/01/29","reviewer":"ガメラ","_review_id":"1","scale_code_name":"びみょう","vote_no_count":14,"last_update":"2010年2月6日 11時07分25秒","open":"1","review_title":"買おうか迷ってます","_voice_id":13,"category_cd":"1","vote_yes_count":4},{"mlogin_db_id":"0","review_comment":"商品の画質は十分綺麗でした&#x5c;n&#x5c;nこちらの商品に合うレコーダーをメールで問い合わせましたら色々とご教授して頂きました&#x5c;n&#x5c;n店舗の対応も良かったので、五つ星にしました。&#x5c;n","scale_code":5,"regist_date":"2009/10/06","reviewer":"hitman","_review_id":"1","scale_code_name":"よい","vote_no_count":2,"last_update":"2009年10月6日 16時07分18秒","open":"1","review_title":"びっくりしました","_voice_id":1,"category_cd":"1","vote_yes_count":32}],"scale_list":[{"scale_code":5,"scale_label":"とてもよい","count":1},{"scale_code":4,"scale_label":"よい","count":1},{"scale_code":3,"scale_label":"ふつう","count":1},{"scale_code":2,"scale_label":"びみょう","count":1},{"scale_code":1,"scale_label":"よくない","count":0}]},false);