// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function log(message) {
  if (!log.window_ || log.window_.closed) {
    var win = window.open("", null, "width=400,height=200," +
                          "scrollbars=yes,resizable=yes,status=no," +
                          "location=no,menubar=no,toolbar=no");
    if (!win) return;
    var doc = win.document;
    doc.write("<html><head><title>Debug Log</title></head>" +
              "<body></body></html>");
    doc.close();
    log.window_ = win;
  }
  var logLine = log.window_.document.createElement("div");
  logLine.appendChild(log.window_.document.createTextNode(message));
  log.window_.document.body.appendChild(logLine);
}


//extend Number
Number.prototype.toDecimals=function(n) {
  if (this.toFixed) {
    return this.toFixed(n)
  }
  n=(isNaN(n))?
  2:
  n;
  var
  nT=Math.pow(10,n);
  function pad(s){
    s=s||'.';
    return (s.length>n)?
      s:
      pad(s+'0');
  }
  return (isNaN(this))?
  this:
  (new String(
              Math.round(this*nT)/nT
              )).replace(/(\.\d*)?$/,pad);
}

function find_ancestor_by_id(elem, needle) {
  parent = elem.parentNode;
  //alert("elem: " + elem + "\nelem.id: " + elem.id + "\nparent: " + parent + "\nparent.id: " + parent.id + "\n" + (parent.id == needle));
  if (parent == null) { return null; }
  if (parent.id == needle) {
    return parent;
  } else {
    return find_ancestor_by_id(parent, needle);
  }
}

function find_ancestor_by_classname(elem, needle) {
  parent = elem.parentNode;
  //alert("elem: " + elem + "\nelem.className: " + elem.className + "\nparent: " + parent + "\nparent.className: " + parent.className + "\n" + (parent.className == needle));
  if (parent == null) { return null; }
  if (parent.className == needle) {
    return parent;
  } else {
    return find_ancestor_by_classname(parent, needle);
  }
}

function remove_talent_row(elem) {
  talent_row = find_ancestor_by_classname(elem, "talent-row");
  new Effect.Fade(talent_row);
  setTimeout('Element.remove(talent-row)', 500);
  setTimeout('update_buttons()', 550);
}

function remove_time_sheet_row(elem) {
  time_sheet_row = find_ancestor_by_classname(elem, "time-sheet-row");
  new Effect.Fade(time_sheet_row);
  setTimeout('Element.remove(time-sheet-row)', 500);
  setTimeout('update_buttons()', 550);
}

function update_buttons() {
  buttons = $$(".remove_button");
  if (buttons.length > 1) {
    buttons.each( function(value, index) { Element.show(value) } );
  }
  else {
    buttons.each( function(value, index) { if (index==0) Element.hide(value) } );
  }
}

function update_grand_total() {
  total = 0.0;
  $$(".sheet-total").each( function (value, index) { total += parseFloat(value.value); } );
  $('grand-total').value = total.toDecimals(2);
  $('grand-total-visible').innerHTML = total.toDecimals(2);
}

function ts_id(n, id) {
  return "time_sheets[" + n + "]_" + id;
}

function ts_val(n, id) {
  //log(id);
  val = $(ts_id(n, id)).value;
  return ((val == '') ? 0 : parseFloat(val));
}

function set_ts_hidden(n, id, val) {
  $(ts_id(n, id)).value = val
  $(ts_id(n, id + '_visible')).innerHTML = val
}

function calc_time_sheet(n) {
  week_regular = 0.0;
  week_overtime = 0.0;
  week_doubletime = 0.0;
  week_flatfee = 0.0;

  days = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
  for (i=0; i<days.length; i++) {
    week_regular += ts_val(n, days[i] + "_regular");
    week_overtime += ts_val(n, days[i] + "_overtime");
    week_doubletime += ts_val(n, days[i] + "_doubletime");
    week_flatfee += ts_val(n, days[i] + "_flatfee");
  }

  rate_regular = ts_val(n, 'rate_regular');
  rate_overtime = rate_regular * 1.5
  rate_doubletime = rate_regular * 2.0

  subtotal_regular = week_regular * rate_regular
  subtotal_overtime = week_overtime * rate_overtime
  subtotal_doubletime = week_doubletime * rate_doubletime
  subtotal_flatfee = week_flatfee

  wcomp_regular = subtotal_regular * 0.2171
  wcomp_overtime = subtotal_overtime * 0.2171
  wcomp_doubletime = subtotal_doubletime * 0.2171
  wcomp_flatfee = subtotal_flatfee * 0.2171

  total_regular = subtotal_regular + wcomp_regular
  total_overtime = subtotal_overtime + wcomp_overtime
  total_doubletime = subtotal_doubletime + wcomp_doubletime
  total_flatfee = subtotal_flatfee + wcomp_flatfee

  sheet_total = total_regular + total_overtime + total_doubletime + total_flatfee

  set_ts_hidden(n, 'week_regular', week_regular.toDecimals(2));
  set_ts_hidden(n, 'week_overtime', week_overtime.toDecimals(2));
  set_ts_hidden(n, 'week_doubletime', week_doubletime.toDecimals(2));
  set_ts_hidden(n, 'week_flatfee', week_flatfee.toDecimals(2));

  set_ts_hidden(n, 'rate_overtime', rate_overtime.toDecimals(2));
  set_ts_hidden(n, 'rate_doubletime', rate_doubletime.toDecimals(2));

  set_ts_hidden(n, 'subtotal_regular', subtotal_regular.toDecimals(2));
  set_ts_hidden(n, 'subtotal_overtime', subtotal_overtime.toDecimals(2));
  set_ts_hidden(n, 'subtotal_doubletime', subtotal_doubletime.toDecimals(2));
  set_ts_hidden(n, 'subtotal_flatfee', subtotal_flatfee.toDecimals(2));

  set_ts_hidden(n, 'wcomp_regular', wcomp_regular.toDecimals(2));
  set_ts_hidden(n, 'wcomp_overtime', wcomp_overtime.toDecimals(2));
  set_ts_hidden(n, 'wcomp_doubletime', wcomp_doubletime.toDecimals(2));
  set_ts_hidden(n, 'wcomp_flatfee', wcomp_flatfee.toDecimals(2));

  set_ts_hidden(n, 'total_regular', total_regular.toDecimals(2));
  set_ts_hidden(n, 'total_overtime', total_overtime.toDecimals(2));
  set_ts_hidden(n, 'total_doubletime', total_doubletime.toDecimals(2));
  set_ts_hidden(n, 'total_flatfee', total_flatfee.toDecimals(2));

  set_ts_hidden(n, 'sheet_total', sheet_total.toDecimals(2));

  update_grand_total();
}

