﻿aspdnsf.Products.KitProductItem = Class.create();
aspdnsf.Products.KitProductItem.prototype = {
    
    initialize : function(id, itemCode, itemType, name, selected) {
        Object.extend(this, new aspdnsf.Products.Product(id, itemCode, itemType));
        
        this.name = name;
        
        this.deltaPrice = 0;
        this.selected = selected;
        
        this.selectedChangedEventHandlers = new Array();
        this.deltaPriceChangedEventHandlers = new Array();
    },
    
    getName : function() {
        return this.name;
    },
    
    compareWith : function(other) {
        var delta = 0;
        if(other == this) {
            delta = 0;
        }
        else {
            delta = this.getPrice() - other.getPrice();
        }
        
        this.setDeltaPrice(delta);
    },
    
    computeDelta : function() {
        var delta = this.getPrice();
        this.setDeltaPrice(delta);
    },
    
    setDeltaPrice : function(delta) {
        this.deltaPrice = delta;
        this.onDeltaPriceChanged();
    },
    
    getDeltaPrice : function() {
        return this.deltaPrice;
    },
    
    getIsSelected : function() {
        return this.selected;
        this.onSelectedChanged();
    },
    
    setIsSelected : function(selected, invoker) {
        this.selected = selected;
        
        this.onSelectedChanged(invoker);
        
        return this.selected;
    },
    
    addSelectedChangedEventHandler : function(handler) {
        this.selectedChangedEventHandlers.push(handler);
    },
    
    addDeltaPriceChangedEventHandler : function(handler) {
        this.deltaPriceChangedEventHandlers.push(handler);
    },
    
    onSelectedChanged : function(invoker) {
        for(var ctr=0; ctr<this.selectedChangedEventHandlers.length; ctr++) {
            var handler = this.selectedChangedEventHandlers[ctr];
            handler(this, invoker);
        }
    },
    
    onDeltaPriceChanged : function() {
        for(var ctr=0; ctr<this.deltaPriceChangedEventHandlers.length; ctr++) {
            var handler = this.deltaPriceChangedEventHandlers[ctr];
            handler(this);
        }
    }
    
}

aspdnsf.Products.KitProductItemGroup = Class.create();
aspdnsf.Products.KitProductItemGroup.prototype = {

    initialize : function(id, groupCode) {
        this.id = id;
        this.code = groupCode;
        this.items = new Array();
        
        this.selectionChangedEventHandlers = new Array()
        
        // virtual methods
        this.afterKitItemRegisteredDelegate = null;
        this.chooseItemsDelegate = null;
        this.inspectDelegate = this.baseInspect;
    },
    
    getId : function() {
        return this.id;
    },
    
    getGroupCode : function() {
        return this.code;
    },
    
    getSelectedItems : function() {
        var selectedItems = new Array();
        
        for(var ctr=0; ctr<this.items.length; ctr++) {
            var current = this.items[ctr];
            if(current.getIsSelected()) {
                selectedItems.push(current);
            }
        }
        
        return selectedItems;
    },
    
    registerKitItem : function(kitItem) {
        if(kitItem) {
            this.items.push(kitItem);
            kitItem.addSelectedChangedEventHandler(this.kitItemSelectedChangedEventHandler.bind(this));            
            
            if(this.afterKitItemRegisteredDelegate) {
                this.afterKitItemRegisteredDelegate(kitItem);
            }
        }
    },
    
    inspect : function() {
        if(this.inspectDelegate) {
            this.inspectDelegate();
        }
    },
    
    baseInspect : function() {
        // meant to be overridden
    },
    
    kitItemSelectedChangedEventHandler : function(item, invoker) {
        if(invoker && this == invoker) {
            return;
        }
        
        if(this.chooseItemsDelegate) {
            this.chooseItemsDelegate(item);
        }
        
        this.onSelectionChanged();
    },
    
    addSelectionChangedEventHandler : function(handler) {
        this.selectionChangedEventHandlers.push(handler);
    },
    
    onSelectionChanged : function() {
        for(var ctr=0; ctr<this.selectionChangedEventHandlers.length; ctr++) {
            var handler = this.selectionChangedEventHandlers[ctr];
            handler(this);
        }
    }
    
}

aspdnsf.Products.KitProductItemRequiredGroup = Class.create();
aspdnsf.Products.KitProductItemRequiredGroup.prototype = {

    initialize : function(id, groupCode) {
        Object.extend(this, new aspdnsf.Products.KitProductItemGroup(id, groupCode));
        
        this.chooseItemsDelegate = this.chooseItems.bind(this);
        this.inspectDelegate = this.chooseItems.bind(this);
    },
    
    chooseItems : function(selectedItem) {
        if(arguments.length == 0) {
            selectedItem = this.getSelectedItems()[0];
        }
        
        for(var ctr=0; ctr<this.items.length; ctr++) {
            var current = this.items[ctr];
            //current.compareWith(selectedItem);
            if(current != selectedItem) {
                current.setIsSelected(false, this);
            }
            
            current.compareWith(selectedItem);
        }
    }

}

aspdnsf.Products.KitProductItemMultiSelectGroup = Class.create();
aspdnsf.Products.KitProductItemMultiSelectGroup.prototype = {

    initialize : function(id, groupCode) {
        Object.extend(this, new aspdnsf.Products.KitProductItemGroup(id, groupCode));
        
        this.chooseItemsDelegate = this.chooseItems.bind(this);
        this.inspectDelegate = this.displayDefault.bind(this);
    },
    
    displayDefault : function() {
        for(var ctr=0; ctr<this.items.length; ctr++) {
            var current = this.items[ctr];
            current.computeDelta();
        }
    },
    
    chooseItems : function(selectedItem) {
        if(arguments.length == 0) {
            selectedItem = this.getSelectedItems()[0];
        }
        
        if(!selectedItem.getIsSelected()) {
            var hasOtherSelected = false;
            
            for(var ctr=0; ctr<this.items.length; ctr++) {
                var current = this.items[ctr];
                //current.compareWith(selectedItem);
                if(current != selectedItem) {
                    if(current.getIsSelected()) {
                        hasOtherSelected = true;
                        break;
                    }
                }
            }
            
            if(!hasOtherSelected) {
                selectedItem.setIsSelected(true, this);
            }
        }
        
        selectedItem.computeDelta(); //(selectedItem);
    }
}

aspdnsf.Products.KitProductItemOptionalGroup = Class.create();
aspdnsf.Products.KitProductItemOptionalGroup.prototype = {

    initialize : function(id, groupCode) {
        Object.extend(this, new aspdnsf.Products.KitProductItemGroup(id, groupCode));
        
        this.chooseItemsDelegate = this.chooseItems.bind(this);
        this.inspectDelegate = this.chooseItems.bind(this);
    },
    
    unSelectAll : function() {
        for(var ctr=0; ctr<this.items.length; ctr++) {
            var current = this.items[ctr];
            current.setIsSelected(false, this);
        }
        
        this.chooseItems(null);
        
        this.onSelectionChanged();
    },
    
    chooseItems : function(selectedItem) {
        if(arguments.length == 0) {
            var selectedItems = this.getSelectedItems();
            if(selectedItems.length > 0) {
                selectedItem = selectedItems[0];
            }
            else {
                selectedItem = null;
            }
        }
        
        for(var ctr=0; ctr<this.items.length; ctr++) {
            var current = this.items[ctr];
            //current.compareWith(selectedItem);
            if(selectedItem) {
                if(current != selectedItem) {
                    current.setIsSelected(false, this);
                }
                
                current.compareWith(selectedItem);
            }
            else {
                current.computeDelta(); //(current);
            }
        }
    }
}


aspdnsf.Products.KitProduct = Class.create();
aspdnsf.Products.KitProduct.prototype = {

    initialize : function(id, itemCode, itemType) {
        Object.extend(this, new aspdnsf.Products.Product(id, itemCode, itemType));
        
        this.items = new Array();
        this.compositionChangedEventHandlers = new Array();
        this.groups = new Array();
        
        //this.vat = 1;
    },
    
    /*
    setVat : function(vat) {
        this.vat = vat;
    },
    
    getVat : function() {
        return this.vat;
    },
    */
    
    getGroup : function(id) {
        for(var ctr=0; ctr<this.groups.length; ctr++) {
            var group = this.groups[ctr];
            if(group.getId() == id) {
                return group;
            }
        }
        
        return null;
    },
    
    getGroups : function() {
        return this.groups;
    },
    
    getKitPrice : function() {
        var kitPrice = 0;
        
        for(var ctr=0; ctr<this.groups.length; ctr++) {
            var group = this.groups[ctr];
            var items = group.getSelectedItems();
            for(var ictr=0; ictr<items.length; ictr++) {
                var item = items[ictr];
                if(item) {
                    kitPrice += item.getPrice();
                }
            }
        }
        
        /*
        if(this.getHasVat() && this.getVatSetting() == aspdnsf.Constants.VAT_SETTING_INCLUSIVE) {
            kitPrice = kitPrice * ( 1 + (this.vat / 100) );
        }
        */
        
        return kitPrice;
    },
    
    getComposition : function() {
        var compositions = new Array();
        for(var gctr=0; gctr<this.groups.length; gctr++) {
            var group = this.groups[gctr];
            var items = group.getSelectedItems();
            for(var ictr=0; ictr<items.length; ictr++) {
                var item = items[ictr];
                //compositions.push(group.getGroupCode()+'+'+item.getItemCode());
                var itemId = Math.abs((this.id - item.getId()));
                compositions.push(group.getId()+'+'+itemId);
            }
        }
        
        return compositions;
    },
    
    persistComposition : function() {
        var compositions = this.getComposition();
        
        var items = document.getElementsByClassName('KitItems');
        items.each(
            function(elem, idx) {
                elem.value = compositions;
            }
        );
    },
    
    registerGroup : function(group) {
        if(group) {
            this.groups.push(group);
            group.addSelectionChangedEventHandler(this.groupSelectionChangedEventHandler.bind(this));
        }
    },
    
    groupSelectionChangedEventHandler : function() {
        this.onCompositionChanged();
    },
    
    addCompositionChangedEventHandler : function(handler) {
        this.compositionChangedEventHandlers.push(handler);
    },
    
    onCompositionChanged : function() {
        for(var ctr=0; ctr<this.compositionChangedEventHandlers.length; ctr++) {
            var handler = this.compositionChangedEventHandlers[ctr];
            handler(ctr);
        }
    }
    
}


// uses numberFormat154.js internally
aspdnsf.CurrencyFormatter = {
    
    initialize : function() {
        // set defaults
        this.symbol = '';
        this.decimalDigits = 2;
    },
    
    setSymbol : function(symbol) {
        this.symbol = symbol;
    },
    
    setDecimalDigits : function(digits) {   
        this.decimalDigits = digits;
    },
    
    format : function(price) {    
        var formatter = new NumberFormat(); 
        formatter.setCurrencyValue(this.symbol);
        formatter.setPlaces(this.decimalDigits, false);
        formatter.setInputDecimal('.');
        formatter.setCurrency(true);
        formatter.setCurrencyPosition(formatter.LEFT_OUTSIDE);
        formatter.setNegativeFormat(formatter.LEFT_DASH);
        formatter.setNegativeRed(false);
        formatter.setSeparators(true, ',', ',');
        formatter.setNumber(price);
        
        return formatter.toFormatted();
    }
    
}

aspdnsf.CurrencyFormatter.initialize();


aspdnsf.Products.PriceDeltaControl = Class.create();
aspdnsf.Products.PriceDeltaControl.prototype = {

    initialize : function(id, clientId) {
        this.id = id;
        this.ctrl = $(clientId);
    },
    
    setProduct : function(product) {
        if(product) {
            this.product = product;
            this.product.addDeltaPriceChangedEventHandler(this.controlDeltaPriceChangedEventHandler.bind(this));
            this.buildDisplay();
        }
    },
    
    buildDisplay : function() {
        if(this.product.getIsSelected()) {
            this.ctrl.innerHTML = aspdnsf.StringResource.getString('showproduct.aspx.100');
        }
        else {
            var delta = this.product.getDeltaPrice();
            var display = '';
            
            if(delta>=0) {
                display = aspdnsf.StringResource.getString('showproduct.aspx.14') + ' ' + aspdnsf.CurrencyFormatter.format(delta);
            }
            else {
                display = aspdnsf.StringResource.getString('showproduct.aspx.15') + ' ' + aspdnsf.CurrencyFormatter.format(Math.abs(delta));
            }
            
            if(this.product.getHasVat()) {
                display += ' <span class="VATLabel">' + aspdnsf.StringResource.getString('is_showproduct.aspx.56') + '</span>';
                /*
                if(this.product.getVatSetting() == aspdnsf.Constants.VAT_SETTING_EXCLUSIVE) {
                    display += ' <span class="VATLabel">' + aspdnsf.StringResource.getString('is_showproduct.aspx.56') + '</span>';
                    //display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                }
                else {
                    // sp4 support...
                    //display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                }
                */
            }
            
            /*
            if(this.product.getHasVat()) {
                if(this.product.getVatSetting() == aspdnsf.Constants.VAT_SETTING_EXCLUSIVE) {
                    display += ' <span class="VATLabel">' + aspdnsf.StringResource.getString('is_showproduct.aspx.56') + '</span>';
                    //display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                }
                else {
                    // sp4 support...
                    //display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                }
            }
            */
            
            this.ctrl.innerHTML = display;
        }
    },
    
    controlDeltaPriceChangedEventHandler : function(product) {
        this.buildDisplay();
    }

}

aspdnsf.Products.KitItemRadioControl = Class.create();
aspdnsf.Products.KitItemRadioControl.prototype = {
    
    initialize : function(id, clientId) {
        this.id = id;
        //this.name = name;
        
        this.ctrl = $(clientId);
        this.ctrl.onclick = this.onControlSelected.bind(this);
        
        this.product = null;
    },
    
    getId : function() {
        return this.id;
    },
    
    setProduct : function(product) {
        if(product) {
            this.product = product;
            if(this.product.addSelectedChangedEventHandler) {
                this.product.addSelectedChangedEventHandler(this.onProductSelectedChanged.bind(this));
            }
        }
    },

    getProduct : function() {
        return this.product;
    },
    
    onProductSelectedChanged : function() {
        this.ctrl.checked = this.product.getIsSelected();
    },
    
    onControlSelected : function() {
        if(this.product) {
            this.product.setIsSelected(this.ctrl.checked);
        }
    }
}

aspdnsf.Products.KitItemCheckBoxControl = Class.create();
aspdnsf.Products.KitItemCheckBoxControl.prototype = {

    initialize : function(id, clientId) {
        this.id = id;
        //this.name = name;
        
        this.ctrl = $(clientId);
        this.ctrl.onclick = this.onControlSelected.bind(this);
        
        this.product = null;
    },
    
    getId : function() {
        return this.id;
    },
    
    setProduct : function(product) {
        if(product) {
            this.product = product;
            this.product.addSelectedChangedEventHandler(this.onProductSelectedChanged.bind(this));
        }
    },

    getProduct : function() {
        return this.product;
    },
    
    onProductSelectedChanged : function() {
        this.ctrl.checked = this.product.getIsSelected();
    },
    
    onControlSelected : function() {
        if(this.product) {
            this.product.setIsSelected(this.ctrl.checked);
            //this.ctrl.checked = this.product.getIsSelected();
        }
    }
}

aspdnsf.Products.KitDropDownOptionControl = Class.create();
aspdnsf.Products.KitDropDownOptionControl.prototype = {
    
    initialize : function(id) {
        this.id = id;
        
        this.product = null;
        this.shouldDisplayPriceDelta = true;
    },
    
    getId : function() {
        return this.id;
    },
    
    setProduct : function(product) {
        if(product) {
            this.product = product;
        }
    },
    
    compareWith : function(other) {
        this.product.compareWith(other.product);
        /*
        var delta = 0;
        if(other == this) {
            delta = 0;
        }
        else {
            delta = this.getPrice() - other.getPrice();
        }
        
        this.setDeltaPrice(delta);
        */
    },
    
    getIsSelected : function() {
        return this.product && this.product.getIsSelected();
    },
    
    setIsSelected : function(included) {
        this.product.setIsSelected(included);
    },
    
    setShouldDisplayPriceDelta : function(shouldDisplay) {
        this.shouldDisplayPriceDelta = shouldDisplay;
    },
    
    getDisplay : function() {
        if(this.shouldDisplayPriceDelta && this.product) {
            if(this.product.getIsSelected()) {
                return this.product.getName();
            }
            else {
                var display = '';
                
                if(this.product.getDeltaPrice) {
                    var delta = this.product.getDeltaPrice();
                    
                    if(delta>=0) {
                        display = this.product.getName() +  ', ' + aspdnsf.StringResource.getString('showproduct.aspx.14') + ' ' + aspdnsf.CurrencyFormatter.format(delta);
                    }
                    else {
                        display = this.product.getName() +  ', ' + aspdnsf.StringResource.getString('showproduct.aspx.15') + ' ' + aspdnsf.CurrencyFormatter.format(Math.abs(delta));
                    }
                    
                    if(this.product.getHasVat()) {
                        display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                    }
                }
                else {
                    display = this.product.getName();
                }
                
                return display;
            }
        }
        else {
            return this.product.getName();
        }
    }

}

aspdnsf.Products.KitDropDownGroupControl = Class.create();
aspdnsf.Products.KitDropDownGroupControl.prototype = {

    initialize : function(id, clientId) {
        this.id = id;
        this.ctrl = $(clientId);
        this.ctrl.onchange = this.onOptionChanged.bind(this);
        
        this.controls = new Array();
    },
    
    getId : function() {
        return this.id;
    },
    
    registerControl : function(control) {
        if(control) {
            this.controls.push(control);
            if(control.getIsSelected()) {
                this.selectedControl = control;
            }
        }
    },
    
    onOptionChanged : function() {
        var index = this.ctrl.selectedIndex;
        if(index < this.controls.length) {
            this.selectedControl = this.controls[index];
            this.selectedControl.setIsSelected(true);
        }
        
        /*
        for(var ctr=0; ctr<this.controls.length; ctr++) {
            var currentControl = this.controls[ctr];
            if(currentControl != this.selectedControl) {
                currentControl.setIsSelected(false);
            }
            
            currentControl.compareWith(this.selectedControl);
        }
        */
        
        this.buildDisplay();
    },
    
    buildDisplay : function() {
        if(this.controls.length == 0) return;
        
        if(this.selectedControl) {
            this.ctrl.options.length = 0;
                        
            var index = 0;
            
            for(var ctr=0; ctr<this.controls.length; ctr++) {
                var currentControl = this.controls[ctr];
                if(currentControl == this.selectedControl) {
                    index = ctr;
                }
                this.ctrl.options[ctr] = new Option(currentControl.getDisplay(), currentControl.getId());
            }
            
            this.ctrl.selectedIndex = index;
        }
        else {
            this.selectedControl = this.controls[0];
            //this.refreshView();
        }
    }
    
}

aspdnsf.Products.KitProductNoneItem = Class.create();
aspdnsf.Products.KitProductNoneItem.prototype = {

    initialize : function(selected) {
        this.selected = selected;
        this.group = null;
    },
    
    setGroup : function(group) {
        this.group = group;
    },
    
    getName : function() {
        return "None";
    },
    
    setIsSelected : function(selected) {
        if(selected) {
            this.group.unSelectAll();
        }
        this.selected = selected;
    },
    
    getIsSelected : function() {
        return this.selected;
    }
    
}



aspdnsf.Products.KitPriceControl = Class.create();
aspdnsf.Products.KitPriceControl.prototype = {

    initialize : function(id, clientId) {
        this.id = id;
        this.ctrl = $(clientId);
        //this.basePrice = basePrice;
        this.kitProduct = null;
        this.lblPrice = $(clientId + '_Price');
        //this.lblCustomizedPrice = $(clientId + '_CustomizedPrice');
        //this.lblLevelPrice = $(clientId + '_LevelPrice');
        //this.customerHasLevel = false;
        //this.customerLevel = '';
        //this.vatEnabled = false;
        //this.vatInclusive = false;
        
        //this.displayEventHandlers = new Array();
    },

    setKitProduct : function(kitProduct) {
        if(kitProduct) {
            this.kitProduct = kitProduct;
            this.kitProduct.addCompositionChangedEventHandler(this.kitCompositionChangedEventHandler.bind(this));
            this.buildDisplay();
        }
        else {
            aspdnsf.Products.ProductController.addObserver(this);
        }
    },
    
    notify : function(product) {
        if(product.getId() == this.id) {
            this.setKitProduct(product);
        }
    },
    
    kitCompositionChangedEventHandler : function() {
        this.buildDisplay();
    },
    
    /*
    addDisplayEventHandler : function(handler) {
        this.displayEventHandlers.push(handler);
    },
    */
    
    buildDisplay : function() {
        this.lblPrice.innerHTML = '';
        
        if( this.kitProduct.getHasVat() &&
            this.kitProduct.getVatSetting() == aspdnsf.Constants.VAT_SETTING_INCLUSIVE ) {
            
            var lblPriceLabel = document.createElement('SPAN');
            lblPriceLabel.innerHTML = aspdnsf.StringResource.getString('is_showproduct.aspx.47');
            this.lblPrice.appendChild(lblPriceLabel);
            
            var lblPriceValue = document.createElement('SPAN');
            lblPriceValue.innerHTML = '<i>updating...<i>';
            this.lblPrice.appendChild(lblPriceValue);
            
            var params = "ItemCode=" + this.kitProduct.getItemCode() + "&ItemType=" + this.kitProduct.getItemType() + "&UMCode=EACH" + "&KitItems=" + this.kitProduct.getComposition();
            
            var req = new Ajax.Request('action.axd?action=itemPrice',
                {
                    method : 'post',
                    parameters : params,
                    onSuccess : function(transport) {
                        lblPriceValue.innerHTML = transport.responseText + ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.57');
                    },
                    onFailure : function(transport) {
                        alert(transport.responseText);
                    }
                }
            );
            
        }
        else {
            var kitPrice = this.kitProduct.getKitPrice();
            
            var lblPriceValue = document.createElement('SPAN');
            lblPriceValue.innerHTML = aspdnsf.StringResource.getString('is_showproduct.aspx.47') + ' ' + aspdnsf.CurrencyFormatter.format(kitPrice);
            this.lblPrice.appendChild(lblPriceValue);
            
            if(this.kitProduct.getHasVat()) {
                var lblVat = document.createElement('SPAN');
                lblVat.innerHTML = '&nbsp;' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
                lblVat.className = 'VATLabel';
                this.lblPrice.appendChild(lblVat);
                    
//                if(this.kitProduct.getVatSetting() == aspdnsf.Constants.VAT_SETTING_EXCLUSIVE) {
//                    var lblVat = document.createElement('SPAN');
//                    lblVat.innerHTML = ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
//                    lblVat.className = 'VATLabel';
//                    this.lblPrice.appendChild(lblVat);
//                }
//                else {
//                    // sp4 support...
//                    //display += ' ' + aspdnsf.StringResource.getString('is_showproduct.aspx.56');
//                }
            }
        }
        
        //alert(this.lblPrice.innerHTML);
    }
    
    /*
    onDisplay : function() {
        for(var ctr=0; ctr<this.displayEventHandlers.length; ctr++) {
            var handler=this.displayEventHandlers[ctr];
            handler(this);
        }
    }
    */

}


aspdnsf.Products.KitDetailsControl = Class.create();
aspdnsf.Products.KitDetailsControl.prototype = {
    
    initialize : function(id) {
        this.id = id;
        
        this.lnkHeader = $('lnkKitDetailHeader_' + id);
        this.lnkHeader.onclick = this.onHeaderLinkClicked.bind(this);
        
        this.pnlDetails = $('pnlKitDetails_' + id);
        
        //this.kitControl = null;
        this.kitProduct = null;
    },
    
    setKitProduct : function(kitProduct) {
        this.kitProduct = kitProduct;
        this.kitProduct.addCompositionChangedEventHandler(this.kitCompositionChangedEventHandler.bind(this));
        this.buildDisplay();
    },
    
    /*
    setKitControl : function(control) {
        this.kitControl = control;
        
        this.kitControl.addCompositionChangedEventHandler(this.kitCompositionChangedEventHandler.bind(this));
        this.buildDisplay();
    },
    */
    
    onHeaderLinkClicked : function() {
        if(this.pnlDetails.style.display == "") {
            this.lnkHeader.innerHTML = aspdnsf.StringResource.getString('is_showproduct.aspx.45');
            this.pnlDetails.style.display = "none";
        }
        else {
            this.lnkHeader.innerHTML = aspdnsf.StringResource.getString('is_showproduct.aspx.46');
            this.pnlDetails.style.display = "";
        }
    },
    
    kitCompositionChangedEventHandler : function() {
        this.buildDisplay();
    },
    
    buildDisplay : function() {
        this.pnlDetails.innerHTML = '';
        
        var ul = document.createElement('ul');
        this.pnlDetails.appendChild(ul);
        
        var kitGroups = this.kitProduct.getGroups();
        for(var gctr=0; gctr<kitGroups.length; gctr++) {
            var currentGroup = kitGroups[gctr];                
            var items = currentGroup.getSelectedItems();
            for(var ictr=0; ictr<items.length; ictr++) {
                var item = items[ictr];
                var li = document.createElement('li');
                li.innerHTML = item.getName();
                
                ul.appendChild(li);
            }
        }
    }
}

