var cartPath = 'phurbyCart'; function updateCart() { var url = cartPath + '/updateCart.php' var docForm = document.getElementById( 'cartForm' ); var queryString = formData2QueryString( docForm, null ); var xmlHttp = GetXmlHttpObject(); if( xmlHttp == null ) { alert( "Your browser does not support AJAX!" ); return; } xmlHttp.onreadystatechange = function() { if( xmlHttp.readyState == 4 ) { var result = xmlHttp.responseText; if( result != '' ) document.getElementById( 'cartSummary' ).innerHTML = result; // hack to make buttons not show up if cart is empty if( result.toUpperCase().indexOf( 'YOUR CART IS EMPTY' ) != -1 ) { document.getElementById( 'checkoutButton' ).style.visibility = 'hidden'; document.getElementById( 'updateCart' ).style.visibility = 'hidden'; } updateCheckoutButton(); } } xmlHttp.open('POST', url, true); xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlHttp.setRequestHeader("Content-length", queryString.length); xmlHttp.setRequestHeader("Connection", "close"); xmlHttp.send( queryString ); return false; } function removeItem( quantityBoxId ) { var quantityBox = document.getElementById( quantityBoxId ); quantityBox.value = 0; return updateCart(); } function mooBoxAddToCart( selectElementID ) { var url = cartPath + '/viewCart.php'; var dropdown = document.getElementById( selectElementID ); url += '?variationID=' + dropdown.options[dropdown.selectedIndex].value; MOOdalBox.open( url, 'Shopping Cart', '600 300' ); return false; } function updateCheckoutButton() { var xmlHttp = GetXmlHttpObject(); var url = cartPath + '/checkoutButton.php'; xmlHttp.onreadystatechange = function() { if( xmlHttp.readyState == 4 ) { var result = xmlHttp.responseText; document.getElementById( 'checkoutButton' ).innerHTML = result; } } xmlHttp.open( 'GET', url, true ); xmlHttp.send( null ); } // From w3schools.com 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) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } /* * Copyright 2005 Matthew Eernisse (mde@fleegix.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Original code by Matthew Eernisse (mde@fleegix.org), March 2005 * Additional bugfixes by Mark Pruett (mark.pruett@comcast.net), 12th July 2005 * Multi-select added by Craig Anderson (craig@sitepoint.com), 24th August 2006 * * Version 1.3 */ /** * Serializes the data from all the inputs in a Web form * into a query-string style string. * @param docForm -- Reference to a DOM node of the form element * @param formatOpts -- JS object of options for how to format * the return string. Supported options: * collapseMulti: (Boolean) take values from elements that * can return multiple values (multi-select, checkbox groups) * and collapse into a single, comman-delimited value * (e.g., thisVar=asdf,qwer,zxcv) * @returns query-string style String of variable-value pairs */ function formData2QueryString(docForm, formatOpts) { var opts = formatOpts || {}; var str = ''; var formElem; var lastElemName = ''; for (i = 0; i < docForm.elements.length; i++) { formElem = docForm.elements[i]; switch (formElem.type) { // Text fields, hidden form elements case 'text': case 'hidden': case 'password': case 'textarea': case 'select-one': str += formElem.name + '=' + encodeURI(formElem.value) + '&' break; // Multi-option select case 'select-multiple': var isSet = false; for(var j = 0; j < formElem.options.length; j++) { var currOpt = formElem.options[j]; if(currOpt.selected) { if (opts.collapseMulti) { if (isSet) { str += ',' + encodeURI(currOpt.value); } else { str += formElem.name + '=' + encodeURI(currOpt.value); isSet = true; } } else { str += formElem.name + '=' + encodeURI(currOpt.value) + '&'; } } } if (opts.collapseMulti) { str += '&'; } break; // Radio buttons case 'radio': if (formElem.checked) { str += formElem.name + '=' + encodeURI(formElem.value) + '&' } break; // Checkboxes case 'checkbox': if (formElem.checked) { // Collapse multi-select into comma-separated list if (opts.collapseMulti && (formElem.name == lastElemName)) { // Strip of end ampersand if there is one if (str.lastIndexOf('&') == str.length-1) { str = str.substr(0, str.length - 1); } // Append value as comma-delimited string str += ',' + encodeURI(formElem.value); } else { str += formElem.name + '=' + encodeURI(formElem.value); } str += '&'; lastElemName = formElem.name; } break; } } // Remove trailing separator str = str.substr(0, str.length - 1); return str; }