if(typeof(BUZZTOGO)=='undefined'){
var BUZZTOGO = (function()
{
    // The individual components will fill in this structure.
    var publicScope = {
        common : {
        },
        display : {
        },
        module : {
        }
    };

    bz_base_location="http://cdn.buzzillions.com/buzz2go/"+"bz_topten_01/";
var defaults = {
    bz_base_content_location: bz_base_location,
    bz_base_control_location: bz_base_location + "control/",
    bz_base_data_location: bz_base_location + "data/"
};


var params = {};
if (window && window.location && window.location.search)
{
    var query = window.location.search.substring(1).split('&');
    for (var i = 0, len = query.length; i < len; ++i)
    {
        var parts = query[i].split('=');
        params[parts[0]] = parts[1];
    }
}


// Other globals
var gResult = {};
publicScope.common.gResult = gResult;

var gTemplateFunctions = {};



// Takes a variable name and any number of hashes to look in.  It will search the hashes in the order they're given.
// Returns null if the variable could not be found.
//
function getWithPrecedence(name)
{
    for (var i = 1, len = arguments.length; i < len; ++i)
    {
        var hash = arguments[i];
        if (hash)
        {
            var result = hash[name];
            if (typeof result != 'undefined')
            {
                return result;
            }
        }
    }
    return null;
}

// Takes a variable name and an options hash.  The variable will be looked for in order of precedence:
//
//  options hash -> variable on the page -> query string parameter -> merchant property
//
// TODO: possibly include gArgs in get hashes
function get(name, options)
{
    var result = getWithPrecedence(name, options, params, window, defaults);
    return result;
}


function writeContentToDiv(divId, msg)
{
    if (!document.getElementById(divId))
    {
        setTimeout(function () { writeContentToDiv(divId, msg) }, 1000);
    }
    writeContentToDivNested(divId, msg);
}
publicScope.common.writeContentToDiv = writeContentToDiv;

function truncateTextToLengthAtClosestWord(text, len){
    if(text.length<=len) return text;
    var cChar =text.charAt(len-1);

    while(cChar!=' '){
        if(len==0) {return text.substr(0,len);}
        len--;
        cChar = text.charAt(len-1);
    }
    return text.substr(0,len-1)+'...';
}
publicScope.common.truncateTextToLengthAtClosestWord = truncateTextToLengthAtClosestWord;

function writeContentToDivNested(divId, msg)
{
    try
    {
        if (!msg)
        {
            msg = '';
        }
        onDomReady(function()
        {
            document.getElementById(divId).innerHTML += msg;
        });
    }
    catch (e)
    {
        // nothing, for now.
    }
}

function onDomReady(callback)
{
    if (typeof callback == 'function')
    {
        (function()
        {
            if (isIE())
            {
                try
                {
                    // This throws an error in IE if the document is not ready.
                    //
                    document.documentElement.doScroll('left');
                }
                catch (e)
                {
                    setTimeout(arguments.callee, 50);
                    return;
                }
            }

            callback();
            callback = null;
        })();
    }
}

function isIE()
{
    return typeof document.all != 'undefined' && typeof window.opera == 'undefined' && !(navigator.vendor == 'KDE');
}

function loadObject(key, callback, failure_callback, options)
{
    var dataRoot = getDataRoot(options);
    var url = dataRoot + key;
    if (gResult[key])
    {
        callback(gResult[key]);
    }
    else
    {
        var script = createScriptNode();

        var handle = function()
        {
            if (gResult[key])
            {
                if (script.parentNode)
                {
                    script.parentNode.removeChild(script);
                    delete script;
                }
                callback(gResult[key]);
            }
            else {
                failure_callback();
            }
        };

        addScript(url, script, handle);
    }
}
publicScope.common.loadObject = loadObject;

function addScript(url, scriptNode, callback)
{
    var script;
    if (!scriptNode) {
        script = createScript();
    } else {
        script = scriptNode;
    }
    script.src = url;

    // Wonderful ol' IE doesn't fire the onload event for script nodes.
    //
    if (isIE())
    {
        script.onreadystatechange = callback;
    }
    else
    {
        script.onload = callback;
    }

    document.getElementsByTagName('head')[0].appendChild(script);
}

function createScriptNode() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.charset = 'utf-8';
    return script;
}
var loadedCSS = [];
function loadCSS(url){
    if(typeof(loadedCSS[url])=="undefined"){
        loadedCSS[url] = 1;
        var link = createLinkNode();
        link.href=url;
        document.getElementsByTagName('head')[0].appendChild(link);
    }
}
publicScope.common.loadCSS = loadCSS;

function createLinkNode() {
    var link = document.createElement('link');
    link.type= 'text/css';
    link.rel = 'stylesheet';
    link.charset = 'utf-8';
    return link;
}

function getDocRoot(options)
{
    return get('bz_base_content_location', options);
}
publicScope.common.getDocRoot = getDocRoot;


function getDataRoot(options)
{
    return get('bz_base_data_location', options); 
}
publicScope.common.getDataRoot = getDataRoot;

    return publicScope;
})();
}

if(typeof(BUZZTOGO.module.topten)=='undefined'){
    BUZZTOGO.module.topten={
        gTemplateFunctions : {
            skyscraper: {
                success: function(data, parameters)
                {
                    BUZZTOGO.common.loadCSS("http://cdn.buzzillions.com/buzz2go/bz_topten_01/resources/css/default.css");
                    var result = [];

cat_extraString = (data.category.models[0].categoryName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase(); result.push('<li class=\"bz-topTenCat-li\" style=\"margin-bottom:');
result.push(parameters.bz_margin_bottom);
result.push(';\"><div><a href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\">');
if(data.category.models[0].image2!=null && data.category.models[0].image2.url!=null && data.category.models[0].image2.url!=''){ result.push('<img src=\'http:\/\/images.buzzillions.com');
result.push(data.category.models[0].image2.url);
result.push('\'>');
}else if (data.category.models[0].image!=null && data.category.models[0].image.url!=null && data.category.models[0].image.url!=''){ result.push('<img src=\'http:\/\/images.buzzillions.com');
result.push(data.category.models[0].image.url);
result.push('\'>');
}else { result.push('<img src=\'http:\/\/images.buzzillions.com\/images\/no_image_100.gif\'>');
} result.push('<\/a><\/div><h3><a  href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\">Top 10 ');
result.push(data.category.models[0].categoryName);
result.push('<\/a><\/h3><ol>');
var count=0;for(var e in data.category.models) { count++; 
if(e<5){ 
var brandProductName = (data.category.models[e].brandName!=null)?data.category.models[e].brandName+" " : "";brandProductName += data.category.models[e].name;var extraString = (brandProductName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase();brandProductName = BUZZTOGO.common.truncateTextToLengthAtClosestWord(brandProductName,parameters.bz_text_width); 
if(e==0){ result.push('<li style=\"font-weight:bold;\">');
}else{ result.push('<li>');
} result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[e].href);
result.push('\">');
result.push(brandProductName);
result.push('<\/a><\/li>');
} } result.push('<\/ol><p><a class=\"bz-base64-encoded\" href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\">see more &raquo;<\/a><\/p><\/li>');
return result.join('');

                },
                failure: function()
                {
                }
            },
            skyscraper2: {
                success: function(data, parameters)
                {
                    var result = [];

cat_extraString = (data.category.models[0].categoryName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase(); result.push('<div style=\"margin-bottom:');
result.push(parameters.bz_margin_bottom);
result.push('; clear:both;\"><h3><a href=\'');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\'>Top 10 ');
result.push(data.category.models[0].categoryName);
result.push('<\/a><\/h3>');
var count=0;for(var e in data.category.models) { count++; 
if(e<5){ 
var brandProductName = (data.category.models[e].brandName!=null)?data.category.models[e].brandName+" " : "";brandProductName += data.category.models[e].name;var extraString = (brandProductName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase();brandProductName = BUZZTOGO.common.truncateTextToLengthAtClosestWord(brandProductName,parameters.bz_text_width);if(e==0){ result.push('<div style=\"float: left; margin-right:10px; margin-bottom:5px; padding:3px; text-align:center; width:50px; height:50px; line-height:50px;\" >');
if(data.category.models[0].image!=null && data.category.models[0].image.url!=null){ result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\"><img style=\'vertical-align:middle;\' src=\'http:\/\/images.buzzillions.com');
result.push(data.category.models[0].image.url);
result.push('\'><\/a>');
}else{ result.push('<img src=\'http:\/\/images.buzzillions.com\/images\/no_image_50.gif\'>');
} result.push('<\/div><div style=\'float:left\'>');
result.push(count);
result.push('.');
 result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[e].href);
result.push('\">');
result.push(brandProductName);
result.push('<\/a><br>');
if(data.category.models[e].rating!=null && data.category.models[e].rating!='N/A'){ result.push('<div style=\"float:left; height:15px; width:83px; background-image:url(http:\/\/images.buzzillions.com\/portal\/images\/star_combo_sm.gif);  background-repeat:no-repeat; background-position:top left;\"><div style=\"background-image:url(\'http:\/\/images.buzzillions.com\/portal\/images\/star_solo_sm.gif\'); width:');
result.push(data.category.models[e].rating*17-2);
result.push('px; height:15px; overflow:hidden;\"><\/div><\/div><div style=\"height:15px; width:20px; font-weight:bold; text-align:center; float:left; margin-left:3px; padding:0 2px; background-color:black; color:white;\">');
result.push(data.category.models[e].rating.toFixed(1));
result.push('<\/div><br clear=\"all\"><a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[e].href);
result.push('\">');
result.push(data.category.models[e].numReviews +' reviews');
result.push('<\/a>');
} 
if(data.category.models[e].priceRange!=null && data.category.models[e].priceRange.low!=null && data.category.models[e].priceRange.low!=null){ result.push('<span style=\'color:green;\'>');
if(data.category.models[e].priceRange.low == data.category.models[e].priceRange.high){ 
result.push('from $'+data.category.models[e].priceRange.low.toFixed(2));

}else{ 
result.push('$'+data.category.models[e].priceRange.low.toFixed(2) +' - '+ data.category.models[e].priceRange.high.toFixed(2));

} result.push('<\/span>');
} result.push('<\/div>');
}else{ 
result.push(count);
result.push('.<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[e].href);
result.push('\">');
result.push(brandProductName);
result.push('<\/a>');
} result.push('<br clear=\"both\">');
}else if(e==5){ result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\">see more &raquo;<\/a>');
} 
} result.push('<\/div><br clear=\"all\" style=\"height:1px;\"><\/div>');
return result.join('');

                },
                failure: function()
                {
                }
            },
            toppicks: {
                success: function(data, parameters)
                {
                    BUZZTOGO.common.loadCSS("http://cdn.buzzillions.com/buzz2go/bz_topten_01/resources/css/toppicks.css");
                    var result = [];
result.push('<div class=\"bz-top-picks\">');
var bz_length = (data.category.models.length < 10) ? data.category.models.length : 10;var bz_rand = Math.floor(bz_length * Math.random()); 
if(typeof(parameters.bz_header_image)=="undefined"){ result.push('<img src=\"http:\/\/images.buzzillions.com\/buzz2go\/buzzillions_outside_widget.png\" class=\"bz-top-picks-logo\" \/>');
}else{ result.push('<img src=\"');
result.push(parameters.bz_header_image);
result.push('\" class=\"bz-top-picks-logo\" \/>');
} result.push('<table cellpadding=0; cellspacing=0;><tr><td colspan=\"2\"><h3>');
result.push(data.category.models[bz_rand].categoryName);
result.push('<\/h3><\/td><\/tr><tr><td width=\"55px\"><div class=\"bz-top-picks-product-image\">');
if(data.category.models[bz_rand].image!=null && data.category.models[bz_rand].image.url!=null){ result.push('<img style=\'vertical-align:middle;\' src=\'http:\/\/images.buzzillions.com');
result.push(data.category.models[bz_rand].image.url);
result.push('\'>');
}else{ result.push('<img src=\'http:\/\/images.buzzillions.com\/images\/no_image_50.gif\'>');
} result.push('<\/div><\/td><td><div style=\"margin-left:8px; margin-top:3px;\">');
var brandProductName = (data.category.models[bz_rand].brandName!=null)?data.category.models[bz_rand].brandName+" " : "";brandProductName += data.category.models[bz_rand].name; result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[bz_rand].href);
result.push('\">');
result.push(brandProductName);
result.push('<\/a><\/div><\/td><\/tr><tr><td colspan=\"2\"><div style=\"margin-left:8px; margin-top:8px;\">');
if(data.category.models[bz_rand].rating!=null && data.category.models[bz_rand].rating!='N/A'){ result.push('<div style=\"float:left; height:21px; width:112px; background-image:url(http:\/\/images.buzzillions.com\/portal\/images\/star_combo.gif);  background-repeat:no-repeat; background-position:top left;\"><div style=\"background-image:url(\'http:\/\/images.buzzillions.com\/portal\/images\/star_solo.gif\'); width:');
result.push(data.category.models[bz_rand].rating*23-2);
result.push('px; height:21px; overflow:hidden;\"><\/div><\/div><div style=\"height:21px; line-height:21px; vertical-align:middle; width:20px; font-weight:bold; text-align:center; float:left; margin-left:3px; padding:0 2px; background-color:#414142; color:white;\">');
result.push(data.category.models[bz_rand].rating.toFixed(1));
result.push('<\/div><br clear=\"all\"><a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[bz_rand].href);
result.push('\">read ');
result.push(data.category.models[bz_rand].numReviews +' customer reviews');
result.push('<\/a>');
} result.push('<\/div><\/td><\/tr><tr><td colspan=\"2\"><div style=\"margin-left:8px; margin-top:3px;\"><div class=\"bz-top-picks-review\"><div class=\"bz-top-picks-review-headline\">\"');
result.push(data.category.models[bz_rand].highlightHeadline0);
result.push('\"<\/div><span class=\"bz-top-picks-review-name\">- ');
result.push(data.category.models[bz_rand].highlightName0);
result.push('<\/span> <br><\/div>');
if(data.category.models[bz_rand].highlightHeadline1!=null){ result.push('<div class=\"bz-top-picks-review\"><div class=\"bz-top-picks-review-headline\">\"');
result.push(data.category.models[bz_rand].highlightHeadline1);
result.push('\"<\/div><span class=\"bz-top-picks-review-name\">- ');
result.push(data.category.models[bz_rand].highlightName1);
result.push('<\/span> <br><\/div>');
} 
if(data.category.models[bz_rand].highlightHeadline2!=null){ result.push('<div class=\"bz-top-picks-review\"><div class=\"bz-top-picks-review-headline\">\"');
result.push(data.category.models[bz_rand].highlightHeadline2);
result.push('\"<\/div><span class=\"bz-top-picks-review-name\">- ');
result.push(data.category.models[bz_rand].highlightName2);
result.push('<\/span><br><\/div>');
} result.push('<\/div><\/td><\/tr><tr><td colspan=\"2\"><a class=\"bz-top-picks-disclaimer\" href=\"http:\/\/www.buzzillions.com\/public\/buzz2go\/legal\/oo_disclaimer.html\" target=\"_blank\">Disclaimer<\/a><div class=\"bz-top-picks-buzzillions-logo\"><img  src=\"http:\/\/images.buzzillions.com\/buzz2go\/bz_buzzillions_logo_70.png\" \/><\/div><\/td><\/tr><\/table><\/div>');
return result.join('');

                },
                failure: function()
                {
                }
            },
            list: {
                success: function(data, parameters)
                {
                    BUZZTOGO.common.loadCSS("http://cdn.buzzillions.com/buzz2go/bz_topten_01/resources/css/list.css");
                    var result = [];

cat_extraString = (data.category.models[0].categoryName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase(); result.push('<div class=\"bz-list\"><div class=\"bz-list-header\">Top 10 ');
result.push(data.category.models[0].categoryName);
result.push('<\/div><div><div class=\"bz-top-picks-buzzillions-logo\"><img  src=\"http:\/\/images.buzzillions.com\/buzz2go\/bz_buzzillions_logo_70.png\" \/><\/div><\/div><ol>');
var count=0;for(var e in data.category.models) { count++; 
if(e<10){ 
var brandProductName = (data.category.models[e].brandName!=null)?data.category.models[e].brandName+" " : "";brandProductName += data.category.models[e].name;var extraString = (brandProductName+' reviews').replace(/[^a-zA-Z0-9]+/g,'_').toLowerCase();brandProductName = BUZZTOGO.common.truncateTextToLengthAtClosestWord(brandProductName,parameters.bz_text_width); 
if(e%2==0){ result.push('<li class=\"bz-list-list-even\">');
}else{ result.push('<li class=\"bz-list-list-odd\">');
} result.push('<a href=\"');
result.push(parameters.bz_site);

result.push(data.category.models[e].href);
result.push('\">');
result.push(brandProductName);
result.push('<\/a><\/li>');
} } result.push('<\/ol><a href=\"');
result.push(parameters.bz_site);

result.push(data.category.uri);
result.push('\">see more popular ');
result.push(data.category.models[0].categoryName);
result.push(' &raquo;<\/a><\/div>');
return result.join('');

                },
                failure: function()
                {
                }
            },
            banner: {
                success: function(data, parameters)
                {
                    var result = [];
result.push('this space intentionally left blank');
return result.join('');

                },
                failure: function()
                {
                }
            }
        },

        execute: function(divName) {
            var tempDisplay = BUZZTOGO.display[divName].display;
            var resultFunctionObject = BUZZTOGO.module.topten.gTemplateFunctions[tempDisplay];
            //if top picks, we don't want to display all categories, randomly pick one
            if(BUZZTOGO.display[divName].display=="toppicks"){
                bz_rand_category = Math.floor(BUZZTOGO.display[divName].categoryid.length * Math.random());
                BUZZTOGO.display[divName].categoryid = [BUZZTOGO.display[divName].categoryid[bz_rand_category]];
            }
            for (a in BUZZTOGO.display[divName].categoryid){
                //this check is because libraries like prototype add functions to each object, which are picked up in this for loop
                if(typeof(BUZZTOGO.display[divName].categoryid[a]) == "function"){
                    continue;
                }
                BUZZTOGO.common.loadObject(BUZZTOGO.display[divName].categoryid[a]+".js",
                        function(o) {
                            if (typeof(resultFunctionObject.success)=="function") {
                                var result = resultFunctionObject.success(o, BUZZTOGO.display[divName]);
                                BUZZTOGO.common.writeContentToDiv(divName, result);
                            }
                        },
                        function() {
                            if (typeof(resultFunctionObject.failure)=="function") {
                                var result = resultFunctionObject.failure();
                                BUZZTOGO.common.writeContentToDiv(divName, result);
                            }
                        });
            }
        },
        bzGrabTopTenVariablesAndAssociateWithDiv: function(divName){
            BUZZTOGO.display[divName] = {};
            if (bz_categories!=null) {
                BUZZTOGO.display[divName].categoryid = bz_categories;
            }
            if (typeof(bz_display_style)=="undefined" || bz_display_style=="") {
                BUZZTOGO.display[divName].display = "skyscraper";
            }else{
                BUZZTOGO.display[divName].display = bz_display_style;
            }
            if (typeof(bz_site)=="undefined"){
                BUZZTOGO.display[divName].bz_site="http://buzzillions.com";
            }
            else{
                BUZZTOGO.display[divName].bz_site = bz_site;
            }
            if (typeof(bz_margin_bottom)=="undefined"){
                BUZZTOGO.display[divName].bz_margin_bottom="0px";
            }
            else{
                BUZZTOGO.display[divName].bz_margin_bottom = bz_margin_bottom;
            }
            if (typeof(bz_text_width)=="undefined"){
                BUZZTOGO.display[divName].bz_text_width=40;
            }
            else{
                BUZZTOGO.display[divName].bz_text_width = bz_text_width;
            }
            if (typeof(bz_header_image)!="undefined"){
                BUZZTOGO.display[divName].bz_header_image = bz_header_image;
            }
            if (typeof(bz_user_stylesheet)!="undefined"){
                BUZZTOGO.display[divName].bz_user_stylesheet = bz_user_stylesheet;
            }
        },
        bzGetUniqueDivName: function(){
            newDivName = "";
            do{
                newDivName = "bz_content"+Math.random().toFixed(2)*100;
            }while(document.getElementById(newDivName)!=null)
            return newDivName;
        },
        bzTopTenVariablesAreDefined: function(){
            return (typeof(bz_categories)!="undefined");
        },
        bzClearTopTenVariables: function(){
            delete bz_categories;
            delete bz_display_style;
            delete bz_site;
            delete bz_margin_bottom;
            delete bz_text_width;
        }
    };
}


if(typeof(bz_async)=="undefined"){
    if(BUZZTOGO.module.topten.bzTopTenVariablesAreDefined()){
        divName = BUZZTOGO.module.topten.bzGetUniqueDivName();
        BUZZTOGO.module.topten.bzGrabTopTenVariablesAndAssociateWithDiv(divName);
        BUZZTOGO.module.topten.bzClearTopTenVariables();
        document.write("<div><ul class='bz-module bz-top-ten-list' id='"+divName+"'></ul></div>");

        BUZZTOGO.module.topten.execute(divName);
    }
}
