var STATE_GROUP_NAME = 'state';
var DISTANCE_GROUP_NAME = 'distance';

var allPlaceItems = new Array();


//Util to remove an item from an array
function removeItemFromArray(array, item) {
  for (var i = 0; i < array.length; i++) {
    if (array[i] == item) {
      array.splice(i, 1);
      return array;
    }
  }
  return array;
}


var stateRoot; //Root for the state menu
var distanceRoot; //Root for the distance results

//Render the full menu
function renderStateMenu(allItems) {
  stateRoot = allItems[0];
  addMenuItem(stateRoot , 0, '#state');
  stateRoot.selected();
}

function createDistanceResults(placeItems) {
  clearLastSelected(DISTANCE_GROUP_NAME);
  clearAllMenuItemsInGroup(DISTANCE_GROUP_NAME);
  
  $('#distance-results').text('');   

  distanceRoot = new MenuItem("Results", null, 'distance_results', DISTANCE_GROUP_NAME);
  for(var i = 0; i < placeItems.length; i++) {
    var pi = placeItems[i];
    var mi = new MenuItem(pi.name, pi, pi.id, DISTANCE_GROUP_NAME);
    mi.setDistance(pi.search_distance);
    distanceRoot.addChild(mi);
    addAttraction(pi);
  }
  addMenuItem(distanceRoot, 0, '#distance-results');
  distanceRoot.selected();
}

function sortDistance(pi1,pi2) {
  return pi1.search_distance - pi2.search_distance;
}

//Add a menu item to the screen
function addMenuItem(item, depth, rootContainer) {
	
  renderMenuItem(item, depth, rootContainer);
  var num_children = item.getNumChildren();
  for(var i = 0; i < num_children; i++) {
    addMenuItem(item.getChild(i), depth + 1, rootContainer);
  }
}

function buildAreas() {	
	
  var mis = [];
  mis[0] = new MenuItem("All", null, "0", STATE_GROUP_NAME);

  //Create all of the menu items
  for (var i = 0; i < areas.length; i++) {
    var area = areas[i];
    mis[area[area_id]] = new MenuItem(area[area_name], null, area[area_id], STATE_GROUP_NAME);
  }

  //Then set up the relationships
  for (var i = 0; i < areas.length; i++) {
    var area = areas[i];
    if(area[area_parent_id] != null) {
      mis[area[area_parent_id]].addChild(mis[area[area_id]]);
    } else {
      mis[0].addChild(mis[area[area_id]]);
    }
  }	
}

function buildResorts() {
  //Create all of the menu items
  for (var i = 0; i < resorts.length; i++) {
    var resort = resorts[i];
    var pi = new PlaceItem(resort)
    allPlaceItems.push(pi);
    var mi = new MenuItem(pi.name, pi, pi.id, STATE_GROUP_NAME);
    //Add the place to its category
    getMenuItem(pi.area_id, STATE_GROUP_NAME).addChild(mi);
  }
  showAllPlaceItems();
}


//Convert a set of MenuItems into a JQuery selector list for the elements
function getJQueryIdList(menu_item_array) {
  var str = "";
  for(var i = 0; i < menu_item_array.length; i++) {
    if (menu_item_array[i] != null) {
      if (i != 0) {
        str = str + ",";
      }
      str = str + "#" + menu_item_array[i].getIdCode();
    }
  }
  return str;
}


///////////////////
//TABS           //
///////////////////

function setupTabs() {
  $(function() {
    $('#tab-container > ul').tabs({ 
      fx: { opacity: 'toggle', duration: 170}, 
      show: function(ui) {
        var tab = ui.panel.id;
        if (tab == 'distance') {
          distanceTabSelectedEvent();
        } else if (tab == 'state') {
          stateTabSelectedEvent();
        } else {
          alert('Other tab - ' + tab);
        }
      }
    });
  });
  $('#tab-container').show();
}

function stateTabSelectedEvent() {
  clearMarkers();
  showAllPlaceItems();
  selectLastSelected(STATE_GROUP_NAME);
}


function distanceTabSelectedEvent() {
  clearMarkers();
  if (distanceRoot != null) {
    setupSearchResults(home_marker.getPoint());
    setZoomToBounds();
    selectLastSelected(DISTANCE_GROUP_NAME);
  }
}



$(document).ready(function(){
  show_map();
  setupTabs();

  buildAreas();
  buildResorts();

  renderStateMenu(getAllMenuItemsInGroup(STATE_GROUP_NAME));	
  resizePerformed();	
});