// get control when page loads if (window.addEventListener) { window.addEventListener('load', fAddOnChange, false); } else if (window.attachEvent) { window.attachEvent('onload', fAddOnChange); } function fAddOnChange(e){ if(document.addtocart != null){ var oACF = document.addtocart.elements; for (i=0; i < oACF.length; i++) { if( oACF[i].type.toLowerCase().indexOf("select") != -1 ){ if(oACF[i].name.indexOf('prod_id') == -1){ if (oACF[i].addEventListener) { oACF[i].addEventListener('change', fModVirtuemartAjax, false); } else if (oACF[i].attachEvent) { oACF[i].attachEvent('onchange', fModVirtuemartAjax ); } }else{ if (oACF[i].addEventListener) { oACF[i].addEventListener('change', fModVirtuemartAjaxItemChange, false); } else if (oACF[i].attachEvent) { oACF[i].attachEvent('onchange', fModVirtuemartAjaxItemChange ); } } for(k=0; k < oACF[i].options.length; k++){ vOptionName = oACF[i].options[k].text; if(vOptionName.indexOf('(') != -1){ oACF[i].options[k].text = vOptionName.substr(0, vOptionName.indexOf('(')-1); } } } } fModVirtuemartAjax(e); } } function getElementsByClassName(oElm, strTagName, strClassName){ var arrElements = (strTagName == '*' && document.all) ? document.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); strClassName = strClassName.replace(/\-/g, "\\-"); var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"); var oElement; for(var i=0; i< arrElements.length; i++){ oElement = arrElements[i]; if( oRegExp.test(oElement.getAttribute("class")) || oRegExp.test(oElement.className) ){ arrReturnElements.push(oElement); } } return (arrReturnElements) } function fModVirtuemartAjax(e){ var target = document.addtocart; //window.event ? window.event.srcElement : e ? e.target : null; var vWaitMessage = 'Getting price...'; if (!target) return; if (target.ajaxInProgress) return; if(window.XMLHttpRequest && !(window.ActiveXObject)) { try { var xmlhttp = new XMLHttpRequest(); } catch(e) { var xmlhttp = false; } } else if(window.ActiveXObject) { try { var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { var xmlhttp = false; } } } xmlhttp.open('POST', '/index.php?option=com_virtuemart&page=shop.product_price', true); /* The callback function */ xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200 || xmlhttp.status == 404){ fModVirtuemartAjaxUpdate(xmlhttp.responseXML, target); }else{ target.submit(); } } } /* Send the POST request */ vDesc = ""; vBanned = new Array("page", "flypage", "func", "Itemid", "category_id", "option", "Add to Cart", '', ' '); for(i= 0; i < target.elements.length; i++){ vOK = true; for(k=0; k < vBanned.length; k++){ vOK = (vBanned[k] == target.elements[i].name) ? false : vOK; } if(vOK){ if( target.elements[i].type.indexOf('select') != -1 ){ if(target.elements[i].name != null){ vDesc += target.elements[i].name + '=' + target.elements[i].options[target.elements[i].selectedIndex].value + "&"; //xmlhttp.send(target.elements[i].name + '=' + target.elements[i].options[target.elements[i].selectedIndex].value); } }else{ if(target.elements[i].name != null){ vDesc += target.elements[i].name + '=' + target.elements[i].value + "&"; //xmlhttp.send(target.elements[i].name + '=' + target.elements[i].value); } } } } /* Add temporary feedback that the request has been sent */ if(document.getElementById('ajaxpprice') != null && 'ajaxpprice' != ''){ oPCID = document.getElementById('ajaxpprice'); oPCID.innerHTML = vWaitMessage } if('productPrice' != ''){ vPCClassArray = getElementsByClassName(document, '*', 'productPrice'); for(i=0; i < vPCClassArray.length;i++){ vPCClassArray[i].innerHTML = vWaitMessage; } } xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(vDesc); //target.ajaxInProgress = true; } function fModVirtuemartAjaxUpdate(responseXML, target) { vPriceMessage = '{ERROR}'; if (responseXML != null) { vTree = responseXML.getElementsByTagName('xmlresponse')[0].childNodes; //responseXML.getElementsByTagName('price')[0].firstChild.data if(vTree.length > 0){ for(n=0; n < vTree.length; n++){ vName = vTree[n].nodeName.replace('price',''); vValue = vTree[n].firstChild.data; vPriceMessage = vValue; vPriceMessage = vPriceMessage.replace('{EXTAX}', 'Ex. VAT').replace('{INCTAX}', '').replace('{LOGIN}', 'Login for pricing').replace('{ERROR}', 'Check all options are selected'); if(document.getElementById('ajaxpprice'+vName) != null && 'ajaxpprice' != ''){ oPCID = document.getElementById('ajaxpprice'+vName); oPCID.innerHTML = vPriceMessage; } if('productPrice'+vName != ''){ vPCClassArray = getElementsByClassName(document, '*', 'productPrice'+vName); for(i=0; i < vPCClassArray.length; i++){ vPCClassArray[i].innerHTML = vPriceMessage; } } } } } if(document.getElementById('ajaxpprice') != null && 'ajaxpprice' != ''){ oPCID = document.getElementById('ajaxpprice'); oPCID.innerHTML = vPriceMessage; } if('productPrice' != ''){ vPCClassArray = getElementsByClassName(document, '*', 'productPrice'); for(i=0; i < vPCClassArray.length; i++){ vPCClassArray[i].innerHTML = vPriceMessage; } } //target.ajaxInProgress = false; } function fModVirtuemartAjaxItemChange (){ flypage = document.addtocart.flypage.value; Itemid = document.addtocart.Itemid.value; category_id = document.addtocart.category_id.value; prod_id = document.addtocart['prod_id[]']; product_id = prod_id[prod_id.selectedIndex].value; vUrl = '/index.php?option=com_virtuemart&page=shop.product_details&flypage=' + flypage + '&Itemid=' + Itemid + '&category_id='+ category_id + '&product_id=' + product_id; document.location.href = vUrl; }