String.prototype.trim = function(){
	return this.replace(/(?:^\s+|\s+$)/g, '');
};

String.prototype.isEmail = function(){
   var reg = /^[a-zA-Z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,4}$/;
   return reg.test( this.trim() );     
};

String.prototype.isURL = function(){
	var reg = /^((ht|f)tp[s]?:\/\/)?[a-z0-9._-]+\.[a-zA-Z]{2,4}\/?[\w\W]+$/;
	return reg.test( this );
};

Array.prototype.uniqkeys = function(){
	var keys=new Array();
	dojo.forEach(this, function(k,v){
		for( i in k )
			if( keys.indexOf(k)==-1)
				keys.push( i );
	} );
	
	return keys;
};

Array.prototype.keys = function(){
	var keys=new Array();
	dojo.forEach(this, function(k,v){
		for( i in k )			
			keys.push( i );
	} );
	
	return keys;
};

String.prototype.parseQueryString= function() {
		var vars = this.split(/[&;]/);
		var rs = {};
		if(vars.length>0) {
      dojo.forEach(vars,function(val) {
			 var keys = val.split('=');
			 if (keys.length && keys.length == 2) rs[encodeURIComponent(keys[0])] = encodeURIComponent(keys[1]);
		  });
		}
		return rs;
};
 
String.prototype.parseUri= function(){
		var bits = this.match(/^(?:([^:\/?#.]+):)?(?:\/\/)?(([^:\/?#]*)(?::(\d*))?)((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[\?#]|$)))*\/?)?([^?#\/]*))?(?:\?([^#]*))?(?:#(.*))?/);
		return (bits)
			? bits.associate(['uri', 'scheme', 'authority', 'domain', 'port', 'path', 'directory', 'file', 'query', 'fragment'])
			: null;
};
