/*
 * MyAds.jspf JavaScript
 */

function connectWithFacebook() {
	FB.getLoginStatus(function(response) {
		if (response.session) {
			$("#facebookConnectForm").submit();
		} else {
			FB.login(function(response) {
				if (response.session) {
					if (response.perms) {
						$("#facebookConnectForm").submit();
					} else {
						return false;
					}
				} else {
					return false;
				}
			}, {perms:'email'});
		}
	});
};

function processDisconnectCmd(e) {
	$("#facebookConnectForm").unbind();
	$.post(
		"SignInFacebook",
		$("#facebookConnectForm").serialize(),
		function(data,textStatus,XMLHttpRequest) {
			$("#facebookProfileInfo").addClass("js-asset").addClass("hide");
			showConnect();
			clearMessages();
			// call facebook to revoke application permissions
			FB.api(
				{ 
					method: 'Auth.revokeAuthorization' 
				}, 
				function (response) {
				}
			);					
		},
		"json"
	);
	return false;
};

function showDisconnect() {
	$("#facebookDisconnection").removeClass("hide");
	$("#facebookConnection").addClass("hide");
	$("#facebookDisconnectText").removeClass("hide");
	$("#facebookConnectionText1").addClass("hide");
	$("#facebookConnectionText2").addClass("hide");
	$("#facebook-connect-cmd").attr("value", "disconnect");
};
function showConnect() {
	$("#facebookDisconnection").addClass("hide");
	$("#facebookConnection").removeClass("hide");
	$("#facebookDisconnectText").addClass("hide");
	$("#facebookConnectionText1").removeClass("hide");
	$("#facebookConnectionText2").removeClass("hide");
	$("#facebook-connect-cmd").attr("value", "connect");
};
function bindDisconnectCmd() {
	$("#facebookConnectForm").bind("submit", processDisconnectCmd);
};
function disconnectCmd(){		
	$("#facebookConnectForm").submit();
};

function clearMessages() {
	$("div.sbmessageTop").text("");
}

polaris.initMyAdsTabs = function(opts) {
	if (opts.showConnect) {
		showConnect();
	}
	else {
		bindDisconnectCmd();
		showDisconnect();
	}
	var tb = $('#ebc-account-tabs').tabs();
	if (opts.showProfileTab) {
		tb.tabs('select', 1);
	}
	if (opts.showAlertsTab) {
		tb.tabs('select', 2);
	}
}

polaris.initManageAlerts = function(opts) {
	
    var userAccountURL = opts.userAccountURL;

	function closeSubEdit(subId) {
        $("#mySubMod"+subId).addClass("hide"); 
        $("#mySubDetail"+subId).removeClass("hide"); 
	}

	function bindEditLink() {
		$(".alerts-list-detail a.edit").bind("click",
            function(evt) {
                var subId = evt.target.id.substr(9);
                if (polaris.currentSubEditId) {
                	closeSubEdit(polaris.currentSubEditId);
                }
                polaris.currentSubEditId = subId;
                $("#mySubMod"+subId).removeClass("hide"); 
                $("#mySubDetail"+subId).addClass("hide"); 
            }
         );
	}
	function bindCancelLink() {
         $(".alerts-list-edit a.cancel").bind("click",
            function(evt) {
                var subId = evt.target.id.substr(11);
                $("#mySubMod"+subId).addClass("hide"); 
                $("#mySubDetail"+subId).removeClass("hide"); 
                polaris.currentSubEditId = null;
            }
         );
	}
	
	function subFrequency(evt) {
        var subId = evt.target.id.substr(20);
        var action = evt.target.value;
        $.ajax({
        	method: "GET",
        	url: opts.editSubsURL,
        	data: {
        	action: action.toLowerCase(),
        	dataType: "json",
        	id: subId
            },
            success: function(data) {
            	if (data) {
            		if (data.success) {
            			$("#mySubFrequency"+subId).html(action.substr(0,1).toUpperCase()+action.substr(1).toLowerCase());
            			closeSubEdit(subId);
            			polaris.currentSubEditId = null;
            			$("#mySubFrequencySelect"+subId+" option").each(
        					function() {
        						$(this).attr("selected", ($(this).attr("value") == action));
        					}
    					);
            		}
            	}
            },
            error: function(req, error, data) {
            }
        });

	}
	function bindFrequency() {
        $(".alerts-list-edit select.frequency").bind("change", subFrequency);
	}

	function subActivate(evt) {
        var subId = evt.target.id.substr(13);
        $.ajax({
        	method: "GET",
        	url: opts.editSubsURL,
        	data: {
        	dataType: "json",
        	action: "unpause",
        	id: subId
            },
            success: function(data) {
            	if (data) {
            		if (data.success) {
            			closeSubEdit(subId);
            			polaris.currentSubEditId = null;
            			$("#mySubStatus"+subId).html("Active");
            			$("#mySubActivate"+subId).unbind("click");
            			var p = $("#mySubActivate"+subId).parent();
            			p.html('<a class="alnol pause" id="mySubPause'+subId+'">Pause</a>');
            			$("#mySubPause"+subId).bind("click", subPause);
            			$("#mySubDetail"+subId).removeClass("PAUSED");
            			$("#mySubDetail"+subId).addClass("ACTIVE");
            		}
            	}
            },
            error: function(req, error, data) {
            }
        });
	}
	function bindActivateLink() {
        $(".alerts-list-edit a.activate").bind("click", subActivate);
	}
	
	function subPause(evt) {
        var subId = evt.target.id.substr(10);
        $.ajax({
        	method: "GET",
        	url: opts.editSubsURL,
        	data: {
        	action: "pause",
        	dataType: "json",
        	id: subId
            },
            success: function(data) {
            	if (data) {
            		if (data.success) {
            			closeSubEdit(subId);
            			polaris.currentSubEditId = null;
            			$("#mySubStatus"+subId).html("Paused");
            			$("#mySubPause"+subId).unbind("click");
            			var p = $("#mySubPause"+subId).parent();
            			p.html('<a class="alnol activate" id="mySubActivate'+subId+'">Activate</a>');
            			$("#mySubActivate"+subId).bind("click", subActivate);
            			$("#mySubDetail"+subId).addClass("PAUSED");
            			$("#mySubDetail"+subId).removeClass("ACTIVE");
            		}
            	}
            },
            error: function(req, error, data) {
            }
        });
	}
	function bindPauseLink() {
        $(".alerts-list-edit a.pause").bind("click",subPause);
	}

	function subAddSMS(evt) {
        var subId = evt.target.id.substr(11);
        $.ajax({
        	method: "GET",
        	url: opts.editSubsURL,
        	data: {
        	action: "addSMS",
        	dataType: "json",
        	id: subId
            },
            success: function(data) {
            	if (data) {
            		if (data.success) {
            			updateSubscriptionList();
            		}
            	}
            },
            error: function(req, error, data) {
            }
        });
	}
	function bindAddSMSLink() {
        $(".alerts-list-edit a.addSMS").bind("click",subAddSMS);
	}

	function subAddEmail(evt) {
        var subId = evt.target.id.substr(13);
        $.ajax({
        	method: "GET",
        	url: opts.editSubsURL,
        	data: {
        	action: "addEmail",
        	dataType: "json",
        	id: subId
            },
            success: function(data) {
            	if (data) {
            		if (data.success) {
            			updateSubscriptionList();
            		}
            	}
            },
            error: function(req, error, data) {
            }
        });
	}
	function bindAddEmailLink() {
        $(".alerts-list-edit a.addEmail").bind("click",subAddEmail);
	}
	function bindDelete() {
		$("#subDelete").bind("click",
			function(evt) {
				var toDelete = $("input[name='a']:checked");
				var countToDelete = toDelete.length;
				var successDelete = 0;
				var errorDelete = 0;
				$(toDelete).each(
					function() {
						var subId = $(this).attr("value");
		                $.ajax({
		                	method: "GET",
		                	url: opts.editSubsURL,
		                	data: {
		                	dataType: "json",
		                	action: "delete",
		                	id: subId
			                },
			                success: function(data) {
			                	polaris.currentSubEditId = null;
			                	successDelete++;
			                	if (successDelete+errorDelete == countToDelete) {
			                		displayMsg({msg:"delete", success:successDelete, error:errorDelete});
			                	}
			    				updateSubscriptionList(subId);
			                },
			                error: function(req, error, data) {
			                	errorDelete++;
			                	if (successDelete+errorDelete == countToDelete) {
			                		displayMsg({msg:"delete", success:successDelete, error:errorDelete});
			                	}
			    				updateSubscriptionList(subId);
			                }
		                });
					}
				);
			}
		);
	}

    function updateSubscriptionList(subId) {
        $.ajax({
            type: "GET",
            url: userAccountURL,
            data: {userProfAction:"ALERTS",t:new Date().getTime()},
            dataType: "json",
            error: function(p1, p2, p3) {
        	 },
            success: function(sd) {
                if (sd) {
                    if (sd.success) {
                   	 	generateSubscriptionList(sd, subId);
                    }
                }
                delete sd;
            }
        });
    }
    
    function generateSubscriptionList(data, subId) {
    	var items = [];
    	var subs = data.subs;
    	var acts = data.actions;
    	var c = 0;
    	unBind();
    	for (var x=0;x<subs.length;x++) {
    		var sub = subs[x];
			var sid = sub.id; 
			items[c++] = makeAlertDetail(sub);
			items[c++] = makeAlertEdit(sub, acts[sid]);
    	}
    	var b = document.getElementById("alerts-list-body");
    	var p = b.parentNode;
    	p.removeChild(b);
    	delete b;
    	var div = document.createElement("div");
    	div.id = "alerts-list-body";
    	document.getElementById("alerts-list").appendChild(div);
    	for (var z=0;z<items.length;z++) {
    		div.appendChild(items[z]);
    	}
    	doBinds();
    	delete items;
    	delete subs;
    	delete acts;
    	delete data;
    	delete c;
    }
    
    function makeAlertDetail(sub) {
		var sid = sub.id; 
		var div = document.createElement("div");
		div.id = "mySubDetail"+sid;
		div.className = "alerts-list-detail nuclear "+sub.status;

		var colcb = document.createElement("div");
		colcb.className = "alerts-col alerts-col-cb";
		div.appendChild(colcb);
		var cb = document.createElement("input");
		cb.type = "checkbox";
		cb.name = "a";
		cb.value = sid;
		colcb.appendChild(cb);

		var col01 = document.createElement("div");
		col01.className = "alerts-col alerts-col-01";
		col01.innerHTML = sub.description;
		div.appendChild(col01);
		
		var col02 = document.createElement("div");
		col02.className = "alerts-col alerts-col-02";
		col02.innerHTML = (sub.type == "SMS" ? "SMS" : "Email");
		div.appendChild(col02);
		
		var col03 = document.createElement("div");
		col03.id = "mySubStatus"+sid;
		col03.className = "alerts-col alerts-col-03";
		col03.innerHTML = sub.status.substr(0,1).toUpperCase()+sub.status.substr(1).toLowerCase();
		div.appendChild(col03);
		
		var col04 = document.createElement("div");
		col04.id = "mySubFrequency"+sid;
		col04.className = "alerts-col alerts-col-04";
		col04.innerHTML = sub.frequency.substr(0,1).toUpperCase()+sub.frequency.substr(1).toLowerCase();
		div.appendChild(col04);
		
		if (sub.status != "PENDING") {
			var col05 = document.createElement("div");
			col05.className = "alerts-col alerts-col-05";
			div.appendChild(col05);
			var editLink = document.createElement("a");
			editLink.className = "alnol edit";
			editLink.id = "mySubEdit"+sid;
			editLink.innerHTML = "Edit";
			col05.appendChild(editLink);
		}
		
		return div;
    }
    
    function makeAlertEdit(sub, acts) {
		var sid = sub.id;
		var div = document.createElement("div");
		div.id = "mySubMod"+sid;
		div.className = "alerts-list-edit nuclear hide";
		
		var colcb = document.createElement("div");
		colcb.className = "alerts-col alerts-col-cb";
		div.appendChild(colcb);

		var col01 = document.createElement("div");
		col01.className = "alerts-col alerts-col-01";
		col01.innerHTML = sub.description;
		div.appendChild(col01);
		
		var col02 = document.createElement("div");
		col02.className = "alerts-col alerts-col-02";
		if ($.inArray("addEmail",acts) != -1) {
			var link = document.createElement("a");
			link.className = "alnol addEmail";
			link.id = "mySubAddEmail"+sid;
			link.innerHTML = "Add email";
			col02.appendChild(link);
		}
		if ($.inArray("addSMS",acts) != -1) {
			link = document.createElement("a");
			link.className = "alnol addSMS";
			link.id = "mySubAddSMS"+sid;
			link.innerHTML = "Add SMS";
			col02.appendChild(link);
		}
		div.appendChild(col02);
		
		var col03 = document.createElement("div");
		col03.className = "alerts-col alerts-col-03";
		if (sub.status == "PAUSED") {
			link = document.createElement("a");
			link.className = "alnol activate";
			link.id = "mySubActivate"+sid;
			link.innerHTML = "Activate";
			col03.appendChild(link);
		}
		if (sub.status == "ACTIVE") {
			link = document.createElement("a");
			link.className = "alnol pause";
			link.id = "mySubPause"+sid;
			link.innerHTML = "Pause";
			col03.appendChild(link);
		}
		div.appendChild(col03);
		
		var col04 = document.createElement("div");
		col04.className = "alerts-col alerts-col-04";
		if (sub.type == "EMAIL") {
			var sel = document.createElement("select");
			sel.id = "mySubFrequencySelect"+sid;
			sel.name = "mySubFrequencySelect"+sid;
			sel.className = "frequency";
			var op = document.createElement("option");
			op.value = "REALTIME";
			op.innerHTML = "Real Time";
			if (sub.frequency = "REALTIME") {op.selected = ""}
			sel.appendChild(op);
			op = document.createElement("option");
			op.value = "HOURLY";
			op.innerHTML = "Hourly";
			if (sub.frequency = "HOURLY") {op.selected = ""}
			sel.appendChild(op);
			op = document.createElement("option");
			op.value = "DAILY";
			op.innerHTML = "Daily";
			if (sub.frequency = "DAILY") {op.selected = ""}
			sel.appendChild(op);
			op = document.createElement("option");
			op.value = "WEEKLY";
			op.innerHTML = "Weekly";
			if (sub.frequency = "WEEKLY") {op.selected = ""}
			sel.appendChild(op);
			col04.appendChild(sel);
		}
		else {
			col04.innerHTML = sub.frequency;
		}
		div.appendChild(col04);
		
		var col05 = document.createElement("div");
		col05.className = "alerts-col alerts-col-05";
		div.appendChild(col05);
		link = document.createElement("a");
		link.className = "alnol cancel";
		link.id = "mySubCancel"+sid;
		link.innerHTML = "Cancel";
		col05.appendChild(link);

		return div;
    }

	function displayMsg(p) {
		if (p.msg == "delete") {
			if (p.error == 0) {
				if (p.success > 0 && p.success < 2) {
					$("#subEditMsg").html("Subscription deleted");
					setTimeout(
						function() {
							$("#subEditMsg").html("");
						},
						1750
					);
				}
				if (p.success > 1) {
					$("#subEditMsg").html(p.success+" subscriptions deleted");
					setTimeout(
						function() {
							$("#subEditMsg").html("");
						},
						1750
					);
				}
			}
		}
	}
	
	function unBind() {
	    $(".alerts-list-edit a.addSMS").unbind("click");
		$(".alerts-list-edit a.pause").unbind("click");
		$(".alerts-list-detail a.edit").unbind("click");
		$(".alerts-list-edit select.frequency").unbind("change");
		$(".alerts-list-edit a.cancel").unbind("click");
		$(".alerts-list-edit a.activate").unbind("click");
	    $(".alerts-list-edit a.addEmail").unbind("click");
	}

	function doBinds() {
		bindEditLink();
		bindCancelLink();
		bindFrequency();
		bindActivateLink();
		bindPauseLink();
		bindAddSMSLink();
		bindAddEmailLink();
	}
	
	doBinds();
	bindDelete();
	polaris.setUpdateSubscriptionList(updateSubscriptionList, this);
	
}

polaris.initProfileChange = function(opts) {
	/*
	 * Initialize eBay Classifieds user profile edit
	 */
	 var changeStaticPassword = $("#currentPasswordField .staticPassword");
     var password1StaticPassword = $("#password1Field .staticPassword");
     var currentUserPasswordLength = opts.cupl;
     var passwordExtra = $("#password-extra");
     var userHasPassword = (currentUserPasswordLength > 0);
     var changePasswordBtn = $("#currentPasswordField .updatePasswordBtn");
     var changeConfirmPasswordBtn = $("#currentPasswordField .confirmPasswordBtn");
     var password1UpdateBtn = $("#password1Field .updatePasswordBtn");
     var password1ConfirmBtn = $("#password1Field .confirmPasswordBtn");

     var currentUserNickname = opts.cun;
     var userHasNickname = ((currentUserNickname !== null) && (currentUserNickname.length > 0));
     var updateNicknameBtn = $("#updateNicknameBtn");
     var confirmNicknameBtn = $("#confirmNicknameBtn");
     var nicknameStatic = $("#nicknameStatic"); 
     var nicknameEdit = $("#usernickname");
     var nicknameError = $("#nicknameError");
     var nicknamePattern = /^[a-zA-Z0-9]{1}[a-zA-Z0-9-_]{0,15}$/;
     var nicknameTimeout = null;
     var passwordTimeout = null;
     var noneNickname = "<em>none</em>";
     
     var currentUserCellNumber = opts.cuc;
     var userHasCellNumber = ((currentUserCellNumber !== null) && (currentUserCellNumber.length > 0));
     var cellNumberStatic = $("#cellNumberStatic"); 
     var cellNumberTimeout = null;
     var updateCellNumberBtn = $("#updateCellNumberBtn");
     var saveCellNumberBtn = $("#saveCellNumberBtn");
     var smsAgreementCheckbox = $("#sms-agreement-checkbox");
     var cellNumberPattern = /^(?:\+?1[-. ]?)?\(?([2-9][0-9]{2})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
     
     var userAccountURL = opts.url;

     var fields = {
    	 nickname : {
    	 	field: $("#nicknameField"),
    	 	error: $("#nicknameError"),
    	 	input: $("#usernickname"),
    	 	valid: true,
    	 	keyup: function(event, ui) {
        	 	if (nicknameTimeout) {
        	 		clearTimeout(nicknameTimeout);
        	 	}
    	 		nicknameTimeout = setTimeout(nicknameKeyup, 750, this);
    	 		setTimeout(function(){nicknameKeyup({id:"nickname", keyCode:event.keyCode})}, 750)
    	 	},
    	 	prompt: $("#nicknamePrompt")
     	 },
     	 cellNumber : {
     	 	field: $("#cellNumberField"),
    	 	error: $("#cellNumberError"),
    	 	input: $("#userCellNumber"),
    	 	valid: true,
    	 	keyup: function(event, ui) {
        	 	if (cellNumberTimeout) {
        	 		clearTimeout(cellNumberTimeout);
        	 	}
    	 		cellNumberTimeout = setTimeout(cellNumberKeyup, 750, this);
    	 		setTimeout(function(){cellNumberKeyup({id:"cellNumber", keyCode:event.keyCode})}, 750)
    	 	},
    	 	keydown: function(e) {
    			var w = e.which;
    			var s = e.shiftKey; 
    			if (s) {
    				if ((w == 9) ||					// back tab
    					(w == 36) ||				// shift home
    					(w == 35) ||				// shift end
    					(w == 57) ||				// left paren
    					(w == 48)) {				// right paren
    					return true;
    				}
    			}
    			else {
    				if ((48 <= w)&&(w <=57)) {		// keyboard numbers
    					return true;
    				}
    				if ((96 <= w)&&(w <=105)) {		// keypad numbers
    					return true;
    				}
    				if ((w == 32)  ||						// space
    					(w == 110) ||						// keypad period
    					(w == 190) ||						// keyboard period
    					(w == 109) ||						// minus
    					($.browser.msie && w == 189) ||		// minus 
    					(w == 13)  ||						// enter
    					(w == 8)   ||						// backspace
    					(w == 46)  ||						// delete
    					(w == 37)  ||						// left arrow
    					(w == 39)  ||						// right arrow
    					(w == 9)   ||						// tab			
    					(w == 36)  ||						// home
    					(w == 35)  ||						// enter
    					(w == 13)  )  {						// end
    					return true;
    				}
    			}
    			e.preventDefault();
    			return false;
    	 	},
    	 	prompt: $("#cellNumberPrompt")
     	 },
         currentPassword : {
            field: $("#currentPasswordField"),
            error: $("#currentPasswordError"),
            input: $("#currentPassword"),
            valid: true,
            keyup: function(event, ui) {
                $(this).removeClass("error");
                fields[this.id].error.addClass("hide");
            }
         },
         password1 : {
            field: $("#password1Field"),
            error: $("#password1Error"),
            input: $("#password1"),
            valid: true,
            keyup: function(event, ui) {
        	 	if (passwordTimeout) {
        	 		clearTimeout(passwordTimeout);
        	 	}
        	 	passwordTimeout = setTimeout(function(){extraPasswordKeyup({id:"password1", keyCode:event.keyCode})}, 750);
            }
         },
         password2 : {
            field: $("#password2Field"),
            error: $("#password2Error"),
            input: $("#password2"),
            valid: true,
            keyup: function(event, ui) {
	     	 	if (passwordTimeout) {
	    	 		clearTimeout(passwordTimeout);
	    	 	}
	     	 	passwordTimeout = setTimeout(function(){extraPasswordKeyup({id:"password2", keyCode:event.keyCode})}, 750);
            }
         }
     };
     
     var translateErrorMessage = {
    	        not_logged_in: "Unable to update account",
    	        no_such_user: "Unable to update account",
    	        unknown: "Unable to update account",
    	        nickname_taken: "That nickname is already being used",
    	        nickname_invalid: "That nickname is not allowed",
    	        nickname_chars: "Only letters, numbers, -, and _ are allowed",
    	        password_fail: "Password is incorrect",
    	        password_match: "Password is incorrect",
    	        password_too_long: "New password is too long",
    	        password_too_short: "New password is too short",
    	        cell_registration_max_try_exceeded: "You've changed your cell number too many times today. Try again later.",
    	        cellnumber_taken: "That cell phone number is already being used.",
    	        cellnumber_chars: "That's not a valid cell number"
    	        	
    	     };

     function nicknameKeyup(p) {
        confirmNicknameBtn.unbind("click");
  		if ((fields["nickname"].input.val().match(nicknamePattern))|| (fields["nickname"].input.val().length == 0)) {
  			fields["nickname"].error.addClass("hide");
	        confirmNicknameBtn.bind("click", updateNickname);
	        confirmNicknameBtn.removeClass("disabled");
	        if (p && (p.keyCode == 13)) {
	        	confirmNicknameBtn.click();
	        }
  		}
  		else {
  			setResponseError("nickname_chars", fields["nickname"].error);
  			fields["nickname"].error.removeClass("hide");
  			fields["nickname"].prompt.addClass("invisible");
	        confirmNicknameBtn.addClass("disabled");
  		}
     }
     
     function cellNumberKeyup(p) {
    	saveCellNumberBtn.unbind("click");
    	if ((cellNumberPattern.test(fields["cellNumber"].input.val()))|| (fields["cellNumber"].input.val().length == 0)) {
			var v = fields["cellNumber"].input.val();
			var vf = v.replace(cellNumberPattern, "($1) $2-$3");
			if (v != vf) {
				fields["cellNumber"].input.val(v.replace(cellNumberPattern, "($1) $2-$3"));
			}
  			fields["cellNumber"].error.addClass("hide");
	        saveCellNumberBtn.bind("click", updateCellNumber);
	        saveCellNumberBtn.removeClass("disabled");
	        if (p && (p.keyCode == 13)) {
	        	saveCellNumberBtn.click();
	        }
  		}
  		else {
  			setResponseError("cellnumber_chars", fields["cellNumber"].error);
  			fields["cellNumber"].error.removeClass("hide");
  			fields["cellNumber"].prompt.addClass("invisible");
	        saveCellNumberBtn.addClass("disabled");
  		}
     }

     function enablePasswordSave(enable) {
        var btn;
        if (userHasPassword) {
            btn = changeConfirmPasswordBtn;
        }
        else {
            btn = password1ConfirmBtn;
        }
        btn.addClass("disabled");
        btn.unbind("click");
        if (enable) {
            btn.removeClass("disabled");
            btn.bind("click", updatePassword);
        }
     }
     
     function extraPasswordKeyup(p) {
         var p1 = fields["password1"].input.val();
         var p2 = fields["password2"].input.val();
         fields["password1"].valid = false;
         fields["password2"].valid = false;
         if (userHasPassword) {
             fields["password1"].field.addClass("sub");
         }
         if ((p1.length == 0) && (p2.length == 0)) {
             clearExtraPasswordErrors(false);
             enablePasswordSave(false);
             setPasswordPrompt();
             return;
         }
         
         var stillTypingPassword2 = (p.id == "password2") && (p1.length >= 6) && (p2.length < 6);
         if (fields[p.id].input.val().length < 6 && !stillTypingPassword2) {
             clearExtraPasswordErrors(false);
             fields[p.id].error.html("too short");
             $("#passwordPrompt").addClass("invisible");
             fields[p.id].error.removeClass("hide");
             fields[p.id].input.addClass("error");
             enablePasswordSave(false);
             return;
         }

         if (p1.length && p2.length) {
             if (p1.length == p2.length) {
                 if (p1 == p2) {
                     clearExtraPasswordErrors(true);
                     fields["password1"].valid = true;
                     fields["password2"].valid = true;
                     enablePasswordSave(true);
                     $("#passwordPrompt").addClass("invisible");
         	         if (p && (p.keyCode == 13)) {
	         	        if (userHasPassword) {
	         	            changeConfirmPasswordBtn.click();
	         	        }
	         	        else {
	         	            password1ConfirmBtn.click();
	         	        }
	        	     }
                     return;
                 }
             }
         }
         fields["password1"].error.html("passwords must match");
         fields["password2"].error.html("");
         $("#passwordPrompt").addClass("invisible");
         fields["password1"].error.removeClass("hide");
         fields["password2"].error.removeClass("hide");
         fields["password1"].error.removeClass("password-match");
         fields["password2"].error.removeClass("password-match");
         fields["password1"].input.addClass("error");
         fields["password2"].input.addClass("error");
         enablePasswordSave(false);
     }
     
     function clearCurrentPasswordErrors() {
         fields["currentPassword"].error.addClass("hide");
         fields["currentPassword"].error.html("");
         fields["currentPassword"].input.removeClass("error");
     }

     function clearExtraPasswordErrors(pmatch) {
         fields["password1"].input.removeClass("error");
         fields["password2"].input.removeClass("error");
         if (pmatch) {
             fields["password1"].error.addClass("password-match");
             fields["password1"].error.html("passwords match");
             fields["password1"].error.removeClass("hide");
             fields["password2"].error.addClass("hide");
         }
         else {
             fields["password1"].field.removeClass("sub");
             fields["password1"].error.addClass("hide");
             fields["password1"].error.html("");
             fields["password2"].error.addClass("hide");
             fields["password2"].error.html("");
         }
     }

     function passwordMask(len) {
         var hiddenPasswordText = [];
         for (;len;len--) {
             hiddenPasswordText.push("\u2022");
         }
         return hiddenPasswordText.join("");
     }
     
     function enableCellNumberButton(enable) {
         updateCellNumberBtn.unbind("click");
         if (enable) {
             updateCellNumberBtn.bind("click", cellNumberUpdateDisplay);
        	 updateCellNumberBtn.removeClass("disabled");
         }
         else {
        	 updateCellNumberBtn.addClass("disabled");
         }
     }
     
     function setCellNumberField(cellNumber) {
         cellNumberStatic.html((userHasCellNumber ? currentUserCellNumber.replace(cellNumberPattern, "($1) $2-$3") : "<em>none</em>"));
         if (!userHasCellNumber) {
        	 $("#cellNumberPrompt").removeClass("invisible");
         }
     }
     
     function cellNumberNormalDisplay() {
         updateCellNumberBtn.unbind("click");
         fields["cellNumber"].input.addClass("hide");
         if (userHasCellNumber) {
        	 fields["cellNumber"].input.val(currentUserCellNumber);
        	 $("#cellNumberPrompt").addClass("invisible");
         }
         else {
        	 fields["cellNumber"].input.val("");
        	 $("#cellNumberPrompt").removeClass("invisible");
         }
         setCellNumberField();
         cellNumberStatic.removeClass("hide");
         saveCellNumberBtn.addClass("hide");
         updateCellNumberBtn.html("Change");
         updateCellNumberBtn.bind("click", cellNumberUpdateDisplay);
         fields["cellNumber"].error.html("");
         fields["cellNumber"].error.addClass("hide");
         $("#profileSMSAgreement").addClass("hide");
         enablePasswordButtons(true);
         enableNicknameButton(true);
     }
     
     function cellNumberUpdateDisplay() {
         updateCellNumberBtn.unbind("click");
         if (userHasCellNumber) {
        	 fields["cellNumber"].input.val(cellNumberStatic.html());
         }
         cellNumberStatic.addClass("hide");
         $("#sms-agreement-prompt").addClass("hide");
         fields["cellNumber"].input.removeClass("hide");
         fields["cellNumber"].input.removeClass("error");
         saveCellNumberBtn.removeClass("hide");
         $("#profileSMSAgreement").removeClass("hide");
         fields["cellNumber"].input.focus();
         updateCellNumberBtn.html("Cancel");
         updateCellNumberBtn.bind("click", cellNumberNormalDisplay);
         enablePasswordButtons(false);
         enableNicknameButton(false);
         cellNumberKeyup();
     }

     function enableNicknameButton(enable) {
         updateNicknameBtn.unbind("click");
         if (enable) {
             updateNicknameBtn.bind("click", nicknameUpdateDisplay);
        	 updateNicknameBtn.removeClass("disabled");
         }
         else {
        	 updateNicknameBtn.addClass("disabled");
         }
     }

     function setNicknameField(nickname) {
         nicknameStatic.html((userHasNickname ? currentUserNickname : "<em>none</em>"));
         if (!userHasNickname) {
        	 $("#nicknamePrompt").removeClass("invisible");
         }
     }
     
     function nicknameUpdateDisplay() {
         updateNicknameBtn.unbind("click");
         if (userHasNickname) {
        	 nicknameEdit.val(nicknameStatic.html());
         }
         nicknameStatic.addClass("hide");
         nicknameEdit.removeClass("hide");
         nicknameEdit.removeClass("error");
         confirmNicknameBtn.removeClass("hide");
         nicknameEdit.focus();
         updateNicknameBtn.html("Cancel");
         updateNicknameBtn.bind("click", nicknameNormalDisplay);
         enablePasswordButtons(false);
         enableCellNumberButton(false);
         nicknameKeyup();
     }
     
     function nicknameNormalDisplay() {
         updateNicknameBtn.unbind("click");
         nicknameEdit.addClass("hide");
         if (userHasNickname) {
        	 nicknameEdit.val(currentUserNickname);
        	 $("#nicknamePrompt").addClass("invisible");
         }
         else {
        	 nicknameEdit.val("");
        	 $("#nicknamePrompt").removeClass("invisible");
         }
         setNicknameField();
         nicknameStatic.removeClass("hide");
         confirmNicknameBtn.addClass("hide");
         updateNicknameBtn.html("Change");
         updateNicknameBtn.bind("click", nicknameUpdateDisplay);
         fields["nickname"].error.html("");
         fields["nickname"].error.addClass("hide");
         enablePasswordButtons(true);
         enableCellNumberButton(true);
     }
     
     function enablePasswordButtons(enable) {
         changePasswordBtn.unbind("click");
         password1UpdateBtn.unbind("click");
    	 if (enable) {
             changePasswordBtn.bind("click", passwordChangeDisplay);
             password1UpdateBtn.bind("click", passwordAddDisplay);
    		 changePasswordBtn.removeClass("disabled");
    		 password1UpdateBtn.removeClass("disabled");
    	 }
    	 else {
    		 changePasswordBtn.addClass("disabled");
    		 password1UpdateBtn.addClass("disabled");
    	 }
     }
     
     function setPasswordPrompt() {
    	 if (userHasPassword) {
    		 $("#passwordPrompt").addClass("invisible");
    	 }
    	 else {
    		 $("#passwordPrompt").removeClass("invisible");
    	 }
     }

     function passwordDisplay() {
    	 enableNicknameButton(true);
         enableCellNumberButton(true);
         changePasswordBtn.unbind("click");
         changeStaticPassword.removeClass("hide");
         setPasswordPrompt();
         clearExtraPasswordErrors(false);
         clearCurrentPasswordErrors();
         fields["password1"].input.val("");
         fields["password2"].input.val("");
         fields["password1"].field.addClass("hide");
         fields["password2"].field.addClass("hide");
         fields["currentPassword"].input.val("");
         fields["currentPassword"].input.addClass("hide");

         changeConfirmPasswordBtn.addClass("hide");
         changePasswordBtn.html("Change");
         clearExtraPasswordErrors(false);
         changePasswordBtn.bind("click", passwordChangeDisplay);
         password1ConfirmBtn.removeClass("hide");
         password1UpdateBtn.removeClass("hide");
     }

     function noPasswordDisplay() {
    	 enableNicknameButton(true);
         enableCellNumberButton(true);
         password1UpdateBtn.unbind("click");
         password1StaticPassword.removeClass("hide");
         password1StaticPassword.html(noneNickname);
         setPasswordPrompt();

         fields["password1"].input.val("");
         fields["password1"].input.addClass("hide");
         fields["password2"].field.addClass("hide");
         fields["password2"].input.val("");

         password1ConfirmBtn.addClass("hide");
         password1UpdateBtn.html("Change");
         password1UpdateBtn.bind("click", passwordAddDisplay);

         clearExtraPasswordErrors(false);
     }

     function passwordAddDisplay() {
    	 enableNicknameButton(false);
         enableCellNumberButton(false);
         password1UpdateBtn.unbind("click");
         password1StaticPassword.addClass("hide");

         fields["password1"].input.removeClass("hide");
         fields["password1"].input.focus();
         fields["password2"].field.removeClass("hide");
         
         password1ConfirmBtn.removeClass("hide");
         password1UpdateBtn.html("Cancel");
         password1UpdateBtn.bind("click", noPasswordDisplay);
     }
     
     function passwordChangeDisplay() {
    	 enableNicknameButton(false);
         enableCellNumberButton(false);
         changePasswordBtn.unbind("click");
         changeConfirmPasswordBtn.unbind("click");
         enablePasswordSave(false);

         password1StaticPassword.addClass("hide");
         fields["currentPassword"].input.removeClass("hide");
         fields["password1"].field.removeClass("hide");
         fields["password1"].input.removeClass("hide");
         changeStaticPassword.addClass("hide");
         fields["password2"].field.removeClass("hide");
         fields["currentPassword"].input.focus();
         
         changeConfirmPasswordBtn.removeClass("hide");
         changePasswordBtn.html("Cancel");
         changePasswordBtn.bind("click", passwordDisplay);
         changeConfirmPasswordBtn.bind("click", updatePassword);
         
         password1ConfirmBtn.addClass("hide");
         password1UpdateBtn.addClass("hide");
     }

     function setResponseError(err, field) {
    	 var terr = translateErrorMessage[err];
    	 if (terr) {
    		 field.html(terr);
    	 }
    	 else {
    		 field.html(err);
    	 }
     }
     
     function updateCellNumber() {
    	 var cellNumber = fields["cellNumber"].input.val();
    	 if (smsAgreementCheckbox.attr("checked") || cellNumber.length == 0) {
	         $.ajax({
	             type: "GET",
	             url: userAccountURL,
	             data: getProfileData('CELLNUMBER'),
	             dataType: "json",
	             error: function(p1, p2, p3) {
	         	 },
	             success: function(response) {
	                 if (response) {
	                     if (response.success) {
	                    	 userHasCellNumber = true;
	                    	 currentUserCellNumber = cellNumber;
	                         cellNumberNormalDisplay();
	                         polaris.updateSubscriptionList();
	                     }
	                     else {
	                    	 setResponseError(response.error, fields["cellNumber"].error);
	                    	 fields["cellNumber"].error.removeClass("hide");
	                    	 $("#cellNumberPrompt").addClass("invisible");
	                     }
	                 }
	             }
	         });
    	 }
    	 else {
    		 $("#sms-agreement-prompt").removeClass("hide");
    	 }
     }
     
     function updatePassword() {
         var nickname = fields["nickname"].input.val();
         if (nickname == noneNickname) {
        	 nickname = "";
         }
         var data = [];
         var passwordLength = fields["password1"].input.val().length;
         data.push("nickname="+nickname);
         if (userHasPassword) {
            data.push("currentPassword="+fields["currentPassword"].input.val());
         }
         data.push("password1="+fields["password1"].input.val());
         data.push("password2="+fields["password2"].input.val());

         $.ajax({
             type: "GET",
             url: userAccountURL,
             data: getProfileData('PASSWORD'),
             dataType: "json",
             success: function(response) {
                 if (response) {
                     if (response.success) {
                         userHasPassword = true;
                         changeStaticPassword.html(passwordMask(passwordLength));
                         fields["currentPassword"].field.removeClass("hide");
                         fields["password1"].field.addClass("hide");
                         fields["password1"].field.addClass("sub");
                         passwordDisplay();
                     }
                     else {
                        for (_f in response.errors) {
                       	 	setResponseError(response.errors[_f], fields[_f].error);
                            fields[_f].error.removeClass("hide");
                            fields[_f].input.addClass("error");
                            if (fields[_f].prompt) {
                            	fields[_f].prompt.addClass("invisible");
                            }
                        }
                   	 	$("#passwordPrompt").addClass("invisible");
                     }
                 }
             }
         });
     }

     function updateNickname() {
         var nickname = fields["nickname"].input.val();
         $.ajax({
             type: "GET",
             url: userAccountURL,
             data: getProfileData('NICKNAME'),
             dataType: "json",
             error: function(p1, p2, p3) {
        	 	polaris.reinit();
         	 },
             success: function(response) {
        	 	 polaris.reinit();
        	 	 userHasNickname = polaris.hasUserName();
        	 	 currentUserNickname = polaris.getUserName();
                 if (response) {
                     if (response.success) {
                    	 if (polaris.hasUserName()) {
                             $("#user-name").html(polaris.getUserName());
                    	 }
                    	 else {
                    		 var email = polaris.getUserEmail();
                             var idx = email.indexOf("@");
                             if (idx > 0) email = email.substring(0,idx);
                             if (email.length > 20) {
                            	 email = email.substring(0,18) + "...";
                             }
                             $("#user-name").html(email);
                    	 }
                         nicknameNormalDisplay();
                     }
                     else {
                    	 setResponseError(response.error, fields["nickname"].error);
                    	 fields["nickname"].error.removeClass("hide");
                    	 $("#nicknamePrompt").addClass("invisible");
                     }
                 }
             }
         });
     }

     function updateOptIn(){
			$("#optInText").fadeIn("slow");
			$("#optInText").text("  Saving!");
         $.ajax({
             type: "GET",
             url: userAccountURL,
             data: getProfileData('OPTOUT'),
             dataType: "json",
             error: function(p1, p2, p3) {
         	 },
             success: function(response) {
      			$("#optInText").text("  Saved!");
				$("#optInText").fadeOut("slow");
             }
         });
     }
     
     function getProfileData(userProfileAction){
         var cellNumber = fields["cellNumber"].input.val();
         var nickname = fields["nickname"].input.val();
         if (nickname == noneNickname) {
        	 nickname = "";
         }
         var data = [];
         var passwordLength = fields["password1"].input.val().length;
         data.push("nickname="+nickname);
         data.push("cellNumber="+cellNumber);
         if (userHasPassword) {
            data.push("currentPassword="+fields["currentPassword"].input.val());
         }
         data.push("password1="+fields["password1"].input.val());
         data.push("password2="+fields["password2"].input.val());

         var optOut = !($("#optIn").attr('checked'));
         data.push("optOut="+optOut);
         
         data.push("userProfAction="+userProfileAction);
         
         return data.join("&");
     }
     
     for (_f in fields) {
        if (fields[_f].keydown) {
            fields[_f].input.bind("keydown", fields[_f].keydown);
        }
        if (fields[_f].keyup) {
            fields[_f].input.bind("keyup", fields[_f].keyup);
        }
        if (fields[_f].blur) {
            fields[_f].input.bind("blur", fields[_f].blur);
        }
     }
     
     $(".ebc-profile-info a").hover(
         function(){
             $(this).addClass("hand-pointer");
         },
         function(e){
             $(this).removeClass("hand-pointer");
         }
     );
     
     $("#ebc-account-tabs a").hover(
         function(){
             $(this).addClass("hand-pointer");
         },
         function(e){
             $(this).removeClass("hand-pointer");
         }
     );

     if (userHasPassword) {
         changeStaticPassword.html(passwordMask(currentUserPasswordLength));
         fields["currentPassword"].field.removeClass("hide");
         fields["password1"].field.addClass("hide");
         passwordDisplay();
     }
     else {
         fields["currentPassword"].field.addClass("hide");
         fields["password1"].field.removeClass("hide");
         noPasswordDisplay();
     }
     enablePasswordSave(false);

     setNicknameField();
     updateNicknameBtn.bind("click", nicknameUpdateDisplay);
     confirmNicknameBtn.bind("click", updateNickname);
     
     setCellNumberField();
     updateCellNumberBtn.bind("click", cellNumberUpdateDisplay);
     saveCellNumberBtn.bind("click", updateCellNumber);
     smsAgreementCheckbox.bind($.browser.msie ? 'propertychange': 'change', function(e) {
		if (e.type == "change" || (e.type == "propertychange" && window.event.propertyName == "checked")) {
			if (smsAgreementCheckbox.attr("checked")) {
				$("#sms-agreement-prompt").addClass("hide");
			}
		}
	 });
          
     $("#optIn").bind("click", updateOptIn);
}
