// Returns the domain of the current page.
function getDomain()
{
    var arr = location.href.split('/');
    return arr[0] + '//' + arr[2];
}

// Returns the path of the current page.
function getPagePath()
{
    var domain = getDomain();
    var path = location.href.substr(domain.length);
    return path;
}

// Generates and returns a random index in the range [0,length-1].
function getRandomIndex(length)
{
	return Math.floor(Math.random() * (length-1));
}

function yearFromTimestamp(timestamp) {
	var unixTimestamp = parseInt(timestamp);
	unixTimestamp = ((unixTimestamp < 10000000000) ? unixTimestamp * 1000 : unixTimestamp);
	var date = new Date();
	date.setTime(unixTimestamp);
	return date.getFullYear();
}

function Hash(){
	for( var i=0; i < arguments.length; i++ )
		for( n in arguments[i] )
			if( arguments[i].hasOwnProperty(n) )
				this[n] = arguments[i][n];
}

Hash.prototype = new Object();

Hash.prototype.keys = function(){
	var rv = [];
	for( var n in this )
		if( this.hasOwnProperty(n) )
			rv.push(n);
	return rv;
}

Hash.prototype.length = function(){
	return this.keys().length();
}

Hash.prototype.values = function(){
	var rv = [];
	for( var n in this )
		if( this.hasOwnProperty(n) )
			rv.push(this[n]);
	return rv;
}

Hash.prototype.slice = function(){
	var rv = [];
	for( var i = 0; i < arguments.length; i++ )
		rv.push(
			( this.hasOwnProperty( arguments[i] ) )
			? this[arguments[i]]
			: undefined
		);
	return rv;
}

Hash.prototype.concat = function(){
	for( var i = 0; i < arguments.length; i++ )
		for( var n in arguments[i] )
			if( arguments[i].hasOwnProperty(n) )
				this[n] = arguments[i][n];
	return this;
}

