// used for loading function durning the page load function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } } addLoadEvent(function() { getMyStoreBtn(); getZipField(); }); //AJAX browser history support functions function useDhtmlHistory(){ return (navigator.userAgent.toLowerCase().indexOf('safari') == - 1); } function initializeDhtmlHistory(methodName){ if(useDhtmlHistory()){ dhtmlHistory.initialize(); dhtmlHistory.addListener(methodName); } } function addDhtmlHistory(keyName, keyValue){ if(useDhtmlHistory()){ dhtmlHistory.add(keyName, keyValue); } } // General JavaScript Utils // used to get items by class function getElementsByClass(searchClass,node,tag) { // this array will hold the nodes that have the desired class var classElements = []; // if we did not pass the node parameter, assume document if (node == null) {node = document;} // if we did not pass the tag parameter, grab every node if (tag == null) {tag = '*';} // gather all the element nodes to look through; by default is everything in document var els = node.getElementsByTagName(tag); // to improve loop performance, determine the length ahead of time var elsLen = els.length; // establish the pattern to search for within className var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)"); // look through all the class properties to see if there is a match // the j variable is the counter variable that increments each time a // match is found and becomes the next item in classElements for (var i = 0, j = 0; i < elsLen; i++) { if (pattern.test(els[i].className)) { classElements[j] = els[i]; j++; } } // send back the array of elements to whatever variable called this function return classElements; } //General AJAX Utils function reportError(msg){ window.status = msg; } function getQueryStringParams(){ var sUrl = window.location.href; var qsp = ''; var ajaxQsp = sUrl.indexOf('#'); if(ajaxQsp > 0){ qsp = sUrl.substring(ajaxQsp + 1,sUrl.length); if(qsp=='') sUrl = sUrl.replace('#',''); } var stdQsp = sUrl.indexOf('?'); if(stdQsp > 0 && qsp=='') qsp = sUrl.replace('#','').substring(stdQsp + 1,sUrl.length); return qsp; } //AJAX functions function addItemToWishList(frm, divToUpdate, formName){ var url = '/user/add_item_to_wishlist.cmd'; var pars = Form.serialize(frm) + '&formName=' + formName; var myAjax = new Ajax.Updater(divToUpdate, url, {method: 'post', parameters: pars, evalScripts: true}); } function showSamples(){ var url = '/includes/samples.jsp'; var pars = ''; var myAjax = new Ajax.Updater('mysamples', url, {method: 'get', parameters: pars}); } function showRefinements(qsParams){ var url = '/catalog/refine_refinement_panel.jsp'; var pars = qsParams; var myAjax = new Ajax.Updater('refinements', url, {method: 'get', parameters: pars, evalScripts: true, onLoading: loadingRefinement, onComplete: formatRefMenu}); } function showStoreInformationPanel(qsParams) { var url = '/map_layer_home.jsp'; var pars = qsParams; var myAjax = new Ajax.Updater('store-info-layer', url, {method: 'post', parameters: pars, evalScripts: true, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); } function showProducts(qsParams){ var productWrapper = document.getElementById('products'); productWrapper.innerHTML = ''; var url = '/catalog/refine_product_panel.jsp'; var pars = qsParams; var myAjax = new Ajax.Updater('products', url, {method: 'get', parameters: pars, evalScripts: true, onLoading: loadingProducts, onComplete: completeProducts}); schedule(); } function showStores(qsParams) { var url = '/storelocator/ajax_search_stores.cmd'; var pars = qsParams; var myAjax = new Ajax.Updater('store-finder-results', url, {method: 'post', parameters: pars, onLoading: loadingStores, onComplete: completeStores}); } function setMyStore(qsParams) { var url = '/mystore/ajax_set_my_store.cmd'; var pars = qsParams; var myAjax = new Ajax.Updater('store-finder-selected', url, {method: 'post', parameters: pars, onComplete: updateHeader}); } function setMyStoreById(storeId) { var pars = "storeId=" + storeId; var url = '/mystore/set_my_store.cmd'; var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onComplete: myStoreRefreshPage}); } function setMyStoreFromProductList(qsParams) { var url = '/mystore/ajax_set_my_store.cmd'; var pars = qsParams; var myAjax = new Ajax.Updater('store-finder-selected', url, {method: 'post', parameters: pars, onComplete: refreshPage}); } function updateHeader() { //$("store-finder-header-selected").innerHTML = $("store-finder-selected-for-header").value; var pars = "headerStyle=true"; var url = '/mystore/my_store.jsp'; var myAjax = new Ajax.Updater('store-finder-header-selected', url, {method: 'post', parameters: pars}); } function loadingStores() { changeClass('home-store-finder', 'searching-stores'); } function completeStores() { changeClass('home-store-finder', 'search-stores-listing'); getpopupHead(); } function completeStoreInfoLayer(){ $('store-info-layer').className = "showing"; getpopupHead(); } function loadingStoreInfoLayer() { $('store-info-layer').className = "loading"; } function loadingDirections() { $('store-info-layer').className = "loading"; } function completeDirections() { $('store-info-layer').className = "showing"; } function myStoreRefreshPage() { var msSearch = window.location.search; if(msSearch){ var msNewParams = msSearch.toQueryParams(); if(msNewParams.showStoreInfoMini){ window.location.href = window.location.href; }else{ msNewParams.showStoreInfoMini = 'true'; var msNewQuery = $H(msNewParams).toQueryString(); var msNewHref = window.location.href; msNewHref = msNewHref.split("?",2); msNewHref = msNewHref[0] + "?" + msNewQuery; window.location.href = msNewHref; } }else{ var msNewHref = window.location.href; msNewHref = msNewHref.replace('#',''); window.location.href = msNewHref + "?showStoreInfoMini=true"; } } function refreshPage() { window.location.href = window.location.href; } function completeProducts(){ $("prod-loading").className = "hide"; $("refine-prodwrap").className = "refine-prodwrap-transoff"; } function loadingProducts(){ $("prod-loading").className = ""; $("refine-prodwrap").className = "refine-prodwrap-transon"; } function refine(prodRefDispNameIdStr, isSelected){ dcsMultiTrack('WT.cg_n','','WT.cg_s','','WT.ti','Refinements Used','WT.si_n','Refinements','WT.si_p','used'); var refParams = (document.refinementForm.brParams.value).replace('?',''); if (isSelected) refParams += '&remove=' + prodRefDispNameIdStr; else refParams += '&add=' + prodRefDispNameIdStr; showRefinements(refParams); showProducts(refParams); addDhtmlHistory(refParams, refParams); } function showProductDetails(rQsp) { var url = '/catalog/product_details_panel.jsp'; var pars = rQsp; var myAjax = new Ajax.Updater('product_details', url, {method: 'get', parameters: pars}); } function addProduct(frm) { var url = '/checkout/add_item.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('product_details', url, {method: 'get', parameters: pars}); } function resetPanels(resetParams) { resetParams = resetParams.replace('?',''); showRefinements(resetParams); showProducts(resetParams); addDhtmlHistory(resetParams, resetParams); } function sortResults(currQsParams) { var sortIndx = currQsParams.indexOf('&sort='); if(sortIndx>0) { var refParams = currQsParams.substring(0, sortIndx) + '&sort=' + document.sortForm.sort.value + currQsParams.substring(sortIndx+7, currQsParams.length); } else { var refParams = currQsParams + '&sort=' + document.sortForm.sort.value; } refParams = refParams.replace('?',''); showRefinements(refParams); showProducts(refParams); addDhtmlHistory(refParams, refParams); } function addProdToCompare(frm, divToUpdate, formName){ var url = '/user/add_item_to_comparison.cmd'; var pars = Form.serialize(frm) + '&formName=' + formName; var myAjax = new Ajax.Updater(divToUpdate, url, {method: 'post', parameters: pars, evalScripts: true}); } function showCompareList(formName){ var url = '/includes/compare_items.jsp'; var pars = 'formName=' + formName; var myAjax = new Ajax.Updater('compare-layer-items', url, {method: 'post', parameters: pars}); } function showInfoPopup(accName){ var url = '/popup/acc_info_popup.jsp'; var pars = 'pageName=' + accName; var myAjax = new Ajax.Updater('product-info-content-layer', url, {method: 'get', parameters: pars, onComplete: visibleProductInfo}); } function showCheckOutList(productID){ var url = '/includes/checkout_pop.jsp'; var pars = 'productId=' + productID; var myAjax = new Ajax.Updater('tab_acc_trim_l', url, {method: 'get', parameters: pars}); } function showAccTrimList(productID){ var url = '/includes/acc_trim_list.jsp'; var pars = 'productId=' + productID; var myAjax = new Ajax.Updater('acc_trim_list', url, {method: 'get', parameters: pars}); } function showAccTrimListSwatch(productID){ var url = '/includes/acc_trim_list_swatch.jsp'; var pars = 'productId=' + productID; var myAjax = new Ajax.Updater('product-specs-wrapper', url, {method: 'get', parameters: pars}); } function addAccessaryProduct(frm) { var url = '/checkout/add_acc_item_to_order.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('tab_acc_trim_l', url, {method: 'post', parameters: pars}); } function addAccTrimProduct(frm) { var url = '/checkout/add_acc_trim_item_to_order.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('acc_trim_list', url, {method: 'post', parameters: pars}); } function addAccTrimSwatchProduct(frm) { var url = '/checkout/add_acc_trim_item_swatch_to_order.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('product-specs-wrapper', url, {method: 'post', parameters: pars}); } function updateRefinementPanel(updateParams){ updateParams = updateParams.replace('?',''); showProducts(updateParams); addDhtmlHistory(updateParams, updateParams); } function updateStoreInformationPanel(updateParams) { updateParams = updateParams.replace('?',''); showStoreInformationPanel(updateParams); } function updateProductPanel(updateParams){ updateParams = updateParams.replace('?',''); showProducts(updateParams); addDhtmlHistory(updateParams, updateParams); } function updateStorePanel(updateParams){ updateParams = updateParams.replace('?',''); showStores(updateParams); //addDhtmlHistory(updateParams, updateParams); } function updateMyStore(updateParams){ updateParams = updateParams.replace('?',''); setMyStore(updateParams); //addDhtmlHistory(updateParams, updateParams); } function updateMyStoreFromProductList(updateParams){ updateParams = updateParams.replace('?',''); setMyStoreFromProductList(updateParams); //addDhtmlHistory(updateParams, updateParams); } function emailProductPageToFriend(frm){ var url = '/catalog/ajax_product_email.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('tab_emailafriend_l', url, {method: 'post', parameters: pars}); } function emailCurrentPageToFriend(frm){ var url = '/catalog/ajax_product_email.cmd'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('panel_email_friend', url, {method: 'post', parameters: pars}); } function showEmailAFriendPop(frm){ var url = '/catalog/email_success.jsp'; var pars = Form.serialize(frm); var myAjax = new Ajax.Updater('panel_email_friend', url, {method: 'post', parameters: pars}); } function loadEmailAFriendTab(productId){ var url = '/catalog/email_success.jsp'; var pars = 'productId=' + productId; var myAjax = new Ajax.Updater('tab_emailafriend_l', url, {method: 'post', parameters: pars}); } function updateStoreInformationPanelDirections(updateParams) { updateParams = updateParams.replace('?',''); showStoreInformationPanelDirections(updateParams); } function showStoreInformationPanelDirections(qsParams) { var url = 'https://www.lumberliquidators.com/storelocator/ajax_delivery_getroute.cmd?PIPELINE_SESSION_ID=3df58b3ec0a86b667557c76955c49d0d'; var pars = qsParams; var myAjax = new Ajax.Updater('store-info-layer', url, {method: 'post', parameters: pars, evalScripts: true, onLoading: loadingDirections, onComplete: completeDirections }); } function loadingDirections() { $('store-info-layer').className = "loading"; } function completeDirections() { $('store-info-layer').className = "showing"; } function getZipField() { if(document.getElementById('ms-request')) { var zipField = document.getElementsByName('zipCode')[0]; zipField.onfocus = clearField; zipField.onblur = retoreField; } } function clearField() { if(this.value == "Enter ZIP") { this.value = ""; } } function retoreField() { if(this.value.length == 0) { this.value = "Enter ZIP"; } } function getMyStoreBtn() { if(document.getElementById('store-name')) { var findStoreBtn = document.getElementById('store-name'); var findChangeBtn = document.getElementById('change-store'); findStoreBtn.onclick = showStoreInfo; if(findChangeBtn){ findChangeBtn.onclick = showListOfStores; } } if(document.getElementById('ms-request')) { var myStoreRequestFrm = document.getElementById('ms-request'); var zipCodeBtn = document.getElementById('setStore'); var storeLayer = document.getElementById('store-info-layer'); if(isSLPopupEnabled){ myStoreRequestFrm.onsubmit = showMyStore; } else { myStoreRequestFrm.onsubmit = forwardMyStore; } } } function showStoreInfo() { var myStoreDiv = document.getElementById('store-info'); var storeListDiv = document.getElementById('store-list'); myStoreDiv.style.display = "block"; storeListDiv.style.display = "none"; var url = '/storelocator/store_info_mini.jsp'; var pars = 'storeId=' + storeId + '&slPop=' + isSLPopupEnabled; var myAjax = new Ajax.Updater(myStoreDiv, url, {method: 'post', parameters: pars}); var t = 0; getCloseSIBtn(); return false; } function showStoreInfoPopup() { var storeLayer = document.getElementById('store-info-layer'); // set parms var pars = "storeId=" + storeId + "&popup=true"; var url = '/storelocator/findstoreszip.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(storeLayer, url, {method: 'post', parameters: pars, onLoading: loadingStores, onComplete: completeStores}); getCloseMSBtn(); } function getCloseSIBtn() { var t = 0; // to find the element after the ajax call if(document.getElementById('si-close')) { var closeSIBtn = document.getElementById('si-close'); // try again due to the ajax call is still loading the data setTimeout('getCloseSIBtn()',100); closeSIBtn.onclick = closeLayer } // if not there try again in 250 ms else { t = t + 250; setTimeout('getCloseSIBtn()',t); } } function showListOfStores() { var storeListDiv = this.parentNode.getElementsByTagName('div')[0]; storeListDiv.style.display = "block"; if(document.getElementById('store-list')) { var storeLink = document.getElementById('store-name'); var myStoreDiv = document.getElementById('store-info'); myStoreDiv.style.display = "none"; } var maxClosestStores = 3; var url = '/storelocator/find_three_closest_stores.cmd'; var pars = 'city=' + storeCity + '&' + 'state=' + storeState + '&' + 'maxClosestStores=' + maxClosestStores; new Ajax.Request(url, { method: 'get', parameters: pars, onSuccess: function(transport) { storeListDiv.innerHTML = transport.responseText; } }); getCloseMSBtn(); return false; } function getCloseMSBtn() { var t = 0; // to find the element after the ajax call if(document.getElementById('ms-close')) { var closeMSBtn = document.getElementById('ms-close'); // try again due to the ajax call is still loading the data setTimeout('getCloseMSBtn()',100); closeMSBtn.onclick = closeLayer; } // if not there try again in 250 ms else { t = t + 250 setTimeout('getCloseMSBtn()',t); } } function closeLayer() { if(document.getElementById('store-info')) { var myStoreDiv = document.getElementById('store-info'); var storeListDiv = document.getElementById('store-list'); myStoreDiv.style.display = "none"; storeListDiv.style.display = "none"; } if(document.getElementById('store-list2')) { var storeListDiv2 = document.getElementById('store-list2'); storeListDiv2.style.display = "none"; } } function showMyStore() { var zipCodeField = document.getElementsByName('zipCode')[0]; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); // set parms var zipCode = zipCodeField.value; var pars = "zipCode=" + zipCode + "&popup=true"; var url = '/storelocator/findstoreszip.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getInputs(); getCloseBtnLayer(); return false; } function forwardMyStore() { // Grab the zip code value from the input box and create a param string - set the new URL to the window.location. Fab huh? var zipCodeField = document.getElementsByName('zipCode')[0]; var zipCode = zipCodeField.value; var pars = "zipCode=" + zipCode; var url = 'http://www.lumberliquidators.com/storelocator/findstoreszip.cmd?PIPELINE_SESSION_ID=3df58b3ec0a86b667557c76955c49d0d'; window.location.href = url + "?" + pars; return false; } // fix issue with FF input boxes being disabled in my store popup box function getInputs() { var z = 0; // to find the element after the ajax call if(document.getElementById('zip-field')) { var storeArea = document.getElementById('data-layer'); var theInputs = storeArea.getElementsByTagName('input'); var allInputs = theInputs.length; for(var i = 0; i < allInputs; i++) { if(theInputs[i].type == 'text') { theInputs[i].onclick = activatedInput; } } } else { z = z + 250; setTimeout('getInputs()', z); } } function activatedInput() { this.focus(); } function getCloseBtnLayer() { var t = 0; // to find the element after the ajax call if(document.getElementById('close-win')) { var closeBtn = document.getElementById('close-win'); var closeBtn2 = document.getElementById('close-win-two'); // try again due to the ajax call is still loading the data setTimeout('getCloseBtnLayer()',100); closeBtn.onclick = closeStoreLayer; closeBtn2.onclick = closeStoreLayer; } // if not there try again in 250 ms else { t = t + 250; setTimeout('getCloseBtnLayer()',t); } } function closeStoreLayer() { var storeLayer = document.getElementById('store-info-layer'); storeLayer.className = "hide"; return false; } function showSelectDifferentStore() { var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; // set parms var zipCode = storeZip; var pars = "zipCode=" + zipCode + "&popup=true"; var url = '/storelocator/findstoreszip.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); closeLayer(); getCloseBtnLayer(); } function showStoreResultsPanelZip() { var zipCodeField = document.getElementsByName('ajaxzipCode')[0]; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; // set parms var zipCode = zipCodeField.value; var pars = "zipCode=" + zipCode + "&popup=true&header=true"; var url = '/storelocator/findstoreszip.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); } function showStoreResultsPanelState(oMenu) { if(oMenu.selectedIndex>0){ var stateCity = oMenu.options[oMenu.selectedIndex].text.split(" - "); document.citySearch.city.value = stateCity[1]; document.citySearch.state.value = stateCity[0]; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; // needs to be set to stop window from draging when selecting an item from the drop down dragObject = null; // set parms var pars = "city=" + stateCity[1] + "&state=" + stateCity[0] + "&popup=true"; var url = '/storelocator/findstorescitystate.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); } } function showStoreInPopup(storeParams) { // set parms var pars = storeParams; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; var url = '/storelocator/store.jsp'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); } function showStoreRouteInPopup(frm) { // set parms var pars = Form.serialize(frm) + '&popup=true'; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; var url = '/storelocator/getroute.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); } function findStoresByZipPopup(frm) { // set parms var pars = Form.serialize(frm) + '&popup=true'; var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; var url = '/storelocator/findstoreszip.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); } function findStoresByStatePopup(frm) { // set parms - popup param is set in form var pars = Form.serialize(frm); var storeLayer = document.getElementById('store-info-layer'); var dataArea = document.getElementById('data-layer'); dataArea.innerHTML = ''; var url = '/storelocator/findstorescitystate.cmd'; storeLayer.className = "waiting"; var myAjax = new Ajax.Updater(dataArea, url, {method: 'post', parameters: pars, onLoading: loadingStoreInfoLayer, onComplete: completeStoreInfoLayer}); getCloseBtnLayer(); }