/**
 * Contains the rule definition for the targeted promo project (hero personalization)
 * @author: Tim Wong (timwong@vmware.com)
 */
vmf.ns.use("psz.rule");
psz.rule.targetedPromo = function(){
    var QUEUE_COOKIE = "psz_banner_queue";
    var BANNER_COOKIE = "psz_banner_current";

    // The internal queue object;
    var queue = function(){
        var _arry = new Array(3);
        return {
            init: function(){
                var ck_queue = vmf.cookie.read(QUEUE_COOKIE);
                _arry = (ck_queue) ? vmf.array.objToAry(vmf.json.txtToObj(ck_queue)) : [];
            },
            isEmpty: function(){
              for(var i in _arry){
                  if(_arry[i] && _arry[i].length > 0)
                      return false;
              }
              return true;  
            },
            getVal: function(){
                return _arry;
            },
            pop: function(){
                for(var i in _arry){
                    var list = _arry[i];
                    if(list && list.length > 0)
                        return list.shift();
                }
                return null;
            },
            push: function(product){
                // Define the weight of each product
                var weight = [];
                weight["vi3"] = 1;
                weight["vdi"] = 2;
                weight["srm"] = 2;
                weight["thinapp"] = 1;
                weight["labmanager"] = 1;
                // The utility for adding the the product to the bucket
                var put = function(bucket, product){
                    if (!_arry[bucket]) {
                        _arry[bucket] = [product];
                    }else{
                        if(!vmf.array.contains(product, _arry[bucket]))
                            (weight[product] >= weight[_arry[bucket][0]]) ? _arry[bucket].unshift(product) : _arry[bucket].push(product);
                    }
                }
                switch (product) {
                    case "vi3":
                        put(0, "vi3");
                        break;
                    case "vdi":
                        put(0, "vdi");
                        break;
                    case "srm":
                        put(0, "srm");
                        break;
                    case "thinapp":
                        put(1, "thinapp");
                        break;
                    case "labmanager":
                        put(2, "labmanager");
                        break;
                }
            }
        };
    }();
    
    // Define the banners
    var banners = [];
//    banners["vdi"] = '<a href="/tryvmware/login.php?eval=vdi&src=WWW_08Q3_hero_eval_vdi"><img width="720" height="216" src="/files/images/home/hero_hp-glass_vdi.jpg"/></a>';
    //banners["srm"] = '<a href="/tryvmware/login.php?eval=srm&src=WWW_08Q3_hero_eval_site-recover-manager"><img width="720" height="216" src="/files/images/home/hero_hp-glass_recovmngr.jpg"/></a>';
    //banners["vi3"] = '<a href="/tryvmware/login.php?eval=vi3&src=WWW_08Q3_hero_eval_vi3"><img width="720" height="216" src="/files/images/home/hero_hp-vi3.jpg"/></a>';
    //banners["thinapp"] = '<a href="/tryvmware/login.php?eval=thinapp&src=WWW_08Q3_hero_eval_thinapp"><img width="720" height="216" src="/files/images/home/hero_hp-glass_thinapp.jpg"/></a>';
    //banners["labmanager"] = '<a href="/tryvmware/login.php?eval=labmanager&src=WWW_08Q3_hero_eval_lab-manager"><img width="720" height="216" src="/files/images/home/hero_hp-glass_labmngr.jpg"/></a>';
    
	var ck_banner = null;
    // The definition of this current rule
    var def = {
        check: function(){
            queue.init();
            return (ck_banner = vmf.cookie.read(BANNER_COOKIE)) || !queue.isEmpty();
        },
        green: function(){
            //var ck_banner = vmf.cookie.read(BANNER_COOKIE);
            if(ck_banner)
                document.write(banners[ck_banner])	
            else{
                var qu_banner = queue.pop();
                vmf.cookie.write(QUEUE_COOKIE, vmf.json.objToTxt(queue.getVal()), 30);
                vmf.cookie.write(BANNER_COOKIE, qu_banner);
                document.write(banners[qu_banner]);
            }
        },
        red: function(){
            vmf.dom.id("1").style.display = "";
            var tt, nn;
            $(document).ready( function(){$('#promobox').innerfade({animationtype: 'fade', speed: 'slow', timeout: 2000, type: 'sequence', containerheight: 'auto' }); 
            });
        }
    };
    // Return the structure of this rule
    return {
        exec: function(){
            return (def.check() ? def.green() : def.red());
        },
        push: function(product){
            // Push the product to the internal queue;
            queue.init();
            queue.push(product);
            vmf.cookie.write(QUEUE_COOKIE, vmf.json.objToTxt(queue.getVal()), 30);
        }
    }
}();
