var List = {
	locations: Array(),
	pages: new Array(),
	per_page: 12,
	total_pages: 0,
	flash_movie: null,
	init: function() {
		this.locations = this.parseLocations();
		this.total_pages = Math.ceil(Locations.keys().size() / this.per_page);
		var page = 0;
		var i = 0;
		this.locations.each(function(location, k) {
			if (this.pages[page] == undefined) {
				this.pages[page] = [];
			}
			if (location.label == '') {
				location.label = 'Location #' + location.number;
			}
			this.pages[page].push(location);
			i++;
			if (i == this.per_page) {
				i = 0;
				page++;
			}
		}, this);
	},
	parseLocations: function() {
		var sorted = [];
		var keys = Locations.keys();
		keys = keys.sort();
		keys.each(function(key, i) {
			var info = Locations.get(key);
			info.mc = key;
			info.number = i+1;
			sorted.push(info);
		}, this);
		return sorted;
	},
	createTables: function() {
		this.pages.each(function(page, i) {
			var table = new Element('table', {
				border: '0',
				width: '100%',
				cellpadding: '0',
				cellspacing: '0',
				id: ('business_table_' + i)
			});
			var tbody = new Element('tbody');
			var tr = new Element('tr');
			table.update(tbody);
			tbody.update(tr);
			// This is all just copied from 46corridor, so some ugly tweaks are done to make it work with this spot
			for(var j = 0; j < 1; j++) {
				var column = new Element('td', {'valign': 'top'});
				var column_table = new Element('table', {
					border: '0',
					cellpadding: '0',
					cellspacing: '0'
				});
				column_table.addClassName('businesses');
				var column_tbody = new Element('tbody');
				column_table.update(column_tbody);
				tr.insert(column.update(column_table));
				//for(var k = (j * 4); k < ((j * 4) + 4); k++) {
				for(var k = (j * 12); k < ((j * 12) + 12); k++) {
					var location = page[k];
					if (location == undefined) {
						// var location_row = new Element('tr').insert(new Element('th').addClassName('empty')).insert(new Element('td').addClassName('empty'));
					} else {
						var location_row = new Element('tr');
						location_row.insert(new Element('th').update((location.number) + '.'));
						var location_column = new Element('td', {'valign': 'top', id: 'location' + location.number});
						location_row.insert(location_column);
						var name_lnk = new Element('a', {
							'href': (location.website.length > 0 ? location.website : '#'),
							'target': '_blank'
						}).update(location.label);
						location_column.insert(name_lnk);
						if (location.website.length > 0) {
							name_lnk.insert('&nbsp');
							name_lnk.insert(new Element('img', {					
								'src': 'images/external_link.gif',
								'alt': location.label,
								'width': '13',
								'height': '12'
							}));
						} else {
							name_lnk.observe('click', function(e) {
								e.stop();
							}.bind(location));
						}
						name_lnk.observe('mouseover', function(e) {
							List.flash_movie.highlight(this.mc);
						}.bind(location));
						name_lnk.observe('mouseout', function(e) {
							List.flash_movie.reset(this.mc);
						}.bind(location));
						location_column.insert('<br />');
						location_column.insert(new Element('span').update(location.address).addClassName('address'));
					}
					column_tbody.insert(location_row);
				}
			}
			$('listing').insert(table);
			if (i > 0) {
				table.hide();
			}
		});
	},
	numberMarkers: function() {
		if (this.flash_movie == null) {
			if (Prototype.Browser.IE) {
				this.flash_movie = $('mapMovie');
			} else {
				this.flash_movie = $$('embed[src="movies/map.swf"]').first();
			}
		}
		this.locations.each(function(location, i) {
			this.flash_movie.setNumber(location.mc, i+1);
		}, this);
	},
	createPagination: function() {
		var pagination = new Element('div');
		pagination.addClassName('pagination');
		this.pages.each(function(page, i) {
			var lnk = new Element('a', {
				'href': '#', 
				'id': ('page_' + i)
			}).update(i+1);
			lnk.addClassName('pagination');
			
			if (i == 0) {
				lnk.addClassName('selected');
			}
			lnk.observe('click', function(e) {				
				List.gotoPage(e.element().readAttribute('id').sub('page_', ''));
				e.stop();
			});
			pagination.insert(lnk);
		}, this);
		$('listing').insert(pagination);
	},
	gotoPage: function(number) {
		$$('table[id^="business_table_"]').each(function(tbl) {
			if (tbl.readAttribute('id').sub('business_table_', '') == number) {
				tbl.show();
			} else {
				tbl.hide();
			}
		}, this);
		$$('a.pagination').each(function(a) {
			a.removeClassName('selected');
			if (a.readAttribute('id').sub('page_', '') == number) {
				a.addClassName('selected');
			}
		}, this);
	},
	gotoNumber: function(number) {
		this.gotoPage(Math.ceil(number / 12) - 1);
		$('location' + number).highlight({startcolor: '#FFC81E', endcolor: '#EEEEEE'});
	}
}

Event.observe(window, 'load', function() {
	if (Locations !== undefined) {
		List.init();
		List.createTables();
		List.createPagination();
		List.numberMarkers();
	}
});