/////////////////////////////////////////
//
/////////////////////////////////////////
var RecentlyViewedCookie = new Object();

RecentlyViewedCookie._max_crumbs = 4;

RecentlyViewedCookie._reprString = function (obj) {
    var retval = "";
    if (obj instanceof String|| typeof obj == "string") {
        //replace any double quotes in string with singles
        var s = obj.replace(/\"/gi,"\'");
        return '"'+s+'"';
    } else { dojo.debug(obj + " not String"); }
    return obj.toString();
};

RecentlyViewedCookie._reprCookieMap = function (obj) {
    var retval = "";
    var is_piece_exists = false;
    if (obj instanceof Object|| typeof obj == "object") {
        for (key in obj) {
            //dojo.debug("key: " + key);
            var sep = is_piece_exists?",":"";
            retval += sep + this._reprString(key) + ":" + this._reprPiece(obj[key]);
            is_piece_exists = true;
        }
    } 
    return "{" + retval + "}";
};

RecentlyViewedCookie._reprPiece = function(arr_piece) {
    var s_retval = '';
    var is_crumb_exists = false;
    if (arr_piece instanceof Array|| typeof arr_piece == "array") {
        for (var i=0;i<arr_piece.length;i++) {
            crumb = arr_piece[i];
            var sep = is_crumb_exists?",":"";
            s_retval += sep + this._reprCrumb(crumb);
            is_crumb_exists = true;
        }
    } else { dojo.debug(arr_piece + " not Array"); }
    s_retval = "[" + s_retval + "]";
    return s_retval;
};

RecentlyViewedCookie._reprCrumb = function(arr_crumb) {
    var s_crumb = '';
    if (arr_crumb instanceof Array|| typeof arr_crumb == "array") {
        var crumb_len = arr_crumb.length;
        if (crumb_len != 3) { return ""; }
        s_crumb = "[" + arr_crumb[0] + "," + arr_crumb[1] + "," + this._reprString(arr_crumb[2]) + "]";
    }
    return s_crumb;
};

RecentlyViewedCookie.makeNewCrumb = function(prodnum,pathnum,title) {
    var crumb = "[" + prodnum + "," + pathnum + "," + this._reprString(title) + "]";
    return crumb;
};

RecentlyViewedCookie.makeNewPiece = function(chipname,crumb) {
    var piece = "[" + crumb + "]";
    piece = this._reprString(chipname) + ":" + piece;
    return piece;
};

RecentlyViewedCookie.getCookiePiece = function(chipname,scookie) {
    var piece = null;
    var map;
    
    //map = (scookie);
    try {
      eval("map=" + scookie + ";");
    }catch(e){
      dojo.debug("getCookiePiece: " + e);
      map = {};
    }

    for (var name in map) {
        if (name == chipname) {
            piece = map[name];
        }
    }
    return this._reprPiece(piece);
};
    
RecentlyViewedCookie.setCookiePiece = function(chipname,chip,scookie) {
    var piece = null;
    var has_pieces = false; var chip_set = false;
    var map;

    dojo.debug("cookie in: " + scookie);
    dojo.debug("chipname: " + chipname);
    dojo.debug("chip in: " + chip);
    try {
      eval("map=" + scookie + ";");
    }catch(e){
      dojo.debug("setCookiePiece: " + e);
      map = {};
    }
    dojo.debug("chip: " + map[chipname]);
    var s;
    for (n in map) { s += n +",";}
    dojo.debug("Mappings: " + s);
    map[chipname] = eval(chip);
    dojo.debug("chip out: " + map[chipname]);

    return this._reprCookieMap(map);
};
    
RecentlyViewedCookie.setCookieCrumb = function(chipname,crumb,scookie) {
    var chip = null;
    var num_crumbs = 0;
    var has_crumb = false; var chip_set = false;
    var map;

    dojo.debug("cookie in: " + scookie);
    dojo.debug("crumb in: " + crumb);
    dojo.debug("chipname: " + chipname);
    chip = this.getCookiePiece(chipname,scookie);
    dojo.debug("chip in: " + chip);
    
    arr_chip = eval(chip);
    if (arr_chip instanceof Array|| typeof arr_chip == "array") {
        num_crumbs = arr_chip.length;
        for (var i=0;i<num_crumbs;i++) {
            arr_crumb = arr_chip[i];
            a_crumb = this._reprCrumb(arr_crumb);
            dojo.debug("a_crumb: " + a_crumb);
            if (a_crumb == crumb) { has_crumb = true; }
        }
        if (!has_crumb) {
            if (num_crumbs >= this._max_crumbs) { arr_chip.shift(); } 
            arr_chip.push(eval(crumb));
        }
    }
    chip = this._reprPiece(arr_chip);
    dojo.debug("chip out: " + chip);

    return this.setCookiePiece(chipname,chip,scookie);
};
