function clone(obj){
var o;
switch(typeof obj){
case 'undefined':break;
case 'string':o=obj+'';break;
case 'number':o=obj-0;break;
case 'boolean':o=obj;break;
case 'object':
if(obj==null){
o=null;
} else {
if(obj instanceof Array){
o=[];
for(var i=0,len=obj.length;i<len;i++){
o.push(clone(obj[i]));
}
} else {
o={};
for(var k in obj){
o[k]=clone(obj[k]);
}
}
}
break;
default:
o=obj;break;
}
return o;
}
function clone2(obj){
var o,obj;
if(obj.constructor==Object){
o=new obj.constructor();
} else {
o=new obj.constructor(obj.valueOf());
}
for(var key in obj){
if(o[key]!=obj[key]){
if(typeof(obj[key])=='object'){
o[key]=clone2(obj[key]);
} else {
o[key]=obj[key];
}
}
}
o.toString=obj.toString;
o.valueOf=obj.valueOf;
return o;
}
function clone3(obj){
function Clone(){}
Clone.prototype = obj;
var o = new Clone();
for(var a in o){
if(typeof o[a] == "object") {
o[a] = clone3(o[a]);
}
}
return o;
}