function build_gantry_list (type, direction, items) {
	var list = [];
	$.each(items, function(i, val) { 
		if (type == "entry" && direction == "north" && gantry_data['interchanges'][val].label == "I-95-395 HOV Ramps") {
			// The good ole 'Do nothing' placeholder cuz I'm too lazy and rushed to try and figure out why "!++" don't work.
		} else {
			list.push('<option value="'+val+'">'+gantry_data['interchanges'][val].label+'</option>');
		}
	});
	return list;
}

function insert_gantry_group (type, direction, items, reversed) {
	if (reversed !== true) { reversed = false; }
	if ($.isArray(items)) { 
		var list = build_gantry_list(type, direction, items);
	} else {
		var items = $.makeArray($.map(gantry_data[type][direction], function(val, i) {
			return i;
		}));
		if (reversed == true) { items.reverse(); }
		var list = build_gantry_list(type, direction, items);
	}
	var group = '<optgroup label="'+direction+'bound '+type.charAt(0).toUpperCase() + type.substring(1)+'">';
	$.each(list, function(i) { group += list[i]; });
	group += '</optgroup>';
	return group;
}

$(document).ready(function () {
	/**
	 * Homepage tabbed banner script
	 */
	var panel_count = $('#tabs li').size();
	var activate = function(i) {
		$('#tabs li').removeClass('on');
		$('#tab-'+i).addClass('on');
		$('.panel').hide();
		$('#panel-'+i).show();
	}
	var interval_id = setInterval(function() {
		var i;
		for (i = 0; i < panel_count; i++)
			if ($('#tab-'+i).hasClass('on'))
				break;
		i = (i + 1) % panel_count;
		activate(i);
	}, 1000000);
	for (var i = 0; i < panel_count; i++) {
		$('#tab-' + i).click(function (num) {
			return function () { activate(num); clearInterval(interval_id) };
		}(i));
	}

	/**
	 * Homepage ExpressNews carousel functions
	 */
	var slider = $("#carousel").bxSlider({ 
		mode: 'horizontal', 
		controls: false
	});
	$('#prev').click(function() {
		slider.goToPreviousSlide();
		setPager(slider.getCurrentSlide());
		return false;
	});
	$('#next').click(function() {
		slider.goToNextSlide();
		setPager(slider.getCurrentSlide());
		return false;
	});
	$('#expressnews-pager li a').click(function(){
		var page = $('#expressnews-pager li a').index(this);
		slider.goToSlide(page);
		$('#expressnews-pager li').removeClass('selected');
		$('#expressnews-pager li:eq('+page+')').addClass('selected');
		return false;
	});
	function setPager (pagenum) {
		$('#expressnews-pager li').removeClass('selected');
		$('#expressnews-pager li:eq('+pagenum+')').addClass('selected');
	}

	$('#signup #imageField').click(function(e){
		e.preventDefault();
		var invalid = 0;
		$('#signup').children('input').each(function() {
			if ($(this).is('input[type="text"]')) {
				if ($(this).val() == '') { invalid++; }
			} else if ($(this).is('input[type="password"]')) {
				if ($(this).val() == '') { invalid++; }
			} else if ($(this).is('input[type="checkbox"]')) {
				if ($(this).is(':checked') == false) { invalid++; }
			}
		});
		if (invalid > 0) {
			$('#signup-messages').html('<span class="error">The form is incomplete. Please review your information and try again.</span>');
			$('#signup-messages').slideDown('fast').delay(2000).slideUp('slow');
			return false;
		} else {
			$('#signup').attr('action', 'signup/0').submit();
		}
	});

	$('#entryPtSel').html($('#entryPtSel').html()+insert_gantry_group ('entry', 'north', '', true)+insert_gantry_group ('entry', 'south', ''));
	$("#entryPtSel").trigger("liszt:updated");
	/// Keeps exit list empty until an entry is selected
	/*$('#exitPtSel').html($('#exitPtSel').html()+insert_gantry_group ('exit', 'north', '')+insert_gantry_group ('exit', 'south', ''));
	$("#exitPtSel").trigger("liszt:updated");*/

	$("#entryPtSel").chosen().change(function(){
		var opt_el = $('#entryPtSel option:selected');
		var opt = opt_el.val();
		var dir = opt_el.parent('optgroup').attr('label').replace(/bound entry/i, '');
		var exits = $.makeArray(gantry_data.entry[dir][opt]);
		$('#exitPtSel').html('<option value="choose"></option>' + insert_gantry_group ('exit', dir, exits));
		$("#exitPtSel").trigger("liszt:updated");
	});

	/* Fire up the Google Maps API */
	$("#tab-1").click(initializeOnce);
});

function showGantryDetails () {
	var entry = $('#entryPtSel option:selected').val();
	var exit = $('#exitPtSel option:selected').val();

	if (entry !== '' && exit !== '') {
		var entryPoint = gantry_data.interchanges[entry];
		var exitPoint = gantry_data.interchanges[exit];
		$('a#entry-point').attr('href', 'gantry-detail?gantry='+escape(entryPoint.swf));
		$('a#entry-point').text('How to enter at ' + entryPoint.label + '.');
		$('a#exit-point').attr('href', 'gantry-detail?gantry='+escape(exitPoint.swf));
		$('a#exit-point').text('How to exit at ' + exitPoint.label + '.');
		$('div#gantry-details').show();
	}
	return false;
}
