/**
 * Mytube - Youtube player with playlist attached
 * @version		1.0.0-mod_atk
 * @MooTools version 1.2
 * @author Constantin Boiangiu <constantin.b [at] gmail.com>
 * @author mod version Emiliano Armellin <emilime [at] gmail.com>
 * @copyright Constantin Boiangiu
 * MIT-style license.
 */

var MyTube = new Class({
	Implements: [Options, YTPlayer],
	
	options: {
		playerConfig: {
			showRelated: 0, // youtube player can display related videos, search or info when video ends. Set any of these variables to 1 to display 
			showSearch: 0,
			showInfo: 0
		},
		messageLoading: null, // when playlist loads, you can set a message (ie: Loading... wait)
		onlyEmbeddable: true, // only embeddable videos
		defaultDisplay: 1 // 1: display playlist onLoad, 2: display player onLoad
	},
	
	initialize: function(options){
		
		this.setOptions(options);
		this.items = this.scanPage();
		if(!this.items) return;
		
		
		this.items.playlists.each(function(el, playlistId){
			
			var dataString = el.get('html').replace(/<!--|-->/g, '');
			var data = JSON.decode(dataString);
			el.empty();
			var url = 'http://gdata.youtube.com/feeds/api/';
			
			if(data.user){
				url+='users/'+data.user+'/uploads/?v=2&alt=json-in-script&orderby=published';
				if( data.list )
					url+='&max-results='+data.list;
			}else if(data.movies){
				url+='videos/?v=2&alt=json-in-script&orderby=published&q='+data.movies;
			}else if(data.playlist_id){
                                //http://gdata.youtube.com/feeds/api/playlists/PLAYLIST_ID?v=2
				url+='playlists/'+ data.playlist_id +'?v=2&alt=json-in-script&orderby=position&start-index=1&max-results=50';
			}
			
			el.addClass('loading').set({'text':this.options.messageLoading||'Loading playlist, please wait...'});
			this.setToggle(playlistId);			
			
			new Request.JSONP({
				url: url + (this.options.onlyEmbeddable ? '&format=5':''),
				onComplete: function(data){
					var videos = data.feed.entry;
					el.removeClass('loading').empty();
					this.setPlaylist(videos, playlistId, el);					
				}.bind(this) // end of JSONP request complete method
				
			}).send();
			
		}.bind(this));// end of playlists.each		
	},
	
	setToggle: function(key){
		var s1 = new Fx.Slide(this.items.playlists[key]);
		var s2 = new Fx.Slide(this.items.players[key]);
		if( this.options.defaultDisplay == 1 ) s2.hide();
		else s1.hide();
		
		this.items.playlists[key].store('listFx', s1);
		this.items.playlists[key].store('playerFx', s2);
		
		this.items.togglers[key].addEvent('click', function(event){
			new Event(event).stop();

			s1.toggle().chain(function(){
                            
				if(s1.open && $defined(this.swfObj)){
                                    this.swfObj.pauseVideo();
                                    event.target.getParent('h2').getChildren('a.bt-playlist').addClass('dropdown-active');
                                }else{
                                    event.target.getParent('h2').getChildren('a.bt-playlist').removeClass('dropdown-active');
                                }
			}.bind(this));
			s2.toggle();
		}.bind(this))
		
	},
	
	setPlaylist: function(videos, playlistId, el){
		var links = [];
		videos.each(function(video,i){
			
			if(i==0)
				this.setPlayer(video.media$group.yt$videoid.$t, playlistId);
			var link = new Element('a',{
				'href':'#',
				'title':video.media$group.media$title.$t,
				'class':'MyTube_Tippers',
				'rel':'Click to view',
				'styles':{
					'display':'block',
					'position':'relative',
					'background-image':'url('+video.media$group.media$thumbnail[0].url+')',
					'width':video.media$group.media$thumbnail[0].width,
					'height':video.media$group.media$thumbnail[0].height
				},
				'events':{
					click: function(event){
						new Event(event).stop();
						var listFx = this.items.playlists[playlistId].retrieve('listFx');
						var playerFx = this.items.playlists[playlistId].retrieve('playerFx');
						listFx.toggle();
						playerFx.toggle().chain(this.playNew.pass([video.media$group.yt$videoid.$t, playlistId], this.player) );
                                                Slick.find(document,'div.yt-cnt > h2 > a.bt-playlist').removeClass('dropdown-active');
                                                //playerFx.show();
						//this.playNew.pass([video.media$group.yt$videoid.$t, playlistId], this.player);
					}.bind(this) 
				}
			});
                        var playImg = new Element('img', {'src': 'images/play.png','class':'yt-play'});
                        link.adopt(playImg);

                        var spanWrapper = new Element('span', {'class':'yt-thumb-120'}).adopt(link);
			links[i] = new Element('div', {'class':'MyTube_video'}).adopt(spanWrapper);

                        //var title = video.media$group.media$title.$t;
                        var lng = MooTools.lang.getCurrentLanguage();
                        //console.log(lng)

                        var title = "";
                        var ar_title = video.media$group.media$title.$t.split("/",2);
                        if(ar_title.length > 1 && lng=='it-IT'){
                            title = ar_title[1];
                        }else{
                            title = ar_title[0];
                        }
                        var tit = new Element('div', {'class':'yt-title', 'html':title});
                        links[i].adopt(tit);
                        var descr = "";
                        var ar_descr = video.media$group.media$description.$t.split("/",2);
                        if(ar_descr.length > 1 && lng=='it-IT'){
                            descr = ar_descr[1];
                        }else{
                            descr = ar_descr[0];
                        }
                        var ds = new Element('div', {'class':'yt-descr', 'html':descr});
                        links[i].adopt(ds);
		}.bind(this));// end of videos.each					
		if( links.length>1 ){
                    var pagesCnt = new Element('div', {'class':'yt-pl-pages-cnt clearfix'});

                    el.adopt(pagesCnt);

                    var plPage;
                    var idx = 1;
                    links.each(function(item, index){
                        if(index % 6 == 0) {
                            plPage = new Element('div', {'id': 'p'+idx++, 'class':'yt-page-cnt clearfix'});
                            pagesCnt.adopt(plPage);
                        }

                        plPage.adopt(item);

                    });
                    el.store('pages', idx-1);

                    if(links.length>6){
                        var scrollDiv = new Element('div', {'class':'scroll-tool'});
                        pagesCnt.set('tween', {transition: Fx.Transitions.Back.easeOut, duration: 900});

                        var prev = new Element('a', {'href': '#', 'class':'prev', 'html':'Previous',
                            'events': {
                                    'click': function(e){
                                        e.stop();
                                        var p = el.retrieve('p');
                                        //console.log(p)
                                        if(p>1){
                                            pagesCnt.tween('margin-left', pagesCnt.getStyle('margin-left').toInt()+el.getStyle('width').toInt());
                                            p = p-1;
                                            if(p == 1) {
                                                e.target.addClass('prev-disable');
                                            }
                                            e.target.getNext('a.next').removeClass('next-disable');
                                            el.store('p', p);
                                        }

                                    }
                                }
                        });
                        var next = new Element('a', {'href': '#', 'class':'next', 'html':'Next',
                            'events': {
                                    'click': function(e){
                                        e.stop();
                                        var p = el.retrieve('p');
                                        if(p<el.retrieve('pages')){
                                            pagesCnt.tween('margin-left', pagesCnt.getStyle('margin-left').toInt()-el.getStyle('width').toInt());

                                            p = p+1;
                                            if(p == el.retrieve('pages')) {
                                                e.target.addClass('next-disable');
                                            }
                                            e.target.getPrevious('a.prev').removeClass('prev-disable');
                                            el.store('p', p);
                                        }
                                    }
                                }
                        });



                        el.store('p', 1);
                        prev.addClass('prev-disable');
                        el.adopt(scrollDiv.adopt(prev).adopt(next));
                    }
		}

	},
	
	scanPage: function(){
		var players = $$('.MT_youtube_player');
		var playlists = $$('.MT_playlist');	
		var togglers = $$('.MT_playlist-toggle');
		if( players.length == 0 ) return false;		
		return {'players':players, 'playlists': playlists, 'togglers': togglers};
	}
	
})

/* function triggered by the player after it loads */
function onYouTubePlayerReady(){
	var obj = document.getElementById('YTV_videoPlayer_0');
	YTVplayer.swfObj = obj;
}
/*
window.addEvent('load', function(){	
	this.YTVplayer = new MyTube({
		messageLoading: 'Loading, please wait...',
		onlyEmbeddable: true,
		defaultDisplay: 2
	});	
}.bind(this));
*/
