if(!PHP2Go.included[PHP2Go.baseUrl+'structures.js']){var $break=new Object();var $continue=new Object();var Collection={accept:function(filter){var res=[];this.walk(function(item,idx){if(filter(item))res.push(item);});return res;},reject:function(filter){var res=[];this.walk(function(item,idx){if(!filter(item))res.push(item);});return res;},filter:function(filter){var res=[],v=null;this.walk(function(item,idx){v=filter(item);if(v!=null)res.push(v);});return res;},grep:function(pattern){var str,res=[];var re=new RegExp(pattern);this.walk(function(item,idx){str=(item.toString?item.toString():String(item));if(str.match(pattern))res.push(item);});return res;},contains:function(obj){var found=false;this.walk(function(item,idx){if(item==obj){found=true;throw $break;}});return found;},extract:function(property){var res=[];this.walk(function(item,idx){if(typeof(item[property])!='undefined')res.push(item[property]);});return res;},inject:function(memo,iterator){this.walk(function(item,idx){memo=iterator(memo,item,idx);});return memo;},invoke:function(method){var args=(arguments.length==1?[]:$A(arguments).slice(1));return this.map(function(item,idx){(item[method])&&(item[method].apply(item,args));});},map:function(iterator){var res=[];this.walk(function(item,idx){res.push(iterator(item));});return res;},walk:function(iterator){if(typeof(iterator)=='function'){var idx=0;try{this.each(function(item){try{iterator(item,idx++);}catch(e){if(e!=$continue)throw e;}});}catch(e){if(e!=$break)throw e;}}}};var Hash={each:function(iterator){for(key in this.data){var value=this.data[key];iterator({key:key,value:value});}},getKeys:function(){return this.extract('key');},getValues:function(){return this.extract('value');},containsKey:function(key){return(this.data[key]);},set:function(key,value){this.data[key]=value;},unset:function(key){delete this.data[key];},findValue:function(key){var value=null;this.walk(function(item){if(item.key==key){value=item.value;throw $break;}});return value;},assign:function(target){this.each(function(item){target[item.key]=item.value;});},toQueryString:function(){return this.map(function(pair){return pair.key.urlEncode()+"="+String(pair.value).urlEncode();}).join('&');},serialize:function(){return'{'+this.map(function(pair){return pair.key+" : "+Object.serialize(pair.value);}).join(', ')+'}';}};Object.implement(Hash,Collection);Hash.valueOf=function(iterable){var h=new Object();h.data=iterable||{};Object.implement(h,Hash);return h;};Array.valueOf=function(iterable){if(!iterable)return[];if(iterable.toArray)return iterable.toArray();if(typeof(iterable.length)=='undefined')iterable=[iterable];var res=[];for(var i=0;i<iterable.length;i++)res.push(iterable[i]);return res;};if(!Array.prototype.push){Array.prototype.push=function(){var a=arguments;for(var i=0;i<a.length;i++)this[this.length]=a[i];return this.length;};}if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0)return this[this.length-1];};}if(!Array.prototype.shift){Array.prototype.shift=function(){var res=this[0];for(var i=0;i<this.length-1;i++)this[i]=this[i+1];this.length--;return res;};}if(!Array.prototype.unshift){Array.prototype.unshift=function(){var a=arguments;for(var i=a.length;i<this.length;i++)this[i]=this[i-1];for(var i=0;i<a.length;i++)this[i]=a[i];this.length+=len;};}Array.prototype.each=function(iterator){for(var i=0;i<this.length;i++)iterator(this[i]);};Array.prototype.first=function(){return this[0];};Array.prototype.last=function(){return this[this.length-1];};Array.prototype.empty=function(){return(this.length==0);};Array.prototype.remove=function(idx){idx=parseInt(idx,10);if(!isNaN(idx)&&idx>=0&&idx<this.length){for(var i=idx+1;i<this.length;i++)this[i-1]=this[i];this.length--;}};Array.prototype.clear=function(){this.length=0;return this;};Array.prototype.indexOf=function(obj){var self=this;for(var i=0;i<self.length;i++)if(self[i]==obj)return i;return-1;};Array.prototype.serialize=function(){return'['+this.map(Object.serialize).join(', ')+']';};Object.implement(Array.prototype,Collection);PHP2Go.included[PHP2Go.baseUrl+'structures.js']=true;}