var MyBBS = (function (
	initValues)
{
	var myBBS = { UserUtilities: {} },
		window = this,
		utilities = (window.Utilities || {}),
		isDotNet = (initValues.IsDotNet || false),
		cookieDomain = (initValues.CookieDomain || '.bizbuysell.com'),
		loggedInCookieName = (initValues.LoggedInCookieName || 'LinuxLoggedIn'),
		loginGreetingCookieName = (initValues.LoginGreetingCookieName || 'LinuxGreeting'),
		loginIsBrokerCookieName = (initValues.LoginIsBrokerCookieName || 'LinuxIsBroker'),
		loggedOutUpsellCookieName = (initValues.LoggedOutUpsellCookieName || 'LinuxLoggedOutUpSell'),
		loggedInUpsellCookieName = (initValues.LoggedInUpsellCookieName || 'LinuxLoggedInUpSell'),
		registrationType = (initValues.RegistrationType || 0),
		registrationTypeQueryStringKey = (initValues.RegistrationTypeQueryStringKey || 'm_rt'),
		onRegistrationSuccessfulRedirectUrl = (initValues.OnRegistrationSuccessfulRedirectUrl || 0),
		onRegistrationSuccessfulRedirectUrlQueryStringKey = (initValues.OnRegistrationSuccessfulRedirectUrlQueryStringKey || 'returnurl'),
		loginType = (initValues.LoginType || 0),
		loginTypeSet = false,
		redirectBrokerOnSuccessfulLogin = !!initValues.RedirectBrokerOnSuccessfulLogin,
		loginHeading = 'Already a BizBuySell Member?';

	if (registrationType > 0)
	{
		registrationTypeSet = true;
	}

	myBBS.LinuxLogOut = function ()
	{
		if (typeof (myBBS.UserUtilities.Logout) == 'function')
		{
			myBBS.UserUtilities.Logout(
				function (
					logOutSuccessful)
				{
					logOutSuccessful = !!logOutSuccessful;

					if (logOutSuccessful)
					{
						top.location = 'http://www.bizbuysell.com/';
					}
				});
		}
	};

	myBBS.LinuxLogIn = function (
		username,
		password)
	{
		if (typeof (myBBS.UserUtilities.Login) == 'function')
		{
			myBBS.UserUtilities.Login(
				username,
				password,
				loginType,
				function (
					loginResult)
				{
					loginResult = (
						loginResult ||
						{
							UserLoggedInSuccessfully: false,
							UserGreeting: '',
							IsBroker: false,
							OnBrokerLoginSuccessfulRedirectUrl: '',
							ReportedAbuseQuestionIDs: [],
							ReportedAbuseAnswerIDs: [],
							SavedSearches: []
						});

					var wasLoginSuccessful = !!loginResult.UserLoggedInSuccessfully;

					if (wasLoginSuccessful)
					{
						loginSuccessful(
							loginResult);

						$('#loginPopupOverlay.loginFailed').removeClass('loginFailed');

						myBBS.ToggleSignInPopup();

						if ((window.Listings) &&
							(typeof (Listings.OnLoginSuccessful) == 'function'))
						{
							Listings.OnLoginSuccessful(
								loginResult.SavedSearches);
						}
					}
					else
					{
						loginFailed();
					}
				});
		}
	};

	myBBS.IsUserLoggedInLinux = function ()
	{
		return (($.cookie(loggedInCookieName) || 'false') == 'true');
	};

	myBBS.ToggleSignInPopup = function (
		options)
	{
		options = (options || {});
		var existingEmailAddress = (options.ExistingEmailAddress || '');
		var customLoginHeading = (options.CustomLoginHeading || '');
		var customLoginSubHeading = (options.CustomLoginSubHeading || '');

		if (customLoginHeading != '')
		{
			loginHeading = $('#myBBSLoginHeading').html();

			$('#myBBSLoginHeading').html(
				customLoginHeading);
		}
		else
		{
			$('#myBBSLoginHeading').html(
				loginHeading);
		}

		if (customLoginSubHeading != '')
		{
			$('#myBBSLoginSubHeading').html(
				customLoginSubHeading).show();
		}
		else
		{
			$('#myBBSLoginSubHeading').html(
				'').hide();
		}

		$('body').toggleClass(
			'signIn').toggleClass(
				'showOverlay');

		var signInPopupVisible = $('body').hasClass(
			'signIn');

		if (($.browser.msie) &&
			($.browser.version < 7))
		{
			var bodyHeight = $('body').height();
			var windowHeight = $(window).height();

			if (bodyHeight > windowHeight)
			{
				$('#bbs_page_overlay').height(
					bodyHeight);
			}
			else
			{
				$('#bbs_page_overlay').height(
					windowHeight);
			}

			$('select').toggle();
		}

		if (existingEmailAddress != '')
		{
			$('#txtUserName').val(
				existingEmailAddress);

			$('#alreadyRegistered').show();

			$('#newToBBS').hide();

			$('#txtPassword').focus();

			var forgotPasswordLink = $('.myBBSLoginForgotPassword a');

			if (forgotPasswordLink)
			{
				forgotPasswordLink.attr(
					'href',
					function ()
					{
						return (
							this.href +
							((this.href.indexOf('?') >= 0) ?
								'&' :
								'?') +
							'rl_email=' +
							encodeURIComponent(existingEmailAddress));
					});
			}
		}

		toggleRegistrationType(
			(options.RegistrationType || 0));

		toggleOnRegistrationSuccessfulRedirectUrl(
			(options.OnRegistrationSuccessfulRedirectUrl || ''));

		if (signInPopupVisible)
		{
			$(document).scrollTop(0);
		}
	};

	myBBS.OnLoginSuccessful = function (
		loginResult)
	{
		loginResult = (
			loginResult ||
			{
				UserLoggedInSuccessfully: false,
				UserGreeting: '',
				IsBroker: false,
				OnBrokerLoginSuccessfulRedirectUrl: '',
				ReportedAbuseQuestionIDs: [],
				ReportedAbuseAnswerIDs: [],
				SavedSearches: []
			});

		var isBroker = !!loginResult.IsBroker;
		var onBrokerLoginSuccessfulRedirectUrl = (loginResult.OnBrokerLoginSuccessfulRedirectUrl || '');

		myBBS.ToggleSignInPopup();

		$('#loginPopupOverlay.loginFailed').removeClass('loginFailed');

		if ((isBroker) &&
			(redirectBrokerOnSuccessfulLogin) &&
			(onBrokerLoginSuccessfulRedirectUrl != ''))
		{
			$(document).bind(
				'OnMyBBSLoginSuccessful',
				function (
					evt)
				{
					window.location = onBrokerLoginSuccessfulRedirectUrl;
				});
		}

		loginSuccessful(
			loginResult);
	};

	myBBS.OnLoginFailed = function ()
	{
		loginFailed();
	};

	myBBS.ResetNotificationCheckbox = function (
		chkElement,
		checked)
	{
		checked = !!checked;

		if (chkElement)
		{
			chkElement.attr(
				'checked',
				checked);
		}
	};

	myBBS.SetLoginType = function (
		loginTypeLocal)
	{
		if (!loginTypeSet)
		{
			loginType = loginTypeLocal;

			loginTypeSet = true;
		}
	};

	myBBS.HideLoggedOutPromo = function ()
	{
		$('#loggedOutPromo').hide();
	};

	myBBS.HideLoggedInPromo = function ()
	{
		$('#loggedInPromo').hide();
	};

	function toggleRegistrationType(
		registrationTypeLocal)
	{
		registrationTypeLocal = (registrationTypeLocal || 0);

		if (registrationType > 0)
		{
			registrationType = 0;
		}
		else if (registrationTypeLocal > 0)
		{
			registrationType = registrationTypeLocal;
		}
	}

	function toggleOnRegistrationSuccessfulRedirectUrl(
		onRegistrationSuccessfulRedirectUrlLocal)
	{
		onRegistrationSuccessfulRedirectUrlLocal = (onRegistrationSuccessfulRedirectUrlLocal || 0);

		if (onRegistrationSuccessfulRedirectUrl != '')
		{
			onRegistrationSuccessfulRedirectUrl = '';
		}
		else if (onRegistrationSuccessfulRedirectUrlLocal != '')
		{
			onRegistrationSuccessfulRedirectUrl = onRegistrationSuccessfulRedirectUrlLocal;
		}
	}

	function checkLoggedInStatus()
	{
		var loggedIn = ($.cookie(loggedInCookieName) || 'false');
		var logInGreeting = ($.cookie(loginGreetingCookieName) || '');
		var isBroker = ($.cookie(loginIsBrokerCookieName) || 'false');

		if (loggedIn == 'true')
		{
			loginSuccessful(
				{
					UserLoggedInSuccessfully: true,
					UserGreeting: logInGreeting,
					IsBroker: (isBroker == 'true')
				});
		}
	}

	function checkPromoStatus()
	{
		var loggedInPromoDisabled = ($.cookie(loggedInUpsellCookieName) || 'false');
		var loggedOutPromoDisabled = ($.cookie(loggedOutUpsellCookieName) || 'false');

		if (loggedInPromoDisabled == 'true')
		{
			$('#loggedInPromo').hide();
		}

		if (loggedOutPromoDisabled == 'true')
		{
			$('#loggedOutPromo').hide();
		}
	}

	function login()
	{
		var txtUserName = $('#txtUserName');
		var txtPassword = $('#txtPassword');

		var invalidUserName = false;
		var invalidPassword = false;

		if (txtUserName.val().length == 0)
		{
			invalidUserName = true;
		}
		else if (txtUserName.val() == txtUserName.attr('defaultValue'))
		{
			invalidUserName = true;
		}

		if (txtPassword.val().length == 0)
		{
			invalidPassword = true;
		}

		if ((invalidUserName) &&
			(invalidPassword))
		{
			alert('Please enter your User Name and Password');

			txtUserName.focus();
		}
		else if (invalidUserName)
		{
			alert('Please enter your User Name');

			txtUserName.focus();
		}
		else if (invalidPassword)
		{
			alert('Please enter your Password');

			txtPassword.focus();
		}
		else
		{
			$('#divDisableMyBBSLogin').show();

			if (isDotNet)
			{
				if ((window.Users) &&
					(typeof (Users.Login) == 'function'))
				{
					Users.Login(
						txtUserName.val(),
						txtPassword.val(),
						loginType);
				}
			}
			else
			{
				myBBS.LinuxLogIn(
					txtUserName.val(),
					txtPassword.val());
			}
		}
	}

	function loginSuccessful(
		loginResult)
	{
		loginResult = (
			loginResult ||
			{
				UserLoggedInSuccessfully: false,
				UserGreeting: '',
				IsBroker: false,
				OnBrokerLoginSuccessfulRedirectUrl: '',
				ReportedAbuseQuestionIDs: [],
				ReportedAbuseAnswerIDs: [],
				SavedSearches: []
			});

		userGreeting = (loginResult.UserGreeting || '');

		$('#myBBSTopNav').addClass(
			'loggedIn');

		if (userGreeting.length > 0)
		{
			$('#lblMyBBSGreeting').html(
				userGreeting);
		}

		$('#txtUserName').val(
			'').blur();

		$('#txtPassword').val(
			'');

		$('#loginPopupOverlay').removeClass(
			'loginFailed');

		$('#divDisableMyBBSLogin').hide();

		if (!!loginResult.IsBroker)
		{
			var hlMyBBSMenu = $('#hlMyBBSMenu');

			if (hlMyBBSMenu)
			{
				hlMyBBSMenu.parent('li').removeClass(
					'mybbsUser').addClass(
						'brokerworksUser');
			}

			$('#loggedInPromo').hide();

			$.cookie(
				loggedInUpsellCookieName,
				'true',
				{
					domain: cookieDomain,
					path: '/'
				});
		}

		$('#bbs_page_overlay').unbind('click');

		$(document).trigger(
			'OnMyBBSLoginSuccessful',
			[registrationType]);
	}

	function loginFailed()
	{
		$('#loginPopupOverlay').removeClass(
			'loginFailed').addClass(
				'loginFailed');

		$('#txtPassword').val(
			'');

		$('#divDisableMyBBSLogin').hide();
	}

	if (jQuery)
	{
		$(function ()
		{
			$('#hlMyBBSMenu, .myBBS-topNavPrimary ul').hover(function ()
			{
				$('.myBBS-topNavPrimary ul').stop().show(0);
			});

			$('.myBBS-topNavPrimary').mouseleave(function ()
			{
				$('.myBBS-topNavPrimary ul').delay(500).hide(0);
			});

			$('#hlClosedLoggedInPromoCode').click(function ()
			{
				$('#loggedInPromo').hide();

				$.cookie(
					loggedInUpsellCookieName,
					'true',
					{
						domain: cookieDomain,
						path: '/'
					});

				return false;
			});

			$('#hlClosedLoggedOutPromoCode').click(function ()
			{
				$('#loggedOutPromo').hide();

				$.cookie(
					loggedOutUpsellCookieName,
					'true',
					{
						domain: cookieDomain,
						path: '/'
					});

				return false;
			});

			$('#hlMyBBSSignOut').click(function ()
			{
				if (isDotNet)
				{
					if ((window.Users) &&
						(typeof (Users.Logout) == 'function'))
					{
						Users.Logout();
					}
				}
				else
				{
					MyBBS.LinuxLogOut();
				}
			});

			$('#hlMyBBSSignIn').click(function ()
			{
				MyBBS.ToggleSignInPopup();

				$('#bbs_page_overlay').click(function ()
				{
					MyBBS.ToggleSignInPopup();

					$('body').removeClass(
						'showOverlayOverride');

					$('#loginPopupOverlay').removeClass(
						'loginFailed');

					$('#txtUserName').val(
						'');

					$(this).unbind('click');
				});
			});

			$('#hlCancel').click(function ()
			{
				MyBBS.ToggleSignInPopup();

				$('body').removeClass(
					'showOverlayOverride');

				$('#loginPopupOverlay').removeClass(
					'loginFailed');

				$('#txtUserName').val(
					'');

				$('#bbs_page_overlay').unbind('click');
			});

			$('#hlLogin').click(login);

			$('#txtUserName').focus(function ()
			{
				var txtUserName = $(this);

				if (txtUserName.hasClass('watermark'))
				{
					txtUserName
						.val('')
						.toggleClass(
							'watermark');
				}
			});

			$('#txtUserName').blur(function ()
			{
				var txtUserName = $(this);

				if (txtUserName.val().length <= 0)
				{
					txtUserName
						.val(
							txtUserName.attr('defaultValue'))
						.toggleClass(
							'watermark');
				}
			});

			$('#txtUserName, #txtPassword').keypress(function (
				evt)
			{
				var keyCode = ((evt.keyCode || evt.which) || 0);

				if (keyCode == 13)
				{
					login();

					return false;
				}
			});

			$('#hlJoinMyBBS').click(function ()
			{
				var hlJoinMyBBS = $(this);

				var href = hlJoinMyBBS.attr(
					'href');

				if (href != '')
				{
					if ((registrationType > 0) &&
						(href.indexOf(registrationTypeQueryStringKey) < 0))
					{
						href += (
							((href.indexOf('?') >= 0) ?
								'&' :
								'?') +
							registrationTypeQueryStringKey +
							'=' +
							registrationType);
					}

					if ((onRegistrationSuccessfulRedirectUrl != '') &&
						(href.indexOf(onRegistrationSuccessfulRedirectUrlQueryStringKey) < 0))
					{
						href += (
							((href.indexOf('?') >= 0) ?
								'&' :
								'?') +
							onRegistrationSuccessfulRedirectUrlQueryStringKey +
							'=' +
							encodeURIComponent(onRegistrationSuccessfulRedirectUrl));
					}

					hlJoinMyBBS.attr(
						'href',
						href);
				}
			});

			if (!isDotNet)
			{
				checkLoggedInStatus();

				checkPromoStatus();
			}

			$('#myBBSTopNav').show().css('visibility', 'visible');
		});
	}

	if ((window.BizBuySellWebSite) &&
		(BizBuySellWebSite.users) &&
		(BizBuySellWebSite.users.Services) &&
		(BizBuySellWebSite.users.Services.Users))
	{
		myBBS.UserUtilities = BizBuySellWebSite.users.Services.Users;
	}

	return myBBS;
})(window.MyBBSInitValues || {});