YAHOO.namespace("youporn.video.recommended");

YAHOO.youporn.video.recommended = function () {
	var buffer_video_ids     = [];
	var thumbnail_url_suffix = '';
	var browser_size         = 1280;
	var thumbnail_design     = 2;
	var thumbs_up_highlighter;
	var showhide;
	
	function getToken() {
		return Math.round(Math.random() * 65535);
	}

	function Highlighter(over_src, out_src) {
		this.over_src = over_src;
		this.out_src  = out_src;
		
		// preload over image
		var image = document.createElement('img');
		image.setAttribute('src', over_src);		
	}

	Highlighter.prototype.over = function(e, obj) {
		this.src = obj.over_src;
	}

	Highlighter.prototype.out = function(e, obj) {
		this.src = obj.out_src;
	}
	
	Highlighter.prototype.reset = function(el) {
		el.src = this.out_src;
	}

	function ShowHide() {
	}

	ShowHide.prototype.over = function() {
		YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getFirstChild(this), 'invisible');
	}

	ShowHide.prototype.out = function() {
		YAHOO.util.Dom.addClass(YAHOO.util.Dom.getFirstChild(this), 'invisible');
	}
	
	ShowHide.prototype.reset = function() {
		YAHOO.util.Dom.addClass(YAHOO.util.Dom.getFirstChild(this), 'invisible');
	}
	
	return {
		init: function(current_video_id, related_video_ids) {
			var url = '/watch_recommended?current_video_id=' + current_video_id + '&ajax=1&rand=' + getToken();
			if (related_video_ids.length) {
				url += '&related_video_ids=' + related_video_ids.join(',');
			}
			
			var transaction = YAHOO.util.Connect.asyncRequest('GET', url, {
				success: function(o) {
					try { 
						var data = YAHOO.lang.JSON.parse(o.responseText);
						
						if (data.num_recommended >= 6) {
							var moreVideosTabview = new YAHOO.widget.TabView('moreVideosTabview2');
							
							moreVideosTabview.addTab(new YAHOO.widget.Tab({
								label:   'Recommended to You',
								content: data.html
							}));   
							
							moreVideosTabview.removeTab( moreVideosTabview.getTab(0) );
							
							YAHOO.youporn.thumbchange.register(data.num_recommended, 'recommended');
							
							YAHOO.youporn.video.recommended.icons_init('recommended');
							YAHOO.youporn.video.recommended.thumbs_up_highlight_init('recommended', 'http://files.youporn.com/images/thumbs_up_white_selected2.png', 'http://files.youporn.com/images/thumbs_up_white2.png');
			
							YAHOO.youporn.video.recommended.set_thumbnail_design(1);
							YAHOO.youporn.video.recommended.set_thumbnail_url_suffix(data.thumbnail_url_suffix);
							YAHOO.youporn.video.recommended.set_browser_size(1024);
							if (data.buffer_ids.length > 0) {
								YAHOO.youporn.video.recommended.set_buffer_video_ids(data.buffer_ids);
							}
						}
					} 
					catch (e) {}
				},
				
				failure: function(o) {},
				
				timeout: 15000			
			}); 	
		},
		
		set_thumbnail_design: function(num) {
			thumbnail_design = num;
		},
		
		set_browser_size: function(size) {
			browser_size = size;
		},
		
		set_buffer_video_ids: function(video_ids) {
			buffer_video_ids = video_ids;
		},
		
		set_thumbnail_url_suffix: function(suffix) {
			thumbnail_url_suffix = suffix;
		},
		
		remove_and_replace_thumbnail: function(el) { 
			var x_button         = el;
			var thumbs_up_button = YAHOO.util.Dom.getPreviousSibling(el);
			var thumbnail_div    = YAHOO.util.Dom.getNextSibling(el.parentNode);
			var current_video_id = YAHOO.util.Dom.getAttribute(thumbnail_div, 'video'); 
			
			var beacon = new Image();
			beacon.src = 'http://beacon.youporn.com/universal/rty_feedback?vid=' + current_video_id + '&type=5';
			
			YAHOO.util.Dom.addClass(thumbs_up_button, 'invisible');
			YAHOO.util.Dom.addClass(x_button, 'invisible');
			YAHOO.util.Dom.addClass(thumbnail_div, 'invisible');
			
			var next_video_id = buffer_video_ids.shift();
			if (!next_video_id) {
				return;
			}
			
			YAHOO.util.Dom.setAttribute(thumbnail_div, 'video', next_video_id);
			
			var url = '/element/thumbnail/' + next_video_id + '?browser_size=' + browser_size + '&thumbnail_design=' + thumbnail_design + '&ajax=1';
			if (thumbnail_url_suffix) {
				url += '&thumbnail_url_suffix=' + encodeURIComponent(thumbnail_url_suffix);
			}
			
			var transaction = YAHOO.util.Connect.asyncRequest('GET', url, {
				success: function(o) {
					thumbnail_div.innerHTML = o.responseText;
					YAHOO.youporn.thumbchange.register_one('thumbnail' + next_video_id);
					thumbs_up_highlighter.reset(YAHOO.util.Dom.getFirstChild(thumbs_up_button));
					YAHOO.youporn.video.recommended.thumbs_up_highlight_register(YAHOO.util.Dom.getFirstChild(thumbs_up_button));
					YAHOO.util.Dom.removeClass(thumbs_up_button, 'invisible');
					YAHOO.util.Dom.removeClass(x_button, 'invisible');
					YAHOO.util.Dom.removeClass(thumbnail_div, 'invisible');					
				},
				
				failure: function(o) {},
				
				timeout: 15000			
			}); 					
		},

		turn_off_rty: function() {
			if (confirm('Are you sure you want to turn off Recommendations?')) {
				document.turn_off_rty_form.previous.value = location.href;
				document.turn_off_rty_form.submit();			
			}		
		},

		icons_init: function(root) {
			show_hide = new ShowHide();
			var single_video_li = YAHOO.util.Dom.getElementsByClassName('single_video', 'li', root);
			for (var i=0; i < single_video_li.length; i++) {
				YAHOO.util.Event.addListener(single_video_li[i], 'mouseover', show_hide.over, show_hide);
				YAHOO.util.Event.addListener(single_video_li[i], 'mouseout', show_hide.out, show_hide);			
			}		
		},
	
		thumbs_up_highlight_init: function(root, over_src, out_src) {
			thumbs_up_highlighter = new Highlighter(over_src, out_src);
			
			var thumbs_up_buttons = YAHOO.util.Dom.getElementsByClassName('thumbs_up_button', 'img', root);
			for (var i=0; i < thumbs_up_buttons.length; i++) {
				YAHOO.youporn.video.recommended.thumbs_up_highlight_register(thumbs_up_buttons[i]);
			}	
		},
		
		thumbs_up_highlight_register: function(el) {
			YAHOO.util.Event.addListener(el, 'mouseover', thumbs_up_highlighter.over, thumbs_up_highlighter);
			YAHOO.util.Event.addListener(el, 'mouseout', thumbs_up_highlighter.out, thumbs_up_highlighter);	
		},

		thumbs_up_highlight_unregister: function(el) {
			YAHOO.util.Event.removeListener(el, 'mouseover');
			YAHOO.util.Event.removeListener(el, 'mouseout');	
		},
			
		thumbs_up: function(el) {
			var thumbnail_div    = YAHOO.util.Dom.getNextSibling(el.parentNode);
			var current_video_id = YAHOO.util.Dom.getAttribute(thumbnail_div, 'video'); 	
			
			var beacon = new Image();
			beacon.src = 'http://beacon.youporn.com/universal/rty_feedback?vid=' + current_video_id + '&type=1';
			
			YAHOO.youporn.video.recommended.thumbs_up_highlight_unregister(YAHOO.util.Dom.getFirstChild(el));
		}
	};
}();

