support-chat/js/supportchat.js

Fri, 16 Apr 2010 18:34:56 +0100

author
matthew@heavyhorse.vm.bytemark.co.uk
date
Fri, 16 Apr 2010 18:34:56 +0100
changeset 53
5cb47f4087a8
parent 51
7f893f429760
child 54
e5e70a46ace8
permissions
-rw-r--r--

Declare question_muc/team_muc as global singletons

12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
1 /* Config */
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
2
16
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
3 var support_config = {
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
4 login_domain: "anon.localhost",
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
5 bosh_url: "/http-bind",
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
6 muc_server: "support.localhost",
16
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
7 team_rooms: {
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
8 "Sales": "sales@support.localhost",
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
9 "Technical": "technical@support.localhost"
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
10 },
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
11 send_invites: true,
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
12 offline_support: "support@localhost",
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
13 alternative_url: "http://www.google.co.uk/"
16
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
14 };
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
15
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
16 /*** XMPP handling */
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
17 var conn = null;
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
18
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
19 /*** Query information */
39
0b18fb969bd3 Remove part of a comment accidentally copy/pasted
Matthew Wild <mwild1@gmail.com>
parents: 38
diff changeset
20 var question_type; // E.g. "Sales", "Technical"
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
21 var question_name; // Name of the submitter
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
22 var question_text; // The query itself
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
23
53
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
24 /*** XMPP rooms */
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
25 var team_muc; // MUC of the assistant team
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
26 var question_muc; // Temporary room for query discussion
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
27
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
28 /* Called by Strophe when status of connection changes
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
29 (from disconnected to connected, vice-versa, etc.)
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
30 */
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
31 function handle_connection_status(status, err)
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
32 {
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
33 if(err)
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
34 set_ui_state("error");
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
35 }
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
36
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
37 /* Initiate the connection to the XMPP server */
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
38 function start_connection()
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
39 {
16
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
40 conn = new Strophe.Connection(support_config.bosh_url);
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
41 var ret = true;
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
42 try
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
43 {
16
ebc14a22a0c1 Switch to using a table of config options (will allow for easier configuration later)
Matthew Wild <mwild1@gmail.com>
parents: 15
diff changeset
44 conn.connect(support_config.login_domain, null, handle_connection_status, 50);
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
45 }
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
46 catch(e)
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
47 {
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
48 ret = false;
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
49 }
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
50 return ret;
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
51 }
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
52
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
53 /*** UI handling */
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
54
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
55 /* Initial UI state */
23
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
56 var ui_state = "question";
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
57
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
58 /* Called to change the UI state (question, wait, converse) */
23
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
59 function set_ui_state(new_state)
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
60 {
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
61 if(ui_state != new_state)
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
62 {
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
63 $("#support-"+ui_state).hide();
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
64 $("#support-"+(ui_state=new_state)).show();
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
65 }
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
66 }
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
67
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
68 /* Handle the user submitting the question form */
7
53201a5347f9 Add dummy event handler for question submit
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
69 function on_question_submit()
53201a5347f9 Add dummy event handler for question submit
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
70 {
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
71 question_type = $("#support-question-type").val();
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
72 question_name = $("#support-question-name").val();
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
73 question_text = $("#support-question-text").val();
9
6677316d8834 Example question submit handler until BOSH backend integrated
Matthew Wild <mwild1@gmail.com>
parents: 7
diff changeset
74
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
75 var our_nick = question_name;
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
76
23
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
77 set_ui_state("wait");
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
78
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
79 // Create our question room
53
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
80 question_muc = new MUC(conn, {
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
81 // Handle room joins
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
82 joined: function (stanza, muc, occupant)
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
83 {
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
84 if(occupant.nick == our_nick)
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
85 // We joined the question room, now join the team room and tell them
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
86 team_muc.join(support_config.team_rooms[question_type], our_nick);
23
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
87 else if(ui_state == "wait")
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
88 {
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
89 // We were waiting for an assistant, and one just joined
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
90 var html = "<span class='muc-message'><span class='muc-nick'>" + htmlescape(occupant.nick) + "</span>" + " is answering your query</span><br/>\n";
34
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
91 $("#support-log").append(html).scrollTop($("#support-log")[0].scrollHeight);
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
92 $("#support-send-button").click(function ()
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
93 {
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
94 question_muc.send_message($("#support-input").val());
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
95 $("#support-input").val("");
510ca613996a Add support for sending messages from the converse UI
Matthew Wild <mwild1@gmail.com>
parents: 33
diff changeset
96 });
23
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
97 set_ui_state("converse");
ee84e7c22600 New logic for controlling the current UI state
Matthew Wild <mwild1@gmail.com>
parents: 22
diff changeset
98 }
28
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
99 },
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
100
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
101 // Handle incoming messages
28
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
102 message: function (stanza, muc, nick, message)
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
103 {
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
104 var html = "<span class='muc-message'><span class='muc-nick'>" + htmlescape(nick) + "</span>" + ": " + htmlescape(message) + "</span><br/>\n";
85fb6653b6e0 Display incoming messages in the UI
Matthew Wild <mwild1@gmail.com>
parents: 27
diff changeset
105 $("#support-log").append(html).scrollTop($("#support-log")[0].scrollHeight);
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
106 }
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
107 });
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
108
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
109 // Get a unique room name from the server and then join the question MUC
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
110 conn.sendIQ($iq({to: support_config.muc_server, type: "get"})
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
111 .c("query", { xmlns: "http://jabber.org/protocol/muc#unique" }),
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
112 function (result) // Success
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
113 {
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
114 var unique = Strophe.getText(result.getElementsByTagName("unique")[0]);
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
115 question_muc.join(unique + "@" + support_config.muc_server, our_nick);
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
116 },
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
117 function (result) // Failure to get unique room name
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
118 {
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
119 var unique = "support-"+Math.floor(Math.random()*512);
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
120 question_muc.join(unique + "@" + support_config.muc_server, our_nick);
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
121 });
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
122
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
123 // Create the team MUC object (it will be joined after we join the question MUC)
53
5cb47f4087a8 Declare question_muc/team_muc as global singletons
matthew@heavyhorse.vm.bytemark.co.uk
parents: 51
diff changeset
124 team_muc = new MUC(conn, {
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
125 // Someone joined the team MUC
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
126 joined: function (stanza, muc, occupant)
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
127 {
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
128 if(occupant.nick != our_nick)
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
129 return;
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
130
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
131 var sent = false;
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
132 for(var nick in team_muc.occupants)
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
133 {
43
a3febc43e4e9 Changes to work with new callback syntax
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
134 if(team_muc.occupants[nick].affiliation == "none" || nick == our_nick)
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
135 continue;
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
136 sent = true;
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
137 if(support_config.send_invites)
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
138 team_muc.send_invite(team_muc.jid+"/"+nick, question_text + "\n" + question_muc.jid);
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
139 else
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
140 team_muc.send_private_message(nick, question_text + "\n" + question_muc.jid);
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
141 }
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
142 if(!sent)
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
143 {
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
144 set_ui_state("offline");
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
145 }
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
146 },
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
147
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
148 error: function (stanza, muc, error)
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
149 {
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
150 if(error == "conflict")
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
151 {
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
152 our_nick += "_";
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
153 muc.join(support_config.team_rooms[question_type], our_nick);
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
154 }
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
155 else
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
156 set_ui_state("error");
21
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
157 }
b691536ed125 Support for joining the question and team MUCs, and notifying team members of the question
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
158 });
7
53201a5347f9 Add dummy event handler for question submit
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
159 }
53201a5347f9 Add dummy event handler for question submit
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
160
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
161 function build_ui()
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
162 {
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
163 return $(" \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
164 <div id='support-chat'> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
165 <div id='support-question'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
166 <h2>What is the nature of your question?</h2> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
167 <select id='support-question-type'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
168 <option>Sales</option> \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
169 <option>Technical</option> \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
170 </select> \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
171 <h2>What is your name?</h2> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
172 <input id='support-question-name' type='text' /> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
173 <h2>Your question:</h2> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
174 <textarea id='support-question-text'></textarea><br/> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
175 <input id='support-question-submit' type='submit' /> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
176 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
177 <div id='support-wait'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
178 Please wait while we find someone to \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
179 answer your query... \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
180 <br/><br/><br/><br/> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
181 <center><img src='waiting.gif' alt='Waiting' /></center> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
182 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
183 <div id='support-converse'> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
184 <div id='support-log'></div> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
185 <div id='support-input-container'><textarea id='support-input' type='text' value=''></textarea></div> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
186 <input id='support-send-button' type='submit' value='Send' /> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
187 <div style='clear:right;'></div> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
188 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
189 <div id='support-offline'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
190 <p>Sorry, there are no assistants available \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
191 to answer your question at the moment. \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
192 </p> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
193 <div id='support-offline-form'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
194 <p>To receive a reply to your question via \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
195 email, please enter your email address \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
196 below: \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
197 </p> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
198 <input id='support-offline-email' type='text' /> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
199 <input id='support-offline-submit-button' type='submit' value='Submit' /> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
200 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
201 <div id='support-offline-thanks'> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
202 <p>Thank you. Your question has been submitted \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
203 and will be replied to as soon as an assistant \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
204 becomes available.</p> \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
205 </div> \
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
206 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
207 <div id='support-error'> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
208 <p>Sorry, there is a problem with the live support \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
209 service at the moment. Please see our \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
210 <a href='"+support_config.alternative_url+"'>alternative \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
211 support channels</a> to receive assistance. \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
212 </p> \
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
213 </div> \
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
214 </div> \
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
215 ");
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
216 }
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
217
3
de7fbf06cfa5 Add skeleton supportchat.js
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 function display_ui()
de7fbf06cfa5 Add skeleton supportchat.js
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219 {
de7fbf06cfa5 Add skeleton supportchat.js
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 // Display pop-up, showing question form
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
221 var ui = build_ui();
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
222
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
223 ui.appendTo("body");
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
224
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
225 $("#support-question-submit").click(on_question_submit);
50
53bfdcb686f7 Bind enter to the send button in the chat UI
Matthew Wild <mwild1@gmail.com>
parents: 48
diff changeset
226 $("#support-input").keypress(function (event) {
53bfdcb686f7 Bind enter to the send button in the chat UI
Matthew Wild <mwild1@gmail.com>
parents: 48
diff changeset
227 if(event.keyCode == 13)
51
7f893f429760 Suppress enter key press so it doesn't reach the textbox
matthew@heavyhorse.vm.bytemark.co.uk
parents: 50
diff changeset
228 {
7f893f429760 Suppress enter key press so it doesn't reach the textbox
matthew@heavyhorse.vm.bytemark.co.uk
parents: 50
diff changeset
229 event.preventDefault();
50
53bfdcb686f7 Bind enter to the send button in the chat UI
Matthew Wild <mwild1@gmail.com>
parents: 48
diff changeset
230 $("#support-send-button").click();
51
7f893f429760 Suppress enter key press so it doesn't reach the textbox
matthew@heavyhorse.vm.bytemark.co.uk
parents: 50
diff changeset
231 }
50
53bfdcb686f7 Bind enter to the send button in the chat UI
Matthew Wild <mwild1@gmail.com>
parents: 48
diff changeset
232 });
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
233 $("#support-offline-submit-button").click(function ()
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
234 {
38
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
235 $("#support-offline-form").hide();
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
236 conn.send($msg({to: support_config.offline_support, type: "normal"})
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
237 .c("subject").t("Support query from " + question_name).up()
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
238 .c("body").t(question_text + "\n\nReply via email to: "+
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
239 $("#support-offline-email").val()));
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
240 $("#support-offline-thanks").show();
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
241 });
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
242
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
243 ui.dialog({
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
244 title:"Live Support",
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
245 height: 400,
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
246 width: 285
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
247 });
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
248
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
249 if(!start_connection())
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
250 {
536e0a618d4a Add error page to the UI, and use it on connection errors
Matthew Wild <mwild1@gmail.com>
parents: 37
diff changeset
251 set_ui_state("error");
12
7b0df9aad29c Connecting to the XMPP server
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
252 }
3
de7fbf06cfa5 Add skeleton supportchat.js
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 }
de7fbf06cfa5 Add skeleton supportchat.js
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254
27
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
255 /*** Helper functions */
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
256 function htmlescape(s)
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
257 {
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
258 return s.replace(/&/g,'&amp;').
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
259 replace(/>/g,'&gt;').
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
260 replace(/</g,'&lt;').
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
261 replace(/"/g,'&quot;');
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
262 }
8ca116c827cf Add htmlescape() helper function
Matthew Wild <mwild1@gmail.com>
parents: 26
diff changeset
263
36
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
264 function activate_links()
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
265 {
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
266 $("[href='#support-chat']").click(display_ui);
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
267 }
562ff07a3968 Large commit - reorganises directory structure, lots of small fixes
Matthew Wild <mwild1@gmail.com>
parents: 34
diff changeset
268
37
010783d24970 Commit the rest of the assistants-offline handling code, now check the affiliations of assistants
Matthew Wild <mwild1@gmail.com>
parents: 36
diff changeset
269 $(activate_links);

mercurial