var ProfileAnswer = function(ageChange, thumbs) {
  this.ageChange = ageChange;
  this.thumbs = thumbs;
}
var answers = {};
var gender;
var ageChange;
var thumbs;
var furthestPage = 1;
var pageRules = {
  1: {
    yearBorn: {
      required: true,
      number: true
    },
    gender: {
      required: true
    },
    weight: {
      required: true,
      number: true    
    },
    heightFeet: {
      required: true,
      number: true
    },
    heightInches: {       
      required: true,
      number: true
    }
  },
  2: {
    fruitsAndVeggies: {
      required: true,
      range: [0, 10]
    },
    water: {
      required: true,
      range: [0, 8]
    },
    vitamins: {
      required: true
    }
  },
  3: {
    exercise: {
      required: true,
      range: [0, 7]
    },
    mainExercise: {
      required: true
    },
    exerciseDiscomfort: {
      required: true
    }
  },
  4: {
    historyFlexible: {
      required: true
    },
    majorInjury: {
      required: true
    }
  },
  5: {
    pushups: {
      required: true
    },
    waistBend: {
      required: true
    },
    downSteps: {
      required: true,
      range: [1, 5]
    }
  }              
};
// jQuery 1.4 actually has this function in it.
function isEmptyObject(obj) {
  for(var i in obj) {
    return false;
  }
  return true;
}

function check_current_page() {
  var currentPageNumber = current_page_number();
  for (var key in pageRules[currentPageNumber]) {
    var el = jQuery('[name=' + key + ']:first');
    if (isEmptyObject(el.rules())) {
      el.rules("add", pageRules[currentPageNumber][key]);
    }
  }
  return validator.form();  
}
function move_to_page(pageNumber) {
  if (!check_current_page()) {
    return false;
  }
  var currentPageNumber = current_page_number();  
  jQuery.globalEval("age_calc_profile" + currentPageNumber + "();")
  if (furthestPage < pageNumber) {
    furthestPage = pageNumber;
  }
  for (var i = 1; i < furthestPage; i++) {
    $('#ageprofile_' + i + ' .link_header').each(function(idx) {
      if (idx < furthestPage) {
        if(!$(this).hasClass("blue") && !$(this).hasClass("orange")) {
          $(this).addClass("blue");
          $(this).click(function() {
            window.location.hash = '#' + (idx + 1);
          })
        }
      }
    })
  }
  window.location.hash = '#' + pageNumber;
  jQuery('html, body').animate({scrollTop:0}, 'slow');
  
}
function current_page_number() {
  var currentPage = $('.profile_page:visible');
  var cutAt = currentPage.attr("id").indexOf("_") + 1;
  return parseInt(currentPage.attr("id").substring(cutAt));
}
function calc_bmi() {
  // BMI = (weight * 703) / (height in inches ^2)
  var heightFeet = parseInt(jQuery('[name=heightFeet]').val());
  var heightInches = parseInt(jQuery('[name=heightInches]').val());
  var weight = parseInt(jQuery('[name=weight]').val());
  var bmiWeight = weight * 703;
  var bmiHeight = (heightFeet * 12) + heightInches;
  bmiHeight = bmiHeight * bmiHeight;
  var bmiFloat = bmiWeight / bmiHeight;
  // Javascript has problems with floating point math.
  var floorBmi = Math.floor(bmiFloat);
  var pnt = Math.round((bmiFloat - floorBmi) * 10);
  var bmi = floorBmi + "." + pnt;
  jQuery('[name=bmi]').val(bmi);
}
// Eesh!
function age_calc_profile1() {
  gender = jQuery('[name=gender]:checked').val();
  var yearBorn = parseInt(jQuery('[name=yearBorn]').val());
  var now = new Date();
  // Not exactly, but close enough.
  var age = now.getFullYear() - yearBorn;
  jQuery('[name=age]').val(age);
  thumbs = "up";
  if (age < 40) {
    ageChange = 0;
    thumbs = "up";
  } else if (40 <= age && age <= 49) {
    ageChange = 1;
    thumbs = 'down';
  } else if (50 <= age && age <= 59) {
    ageChange = 2;
    thumbs = 'down';
  } else if (60 <= age) {
    ageChange = 3;
    thumbs = 'down';
  }
  answers['age'] = new ProfileAnswer(ageChange, thumbs);
}

function age_calc_profile2() {
  var fruitsnveggies = jQuery('[name=fruitsAndVeggies]:checked').val();
  if (fruitsnveggies <= 4) {
    thumbs = 'down';
    ageChange = .5;
  } else if (fruitsnveggies >= 5) {
    thumbs = "up";
    ageChange = -.5;
  }
  answers['fruitsnveggies'] = new ProfileAnswer(ageChange, thumbs);
  
  var water = jQuery('[name=water]:checked').val();
  if (water <= 3) {
    ageChange = .5;
    thumbs = "down";
  } else {
    thumbs = "up";
  }
  if (4 <= water && water <= 6) {
    ageChange = 0;
  } else if (water >= 7) {
    ageChange = -.5;
  }
  answers['water'] = new ProfileAnswer(ageChange, thumbs);

  ageChange = 0;
  // No vitamins at all = 2 more years for your joints!
  if (jQuery('[name=vitamins][value=none]:checked').length == 1) {
    ageChange += 2;
    thumbs = "down";
  } else {
    var gc = 0;
    jQuery('[name=vitamins]:checked').each(function(ind, val) {
      if (val.value == "chondroitin" || val.value == "glucosamine") {
        gc--;
      } else {
        // You only get a maximum of 1 year taken off your age for any number of vitamins that aren't
        // glucosamine and chondroitin
        if (ageChange != -1) {
          ageChange += -1;
          thumbs = "up";
        }
      }
    });
    if (gc == -2) {
      ageChange += gc;
    }
  }
  if (ageChange <= 0) {
    thumbs = "up";
  } else {
    thumbs = "down";
  }
  answers['vitamins'] = new ProfileAnswer(ageChange, thumbs);
  calc_bmi();
}

function age_calc_profile3() {
  // Exercise calculation -- BEGIN
  ageChange = 0;
  var exercise = jQuery('[name=exercise]:checked').val() == "undefined" ? 0 : parseInt(jQuery('[name=exercise]').val());
  var mainExercise = jQuery('[name=mainExercise]:checked').val() == "undefined" ? 0 : jQuery('[name=mainExercise]:checked').val();
  if (exercise == 0) {
    ageChange = 2;
    thumbs = "down";
  } else {
    if (exercise > 0 && exercise <= 3) {
      thumbs = "up";
      if (mainExercise == "aerobics" || mainExercise == "walking" || mainExercise=="biking"
        || mainExercise == "stairMaster" || mainExercise == "golf" || mainExercise=="yoga" 
        || mainExercise == "swimming" || mainExercise == "running") {
        ageChange += -2;
      } else if (mainExercise == "hiking" || mainExercise=="weights" || mainExercise == "basketball"
        || mainExercise == "other") {
        ageChange += -1;
      }
    } else if (exercise > 3 && exercise <= 7) {
      if (mainExercise == "weights" || mainExercise == "other") {
        ageChange += -1
      }
      if (mainExercise == "aerobics" || mainExercise == "stairMaster" || mainExercise == "golf"
        || mainExercise == "hiking" || mainExercise == "running" || mainExercise == "basketball") {
        ageChange += -2;
      } else if (mainExercise == "walking" || mainExercise == "biking" || mainExercise == "yoga" 
        || mainExercise == "swimming") {
        ageChange += -3;
      }
    }
  }
  answers['exercise'] = new ProfileAnswer(ageChange, thumbs);
  // Exercise calculation -- END
  
  // Exercise discomfort calculation -- BEGIN
  var exerciseDiscomfort = jQuery('[name=exerciseDiscomfort]:checked').val() == "undefined" ? 0 : jQuery('[name=exerciseDiscomfort]:checked').val();
  if (exerciseDiscomfort <= 2) {
    ageChange = -2;
  } else if (exerciseDiscomfort == 3) {
    ageChange = -1;
  } else if (exerciseDiscomfort >= 4 && exerciseDiscomfort <= 6) {
    ageChange = 0;
  } else if (exerciseDiscomfort == 7 || exerciseDiscomfort == 8) {
    ageChange = 1;
  } else {
    ageChange = 2;
  }
  if (ageChange <= 0) {
    thumbs = "down";
  } else {
    thumbs = "up";
  }
  answers['exerciseDiscomfort'] = new ProfileAnswer(ageChange, thumbs);
  // Exercise discomfort calculation -- END
  
  furthestPage = 4;
  window.location.hash = '#4';
  jQuery('html, body').animate({scrollTop:0}, 'slow');
  
}
function age_calc_profile4() {
  // History of flexibility calculation -- BEGIN
  var historyFlexible = jQuery('[name=historyFlexible]:checked').val();
  if (historyFlexible == "Yes") {
    ageChange = -3;
    thumbs = "up";
  } else if (historyFlexible == "No") {
    ageChange = 3;
    thumbs = "down";
  } else {
    ageChange = 0;
    thumbs = "up";
  }
  answers['historyFlexible'] = new ProfileAnswer(ageChange, thumbs);
  // History of flexibility calculation -- END
  
  // History of major injury -- BEGIN
  var majorInjury = jQuery('[name=majorInjury]:checked').val();
  if (majorInjury == "Yes") {
    ageChange = 3;
    thumbs = "down";
  } else if (majorInjury == "No") {
    ageChange = 0;
    thumbs = "up";
  }
  answers['majorInjury'] = new ProfileAnswer(ageChange, thumbs);
  // History of major injury -- END  
}

function age_calc_profile5() {
  // Pushups calculation -- BEGIN
  var pushups = jQuery('[name=pushups]:checked').val();
  if (pushups == "0") {
    ageChange = 1;
    thumbs = "down";
  } else if (pushups == "1-10") {
    ageChange = 0;
    thumbs = "up";
  } else if (pushups == "11-19" || "20") {
    ageChange = -1;
    thumbs = "up";
  }
  answers['pushups'] = new ProfileAnswer(ageChange, thumbs);
  // Pushups calculation -- END
  
  // Waist bend calculation -- BEGIN
  var waistBend = jQuery('[name=waistBend]:checked').val();
  if (waistBend == "knees") {
    ageChange = 1;
    thumbs = "down";
  } else if (waistBend == "calves") {
  //calves is now labelled as shins in the form - sc
    ageChange = 1;
    thumbs = "down";
  } else if (waistBend == "ankles") {
    ageChange = 0;
    thumbs = "up";
  } else if (waistBend == "toes") {
    ageChange = -1;
    thumbs = "up";
  } else if (waistBend == "floor") {
    ageChange = -1;
    thumbs = "up";
  }
  answers['waistBend'] = new ProfileAnswer(ageChange, thumbs);
  // Waist bend calculation -- END
  
  // Down a flight of steps calculation -- BEGIN
  var flightOfSteps = parseInt(jQuery('[name=downSteps]:checked').val());
  if (flightOfSteps <= 2) {
    ageChange = -2;
    thumbs = "up";
  } else if (flightOfSteps == 3) {
    ageChange = -1;
    thumbs = "down";
  } else if (flightOfSteps == 4 || flightOfSteps == 5) {
    ageChange = 0;
    thumbs = "up";
  } else if (flightOfSteps == 6) {
    ageChange = 0;
    thumbs = "down";
  } else if (flightOfSteps == 7 || flightOfSteps == 8) {
    ageChange = 1;
    thumbs = "down";
  } else if (flightOfSteps > 8) {
    ageChange = 2;
    thumbs = "down";
  }
  answers['downSteps'] = new ProfileAnswer(ageChange, thumbs);
  // Down a flight of steps calculation -- END
  calculate_results();
}
function calculate_results() {
  var age = parseInt(jQuery('[name=age]').val());
  var jointAge = age;
  for (var key in answers) {
    jointAge += answers[key].ageChange;
  } 
  jQuery('[name=jointsAge]').val(jointAge);
  document.jointHealthForm.submit();
}

