// © 2001 Douglas Crockford
// additional core functions

function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return a === null;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isDefined(a) {
    return !isUndefined(a);
} 
function isUndefined(a) {
    return typeof a == 'undefined';
} 

// © 2008 Jakub Łukomski
// further extensions
function exists(a) {
	return !isUndefined(a) && !isNull(a);
}
function extend(object, params) {
	if(!exists(params))
		return;

	for(var param in params) {
		if (object === params[param])
			continue;

		if(!exists(params[param]))
			continue;

		object[param] = params[param];
	}

	return object;
};

 