//if (!window.console) window.console = { log: function(){} };

$(document).ready(function(){
	userbar.init();
	popup.init();
	$('body').browserDetection();
});

function mailto(receiver, subject, body)
{
	subject = encodeURIComponent(subject);
	body 	= body;
	location.href = 'mailto:' + receiver + '?subject=' + subject + '&body=' + body;
}

var fbfn = {
	popup: function()
	{
		if (userId == null)
		{
			var params = { 
				log_referer: 'userbar_connect_fb', 
				log_info: location.href,
				actionOnLogin: 'connectFacebook'
			};
			popup.open('signInSignUp', params);
			return;
		}
		
		popup.open('connectFacebook');
	},
	connect: function(updateInterval)
	{
		var yes = function(){
			var requiredPermissions = ['publish_stream','offline_access'];
			FB.Connect.showPermissionDialog(requiredPermissions.join(','), function(perms){
			
				var success = true;
				var permsA 	= perms.split(',');
				
				for (var i = 0; i < requiredPermissions.length; i++)
				{
					if (permsA.indexOf(requiredPermissions[i]) == -1)
					{
						success = false;
					}
				}
				
				if (!success)
				{
					alert('You must allow permissions');
				}
				else
				{
					window.setTimeout(function(){
						location.href = base_url + 'profile/registeredWithFacebook/' + updateInterval;
					}, 100);
				}
			});
		}
		
		var fbUID = FB.Connect.get_loggedInUser();
		if (!fbUID)
		{
			FB.Connect.requireSession(function(){
				var fbUID = FB.Connect.get_loggedInUser();
				var onComplete = function(response){
					if (response) 
					{
						alert("You have another user connected with Facebook");
						FB.Connect.logout();
						return false;
					}
					yes();
				}
				$.post(base_url + 'ajax/auth/fbUserIsConnected', { fbUID: fbUID }, onComplete, 'json');
			}, function(){ alert('You must connect'); }, true);
		}
		else
		{
			yes();
		}
	},
	login: function()
	{
		var fbUID = FB.Connect.get_loggedInUser();
		
		var onComplete = function(response) {
			if (response) location.reload(true);
			else fbfn.createUser();
		}
		
		$.post(base_url + 'ajax/auth/fbUserIsConnected', { fbUID: fbUID }, onComplete, 'json');
	},
	createUser: function()
	{
		var requiredPermissions = ['email'];
		FB.Connect.showPermissionDialog(requiredPermissions.join(','), function(perms){
			var permsA = perms.split(',');
			for (var i = 0; i < requiredPermissions.length; i++)
			{
				if (permsA.indexOf(requiredPermissions[i]) == -1)
				{
					alert('You must allow ' + requiredPermissions[i]);
					fbfn.login();
					return false;
				}
			}
			
			location.href = global_url + 'fbusercreate';
		});
	}
}

var userbar = {
	init: function()
	{
		var $userbar = $('#userbar');
		$userbar.find('span.button').each(userbar.button.prepare);
		
		if (window.userId == null)
		{
			var $signin = $userbar.find('span.button span.content span.signin:first');
			
			var $form = $('#signin');
			$form.find('.arrow a').click(userbar.signin.signin);
			$form.submit(userbar.form.submit);
			
			$('#email_cnt input')
				.focus(userbar.signin.input.email.focus)
				.blur(userbar.signin.input.email.blur);
				
			/*
			$('#placeholder_cnt')
				.mousedown(userbar.signin.input.placeholder.mousedown);
			
			$('#password_cnt input')
				.focus(userbar.signin.input.password.focus)
				.blur(userbar.signin.input.password.blur);
				
			$(window).load(userbar.signin.init);
			*/
		}
	},
	button: {
		prepare: function()
		{
			var $content = $(this);
			var contentWidth = $content.find('span.label, span.signin').width();
			$content.find('span.img img, span.img').width(contentWidth);
		}
	},
	form: {
		submit: function()
		{
			if (auth.loginVerified) 
				return true;
				
			var $this 		= $(this);
			var email 		= $this.find('input[name=email]').val();
			var password 	= $this.find('input[name=password]').val();
			
			$this
				.find('span.arrow')
				.removeClass('arrow')
				.addClass('load');
			
			var onComplete = function(success)
			{
				if (success)
				{
					userbar.signin.signin();
				}
				
				$this
					.find('span.load')
					.removeClass('load')
					.addClass('arrow');
			}
			
			auth.verifyLogin(email, password, onComplete);
			return false;
		}
	},
	signin: {
		init: function()
		{
			if ($('#password_cnt input').val())
			{
				$('#password_cnt input').focus();
			}
		},
		signin: function()
		{
			$('#signin').submit();
		},
		input: {
			email: {
				defaultValue: null,
				blur: function()
				{
					if (this.value == '')
					{
						this.value = userbar.signin.input.email.defaultValue;
					}
				},
				focus: function()
				{
					if (!userbar.signin.input.email.defaultValue)
					{
						userbar.signin.input.email.defaultValue = this.value;
					}
					
					if (this.value == userbar.signin.input.email.defaultValue)
					{
						this.value = '';
					}
				}
			},
			placeholder: {
				mousedown: function()
				{
					$('#email_cnt input').blur();
					$('#password_cnt input').focus();
				}
			},
			password: {
				blur: function() 
				{
					if (this.value == '')
					{
						$('#placeholder_cnt').removeClass('hidden');
					}
				},
				focus: function()
				{
					$('#placeholder_cnt').addClass('hidden');
				}
			}
		}
	},
	signout: function()
	{
		FB.Connect.logout(function(){
			location.href = base_url + 'signout';
		});
	}
}

var auth = {
	loginVerified: false,
	verifyLogin: function(email, password, onCompleteListener)
	{
		var params = {
			email: 		email,
			password: 	password
		};
		
		var onComplete = function(response)
		{
			if (!response.verified)
			{
				alert(response.feedback);
			}
			else
			{
				auth.loginVerified = true;
			}
			
			if (onCompleteListener)
			{
				onCompleteListener(response.verified);
			}
		}
		
		$.post(base_url + 'ajax/auth/verifyLogin', params, onComplete, 'json');
	},
	upload: function()
	{
		if(userId == null)
		{
			var params = { 
				log_referer: 'userbar_uploadvideo', 
				log_info: location.href,
				actionOnLogin: 'uploadVideo'
			};
			popup.open('signInSignUp', params);
		}
		else
		{
			popup.open('uploadVideo');
		}
		return false;
	}
};

var contentPage = {
	signUp: function(){
		if (userId) return;

		var params = { 
			log_referer: 'contentpage', 
			log_info: location.href
		};
		popup.open('signInSignUp', params);
	}
}

var popup = {
	isOpen: false,
	baseHTML: null,
	$container: null,
	cache: null,
	init: function()
	{
		var $popup = $('#popup');
		$popup.find('a.close-btn').click(popup.close);
		
		popup.$container 	= $popup.find('div.popup-center-bg div.popup-cont');
		popup.baseHTML 		= popup.$container.html();
	},
	open: function(popupId, parameters, cacheIfCurrent)
	{
		if (cacheIfCurrent && popup.isOpen)
		{
			popup.cacheCurrent();
			popup.$container.html(popup.baseHTML);
		}
		
		popup.setPositionAndShow();
		
		var onComplete = function(response)
		{
			popup.isOpen = true;
			popup.setHTML(response.html);
		}
		
		$.post(base_url + 'ajax/popupMarkup/' + popupId, parameters, onComplete, 'json');
	},
	cacheCurrent: function()
	{
		var fields = [];
		popup.$container.find('input:not([type=checkbox],[type=radio]), textarea, select').each(function(){
			var $form = $(this).parents('form');
			var formId = $form.attr('id');
			
			if ($form.length == 0 || !formId) return;
			
			fields.push({
				formId: formId,
				name: this.name,
				value: this.value
			});
		});
		
		popup.cache = {
			html: popup.$container.html(),
			fields: fields
		}
	},
	close: function()
	{
		if (popup.cache)
		{
			popup.openCache();
			return false;
		}
		
		popup.isOpen = false;
		$('#popup, #popup_background').hide().removeClass('wide');
		$('select').css('visibility', 'visible');
		popup.$container.html(popup.baseHTML);
		return false;
	},
	openCache: function()
	{
		var fields = popup.cache.fields;
		popup.setHTML(popup.cache.html);
		
		for (var n = 0; n < fields.length; n++)
		{
			$('#' + fields[n].formId + ' [name=' + fields[n].name + ']').val(fields[n].value);
		}
		
		popup.cache = null;
	},
	setHTML: function(html)
	{
		popup.$container.html(html);
	},
	setPosition: function()
	{
		var $body  		= $('body');
		var $popup 		= $('#popup');
		var popupX 		= ($(window).width() - $popup.width()) / 2;
		var popupScroll = ($popup.height() > ($(window).height() - 100));
		
		if ($body.hasClass('MSIE') && $body.hasClass('ver6'))
		{
			var scrollTopBg 	= $(window).scrollTop();
			var scrollTopPopup 	= (popupScroll ? 0 : scrollTopBg);
			
			$popup.css({
				left: popupX + 'px',
				top: (scrollTopPopup + 50) + 'px'
			});
			
			$('#popup_background').css({
				top: scrollTopBg + 'px',
				height: $(window).height()
			});
			
			setTimeout(popup.setPosition, 20);
		}
		else
		{
			var popupPosition = (popupScroll ? 'absolute' : 'fixed');
			//var popupPosition = 'absolute';
			
			$popup.css({
				left: popupX + 'px',
				position: popupPosition
			});
		}
	},
	setPositionAndShow: function()
	{
		popup.setPosition();
		$('#popup, #popup_background').show();
		$('select').css('visibility', 'hidden');
	}
};

var fileupload = {
	uploadEvents: null,
	setupFileupload: function(container, uploadEvents, expressInstallConfig)
	{
		if (!container.id)
		{
			var container_id;
			do
			{
				container_id = uniqueId();
			}
			while(document.getElementById(container_id));
			container.id = container_id;
		}
	
		fileupload.uploadEvents = uploadEvents;
			
		if (swfobject.hasFlashPlayerVersion("9.0.115")) {
			var fn = function() {
				var att = { data:global_url+"image/fileupload.swf", width:"78", height:"24", wmode:'transparent', bgcolor:'#ffffff' };
				var par = { 
					flashvars:	"event_success=fileupload.uploadEvents.success" +
								"&event_select=fileupload.uploadEvents.select" + 
								"&event_progress=fileupload.uploadEvents.progress" + 
								"&event_error=fileupload.uploadEvents.error" +
								"&event_start=fileupload.uploadEvents.start" +
								"&event_complete=fileupload.uploadEvents.complete" +
								"&receiver=upload.php" + 
								"&debug_mode=1" + 
								"&fileMaxSize=" + uploadMaxSize +
								"&label=" + translations.buttons.browse.toUpperCase(),
					bgcolor: '#ffffff',
					wmode: 'transparent'
				};
				var flashObj = swfobject.createSWF(att, par, container.id);
				if (uploadEvents.init)
				{
					var flashInitInterval = setInterval(function(){
						if (flashObj && flashObj.setFileFilter)
						{
							clearInterval(flashInitInterval);
							uploadEvents.init(flashObj, container.id);
						}
					}, 100);
				}
			};
			swfobject.addDomLoadEvent(fn);
		}
		else if (expressInstallConfig)
		{
			jQuery(expressInstallConfig.container).empty();
			var flashCont = jQuery('<div class="flashCont"></div>').appendTo(expressInstallConfig.container).get(0);
			setupExpressInstall(flashCont, expressInstallConfig.width, expressInstallConfig.height);
			if (expressInstallConfig.onExpressInstall)
			{
				expressInstallConfig.onExpressInstall();
			}
		}
	},
	setupExpressInstall: function(container, width, height)
	{
		if (!container.id)
		{
			var container_id;
			do
			{
				container_id = uniqueId();
			}
			while(document.getElementById(container_id));
			container.id = container_id;
		}
		
		width = width || 260;
		height = height || 170;
		
		var fn = function() {
			var att = { data:global_url+"image/expressInstall.swf", width:width, height:height, wmode:'transparent', bgcolor:'#ffffff' };
			var par = { 
				flashvars:	"",
				bgcolor: '#ffffff'
			};
			var flashObj = swfobject.createSWF(att, par, container.id);
			if (uploadEvent.init)
			{
				var flashInitInterval = setInterval(function(){
					if (flashObj && flashObj.setFileFilter)
					{
						clearInterval(flashInitInterval);
						uploadEvent.init(flashObj, container.id);
					}
				}, 100);
			}
		};
		swfobject.addDomLoadEvent(fn);
	}
}

function uniqueId()
{
	var chars = 'abcdefghijklmnopqrstuvwxyz';
	var str = '';
	for (var i = 0; i < 10; i++)
	{
		str = str + chars.substr(Math.floor(Math.random()*chars.length), 1);
	}
	return str;
}

var stars = {
	update: function($stars, rating)
	{
		rating = Math.round(rating * 2) / 2;
		
		var wholeCount = Math.floor(rating);
		$stars
			.slice(0, wholeCount)
			.attr('class', 'star star-gold');
		
		$stars
			.slice(wholeCount)
			.attr('class', 'star star-gray');
			
		if (rating - wholeCount >= 0.5)
		{
			$stars
				.slice(wholeCount, wholeCount+1)
				.attr('class', 'star star-half');
		}
	}
}

var videoSearch = {
	genre: function(genre_id)
	{
		var $form = $('#globalSearch');
		$form.find('input[name=searchGenre]').val(genre_id);
		$form.submit();
	},
	keyword: function(keyword_id)
	{
		var $form = $('#globalSearch');
		$form.find('input[name=searchKeyword]').val(keyword_id);
		$form.submit();
	},
	genreAndKeyword: function(genre_id, keyword_id)
	{
		var $form = $('#globalSearch');
		$form.find('input[name=searchGenre]').val(genre_id);
		$form.find('input[name=searchKeyword]').val(keyword_id);
		$form.submit();
	},
	text: function(text)
	{
		var $form = $('#globalSearch');
		$form.find('input[name=searchText]').val(text);
		$form.submit();
	}
}

var actionLib = {
	KEY_ENTER: 13,
	invokeOnEnter: function(elm, event, action)
	{
		event = event || window.event;
		var keyCode = event.which || event.keyCode;
		
		if (keyCode == actionLib.KEY_ENTER)
		{
			action();
			return false;
		}
		return true;
	}
}