/*****************************************************************************
 * base-html
 * 
 * @date		$Date: 2009-07-31 17:20:59 +0300 (Fri, 31 Jul 2009) $
 * @revision 	$Rev: 5 $
 * @author		$Author: nicolasrudas $
 * @copy		(c) Copyright 2009 Octavodia Ltd. All Rights Reserved.
 * 
 *****************************************************************************/
	var meelo = window.meelo || {};
	var con;
	
	if(typeof console !== 'undefined'){
		con = true;}

	var rand = function() {
		return parseInt((new Date().valueOf()+Math.floor(Math.random()*new Date().valueOf()))/(Math.floor(Math.random()*9)+1),10);
	};
	
	meelo.music_player = {
		setup: function(){
			var self = this,
				playlist = [];
			
			window.onerror = function() {
			//	window.location.reload();
			//	alert('Oops! Something went wrong with the player');
				return true;
			};
			
			$.get('/_assets/scripts/list.player.items.asp',function(r) { //
				var base_url = '/_assets/player/';
				r = eval(r);
				
				playlist = r.items.slice(0,4).reverse();
				for (var i = playlist.length - 1; i >= 0; i--){
					playlist[i].title = playlist[i].url.replace(/%20/g,' ').replace(/\.mp3$/,'');
					playlist[i].url = base_url + playlist[i].url;
				};
				
				playlist.sort(function(a,b) {
					return a.title > b.title;
				});
				
				playlist[0].autoPlay = false;
				
				/*
				r = $(r);
				var links = r.find('a[href$=".mp3"]')
								.slice(0,4)
								.each(function() {
									var $this = $(this),
										href = $this.attr('href');
									playlist.push({
										url: href ,
										title: href.split('/')[2].replace(/%20/g,' ').replace(/\.mp3$/,'')
									});
								});
				
				playlist[0].autoPlay = false;*/
			// test player
				$f("player_test", "/_meelo/_templates/LiveSkin/scripts/flowplayer/flowplayer-3.1.2.swf", {
					onLoad : function(){
						self.init(playlist);
					}
				});
			});
		},
		init: function(pl) {
			var self = this,
				options = {
					playlist: pl,
					bufferLength: 10
				};
			
			options.onLoad = function() {
				$('div.player').removeClass('player-loading');
			};
			
			options.onPause = options.onStop = function() {
				self.stop();};
			
			options.onPlay = options.onStart = options.onResume = function() {
				self.play();};
			
			options.onBeforeBegin = function(clip) {
				self.play();
				self._current = clip;
				self.buffering();
			};
						
			options.onFinish = function(){
				self.track_change(1);};
				
			options.onBufferFull = function() {
				self.bufferingEnd(); };

			options.onBufferEmpty = function() {
				self.buffering();};
			
			this._options = options;
						
			// setup player
			self._fplayer = $f("player", "/_meelo/_templates/LiveSkin/scripts/flowplayer/flowplayer-3.1.2.swf", options);
							
		//	console.info(self._fplayer)
			
			var fplayer = self._fplayer,
				player = self._player = $('.player'),
				now_playing = self._now_playing = player.find('.now_playing'),
				buttons = self._buttons = {
					play: player.find('.play')
								.click(function() { self.checkState();}),
					next: player.find('.next')
								.click(function() {
								//	try{
										fplayer.isLoaded() && self.next();
								//	}catch(e){}
								}),
					previous: player.find('.previous').addClass('inactive')
								.click(function() {
								//	try{
										fplayer.isLoaded() && self.previous();
								//	}catch(e){}
								})
				};

			self._current = fplayer.getPlaylist()[0];
			
			self.track_change(0);
			
			return this;
		},
		track_change: function(pos /*  -1 for back, 1 for next, 0 for no change */){
			
			var self = this,
				fplayer = self._fplayer,
				buttons = self._buttons,
				playlist = fplayer.getPlaylist(),
				current = (function() {
					var r;
					try {
						r = fplayer.getClip();
					}catch(e){}
					return r || self._current;
				})(),// || { index:0 },
				wasLast = current.index == playlist.length - 1,
				wasFirst = current.index == 0;
								
				if( (wasFirst && pos == 0) || (wasLast && pos == 1) ) { /* first track and going back => stay there */
				//	if(!fplayer.isLoaded()){return this;}
					fplayer.stop();
					fplayer.stopBuffering(); }

				else {
					pos == -1 && (current = playlist[current.index - 1]);
					pos == 1 && (current = playlist[current.index + 1]); }
			
			//if(!current){ return this;}
			
			var next = playlist[current.index + 1],
				previous = playlist[current.index - 1];
			
			!previous
				? self._buttons.previous.addClass('inactive').attr('title',' ')
				: self._buttons.previous.removeClass('inactive').attr('title','Previous: '+ previous.title);

			!next
				? self._buttons.next.addClass('inactive').attr('title',' ')
				: self._buttons.next.removeClass('inactive').attr('title','Next: '+ next.title);
			
			try {
				fplayer.isLoaded() && fplayer.stopBuffering();
			} catch(e){}
			
			self._current = current;
			
			self.update_track(current.title);

			return this;
		},
		checkState: function() {
			var	self = this,
				fplayer = self._fplayer,
				play = self._current ? self._current.index : 0,
				state = fplayer.getState();
			/* state return values
				-1	unloaded
				0	loaded
				1	unstarted
				2	buffering
				3	playing
				4	paused
				5	ended
			*/
		//	console.warn(state)
			
	//	console.info(state, fplayer.getPlaylist())
			self.update_track('Loading'); 
			state == -1 && self.buffering() && fplayer.load();
			if(state == 0 || state == 1) { self.buffering(); fplayer.play( play ); }
			state == 2 && self.buffering();
			state == 3 && fplayer.isLoaded() && fplayer.pause();
			state == 4 && fplayer.isLoaded() && fplayer.resume();
			state == 5 && fplayer.isLoaded() && fplayer.stop();
			
			return this;
		},
		buffering: function() {
			var self = this,
				play = self._buttons.play,
				fplayer = self._fplayer;
			
			if(self._buffering){return this;}
				
			self.update_track('Loading');
			
			play.css('opacity','0.6');
			!play.hasClass('playing') && play.addClass('playing');
			
			self._buffering = true;
			
		//	console.info('buffering')
			
			return this;
		},
		bufferingEnd: function() {
			var self = this,
				play = self._buttons.play,
				fplayer = self._fplayer;
			
			if(!self._buffering || !fplayer.isLoaded()){ return this;}
			
			self.update_track(fplayer.getClip().title);
			
			!play.hasClass('playing') && play.addClass('playing');
			play.css('opacity',1);
			
			self._buffering = false;
			
			return this;
		},
		update_track: function(text) {
			this._now_playing[0].innerHTML = '<strong>'+text+'</strong> ';
			return this;			
		},
		play: function(attribute){
			var self = this,
				play = self._buttons.play,
				fplayer = self._fplayer;
			
			if(!fplayer.isLoaded()){return this;}
						
			self._current = fplayer.getClip(); 
			
			self.update_track(self._current.title);
			
			!play.hasClass('playing') && play.addClass('playing');
						
			return this;
		},
		stop: function(){
			var self = this,
				play = self._buttons.play,
				fplayer = self._fplayer;
			
			if(!fplayer.isLoaded()){return this;}
		
			self._current = fplayer.getClip(); 

			self.update_track(self._current.title);
			
			play
				.removeClass('playing')
				.css('opacity',1);
		
			return this;
		},
		next: function(){
			var self = this,
				btn = this._buttons.next,
				fplayer = this._fplayer;
			
			if(btn.hasClass('inactive') || !fplayer.isLoaded()){return this;}

			var current = fplayer.getClip();
			
			self.track_change(1);
			
			if(current ) { // no current if not playing
				current = current.index + 1;
				fplayer.getState() == 3 && fplayer.stop();
				fplayer.play( current );
			} 
			
			return this;
		},
		previous: function(){
			var self = this,
				btn = this._buttons.previous,
				fplayer = this._fplayer;
				
			if(btn.hasClass('inactive') || !fplayer.isLoaded()){return this;}
		
			var current = fplayer.getClip();
						
			self.track_change(-1);
			
			if(current ) { // no current if not playing
				current = current.index - 1;
				fplayer.getState() == 3 && fplayer.stop();
				fplayer.play( current );
			}
			
			return this;
		}
	};
	
$(document).ready(function() {
	$('body').addClass('has-js');
	
//	$('a.fancybox').fancybox();
	
	// Player
	$('#player').length && meelo.music_player.setup();
	
	var standalone_link = $('a.standalone').click(function() {
		var fplayer = meelo.music_player._fplayer;
		
		fplayer.isPlaying() && fplayer.stopBuffering() && fplayer.stop();
		
		window.open('/en/player/', 'player','width=285,height=70,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no');

		return false;
	});
	window.name == 'player' && standalone_link.hide();
	
	// Twitter
	(function() {
		var twitter = $('#twitter'),
			twitter_inner = twitter.find('.inner');
		if(!twitter.length){return;}
					
		$.getJSON('http://twitter.com/status/user_timeline/djs7s.json?count=1&include_rts=true&include_entities=true&callback=?',function(r) {
			r = r[0];
			if(typeof r == 'undefined'){
				twitter.hide();
				return '';
			}
			r.text = r.text || '';
			twitter_inner
				.find('blockquote')
					.hide()
					.append(r.text)
					.fadeIn();
		/*	twitter
				.hide()
				.removeClass('hide')
				.slideDown('slow');*/
		});
	})();

	// YouTube (uploads, favorites)
	(function() {
		var youtube = $('#youtube'),
			youtube_inner = youtube.find('.inner');
			
		if(!youtube.length) {return;}
			$.getJSON('http://gdata.youtube.com/feeds/users/S7SLOCKDOWN/favorites?alt=json-in-script&format=5&callback=?&jsoncallback=?',function(r) {
				//&max-results=12&start-index=1 orderby=published &orderby=published

			var entries = r.feed.entry,
				videos = [],
				r = [];

			if(!entries || !entries.length){return;}
			

			
			for (var i = entries.length - 1; i >= 0; i--){
			
				var entry = entries[i],
					video = {
						date: new Date(entry.updated.$t.replace(/T/g,' ').replace(/\.000Z/g,'').replace(/-/g,'/')).valueOf(),
						play_url: entry.media$group.media$content[0].url,
						title: entry.title.$t,
						url: entry.link[0].href,
						id: entry.link[0].href.split('=')[1],
						thumbnail: entry.media$group.media$thumbnail[0].url/*,
						rating: entry.gd$rating.average,
						comments: entry.gd$comments.gd$feedLink.countHint*/
					};
				
				videos.push(video); 

			};
						
			videos = videos.reverse().slice(0,12).reverse();
			
			r.push('<ol>');
			for (var i = videos.length - 1; i >= 0; i--){
				var video = videos[i];
				r.push('\
					<li>\
						<h4 class="title">'+video.title+'</h4>\
						<a href="#youtube_'+i+'" title="'+video.title+'" class="fancybox" target="_blank"><img src="'+video.thumbnail+'" alt="'+video.title+'"></a>\
						<div style="display:none;"><div style="overflow:hidden;" id="youtube_'+i+'"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/L8owHqNcEu4&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="'+video.play_url+'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div></div>\
					</li>\
				');
			};
			r.push('</ol>');
			
			youtube_inner.append(r.join(''));
			
			
			$('a.fancybox').fancybox({
				callbackOnClose: function() {
					$('#fancy_div object').remove();
				}
			});
		});
	})();
	
	
	
	var bnnrs = $('.bnnrs');

	// Top 20	
	(function() {
		if($.browser.msie && $.browser.version < 7) { return true; }
		var chart = $('div.chart')
						.find('a.more')
							.toggle(function() { //extend
								chart
									.addClass('extended')
									.data('static',{ left: chart.css('left') })
									.animate({ left: '-650px' },{ duration: 700});
								
								bnnrs.css('visibility','hidden');
								
								$(this).text('Less');
								
								return false;
							},function() { // contract
								chart
									.animate({
										left: 0 /*chart.data('static').left*/	},{
										complete: function(){
											chart.removeClass('extended');											
											bnnrs.css('visibility','visible');
										}
									});
								
								$(this).text('More');
								
								return false;
							})
						.end(),
			chart_list = chart.find('ol'),
			chart_inner = chart.find('> .inner')
							.width( chart_list.width() * 5),
			songs = chart_list.find('li')
							.each(function(i) {$(this).prepend('<span class="position">'+parseInt(i+1,10)+'</span>');});
		
		var columns = 4,
			per_column = parseFloat(songs.length / columns);
			
		for (var i=0; i < columns - 1; i++) {
			var songs_per_column = songs.slice( i*per_column, (i+1)*per_column  );
			
			chart_list
				.clone()
				.insertBefore( chart_list )
				.children().remove().end()
				.append(songs_per_column);
		};
		chart_list = chart.find('ol');		
	})();
	
	// News
	(function() {
		var news = $('div.news');
		
		if(!news.length){return;}
		
		var	inner = news.find('div.news-inner'),
			items = news.find('div.item')
						.css({
							width: inner.width()
						})
						.removeClass('hide')
						.slice(1).hide().end(),
			list = ['<ol>'];
		
		items.each(function() {
			var t = $('.title',this),
				h = $('a',t).attr('href');
				
			t.before('<iframe src="http://www.facebook.com/plugins/like.php?app_id=191186717597767&amp;href=http://www.s7slockdown.com'+encodeURIComponent(h)+'&amp;send=false&amp;layout=button_count&amp;width=90&amp;show_faces=false&amp;action=like&amp;colorscheme=dark&amp;font&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;float:right;" allowTransparency="true"></iframe>');
//			$('span.date',this).css('float','right');
		});
		
		for (var i=0; i < items.length; i++) {
			var c = (i==0)? ' class="active"':'';
			list.push( '<li'+c+'><a>'+(i+1)+'</a></li>' );
		};
		
		list.push('</ol>');
		
		$(list.join(''))
				.appendTo(news)
				.click(function(e) {
					var $this = $(this),
						go_to = $(e.target).closest('li');
					
					if(!go_to.length || $this.data('moving')){
						return;}
					
					$this.data('moving',true);
					
					go_to
						.addClass('active')
						.siblings('.active')
							.removeClass('active');
					
					go_to = items.eq( parseFloat(go_to.text()) - 1  );
					
					if(go_to.is(':visible')){
						$this.data('moving',false);
						return;}
					
					items
						.filter(':visible')
						.animate({
							'marginLeft': - inner.width() + 'px'
						},function() {
							$(this)
								.hide()
								.css('marginLeft',0);

							go_to.fadeIn(function() {
								$this.data('moving',false);
							});
						});
				});	
	})();
	
});
