// JaSCL - JAvaScript Common Library
// Copyright (C) 2006-2011 IP Labs GmbH <http://www.iplabs.de/>
function VarUtils(){}VarUtils.typeOf=function(v){var _;if(v===null){return"null";}_=typeof(v);if(_=="object"){if(typeof(v.nodeType)!="undefined"){return"domnode";}else if(v instanceof Array){return"array";}return _;}else{return _;}};VarUtils.serialize=function(v){var a;var _;var c;var d;var e;var f;_=VarUtils.typeOf(v);switch(_){case"number":return(v%1!==0||v>2147483647||v<-2147483648?"d":"i")+":"+v+";";case"string":return"s:"+v.length+":\""+v+"\";";case"boolean":return"b:"+(v?"1":"0")+";";case"null":return"N;";case"undefined":return"N;";case"object":d=0;for(c in v){if(!v.hasOwnProperty(c))continue;if(v[c]instanceof Function){continue;}d++;}a="a:"+d+":{";for(c in v){if(!v.hasOwnProperty(c))continue;if(v[c]instanceof Function){continue;}a+="s:"+c.length+":\""+c+"\";";a+=VarUtils.serialize(v[c]);}return a+"}";case"array":e=v.length;a="a:"+e+":{";for(f=0,e;f<e;f++){a+="i:"+f+";";a+=VarUtils.serialize(v[f]);}return a+"}";default:throw new Error("Unable to serialize unknown type: "+_);}};VarUtils.unserialize=function(x){var g;g=[];return VarUtils.B(x,0,g).data;};VarUtils.B=function(x,z,g){var _;var i;var j,k;var e;var m;var f;var o;var a;var c;var r;var s;var t;var u;a=new Object();_=x.charAt(z);switch(_){case"s":j=x.indexOf(":",z+2);i=parseInt(x.substring(z+2,j));a.data=x.substr(j+2,i);a.size=j+i+4-z;g.push(a.data);break;case"i":j=x.indexOf(";",z+2);a.data=parseInt(x.substring(z+2,j));a.size=j+1-z;g.push(a.data);break;case"d":j=x.indexOf(";",z+2);a.data=parseFloat(x.substring(z+2,j));a.size=j+1-z;g.push(a.data);break;case"b":a.data=x.charAt(z+2)=="1";a.size=4;g.push(a.data);break;case"N":a.data=null;a.size=2;g.push(a.data);break;case"a":j=x.indexOf(":",z+2);e=parseInt(x.substring(z+2,j));j+=2;a.data=new Object();u=g.length;g.push(a.data);for(f=0;f<e;f++){m=VarUtils.B(x,j,g);g.pop();j+=m.size;c=m.data;m=VarUtils.B(x,j,g);j+=m.size;s=m.data;a.data[c]=s;}a.size=j-z+1;r=new Array();t=true;for(c=0;c<e;c++){s=a.data[c];if(typeof(s)=="undefined"){t=false;break;}r.push(s);}if(t){a.data=r;g[u]=r;}break;case"O":k=x.indexOf(":",z+2);i=parseInt(x.substring(z+2,k));o=x.substr(k+2,i);j=x.indexOf(":",k+i+4);e=parseInt(x.substring(k+i+4,j));j+=2;eval("if (typeof("+o+") == \"undefined\") "+o+" = function() {};");a.data=eval("new "+o+"();");g.push(a.data);for(f=0;f<e;f++){m=VarUtils.B(x,j,g);g.pop();j+=m.size;c=m.data;m=VarUtils.B(x,j,g);j+=m.size;s=m.data;a.data[c]=s;}a.size=j-z+1;break;case"R":j=x.indexOf(";",z+2);f=parseInt(x.substring(z+2,j));a.data=g[f-1];a.size=j+1-z;g.push(a.data);break;default:throw new Error("Unable to unserialize unknown type: "+_);}return a;};
