/* ****************************************** 
 
  TITLE:        NBC_USER_OVERLAY.JS
  VERSION:      1.53
  LAST UPDATED: 09/16/2009 
  UPDATED BY:  Viktoriya Eremeeva
  CONTENTS:

 @release 2009-10-15 - vicky

******************************************  */

var NBC_UserOverlay = function () {
  var isVisible = {
      login: false,
      reg: false
  };

  /* PUBLIC METHODS -- see EXPOSING PUBLIC METHODS, below */ 
  var init = function() {
    $(document).ready(function() {
      $("#signUpLink").click(function(event) {
        event.preventDefault();
        $("#overlay_wrapper").css("display","block");
        showRegistration();
      });
    });
    
    $(document).ready(function() {
      $("#overlay_close > a:first").click(function() {
        hideOverlay(); 
      });
      $("#registerButton a:first").click(function() {
        nbc.omniture.firedRegistration = "Header";
        showRegistration();
        $("#overlay_wrapper").vCenter();
        //calcHeight("overlay_wrapper"); calcWidth("overlay_wrapper");
      }); 
      $("#loginButton a:first").click(function() {
        nbc.omniture.firedRegistration = "Header";
        showLogin();
        //calcHeight("overlay_wrapper"); calcWidth("overlay_wrapper");
        $("#overlay_wrapper").vCenter();
      });
    });

    // login form validation
    $(document).ready(function() {
      $("#loginSubmit").attr("disabled", false);
      $("#loginForm").validate({
        submitHandler: function(form) {
       // do other stuff for a valid form
       $("#processing img").show();
       $("#overlay_content").css("opacity", 0.3);
          submitLoginForm();
        },        
        errorPlacement: function(error, element) {
          element.parent().addClass('invalid');
          element.parent().find('.errorText').text(error.text());      
        },
        success: function(label) {
          $("#" + label[0].htmlFor).parent().removeClass("invalid");
        },    
        errorClass: "invalid",
        event: "submit",
        rules: {
          loginEmail: {
            required: true,
            email: true
          },
          loginPassword: {
            required: true
          },
          loginUsername: {
            nowhitespaceuserpunct: true,
            minlength: 4, 
            maxlength: 20
          }
        },
        messages: {
          loginUsername: 'Please enter a username.',
          loginPassword: 'Please enter a password.',
          loginEmail: 'Please enter a valid e-mail address.'
        }
      });
    });

    // custom birthday validation
    $(document).ready(function() {
       $("#birthMonth,#birthDay,#birthYear").change(function() {
        if (isBirthdayCompleted()) {
          $("div.birthdate").removeClass("invalid").addClass("valid");
          $('input[name="birthday"]').val(getFormattedBirthday());
        }
        // if user deselected a validated birthday field
        else if ($("div.birthdate").hasClass("valid")) {
          // make invalid
          $("div.birthdate").removeClass("valid").addClass("invalid");      
          $('input[name="birthday"]').val(""); // reset
        }
      });
    });

    // make gender valid on click
    $(document).ready(function() {
      $("#regMale,#regFemale").click(function() {
        $(this).parent().parent().addClass('valid');
      });
    });
    
    // reg form validation
    $(document).ready(function() {
      $("#regForm").validate({
        submitHandler: function(form) {
          $("#processing img").show();
          $("#overlay_content").css("opacity", 0.3);
          // do other stuff for a valid form
          submitRegForm();
        },        
        errorPlacement: function(error, element) {
          element.parent().removeClass('valid').addClass('invalid');
          U.log("class " + element.parent().removeClass('valid').attr("class"));
          U.log("class " + element.parent().parent().removeClass('valid').attr("class"));
          if (element.parent().removeClass('valid').attr('class') == 'invalid') {
             U.log("field set for gender");
             if ($("#regMale").is(":checked") || $("#regFemale").is(":checked")) {
            	 element.parent().parent().removeClass('invalid').addClass('valid');
             }
             else {
                 element.parent().parent().removeClass('valid').addClass('invalid');
             }
          }
          // don't do anything for birthday
          if (element.attr("name") != "birthday") {
            element.parent().find('.errorText').text(error.text());
          }
        },
        success: function(label) {
          $("#" + label[0].htmlFor).parent().removeClass("invalid").addClass("valid");
          if ($("#" + label[0].htmlFor).parent().removeClass("invalid").attr("class") == "valid") {
        	  $("#" + label[0].htmlFor).parent().removeClass("invalid").addClass("valid");
          }
        },    
        errorClass: "invalid",
        event: "submit",
        rules: {
          regEmail: {
            required: true,
            email: true
          },
          regPassword: {
            required: true,
            minlength: 6,
            maxlength: 25
          },
          regDisplayName: {
           required: true,
           nowhitespaceuserpunct: true,
           minlength: 4,
           maxlength: 20
          },
          regZipCode: {
            required: false,
            digits: true,
            minlength: 5
          },
          gender: {
            required: true
          },
          birthday: {
            required: true
          }
        },
        messages: {
          regDisplayName: {
            required: 'Please enter a username.'
          },
          regPassword: {
            required: 'Please enter a password.',
            rangeLength: 'Your password must be between 4 and 12 characters.'
          },
          gender: {
        	required: 'Please chose a gender.'
          },
          regEmail: 'Please enter a valid e-mail address.',
          regZipCode: 'Please enter a valid zip code.'    
        }
      });
    });

    
    
    // twitter form validation
    
    $(document).ready(function() {	
	      $("#regTwitterForm").validate({
	        submitHandler: function(form) {
	    	  $("#processing_twitter img").show();
	          $("#overlay_content_tw").css("opacity", 0.3);
	       // do other stuff for a valid form
	    	 submitTwitterForm();
	      },                      
          errorPlacement: function(error, element) {
            element.parent().addClass('invalid');
            element.parent().find('.errorText').text(error.text());      
          },
          success: function(label) {
            $("#" + label[0].htmlFor).parent().removeClass("invalid");
          },    
          errorClass: "invalid",
          event: "submit",
          rules: {
            twitterPassword: {
              required: true
            },
            twitterUserName: {
              required: true,	
              nowhitespaceuserpunct: true,
              minlength: 3, 
              maxlength: 20
            }
          },
          messages: {
            twitterUserName: 'Please enter a username.',
            twitterPassword: 'Please enter a password.'
          }
        });
      });
    
    
    // Password Reminder
    $(document).ready(function() {
      $("#passwordRemider").click(function(event) {
        var email = $("#loginEmail").val();
        if (U.isNotNull(email)) {
        	if (validateEmail(email)) {	
		          $("#loginEmail").parent().removeClass("invalid");
		          $("#processing img").show();
		          $("#overlay_content").css("opacity", 0.3);
		          event.preventDefault();
		          passwordReminder();
        	}
        	else {
        	$("#loginEmail").parent().addClass("invalid");
                $("#loginEmail").parent().find('.errorText').text("Please enter a valid email address.");	
        	}
        }
        else { 
          $("#loginEmail").parent().addClass("invalid");
          $("#loginEmail").parent().find('.errorText').text("Please enter a valid email address.");
        }
      });
    });

    function validateEmail(currvalue) {
      var regex = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/;
      // alert(elem.value);
      if (currvalue.match(regex)) {
        return true;
      }
      else return false;
     }
    
    // init modal
    $(document).ready(function(){
       $('#overlay_wrapper').jqDrag('#overlay_header');
      $('#overlay_header').mouseup(function() {
         $(this).css("opacity","1");
         $("#overlay_close").css("display","block");
         $("#overlay_close").css("opacity","1");
         $("#overlay_close").css("display","block");
      });  
    });    
    
  } /* end of init */

  var statusMsg = function(serverMessageId, text,isError) {
    if (isError) {
      $("#"+serverMessageId).removeClass("valid");	
      $("#"+serverMessageId).addClass("invalid").text(text);
    }
    else {
      $("#"+serverMessageId).removeClass("invalid");	
      $("#"+serverMessageId).addClass("valid").text(text);    
    }
    if (serverMessageId == "serverMessageInfoTwitter") {
    	$("#processing_twitter img").hide();
        $("#overlay_content_tw").css("opacity", 1);
    }
    else {
    $("#processing img").hide();
    $("#overlay_content").css("opacity", 1);
    }
  }
  

  var convertAgeRange = function(userAge) {
	  var ageRanged = "AMS_300";
	 if  (userAge<13) { ageRanged = "AMS_301"; }
	 else if ((userAge >= 13) && (userAge <= 17))  { ageRanged = "AMS_302"; }
	 else if ((userAge > 17) && (userAge <= 20))   { ageRanged = "AMS_303"; } 	
	 else if ((userAge > 20) && (userAge <= 24))   { ageRanged = "AMS_304"; }
	 else if ((userAge > 24) && (userAge <= 29))   { ageRanged = "AMS_305"; }
	 else if ((userAge > 29) && (userAge <= 34))   { ageRanged = "AMS_306"; } 
	 else if ((userAge > 34) && (userAge <= 39))   { ageRanged = "AMS_307"; } 
	 else if ((userAge > 39) && (userAge <= 44))   { ageRanged = "AMS_308"; }
	 else if ((userAge > 44) && (userAge <= 49))   { ageRanged = "AMS_309"; } 
	 else if ((userAge > 49) && (userAge <= 54))   { ageRanged = "AMS_310"; }
	 else if ((userAge > 54) && (userAge <= 59))   { ageRanged = "AMS_311"; }
	 else if ((userAge > 59) && (userAge <= 64))   { ageRanged = "AMS_312"; }
	 else if (userAge > 64)  	                   { ageRanged = "AMS_313"; }
	 else {  }
	  U.log("ageRanged "+ageRanged);
	  return ageRanged;
  }
  
  var convertGender = function(gender) {
	 var convertedGender = "AMS_200";
	 if  (gender == "M") { convertedGender = "AMS_201"; }
	 else if (gender == "F")  { convertedGender = "AMS_202"; }
	 else {}
     return convertedGender;
  }
  
  
  var showLogin = function(showOverlayFixedOnTop) {
    if (isVisible.login) {
      U.log("login already visible...");
      return false;
    }
    $("#FB_reg_wrapper").hide();
    $("#overlay_wrapper").attr("class","");
    $("#overlay_wrapper")[0].className = "login_overlay";
    $("#overlay_text_header").attr("class","login_text_header");
    $("#loginForm").resetForm();
    $(".formContent > div").removeClass("invalid").removeClass("valid");
    $("#loginSubmit").attr("disabled", false);
    $("#reg_wrapper").hide();
    $("#regForm").hide();
    $("#loginForm").show();
  //  $("#loginWithFacebook").show();
    clearStatusMsg("serverMessage");
    // $("#overlay_wrapper").show();
    // $("#overlay_wrapper").fadeIn('fast');
    $("#reg_wrapper").css("display","none");
    $("#regForm").css("display","none");
    //$("#overlay_wrapper").css("position", "fixed");
    $("#overlay_wrapper").fadeIn('fast');
    $("#overlay_wrapper").show();
    $("regForm").css("display","none");
    $("#loginEmail").focus();
    isVisible.login = true;
    isVisible.reg = false;
    NBC_EventManager.fire("user.login.start");                          
    return false;
  }    
  
  var showRegistration = function(event) {
    if (isVisible.reg) {
      U.log("reg already visible...");
      return false;
    }
    showRecaptcha('dynamic_recaptcha', 'white', 112);
    $("#FB_reg_wrapper").hide();
    $("#overlay_wrapper").attr("class","");
    $("#overlay_wrapper")[0].className = "reg_overlay";
    $("#overlay_text_header").attr("class","regstr_text_header");
    // reset the form
    clearStatusMsg("serverMessage");
    $("#regForm,#loginForm").resetForm();
    $(".formContent > div").removeClass("valid invalid");    
    $("#regSubmit").attr("disabled", false);
    $("#login_wrapper").hide();
    // $("#overlay_wrapper").css("position", "fixed");
   // $("#loginWithFacebook").show();
    // $("#overlay_wrapper").fadeIn('fast');
    // $("#overlay_wrapper").fadeIn('fast');
    $("#overlay_wrapper").show();
    $("#regEmail").focus();
    $("div.gender").removeClass("valid"); // for IE
    isVisible.reg = true;
    isVisible.login = false;
    $("#reg_wrapper").show();
    $("#regForm").show();
    $("#loginForm").show();
    NBC_EventManager.fire("user.register.start");                      
    return false;
  }    

  var hideOverlay = function() {
    $(".formContent > div").removeClass("valid invalid");
    $("#overlay_wrapper").hide();
    NBC_EventManager.fire("overlay.closed");
    U.log("Firing [overlay.closed] event.");
    isVisible.login = false;
    isVisible.reg = false;
  }

  var validateLogin = function(showOverlayOnTop) {
    if (typeof user === "undefined") {
      U.log("WARNING: user object is not initialized");
      return false;
    }
    
    if (!user.isLoggedIn()) {
      showLogin();
      $("#overlay_wrapper").vCenter();
     // calcHeight("overlay_wrapper"); 
     // calcWidth("overlay_wrapper");
      return false;
    }    
    return true;    
  }              
  /* END PUBLIC METHODS */
  
  /* PRIVATE METHODS */
  var clearStatusMsg = function(serverMessageId) {
    $("#"+serverMessageId).text("").removeClass("invalid").removeClass("valid");  
  }
  
  var addSelectOptions = function(startIdx, endIdx, isAsc) {
    if(isAsc) {
      for(var idx = startIdx; idx <= endIdx; idx++) 
        document.write('<option value="' + idx + '">' + idx + '</option>');
    }
    else {
      for (var idx = endIdx; idx >= startIdx; idx--) {
        document.write('<option value="' + idx + '">' + idx + '</option>');
      }
    }
  }
  
  var calcHeight = function(popupId)  {
    var extraTop = 170 + parseInt($("#logoFrame").height());
    var popupTop = ((screen.height-extraTop) - parseInt(document.getElementById(popupId).offsetHeight))/2;
    document.getElementById(popupId).style.top =popupTop+ "px";
  }

  var calcWidth = function(popupId)  {
    //extraLeft = (screen.width - parseInt($("#siteContainer").width()))/2;
    extraLeft =0;
    var popupLeft = (screen.width - parseInt(document.getElementById(popupId).offsetWidth))/2 - extraLeft;
    document.getElementById(popupId).style.left = popupLeft+"px";
  }   
    
  function showRecaptcha(element, theme, tabindx) {
    Recaptcha.create(RecaptchaKey, element, {
          theme: theme,
          tabindex:  tabindx,
          callback: function() {
            $("#dynamic_recaptcha").show();
        }
    }); 
  } 

  var displaySuccess = function(serverMessageId, text) {
    $("#reg_wrapper").hide();
    $("#login_wrapper").hide();
    statusMsg(serverMessageId, text);
    setTimeout("NBC_UserOverlay.hide()", 1500); // hide after 1.5 secs
    if (serverMessageId == "serverMessageInfoTwitter") {
    	setTimeout("$('#overlay_wrapper_tw').hide()", 1500); // hide after 1.5 secs
    }
  }

   var processResponse = function(serverMessageId, data, userName, saveInfo, successText) {
    var success = false;
    if(data == undefined) {
      statusMsg(serverMessageId,"Error! Data not returned.", true);
    } 
    else if (U.isNotNull(data.error)) {
      statusMsg(serverMessageId, data.error, true); // internal error
    }
    else if(U.isNotNull(data.ka.error)) {
    	var twitterCred = "Invalid Twitter account credentials";
    	var twitterCredSubst = "Incorrect username / password combination. please try again";
    	var disabledNbcUser = "is Disabled";
    	var disabledFBUser = "has been disabled";
    	var replacedDisabledUserText = "Your account has been disabled due to inactivity, a violation of the <a href='http://"+nbc.domain+"/terms'>Terms of Service</a>, or at the discretion of NBC staff.  Please <a href='http://"+nbc.domain+"/about-us'>contact us</a> if you have any questions.";
    	var errUserNameExist = "Unable to register user";
    	var errProfanity = "Sorry we were not able to register you.";
    	var replaceForProfanity = "Invalid username. Please try again.";
    	var errorMess = data.ka.error;
    	var innErrorMess = "Invalid username: Username is already taken. Try a different one."; 
    	var errEmailIncorrect = "invalid user";
    	var errPassIncorrect = "invalid password";
    	var innErrorEmailPassIncorrect = "The email or password you entered is incorrect. Please try again.";	
    	if (errorMess.match(errUserNameExist)) {
    	  statusMsg(serverMessageId,innErrorMess, true);
    	}
    	else if (errorMess.match(errEmailIncorrect)) {
    		statusMsg(serverMessageId,innErrorEmailPassIncorrect, true);
    	}
    	else if (errorMess.match(errPassIncorrect)) {
    		statusMsg(serverMessageId,innErrorEmailPassIncorrect, true);
    	}
    	else if (errorMess.match(errProfanity)) {
    		statusMsg(serverMessageId,replaceForProfanity, true);
    	}
    	else if (errorMess.match(twitterCred)) {
    		statusMsg(serverMessageId,twitterCredSubst, true);
    	}
    	else if (errorMess.match(disabledNbcUser)) {
    	  statusMsg(serverMessageId,replacedDisabledUserText, true);
    	  $("#serverMessage").text("");
    	  $("#serverMessage").html(replacedDisabledUserText);
    	}
    	else if (errorMess.match(disabledFBUser)) {
    		statusMsg(serverMessageId,replacedDisabledUserText, true);
    	}
    	else { 
    	  statusMsg(serverMessageId,data.ka.error, true);
    	}    
    	if ($(".login_overlay").css("block") != "none") {
    	  $("#loginEmail").focus();
    	}
    }
    else if (U.isNull(data.ka.userId)) {
      statusMsg(serverMessageId,"Internal error. Please try again.", true)
    }
    else { // SUCCESS
      success = true;
      displaySuccess(serverMessageId, successText);
      user.setValues({token:data.ka.TOKEN, userId:data.ka.userId, userName:userName, email:data.ka.email, role:data.ka.role });      
      user.persist(saveInfo); 
    }
    if (!success) {
      Recaptcha.reload("t"); 
    }
  }
 
   var processResponseTwitter = function(serverMessageId, data, userName, saveInfo, successText) {
	    var success = false;
	    if(data == undefined) {
	      statusMsg(serverMessageId,"Error! Data not returned.", true);
	    } 
	    else if (U.isNotNull(data.error)) {
	    	var twitterCred = "Invalid Twitter account credentials";
	    	var twitterCredSubst = "Incorrect username / password combination. please try again";
	       	var errorMess = data.error;
	    	if  (errorMess.match(twitterCred)) {
	    		statusMsg(serverMessageId,twitterCredSubst, true);
	    	}
	    	else { 
	    		statusMsg(serverMessageId, data.error, true); // internal error
	    	}  	
	    }
	    else if(U.isNotNull(data.ka.error)) {
	    	var twitterCred = "Invalid Twitter account credentials";
	    	var twitterCredSubst = "Incorrect username / password combination. please try again";
	       	var errorMess = data.ka.error;
	    	if  (errorMess.match(twitterCred)) {
	    		statusMsg(serverMessageId,twitterCredSubst, true);
	    	}
	    	else { 
	    	  statusMsg(serverMessageId,data.ka.error, true);
	    	}    	
	    }
	    else if (U.isNull(data.ka.userId)) {
	      statusMsg(serverMessageId,"Internal error. Please try again.", true)
	    }
	    else { // SUCCESS
	      success = true;
	      displaySuccess(serverMessageId, successText);
	        // G.doPixelTracking(80, false, '', nbc.omniture.firedRegistration, '', 1, '');   
	    }
	  }

  var submitLoginForm = function() {
    // submit the form
    var userName = $("#loginUsername").fieldValue()[0];
    var queryString = $("#loginForm").formSerialize();
    jQuery.ajax({
      url: "/i/dispatcher/?h=user",
      data: queryString,
      type: 'POST',
      dataType: 'json',
      success: function(data) {
        var rememberMe = $('input[name="loginRemember"]').is(":checked");
        var userNameParsed ="";
      if (data.ka.username) {
          userNameParsed = data.ka.username;
          if (userNameParsed.match("fb_")  || userNameParsed.match("1000000")){
              userNameParsed = "Facebook User";
         }
      }
        processResponse("serverMessage", data, data.ka.username, rememberMe,
            "Thanks " + userNameParsed + ", you're now signed in.");
        $("#loginSubmit").attr("disabled", false);   
        
        if (data.ka) {
          var dataStr="action=getProfile&uid="+data.ka.userId+"&token="+data.ka.TOKEN+"&comments=n";
          var urlprofile="/i/dispatcher/?h=user";
          jQuery.ajax({
             type: "GET",
             url: urlprofile,
             data: dataStr,
             success: function(data){
        	  var userJsonLoad = eval("("+data+")");
	              if (userJsonLoad.profile.status == "-1" || typeof userJsonLoad.profile.UserProfile == "undefined") {
	                throw new Error ("User Profile Error: " + userJsonLoad.profile.error);
	              }  
	              var profile = userJsonLoad.profile.UserProfile;
	              user.setValues({userGender: profile.gender, userAge: profile.age, zipCode: profile.postalCode}); 
	              user.persist();    
	              var ageRangeOmn = convertAgeRange(parseInt(profile.age));
	              U.log(ageRangeOmn);
	              nbc.omniture.ageRange = ageRangeOmn;
	              nbc.omniture.userGender = convertGender(user.userGender);
	              nbc.omniture.postalCode = user.postalCode;
	              U.log(nbc.omniture.ageRange+ " "+nbc.omniture.userGender+" "+ nbc.omniture.postalCode);
            }
          });
        }  
       }
    });

    // return false to prevent normal browser submit and page navigation
    return false;
  }

  var submitRegForm = function() {
    $("#regSubmit").attr("disabled", true);
    // submit the form
    var userName = $('input[name="regDisplayName"]').fieldValue()[0];
    var queryString = $("#regForm").formSerialize();
    jQuery.ajax({
      url: "/i/dispatcher/?h=user",
      data: queryString,
      type: 'POST',
      dataType: 'json',
      success: function(data) {
        processResponse("serverMessage", data, userName, true,
            "Thanks " + userName + ", you're now registered and signed in.");
        $("#regSubmit").attr("disabled", false);
        if (data.ka) {
        	G.doPixelTracking(80, false, '', nbc.omniture.firedRegistration, '', 1, '');  
            var d = new Date();
            var currYear = d.getFullYear();
            U.log(d.getFullYear());
            var birthYear = $('select[name="birthYear"]').val();
            var userAge = currYear - parseInt(birthYear);
            user.setValues({userAge: userAge}); 
            user.persist();    
            var ageRange = convertAgeRange(parseInt(userAge));
            U.log(ageRange);
            U.log(convertAgeRange(userAge));
            var profileGender="";
            if ($("#regMale").is(":checked")) {
            profileGender = 'M';
            }
            else if ($("#regFemale").is(":checked")) {
            profileGender = 'F';
            }
            U.log("profileGender "+profileGender);
            user.setValues({userGender: profileGender}); 
            user.persist();    
            var userZip = $("#regZipCode").val();
            user.setValues({zipCode: userZip}); 
            user.persist();   
            nbc.omniture.ageRange = ageRange;
            nbc.omniture.userGender = convertGender(user.userGender);
            nbc.omniture.postalCode = user.postalCode;
            U.log(nbc.omniture.ageRange+ " "+nbc.omniture.userGender+" "+ nbc.omniture.postalCode);
        }
      }
    });    

    // return false to prevent normal browser submit and page navigation
    return false;
  }

  // submit Twitter form
  var submitTwitterForm = function() {
           clearStatusMsg("serverMessageInfoTwitter");
	    // submit the form
	    var queryString = $("#regTwitterForm").formSerialize();
	    jQuery.ajax({
	      url: "/i/dispatcher/?h=user",
	      data: queryString,
	      type: 'POST',
	      dataType: 'json',
	      success: function(data) {
              if (data.ka) {
                  if (data.ka.status == 1) {
	    	     G.doPixelTracking(90);
	    	  }
               }
	        processResponseTwitter("serverMessageInfoTwitter", data, user.userName, true, "We’ve successfully posted your message to Twitter!");
	       // $("#twitterSubmit").attr("disabled", false);  
	       // $("#overlay_wrapper_tw").hide();
	      }
	    });

	    // return false to prevent normal browser submit and page navigation
	 return false;
}
  var getZeroedValue = function(number) {
    if(number < 10) {
      return "0" + number;
    } 
    return number;
  }

  var getFormattedBirthday = function() {
    // merge birth fields into a single field YYYY-MM-DD
    var birthMonth = $('select[name="birthMonth"]').val();
    var birthDay = $('select[name="birthDay"]').val();
    var birthYear = $('select[name="birthYear"]').val();
    var birthday = birthYear + "-" + getZeroedValue(birthMonth) + "-" + getZeroedValue(birthDay);
    return birthday;
  }

  var isEmpty = function(fieldId) {
    return ($("#" + fieldId).val() === "");
  }

  var isBirthdayCompleted = function() {
    return !isEmpty("birthMonth") && !isEmpty("birthDay") && !isEmpty("birthYear");
  }   
  
  var isGenderCompleted = function() {
    return $("#regMale").is(":checked") || $("#regFemale").is(":checked");
  }
  
  var passwordReminder = function() {
    var email = $("#loginEmail").val();
    if (U.isNotNull(email)) {
      var queryString = "email=" + email;
      jQuery.getJSON("/i/dispatcher/?h=user&action=passwordReminder", queryString, function(data) {
        if (data.ka.status == 1) {
          statusMsg("serverMessage", "Password reminder sent!");
        }
        else {
          statusMsg("serverMessage", "There was a problem with your request: " + data.ka.error, true);
        }
        $("#overlay_content").css("opacity", 1);
        $("#processing img").hide();
      });
    }
    return false;
  }


  /* END PRIVATE METHODS */

  /* EXPOSING PUBLIC METHODS */
  return {
    init: init,
    status: statusMsg,
    showLogin: showLogin,
    showRegistration: showRegistration,
    hide: hideOverlay,
    validateLogin: validateLogin,
    addSelectOptions: addSelectOptions,
    convertAgeRange: convertAgeRange,
    convertGender: convertGender,
    getZeroedValue: getZeroedValue
  };
}();
 
 
 
 
 
 
 
 
 
 
