BTQ = {
		config : {
				appName : "factbook",
				attributes : {
					"flag_url": {
						formatFunc:"imageFromURL",
						displayName : "Flag",
						params : { height: 65}
						},
					"gdp" : {
						formatFunc:"formatGDP",
						displayName : "GDP"
						},
					"languages" : {
						formatFunc: null,
						displayName : "Languages spoken"
						},
					"map_url" : {
						formatFunc:"imageFromURL",
						displayName : "Map",
						params : { width: 200}
						},
					"population": {
						formatFunc:"formatPop",
						displayName : "Population"
						},
					"population_growth_rate" : {
						formatFunc:"pct",
						displayName : "Pop Growth"
						},
					"internet_code" : {
						formatFunc:"domain",
						displayName : "domain suffix"
						},
					"natural_resources" : {
						formatFunc:"drawList",
						displayName : "Resources"
						},
					"religions" : {
						formatFunc:"drawList",
						displayName : "Religions"
						},
					"url" : {
						formatFunc:"linkTo",
						displayName : "CIA page",
						params : {linkText : "CIA Page"}
						},
					"country" : {
						formatFunc: null,
						displayName : "Name"
						},
					"capital" : {
						formatFunc: null,
						displayName : "Capital"
						},
					"largest_city" : {
						formatFunc: null,
						displayName : "Largest City"
						},
					"second_largest_city" : {
						formatFunc: null,
						displayName : "Second Largest City"
						},
					"government_type" : {
						formatFunc: null,
						displayName : "Government"
					}
				},
				compareOrder: [
				   "capital",
				   "largest_city",
				   "second_largest_city",
				   "population",
				   "population_growth_rate",
				   "government_type",
				   "gdp",
				   "languages",
				   "internet_code",
				   "natural_resources",
				   "religions",
				   "url"
				],
				hasLandingPages: false
		},
		totalPopulation : 6707037456,
		totalGDP : 65714385740000,

        eachResult : function(evt){
        
        
        },
        templateFuncs : {
        	formatGDP : function(gdp){
        		if (Object.isUndefined(gdp)){return;}
        		return BDK.templateFuncs.addCommas(gdp); 
        	},
        	formatNumber : function(num){
        		if (Object.isUndefined(num)){return;}
				var numnum = parseInt(num, 10) / 1000000;
        		return numnum > 0 ? numnum.toFixed(2) : 0;
        	},
        	drawList : function(list){
        		if (typeof(list) !== "undefined"){
        			return list.join(", ");
        		}
        	},
        	domain : function(domain){
        		return domain;
        	},
        	formatPop : function(pop){
				if (Object.isUndefined(pop)){return;}
				return BDK.templateFuncs.addCommas(pop); 
        	},
        	pct : function(num){
				if (Object.isUndefined(num)){return;}
        		return num.toFixed(2) + "%";
        	},
        	filename : function(url){
        		
        	},
        	linkTo : function(url, params){
        		if (!Object.isUndefined(params)){
        			return "<a href=\""+url+"\">"+ params.linkText +"</a>";
        		}
				return "<a href=\""+url+"\">url</a>";
        	},
        	linkTos : function(target, toWhat){
				if (toWhat === "details"){
					return ("<span class='link' onclick='BDK.fire(\"details\",'"+target.id+"')'></span>");
				}
        	},
        	particle : function(item, fieldName){
        		var itemField = item[fieldName];
				if (!Object.isUndefined(itemField)){
					var needs = /^[aeiouAEIOU]/;
					if (needs.test(itemField)){
						return "n";
					} 
				}
        	},
        	article : function(item, fieldName){
        		var region = item[fieldName];
				if (!Object.isUndefined(region)){
					if (region.indexOf("Region")!== -1 || region.indexOf("Middle")!== -1){
						return "the ";
					} 
				}
        	}
        },
        drawMap : function(evt, shouldreturn, w, h){
        //debugger;
        	if (typeof(w)==="undefined"){
        		w = 440;
        		h = 220;
        	}
        	var refinements = evt.memo.result.refinements;
        	var regions = refinements["region"].values.pluck("name");
        	var isoCodes = refinements["iso_2char_code"].values.pluck("name").invoke("toUpperCase");
        	var dummyData = isoCodes.collect(this.isoToNum).join(",");
			
        	var url = "http://chart.apis.google.com/chart?";
        	var themap = $("factbook");
        	var options = {
				chf : "bg,s,EAF7FE",
				cht : "t",
				chs : w+"x"+h,
				chco : "FFFFFF,FF0000,FFFF00,00FF00,FFFF00",
				chtm : this.getMap(regions),
				chd : "t:" + dummyData,
				chld : isoCodes.join("")
        	};
            var queryString = $H(options).toQueryString();
            if (typeof(shouldreturn)!== "undefined" && shouldreturn === true){
            	return url+queryString;
            }else{
            	themap.src=url+queryString;
            }
        },
        defaultMap : function(evt){
        	var url = "http://chart.apis.google.com/chart?";
        	var themap = $("factbook");
        	var options = {
				chf : "bg,s,EAF7FE",
				cht : "t",
				chs : "440x220",
				chco : "FFFFFF,FF0000,FFFF00,00FF00,FFFF00",
				chtm : "world",
				chd : "s:_"
        	};
            var queryString = $H(options).toQueryString();
            themap.src=url+queryString;
        },
        getMap : function (listofRegions){
        	var maps = {};
        	var mapmap = {"Africa" : "africa", 
				"Antarctic Region" : "world",
				"Antarctic Region,Africa" : "africa", 
				"Arctic Region" : "world", 
				"Asia" : "asia", 
				"Asia,Europe" : "world", 
				"Central America and the Caribbean" : "world", 
				"Europe" : "europe", 
				"Middle East" : "middle_east", 
				"North America" : "world", 
				"Oceania" : "asia", 
				"South America" : "south_america", 
				"Southeast Asia" : "asia"};
			for (var x=0; x< listofRegions.length; x++){
				var theMap = mapmap[listofRegions[x]];
			    maps[theMap] = true;
			}
			var mapList = $H(maps).keys();
			if (mapList.length === 1){
				return mapList[0];
			}else{
				return "world";
			}
        },
        isoToNum : function ( codeString ) {
        	var code = codeString.split("");
        	var sum = BDK.util.ascii(code[0]) + BDK.util.ascii(code[1]);
        	return (sum-130)*2;
        },  
        // set the CSS class
        setActiveRootCatItem : function(evt) {
            $$("#rootCatsUl a").each(function(a){
            	a.removeClassName("active");
            	
            	var edgeCase = "Central America + Caribbean";
            	var display = a.innerHTML;
            	if(display === edgeCase) {
            		display = "Central America and the Caribbean";
            	}
            	
            	if (BDK.refiner.hasRefineValue("region", display)){
            		a.addClassName("active");
                }
            });
        },
        drawMapSide : function ( evt ) {
        	var results = evt.memo;
        	// hide mapContainer
        	$("mapContainer").hide();
        	$("sideBar").show();
        	// add "wide" class to siderbar
        	$("sideBar").addClassName("wide");
        	$("mainbox").addClassName("col_600");
        	$("mainbox").addClassName("mainbox");
        	$("main").addClassName("nonsearch");
        	
        	// render our new template into sidebar
        	if (evt.eventName.indexOf("showItemList")!== -1){
        		// we don't have results here
        		results = {"result" : BDK.listMgr.result};
        		evt.memo = results;
        	}
        	this.detailTmpl.render(results);
        	// draw google map into detail_factbook
        	 //width="321" height="158"
        	var mapURL = this.drawMap(evt, true, 321, 158);
        	$("detail_factbook").src = mapURL;
        }, 
        undoMapSide : function ( ) {
        	// show mapContainer
        	$("mapContainer").show();
        	$("sideBar").show();
        	// remove "wide" class to siderbar
        	$("sideBar").removeClassName("wide");
        	$("mainbox").removeClassName("col_600");
        	$("mainbox").addClassName("mainbox");
        	$("main").removeClassName("nonsearch");
        },
        hideSide : function ( ) {
        	$("mapContainer").hide();
        	// remove "wide" class to siderbar
        	$("sideBar").hide();
        	$("mainbox").removeClassName("mainbox");
        	$("main").addClassName("nonsearch");
        }, 
        watchOptionsArea : function() {
        	if(BDK.refiner.refinements.length > 0) {
        		$("optionsArea").addClassName("active");
        	}
        	else {
        		$("optionsArea").removeClassName("active");
        	}
        },
        startup : function(){       
        	this.config = Object.extend(this.config, CCAT.search.config);
            
            // attach the help tooltip
            var cool = new Tip($("helpbtn"), $("helptxt"), {
			  delay: 0.1,
			  style: "default",
			  width: 600,
			  stem : "topMiddle",
			  hook: { target: 'bottomMiddle', tip: 'topMiddle' },
			  hideOn: false,
			  offset : { x: -12, y: -20 },
			  hideAfter: false,
			  showOn: 'click',
			  closeButton: true,
			  hideOthers: true,
			  title : "About Bodukai Factbook"
			});
            // attach the disclaimer tooltip
            var guy = new Tip($("disclaim"), $("disclaimer"), {
			  delay: 0.1,
			  style: this.config.appName,
			  width: 600,
			  hook: { target: 'topMiddle', tip: 'bottomMiddle' },
			  hideOn: false,
			  hideAfter: 0.8,
			  hideOthers: true
			});
			
            BDK.fire("bodukai:funcs", this.templateFuncs);
            
        	if (!BDK.schMgr.ajaxOverride && typeof(CCAT.requestObject.refinements) === "undefined" 
				&& typeof(CCAT.requestObject.itemIds) === "undefined" && BDK.Cookie.get("help") === null){
				this.helpStart = function(){
					// the first time, show the help prototip
					$('helpbtn').prototip.show();            	
					// stop observing this event now.
					document.stopObserving(BDK.evtNameSpace + "afterDrawNav", this.helpStart);
					// and observe subsequent help activations
					$('helpbtn').observe('prototip:shown', function() {
						BDK.fire("help");
					});
				}.bind(this);
				document.observe(BDK.evtNameSpace + "afterDrawNav", this.helpStart);
				BDK.Cookie.set("help", true, 30);
			}
        	
            BDK.observe(["afterDrawCompare", "afterDraw", "afterDrawDetails"], function(){
				var theStyle = {visibility:"visible"};
				$("sideBar").setStyle(theStyle);
				$("mainbox").setStyle(theStyle);
			});
			BDK.observe(["detailResults","searchResults","compareResults","cartDetailResults"], function(evt) { BDK.util.goWindowTop(); });
            BDK.observe(["compareResults"], this.hideSide, this);
            BDK.observe(["searchResults"], this.undoMapSide, this);
            BDK.observe(["searchResults"], this.drawMap, this);
            
            BDK.observe(["detailResults", "cartDetailResults", "showItemList"], this.drawMapSide, this);
            
            BDK.observe(["clear", "unrefineall", "refineRoot", "unrefine", "freeText"], this.setActiveRootCatItem, this);
            BDK.observe(["clear", "searchResults"], this.watchOptionsArea, this);
            
            this.detailTmpl = BDK.tmpl("factbook_detail_sidebar", "sideBar");
            
            BDK.fire("getConfig", this.config);
            BDK.fire("appReady");
 
        }
};

// find all our emails and decode them
document.observe("dom:loaded", function(){
	$$(".bdkrot13").each( function(guy){
		var target = guy.title;
		if (target === ""){
			target = guy.innerHTML;
		}
		var correctText = BDK.util.rot13(target);
		if (guy.innerHTML === target){
			guy.innerHTML = correctText;
		}
		guy.href = "mailto:"+correctText;
	});
});

Prototip.Styles.factbook = {
    border: 6,
    borderColor: '#2A007D',
    className: 'factbook',
    closeButton: false,
    hideAfter: false,
    hideOn: 'mouseleave',
    hook: false,
	//images: 'styles/creamy/',    // Example: different images. An absolute url or relative to the images url defined above.
    radius: 6,
	showOn: 'mousemove',
    stem: {
      //position: 'topLeft',       // Example: optional default stem position, this will also enable the stem
      height: 12,
      width: 15
    }
  };