/**
 * Billboard User
 *
 */
 
billboard.user = new ( function($)  
{
	var URL_BB_GETUSER =         "/user/get-user.json";
	var URL_BB_REGISTER =        "/user/register.json";
	var URL_BB_LOGIN =           "/user/login.json";
	var URL_BB_LOGOUT =          "/user/logout.json";
	var URL_BB_FORGOT_PASSWORD = "/user/forgot-password.json?email=";
	var URL_FB_CONNECT_LOGIN =   "/user/fbConnectLogin.json?id=";

	var URL_BB_FEEDBACK_EMAIL =  "/user/email/email-friend.svc";


	var me = this;

	// public props
	me.Id = "";
	me.username = "";
	me.email = "";
	me.firstName = "";
	me.lastName = "";
	me.facebookId = "";
	me.fbPublishFavorites =false;
	me.fbPublishComments =false;
	me.fbPublishWinGame =false;
	me.fbPublishSoyl = false;
	me.fbPublishActivities = false;
	me.fbLoggedIn = false;

	me.loginCallback;

	// private props
	var cfUser = {};
	var user = {};

	/**
	 * 
	 */
	me.reset = function()
	{
billboard.info("billboard.user.reset()");
		// clear user object
		me.username = '';
		me.firstName = '';
		me.lastName = '';
		me.email = '';
		me.facebookId = '';
		cfUser = {};
	};

	me.setData = function( user ) 
	{
		me.username = user.username;
		me.firstName = user.firstName;
		me.lastName = user.lastName;
		if(user.facebookId != null && user.facebookId.length > 0 ) {
			
			me.facebookId = user.facebookId;		
		}
		me.email = user.email;
		me.fbPublishFavorites = user.fbPublishFavorites;
		me.fbPublishComments = user.fbPublishComment;
		me.fbPublishWinGame = user.fbPublishMusicLabel;
		me.fbPublishSoyl = user.fbPublishMusicOfYourLife;
		if (me.fbPublishFavorites || me.fbPublishComments || me.fbPublishWinGame || me.fbPublishSoyl) me.fbPublishActivities=true;
		
	};

	/**
	 * 
	 */
	me.init = function()
	{
		billboard.info("User.init()");
		
		// Added for BBCOM-191
		if(readCookie("bbcom_user")){
			var userInfo=readCookie("bbcom_user").split("|");
			if(userInfo[3]==1) {
				$("#user-login [name=email]").val(userInfo[0]);
				$("#user-login [name=password]").val(userInfo[2]);
				$("#user-login [name=loginRemember]").attr('checked',true);		
			
				me.login();
			}
		}
		//Ended
		
		$('.login-email-input').focus(function(){
		 $(this).addClass('login-typing');		
		});
		
		$("#close-user-forms").click( function() {
			$('#register-form').each(function(){this.reset();});
			me.hideForms(); 
		});

		$("#close-feedback-form").click( function() {
			me.hideFeedback(); 
		});

		$("#feedback-form").submit( function() {
			me.feedback();
			return false;
		});

		$("#register-form").submit( function() {
			$(this).find(".login-email-button").attr("disabled","true");
			$(this).find(".login-email-button").attr("value","Please Wait...");
			$(this).find(".login-email-button").addClass("disabled-login-email-button");
			me.register(null,function(stat){
				if(!stat){
				$("#register-form").find(".login-email-button").removeAttr("disabled");
				$("#register-form").find(".login-email-button").attr("value","Join");
				$("#register-form").find(".login-email-button").removeClass("disabled-login-email-button");
				}
			});
		
			return false;
		});

		$("#login-form").submit( function() {
			me.login();
			return false;
		});
		
		$(".normalLogin").click( function() {
			me.hideForms();
			me.showForms('login');
			return false;
		});

		$(".facebookLogin").click( function() {
			$('.joinBB').html('<h3>Haven\'t Joined Yet?</h3><p></p>For the full Billboard experience, you need to be a member. Sign up. It\'s free.');
		 //   $('.joinForm h3').html('<h3>Complete Your Registration at Billboard.com!</h3>');
		  $('.joinFormLogo').hide();
		  $('.joinFormFacebook').show();
			return false;
		});
		$(".facebookregister").click( function() {
			$('.joinBB').html('<h3>Haven\'t Joined Yet?</h3><p></p>For the full Billboard experience, you need to be a member. Sign up. It\'s free.');
		 //   $('.joinForm h3').html('<h3>Complete Your Registration at Billboard.com!</h3>');
			return false;
		});
		
		$(".join-button").click( function() {
			me.hideForms();
			me.showForms('join');
			return false;
		});

        me.wireFeedback();

		// attach the cancel handlers
		$("#user-forms [name=cancel]").click( function() {  
			$('#register-form').each(function(){this.reset();});
			$("#user-forms :text").removeClass('login-typing').addClass('login-email-input');
			
			me.hideForms(); 
		});
		$("#user-forms [name=cancelForget]").click( function() { 
			$("#login-error,.login-error-inline").html('');
			$("#user-forms :text").removeClass('error-test').addClass('login-email-input');
			$('#register-form').each(function(){this.reset();});
			$("#forgot-password").hide(); 
			$(".memberForm").show();
		});

		$(".logout-link a").click( function() {
			me.logout();
			return false;
		});
		
		$("#user-login .memberForm a").click( function() {
			$(".memberForm").hide();
            $("#email-forgot-sent").hide();
            $("#span-forgot-email").show();			
			$("#forgot-password").show();
		});
		
		$("#forgot-password [name=send]").click( function() {
			me.sendPassword();
			return false;
		});
		
		billboard.broadcaster.addListener( "pageLoaded", function() { me.onPageLoaded(); } );
		billboard.broadcaster.addListener( "userLoggedIn", function() { me.onLoggedIn(); } );
		billboard.broadcaster.addListener( "userLoggedOut", function() { me.onLoggedOut(); } );

		// load the current user from the session
		$.getJSON( URL_BB_GETUSER, function(data,status) {
			billboard.info( "Get User:"+status );
			billboard.info( data );
			if ( data.response.head.status == "success" ) {
				me.setData( data.response.body.UserView );
				billboard.broadcaster.dispatchEvent( "userLoggedIn" );
			}
		});
	};	

    me.wireFeedback = function(){
		$(".feed-back").click( function() {
			me.hideFeedback();
			me.showFeedback();
			return false;
		});
    };

	/**
	 *
	 */
	me.onPageLoaded = function()
	{
		// Make chart game profile image available 
		if ( $(".chart_game_user_profile_photo").length > 0){
			billboard.social.execute(
			            "rest/v1/attribute/user/get",
			            {user: me.username},
			            function(data){
			            	if (data.error_code == 0) {
			            		if (data.attributes != null && data.attributes.length > 0){
			            			$(".chart_game_user_profile_photo").attr("src", data.attributes[0].value);
			            		}
			            	}
			            });
		}
		
		if ( me.isLoggedIn() ) {
			me.onLoggedIn();
		}

        if (billboard.section == 'footer' && billboard.subsection == 'contact-us'){
            me.wireFeedback();
        }
	};

	/**
	 * helper function to chain any login required request after a successful login/registration
	 */
	me.requireLogin = function( callback )
	{
		if ( me.isLoggedIn() && readCookie("bbr") ) {
			callback();
		}
		else { 
			me.loginCallback = callback;
			me.showForms('login');
			if(!readCookie("bbr")) $("#login-error").text("Session has Expired. Please Re-login.");
		}
	};

	/**
	 * TODO
	 */
	me.isLoggedIn = function()
	{
		if ( me.username && me.username.length > 0  ) {
 		    return true;
		}
		return false;
	};

	/**
	 *
	 */
	me.getUser = function()
	{
		billboard.error("getUser() - DEPRECATED");
		return user;
	}

	me.onLoggedOut = function() 
	{
		me.reset();

		// flip the header divs...
		$("body").removeClass("logged-in");
	};

	me.onLoggedIn = function() 
	{
		billboard.log("User.onLoggedIn()");
		billboard.log(" user: "+me.username);

		$("#header .username").html(me.username);
		$("#header a.username").click(function(){
			me.requireLogin( function() {
				billboard.cacheBust = false;
				billboard.cacheBust = $(this).hasClass("cache-bust") ? true : false;
				billboard.navigateToUrl('/user/' + me.username);
			});
            return false;
        });

		$("#header .settings a").click(function(){
			me.requireLogin( function() {
				billboard.cacheBust = false;
				billboard.cacheBust = $(this).hasClass("cache-bust") ? true : false;
				billboard.navigateToUrl('/user/' + me.username + '/settings');
			});
            return false;
        });

		$("#header .user-id").html(me.userId);
		$("#header .email").html(me.email);
		$("#header .first-name").html(me.firstName);
		$("#header .last-name").html(me.lastName);
		$("#header .game a").html( "The Chart Game" );
		$("#header .game a").click( function() {
			me.requireLogin( function() {
				billboard.cacheBust = false;
				billboard.cacheBust = $(this).hasClass("cache-bust") ? true : false;
				billboard.navigateToUrl('/games/chart-game/about');
			});
            return false;
        });

		$("body").addClass("logged-in");

		// pull down the CF user object?
		if ( typeof(cfUser) == "undefined" || typeof(cfUser.id) == "undefined"  ) { 
			billboard.social.getUser( me.username, function(data){ 
				billboard.log("social get user result");
				billboard.logObject( data );
				cfUser = data.user;
				if ( cfUser.profile_photo_url ) { 
					$(".profile-photo img").attr("src", cfUser.profile_photo_url );

				}
			});
	    }

		// trigger registered callback, if any
		if ( me.loginCallback ) {
			me.loginCallback();
			me.loginCallback = null;
		}
	};

	/**
	 * show the feedback layer
	 */
	me.showFeedback = function( param )
	{	
		billboard.log("User.showFeedback()");
		billboard.modal.showModalShield();
		$("#send-feedback").show();

		// center forms on page
		var x = $("body").width() / 2 - $("#feedback").width() / 2;
		$("#feedback").css("left",x);
		if( $.browser.msie && parseInt($.browser.version) == 6 ) {
			$("#feedback").css("position","absolute");
		}
		$("#feedback").show();		
	};

	/**
	 * show the login/registration layer, and toggle form based on param
	 * @param param string - login|register
	 */
	me.showForms = function( param )
	{	
		billboard.log("User.showForms("+param+")");
		
		billboard.modal.showModalShield();
		if( param == 'join' ) {
			$("#user-register").show();
			$("#register-form").find(".login-email-button").removeAttr("disabled");
			$("#register-form").find(".login-email-button").attr("value","Join");
			$("#register-form").find(".login-email-button").removeClass("disabled-login-email-button");
			$("#user-login").hide();
		}
		else {
			$("#user-register").hide();
			$("#user-login").show();
			$(".memberForm").show();
			if(readCookie("bbr")){
				var userInfo=readCookie("bbr").split("|");
				if(userInfo[3]==1) {
				$("#user-login [name=email]").val(userInfo[0]);
				$("#user-login [name=password]").val(userInfo[2]);
				$("#user-login [name=loginRemember]").attr('checked',true);		
				}
		    }
		}
		// center forms on page
		var x = $("body").width() / 2 - $("#user-forms").width() / 2;
		if( $.browser.msie && parseInt($.browser.version) == 6 ) {
			$("#user-forms").css("position","absolute");
		}
		$("#user-forms").css("left",x+"px");
		$("#user-forms").show();
	};

	/**
	 *
	 */
	me.showDisplayMessage = function()
	{
	  billboard.modal.showModalShield();
	  $("#login-error,.login-error-inline").html('');
	  $("#user-register").hide();
	  $("#user-login").hide();
	  $('#login-messages').show();
	  var x = $("body").width() / 2 - $("#user-forms").width() / 2;
	  $("#user-forms").css("left",x);
	  $("#user-forms").show();
	};

	me.hideFeedback = function()
	{
		billboard.log("User.hideFeedback()");
		$("#feedback").hide();
	
		// clear any values
		$("#feedback-form .feedback-textarea").val("");
		
		billboard.modal.hideModalShield();
	};

	me.hideForms = function()
	{
		$("#user-forms :text").removeClass('error-test').addClass('login-email-input');
	    $("#user-forms :password").removeClass('error-test').addClass('login-email-input');

		$('#login-error,.login-error-inline').html('');
		$("#forgot-password").hide();
		$("#user-forms").hide();
		$('#login-messages').hide();

		// clear any values
		$('#user-forms :text').val("");
		$("#user-forms :password").val("");
		billboard.modal.hideModalShield();
	};

	/**
	 *
	 */
	me.logout = function()
	{
		billboard.log( "User.logout()" );

		// log out of Crowd Factory
		billboard.social.logout();
		
		$.getJSON( URL_BB_LOGOUT, function( data, status ) { 
            if (data != 'undefined' && data.response.head.status == 'success'){
                billboard.log( "logout:");
                billboard.log( data );

                if(billboard.user.facebookId != null && billboard.user.facebookId.length > 0 && FB != null && FB.Connect.get_loggedInUser() != null) {
                    //in case FB logout call fails, remove the cookies manually.
                    try{
                        FB.Connect.logout(function(){
                            billboard.broadcaster.dispatchEvent( "userLoggedOut" );
                        });
                    } catch(e){
                        billboard.log("Facebook logout error: " + e);
                        billboard.broadcaster.dispatchEvent( "userLoggedOut" );
                        var cookies = document.cookie.split(";");
                        $.each(cookies,function(i,v){
							// Q. - what is this string, and should it be tokenized, or used as a const?
                            var remove = v.indexOf("275f684571fdc64c0e9f3f77cb0e2de5") > -1 ? v : '';
                            eraseCookie(remove); 
                        });
                    }
                } else {
                    billboard.broadcaster.dispatchEvent( "userLoggedOut" );
                }			

				//Added for BBCOM-191

				eraseCookie('bbcom_user');

				//Ended

				//me.reset();

                //if a private page, go home.
                if (billboard.section == 'profile' || billboard.section == 'games'){
                    billboard.navigateToUrl("/");
                }
			} 
			else {
                billboard.error("logout error: " + status);
            }
		});
	};

	/**
	 * Q. is this being used, all cookie functions should be in the cookie.js
	 */
	me.expireCookie = function(c_name)
	{
		billboard.error( "User.expireCookie() - all cookie code should be moved to cookie.js" );
		/*
		var exdate=new Date();
		exdate.setDate(exdate.getDate());
		document.cookie=c_name+ "= ;expires="+exdate.toGMTString();
		*/
	}

	/**
	 * triggered from forgot password flow
	 */
	me.sendPassword = function()
	{
	    var emailSend=$("#span-forgot-email [name=emailPass]").val();
		emailSend = emailSend.replace(/\s+/g,"");
		var sendPassUrl= URL_BB_FORGOT_PASSWORD+emailSend;
		$.getJSON( sendPassUrl, function(data) {
			if(data.response.head.status=='success') {
			  $("#span-forgot-email").hide();
              $('#login-error,.login-error-inline').html('');			  
			  $("#email-forgot-sent").show();
			  $(".memberForm").show();
			  $("#user-login").css("width","550px");
			}
			else  {
				$('#login-error').html('The Email you entered was not found in the system.');
				$("#user-login [name=emailPass]").removeClass('login-email-input').addClass('error-test');
			}
		});
		return false;
	}

	/**
	 *
	 */
	me.login = function()
	{
		billboard.log( "User.login()");

		var email = $("#user-login [name=email]").val();
		email = email.replace(/\s+/g,"");
		var password = $("#user-login [name=password]").val();
		var rememberMe='';
		if ($("#user-login [name=loginRemember]").attr('checked')) { 
			rememberMe='&remember=true';
		}
		else { 
			rememberMe='&remember=false';
		}
		var dataString = 'email='+ email + '&password=' + password+rememberMe;
          
		$.ajax({
			   type: "POST",
			   url: URL_BB_LOGIN,
			   data: dataString,
			   dataType : "json", 
			   success: function(data) {  
				   if (data.response.head.status == "success") {

						//get the facebookId if stored, before SetData
					//	var fbId = me.facebookId;
						
					   // store user data
					   me.setData( data.response.body.UserView );

					   me.hideForms();


					   // link the accounts here if facebook id is found
					   if(me.facebookId != null && me.facebookId != "") {
						   var fbId = FB.Connect.get_loggedInUser()!=null ? FB.Connect.get_loggedInUser() : me.facebookId;
							$.getJSON("/user/connectFbAccount.json?facebookId="+fbId,function(data){
								if(data.response.head.status == "success") {
									billboard.log(data);
									me.showFacebookAuthorization();
									me.fbLoggedIn = true;
								}
								else me.fbLoggedIn = false;
							});
					   }

					   // log into crowd factory
					   billboard.social.login( function(res){ 
						   billboard.broadcaster.dispatchEvent( "userLoggedIn" );
					   });					   
				   }
				   else {
					   $('#login-error').html('The username/password combination doesn\'t match. Please try again.');
					   $("#user-login [name=username]").removeClass('login-email-input').addClass('error-test');
					   $("#user-login [name=password]").removeClass('login-email-input').addClass('error-test');
				   }
			   }
		});  

		return false;
	}

	/*
	 * Callback method for facebook login 
	 */
	me.onFbLogin = function() 
	{
		if ( FB.Connect.get_loggedInUser() != null ) {

			//checkUserAccount(FB.Connect.get_loggedInUser());
			me.facebookId = FB.Connect.get_loggedInUser();
			var url = URL_FB_CONNECT_LOGIN+me.facebookId;
		
			$.getJSON(url, function(data) {
				if(data.response.body && data.response.body.UserView.member == true) {
					// log into crowd factory
					me.hideForms();
					me.setData( data.response.body.UserView );
					me.fbLoggedIn = true;//Required to publish to facebook in case of Facebook login
					billboard.social.login( function(res) {
						billboard.broadcaster.dispatchEvent( "userLoggedIn" );
					});
				} 
				else {
					
					// Connect the current Facebook account with billboard.
					// See if you want to show a layer to do this.
					if(
                        typeof(billboard.user.username) != 'undefined'
                        && billboard.user.username != null 
                        && billboard.user.username.length > 0
                    ) {
						
							$.getJSON("/user/connectFbAccount.json?facebookId="+FB.Connect.get_loggedInUser(),function(data){

								if(data.response.head.status == "success") {
									
									billboard.log(data);
									me.showFacebookAuthorization();
									me.fbLoggedIn = true;
								}	
								else {
									me.fbLoggedIn = false;
									billboard.error(data.response.head.message);
								}

							});

					}else {
						
						$("#user-register [name=fb-id]").val(me.facebookId);
						me.showForms('join');
						//$('.joinFormLogo').html('<h3>Complete Your Registration at Billboard.com!</h3>');
						$('.joinFormLogo').hide();
			            $('.joinFormFacebook').show();
					}
					
				}
			});
		}
	}

	me.showFacebookAuthorization = function() {
		
		// Now pop-up the Facebook if session is found
		if (FB.Connect.get_loggedInUser() != null) {
			//var result = FB.Connect.showFeedDialog(103509064440, null, null, "is now a member on Billboard.com <br /><a href='"+props.domainName+"user/"+username+"'>View the Billboard profile<a>", null, FB.RequireConnect.require, function(){}, "Add custom message here", "");
			FB.Facebook.apiClient.users_hasAppPermission('publish_stream',function(permissions){				
				
				if ( permissions != 1 ) {
					
					FB.Connect.showPermissionDialog('publish_stream', function(result) {
					
						FB.Connect.streamPublish("is now a member on Billboard.com",{"name":"View the Billboard profile","href":billboard.properties.domainName + "/user/" + me.username},[{"text":"Visit the new Billboard.com","href":"http://www.billboard.com"}],null,null,null,true);
					
					});
				}
				else {
						//FB.Connect.streamPublish("is now a member on Billboard.com",{"name":"View the Billboard profile","href":billboard.properties.domainName + "/user/" + me.username},[{"text":"Visit the new Billboard.com","href":"http://www.billboard.com"}],null,null,null,true);
						billboard.log("Successful login through facebook");
				}
			});
		}					
	}

	/**
	 * feedback is sent to billboard's feedback email address
	 */
	me.feedback = function( form ) 
	{
		billboard.log( "user.feedback() ");

		var from = "no-reply@billboard.com";
		var to = "feedback@billboard.com";
		var topic = $('#topic').val();
		var message = $('#comment').val();
		var subject = "Feedback Submission - "+topic;

		var emailparam="from="+from+"&to="+to+"&msg="+message+"&subject="+subject;

			$.ajax({
			   type: "POST",
			   url: URL_BB_FEEDBACK_EMAIL,
			   data: emailparam,
			   complete : function() {
				   billboard.log( "email sent");
				   me.hideFeedback(); 
			   }
			 });

		return false;
	}


	/**
	 * register a new user, pull fields from the form and submit via the json post
	 */
	me.register = function( form, callback ) 
	{
		billboard.log( "user.register()");

		function validateEmails(address) {
			var reg= /^\.|\.\.|\.$/ ;
			if(reg.test(address) == true) {		
				return false;
			}
			reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z0-9_\-\.])+$/;           
			if(reg.test(address) == false) 
			return false;
			else 
			return true;	
		}
		
		function validatePassword(pass){
		if(pass.length<6||pass.length>50||pass.indexOf(' ')>-1||pass.indexOf('~')>-1||pass.indexOf('{')>-1||pass.indexOf('}')>-1||pass.indexOf('|')>-1) 
		return false;
		else
		return true;
		}
		
		function validateUsername (user){
		 if(username.length<4) 
		 return false;
		 else  {
		  var regUser=/^[a-zA-Z]\w/;
		  if(regUser.test(user)==false)
		  	return false;
		 }
		 return true;
		 	
		}

		billboard.log("Facebook Id - "+me.facebookId);

		var username = $("#user-register [name=username]").val();
		username = username.replace(/\s+/g,"");
		var password1 = $("#user-register [name=password1]").val();
		var password2 = $("#user-register [name=password2]").val();
		var email1 = $("#user-register [name=email1]").val();
		email1 = email1.replace(/\s+/g,"");
//		 var email2 = $("#user-register [name=email2]").val();
		var facebookid = $("#user-register [name=fb-id]").val();
		var termsNcond=$("#user-register [name=termsLogin]").attr('checked');
		
		if ( email1.length<=0 ||email1.length>75) {
			$("#user-register [name=email1]").removeClass('login-email-input').addClass('error-test');
			//	$("#user-register [name=email2]").addClass('error-test');
			$('#login-error-email').html('E-mail address is a required field. Please enter one and resubmit.');
			if(callback) return callback(false);
			return;
		}
		else {
			$('#login-error-email').html('');
			$("#user-register [name=email1]").removeClass('error-test').addClass('login-email-input');
		}
		if(!validateEmails(email1)) {
			$("#user-register [name=email1]").removeClass('login-email-input').addClass('error-test');
			//	$("#user-register [name=email2]").addClass('error-test');
			$('#login-error-email').html('Sorry the e-mail address you have entered isn\'t valid. Have another look at it. Make sure you\'ve entered the full  address.(It should follow the name@site.com format).');
			if(callback) return callback(false);
			return;
		}
		else {
			$('#login-error-email').html('');
			$("#user-register [name=email1]").removeClass('error-test').addClass('login-email-input');
		}
		
		if(!validateUsername(username)) {
			$("#user-register [name=username]").removeClass('login-email-input').addClass('error-test');
			$('#login-error-username').html('Please enter a username from 4 - 25 characters that starts with an alpha character.');
			if(callback) return callback(false);
			return;
		}
		else {
			$('#login-error-username').html('');
			$("#user-register [name=username]").removeClass('error-test').addClass('login-email-input');
		}
		if ( password1 != password2 ) {
			$("#user-register [name=password1]").removeClass('login-email-input').addClass('error-test');
			$("#user-register [name=password2]").removeClass('login-email-input').addClass('error-test');
			$('#login-error-password').html('The passwords you entered are either empty or don\'t match. Please reenter and submit.');
			if(callback) return callback(false);
			return;
		}
		else {
			$('#login-error-password').html('');
			$("#user-register [name=password1]").removeClass('error-test').addClass('login-email-input');
			$("#user-register [name=password2]").removeClass('error-test').addClass('login-email-input');
		}
		if(!validatePassword(password1)) {
			$("#user-register [name=password1]").removeClass('login-email-input').addClass('error-test');
			$("#user-register [name=password2]").removeClass('login-email-input').addClass('error-test');
			$('#login-error-password').html("Passwords must be 6 to 50 characters long and can only contain the following characters a-z A-Z 0-9 ` ! @ $ % ^ & * ( ) - _ = + [ ] ; : ' \" , < . > / ?");
			if(callback) return callback(false);
			return;
		}
		else {
			$('#login-error-password').html('');
			$("#user-register [name=password1]").removeClass('error-test').addClass('login-email-input');
			$("#user-register [name=password2]").removeClass('error-test').addClass('login-email-input');
		}
		if(termsNcond==false) {
			$('#login-error-terms').html('Please accept the Terms and Conditions.');
			if(callback) return callback(false);
			return;
		}
		else
			$('#login-error-terms').html('');
		   	
		
		var dataString = 'username='+ username + 
		'&password=' + password1 + 
		'&email=' + email1+ 
		'&facebookId=' + me.facebookId;

		billboard.log( "registering: "+dataString );
		
		/**
		 * send register request to billboard
		 */
		$.ajax({  
			   type: "POST",  
			   url: URL_BB_REGISTER,
			   data: dataString,  
			   error:function() { billboard.error("Registration Failed");},
			   success: function(data) {  
					billboard.log( data);
					
					
					var test = eval("(" + data + ")");
					
				   if ( test.response.head.status == "success" ) {
					   
				    //$('#user-register').addClass("success");
					   me.hideForms();
					   me.showDisplayMessage();
					   
					   //me.resetForms();

					   me.username = username;
					   me.email=email1;

					   billboard.social.login( function() { 
						   billboard.broadcaster.dispatchEvent( "userLoggedIn" );
					   });					   

					   // Q. do we need to register with anyone else? Lala, CF, FB?

						// Now pop-up the Facebook if session is found
						me.showFacebookAuthorization();					   
					   
				   }
				   else {
						if((test.response.head.message).indexOf('Email-id is already found')>-1) {
							$('#login-error-email').html('The e-mail you entered already exists in the system. Please reenter or try a different one.');
							$("#user-register [name=email1]").removeClass('login-email-input').addClass('error-test');
							if(callback) return callback(false);
							
						}  
						else if ((test.response.head.message).indexOf('Username is already found')>-1){
							$('#login-error-username').html('The username you entered already exists in the system. Please reenter or try a different one.');
							$("#user-register [name=username]").removeClass('login-email-input').addClass('error-test');
							if(callback) return callback(false);
						}
						else {
						 $('#login-error-email,#login-error-username').html('The e-mail or username you entered already exists in the system. Please reenter or try a different one.');
							$("#user-register [name=username]").removeClass('login-email-input').addClass('error-test');
							$("#user-register [name=email1]").removeClass('login-email-input').addClass('error-test');
						}
												  
					 //      $("#user-register [name=email2]").addClass('error-test');
						   //  $("#user-register").addClass("error");
						   if(callback) return callback(false);
						   return;
				   }
			   }  
		});  
		return false;
	};
})(jQuery);

// Q. what is this?
function billboardUserLogout(){
billboard.log("public billboard user logging out");
    billboard.user.logout();
}
