
/* Trillian for Web
 *
 * In-site registration and sign on
 *
 * Copyright (C) 2010 Cerulean Studios, LLC
 *
 * Programmer: Andy Magoon
 */

var g_profileRequest = null;
var g_registering = false;
var g_registering_timeout = null;
var g_network = 'astra';
var g_initfocuscancel = false;
var g_focused = null;
var au,ap,np,ae,sqe,sqc,sa;
var g_fbname;
var g_fbwatch = {handler: false, faded: false, chatfaded: false, loginfaded: false};

$(document).ready(function() { 
	$("input.username").keypress(function(a_event)
	{
		if (a_event.which == 13)
		{
			$("input.username[rel="+g_network+"]").blur();
			$("input.password[rel="+g_network+"]").focus();
			return false;
		}
		g_initfocuscancel = true;
	});

	$("input.password").keypress(function(a_event)
	{
		if (a_event.which == 13)
		{
			login();
		}
		g_initfocuscancel = true;
	});

	$("input#register-username, input#email, input#register-password, input#verify, input#security_question_custom, input#security_answer").bind("change", function(){
		$(this).removeClass("error");
	});

	$("input#register-username, input#email").keypress(function(a_event){ if (a_event.which == 13) show_register_2(); });

	$("input#register-password, input#verify, input#security_question_custom, input#security_answer").keypress(function(a_event){ if (a_event.which == 13) show_register_3(); });
	
	$("a#btn-register-1-cancel").click(function()
	{
		hide_register();
	});

	$("input.usernamehelper").each(function()
	{
		var l_network = $(this).attr("rel");
		$("input.username[rel="+l_network+"]").data("helper", $(this).val());
	});

	$("input.passwordhelper").each(function()
	{
		var l_network = $(this).attr("rel");
		$("input.password[rel="+l_network+"]").data("helper", $(this).val());
	});

	$("input.username, input.password").focus(function(){
		g_focused = $(this);
		$(this).select();
	});

	$("input.usernamehelper").focus(function(){
		$("input.username[rel="+$(this).attr("rel")+"]").focus();
	});

	$("input.passwordhelper").focus(function(){
		$("input.password[rel="+$(this).attr("rel")+"]").focus();
	});

	
	$("input.username").bind('keydown', function()
	{
		$("input.usernamehelper[rel="+$(this).attr("rel")+"]").val("");
	});

	$("input.username").bind('keyup change', function()
	{
		if ($(this).val() == "") 
		{
			$("input.usernamehelper[rel="+$(this).attr("rel")+"]").val($(this).data("helper"));
		}
	});

	$("input.password").bind('keydown', function()
	{
		$("input.passwordhelper[rel="+$(this).attr("rel")+"]").val("");
	});
	$("input.password").bind('keyup change', function()
	{
		if ($(this).val() == "") 
		{
			$("input.passwordhelper[rel="+$(this).attr("rel")+"]").val($(this).data("helper"));
		}
	});
	$("input#btn-register-1-next").click(function()
	{
		show_register_2();
	});

	$("a#btn-register-2-back").click(function()
	{
		show_register_1();
	});

	$("input#btn-register-2-submit").click(function()
	{
		show_register_3();
	});

	$("select#security_question_enum").bind("change", function(){
			if ($(this).val() == "0")
			{
				$("div#custom-question-row").show();
				$("input#security_question_custom").focus();
			} else {
				$("div#custom-question-row").hide();
				$("input#security_answer").focus();
			}
	});	
	$("select#security_question_enum").bind("keyup", function(){
			if ($(this).val() == "0")
			{
				$("div#custom-question-row").show();
			} else {
				$("div#custom-question-row").hide();
			}
	});	

	$("div.facebookbutton").click(function()
	{
		fbStart();
		$(this).fadeTo(100, .5, function(){
			$(this).fadeTo(1000, 1);
		});
	});

	au = $("input#register-username");
	ap = $("input#register-password");
	np = $("input#register-password");
	ae = $("input#email");
	sqe = $("select#security_question_enum");
	sqc = $("input#security_question_custom");
	sa = $("input#security_answer");
});


function login()
{
	if (g_mode == 'register') return;

	$("#container").css("min-height", "365px");
	g_minIndexHeight = 400;
	if (g_news) 
	{
		$("div#index-notice, div.news").hide();
		$("div#index-notice").hide();
		clearInterval(g_news);
		rotateIndexNotice();
	}
	
	document.title = "Trillian";
	
	var un = $("input.username[rel="+g_network+"]").val();
	var pw = $("input.password[rel="+g_network+"]").val();

	if (g_network == "facebook" && !g_fbname)
	{
		fbStart();
		return;
	}

	var invalidMessage = invalidUser(un, pw, g_network);
	if (invalidMessage)
	{
		alert(invalidMessage);
		return false;
	}

	if (g_network != 'astra')
	{
		g_mode = "register";
		$("span#signinto").text("to ");
		$("span#signinname").text(un + " ");
		show_register();
		return;
	}
	
//	$("form#blank").submit();
	$("#index-header, #index-download").hide();
	$("#index-login, #index-login-more, #index-web, #index-notice, #slogan").hide();
	$("#footer, #helper, #header").hide();
	$("#login-loading").show();
	$("div#footer, div.header").hide();
	$("#index-header, #index-login, #index-login-more").hide();
	$("#login-loading").show(1,function() {
		if ($.browser.msie)
		{
			setTimeout(function() {
				ui_login($("input.username[rel=astra]").val(), $("input.password[rel=astra]").val());
			},500);
		} else {
			ui_login($("input.username[rel=astra]").val(), $("input.password[rel=astra]").val());
		}
	});
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
	window.scrollTo(0,0);

}


function invalidUser(a_un, a_pw, a_network)
{ 
	switch (a_network)
	{
		case "facebook":
			if (!g_fbname)
			{
				return("You must connect with Facebook before continuing");
			}
			return false;
		case "msn":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both Windows Live email and password.");
			}
			if (!isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Please enter a valid Windows Live email.");
			}
			break;
		case "jabber":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both Jabber JID and password.");
			}
			if (!isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Please enter a valid Jabber JID.");
			}
			break;
		case "myspace":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both MySpaceIM email and password.");
			}
			if (!isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Please enter a valid MySpaceIM email.");
			}
			break;
		case "google":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both Google Talk username and password.");
			}
			if (a_un.indexOf("@") == -1)
			{
				a_un += "@gmail.com";
				$("input.username[rel="+a_network+"]").val(a_un);
			}
			if (!isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Please enter a valid Google Talk username.");
			}
			break;
		case "aim":
			if (a_un.indexOf(" ") != -1)
			{
				a_un = a_un.replace(/ /g,"");
				$("input.username[rel="+a_network+"]").val(a_un);
			}
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both AIM Screen Name and password.");
			}
			if (a_un.search(/^[0-9]/) != -1)
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Your AIM Screen Name cannot start with a number.");
			}
			if (a_un.indexOf("@") != -1)
			{
				if (!isValidEmail(a_un))
				{
					return("Invalid entry.  The email address you've entered is not valid.");
				}
			}
			break;
		case "yahoo":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both Yahoo! ID and password.");
			}
			if (a_un.indexOf("@yahoo.com") != -1)
			{
				a_un = a_un.replace("@yahoo.com", "");
				$("input.username[rel="+a_network+"]").val(a_un);
			}
			break;
		case "icq":
			a_un = a_un.replace(/[^\d]/g, "");
			$("input.username[rel="+a_network+"]").val(a_un);
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both ICQ UIN and password.");
			}
			if (a_un.length < 6)
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  You must enter your ICQ UIN as 6 or more numbers, no letters or symbols.");
			}
			break;
		case "astra":
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both Astra Username and password.");
			}
			if (isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Astra Usernames do not use an email addresses.  Please try again.");
			}
			if (!isValidUsernameForSignin(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Astra Usernames must start with a letter, contain between 6 and 64 numbers/letters, no symbols other than period or underscore.");
			}
			break;
		default:
			if (a_pw == "" || a_un == "")
			{
				$("input.password[rel="+a_network+"]").focus();			
				return("Please enter both username and password.");
			}
			if (isValidEmail(a_un))
			{
				$("input.username[rel="+a_network+"]").focus();			
				return("Invalid entry.  Please enter a valid email address.");
			}
			break;
	}	
	
	if (a_un && a_pw == "")
	{
		$("input.password[rel="+a_network+"]").focus();			
		return("Please type both a username and password.");
	}
		
	if (a_un == "" || a_pw == "")
	{
		$("input.username[rel="+a_network+"]").focus();			
		return("Please type both a username and password.");
	}

	return false;
}

function show_register() {
	g_mode = 'register';  
	document.title = "Trillian";
	if (g_news) clearInterval(g_news);
	if (!g_reincluded)
	{
		g_reincluded = true;
		var reJsHost = (("https:" == document.location.protocol) ? "https://api-secure." : "http://api.");
		include(reJsHost + "recaptcha.net/js/recaptcha_ajax.js");
	}
	$("#container").css("min-height", "400px");
	$("#index-header, #index-download").hide();
	$("#index-login, #index-login-more, #index-web, #index-notice").hide();
	$("#footer, #helper, #header").hide();
	$("div#index-login > input").hide();
	$("div#custom-question-row").hide();
	$("div.error-row").hide();
	$("div.card-input").removeClass("error");
	$("div#footer, div.header").hide();
	$("div.flag").hide();
	$("#register-loading").hide();
	$("#index-header, #index-login, #index-login-more").hide();
	$("#login-register").show(1,function() {
		if ($.browser.msie)
		{
			setTimeout(function() {
				ui_login($("#register-username").val(), $("#register-password").val());
			},2000);
		} else {
			ui_login($("#register-username").val(), $("#register-password").val());
		}
	});
	$("div#register-content-1").show();
	$("div#register-content-1").height("400");
	setTimeout(show_recaptcha, 1000);
	if ($("input.username[rel=astra]").val() != "" && $("input.username[rel=astra]").val() != "Username")
	{
		$("input#register-username").val($("input.username[rel=astra]").val());
		setTimeout(function(){$("input#email").focus();}, 1500);
	} else {
		setTimeout(function(){$("input#register-username").focus();}, 1500);
	}
	fixOpera();
	setTimeout(fixOpera, 500);
	impress(g_network);
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
}

function show_register_1() 
{ 
	$("div#register-content-2").hide();
	$("div#register-content-1").show();
	fixOpera();
}
function show_register_2()
{
	$("div#register-content-1").find("input.card-input").removeClass("error");
	$("div#register-content-1").find("div.error-row").hide();
	var invalids_page1=0;
	if (!$("input#terms").attr("checked"))
	{
		invalids_page1++;
		$("input#terms").focus();
		$("div#terms-error").show();
	}
	if ($("input#recaptcha_response_field").val().length < 1)
	{
		invalids_page1++;
		$("input#recaptcha_response_field").focus();
		$("div#captcha-error").show();
	}
	if (!isValidEmail($("input#email").val()))
	{
		invalids_page1++;
		$("div#email-error").show();
		$("input#email").addClass("error").focus();
	}
	if (!isValidUsername($("input#register-username").val()))  
	{
		invalids_page1++;
		$("div#username-error").show();
		$("input#register-username").addClass("error").focus();
	}
	if (!invalids_page1) {
		$("div#register-content-1").hide();
		$("div#register-content-2").show();
		$("input#register-password").focus();
	}
	fixOpera();
	setTimeout(fixOpera, 500);
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
}

function show_register_3()
{
	if (!g_ready)
	{
		alert("Trillian for Web's registration process requires Flash, but our Flash object has not finished loading.  Check to make sure you don't have it blocked then try again, or visit http://www.trillian.im/register for a non-Flash form.");
		return;
	}
	if (g_registering)
	{
		return;
	}
	$("div.error-row").hide();
	$("input.card-input").removeClass("error");
	var invalids_page2=0;
	if ($("input#security_answer").val().length < 3)
	{
		invalids_page2++;
		$("input#security_answer").addClass("error").focus();
		$("div#answer-error").show();
	}
	if ($("select#security_question_enum").val() == "0" && $("input#security_question_custom").val().length < 3)
	{
		invalids_page2++;
		$("select#security_question_enum").addClass("error");
		$("input#security_question_custom").addClass("error").focus();
		$("div#custom-error").show();
	}
	if ($("select#security_question_enum").val() == "-1")
	{
		invalids_page2++;
		$("select#security_question_enum").addClass("error").focus();
		$("div#question-error").show();
	}
	if ($("input#register-password").val() != $("input#verify").val())
	{
		invalids_page2++;
		$("input#verify").addClass("error").focus();
		$("div#password-error").show();
		
	}
	if ($("input#register-password").val().length < 6 || $("input#register-password").val().length > 32)
	{
		invalids_page2++;
		$("input#register-password, input#verify").addClass("error");
		$("div#password-error").show();
		$("input#register-password").focus();
	}
	if (!invalids_page2)
	{	
		var cm = 1;
		var ch = Recaptcha.get_challenge();
		var re = Recaptcha.get_response();
		var v = g_version;
		var p = "Web";
		var querystring = "au="+au.val();
		querystring += "&ap="+encodeURIComponent(ap.val());
		querystring += "&np="+encodeURIComponent(np.val());
		querystring += "&ae="+ae.val();
		querystring += "&sqe="+sqe.val();
		querystring += "&sqc="+encodeURIComponent(sqc.val());
		querystring += "&sa="+encodeURIComponent(sa.val());
		querystring += "&cm="+cm;
		querystring += "&ch="+ch;
		querystring += "&re="+re;
		querystring += "&v="+v;
		querystring += "&p="+p;
		g_registering = true;
		g_registering_timeout = setTimeout(register_timeout, 40000);
		$("input#btn-register-2-submit").removeClass("green").addClass("gray");
		$("div#register-content-2").hide(); 
		$("#register-loading").show();
		gkRegister(querystring, "https://www.ceruleanstudios.com/client/signup/");
	}
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
	fixOpera();
	setTimeout(fixOpera, 500);
}

function gatekeeper_error(in_data)
{
	$("#register-loading").hide();
	clearTimeout(g_registering_timeout);
	g_registering = false;
	alert("Error trying to register.  Please wait a minute before trying again.  (\"" + in_data + "\")");
	$("div#register-content-2").show(); 
	$("input#btn-register-2-submit").removeClass("gray").addClass("green");
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
}

function register_timeout()
{
	if (g_registering)
	{
		g_registering = false;
		alert("The request timed out.  Please wait a minute before trying again.");
	}
	$("div#register-content-1, div#register-content-2").show(); 
	$("input#btn-register-2-submit").removeClass("gray").addClass("green");
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
}

function gatekeeper_result(in_data)
{
	clearTimeout(g_registering_timeout);
	g_registering = false;
	$("input#btn-register-2-submit").removeClass("gray").addClass("green");
	updateStatus("","");
	var l_data=parseXML(in_data);
	var l_xml=$(l_data);
	$(l_xml).find("gatekeeper").each(function(){
		$(this).find("failure").each(function(){
			var ask = $(this).attr("ask");
			switch (ask)
			{
				case "confirmation":
					gatekeeper_success();
					break;
				case "captcha":
					// show captcha error 
					$("#register-loading").hide();
					Recaptcha.reload();
					show_register_1();
					$("input#recaptcha_response_field").focus();
					$("div#captcha-error").show();
					updateStatus("Invalid entry.","");
					break;
				case "astra":
					// show astra account already taken 
					Recaptcha.reload();
					$("#register-loading").hide();
					$("input#register-username").addClass("error").focus();
					$("div#username-taken-error").show();
					updateStatus("Invalid entry.","");
					show_register_1();
					break;
				default:
					$("#register-loading").hide();
					alert($(this).text());
					Recaptcha.reload();
					updateStatus("Please try again.","");
					show_register_1();
					break;
			}
		});
		$(this).find("success").each(function(){
			var ask = $(this).attr("ask");
			gatekeeper_success();
		});
	});
	if ($.browser.msie) setTimeout(function(){onResizeIE($(window))}, 100);
	fixOpera();
}

function gatekeeper_success()
{
	updateStatus("Registration Complete!","");
	$("input.username[rel=astra]").val(au.val());
	$("input.password[rel=astra]").val(ap.val());
	setTimeout(gatekeeper_signin, 1000);
	fixOpera();
	registered(g_network);
}

function gatekeeper_signin()
{
	signIn(au.val(), ap.val());
	if (g_network != 'astra')
	{
		findFlash("chat").mediumLogin(g_network, $("input.username[rel="+g_network+"]").val(), $("input.password[rel="+g_network+"]").val());
	}
}

function hide_register() 
{ 
	document.location = "/";
}

function show_recaptcha()
{
	try {
		Recaptcha.create("6Ldr9wEAAAAAACie7CCLhJjCGSB8-0FzKDiZQ9Zc", 'recaptcha_div', {
		    theme: "clean", 
		    callback: recaptcha_loaded
		});
	} catch(e) {
		setTimeout(show_recaptcha, 1000);
	}
	
}

function recaptcha_loaded()
{
	$("input#recaptcha_response_field").attr('tabindex', 3).keypress(function(a_event){ if (a_event.which == 13) show_register_2(); });
	$("table#recaptcha_table").css("border-right-width", "0");
	if ($.browser.msie) $("div#recaptcha_div").css("padding-left", "240");
	if (!$("input#register-email").val()) $("input#register-email").focus();
	if (!$("input#register-username").val()) $("input#register-username").focus();
	fixOpera();
}

function showAll()
{
	document.location.href = "/";
}

function impress(a_network)
{
	switch (a_network) { case 'astra': var a=12; break; case 'msn': var a=13; break; case 'yahoo': var a=14; break; case 'aim': var a=15; break; case 'facebook': var a=16; break; case 'google': var a=17; break; case 'icq': var a=18; break; case 'myspace': var a=19; break; case 'jabber': var a=20; break; default: return false; }
	$.ajax({url: proto() + "//www.trillian.im/client/ad/v1/?impression/3/3/" + a});
	return true;
}

function registered(a_network)
{
	switch (a_network) { case 'astra': var a=12; break; case 'msn': var a=13; break; case 'yahoo': var a=14; break; case 'aim': var a=15; break; case 'facebook': var a=16; break; case 'google': var a=17; break; case 'icq': var a=18; break; case 'myspace': var a=19; break; case 'jabber': var a=20; break; default: return false; }
	$.ajax({url: proto() + "//www.trillian.im/client/ad/v1/?click/3/3/" + a});
	return true;
}

function facebookAuthorizationRequest()
{
	setTimeout(fbStart, 100);
}

function fbStart()
{
	if (!g_fbincluded) 
	{
		g_fbincluded = true;
		var fbJsUrl = (("https:" == document.location.protocol) ? "https://ssl.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" : "http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US");
		include(fbJsUrl);
		setTimeout(fbStart, 1000);
		return;
	}
        var api = "567a2525dcc3c21f62a3f6d3fc7cc498";
        var xdc = "/chat/facebook_xd_receiver.html";
        fbStartDialogWatch();
        FB.Bootstrap.requireFeatures(["Connect"], function()
        {
                FB.Facebook.init(api, xdc);
                FB.ensureInit(function() {
                        if ($.browser.opera)
                        {
                                FB.Connect.showPermissionDialog("xmpp_login", askedpermission);
                        } else {
                                FB.Connect.requireSession(initted, cancelled, isUserActionHint=false);
                        }
                });
        });
}

function waitInitted()
{
	setTimeout(initted, 1000);
}

function cancelled()
{
	fbStopDialogWatch();
	setTimeout(function(){if (g_ready) findFlash("chat").facebookAuthorizationResult(false, {});}, 100);
}

function initted()
{
	FB.Connect.get_status().waitUntilReady( function( status ) {
		checkpermission();
	});
}

function checkpermission()
{
	FB.Facebook.apiClient.users_hasAppPermission("xmpp_login", gotpermission);
}

function askedpermission()
{
	FB.Facebook.apiClient.users_hasAppPermission("xmpp_login", permissionresponse);
}

function permissionresponse(a_hasPermission)
{
	if ($.browser.msie) $("div.background").height($("div#container").height());
	if (a_hasPermission) 
	{
		fbsuccess();
		return true;
	}
	fbStopDialogWatch();
	setTimeout(function(){if (g_ready) findFlash("chat").facebookAuthorizationResult(false, {});}, 100);
}

function gotpermission(a_hasPermission)
{
	if (a_hasPermission) 
	{
		fbsuccess();
		return true;
	}
	FB.Connect.showPermissionDialog("xmpp_login", askedpermission);
}
	
function fbsuccess()
{
	var l_uid = FB.Facebook.apiClient.get_session().uid;
	var l_base_domain = FB.Facebook.apiClient.get_session().base_domain;
	var l_expires = FB.Facebook.apiClient.get_session().expires;
	var l_secret = FB.Facebook.apiClient.get_session().secret;
	var l_session_key = FB.Facebook.apiClient.get_session().session_key;
	var l_sig = FB.Facebook.apiClient.get_session().sig;
	var l_json = '{"session_key":"'+l_session_key+'", "uid":"'+l_uid+'", "expires":'+l_expires+', "secret":"'+l_secret+'","sig":"'+l_sig+'"}';
	if (g_ready) 
	{
		findFlash("chat").facebookAuthorizationResult(true, l_json);
	} else {
		FB.Facebook.apiClient.users_getInfo(l_uid,["name"],fbgotinfo);
	}
	fbStopDialogWatch();
}
function fbgotinfo(a_info, a_exception)
{
	if ($.browser.msie) $("div.background").height($("div#container").height());
	var l_name = a_info[0]['name'];
	g_fbname = l_name;
	$("input.facebookhelper, input.username[rel=facebook]").val(l_name);
	$("div.facebookbutton").fadeOut('fast');
	login();
}	

function fbStartDialogWatch()
{
	if (g_fbwatch.handler) return;
	g_fbwatch.handler = setInterval(fbDialogWatch, 250);
}
function fbStopDialogWatch()
{
	clearInterval(g_fbwatch.handler);
	g_fbwatch.handler = false;
	$(".fb_popupContainer").remove();
	setTimeout(function(){if (g_fbwatch.faded) fbDialogWatch();}, 250);
}
function fbDialogWatch()
{
	if (g_fbwatch.faded) 
	{
		// Currently faded
		if (!$("table.fb_popup").length)
		{
			// Dialogs gone
			if (g_fbwatch.loginfaded)
			{
				// We faded login
				$("div#login-loading").show();
				g_fbwatch.loginfaded = false;
			}
			if (g_fbwatch.chatfaded && g_chatVisible)
			{
				// We faded chat
				if ($.browser.mozilla && ($.browser.version > '1.8' && $.browser.version < '1.9') || ($.browser.msie && $.browser.version >= '8.0'))
				{
					// FF2 fix
					document.getElementById('chat').style.width = '100%';
				} else {
					// Move onscreen
					$("div#index-chat").css("left", 0);
				}
				g_fbwatch.chatfaded = false;
			}
			if (!$.browser.mozilla || $.browser.version <= '1.8' || $.browser.version >= '1.9')
			{
				$("div#container").fadeTo('fast', 1);
			}
			g_fbwatch.faded = false;
		}
	} else {
		// Do we need to fade?
		if ($("table.fb_popup").length)
		{
			// Yes
			// Is login visible?
			if ($("div#login-loading").is(":visible"))
			{
				g_fbwatch.loginfaded = true;
				$("div#login-loading").hide();
			}
			// Is chat visible?
			if ($("div#index-chat").is(":visible") && g_chatVisible)
			{
				g_fbwatch.chatfaded = true;
				if ($.browser.mozilla && ($.browser.version > '1.8' && $.browser.version < '1.9') || ($.browser.msie && $.browser.version >= '8.0'))
				{
					// FF2 fix
					document.getElementById('chat').style.width = 1;
				} else {
					// Move offscreen and fade
					$("div#index-chat").css('left', -5000);
				}
			}
			if (!$.browser.mozilla || $.browser.version <= '1.8' || $.browser.version >= '1.9')
			{
				$("div#container").fadeTo(0, 0.9, function(){
					$("div#container").fadeTo(2500, 0.5);
				});
			}
			// Mark that we are currently faded
			g_fbwatch.faded = true;
		}
	}
}

function parseXML(a_xml)
{ 
	if(window.ActiveXObject && window.GetObject) 
	{ 
		var dom = new ActiveXObject('Microsoft.XMLDOM'); 
		dom.loadXML(a_xml); 
		return dom;
	}
	if(window.DOMParser)
		return new DOMParser().parseFromString(a_xml,'text/xml'); 
	throw new Error('No XML parser available'); 
} 

function isValidEmail(a_email){
	if (a_email.length < 6) return false;
	if (a_email.indexOf('..') != -1) return false;
	validRegExp = /^[^@ ]+@[^@]+\.+[a-z.]{2,}$/i;
	if (a_email.search(validRegExp) == -1) return false; 
	return true; 
}

function isValidUsername(a_username)
{
	if (a_username.length < 6) return false;
	if (a_username.length > 64) return false;
	if (a_username.indexOf('..') != -1) return false;
	validRegExp = /^[a-zA-Z][a-zA-Z0-9._]{1,62}[a-zA-Z0-9]$/;
	if (a_username.search(validRegExp) == -1) return false;
	return true;
}

function isValidUsernameForSignin(a_username)
{
	if (a_username.length < 3) return false;
	if (a_username.length > 64) return false;
	if (a_username.indexOf('..') != -1) return false;
	validRegExp = /^[a-zA-Z][a-zA-Z0-9._-]{1,62}[a-zA-Z0-9]$/;
	if (a_username.search(validRegExp) == -1) return false;
	return true;
}

function proto()
{
	if ("https:" == document.location.protocol) return "https:";
	return "http:";
}

function include(filename)
{
	var head = document.getElementsByTagName('head')[0];
	
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script)
}

