var thisform;
var bln_admin_mode;

function page_load() {
  thisform = document.frmSavings;
  bln_admin_mode = false;
  toggle_admin_boxes();
  calculate_savings();
}

function toggle_admin_mode() {
  bln_admin_mode = bln_admin_mode ? false : true;
  toggle_admin_boxes();
}

function disable_textbox(txtbox) {
  var class_name = (bln_admin_mode ? "" : "proposed");
  txtbox.className = class_name;

  if (bln_admin_mode) {
    txtbox.onfocus = null;
    txtbox.onclick = null;
  }
  else {
    txtbox.onclick = function() {
      this.blur();
    };
    txtbox.onfocus = function() {
      next = this.tabIndex;
      if (this.tabIndex >= thisform.elements.length - 1) { 
        next = 0;
      }
      thisform.elements[next].focus();
    };
  }
}

function toggle_admin_boxes() {
  disable_textbox($('savings_proposal_proposed_student_hours'));
  disable_textbox($('savings_proposal_proposed_card_cost'));
}

function send_email_validate() {
  var bolValidates;
  bolValidates = (validates_presence_of($('savings_proposal_company_name')) && validates_presence_of($('savings_proposal_company_contact_name')) && validates_presence_of($('savings_proposal_company_contact_email')));
  
  if (!bolValidates)
    alert("All the green fields are required. Please fill these out before sending.");
  
  return bolValidates;
}

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function validates_presence_of(txtbox) {
  if (txtbox.value.trim() == "")
    return false;
  else
    return true;
}

function calculate_savings() {
  // If value in textbox is NaN, make it zero
  fix_non_numeric($('savings_proposal_student_population'));
  fix_non_numeric($('savings_proposal_present_student_hours'));
  fix_non_numeric($('savings_proposal_student_salary'));
  fix_non_numeric($('savings_proposal_instructor_salary'));
  fix_non_numeric($('savings_proposal_students_per_class'));
  fix_non_numeric($('savings_proposal_present_card_cost'));
  fix_non_numeric($('savings_proposal_present_material_cost'));
  fix_non_numeric($('savings_proposal_present_other_cost'));
  fix_non_numeric($('savings_proposal_proposed_student_hours'));
  fix_non_numeric($('savings_proposal_proposed_card_cost'));
  fix_non_numeric($('savings_proposal_proposed_material_cost'));
  fix_non_numeric($('savings_proposal_proposed_other_cost'));
  check_students_per_instructor_max($('savings_proposal_students_per_class'), 12);

  // ---------- Course type dropdown ----------
  var strCourseType              = thisform.course_type.options[thisform.course_type.selectedIndex].value;
  var strCourseTypeFriendly      = thisform.course_type.options[thisform.course_type.selectedIndex].text;
  
  // ------------ Present values --------------
  var dblPresentStudents         = parseFloat($('savings_proposal_student_population').value);
  var dblPresentHours            = parseFloat($('savings_proposal_present_student_hours').value);
  var dblPresentSalary           = parseFloat($('savings_proposal_student_salary').value);
  var dblPresentInstructSalary   = parseFloat($('savings_proposal_instructor_salary').value);
  var intPresentStudentsPerClass =   parseInt($('savings_proposal_students_per_class').value);
  var dblPresentCardCost         = parseFloat($('savings_proposal_present_card_cost').value);
  var dblPresentMaterialCost     = parseFloat($('savings_proposal_present_material_cost').value);
  var dblPresentOtherCost        = parseFloat($('savings_proposal_present_other_cost').value);
  
  // ------------ Proposed values ----------------
  var dblProposedHours        = parseFloat($('savings_proposal_proposed_student_hours').value);;
  var dblProposedCardCost     = parseFloat($('savings_proposal_proposed_card_cost').value);
  var dblProposedMaterialCost = parseFloat($('savings_proposal_proposed_material_cost').value);
  var dblProposedOtherCost    = parseFloat($('savings_proposal_proposed_other_cost').value);
  
  // --------------- Auto-fills -----------------
  var dblProposedStudents       = dblPresentStudents;
  var dblProposedSalary         = dblPresentSalary;
  var intProposedStudentsPerClass = intPresentStudentsPerClass;
  var dblProposedInstructHours
  var dblProposedInstructHours  = Math.round(parseFloat(dblProposedStudents / intProposedStudentsPerClass));
  var dblProposedInstructSalary = dblPresentInstructSalary;

  // --------- Overrides for blended vs online -----------
  if (strCourseType == "online") {
    dblProposedInstructHours = 0;
    dblProposedInstructSalary = 0;
    intProposedStudentsPerClass = 0;
  }
  
  $("hidden_course_type").innerHTML            = strCourseTypeFriendly;
  $("auto_proposed_students").innerHTML        = dblProposedStudents;
  $("auto_proposed_salary").innerHTML          = dblProposedSalary;
  $("auto_proposed_instruct_hours").innerHTML  = dblProposedInstructHours;
  $("auto_proposed_instruct_salary").innerHTML = dblProposedInstructSalary;
  $('auto_proposed_students_per_class').innerHTML = intProposedStudentsPerClass;
  
  // ------------ Intermediate Calculations --------------
  //   Present
  var dblTotalStudentWages     = dblPresentHours * dblPresentSalary * dblPresentStudents;
  var dblTotalInstructCost     = 0;
  if (intPresentStudentsPerClass != 0) {
	  dblTotalInstructCost = dblPresentHours * dblPresentInstructSalary * (dblPresentStudents / intPresentStudentsPerClass);
	}
  var dblTotalCertCost = dblPresentCardCost * dblPresentStudents;
  
  //   Proposed
  var dblTotalProposedStudentWages = dblProposedStudents * dblProposedHours * dblProposedSalary;
  var dblTotalProposedInstructCost = dblProposedInstructHours * dblProposedInstructSalary;
  var dblTotalProposedCertCost     = dblProposedCardCost * dblProposedStudents;
  
  // ---------------- Totals -------------------
  //   Present
  var dblTotalPresentCost = dblTotalStudentWages + dblTotalInstructCost + dblTotalCertCost + dblPresentMaterialCost + dblPresentOtherCost;
  var dblTotalPresentCostPerStudent = 0;
  if (dblPresentStudents != 0) {
	  dblTotalPresentCostPerStudent = dblTotalPresentCost / dblPresentStudents;
	}
	
	//   Proposed
  var dblTotalProposedCost = dblTotalProposedStudentWages + dblTotalProposedInstructCost + dblTotalProposedCertCost + dblProposedMaterialCost + dblProposedOtherCost;
  var dblTotalProposedCostPerStudent = 0;
  if (dblProposedStudents != 0) {
	  dblTotalProposedCostPerStudent = dblTotalProposedCost / dblProposedStudents;
	}
  var dblSavings = dblTotalPresentCost - dblTotalProposedCost;

  // --------------- Fill totals boxes -----------------
  $("total_savings").innerHTML               = formatCurrency(dblSavings);
  $("total_savings_percent").innerHTML       = "(" + Math.round((dblSavings / dblTotalPresentCost) * 100) + "%" + ")";
  $("total_present_cost").innerHTML          = formatCurrency(dblTotalPresentCostPerStudent);
  $("total_proposed_cost").innerHTML         = formatCurrency(dblTotalProposedCostPerStudent);
  $("total_present_overall_cost").innerHTML  = formatCurrency(dblTotalPresentCost);
  $("total_proposed_overall_cost").innerHTML = formatCurrency(dblTotalProposedCost);
}

function fix_non_numeric(textbox) {
  if (isNaN(textbox.value) || textbox.value == "") {
    textbox.value = "0";
  }
}

function formatCurrency(num) {
  num = num.toString().replace(/\$|\,/g,'');

  if(isNaN(num))
    num = "0";

  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
 
  if(cents<10)
    cents = "0" + cents;
 
  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
 
  num.substring(num.length-(4*i+3));
  return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function check_students_per_instructor_max(textbox, max_size) {
  if (textbox.value > max_size) {
    textbox.value = max_size;
    alert("Sorry, but the maximum number of students per instructor mandated by the American Heart Association is " + max_size + ".");
  }
}
