/* jquery.tinydb - jQuery interface to TinyDB (http://tinydb.org/)
 *  Copyright (c) 2008 Chris Moyer (chris@inarow.net)
 *
 * usage:
 * jQuery.tinydb.read(tinydb_id, callback);
 * callback is called with the data from TinyDB
 *
 * jQuery.tinydb.write({key: val, key2: val2}, callback);
 * write data, callback is called with tinydb_id string
 *
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 */

jQuery.tinydb = (function () { return {
	callbacks: [],

	generateCallbackString: function (callback) {
		var callback_num = this.callbacks.length
		var callback_string = 'jQuery.tinydb.callbacks[' + callback_num + ']';
		this.callbacks[callback_num] = callback;

		return callback_string;
	},

    read: function (tinydb_id, callback, opts) {
        if(opts && opts.all)
	    var callback_string = this.generateCallbackString(function () { callback(TINYDB.data);});
        else
	    var callback_string = this.generateCallbackString(function () { callback(TINYDB.data[0]);});

		jQuery.getScript('http://tinydb.org/' + escape(tinydb_id) +
		                             '?_f=js&_c=' + escape(callback_string) + ((opts && opts.all) ? '&_i=true' : ''));
	},

    write: function (data, callback, updateDB) {
		var callback_string =
			this.generateCallbackString(function () {
					var url = TINYDB.data.tinydb_url;
					var parts = url.split(/\//);
					callback(parts[parts.length-1]);
			});

		var dataString = '';
		for (i in data) {
			dataString += '&' + escape(i) + '=' + escape(data[i]);
		}


        if(updateDB)
            var urlStem = 'http://tinydb.org/_write?_i='+updateDB + '&';
        else
            var urlStem = 'http://tinydb.org/_write?';

 		jQuery.getScript(urlStem + '_f=js&_c=' + escape(callback_string) + dataString);
    }
}})();
