// Draw CD
//****************************************************************************//

function drawCDBox( tcid, cds ) {
  if(typeof this.pos == 'undefined') this.pos = 0;

  var tc = getObjectRef( tcid );
  var imf = getObjectRef( "sqcase1" );
  var imb = getObjectRef( "sqbcase1" );

  var ctx = tc.getContext('2d');
  ctx.save();
  ctx.clearRect(0,0,1000,1000 );
  ctx.translate( 102,20);
  
  ctx.lineWidth = "3";
  ctx.lineCap = "square";
  var max = Math.PI;

  drawSide( ctx, imf, imb, 0 );
  if( cds == 3 ) {
    ctx.translate( 100,0);
    if( pos > Math.PI/2 ) {
      drawSide( ctx, imf, imb, 3*Math.PI/2 - pos );
    }else{
      drawSide( ctx, imf, imb, Math.PI );
    }
    ctx.translate( -100,0);
    if( pos < Math.PI ) {
      drawSide( ctx, imf, imb, pos );
    }else{
      drawSide( ctx, imf, imb, Math.PI );
    }
    max = 3*Math.PI/2;
  }else{
    drawSide( ctx, imf, imb, pos );
  }

  ctx.restore();
  if( pos < max ) {
    this.pos += 0.15;
    setTimeout( "drawCDBox('"+tcid+"',"+cds+")", 40 );
  }else{
    pos = 0;
  }
}

function drawSide( ctx, imf, imb, a ) {
  var ratio = 0.20;
  var len = 100;
  
  var w = len * Math.cos( a );
  var h = len * Math.sin( a ) * ratio;
  h = Math.abs( h );
  
  var fw = (w >= 0);
  var adj = fw ? 1 : -1;
  var img = fw ? imf : imb;
  
  if( !window.excanvas ) {
    // Too slow with excanvas
    for( x=0; x<= Math.abs(w); x++ ) {
      ctx.drawImage(
        img, (fw?0:len)+x*len/w,0,1,len,
        adj*(x-0.00001), -adj*h*x/w,1,len+adj*2*h*x/w
      );
    }
  }else{
    // Leaves gaps in firefox
    var sl = Math.min(5,Math.min( h+1, Math.abs(w) ));
    for( x=0; x<= sl; x++ ) {
      ctx.drawImage(
        img, (fw?0:len)+adj*x*len/sl-(fw?0:len/sl),0,len/sl,len,
        x*w/sl+(fw?0:w/sl),-(h/sl)*x,adj*w/sl,len+2*(h/sl)*x, 100,100
      );
    }
  }

  ctx.strokeStyle = "#ffffff";
  ctx.beginPath();
  ctx.moveTo( 0,0 );
  ctx.lineTo( 0,len );
  ctx.lineTo( w, len + h );
  ctx.lineTo( w, -h);
  ctx.lineTo( 0,0 );
  ctx.stroke();
}

