(function($) {
    var locationWrapper = {
        put: function(hash, win) {
            (win || window).location.hash = this.encoder(hash);
        },
        get: function(win) {
            var hash = ((win || window).location.hash).replace(/^#/, '');
            try {
                return $.browser.mozilla ? hash : decodeURIComponent(hash);
            }
            catch (error) {
                return hash;
            }
        },
        encoder: encodeURIComponent
    };

    var iframeWrapper = {
        id: "__jQuery_history",
        init: function() {
            var html = '<iframe id="'+ this.id +'" style="display:none" src="javascript:false;" />';
            $("body").prepend(html);
            return this;
        },
        _document: function() {
            return $("#"+ this.id)[0].contentWindow.document;
        },
        put: function(hash) {
            var doc = this._document();
            doc.open();
            doc.close();
            locationWrapper.put(hash, doc);
        },
        get: function() {
            return locationWrapper.get(this._document());
        }
    };

    function initObjects(options) {
        options = $.extend({
                unescape: false
            }, options || {});

        locationWrapper.encoder = encoder(options.unescape);

        function encoder(unescape_) {
            if(unescape_ === true) {
                return function(hash){ return hash; };
            }
            if(typeof unescape_ == "string" &&
               (unescape_ = partialDecoder(unescape_.split("")))
               || typeof unescape_ == "function") {
                return function(hash) { return unescape_(encodeURIComponent(hash)); };
            }
            return encodeURIComponent;
        }

        function partialDecoder(chars) {
            var re = new RegExp($.map(chars, encodeURIComponent).join("|"), "ig");
            return function(enc) { return enc.replace(re, decodeURIComponent); };
        }
    }

    var implementations = {};

    implementations.base = {
        callback: undefined,
        type: undefined,

        check: function() {},
        load:  function(hash) {},
        init:  function(callback, options) {
            initObjects(options);
            self.callback = callback;
            self._options = options;
            self._init();
        },

        _init: function() {},
        _options: {}
    };

    implementations.timer = {
        _appState: undefined,
        _init: function() {
            var current_hash = locationWrapper.get();
            self._appState = current_hash;
            self.callback(current_hash);
            setInterval(self.check, 100);
        },
        check: function() {
            var current_hash = locationWrapper.get();
            if(current_hash != self._appState) {
                self._appState = current_hash;
                self.callback(current_hash);
            }
        },
        load: function(hash) {
            if(hash != self._appState) {
                locationWrapper.put(hash);
                self._appState = hash;
                self.callback(hash);
            }
        }
    };

    implementations.iframeTimer = {
        _appState: undefined,
        _init: function() {
            var current_hash = locationWrapper.get();
            self._appState = current_hash;
            iframeWrapper.init().put(current_hash);
            self.callback(current_hash);
            setInterval(self.check, 100);
        },
        check: function() {
            var iframe_hash = iframeWrapper.get(),
                location_hash = locationWrapper.get();

            if (location_hash != iframe_hash) {
                if (location_hash == self._appState) {    // user used Back or Forward button
                    self._appState = iframe_hash;
                    locationWrapper.put(iframe_hash);
                    self.callback(iframe_hash); 
                } else {                              // user loaded new bookmark
                    self._appState = location_hash;  
                    iframeWrapper.put(location_hash);
                    self.callback(location_hash);
                }
            }
        },
        load: function(hash) {
            if(hash != self._appState) {
                locationWrapper.put(hash);
                iframeWrapper.put(hash);
                self._appState = hash;
                self.callback(hash);
            }
        }
    };

    implementations.hashchangeEvent = {
        _init: function() {
            self.callback(locationWrapper.get());
            $(window).bind('hashchange', self.check);
        },
        check: function() {
            self.callback(locationWrapper.get());
        },
        load: function(hash) {
            locationWrapper.put(hash);
        }
    };

    var self = $.extend({}, implementations.base);

    if($.browser.msie && ($.browser.version < 8 || document.documentMode < 8)) {
        self.type = 'iframeTimer';
    } else if("onhashchange" in window) {
        self.type = 'hashchangeEvent';
    } else {
        self.type = 'timer';
    }

    $.extend(self, implementations[self.type]);
    $.history = self;
})(jQuery);

$(document).ready(function() {
        $.ajaxSetup({
                cache: false
        });
 
        var ajax_load = "<img src='img/load48.gif' alt='loading...' />";
        var load_services = "other-financial-services.html";
       
//      load() functions
        var admin = "admin.php";
        var intro = "intro.php";
        var accounts = "accounts.php";
        var auditing = "audit.php";
        var tax = "taxation.php";
        var staff = "staff.php";
        var maurice = "maurice.php";
        var david = "david.php";
        var basil = "basil.php";
        var craig = "craig.php";
        var stuart = "stuart.php";
        var jamesm = "jamesm.php";
        var jamess = "jamess.php";
        var lynsay = "lynsay.php";
        var insolv = "insolv.php";
        var forensic = "forensic.php";
        var litigation = "litigation.php";
        var book = "book.php";
        var payroll = "payroll.php";
        var secretary = "secretary.php";
        var acquis = "acquis.php";
        var residency = "residency.php";
        var services = "services.php";
        var vat = "vat.php";
        var history = "history.php";
        var economy = "economy.php";
        var legal = "legal.php";
        var security = "security.php";
        var banking = "banking.php";
        var taxationiom = "taxationiom.php";
        var amenities = "amenities.php";
        var external = "external.php"
 
// call hompage functions      
       
        $("#load_intro").click(function(){
                $("#result1").html(ajax_load).load(intro);
        });
       
        $("#load_accounts").click(function(){
                $("#result1").html(ajax_load).load(accounts);
        });
       
        $("#load_auditing").click(function(){
                $("#result1").html(ajax_load).load(auditing);
        });
       
        $("#load_tax").click(function(){
                $("#result1").html(ajax_load).load(tax);
        });
       
//call staff functions
        $("#load_maurice").click(function(){
                $("#result1").html(ajax_load).load(maurice);
        });
       
        $("#load_david").click(function(){
                $("#result1").html(ajax_load).load(david);
        });
       
        $("#load_basil").click(function(){
                $("#result1").html(ajax_load).load(basil);
        });
       
        $("#load_craig").click(function(){
                $("#result1").html(ajax_load).load(craig);
        });
       
        $("#load_stuart").click(function(){
                $("#result1").html(ajax_load).load(stuart);
        });
       
        $("#load_jamesm").click(function(){
                $("#result1").html(ajax_load).load(jamesm);
        });
       
        $("#load_jamess").click(function(){
                $("#result1").html(ajax_load).load(jamess);
        });
       
        $("#load_lynsay").click(function(){
                $("#result1").html(ajax_load).load(lynsay);
        });
 
// call financial services functions
 
        $("#load_admin").click(function(){
                $("#result1").html(ajax_load).load(admin);
        });
       
        $("#load_insolv").click(function(){
                $("#result1").html(ajax_load).load(insolv);
        });
       
        $("#load_forensic").click(function(){
                $("#result1").html(ajax_load).load(forensic);
        });
       
        $("#load_litigation").click(function(){
                $("#result1").html(ajax_load).load(litigation);
        });
       
        $("#load_book").click(function(){
                $("#result1").html(ajax_load).load(book);
        });
       
        $("#load_vat").click(function(){
                $("#result1").html(ajax_load).load(vat);
        });
       
        $("#load_payroll").click(function(){
                $("#result1").html(ajax_load).load(payroll);
        });
       
        $("#load_secretary").click(function(){
                $("#result1").html(ajax_load).load(secretary);
        });
       
        $("#load_acquis").click(function(){
                $("#result1").html(ajax_load).load(acquis);
        });
       
        $("#load_residency").click(function(){
                $("#result1").html(ajax_load).load(residency);
        });
       
        $("#load_services").click(function(){
                $("#result1").html(ajax_load).load(services);
        });
 
// call Isle of man info sections
 
        $("#load_history").click(function(){
                $("#result1").html(ajax_load).load(history);
        });
       
        $("#load_economy").click(function(){
                $("#result1").html(ajax_load).load(economy);
        });
       
        $("#load_legal").click(function(){
                $("#result1").html(ajax_load).load(legal);
        });
       
        $("#load_security").click(function(){
                $("#result1").html(ajax_load).load(security);
        });
       
        $("#load_banking").click(function(){
                $("#result1").html(ajax_load).load(banking);
        });
 
        $("#load_taxationiom").click(function(){
                $("#result1").html(ajax_load).load(taxationiom);
        });
       
        $("#load_amenities").click(function(){
                $("#result1").html(ajax_load).load(amenities);
        });
       
        $("#load_external").click(function(){
                $("#result1").html(ajax_load).load(external);
        });
    
        
        $.history.init(function(hash){
        	
            if(hash == "") {
            	
            
                
            } else {

                $('#load_' + hash).trigger("click");
                
            }
        },
        { unescape: ",/" });
        
});
