4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
7 * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8 * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9 * Website: http://ajatus.info
10 * Licensed under the GPL license
11 * http://www.gnu.org/licenses/gpl.html
16 $.ajatus = $.ajatus || {};
17 $.ajatus.locker = $.ajatus.locker || {};
18 $.ajatus.events = $.ajatus.events || {};
20 $.ajatus.events.locks = {
23 $.extend($.ajatus.events.locks, {
26 var new_count = $.ajatus.events.locks.list.push(lock);
29 remove: function(index)
31 $.ajatus.events.locks.list = $.grep( $.ajatus.events.locks.list, function(n,i){
35 update: function(index, lock)
37 $.ajatus.events.locks.list[index] = lock;
41 $.ajatus.events.lock = function(options)
45 this.options = $.extend({
46 msg: '<h1><img src="'+$.ajatus.preferences.client.theme_url+'images/loading-small.gif" /> ' + $.ajatus.i10n.get('Loading Ajatus') + '...</h1>',
50 disable_application: true
53 this._id = $.ajatus.events.locks.add(this);
55 if ( !this.options.dialog
56 && this.options.disable_application)
58 $.blockUI(this.options.msg);
61 if (this.options.watch)
67 $.each(this.options.watch, function(i,n){
73 this._watcher = new $.ajatus.events.watcher(watcher_opts);
76 this._watcher.element.bind('on_stop', function(watcher_id){
80 this._watcher.start();
83 $.ajatus.events.locks.update(this);
86 $.extend($.ajatus.events.lock.prototype, {
88 if ( !this.options.dialog
89 && this.options.disable_application)
94 if ( this.options.on_release
95 && typeof(this.options.on_release) == 'function')
97 this.options.on_release(this);
100 update: function(lock_cnt) {
102 this._release_lock();
107 $.ajatus.events.watchers = {
110 $.extend($.ajatus.events.watchers, {
111 add: function(watcher) {
112 var new_count = $.ajatus.events.watchers.list.push(watcher);
115 remove: function(index) {
116 $.ajatus.events.watchers.list = $.grep( $.ajatus.events.watchers.list, function(n,i){
122 $.ajatus.events.watcher = function(options) {
123 this.options = $.extend({
133 if ( typeof(this.options.validate) != 'function'
134 && this.options.timed <= 0)
140 this._timeout_id = -1;
141 this._done_safety_runs = 0;
144 this._id = $.ajatus.events.watchers.add(this);
145 this.element = $('<div id="ajatus_events_watcher_'+this._id+'" />').appendTo($('body'));
147 if (this.options.auto_start) {
153 $.extend($.ajatus.events.watcher.prototype, {
155 if (this.options.interval < 200) {
156 this.options.interval = 200; // Safari needs at least 200 ms
158 // console.log("Watcher "+this._id+" started!");
159 this._timeout_id = setTimeout("$.ajatus.events.watchers.list["+this._id+"]._check();", this.options.interval);
162 // console.log("Watcher "+this._id+" is checking status");
165 if (this.options.timed > 0) {
166 if ( this.elapsed >= this.options.timed
167 || ( this.options.max_runs
168 && this._done_runs >= (this.options.max_runs-this.options.safety_runs)))
172 this._done_safety_runs = 0;
173 this.elapsed += this.options.interval;
174 this._timeout_id = setTimeout("$.ajatus.events.watchers.list["+this._id+"]._check();", this.options.interval);
177 if ( this.options.validate()
178 || ( this.options.max_runs
179 && this._done_runs >= (this.options.max_runs-this.options.safety_runs)))
181 //console.log("Watcher "+this._id+" validated!");
183 if (this._done_safety_runs < this.options.safety_runs) {
184 this._done_safety_runs++;
185 //console.log("Watcher "+this._id+" doing safety run: "+this._done_safety_runs+" of "+this.options.safety_runs);
186 this._timeout_id = setTimeout("$.ajatus.events.watchers.list["+this._id+"]._check();", this.options.interval);
188 //console.log("Watcher "+this._id+" has done all safety runs!");
192 this._done_safety_runs = 0;
193 this._timeout_id = setTimeout("$.ajatus.events.watchers.list["+this._id+"]._check();", this.options.interval);
199 // console.log("Watcher "+this._id+" ended!");
200 clearTimeout(this._timeout_id);
202 this.element.trigger('on_stop',[this._id]);
206 $.ajatus.events.lock_pool = {
208 increase: function() {
209 $.ajatus.events.lock_pool.count = $.ajatus.events.named_lock_pool.increase('global');
210 // console.log('lock_pool increase to '+$.ajatus.events.lock_pool.count);
212 decrease: function() {
213 $.ajatus.events.lock_pool.count = $.ajatus.events.named_lock_pool.decrease('global');
214 // console.log('lock_pool decrease to '+$.ajatus.events.lock_pool.count);
217 $.ajatus.events.named_lock_pool.clear('global');
218 $.ajatus.events.lock_pool.count = 0;
222 $.ajatus.events.named_lock_pool = {
224 count: function(name) {
225 if ($.ajatus.events.named_lock_pool.counts[name] == undefined) {
228 return $.ajatus.events.named_lock_pool.counts[name];
231 increase: function(name) {
232 if ($.ajatus.events.named_lock_pool.counts[name] == undefined) {
233 $.ajatus.events.named_lock_pool.counts[name] = 0;
235 $.ajatus.events.named_lock_pool.counts[name]++;
237 //console.log('named_lock_pool increase '+name+' to '+$.ajatus.events.named_lock_pool.counts[name]);
238 return $.ajatus.events.named_lock_pool.counts[name];
240 decrease: function(name) {
241 if ($.ajatus.events.named_lock_pool.counts[name] == undefined) {
242 $.ajatus.events.named_lock_pool.counts[name] = 0;
244 $.ajatus.events.named_lock_pool.counts[name] = $.ajatus.events.named_lock_pool.counts[name]-1;
246 // console.log('named_lock_pool decrease '+name+' to '+$.ajatus.events.named_lock_pool.counts[name]);
247 return $.ajatus.events.named_lock_pool.counts[name];
249 clear: function(name) {
250 $.ajatus.events.named_lock_pool.counts[name] = 0;