CINXE.COM
Get A Ventra Card | Ventra
<!DOCTYPE html> <!--[if IE 7]> <html lang="en" class="ie7"> <![endif]--> <!--[if IE 8]> <html lang="en" class="ie8"> <![endif]--> <!--[if IE 9 ]> <html lang="en" class="ie9"> <![endif]--> <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]--> <head id="head"><meta property="og:title" content="Get A Ventra Card | Ventra" /><meta property="og:type" content="website" /><meta property="og:url" content="https://www.ventrachicago.com/purchase/" /><meta property="og:description" content="" /><meta property="og:image" content="https://www.ventrachicago.com/cms/images/layout/ventraslide1.png" /><meta property="og:site_name" content="Ventra" /><meta property="fb:admins" content="1234567890" /><title> Get A Ventra Card | Ventra </title><meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!-- Global site tag (gtag.js) - Google Marketing Platform --> <script async src="https://www.googletagmanager.com/gtag/js?id=DC-8249870"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'DC-8249870'); </script> <!-- End of global snippet: Please do not remove --> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];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= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MHBHFCJ');</script> <!-- End Google Tag Manager --> <!-- Hotjar Tracking Code for https://www.ventrachicago.com/ --> <script> (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:175491,hjsv:5}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'//static.hotjar.com/c/hotjar-','.js?sv='); </script> <script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-35137511-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <link rel="stylesheet" type="text/css" href="/FileMerge.axd?t=CSS&r=IC2izhMo2dCB%2b0oedAhZXCHEwE0e1Zh1IY5mPlBacLDDeiSIMCI%2b%2fsj%2b4HK4HKWNCJfaqJb3HyA9ITi9j6hd8A%3d%3d&g=be6a8a66-eeb1-4103-ada5-32c33b7a074b&c=1" /> <script type="text/javascript" src="/FileMerge.axd?t=JavaScript&r=K7%2b4uWiaFl21c54JiKmnk%2fLlovW2E%2fo6vJgLd97u6doHrVdn2dJEHD3MFmCmAD0b&g=bdadfd9c-d4b2-4932-b271-cbf4463b7011&c=1"></script> </head> <!-- Event snippet for Ventra RT on http://www.ventrachicago.com: Please do not remove. Place this snippet on pages with events you’re tracking. Creation date: 09/22/2020 --> <script> gtag('event', 'conversion', { 'allow_custom_scripts': true, 'send_to': 'DC-8249870/rtven0/ventr0+standard' }); </script> <noscript> <img src="https://ad.doubleclick.net/ddm/activity/src=8249870;type=rtven0;cat=ventr0;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;npa=;gdpr=${GDPR};gdpr_consent=${GDPR_CONSENT_755};ord=1?" width="1" height="1" alt=""/> </noscript> <!-- End of event snippet: Please do not remove --> <!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fconnect.facebook.net%2fen_US%2ffbevents.js&c=E,1,X8xCUwsjjwSzjYxy3z3skIatCjpiUHXRdlWRh-8UICTmHglzDxHJ3dZkPg6f4U_-RvelCA8D8s8ua4Sm1rUHVnjjKfpFw7cnRd_ZCGqIsfJpmXk,&typo=1'); fbq('init', '2564207390520933'); fbq('track', 'PageView'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=2564207390520933&ev=PageView&noscript=1" /></noscript> <!-- End Facebook Pixel Code --> <body class="mainbody interior"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MHBHFCJ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <form name="main" method="post" action="/purchase/" id="main"> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> </div> <script type="text/javascript"> //<![CDATA[ var theForm = document.forms['main']; if (!theForm) { theForm = document.main; } function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } //]]> </script> <script src="/WebResource.axd?d=uI-3zt6tg4yUSwKFIl5QGM6WZFNn_6qoi-dlCDg4fIRNaagbcntxbpv-10Poa5Ex2TYvrutpf6flmkgFSC8myQYEWS01&t=638568424745067788" type="text/javascript"></script> <script src="/ScriptResource.axd?d=6-5H4moFJpkXejvuID6GIPnR5R-yc6tPoIzltw2-zxGSvUto2wdO9ldVpaI02bFCJ32M_csybMBf5cAhXGhLKwR7dEbvCv8PfiH8Vzd7aDwCBNjkMIR0pSyjhWdHD46Igk4_HI85k7tKAsbEapPJTpXy5xdCEFsZ4ZEMM6zFf9p98V_Y0&t=ffffffffc820c398" type="text/javascript"></script> <script src="/ScriptResource.axd?d=CjMc6dB3c37z3uNx1pG5KXLuxqO5aExLjjjXL8ggfjaMBNKDXg4RTiTwUNTg4KIEYh9vf-5dCLXfVKxgcnkjCRogFq6BtQMoEzuQiTE38dYVsrJ-Vlxdtp5o4upMyXnbvsHRnmgP_QReTjgWP6FZ_HtSpHuCu6ITLLDdrxwCHhcP5Krl0&t=ffffffffc820c398" type="text/javascript"></script><input type="hidden" name="hdnRequestVerificationToken" id="hdnRequestVerificationToken" value="ouAI+HP6qs7if2TwO8aAAgRQ/dBGiMNya23EKnb/otB+7VN53//zfAlb49IP8aFVIcKTmRfyw/mbB8KF5yu97w==" /><script type="text/javascript">$(document).ready(function(){ $.ajaxSetup({headers: { 'RequestVerificationToken': $("#hdnRequestVerificationToken").val() }});});</script><input type="hidden" name="hdnSubDirectory" id="hdnSubDirectory" /> <script type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('sm', 'main', ['tCT_Main_0$UserAgreement$amc',''], [], [], 90, ''); //]]> </script> <header class="header"> <a class="skip" href="#maincontent">Skip to main content</a> <div class="container_12"> <div class="grid_6"> <h1 class="logo"><a href="/">Ventra</a></h1> </div> <script> //<![CDATA[ (function (HawkSearch, undefined) { HawkSearch.BaseUrl = 'https://www.ventrachicago.com/searchproxy/'; HawkSearch.TrackingUrl = 'http://aesearch.americaneagle.com/sites/ventra'; if ("https:" == document.location.protocol) { HawkSearch.BaseUrl = HawkSearch.BaseUrl.replace("http://", "https://"); HawkSearch.TrackingUrl = HawkSearch.TrackingUrl.replace("http://", "https://"); } }(window.HawkSearch = window.HawkSearch || {})); var hawkJSScriptDoc = document.createElement("script"); hawkJSScriptDoc.async = true; hawkJSScriptDoc.src = HawkSearch.TrackingUrl + '/includes/hawksearch.min.js?v1.0'; var hawkJSTag = document.getElementsByTagName('script')[0]; hawkJSTag.parentNode.insertBefore(hawkJSScriptDoc, hawkJSTag); /* var hawkCSSScriptDoc = document.createElement("link"); hawkCSSScriptDoc.setAttribute("rel", "stylesheet"); hawkCSSScriptDoc.setAttribute("type", "text/css"); hawkCSSScriptDoc.setAttribute("href", HawkSearch.TrackingUrl + '/includes/hawksearch.css'); document.head.appendChild(hawkCSSScriptDoc); */ HawkSearch.initAutoSuggest = function () { HawkSearch.suggestInit('#txtVentraSiteSearch', { lookupUrlPrefix: HawkSearch.TrackingUrl + '/ajax.aspx?f=GetSuggestions&it=content', hiddenDivName: '', isAutoWidth: false }); HawkSearch.suggestInit('#txtVentraFaqSearch', { lookupUrlPrefix: HawkSearch.TrackingUrl + '/ajax.aspx?f=GetSuggestions&it=content', hiddenDivName: '', isAutoWidth: false }); }; //]]> </script> <div class="siteSearch"> <input id="txtVentraSiteSearch" type="text" class="text" placeholder="Search Site" /> <input id="btnVentraSiteSearch" type="button" class="btnSearch" value="Search" onclick="ventraSiteSearch()" /> </div> <script> /* <![CDATA[ */ $('#txtVentraSiteSearch').bind("enterKey", function (e) { ventraSiteSearch(); }); $('#txtVentraSiteSearch').keyup(function (e) { if (e.keyCode == 13) { $(this).trigger("enterKey"); } }); function ventraSiteSearch() { var searchKeyword = $("#txtVentraSiteSearch").val(); window.location = "https://www.ventrachicago.com/search?keyword=" + searchKeyword; } /* ]]> */ </script> <div id="CT_Header_ccHeaderLogin_pnlLogin" class="grid_6 logIn"> <script> /* <![CDATA[ */ $(function () { $("#btnHeaderLogin").click(function () { startLoading("#main"); var postvar = {}; postvar["f"] = "search"; postvar["u"] = $("#txtUsername").val(); postvar["p"] = $("#txtPassword").val(); postvar["pc"] = $("#CT_Header_ccHeaderLogin_chkPersist").is(":checked"); ventraUtil.callBack("CT_Header$ccHeaderLogin", postvar, "", true, function (obj) { if (obj.success) { location.href = obj.redir; } else { //alert(obj.Error); overlayDisplay(obj.error, { 'error': 'true' }); stopLoading("#main"); $('.errorOverlay').attr('tabindex','-1').focus(); $('.errorOverlay .overlayClose').attr('tabindex','0'); $('.overlayClose').on('click', function(){ $('.loginBar').focus(); }); } }); }); $('.logintitle').on('click',function(e){ e.preventDefault(); $('#txtUsername').attr('tabindex','-1').focus(); return false; }); }); /* ]]> */ </script> <span class="logIn-wrapper"> <div class="topLinks"><a href="/balance/"><strong>Check Balance</strong></a> | <a href="/retailers/locations/">Find a Retailer</a></div> <a class="loginBar" href="#" aria-label="Login Button"><span class="visuallyhidden">Account Login Button</span></a> <div class="dropBox rounded" role="dialog" aria-label="Login Box Active. Use this to Create Account, Register A Card or Sign In." tabindex="0"> <div class="clearfix"> <a class="fLeft logintitle" tabindex="0" aria-label="Login" href="#">Login</a> <div class="fRight"><a href="/new-account-helper/" aria-label="Create Account">Create Account</a> <span>or</span> <a href="/register-account/" aria-label="Register a Card">Register A Card</a></div> </div> <label for="txtUsername" class="visuallyhidden">Username</label> <input type="text" ID="txtUsername" placeholder="Username" class="topLoginUser" value="Username" autocomplete="off" /> <label for="txtPassword" class="visuallyhidden">Password</label> <input type="password" placeholder="Password" ID="txtPassword" class="topLoginPass" autocomplete="off" /> <!--<span id="passwordTip" class="passwordTip">Password</span>--> Forgot your <a href="https://www.ventrachicago.com/account/forgot-username/" aria-label="Forgot your username?">username</a> or <a href="https://www.ventrachicago.com/account/forgot-password/" aria-label="Forgot your password">password</a>? <div class="signIn"> <input id="CT_Header_ccHeaderLogin_chkPersist" type="checkbox" name="CT_Header$ccHeaderLogin$chkPersist" /> <label for="CT_Header_ccHeaderLogin_chkPersist">Remember Username</label> <input type="button" id="btnHeaderLogin" class="btn fRight" value="Login" title="Login Submit Button" aria-label="Submit"/> </div> </div> </span> </div> </div> </header> <nav class="mainNav clearfix"> <ul class="sf-menu"> <li id="CT_Header_ccTopNav_rptNav_ctl00_liItem" class="firstnavitemli"> <a href="/howitworks/" id="CT_Header_ccTopNav_rptNav_ctl00_lnkLink2" style="background-image:url(/cms/images/topnav/whatisventraV.png);" class="firstnavitema">What's Ventra?</a> </li> <li id="CT_Header_ccTopNav_rptNav_ctl01_liItem"> <a href="/how-to/" id="CT_Header_ccTopNav_rptNav_ctl01_lnkLink2" style="background-image:url(/cms/images/topnav/aboutfinal.png);">Help & How To</a> </li> <li id="CT_Header_ccTopNav_rptNav_ctl02_liItem"> <a href="/transitbenefits/" id="CT_Header_ccTopNav_rptNav_ctl02_lnkLink2" style="background-image:url(/cms/images/topnav/transitfinal1.png);">Transit Benefits</a> </li> <li id="CT_Header_ccTopNav_rptNav_ctl03_liItem"> <a href="/institution/institution-sign-up/" id="CT_Header_ccTopNav_rptNav_ctl03_lnkLink2" style="background-image:url(/cms/images/topnav/retailfinal.png);">Group Sales</a> </li> <li id="CT_Header_ccTopNav_rptNav_ctl04_liItem"> <a href="/app/" id="CT_Header_ccTopNav_rptNav_ctl04_lnkLink2" style="background-image:url(/cms/images/topnav/ventraapp1.png);">Ventra App</a> </li> <li id="CT_Header_ccTopNav_rptNav_ctl05_liItem" class="lastnavitemli"> <a href="javascript:searchBar();" id="CT_Header_ccTopNav_rptNav_ctl05_lnkLink2" style="background-image:url(/cms/images/topnav/search12.png);" class="lastnavitema">Search</a> </li> </ul> </nav> <div class="container_12 corwrpr-int clearfix"> <aside class="leftRail grid_3"> <div id="CT_Left_0_pnlNotLoggedIn"> <ul class="lnav"> <li> <a href="#">Get Started</a><a class="control collapse" href="#">+</a> <ul> <li> <ul> <li ><a href="/new-account-helper/">Create Account</a></li> <li class="active"><a href="/purchase/">Get a Card</a></li> <li ><a href="/register-account/">Register Your Card</a></li> <li ><a href="/balance/">Check Balance</a></li> <li ><a href="/retailers/">Become a Ventra Retailer</a></li> </ul> </li> </ul> </li> </ul> </div> </aside> <main class="mainRail grid_9" id="maincontent" tabindex="0"> <script src="/includes/knockout.validation.ae.js"></script> <script src="/includes/jquery-mask.js"></script> <script src="/includes/error-message-onclick.js"></script> <img width="1" height="1" style="border:0" class="tracker" src="HTTPS://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=354495&ns=1"/> <div class="contentBg"> <div class="inset"> <div class="progressBar"> <ol data-bind="foreach: TopTabs"> <li data-bind="css:CssClass($root.CurrentStep())"> <div class="number" data-bind="text: index"></div> <div class="text" data-bind="html: name"></div> </li> </ol> </div> </div> <div data-bind="fadeVisible: $root.CurrentStep() == 1, fadeDuration: 'normal'" > <div class="pad20 rdesign"> <div class="topText" style="width: 100%;"> <h1>Purchase a Card</h1> <p>Want to create a new Ventra online account and order a Ventra Card by mail? <br />You’re in the right place!</p> <p>Ventra Cards are what you use to pay for rides on CTA and Pace. Your online account will let you manage your fare balances and buy passes or transit value via this website or through the Ventra app.</p> <p>Before you get started, you’ll need to choose the type of Ventra Card you’d like – a classic blue Ventra Card or a newly designed Signature Ventra Card.</p> <ul> <li>The classic blue Ventra Cards are free with the purchase of a pass or at least $5 of transit value added to your account.</li> <li>The newly designed Signature Ventra Cards allow you to customize your Ventra Card and show your personality with some great Chicago design options. These Ventra Cards are available at an additional cost with the purchase of a pass or at least $5 of transit value.</li> </ul> <p>Choose how you would like to get started using the options below.</p> <p>Your new card will be sent within 7-10 business days.</p> <p>(<a href="/new-account-helper/">See other options for getting started.</a>)</p> <p>Note: We can only ship to U.S. addresses. <br /><a href="/how-to/ventra-cards/">Where else can I get a Ventra Card?</a></p> </div> </div> <div id="divVanityCards"> <div class="vanityCards-wrapper" data-bind="foreach: $root.VanityCards"> <div class="vanityCard"> <img data-bind="attr: { src: desktopImageSrc, alt: logoDescription }" class="vvc-media" /> <span data-bind="text: logoDescription" class="vvc-lngdesc"></span> <span data-bind="text: formattedCardFeeAmount" class="vvc-price"></span> <input type="button" name="VanityCard" value="Select" class="rbVanityCards btn" data-bind="click: $root.changeSelectedVanityCard"> </div> </div> </div> <div class="error-summary-div clearfix"> <div data-bind="template: { name: 'errorSummary', data: $root }"></div> </div> <div class="generalWrapper"> <div class="modHdg"> <h3> <img src="/cms/images/layout/cart.png" alt=""> Shopping Cart</h3> <a href="#" class="hideClose collapse"></a> </div> <div class="cartContents"> <div data-bind="template: { name: 'tempShoppingCart', data: $root }"></div> </div> </div> <div class="pad20"> <p class="margT20"> <span> <a href="#" class="btn" data-bind="click: $root.goToNextTab">Get Started <img src="/cms/images/layout/nextarw.png" alt="Next"></a> </span> </p> </div> </div> <div data-bind="fadeVisible: $root.CurrentStep() == 2, fadeDuration: 'normal'" > <div class="pad20"> <div class="topText"> <h1>Create account & get a Ventra Card by mail</h1> <p>Want to create a new Ventra online account and order a Ventra Card by mail? You’re in the right place!</p> <p>Ventra Cards are what you use to board CTA and Pace. Your online account will let you see and manage your fare balances online and in the Ventra app.</p> <p>Your new card will be sent within 7-10 business days.</p> <p>(<a href="/new-account-helper/">See other options for getting started.</a>)</p> <p>Note: We can only ship to U.S. addresses. <br /><a href="/how-to/ventra-cards/">Where else can I get a Ventra Card?</a></p> </div> <img src="/assets/1/7/09_V2.0_Get_StartedCard.png" alt="Ventra Card" class="rightImage" /> <h1 class="padT20 centerText">What would you like to start with?</h1> <p>You'll need to order your new Ventra Card with some fare to start with. Choose whether you'd like to start with a pass or transit value (money for fare) in your card's transit account:</p> <div data-bind="template: {name: 'errorSummary' , data:$root}"></div> <div class="bigTab purchaseLoad"> <span class="skip" tabindex="0" style="position: relative; display: block">Use left or right arrow key to select Purchase A Pass or Load Transit Value. Once selected use tab key and then Up or Down arrow key to select the Amount to Load Transit or Pass Types</span> <ul class="tabs"> <li><a class="tab1" href="#purchase">Purchase a Pass</a></li> <li><a class="tab2" href="#load">Load Transit Value</a></li> </ul> <div id="divProducts" style="min-height:400px;"> <div id="purchase"> <div class="pad20" data-bind="visible: !$root.ProductsAvailable()"> <p>There are no products available to load to your card.</p> </div> <div data-bind="visible: $root.ProductsAvailable()"> <div class="formRow brdrBtm pad10" style="width:auto;"> <input id="rbNoneProduct" type="radio" name="CTA" data-bind="click: $root.removeSelectedProduct" > <label for="rbNoneProduct">None</label> </div> <div data-bind="visible: FilterProducts(1).length > 0"> <h4 style="margin:10px 0;">CTA Products</h4> <table class="standardTable"> <thead> <tr> <th class="radioCell"></th> <th class="numberCell"></th> <th>Product Description</th> <th>List Price</th> </tr> </thead> <tbody data-bind="foreach: FilterProducts(1)"> <tr> <td> <input type="radio" name="CTA" class="rbProducts" data-bind="click: $root.changeSelectedProduct"></td> <td> <img data-bind="attr: {src: imageSrc, alt: name}" /></td> <td style="width: 350px" data-bind="text: name"></td> <td class="price" data-bind="text: formattedPrice"></td> </tr> </tbody> </table> </div> <h4 style="margin:10px 0;">CTA/Pace Products</h4> <table class="standardTable"> <thead> <tr> <th class="radioCell"></th> <th class="numberCell"></th> <th>Product Description</th> <th>List Price</th> </tr> </thead> <tbody data-bind="foreach: FilterProducts(3)"> <tr> <td> <input type="radio" name="CTA" class="rbProducts" data-bind="click: $root.changeSelectedProduct"></td> <td> <img data-bind="attr: {src: imageSrc, alt: name}" /></td> <td style="width: 350px" data-bind="text: name"></td> <td data-bind="text: formattedPrice"></td> </tr> </tbody> </table> <h4 style="margin:10px 0;">Pace Products</h4> <table class="standardTable"> <thead> <tr> <th class="radioCell"></th> <th class="numberCell"></th> <th>Product Description</th> <th>List Price</th> </tr> </thead> <tbody data-bind="foreach: FilterProducts(2)"> <tr> <td> <input type="radio" name="CTA" class="rbProducts" data-bind="click: $root.changeSelectedProduct"></td> <td> <img data-bind="attr: {src: imageSrc, alt: name}" /></td> <td style="width: 350px" data-bind="text: name"></td> <td data-bind="text: formattedPrice"></td> </tr> </tbody> </table> </div> </div> <div id="load" > <div class="pad20" data-bind="visible: !$root.TransitsAvailable()"> <p>There are no transit values available to load to your card.</p> </div> <div data-bind="visible: $root.TransitsAvailable()"> <div class="formRow brdrBtm pad10" style="width:auto;"> <input id="rbNoneTransit" type="radio" name="transit" data-bind="click: $root.removeSelectedTransit" checked> <label for="rbNoneTransit">None</label> </div> <h4>Add Transit Value</h4> <table class="standardTable"> <thead> <tr> <th class="radioCell"></th> <th>Amount</th> </tr> </thead> <tbody data-bind="foreach: Catalog().Transits"> <tr> <td> <input type="radio" name="transit" class="rbTransits" data-bind="click: $root.changeSelectedTransit"></td> <td data-bind="text: formattedPrice"> </td> </tr> </tbody> </table> </div> </div> <div data-bind="visible: false && ($root.ProductsAvailable() || $root.TransitsAvailable())"> <h4>Select Shipping Type</h4> <div class="formRow"> <div class="formBox"> <label for="drpShippingTypes"><span class="blue">*</span> Shipping Type</label> <select id="drpShippingTypes" class="med" data-bind="visible: false, options: $root.objShippingTypes, optionsText: 'description', optionsValue: 'shippingTypeId', value: objShoppingCart().ShippingType" aria-required="true"></select> </div> </div> </div> </div> </div> </div> <div class="generalWrapper" data-bind="visible: $root.ProductsAvailable() || $root.TransitsAvailable()"> <div class="modHdg"> <h3> <img src="/cms/images/layout/cart.png" alt=""> Shopping Cart</h3> <a href="#" class="hideClose collapse"></a> </div> <div class="cartContents"> <div data-bind="template: {name: 'tempShoppingCart', data:$root}"></div> </div> </div> <div class="pad20"> <p class="margT20"> <a href="#" class="btn margR20" data-bind="click: $root.goToPreviousTab"><img src="/cms/images/layout/backarw.png" alt="Back"> Back</a> <span data-bind="visible: $root.ProductsAvailable() || $root.TransitsAvailable()"> <a href="#" class="btn" data-bind="click: $root.goToNextTab">Next Step <img src="/cms/images/layout/nextarw.png" alt="Next"></a> </span> </p> </div> </div> <div id="divStep2" data-bind="fadeVisible: $root.CurrentStep() == 3, fadeDuration: 'slow'"> <div id="divStep2AddressAjax"> <div id="divStep2UsernameAjax"> <div class="pad20"> <h1>Register Transit Account</h1> </div> <div class="generalWrapper"> <div class="modHdg"> <h3><img src="/cms/images/layout/cart.png" alt=""> Shopping Cart</h3> <a href="#" class="hideClose expand"></a> </div> <div class="cartContents"> <div data-bind="template: {name: 'tempShoppingCart', data:$root}"></div> </div> </div> <div data-bind="template: {name: 'errorSummary' , data:$root}"></div> <div id="account-message-container"></div> <div class="modHdg"> <h3>Card Information</h3> </div> <div class="pad20"> <div class="blue"> * Required fields indicated below </div> <div class="formRow"> <div class="formBox"> <label for="txtCardNickname" style="width:215px"><span class="blue">*</span> Nickname for Card</label> <input type="text" id="txtCardNickname" maxlength="40" class="med" data-bind="value: objCardInfo().CardNickname" aria-required="true" /> <a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Your Ventra Transit Account allows you to manage more than one card, so a "Nickname" is required to distinguish between cards.</div> </div> </div> </div> <div class="modHdg" id="divShippingInformation"> <h3>Shipping Information</h3> </div> <div class="pad20"> <div class="blue"> * Required fields indicated below </div> <div class="formRow"> <div class="formBox"> <label for="txtShippingFirstName"><span class="blue">*</span> First Name</label> <input type="text" id="txtShippingFirstName" maxlength="15" class="med" data-bind="value: objShippingInfo().FirstName" aria-required="true"> </div> <div class="formBox last"> <label for="txtShippingLastName"><span class="blue">*</span> Last Name</label> <input type="text" id="txtShippingLastName" maxlength="15" class="large" data-bind="value: objShippingInfo().LastName" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtShippingAddressLine1" class="addressLabel"><span class="blue">*</span> Address Line 1</label> <input type="text" id="txtShippingAddressLine1" maxlength="30" class="large" data-bind="value: objShippingInfo().AddressLine1" aria-required="true"> <a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Address can only have letters, numbers, hyphens and spaces</div> </div> <div class="formBox last"> <label for="txtShippingAddressLine2">Address Line 2</label> <input type="text" id="txtShippingAddressLine2" maxlength="30" class="large" data-bind="value: objShippingInfo().AddressLine2" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtShippingCity"><span class="blue">*</span> City</label> <input type="text" id="txtShippingCity" maxlength="25" class="med" data-bind="value: objShippingInfo().City" aria-required="true"> </div> <div class="formBox"> <label for="CT_Main_0_drpShippingState"><span class="blue">*</span> State</label> <select name="CT_Main_0$drpShippingState" id="CT_Main_0_drpShippingState" aria-required="true" data-bind="value: objShippingInfo().State"> <option value="Select">Select</option> <option value="AA">AA</option> <option value="AE">AE</option> <option value="AK">AK</option> <option value="AL">AL</option> <option value="AP">AP</option> <option value="AR">AR</option> <option value="AS">AS</option> <option value="AZ">AZ</option> <option value="CA">CA</option> <option value="CO">CO</option> <option value="CT">CT</option> <option value="DC">DC</option> <option value="DE">DE</option> <option value="FL">FL</option> <option value="FM">FM</option> <option value="GA">GA</option> <option value="GU">GU</option> <option value="HI">HI</option> <option value="IA">IA</option> <option value="ID">ID</option> <option value="IL">IL</option> <option value="IN">IN</option> <option value="KS">KS</option> <option value="KY">KY</option> <option value="LA">LA</option> <option value="MA">MA</option> <option value="MD">MD</option> <option value="ME">ME</option> <option value="MH">MH</option> <option value="MI">MI</option> <option value="MN">MN</option> <option value="MO">MO</option> <option value="MP">MP</option> <option value="MS">MS</option> <option value="MT">MT</option> <option value="NC">NC</option> <option value="ND">ND</option> <option value="NE">NE</option> <option value="NH">NH</option> <option value="NJ">NJ</option> <option value="NM">NM</option> <option value="NV">NV</option> <option value="NY">NY</option> <option value="OH">OH</option> <option value="OK">OK</option> <option value="OR">OR</option> <option value="PA">PA</option> <option value="PR">PR</option> <option value="PW">PW</option> <option value="RI">RI</option> <option value="SC">SC</option> <option value="SD">SD</option> <option value="TN">TN</option> <option value="TX">TX</option> <option value="UT">UT</option> <option value="VA">VA</option> <option value="VI">VI</option> <option value="VT">VT</option> <option value="WA">WA</option> <option value="WI">WI</option> <option value="WV">WV</option> <option value="WY">WY</option> </select> </div> <div class="formBox last"> <label for="txtShippingZip"><span class="blue">*</span> Zip</label> <input type="text" id="txtShippingZip" maxlength="5" class="small" data-bind="value: objShippingInfo().Zip" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtEmail"><span class="blue">*</span> E-mail Address</label> <input type="text" id="txtEmail" maxlength="50" class="med" data-bind="value: objShippingInfo().Email" aria-required="true"> </div> <div class="formBox last"> <label for="txtConfirmEmail"><span class="blue">*</span> Confirm E-mail Address</label> <input type="text" id="txtConfirmEmail" maxlength="50" class="med" data-bind="value: objShippingInfo().ConfirmEmail" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtShippingPrimaryPhone"><span class="blue">*</span> Primary Phone</label> <input type="text" id="txtShippingPrimaryPhone" class="med valPhone" data-bind="value: objShippingInfo().PrimaryPhone" aria-required="true"> </div> </div> </div> <div class="modHdg" id="divAccountAccessInformation"> <h3>Account Access Information</h3> </div> <div class="pad20"> <div class="blue"> * Required fields indicated below </div> <div class="formRow"> <div id="divUserName" class="formBox"> <label for="txtUserName"><span class="blue">*</span> Username</label> <input type="text" id="txtUserName" maxlength="64" class="med" data-bind="value: objAccountInfo().UserName" aria-required="true"><a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Username must include a minimum of 4 characters and can include alphanumeric and select special characters ("_", ".", "@")</div> </div> <div class="formBox"> <a href="#" class="btn2 dBlock margT20" data-bind="click: function(data, event) { objAccountInfo().checkUserName(false, data) }">Check Username Availability</a> </div> <div style="padding-top:25px" class="formBox last" data-bind="html: objAccountInfo().checkUserNameMessage"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtNewPassword"><span class="blue">*</span> New Password</label> <input type="password" id="txtNewPassword" maxlength="20" class="med" data-bind="value: objAccountInfo().NewPassword" aria-required="true"><a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Password must have minimum of 8 characters and include one upper case letter, one lower case letter, and at least one number or special character (! @ # $ % ^)</div> </div> <div class="formBox last"> <label for="txtConfirmPassword"><span class="blue">*</span> Confirm Password</label> <input type="password" id="txtConfirmPassword" maxlength="20" class="med" data-bind="value: objAccountInfo().ConfirmPassword" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtAccountAccessCode" class="accessLabel"><span class="blue">*</span> Account Access Code</label> <input type="text" id="txtAccountAccessCode" maxlength="4" class="med" data-bind="value: objAccountInfo().AccountAccessCode" aria-required="true"> <a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Access Code provides the ability to use the Ventra IVR self service functions. Please enter 4-digits only.</div> </div> </div> <div class="formRow"> <div class="formBox"> <label for="drpSecurityQuestion"><span class="blue">*</span> Security Question</label> <select id="drpSecurityQuestion" style="width:420px; background-position:98% 7px;" class="med" data-bind="options: $root.objSecurityQuestions, optionsCaption: 'Select', optionsText: 'question', value: objAccountInfo().SecurityQuestion" aria-required="true"></select> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtAnswer"><span class="blue">*</span> Answer</label> <input type="text" id="txtAnswer" maxlength="80" class="med" data-bind="value: objAccountInfo().Answer" aria-required="true"> </div> </div> <table id="tOptIns" class="standardTable"> <thead> <tr> <th>Notification Preferences</th> <th></th> </tr> </thead> <tbody data-bind="foreach: objAccountInfo().OptIns"> <tr> <td class="grey" data-bind="text: description=='Marketing'?'Promotional Updates':description"></td> <td><input type="checkbox" value="true" data-bind="checked: email, attr: {name: 'alertTransit' + $index()}">Email</td> </tr> </tbody> </table> </div> <div class="modHdg"> <h3>Terms and Conditions for Transit Account</h3> </div> <div class="pad20"> <div class="generalWrapper scroll"> <div class="pad10"> <h1><strong>Ventra Program – User Agreement</strong></h1> <p><strong><em>General Terms</em></strong>. The Ventra website is provided to you by the Chicago Transit Authority (“CTA”, “we”, “us” or “our”), on behalf of ourselves and our affiliates and subsidiaries and other transit authorities participating in the Ventra fare system, including but not limited to: the Suburban Bus Division of the Regional Transportation Authority (“Pace”) and the Commuter Rail Division of the Regional Transportation Authority (“Metra”) as a service to the public and our customers. Each of CTA, Pace and Metra may be referred to individually as a “Ventra Participating Agency” and collectively as the “Ventra Participating Agencies”. To assist you in using the Ventra website, and to ensure a clear understanding of the relationship arising from your use of our Ventra website and the services we may offer through our Ventra website or via the Ventra fare payment services at subway stations and on buses on mobile applications (collectively, the “Services”), we have created (i) this User Agreement and (ii) a Privacy Policy. Our Privacy Policy explains how we treat personal information you provide to us through the CTA-owned and operated websites, mobile applications, and when we communicate with you such as through newsletters. The Privacy Policy and this User Agreement govern your use of our Ventra website and the Ventra fare payment services and are provided to you to assist you in using Ventra. <strong><em>This is an Agreement between you and the CTA</em></strong>. This User Agreement, the Privacy Policy and any applicable order forms and supplemental information, constitute your Agreement (“Agreement”). By accessing the Services (i) on any computer, mobile phone, tablet, console, or other device, (ii) via a social media platform or search engine, or (iii) through use of a Digital Wallet (defined below) on a smart device such as a mobile phone or wearable or contactless credit or debit bank card, you confirm that you have read, understood, and agreed to be legally bound by this Agreement, whether or not you are registered for a transit account with Ventra (a “Ventra Transit Account”). This Agreement may be changed at any time. You agree that CTA has the right to change this Agreement at any time, whether or not we post a notice of the changes on our websites, as we explain in more detail below. Your continued use of the Services shall be considered your acceptance of any revised Agreement. If you do not agree to this Agreement or any revisions to the Agreement, you should not use any of the Services or immediately discontinue your use of the Services. Failure to comply with this Agreement may result in termination of a Ventra Transit Account. Please read this Agreement carefully.</p> <p><strong><em>The Ventra Privacy Policy applies to this Agreement.</em></strong> Your use of the Services is subject to our Privacy Policy, which is incorporated into this Agreement by reference. You may provide us with your Personal Information when you (i) register for a Ventra Transit Account; (ii) contact the Ventra Customer Service and Ventra Call Center through any means (email, customer service agent, interactive voice response system) and/or (iii) tap your contactless payment media. Personal Information may be collected by the CTA or our third party contractor who administers the Services on our behalf. For purposes of this Agreement, "Personal Information" means any information concerning a natural person that can be linked to that person. Information concerning your Ventra Transit Account that is available online will be protected through the use of passwords and PIN numbers that you choose, and you are responsible for keeping secure and confidential. By providing us with your email address, you agree to receive information concerning your account and the program by email. In addition, third party contractors operate the Ventra website and assist the CTA with the Ventra customer service and Ventra call center. These third party contractors are subject to our Privacy Policy. By using any of the Services, and/or registering for a Ventra Transit Account, you agree that (a) you have read, understood, and accepted our Privacy Policy and (b) you allow the CTA, the Ventra Participating Transit Agencies and the third party Ventra contractor(s) access to your Personal Information.</p> <p>Although we intend to provide accurate and timely information about Ventra and the Services on CTA and the other Ventra Participating Transit Agencies websites, including the Ventra website, those websites may not always be entirely accurate, complete or current and may also include technical inaccuracies or typographical errors. In an effort to continue to provide you with as complete and accurate information as possible, information may be changed or updated from time to time without notice, including without limitation, information regarding our Ventra policies, and Services and information regarding minimum operating system requirements for Ventra Mobile Applications. Accordingly, you should verify all information before relying on it, and all decisions based on information contained on the websites are your sole responsibility and we shall have no liability for such decisions.</p> <p><strong><em>Third party materials and websites.</em></strong> The Services may also contain links to websites, applications, social media platforms, search engines or other products or services operated by other companies (“Third Party Services”). For example, many mobile apps that CTA or the other Ventra Participating Transit Agencies promote are developed and offered by third parties. All decisions as to the placement of links to external sites or pages from the services will be made by CTA in its sole discretion. CTA and the other Ventra Participating Transit Agencies are not responsible for the content of any third party website or service, nor do we warrant that a Third Party Services will be free of computer viruses or other harmful code that can impact your computer or other Web-access device. Third party websites are governed by the separate terms and privacy practices of such third parties. By using the Ventra website, mobile application(s) or other electronic means to search for or link to another site, you agree and understand that such use is at your own risk. In the case of third party apps, we list or link to them merely as a convenience to our users, and CTA and the other Ventra Participating Transit Agencies expressly disclaim any liability for these Third Party Services.</p> <p><strong><em>Third party platform integration.</em></strong> The Ventra website may integrate with third party platforms and Digital Wallets, such as Apple Pay, Google Pay and other payment services managed or owned by a third party. A mobile device wallet, such as Apple Pay or Google Pay (individually and collectively, the “Digital Wallets”), allows you to store credit or debit card account information in your mobile device and select one card to be charged whenever the mobile device is used to make a purchase. The terms “third party platform”, “third party service provider” and “digital wallet” are used herein interchangeable and shall be deemed to have the same meaning. If you use the services offered by a third party platform, including using a third party platform as a form of payment, you authorize the CTA or the other Ventra Participating Transit Agencies to collect, store, and use any information that you agreed the third party platform would provide to the CTA or the other Ventra Participating Transit Agencies, such as your name, profile picture, unique identifier, and email address. When you use a third party platform through the Ventra website, the third party may also have access to information about you and your use of the Ventra website. Please review these third parties’ privacy notices and terms of use carefully, as the CTA and the other Ventra Participating Transit Agencies do not control and cannot be responsible for these providers' privacy or information security practices.</p> <p>For information regarding fare policies of CTA and/or the other Ventra Participating Transit Agencies, visit their websites. Transit fares are subject to change in accordance with the CTA or the applicable Ventra Participating Transit Agency fare policies.</p> <table width="0"> <tbody> <tr> <td width="300"> <p><strong>Transit Agency</strong></p> </td> <td width="324"> <p><strong>Website</strong></p> </td> </tr> <tr> <td width="300"> <p>Chicago Transit Authority (CTA)</p> </td> <td width="324"> <p><a href="http://www.transitchicago.com/">www.transitchicago.com</a></p> </td> </tr> <tr> <td width="300"> <p>Pace Suburban Bus Service (Pace)</p> </td> <td width="324"> <p><a href="http://www.pacebus.com/">www.pacebus.com</a></p> </td> </tr> <tr> <td width="300"> <p>Metra</p> </td> <td width="324"> <p><a href="http://www.metrarail.com/">www.metrarail.com</a></p> </td> </tr> </tbody> </table> <p>You can contact Ventra customer service:</p> <ul> <li>At <a href="https://www.ventrachicago.com/">www.ventrachicago.com</a></li> <li>By calling 1.877.NOW.VENTRA (1.877.669.8368) (TTY: 1-888-CTA-TTY1 (1-888-282-8891))</li> <li>By visiting the Ventra Customer Service Center at 567 W. Lake Street, 2nd Floor, Chicago IL 60661</li> </ul> <ol> <li><a href="#ventraAccount"><strong>VENTRA TRANSIT ACCOUNTS</strong></a></li> <li><a href="#ventraFare"><strong>VENTRA FARE PAYMENT</strong></a></li> <li><a href="#ventraMobileApplication"><strong>VENTRA WEBSITE AND VENTRA MOBILE APPLICATION</strong></a></li> <li><a href="#overPayments"><strong>OVERPAYMENTS AND REFUNDS</strong></a></li> <li><a href="#lostStolen"><strong>LOST, STOLEN OR DAMAGED VENTRA CARDS, LINKED CONTACTLESS CREDIT OR DEBIT BANK CARDS OR MOBILE DEVICES</strong></a></li> <li><a href="#transitBenefit"><strong>TRANSIT BENEFIT FARE PROGRAM PARTICIPANTS</strong></a></li> <li><a href="#specialFarePrograms"><strong>SPECIAL FARE PROGRAMS</strong></a></li> <li><a href="#linkedTo"><strong>CONTACTLESS CREDIT AND DEBIT BANK CARDS AND MOBILE DEVICES LINKED TO A VENTRA TRANSIT ACCOUNT</strong></a></li> <li><a href="#ventraTickets"><strong>VENTRA TICKETS</strong></a></li> <li><a href="#otherTerms"><strong>OTHER TERMS</strong></a></li> </ol> <h2>1. VENTRA TRANSIT ACCOUNT<a name="ventraAccount"></a></h2> <p>An unregistered Ventra Transit Account is automatically set up when you create a Ventra online account, (ii) when you purchase a stored value card for use in the Ventra fare payment system (“Ventra Card”) or (iii) when you purchase a stored value for a Ventra Card (“Transit Value”) or purchase passes using your contactless credit or debit bank card or mobile device. If a contactless credit or debit bank card or mobile device is used, the Ventra Transit Account will automatically be linked to that card or mobile device. The Ventra Card, contactless credit or debit bank card or mobile device may then be used for travel and will automatically access the value in the unregistered Ventra Transit Account to pay fares. If you use a contactless credit or debit bank card or mobile device without first purchasing a transit pass or value, you will be charged a <a href="https://www.ventrachicago.com/terms/#paygo">Pay-As-You-Go (PAYG)</a> fare.</p> <p><strong><u>Unregistered Ventra Transit Accounts</u></strong></p> <p>Customers are not required to register for a Ventra Transit Account in order to use the Ventra fare payment system. If a Ventra Transit Account is not registered, you forfeit balance protection in the event of a lost, stolen, or damaged card or mobile device. Unregistered Ventra Transit Accounts are not eligible for automatic re-load of Transit Value (“AutoLoad”) and may not be loaded with transit benefit program funds.</p> <p><strong><u>Account Registration</u></strong></p> <p>Registering a Ventra Transit Account will protect the value in your account in the event that your card or mobile device is lost, damaged, or stolen. Additional benefits of registering a Ventra Transit Account are access to longer duration of transaction history and opting to receiving email notifications. Registration can be accomplished by going online to <a href="https://www.ventrachicago.com/">www.ventrachicago.com</a>, by logging onto the Ventra mobile app, by calling Ventra customer service at 1.877.NOW.VENTRA (1.877.669.8368), or by visiting the Ventra customer service center. Registration is required for Ventra Cards ordered via the website or Ventra customer service.</p> <p>Ventra Transit Account registration including current contact information is mandatory for RTA-administered special fare programs, U-Pass, other Special Fare Programs, and to participate in your employer's transit benefit program. Failure to maintain current contact information may result in temporary suspension of a Ventra Transit Account. Visit Ventra Participating Transit Agencies’ respective websites for more information about these programs.</p> <p>The following information is required for registration:</p> <ul> <li>Name</li> <li>Address</li> <li>Card number and Expiration Date</li> <li>Email address</li> <li>Date of birth</li> <li>Contact phone number</li> </ul> <p>In providing us with Ventra Transit Account registration information, you confirm that the information is current, accurate and authentic. You agree to keep us updated if any of the information you provide changes.</p> <p><strong><u>Dormancy Fee</u></strong></p> <p>If a Ventra Transit Account has been inactive for 18 continuous months (it has not been used for transit or reloaded), a dormancy fee of $5 per month may be charged against the account until the balance is reduced to zero. Any unused pass products in the account will be converted to the amount initially paid for that pass. You can stop the monthly deduction of the dormancy fee at any time with a single use of the account for transit or by adding value to your account. If you have registered your Ventra Transit Account and provided contact information, you will be sent a warning notice prior to the initial assessment of the dormancy fee to inform you that a dormancy fee will soon be charged if your account remains inactive.</p> <p>If the value in your Ventra Transit Account is less than the dormancy fee, the remaining value in your account will be reduced to zero.</p> <h2>2. VENTRA FARE PAYMENT <a name="ventraFare"></a></h2> <p><strong>To ensure proper functioning of the Ventra system, remove your payment card from your wallet or purse before paying your fare. Touch only the card or device you wish to use to the Ventra Reader when you pay a fare on buses or at CTA “L” station turnstiles and gates. The Ventra Participating Transit Agencies are not responsible if your fare is charged to a card or through a mobile device that you did not intend to use, due to your failure to properly adhere to these terms and conditions or other posted instructions.</strong></p> <p>To pay a fare on CTA or Pace using Ventra, you must use a Ventra Transit Account loaded with Transit Value, Transit Benefit Value, or a pass; a contactless credit or debit card issued by a bank or financial institution and which has Offline Data Authentications (ODA) enabled; or a compatible Digital Wallet (e.g., Apple Pay or Google Pay) on a smart device, such as a smart phone or a wearable device; or use a Ventra Ticket (individually and collectively, the “Ventra Payment Methods”). To pay a fare on Metra using Ventra, you must use the Ventra mobile application (“Ventra Mobile Application”).</p> <p>If you use a contactless credit or debit bank card or Digital Wallet and do not have sufficient Transit Value or a pass in an associated Ventra Transit Account, you will be charged a “<a href="https://www.ventrachicago.com/terms/#paygo">Pay-As-You-Go</a>” (PAYG) fare, which will be charged to your credit or debit bank card or an account linked to your Digital Wallet each time you tap.</p> <p>You may use more than one method when paying a fare through the Ventra Mobile Application or at a Ventra vending machine (i.e., you may split the payment of a fare between two or more Ventra Payment Methods). For example, if you have 50 cents in your Ventra Transit Account, you can make up the difference with cash or credit or debit bank card, the balance in your Ventra Transit Account or another form of payment such as another Ventra Card.</p> <p>When paying a fare using any other method, you may only use one method for fare payment (i.e., you cannot split the payment of a fare between two or more Ventra Payment Methods). For example, if you have 50 cents in your Ventra Transit Account, you cannot make up the difference with cash or another form of payment such as another Ventra Card. Instead, the entire fare due must come from one payment source.</p> <p>A Ventra Payment Method which does not have sufficient value, or is otherwise declined by the card issuer may result in your being denied entry into the train or bus.</p> <p>The minimum balance in a Ventra Transit Account required to travel on CTA or Pace is the cost of a single trip.</p> <p>The maximum allowed Ventra Transit Account balance is $300, including both Transit Value and Transit Benefit Value.</p> <p>Transit Value from different Ventra Transit Accounts may not be combined to pay fares.</p> <p>Customers using Transit Value may transfer within and between Ventra Participating Transit Agencies systems according to the agencies' fare policies. Visit the Ventra Participating Transit Agencies’ websites for more information.</p> <p>A Ventra Transit Account can contain up to three passes at one time New passes will not be activated until the pass you are currently using expires.</p> <p>A fare is deducted from the first payment method present in a Ventra Transit Account in the following order:</p> <ul> <li>Shorter duration joint CTA-Pace passes that are valid on both Ventra Participating Transit Agencies</li> <li>Longer duration joint CTA-Pace passes that are valid on both Ventra Participating Transit Agencies</li> <li>Shorter duration agency-specific passes that are valid on just one Ventra Participating Transit Agency</li> <li>Longer duration agency-specific passes that are valid on just one Ventra Participating Transit Agency</li> <li>Transit Benefit Value</li> <li>Transit Value</li> </ul> <p>If a ride is eligible for a transfer fare, it will be automatically calculated and deducted from a Ventra Transit Account when a Ventra fare reader is tapped while transferring.</p> <p>You may use your Ventra Transit Account linked card or Digital Wallet to pay for you and up to six (6) additional people riding with you on CTA or Pace. Your Ventra Transit Account will be charged for each of these additional riders. Additional riders may not travel on your transit pass or with your transit benefit funds. Fares and any transfers for additional riders must be paid from Transit Value in your Ventra Transit Account or on a PAYG basis.</p> <p>Please check <a href="http://www.metrarail.com/">www.metrarail.com</a>with respect to Metra Fare payment.</p> <p><strong><u>Ventra Cards</u></strong></p> <p>There is a non-refundable $5 fee for a Ventra Card. However, the cost of your Ventra Card will be credited to your Ventra Transit Account as Transit Value if you register your account within 90 days of purchasing your Ventra Card. This $5 credit may not be available for registration of Special Fare Program Ventra Cards, Commemorative Special Event Ventra Cards, or other non-standard Ventra Cards. The Ventra Participating Transit Agencies do not charge any fee for adding your Ventra Card to a Digital Wallet (i.e., Apple Pay or Google Pay). Only Ventra Cards that we determine are eligible can be added to a Digital Wallet. If your Ventra Card or the underlying account is not in good standing, that Ventra Card will not be eligible to be added to or enrolled in a Digital Wallet. In addition, if you are adding a Ventra Card to a Digital Wallet for the first time, then at least $5 of Transit Value must be stored on the Ventra Card before it can be added to a Digital Wallet.</p> <ul> <li>Ventra Cards must be replaced before their printed expiration dates. If you have registered your Ventra Transit Account and provided an email address, Ventra will send you an e-mail prior to your card's expiration date to inform you that your card will be expiring and to confirm your mailing address. Ventra will replace your expiring card at no cost to you. A new card will be sent automatically to the address you have registered to your account. If you have not registered your Ventra Transit Account, you will be required to get a new replacement Ventra Card and pay the replacement card fee.</li> </ul> <ul> <li>Users must present their Ventra Card for inspection by authorized representatives of Ventra Participating Transit Agencies' security, or law enforcement personnel upon request.</li> </ul> <p><strong><u>Blocked Ventra Transit Accounts, Ventra Cards, Credit and Debit Bank Cards, and Mobile Devices</u></strong></p> <p>In certain circumstances as described below, your Ventra Transit Account, Ventra Card, contactless credit or debit bank card, or Digital Wallet linked to our Ventra Transit Account may be blocked from use on Ventra or placed on hold.</p> <p>The card or mobile device linked to your Ventra Transit Account may be blocked under the following circumstances:</p> <ul> <li>Permanent block <ul> <li>Card reported lost or stolen</li> <li>Card reported damaged</li> <li>Ventra Transit Account closed</li> <li>Repeated funding source denial after depletion of the Autoload value</li> <li>Documented safety risk to the transit system and/or customers</li> <li>Fraud</li> <li>Suspicion of other illegal activity, in CTA’s sole discretion</li> </ul> </li> <li>Temporary block <ul> <li>Ventra Transit Account payment source is denied after depletion of the Autoload value</li> <li>A Special Fare Program issued Ventra Card is determined to have been misused</li> <li>An excessively used Special Fare Program-issued Ventra Card when the registered card holder does not verify its proper use upon request</li> </ul> </li> </ul> <p>If a payment source is not authorized for use by the financial institution when Ventra submits the charge, a block will be placed on that card or device.</p> <p>A temporary block can be removed by calling Ventra customer service after you have resolved any issues with your credit or debit bank card or other payment source, or by contacting CTA after you have resolved any Special Fare Program-related issues.</p> <p>Multiple denials of a funding source could result in a disallowance of your ability to use that funding source.</p> <p><strong>Conviction for a crime committed on CTA or a Ventra Participating Transit Agency’s property, or posing a threat to the safety of others on CTA or a Ventra Participating Transit Agency’s property may result in loss of riding privileges and/or a permanent revocation of a Special Fare Program free or reduced fare riding privilege.</strong></p> <h2>3. VENTRA WEBSITE AND VENTRA MOBILE APPLICATION <a name="ventraMobileApplication"></a></h2> <p>Registration is not required to use the Ventra website or Ventra Mobile Application. However, anonymous users will not be able to add Transit Value to a Ventra Transit Account or purchase passes. Ventra users with a registered Ventra Transit Account will be able to fully utilize the services available with the Ventra website and Ventra Mobile Application.</p> <p>Additional terms and conditions for using the Ventra Mobile Application are incorporated herein and can be found at<a href="https://www.ventrachicago.com/mobile/mobile-app-terms/">https://www.ventrachicago.com/mobile/mobile-app-terms/</a>.</p> <p>Additional terms and conditions for purchasing Metra mobile tickets and riding on Metra are incorporated herein and can be found at<a href="http://www.metrarail.com/">www.metrarail.com</a>.</p> <p>The Ventra Mobile Application is available free of charge at the Apple iTunes Store and Google Play Store.</p> <p>CTA works to support the latest versions of the operating systems on which the Ventra Mobile Application is deployed. You should update your mobile devices if you do not have the latest available version installed.</p> <p>CTA reserves the right, without notice, to change or update from time to time the minimum operating system requirements for the Ventra Mobile Application. CTA also reserves the right to refuse to allow the Ventra Mobile Application to be fully utilized on any operating system that is behind by more than two releases. Generally, if you fail to upgrade your mobile device’s operating system to meet the minimum requirements, you will not be able to access software updates for the Ventra Mobile Application and you may no longer be able to utilize the Ventra Mobile Application from your mobile device.</p> <p>If you are unable to access Ventra tickets or passes on your Ventra Mobile Application or if you inadvertently deleted the Ventra Mobile Application and are unable to re-install it, you can notify Ventra by going to www.ventrachicago.com and submitting a customer service request, by calling 1.877.NOW.VENTRA (1.877.669.8368), or by visiting the Ventra Customer Service Center. Please bring a photo I.D. with you for this transaction.</p> <p>Once you notify Ventra that you are unable to access Ventra tickets or passes on your Ventra Mobile Application or if you inadvertently deleted the Ventra Mobile Application and are unable to re-install the mobile application, the Ventra Customer Service and/or Ventra Call Center will assist you in ensuring that any refunds (if applicable) are made directly to your funding source and cancelling all inactive tickets or passes.</p> <h2>4. OVERPAYMENTS AND REFUNDS <a name="overPayments"></a></h2> <p><strong><u>Overpayments at Ventra Vending Machines</u></strong></p> <p>Ventra vending machines do not provide change. If you purchase a pass at a Ventra vending machine using cash and do not have the exact cost of the pass, the overpayment will be applied to your Ventra Transit Account as Transit Value.</p> <p><strong><u>Account Refunds</u></strong>are <u>not</u> provided except in the following situations:</p> <ul> <li>Registered account holders who are unable to deplete their Ventra Transit Account due to an unplanned move or relocation out of the State of Illinois may request a refund of remaining Transit Value on a registered Ventra card with a minimum balance of $10, which will be mailed to their new address. Account holders must submit the out-of-state refund request along with supporting documentation to officially close their account and receive a refund of pending Transit Value and/or passes.</li> </ul> <ul> <li>A duly-authorized representative of an estate may request a refund of remaining Transit Value on a recently deceased account holder’s registered Ventra Card. Representatives must submit the refund request, along with supporting documentation, to close the account and receive a refund.</li> </ul> <p><a href="https://www.ventrachicago.com/terms/#ventraTickets">See the Ventra Ticket section for information regarding overpayment for Ventra Tickets.</a></p> <p>Any request for a Ventra Transit Account adjustment due to improper functioning Ventra equipment must be received by the Ventra customer call center within four (4) calendar days from the alleged event. You should be prepared to provide the location of the equipment, the train station or bus route, date and time of the alleged occurrence.</p> <p>Refunds for Metra fares will be governed by the fare policies found at <a href="http://www.metrarail.com/">www.metrarail.com</a>. Metra refunds are only available only through Metra by contacting Revenue Accounting (312) 542-8398.</p> <h2>5. LOST, STOLEN, OR DAMAGED VENTRA CARDS, LINKED CONTACTLESS CREDIT OR DEBIT BANK CARDS OR MOBILE DEVICES <a name="lostStolen"></a></h2> <p>Visit www.ventrachicago.com or call 1.877.NOW.VENTRA (1.877.669.8368) immediately to report your card or mobile device as lost, stolen, or damaged. If you have registered your Ventra Transit Account, the balance in your Ventra Transit Account is protected after you report the loss or damage to Ventra.</p> <p><strong><u>Lost, Stolen, or Damaged Ventra Cards</u></strong></p> <p>If your Ventra Card is lost, stolen, or damaged, you must notify Ventra by going to <a href="https://www.ventrachicago.com/">www.ventrachicago.com</a>and submitting a customer service request, by calling 1.877.NOW.VENTRA (1.877.669.8368), or by visiting the Ventra customer service center. Please bring a photo I.D. with you for this transaction.</p> <ul> <li>Once you notify Ventra that your card is lost, stolen, or damaged, your Ventra Card will be blocked from use. (<a href="https://www.ventrachicago.com/terms/#blocked">See the Blocked Ventra Accounts and Cards section</a>.) Once your card is blocked, it may not be reactivated or used again. If your card has been deactivated, you must obtain a replacement card. Your Ventra Payment Method will be charged for rides taken until you notify Ventra that your card is lost, stolen, or damaged. <a href="https://www.ventrachicago.com/terms/#ventraAccount">See the Overpayment and Refunds section for more details</a></li> <li>If you have registered your account and provide your account access code, your new card will be linked to your Ventra Transit Account and will access your Ventra Transit Account balance.</li> <li>Ventra will mail replacement cards within 5-7 business days of your notice to Ventra that your Ventra Card was lost, stolen or damaged. It is your responsibility to provide a current mailing address. If you do not receive your replacement card within seven business days after you reported it lost, stolen or damaged, contact Ventra customer service by calling 1.877.NOW.VENTRA (1.877.669.8368) or in person at the Ventra customer service center.</li> </ul> <p><strong><u>Defective Ventra Cards</u></strong></p> <p>A Ventra Card is considered defective if a Ventra fare reader is unable to read the card and the card has not yet been activated (i.e., used for the first time). If you receive a defective Ventra Card, contact Ventra customer service by calling 1.877.NOW.VENTRA (1.877.669.8368) or in person at the Ventra customer service center. If a Ventra Card is found to be defective, it will be replaced at no cost, provided that the defect(s) were not caused by customer misuse or improper handling.</p> <p>After you notify Ventra that your card or mobile device is lost, stolen, or damaged, Ventra will unlink that card or mobile device from your Ventra Transit Account. After the card or mobile device is unlinked, it can no longer access your Ventra Transit Account or be used for travel. You must contact Ventra customer service by calling 1.877.NOW.VENTRA (1.877.669.8368), or visiting the Ventra customer service center, and provide the account access code for your account to link a new card or mobile device to the account in order to use any remaining Transit Value or passes in the account. Your Ventra Transit Account will be charged for rides taken until Ventra is notified that a linked card or mobile device is lost, stolen, or damaged. Registered account holders will not be responsible for unauthorized use of a lost or stolen card or mobile device after reporting the loss to Ventra.</p> <p>You are responsible for notifying your credit or debit bank card provider regarding lost or stolen cards, and your mobile provider regarding lost or stolen mobile devices.</p> <h2>6. TRANSIT BENEFIT PROGRAM PARTICIPANTS <a name="transitBenefit"></a></h2> <p>Ventra allows you to purchase transit products with subsidized or pre-tax funds as allowed by Section 132 of the Internal Revenue Code. These funds can be added to your Ventra Transit Account as Transit Benefit Value or as passes identified as being paid for using transit benefits. This is required in order to ensure the funds are kept separate from other funds you may load into your Ventra Transit Account.</p> <p>The terms in this section apply to customers who elect to have pre-tax dollars from their paychecks loaded into their Ventra Transit Accounts by their employers as part of their employer's transit benefit program.</p> <p>The Ventra Participating Agencies disclaim any responsibility for your employer's or third party administrator's failure to load transit benefit program dollars to your account in a timely and consistent manner.</p> <p>When Transit Benefit Value is loaded into your Ventra Transit Account, you can use that value to purchase transit passes, or you may travel and have an individual fare deducted from your Transit Benefit Value. Your Ventra Transit Account's maximum Transit Value balance limit is $300 (combined limit of Transit Value and Transit Benefit Value). You cannot load additional Transit Benefit Value once your account balance reaches $300. Any Ventra Transit Account load that would cause your balance to exceed $300 will be refused in its entirety.</p> <p>Your participation in your employer's transit benefit program and your use of transit benefit program dollars is subject to certain laws, rules, and regulations including Section 132 of the Internal Revenue Code (32 U.S.C. § 132). The Ventra Participating Transit Agencies disclaim any and all liability for the failure of you or your employer to follow any and all laws, rules or regulations that govern your transit benefit program dollars and/or your employer's transit benefit program. Your pre-tax payroll funds may only be used to pay for rides you take to and from work and work-related purposes. Ventra reserves the right to suspend your account for misuse of transit benefit program funds or to take any other appropriate action.</p> <p>You may only discontinue participation in a transit benefit program through your employer. If there is remaining value in your Ventra Transit Account, it will continue to be available to you for transit.</p> <p>Unused Transit Benefit Value will be treated like unused Transit Value. Dormancy fees will be assessed if and when applicable as described in the <a href="https://www.ventrachicago.com/terms/dormancy">Dormancy Fee section.</a></p> <p>Ventra and the Ventra Participating Transit Agencies cannot issue refunds of transit benefit program pre-tax dollars.</p> <p>It is your responsibility to apply for a refund from your employer or your employer's third party administrator in accordance with your employer's policy and applicable law.</p> <h2>7. SPECIAL FARE PROGRAMS<a name="specialFarePrograms"></a></h2> <p>A Ventra Card is required for special fare programs that provide the cardholder free or reduced fare riding privileges (“Special Fare Program”). See the Ventra Participating Transit Agencies' websites or <a href="http://www.rtachicago.com/" target="_blank">www.rtachicago.com</a> for information regarding qualifying for a Special Fare Program. Special Fare Programs used with Metra tickets will require additional verification. Ventra Cards for Special Fare Programs may in some instances not have all features available to other Ventra Cards (such as being able to be loaded in a Digital Wallet).</p> <p>All Special Fare Program participants must adhere to the following rules unless otherwise stated in these Terms and Conditions:</p> <ul> <li>Special Fare Program fares are restricted to the eligible person whose name and photograph appear on the Special Fare Program Ventra Card.</li> <li>Special Fare Program participants must register their account via <a href="http://www.ventrachicago.com/" target="_blank">www.ventrachicago.com</a> and maintain their current address with Ventra.</li> <li>The printed information on a Special Fare Program Ventra Card, including card number, participant photo and name, must remain clear and readable.</li> <li>A person may not have a Special Fare Program Ventra Card issued under more than one Special Fare Program, with the exception of Regional Transportation Authority (RTA) Paratransit Cards.</li> </ul> <p>Violation of any of the above rules may result in confiscation of the Special Fare Program Ventra Card and/or suspension of the cardholder’s privileges under a Special Fare Program.</p> <ol> <li><u>RTA-Issued Ventra Cards</u></li> </ol> <p>RTA-issued Ventra Cards require certification by the applicant that he or she is eligible for the RTA reduced fare or ride free program (the “Reduced Fare or Ride Free Program”). Any information falsely presented on the application for the RTA Reduced Fare or Ride Free Program may result in prosecution to the fullest extent allowable under the law. Similarly, any loss of eligibility after issuance of a Ventra Card under an RTA Reduced Fare or Ride Free Program must be reported immediately to the RTA.</p> <p>Riders who are issued a RTA Reduced Fare or RTA Ride Free Program Ventra Card must certify that the fare privileges are<strong>for their personal use only and understand that if they allow another person to use their RTA Reduced Fare or Ride Free Program privileges, their card could be suspended, they could be removed from the RTA Reduced Fare or Ride Free Program and prosecuted to the fullest extent under the law.</strong></p> <p>RTA-issued Ventra Cards for the senior ride free, disabled ride free, senior reduced fare, disabled reduced fare, and ADA paratransit programs may be used only on Ventra Participating Transit Agencies subject to their respective procedures and pursuant to the following rules:</p> <ul> <li>As stated on the application the cardholder submits for the Program benefits, the benefit is solely for the cardholder and use of the Reduced Fare or Ride Free Program privileges is restricted to the eligible person whose name and photograph appear on the face of the Ventra Card</li> <li>The RTA-issued Ventra Card is not transferable.</li> <li>Use of RTA Reduced Fare or Ride Free Program privileges by anyone other than the eligible cardholder whose name and photograph appear on the Special Fare Program card is prohibited.</li> <li>Prohibited use of a RTA-issued Ventra Card will result in confiscation of the card and/or suspension of privileges of the Reduced Fare or Ride Free Program.</li> <li>Prohibited use of a RTA-issued Ventra Card may subject the cardholder to whom the card was issued to criminal prosecution and/or suspension of privileges under the RTA Reduced Fare or Ride Free Program.</li> <li>Lost or stolen RTA-issued Ventra Cards must immediately be reported to the RTA Customer Service: (312) 913-3110. A fee may be charged for replacement cards.</li> </ul> <p>RTA-administered Ventra Special Fare Programs are subject to the agreement between the RTA and Ventra Participating Transit Agencies.</p> <ol start="2"> <li><u>U-Pass Ventra Cards</u></li> </ol> <p><strong>U-Pass Ventra Cards allow students whose schools participate in the U-Pass program with CTA to ride on the CTA at eligible times pursuant to the following rules:</strong></p> <ul> <li>Use of the fare privileges provided by the U-Pass Ventra Card and any other fare media provided under the U-Pass Program is restricted to the student whose name and photograph appear on the Ventra card.</li> <li>The U-Pass Ventra Card is not transferable.</li> <li>Use of U-Pass fare privileges by anyone other than the student whose name and photograph appear on the U-Pass Ventra Card is prohibited.</li> <li>Prohibited use of a U-Pass Ventra Card or any other fare media provided under the U-Pass Program will result in confiscation and/or suspension of the U-Pass Ventra Card/fare media for a full calendar year per the terms of the U-Pass Agreement.</li> <li>Prohibited use of a U-Pass Ventra Card or any other fare media provided under the U-Pass Program may subject the student to whom the U-Pass Ventra Card is assigned to criminal prosecution and/or future ineligibility for a U-Pass Ventra Card or fare product.</li> <li>Prohibited use of a U-Pass Ventra Card or any other fare media provided under the U-Pass Program will be reported to the relevant participating school.</li> </ul> <p>The terms of use for the U-Pass Ventra Card are subject to the agreement between participating educational institutions and the CTA.</p> <ol start="3"> <li><u>Military Service Pass (“MSP”) Ventra Cards</u></li> </ol> <p>MSP Ventra Cards allow the eligible cardholder to travel free of charge<u>on CTA only </u>pursuant to the following rules. You may also load Transit Value into the Ventra Transit Account linked to your MSP Ventra Card to pay fares on Pace.</p> <ul> <li>Use of the fare privileges provided by the MSP Ventra Card is restricted to the individualwhose name and photograph appear on the Ventra Vard.</li> <li>The MSP Ventra Card is not transferable.</li> <li>Use of MSP fare privileges by anyone other than the eligible cardholder whose name and photograph appear on the MSP Ventra Card is prohibited</li> <li>Prohibited use of a MSP Ventra Card will result in confiscation and/or suspension of the card.</li> <li>Prohibited use of a MSP Ventra Card may subject the cardholder to whom the MSP Ventra Card is assigned to criminal prosecution and/or future ineligibility for a MSP Ventra Card.</li> </ul> <ol start="4"> <li><u>Student Ventra Cards</u></li> </ol> <p>Student Ventra Cards are required for student reduced fares which are available only while school is in session. CTA Student Reduced Fare riding privileges are available to full-time students age 7-20 for trips to and from regular day classes at a public, parochial or private elementary or high school on school days 5:30 am-8:30 pm pursuant to the following rules.</p> <p>Student Reduced Fare privileges provided by Student Ventra Cards may only be used for travel by the student to whom they have been issued. Parents and guardians may assist students by loading Transit Value onto Student Ventra Cards at Ventra vending machines, at participating retailers, online at <a href="www.ventrachicago.com" target="_blank">www.ventrachicago.com</a>, through Ventra Customer Service or using the Ventra app.</p> <ul> <li>The Student Ventra Card is not transferable.</li> <li>Use of Student Reduced Fare privileges provided by the Student Ventra Card by anyone other than the eligible student cardholder is prohibited.</li> <li>Prohibited use of a Student Ventra Card will result in confiscation and/or suspension of the card.</li> </ul> <p>As use of Student Reduced Fare privileges, provided by the Student Ventra card, is restricted to the eligible student cardholder, Student Ventra Cards are not valid for Reduced Fare Multiple Riders. Student Ventra accounts are not required to be registered.</p> <p>The terms of use for the Student Ventra Card are subject to the agreement between the validating schools and participating transit agencies.</p> <p><strong><u>Confiscation of a Ventra Card/Suspension of Privileges Under a Special Fare Program</u></strong></p> <p>A Ventra Card issued under a Special Fare Program is subject to confiscation and the Special Fare Program privileges suspended in any of the following circumstances:</p> <ul> <li>The Special Fare Program privileges are used by someone other than the eligible cardholder whose name and/or photograph appear on the card.</li> <li>The Special Fare Program card is observed being given away, sold, bartered or exchanged for any consideration in violation of CTA Ordinance No. 006-75;</li> <li>The Special Fare Program card is used excessively to the degree that such usage, when compared to other cardholder use in the same Special Fare Program, indicates that the card is not being used solely by the eligible cardholder, CTA has requested but has not been provided with a verification from the cardholder that the excessive usage is legitimate, and the pattern of excessive usage has occurred at least once before.</li> <li>The cardholder of the Special Fare program card is determined to have misrepresented his or her eligibility for the card and/or has continued to use the card after eligibility has lapsed.</li> </ul> <p>If your Ventra Card issued under a Special Fare Program has been confiscated or your Special Fare Program privileges suspended in any of the aforementioned circumstances or in any other circumstances indicating fraud and use by someone other than the eligible cardholder, CTA or the applicable Ventra Participating Transit Agency will notify the cardholder if known, or where unknown, the administrator of the Special Fare Program of such confiscation or suspension by telephone, email or in writing to the cardholder’s address and/or email address on file or where unknown the administrator of the Special Fare Program via U.S. mail.</p> <p><strong>Your Right to Appeal a Confiscation or Suspension</strong></p> <p>The cardholder will be given an opportunity to appeal the confiscation of a Ventra Card or suspension of privileges in a Special Fare Program by completing and submitting a written Affidavit and Appeal to Lift Suspension of Ventra Card. Completed affidavits may be submitted via email to CTA at specialfareprograms@transitchicago.com or via U.S. Mail to Chicago Transit Authority, Revenue Department, 7th Floor, 567 West Lake Street, Chicago, IL 60661-1498. Questions regarding a confiscation of a Ventra Card or suspension of Special Fare Program privileges may be directed to CTA Customer Service at 312-681-4265.</p> <h2>8. CONTACTLESS CREDIT AND DEBIT BANK CARDS AND MOBILE DEVICES LINKED TO A VENTRA TRANSIT ACCOUNT <a name="linkedTo"></a></h2> <p>If you have a compatible credit or debit bank card or mobile device, you have the option of using it in place of a Ventra Card for travel. If you do not have sufficient Transit Value or an appropriate pass in your <a href="https://www.ventrachicago.com/terms/#ventraAccount">Ventra Transit Account linked to your compatible credit or debit bank card or mobile device</a>, or if you do not purchase Transit Value or a pass before you travel, you will be charged the PAYG fare.</p> <p>If you are using a compatible credit or debit bank card in place of a Ventra Card to pay for fares through a Ventra Transit Account, when your bank card expires and you receive a replacement card, you MUST notify Ventra customer service of the new expiration date BEFORE using the replacement card for travel. If you have registered your Ventra Transit Account, your new card will then be able to access the Transit Value and/or passes in your Ventra Transit Account. If you do not notify Ventra customer service of the new expiration date for your bank card before using it for travel, your bank card will not be able to access the Transit Value or passes in your Ventra Transit Account and you will be charged a <a href="https://www.ventrachicago.com/terms/#paygo">PAYG fare</a>.</p> <p><strong><u>How to add a Ventra Card to a Digital Wallet?</u></strong></p> <p>You can add an eligible Ventra Card to a Digital Wallet in the Ventra Mobile Application.</p> <p>We reserve the right to terminate our participation in a Digital Wallet or with a Digital Wallet provider at any time.</p> <p><strong><u>Important Information Regarding Using a Mobile Device Wallet on Ventra</u></strong></p> <p>You can use certain Digital Wallets to pay for fares on Ventra, where such Digital Wallet is supported by the Ventra Mobile Application. Digital Wallets are not subject to this Agreement or the Privacy Policy. Digital Wallets are governed by separate terms of use and privacy policies. You agree and understand that use of Digital Wallets to pay for fares on Ventra is at your own risk and to use such Digital Wallets you must visit the individual sites of the Digital Wallets and review their privacy and security policies and other terms and conditions, as they may be different from those of our sites. Neither CTA nor the other Ventra Participating Transit Agencies sponsor or endorse any of the Digital Wallets. We expressly disclaim any liability for these Digital Wallets. CTA does not guarantee and is not responsible for the privacy or security of these sites, including the accuracy, completeness or reliability of their information.</p> <p>When using a Digital Wallet payment service on Ventra, you need to be aware of the following:</p> <ul> <li>You can purchase Transit Value and passes at a Ventra vending machine or Ventra mobile app, as well as travel by paying a <u>Pay As You Go</u> (PAYG) fare</li> <li>Ventra will be able to provide limited customer support for issues relating to the use of a Ventra Card in a Digital Wallet. Ventra will not be able to provide you with customer support for issues relating to payment of <u>Pay As You Go</u> (PAYG) fares with a Digital Wallet. Additional customer support can also be handled by the Digital Wallet provider and/or your bank.</li> </ul> <p><em>√ - Contact your mobile service provider for more information about mobile wallet use.</em></p> <p><strong><u>Lost, Stolen, or Damaged Ventra-Linked Cards and Mobile Devices</u></strong></p> <p>See the <a href="https://www.ventrachicago.com/terms/#ventraAccount">Ventra Fare Payment section</a> if your Ventra-linked card or mobile device is lost, stolen, or damaged.</p> <h2>9. VENTRA TICKETS <a name="ventraTickets"></a></h2> <ul> <li>You cannot set up a Ventra Transit Account with a Ventra ticket. Ventra tickets must be used before their printed expiration dates</li> <li>Ventra tickets without a printed expiration date must be used within 90 days of purchase</li> <li>Ventra tickets are not reloadable</li> <li>Ventra tickets are not transferable and cannot be replaced, refunded or redeemed for cash</li> <li>There are no refunds or replacements for lost, stolen, or damaged tickets</li> <li>Users must present their Ventra ticket for inspection by authorized Ventra Participating Transit Agency personnel, security, or law enforcement personnel upon request</li> <li>Ventra tickets may be confiscated for misuse</li> </ul> <p>Metra tickets are not Ventra tickets, please check <a href="http://www.metrarail.com/">www.metrarail.com</a> for Metra ticket policies.</p> <p><strong><u>Overpayments for Ventra Ticket Purchases at Ventra Vending Machines</u></strong></p> <p>Ventra vending machines do not provide change. If you purchase a Ventra ticket at a Ventra vending machine using cash and do not have the exact cost of the Ventra ticket, any overpayment will not be added to your Ventra ticket(s) and will not be returned to you.</p> <p><strong><u>Defective Ventra Tickets</u></strong></p> <p>A Ventra ticket is considered defective if a Ventra fare reader is unable to read the ticket and the ticket has not been activated (i.e., used for the first time). If you receive a defective Ventra ticket, contact Ventra customer service by calling 1.877.NOW.VENTRA (1.877.669.8368) or in person at the Ventra customer service center. If a Ventra Ticket is found to be defective, it will be replaced at no cost, provided that the defect(s) were not caused by customer misuse or improper handling.</p> <p><strong><u>Ventra Tickets contain sensitive electronic components and customers are warned:</u></strong></p> <ul> <li>DO NOT PUNCH HOLES IN YOUR TICKET</li> <li>DO NOT BEND, TWIST, OR FOLD YOUR TICKET</li> </ul> <h2>10. OTHER TERMS <a name="otherTerms"></a></h2> <p><strong><u>Termination</u></strong></p> <p>The Ventra Participating Transit Agencies may terminate this Agreement at any time and for any reason. Upon such termination, your use of your Ventra Transit Account may be blocked.</p> <p>If you cancel your Ventra Transit Account or if your Ventra Transit Account is terminated pursuant to these terms, you will remain responsible for any and all fares that are due or become due on your account.</p> <p><strong><u>Governing Law</u></strong></p> <p>This Agreement shall be governed and construed in accordance with the laws of the State of Illinois. Venue shall lie in Cook County, Illinois.</p> <p><strong><u>Privacy Policy</u></strong></p> <p>Your use of Ventra is subject to Ventra's <a href="https://www.ventrachicago.com/privacy-policy/" target="_blank">Privacy Policy</a>.</p> <p>Personal information you give when you purchase transit passes, value, or your Ventra card may be linked to information about the use of your Ventra Transit Account or ticket. The Ventra Participating Transit Agencies will use that information to implement Ventra's policies allowing for the recovery of balances on lost or stolen cards. Information concerning your account that is available online will be protected through the use of user names, passwords and PIN numbers that you choose. By providing us with your email address, you agree to receive information concerning your account and the Ventra program by email, or, where you choose to opt-in to other communications, such other communications.</p> <p><strong><u>Disclaimer</u></strong></p> <p>THE VENTRA PARTICIPATING TRANSIT AGENCIES EXPRESSLY DISCLAIM ANY REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED OR EXPRESS WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. YOU AGREE TO INDEMNIFY AND HOLD THE VENTRA PARTICIPATING TRANSIT AGENCIES HARMLESS FROM AND AGAINST ANY AND ALL DAMAGE, LOSS, COSTS, EXPENSE, OR LIABILITIES RELATING TO, ARISING FROM, OR AS A RESULT OF YOUR USE OF VENTRA.</p> <p>You agree to pay any costs, including reasonable attorneys' fees, incurred by the Ventra Participating Transit Agencies to enforce the terms of this Agreement.</p> <p><strong><u>Limitation of Liability </u></strong></p> <p>NEITHER VENTRA, THE VENTRA PARTICIPATING TRANSIT AGENCIES NOR ANY OF THEIR AFFILIATES, LICENSORS, CLIENTS, SUPPLIERS, ADVERTISERS OR SPONSORS, NOR OUR OR THEIR DIRECTORS, OFFICERS, EMPLOYEES, CONSULTANTS, AGENTS OR OTHER REPRESENTATIVES (“VENTRA RELEASEES”), ARE OR WILL BE RESPONSIBLE OR LIABLE TO YOU OR TO ANY THIRD PARTY FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY, PUNITIVE OR OTHER DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS, LOSS OF DATA OR LOST PROFITS), UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER THEORY ARISING OUT OF OR RELATING IN ANY WAY TO THE SERVICES AND/OR MATERIALS CONTAINED ON THE SERVICES, ANY LINKED SITE OR ANY PRODUCT OR SERVICE PURCHASED THROUGH THE SERVICES. WITHOUT LIMITING THE FOREGOING, YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE VENTRA RELEASEES SHALL HAVE NO LIABILITY OR RESPONSIBILITY WHATSOEVER FOR (I) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, WHETHER ARISING IN CONTRACT OR IN TORT, RESULTING FROM YOUR ACCESS TO AND USE OF OUR SITE, INCLUDING ANY CLAIM, CAUSE OF ACTION, OBLIGATION, LIABILITY, RIGHT, OR REMEDY WHETHER OR NOT ARISING FROM THE NEGLIGENCE OF VENTRA OR THE VENTRA PARTICIPATING TRANSIT AGENCIES OR THEIR VENTRA RELEASEES, (II) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (III) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM OUR SITE, (IV) ANY BUGS, VIRUSES, WORMS, TROJAN HORSES, DEFECTS, DATE BOMBS, TIME BOMBS OR OTHER ITEMS OF A DESTRUCTIVE NATURE WHICH MAY BE TRANSMITTED TO OR THROUGH OUR SITE BY ANY THIRD PARTY, (V) ANY ERRORS, MISTAKES, INACCURACIES OR OMISSIONS IN ANY MATERIALS, OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY MATERIALS POSTED, EMAILED, TRANSMITTED OR OTHERWISE MADE AVAILABLE VIA VENTRA, AND/OR (VI) THE FAILURE OF A VENTRA PARTICIPATING TRANSIT AGENCY TO HONOR A TICKET. ; YOUR SOLE AND EXCLUSIVE REMEDY FOR DISSATISFACTION WITH THE SERVICES OR MATERIALS OR ANY LINKED SITE IS TO STOP USING THE SERVICES, MATERIALS, OR LINKED SITE, AS APPLICABLE. THE MAXIMUM LIABILITY OF VENTRA AND THE VENTRA PARTICIPATING TRANSIT AGENCIES AND THEIR LICENSORS, AND YOUR SOLE AND EXCLUSIVE REMEDY, FOR ALL DAMAGES, LOSSES SUFFERED BY YOU AND CAUSES OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE, SHALL BE ONE HUNDRED DOLLARS ($100.00).</p> <p><strong><u>Indemnification </u></strong></p> <p>You agree to indemnify, defend and hold Ventra and the Ventra Participating Transit Agencies, their affiliates, licensors, clients, suppliers, advertisers and sponsors, contractors and their respective directors, officers, employees, consultants, agents and other representatives (collectively referred to herein as the “Indemnified Parties”), harmless from and against any and all claims, damages, losses, costs (including reasonable attorneys’ fees and other reasonable expenses of litigation or arbitration) and other expenses which any of the Indemnified Parties or third parties may incur, sustain, or be subject to that arise directly or indirectly out of or from (a) your breach of these terms and conditions; (b) any allegation that any materials you submit to the Indemnified Parties or transmit via the Ventra website or Ventra Mobile Application infringe or otherwise violate the copyright, trademark, trade secret or other intellectual property or other rights of any third party; and/or (c) your use of Ventra, the Ventra website, the Ventra Mobile Application, and the Ventra Participating Transit Agencies’ systems.</p> <p><strong><u>Severability</u></strong></p> <p>The invalidity of any term or terms of this Agreement shall not affect any other term of this Agreement, which shall remain in full force and effect.</p> <p><strong><u>Modification</u></strong></p> <p>The Ventra Participating Transit Agencies reserve the right to change these terms and conditions at any time without advance notice.</p> <p><strong><u>Assignment</u></strong></p> <p>This Agreement cannot be assigned.</p> <p><strong><u>Third Party Beneficiaries</u></strong>.</p> <p>Metra and Pace are each a third party beneficiary of this Agreement, and such third-party beneficiary has the right to enforce this Agreement against you.</p> <p><strong><u>Regulations</u></strong></p> <p>Use of Ventra is subject to all applicable tariffs, terms, conditions, rules, regulations, policies, and procedures.</p> <p>Questions about these terms and conditions or Ventra's Privacy Policy Statement should be directed to Ventra Customer Service at 1.877.NOW.VENTRA (1.877.669.8368).</p> <p>Revised: 5/13/2020</p> </div> </div> <div class="pad10"> <p><input type="checkbox" id="understand" data-bind="checked: objAccountInfo().TermsAndConditions"><label for="understand" class="bold grey"> I understand and I agree with the Terms and Conditions for Transit Account</label> </p><p><a target="_blank" href="/assets/1/7/VentraUserAgreement20200706.pdf" class="iconLink pdf">Download Terms and Conditions for Transit Account</a></p> </div> <p class="margT20"> <a href="#" class="btn margR20" data-bind="click: $root.goToPreviousTab"><img src="/cms/images/layout/backarw.png" alt="Back"> Back</a> <a href="#" class="btn" data-bind="click: objShippingInfo().checkEmail">Next Step <img src="/cms/images/layout/nextarw.png" alt="Next"></a> </p> </div> </div> </div> </div> <div data-bind="fadeVisible: $root.CurrentStep() == 4, fadeDuration: 'slow'"> <div class="pad20"> <h1>Review Order</h1> </div> <div class="generalWrapper"> <div class="modHdg"> <h3><img src="/cms/images/layout/cart.png" alt=""> Shopping Cart</h3> <a href="#" class="hideClose expand"></a> </div> <div class="cartContents"> <div data-bind="template: {name:'tempShoppingCart'}"></div> </div> </div> <div data-bind="template: {name: 'errorSummary' , data:$root}"></div> <div class="modHdg"> <h3>Shipping Information</h3> </div> <div class="pad20" data-bind="with: objShippingInfo()"> <div data-bind="text: FullName()"></div> <div data-bind="text: AddressLine1() + ' ' + AddressLine2()"></div> <div data-bind="text: City() + ', ' + State() + ' ' + Zip()"></div> Email Address: <span data-bind="text: Email()"></span><br> Primary Phone: <span data-bind="text: PrimaryPhone()"></span><br /> <p></p> <p><a href="#" class="btn2" data-bind="click: $root.EditShippingInformation">Edit</a></p> </div> <div class="modHdg"> <h3>Account Information</h3> </div> <div class="pad20" data-bind="with: objAccountInfo()"> <p> Username: <span data-bind="text: UserName()"></span><br> Password: ****<br> Account Access Code: <span data-bind="text: AccountAccessCode()"></span><br> </p> <p><a href="#" class="btn2" data-bind="click: $root.EditAccountAccessInformation">Edit</a></p> <br> <p class="margT20"> <a href="#" class="btn margR20" data-bind="click: $root.goToPreviousTab"><img src="/cms/images/layout/backarw.png" alt="Back"> Back</a> <a href="#" class="btn" data-bind="click: $root.goToNextTab">Next Step <img src="/cms/images/layout/nextarw.png" alt="Next"></a> </p> </div> </div> <div id="divPaymentInformation" data-bind="fadeVisible: $root.CurrentStep() == 5, fadeDuration: 'slow'"> <div class="pad20"> <h1>Payment Information</h1> </div> <div class="generalWrapper"> <div class="modHdg"> <h3><img src="/cms/images/layout/cart.png" alt=""> Shopping Cart</h3> <a href="#" class="hideClose expand"></a> </div> <div class="cartContents"> <div data-bind="template: {name: 'tempShoppingCart', data:$root}"></div> </div> </div> <div data-bind="template: {name: 'errorSummary' , data:$root}"></div> <div id="divSubmitStep" style="min-height:400px;"> <div class="pad20" data-bind="with: objPaymentInfo()"> <div class="blue"> * Required fields indicated below </div> <div class="formRow"> <div class="formBox" data-bind="css: {fadedCards: CreditCardType() != ''}"> <img src="/cms/images/layout/americanexpress_cc.png" class="margT20" alt="American Express" data-bind="css: {activeCard: CreditCardType() == 'American Express'}" /> <img src="/cms/images/layout/discover_cc.png" class="margT20" alt="Discover" data-bind="css: {activeCard: CreditCardType() == 'Discover'}"/> <img src="/cms/images/layout/mastercard_cc.png" class="margT20" alt="MasterCard" data-bind="css: {activeCard: CreditCardType() == 'MasterCard'}"/> <img src="/cms/images/layout/visa_cc.png" class="margT20" alt="Visa" data-bind="css: {activeCard: CreditCardType() == 'Visa'}"/> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtCreditCardNumber"><span class="blue">*</span> Credit Card Number</label> <input type="text" id="txtCreditCardNumber" data-bind="value: CreditCardNumber, valueUpdate: 'afterkeydown', attr: {maxlength: CreditCardType() == 'American Express'?'15':'16'}" class="med" aria-required="true" /> </div> <div class="formBox"> <label for="txtSecurityCode" style="width:220px"><span class="blue">*</span> Security Code</label> <input type="text" id="txtSecurityCode" maxlength="4" class="med" data-bind="value: CVV" aria-required="true"> <a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">The Security Code is the 3 digit number on the back of your bank card. For AMEX, it is a 4 digit number on the front of your card. </div> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtNameOnCreditCard"><span class="blue">*</span> Name on Credit Card</label> <input type="text" id="txtNameOnCreditCard" maxlength="60" data-bind="value: NameOnCreditCard, valueUpdate: 'afterkeydown'" class="med" aria-required="true" /> </div> <div class="formBox"> <label for="CT_Main_0_drpPaymentExpireMonth"><span class="blue">*</span> Expires</label> <select name="CT_Main_0$drpPaymentExpireMonth" id="CT_Main_0_drpPaymentExpireMonth" aria-required="true" data-bind="value: ExpireMonth"> <option value="Month">Month</option> <option value="01">1-January</option> <option value="02">2-February</option> <option value="03">3-March</option> <option value="04">4-April</option> <option value="05">5-May</option> <option value="06">6-June</option> <option value="07">7-July</option> <option value="08">8-August</option> <option value="09">9-September</option> <option value="10">10-October</option> <option value="11">11-November</option> <option value="12">12-December</option> </select> </div> <div class="formBox"> <label for="CT_Main_0_drpPaymentExpireYear"><br></label> <select name="CT_Main_0$drpPaymentExpireYear" id="CT_Main_0_drpPaymentExpireYear" class="small" data-bind="value: ExpireYear"> <option value="Year">Year</option> <option value="2024">2024</option> <option value="2025">2025</option> <option value="2026">2026</option> <option value="2027">2027</option> <option value="2028">2028</option> <option value="2029">2029</option> <option value="2030">2030</option> <option value="2031">2031</option> <option value="2032">2032</option> <option value="2033">2033</option> <option value="2034">2034</option> <option value="2035">2035</option> <option value="2036">2036</option> <option value="2037">2037</option> <option value="2038">2038</option> <option value="2039">2039</option> <option value="2040">2040</option> <option value="2041">2041</option> <option value="2042">2042</option> <option value="2043">2043</option> <option value="2044">2044</option> <option value="2045">2045</option> <option value="2046">2046</option> <option value="2047">2047</option> <option value="2048">2048</option> <option value="2049">2049</option> <option value="2050">2050</option> <option value="2051">2051</option> </select> </div> </div> </div> <div class="pad20" data-bind="with: objBillingInfo()"> <div class="formRow"> <div class="formBox" style=""> <input type="checkbox" data-bind="checked: IsBillingSameAsShipping"> Is Billing Address Same as Shipping? <a class="tip" href="#" style="margin:0 0 10px 10px"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Check this box if your billing and shipping addresses are the same</div> </div> </div> <div data-bind="visible: IsBillingSameAsShipping() != true"> <div class="formRow"> <div class="formBox"> <label for="txtBillingFirstName"><span class="blue">*</span> First Name</label> <input type="text" id="txtBillingFirstName" maxlength="15" class="med" data-bind="value: FirstName" aria-required="true"> </div> <div class="formBox last"> <label for="txtBillingLastName"><span class="blue">*</span> Last Name</label> <input type="text" id="txtBillingLastName" maxlength="15" class="large" data-bind="value: LastName" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtBillingAddressLine1"><span class="blue">*</span> Address Line 1</label> <input type="text" id="txtBillingAddressLine1" maxlength="30" class="large" data-bind="value: AddressLine1" aria-required="true"> <a class="tip" href="#"><img src="/cms/images/layout/toolbtn.png" alt="What is this?"></a> <div class="edittip">Address can only have letters, numbers, hyphens and spaces</div> </div> <div class="formBox last"> <label for="txtBillingAddressLine2">Address Line 2</label> <input type="text" id="txtBillingAddressLine2" maxlength="30" class="large" data-bind="value: AddressLine2"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtBillingCity"><span class="blue">*</span> City</label> <input type="text" id="txtBillingCity" maxlength="25" class="med" data-bind="value: City" aria-required="true"> </div> <div class="formBox"> <label for="CT_Main_0_drpBillingState"><span class="blue">*</span> State</label> <select name="CT_Main_0$drpBillingState" id="CT_Main_0_drpBillingState" class="small" aria-required="true" data-bind="value: State"> <option value="Select">Select</option> <option value="AA">AA</option> <option value="AE">AE</option> <option value="AK">AK</option> <option value="AL">AL</option> <option value="AP">AP</option> <option value="AR">AR</option> <option value="AS">AS</option> <option value="AZ">AZ</option> <option value="CA">CA</option> <option value="CO">CO</option> <option value="CT">CT</option> <option value="DC">DC</option> <option value="DE">DE</option> <option value="FL">FL</option> <option value="FM">FM</option> <option value="GA">GA</option> <option value="GU">GU</option> <option value="HI">HI</option> <option value="IA">IA</option> <option value="ID">ID</option> <option value="IL">IL</option> <option value="IN">IN</option> <option value="KS">KS</option> <option value="KY">KY</option> <option value="LA">LA</option> <option value="MA">MA</option> <option value="MD">MD</option> <option value="ME">ME</option> <option value="MH">MH</option> <option value="MI">MI</option> <option value="MN">MN</option> <option value="MO">MO</option> <option value="MP">MP</option> <option value="MS">MS</option> <option value="MT">MT</option> <option value="NC">NC</option> <option value="ND">ND</option> <option value="NE">NE</option> <option value="NH">NH</option> <option value="NJ">NJ</option> <option value="NM">NM</option> <option value="NV">NV</option> <option value="NY">NY</option> <option value="OH">OH</option> <option value="OK">OK</option> <option value="OR">OR</option> <option value="PA">PA</option> <option value="PR">PR</option> <option value="PW">PW</option> <option value="RI">RI</option> <option value="SC">SC</option> <option value="SD">SD</option> <option value="TN">TN</option> <option value="TX">TX</option> <option value="UT">UT</option> <option value="VA">VA</option> <option value="VI">VI</option> <option value="VT">VT</option> <option value="WA">WA</option> <option value="WI">WI</option> <option value="WV">WV</option> <option value="WY">WY</option> </select> </div> <div class="formBox"> <label for="txtBillingZip"><span class="blue">*</span> Zip</label> <input type="text" id="txtBillingZip" maxlength="5" class="small" data-bind="value: Zip" aria-required="true"> </div> </div> <div class="formRow"> <div class="formBox"> <label for="txtBillingPrimaryPhone"><span class="blue">*</span> Primary Phone</label> <input type="text" id="txtBillingPrimaryPhone" class="med valPhone" data-bind="value: PrimaryPhone" aria-required="true"> </div> </div> </div> <p class="margT20"> <a href="#" class="btn margR20" data-bind="click: $root.goToPreviousTab"><img src="/cms/images/layout/backarw.png" alt="Back"> Back</a> <a href="#" data-bind="click: $root.processOrder" class="btn">Submit <img src="/cms/images/layout/nextarw.png" alt="Next"></a> </p> </div> </div> </div> <div data-bind="fadeVisible: $root.CurrentStep() == 6, fadeDuration: 'slow'" class="printContent"> <div class="pad20" data-bind="with: objOrderConfirmation()"> <h1>Order Confirmation</h1> <h4>Your Ventra Card order has been successfully processed.</h4> <p class="blue">Order Number: <span data-bind="text: OrderNumber()"></span> <br>Payment Authorization: <span data-bind="text: PaymentAuthorization()"></span></p> <p>Please print this page for your records</p> <p>You will also receive a confirmation email shortly from us regarding your order.</p> <br> <p><a href="#" class="btn2 printButton">Print Page</a></p> </div> <div class="modHdg"> <h3>For Your Records</h3> </div> <div class="pad20" data-bind="visible: objBillingInfo().IsBillingSameAsShipping() != true, with: objBillingInfo()"> <p>Billing Address: </p> <p> <span data-bind="text: FirstName() + ' ' + LastName()"></span> <br><span data-bind="text: AddressLine1() + ' ' + AddressLine2()"></span> <br><span data-bind="text: City() + ', ' + State() + ' ' + Zip()"></span> </p> </div> <div class="pad20" data-bind="visible: objBillingInfo().IsBillingSameAsShipping() == true, with: objShippingInfo()"> <p>Billing Address: </p> <p> <span data-bind="text: FirstName() + ' ' + LastName()"></span> <br><span data-bind="text: AddressLine1() + ' ' + AddressLine2()"></span> <br><span data-bind="text: City() + ', ' + State() + ' ' + Zip()"></span> </p> </div> <div class="generalWrapper"> <div class="modHdg"> <h3>Order Total</h3> </div> <div class="cartContents"> <div data-bind="template: {name: 'tempShoppingCart', data:$root}"></div> </div> </div> <div class="modHdg"> <h3>Payment Summary</h3> </div> <div class="pad20"> <p>Payment Method: Credit Card <br>Card Type: <span data-bind="text: objPaymentInfo().CreditCardType()"></span> <br>Cardholder Name: <span data-bind="text: objPaymentInfo().NameOnCreditCard()"></span> <br>Card Number: <span class="valCreditCard" data-bind="text: ventraUtil.maskCreditCardNumber(objPaymentInfo().CreditCardType(),objPaymentInfo().CreditCardNumber())"></span> <br>Expiration: <span data-bind="text: objPaymentInfo().ExpireMonth() + '/' + objPaymentInfo().ExpireYear()"></span></p> </div> </div> </div> <div id="overlay-error" class="siteOverlayAddressValidation"> <div class="overlayBarAddressValidation"> <span class="overlayClose">X</span> </div> <div id="errorOverlayContent" class="overlayContentAddressValidation"> <h1>Please Review</h1> <div id="divErrors" class="margB10"></div> <div data-bind="visible: $root.correctedAddresses() && $root.correctedAddresses().length > 0"> The address entered is not recognized or not in the list of valid mailing addresses. Please select from the list below or correct and verify the address originally entered to continue: </div> <div data-bind="visible: $root.correctedAddresses() && $root.correctedAddresses().length == 0"> The address entered is not in the list of valid mailing addresses. Please correct the address. </div> <div class="margT10" data-bind="with: $root.UserEnteredAddress"> <div> <input type="radio" id="addressEntered" name="SelectedAddress" class="listOfAddresses" data-bind="click: $root.changeSelectedAddress"> Address Entered: </div> <div > <div data-bind="text: AddressLine1"></div> <div data-bind="text: AddressLine2"></div> <div> <span data-bind="text: City"></span> <span data-bind="text: State"></span> <span data-bind="text: Zip"></span> </div> </div> </div> <div class="marg10"> <a href="javascript: void(0);" onclick="$('#overlay-error').overlay().close();">Let me modify the address I entered</a><br/> </div> <div data-bind="visible: $root.correctedAddresses() && $root.correctedAddresses().length > 0 && $root.correctedAddresses()[0].errorCode != null && $root.correctedAddresses()[0].errorCode != 2"> <div class="margT10" id="divCorrectedAddresses" data-bind="foreach: $root.correctedAddresses"> <div> <div> <input type="radio" name="SelectedAddress" class="listOfAddresses" data-bind="click: $root.changeSelectedAddress"> Suggested Address: </div> <div data-bind="text: address1"></div> <div data-bind="text: address2"></div> <div> <span data-bind="text: city"></span> <span data-bind="text: state"></span> <span data-bind="text: postalCode"></span> </div> </div> </div> </div> <div class="padT20"> <div class="formRow"> <div class="formBox"> <button class="btn" data-bind="click: function(){$root.useSelectedAddress($data);}">Use Selected Address</button> </div> </div> </div> <div class="margB20 clear"> </div> </div> </div> <!-- Templates --> <script type="text/html" id="tempShoppingCart"> <div class="pad10 clearfix"> <div class="fLeft center" data-bind="visible: objShoppingCart().vanityCard() != null, with: objShoppingCart().vanityCard"> <img data-bind="attr: { src: desktopImageSrc, alt: logoDescription}" /> <div class="grey" data-bind="text: logoDescription"></div> <span class="grey" data-bind="text: formattedCardFeeAmount"></span> <p style="display: block; " data-bind="visible: $root.CurrentStep() != 6"><a href="#" class="blue" data-bind="click: $root.removeSelectedVanityCard">Remove</a></p> </div> <div class="fLeft center" data-bind="visible: objShoppingCart().product() != null, with: objShoppingCart().product"> <img data-bind="attr: { src: imageSrc, alt: name }" /> <div class="grey" data-bind="text: name"></div> <span class="grey" data-bind="text: formattedPrice"></span> <p style="display: block; " data-bind="visible: $root.CurrentStep() != 6"><a href="#" class="blue" data-bind="click: $root.removeSelectedProduct">Remove</a></p> </div> <div class="fLeft center" data-bind="with: objShoppingCart().cardFee" tabindex="0"> <img src="/cms/images/layout/icons/cardfee.png" alt="Card Fee"> <div class="grey" data-bind="text: name"></div> <span class="grey" data-bind="text: formattedPrice"></span> </div> <div class="fLeft center" data-bind="visible: objShoppingCart().transit() != null, with: objShoppingCart().transit"> <img src="/cms/images/layout/icons/onehundred.png" data-bind="attr: {alt: formattedPrice}" /> <div class="grey">Transit Value</div> <span class="grey" data-bind="text: formattedPrice"></span> <p style="display: block; " data-bind="visible: $root.CurrentStep() != 6"><a href="#" class="blue" data-bind="click: $root.removeSelectedTransit">Remove</a></p> </div> <div class="totals"> <ul> <li class="grey" style="display: list-item; ">Subtotal: <span data-bind="text: ventraUtil.formatCurrency($root.compSubtotal())"></span></li> <li class="grey" style="display: list-item; ">Card Fee: <span data-bind="text: objShoppingCart().cardFee().formattedPrice()"></span></li> <li class="grey" style="display: list-item; ">Special Edition Card Fee: <span data-bind="text: ventraUtil.formatCurrency($root.vanityCardFee())"></span></li> <li class="grey" style="display: list-item; ">Shipping: <span data-bind="text: ventraUtil.formatCurrency($root.shippingPrice())"></span></li> <li class="finalTotal">Total: <span data-bind="text: ventraUtil.formatCurrency($root.compTotal())"></span></li> </ul> </div> </div> </script> <script type="text/html" id="errorSummary"> <div class="diverror margB10 diverror-focusable" data-bind="visible: ko.validation.errorSummary().length > 0" tabindex="0"> <ul class="ulErrorSum" data-bind="foreach: ko.validation.errorSummary, visible: ko.validation.errorSummary().length > 0"> <li data-bind="visible: ko.validation.errorInputIds()[$index()]"><a onclick="event.preventDefault(); errorMessageOnClick(this);" data-bind="text: $data, attr: { href: '#' + ko.validation.errorInputIds()[$index()] }"></a></li> <li data-bind="visible: !ko.validation.errorInputIds()[$index()]"><a onclick="event.preventDefault();" href="#" data-bind="text: $data"></a></li> </ul> </div> </script> <!-- End Templates --> <script type="text/javascript"> $(document).ready(function(){ $(".valPhone").mask("999-999-9999"); }); //#region Classes function Tab(varindex, varname) { this.name = varname; this.index = varindex; this.CssClass = function (curStep) { var curClass = curStep >= this.index ? "currentProgress" : "futureProgress"; if (curStep == this.index) { curClass += " on"; } return 'step' + this.index + ' ' + curClass; }; } function ShoppingCart(card) { var self = this; self.vanityCard = ko.observable().extend({ required: { message: 'Please choose a card', params: true } }); self.product = ko.observable(); self.product.subscribe(function(newValue) { if (newValue ==null) { $('#ui-id-2').trigger('click'); } }); self.transit = ko.observable(null); self.cardFee = ko.observable(card); self.ShippingType = ko.observable().extend({ required: { message: 'Shipping Type is required', params: true}}); self.shippingPrice = 0; self.vanityCardFee = 0; self.compSubtotal = 0; self.compTotal = 0; } function CardInformation() { var self = this; self.CardNickname = ko.observable().extend({ required: { message: 'Nickname for Card is required', params: true } }); } function ShippingInformation() { var self = this; self.FirstName = ko.observable('').extend({ required:{message: 'First Name is required', params: true}, firstnamelastname: { message: 'First Name must start with a letter and can only have letters, hyphens and spaces', params: true } }); self.LastName = ko.observable('').extend({ required: { message: 'Last Name is required', params: true }, firstnamelastname: { message: 'Last Name must start with a letter and can only have letters, hyphens and spaces', params: true } }); self.AddressLine1 = ko.observable('').extend({ required: {message: 'Address Line 1 is required', params: true}, address: { message: 'Address Line 1 can only have letters, numbers, hyphens and spaces',params: true}, pattern: { params: '^[1-9a-zA-Z]', message: 'Address Line 1 must start with a letter or non-zero digit' } }); self.AddressLine2 = ko.observable('').extend({ address: { message: 'Address Line 2 can only have letters, numbers, hyphens and spaces',params: true}, pattern: { params: '^[1-9a-zA-Z]', message: 'Address Line 2 must start with a letter or non-zero digit' } }); self.City = ko.observable('').extend({ required: {message: 'City is required', params: true}, city: { message: 'City must start with a letter and can only have letters and spaces',params: true} }); self.State = ko.observable('IL').extend({notEqual: {message: 'State is required', params:'Select'}}); self.Zip = ko.observable('').extend({ required: {message: 'Zip is required', params: true}, zip: { message: 'Zip must be exactly 5 digits',params: true} }); self.Email = ko.observable('').extend({ required: { message: 'Email is required', params: true } }).extend({email: { message: 'Email is not valid', params: true }}); self.ConfirmEmail = ko.observable('').extend({ equal: { message: "Emails do not match", params: self.Email } }); self.PrimaryPhone = ko.observable('').extend({ required:{ message: 'Primary Phone is required', params:true }, phoneUS: { message: 'Primary Phone is invalid', params: true } }); self.FullName = ko.computed(function(){ return ventraUtil.formatUndefined(self.FirstName()) + " " + ventraUtil.formatUndefined(self.LastName()); }); self.checkEmailMessage = ko.observable(); self.checkEmail = function (viewModel) { //reset the variable flags self.checkEmailMessage(''); ventraUtil.hideMessage('#account-message-container'); //the user pressed the "Next" button - so first check required fields validation for the screen var validateTheseObjects = [viewModel.objCardInfo, viewModel.objShippingInfo, viewModel.objAccountInfo]; var keepgoing = ventraUtil.validation.showErrors(viewModel, validateTheseObjects); if (!keepgoing) { return false; } if (keepgoing) { //check that email address doesn't already exist var postvarEmail = { "s":1, "email": self.Email() }; $.ajax({ url: "/ajax/NAM.asmx/IsEmailRegistered", type: "POST", contentType: "application/json", data: ko.toJSON(postvarEmail), beforeSend: function () { startLoading("#divStep2"); }, success: function (data) { ventraUtil.hideMessage('#account-message-container'); if (data.d.success) { self.checkEmailMessage('<a href="#txtEmail">' + data.d.result.message + '</a>'); if (data.d.result.isRegistered==false) { //all ok - email is not registered viewModel.objAccountInfo().checkUserName(true, viewModel); } else { //email is already registered ventraUtil.showMessage('error', '<a href="#txtEmail">' + data.d.result.message + '</a>', '#account-message-container'); $('body,html').animate({ scrollTop: 0 }); } } else { //data.d.success is false --> a contained error came back from the call - show a general error message to the user ventraUtil.showMessage('error', '<a href="#txtEmail">An error occurred when checking if this email is already registered.</a>', '#account-message-container'); $('body,html').animate({ scrollTop: 0 }); } return false; }, error: function (jqXHR, textStatus, errorThrown) { if (errorThrown) { ventraUtil.showMessage('error', ventraUtil.getErrorMessage(jqXHR, textStatus, errorThrown), '#account-message-container'); $('body,html').animate({ scrollTop: 0 }); } return false; }, complete: function () { stopLoading("#divStep2"); } }); } //else } //self.checkEmail } function AccountInformation() { var self = this; self.UserName = ko.observable('').extend({ required: {message: 'Username is required', params:true}, pattern: { params: '^[a-zA-Z0-9_\.@]{4,64}$', message: 'Username must include a minimum of 4 characters and can include alphanumeric and select special characters ("_", ".", "@")' } }); self.IsUsernameAvailable = ko.observable(false); self.checkUserNameMessage = ko.observable(''); self.NewPassword = ko.observable('').extend({ required: { message: 'New Password is required', params: true }, password: { message: 'Password must have a minimum of 8 characters and include one upper case letter, one lower case letter, and at least one number or one of these characters (!@#$%^) No other characters are allowed.', params: { minLength:8, matchLowerCaseLetter:true, matchUpperCaseLetter:true, matchNumber:true, matchSpecialChar:true, minMatch:3}} }); self.ConfirmPassword = ko.observable('').extend({ equal: { message: "Passwords do not match", params: self.NewPassword } }); self.AccountAccessCode = ko.observable('').extend({ required: {message: 'Account Access Code is required', params:true}, pattern: { params: '^[0-9][0-9]{3}$|^$', message: 'Account Access Code must be exactly 4 digits' } }); self.SecurityQuestion = ko.observable().extend({ required: { message: 'Security Question is required', params: true } }); self.Answer = ko.observable('').extend({required: {message: 'Answer is required', params: true}}); self.OptIns = ko.observableArray([]); self.TermsAndConditions = ko.observable(false).extend({ equal: {message: 'Term and Conditions not accepted' , param: true}}); self.checkUserName = function (isNextButton, viewModel) { //reset the variable flags self.checkUserNameMessage(''); ventraUtil.hideMessage('#account-message-container'); //check validation on the UserName field var userNameErrors = ko.validation.group([self.UserName]); userNameErrors.showAllMessages(); if (userNameErrors() && userNameErrors().length != 0) { $('body,html').animate({ scrollTop: 0 }); return false; } var postvar = { "s":1, "u": self.UserName() }; $.ajax({ url: "/ajax/NAM.asmx/CheckUserName", type: "POST", contentType: "application/json", data: ko.toJSON(postvar), beforeSend: function () { startLoading("#divStep2UsernameAjax"); }, success: function (data) { ventraUtil.hideMessage('#account-message-container'); if (data.d.success) { self.IsUsernameAvailable(data.d.result.isValid); self.checkUserNameMessage('<a href="#txtUserName">' + data.d.result.message + '</a>'); if (data.d.result.isValid == true) { //all ok - username is not registered //did the user press the "Next" button or the "Check Username Availability" button? //if the user pressed the "Check Username Availability" button then //we have already set the checkUserNameMessage message and IsUsernameAvailable above if (isNextButton) { //the user pressed the "Next" button so move on to address validation viewModel.addressValidation("shipping", false); } } else { //username is already registered ventraUtil.showMessage('error', '<a href="#txtUserName">' + data.d.result.message + '</a>', '#account-message-container'); //Do not scroll to the top of the page. Keep the user here at this button and textbox field } } else { if (data.d.error) { //data.d.success is false --> a contained error came back from the call - show the error message to the user at top of page ventraUtil.showMessage('error', '<a href="#txtUserName">' + data.d.error + '</a>', '#account-message-container'); } else { ventraUtil.showMessage('error', '<a href="#txtUserName">An error occurred when checking if this username is already registered.</a>', '#account-message-container'); } $('body,html').animate({ scrollTop: 0 }); } return false; }, error: function (jqXHR, textStatus, errorThrown) { if (errorThrown) { ventraUtil.showMessage('error', ventraUtil.getErrorMessage(jqXHR, textStatus, errorThrown), '#account-message-container'); $('body,html').animate({ scrollTop: 0 }); } return false; }, complete: function () { stopLoading("#divStep2UsernameAjax"); } }); return false; }; } function BillingInformation() { var self = this; self.IsBillingSameAsShipping = ko.observable(true); self.FirstName = ko.observable().extend({ required: {message: 'First Name is required', params: true}, firstnamelastname: { message: 'First Name must start with a letter and can only have letters, hyphens and spaces',params: true} }); self.LastName = ko.observable().extend({ required: {message: 'Last Name is required', params: true}, firstnamelastname: { message: 'Last Name must start with a letter and can only have letters, hyphens and spaces',params: true} }); self.AddressLine1 = ko.observable().extend({ required: {message: 'Address Line 1 is required', params: true}, address: { message: 'Address Line 1 can only have letters, numbers, hyphens and spaces',params: true}, pattern: { params: '^[1-9a-zA-Z]', message: 'Address Line 1 must start with a letter or non-zero digit' } }); self.AddressLine2 = ko.observable('').extend({ address: { message: 'Address Line 2 can only have letters, numbers, hyphens and spaces',params: true}, pattern: { params: '^[1-9a-zA-Z]', message: 'Address Line 2 must start with a letter or non-zero digit' } }); self.City = ko.observable().extend({ required: {message: 'City is required', params: true}, city: { message: 'City must start with a letter and can only have letters and spaces',params: true} }); self.State = ko.observable('IL').extend({notEqual: {message: 'State is required', params:'Select'}}); self.Zip = ko.observable().extend({ required: {message: 'Zip is required', params: true}, zip: { message: 'Zip must be exactly 5 digits',params: true} }); self.PrimaryPhone = ko.observable().extend({ required:{ message: 'Primary Phone is required', params:true }, phoneUS: { message: 'Primary Phone is invalid', params: true } }); }; function PaymentInformation() { var self = this; self.CreditCardType = ko.observable('').extend({ required: { message: 'Invalid payment card number entered', params: true } }); self.NameOnCreditCard = ko.observable('').extend({required: {message: 'Name on Card is required', params: true}}); self.CreditCardNumber = ko.observable().extend({required: { message: 'Card Number is required', params: true } }); self.CreditCardNumber.subscribe(function (newValue) { newValue = newValue.replace(/[^0-9]/g, ""); self.CreditCardNumber(newValue); if (newValue.startsWith("34") || newValue.startsWith("37")) { self.CreditCardType("American Express"); } else if (newValue.startsWith("4")) { self.CreditCardType("Visa"); } else if ( $.inArray(newValue.substr(0, 2), ["51", "52", "53", "54", "55"]) != -1 || (parseInt(newValue.substr(0,6)) >= 222100 && parseInt(newValue.substr(0,6)) <= 272099) ) { self.CreditCardType("MasterCard"); } else if ($.inArray(newValue.substr(0, 3), ["644", "645", "646", "647", "648", "649"]) != -1 || newValue.startsWith("6011") || newValue.startsWith("65") || (parseInt(newValue.substr(0,6)) >= 622126 && parseInt(newValue.substr(0,6)) <= 622925)) { self.CreditCardType("Discover"); } else { self.CreditCardType(""); } }); self.CVV = ko.observable().extend({ required: {message: 'CVV is required', params: true}, pattern: { params: '^[0-9]{3,4}$', message: 'CVV must be between 3 and 4 numbers.' } }); self.ExpireMonth = ko.observable('Month').extend({notEqual: {message: 'Card Month is required', params:'Month'}}); self.ExpireYear = ko.observable('Year').extend({notEqual: {message: 'Card Year is required', params:'Year'}}); self.CCExpireFullYear = ko.observable().extend({ futureDate: { message: 'Credit Card is expired', params: true } }); self.ExpireMonth.subscribe(function (newValue) { if (newValue != 'Month' && self.ExpireYear() != 'Year') { var expiredYear = self.ExpireYear().toString(); if (self.ExpireYear().toString().length == 2) { var expiredYear = new Date().getFullYear().toString().substring(0, 2) + self.ExpireYear().toString(); } var fullYear = new Date(expiredYear, newValue, 0); self.CCExpireFullYear(fullYear); } }); self.ExpireYear.subscribe(function (newValue) { if (self.ExpireMonth() != 'Month' && newValue != 'Year') { var expiredYear = newValue.toString(); if (newValue.toString().length == 2) { expiredYear = new Date().getFullYear().toString().substring(0, 2) + newValue.toString(); } var expiredMonth = self.ExpireMonth(); var fullYear = new Date(expiredYear, expiredMonth, 0); self.CCExpireFullYear(fullYear); } }); }; function CardFee(name, formattedPrice, amount) { var self = this; self.name = ko.observable(name); self.formattedPrice = ko.observable(formattedPrice); self.price = ko.observable(amount); }; function OrderConfirmation() { var self = this; self.OrderNumber = ko.observable(); self.PaymentAuthorization = ko.observable(); }; //#end region Classes //#region AppViewModel function AppViewModel() { var self = this; self.CurrentStep = ko.observable(1); self.TopTabs = ko.observableArray([ new Tab(1, '<span>Select</span> Card'), new Tab(2, '<span>Select</span> Product'), new Tab(3, '<span>Card</span> Info'), new Tab(4, '<span>Review</span> Order'), new Tab(5, '<span>Payment</span> Info'), new Tab(6, '<span>Order</span> Confirmation') ]); //#region Global objects var siteId = "1"; self.objShoppingCart = ko.observable(new ShoppingCart(new CardFee('Card Fee', ventraUtil.formatCurrency(0), 0))).extend({ hasProductOrTransit: true }); self.objAccountInfo = ko.observable(new AccountInformation()); self.objBillingInfo = ko.observable(new BillingInformation()); self.objCardInfo = ko.observable(new CardInformation()); self.objShippingInfo = ko.observable(new ShippingInformation()); self.objOrderConfirmation = ko.observable(new OrderConfirmation()); self.objPaymentInfo = ko.observable(new PaymentInformation()); self.objSecurityQuestions = ko.observableArray([]); self.objShippingTypes = ko.observableArray([]); self.Catalog = ko.observableArray(); self.CardDeposit = ko.observable(); self.CardFee = ko.observable(); self.VanityCards = ko.observableArray(); self.VanityCardsAvailable = ko.observable(true); self.correctedAddresses = ko.observableArray(); self.UserEnteredAddress = ko.observable(); self.submitStep = ko.observable(); self.userSelectedAddressChanged = ko.observable(new AddressInformation()); self.changeSelectedAddress = function (userSelectedAddress) { //userSelectedAddress can be have one of two forms - either the json type coming back from the system or the knockoutjs user entered type //first check to see which type the user has selected if (userSelectedAddress.address1) { self.userSelectedAddressChanged().AddressLine1(userSelectedAddress.address1 ? userSelectedAddress.address1 : ""); self.userSelectedAddressChanged().AddressLine2(userSelectedAddress.address2 ? userSelectedAddress.address2 : ""); self.userSelectedAddressChanged().City(userSelectedAddress.city ? userSelectedAddress.city : ""); self.userSelectedAddressChanged().State(userSelectedAddress.state ? userSelectedAddress.state : ""); self.userSelectedAddressChanged().Zip(userSelectedAddress.postalCode ? userSelectedAddress.postalCode : ""); } else if (userSelectedAddress.AddressLine1()) { self.userSelectedAddressChanged().AddressLine1(userSelectedAddress.AddressLine1() ? userSelectedAddress.AddressLine1() : ""); self.userSelectedAddressChanged().AddressLine2(userSelectedAddress.AddressLine2() ? userSelectedAddress.AddressLine2() : ""); self.userSelectedAddressChanged().City(userSelectedAddress.City() ? userSelectedAddress.City() : ""); self.userSelectedAddressChanged().State(userSelectedAddress.State() ? userSelectedAddress.State() : ""); self.userSelectedAddressChanged().Zip(userSelectedAddress.Zip() ? userSelectedAddress.Zip() : ""); } return true; }; self.useSelectedAddress = function (obj) { //close the address validation overlay $('#overlay-error').overlay().close(); //first convert the userSelectedAddressChanged object into the generic correctedAddress object for SetAvShippingAddress var correctedAddress = { "address1": self.userSelectedAddressChanged().AddressLine1(), "address2": self.userSelectedAddressChanged().AddressLine2(), "city": self.userSelectedAddressChanged().City(), "state": self.userSelectedAddressChanged().State(), "postalCode": self.userSelectedAddressChanged().Zip() } //now set the corrected address that will be saved back to the system self.SetAvShippingAddress(correctedAddress); //now call goToNextTab or purchaseCard if (self.submitStep()) { self.purchaseCard(); } else { self.goToNextTab(); } }; /* *Address Validation - Set the address that will be saved back to the system * */ self.SetAvShippingAddress = function(correctedAddress) { if (self.CurrentStep() == 3) { self.objShippingInfo().AddressLine1(correctedAddress.address1?correctedAddress.address1:""); self.objShippingInfo().AddressLine2(correctedAddress.address2?correctedAddress.address2:""); self.objShippingInfo().City(correctedAddress.city?correctedAddress.city:""); self.objShippingInfo().State(correctedAddress.state?correctedAddress.state:""); self.objShippingInfo().Zip(correctedAddress.postalCode?correctedAddress.postalCode:""); } else { self.objBillingInfo().AddressLine1(correctedAddress.address1?correctedAddress.address1:""); self.objBillingInfo().AddressLine2(correctedAddress.address2?correctedAddress.address2:""); self.objBillingInfo().City(correctedAddress.city?correctedAddress.city:""); self.objBillingInfo().State(correctedAddress.state?correctedAddress.state:""); self.objBillingInfo().Zip(correctedAddress.postalCode?correctedAddress.postalCode:""); } } //computed self.shippingPrice = ko.computed(function () { var shippingAmount = 0; if (self.objShoppingCart().ShippingType() != null && self.objShoppingCart().ShippingType() != "") { for (var shippingTypeCount=0; shippingTypeCount<self.objShippingTypes().length; shippingTypeCount++){ if(self.objShippingTypes()[shippingTypeCount].shippingTypeId == self.objShoppingCart().ShippingType()){ shippingAmount = self.objShippingTypes()[shippingTypeCount].feeAmount; } } } return shippingAmount; }); self.compSubtotal = ko.computed(function () { var priceProduct = 0; var priceTransit = 0; var subTotal = 0; if (self.objShoppingCart().product() != null && self.objShoppingCart().product() != "") { priceProduct = self.objShoppingCart().product().price; } if (self.objShoppingCart().transit() != null && self.objShoppingCart().transit()!= "") { priceTransit = self.objShoppingCart().transit().amount; } subTotal = priceProduct + priceTransit; return subTotal; }); self.vanityCardFee = ko.computed(function () { var vanityCardFee = 0; if (self.objShoppingCart().vanityCard() != null && self.objShoppingCart().vanityCard() != "") { vanityCardFee = self.objShoppingCart().vanityCard().cardFeeAmount; } return vanityCardFee; }); self.compTotal= ko.computed(function () { return (self.compSubtotal() + self.vanityCardFee() + self.objShoppingCart().cardFee().price() + self.shippingPrice()); }); self.errors = ko.observableArray(); self.errorSummary = ko.observableArray(); self.ProductsAvailable = ko.observable(true); self.TransitsAvailable = ko.observable(true); //#end region Global objects //#region GlobalFunctions self.EditAccountAccessInformation = function() { self.goToPreviousTab(); $('html, body').animate({ scrollTop: $("#divAccountAccessInformation").offset().top }, 400); }; self.EditShippingInformation = function() { self.goToPreviousTab(); $('html, body').animate({ scrollTop: $("#divShippingInformation").offset().top }, 400); }; self.goToNextTab = function () { ventraUtil.GoToNextTab(self); if (self.CurrentStep() == 6) { $('.tracker').attr('src','HTTPS://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=354497&ns=1'); } $('.progressBar').attr('tabindex', '0').focus(); return false; }; self.goToPreviousTab = function () { self.objPaymentInfo().CVV(''); ventraUtil.GoToPreviousTab(self); $('.progressBar').attr('tabindex', '0').focus(); return false; }; self.changeSelectedVanityCard = function (card) { self.objShoppingCart().vanityCard(card); $('html,body').animate({ scrollTop: $('.cartContents').offset().top }, 400, function () { $('.cartContents').attr('tabindex', '0').focus(); }); return true; }; self.changeSelectedProduct = function (prod) { self.objShoppingCart().product(prod); return true; }; self.changeSelectedTransit = function (tran) { self.objShoppingCart().transit(tran); return true; }; self.removeSelectedVanityCard = function () { self.objShoppingCart().vanityCard(null); $('.rbVanityCards').attr('checked', false); self.CurrentStep(1); return true; }; self.removeSelectedProduct = function () { self.objShoppingCart().product(null); $('.rbProducts').attr('checked', false); $('#rbNoneProduct').attr('checked', true); if (self.objShoppingCart().transit() == null || self.objShoppingCart().transit() === undefined) self.CurrentStep(2); return true; }; self.removeSelectedTransit = function () { self.objShoppingCart().transit(null); $('.rbTransits').attr('checked', false); $('#rbNoneTransit').attr('checked', true); if (self.objShoppingCart().product() == null || self.objShoppingCart().product() === undefined) self.CurrentStep(2); return true; }; self.FilterProducts = function (filterBy) { //debugger; if (filterBy == null) { return Products; } else { return ko.utils.arrayFilter(self.Catalog().Products, function (prod) { if (prod.pageNumber == filterBy) { return prod; } }); } }; self.addressValidation = function (addressType, submitStep) { //do not do any UPS address validation if (submitStep) { self.purchaseCard(); } else { self.goToNextTab(); } } self.processOrder = function () { var validateTheseObjects; self.objBillingInfo().IsBillingSameAsShipping() ? validateTheseObjects = self.objPaymentInfo : validateTheseObjects = [self.objPaymentInfo, self.objBillingInfo]; if (!ventraUtil.validation.showErrors(self, validateTheseObjects)) { return true; //has errors } if (confirm("Are you sure you want to submit this order?")) { if (self.objBillingInfo().IsBillingSameAsShipping() == false) { //billing and shipping are different - so need to validate billing address self.addressValidation("billing", true); } else { //no need to validate billing address since it is same as shipping address and we already validated that //so call the submit purchaseCard function self.purchaseCard(); } } } self.purchaseCard = function () { var ajaxURL = "/ajax/NAM.asmx/PurchaseOSFSCard"; //set the shopping cart variables self.objShoppingCart().shippingPrice = self.shippingPrice(); self.objShoppingCart().compSubtotal = self.compSubtotal(); self.objShoppingCart().compTotal = self.compTotal(); var postData = { "TransitMediaInfo" : self.objCardInfo(), "ShippingInfo" : self.objShippingInfo(), "AccountInfo" : self.objAccountInfo(), "BillingInfo" : self.objBillingInfo(), "PaymentInfo": self.objPaymentInfo(), "ShoppingCart": self.objShoppingCart(), "CardDeposit" : self.CardDeposit(), "CardFee" : self.CardFee(), "s" : siteId }; $.ajax({ url: ajaxURL, type: "POST", contentType: "application/json", data: ko.toJSON(postData), beforeSend: function () { startLoading("#divSubmitStep"); }, success: function (data) { if (data.d.success) { self.objOrderConfirmation().OrderNumber(data.d.Confirmation.OrderNumber); self.objOrderConfirmation().PaymentAuthorization(data.d.Confirmation.PaymentAuthorization); self.goToNextTab(); } else if (data.d.error) { overlayDisplay(data.d.error, { 'error': 'true' }); } }, error: function(jqXHR, textStatus, errorThrown){ if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function(){ stopLoading("#divSubmitStep"); } }); } //#end region GlobalFunctions //#region Validation self.ValidationStep1 = function () { var validateTheseObjects = [self.objShoppingCart().vanityCard]; return ventraUtil.validation.showErrors(self, validateTheseObjects); } self.ValidationStep2 = function () { var validateTheseObjects = [self.objShoppingCart().vanityCard, self.objShoppingCart]; return ventraUtil.validation.showErrors(self, validateTheseObjects); } self.ValidationStep3 = function () { var validateTheseObjects = [self.objCardInfo, self.objShippingInfo, self.objAccountInfo]; return ventraUtil.validation.showErrors(self, validateTheseObjects); } function showErrorsOverlay(errors) { $("#divErrors").html(errors); var $overlayId = $("#overlay-error"); $overlayId.overlay({ api: true, top: '10%', closeOnClick: true, oneInstance: false, expose: { color: '#000', loadSpeed: 0, closeSpeed: 0, opacity: 0.50 } }).load(); $overlayId.find('.overlayClose').click(function () { $overlayId.overlay().close(); }); $overlayId.find('.close').click(function () { $overlayId.overlay().close(); }); $overlayId.bgIframe().find('.overlayClose').click(function () { $overlayId.overlay().close(); }); $overlayId.find('.overlayCloseAv').click(function () { $overlayId.overlay().close(); }); } //#end region Validation //#region Initialization var postvar = "{s:1}"; var postvarVanityCards = { "s":1, "CardTypes": 1, "IncludeDefaultCard": true }; $.ajax({ url: "/ajax/NAM.asmx/GetVanityCards", type: "POST", contentType: "application/json", data: ko.toJSON(postvarVanityCards), beforeSend: function () { startLoading("#divVanityCards"); }, success: function (data) { if (data.d.success) { self.VanityCards(data.d.result); } else { if (data.d.error) { overlayDisplay(data.d.error, { 'error': 'true' }); } } }, error: function (jqXHR, textStatus, errorThrown) { if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function () { stopLoading("#divVanityCards"); } }); $.ajax({ url: "/ajax/NIS.asmx/GetProducts", type: "POST", contentType: "application/json", data: postvar, beforeSend: function () { startLoading("#divProducts"); }, success: function (data) { self.Catalog(data.d); self.CardDeposit(data.d.CardDeposit); self.CardFee(data.d.CardFee); self.objShoppingCart().cardFee().price(self.CardDeposit() + self.CardFee()); self.objShoppingCart().cardFee().formattedPrice(ventraUtil.formatCurrency(self.CardDeposit() + self.CardFee())); if (data.d.Products && data.d.Products.length > 0) { self.ProductsAvailable(true); } else { self.ProductsAvailable(false); } if (data.d.Transits && data.d.Transits.length > 0) { self.TransitsAvailable(true); } else { self.TransitsAvailable(false); } }, error: function(jqXHR, textStatus, errorThrown){ if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function(){ stopLoading("#divProducts"); } }); $.ajax({ url: "/ajax/NAM.asmx/GetSecurityQuestions", type: "POST", contentType: "application/json", data: postvar, beforeSend: function () { startLoading("#drpSecurityQuestion"); }, success: function (data) { if (data.d.success) { self.objSecurityQuestions(data.d.result); } else { if (data.d.error) { overlayDisplay(data.d.error, { 'error': 'true' }); } } }, error: function(jqXHR, textStatus, errorThrown){ if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function () { stopLoading("#drpSecurityQuestion"); } }); $.ajax({ url: "/ajax/NAM.asmx/GetShippingTypeList", type: "POST", contentType: "application/json", data: postvar, beforeSend: function () { startLoading("#drpShippingTypes"); }, success: function (data) { if (data.d.success) { self.objShippingTypes(data.d.result); } else { if (data.d.error) { overlayDisplay(data.d.error, { 'error': 'true' }); } } }, error: function(jqXHR, textStatus, errorThrown){ if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function () { stopLoading("#drpShippingTypes"); } }); $.ajax({ url: "/ajax/NAM.asmx/GetOptIn", type: "POST", contentType: "application/json", data: postvar, beforeSend: function () { startLoading("#tOptIns"); }, success: function (data) { if (data.d.success) { for (var optInCount=0; optInCount<data.d.result.length; optInCount++){ data.d.result[optInCount].email = true; data.d.result[optInCount].sms = false; } self.objAccountInfo().OptIns(data.d.result); } else { if (data.d.error) { overlayDisplay(data.d.error, { 'error': 'true' }); } } }, error: function (jqXHR, textStatus, errorThrown) { if (errorThrown) { overlayDisplay(errorThrown, { 'error': 'true' }); } }, complete: function () { stopLoading("#tOptIns"); } }); //#end region Initialization } //#end region AppViewModel //#region Custom Validation ko.validation.rules['hasProductOrTransit'] = { validator: function (val, required) { if (!required) // if they passed: { required: false }, then don't require this return true; return (val.product() != null && val.product() != "") || (val.transit() != null && val.transit() != ""); }, message: 'At least one product must be selected' }; //#end region Custom Validation $(document).ready(function(){ ko.validation.registerExtenders(); //initialize the config of the validation. talks to ko.validation ventraUtil.validation.initialize(); ko.applyBindings(new AppViewModel()); }); </script> </main> </div> <footer class="footer"> <div class="container_12 clearfix"> <div class="grid_12"> <div class="links"> <ul> <li> <a href="/contact-customer-service/">Contact Us</a></li> <li> <a href="/faq/">FAQ</a></li> <li> <a href="http://www.transitchicago.com/">CTA</a></li> <li> <a href="http://www.pacebus.com/">PACE</a></li> <li> <a href="http://www.metrarail.com/">METRA</a></li> <li> <a href="/about/fare-programs/">Fares</a></li> <li> <a href="/privacy-policy/">Privacy Policy</a></li> <li> <a href="/terms/">Terms</a></li> <li> <a href="/terms/">Languages</a> [<a href="/">EN</a>] [<a href="/polish/">PL</a>] [<a href="/mandarin/">Zh</a>] [<a href="/spanish/">Es</a>]</li> </ul> </div> <div class="social"> <div class="addthis_toolbox addthis_default_style addthis_32x32_style"> <ul> <li class="facebook"><a class="addthis_button_facebook at300b" href="https://www.facebook.com/VentraChicago"><span></span></a></li> <li class="twitter"><a class="addthis_button_twitter at300b" href="https://twitter.com/VentraChicago"><span></span></a></li> <li class="instagram"><a class="addthis_button_instagram at300b" href="https://www.instagram.com/VentraChicago/"><span></span></a></li> </ul> <div class="atclear"></div> </div> </div> <div class="clearfix"> <p class="smaller grey"> © 2024 Chicago Transit Authority. All Rights Reserved. All trademarks, service marks and trade names referenced in this material are the property of their respective owners. Cards are issued by Pathward™, Member FDIC, pursuant to license by MasterCard International Incorporated. MasterCard and the MasterCard Brand Mark are registered trademarks of MasterCard International Incorporated.</p> </div> </div> </div> </footer> <!-- start of global MOC wrapper --> <div id="overlay-main" class="siteOverlay"> <div class="overlayBar"><button type="button" class="overlayClose">close (X)</button></div> <div class="overlayContent" id="mainOverlayContent"></div> </div> <!-- end of global MOC wrapper --> <div> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="3989C74E" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="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" /> </div> <script type="text/javascript"> //<![CDATA[ generateModal()//]]> </script> <div><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="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" /></div></form> <script> /* <![CDATA[ */ var externalLinkSafeList = new Array('facebook.com','twitter.com','www.pacebus.com','transitchicago.com','pacebus.com','www.transitchicago.com','www.facebook.com','youtube.com','www.youtube.com','www.rtachicago.org','rtachicago.org','www.ventrachicago.com','ventrachicago.com','www.instagram.com','instagram.com'); jQuery.data(document.body, "EnableExternalLinkWarning", true); jQuery.data(document.body, "ExternalLinkTemplate", '\x3cdiv\x3e\x3ch1\x3eYou are now leaving our site\x3c\x2fh1\x3e \x3cp\x3eYou are now leaving the Ventra transit website.\x3c\x2fp\x3e\x3cdiv id\x3d\x22external_link_template\x22\x3e\x0d\x0a \x3cdiv id\x3d\x22external_link\x22\x3e\x3c\x2fdiv\x3e\x0d\x0a \x3cdiv style\x3d\x22text-align\x3a center\x3b margin-top\x3a 5px\x3b\x22\x3e\x0d\x0a \x3cinput id\x3d\x22btnExternalLinkOk\x22 type\x3d\x22button\x22 value\x3d\x22OK\x22 class\x3d\x22btn modalClose\x22 \x2f\x3e\x0d\x0a \x3cinput id\x3d\x22btnExternalLinkCancel\x22 type\x3d\x22button\x22 value\x3d\x22Cancel\x22 class\x3d\x22btn modalClose\x22 \x2f\x3e\x0d\x0a \x3c\x2fdiv\x3e\x0d\x0a\x3c\x2fdiv\x3e\x3c\x2fdiv\x3e'); /* ]]> */ </script> <script type="text/javascript" src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=1&cb=1908696403" async></script></body> </html>