/*
 * 
	bm_users - contains user profile and user preference info, including login code 
	cobblestore edit October 21, 2010 - added exception handling to hide WHY_LOGIN for cs = true
	change in logout,newUserToggle and eventhandler
	also, added a hack to userPreferencesSet to deal with admin. Need to change login query to return admin info.
	edited login_HttpResponse to handle admin
	edit userPreferencesShow to remove product edit show
	*** end cobblestore edits
 */

;(function($){
var $$;


$$ = $.fn.bm_users = function($options) {

	// set default options
	var $defaults = {

	};
	
	// extend the options
	var $opts = $.extend($defaults, $options);
	
	// bring the options to the jquery object
	for (var i in $opts) {
		$.bm_users[i]  = $opts[i];
	}
};

$.extend({bm_users : {
	/*set from config file */
	bm : true, //brianmacmillan.com - flag to allow compatibility with other sites like toronto artists, cobblestore
	cs : false, //cobblestore - flag to allow compatibility with other sites
	database_errors :"",
	query_in_progress : false,
	admin : false,
	edit_mode : false, //when true edit functionality is activated.
	editor : false,
	hide_add_delete_warnings : true,  //maintained in user preferences
	login_name : "guest",  // id / login_name of current user.
	logged_in : false, //equals true when logged in 
	login_in_process : 0,
	password : "",
	user_key : 0,  // id of current user.
	show_query_results : false, //maintained in user preferences
	show_query_parameters : false, //maintained in user preferences
	show_data_change_messages : false, //maintained in user preferences
	// There is a need to synchronize these values with the login.php script.
	CHANGE_PASSWORD_URL : "php/changePassword.php",
	DEFAULT_USERNAME : "enter your username or email",
	DEFAULT_CITY : "enter your city",
	DEFAULT_EMAIL : "enter your email",
	DEFAULT_PASSWORD : "enter your password",
	ERROR_MISSING_ARGUMENTS : 1,
	ERROR_NO_DATABASE_CONNECTION : 2,
	ERROR_INVALID_USERNAME_PASSWORD : 3,
	ERROR_USER_NAME_ALREADY_EXISTS : 4,
	LOGIN_URL : "php/users/login.php",
	MAIL_URL : "./php/mail.php",
	MESSAGE_DURATION : 3000,
	NEW_USER_MESSAGE : "You must enter a valid email email address in order to log in.",
	NEW_USER_POST_LOGIN_MESSAGE : "A confirmation email has been sent to your email address.",
	PREFERENCES_UPDATE_URL : "php/preferencesSave.php",
	SUBMIT_BUTTON : "#login-submit-button",
	SUCCESS : 0,
	USER_PREFERENCES_SAVE_URL : "php/users/userPreferencesSave.php",
	USER_PREFERENCES_GET_URL: "php/users/userPreferencesGet.php",
	USERS_UPDATE_URL : "php/usersUpdate.php",
	WHY_LOG_IN : "Logging in allows you to rate and /or edit a work.",

	/* LOGIN and USER PREFERENCES */
	eventHandler : function()
	{
		try{
			$($.bm_users.SUBMIT_BUTTON).click(function(){$.bm_users.login(this);});	
			$($.bm_users.SUBMIT_BUTTON).keypress(function(event){$.bm_users.keyPress(this,event)});

			e = document.getElementById('password');
			e.onfocus = function() {$.bm_users.passwordOnFocus();}

			e = document.getElementById('username');
			e.onfocus = function() {$.bm_users.usernameOnFocus();}

			//Login when enter pressed 
			$("#username").keypress(function(event) {$.bm_users.keyPress(event,this)});
			$("#password").keypress(function(event) {$.bm_users.keyPress(event,this)});
			$("#confirm-password").keypress(function(event) {$.bm_users.keyPress(event,this)});
			$("#email").keypress(function(event) {$.bm_users.keyPress(event,this)});

			$("#new-user").click(function(event){$.bm_users.newUserToggleContainer(event,this)});
			$("#new-user-container").click(function(event){$.bm_users.newUserToggleContainer(event,this)});
			$("#new-user-container").keypress(function(event){$.bm_users.keyPress(event,this)});
			$("#new-user").blur(function(){$.bm_users.setFocusPasswordOrRememberMe("new-user")});

			$("#remember-me").click(function(event){$.bm_users.rememberMeToggleContainer(event,this)});
			$("#remember-me-container").click(function(event){$.bm_users.rememberMeToggleContainer(event,this)});
			$("#remember-me-container").keypress(function(event){$.bm_users.keyPress(event,this)});
			//$("#remember-me").blur(function(){$.bm_users.setFocusPasswordOrRememberMe("new-user")});

			//NB Brian Important Cancel event is used to stop the click event from bubbling to the checkbox-container control
			// which also has a click event to allow clicks on text to change the value of the control.
			//$(".checkbox-control").click(function(){$.bm_ui.cancel_event=true;});

			$.bm_ui.toggleInput($("#new-user"),".new-user-input");
			$("#show-editor").click(function(){$.bm_users.show_editor=$(this).attr("checked");$.bm_users.toggleEditor();});
			$("#show-query-results").click(function(){$.bm_users.show_query_results=$(this).attr("checked")});
			$("#show-query-parameters").click(function(){$.bm_users.show_query_parameters=$(this).attr("checked");});
			$("#show-data-change-messages").click(function(){$.bm_users.show_data_change_messages=$(this).attr("checked")});
			$("#hide-add-delete-warnings").click(function(){$.bm_users.hide_add_delete_warnings=$(this).attr("checked")});

			$("#preferences-submit-button").click(function(){$.bm_users.userPreferencesSave()});

			$("#logout-submit-button").click(function(event){$.bm_users.logout()});
			$("#preferences-submit-button").keypress(function(event){$.bm_users.keyPress(event,this)});
			$("#logout-submit-button").keypress(function(event){$.bm_users.keyPress(event,this)});
			$("#login-submit-button").keypress(function(event){$.bm_users.keyPress(event,this)});
		
			// contact stuff
			$("#contact-submit").keypress(function(event){$.bm_users.contactSubmit()});
			$("#contact-submit").click(function() {$.bm_users.contactSubmit()});
			$("#contact-email").blur(function() {$.bm_users.validateEmail(this,true)});
			$("#contact-email").focus(function() {$.bm_users.validateEmailFocus(this)});
			$("#contact-cc").blur(function() {$.bm_users.validateEmail(this,false)});
			if ($.bm_users.bm){
				$.bm_users.messageShow($.bm_users.WHY_LOG_IN,false);
			}
		}
		catch(err)
		{
			errorHandler("bm_users.eventHandler",err);
		}
	},
	toggleEditor : function(){
		//turn the edit tab on and off depending on the setting of the show editor flag.
		
		if ($.bm_users.show_editor)
		{
			$("#add-edit").addClass("active");
			$("#view-edits").addClass("active");
		} else{
			$("#add-edit").removeClass("active");
			$("#add-edit").removeClass("selected");
			$("#comment-tab-editor").removeClass("active");
			$("#comment-tab-editor").removeClass("selected");
			$("#view-edits").removeClass("active");
			$("#view-edits").removeClass("selected");
			$("#comment-tab-view-edits").removeClass("active");
			$("#comment-tab-view-edits").removeClass("selected");
		}
	},
	rememberMeToggleContainer : function(event,e){
		//alert("checked "+$(e).attr("id")+" "+$(e).attr("checked"));
		if ($.bm_users.cancel_event){$.bm_users.cancel_event=false;return}
		if ($(e).attr("id")=="remember-me-container"){
			$.bm_users.cancel_event=false;
			$.bm_ui.checkboxReverse(event,e,true);
		} else
		{
			$.bm_users.cancel_event=true;
			$.bm_ui.checkboxReverse(event,e,true);
		}
		return;
	},

	newUserToggleContainer : function(event,e){
		if ($.bm_users.cancel_event){$.bm_users.cancel_event=false;return}
		if ($(e).attr("id")=="new-user-container"){
			$.bm_users.cancel_event=false;
			$.bm_ui.checkboxReverse(event,e,true);
			$.bm_ui.toggleInput($("#new-user"),".new-user-input");
		} else
		{
			$.bm_users.cancel_event=true;
			$.bm_ui.toggleInput(e,".new-user-input");
		}
		$.bm_users.setFocusPasswordOrRememberMe("new-user");
		$.bm_users.newUserToggle();
		return;
	},
	newUserToggle : function()
	{
		if ($("#new-user").attr("checked")){
			$.bm_users.messageShow($.bm_users.NEW_USER_MESSAGE,false);
		} else{
			$.bm_users.messageShow($.bm_users.WHY_LOG_IN,false);
			$("#confirm-password").val("");
			
		}
	},

	divContactSubmitKeypress : function(event){
		var iKey = getKeystroke(event);
		if (iKey == $.cs.KEY_SPACE || iKey == $.cs.KEY_ENTER) 
		{
			alert("sending email");
			$.bm_users.contactSubmit();
			return;
		}
	},

	newUserVerificationEmail : function(){
		var sSystemName = "Brian MacMillan.com";
		var sSystemURL = "http://localhost:8888/";
		//var sSystemURL="http://www.brianmacmillan.net/";
		//"index.php&user_key="$.bmUsers.user_key+"?"
		var sSystemEmail="admin@brianmacmillan.com";
		var sFrom = sSystemEmail;
		var sTo = $("#login-email").attr("value")
		var sMessage = "Click here to verify "+sSystemURL+"index.php("+$.bm_users.user_key+")";
		var sSubject = "User verification email from "+sSystemName;
		var sCC = "";
		//var sCC= $("#contact-cc").attr("value");
		//alert("in contact submit "+sMessage+" "+sFrom+" "+sCC);
		//if (!validateMessage("#message"){alert("message too short")}
			$.post($.bm_users.MAIL_URL, { from: sFrom,to: sTo,subject:sSubject,cc: sCC,message: sMessage},
				function(data){
				$.bm_tabs.setFocus("#blind5");
				$.bm_users.messageShow($.bm_users.NEW_USER_POST_LOGIN_MESSAGE,false);
			    //processXML(data);
			  });
			//window.location.href="";
	},
	contactSubmit : function(){
		//To start - fix validate email.
		//if (!$.bm_users.validateEmail("#contact-email",true)) {document.getElementById("contact-email").focus();return;};
		//if (!$.bm_users.validateEmail("#contact-cc",false)) {document.getElementById("contact-cc").focus();return;};
		var sFrom = $("#contact-email-address").attr("value");
		var sMessage = $("#contact-email-content").attr("value");
		var sSubject = $("#contact-email-subject").attr("value");
		var sCC= $("#contact-email-cc").attr("value");;
		//alert("in contact submit "+sMessage+" "+sFrom+" "+sCC);
		//if (!validateMessage("#message"){alert("message too short")}
			$.post($.bm_users.MAIL_URL, { from: sFrom,subject:sSubject,cc: sCC,message: sMessage},
			  function(data){
				$.bm_tabs.setFocus("#blind5");
				messageShow("Your email has been sent.","#contact-message",true);
			    //processXML(data);
			  });
			//window.location.href="";
	},
	processEmail : function(psData){
		alert("in process email "+psData);
	},
	setDefaults : function(){
		try
		{
			
			if (LOCALHOST)  // helps my testing
			{
				document.getElementById("username").value = "bmacmill";
				document.getElementById("password").value = "nevsky";
				document.getElementById("login-submit-button").disabled = false;
			} else
			{
				$("#username").val($.bm_users.DEFAULT_USERNAME);
			}

		} catch(err)
		{
			errorHandler("setLoginDefaults",err);
		}
	},
	keyPress : function(evt,e)
	{
		//Note that safari doesn't trap tab event
		//Note that there is a general window keyPress handler in cobblestore.js
		var iKey = getKeystroke(evt);
		//var bShiftPressed = getShiftPressed(evt);
		//var bAltPressed = getAltPressed(evt);
		//var bCtrlPressed = getCtrlPressed(evt);
		if (iKey==$.bm_ui.KEY_SPACE && $(e).attr("id")=="new-user-container"){$.bm_users.newUserToggleContainer(evt,e)}
		if (iKey==$.bm_ui.KEY_SPACE && $(e).attr("id")=="remember-me-container"){$.bm_users.rememberMeToggleContainer(evt,e)}

		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="password"){$.bm_users.login()}
		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="login-submit-button"){$.bm_users.logout()}
		if (iKey==$.bm_ui.KEY_TAB && $(e).attr("id")=="login-submit-button"){$.bm_tabs.setFocus($("#blind2"));}

		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="logout-submit-button"){$.bm_users.logout()}
		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="preferences-submit-button"){$.bm_users.userPreferencesSave()}
		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="username"){
			if ($(e).val()>"" && $("#password").val()>"")$.bm_users.login();
		}
		if (iKey==$.bm_ui.KEY_ENTER && $(e).attr("id")=="login-submit-button"){$.bm_users.login()}
	},
	setFocusPasswordOrRememberMe : function(e)
	{
		if (document.getElementById(e).checked) 
		{
			document.getElementById("confirm-password").focus();
		} else 
		{
			document.getElementById("remember-me-container").focus();
		}
	},
	usernameOnFocus : function()
	{
		try
		{
			var e;
			e = document.getElementById("username");
			if (e.value == $.bm_users.DEFAULT_USERNAME)
			{
				e.value = "";
			};
			e.select();
		} catch(err)
		{
			errorHandler("bm_users.usernameOnFocus",err);
		}
	},
	validateUsername : function(psUsername)
	{
		var e;  // local element
		var s = ""; // local string
		var i = 0; // local integer
		try
		{
			if (psUsername == $.bm_users.DEFAULT_USERNAME)
			{
				$.bm_users.errorShow("Please enter a username. It needs to be at least four characters long.");
				return false;
			}
			if (psUsername.length <= 3)
			{
				$.bm_users.errorShow("Your username needs to be at least four characters long.");
				return false;
			} else
			{
				return true;
			}
		} catch(err)
		{
			errorHandler("bm_users.validateUsername",err);
		}	
	},
	validateEmail : function(e,pbRequired,psMessageField)
	{
		
		var s = ""; // local string
		var i = 0; // local integer
		try
		{
			//test for presence of @ sign and period ?@*.* 
			var sResult = "";
			var bSkipCheck = false; //cc for example can be blank (ie notrequired)
			var sTempString = $(e).val();
			var sReturn = "";
			//NB Brian = trim spaces.
			if (!pbRequired && sTempString.length==0){bSkipCheck=true}
			if (!bSkipCheck)
			{
				if (sTempString.indexOf("@")<0){sResult+="email address missing required character '@'"} else {/*do nothing*/};

				if (sTempString.indexOf(".")<0){if (sResult.length>0){sResult+="; "};sResult+="missing required character '.' ";} else {/*do nothing*/};


				if (sTempString.length > 3)
				{

					//do nothing. valid condition
				} else
				{

					if (sResult.length>0){sResult+="; "};
					sResult +="email address is less than 4 characters long";
				}

			}
			if (sResult.length>0 && !bSkipCheck){

				sResult = "Invalid email address: "+sResult;
				$.bm_users.messageShowContact(psMessageField,sResult,true);
				$(e).css("background-color",$.bm_ui.ERROR_COLOR); 
				$(e).attr("title",sResult); 
				return false;
			} else 
			{
				if (!gbIE) {
					$(e).css("background-color",$.bm_ui.INPUT_COLOR); 
				}
				return true;
			}
		} catch(err)
		{
			errorHandler("validateEmail",err);
		}
	},
	validateEmailFocus : function(e)
	{
		try
		{
			$(e).css("background-color",$.bm_ui.INPUT_COLOR); 
		} catch(err)
		{
			errorHandler("validateEmail",err);
		}
	},
	validateNewPassword : function()
	{
		var sReturn = "";
		if (document.getElementById("new-password").value==document.getElementById("confirm-new-password").value)
		{
			// do nothing
		} else
		{
			// raise error
			sReturn = "Password confirmation failure.";
		}
		return sReturn;
	},
	validatePassword : function(psPassword)
	{
		var e;  // local element
		var s = ""; // local string
		var i = 0; // local integer
		try
		{
			if (psPassword==$.bm_ui.DEFAULT_PASSWORD)
			{
				$.bm_users.errorShow("Please enter a valid password. It needs to be at least four characters long.");
				return false;
			}
			if (psPassword.length <= 3)
			{
				$.bm_users.errorShow("Your password needs to be at least four characters long.");
				return false;
			} else 
			{
				return true;
			} 
			
		} catch(err)
		{
			errorHandler("validatePassword",err);
		}
	},
	passwordOnFocus : function()
	{
		document.getElementById("password").select();
		//$.bm_main.current_edit_mode = $.bm_main.EDITING_PASSWORD;
		var e = document.getElementById("password");
		if (e.value == $.bm_users.DEFAULT_PASSWORD)
		{
			e.value = "";
		};
	},

	usersUpdate : function()
	{
		try
		{
			var sEmail = document.getElementById("email").value;
			if (sEmail == $.bm_users.DEFAULT_EMAIL)sEmail="";
			var sCity = document.getElementById("city").value;
			var sUserName = document.getElementById("username").value;
			var sPassword = document.getElementById("password").value;
			var sFirstName = document.getElementById("first-name").value;
			var sLastName = document.getElementById("last-name").value;
			var sParams = "?login_name="+escape(sUserName)+"&user_key="+$.bm_users.user_key+"&email="+sEmail+"&city="+escape(sCity)+"&first_name="+escape(sFirstName)+"&last_name="+escape(sLastName)+"&password="+escape(sPassword);
			if ($.bm_users.show_query_parameters) {winWrite("Login query params: "+$.bm_users.USERS_UPDATE_URL+sParams)}
			httpRequest.open("GET", $.bm_users.USERS_UPDATE_URL+sParams, true);
			httpRequest.onreadystatechange = $.bm_users.usersUpdate_HttpResponse;
			httpRequest.send(null);	
		} catch(err)
		{
			errorHandler("bm_users.usersUpdate",err);
			$.bm_users.login_in_process = false;
		}	
	},
	usersUpdate_HttpResponse : function()
	{
		try
		{
			if (httpRequest.readyState == 4) 
			{
				var sResults = httpRequest.responseText;
				var sResultsArray;
				var e;
				if ($.bm_users.show_query_results){winWrite("userUpdate results "+sResults)}
				sResultsArray = sResults.split(",");
				if (sResultsArray[0] == SUCCESS)
				{
					$.bm_users.messageShow("Your changes have been saved.",true);
				} else
				{
					$.bm_users.errorShow("users update failure",false);
				}
			}		
		} catch(err)
		{
			errorHandler("bm_users.usersUpdate_HttpResponse",err);
		}
	},
	login : function(e)
	{
		try
		{
			var sPassword =  escape(document.getElementById("password").value);
			var sUsername =  escape(document.getElementById("username").value);

			if ($("#remember-me").attr("checked"))
			{
				createCookie("username",sUsername,365);
				createCookie("password",sPassword,365);
			} else
			{
				createCookie("username","",-1);
				createCookie("password","",-1);
			}

			if ($.bm_users.login_in_process)return;
			if (!$.bm_users.validateUsername(sUsername)){document.getElementById("username").focus();return}
			if (!$.bm_users.validatePassword(sPassword)){document.getElementById("password").focus();return}

			$.bm_ui.setCursor("wait");

			if ($.bm_users.logged_in)
			{
				//shouldn't happen
				errorHandler("Login","User already logged in");
				$.bm_ui.setCursor("default");
				return;
			};
			$.bm_users.login_in_process = true;	
			$($.bm_users.SUBMIT_BUTTON).attr("disabled","disabled");
			$($.bm_users.SUBMIT_BUTTON).removeClass("active");
			var sParams = "?login_name="+escape(sUsername);
			sParams += "&password="+escape(sPassword);
			sParams += "&new_user="+document.getElementById("new-user").checked;
			sParams += "&email="+$("#login-email").val();
			sParams += "&alias="+$("#login-alias").val();
			sParams += "&login_name_is_email_address="+checkedToString($("#login_name_is_email_address").attr("checked"));

			//$.bm_users.show_query_parameters=true;
			
			if ($.bm_users.show_query_parameters==true) {winWrite("Login query params: "+$.bm_users.LOGIN_URL+sParams)}
			httpRequest.open("GET", $.bm_users.LOGIN_URL+sParams, true);
			httpRequest.onreadystatechange = $.bm_users.login_HttpResponse;
			httpRequest.send(null);
		}
		catch(err)
		{
			errorHandler("login",err);
			$.bm_users.login_in_process = false;
			$($.bm_users.SUBMIT_BUTTON).addClass("active");
			$($.bm_users.SUBMIT_BUTTON).attr("disabled","");
		}
	},
	login_HttpResponse : function() 
	{
		try
		{
			/*
				Response message:
				Error number integer
				Error message string
				User_key integer - the primary key to the user table
			*/
			if (httpRequest.readyState == 4) 
			{
				var sResults = httpRequest.responseText;
				var sResultsArray;
				var e;

				if ($.bm_users.show_query_results){winWrite("Login results "+sResults)}
				sResultsArray = sResults.split(",");
				if ((sResultsArray[0] == $.bm_users.SUCCESS && sResultsArray.length>1))
				{
					$.bm_users.logged_in = true;
					$.bm_users.login_name=$("#username").val();
					$.bm_users.password=$("#password").val();
					$.bm_users.userPreferencesSet(sResultsArray);
					$.bm_ui.current_edit_mode = $.bm_ui.EDITING_NOTHING;
					$.bm_users.userPreferencesShow();
					$.bm_users.messageShow("");
					$.bm_users.login_in_process = false;
					
					if ($("#new-user").attr("checked")){
						$.bm_users.newUserVerificationEmail();
					}
					//NB Brian - exception handling for cobblestore. Switch to products edit tab.
					if ($.bm_users.admin)
					{	
						if($.bm_users.cs){
							$("#products-edit-tab").removeClass("admin"); 
							setTimeout('switchTabMain($("#products-edit-tab"))',2);
						} else {
							switchTabMain("preferences");
						}
					}

				} else
				{
					if (sResultsArray.length<2)
					{
						$.bm_users.errorShow("Login failed with the following message: "+sResults);
					} else
					{
						$("#username").focus().select();
						if (sResultsArray[0]==4) 
						{$.bm_users.errorShow(sResultsArray[1].substr(0,(sResultsArray[1].length))+" Are you really a new user?");} else{$.bm_users.errorShow(sResultsArray[1].substr(0,(sResultsArray[1].length)));}
					}
					$.bm_users.logged_in = false;
					$($.bm_users.SUBMIT_BUTTON).attr("disabled","");
					$($.bm_users.SUBMIT_BUTTON).addClass("active");
				}
		  	} else
			{
				// NB Brian Is there a need to handle other ready states?
				//alert("ready state = "+http.readyState)
			}
			$.bm_ui.setCursor("default");
		} catch(err)
		{
			errorHandler("bm_users.login_HttpResponse",err);
		}
		$.bm_users.login_in_process = false;
	},
	logout : function()
	{
		try
		{
			$.bm_users.logged_in = false;
			if($.bm_users.cs)$("#products-edit-tab").addClass("admin"); 
			$("#hide-when-logged-in").removeClass("active");
			$("#show-when-logged-in").addClass("active");
			$.bm_users.messageShow($.bm_users.WHY_LOG_IN,false);
			$.bm_users.loginShow();
			
		} catch(err) 
		{
			errorHandler("logout",err);
		}
	},
	userPreferencesSet : function(piPreferenceArray)
	{
		try
		{
			// NB Brian This needs to by synced with login.php database->getPreferences
			// To start change value to checked.
			$.bm_users.user_key=piPreferenceArray[2];
			
			//alert("setting preferences for user id "+$.bm_users.user_key);
			$('#user-preferences-list div').remove();
			$('#user-preferences-list').append(piPreferenceArray[3]);

			//Populate user preferences elements in login.html
			$.bm_users.populateUserPreferences(0);
			//NB To do - user role implementation
			if ($.bm_users.login_name="bmacmill") $.bm_users.admin=true;
			if ($.bm_users.login_name="bmacmill") $.bm_users.editor=true;
			if ($.bm_users.login_name=="benbarbash@aol.com") $.bm_users.admin=true;

			if ($.bm_users.admin)$(".admin").addClass("active");
			if ($.bm_users.bm)$.bm_tabs.setFocus($("#blind2"));
			return;

		} catch(err)
		{
			errorHandler("bm_users.userPreferencesSet",err);
		}
	},
	loginShow : function()
	{
		try
		{
			$(".admin").removeClass("active"); 
			$(".hide-when-logged-in").addClass("active");
			$(".show-when-logged-in").removeClass("active");
			if ($.bm_users.bm)$.bm_tabs.setFocus("#blind2");
		} catch(err)
		{
			errorHandler("bm_users.loginShow",err);
		}
	},
	userPreferencesShow : function()
	{
		try
		{
			$(".hide-when-logged-in").removeClass("active");
			$(".show-when-logged-in").addClass("active");
		} catch(err)
		{
			errorHandler("bm_users.userPreferencesShow",err);
		}
	},

		userPreferencesSave : function()
		{
			try
			{
				var sPassword;
				var sReturn = "";
				var sEmail = document.getElementById("email").value;
				var sNewPassword = document.getElementById("new-password").value;
				var sAlias = document.getElementById("alias").value;
				var sLoginNameIsEmail=checkedToString($("#login_name_is_email").attr("checked"));

				var iUserKey = $.bm_users.user_key;
				var sLoginName = $.bm_users.login_name;
				var sShowHeader="Y";
				var sShowMenus="Y";
				var sShowFooter="Y";
				var sShowComments="Y";
				var sShowHelp="Y";
				var sShowEditor="Y";
				var sShowPreferences="Y";
				var sShowRatings="Y";
				var sShowNavigationControls="Y";
				var sShowQueryParameters="Y";
				var sShowQueryResults="Y";
				var sShowDataChangeMessages="Y";
				var sHideAddDeleteWarnings="Y";
				var iDisplayMode=1;
				$.bm_users.messageShow("");
				$("#preferences-submit-button").removeClass("active");
				$("#confirm-new-password").focus();  //ideally focus on nothing.
				if (sEmail == $.bm_users.DEFAULT_EMAIL)sEmail="";

				var sReturn = $.bm_users.validateNewPassword();

				if (sReturn=="")
				{
					sNewPassword=document.getElementById("new-password").value;
				} else
				{
					document.getElementById("new-password").focus();
					$.bm_users.errorShow(sReturn);
					return;
				}
				//sReturn=$.bm_users.validateEmail("email",false);
				//if (sReturn>""){$.bm_user.errorShow(sReturn);$("#email").focus().select();}

				sShowQueryParameters=checkedToString($("#show-query-parameters").attr("checked"));
				sShowQueryResults=checkedToString($("#show-query-results").attr("checked"));
				sShowDataChangeMessages=checkedToString($("#show-data-change-messages").attr("checked"));
				sHideAddDeleteWarnings=checkedToString($("#hide-add-delete-warnings").attr("checked"));
				iDisplayMode=$("#display-mode").val();

				//var sParams = "?login_name="+escape(sUserName)+"&user_key="+$.bm_users.user_key+"&login_name="+sUserName;
				//sParams += "&show_navigation_arrows="+booleanToInteger(document.getElementById("show-navigation-arrows").checked);
				//sParams += "&wide_text_columns="+booleanToInteger(document.getElementById("wide-text-columns").checked);
				var sParams = "?user_key="+iUserKey+"&login_name="+sLoginName;
				sParams += "&password="+$.bm_users.password;
				sParams += "&new_password="+sNewPassword;
				sParams += "&email="+sEmail;
				sParams += "&alias="+sAlias;
				sParams += "&login_name_is_email="+sLoginNameIsEmail;
				sParams += "&show_query_parameters="+sShowQueryParameters;
				sParams += "&show_query_results="+sShowQueryResults;
				sParams += "&show_data_change_messages="+sShowDataChangeMessages;
				sParams += "&hide_add_delete_warnings="+sHideAddDeleteWarnings;
				sParams += "&display_mode="+iDisplayMode;

				//sParams += "&show_help="+booleanToInteger(document.getElementById("show-help").checked);
				//sParams += "&show_comments="+booleanToInteger(document.getElementById("show-comments").checked);
				sParams += "&show_ratings="+booleanToInteger(document.getElementById("show-ratings").checked);
				sParams += "&show_editor="+booleanToInteger(document.getElementById("show-editor").checked);
				if ($.bm_users.show_query_parameters) {winWrite("Login query params: "+$.bm_users.USER_PREFERENCES_SAVE_URL+sParams)}
				httpRequest.open("GET", $.bm_users.USER_PREFERENCES_SAVE_URL+sParams, true);
				httpRequest.onreadystatechange = $.bm_users.userPreferencesSave_HttpResponse;
				httpRequest.send(null);	
			} catch(err)
			{
				errorHandler("bm_users.userPreferencesSave",err);
				$.bm_users.login_in_process = false;
			}
		},

	userPreferencesSave_HttpResponse : function()
		{
			try
			{
				var sResults = httpRequest.responseText;
				var sResultsArray;
				var e;
				if (httpRequest.readyState == 4) 
				{
					if ($.bm_users.show_query_results==true){winWrite("preferences save results "+sResults)}
					sResultsArray = sResults.split(",");
					if (sResultsArray[0] == $.bm_users.SUCCESS)
					{
						$.bm_users.messageShow("Your preferences were successfully saved.",true);
					} else
					{
						$.bm_users.errorShow("A problem occurred while saving your preferences.");
					}
				}		
			} catch(err)
			{
				errorHandler("bm_users.preferencesSave_tHttpResponse",err);
			}
		},
	populateUserPreferences : function(piRow)
	{
		if ($("#preferences-results .row").size()>0)
		{
			//to start - fix this references.
			//sTemp = $("#user-preferences-list .row span.show-query-parameters").eq(piRow).text();
			//NB Added because population statements below weren't triggering changes in the
			//bm_users settings.
			$.bm_users.show_query_results = stringToBoolean($("#user-preferences-list .row span.show-query-results").eq(piRow).text());
			$.bm_users.show_query_parameters = stringToBoolean($("#user-preferences-list .row span.show-query-parameters").eq(piRow).text());
			$.bm_users.show_data_change_messages = stringToBoolean($("#user-preferences-list .row span.show-data-change-messages").eq(piRow).text());
			
			$("#show-query-parameters").attr("checked",stringToChecked($("#user-preferences-list .row span.show-query-parameters").eq(piRow).text()));
			$("#show-query-results").attr("checked",stringToChecked($("#user-preferences-list .row span.show-query-results").eq(piRow).text()));
			$("#show-data-change-messages").attr("checked",stringToChecked($("#user-preferences-list .row span.show-data-change-messages").eq(piRow).text()));
			$("#hide-add-delete-warnings").attr("checked",stringToChecked($("#user-preferences-list .row span.hide-add-delete-warnings").eq(piRow).text()));

			$("#contact-email").val($("#user-preferences-list .row span.email").eq(piRow).text());
			$("#email").val($("#user-preferences-list .row span.email").eq(piRow).text());
			$("#alias").val($("#user-preferences-list .row span.alias").eq(piRow).text());
			$("#display-mode").val($("#user-preferences-list .row span.display-mode").eq(piRow).text());
			$.bm_users.toggleEditor(); //display editor if show editor is on.
		} else {
			//$.bm_users.blankPreferences();
		}
	},
	messageShow : function(psMessage,pbHideAfterInterval)
	{
		document.getElementById("login-message").innerHTML=psMessage;
		$("#login-message").addClass("active").removeClass("error");
		if (pbHideAfterInterval)setTimeout("$.bm_users.messageHide()",$.bm_users.MESSAGE_DURATION);
	},
	messageHide : function()
	{
		$("#login-message").removeClass("active");
	},
	errorShow : function(psMessage)
	{
		$("#login-message").addClass("active").addClass("error");
		$("#login-message").text(psMessage);
	},
	messageShowContact : function(psMessageField,psMessage,pbHideAfterInterval)
	{
		$(psMessageField).text(psMessage);
		$(psMessageField).addClass("active").removeClass("error");
		if (pbHideAfterInterval)setTimeout("$.bm_users.messageHideContact('"+psMessageField+"')",$.bm_users.MESSAGE_DURATION);
	},
	messageHideContact : function(psMessageField)
	{
		$(psMessageField).removeClass("active");
	}
}
})

})(jQuery);

