/*--------------------------------
	PROJECT: 	Downlovers 2.0
	VERSION:	0.6
	AUTHOR:		Luca Di Bella
	COMPANY:	Web Tech Area
--------------------------------*/


var WTA = {}; // Namespace

/*---------------------------------------
	Globals
---------------------------------------*/

WTA.globals = {
	basepath:	'http://www.downlovers.it/',
	ajaxloader:	'assets/images/ajax-loader.gif',
	noavatar: 	'images/avatars/noavatar.jpg'
}

/*---------------------------------------
	Freebase Integration
---------------------------------------*/
WTA.freebase = function(){

	var REQUEST_PATH 	= 'http://www.freebase.com/api/service/mqlread';
	var TRANS_PATH		= 'http://www.freebase.com/api/trans/raw';
	var READY			= false;
	var UPDATER			= '#freebase-content';
	var LOADING			
	var PANE			= '#artist-pane-content';
	
	
	function _init() {
		READY 		= true;
		LOADING 	= document.createElement('img');
		$(LOADING).attr('src', WTA.globals.basepath + WTA.globals.ajaxloader);
		$(LOADING).attr('id', 'loading-freebase');
		$(LOADING).css({position: 'absolute', top: 0, right: '10px'});
	}
	
	function _setupLoading(){
		if(!document.getElementById('loading-freebase')){
			$(PANE).append(LOADING).css('visibility', 'visible');
		} else {
			$('#loading-freebase').css('visibility', 'visible');
		}
	}
	
	function _setupWideSearch(){
		$('.advanced-freebase-search').live('click',function(ev){
			ev.preventDefault();
			var artist_name = $(this).attr('rel');
			_wideArtistSearch(artist_name);
		})
	} 
	
	function _getArtistInfo(artist_name) {
		_setupWideSearch();
		_setupLoading();
		/*
		var query = {'query':
			[{
			  	"id":   null,
			  	"type": "/music/artist",
			  	"name~=": '*'+artist_name+'*',
			  	"limit": 1,
			  	"*":    null,
			  	"/common/topic/image": [{
			    	"id":       null,
			    	"optional": true,
			    	"limit":    3
			  	}]
			}]
		}*/
		var query = {"query":
			[{
			  	"id":            null,
			  	"type":          "/music/artist",
			  	"name":          artist_name,
			  	"limit":         1,
			  	"/common/topic/image": [{
			    	"id":       null,
			    	"optional": true,
			    	"limit":    3
			  	}],
			  	"key": [{
			    	"namespace": "/authority/musicbrainz",
			    	"value":     null
			  	}],
			  	"active_start": {
			    	"value":    null,
			    	"optional": true
			  	},
			  	"active_end": {
			    	"value":    null,
			    	"optional": true
			  	},
			  	"artist_similar": [],
			  	"origin":        [],
			  	"home_page": [{
			    	"*":        null,
			    	"optional": true
			  	}],
			  	"/common/topic/article": [{
			    	"*":        null,
			    	"optional": true,
			    	"limit":    3
			  	}],
			  	"/common/topic/subject_of": [{
			    	"*":        null,
			    	"optional": true
			  	}]
			}]
		}
		
		$.ajax({
			url: REQUEST_PATH,
			dataType: "jsonp",
			cache: true,
			data: { query: $.toJSON(query) },
			success: function(response){
				var artist_data;
				if(response.result.length > 0){
					artist_data = response.result[0];
				} else {
					artist_data = 0;
					//console.log('no artist data');
				}
				_renderArtistPane(artist_data, artist_name);
			}
		});
	}
	
	function _wideArtistSearch(artist_name) {
		_setupLoading();
		var query = {"query":
			[{
  				"id":   null,
  				"type": "/music/artist",
  				"name": null,
  				"/common/topic/alias": [{
    				"value": artist_name
  				}],
  				"/common/topic/image": [{
    				"id":       null,
    				"optional": true,
    				"limit":    3
  				}],
  				"*":    null
			}]
		}
		
		$.ajax({
			url: REQUEST_PATH,
			dataType: "jsonp",
			cache: true,
			data: { query: $.toJSON(query) },
			success: function(response){
				var artist_data;
				if(response.result.length > 0){
					artist_data = response.result[0];
				} else {
					artist_data = 0;
					//console.log('no artist data');
				}
				_renderArtistPane(artist_data, artist_name);
				//console.dir(artist_data)
			}
		});
	}
	
	function _renderArtistPane(artist_data, artist_name){
		if(artist_data != 0){
			
			infos = _createArtistInfos(artist_data);
			$(UPDATER).html(infos);
			
			image = _createArtistImage(artist_data['/common/topic/image'])
			$('#artist-google-image').append(image);
			
		} else {
			//$(UPDATER).html("<p>Non ho trovato informazioni sull'artista...</p><p><a href='#' rel='"+artist_name+"' class='advanced-freebase-search fake-button'>Ricerca estesa</a></p>");
		}
		
		$('#loading-freebase').css('visibility','hidden');
	}
	
	function _createArtistImage(images){
	
		var image = document.createElement('img');
		$(image).attr('width', 130);
		
		if(images.length > 0){	
			image.src = TRANS_PATH + images[0]['id'];
		} else {
			image.src = WTA.globals.basepath + WTA.globals.noavatar;
		}
		
		return image;
	}
	
	function _createArtistInfos(artist_data){
		//console.dir(artist_data);
		
		var artist_similar 	= artist_data['/music/artist/artist_similar']; //array
		var active_start	= artist_data['active_start']; //object
		var active_end		= artist_data['active_end']; //object
		var origins			= artist_data['origin']; //array
		var home_page		= artist_data['home_page'] //array
		var article			= artist_data['/common/topic/article'] //array

		var panels			= 0;
		
		var infos = document.createElement('dl');
		
		
		//Set dell'active start date
		if(active_start != null){
			$(infos).append('<dt>Career beginning</dt><dd>'+active_start.value+'</dd>');
			panels++;
		}
		
		//Set dell'active end date
		if(active_end != null){
			$(infos).append('<dt>Career ending</dt><dd>'+active_end.value+'</dd>');
			panels++;
		}
		
		//Set dei luoghi di origine
		if(origins.length > 0){
			var places = '';
			for(i=0; i < origins.length; i++){
				places += origins[i] +',';
			}
			$(infos).append('<dt>Country of nationality</dt><dd>'+places+'</dd>');
			panels++;
		}
		
		//Set della homepage
		if(home_page.length > 0){
			$(infos).append('<dt>Homepage</dt><dd><a href="'+home_page[0].uri+'" target="_blank">'+home_page[0].uri+'</a></dd>');
			panels++;
		} 
			
		if(panels == 0){
			//$(infos).append('<dt>Nessuna informazione aggiuntiva</dt>');
		}
		
		return infos;
	}
	
	/* UNUSED
	function _getAlbumInfo(album_title, artist_name){
		var query = {'query':
			[{
				"album": [{
					"name":  album_title,
				   	"limit": 1,
				    "*":     null
				}],
				"name": artist_name,
				"type": "/music/artist",
				"/common/topic/image": [{
					"optional": true,	
					"*": null
			  	}]
			}]
		}
		
		$.ajax({
			url: REQUEST_PATH,
			dataType: "jsonp",
			cache: true,
			data: { query: $.toJSON(query) },
			success: function(response){
				var album_data;
				if(response.result.length > 0){
					album_data = response.result[0];
				} else {
					album_data = 0;
				}
			}
		});
	}
	*/
	return {
		
		// public vars
		name: 		'WTA.freebase',
		version:	'0.1a',
		
		// public functions
		init: _init,
		//getAlbumInfo: function(album_title, artist_name){ _getAlbumInfo(album_title, artist_name); },
		getArtistInfo: function(artist_name){ _getArtistInfo(artist_name); }
		
	}
}();
WTA.freebase.init();

/*---------------------------------------
	DIGGIEVote
---------------------------------------*/
WTA.diggievote = function(){
	
	var links = '.rating-pane a';
	
	function _init(){
		$(links).each(function(){
			$(this).bind('click', _vote);
		});
	}
	
	function _vote(ev){
		ev.preventDefault();
		var url = this.href;
		if($(this).hasClass('flag')){
			if(confirm('Vuoi segnalare la review come un abuso?')){
				_doVote(url);
			}
		} else {
			_doVote(url);
		}
		
	}
	
	function _doVote(url){
		$.get(url, null, function(data, textStatus){
			alert(_stripNewLines(data));
		})
	}
	
	function _stripNewLines(str){
		return str.replace(/\n/g, '');
	}
	
	return {
		init: _init
	}	
}()


/*---------------------------------------
	UIFunctions
---------------------------------------*/
WTA.UIfunctions = function(){
	
	var _output = {};
	
	function _initializeTabs() {
		rt 	= $("#rotor .tabs").tabs("#rotor .panes > div", {api: true});
    	ct 	= $("#charts .tabs").tabs("#charts .panes > div", {api: true});
    	cpt = $("#chartsPage .tabs").tabs("#chartsPage .panes > .pane", {api: true});
    	
    	$("#rotor .tabs a").mouseenter(function(){
    		clearTimeout(rollRotorT);
    	});
    	
    	$("#rotor .tabs a").mouseleave(function(){
    		rollRotorT = setTimeout('WTA.UIfunctions.rollRotor()', 15000);
    	});
    	
    	return { rotor: rt, charts: ct, chartsPage: cpt };
	};
	
	//Funzione per lo scorrimento automatico delle tab del rotor
	function _rollRotor() {
		var tabs = $('ul.tabs > li > a'); //Collection delle tab
		for(i = 0; i <= tabs.length; i++) { //Scorre le tab
			if($(tabs[i]).hasClass('current')) { //La tab corrente è quella selezionata?
				$(tabs[i]).removeClass('current'); //Deseleziona la tab corrente
				var ni = (i == 4) ? 0 : i + 1; //Calcola il nuovo indice (0 se si è arrivati alla fine)
				$(tabs[ni]).addClass('current'); //Seleziona la tab successiva
				$(tabs[ni]).click(); //Richiama l'evento click associato alla tab selezionata
				break; //Interrompe il ciclo dopo aver modificato le tab
			}
		}
		rollRotorT = setTimeout('WTA.UIfunctions.rollRotor()', 10000);
	} //_rollRotor
	
	function _initializeScrollables(){
		$(".scrollable").scrollable(); 
	};
	
	function _initializeTooltips(){
		$(".tooltipTrigger").tooltip();
	};
	
	function _initializeOverlays(){
		 $("button[rel]").overlay({
     		expose: '#6096D4',
     		closeOnClick: false
     	});
	};
	
	function _initializeCollapsible(){
		$('.collapsible-trigger[rel]').bind('click', function(ev){
     		ev.preventDefault();
     		var $el = $($(this).attr('rel'));
     		$el.toggle(0);
     	});
	};
	
	function _initializeShadowboxes(){
		$("a[rel='download']").bind('click',function(ev){
	     	ev.preventDefault();
	     	Shadowbox.open({
	     		content: this,
	     		width: 800,
	     		height: 400,
	     		player: 'iframe',
	     		title: this.title
	     	})
	     });
	     
	     /* Reviews e dediche */
	     $("a[rel='review'], a[rel='dedica']").bind('click',function(ev){
	     	ev.preventDefault();
	     	Shadowbox.open({
	     		content: this,
	     		width: 800,
	     		height: 450,
	     		player: 'iframe',
	     		title: this.title
	     	})
	     });
	     
	     /* youtube video */
	     $("a[rel='youtube']").bind('click',function(ev){
	     	ev.preventDefault();
	     	Shadowbox.open({
	     		content: this.href,
	     		width: 800,
	     		height: 450,
	     		player: 'swf',
	     		title: this.title
	     	})
	     });
	};
	
	function _initializeTrackActions(){
		$('.track-review-trigger[rel]').bind('click', function(ev){
	     	ev.preventDefault();
	     	var $el = $(this);
	     	var $elToUpdate = $('#review-'+this.id);
	     	
	     	var $icon		= $el.parents('.track-row').find('.track-icon img')
	     	var iconpath 	= $icon.attr('src');
	     	
	     	if($(this).data('ajax') == 'received'){
	     		$elToUpdate.html('');
	     		$(this).data('ajax', 'ready')
	     	} else {
	     		var url = this.href;
	 	    	$(this).data('ajax', 'ready');
	 	    	$icon.attr('src', WTA.globals.basepath + WTA.globals.ajaxloader);
	    	 	
	    	 	$elToUpdate.load(url,{track_id: this.id, return_url: this.rel }, function(r,s,x){
					$icon.attr('src', iconpath);
	     			$el.data('ajax', 'received');
	     		})
	     	}
	     })
	};
	
	function _equalizeWidgetsHeights(){
		$('#yui-main .yui-g').each(function(){
			var cols = $(this).find('.first');
			if(cols.length > 0){
				var hs = [];
				$(this).find('.widget .bd').each(function(){
					hs.push($(this).height());
				})
				hs.sort();
				hs.reverse();
				//console.log(hs);
				$(this).find('.widget .bd').each(function(){
					$(this).height(hs[0]);
				})
			}
		})
	}
	
	function _makeTextareaElastic(){
		$('textarea.elastic').elastic();
	}
	
	function _displayInputHints(){
		$('input.hints').each(function(){
			if(this.title && this.title != ''){
				$(this).val(this.title);
				$(this).bind('focus', function(){
					$(this).val('');
				}).bind('blur', function(){
					//console.log($(this).val())
					if($(this).val() == this.title || $(this).val() == ''){
						$(this).val(this.title);
					}
				})
			}
		})
	}
	
	function _init() {
		$.extend(_output, _initializeTabs());
		//_initializeTabs();
		_initializeScrollables();
		_initializeCollapsible();
		_initializeOverlays();
		_initializeShadowboxes();
		_initializeTrackActions();
		_equalizeWidgetsHeights();
		_makeTextareaElastic();
		_displayInputHints();
		
	};
	
	return {
		init: _init,
		output: _output,
		rollRotor: _rollRotor
	}
}();


/*---------------------------------------
	DOM Ready Inits
---------------------------------------*/
$(function() {
	WTA.UIfunctions.init();
	WTA.diggievote.init();
}); 
