// JaSCL - JAvaScript Common Library
// Copyright (C) 2006 IP Labs GmbH <http://www.iplabs.de/>
// $Id: VarUtils.js 84386 2009-10-01 11:47:48Z k.reimer $
if(typeof(ArrayUtils)=="undefined"){alert("VarUtils depends on ArrayUtils");}function VarUtils(){}VarUtils.getClassName=function(O){var _;if(O===undefined||O===null){return null;}if(O.constructor!==undefined){_=O.constructor.toString().match(/function\s*(\w+)/);if(_){if(_[1].toLowerCase()!="function"){return _[1];}}_=O.toString().match(/function\s*(\w+)/);if(_){return _[1];}}if(typeof(O)=="function"){return"function";}return"Object";};VarUtils.inherit=function(P,Q){var a;var b;a=function(){};a.prototype=Q.prototype;P.prototype=new a;P.prototype.constructor=P;b=VarUtils.getClassName(Q);P.prototype[b]=Q;};VarUtils.isDOMNode=function(O){return typeof(O.nodeType)!="undefined";};VarUtils.typeOf=function(O){var c;if(O===null){return"null";}c=typeof(O);if(c=="object"){if(VarUtils.isDOMNode(O)){return"domnode";}else if(VarUtils.getClassName(O)=="Array"){return"array";}return c;}else{return c;}};VarUtils.dump=function(O){return VarUtils._c(O,0,false);};VarUtils.htmlDump=function(O){return VarUtils._c(O,0,true);};VarUtils._c=function(O,W,X){var _;var c;var f;var g;var h;var i;var j;var k;var l,m;var n,o;var p,q;var r;var b;if(W===0){VarUtils.dumpCache=new Array();}f=X?"&nbsp;&nbsp;&nbsp;&nbsp;":"    ";h=X?"<br />":"\r\n";l=X?"<strong>":"";m=X?"</strong>":"";n=X?"<em>":"";o=X?"</em>":"";p=X?"<em>":"";q=X?"</em>":"";g="";for(j=0;j<W;j+=1){g+=f;}c=VarUtils.typeOf(O);switch(c){case"object":case"array":b=VarUtils.getClassName(O);_=l+b+m;r=ArrayUtils.find(VarUtils.dumpCache,O);if(r!=-1){_+="#"+r;break;}r=VarUtils.dumpCache.length;VarUtils.dumpCache.push(O);if(c=="object"){k=0;for(i in O){if(VarUtils.getClassName(O[i])=="function"){continue;}k+=1;}}else{k=O.length;}_+="#"+r+"("+k+"): {";for(i in O){if(VarUtils.getClassName(O[i])=="function"){continue;}_+=h+g+f+"["+n+i+o+"] => "+VarUtils._c(O[i],W+1,X);}if(k){_+=h+g;}_+="}";break;case"string":_=l+VarUtils.getClassName(O)+m+"("+O.length+")"+": \""+p+O+q+"\"";break;case"null":_=l+"NULL"+m;break;case"domnode":_=l+"DOM Node"+m+": "+p+O.tagName.toLowerCase();if(O.id){_+="#"+O.id;}if(O.className){_+="."+O.className.replace(/\s+/,".");}_+=q;break;default:_=l+VarUtils.getClassName(O)+m+": "+p+O+q;}return _;};VarUtils.serialize=function(O){var _;var c;var i;var k;var x;var j;c=VarUtils.typeOf(O);switch(c){case"number":return(O%1!==0||O>2147483647||O<-2147483648?"d":"i")+":"+O+";";case"string":return"s:"+O.length+":\""+O+"\";";case"boolean":return"b:"+(O?"1":"0")+";";case"null":return"N;";case"undefined":return"N;";case"object":k=0;for(i in O){if(VarUtils.getClassName(O[i])=="function"){continue;}k++;}_="a:"+k+":{";for(i in O){if(VarUtils.getClassName(O[i])=="function"){continue;}_+="s:"+i.length+":\""+i+"\";";_+=VarUtils.serialize(O[i]);}return _+"}";case"array":x=O.length;_="a:"+x+":{";for(j=0,x;j<x;j++){_+="i:"+j+";";_+=VarUtils.serialize(O[j]);}return _+"}";default:throw new Error("Unable to serialize unknown type: "+c);}};VarUtils.unserialize=function(Z){var z;z=[];return VarUtils._d(Z,0,z).data;};VarUtils._d=function(Z,_a,z){var c;var B;var C,D;var x;var F;var j;var H;var _;var i;var K;var L;var M;var N;_=new Object();c=Z.charAt(_a);switch(c){case"s":C=Z.indexOf(":",_a+2);B=parseInt(Z.substring(_a+2,C));_.data=Z.substr(C+2,B);_.size=C+B+4-_a;z.push(_.data);break;case"i":C=Z.indexOf(";",_a+2);_.data=parseInt(Z.substring(_a+2,C));_.size=C+1-_a;z.push(_.data);break;case"d":C=Z.indexOf(";",_a+2);_.data=parseFloat(Z.substring(_a+2,C));_.size=C+1-_a;z.push(_.data);break;case"b":_.data=Z.charAt(_a+2)=="1";_.size=4;z.push(_.data);break;case"N":_.data=null;_.size=2;z.push(_.data);break;case"a":C=Z.indexOf(":",_a+2);x=parseInt(Z.substring(_a+2,C));C+=2;_.data=new Object();N=z.length;z.push(_.data);for(j=0;j<x;j++){F=VarUtils._d(Z,C,z);z.pop();C+=F.size;i=F.data;F=VarUtils._d(Z,C,z);C+=F.size;L=F.data;_.data[i]=L;}_.size=C-_a+1;K=new Array();M=true;for(i=0;i<x;i++){L=_.data[i];if(typeof(L)=="undefined"){M=false;break;}K.push(L);}if(M){_.data=K;z[N]=K;}break;case"O":D=Z.indexOf(":",_a+2);B=parseInt(Z.substring(_a+2,D));H=Z.substr(D+2,B);C=Z.indexOf(":",D+B+4);x=parseInt(Z.substring(D+B+4,C));C+=2;eval("if (typeof("+H+") == \"undefined\") "+H+" = function() {};");_.data=eval("new "+H+"();");z.push(_.data);for(j=0;j<x;j++){F=VarUtils._d(Z,C,z);z.pop();C+=F.size;i=F.data;F=VarUtils._d(Z,C,z);C+=F.size;L=F.data;_.data[i]=L;}_.size=C-_a+1;break;case"R":C=Z.indexOf(";",_a+2);j=parseInt(Z.substring(_a+2,C));_.data=z[j-1];_.size=C+1-_a;z.push(_.data);break;default:throw new Error("Unable to unserialize unknown type: "+c);}return _;};