// 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 y2k(number) {return (number < 1000) ? number + 1900 : number; }

function getInternetExplorerVersion() {
    var rv = -1; // Return value assumes failure.
    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) {
    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) {
    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() {
    if (!confirm("Are you sure you want to create a new shopping list?")) {return;}
    
    var xmlHTTP = getXMLHTTPObject();
    if (!xmlHTTP) {return;}
    
    xmlHTTP.onreadystatechange=function() {
        if (xmlHTTP.readyState==4) {
            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) {
            document.getElementById("shoppinglistbody").innerHTML = xmlHTTP.responseText;
            populateMyShoppingList();
        }
    }
    
    newingredient = newingredient.replace(/%/g, '%25');
    newingredient = newingredient.replace(/&/g, '%26');

    var qs = "";

    if (newdepartment != null) {
        newdepartment = newdepartment.replace(/%/g, '%25');
        newdepartment = newdepartment.replace(/&/g, '%26');
        qs += "&newdepartment=" + newdepartment;
    }

    if (newdealdetails != null) {
        newdealdetails = newdealdetails.replace(/%/g, '%25');
        newdealdetails = newdealdetails.replace(/&/g, '%26');
        qs += "&newdealdetails=" + newdealdetails;
    }

    if (newsubtext != null) {
        newsubtext = newsubtext.replace(/%/g, '%25');
        newsubtext = newsubtext.replace(/&/g, '%26');
        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) {
            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) {
            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;
    }

    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 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 (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;

    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');
}

// end account functions

