/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @copyright  Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
if(typeof Product=='undefined') {
    var Product = {};
}
/**************************** BUNDLE PRODUCT **************************/
Product.Bundle = Class.create();
Product.Bundle.prototype = {
    initialize: function(config){
        this.config = config;
        this.reloadPrice();
    },
    changeSelection: function(selection){
        parts = selection.id.split('-');
        if (this.config['options'][parts[2]].isMulti) {
            selected = new Array();
            if (selection.tagName == 'SELECT') {
                for (var i = 0; i < selection.options.length; i++) {
                    if (selection.options[i].selected && selection.options[i].value != '') {
                        selected.push(selection.options[i].value);
                    }
                }
            } else if (selection.tagName == 'INPUT') {
                selector = parts[0]+'-'+parts[1]+'-'+parts[2];
                selections = $$('.'+selector);
                for (var i = 0; i < selections.length; i++) {
                    if (selections[i].checked && selections[i].value != '') {
                        selected.push(selections[i].value);
                    }
                }
            }
            this.config.selected[parts[2]] = selected;
        } else {
            if (selection.value != '') {
                this.config.selected[parts[2]] = new Array(selection.value);
            } else {
                this.config.selected[parts[2]] = new Array();
            }
            this.populateQty(parts[2], selection.value);
        }
        this.reloadPrice();

    },

    reloadPrice: function() {
        var calculatedPrice = 0;
        var dispositionPrice = 0;
        for (var option in this.config.selected) {
            if (this.config.options[option]) {
                for (var i=0; i < this.config.selected[option].length; i++) {
                    var prices = this.selectionPrice(option, this.config.selected[option][i]);
                    calculatedPrice += Number(prices[0]);
                    dispositionPrice += Number(prices[1]);
                    if (optionsSinglePrices[option]) {
                      optionsSinglePrices[option].changePrice('product', Number(prices[0]));
                      optionsSinglePrices[option].reload();
                    }
                }
            }
            
        }

        if (this.config.specialPrice) {
            var newPrice = (calculatedPrice*this.config.specialPrice)/100;
            calculatedPrice = Math.min(newPrice, calculatedPrice);
        }

        optionsPrice.changePrice('bundle', calculatedPrice);
        optionsPrice.changePrice('nontaxable', dispositionPrice);
        optionsPrice.reload();

        return calculatedPrice;
    },

    selectionPrice: function(optionId, selectionId) {
        if (selectionId == '' || selectionId == 'none') {
            return 0;
        }

        /* BTD change: do not change qty from bundle logic */
        /*
        if (this.config.options[optionId].selections[selectionId].customQty == 1 && !this.config['options'][optionId].isMulti) {
            if ($('bundle-option-' + optionId + '-qty-input')) {
                qty = $('bundle-option-' + optionId + '-qty-input').value;
            } else {
                qty = 1;
            }
        } else {
            qty = this.config.options[optionId].selections[selectionId].qty;
        }
        */
        
        if ($('bundle-option-' + optionId + '-qty-input')) {
            qty = $('bundle-option-' + optionId + '-qty-input').value;
        } else {
            qty = 1;
        }

        if (this.config.priceType == '0') {
            price = this.config.options[optionId].selections[selectionId].price;
            tierPrice = this.config.options[optionId].selections[selectionId].tierPrice;

            for (var i=0; i < tierPrice.length; i++) {
                if (Number(tierPrice[i].price_qty) <= qty && Number(tierPrice[i].price) <= price) {
                    price = tierPrice[i].price;
                }
            }
        } else {
            selection = this.config.options[optionId].selections[selectionId];
            if (selection.priceType == '0') {
                price = selection.priceValue;
            } else {
                price = (this.config.basePrice*selection.priceValue)/100;
            }
        }
        //price += this.config.options[optionId].selections[selectionId].plusDisposition;
        //price -= this.config.options[optionId].selections[selectionId].minusDisposition;
        //return price*qty;
        var disposition = this.config.options[optionId].selections[selectionId].plusDisposition +
            this.config.options[optionId].selections[selectionId].minusDisposition;

        var result = new Array(price*qty, disposition*qty);
        return result;
    },

    populateQty: function(optionId, selectionId){
        /*
        if (selectionId == '' || selectionId == 'none') {
            this.showQtyInput(optionId, '0', false);
            return;
        }
        if (this.config.options[optionId].selections[selectionId].customQty == 1) {
            this.showQtyInput(optionId, this.config.options[optionId].selections[selectionId].qty, true);
        } else {
            this.showQtyInput(optionId, this.config.options[optionId].selections[selectionId].qty, false);
        }
        */
    },

    showQtyInput: function(optionId, value, canEdit) {
        elem = $('bundle-option-' + optionId + '-qty-input');
        elem.value = value;
        elem.disabled = !canEdit;
        if (canEdit) {
            elem.removeClassName('qty-disabled');
        } else {
            elem.addClassName('qty-disabled');
        }
    },

    changeOptionQty: function (element, event, inputid) {
        var checkQty = true;
        if (typeof(event) != 'undefined') {
            if (event.keyCode == 8 || event.keyCode == 46) {
                checkQty = false;
            }
        }
        if (checkQty && (Number(element.value) == 0 || isNaN(Number(element.value)))) {
            /* BTD change: allow zero option */
            //element.value = 1;
            element.value = 0;
        }
        
        var form_elem = $(inputid);
        if(form_elem) form_elem.value = element.value;
        
        parts = element.id.split('-');
        optionId = parts[2];
        if (!this.config['options'][optionId].isMulti) {
            selectionId = this.config.selected[optionId][0];
            if(!selectionId) return
            this.config.options[optionId].selections[selectionId].qty = element.value*1;
            this.reloadPrice();
        }
    },

    validationCallback: function (elmId, result){
        if (typeof elmId == 'undefined') {
            return;
        }
        var container = $(elmId).up('ul.options-list');
        if (typeof container != 'undefined') {
            if (result == 'failed') {
                container.removeClassName('validation-passed');
                container.addClassName('validation-failed');
            } else {
                container.removeClassName('validation-failed');
                container.addClassName('validation-passed');
            }
        }
    }
    
}

Product.SpecialQtyOptions = Class.create();
Product.SpecialQtyOptions.prototype = {
    initialize: function(config, bndle, select){
        this.config = config;
        this.bndle = bndle;
        this.select_elm = select;
        this.default_elm = '';
        for (var elm in this.config) {
          
          if(this.default_elm == '') {
            this.default_elm = elm; // use first element if no default is selected
          }
            
          if(this.config[elm].is_default == 1) {
            this.default_elm = elm;
          }
            
        }
    },
    
    changeQtys: function (elmId, event) {
      
      if(elmId == '') return;
      
      for (var qty in this.config[elmId].qty) {
        var input = $('bundle-option-' + qty +'-qty-input');
        if(!input) continue;
        
        input.value = this.config[elmId].qty[qty];
        if(this.bndle != undefined)
          this.bndle.changeOptionQty(input, event, 'input-option-' + qty +'-qty');
      }
      
    },
    initQtys: function() {
      
      this.changeQtys(this.default_elm);
      
      if(!this.select_elm) return;
      for(var i=0; i<this.select_elm.options.length; i++) {
        if(this.select_elm.options[i].value == this.default_elm) {
          this.select_elm.options[i].selected = true;
        } else {
          this.select_elm.options[i].selected = false;
        } 
      }
      
    }
}

Product.BundleSelection = Class.create();
Product.BundleSelection.prototype = {
    initialize: function(oid, config, bndle) {
        this.option_id = oid;
        this.prefix = 'bundle-option-';
        this.bndle = bndle;
        this.default_elm = config.default_num;
        this.selections = config.selections;  
    },
    updateSelection: function(num) {
        var cfg = this.selections[num];
        var sel_obj = $(this.prefix + this.option_id);
        
        if(sel_obj == undefined && cfg == undefined) return;
  
        for (i = 0; i < sel_obj.length; i++) {
          if(sel_obj.options[i].value == num) {
              sel_obj.options[i].selected = true;
          }
        }
  
        for (var e in cfg) {
          var elem = document.getElementById(this.prefix + this.option_id + '-current-' + e);
          if(!elem) continue;
          
          if(elem.value != undefined)
            elem.value = cfg[e];
          else 
            elem.innerHTML = cfg[e];
          
        }

        this.bndle.changeSelection(sel_obj);
    },
    resetSelection: function() {
        this.updateSelection(this.default_elm);
    }
}