  
var MIN_AGE = 25; // min age
var MAX_AGE = 60; // max age
var MIN_PRICE = 150000; // min median price
var MAX_PRICE = 2000000; // max median price
var MIN_TIME = 0; // min travel time to city
var MAX_TIME = 108; // min travel time to city
var PRIM_SCHOOL = false; // restrict to primary schools 
var SEC_SCHOOL = false; // restrict to primary schools 
var SHOW_CRIME = false; // show the crime levels

$(function() {

  init();
  
  // $("#slider").slider();
  $("#housepriceslider").slider({
    range:true,
    values: [MIN_PRICE, MAX_PRICE],
    min:50000,
    max:2300000,
    step:50000,
    animate: true,
    slide: function(event, ui) {
      MIN_PRICE = ui.values[0];
      MAX_PRICE = ui.values[1];
      document.getElementById('housepricevalue').innerHTML = "Median house price $"+addCommas(MIN_PRICE)+" - $"+ addCommas(MAX_PRICE);
      document.getElementById('flinklabs_livewhere').setMedianPrice(MIN_PRICE,MAX_PRICE);
      updateHash(); 
      }
  });
  document.getElementById('housepricevalue').innerHTML = "Median house price $"+addCommas(MIN_PRICE)+" - $"+ addCommas(MAX_PRICE);
  document.getElementById('flinklabs_livewhere').setMedianPrice(MIN_PRICE, MAX_PRICE);
  
  $("#traveltimeslider").slider({
    range:true,
    values: [MIN_TIME, MAX_TIME],
    min:0,
    max:108,
    step:2,
    animate: true,
    slide: function(event, ui) { 
      MIN_TIME = ui.values[0];
      MAX_TIME = ui.values[1];
      document.getElementById('traveltimevalue').innerHTML = "Commute time "+MIN_TIME+" - "+ MAX_TIME+" (mins)";
      document.getElementById('flinklabs_livewhere').setTravelTime(MIN_TIME,MAX_TIME);
      updateHash();
      }
  });
  document.getElementById('traveltimevalue').innerHTML = "Commute time "+MIN_TIME+" - "+ MAX_TIME+" (mins)";
  document.getElementById('flinklabs_livewhere').setTravelTime(MIN_TIME,MAX_TIME);
  
  
  $("#ageslider").slider({
    range:true,
    values: [MIN_AGE, MAX_AGE],
    min:20,
    max:66,
    step:2,
    animate: true,
    slide: function(event, ui) { 
      MIN_AGE = ui.values[0];
      MAX_AGE = ui.values[1];
      document.getElementById('agevalue').innerHTML = "Avg Age "+MIN_AGE+" - "+ MAX_AGE;
      document.getElementById('flinklabs_livewhere').setAge(MIN_AGE,MAX_AGE);
      updateHash();
      
      }
  });
  document.getElementById('agevalue').innerHTML = "Avg Age "+MIN_AGE+" - "+ MAX_AGE;
  document.getElementById('flinklabs_livewhere').setAge(MIN_AGE,MAX_AGE);

  if (PRIM_SCHOOL) {
    document.getElementById('primaryCheck').checked = true;
    document.getElementById('flinklabs_livewhere').setUsePrimarySchool(PRIM_SCHOOL);
  }
  if (SEC_SCHOOL) {
    document.getElementById('secondaryCheck').checked = true;
    document.getElementById('flinklabs_livewhere').setUseSecondarySchool(SEC_SCHOOL);
  }
  if (SHOW_CRIME) {
    document.getElementById('showCrimeCheck').checked = true;
    showCrime(SHOW_CRIME);
  }

});

function setPrimary(_value) {
  PRIM_SCHOOL = _value;
  document.getElementById('flinklabs_livewhere').setUsePrimarySchool(PRIM_SCHOOL);
  updateHash();
}

function setSecondary(_value) {
  SEC_SCHOOL = _value;
  document.getElementById('flinklabs_livewhere').setUseSecondarySchool(SEC_SCHOOL);
  updateHash();
}


function showCrime(_value) {
  SHOW_CRIME = _value;
  document.getElementById('flinklabs_livewhere').setShowCrime(SHOW_CRIME);
  updateHash();
}

function showLabels(_value) {
  document.getElementById('flinklabs_livewhere').setShowLabels(_value);
}

// sets all the varaibles as required
// minage, maxage, minprice, maxprice, mintime, maxtime, primaryschools, secondaryschools
function showData(a1, a2, p1, p2, t1, t2, ps, ss) {
  // alert (""+a1+", "+a2+", "+p1+", "+p2+", "+t1+", "+t2+", "+ps+", "+ss);
  MIN_AGE = parseInt(a1);
  MAX_AGE = parseInt(a2);
  MIN_PRICE = parseInt(p1);
  MAX_PRICE = parseInt(p2);
  MIN_TIME = parseInt(t1);
  MAX_TIME = parseInt(t2);
  if (parseInt(ps) == 1)
    PRIM_SCHOOL = true;
  else
    PRIM_SCHOOL = false;
  if (parseInt(ss) == 1)
    SEC_SCHOOL = true;
  else
    SEC_SCHOOL = false;
  
  // set the slider handles manually
  $( "#traveltimeslider" ).slider("values", 0, MIN_TIME);
  $( "#traveltimeslider" ).slider("values", 1, MAX_TIME);
  document.getElementById('traveltimevalue').innerHTML = "Commute time "+MIN_TIME+" - "+ MAX_TIME+" (mins)";
  
  $( "#housepriceslider" ).slider("values", 0, MIN_PRICE);
  $( "#housepriceslider" ).slider("values", 1, MAX_PRICE);
  document.getElementById('housepricevalue').innerHTML = "Median house price $"+addCommas(MIN_PRICE)+" - $"+ addCommas(MAX_PRICE);


  $( "#ageslider" ).slider("values", 0, MIN_AGE);
  $( "#ageslider" ).slider("values", 1, MAX_AGE);
  document.getElementById('agevalue').innerHTML = "Avg Age "+MIN_AGE+" - "+ MAX_AGE;

  // set the checkbox
  document.getElementById('primaryCheck').checked = PRIM_SCHOOL;
  document.getElementById('secondaryCheck').checked = SEC_SCHOOL;

  // set the java applet variables
  document.getElementById('flinklabs_livewhere').setAge(MIN_AGE, MAX_AGE);
  document.getElementById('flinklabs_livewhere').setMedianPrice(MIN_PRICE, MAX_PRICE);
  document.getElementById('flinklabs_livewhere').setTravelTime(MIN_TIME, MAX_TIME);
  document.getElementById('flinklabs_livewhere').setUsePrimarySchool(PRIM_SCHOOL);
  document.getElementById('flinklabs_livewhere').setUseSecondarySchool(SEC_SCHOOL);
  document.getElementById('flinklabs_livewhere').setShowCrime(SHOW_CRIME);

  updateHash();
}

// called when the story dropdown is selected.
function showStory(valueString) {
  // alert (valueString);
  // split the variable into components
  params = valueString.split(",");
  if (params.length == 8) {
    // call the showData function with the params from the string
    showData(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7]);
  }
}

// checks the location.hash and sets and variables as required

function init() {
  var locationHash= location.hash.toLowerCase();
  // alert(locationHash);
  
  // set the age range
  if (locationHash.match(/a1=/)) {
    var minage = locationHash.match(/a1=([^&]+)/)[1];
    minage = parseInt(minage);
    if (!isNaN(minage)) {
      MIN_AGE = minage;
    }
  }
  if (locationHash.match(/a2=/)) {
    var maxage = locationHash.match(/a2=([^&]+)/)[1];
    maxage = parseInt(maxage);
    if (!isNaN(maxage)) {
      MAX_AGE = maxage;
    }
  }
  
  // set the price range
  if (locationHash.match(/p1=/)) {
    var minprice = locationHash.match(/p1=([^&]+)/)[1];
    minprice = parseInt(minprice);
    if (!isNaN(minprice)) {
      MIN_PRICE = minprice;
    }
  }
  if (locationHash.match(/p2=/)) {
    var maxprice = locationHash.match(/p2=([^&]+)/)[1];
    maxprice = parseInt(maxprice);
    if (!isNaN(maxprice)) {
      MAX_PRICE = maxprice;
    }
  }
  
  // set the travel time
  if (locationHash.match(/t1=/)) {
    var mintime = locationHash.match(/t1=([^&]+)/)[1];
    mintime = parseInt(mintime);
    if (!isNaN(mintime)) {
      MIN_TIME = mintime;
    }
  }
  if (locationHash.match(/t2=/)) {
    var maxtime = locationHash.match(/t2=([^&]+)/)[1];
    maxtime = parseInt(maxtime);
    if (!isNaN(maxtime)) {
      MAX_TIME = maxtime;
    }
  }
  
  if (locationHash.match(/ps=/)) {
    var primschool = locationHash.match(/ps=([^&]+)/)[1];
    primschool = parseInt(primschool);
    if (primschool == 1) {
      PRIM_SCHOOL = true;
    }
  }
  
  if (locationHash.match(/ss=/)) {
    var secschool = locationHash.match(/ss=([^&]+)/)[1];
    secschool = parseInt(secschool);
    if (secschool == 1) {
      SEC_SCHOOL = true;
    }
  }
  
  if (locationHash.match(/sc=/)) {
    var showcrime = locationHash.match(/sc=([^&]+)/)[1];
    showcrime = parseInt(showcrime);
    if (showcrime == 1) {
      SHOW_CRIME = true;
    }
  }  
}

function updateHash() {
  if (PRIM_SCHOOL)
    ps = 1;
  else
    ps = 0;

  if (SEC_SCHOOL)
    ss = 1;
  else
    ss = 0;
    
  if (SHOW_CRIME)
    sc = 1;
  else
    sc = 0;
  
  location.hash = "#"+
  "p1="+MIN_PRICE+","+
  "p2="+MAX_PRICE+","+
  "t1="+MIN_TIME+","+
  "t2="+MAX_TIME+","+
  "a1="+MIN_AGE+","+
  "a2="+MAX_AGE+","+
  "ps="+ps+","+
  "ss="+ss+","+
  "sc="+sc;
  
}


