﻿$.extend(Vevo, {
	playbar: {
		maximize: function(){
			if (Vevo.playbar.$pbar.hasClass('minimized')){
				Vevo.playbar.$pbar.removeClass('minimized').addClass('maximized');
				if (($.browser.version) <= 6 && $.browser.msie) { Vevo.playbar.header.clickHandlers.ie6ToggleExtra(); }
				Vevo.playbar.setBarStateCookie();
				if (Vevo.PlaylistWatch == null) { Vevo.playbar.logImpression(); }
			}
		},
		setBarStateCookie: function(){
			var v = (Vevo.playbar.$pbar.hasClass('minimized'))?"min":"max";
			Vevo.Cookie.setCookie('vevoPlaybarState', v,{ expires: 365, path: '/'});
		},
		windowResizeHandler: function(ev){
			var $w = $(window);
			if ($w.width()<975){ 
				var sL = $w.scrollLeft();
				var mod = (Vevo.playbar.$pbar.css('position')=='fixed')?-1:1;
				Vevo.playbar.$pbar.css('left', mod*sL); 
			}
			else{ Vevo.playbar.$pbar.css('left', 0); } 
			Vevo.playbar.content.updatePbScrollerWidth();
			Vevo.playbar.windowScrollHandler();
		},
		windowScrollHandler: function(ev){
			var $w = $(window);
			if (Vevo.playbar.$pbar.css('position')=='absolute'){
				var wH = $w.height();
				var sT = $w.scrollTop();
				var offset = Vevo.playbar.$pbar.hasClass('maximized')?89:27;
				var t = (wH-offset+sT)>$('body').outerHeight()?$('body').outerHeight()-offset:( wH-offset+sT);
				Vevo.playbar.$pbar.css('top', t);
			}
			if ($w.width()<975){ 
				var sL = $w.scrollLeft();
				var mod = (Vevo.playbar.$pbar.css('position')=='fixed')?-1:0;
				Vevo.playbar.$pbar.css({'left':mod*sL, width:975}); 
			}
			else{ Vevo.playbar.$pbar.css({'left':0, width:'100%'}); } 
		},
		header: {
			clickHandlers : {
				genericClickHelper: function(ev){
					ev.preventDefault();
					$(this).trigger('blur');
				},
				yourQL: function(ev){
					if (ev) { Vevo.playbar.header.clickHandlers.genericClickHelper.apply(this, [ev]); } 
					if (!$(this).hasClass('active')){
						$('#playbar div.header a').removeClass('active');
						$(this).addClass('active');
						$('a.create, a.save, a.manage a.clear', Vevo.playbar.$pbar).addClass('ui-hide');
						$('#my-playlists li').addClass('ui-hide').filter('.user').removeClass('ui-hide');
						Vevo.playbar.playList.selector.setLastActivePlayListForTab('quicklist');
					}
					Vevo.playbar.maximize();
				},
				toggle: function(ev){
					Vevo.playbar.header.clickHandlers.genericClickHelper.apply(this, [ev]);
					Vevo.playbar.$pbar.toggleClass('minimized').toggleClass('maximized');
					if (($.browser.version) <= 6 && $.browser.msie) { Vevo.playbar.header.clickHandlers.ie6ToggleExtra(ev); } 
					Vevo.playbar.setBarStateCookie();
					$(window).trigger('pbarChange');
				},
				ie6ToggleExtra: function(ev){
					Vevo.playbar.$pbar.height(Vevo.playbar.$pbar.hasClass('maximized')?89:27);
					Vevo.playbar.windowScrollHandler();
				}
			}
		},
		content: {
			handlers: { 
				playHoverOn: function(){ $(this).addClass('hover'); },
				playHoverOff: function(){ $(this).removeClass('hover'); },
				playMouseDown: function(){ $(this).addClass('down'); },
				playMouseUp: function(){ $(this).removeClass('down'); },
				playClickHandler: function(ev){
					if ($('ul.ui-sortable li', Vevo.playbar.$pbar).length==0){
						$('#dialog-playlist-empty').dialog('open');
					}
					else{
						$('ul.ui-sortable li:first', Vevo.playbar.$pbar).trigger('click');
					}
				},
				goLeftHoverOn: function(){ $(this).addClass('btn-go-left-hover'); },
				goLeftHoverOff: function(){ $(this).removeClass('btn-go-left-hover'); },
				goRightHoverOn: function(){ $(this).addClass('btn-go-right-hover'); },
				goRightHoverOff: function(){ $(this).removeClass('btn-go-right-hover'); },
				play: function(){
				}
			},
			updatePbScrollerWidth: function(){ 
				if (Vevo.playbar.$pBarUl.children.length>0){
					var w2 = $("div.scrollable", Vevo.playbar.$pbar).width();
					var api = $("div.scrollable", Vevo.playbar.$pbar).scrollable();
					var oldsize = api.getConf().size;
					var newsize = Math.floor(w2 / 87);
				
					if (newsize > api.getItems().length){
						api.seekTo(0).reload();
						api.getConf().size = newsize;
					}
					else if (newsize != oldsize){
						api.getConf().size = newsize;
						if (api.getConf().size > oldsize && ((api.getIndex()+ api.getConf().size) > api.getItems().length) ){
							api.seekTo(api.getIndex() - (oldsize - api.getConf().size));	api.reload();
						}
						else{ api.seekTo(api.getIndex()).reload(); }
					}
					
				}
				else { $("#playbar div.scrollable").scrollable().getConf().size =1; }
			} 
		},
		$pbar: null, $pBarUl: null,
		_loggedImpression: false,
		removePlayBarAdUnit: function(){
			if ($('#playBarSponsor:visible').length==0) { $('#playBarSponsor').parent().remove(); }
			Vevo.playbar.windowResizeHandler();
		},
		logImpression : function() {
			try { 
				if (Vevo.playbar._loggedImpression) { return; }
				Vevo.FreeWheel.logImpression("fwdefer_88x31_playbar");
				Vevo.playbar._loggedImpression = true;
			}
			catch(ex) { } 
		},
		init:function(){
			Vevo.playbar.$pbar = $('#playbar').css('opacity',0).removeClass('ui-hide');
			if (($.browser.version) <= 6 && $.browser.msie) {
				Vevo.playbar.$pbar.css({bottom:0}).bgiframe(); 
				DD_belatedPNG.fix('div.empty-icon span');
			} 
			else { Vevo.playbar.$pbar.css({position:'fixed',bottom:0}); } 
			
			/* setTimeout(this.removePlayBarAdUnit,30000); */
			
			/* set up header click handlers */
			$('#playbar div.header a.toggler').bind('click',Vevo.playbar.header.clickHandlers.toggle);
			$('#playbar div.header a.your-quicklist').bind('click',Vevo.playbar.header.clickHandlers.yourQL);
						
			/* set up window event handlers */
			$(window).bind('resize', Vevo.playbar.windowResizeHandler).bind('scroll', Vevo.playbar.windowScrollHandler);
			/* set up content button event handlers */
			$('#playbar .icon-play').hover(Vevo.playbar.content.handlers.playHoverOn, Vevo.playbar.content.handlers.playHoverOff).mousedown(Vevo.playbar.content.handlers.playMouseDown).bind('mouseup mouseleave',Vevo.playbar.content.handlers.playMouseUp).bind('click',Vevo.playbar.content.handlers.playClickHandler);
			$('#playbar .btn-go-left').hover(Vevo.playbar.content.handlers.goLeftHoverOn, Vevo.playbar.content.handlers.goLeftHoverOff);
			$('#playbar .btn-go-right').hover(Vevo.playbar.content.handlers.goRightHoverOn, Vevo.playbar.content.handlers.goRightHoverOff);
			
			/* set up scrollable*/
			$("#playbar div.scrollable").scrollable({
				clickable: false, keyboard: false, nextPage:'.btn-go-right', prevPage: '.btn-go-left', next:'#playbar .non-right', prev: '#playbar .non-left',
				onSeek: function(){
					var ul = $("div.scrollable ul",Vevo.playbar.$pbar), api = ul.parent().scrollable();
					if (ul.data('seeking')){ 
						api.getConf().speed = 400;
						api.getConf().easing = "swing";
						ul.data('seeking',false); 
					}
				}
			}).autoscroll({autoplay: false}).mousewheel(150);
			/* set scrollable item size (for fluid layout) */
			$("div.scrollable", Vevo.playbar.$pbar).scrollable().getConf().size = Math.floor($("#playbar div.scrollable").width() / 87);
			/* sortable init */
			Vevo.playbar.$pBarUl = $("div.scrollable ul",Vevo.playbar.$pbar).data('seeking',false).sortable({ tolerance: 'pointer', delay:0, cursorAt :{left:0},
				scroll: false, placeholder:'ui-state-highlight', cancel: '.remove', revert:300, helper: 'clone', appendTo:'#playbar div.scrollable', 
				stop: function(ev, ui){ 
					Vevo.playbar.playList.playListChangeHandler(); 
					$(ui.item).removeClass('ui-dragging'); 
				}, 
				sort: function(ev, ui){ 
					var ul = Vevo.playbar.$pBarUl, api = ul.parent().scrollable();
					if (ul.data('seeking')==false){
						if (ui.position.left<0 && api.getPageIndex()>0){ 
							api.getConf().speed = 1500;
							api.getConf().easing = "linear";
							ul.data('seeking',true); api.movePage(-1); 
						}
						else if (ui.position.left>ul.parent().width() && (api.getPageIndex() < (api.getPageAmount()-1)) ){ 
							api.getConf().speed = 1500;
							api.getConf().easing = "linear";
							ul.data('seeking',true); api.movePage(1); 
						}
					}
				},
				start: function(ev, ui){ $(ui.helper).addClass('ui-dragging'); Vevo.playbar.playList.video.hideTip(); }
			}).disableSelection();
			Vevo.playbar.$pBarUl.sortable('refresh'); 
			
			if ($.cookie('vevoPlaybarState')!=null && $.cookie('vevoPlaybarState')=="min" && Vevo.PlaylistWatch==undefined){
				$('#playbar div.header a.toggler').trigger('click');
			}
			else {
				if (Vevo.PlaylistWatch == null) { Vevo.playbar.logImpression(); }
			}
			Vevo.playbar.$pbar.css('opacity',100).css('filter','');
		}
	}
});

$(document).ready(function() {
	Vevo.playbar.init();
});