/*
  This code is used on the plant page and shop browse pages. 
*/

function hasClass(obj, className) {
    return ((" "+obj.className+" ").indexOf(" "+className+" ") >= 0);
}


function simpleConcat(arr1 ,arr2) {
    var arr = [];
    for(var i=0;i<arr1.length;i++) {
        arr[i] = arr1[i];
    }
    for(var i=0;i<arr2.length;i++) {
        arr[arr.length] = arr2[i];
    }
    return arr;
}


function findPrevSibling(el, withClass) {
    if(!el || !el.parentNode || !withClass) { return null; }
    var parentNode = el.parentNode;
    // Go forwards to us.
    for(var i=0;i<parentNode.childNodes.length;i++) {
        if(parentNode.childNodes[i] == el) {
            break;
        }
    }
    // Go backwards for our sibling.
    for(i=i-1; i>=0; i--) {
        if((" "+parentNode.childNodes[i].className+" ").indexOf(" "+withClass+" ") >= 0) {
            return parentNode.childNodes[i];
        }
    }
    return null;
}


function findDescendent(el, withClass) {
    if(!el || !el.childNodes || !withClass) { return null; }
    var nodesToCheck = simpleConcat([], el.childNodes);
    while(nodesToCheck.length > 0) {
        var nodeToCheck = nodesToCheck[nodesToCheck.length-1];
        nodesToCheck.length = nodesToCheck.length - 1;
        if(hasClass(nodeToCheck, withClass)) {
            return nodeToCheck;
        }
        if(nodeToCheck.childNodes) {
            nodesToCheck = simpleConcat(nodesToCheck, nodeToCheck.childNodes);
        }
    }   
    return null;     
}

function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}


function stringToInt(value) {
    var validChars = "0123456789";
    value = trim(value);
    // The string shouldn't begin with zero unless its "0".
    if(value.length == 0 || 
         validChars.indexOf(value.charAt(0)) == -1 || 
         (value.length > 1 && parseInt(value.charAt(0), 10) == 0)) {
        return NaN;
    }
    for(var i=1;i<value.length;i++) {
        if(validChars.indexOf(value.charAt(i)) == -1) {
            return NaN;
        }
    }
    return parseInt(value, 10);
}


function checkInventory(formEl, quantityLimit) {
    var errorEl = findPrevSibling(formEl, 'item_error');
    var quantityEl = findDescendent(formEl, 'item_qty');
    
    var quantity = stringToInt(quantityEl.value);
    if(isNaN(quantity) || quantity <= 0) {
        errorEl.innerHTML = "<b>Could not add item to cart:</b>"+
        " Please enter a quantity(whole number) to add to your cart.";
        return false;
    } else if(quantity > quantityLimit) {
        errorEl.innerHTML = "<b>Could not add item to cart:</b>"+
        "Sorry, we wish we had that many plants but they grow sooo slow."+
        "Please enter a quantity(whole number) that is smaller than or equal to "+quantityLimit+".";
        return false;
    }
    errorEl.innerHTML = '';
    return true;
}

        lazymenu = {};
        lazymenu.active = true;
        lazymenu.lazyLoadMenu = function() {
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = lazymenu.lazyLoadSrc;
            document.getElementsByTagName('body')[0].appendChild(script);
        }
        
        sfhover = {};
        sfhover.alwaysOn = true;
        sfhover.sfHover = function() {
            var timerIds = [];
            var menuLiEls = [];
            var hasClass = function(el,cls) {
            	return el.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
            }
            var addClass = function(el,cls) {
            	if (!hasClass(el,cls)) {
                    el.className += " "+cls;
                }
            }
            var removeClass = function(el,cls) {
            	if (hasClass(el,cls)) {
            		el.className=el.className.replace(new RegExp('(\\s|^)'+cls+'(\\s|$)'),' ');
            	}
            }
            var addHoverClass = function(el) {
                addClass(el, 'sfhover');
            };
            var removeHoverClass = function(el) {
                removeClass(el, 'sfhover');
            };
            var makeFancyMouseOver = function (j) { 
                return function() {
                    for(var k=0;k<menuLiEls.length;k++) {
                        if(menuLiEls[k] && menuLiEls[k]!=menuLiEls[j]) {
                            window.clearTimeout(timerIds[k]);
                            timerIds[k] = null;
                            removeHoverClass(menuLiEls[k]);
                            menuLiEls[k] = null;     
                        }
                    }
                    addHoverClass(this);
                    window.clearTimeout(timerIds[j]);
                    timerIds[j] = null;                        
                    menuLiEls[j] = null;
                };
            };
            var makeFancyMouseOut = function(j) { 
                return function() {
                    menuLiEls[j] = this;
                    timerIds[j] = window.setTimeout((function () {
                        removeHoverClass(menuLiEls[j]);
                        menuLiEls[j] = null;
                    }), 500);
                };
            };            
            var boringMouseOver = function() {
                addHoverClass(this);
            };
            var boringMouseOut = function() {
                removeHoverClass(this);
            };
            var makeBoringMouseOver = function() {
                return boringMouseOver;
            };
            var makeBoringMouseOut = function() {
                return boringMouseOut;
            };
            
            var gmEl = document.getElementById("generalmenu");   
            var sfEls = document.getElementById("generalmenu").getElementsByTagName("LI");
            for (var i=0; i<sfEls.length; i++) {
                timerIds[i] = null;
                menuLiEls[i] = null;
                if(sfEls[i].parentNode == gmEl) {
                    sfEls[i].onmouseover=makeFancyMouseOver(i);
                    sfEls[i].onmouseout=makeFancyMouseOut(i);   
                } else {
                    sfEls[i].onmouseover=makeBoringMouseOver(); 
                    sfEls[i].onmouseout=makeBoringMouseOut();
                }
            }
            var bmEl = document.getElementById("businessmenu");
            var sfEls = document.getElementById("businessmenu").getElementsByTagName("LI");
            for (var i=0; i<sfEls.length; i++) {
                timerIds[i] = null;
                menuLiEls[i] = null;
                if(sfEls[i].parentNode == bmEl) {
                    sfEls[i].onmouseover=makeFancyMouseOver(i);
                    sfEls[i].onmouseout=makeFancyMouseOut(i);   
                } else {
                    sfEls[i].onmouseover=makeBoringMouseOver(); 
                    sfEls[i].onmouseout=makeBoringMouseOut();
                }
            }
        }


