// Setup DD namespaces
DD = {};
DD.Util = {};
DD.HomePage = {};
DD.Menu = {};


// Constants
DD.HomePage.GENDER_COOKIE = 'sticky-gender';
DD.HomePage.GENDER_MALE = 'male';
DD.HomePage.GENDER_FEMALE = 'female';


DD.HomePage._malePanel = null;
DD.HomePage._femalePanel = null;


/*
 * Initialise the preferred gender panels.
 */
DD.HomePage.initGenderPanel = function() {

    // Find the panels
    var panels = MochiKit.DOM.getElementsByTagAndClassName('div', 'gender-panel');
    DD.HomePage._malePanel = panels[0];
    DD.HomePage._femalePanel = panels[1];

    // Lookup the preferred gender
    var gender = DD.HomePage.getPreferredGender();

    // If there is no preferred gender yet then display a big chooser.
    if(gender) {
        DD.HomePage.selectGenderPanel(gender);
    }
    else {
        DD.HomePage.activateGenderChooser();
    }
};


DD.HomePage.activateGenderChooser = function() {

    var maleTag = MochiKit.DOM.LI({'class': 'male'}, "Men's Clothing");
    var femaleTag = MochiKit.DOM.LI({'class': 'female'}, "Women's Clothing");
    var tag = MochiKit.DOM.UL({'class': 'preferred-gender'}, maleTag, femaleTag);
    var tagParent = DD.HomePage._malePanel.parentNode;

    tagParent.insertBefore(tag, DD.HomePage._malePanel);
    MochiKit.DOM.addElementClass(DD.HomePage._malePanel, 'hidden');
    MochiKit.DOM.addElementClass(DD.HomePage._femalePanel, 'hidden');

    MochiKit.Signal.connect(maleTag, 'onclick', function(e) {
        MochiKit.Visual.fade(tag, {afterFinish: function() {
            DD.HomePage.setPreferredGender(DD.HomePage.GENDER_MALE);
            DD.HomePage.replaceCategoryChooser(DD.HomePage.GENDER_MALE);
            DD.HomePage.selectGenderPanel(DD.HomePage.GENDER_MALE);
            location.reload();
        }});
    });

    MochiKit.Signal.connect(femaleTag, 'onclick', function(e) {
        MochiKit.Visual.fade(tag, {afterFinish: function() {
            DD.HomePage.setPreferredGender(DD.HomePage.GENDER_FEMALE);
            DD.HomePage.replaceCategoryChooser(DD.HomePage.GENDER_FEMALE);
            DD.HomePage.selectGenderPanel(DD.HomePage.GENDER_FEMALE);
            location.reload();
        }});
    });
}


DD.HomePage.replaceCategoryChooser = function(gender) {
    var url = '/_categorychooser';
    MochiKit.Async.doSimpleXMLHttpRequest(url).addCallback(function(r) {
        MochiKit.DOM.getElement('categories-cnr').innerHTML = r.responseText;
    });
}


DD.HomePage.selectGenderPanel = function(gender) {

    var body = MochiKit.DOM.getElementsByTagAndClassName('body')[0];

    if(gender == DD.HomePage.GENDER_MALE) {
        MochiKit.DOM.removeElementClass(DD.HomePage._malePanel, 'hidden');
        MochiKit.DOM.addElementClass(DD.HomePage._femalePanel, 'hidden');
        MochiKit.DOM.addElementClass(body, DD.HomePage.GENDER_MALE);
        MochiKit.DOM.removeElementClass(body, DD.HomePage.GENDER_FEMALE);
    }
    else {
        MochiKit.DOM.addElementClass(DD.HomePage._malePanel, 'hidden');
        MochiKit.DOM.removeElementClass(DD.HomePage._femalePanel, 'hidden');
        MochiKit.DOM.addElementClass(body, DD.HomePage.GENDER_FEMALE);
        MochiKit.DOM.removeElementClass(body, DD.HomePage.GENDER_MALE);
    }
}


DD.HomePage.setPreferredGender = function(gender) {
    DD.Util.setCookie(DD.HomePage.GENDER_COOKIE, gender,
        new Date(2050, 1, 1));
    DD.Menu.updateOffersMenu();
}


DD.HomePage.getPreferredGender = function() {
    return DD.Util.getCookie(DD.HomePage.GENDER_COOKIE);
}


/*
 * Set a cookie
 */
DD.Util.setCookie = function(name, value, expires, path, domain, secure) {   
    var val = escape(value);
    document.cookie= name + "=" + val +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}


DD.Util.getCookie = function(name) {
    var cookie = document.cookie;
    var prefix = name + "=";
    var begin = cookie.indexOf("; " + prefix);
    if (begin == -1) {
        begin = cookie.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = cookie.length;
    }
    return unescape(cookie.substring(begin + prefix.length, end));
}

DD.Menu.updateOffersMenu = function() {
    var gender = DD.HomePage.getPreferredGender();
    if( gender ) {
        var menuItem = MochiKit.DOM.$("offers-menu");
        MochiKit.DOM.updateNodeAttributes(menuItem, {'href': '/products/' + gender + '?sort=2' });
    }
}
