// Define required variables. var http = createRequestObject(); var ajaxaction = ""; var store = ""; var selectedObjectName = ""; var express_url = "express_ajax.php"; var inProgress = false; var previous_item_id = ""; function handleResponse() { if(http.readyState == 4) { inProgress = false; hideLoader(); var response = http.responseText; if(response != "") { if(response.substr(0,1) == "#") { alert("Warning: " + response.substr(1,response.length - 1)); } else { if(ajaxaction == "addtocart") { handleAddToCart(response); } else if(ajaxaction == "removefromcart") { handleRemoveFromCart(response); } else if(ajaxaction == "loadcart") { handleLoadCart(response); } else { alert("Undefined action: " + ajaxaction); } } } else if(ajaxaction == "loadjobs") { refreshJobList(""); } else { //alert("Invalid response from server"); } } } // Cart Functions function addItemToCart(evt, item_id) { if(inProgress) return; // Ensure the passed item_id is a valid whole number if((item_id == "") || (!isInteger(item_id))) return; // Get a handle on the relevant quantity text field var qty_item = "qty_" + item_id; var price_item = "price_" + item_id; var objQty = document.getElementById(qty_item); var objPrice = document.getElementById(price_item); if((objQty) && (objPrice)) { // Get the quantity value and ensure it's a valid whole number. var qty = objQty.value; var price = objPrice.innerHTML; if((qty == "") || (!isInteger(qty))) { alert("Please enter a valid number for item quantity"); objQty.focus(); return; } if(price == "") { alert("The price for this item is invalid."); return; } price = price.substring(1); if(!isNumeric(price)) { alert("The price for this item is invalid."); return; } // Show the ajax loader window so the user knows something is happening. showLoader(evt); // Create the ajax request and send it ajaxaction = "addtocart"; store = item_id; // Store the item_id so the handler function knows which item was processed. params = "action=" + ajaxaction + "&item_id=" + item_id + "&qty=" + qty + "&price=" + price; sndReq(express_url, params); } } // The handleAddToCart function is fired after an item has been successfully added to the cart. function handleAddToCart(response) { if(response != "OK") { alert("Sorry, the item could not be added to your cart. Please try again later."); return; } // The item_id that the user just added to the cart was stored in the js variable "store". Grab it. var item_id = store; var qty_item = "qty_" + item_id; var addmessage_item = "addmessage_" + item_id; var objQty = document.getElementById(qty_item); var objMessage = document.getElementById(addmessage_item); if((objQty) && (objMessage)) { // Get the quantity value that we're adding to the old quantity and ensure it's a valid whole number. var qty = objQty.value; if((qty == "") || (!isInteger(qty))) { alert("Please enter a valid number for item quantity"); objQty.focus(); return; } // Force quantites to numeric type qty = qty * 1; // Reset the quantity input field to 1. objQty.value = "1"; objMessage.style.visibility = 'visible'; if((previous_item_id != "") && (previous_item_id != item_id)) { var obj = document.getElementById('addmessage_' + previous_item_id); if(obj) obj.style.visibility = 'hidden'; } previous_item_id = item_id; reloadCart(); //$("#accordion_view_cart").click(); // All done. } } // The removeFromCart method is fired when the user clicks the "Clear" link for any line item. // We need to invoke the relevant server method to clear the item from the cart. function removeFromCart(evt, item_id) { if(inProgress) return; // Ensure the passed item_id is a valid whole number if((item_id == "") || (!isInteger(item_id))) return; // Show the ajax loader window so the user knows something is happening. showLoader(evt); // Create the ajax request and send it ajaxaction = "removefromcart"; store = item_id; // Store the item_id so the handler function knows which item was processed. params = "action=" + ajaxaction + "&item_id=" + item_id; sndReq(express_url, params); } // The handleRemoveFromCart function is fired after an item has been successfully removed from the cart. function handleRemoveFromCart(response) { if(response != "OK") { alert("Sorry, the item could not be removed from your cart. Please try again later."); return; } // The item_id that the user just added to the cart was stored in the js variable "store". Grab it. var item_id = store; var cart_qty_item = "cart_qty_" + item_id; var objCartQty = document.getElementById(cart_qty_item); if(objCartQty) { // Update the item quantity in the cart. objCartQty.innerHTML = "0"; reloadCart(); // All done. } } function reloadCart() { showCartLoader(); // Create the ajax request and send it var randomnumber = Math.floor(Math.random()*999999) ajaxaction = "loadcart"; params = "action=" + ajaxaction + "&r=" + randomnumber; sndReq(express_url, params); } function handleLoadCart(response) { // Hide the cart loader hideCartLoader(); // Get a handle on the cart div var objDiv = document.getElementById("sidebar_cart"); if(objDiv) { objDiv.innerHTML = response; } } // Utility Functions function isNumeric(sText) { var ValidChars = "0123456789."; var IsNumber=true; var Char; for (i = 0; i < sText.length && IsNumber == true; i++) { Char = sText.charAt(i); if (ValidChars.indexOf(Char) == -1) { IsNumber = false; } } return IsNumber; } function isInteger(sText) { var ValidChars = "0123456789"; var IsNumber=true; var Char; for (i = 0; i < sText.length && IsNumber == true; i++) { Char = sText.charAt(i); if (ValidChars.indexOf(Char) == -1) { IsNumber = false; } } return IsNumber; } function mouseX(evt) { if (evt.pageX) return evt.pageX; else if (evt.clientX) return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); else return null; } function mouseY(evt) { if (evt.pageY) return evt.pageY; else if (evt.clientY) return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return null; } function createRequestObject() { var ro; var browser = navigator.appName; if(browser == "Microsoft Internet Explorer") { ro = new ActiveXObject("Microsoft.XMLHTTP"); } else { ro = new XMLHttpRequest(); } return ro; } function sndReq(url, params) { http.open('POST', url, true); http.onreadystatechange = handleResponse; http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("Content-length", params.length); http.setRequestHeader("Connection", "close"); http.send(params); inProgress = true; } function showLoader(evt) { var objLoader = document.getElementById("ajaxloader"); if(!objLoader) return; var newTop = "300px"; var newLeft = "300px;" if(evt != null) { newTop = mouseY(evt) - 50 + "px"; newLeft = mouseX(evt) + 50 + "px"; } objLoader.style.top = newTop; objLoader.style.left = newLeft; objLoader.style.visibility = "visible"; } function hideLoader(evt) { var objLoader = document.getElementById("ajaxloader"); if(!objLoader) return; objLoader.style.visibility = "hidden"; } function showCartLoader() { var objLoader = document.getElementById("cart_loader"); if(!objLoader) return; objLoader.style.display = "block"; } function hideCartLoader(evt) { var objLoader = document.getElementById("cart_loader"); if(!objLoader) return; objLoader.style.display = "none"; }