function TypeOf(v){
	if(typeof v !='object')return(typeof v);
	if(v==null)return 'null';
	var A=v.constructor.toString().match(/function (\w+)/); 
	if(A && A[1]!="Object") return A[1];
	A=v.toString().match(/\[object (\w+)\]/);
	if(A) return A[1];
	return typeof(v);
}

function IsDefined(v) { return v!==null && v!==undefined; }
function IsInteger(v) { return TypeOf(v).match(/number/i) && (v % 1 == 0); }
function IsNumber(v) { return !!TypeOf(v).match(/number/i); }
function IsString(v) { return !!TypeOf(v).match(/string/i); }
function IsBoolean(v) { return !!TypeOf(v).match(/boolean/i); }
function IsArray(v) { return TypeOf(v)=='Array'; }
function IsImage(v) { return TypeOf(v)=='image'; }
function IsSurface(v) { return TypeOf(v)=='surface'; }
function IsFont(v) { return TypeOf(v)=='font'; }
function IsColor(v) { return TypeOf(v)=='color'; }
function IsColormatrix(v) { return TypeOf(v)=='colormatrix'; }
function IsWindowStyle(v) { return TypeOf(v)=='windowstyle'; }
function IsSpriteset(v) { return TypeOf(v)=='spriteset'; }
function IsByteArray(v) { return TypeOf(v)=='byte_array'; }

//todo: http://snipplr.com/view/1996/typeof--a-more-specific-typeof/
