// the following three arrays provide the values for the checkbox lists

var availableCategories = [
  "Accountancy", 
  "Banking", 
  "Clerical/Admin", 
  "Company/Trust",
  "Customer Service", 
  "Finance", 
  "Funds", 
  "Graduates/School Leavers", 
  "Hospitality", 
  "HR", 
  "Insurance", 
  "IT", 
  "Legal", 
  "Other", 
  "Public Sector",  
  "Retail", 
  "Risk and Compliance", 
  "Sales/Marketing",  
  "Secretarial", 
  "Securities", 
  "Tax" 
];

var availableTypes = [
  'Contract', 
  'Permanent', 
  'Temporary', 
  'Temporary to Permanent'
];

var availableHours = [
  "Full Time", 
  "Part Time"
];

// update the following array to control the pager's 'page size' options
var sizeOptions = [5, 10, 25];

// don't edit below this comment

var filtered = [];
var categories = [];
var types = [];
var hours = [];
var output = "";

var pageSize = new Number(10);
var startIndex = new Number(0);

$(function(){

  $.blockUI.defaults.overlayCSS.opacity = '0.2';
  $.blockUI.defaults.css.border = '1px solid #54024e';

  createUi();

  $(':checkbox').live("change", function() {  

    $.blockUI( {  message: "<p>&nbsp;</p><p>Job matching in process</p><p>&nbsp;</p>" } ); 
    startIndex = 0;
    updateJobs();

  });

  $('#allbutton').click(function(){

    startIndex = 0;
 
    $(":checkbox").each(function(){
      this.checked = true;
    });

    updateJobs();
    
    return false;

  });


  $('#clearbutton').click(function(){

    clearAll();
    updateJobs();
    return false;

  });

  $('#clearcategoriesbutton').click(function(){

    clear('category');
    updateJobs();
    return false;

  });

  $('#cleartypesbutton').click(function(){

    clear('type');
    updateJobs();
    return false;

  });

  $('#clearhoursbutton').click(function(){

    clear('hours');
    updateJobs();
    return false;

  });

  $('#previous').live("click", function(){
    startIndex-=pageSize;;
    updateJobs();
    return false;
  });

  $('#next').live("click", function(){
    startIndex+=pageSize;
    updateJobs();
    return false;
  });

  $('.pageSizeOption').live("click", function(){
    pageSize = new Number( $(this).html() );
    updateJobs();
    return false;
  });
  
  var selectionsJson = $.cookie('job_selections');
  
  if (selectionsJson) {
    
    var selections = JSON.parse(selectionsJson);
    
    for (var i = 0; i < selections.length; i++) {
      
      $('[name="'+selections[i].name+'"][value="'+selections[i].value+'"]')
        .attr('checked', true);
      
    }
    
  }
  
  var selections = [];
    
    $(':checkbox:checked').each( function () {
      selections.push( { name: $(this).attr('name'), value: $(this).val() });
    });
    
    $.cookie('job_selections', JSON.stringify(selections));    

  updateJobs();

});

function clearAll() {

  startIndex = 0;
  $(":checkbox").each(function(){
    this.checked = false;
  });
  
  updateJobs();

}

function clear(name) {

  startIndex = 0;
  
  $('[name=' + name + ']').each(function(){
    this.checked = false;
  });

}

function createUi() {

  $('#mainSidebar').append($('#formTemplate').jqote());

  for (x in availableCategories) {
    $('#categoriesContainer').append( $('#checkboxTemplate').jqote( { name: "category", value: availableCategories[x] } ));
  }

  for (x in availableTypes) {
    $('#typesContainer').append( $('#checkboxTemplate').jqote( { name: "type", value: availableTypes[x] } ));
  }

  for (x in availableHours) {
    $('#hoursContainer').append( $('#checkboxTemplate').jqote( { name: "hours", value: availableHours[x] } ));
  }
  
  if (!$.cookie('job_selections')) {

    $("#typesContainer :checkbox").each(function(){
      this.checked = true;
    });
  
    $("#hoursContainer :checkbox").each(function(){
      this.checked = true;
    });
  
  }

}

function updateJobs() {
  
  // save the selections
  var selections = [];
  
  $(':checkbox:checked').each( function () {
    selections.push( { name: $(this).attr('name'), value: $(this).val() });
  });
  
  $.cookie('job_selections', JSON.stringify(selections));  
  
  // $("#itemsContainer").html('<p id="loader"><img src="/media/layout-images/loading1.gif" alt="loading..." /></p>');
  
  $.blockUI( {  message: "<p>&nbsp;</p><p>Job matching in process</p><p>&nbsp;</p>" } ); 
  window.setTimeout(updateJobsDelayed, 1000);
}

function updateJobsDelayed() {

  filtered = [];
  categories = [];
  types = [];
  hours = [];
  output = "";

  $("input[name='category']:checked").each(function(){
    categories.push($(this).val());
  });

  $("input[name='type']:checked").each(function(){
    types.push($(this).val());
  });

  $("input[name='hours']:checked").each(function(){
    hours.push($(this).val());
  });
  
  if (!all)
    all = [];

  for (var i = 0; i < all.length; i++) {
    if (shouldInclude(all[i])) {
      filtered.push(all[i]);
    }
  }

  if (filtered.length == 0) {

    output = $('#homeIntro').html();

  } else {

    output = "<p class='jobsFlash'>" + filtered.length + " jobs matched your search</p>";

    var page = filtered.slice(startIndex, startIndex + pageSize);

    for (var i = 0; i < page.length; i++) {
      output += $('#template').jqote(page[i]);
    }

    // counter
   var top = (startIndex + pageSize);
   if (top > filtered.length) top = filtered.length;

    var counter = "Displaying " + (startIndex + 1) +" to " + top + " of " + filtered.length + " item" + "s. ";  
    var previousButton = '<a href="#" id="previous">Previous Page</a>';
    var nextButton = '<a href="#" id="next">Next Page</a>';

    output += '<p id="pager"><span id="pager_button">';
    output += counter;

    if (startIndex > 0)
      output += previousButton + ' ';

    if (startIndex + pageSize < filtered.length)
      output += nextButton;

    output += ' </span><span id="pageSizeOptions">';

    for (var i = 0; i < sizeOptions.length; i++) {

      var cssclass = 'pageSizeOption';

      if (pageSize == sizeOptions[i]) {
        cssclass += " selected";
      }

      output += '<a href="#" class="'+ cssclass + '">' + sizeOptions[i] + '</a> ';

    } 

    output += '</span>';

    output += '</p>';

    
  }

  $("#itemsContainer").html(output);
  $.unblockUI();

}

function shouldInclude(job) {

  var hasCategory = false;
  var hasType = false; 
  var hasHour = false;

  for (x in categories) {
    for (y in job.Categories) {
      if (categories[x] == job.Categories[y].Name) {
        hasCategory = true;
        break;
      }
    }
  }

  for (x in types) {
    if (job.Type == types[x]) {
      hasType = true;
      break;
    }
  }

  for (x in hours) {
    if (job.Hours == hours[x]) {
      hasHour = true;
      break;
    }
  }

  return hasCategory && hasType && hasHour;

}

function getparam(key, d) {
  if (!d) d= "";
  // key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.search);
  if(qs == null)
    return d;
  else
    return qs[1];
} 


