Test Form

NANTUCKET MONOGRAPH WITH RIZZOLI: PRE-ORDER COMMITMENT
PHOTOGRAPHS BY MICHAEL GAILLARD

Thank you for your interest in helping bring my Nantucket monograph with Rizzoli to life. The anticipated list price is $125. With your critical early support I will be able to demonstrate to Rizzoli the extent of the anticipation for this publication and strengthen the case for bringing it fully into being. While Rizzoli stated eagerly that this book should be made, and they would like to be the ones to publish it, they must now present the plan to their business team for approval. Since a week ago, I’ve received over 950 pre-orders but would like to get that number to 2,000 before their internal presentation.

In exchange for pre-ordering your book(s), you will receive a limited-edition signed 8x10 print of your choosing from my landscape collections. You have the option to pay me cost to mount and frame the piece, or you can opt out and just receive the print itself. You will receive your print within a couple months. The book’s release date will depend on what is determined in conversation with Rizzoli and their production schedule.

Please complete the fields below and click SUBMIT.

Pre-order quantity

Enter the number of signed copies you’d like to reserve.

With this order you are reserving as many signed copies of the monograph as you've designated. You are also entitled to a signed, limited-edition 8 x 10-inch fine art pigment print valued at $300.
Underwrite additional copies for artwork credit (Optional)

Optional unless you leave pre-order quantity blank.

Each copy is calculated at the monograph’s anticipated price of $125. In return, I will credit 1.3 times the total dollar amount of your underwriting toward your next artwork purchase or commission. As an example, 80 copies, worth 10,000 dollars, would result in a 13,000-dollar credit toward my net of any future commission or purchase(s).
Piece selection

Select your piece from any of these collections and submit your answer here:

Select your piece from any of the collections and submit your answer here. With your $125 pre-order purchase of my monograph, you are entitled to an 8 x 10-inch signed print (valued at $300).
Framing preference
If you do not want the piece framed, there is no additional cost to you and I will cover shipping. If you do want the piece to be framed, the forthcoming invoice will reflect the 300-dollar cost of production (paid directly to my mounter and framer) as well as the shipping cost to your address.
Email
Name and address
Send a message of support to Rizzoli (Optional)
{ const form = document.getElementById("mgSupportForm"); if (!form) return; const qtyPre = document.getElementById("mg_preorder_quantity"); const qtyUnder = document.getElementById("mg_underwritten_copies"); const piece = document.getElementById("mg_piece_selection"); const email = document.getElementById("mg_email"); const address = document.getElementById("mg_address"); const notes = document.getElementById("mg_notes"); const framingGroup = document.getElementById("mgFramingGroup"); const framingInputs = form.querySelectorAll('input[name="framing_preference"]'); const warnLine = document.getElementById("mgSubmitWarning"); const summary = document.getElementById("mgSubmissionSummary"); const toInt = (v) => { const n = parseInt(String(v || "").trim(), 10); return Number.isFinite(n) ? n : 0; }; const getCheckedValue = (nodes) => { for (const n of nodes) if (n.checked) return n.value; return ""; }; const setWarnLine = (on) => { if (!warnLine) return; warnLine.classList.toggle("is-active", !!on); }; const markFramingWarn = (on) => { if (!framingGroup) return; framingGroup.querySelectorAll(".mg-yn span").forEach((s) => { s.classList.toggle("mg-warn", !!on); }); }; const clearWarn = () => { qtyPre?.classList.remove("mg-warn"); qtyUnder?.classList.remove("mg-warn"); piece?.classList.remove("mg-warn"); email?.classList.remove("mg-warn"); address?.classList.remove("mg-warn"); markFramingWarn(false); }; const validate = () => { clearWarn(); setWarnLine(false); let ok = true; const pre = toInt(qtyPre?.value); const under = toInt(qtyUnder?.value); if (pre <= 0 && under <= 0) { qtyPre?.classList.add("mg-warn"); qtyUnder?.classList.add("mg-warn"); ok = false; } if (!String(piece?.value || "").trim()) { piece?.classList.add("mg-warn"); ok = false; } if (!String(email?.value || "").trim() || (email && !email.checkValidity())) { email?.classList.add("mg-warn"); ok = false; } if (!String(address?.value || "").trim()) { address?.classList.add("mg-warn"); ok = false; } const framingVal = getCheckedValue(framingInputs); if (!framingVal) { markFramingWarn(true); ok = false; } if (!ok) setWarnLine(true); return { ok, pre, under, framingVal }; }; for (const el of [qtyPre, qtyUnder]) { if (!el) continue; el.addEventListener("input", () => { el.value = el.value.replace(/[^\d]/g, ""); }); } const revalidateOn = (el, events) => { if (!el) return; const evts = Array.isArray(events) ? events : [events]; evts.forEach((evt) => { el.addEventListener(evt, () => { if (!warnLine?.classList.contains("is-active")) return; validate(); }); }); }; revalidateOn(qtyPre, ["input", "focus", "blur"]); revalidateOn(qtyUnder, ["input", "focus", "blur"]); revalidateOn(piece, ["input", "focus", "blur"]); revalidateOn(email, ["input", "focus", "blur"]); revalidateOn(address, ["input", "focus", "blur"]); framingInputs.forEach((r) => { r.addEventListener("change", () => { if (!warnLine?.classList.contains("is-active")) return; validate(); }); }); form.addEventListener("submit", (e) => { const { ok, pre, under, framingVal } = validate(); if (!ok) { e.preventDefault(); return; } if (summary) { summary.value = [ `Pre-order quantity: ${pre || 0}`, `Underwritten copies: ${under || 0}`, `Piece selection: ${String(piece?.value || "").trim()}`, `Framing: ${framingVal}`, `Email: ${String(email?.value || "").trim()}`, `Shipping address: ${String(address?.value || "").trim()}`, `Message to Rizzoli: ${String(notes?.value || "").trim()}` ].join("\n"); } }); })(); // ]]>