1var actickets = {
2	tickets: [],  // list of all ticket links
3	requests: [],  // list of all ticket requests we have to issue
4	requested: 0,  // count of requests we already fetched from the requests list
5	batch: 15,  // count of requests to made with one ajax request
6	pattern: /\/projects\/(\d+)\/tickets\/(\d+)/,
7	ajax: null,
8
9	init: function() {
10		// get all ticket links
11		actickets.tickets = getElementsByClass('acticket', document, 'a');
12		if (!actickets.tickets.length) return;
13
14		// parse projectId and ticketId
15		for (var n = 0; n < actickets.tickets.length; n++) {
16			var ticket = actickets.tickets[n];
17
18			matches = ticket.href.match(actickets.pattern);
19			if (matches) {
20				ticket.acticket = true;
21				ticket.projectId = matches[1];
22				ticket.ticketId = matches[2];
23
24				// not listed for request?
25				var found = false;
26				for (var r = 0; r < actickets.requests.length; r++) {
27					req = actickets.requests[r];
28					if (req.ticketId == ticket.ticketId && req.projectId == ticket.projectId) {
29						found = true;
30						break;
31					}
32				}
33				if (!found) {
34					actickets.requests[actickets.requests.length] = {
35						ticketId: ticket.ticketId,
36						projectId: ticket.projectId
37					};
38				}
39			} else {
40				ticket.acticket = false;
41			}
42		}
43
44		// prepare ajax client
45		actickets.ajax = new sack(DOKU_BASE + 'lib/plugins/actickets/ajax.php');
46		actickets.ajax.AjaxFailedAlert = '';
47		actickets.ajax.encodeURIString = false;
48		actickets.ajax.onCompletion = actickets.resolved;
49
50		// start requests
51		actickets.request();
52	},
53
54	request: function() {
55		// create ajax query
56		var request = '';
57
58		// ask for the next batchszie of requests
59		var end = actickets.requested + actickets.batch;
60		if (end > actickets.requests.length) {
61			end = actickets.requests.length;
62		}
63		var r = 0;
64		for (var n = actickets.requested; n < end; n++) {
65			var ticket = actickets.requests[n];
66			request = request
67				+ 'tickets[' + r + '][projectId]=' + ticket.projectId + '&'
68				+ 'tickets[' + r + '][ticketId]=' + ticket.ticketId + '&';
69			r++;
70		}
71		actickets.requested = end;
72
73		actickets.ajax.runAJAX(request);
74	},
75
76	resolved: function() {
77		result = eval('(' + this.response + ')');
78		for (var n = 0; n < result.length; n++) {
79			var ticket = result[n];
80			if (ticket != null) {
81				for (var t = 0; t < actickets.tickets.length; t++) {
82					var acticket = actickets.tickets[t];
83					if (acticket.projectId == ticket.project_id
84						&& acticket.ticketId == ticket.ticket_id) {
85						// informations for a linked ticket received
86						acticket.title = ticket.name;
87						if (ticket.priority == 1) {
88							acticket.className = acticket.className + ' acticket_prio';
89							acticket.className = acticket.className + ' acticket_prio_high';
90						} else if (ticket.priority == 2) {
91							acticket.className = acticket.className + ' acticket_prio';
92							acticket.className = acticket.className + ' acticket_prio_highest';
93						} else if (ticket.priority == -1) {
94							acticket.className = acticket.className + ' acticket_prio';
95							acticket.className = acticket.className + ' acticket_prio_low';
96						} else if (ticket.priority == -2) {
97							acticket.className = acticket.className + ' acticket_prio';
98							acticket.className = acticket.className + ' acticket_prio_lowest';
99						}
100						if (ticket.completed_on != null) {
101							acticket.className = acticket.className + ' acticket_completed';
102						}
103					}
104				}
105			}
106		}
107		if (actickets.requested < actickets.requests.length) {
108			actickets.request();
109		}
110	}
111};
112
113addInitEvent(actickets.init);
114