function
$type(obj){
if (!$defined(obj)) return false;
if (obj.htmlElement) return 'element' ;
var type = typeof obj ;
if (type == 'object' && obj.nodeName){
switch (obj.nodeType){
case 1 : return 'element' ;
case 3 : return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace' ;
}
}
if (type == 'object' || type == 'function' ){
switch (obj.constructor){
case Array : return 'array' ;
case RegExp : return 'regexp' ;
case Class: return 'class' ;
}
if ( typeof obj.length == 'number' ){
if (obj.item) return 'collection' ;
if (obj.callee) return 'arguments' ;
}
}
return type ;
} ;
if (!$defined(obj)) return false;
if (obj.htmlElement) return 'element' ;
var type = typeof obj ;
if (type == 'object' && obj.nodeName){
switch (obj.nodeType){
case 1 : return 'element' ;
case 3 : return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace' ;
}
}
if (type == 'object' || type == 'function' ){
switch (obj.constructor){
case Array : return 'array' ;
case RegExp : return 'regexp' ;
case Class: return 'class' ;
}
if ( typeof obj.length == 'number' ){
if (obj.item) return 'collection' ;
if (obj.callee) return 'arguments' ;
}
}
return type ;
} ;