var Users = { userlist: {}, hovering: true, current: false, allCount: 0, userListIndex: [], currentIdx: -1, all: function () { $('#userViewContainer').hide() $('#userEditContainer').hide() $('#partyEditContainer').hide() $('#userListContainer').fadeOut(200) $.get(URL.user.all,{},Users.allCallback) }, allCallback: function (json) { var partyUserList = []; var guestHosts = []; var editable = []; var firstletter = "A"; Users.allCount = 0; Users.userListIndex = []; json.forEach(function(user){ // 0 id 1 group 2 name 3 email 4 blurb // if (fields[1] !== currentHost) // { // currentHost = fields[1] // partyUserList += "
  • invited by "+Auth.hosts[fields[1]]+"
  • " // } var a = user.name.substr(0,1) var li = "li id='r-"+Users.allCount+"'" var userRow = ""; var editSpan = ""; if (firstletter !== a) { firstletter = a li += " class='br'" } if (Auth.isHost || user.id === Auth.userID) { editSpan += "edit"; editable.push(user.id); } switch (user.access) { case 2: // host userRow = "<"+li+">"+user.name+" *" + editSpan + ""; break; case 1: // guest host userRow = "<"+li+">"+user.name+" *" + editSpan + ""; guestHosts.push(userRow); Users.userListIndex.unshift('user-'+user.id); Users.allCount += 1; break; default: // guest userRow = "<"+li+">"+user.name+"" + editSpan + ""; } partyUserList.push(userRow); Users.userlist['user-'+user.id] = user; Users.userListIndex.push('user-'+user.id); Users.allCount += 1; }) $('#partyLocation').html(""); var guestHostHeader = "
  • Guest Hosts
  • "; var guestListHeader = "
  • Guest List
  • "; for (var i in guestHosts) { guestHosts[i] = guestHosts[i].replace("class='br'","").replace("*",""); } $('#userList').html(guestHostHeader + guestHosts.join("") + guestListHeader + partyUserList.join("")); $('#user-add').hide(); $('#party-edit').hide(); $('#userListContainer').fadeIn(200); // $('#userViewContainer').html('Here\'s a tip! Use the up and down arrow keys to browse this list.').fadeIn(500) $('#userViewContainer').html(''); for (id in Users.userlist) { $('#'+id).hover(Users.limousein, Users.limouseout) $('#'+id).click(Users.liclick) } for (i in editable) { $('#edit-'+editable[i]).bind("click",Users.editClick) } Users.hovering = true }, limouseout: function () { if (Users.hovering) $("#"+this.id).removeClass("selected") }, limousein: function () { if (Users.hovering) { $("#"+this.id).addClass("selected") Users.view(this.id) } }, liclick: function () { if (! Users.hovering && Users.current === this.id) { Nav.selectClass(Users.userlist, false) Users.current = false Users.hovering = true } else { Nav.selectClass(Users.userlist, this.id) Users.view(this.id) Users.hovering = false } }, viewIdx: function (idx) { var id = Users.userListIndex[idx] if (isScrolledIntoView("#r-"+idx)) { var offset = $("#r-"+idx)[0].offsetTop+5 if (offset > 300) $("body").scrollTop( offset ) } else { // get element at x,y var element = document.elementFromPoint(30,180); if (element.tagName === "UL") element = document.elementFromPoint(30,190); if (element.tagName === "UL") element = document.elementFromPoint(30,200); if (element.tagName === "SPAN") id = element.id } Users.hovering = false Users.view(id) Nav.selectClass(Users.userlist, id) }, view: function (id) { var user = Users.userlist[id] var userRec = ''; // 0 id 1 group 2 name 3 email 4 blurb var blurb = parse_blurb( user.blurb ) userRec += "

    " + user.name + "

    " userRec += "

    " + ( ! user.emailhidden ? ""+user.email+"" : "" ) + "

    " userRec += "

    " + blurb + "

    " $('#userViewContainer').html(userRec) $('#userEditContainer').hide() $('#partyEditContainer').hide() $('#userViewContainer').show() Users.currentIdx = $("#"+id).parent().attr("id").substr(2) }, addClick: function () { warn("NEW USER FORM") var id = "NEW" $('#user-id').val(id) $('#user-name').val("") $('#user-email').val("") $('#user-emailhidden').attr('checked', false) $('#user-blurb').val("") $('#userViewContainer').hide() $('#userEditContainer').show() $('#user-name').focus() $('#userEditContainer h2').html("Add a new guest") if (Auth.isHost) { $('#user-password-block').show() $('#user-isstaff-block').show() } Nav.selectClass(Users.userlist, "") Users.hovering = false Main.saveFunction = Users.editSave }, editClick: function () { $(window).unbind("keydown") var id = this.id.split("-")[1] Users.hovering = false $('#userViewContainer').fadeOut(200) $('#userEditContainer').hide() $.post(URL.user.view, {id:id}, Users.editClickCallback) }, editClickCallback: function (raw) { var lines = raw.split("\n") if (lines.shift() !== API_MAGIC) { warn("bad api: user edit") return } var user = lines.shift().split('\t') warn ("editing user "+user[0]) var hidemail = user.emailhidden === '1' ? true : false // 0 id 1 name 2 email 3 access 4 emailhidden 5 hostid 6 blurb var blurb = user.blurb $('#user-id').val(user.id) $('#user-name').val(user.name) $('#user-email').val(user.email) $('#user-emailhidden').attr('checked', hidemail) $('#user-access option').attr("selected", false); $('#user-access option[value="'+parseInt(user.access)+'"]').attr("selected", true); $('#user-host option').attr("selected", false); $('#user-host option[value="'+parseInt(user.host_id)+'"]').attr("selected", true); $('#user-blurb').val(blurb) $('#userViewContainer').hide() if (user.id === Auth.userID) { $('#userEditContainer h2').html("Editing your profile") $('#user-password-block').show() $('#user-isstaff-block').hide() } else { $('#user-password-block').hide() $('#user-isstaff-block').hide() $('#user-invitedby-block').hide() $('#userEditContainer h2').html("Editing "+user.name) } if (Auth.isHost) { $('#user-password-block').show() $('#user-isstaff-block').show() $('#user-invitedby-block').show() $('#user-delete').show() var ishost = user.access === '1' ? true : false $('#user-ishost').attr('checked', ishost) } $('#user-password1').val('') $('#user-password2').val('') $('#userEditContainer').fadeIn(300) Main.saveFunction = Users.editSave }, editSave: function () { if (Main.saving) return Main.saving = true var hidemail = $('#user-emailhidden').attr("checked") === true ? 1 : 0 warn("attempting save") var id = $('#user-id').val() var data = { id: id, partyid: Party.currentID, hostid: $('#user-host').val(), name: $('#user-name').val(), email: $('#user-email').val(), emailhidden: hidemail, blurb: $('#user-blurb').val(), } if (Auth.isHost) { var access = $('#user-access').val() data['access'] = access } if (Auth.isHost || id === Auth.userID) { var pw1 = $('#user-password1').val() var pw2 = $('#user-password2').val() if (pw1 && pw2) { warn("setting password?! "+pw1) if (pw1 === pw2) data['password'] = pw1 else warn("passwords don't match!") } } $.post(URL.user.edit, data, Users.editSaveCallback) }, editSaveCallback: function (raw) { var lines = raw.split("\n") if (lines.shift() !== API_MAGIC) { warn("bad api: user edit") return } var result = lines.shift().split("\t") if (result[0] === "ERROR") { warn("save error: "+result[1]) return } var fields = lines.shift().split("\t") var rowID = "user-"+fields[0] if (result[0] === "OK") { warn("user saved") Users.userlist[rowID] = fields Users.view(rowID) Nav.selectClass(Users.userlist, rowID) } else if (result[0] === "NEW") { warn("user created") // $("#userList").append("
  • "+fields[1]+"
  • ") Party.view( Party.currentID ) } Main.saving = false }, deleteClick: function () { var id = $('#user-id').val() var name = $('#user-name').val() var r = confirm("ARE YOU SURE YOU WANT TO DELETE " + name + "?") if (r) $.post(URL.user.destroy, {'id':id}, Users.deleteClickCallback) }, deleteClickCallback: function () { var id = $('#user-id').val() var name = $('#user-name').val() Users.userlist['user-'+id] = [] warn("DELETED "+id+ " "+name) $('#userViewContainer').hide() $('#userViewContainer h2').html('') $('#userViewContainer b').html('') $('#userViewContainer p').html('') $('#userEditContainer').hide() Party.view( Party.currentID ) }, };