
        YAHOO.namespace("acd.tools");
        
        
        YAHOO.acd.tools.LABEL_DETAIL = "Build this inn&#8230;";

        YAHOO.acd.tools.TYPE_HOSTEL = { 
            "type":"Hostel",
            "services": { "baths": 80,
                          "gambling":20,
                          "snug": 50,
                          "stables": 100,
                          "woir": 20 },
            "rooms": { "single": 0, "double": 0, "large":0, "dorm":0  }
        };
        
        YAHOO.acd.tools.TYPE_COACH = { 
            "type":"Coaching Inn",
            "services": { "baths": 80,
                          "gambling":20,
                          "snug": 50,
                          "stables": 100,
                          "woir": 20,
                          "smith": 80,
                          "law": 50,
                          "lookup": 20 },
            "rooms": { "single": 2, "double": 2, "large": 2, "dorm": 4 }
        };
        
        YAHOO.acd.tools.TYPE_TAVERN ={ 
            "type":"Tavern",
            "services": { "baths": 20,
                          "gambling":50,
                          "snug": 50,
                          "stables": 20,
                          "woir": 20 },
            "rooms": { "single": 0, "double": -2, "large": -2, "dorm": -2 }
        };
        
        YAHOO.acd.tools.TYPE_CLUB = { 
            "type":"Club",
            "services": { "baths": 0,
                          "gambling":50,
                          "snug": 100,
                          "stables": 80,
                          "woir": 20 },
            "rooms": { "single": -2, "double": -2, "dorm": -2 }
        };
        
        YAHOO.acd.tools.TYPE_BROTHEL = { 
            "type":"Brothel",
            "services": { "baths": 80,
                          "gambling":50,
                          "snug": 50,
                          "stables": 20,
                          "woir": 100 },
            "rooms": { "single": 6 }
        };

        YAHOO.acd.tools.STANDARD_COSTS = { 
            "food": { "breakfast": 2,
                      "lunch": 3,
                      "dinner": 5,
                      "boxed": 3,
                      "ale": 2,
                      "beer": 1,
                      "spirit": 2,
                      "wine": 3 },
                      
            "room": { "single": 60,
                      "double":120,
                      "dorm": 5,
                      "large": 180 },
                      
            "service": { "stabling": 10,
                         "bath":12,
                         "woir_rate": 10 }
        };
        
        YAHOO.acd.tools.SIZE_MODIFIERS = {
            "small": { "rooms": .5, "services": -25 },
            "medium": { "rooms": 1, "services": 0 },
            "large": { "rooms": 2, "services": 25 }
        };      
        
        var $ = YAHOO.util.Dom.get;
        
        var names = [["Black","Anchorage"],["Blessed","Arms"],["Blue","Bucket"],["Broken","Castle"],["Brown","Chalice"],["Cheerful","Club"],["Cheery","Corner"],["Cosy","Cup"],["Earnest","Dog"],["Eastern","Dragon"],["Four","Dwelling"],["Friendly","End"],["Gilded","Feather"],["Golden","Garden"],["Good","Gate"],["Green","Goblet"],["Grey","Griffin"],["Half-way","Harbour"],["Happy","Haven"],["Harvester('s)","Head"],["Hearty","Hearth"],["Leaning","Heaven"],["Lost","Homestead"],["Merry","Hoof"],["Northern","Horse"],["Reaver('s)","House"],["Roamer('s)","Inn"],["Rover('s)","Lodge"],["Shining","Mansion"],["Silver","Mare"],["Southern","Moon"],["Sovereign","Pint"],["Thirsty","Place"],["Three","Pony"],["Thriving","Quarter"],["Tilted","Rat"],["Traveller('s)","Resthouse"],["Two","Retreat"],["Wanderer('s)","Return"],["Weary","Rooms"],["Western","Shelter"],["White","Sign"],["Voyager('s)","Snug"],["Yellow"," Stallion"],["[Nation]","Steed"],["[Foreign name]","Table"],["[Local first name]","Tankard"],["[Settlement name]","Unicorn"],["The","Well"],["Star('s)","Bucks"]];
        var reknown = [["Cheap","breakfast"], ["Overrated","supper"], ["Expensive","ales, beers, ciders"], ["Affordable","wines"], ["Huge","common room"], ["Small","private rooms"], ["Lousy","baths"], ["Peculiar","gambling"], ["Shady","stabling"], ["Good","women of ill repute"], ["Foreign","innkeeper"], ["Old-fashioned","waitresses"], ["Excellent","bouncer"], ["Luxurious","baths"], ["Patriotic","cutlery and china"], ["Local style","privy"], ["Impressive","sign of door"], ["Dwarven-influenced","entrance"], ["Halfling-style","furnishing"], ["Elven-influenced","atmosphere"]];
        var mugs = [["Locally produced","ale"], ["Sweet","beer"], ["Musty","hard cider"], ["Strong","white wine"], ["Dry","mead"], ["Light","red wine"], ["Dark","fruit wine"], ["Weak","brandy"], ["Oaked or matured","vodka"], ["Foreign","panache*"]];

        function getElement(a) {
            var e = Math.random() * a.length;
            return parseInt(e, 10);
        }
        
        var inn = null;

        YAHOO.acd.tools.Inn = function() {
            this.name = null;
            this.variant = null;
            this.size = "medium";
            this.services = null;
            // each property is number of rooms, number of beds
            this.rooms = null;
            this.vacancy = d100();
            this.link = YAHOO.acd.tools.LABEL_DETAIL;           
        };
        
        function d100() { 
            return parseInt(((Math.random() * 100) + 1),10);
        }
                                
        function d10() { 
            return parseInt(((Math.random() * 10) + 1),10);
        }
                                
        function setRooms() { 
            return parseInt((Math.ceil(d10()/2)),10);
        }
        
        function setDormitory() { 
            return parseInt((Math.ceil(d10()/2) + 7),10);
        }
        
        function createListItem(message,id) { 
            var listItem = document.createElement("li");
            var liMessage = document.createTextNode(message);
            if(id != undefined) {
                listItem.setAttribute("id",id);
            }
            listItem.appendChild(liMessage);
            return listItem;
        }

        YAHOO.acd.tools.Data = {
            inns: []
        };      
                
        function createInn() {
        
            inn = new YAHOO.acd.tools.Inn();
        
            var rolls = [getElement(names),getElement(names)];  
            for( var i = 0; i < rolls.length; i++ ) {
                name = names[rolls[i]][i];   //names[15][0] ... names[45][1]                    
                if( inn.name == null ) {
                    inn.name = name;
                } else { 
                    inn.name = inn.name + " " + name;
                }
            }
            return inn;
        }
        
        YAHOO.util.Event.addListener("generateNames", "click", function() {
            YAHOO.acd.tools.InnNames = new function() {
            
            
                this.innDetailFormatter = function(elCell, oRecord, oColumn, oData) {
                    elCell.innerHTML = "<span class=\"detail\">" + oData + "<\/span>";
                };

                buildInns(); // load the datasource
                
                var innsColumnDefs = [
                    {label:"Name", key:"name", sortable:true, resizeable:true},
                    {label:"", key:"link", sortable:false, resizeable:false, 
                        formatter:this.innDetailFormatter}
                ];
            
                this.innsDataSource = new YAHOO.util.DataSource(YAHOO.acd.tools.Data.inns);
                
                this.innsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
                
                this.innsDataSource.responseSchema = {
                    fields: ["name","variant","services","rooms","vacancy","link"]
                };
                
            
                this.innsDataTable = new YAHOO.widget.DataTable("innsTable",
                    innsColumnDefs, this.innsDataSource, {caption:"Your players may wish to visit&#8230;"});
                    
                
                // we load the Inn from the datatable
                // storing it in `inn'
                
                this.innsDataTable.subscribe("cellClickEvent", function(oArgs){
                    var elLink = oArgs.target;
                    var elRecord = this.getRecord(elLink);
                    inn = elRecord.getData();
                    var name = elRecord.getData("name");
                    $("detailsName").innerHTML = name;
                    YAHOO.acd.tools.detailpanel.show();
                });
                
            };
        });

        
        function buildInns() {
            var numberOfInns = 1; // if there are no establishments... ?
            
            if(YAHOO.acd.tools.Data.inns.length > 0 ) {
                YAHOO.acd.tools.Data.inns.length = 0;
            }

            for( var i = 0; i < $("nameForm").elements["inns"].length; i++ ) {
                if($("nameForm").elements["inns"][i].checked) {
                    numberOfInns = $("nameForm").elements["inns"][i].value;
                }
            }
            
            for( var i = 0; i < numberOfInns; i++ ) {
                YAHOO.acd.tools.Data.inns.push( createInn() );
            }                       
        }
        
        function setLabel(n) {
            if(n == 1) {
                innNames._setLabel("Generate Name");
            } else {
                innNames._setLabel("Generate Names");
            }           
        }
        