_artists = {};
_exhibits = {};

$(document).ready(function(){
	fetchArtists();
});

_imageSrc = 'https://s3.amazonaws.com/east2011/content/'
_artistThumb = _imageSrc + 'a_s/thumb/{0}.jpg';
_artistNormal = _imageSrc + 'a_s/normal/{0}.jpg';
_exhibitThumb = _imageSrc + 'e_e/thumb/{0}.jpg';
_exhibitNormal = _imageSrc + 'e_e/normal/{0}.jpg';

window.onresize = resizeList;

function resizeList() { 
	var height = $(window).height() - 430;
	$('#artists-page .list').css('height',height+'px');
	$('#events-page .list').css('height',height+'px');
	height = height + 56;
	$('#friends-page #content').css('height',height+'px');
	height = height + 26;
	$('#about-page #content').css('height',height+'px');
	$('#calendar-page #content').css('height',height+'px');
}

function init(){

	$.history.init(function(hash){
		goToHash(hash);
	},
		{ unescape: ",/" }
	);

	//Navigation: Header and Homepage
	$('#east').click(function(){ 			goToHome(); });
	$('.artists-link').click(function(){ 	goToArtists(); });
	$('.events-link').click(function(){ 	goToExhibits(); });
	$('.map-link').click(function(){ 		goToMap(); });
	$('.history-link').click(function(){ 	goToHistory(); });
	$('.calendar-link').click(function(){ 	goToCalendar(); });
	$('.about-link').click(function(){ 		goToAbout(); });
	$('.friends-link').click(function(){ 	goToFriends(); });
	$('.sponsors-link').click(function(){ 	goToHome(); });
	
	//Fancyboxes
	$("a#preview-1").fancybox();
	$("a#preview-2").fancybox();
	$("a#preview-3").fancybox();
	$("div#preview-4").fancybox();
	$("a#event-preview-1").fancybox();
	$("a#event-preview-2").fancybox();
	$("a#event-preview-3").fancybox();
	$("div#event-preview-4").fancybox();
}

function goToHash(hash){
	if(hash == ""){
		goToHome();
	}else if(hash == "artists"){
		goToArtists();
	}else if(hash.indexOf("artists") ==  0){
		var id = hash.split('/')[1];
		goToArtist(id);
	}else if(hash == 'exhibits'){
		goToExhibits();
	}else if(hash.indexOf("exhibits") == 0){
		var id = hash.split('/')[1];
		goToExhibit(id);
	}else if(hash == "map"){
		goToMap();
	}else if(hash == "history"){
		goToHistory();
	}else if(hash == "about"){
		goToAbout();
	}else if(hash == "friends"){
		goToFriends();
	}else if(hash == "calendar"){
		goToCalendar();
	}
}

function goToHome(){
	$.history.load('');
	showWindow('homepage');
}

function goToAbout(){
	$.history.load('about');
	resizeList();
	showWindow('about-page');
}

function goToArtists(){
	$.history.load('artists');
	resizeList();
	showWindow('artists-page');
}

function goToExhibits(){
	$.history.load('exhibits');
	resizeList();
	showWindow('events-page');
}

function goToHistory() {
	$.history.load('history');
	showWindow('history-page');
}

function goToCalendar() {
	$.history.load('calendar');
	resizeList();
	showWindow('calendar-page');
}

function goToFriends() {
	$.history.load('friends');
	resizeList();
	showWindow('friends-page');
}

function fetchImages(eastId,idPrefix,hrefPrefix,url,hrefUrl){
	for(var i=1; i <= 3; i++){
		
		$('#' + hrefPrefix + i).attr('href', hrefUrl.replace('{0}', eastId + "_" + i));
		
		var img = $('#' + idPrefix + i);
		img.css('visibility', 'hidden');
		
		var imageUrl = url.replace('{0}', eastId + "_" + i);
		
		img.load(function(){
			$(this).css('visibility', 'visible');
		});
		
		img.bind('error', function(){
			$(this).css('visibility', 'hidden');
		});
		
		img.attr('src', imageUrl);
	}
}

function goToArtist(id){
	var artist = _artists[id];

	$.history.load('artists/' + artist.id);
	
	var page = $('#artist-details-page');
	
	var oldArtistId = page.attr('currentArtistId');
	
	page.attr('currentArtistId', artist.id);
	
	$('#number-box').html(artist.eastId);
	$('#artist-box').html(artist.name);
	$('#medium-box').html(artist.medium);
	
	var email = '<a class="boxLink" href="mailto:' + artist.email + '">' + artist.email + '</a>';
	var website = '<a class="boxLink" target="_blank" href="http://' + artist.website + '">' + artist.website + '</a>';
	
	$('#contact-box').html(artist.phone + ' | ' + email + ' | ' + website);
	$('#address-box').html(artist.address.text);
	$('#artiststatement').html(artist.statement);
	
	doSelectedMarker(artist.marker);
	setTimeout(function(){map.panTo(new google.maps.LatLng(artist.address.lat, artist.address.lng));},500);
	
	//reload the images if a new artist was selected
	if(!oldArtistId || artist.id != oldArtistId){
		fetchImages(artist.eastId,'artistThumb','preview-',_artistThumb,_artistNormal);
	}

	showWindow('artist-details-page');
	showMapSmall();
}

function goToExhibit(id){
	var exhibit = _exhibits[id];

	$.history.load('exhibits/' + exhibit.id);
	
	var page = $('#event-details-page');
	
	var oldExhibitId = page.attr('currentExhibitId');
	
	page.attr('currentExhibitId', exhibit.id);
	
	$('#event-number-box').html(exhibit.eastId);
	$('#event-box').html(exhibit.name);
	
	var contact = '';
	
	if(exhibit.phone){
		contact += exhibit.phone;
	}
	
	if(exhibit.email){
		if(contact.length > 0){
			contact += ' | ';
		}
		contact += '<a class="boxLink" href="mailto:' + exhibit.email + '">' + exhibit.email + '</a>';
	}
	
	if(exhibit.website){
		if(contact.length > 0){
			contact += ' | ';
		}
		contact += '<a class="boxLink" target="_blank" href="http://' + exhibit.website + '">' + exhibit.website + '</a>';
	}
	
	$('#event-schedule-box').html(exhibit.schedule);
	
	$('#event-contact-box').html(contact);
	
	$('#event-address-box').html(exhibit.address.text);
	
	$('#eventstatement').html(exhibit.description);
	
	doSelectedMarker(exhibit.marker);
	setTimeout(function(){map.panTo(new google.maps.LatLng(exhibit.address.lat, exhibit.address.lng));},500);
	
	if(!oldExhibitId || exhibit.id != oldExhibitId){
		fetchImages(exhibit.eastId,'eventThumb','event-preview-',_exhibitThumb,_exhibitNormal);
	}
	
	showWindow('event-details-page');
	showMapSmall();
}

function goToMap(){
	$.history.load('map');
	showMapFull();
}

function showMapFull(){
  if(!($('#map').hasClass('mapfull'))){
    $('#map').removeClass('mapsmall').addClass('mapfull');
  	mapRepaint();
  	recenterMap();
	}
	$('#map').css('z-index','100');
	$('#footer_container').css('z-index','200');
}

function showMapSmall(){
  if(!($('#map').hasClass('mapsmall'))){
    $('#map').removeClass('mapfull').addClass('mapsmall');
    mapRepaint();
  }
  $('#map').css('z-index','100');
  $('#footer_container').css('z-index','10');
}

function mapRepaint(){
  setTimeout(function(){
    google.maps.event.trigger(map, 'resize');
  },500); 
}

function recenterMap(latlng){
  var center = map.getCenter();
  setTimeout(function(){
    map.panTo(center);
  },500);
}

function resetMap(){
  $('#map').css('z-index','-10');
}

function showWindow(id){
	//$('.page').fadeOut(200);
	
	$('.page').css('display','none');
	
	resetMap();
	
	var window = $('#' + id);
	//setTimeout(function(){window.fadeIn(200);},200);
	window.css('display','block');
}

function fetchArtists(){

	var onSuccess = function(data){
		initList(data);
		initMap();
		init();
	};
	
	var onError = function(jqXHR, textStatus, errorThrown){
		alert('error: ' + errorThrown);
	};
	
	var url = 'artists.txt';
	
	//var url = 'file:///C:/Users/Jason/git/east/east/artists.txt';
	
	$.getJSON(url)
		.success(onSuccess)
		.error(onError);
}

function initList(data){
	var artistList = $('<div></div>').addClass('list');
	$('#artist-list-middle').append(artistList);
	var exhibitList = $('<div></div>').addClass('list');
	$('#event-list-middle').append(exhibitList);
	
	$.each(data.artists, function(){
		var artist = this;
		
		var id = artist.id;
		
		_artists[id] = artist;
	
		var eastId = this.eastId;
		var name = this.name;
		var medium = this.medium;
		
		var artistItem = $('<div class="searchItem"><div class="searchEastId box artist-list-east-id">' + eastId + '</div><div class="searchDetail"><div class="searchName artist-list-name">' + name + '</div><p class="searchMedium artist-list-medium">' + medium + '</p></div></div>');
		
		artistList.append(artistItem);
		
		artistItem.click(function(){goToArtist(id);});
	});
	
	$.each(data.exhibits, function(){
		var exhibit = this;
		
		var id = exhibit.id;
		
		_exhibits[id] = exhibit;
		
		var eastId = this.eastId;
		var name = this.name;
		
		var exhibitItem = $('<div class="eSearchItem"><div class="eSearchEastId box artist-list-east-id">' + eastId + '</div><div class="searchDetail"><div class="eSearchName artist-list-name">' + name + '</div></div></div>');
		
		exhibitList.append(exhibitItem);
		
		exhibitItem.click(function(){goToExhibit(id);});
	});

	var artistOptions = {
		valueNames: [ 'searchEastId', 'searchName', 'searchMedium' ]
	};

	var artistList = new List('artist-list', artistOptions);
	
	var exhibitOptions = {
		valueNames: [ 'eSearchEastId', 'eSearchName']
	};

	var exhibitList = new List('event-list', exhibitOptions);
}
