function Serializer(){
this.serialize=function(_1){
var _2=(typeof _1);
switch(_2){
case "number":
case "string":
if(parseInt(_1)==_1){
return "i:"+_1+"|";
}else{
return "s:"+_1.toString().length+":"+_1.toString()+"|";
}
case "boolean":
return "b:"+(_1?1:0)+"|";
case "object":
var _3=/function ([^\(]+)\(/.exec(_1.constructor);
var _4=_3[1];
var _5=0;
var _6="";
for(var _7 in _1){
_5++;
_6+=this.serialize(_7)+this.serialize(_1[_7]);
}
if(_4=="Array"){
var _8="a:"+_5+"{";
}else{
var _8="O:"+_4.length+":"+_4+":"+_5+"{";
}
_8+=_6;
_8+="}";
return _8;
default:
throw new Error("Unable to serialize type: "+_2);
}
};
this.unserialize=function(_9){
_9=this.parseOutStrings(_9);
switch(_9.charAt(0)){
case "i":
case "b":
case "s":
return this.parseVar(_9.substr(0,_9.length-1));
case "a":
return this.parseObject(_9.substring(_9.indexOf("{")+1,_9.length-1),"Array");
case "O":
var _a=this.parseVar(_9.substring(0,_9.indexOf(":",2)));
return this.parseObject(_9.substring(_9.indexOf("{")+1,_9.length-1),_a);
}
};
this.parseObject=function(_b,_c){
if(_c==undefined){
var _d=new Array;
}else{
var _d=new window[_c];
}
var _e=_b;
while(_e.length>0){
var _f=this.parseVar(_e.substr(0,_e.indexOf("|")));
_e=_e.substr(_e.indexOf("|")+1);
var _c=_e.charAt(0);
var _10="Array";
switch(_c){
case "i":
case "b":
case "s":
_d[_f]=this.parseVar(_e.substr(0,_e.indexOf("|")));
_e=_e.substr(_e.indexOf("|")+1);
break;
case "O":
_10=this.strings[_e.substring(2,_e.indexOf(":",2))];
case "a":
var _11=_e.indexOf("{");
var _12=this.parseOutObject(_e.substr(_11));
_e=_e.substr(_11+_12.length+2);
_d[_f]=this.parseObject(_12,_10);
break;
}
}
return _d;
};
this.parseOutObject=function(_13){
var i=0;
var _15=0;
var _16=0;
var _17="";
do{
if(_13.charAt(i)=="{"){
_15++;
}else{
if(_13.charAt(i)=="}"){
_16++;
}
}
_17+=_13.charAt(i);
}while((++i<_13.length)&&(_16<_15));
return _17.substring(1,_17.length-1);
};
this.parseVar=function(_18){
var _19=_18.substr(0,1);
switch(_19){
case "b":
return _18.charAt(2)==1?true:false;
case "i":
return parseInt(_18.substr(2));
case "s":
case "O":
return this.strings[_18.substr(2)];
}
};
this.parseOutStrings=function(_1a){
this.strings=new Array;
var _1b=_1a;
var _1c="";
var _1d=0;
var _1e=0;
while((_1e=_1b.search(/O|s:/))>-1){
_1c+=_1b.substr(0,_1e+2)+this.strings.length;
_1b=_1b.substr(_1e+2);
_1d=_1b.substring(0,_1b.indexOf(":"));
this.strings.push(_1b.substr(_1d.length+1,_1d));
_1b=_1b.substr(_1d.length+1+parseInt(_1d));
}
return _1c+=_1b;
};
}
window.serializer=new Serializer;

