/**
 * IE에서 canvas 지원이 안되기 때문에...
 */
if (!is_ie && CanvasRenderingContext2D) 
{
	/**
	 * canvas 점선 그리기
	 * @param nFromX, nFromY, nToX, nToY, arPattern
	 * 점선 모양을 pattern으로 정의하여 보냄 ex) pattern = [5,5]; 선과 공백이 균일하게 5px씩 패턴적용.   
	 */
	CanvasRenderingContext2D.prototype.dashedLineTo = function (nFromX, nFromY, nToX, nToY, arPattern) 
	{
		  var bLt = function (n1, n2) 
		  { 
			  return n1 <= n2; 
		  }
		  var bGt = function (n1, n2) 
		  { 
			  return n1 >= n2; 
		  }
		  var nCapmin = function (n1, n2) 
		  { 
			  return Math.min(n1, n2); 
		  }
		  var nCapmax = function (n1, n2) 
		  { 
			  return Math.max(n1, n2); 
		  }
		
		  var checkX = { bThereYet: bGt, nCap: nCapmin };
		  var checkY = { bThereYet: bGt, nCap: nCapmin };
		
		  if (nFromY - nToY > 0) 
		  {
		    checkY.bThereYet = bLt;
		    checkY.nCap = nCapmax;
		  }
		  if (nFromX - nToX > 0) 
		  {
		    checkX.bThereYet = bLt;
		    checkX.nCap = nCapmax;
		  }
		
		  this.moveTo(nFromX, nFromY);
		  var nOffsetX = nFromX;
		  var nOffsetY = nFromY;
		  var nIdx = 0, bDash = true;
		  while (!(checkX.bThereYet(nOffsetX, nToX) && checkY.bThereYet(nOffsetY, nToY))) 
		  {
			    var ang = Math.atan2(nToY - nFromY, nToX - nFromX);
			    var len = arPattern[nIdx];
			
			    nOffsetX = checkX.nCap(nToX, nOffsetX + (Math.cos(ang) * len));
			    nOffsetY = checkY.nCap(nToY, nOffsetY + (Math.sin(ang) * len));
			
			    if (bDash) 
			    {
			    	this.lineTo(nOffsetX, nOffsetY);	
			    }
			    else 
			    {
			    	this.moveTo(nOffsetX, nOffsetY);
			    }
			
			    nIdx = (nIdx + 1) % arPattern.length;
			    bDash = !bDash;
	  }
	}

	/**
	 * 타원그리기
	 */
	CanvasRenderingContext2D.prototype.drawEllipse = function(nX, nY, nWidth, nHeight) {
	  var nKappa = .5522848;
	      nOffsetX = (nWidth / 2) * nKappa, // control point offset horizontal
	      nOffsetY = (nHeight / 2) * nKappa, // control point offset vertical
	      nEndX = nX + nWidth,           // x-end
	      nEndY = nY + nHeight,           // y-end
	      nMiddleX = nX + nWidth / 2,       // x-middle
	      nMiddleY = nY + nHeight / 2;       // y-middle

	  this.moveTo(nX, nMiddleY);
	  this.bezierCurveTo(nX, nMiddleY - nOffsetY, nMiddleX - nOffsetX, nY, nMiddleX, nY);
	  this.bezierCurveTo(nMiddleX + nOffsetX, nY, nEndX, nMiddleY - nOffsetY, nEndX, nMiddleY);
	  this.bezierCurveTo(nEndX, nMiddleY + nOffsetY, nMiddleX + nOffsetX, nEndY, nMiddleX, nEndY);
	  this.bezierCurveTo(nMiddleX - nOffsetX, nEndY, nX, nMiddleY + nOffsetY, nX, nMiddleY);
	  this.closePath();
	}
}


