/*
=head1 NAME

takkle

=head1 DESCRIPTION

Base class for all Takkle JS

=head1 INHERITS FROM

Nada

=head1 METHODS

=over 4

*/

dojo.provide( 'takkle' );
dojo.declare( 'takkle', null, {

/*
=item * obj = new( params )

=back

*/
    constructor: function ( params ) {
        this.params = params;

    },
/*
=item * void mkAccessor( name, params )

creates getter and setter for name. 

params:
  defaultReturn: if this.name is null then defaultReturn is returned
  boolean: create isName() instead of getName()

example:
    this.mkAccessor('newName', { defaultReturn: 'moo' });
    alert(this.getNewName()); // returns 'moo'
    this.setNewName('blah');
    alert(this.getNewName()); // returns 'blah'

*/
    mkAccessor: function ( name, params ) { 
        if (!params) { 
			params = {};
		}
        var camelName = name.charAt(0).toUpperCase() + name.substring(1, name.length);
        var setterName = 'set' + camelName;
        var getterName = 'get' + camelName;

        var self = this;
        self[setterName] = function( value ) { self[name] = value; };
        self[getterName] = function( ) {         
            if (typeof(self[name]) !="undefined") {
                return self[name];
            } else if (params.defaultReturn) {
                return params.defaultReturn;
            } else {
                return null;
            }
        };
    }

});

/*
=back

=cut
*/

function tryUntilReady(f,lastTime) {
    var interval = 250;
    try {
        f();
    } catch(e) {
        if(!window.windowLoaded) {
            ( function(){ tryUntilReady(f); } ).delay(interval);
        } else {
            if(!lastTime) {
                ( function(){ tryUntilReady(f,1); } ).delay(interval);
            }
        }
    }
}

