var HotnessSearch = new Class({

	initialize: function(artist, tune) {
	
		this.artist = artist;
		this.tune = tune;
		console.log(this.tune);
	},
	
	search: function() {
		
		$('result').set('html',"<div class='floatLeft' style='width: 420px;'><h2 id='tuneName'></h2><div id='tuneData'></div><div id='similarTunes'></div></div><div class='floatRight' style='width: 200px;'><div id='albumArt'></div></div><div class='clear'></div><div style='border-bottom: 1px solid #dddddd; margin-top: 10px; margin-bottom: 10px;'></div><div class='floatLeft' style='width: 420px;'><h2 id='artistName'></h2><div id='artistData'></div><div id='similarArtists'></div></div><div class='floatRight' style='width: 200px;'><div id='artistArt'></div></div><div class='clear'></div><h2 id='eventName'></h2><div id='map' style='height: 400px;'></div>");
	
		if(this.tune != '') {
			this.searchSpotify('tune');
			this.searchEchoNest('tune');
			this.searchLastFm('tune');
			
			this.setTuneInfo();
			
			this.getSimilarTunes();
				
		}
		if(this.artist != '' && this.artist != 'false') {
			this.searchSpotify('artist');
			this.searchEchoNest('artist');
			this.searchLastFm('artist');
			
			this.setArtistInfo();
			
			this.showArtistEvents();

		}
	
	},
	
	injectData: function(container,data) {
			
		var dataContainer = new Element('div',{'html': data});
	
		dataContainer.inject($(container));
	},
	
	setTuneInfo: function() {
		
		var request = new Request({url: '/hotnessSearch/sources/lastFm.php', method: 'post', onComplete: function(response) {

			var responseContainer = new Element('div',{'html': response});
						
			var tune = responseContainer.getElement('tune').get('html');
			var album = responseContainer.getElement('album').get('html');
			var albumArt = responseContainer.getElement('albumArt').get('html');
			
			$('tuneName').set('html',tune + ' <span style="font-size: 14px;">('+album+')</span>');
			
			var image = new Element('img',{'src': albumArt, 'styles': {'width': '200px'}});
			image.inject($('albumArt'));
			
			
		}});
		
		request.send('tune='+this.tune+'&artist='+this.artist+'&tuneInfo=true');
	
	},
	
	setArtistInfo: function() {
	
		
		var request = new Request({url: '/hotnessSearch/sources/lastFm.php', method: 'post', onComplete: function(response) {
		
			//console.log(response);

			var responseContainer = new Element('div',{'html': response});
						
			var artist = responseContainer.getElement('artist').get('html');
			var artistArt = responseContainer.getElement('artistArt').get('html');
						
			$('artistName').set('html',artist);
						
			var image = new Element('img',{'src': artistArt, 'styles': {'width': '200px'}});
			image.inject($('artistArt'));
			

			
			var topic = new Element('p',{'html': 'Similar Artists:', 'class': 'marginBottomSmall'});
			var paragraph = new Element('p');
			topic.inject('similarArtists');
			
			responseContainer.getElement('similarArtists').getChildren().each(function(element) {
			
				var link = new Element('a',{html: element.get('html')+', ', onclick: 'new HotnessSearch("'+element.get('html')+'","").search();', href: 'javascript: ;'});
			
				link.inject(paragraph);
			
			});
			
			paragraph.inject('similarArtists');
			
			
		}});
		
		request.send('artist='+this.artist+'&artistInfo=true');		
	
	},
	
	searchSpotify: function(type) {
	
		if(type == 'tune') var container = 'tuneData';
		if(type == 'artist') var container = 'artistData';
		
		var thisClass = this;
		
		var request = new Request({url: '/hotnessSearch/sources/spotify.php', method: 'post', onComplete: function(response) {
			thisClass.injectData(container,response);
		}});
		
		if(type == 'tune') request.send('tune='+this.tune+'&artist='+this.artist);
		if(type == 'artist') request.send('artist='+this.artist);
			
	},
	
	searchEchoNest: function(type) {
	
		if(type == 'tune') var container = 'tuneData';
		if(type == 'artist') var container = 'artistData';
		
		var thisClass = this;
		
		var request = new Request({url: '/hotnessSearch/sources/echoNest.php', method: 'post', onComplete: function(response) {
			thisClass.injectData(container,response);
		}});
		
		if(type == 'tune') request.send('tune='+this.tune+'&artist='+this.artist);
		if(type == 'artist') request.send('artist='+this.artist);

	},
	
	searchLastFm: function(type) {
	
		if(type == 'tune') var container = 'tuneData';
		if(type == 'artist') var container = 'artistData';
		
		var thisClass = this;
		
		var request = new Request({url: '/hotnessSearch/sources/lastFm.php', method: 'post', onComplete: function(response) {
			thisClass.injectData(container,response);
		}});
		
		if(type == 'tune') request.send('tune='+this.tune+'&artist='+this.artist);
		if(type == 'artist') request.send('artist='+this.artist);
	},
	
	showArtistEvents: function() {
	
		
		var request = new Request({url: '/hotnessSearch/sources/songKick.php', method: 'post', onComplete: function(response) {
		

			var responseContainer = new Element('div',{html: response});
			
			//console.log(response);
			
			var myLatitude = responseContainer.getElement('myLatitude').get('html');
			var myLongitude = responseContainer.getElement('myLongitude').get('html');
			
			var eventsArray = new Array();
			
			responseContainer.getElement('events').getChildren().each(function(element) {
			
				eventHash = new Hash();
				eventHash.include('latitude',element.getElement('latitude').get('html'));
				eventHash.include('longitude',element.getElement('longitude').get('html'));
				eventHash.include('date',element.getElement('date').get('html'));
				eventHash.include('name',element.getElement('name').get('html'));
				eventHash.include('city',element.getElement('city').get('html'));
			
				eventsArray.include(eventHash);
			
			});
			
			$('eventName').addClass('marginTopBig');
			$('eventName').set('html','Artist Events from <img src="hotnessSearch/pics/logoSongKick.png" alt="Songkick" />');
						
			 if (GBrowserIsCompatible()) {
			 
				var map = new GMap2(document.getElementById("map"));
				map.setCenter(new GLatLng(myLatitude, myLongitude), 5);
				GEvent.addListener(map, "moveend", function() {
	  				//map.panTo(new GLatLng(myLatitude, myLongitude));
				});
				
				map.addControl(new GSmallMapControl());
				map.addControl(new GMapTypeControl());
	
				function createMarker(point, number, description) {
				  var marker = new GMarker(point);
				  GEvent.addListener(marker, "click", function() {
					marker.openInfoWindowHtml(description);
				  });
				  return marker;
				}
				eventsArray.each(function(hash) {
					var point = new GLatLng(hash.get('latitude'), hash.get('longitude'));
					map.addOverlay(createMarker(point, 1, '<p><strong>'+hash.get('name') + '</strong></p><p>' + hash.get('city') + '</p>'));
				});
				
			}
			
		}});
		
		request.send('artist='+this.artist);		
	
	},
	
	getSimilarTunes: function() {
	
		
		var request = new Request({url: '/hotnessSearch/sources/lastFm.php', method: 'post', onComplete: function(response) {
		
			//console.log(response);
			
			var responseContainer = new Element('div',{html: response});
			
			var topic = new Element('p',{html: 'Similar Tunes:', 'class': 'marginBottomSmall'});
			var paragraph = new Element('p');
			topic.inject('similarTunes');
			
			responseContainer.getChildren().each(function(element) {
			
				var link = new Element('a',{title: element.getElement('artist').get('html'), html: element.getElement('tune').get('html')+', ', onclick: 'new HotnessSearch("'+element.getElement('artist').get('html')+'","'+element.getElement('tune').get('html')+'").search();', href: 'javascript: ;'});
			
				link.inject(paragraph);
			
			});
			
			paragraph.inject('similarTunes');
			
			
		}});
		
		request.send('artist='+this.artist+'&tune='+this.tune+'&similarTunes=true');		
	
	},


});