// generic functions
function showhideobj(obj) {var el = document.getElementById(obj); if (el.style.display != "none") {el.style.display = 'none';} else {el.style.display = '';}}
function echeck(str) {var at = "@"; var dot = "."; var lat = str.indexOf(at); var lstr = str.length; var ldot = str.indexOf(dot); if (str.indexOf(at) == -1) {return false;} if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {return false;} if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {return false;} if (str.indexOf( at, (lat + 1) ) != -1 ) {return false;} if (str.substring(lat-1, lat) == dot || str.substring(lat+1, lat+2) == dot) {return false;} if (str.indexOf(dot, (lat+2)) == -1) {return false;} if (str.indexOf(" ") != -1) {return false;} return true;}
function isValidDate(myDate) {if (myDate.indexOf('/') != -1) {splitDate = myDate.split('/');} else {return false;} if (splitDate.length != 3 || isNaN(splitDate[0]) || isNaN(splitDate[1]) || isNaN(splitDate[2]) || (splitDate[0].length != 1 && splitDate[0].length != 2) || (splitDate[1].length != 1 && splitDate[1].length != 2) || splitDate[2].length != 4) {return false;} var year = y2k(splitDate[2]); var test = new Date(year,splitDate[0] - 1,splitDate[1]);if (year == y2k(test.getYear()) && (splitDate[0] - 1 == test.getMonth()) && (splitDate[1] == test.getDate())) {return true;} else {return false;}}
function isNumberKey(evt) {var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode > 31 && (charCode < 48 || charCode > 57)) {return false;} return true;}
function y2k(number) {return (number < 1000) ? number + 1900 : number;}
function getInternetExplorerVersion() {var rv = -1; if (navigator.appName == 'Microsoft Internet Explorer') {var ua = navigator.userAgent; var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat(RegExp.$1);} return rv;}
function showOrHideAllDropDowns(newState) {var deptdropdown = document.getElementById("newingredientdepartment"); if (deptdropdown != null) {deptdropdown.style.visibility = newState;}}
function cleanURL(url) {url = url.replace(/%/g, '%25'); url = url.replace(/&/g, '%26'); return url;}
function getObjXPos(obj) {if (obj == null) {return 0;} var curleft = 0; if (obj.offsetParent) {while(1) {curleft += obj.offsetLeft; if (!obj.offsetParent) break; obj = obj.offsetParent;}} else if(obj.x) {curleft += obj.x;} return curleft;}
function getObjYPos(obj) {if (obj == null) {return 0;} var curtop = 0; if (obj.offsetParent) {while(1) {curtop += obj.offsetTop; if (!obj.offsetParent) break; obj = obj.offsetParent;}} else if(obj.y) {curtop += obj.y;} return curtop;}

function getScrollXY() {
    var scrOfX = 0, scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        //Netscape compliant
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //DOM compliant
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
    }
    return [ scrOfX, scrOfY ];
}
// end generic functions

// ajax functions
function getXMLHTTPObject() {
    var xmlHTTP = null;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHTTP=new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try {
            xmlHTTP=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }

    return xmlHTTP;
}

function newShoppingList() {newShoppingListWithCheck(true);}

function newShoppingListWithCheck(checkShoppingList) {
    if (checkShoppingList) {
        if (!confirm("Are you sure you want to clear your shopping list?")) {
            return;
        }
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            if (document.getElementById("shoppinglistbody") != null) {document.getElementById("shoppinglistbody").innerHTML = xmlHTTP.responseText;}
            populateMyShoppingList();
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyshoppinglist.jsp?newshoppinglist=true&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function addToShoppingList(newingredient, newdepartment, newdealdetails, newsubtext, newrecipeid, newterminationdate, newstoreid) {
    if (newingredient.length == 0) {
        return;
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            if (document.getElementById("shoppinglistbody") != null) {document.getElementById("shoppinglistbody").innerHTML = xmlHTTP.responseText;}
            populateMyShoppingList();
        }
    }

    newingredient = newingredient.replace(/%/g, '%25');
    newingredient = newingredient.replace(/&/g, '%26');
    newingredient = newingredient.replace(/#/g, '%23');

    var qs = "";

    if (newdepartment != null) {
        newdepartment = newdepartment.replace(/%/g, '%25');
        newdepartment = newdepartment.replace(/&/g, '%26');
        newdepartment = newdepartment.replace(/#/g, '%23');
        qs += "&newdepartment=" + newdepartment;
    }

    if (newdealdetails != null) {
        newdealdetails = newdealdetails.replace(/%/g, '%25');
        newdealdetails = newdealdetails.replace(/&/g, '%26');
        newdealdetails = newdealdetails.replace(/#/g, '%23');
        qs += "&newdealdetails=" + newdealdetails;
    }

    if (newsubtext != null) {
        newsubtext = newsubtext.replace(/%/g, '%25');
        newsubtext = newsubtext.replace(/&/g, '%26');
        newsubtext = newsubtext.replace(/#/g, '%23');
        qs += "&newsubtext=" + newsubtext;
    }

    if (newrecipeid != null) {
        qs += "&newrecipeid=" + newrecipeid;
    }
    if (newterminationdate != null) {
        qs += "&newterminationdate=" + newterminationdate;
    }
    if (newstoreid != null) {
        qs += "&newstoreid=" + newstoreid;
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyshoppinglist.jsp?newingredient=" + newingredient + qs + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function removeFromShoppingList(removeingredientid) {
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            if (document.getElementById("shoppinglistbody") != null) {document.getElementById("shoppinglistbody").innerHTML = xmlHTTP.responseText;}
            populateMyShoppingList();
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyshoppinglist.jsp?removeingredientid=" + removeingredientid + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function updateShoppingListDepartment(updateingredientid, updatedepartment) {
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            if (document.getElementById("shoppinglistbody") != null) {document.getElementById("shoppinglistbody").innerHTML = xmlHTTP.responseText;}
            populateMyShoppingList();
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyshoppinglist.jsp?updateingredientid=" + updateingredientid + "&updatedepartment=" + updatedepartment + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function changeShoppingListDepartment(removeingredientid) {
    var slchangedept = document.getElementById("slchangedept" + removeingredientid);

    if (slchangedept != null) {
        if (slchangedept.style.display != "none") {
            slchangedept.style.display = 'none';
        } else {
            slchangedept.style.display = '';
        }
    }
}

function populateMyShoppingList() {
    var myshoppinglistbody = document.getElementById("myshoppinglistbody");
    if (myshoppinglistbody == null) {
        return;
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            myshoppinglistbody.innerHTML = xmlHTTP.responseText;
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/populatemyshoppinglist.jsp?modify=true&time=" + timestamp, true);
    xmlHTTP.send(null);
}


function addToRecipeBox(recipeid) {
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            //document.getElementById("recipeboxbody").innerHTML = xmlHTTP.responseText;
            populateRecipeDetailRecipeBox(recipeid, true);
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyrecipebox.jsp?recipeid=" + recipeid + "&save=true&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function removeFromRecipeBox(recipeid) {
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            //document.getElementById("recipeboxbody").innerHTML = xmlHTTP.responseText;
            populateRecipeDetailRecipeBox(recipeid, false);
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/includes/modifyrecipebox.jsp?recipeid=" + recipeid + "&remove=true&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function populateRecipeDetailRecipeBox(recipeID, isInRecipeBox) {
    var recipeBox = document.getElementById("recipebox");

    if (recipeBox != null) {
        if (isInRecipeBox) {
            recipeBox.innerHTML = "<div style=\"padding-left: 10px; padding-right: 10px; float: left; text-align: center;\">" +
            "<a style=\"text-decoration: none;\" href=\"javascript: removeFromRecipeBox('" + recipeID + "');\"><img src=\"/shoptocook/Web/v2/remove.gif\" border=\"0\" /></a>" +
            "</div>" +
            "<div style=\"height: 28px; padding-top: 5px;\">" +
            "<a class=\"secondarylink\" href=\"javascript: removeFromRecipeBox('" + recipeID + "');\">Remove from My Recipe Box</a>" +
            "</div>";

        } else {
            recipeBox.innerHTML = "<div style=\"padding-left: 10px; padding-right: 10px; float: left; text-align: center;\">" +
            "<a style=\"text-decoration: none;\" href=\"javascript: addToRecipeBox('" + recipeID + "');\"><img src=\"/shoptocook/Web/v2/save.gif\" border=\"0\" /></a>" +
            "</div>" +
            "<div style=\"height: 28px; padding-top: 5px;\">" +
            "<a class=\"secondarylink\" href=\"javascript: addToRecipeBox('" + recipeID + "');\">Save to My Recipe Box</a>" +
            "</div>";
        }
    }
}
// end ajax functions

// popup functions
function showPopup(popupJSP) {
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            document.getElementById("blackoutsite").style.visibility = 'visible';
            document.getElementById("blackoutpopup").innerHTML = xmlHTTP.responseText;
            document.getElementById("blackoutpopup").style.visibility = 'visible';

            var ieVersion = getInternetExplorerVersion();

            if (ieVersion != -1 && ieVersion < 7) {
                showOrHideAllDropDowns('hidden');

                document.getElementById("blackoutsite").style.position = 'absolute';
                document.getElementById("blackoutpopup").style.position = 'absolute';

                resizeWindow();
                window.onresize = resizeWindow;
            }

            try {
                document.getElementById("focusable").focus();
                pageTracker._trackPageview(popupJSP);
            } catch(err) {}
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", popupJSP + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function closePopup() {
    document.getElementById("blackoutsite").style.visibility = 'hidden';
    document.getElementById("blackoutpopup").style.visibility = 'hidden';

    var ieVersion = getInternetExplorerVersion();

    if (ieVersion != -1 && ieVersion < 7) {
        showOrHideAllDropDowns('visible');
        window.onresize = null;
    }

    try {
        document.getElementById("popupmessage").style.visibility = 'hidden';
    } catch(err) {}
}

function resizeWindow() {
    document.getElementById("blackoutsite").style.width = document.body.clientWidth + 'px';
    document.getElementById("blackoutsite").style.height = document.body.clientHeight + 'px';
    document.getElementById("blackoutpopup").style.width = document.body.clientWidth + 'px';
    document.getElementById("blackoutpopup").style.height = document.body.clientHeight + 'px';
    document.getElementById("popup").style.width  = document.body.clientWidth + 'px';
    document.getElementById("popup").style.height  = '600px';
}
// end popup functions

// account functions
function login() {
    var username = document.getElementById("focusable").value;
    var password = document.getElementById("loginpassword").value;

    if (username.length == 0 || password.length == 0) {
        alert("You must enter a username and password.");
        return;
    }

    document.getElementById("popupmessage").style.visibility = 'hidden';

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            var responseText = xmlHTTP.responseText;
            var action = null;

            if (responseText.indexOf("<action>") != -1 && responseText.indexOf("</action>") != -1) {
                action = responseText.substring(responseText.indexOf("<action>") + 8, responseText.indexOf("</action>"));
                responseText = responseText.substring(responseText.indexOf("</action>") + 9);
            }

            if (action != null) {
                if (action == "ok") {
                    showPopup("/popups/greenmessage.jsp?messagetitle=Thank you!&messagebody=" + responseText + "&refresh=true");
                }

            } else {
                document.getElementById("popupmessage").style.visibility = 'visible';
                document.getElementById("popupmessage").innerHTML = responseText;
            }
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/popups/loginuser.jsp?loginusername=" + username + "&loginpassword=" + password + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}


function checkUsername() {
    var email = document.getElementById("focusable").value;

    if (!echeck(email)) {
        alert("You must enter a valid email address.");
        return;
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            var responseText = xmlHTTP.responseText;
            var action = null;

            if (responseText.indexOf("<action>") != -1 && responseText.indexOf("</action>") != -1) {
                action = responseText.substring(responseText.indexOf("<action>") + 8, responseText.indexOf("</action>"));
                responseText = responseText.substring(responseText.indexOf("</action>") + 9);
            }

            if (action != null) {
                if (action == "ok") {
                    showPopup("/popups/greenmessage.jsp?messagetitle=We found your username!&messagebody=" + responseText);
                }

            } else {
                document.getElementById("popupmessage").style.visibility = 'visible';
                document.getElementById("popupmessage").innerHTML = responseText;
            }
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/popups/forgotusernamecheck.jsp?forgotusernameemail=" + email + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function resetPassword() {
    var username = document.getElementById("focusable").value;
    var email = document.getElementById("forgotpasswordemail").value;

    if (!echeck(email) || username.length == 0) {
        alert("You must enter a valid username and email address.");
        return;
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            var responseText = xmlHTTP.responseText;
            var action = null;

            if (responseText.indexOf("<action>") != -1 && responseText.indexOf("</action>") != -1) {
                action = responseText.substring(responseText.indexOf("<action>") + 8, responseText.indexOf("</action>"));
                responseText = responseText.substring(responseText.indexOf("</action>") + 9);
            }

            if (action != null) {
                if (action == "ok") {
                    showPopup("/popups/greenmessage.jsp?messagetitle=We reset your password!&messagebody=" + responseText);
                }

            } else {
                document.getElementById("popupmessage").style.visibility = 'visible';
                document.getElementById("popupmessage").innerHTML = responseText;
            }
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    xmlHTTP.open("GET", "/popups/forgotpasswordreset.jsp?forgotpasswordusername=" + username + "&forgotpasswordemail=" + email + "&time=" + timestamp, true);
    xmlHTTP.send(null);
}

function submitAccountInformation() {
    violation = true;
    violString = "The following errors occurred on the form:\n\n";

    var firstName = document.getElementById("focusable").value;
    var lastName = document.getElementById("accountlastname").value;
    var username = document.getElementById("accountusername").value;

    var updatePasswordElement = document.getElementById("accountupdatepassword");
    var updatePassword = "";

    if (updatePasswordElement != null) {
        updatePassword = updatePasswordElement.checked;
    }

    var password = document.getElementById("accountpassword").value;
    var verifyPassword = document.getElementById("accountverifypassword").value;
    var hidePassword = document.getElementById("accounthidepassword").style.display;
    var hideVerifyPassword = document.getElementById("accounthideverifypassword").style.display;
    var phone1 = document.getElementById("accountphone1").value;
    var phone2 = document.getElementById("accountphone2").value;
    var phone3 = document.getElementById("accountphone3").value;
    var email = document.getElementById("accountemail").value;
    var zipCode = document.getElementById("zipCode").value;

    var bonusCardNumberElement = document.getElementById("accountbonuscardnumber");
    var bonusCardNumber = "";

    if (bonusCardNumberElement != null) {
        bonusCardNumber = bonusCardNumberElement.value;
    }

    var emailFlagElement = document.getElementById("accountemailflag");
    var emailFlag = "";

    if (emailFlagElement != null) {
        emailFlag = emailFlagElement.checked;
    }

    var emailStoreID = "";
    var i = 0;
    var emailStoreIDElement = document.getElementById("accountemailstoreid" + i);
    while (emailStoreIDElement != null) {
        if (emailStoreIDElement.checked) {
            if (emailStoreID != "") {
                emailStoreID += "|";
            }
            emailStoreID += emailStoreIDElement.value;
        }
        i++;
        emailStoreIDElement = document.getElementById("accountemailstoreid" + i);
    }


    if (firstName.length == 0) {
        violString += "- First Name is a required field.\n";
        violation = false;
    }

    if (lastName.length == 0) {
        violString += "- Last Name is a required field.\n";
        violation = false;
    }

    if (username.length < 6) {
        violString += "- Username must be at least 6 characters.\n";
        violation = false;
    }

    if (hidePassword != "none" && password.length < 6) {
        violString += "- Password must be at least 6 characters.\n";
        violation = false;
    }

    if (hidePassword != "none" && verifyPassword.length < 6) {
        violString += "- Verify Password must be at least 6 characters.\n";
        violation = false;
    }

    if (hidePassword != "none" && hideVerifyPassword != "none" && password != verifyPassword) {
        violString += "- Verify Password must be at least 6 character.\n";
        violation = false;
    }

    if ((phone1.length != 0 || phone2.length != 0 || phone3.length != 0)
        && (isNaN(phone1) || phone1.length != 3 || isNaN(phone2) || phone2.length != 3 || isNaN(phone3) || phone3.length != 4)) {

        violString += "- Phone is an invalid format. [ex. (555) 555-5555]\n";
        violation = false;
    }

    if (email.length == 0) {
        violString += "- Email is a required field.\n";
        violation = false;

    } else if (!echeck(email)) {
        violString += "- Email is an invalid format.\n";
        violation = false;
    }
    if (zipCode.length >0 && zipCode.length < 5) {
        violString += "- Zip Code must be 5 characters.\n";
        violation = false;
    }

    if (bonusCardNumber.length > 0 && isNaN(bonusCardNumber)) {
        violString += "- Reward Card Number may only contain numbers.\n";
        violation = false;
    }

    if (!violation) {
        alert(violString);
        return;
    }

    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {
        return;
    }

    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            var responseText = xmlHTTP.responseText;
            var action = null;

            if (responseText.indexOf("<action>") != -1 && responseText.indexOf("</action>") != -1) {
                action = responseText.substring(responseText.indexOf("<action>") + 8, responseText.indexOf("</action>"));
                responseText = responseText.substring(responseText.indexOf("</action>") + 9);
            }

            if (action != null) {
                if (action == "ok") {
                    showPopup("/popups/greenmessage.jsp?messagetitle=Thank you!&messagebody=" + responseText + "&refresh=true");
                }

            } else {
                document.getElementById("popupmessage").style.visibility = 'visible';
                document.getElementById("popupmessage").innerHTML = responseText;
            }
        }
    }

    var date = new Date();
    var timestamp = date.getTime();

    var data = "firstName=" + cleanURL(firstName) + "&lastName=" + cleanURL(lastName) + "&username=" + cleanURL(username) + "&password=" + cleanURL(password) + "&verifyPassword=" + cleanURL(verifyPassword) + "&updatePassword=" + updatePassword +
    "&phone1=" + cleanURL(phone1) + "&phone2=" + cleanURL(phone2) + "&phone3=" + cleanURL(phone3) + "&email=" + cleanURL(email) + "&emailFlag=" + emailFlag + "&emailStoreID=" + emailStoreID + "&bonusCardNumber=" + bonusCardNumber + "&zipCode=" + zipCode;

    xmlHTTP.open("POST", "/popups/accountsubmit.jsp?time=" + timestamp, true);
    xmlHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHTTP.send(data);
}

function updateAccountPasswordPermissions() {
    document.getElementById("accountpassword").value = '';
    document.getElementById("accountverifypassword").value = '';
    showhideobj('accounthidepasswordlabel');
    showhideobj('accounthidepassword');
    showhideobj('accounthideverifypasswordlabel');
    showhideobj('accounthideverifypassword');
}
