/**
 *
 * 
 */
jQuery.extend({ 
	/**********************************************************/
	/**
	 * Logger
	 */
	loggerLevel: 0,
    /**
     * 
     */
    setLoggerLevel: function(level) {
        level = level || 0;
        this.loggerLevel = level;
        return null;    
    },
    /**
     * 
     */
    logger: function(msg, level) {
        level = level || 1;
        if(level >= this.loggerLevel && window.console) {
            switch(level) { 
                case 4:  // error
                  console.error($.inspect(msg));
                  break
                case 3:  // warning
                  console.warn($.inspect(msg));
                  break
                case 2:  // info
                  console.info($.inspect(msg));
                  break
                case 1:
                default: // debug
                  console.debug($.inspect(msg));
                  break   
            }   
        }    
    },
    inspect: function(mixed) {
        if(mixed == undefined) {
            return 'undefined';
        }
        if(mixed == null) {
            return 'null';
        }
        switch(typeof mixed) {
            case 'string':
                return mixed;
            case 'object':
                var result = '';
                for(var el in mixed) {
                    result += el + ': ';
                    if($.isObject(mixed[el])) {
                        result += ' {';
                        for(var el1 in mixed[el]) {
                        	try {
                            	result += el1 + ': ' + mixed[el][el1] + '; ';
                            } catch(e) {}
                        }
                        result += '}';
                    } else {
                        result += mixed[el];
                    }
                    result += '; ';
                }
                return result;
            case 'function':
                return mixed.toString();
            case 'array':
                return mixed.toString();
        }
        
        return mixed;    
    },
    isArray: function(mixed) {
    	return (typeof mixed == 'object') && (mixed.length);
    },
    
    isString: function(mixed) {
    	return (typeof mixed == 'string');
    },
    
    isObject: function(mixed) {
    	return (typeof mixed == 'object');
    },
    
    isUndefined: function(mixed) {
    	var undefined = undefined;    	
    	return (mixed == undefined);
    }
});