var HashRouter = function(availablePages, onHashChange, duration, hashPrefix){

	this.availablePages = availablePages || [];
	this.onHashChange = onHashChange || function() {};
	this.duration = duration || 50;
	this.hashPrefix = hashPrefix || '#!/';

	this.intervalID = false;
	this.currentHash = false;
	this.lastHash = false;
};

HashRouter.prototype.start = function() {

	this.intervalID = setInterval(this.checkHashChanges.bind(this), this.duration);
	return this;
};

HashRouter.prototype.stop = function() {

	clearInterval(this.intervalID);
	return this;
};

HashRouter.prototype.checkHashChanges = function() {

	var hash = document.location.hash.replace(this.hashPrefix, '');
	

	if(hash === this.currentHash)
		return;

	if(!hash || hash == this.hashPrefix){
		document.location.hash = this.hashPrefix + this.availablePages[0];
		return;
	}

	if(this.availablePages.indexOf(hash) == -1){
		document.location.hash = this.hashPrefix + this.availablePages[this.availablePages.length -1];
		return
	}

	this.stop();

	this.lastHash = this.currentHash;
	this.currentHash = hash;

	this.onHashChange() && this.start();
};
