document.spinnerPath = document.spinnerPath || '/static/images/einvite/UI/spinner.gif';
document.closeButtonPath = document.closeButtonPath || "/static/images/einvite/UI/close-button.png";

document.showProductPopUp = function(id) {
    $$(".productInfoHover").each(function(e) {
        e.style.display = "none";
    });
    var elem = $(id);
    elem.style.display = "";
};

document.gt = function(a, b) {
    return a > b;
};
document.ge = function(a, b) {
    return a >= b;
};
document.lt = function(a, b) {
    return a < b;
};
document.le = function(a, b) {
    return a <= b;
};
document.compare = function(a, operator, b) {
    if (operator == 'gt' || operator == document.gt) {
        return document.gt(a, b);
    }
    if (operator == 'ge' || operator == document.ge) {
        return document.ge(a, b);
    }
    if (operator == 'lt' || operator == document.lt) {
        return document.lt(a, b);
    }
    if (operator == 'le' || operator == document.le) {
        return document.le(a, b);
    }
};

document.relExternaler = function() {
    $$("a[rel=external]").each(function(el) {
        el.target = "_external";
        el.onclick = function() {
            window.open(el.href);
            return false;
        };
    });
};

document.html5er = function() {
    var i = document.createElement("input");
    i.setAttribute("type", "color");
    var htmlFiveEnabled = i.type != "text";
    $$(".placeholder").each(function(el) {
        if (el.defaultValue && el.defaultValue != '' && el.value && el.value != '' && !(el.placeholder && el.placeholder != '')) {
            if (htmlFiveEnabled) {
                el.placeholder = el.defaultValue;
                el.value = "";
            } else {
                if (window.attachEvent) {
                    el.attachEvent("onfocus", function() {if(el.value==el.defaultValue) {el.value=''; el.removeClassName('placeholder')}});
                    el.attachEvent("onblur", function() {if(el.value=='') {el.value=el.defaultValue; el.addClassName('placeholder')}});
                    el.attachEvent("onclick", function() {el.select();});
                } else {
                    el.observe("focus", function() {if(el.value==el.defaultValue) {el.value=''; el.removeClassName('placeholder')}});
                    el.observe("blur", function() {if(el.value=='') {el.value=el.defaultValue; el.addClassName('placeholder')}});
                    el.observe("click", function() {el.select();});
                }
            }
        }
    });
    i = document.createElement("input");
    i.setAttribute("type", "email");
    htmlFiveEnabled = i.type != "text";
    $$(".email").each(function(el) {
        if (htmlFiveEnabled && el.tagName.toLowercase && el.tagName.toLowercase() == 'input') {
            el.type = "email";
        }
    });
    i = document.createElement("input");
    i.setAttribute("type", "search");
    htmlFiveEnabled = i.type != "text";
    $$(".search").each(function(el) {
        if (htmlFiveEnabled && el.tagName.toLowercase && el.tagName.toLowercase() == 'input') {
            el.type = "search";
        }
    });
    //TODO: test for HTML5 required
    $$(".required").each(function(el) {
        if (htmlFiveEnabled && el.tagName.toLowercase && el.tagName.toLowercase() == 'input') {
            el.required = "required";
        }
    });
    //TODO: test for HTML5 autocomplete
    $$(".autocomplete").each(function(el) {
        if (htmlFiveEnabled && el.tagName.toLowercase && el.tagName.toLowercase() == 'input') {
            el.autocomplete = "on";
        }
    });
};

document.isKeyPressEnter = function() {
    return window.event && (window.event.keyCode == 10 || window.event.keyCode == 13);
};

document.isTouchDevice = function() {
    var el = document.createElement('div');
    el.setAttribute('ongesturestart', 'return;');
    if (typeof el.ongesturestart == "function"){
        document.touchDevice = true;
        return true;
    } else {
        document.touchDevice = false;
        return false
    }
};

document.newSpinner = function(params) {
    var marginTop = params && params.marginTop ? params.marginTop : 0;
    var marginLeft = params && params.marginLeft ? params.marginLeft : 0;
    return new Element('img', {src: document.spinnerPath, alt: 'Loading...', width: '20px', height: '20px', "class": "spinner", style: 'margin-left: ' + marginLeft + 'px; margin-top: ' + marginTop + 'px;'});
};

document.spinnerReplace = function(element) {
    if (element && $(element)) {
        try {
            var marginLeft = -10;
            var marginTop = -5;
            if (element.tagName && element.tagName.toLowercase && element.tagName.toLowercase() == 'a') {
                marginLeft = -1 * ((element.getWidth() / 2.0) + 10);
                marginTop = 10;
                element.setOpacity(0.7);
                element.addClassName("spun");
            }
            var spinner = document.newSpinner({marginTop: marginTop, marginLeft: marginLeft});
            $(element).insert({after: spinner});
            spinner.absolutize();
        } catch (e) {
            //ignore
        }
    }
};

document.spinnerHide = function() {
    $$(".spinner").each(Element.hide);
    $$(".spun").each(function(element){element.setOpacity(1);});
};

document.expandThemOnClick = function(it) {
    $(it).childElements().each(function(e) {
        if (e.hasClassName('expandMeOnHover') || e.hasClassName('expandItOnClick')) {
            if (e.visible()) {
                e.hide();
            } else {
                e.show();
            }
        }
    });
};

document.displayError = function(error) {
    var errorHolder = $("errorHolder") ? $("errorHolder") : new Element("div", {"id": "errorHolder", "class": "window", "style": "display: none; position: fixed; z-index: 3333; left: 480px; top: 330px; width: 400px; height: 300px;"});
    errorHolder.innerHTML = "";
    var errorHolderInner = new Element("div", {"class": "windowContent", "style": "min-height: 95%;"});
    errorHolder.appendChild(errorHolderInner);
    var errorTitle = new Element("p", {"class": "bold", "style": "padding: 25px;"})
    errorTitle.update("Error");
    errorHolderInner.appendChild(errorTitle);
    var errorClose = new Element("span", {"style": "position: absolute; right: 10px; top: 10px; cursor: pointer;"})
    errorClose.update("X");
    errorHolderInner.appendChild(errorClose);
    errorClose.observe("click", function() {
        new Effect.Fade($("errorHolder"));
    });
    var errorContent = new Element("div", {"style": "padding: 50px 25px 25px 25px;"});
    errorHolderInner.appendChild(errorContent);
    var errorMessage = new Element("p");
    errorMessage.update(error);
    errorContent.appendChild(errorMessage);
    document.body.appendChild(errorHolder);
    new Effect.Appear(errorHolder);
    //errorHolder.absolutize();
};

document.loadedCartInfoExpandedTop = false;
document.loadedCartInfoExpandedBottom = false;
document.cartQuickViewDismissed = false;

document.showCartQuickViewTop = function() {
    if (!document.loadedCartInfoExpandedTop) {
        var expandedId = "cartInfoExpandedTop";
        var expanded = $(expandedId);
        var expandedPlaceholder = new Element("div", {"style": "position: absolute; z-index: 19; right: 200px;"});
        expandedPlaceholder.appendChild(document.newSpinner());
        expanded.appendChild(expandedPlaceholder);
        new Ajax.Updater(expandedId, '/cart/quickview/', {method: 'get'});
        document.loadedCartInfoExpandedTop = true;
    }
};
document.showNewlyAddedToCart = function(newlyAdded) {
    document.cartQuickViewDismissed = false;
    document.showCartQuickViewTop();
    var expandedId = "cartInfoExpandedTop";
    var expanded = $(expandedId);
    var expandedPlaceholder = new Element("div", {"style": "position: absolute; z-index: 19; right: 200px;"});
    expandedPlaceholder.appendChild(document.newSpinner());
    expanded.appendChild(expandedPlaceholder);
    new Ajax.Updater(expandedId, '/cart/quickview/?newlyAdded=' + newlyAdded, {method: 'get'});
    document.loadedCartInfoExpandedTop = true;
};
document.clearCartQuickViewTop = function() {
    document.loadedCartInfoExpandedTop = false;
    $('cartInfoExpandedTop').innerHTML = "";
};

document.showCartQuickViewBottom = function() {
    if (!document.loadedCartInfoExpandedBottom) {
        var expandedId = "cartInfoExpandedBottom";
        var expanded = $(expandedId);
        var expandedPlaceholder = new Element("div", {"style": "position: absolute; z-index: 19; right: 200px;"});
        expandedPlaceholder.appendChild(document.newSpinner());
        expanded.appendChild(expandedPlaceholder);
        new Ajax.Updater(expandedId, '/cart/quickview/', {method: 'get'});
        document.loadedCartInfoExpandedBottom = true;
    }
};
document.clearCartQuickViewBottom = function() {
    document.loadedCartInfoExpandedBottom = false;
    $('cartInfoExpandedBottom').innerHTML = "";
};

document.showEnsembleQuickView = function(ensembleKey) {
    var quickViewId = "quickView-" + ensembleKey;
    var quickView = $(quickViewId);
    if (quickView.loaded) {
        new quickView.show();
    } else {
        quickView.addClassName("window");
        quickView.style.position = "absolute";
        quickView.style.top = "-187px";
        quickView.style.left = "-137px";
        quickView.style.zIndex = 2222;
        quickView.style.width = "600px";
        quickView.setOpacity(0.7);
        var quickViewCloseId = "quickViewClose-" + ensembleKey;
        var quickViewClose = new Element("a", {"id": quickViewCloseId, "style": "float: right; cursor: pointer;"});
        var quickViewCloseImage = new Element("img", {"src": document.closeButtonPath, "alt": "Close"});
        quickViewClose.appendChild(quickViewCloseImage);
        quickViewClose.observe("click", function() {
            $(quickViewId).hide()
        });
        quickView.appendChild(quickViewClose);
        var quickViewContentId = "quickViewContent-" + ensembleKey;
        var quickViewContent = new Element("div", {"id": quickViewContentId, "class": "windowContent"});
        quickViewContent.setOpacity(1.0);
        quickView.appendChild(quickViewContent);
        quickViewContent.appendChild(document.newSpinner());
        new Effect.Appear(quickView);
        new Ajax.Updater(quickViewContentId, '/ensembleQuickViewAjax/?ensembleKey=' + ensembleKey, {onSuccess: function() {
            quickView.loaded = true;
        }});
    }
};

document.clickHoverStyleToggle = function(ol) {
    $(ol).childElements().each(function(li) {
        if (li.hasClassName('over')) {
            li.removeClassName('over')
        } else {
            li.addClassName('over')
        }
    });
}

document.sHover = function() {
    $$(".dropdownitem").each(function (e) {
        e.onmouseover=function() {
            this.className+=" over";
        }
        e.onmouseout=function() {
            this.className=this.className.replace(new RegExp(" over\\b"), "");
        }
    });
};

if (window.attachEvent) {
    window.attachEvent("onload", document.relExternaler);
    window.attachEvent("onload", document.html5er);
    window.attachEvent("onload", document.isTouchDevice);
    window.attachEvent("onload", document.sHover);
} else {
    document.observe("dom:loaded", document.relExternaler);
    document.observe("dom:loaded", document.html5er);
    document.observe("dom:loaded", document.isTouchDevice);
    document.observe("dom:loaded", document.sHover);
}


