
var StringUrlHashWriter = {
    /**
     *
     * @param url URL string
     * @param variable Variable name
     * @param value Value to set the variable to
     */
	setVariable: function (url, variable, value) {
		var segments = [];
		var u = url;
		var index = 0;
		var has_hash = false;
		if (url.indexOf('#') != -1) {
			has_hash = true;
			segments = url.substring(url.indexOf('#')+1).split('/').without('');
			u = url.substring(0, url.indexOf('#'));
			var segment = segments.find(function(s){return s.startsWith(variable+':');});
			index = segments.indexOf(segment);
			if (index == -1) index = segments.length;
		}
		if (!value && value !== 0) segments[index] = null;
		else segments[index] = variable+':'+value;
		segments = segments.compact();

		if (!segments.length) return u+(has_hash?'#':'');

		return u+'#'+segments.join('/');
	},
	getVariable: function(url, variable) {
		if (!url) return null;
		var segments = url.substring(url.indexOf('#')+1).split('/');
		var segment = segments.find(function(s){return s.startsWith(variable+':');});
		return segment ? segment.split(':')[1] : null;
	}
};
var UrlHashWriter = {
	setVariable: function(variable, value) {
		var newurl = StringUrlHashWriter.setVariable(document.location.href, variable, value);
		if (newurl != document.location.href) document.location.href = newurl;
		return document.location.href;
	},
	getVariable: function(variable) {
		return StringUrlHashWriter.getVariable(document.location.hash, variable);
	}
};
function assert(expr1, expr2, bool) {
	var res = expr1 == expr2;
	if (res != bool) console.error('FAILED: ', expr1, '==', expr2, res);
	else console.info('PASSED: ', expr1, '==', expr2, res);
}
function assertTrue(expr1, expr2) {
	assert(expr1, expr2, true);
}

/** TESTS *
	assertTrue(StringUrlHashWriter.setVariable('http://vg.no', 'img', 4), 'http://vg.no#img:4');
	assertTrue(StringUrlHashWriter.setVariable('http://vg.no#fd:4', 'img', 4), 'http://vg.no#fd:4/img:4');
	assertTrue(StringUrlHashWriter.setVariable('', 'img', 4), '#img:4');
	assertTrue(StringUrlHashWriter.setVariable('#fd:43', 'img', 4), '#fd:43/img:4');

	assertTrue(StringUrlHashWriter.setVariable('/dfd', 'img', 4), '/dfd#img:4');
	assertTrue(StringUrlHashWriter.setVariable('#', 'img', 4), '#img:4');

	assertTrue(StringUrlHashWriter.setVariable('http://vg.no', 'img', null), 'http://vg.no');
	assertTrue(StringUrlHashWriter.setVariable('http://vg.no#', 'img', null), 'http://vg.no#');
	assertTrue(StringUrlHashWriter.setVariable('http://vg.no#fd:23/img:42', 'img', null), 'http://vg.no#fd:23');
	assertTrue(StringUrlHashWriter.setVariable('http://vg.no#img:4', 'img', null), 'http://vg.no#');

    UrlHashWriter.setVariable('test', 32);

	assertTrue(StringUrlHashWriter.setVariable('http://vg.no#img:4', 'img', null), 'http://vg.no#');

/**/