/*
 * Copyright (c) 2006 - 2011, evucom. All Rights Reserved.
 */

// Evushop scripts, created by Danny Gehl

var MiniCart = {

    id: "minicart",
    ctr: "minicartcnt",

    add : function(url, productId, quantity, rootId) {
        if (!navigator.cookieEnabled) {
            var minicart = $(MiniCart.ctr);
            var text = $("CookiesDisableText");
            if (minicart && text) {
                minicart.innerHTML = text.innerHTML;
                new Effect.Pulsate(minicart, {duration:2, pulses: 5});
            }
            return false;
        }
        return true;
    }
};

var ShippingUtils = {

    copy : true,

    setState : function(enabled, form, namePrefix) {
        ShippingUtils.copy = !enabled;
        if (enabled) {
            $('shippingaddress').removeClassName("readOnly");
        } else {
            $('shippingaddress').addClassName("readOnly");
        }
        for (var i = 0; i < form.elements.length; i++) {
            var elem = form.elements[i];
            if (elem.name && elem.name.indexOf(namePrefix) > -1) {
                if (enabled) {
                    elem.removeAttribute("readonly");
                } else {
                    elem.setAttribute("readonly", "readonly");
                }
                ShippingUtils.handleRadio(elem);
            }
        }
    },

    handleRadio : function(elem) {
        if (elem.getAttribute("type") == 'radio') {
            if (ShippingUtils.copy) {
                elem.style.display = 'none';
                if (!elem.checked) {
                    elem.parentNode.style.display = 'none';
                } else {
                    elem.parentNode.style.display = 'inline';
                    if (elem.click) {
                        elem.click();
                    }
                }
            } else {
                elem.style.display = 'inline';
                elem.parentNode.style.display = 'inline';
            }
        }
    },

    copyBillingAddress: function(form, copyFromPrefix) {
        if (ShippingUtils.copy) {
            for (var i = 0; i < form.elements.length; i++) {
                if (form.elements[i].name
                        && form.elements[i].name.indexOf(copyFromPrefix) > -1) {
                    var target = form.elements[form.elements[i].name.replace("billingAddress", "shippingAddress")];
                    if (target) {
                        if (form.elements[i].checked) {
                            for (var j = 0; j < target.length; j++) {
                                if (form.elements[i].value.replace("billingAddress", "shippingAddress")
                                        == target[j].value) {
                                    target[j].checked = true;
                                } else {
                                    target[j].checked = false;
                                }
                                ShippingUtils.handleRadio(target[j]);
                            }
                        } else {
                            target.value = form.elements[i].value;
                        }
                    }
                }
            }
        }
    }

};

var PaymentSelector = {

    elements : new Array(),

    activate : function(selection) {
        for (var i = 0; i < PaymentSelector.elements.length; i++) {
            var node = $("name_" + PaymentSelector.elements[i]);
            var fields = $("fields_" + PaymentSelector.elements[i]);
            if (PaymentSelector.elements[i] != selection) {
                if (node && node.visible()) {
                    node.hide();
                }
                if (fields && fields.visible()) {
                    fields.hide();
                }
            } else {
                if (fields) {
                    fields.show();
                }
                if (node) {
                    node.show();
                }
            }
        }
    }
};

var Bundle = Class.create({

    initialize: function(amount_id, amount, id) {
        this.toCheck = new Array();
        this.bundleAmount = amount;
        this.amountElem = $(amount_id);
        this.amountElem.onchange = this.checkAmount.bind(this);
        this.amountElem.onkeyup = this.checkAmount.bind(this);
        this.amount = this.bundleAmount * this.amountElem.value;
        var elems = $$('input[type=text]');
        for (var i = 0,count = elems.length; i < count; i++) {
            if (elems[i].id.startsWith(id)) {
                elems[i].onchange = this.check.bind(this);
                elems[i].onkeyup = this.check.bind(this);
                this.toCheck.push(elems[i]);
            }
        }
        this.hint1 = $(id + '_hint1');
        this.hint2 = $(id + '_hint2');
        this.msg1 = $('BundleMsg1').innerHTML;
        this.msg2 = $('BundleMsg2').innerHTML;
        this.msgError = $('BundleError').innerHTML;
        document.observe("dom:loaded", this.check.bind(this));
    },
    check : function() {
        var sum = 0;
        for (var i = 0,count = this.toCheck.length; i < count; i++) {
            var val = Number(this.toCheck[i].value);
            if (!isNaN(val)) {
                sum += val;
            }
        }
        if (sum > this.amount) {
            this.hint2.addClassName('error');
            this.hint2.innerHTML = this.msgError.replace(/\[0\]/g, parseInt(this.amount));
        } else {
            this.hint2.removeClassName('error');
            if (sum == this.amount) {
                this.hint2.innerHTML = '';
            } else {
                this.hint2.innerHTML = this.msg2.replace('[0]', parseInt(this.amount
                        - sum));
            }
        }
    },
    checkAmount: function() {
        this.amount = this.bundleAmount * this.amountElem.value;
        this.hint1.innerHTML = this.msg1.replace('[0]', parseInt(this.amount));
        this.check();
    }
});

Lightbox.prototype.changeImage = function(imageNum) {
    this.activeImage = imageNum; // update global var
    if (!this.ajaxContainer) {
        this.imageContainer.appendChild(Builder.node('div', {id:'ajaxContainer'}));
        this.ajaxContainer = $('ajaxContainer');
        this.backupShowImage = this.showImage;
    }
    this.outerImageContainer.removeClassName("ajaxContent");
    this.outerImageContainer.removeClassName("disableNav");
    this.ajaxContainer.innerHTML = '';
    this.ajaxContainer.hide();

    // hide elements during transition
    if (LightboxOptions.animate) this.loading.show();
    this.lightboxImage.hide();
    this.hoverNav.hide();
    this.prevLink.hide();
    this.nextLink.hide();
    // HACK: Opera9 does not currently support scriptaculous opacity and appear fx
    this.imageDataContainer.setStyle({opacity: .0001});
    this.numberDisplay.hide();

    var url = this.imageArray[this.activeImage][0];
    if (url.include(".htm")) {
        var parts = url.split("#");
        if (parts.length > 1) {
            url = parts[0];
        }
        this.showImage = function() {
            this.loading.hide();
            new Effect.Appear(this.ajaxContainer, {
                duration: this.resizeDuration,
                queue: 'end',
                afterFinish: (function() {
                    this.updateDetails();
                    if (parts.length > 1) {
                        var elem = $(parts[1]);
                        if (elem) {
                            $('imageContainer').scrollTop = elem.offsetTop;
                        }
                    }
                }).bind(this)
            });
        }.bind(this);
        new Ajax.Updater(this.ajaxContainer, url, {
            onComplete: function () {
                var y = Element.getDimensions(this.ajaxContainer).height;
                if (y > 500) {
                    y = 500;
                    $('outerImageContainer').addClassName("ajaxContent");
                }
                $('outerImageContainer').addClassName("disableNav");
                this.resizeImageContainer(500, y);
            }.bind(this),
            method: 'get',
            parameters: 'fragment=true'
        });
    } else {
        this.showImage = this.backupShowImage;
        var imgPreloader = new Image();

        // once image is preloaded, resize image container


        imgPreloader.onload = (function() {
            this.lightboxImage.src = this.imageArray[this.activeImage][0];
            this.resizeImageContainer(imgPreloader.width, imgPreloader.height);
        }).bind(this);
        imgPreloader.src = this.imageArray[this.activeImage][0];
    }
};

var ErrorHandler = {
    focusFirst : function() {
        var elem = $$('div.error');
        if (elem != null && elem.length > 0) {
            elem[0].scrollTo();
        }
    }
};

var SubmitHandler = {
    enhance : function() {
        $$(".quantitycolumn input[type=text]").each(function (elem) {
            elem.observe("keydown", SubmitHandler.submit('evu_CartForm_update'));
        });
        var coupon = $('evu_CartForm_couponCode');
        if (coupon) {
            coupon.observe("keydown", SubmitHandler.submit('evu_CartForm_submitCouponCode'));
        }
    },

    submit: function(name) {
        return function (event) {
            if (event.keyCode == 13) {
                var elem = $$('input[name=' + name + ']')[0];
                if (elem) {
                    event.stop();
                    elem.click();
                    return false;
                }
            }
        }
    }
};

var Cookie = {
    get: function(name) {
        var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
        return (cookie ? unescape(cookie[2]) : null);
    }
};

var CustomPriceHandler = {
    load: function() {
        if ('1' != Cookie.get("cp")) return;
        var scale = $('priceScales');
        if (scale) {
            var idField = $$('input[name=ProductId]')[0];
            var price = $('price');
            if (!idField || !price) return;
            new Ajax.Request('/customer/CustomPrice.htm',
            {
                parameters:'p=' + idField.value,
                onSuccess: function(response) {
                    var e = new Element('div').insert(response.responseText);
                    var p = e.select('.price')[0];
                    var s = e.select('.priceScales')[0];
                    price.innerHTML = p.innerHTML;
                    scale.innerHTML = s.innerHTML;
                }
            });
        } else {
            var ids = '';
            $$('input[name=ProductId]').each(function(idField) {
                if (ids != '') ids += ',';
                ids += idField.value;
            });
            if (ids == '') return;
            new Ajax.Request('/customer/CustomPrice.htm',
            {
                parameters:'ps=' + ids,
                onSuccess: function(response) {
                    var e = new Element('div').insert(response.responseText);
                    $$('input[name=ProductId]').each(function(idField) {
                        var p = e.select('#p_' + idField.value +' .price')[0];
                        var s = e.select('#p_' + idField.value +' .priceScales')[0];
                        var price = $('price_' + idField.value);
                        var scale = $('priceScale_' + idField.value);
                        if (p && price) {
                            price.innerHTML = p.innerHTML;
                        }
                        if (s && scale) {
                            scale.innerHTML = s.innerHTML;
                        }
                    });
                }
            });

        }
    }
};
var DropdownNavigation = {
    load: function() {
        var ddn = $('ddn');
        if (!ddn) return;
        var count = $F('ddn_count') - 1;
        var i = 1;
        ddn.select('select').each(function(e) {
            var toUpdate = 'ddn_c' + i;
            var p = (i == count);
            var last = i > count;
            e.observe('change', function(event) {
                if (last) {
                    window.location = $F('ddn_dest') + "?m=set&RootId=" + $F(e);
                } else {
                    new Ajax.Updater(toUpdate, ddn.action, {
                        parameters: { s: $F(e), p: p}
                    });
                }
            });
            i++;
        });
    }
};
document.observe("dom:loaded", function() {
    ErrorHandler.focusFirst();
    SubmitHandler.enhance();
    CustomPriceHandler.load();
    DropdownNavigation.load();
});

