var AH = 
{
	newf:null,
	oldf:null,
	truefirstload:true,
	firstload:false,
	ready:true,
	hf:null,
	oldURL:null,
	obj:null,
	adding:false,
	callbacks:new Array(),
	
	check:function()
	{
		if(window.location.href.toString() != AH.oldURL && !AH.adding && AH.ready)
		{
			AH.oldURL = window.location.href.toString();
			AH.onchange();
		}	
	},
	
	IEcheck:function()
	{
		if(AH.newf != AH.oldF && !AH.adding && AH.ready)
		{
			AH.oldF = AH.newf;
			
			AH.ready = false;
			AH.parseUrlVars(AH.newf);
			for(var i = 0; i < AH.callbacks.length;i++)
			{
				AH.callbacks[i](AH.obj);
			}
		}	
	},
	
	disectUrl:function(all, protocal, domain, path, query_string, fragment)
	{
		AH.parseUrlVars(fragment);
	},
	
	parseUrl:function(url, func)
	{
		Url_RegExp = /^([^:\/?#]+):\/\/([^\/?#]*)([^?#]*)([^#]*)#?(.*)/;
		url.replace(Url_RegExp, func);
	},
	
	parseUrlVars:function(url)
	{
		var obj = {url:url};
		var pass1 = url.split('&');
		for(var i = 0; i < pass1.length; i++)
		{
			var pass2 = pass1[i].split('=');
			var a = 'null';
			if(pass2.length = 2)
			{
				a = pass2[1];
			}
			if (pass2[0] != "") {
				eval('obj.' + pass2[0] + '=' + a);
			}
		}
		AH.obj = obj;
	},
	
	init:function()
	{
		if(window.ie)
		{
			//AH.hf = document.createElement('IFRAME');
			//AH.hf.src = "/AH.cfm";
			//document.body.insertBefore(AH.hf, document.body.firstChild);
			setInterval(AH.IEcheck, 45, false);
		}
		else
		{
			setInterval(AH.check, 45, false);	
		}
	},
	
	framesays:function(f)
	{
		window.location.hash = f;
		AH.newf = f;
	},

	add:function(fragment, title)
	{
		if(AH.ready && ((!AH.firstload) || window.ie))
		{
			AH.adding = true;
			window.location.hash = fragment;
			if (window.ie)
			{
				
				var fresh = false;
				if (AH.hf == null)
				{
					AH.hf = document.createElement('IFRAME');
					AH.hf.style.frameborder = '0';
					AH.hf.style.height = '0';
					AH.hf.style.left = '0';
					AH.hf.style.position = 'absolute';
					AH.hf.style.top = '0';
					AH.hf.style.width = '0';
					
					fresh = true;
				}
				
				if(("/AH.cfm?hash=" + fragment + "&title=" + escape(title)) != AH.oldURL)
				{
					AH.hf.src = "/AH.cfm?hash=" + fragment + "&title=" + escape(title);
					AH.oldURL = "/AH.cfm?hash=" + fragment + "&title=" + escape(title);
				}
				
				if(fresh)
				{
					document.body.insertBefore(AH.hf, document.body.firstChild);
				}
			}
			else
			{
				AH.oldURL = window.location.href.toString();
			}
			AH.adding = false;
		}
		else AH.firstload = false;
		AH.ready = true;
		AH.truefirstload = false;
	},
	
	onchange:function()
	{
		if (AH.ready || AH.truefirstload)
		{
			if(!AH.truefirstload)AH.ready = false;
			AH.parseUrl(window.location.href, AH.disectUrl);
			for (var i = 0; i < AH.callbacks.length; i++)
			{
				AH.callbacks[i](AH.obj);
			}
		}
	},
	
	addCallback:function(f)
	{
		AH.callbacks.push(f);
	}
}
AH.init();
