Excellent book, its always the reference in my classes for graduate and undergraduate, I use for CAD classes.The university where I am professor is INSTITUTO TECNOLOGICO DE CHIHUAHUA: you very much for all your books and for sharing with us.A question: It is possible that you continue sending me the evaluation/desk copy book?
Excellent book, in my university, we do not have CATIA license yet, but it is possible soon. I have a student license and I am studying with your book and it is helping me too much.The university where I am professor is INSTITUTO TECNOLOGICO DE CHIHUAHUA: you very much for all your books and for sharing with us.A question: It is possible that you continue sending me the evaluation/desk copy book?
Prof Sham Tickoo Books Free Download
Download Zip: https://mopviwolfbo.blogspot.com/?qo=2vKlB8
Brief Table of ContentsChapter 1: Introduction to Autodesk Revit 2019 for ArchitectureChapter 2: Starting an Architectural ProjectChapter 3: Creating WallsChapter 4: Using Basic Building Components-IChapter 5: Using the Editing ToolsChapter 6: Working with Datum and Creating Standard ViewsChapter 7: Using Basic Building Components-IIChapter 8: Using Basic Building Components-IIIChapter 9: Adding Site FeaturesChapter 10: Using Massing ToolsChapter 11: Adding Annotations and DimensionsChapter 12: Creating Project Details and SchedulesChapter 13: Creating and Plotting Drawing SheetsChapter 14: Creating 3D ViewsChapter 15: Rendering Views and Creating WalkthroughsChapter 16: Using Advanced Features(For free download--www.cadcim.com)Student ProjectIndexFree Teaching and Learning Resources
(* For faculty only)About the AuthorsCADCIM Technologies, Prof. Sham Tickoo of Purdue University Northwest, and the team of dedicated contributing authors at CADCIM Technologies are committed to bring you the best textbooks and free teaching and learning resources on CAD/CAM/CAE, Computer Programming, GIS, Civil, Animation and VFX, and related technologies. We strive to be the first and the best. That is our promise and goal.Our team of authors consists of highly qualified and experienced engineers, programmers, and animation and visual effects artists who have a strong academic and industrial background. They understand the needs of the students, the faculty, and the challenges the students face when they start working in industry.
"; dwr.engine._ieConditions[cond] = !!(div.getElementsByTagName("p").length); } return dwr.engine._ieConditions[cond]; }, tokenify: function(number) var tokenbuf = []; var charmap = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*$"; var remainder = number; while (remainder > 0) tokenbuf.push(charmap.charAt(remainder & 0x3F)); remainder = Math.floor(remainder / 64); return tokenbuf.join(""); , addEventListener: function(elem, name, func) if (elem.addEventListener) elem.addEventListener(name, func, false); else elem.attachEvent("on" + name, func); , isCallOptionArgument: function(lastArg) typeof lastArg.exceptionHandler === "function" , logHandlerEx: function(func) try func(); catch (ex) dwr.engine._debug("Exception occured in user-specified handler:"); dwr.engine._debug(ex); }; dwr.engine._initializer.init(); dwr.hub = publish: function(topicName, data) dwr.engine._execute(null, '__System', 'publish', topicName, data, ); , subscribe: function(topicName, callback, scope, subscriberData) var subscription = "" + dwr.hub._subscriptionId; dwr.hub._subscriptionId++; dwr.hub._subscriptions[subscription] = callback: callback, scope: scope, subscriberData: subscriberData ; dwr.engine._execute(null, '__System', 'subscribe', topicName, subscription, ); return subscription; , _remotePublish: function(subscriptionId, publishData) var subscriptionData = dwr.hub._subscriptions[subscriptionId]; if (!subscriptionData) return; subscriptionData.callback.call(subscriptionData.scope, publishData, subscriptionData .subscriberData); , _subscriptionId: 0, _subscriptions: ; dwr.data = StoreChangeListener: itemRemoved: function(source, itemId) , itemAdded: function(source, item) , itemChanged: function(source, item, changedAttributes) , Cache: function(storeId, listener) this.storeId = storeId; this.listener = listener; ; dwr.data.Cache.prototype.viewRegion = function(region, callbackObj) if (!region) region = ; if (!region.start) region.start = 0; if (!region.count) region.count = -1; if (!region.sort) region.sort = []; else for (var index = 0; index ').replace(/"/g,'"').replace(/'/g,''');;dwr.util.unescapeHtml = function(original) return original.replace(//g,'>').replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,'&');;dwr.util.replaceXmlCharacters = function(original) original = original.replace("&", "+");original = original.replace("", "\u203A");original = original.replace("\'", "\u2018");original = original.replace("\"", "\u201C");return original;;dwr.util.containsXssRiskyCharacters = function(original) original.indexOf('\'') != -1;dwr.util.onReturn = function(event, action) if (!event) event = window.event;if (event && event.keyCode && event.keyCode == 13) action();;dwr.util.selectRange = function(ele, start, end) ele = dwr.util._getElementById(ele, "selectRange()");if (ele == null) return;if (ele.setSelectionRange) ele.setSelectionRange(start, end);else if (ele.createTextRange) var range = ele.createTextRange();range.moveStart("character", start);range.moveEnd("character", end - ele.value.length);range.select();ele.focus();;dwr.util.byId = function() var elems = [];for (var i = 0; i options.shortStringMaxLength)str = str.substring(0, options.shortStringMaxLength-3) + "...";if (options.escapeHtml) var lines = str.split("\n");for (var i = 0; i 0)reply = "[...]";elsereply = "[]";else var strarr = [];strarr.push("[");var count = 0;for (var i = 0; i 0) strarr.push(", ");if (showLevels == 1) if (count == options.oneLineMaxItems) strarr.push("...");break;else strarr.push(options.lineTerminator + indent(indentDepth+1, options));if (i != count) strarr.push(i);strarr.push(":");strarr.push(recursive(itemvalue, showLevels-1, indentDepth+1, options));count++;if (showLevels > 1) strarr.push(options.lineTerminator + indent(indentDepth, options));strarr.push("]");reply = strarr.join("");else if (dwr.util._isObject(data) && !dwr.util._isDate(data)) if (showLevels == 0) reply = dwr.util._detailedTypeOf(data);else var strarr = [];if (dwr.util._detailedTypeOf(data) != "Object") strarr.push(dwr.util._detailedTypeOf(data));if (typeof data.valueOf() != "object") strarr.push(":");strarr.push(recursive(data.valueOf(), 1, indentDepth, options));strarr.push(" ");strarr.push("");var isDomObject = dwr.util._isHTMLElement(data);var count = 0;for (var prop in data) var propvalue = data[prop];if (isDomObject) if (propvalue == null) continue;if (typeof propvalue == "function") continue;if (skipDomProperties[prop]) continue;if (prop.toUpperCase() == prop) continue;if (count > 0) strarr.push(", ");if (showLevels == 1) if (count == options.oneLineMaxItems) strarr.push("...");break;else strarr.push(options.lineTerminator + indent(indentDepth+1, options));strarr.push(prop.length > options.propertyNameMaxLength ? prop.substring(0, options.propertyNameMaxLength-3) + "..." : prop);strarr.push(":");strarr.push(recursive(propvalue, showLevels-1, indentDepth+1, options));count++;if (showLevels > 1 && count > 0) strarr.push(options.lineTerminator + indent(indentDepth, options));strarr.push("");reply = strarr.join("");else reply = "" + data;return reply;catch(err) return (err.message ? err.message : ""+err);function indent(count, options) var strarr = [];strarr.push(options.baseIndent);for (var i=0; i= 1) ele = nodes.item(0);if (ele == null) dwr.util._debug("setValue() can't find an element with id/name: " + orig + ".");return;dwr.util.highlight(ele, options);if (dwr.util._isHTMLElement(ele, "select")) if (ele.type == "select-multiple" && dwr.util._isArray(val)) dwr.util._selectListItems(ele, val);else dwr.util._selectListItem(ele, val);return;if (dwr.util._isHTMLElement(ele, "input")) if (dwr.util._isHTMLElement(ele, "textarea")) ele.value = val;return;if (dwr.util._isHTMLElement(ele, "img")) ele.src = val;return;if (val.nodeType) if (val.nodeType == 9 ) val = val.documentElement;val = dwr.util._importNode(ele.ownerDocument, val, true);ele.appendChild(val);return;if (dwr.util._shouldEscapeHtml(options)) if ("textContent" in ele) ele.textContent = val.toString();else if ("innerText" in ele) ele.innerText = val.toString();else ele.innerHTML = dwr.util.escapeHtml(val.toString());else ele.innerHTML = val;;dwr.util._selectListItems = function(ele, val) var found = 0;var i;var j;for (i = 0; i = 1) ele = nodes.item(0);if (ele == null) dwr.util._debug("getValue() can't find an element with id/name: " + orig + ".");return "";if (dwr.util._isHTMLElement(ele, "select")) if (ele.type == "select-multiple") var reply = new Array();for (var i = 0; i = 1) for (var i = 0; i = 1) var reply = [];for (var i = 0; i 0 && dwr.util._isObject(data[0])) for (var i = 0; i 0 && dwr.util._isObject(data[0])) for (var i = 0; i 2 && dwr.util._isObject(lastarg)) options = lastarg;argcount--;var arg3 = null; if (argcount >= 3) arg3 = arguments[2];var arg4 = null; if (argcount >= 4) arg4 = arguments[3];if (!options.optionCreator && useOptions) options.optionCreator = dwr.util._defaultOptionCreator;if (!options.optionCreator && useLi) options.optionCreator = dwr.util._defaultListItemCreator;options.document = ele.ownerDocument;var text, value, li;if (dwr.util._isArray(data)) for (var i = 0; i 0) ele.removeChild(ele.firstChild);;dwr.util.addRows = function(ele, data, cellFuncs, options) ele = dwr.util._getElementById(ele, "addRows()");if (ele == null) return;if (!dwr.util._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"])) dwr.util._debug("addRows() can only be used with table, tbody, thead and tfoot elements. Attempt to use: " + dwr.util._detailedTypeOf(ele));return;if (!options) options = ;if (!options.rowCreator) options.rowCreator = dwr.util._defaultRowCreator;if (!options.cellCreator) options.cellCreator = dwr.util._defaultCellCreator;options.document = ele.ownerDocument;var tr, rowNum;if (dwr.util._isArray(data)) for (rowNum = 0; rowNum oldidpath.length) if (currId.substr(0, oldidpath.length) == oldidpath) if (newId) ele.setAttribute("id", newId);else ele.removeAttribute("id");var children = ele.childNodes;for (var i = 0; i 0 && dwr.util._isObject(value[0])) var subTemplateId = idpath + "." + prop;var subTemplateEle = dwr.util.byId(subTemplateId);if (subTemplateEle != null) dwr.util._cloneNodeForValuesRecursive(subTemplateEle, value, subTemplateId, options);else if (dwr.util._isObject(value)) dwr.util._cloneSubArrays(value, idpath + "." + prop, options);;dwr.util._getElementById = function(ele, source) var orig = ele;ele = dwr.util.byId(ele);if (ele == null) dwr.util._debug(source + " can't find an element with id: " + orig + ".");return ele;;dwr.util._isHTMLElement = function(ele, nodeName) ;dwr.util._detailedTypeOf = function(x) var reply = typeof x;if (reply == "object") reply = Object.prototype.toString.apply(x);reply = reply.substring(8, reply.length-1);return reply;;dwr.util._isObject = function(data) return (data && typeof data == "object");;dwr.util._isArray = function(data) return (data && Object.prototype.toString.call(data)=="[object Array]");;dwr.util._isArrayLike = function(data) ;dwr.util._isString = function(data) return (data && (typeof data == "string" ;dwr.util._isFunction = function(data) ;dwr.util._isDate = function(data) return (data && Object.prototype.toString.call(data)=="[object Date]");;dwr.util._importNode = function(doc, importedNode, deep) var newNode;if (importedNode.nodeType == 1 ) newNode = doc.createElement(importedNode.nodeName);for (var i = 0; i " + debug.innerHTML;if (contents.length > 2048) contents = contents.substring(0, 2048);debug.innerHTML = contents;; if (typeof dwr == 'undefined' dwr.engine == undefined) throw new Error( 'You must include DWR engine before including this file'); (function() if (dwr.engine._getObject("geographyController") == undefined) var p; p = ; p.getPostCodeMap = function(p0, p1, callback) return dwr.engine._execute(p._path, 'geographyController', 'getPostCodeMap', arguments); ; p.getSubCountries = function(p0, callback) return dwr.engine._execute(p._path, 'geographyController', 'getSubCountries', arguments); ; p.getSuburbsForPostCode = function(p0, p1, callback) return dwr.engine._execute(p._path, 'geographyController', 'getSuburbsForPostCode', arguments); ; p.getState = function(p0, p1, callback) return dwr.engine._execute(p._path, 'geographyController', 'getState', arguments); ; dwr.engine._setObject("geographyController", p); )(); if (typeof dwr == 'undefined' dwr.engine == undefined) throw new Error( 'You must include DWR engine before including this file'); (function() if (dwr.engine._getObject("shippingAjaxController") == undefined) var p; p = ; p.getDeliveryDates = function(p0, p1, callback) return dwr.engine._execute(p._path, 'shippingAjaxController', 'getDeliveryDates', arguments); ; dwr.engine._setObject("shippingAjaxController", p); )(); if (typeof dwr == 'undefined' dwr.engine == undefined) throw new Error( 'You must include DWR engine before including this file'); (function() if (dwr.engine._getObject("customerAjaxController") == undefined) var p; p = ; p.deleteQffMember = function(callback) return dwr.engine._execute(p._path, 'customerAjaxController', 'deleteQffMember', arguments); ; p.bookClubOptIn = function(callback) return dwr.engine._execute(p._path, 'customerAjaxController', 'bookClubOptIn', arguments); ; p.bookClubOptOut = function(callback) return dwr.engine._execute(p._path, 'customerAjaxController', 'bookClubOptOut', arguments); ; p.isCustomerEmail = function(p1, p2, callback) return dwr.engine._execute(p._path, 'customerAjaxController', 'isCustomerEmail', arguments); ; p.validateQffMemberId = function(p0, p1, callback) return dwr.engine._execute(p._path, 'customerAjaxController', 'validateQffMemberId', arguments); ; dwr.engine._setObject("customerAjaxController", p); )(); function isBotUserAgent() yandex/i; if (crawlerAgentRegex.test(navigator.userAgent)) return true; return false; function lazyLoadScript(url, callback) if (isBotUserAgent()) return; var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.defer = true; script.type = 'text/javascript'; script.src = url; head.appendChild(script); script.onload = callback; lazyLoadScript(" ", function() citrusAd = CitrusAd.init(" -integration.citrusad.com/v1"); ) var customPath = " -resources"; window.dataLayer = window.dataLayer []; function gtag() dataLayer.push(arguments); gtag('js', new Date()); gtag('config', 'AW-1071893088'); (function(w, d, s, l, i) []; w[l].push( 'gtm.start': new Date().getTime(), event: 'gtm.js' ); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = ' =' + i + dl; f.parentNode.insertBefore(j, f); )(window, document, 'script', 'dataLayer', 'GTM-N74L7GH'); var _gaq = _gaq []; _gaq.push(['_setAccount', "UA-413837-1"]); _gaq.push(['_trackPageview']); _gaq.push(['_setCustomVar', 1, 'Site', "PC", 2]); (function() var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? ' : ' + 'stats.g.doubleclick.net/dc.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); )(); (function(i, s, o, g, r, a, m) function() (i[r].q = i[r].q , i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) )(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', "UA-413837-3", 'auto'); ga('send', 'pageview'); (function() window._pxAppId = 'PXNs7aBMIv'; // Custom parameters // window._pxParam1 = ""; var p = document.getElementsByTagName('script')[0], s = document.createElement('script'); s.async = 1; s.src = ' '; p.parentNode.insertBefore(s, p); ()); var citrusAd = CitrusAd.init(" -integration.citrusad.com/v1"); var advertTrackerRaw = localStorage.getItem('advertTracker') var advertTracker = JSON.parse(advertTrackerRaw) if (advertTrackerRaw && window.location.pathname != advertTracker.pathname) localStorage.removeItem('advertTracker') (function() var bk = document.createElement('script'); bk.type = 'text/javascript'; bk.async = true; bk.src = ('https:' == document.location.protocol ? ' : ' + 'static.booktopia.com.au/cart-widget/v1/booktopia-cart-widget-ext.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(bk, s); )(); function getCookie(cname) var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i a color: #075f20 !important; if (typeof String.prototype.trim !== 'function') String.prototype.trim = function() return this.replace(/^\s+; function isEmpty(str) return (!str function isBlank(str) function hasStorage() return typeof(Storage) !== "undefined"; function currentTimestamp() var d = new Date(); return d.getTime(); function formatShortDate(date) try var dd = date.getDate(); var mm = date.getMonth() + 1; var yyyy = "" + date.getFullYear(); return (dd 0); function numDigits(number) var numDigits = 0; var tempNumber = number; while (tempNumber > 0) tempNumber = parseInt(tempNumber / 10); numDigits++; return numDigits; function isDigit(string) var regex = new RegExp("\\d"); return regex.test(string); function getThirdPartyCheckoutData(serviceName, successHandler) try checkoutAjaxController.getThirdPartyCheckoutData(serviceName, successHandler); catch (e) if (window.console && console.warn) console.warn(e); function startSubmit(elem) var innerHTML = jQuery(elem).html(), elemWidth = jQuery(elem).outerWidth(), elemHeight = jQuery(elem).outerHeight(); jQuery(elem).prop('disabled', true).html('').css( 'opacity': '0.5', 'width': elemWidth, 'height': elemHeight ).attr('data-innerhtml', innerHTML); function endSubmit(elem) jQuery(elem).prop('disabled', false).html(jQuery(elem).data('innerhtml')).css('opacity', '1'); function getParameterByName(name, url) if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*) function reportCitrusClick(id, redirectUrl) if (isBotUserAgent()) return; if (typeof citrusAd !== 'undefined' && citrusAd) citrusAd.reportClick(id).then(function(result) window.location.href = redirectUrl; ).catch(function(error) console.log('error ', error); window.location.href = redirectUrl; ); function reportCitrusImpression(id) if (isBotUserAgent()) return; if (typeof citrusAd !== 'undefined' && citrusAd) citrusAd.reportImpression(id).then(function(result) ).catch(function(error) console.log('error ', error); ); function fireImpactIdentifyAndCheckClickId(customerSession) if (currentPageNav !== "help") if (customerSession.signedIn) ire('identify', customerId: customerSession.emarsysCustomerUid, customerEmail: customerSession.sha1Email ); else ire('identify', customerId: "", customerEmail: "" ); if (customerSession.irClickId === "") ire('generateClickId', function(clickId) customerSessionAjaxController.updateImpactClickId(clickId); if (currentPageNav === "receipt" && typeof impactConvert === "function") impactConvert(clickId); ); else if (currentPageNav === "receipt" && typeof impactConvert === "function") impactConvert(customerSession.irClickId); function resetPostcode() localStorage.removeItem('postcode'); localStorage.removeItem('suburb'); jQuery(function() var specialOccasionIconHtml = ""; if (jQuery("#product-browse .product-results").length) jQuery("#product-browse .product-results li").each(function() if (jQuery(this).find(".in-stock").length) jQuery(this).find(".image").append(specialOccasionIconHtml); ); else if (jQuery("#manage-account.wishlist").length) jQuery("#wishlist table").each(function() if (jQuery(this).find(".in-stock").length) jQuery(this).find(".image > a").append(specialOccasionIconHtml); ); ); function validateEmail(emailElement) if (emailElement.checkValidity) return emailElement.checkValidity(); else (([a-zA-Z\-0-9]+\.)+[a-zA-Z]2,))$/; return re.test(emailElement.value); function initGoogleAuth() try var googleClientId = document.getElementById("google-signin-client_id").getAttribute("content"), isGoogleSignInEnabled = (document.getElementById("google-signin-client_id").dataset.enabled === 'true'); gapi.load('auth2', function() gapi.auth2.init( client_id: googleClientId, fetch_basic_profile: false, scope: 'profile' ).then(function() var isSignedInGoogle = gapi.auth2.getAuthInstance().isSignedIn.get(), isSignedInBooktopia = jQuery('body').hasClass('signed-in'); if (!isSignedInBooktopia && isSignedInGoogle) googleSignOut(); if (!isSignedInBooktopia && isGoogleSignInEnabled) lazyLoadScript(' ', function() if (typeof google !== "undefined") google.accounts.id.initialize( client_id: googleClientId, callback: function(response) jQuery( '') .append('').appendTo( 'body').submit(); ); setTimeout(function() google.accounts.id.prompt(); , 5000); ) , function(e) console.warn('Google auth2 error: ', e); ); ); catch (e) console.log(e); return; function googleSignOut() try gapi.auth2.getAuthInstance().signOut(); catch (e) console.log(e); return; function switchTabs(tabLink) tabLink = jQuery(tabLink); var tabId = tabLink.attr("data-tab"), tabGroup = tabLink.closest(".tabs"); tabGroup.find(".tab.selected").removeClass("selected"); tabLink.closest(".tab").addClass("selected"); tabGroup.find(".tab-content.active").removeClass("active"); tabGroup.find("#" + tabId).addClass("active"); function validateForm(formId) var jFormId = jQuery("#" + formId), allInput = jFormId.find(':input'), isValid = true; allInput.each(function(i, input) jQuery(input).one('input', function() jQuery(this).parents('.field').removeClass('error'); jQuery(this).parents('.field').find('.input-error').remove(); ); jQuery(input).parents('.field').removeClass('error'); jQuery(input).parents('.field').find('.input-error').remove(); if (!input.validity.valid) jQuery(input).parents('.field').addClass('error'); if (input.validity.valueMissing) jQuery(input).parents('.field').append( 'Please enter a value.'); if (input.validity.typeMismatch) jQuery(input).parents('.field').append( 'Please enter valid email address.'); isValid = false; ); return isValid; function escapeHtml(input) return input.replace(//g, ">") function addProductToCartReload(url, productCode, quantity, binding, preOrder, availableDate, languageCodes, supplierItemStatus, publisher, hasStockAvailable) if (window.BKT_GLOBALS.isMobileSession) var parentID = "#booktopia-notification-wrapper", responseContainerID = "#hidden-response-from-ajax", contentContainerID = "#total-cart-item-mobile"; else var parentID = "#shopping-cart-popup", responseContainerID = "#add-cart-page-placeholder", contentContainerID = "#add-cart-page-content"; if (productPopupsV2(binding, preOrder, availableDate, languageCodes, supplierItemStatus, publisher, hasStockAvailable)) var data = "cartItem[0].pID": productCode, "cartItem[0].skuGuid": productCode, "cartItem[0].quantity": quantity ; jQuery(parentID).find(responseContainerID).load(url + ' ' + contentContainerID, data, function() window.location.reload(); ); function isCustomSearchPopulated() var searchBox = document.getElementById('textbook-search-input'); if (!searchBox) searchBox = document.getElementsByClassName('search-text')[0]; if (!searchBox function htmlEncode(value) return $('').text(value).html(); function scrollToElement(element, offset, speed) $('html, body').animate( scrollTop: element.offset().top - offset , speed); function lazyLoadPopup(url, className) $.ajax( method: "GET", url: url ).done(function(htmlResponse) createModal('iframe-modal', className); $('#iframe-modal-container').html(htmlResponse); showModalContent($('#iframe-modal')); $('#iframe-modal').addClass('b-show-modal'); ); ; function validQuantity(quantity) return quantity !== null && quantity !== "" && !isNaN(quantity) && quantity >= 0; function saveCustomerFeedback(productUid, feedbackType) var feedbackTypeStr = null; switch (feedbackType) case 1: default: feedbackTypeStr = "SHOPPING CART RECOMMENDATIONS"; customerFeedbackAjaxController.recordFeedback(productUid, feedbackTypeStr); jQuery(".feedback-link").text("Thank you!"); jQuery(".feedback-link").contents().unwrap().wrap(""); function initCustomerSession(event, trigger) "true" !== status.pageIsDirty) (arguments.callee.timestamp - status.stateChangedAt) > 1000) if ((status.valid = validQuantity(status.savedQuantity))) updateDisplayCartQuantity(status.savedQuantity, true); return status; function updateBookClubMemberStatus(session) if (session.signedIn && !session.wholesaleCustomer) if (session.qualified) jQuery('.intro-text.qualified').show(); else jQuery('.intro-text.not-qualified').show(); if (!session.signedIn) jQuery('.book-club-btn').remove(); jQuery('.book-club-buy-now').attr( 'onclick': '' ); removeMemberDisplay(); else if (session.wholesaleCustomer) jQuery('.book-club-btn').remove(); jQuery('.book-club-buy-now').attr( 'onclick': 'toggleModal("#book-club-templates"); displayBookClubModal("#book-club-not-eligible",this);', 'href': 'javascript:void(0)' ); removeMemberDisplay(); else if (session.signedIn && session.optIn) jQuery('.book-club-btn').css( 'display': 'block' ); jQuery('.book-club-buy-now').remove(); showMemberDisplay(); else jQuery('.book-club-btn').remove(); jQuery('.book-club-buy-now').attr( 'onclick': 'toggleModal("#book-club-templates"); displayBookClubModal("#book-club-join-now",this);', 'href': 'javascript:void(0)' ); removeMemberDisplay(); function removeMemberDisplay() jQuery('.has-member-price .member-sale-price').remove(); jQuery('.has-member-price .regular-price').remove(); jQuery('.has-member-price .member-price-buy-now').remove(); jQuery('.has-member-price .save.member-price').remove(); function displayJoinBookClubModalOnRedirect() buyBundle = getParameterByName("bundle", window.location.search) if (buyBundle === null function updateDisplayCartQuantityCallback(quantity) var savedQuantity = null; var valid = true; if ((valid = validQuantity(quantity))) updateDisplayCartQuantity(quantity, true); else savedQuantity = parseInt(getStateValue("shoppingCartQty")); updateDisplayCartQuantity(savedQuantity, false); return valid; function updateDisplayCartQuantity(quantity, updateState) if (!validQuantity(quantity)) jQuery('#shopping-cart-summary').removeClass('full'); jQuery("#numItemsQty").text(""); jQuery("#numItemsUnits").text(""); return false; if (quantity > 0) jQuery('#shopping-cart-summary').addClass('full'); else jQuery('#shopping-cart-summary').removeClass('full'); jQuery("#numItemsQty").text(quantity); jQuery("#numItemsUnits").text(quantity == 1 ? "item" : "items"); if (updateState) setStateValue("shoppingCartQty", quantity); return true; function updateLocalEmptyCart() setStateValue("shoppingCartQty", "0"); $(function() initCustomerSession(this, 'footer'); ) function triggerSameDayDeliveryCountDown(sessionServerTime) if (jQuery("#product").length && jQuery("#currentTimeAEST").length) var serverDateTime = new Date(sessionServerTime); jQuery("#currentTimeAEST").val(toTwoDigits(serverDateTime.getHours()) + ":" + toTwoDigits(serverDateTime .getMinutes()) + ":" + toTwoDigits(serverDateTime.getSeconds())); function handleKoboPlus(session) if (session.signedIn && session.koboEBookSubscribed) jQuery("body").addClass("kobo-plus-member"); else jQuery("body").removeClass("kobo-plus-member"); ; function productPopups(binding, preOrder, availableDate, languageCodes, hasStockAvailable) hasStockAvailable function productPopupsV2(binding, preOrder, availableDate, languageCodes, supplierItemStatus, publisherName, hasStockAvailable) function checkProductAvailabilityCallback(data, url, productId, productCode, quantity, binding, preOrder, availableDate, languageCodes, isBookClubProduct, hasStockAvailable) if (!data) alert( "This product may have just sold out, or has become unavailable a short time ago.\n\nPlease select another title, search again, or click on the Author's name to see if there are any other titles by that Author that may interest you."); else if (productPopups(binding, preOrder, availableDate, languageCodes, hasStockAvailable)) if (isBookClubProduct) customerSessionAjaxController.getCustomerSession(function(session) if (session.wholesaleCustomer) toggleModal("#book-club-templates"); displayBookClubModal("#book-club-not-eligible"); else if (!session.optIn) toggleModal("#book-club-templates"); displayBookClubModal("#book-club-join-now"); else addToCart(url, productCode, quantity); ) else addToCart(url, productCode, quantity); function checkFormat(binding) "AZ" == binding) if ("CR" == binding) bindingStr = "CD-ROM"; else if ("C3" == binding) bindingStr = "CD MP3"; else if ("M3" == binding) bindingStr = "MP3"; else if ("AZ" == binding) bindingStr = "Audio CD"; return confirm("This title is NOT A BOOK. The format is " + bindingStr + ".\n\nPurchase of this product is on a firm-sale, non-returnable basis.\n\nPlease click 'OK' if you wish to add this product to your Shopping Basket, otherwise click 'Cancel' to continue browsing." ); return true; function checkLanguage(languageCodes) if (!languageCodes function checkPreOrder() return confirm( "This title is not yet published.\n\nPlease pay attention to the publication date of this title.\n\nBooktopia is taking pre-orders at the moment. An up-front payment is required to place a pre-order.\n\nPress \"OK\" to place a pre-order for this title.\nPress \"Cancel\" if you wish to wait until closer to the publication date to place your pre-order." ); function checkAvailableInFuture(availableDate) return confirm( "Due to popular demand our supplier is rushing to provide new stock of this title.\n\nWe expect the title to be available from " + availableDate + ". Complete your order now to secure your copy.\n\nPress \"OK\" to place an order for this title.\nPress \"Cancel\" if you wish to wait for availability to place your order." ); function checkPublisherCreateSpace() return confirm( "This item will be specially produced for you, is a Firm Sale and a change-of-mind cancellation cannot be accepted after the standard 1 business day cooling off period. Booktopia will not accept a return of a Print on Demand title for a change of mind." ); function checkOnDemand() return confirm( "This item will be specially produced for you, is a Firm Sale and a change-of-mind cancellation cannot be accepted after the standard 1 business day cooling off period. Booktopia will not accept a return of a Print on Demand title for a change of mind." ); ; function isSearchPopulated() var searchBox = document.getElementById('header-search-box'); if (!searchBox function getKeywords() var keywords = ""; if (isSearchPopulated()) keywords = document.getElementById('header-search-box').value.trim(); return keywords; function checkLatestKeywords(theLink, productType) keywords = getKeywords(); if (keywords && theLink.href.indexOf("search.ep?keywords=") > -1) theLink.href = window.location.protocol + "//" + window.location.host + window.location.pathname + "?keywords=" + encodeURIComponent(keywords) + "&productType=" + productType; return false; return true; function autoCompleteOnSelect(suggestion) var searchForm = jQuery('#searchform'); $(this).trigger('blur'); if (suggestion.pageUrl) window.location = suggestion.pageUrl; else if (suggestion.context) searchForm.find("select[name='productType']").val(suggestion.context); window.location = searchForm.attr('action') + '?' + searchForm.serialize() + '&suggested=L'; function autoCompleteTransformResult(response) var suggestions = JSON.parse(response); return suggestions: $.map(suggestions.suggestions, function(dataItem) var contextName = null, data = dataItem.data; if (dataItem.context && (contextName = window.lookaheadSuffixes[dataItem.context])) data['contextName'] = contextName; return value: dataItem.value, data: data, context: dataItem.context, pageUrl: dataItem.pageUrl ; ) ; function autoCompleteFormatResult(suggestion, currentValue) var baseFormat = jQuery.Autocomplete.formatResult(suggestion, currentValue); var contextName = null; var htmlResult = ''; if (suggestion.context && (contextName = window.lookaheadSuffixes[suggestion.context])) htmlResult += '' + baseFormat + ' ' + contextName + ''; else if (suggestion.context) htmlResult += '' + baseFormat + ' ' + suggestion.context + ''; else htmlResult += baseFormat; return htmlResult; $(function() window.lookaheadSuffixes = "ser": "Series", "cat": "Category", "prm": "Collection", "917504": "Books", "917505": "eBooks", "917506": "DVDs", "917507": "Audio CDs", "917508": "Magazines", "917510": "Audiobooks", "917503": "Stationery" ; $("select[name='productType']").on('change', function() $('#header-search-box').autocomplete().setOptions( params: productType: this.value ); ); ); function emarsysAddMobileTag(mobile) if (typeof mobile != 'undefined' && mobile && "true" == mobile) ScarabQueue.push(['tag', 'mobile']); function emarsysSetTestMode(testMode) if (typeof testMode != 'undefined' && testMode && "true" == testMode) ScarabQueue.push(['testMode']); function emarsysPushProductView(customerUidPk, isbn, mobile, testMode) if (!isBlank(isbn)) if (!isEmpty(customerUidPk)) ScarabQueue.push(['setCustomerId', customerUidPk]); ScarabQueue.push(['cart', []]); emarsysSetTestMode(testMode); ScarabQueue.push(['view', isbn]); emarsysAddMobileTag(mobile); ScarabQueue.push(['go']); function emarsysPushCategoryView(customerUidPk, categoryPath, mobile, testMode) if (!isBlank(categoryPath)) if (!isEmpty(customerUidPk)) ScarabQueue.push(['setCustomerId', customerUidPk]); ScarabQueue.push(['cart', []]); emarsysSetTestMode(testMode); ScarabQueue.push(['category', categoryPath]); emarsysAddMobileTag(mobile); ScarabQueue.push(['go']); function emarsysPushSearchTerm(customerUidPk, searchTerm, mobile, testMode) if (!isBlank(searchTerm)) if (!isEmpty(customerUidPk)) ScarabQueue.push(['setCustomerId', customerUidPk]); ScarabQueue.push(['cart', []]); emarsysSetTestMode(testMode); ScarabQueue.push(['searchTerm', searchTerm]); emarsysAddMobileTag(mobile); ScarabQueue.push(['go']); function emarsysPushPurchase(customerUidPk, orderNo, itemArray, mobile, testMode) if (!isBlank(orderNo)) if (!isEmpty(customerUidPk)) ScarabQueue.push(['setCustomerId', customerUidPk]); ScarabQueue.push(['cart', []]); emarsysSetTestMode(testMode); ScarabQueue.push(['purchase', orderId: orderNo, items: itemArray ]); emarsysAddMobileTag(mobile); ScarabQueue.push(['go']); function emarsysPushDefault(customerUidPk, mobile, testMode) if (!isEmpty(customerUidPk)) ScarabQueue.push(['setCustomerId', customerUidPk]); ScarabQueue.push(['cart', []]); emarsysSetTestMode(testMode); emarsysAddMobileTag(mobile); ScarabQueue.push(['go']); ; function setCookie(cname, cvalue, exdays) var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; ; $(function() $('#select-delivery-cta, #header-postcode, #lux-select-delivery-cta').on('click', function() toggleLocationModalLUX(); ); var deliverEstimateFlag = getParameterByName("deliveryEstimate", window.location.href); if (deliverEstimateFlag && deliverEstimateFlag === '1') toggleLocationModalLUX(); $(document).on('submit', '#delivery-estimate-form-header', function(e) ); $(document).on('click', '#delivery-location-selector .cancel', function(e) e.preventDefault(); $('#delivery-location-selector').hide(); ); $(window).on('click', function(e) if ($(e.target).closest('#select-delivery-wrapper')[0] !== jQuery( '#select-delivery-wrapper')[0]) $('#delivery-location-selector').hide(); ); $(window).on('load', function() if (window.BKT_GLOBALS.occasion.enabled && window.BKT_GLOBALS.occasion.occasionName !== "" && jQuery('#product').length > 0) $.ajax( method: "GET", url: '/news236.html' ).done(function(result) content = $('').append(result).find('#content').html(); if (window.BKT_GLOBALS.isMobileSession) $('#tab-occasion').html(content); else $('#delivery').html(content); ); ); ) function selectSuburb() $('#apply-delivery-input-header').autocomplete( width: 233, minChars: 3, maxHeight: 600, appendTo: $('#delivery-input-wrapper'), lookup: function(query, done) jQuery("#apply-delivery-input-suburb-header").val(query); correctPostcode = false; geographyController.getSuburbsForPostCode("AU", query, function(suburbs) var result = []; if (suburbs.length > 0) correctPostcode = true; $('#apply-delivery-input-suburb-header').val(suburbs[0]); $('#apply-delivery-input-postcode-header').val(query); for (var i = 0; i ' + suggestion.data + ' - ' + suggestion.value + ''; , ); function toggleLocationModalLUX() var localPostcode = localStorage.getItem('postcode'); appendModalTemplate("#delivery-location-selector", "#delivery-location-selector-template"); if (window.BKT_GLOBALS.isMobileSession) if (localPostcode !== null) $('#delivery-notification-modal').find('h3').text('Change your Delivery Location'); openBooktopiaNotification("#delivery-notification-modal"); else if (localPostcode !== null) $('#delivery-location-selector').find('h3').text('Change your Delivery Location'); $('#delivery-location-selector').toggle(); selectSuburb(); function displayDeliveryIcon() var themeStyle = window.BKT_GLOBALS.occasion.theme, occasionName = window.BKT_GLOBALS.occasion.occasionName, style = 'style="' + themeStyle + '"'; $('.delivery-icon,.arrives-by-text').remove(); var html = 'Arrives by ' + occasionName + ''; var htmlWithText = 'Arrives By ' + occasionName + ''; if (window.BKT_GLOBALS.isMobileSession) else $('.in-stock').closest('.product').find('.image a').append(html); function initDeliveryLocation(session) { if (window.BKT_GLOBALS.occasion.enabled !== "true") return false; localStorage.removeItem('inStockDeliveryForPostcode'); var isPDP = $('#product').length > 0, isCart = window.BKT_GLOBALS.currentNav === "shopping-cart", localPostcode = localStorage.getItem('postcode'), localSuburb = localStorage.getItem('suburb'), cutoffDate = window.BKT_GLOBALS.occasion.cutoffDate, themeStyle = window.BKT_GLOBALS.occasion.theme, occasionName = window.BKT_GLOBALS.occasion.occasionName, style = 'style="' + themeStyle + '"'; if (localPostcode && localSuburb) var postcode = localPostcode, suburb = localSuburb; else if (session.signedIn && session.zipOrPostalCode) var postcode = session.zipOrPostalCode, suburb = session.suburb; setPostcodeAndSuburb(postcode, suburb); if (postcode !== undefined && suburb !== undefined) { $('#header-postcode').css( 'display': 'flex' ); if (window.BKT_GLOBALS.isMobileSession) $('#header-postcode').find('span').text(postcode); $('#select-delivery-cta').hide(); else { $('#select-delivery-cta').html('' + '' + 'Deliver to ' + '' + postcode + ', ' + suburb + ' 2ff7e9595c
Comentarios