if(!$chk(HKM)) {
	var HKM = {};
}

HKM.ShopPage = new Class({

    options: {
        identifier: 'page',
        visibleAtStartUp: false,
        uielmSelectors: {
    },
    onWillClose: Class.empty,
    onDidClose: Class.empty,
    delegate: null
},

uielms: {
},

preloadImages: [],

isVisible: true,

pageTarget: null,

currentProductId: null,

initialize: function(target, options) {
    this.setOptions(options);
    this.pageTarget = $(target);
    this.setup();
    this.setupGUI();
},

setup: function() {

    if (!this.options.visibleAtStartUp) {
        this.pageTarget.setStyle('display', 'none');
    }

    // Preload images
    if ($type(this.preloadImages) == 'array' && this.preloadImages.length > 0) {
        var img = new Asset.images(this.preloadImages);
    }

    // Get elements
    for (var e in this.uielms) {
        if ($chk(this.options.uielmSelectors[e + 'Selector'])) {
            var candidates = $ES(this.options.uielmSelectors[e + 'Selector'], this.pageTarget);
            if (candidates.length > 0) {
                this.uielms[e] = candidates.pop();
            } else {
                this.uielms[e] = new Element('span');
            }
        }
    }
},

setupGUI: function() {

},

show: function(sendEvent) {
    
    this.pageTarget.setStyles({ 'display': 'block', 'visibility': 'visible' });
    this.isVisible = true;
},

hide: function(sendEvent) {
    if (sendEvent !== false) {
        this.fireEvent('onWillClose', [this]);
    }

    this.pageTarget.setStyles({ 'display': 'none', 'visibility': 'hidden' });
    this.isVisible = false;

    if (sendEvent !== false) {
        this.fireEvent('onDidClose', [this]);
    }
    this.didHide();
},

didHide: function() {

},

identifier: function() {
    return this.options.identifier;
},

reloadData: function(productData) {
    this.renderData(productData);
},

prepareReload: function(productId, productLabel, showLoadProgress) {

},

renderData: function(productData) {

}

});
HKM.ShopPage.implement(new Options);
HKM.ShopPage.implement(new Events);