					(function($) { var currentHash, previousNav, timer, hashTrim = /^.*#/; var msie = {
							iframe: null,
							getDoc: function() {
								return msie.iframe.contentWindow.document;
							},
							getHash: function() {
								return msie.getDoc().location.hash;
							},
							setHash: function(hash) {
								var d = msie.getDoc();
								d.open();
								d.close();
								d.location.hash = hash;
							}
						};

						var historycheck = function() {
							var hash = msie.iframe ? msie.getHash() : location.hash;
							if (hash != currentHash) {
								currentHash = hash;
								if (msie.iframe) {
									location.hash = currentHash;
								}
								var current = $.history.getCurrent();
								$.event.trigger('history', [current, previousNav]);
								previousNav = current;
							}
						};

						$.history = {
							add: function(hash) {
								hash = '#' + hash.replace(hashTrim, '');
								if (currentHash != hash) {
									var previous = $.history.getCurrent();
									location.hash = currentHash = hash;
									if (msie.iframe) {
										msie.setHash(currentHash);
									}
									$.event.trigger('historyadd', [$.history.getCurrent(), previous]);
								}
								if (!timer) {
									timer = setInterval(historycheck, 100);
								}
							},
							getCurrent: function() {
								return currentHash.replace(hashTrim, '');
							}
						};

						$.fn.history = function(fn) {
							$(this).bind('history', fn);
						};

						$.fn.historyadd = function(fn) {
							$(this).bind('historyadd', fn);
						};
						$(function() {
							currentHash = location.hash;
							if ($.browser.msie) {
								msie.iframe = $('<iframe style="display:none" src="javascript:false;"></iframe>').prependTo('body')[0];
								msie.setHash(currentHash);
								currentHash = msie.getHash();
							}
						});
					})(jQuery); 


