/*
 * TAY-TEC - Biorhythmus Support Javascript
 */
jQuery(function() {
  var canvas = null;
  var phyIdx = -1;
  var emoIdx = -1;
  var itlIdx = -1;
  var pixelsPerDay = 20;
  var moveStart = -1;

  function computeRhythm() {
    var bd = $("#bd").datepicker("getDate");
    if (! bd) {
      bd = new Date('2003-03-06');
      $("#bd").datepicker("setDate",bd);
    }
    var dd = $("#dd").datepicker("getDate");
    if (! dd) {
      dd = new Date();
      $("#dd").datepicker("setDate",dd);
    }
    var age = parseInt((dd.getTime() - bd.getTime()) / 86400000);
    if (canvas != null) {
      drawMyCanvas(canvas,age,dd);
    }
    $("#age").text(age);
    describeAge(age);
  }

  function describeAge(age) {
    var phy = age % 23;
    if (phy == 0 || phy == 11) {
      if (phyIdx != 1) {
        phyIdx = 1;
        jQuery('.biorhythm .phy').load(window.biodoc.phy[1]);
      }
    }
    else if (phy >= 1 && phy <= 10) {
      if (phyIdx != 0) {
        phyIdx = 0;
        jQuery('.biorhythm .phy').load(window.biodoc.phy[0]);
      }
    }
    else if (phyIdx != 2) {
      phyIdx = 2;
      jQuery('.biorhythm .phy').load(window.biodoc.phy[2]);
    }

    var emo = age % 28;
    if (emo == 0 || emo == 14) {
      if (emoIdx != 1) {
        emoIdx = 1;
        jQuery('.biorhythm .emo').load(window.biodoc.emo[1]);
      }
    }
    else if (emo >= 1 && emo <= 13) {
      if (emoIdx != 0) {
        emoIdx = 0;
        jQuery('.biorhythm .emo').load(window.biodoc.emo[0]);
      }
    }
    else if (emoIdx != 2) {
      emoIdx = 2;
      jQuery('.biorhythm .emo').load(window.biodoc.emo[2]);
    }

    var itl = age % 33;
    if (itl == 0 || itl == 16) {
      if (itlIdx != 1) {
        itlIdx = 1;
        jQuery('.biorhythm .int').load(window.biodoc.itl[1]);
      }
    }
    else if (itl >= 1 && itl <= 13) {
      if (itlIdx != 0) {
        itlIdx = 0;
        jQuery('.biorhythm .int').load(window.biodoc.itl[0]);
      }
    }
    else if (itlIdx != 2) {
      itlIdx = 2;
      jQuery('.biorhythm .int').load(window.biodoc.itl[2]);
    }
  }

  function drawMyCanvas(canvas,age,date) {
    var ctx = canvas.getContext('2d');
    var width = canvas.clientWidth;
    var height = canvas.clientHeight;   
    var showdays = parseInt(width / 2 / pixelsPerDay);
    ctx.drawRhythm = function(interval,color,age) {
          var base = height / 2;
          var scale = base * interval / 33 - 1;
          this.strokeStyle = color;
          this.fillStyle = color;
          this.beginPath();
          this.moveTo(0, base);
          for (var d = -showdays-1; d <= showdays+1; d++)
          {
              var arc = 2 * Math.PI * ((age + d) % interval) / interval;
              var y = base - scale * Math.sin(arc);
              var x = width / 2 + d * pixelsPerDay;
              this.lineTo(x, y);
          }
          this.lineTo(width-1, base);
          this.fill();
    };

    ctx.fillStyle = 'rgba(255,255,255,1)';
    ctx.fillRect(0,0,width-1,height-1);

    var bg = ctx.createLinearGradient(0,0,0,height);
    bg.addColorStop(0,'green');
    bg.addColorStop(0.5,'white');
    bg.addColorStop(1,'red');
    ctx.fillStyle = bg;
    ctx.fillRect(0,0,width-1,height-1);

    ctx.drawRhythm(33,'rgba(0,0,255,0.7)',age);
    ctx.drawRhythm(28,'rgba(255,0,255,0.7)',age);
    ctx.drawRhythm(23,'rgba(255,255,0,0.7)',age);

    ctx.strokeStyle = 'black';
    ctx.lineWidth = 2;
    ctx.beginPath();
    ctx.moveTo(0,height/2);
    ctx.lineTo(width-1,height/2);
    ctx.moveTo(width/2,0);
    ctx.lineTo(width/2,height-1);
    ctx.stroke();
    
    ctx.font = '10pt Arial,Helvetica,sans-serif';
    ctx.fillStyle = 'black';

    var wd = date.getDay();
    var base = height/2;
    for (var i = -showdays-1; i <= showdays; i++) {
      var x = width/2 + pixelsPerDay * i;
      if (0 == (i + wd) % 7) {
	var txt = jQuery.datepicker.formatDate("d M", new Date(date.getTime()+i*86400000));
	ctx.lineWidth = 2;
	ctx.strokeStyle = "white";
	ctx.strokeText(txt, x-12, base+20);
	ctx.fillText(txt, x-12, base+20);
	ctx.strokeStyle = "black";
	ctx.lineWidth = 4;
	len = 10;
      } else {
	ctx.lineWidth = 2;
	len = 5;
      }
      ctx.beginPath();
      ctx.moveTo(x, base - len);
      ctx.lineTo(x, base + len);
      ctx.stroke();
    }
  }

  function mouseMoveHandler(event) {
    var diff = event.pageX - moveStart;
    if ((Math.abs(diff)/pixelsPerDay) >= 1) {
      var diffDays = (diff >= 0) ? Math.floor(diff / pixelsPerDay) : Math.ceil(diff / pixelsPerDay);
      moveStart += diffDays * pixelsPerDay;
      var dd = $("#dd").datepicker("getDate");
      if (! dd) {
        $("#dd").datepicker("setDate",new Date());
      }
      var ddTime = dd.getTime() - 86400000 * diffDays;
      dd = new Date(ddTime);
      $("#dd").datepicker("setDate",dd);
      computeRhythm();
    }
  }

  function mouseDownHandler(event) {
    cvwrap.mousemove(mouseMoveHandler);
    moveStart = event.pageX;
  }


  var cvwrap = jQuery('.biorhythm canvas');
  if ("object" == typeof cvwrap && "object" == typeof cvwrap[0] && "function" == typeof cvwrap[0].getContext) {
    canvas = cvwrap[0];
    cvwrap.mousedown(mouseDownHandler);
    cvwrap.mouseup(function() { cvwrap.unbind('mousemove',mouseMoveHandler);});
    cvwrap.mouseleave(function() { cvwrap.unbind('mousemove',mouseMoveHandler);});
  }

  var form = jQuery('.biorhythm form')[0];
  jQuery('.biorhythm form .doit').bind('click',computeRhythm);

  jQuery('.hasDatepicker').datepicker("option", { changeMonth: true, changeYear: true, onSelect: computeRhythm});
  jQuery('#bd').datepicker("option", { yearRange: 'c-100:c+1' });  
  jQuery(".biorhythm .tabs").tabs();
  computeRhythm();
});


