var raccauth = { url:"/raccxml.cgi", authservice:"vark" };

raccauth.activate = function() {
	$('#loginbuttons').show();
	$('#loginacct').focus();
}

raccauth.login = function(which) {
	if ($('#loginacct')[0].value.length == 0) {
		$('#loginacct')[0].focus();
		return false;
	}
	if ($('#loginpass')[0].value.length == 0) {
		$('#loginpass')[0].focus();
		return false;
	}
	$('#loginbuttons').hide();
	raccauth.message("Logging in...");
	var servicelist = "";
	for (var servicename in raccauth.serverlist) {
		if (servicelist.length)
			servicelist += ",";
		servicelist += servicename;
		if (raccauth.serverlist[servicename].plain)
			servicelist += ":plain";
		else if (raccauth.serverlist[servicename].acctname)
			servicelist += ":" + raccauth.serverlist[servicename].acctname;
	}
	$.ajax({ type: "POST", data:{
			loginname: $('#loginacct')[0].value,
			loginpassword: $('#loginpass')[0].value,
			logindbname: servicelist }, success: raccauth.loginSuccess,
			error: raccauth.loginError,
			url: (raccauth.url + "?db=" + raccauth.authservice) });
}

raccauth.logout = function() {
	//Expire each cookie
	now = new Date();
	now.setTime (now.getTime() - (2 * 24 * 60 * 60 * 1000)) 
	for (var servicename in raccauth.serverlist) {
		var curr = raccauth.serverlist[servicename];
		if (curr.cookiename) {
			document.cookie = curr.cookiename + "=; path=/; expires=" +
					now.toGMTString();
		}
	}
	if (raccauth.onlogout)
		raccauth.onlogout(raccauth);
}

raccauth.message = function(msg, iserror) {
	if (msg)
	logAlert(msg);

	if (!msg)
		$('#loginmsg').removeClass("error").html("").fadeOut("slow");
	else if (iserror)
		$('#loginmsg').removeClass("error").html(msg).fadeIn("slow");
	else
		$('#loginmsg').addClass("error").html(msg).fadeIn("slow");
}

raccauth.loginError = function(req, errtype, ex) {
	// TODO: server could be down
	if (ex) 
		raccauth.message("Internal error (" + errtype + "): " + ex.toString(),
				 true);
	else
		raccauth.message("Internal error (" + errtype + ")", true);
	$('#loginbuttons').slideDown();
}

raccauth.loginDebugSuccess = function(req) {
	var locreq = req;
	setTimeout(function myfunc() { raccauth.realloginSuccess(locreq); }, 100);
}

raccauth.loginSuccess = function(req) {
	if ($(req).find("error").length > 0) {
		raccauth.message($(req).find("error>message").text().substr(4), true);
		$('#loginbuttons').slideDown();
		return false;
	}
	if ($(req).find("username").length == 0) {
		raccauth.message("Unknown user", true);
		$('#loginbuttons').slideDown();
		return false;
	}
	$('#loginpass')[0].value = "";
	raccauth.acctname = $(req).find("username").text();
	raccauth.realname = $(req).find("realname").text();
	raccauth.f_name = $(req).find("f_name").text();
	raccauth.l_name = $(req).find("l_name").text();
	raccauth.handle = $(req).find("handle").text();
	raccauth.cleanhandle = raccauth.handle.toLowerCase().replace(/ /g, "_");
	for (var servicename in raccauth.serverlist) {
		var curr = raccauth.serverlist[servicename];
		curr.key = $(req).find("userkey[server='" + servicename + "']").text();
		var pin = $(req).find("pinstring[server='" + servicename + "']").text();
		if (pin && pin.length > 0)
			curr.pin = pin.substring(0,4);
		if (curr.cookiename) {
			document.cookie = curr.cookiename + "=" +
				raccauth[(curr.acctname ? curr.acctname : "acctname")] +
					'/' + curr.key + "; path=/";
		}
	}
	raccauth.message();
	if (raccauth.onlogin)
		raccauth.onlogin(raccauth);
}

