String.prototype.trim = function() {
	return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

/* Gestisce i metodi di utilità comune */
Class.create('Utilities', {
	classMembers: {
		/* Recupera un oggetto a partire dall'identificativo specificato */
		get: function(reference) {
			if (typeof reference == 'string') {
		        reference = document.getElementById(reference);
		    }
		    
		    return reference;
		},
		
		gets: function(parent, tag)
        {
	        if (parent == null)
	        {
		        return new Array();
	        }
	        else
	        {
		        return parent.getElementsByTagName(tag);
	        }
        },
		
		getElementsByClassName: function(element, className, tagName) {
	        var results = new Array();
	        
	        if (element == null) {
		        element = document;
		    }
		    
	        if (tagName == null) {
		        tagName = '*';
		    }
		    
	        var elements = element.getElementsByTagName(tagName);
	        var pattern = new RegExp('(^|\\\\s)' + className + '(\\\\s|$)');
	        
	        for (i = 0, j = 0; i < elements.length; i++) {
		        if (pattern.test(elements[i].className)) {
			        results[j] = elements[i];
			        j++;
		        }
	        }
	        
	        return results;
        },
		
		cancelEvent: function(event) {
			var event = Utilities.getEvent(event);
		
			if (event.stopPropagation && event.preventDefault) {
			    event.stopPropagation();
			    event.preventDefault();
		    }
		    else {
			    event.cancelBubble = true;
			    event.returnValue = false;
		    }
			
			return event;
		},

		getEvent: function(event) {
			return event || window.event;
		},
		
		getOffset: function(element) {
			var leftOffset = element.offsetLeft;
			var topOffset = element.offsetTop;

			while ((element = element.offsetParent) != null) {
				leftOffset += element.offsetLeft;
				topOffset += element.offsetTop;
			}

			return {'left': leftOffset, 'top': topOffset};
		},
		
		clearChildNodes: function(element) {
			if (element.hasChildNodes()) {
			    while (element.childNodes.length >= 1) {
			        element.removeChild(element.firstChild);
			    }
			}
		}
	}
});