Object.extend=function(sub, sup){ for(var tempProperty in sup){ sub[tempProperty]=sup[tempProperty]; } return sub; };

Object.extend(Object, {keyExists: function(o, key){ return o[key]!==undefined; }, keys: function(object){ var keys=[]; for(var property in object){ keys.push(property); } return keys; }, values: function(object){ var values=[]; for(var property in object){ values.push(object[property]); } return values; }, clone: function(object){ return Object.extend({}, object); }, isObject: function(o){ return (o.constructor.toString().indexOf("Object")>-1 ? true : false); }, isArray: function(a){ return (a.constructor.toString().indexOf("Array")>-1 ? true : false); }, isString: function(s){ return (s.constructor.toString().indexOf("String")>-1 ? true : false); }, isNumber: function(n){ if(typeof n!="number"){ for(var i=0; i<n.length; i++){ if("0123456789.".indexOf(n[i])==-1){ return false; }} return true; }else{ return true; }}});