var book = false;
var dimension = "routes";
var directories = ["nsw", "vic", "sa", "wa", "qld"];
var dimensions = ["routes", "companies", "special", "support", "facility"];

var tree = false;
var stored_state = false;

// For Destination Listing
function loadDestinationsLevelCompanies(node, fnLoadComplete) {
    
    if(dimension == "routes"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/destinations/companies/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["id", "name", "featured"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var data = response[i];
                    data["book"] = book;
                    data["node"] = node;
                    data["adtype"] = "Location";
                    
                    var html = TrimPath.processDOMTemplate("template_company", data);
                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "href":"/directory/"+book+"/company/"+response[i].id+"/",
                        "html": html

                    }
                    var newNode = new YAHOO.widget.HTMLNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.isLeaf = true;
                }
                this.loadComplete();
                tree.draw();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("location="+node.data.id, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._parent_slug;
        YAHOO.util.History.navigate("search", stored_state);
    }

}


function loadDestinationsLevelLocations(node, fnLoadComplete) {
    
    if(dimension == "routes"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/destinations/locations/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["id", "name", "slug"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "_slug": response[i].slug,
                        "_parent_slug": node.data._state_label_slug+'-'+response[i].slug
                    }
//                     console.log('adding location node', "_parent_slug", node.data._state_label_slug+'-'+response[i].slug);
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.setDynamicLoad(loadDestinationsLevelCompanies);
                }
                tree.draw();
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("state="+node.data._state+"&alphabet="+node.data._label, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._state_slug+'-'+node.data._label;
        YAHOO.util.History.navigate("search", stored_state);
    }

}

function loadDestinationsLevelAlphabets(node, fnLoadComplete) {
    
    if(dimension == "routes"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/destinations/alphabets/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "_label": response[i].name.toLowerCase(),
                        "_state": node.data.id,
                        "_state_slug": node.data._slug,
                        "label": response[i].name,
                        "_state_label_slug": node.data._slug+'-'+response[i].name.toLowerCase()
                    }
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.setDynamicLoad(loadDestinationsLevelLocations);
                }
                tree.draw();
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("state="+node.data.id, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._slug;
        YAHOO.util.History.navigate("search", stored_state);
    }

}

function loadDestinationsLevelStates(node, fnLoadComplete) {
    
    if(dimension == "routes"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/destinations/states/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "slug"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "_slug": response[i].slug
                    }
                    
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.setDynamicLoad(loadDestinationsLevelAlphabets);
                }
                
                tree.draw();
                YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("", caller.callback, caller);
    }

}

function load_destinations_tree(fnLoadComplete) {
    tree = new YAHOO.widget.TreeView("treeview-location");
    tree.draw();

    var root = tree.getRoot();
    root.setDynamicLoad(loadDestinationsLevelStates);
    root.expand();
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    loadDestinationsLevelStates(root, fnLoadComplete);

}


//For Name Listing

function loadNameLevelCompanies(node, fnLoadComplete) {
    
    if(dimension == "companies"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/name/companies/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["id", "name", "featured"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {
                    var data = response[i];
                    data["book"] = book;
                    data["node"] = node;
                    data["adtype"] = "NameListing";
                    
                    var html = TrimPath.processDOMTemplate("template_company", data);
                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "href":"/directory/"+book+"/company/"+response[i].id+"/",
                        "html": html

                    }
                    var newNode = new YAHOO.widget.HTMLNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.isLeaf = true;
                }
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("alphabet="+node.data._label, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._label;
        YAHOO.util.History.navigate("search", book+'-'+dimension+'-'+node.data._label);
    }

}

function loadNameLevelAlphabets(node, fnLoadComplete) {
    
    if(dimension == "companies"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/name/alphabets/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].name,
                        "_label": response[i].name.toLowerCase()
                    }
                    
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
                    newNode.setDynamicLoad(loadNameLevelCompanies);
                }
                
                tree.draw();
                YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest(null, caller.callback, caller);
    }

}

function load_alphabet_tree(fnLoadComplete) {
    tree = new YAHOO.widget.TreeView("treeview-location");
    tree.draw();
    var root = tree.getRoot();
    root.setDynamicLoad(loadNameLevelAlphabets);
    root.expand();
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    loadNameLevelAlphabets(root, fnLoadComplete);

}


// For specialised Searches
function loadSpecialisedServicesLevelCompanies(node, fnLoadComplete) {
    
    if(dimension == "special"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/specialised-services/companies/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "featured"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {
                    var data = response[i];
                    data["book"] = book;
                    data["node"] = node;
                    data["adtype"] = "Service";
                    
                    var html = TrimPath.processDOMTemplate("template_company", data);
                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "href":"/directory/"+book+"/company/"+response[i].id+"/",
                        "html": html

                    }
                    var newNode = new YAHOO.widget.HTMLNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
//                     newNode.setDynamicLoad(loadDestinationsLevelAlphabets);
                }
                this.loadComplete();
                tree.draw();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("service="+node.data.id, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._slug;
        YAHOO.util.History.navigate("search", book+'-'+dimension+'-'+node.data._slug);
    }

}
function loadSpecialisedServicesLevelServices(node, fnLoadComplete) {
    
    if(dimension == "special"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/specialised-services/services/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "slug"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "_slug": response[i].slug
                    }
                    
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.setDynamicLoad(loadSpecialisedServicesLevelCompanies);
                    newNode.multiExpand = false;
                }
                
                tree.draw();
                YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
                this.loadComplete();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("", caller.callback, caller);
    }

}

function load_special_tree(fnLoadComplete) {
    tree = new YAHOO.widget.TreeView("treeview-location");
    tree.draw();
    var root = tree.getRoot();
//     root.setDynamicLoad(loadSpecialisedServicesLevelServices);
//     root.expand();
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    loadSpecialisedServicesLevelServices(root, fnLoadComplete);
}


// For support Searches
function loadSupportServicesLevelCompanies(node, fnLoadComplete) {
    
    if(dimension == "support"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/support-services/companies/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "featured"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var data = response[i];
                    data["book"] = book;
                    data["node"] = node;
                    data["adtype"] = "SupportService";
                    
                    var html = TrimPath.processDOMTemplate("template_company", data);
                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "href":"/directory/"+book+"/company/"+response[i].id+"/",
                        "html": html

                    }
                    var newNode = new YAHOO.widget.HTMLNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
//                     newNode.setDynamicLoad(loadDestinationsLevelAlphabets);
                }
                this.loadComplete();
                tree.draw();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("service="+node.data.id, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._slug;
        YAHOO.util.History.navigate("search", book+'-'+dimension+'-'+node.data._slug);
    }

}
function loadSupportServicesLevelServices(node, fnLoadComplete) {
    
    if(dimension == "support"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/support-services/services/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "slug"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "_slug": response[i].slug
                    }
                    
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.setDynamicLoad(loadSupportServicesLevelCompanies);
                    newNode.multiExpand = false;
                }
                
                tree.draw();
                YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
                this.loadComplete();
                
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("", caller.callback, caller);
    }

}

function load_support_tree(fnLoadComplete) {
    tree = new YAHOO.widget.TreeView("treeview-location");
    tree.draw();
    var root = tree.getRoot();
//     root.setDynamicLoad(loadSpecialisedServicesLevelServices);
//     root.expand();
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    loadSupportServicesLevelServices(root, fnLoadComplete);
}


// For Carrier Facilities
function loadFacilitiesLevelCompanies(node, fnLoadComplete) {
    
    if(dimension == "facility"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/facilities/companies/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "featured"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var data = response[i];
                    data["book"] = book;
                    data["node"] = node;
                    data["adtype"] = "CarrierFacility";
                    
                    var html = TrimPath.processDOMTemplate("template_company", data);
                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "href":"/directory/"+book+"/company/"+response[i].id+"/",
                        "html": html

                    }
                    var newNode = new YAHOO.widget.HTMLNode(tmpNode, this.node, false);
                    newNode.multiExpand = false;
//                     newNode.setDynamicLoad(loadDestinationsLevelAlphabets);
                }
                this.loadComplete();
                tree.draw();
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("facility="+node.data.id, caller.callback, caller);
        stored_state = book+'-'+dimension+'-'+node.data._slug;
        YAHOO.util.History.navigate("search", book+'-'+dimension+'-'+node.data._slug);
    }

}
function loadFacilitiesLevelServices(node, fnLoadComplete) {
    
    if(dimension == "facility"){
        var dataSource = new YAHOO.util.DataSource("/directory/"+book+"/carriers/facilities/facilities/");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        dataSource.responseSchema = {
            resultsList: "ResultSet.Result", // Dot notation to results array
            fields: ["name","id", "slug"] // Field names
        };

        var caller = {
            callback: function (request, response) {
                for (var i=0; i<response.length; i++) {

                    var tmpNode = {
                        "label": response[i].name,
                        "id": response[i].id,
                        "_slug": response[i].slug
                    }
                    
                    var newNode = new YAHOO.widget.TextNode(tmpNode, this.node, false);
                    newNode.setDynamicLoad(loadFacilitiesLevelCompanies);
                    newNode.multiExpand = false;
                }
                
                tree.draw();
                YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
                this.loadComplete();
                
            },
            node: node,
            loadComplete: fnLoadComplete
        }

        
        dataSource.sendRequest("", caller.callback, caller);
    }

}

function load_facilities_tree(fnLoadComplete) {
    tree = new YAHOO.widget.TreeView("treeview-location");
    tree.draw();
    var root = tree.getRoot();
//     root.setDynamicLoad(loadSpecialisedServicesLevelServices);
//     root.expand();
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    loadFacilitiesLevelServices(root, fnLoadComplete);
}

function save_history() {
//     console.log('saving history', book+'-'+dimension);
    YAHOO.util.History.navigate("search", book+'-'+dimension);
}

function directory_changed(e, dir) {
    book = dir;

    
    load_ads();
    save_history();
}

function dimension_changed(e) {
    YAHOO.util.Event.stopEvent(e);
    if(!book) return;
    dimension = this.id;
    load_ads();
    save_history();
}


function init() {
    var directory_select = document.getElementById('directory-select');
    if(directory_select.value != '...') {
        book = directory_select.value;
//         save_history(); //XXX: do we need this ?
//         load_destinations_tree();
    }
    YAHOO.util.Event.addListener(directory_select, 'change', function(ev) {
        var dir = directory_select.value;
        if(dir != '...') {
            directory_changed(ev, dir);
        }
    });

    for(z=0; z<dimensions.length; z++){
        var oElement = document.getElementById(dimensions[z]);
        YAHOO.util.Event.addListener(oElement, "click", dimension_changed, oElement);
    }
}


function expandBook(book) {
    return {"nsw":"New South Wales",
    "vic":"Victoria",
    "sa":"South Australia",
    "wa":"Western Australia",
    "qld":"Queensland"
    }[book];
}


function strjoin(str, arr) {
    var res = "";
    arr.each(function(item, idx) {
        if(idx == 0) res += item;
        else res += (str + item);
    });
    return res;
}

function capmagic(str) {
    return strjoin(' ', str.split('_')).capitalize();
}

function updateTitle(state) {
    if(!state) return;
    var split_state = state.split('-');
    var book = split_state[0];
    var dimension = split_state[1];
    var suffix = document.title.split('|')[1];
    var new_prefix = '';
    if( dimension == "routes") {
        if(split_state.length == 2) {
            new_prefix = 'Routes from ' + expandBook(book);
        } else if(split_state.length == 3) {
            new_prefix = 'Routes from ' + expandBook(book) + ' to ' + capmagic(split_state[2]);
        } else if(split_state.length == 4) {
            new_prefix = 'Routes from ' + expandBook(book) + ' to ' + capmagic(split_state[2]) + ': '+ split_state[3].toUpperCase();
        } else if(split_state.length == 5) {
            new_prefix = 'Routes from ' + expandBook(book) + ' to ' + capmagic(split_state[2]) + ' - '+ capmagic(split_state[4]);
        }
    } else if (dimension == "companies") {
        if(split_state.length == 2) {
            new_prefix = 'Companies in ' + expandBook(book);
        } else if(split_state.length == 3) {
            new_prefix = 'Companies in ' + expandBook(book) + ': ' + split_state[2].toUpperCase();
        }
    } else if (dimension == "special") {
        if(split_state.length == 2) {
            new_prefix = 'Specialised Services in ' + expandBook(book);
        } else if(split_state.length == 3) {
            new_prefix = 'Specialised Services in ' + expandBook(book) + ': ' + strjoin(' ', split_state[2].split('_')).capitalize();
        }
    } else if (dimension == "support") {
        if(split_state.length == 2) {
            new_prefix = 'Support Services in ' + expandBook(book);
        } else if(split_state.length == 3) {
            new_prefix = 'Support Services in ' + expandBook(book) + ': ' + strjoin(' ', split_state[2].split('_')).capitalize();
        }
    } else if (dimension == "facility") {
        if(split_state.length == 2) {
            new_prefix = 'Facilities in ' + expandBook(book);
        } else if(split_state.length == 3) {
            new_prefix = 'Facilities in ' + expandBook(book) + ': ' + strjoin(' ', split_state[2].split('_')).capitalize();
        }
    }
    document.title = new_prefix + ' |' + suffix;
    if(window.submitter) window.submitter.refresh(document.title, location.href);
}

function go_to_state(state) {
    updateTitle(state);
    
    if(state == stored_state) return; //do not reload the UI if the state is the same

    var directory_select = document.getElementById('directory-select');
    if(state == 'none') {
        //handle the case where the user presses the back button from some specific state to the root url (with no fragment)
        tree = new YAHOO.widget.TreeView("treeview-location");
        tree.draw();
        YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
        directory_select.selectedIndex = 0;
        return;
    }
    split_state = state.split('-');
//     console.log('split state', state);
    book = split_state[0];
    dimension = split_state[1];
    var elements = YAHOO.util.Dom.getElementsByClassName("selected", "li", "horizontal-pivot")
    for(z=0; z<elements.length; z++ ){
        YAHOO.util.Dom.removeClass(elements[z], "selected");
    }
    YAHOO.util.Dom.addClass(document.getElementById(dimension), "selected");

    if(directory_select.value != book) directory_select.value = book;
    YAHOO.util.Dom.removeClass(document.getElementById('loading-results-message'), "hidden");
    function lc() {
//         console.log('load complete');
        stored_state = state;
        updateTitle(stored_state);
        if(split_state.length > 2) {
            if(dimension == "routes") {
                //<book>-routes-<state>-<alphabet>-<location>
                var state = split_state[2];
                var node = tree.getNodeByProperty("_slug", state);
//                 console.log('got searched node', node);
                function expAlpha() {
                    var alphabet = split_state[3];
                    var node = tree.getNodeByProperty("_state_label_slug", state+'-'+alphabet);
                    function expLocations() {
                        var loc = split_state[4];
                        var node = tree.getNodeByProperty("_parent_slug", state+'-'+alphabet+'-'+loc);
//                         console.log('got searched node',"_parent_slug",state+'-'+alphabet+'-'+loc, node);
                        node.expand();
                        updateTitle(stored_state);
                    }
//                     console.log('got searched node', "_state_label_slug", state+'-'+alphabet, node);
                    if(split_state.length > 4) {
                        if(node.expanded) {
                            return expLocations();
                        } else {
                            tree.subscribe('expandComplete', function() {
                                tree.unsubscribeAll('expandComplete');
                                expLocations();
                            });
                            node.expand();
                            updateTitle(stored_state);
                        }
                    }
                }
                if(split_state.length > 3) {
                    if(node.expanded) {
                        return expAlpha();
                    } else {
                        tree.subscribe('expandComplete', function() {
                            tree.unsubscribeAll('expandComplete');
                            expAlpha();
                        });
                        node.expand();
                        updateTitle(stored_state);
                    }
                }
            }else if(dimension == "companies") {
                var alphabet = split_state[2];
                var node = tree.getNodeByProperty("_label", alphabet);
//                 console.log('got searched node', node);
                node.expand();
                updateTitle(stored_state);
            } else if(dimension == "special" || dimension == "support" || dimension == "facility") {
                var slug = split_state[2];
                var node = tree.getNodeByProperty("_slug", slug);
//                 console.log('got searched node', node);
                node.expand();
                updateTitle(stored_state);
            }
        }
        YAHOO.util.Dom.addClass(document.getElementById('loading-results-message'), "hidden");
    }
    if(stored_state) {
        var split_stored_state = stored_state.split('-');
        if(book == split_stored_state[0] && dimension == split_stored_state[1]) {
            lc();
            return;
        }
    }
    if( dimension == "routes") {
        load_destinations_tree(lc);
    } else if (dimension == "companies") {
        load_alphabet_tree(lc);
    } else if (dimension == "special") {
        load_special_tree(lc);
    } else if (dimension == "support") {
        load_support_tree(lc);
    } else if (dimension == "facility") {
        load_facilities_tree(lc);
    }

}

function history_init() {
    load_ads();
    var bookmarked = YAHOO.util.History.getBookmarkedState("search");
    var query = YAHOO.util.History.getQueryStringParameter("search");
    var initial = bookmarked || query || "none";

    YAHOO.util.History.register("search", initial, go_to_state);

    YAHOO.util.History.onReady(function () {
        init();
        if(initial != 'none') go_to_state(initial);
    });

    try {
        YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
    } catch (e) {
//         console.log('history-not supported');
    }
}

YAHOO.util.Event.addListener(window, "load", history_init);