// Javascript library for client side personalization
// Copyright 2007-2008 Gilt Groupe, Inc.
var gg;
if (!gg) {
    gg = {};
}
gg.Usermeta = {};

gg.Usermeta.data = function() {
    return gg.parse_json(fl.Util.readCookie('usermeta'));
};

gg.Usermeta.getValue = function(key) {
  var data = gg.Usermeta.data();
  if (data) {
    return data[key];
  }
  return null;
};

gg.Usermeta.setValue = function(elId, value, doInsertion, defaultValue) {
    log.setup("usermeta");
    if (!value) {
        value = defaultValue;
    }
    if (value || 0 === value) {
        var el = $("#" + elId);
        if (el.length) {
            if (doInsertion) {
                log("Inserting %s after #%s", value, elId);
                el.replaceWith(value);
            } else {
                log("Setting #%s to %s", elId, value);
                el.html(value);
            }
        }
    }
};

gg.Usermeta.init = function() {
    log.setup("startup", "usermeta")("Initializing Usermeta");
    var data = gg.Usermeta.data();
    if (!data){
        log("Did not find Metadata");
        return;
    }

    log("Found User Metadata %o, Continuing...", data);

    if (!gg.Usermeta.isTimeZoneSet) {
        log("Initializing TimeZone");
        gg.Usermeta.setTimeZone($('.tzchange'));
        gg.Usermeta.isTimeZoneSet = true;
    }
    log("Initializing Display Name");
    //gg.Usermeta.setValue('usermeta_display_name', data.display_name, true);
    if (!$("#user").data("username-set")) {
      $("#user")
        .text($("#user").text() + " " + data.display_name)
        .data("username-set", true);
    }
    if ("1" == data.admin_nav_link) {
        log("Initializing Admin Link");
        gg.Usermeta.setValue('usermeta_admin_nav_link', '<a href="/admin/">Admin</a>', false);
    }
    if ("1" == data.warehouse_nav_link) {
        log("Initializing Warehouse Link");
        gg.Usermeta.setValue('usermeta_warehouse_nav_link', '<a href="/warehouse/">Warehouse</a>', false);
    }
    if ("1" == data.bounced) {
        log("Showing Bounce Message");
        var reset_link = "/account/reset_bounces";
        var bounce_message = Locale.bounce_message + '<a href="' + reset_link + '" style="display: inline">' + Locale.click_here + '</a>';
        gg.Usermeta.setValue('usermeta_bounced', bounce_message, false);
        $('#usermeta_bounced').show();
    }
    log("Usermeta Initialization Complete");
};

gg.Usermeta.sale_maybe_add_next_previous_links = function(saleId) {
    var el = $('#sale_next_previous_sales');
    if (!el.length) {
        return;
    }

    var value = fl.Util.readCookie('sale_list');
    if (!value) {
        return null;
    }

    var ids = value.split(' ');
    var i = ids.length;
    while (i--) {
        if (ids[i] == saleId) {
            var content = '';
            if (0 < i) {
                content += "<div id=\"previous_link\"><a href=\"/sale/preview/" + ids[i - 1] + "\">&laquo;&nbsp;Previous Sale</a></div>";
            }
            if (ids.length - 1 > i) {
                content += "<div id=\"next_link\"><a href=\"/sale/preview/" + ids[i + 1] + "\">Next Sale&nbsp;&raquo;</a></div>";
            }
            if (0 < content.length) {
                el.html(content);
            }
            return;
        }
    }
};

gg.Usermeta.sale_maybe_add_next_previous_post_links = function(currentPostId) {
    var el = $('#blog_next_previous_posts');
    if (!el.length) {
        return;
    }

    var value = fl.Util.readCookie('blog_post_list');
    if (!value) {
        return null;
    }

    var info = value.split(' ');
    var i = info.length;
    while (i--) {
        if (info[i] == currentPostId) {
            var content = '';
            if (0 < i) {
                content += "<a href=\"/blog/redirect/" + info[i - 1] + "?s=bpp\" id=\"prev_post_link\"><img src=\"/images/us/blog/left-post-arrow-blue.png\"/>&nbsp;Previous</a>";
            }
            content += "<a href=\"/blog\" id=\"main_index_link\">Back to main page</a>";
            if (info.length - 1 > i) {
                content += "<a href=\"/blog/redirect/" + info[i + 1] + "?s=bpn\" id=\"next_post_link\">Next&nbsp;<img src=\"/images/us/blog/right-post-arrow-blue.png\"/></a>";
            }
            if (0 < content.length) {
                el.html(content);
            }
            return;
        }
    }
};

gg.Usermeta.setTimeZone = function(spans) {
    log.setup("usermeta");

    log("Setting TimeZone to %s(%d)");
    var tzregex = /(\: *\d{2} *)([a-z]+)([\-\+]\d+)? *\(?([a-z ]+)?/i;
    var tzreplace = /[a-z() ]/g;

    spans.each(function(i, s) {
        var dateformat = $(s).attr('dateformat');
        var localdate = new Date();

        localdate.setTime(Date.parse($(s).html()));
        var tzname = localdate.toString();
        // Opera doesn't give us the local time zone name, but we don't really care.
        tzname = tzregex.exec(tzname) || [];
        if(!tzname[3]) tzname[4] = tzname[2];
        if(tzname[4]){
          tzname = tzname[4];
        } else {
          tzname = tzname[2] + tzname[3];
        }
        tzname = tzname.replace(tzreplace,"");
        var day = localdate.getDay();
        var day_date = localdate.getDate();
        var month = localdate.getMonth() + 1;
        var hours = localdate.getHours();
        var year = localdate.getYear() + 1900;

        var meridian = '';
        if (0 == hours) {
            hours = 'MIDNIGHT';
        } else if (12 == hours) {
            hours = 'NOON';
        } else if (12 < hours) {
            hours -= 12;
            meridian = 'PM';
        } else if (12 > hours) {
            meridian = 'AM';
        }
        switch(day) {
            case 0: day = 'Sunday'; break;
            case 1: day = 'Monday'; break;
            case 2: day = 'Tuesday'; break;
            case 3: day = 'Wednesday'; break;
            case 4: day = 'Thursday'; break;
            case 5: day = 'Friday'; break;
            case 6: day = 'Saturday'; break;
        }
        dateformat = dateformat.replace(/\%I/g, hours);
        dateformat = dateformat.replace(/\%p/g, meridian);
        dateformat = dateformat.replace(/\%m/g, month);
        dateformat = dateformat.replace(/\%Y/g, year);
        if (10 > day_date) {
            day_date = ' ' + day_date;
        }
        dateformat = dateformat.replace(/\%e/g, day_date);
        dateformat = dateformat.replace(/\%A/g, day);
        dateformat = dateformat.replace(/\%z/g, tzname);
        $(s).html(dateformat).show();
    });
};

gg.Usermeta.updateCartItemCountDirect = function(number_items) {
    gg.Usermeta.setValue('carousel-nav-cart span', "(" + number_items + ")", false, 0);
    gg.Cart.itemExpirationHeader(gg.Cart.current);
};

gg.Usermeta.userIsInGroup = function(group_id) {
  return (new RegExp("ca=[^;_]+_\\w+[\\.\\d]*\\." + group_id + "\\.")).test(document.cookie);
};